diff --git a/BluePrismConnector.js b/BluePrismConnector.js new file mode 100644 index 00000000..31b50d55 --- /dev/null +++ b/BluePrismConnector.js @@ -0,0 +1,137 @@ +var config = require("./config"); +var botId = "st-007da037-67f9-55c3-bf93-6272ca639359"; //change this to link your bot +var botName = "BotName"; +var soap = require('strong-soap').soap; +var sdk = require("./lib/sdk"); + +/* + * This is the function to invoke a BluePrism Process (using SOAP client service) + * In order to invoke the desired process successfully, that process must be exposed as a WebService from the BluePrism Studio. + * + * For more Information on "How to expose process luePrism Process as a WebService" visit the following link, + * https://usermanual.wiki/Pdf/Blue20Prism20User20Guide2020Web20Services.795353567/html + * + * Please Provide the credentials of the BluePrism Studio Account in Config.json + */ +function executeBlueprismRequest(requestId, blueprismRequest, callbacks) { + + var url = blueprismRequest.url; + var endPoint = blueprismRequest.url; + if(!url.endsWith('?wsdl')){ + url = url+"?wsdl"; + } + + if(endPoint.endsWith('?wsdl')){ + endPoint = endPoint.split('?')[0]; + } + + + return new Promise(function(resolve, reject) { + soap.createClient(url, function(err, client) { + if (err || !client) { + callbacks.on_failure(requestId, err); + } + else{ + client.setEndpoint(endPoint); + client.setSecurity(new soap.BasicAuthSecurity(config.bluePrism.username, config.bluePrism.password)); + client[blueprismRequest.operation](blueprismRequest.attributes || {}, function(err, result, rawResponse, soapHeader, rawRequest) { + if(err){ + callbacks.on_failure(requestId, err); + } + callbacks.on_success(requestId, rawResponse); + }) + } + }); + }); +} + +/* + * Responds to the webhook asynchronously with the success flag. + */ +function onSuccess(requestId, result) { + sdk.getSavedData(requestId) + .then(function(data) { + console.log(result); + data.context.blueprismResponse = result; + data.context.successful = true; + + sdk.respondToHook(data); + }); +} + +/* + * Responds to the webhook asynchronously with the Failure flag. + */ +function onFailure(requestId, err) { + sdk.getSavedData(requestId) + .then(function(data) { + data.context.successful = false; + data.context.blueprismResponse = err; + sdk.respondToHook(data); + }); +} + +//call executeBlueprismRequest with the requestId. This service is expected to respond asynchronously. +//'requestId' must be passed along all asynchronous flows, to allow the BotKit to respond +// back to the hook once the async process is completed. +function callBluePrism(requestId, blueprismRequest) { + executeBlueprismRequest(requestId, blueprismRequest, { + on_success : onSuccess, + on_failure : onFailure + }); +} + + + +module.exports = { + botId : botId, + botName : botName, + + on_user_message : function(requestId, data, callback) { + if (data.message === "Hi") { + data.message = "Hello"; + //Sends back 'Hello' to user. + return sdk.sendUserMessage(data, callback); + } else if(!data.agent_transfer){ + //Forward the message to bot + return sdk.sendBotMessage(data, callback); + } else { + data.message = "Agent Message"; + return sdk.sendUserMessage(data, callback); + } + }, + on_bot_message : function(requestId, data, callback) { + if (data.message === 'hello') { + data.message = 'The Bot says hello!'; + } + //Sends back the message to user + + return sdk.sendUserMessage(data, callback); + }, + on_agent_transfer : function(requestId, data, callback){ + return callback(null, data); + }, + on_event : function (requestId, data, callback) { + console.log("on_event --> Event : ", data.event); + return callback(null, data); + }, + on_alert : function (requestId, data, callback) { + console.log("on_alert --> : ", data, data.message); + return sdk.sendAlertMessage(data, callback); + }, + on_webhook : function(requestId, data, componentName, callback) { + /*The request to execute the BlluePrism Process from the Bot is received here..... + * the request data from the Bot is stored in "bluePrismRequest" which need to be sent + * through out the process of invoking Process. + */ + var context = data.context; + console.log(context.bluePrismRequest); + sdk.saveData(requestId, data) + .then(function() { + callBluePrism(requestId, context.bluePrismRequest); + callback(null, new sdk.AsyncResponse()); + }); + + } + +}; diff --git a/README.md b/README.md index a64ffa6f..7c42bec5 100644 --- a/README.md +++ b/README.md @@ -3,3 +3,6 @@ Kore Bot Server SDK is set of libraries which gives you more control over the bots you build on Kore Bots platform. Once you build the Dialog task using Dialog Editor, you can subscribe to all the message and webhook events. You can easily add event handlers in the SDK and get the handle over the messages and webhook events Visit https://developer.kore.com/docs/bots/bot-builder/defining-bot-tasks/dialog-tasks/using-the-botkit-sdk/ for configuration instructions and API documentation. + +BotKit SDK also includes Blue Prism Connector for integrating your Kore.ai bots with Blue Prism RPA Services. Visit +https://developer.kore.ai/docs/bots/sdks/botkit-sdk-tutorial-blue-prism/ for configuration instructions. \ No newline at end of file diff --git a/config.json b/config.json index 9402d647..638f6066 100644 --- a/config.json +++ b/config.json @@ -13,6 +13,10 @@ "appId": "test_app_id2" } }, + "bluePrism":{ + "username" : "username_of_BluePrism_Studio_Process_Developer_Account", + "password" : "xxxxxxxx" + }, "redis": { "options": { "host": "localhost", diff --git a/lib/app/routes.js b/lib/app/routes.js index 85869182..ad8c68aa 100644 --- a/lib/app/routes.js +++ b/lib/app/routes.js @@ -18,6 +18,24 @@ function loadroutes(app) { serviceHandler(req, res, sdk.runComponentHandler(botId, 'default', eventName, reqBody)); }); + + app.post(apiPrefix + '/sdk/blueprismConnector/:requestId', function(req, res) { + var reqBody = req.body; + var requestId = req.params.requestId; + + sdk.getSavedData(requestId).then(function (data) { + console.log("Received hit to call back service : ", requestId); + if (data) { + data.context.ResponseFromBluePrism = reqBody; + sdk.respondToHook(data); + res.send({status:"OK"}); + } + }).catch(function (err) { + console.error("no user id found: ", err.message); + res.send("No user id found " + err.message); + }); + + }); } module.exports = { diff --git a/node_modules/.bin/json2yaml b/node_modules/.bin/json2yaml new file mode 120000 index 00000000..62480dd6 --- /dev/null +++ b/node_modules/.bin/json2yaml @@ -0,0 +1 @@ +../yamljs/bin/json2yaml \ No newline at end of file diff --git a/node_modules/.bin/mkdirp b/node_modules/.bin/mkdirp new file mode 120000 index 00000000..017896ce --- /dev/null +++ b/node_modules/.bin/mkdirp @@ -0,0 +1 @@ +../mkdirp/bin/cmd.js \ No newline at end of file diff --git a/node_modules/.bin/semver b/node_modules/.bin/semver new file mode 120000 index 00000000..317eb293 --- /dev/null +++ b/node_modules/.bin/semver @@ -0,0 +1 @@ +../semver/bin/semver \ No newline at end of file diff --git a/node_modules/.bin/uuid b/node_modules/.bin/uuid new file mode 120000 index 00000000..b3e45bc5 --- /dev/null +++ b/node_modules/.bin/uuid @@ -0,0 +1 @@ +../uuid/bin/uuid \ No newline at end of file diff --git a/node_modules/.bin/which b/node_modules/.bin/which new file mode 120000 index 00000000..f62471c8 --- /dev/null +++ b/node_modules/.bin/which @@ -0,0 +1 @@ +../which/bin/which \ No newline at end of file diff --git a/node_modules/.bin/yaml2json b/node_modules/.bin/yaml2json new file mode 120000 index 00000000..b4423c48 --- /dev/null +++ b/node_modules/.bin/yaml2json @@ -0,0 +1 @@ +../yamljs/bin/yaml2json \ No newline at end of file diff --git a/node_modules/accept-language/.npmignore b/node_modules/accept-language/.npmignore new file mode 100644 index 00000000..d3075153 --- /dev/null +++ b/node_modules/accept-language/.npmignore @@ -0,0 +1,12 @@ + +.editorconfig +.gitignore +.travis.yml + +index.ts +tsconfig.json + +Source/ +Typings/ +Tests/ +Build/Tests/ diff --git a/node_modules/accept-language/.vscode/launch.json b/node_modules/accept-language/.vscode/launch.json new file mode 100644 index 00000000..7ee4d367 --- /dev/null +++ b/node_modules/accept-language/.vscode/launch.json @@ -0,0 +1,24 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "attach", + "name": "Attach", + "port": 5858, + "sourceMaps": true, + "outFiles": [ + "${workspaceRoot}/out/**/*.js" + ] + }, + { + "type": "node", + "request": "launch", + "name": "Launch Program", + "program": "${workspaceRoot}/Build/Source/AcceptLanguage.js", + "outFiles": [ + "${workspaceRoot}/out/**/*.js" + ] + } + ] + } diff --git a/node_modules/accept-language/Build/Source/AcceptLanguage.js b/node_modules/accept-language/Build/Source/AcceptLanguage.js new file mode 100644 index 00000000..d4289874 --- /dev/null +++ b/node_modules/accept-language/Build/Source/AcceptLanguage.js @@ -0,0 +1,192 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var bcp47 = require("bcp47"); +var stable = require("stable"); +var AcceptLanguage = /** @class */ (function () { + function AcceptLanguage() { + this.languageTagsWithValues = {}; + this.defaultLanguageTag = null; + } + AcceptLanguage.prototype.languages = function (definedLanguages) { + var _this = this; + if (definedLanguages.length < 1) { + throw new Error('The number of defined languages cannot be smaller than one.'); + } + this.languageTagsWithValues = {}; + definedLanguages.forEach(function (languageTagString) { + var languageTag = bcp47.parse(languageTagString); + if (!languageTag) { + throw new TypeError('Language tag ' + languageTagString + ' is not bcp47 compliant. For more info https://tools.ietf.org/html/bcp47.'); + } + var language = languageTag.langtag.language.language; + if (!language) { + throw new TypeError('Language tag ' + languageTagString + ' is not supported.'); + } + var langtag = languageTag.langtag; + var languageTagWithValues = langtag; + languageTagWithValues.value = languageTagString; + var lowerCasedLanguageTagWithValues = { + language: { + language: langtag.language.language.toLowerCase(), + extlang: langtag.language.extlang.map(function (e) { return e.toLowerCase(); }), + }, + region: langtag.region && langtag.region.toLowerCase(), + script: langtag.script && langtag.script.toLowerCase(), + variant: langtag.variant.map(function (v) { return v.toLowerCase(); }), + privateuse: langtag.privateuse.map(function (p) { return p.toLowerCase(); }), + extension: langtag.extension.map(function (e) { + return { + extension: e.extension && e.extension.map(function (e) { return e.toLowerCase(); }), + singleton: e.singleton.toLowerCase(), + }; + }), + value: languageTagString, + }; + if (!_this.languageTagsWithValues[language]) { + _this.languageTagsWithValues[language] = [lowerCasedLanguageTagWithValues]; + } + else { + _this.languageTagsWithValues[language].push(lowerCasedLanguageTagWithValues); + } + }); + this.defaultLanguageTag = definedLanguages[0]; + }; + AcceptLanguage.prototype.get = function (languagePriorityList) { + return this.parse(languagePriorityList)[0]; + }; + AcceptLanguage.prototype.create = function () { + return null; + }; + AcceptLanguage.prototype.parse = function (languagePriorityList) { + if (!languagePriorityList) { + return [this.defaultLanguageTag]; + } + var parsedAndSortedLanguageTags = parseAndSortLanguageTags(languagePriorityList); + var result = []; + for (var _i = 0, parsedAndSortedLanguageTags_1 = parsedAndSortedLanguageTags; _i < parsedAndSortedLanguageTags_1.length; _i++) { + var languageTag = parsedAndSortedLanguageTags_1[_i]; + var requestedLang = bcp47.parse(languageTag.tag); + if (!requestedLang) { + continue; + } + var requestedLangTag = requestedLang.langtag; + if (!this.languageTagsWithValues[requestedLangTag.language.language]) { + continue; + } + middle: for (var _a = 0, _b = this.languageTagsWithValues[requestedLangTag.language.language]; _a < _b.length; _a++) { + var definedLangTag = _b[_a]; + var unmatchedRequestedSubTag = 0; + for (var _c = 0, _d = ['privateuse', 'extension', 'variant', 'region', 'script']; _c < _d.length; _c++) { + var prop = _d[_c]; + var definedLanguagePropertValue = definedLangTag[prop]; + if (!definedLanguagePropertValue) { + var requestedLanguagePropertyValue_1 = requestedLangTag[prop]; + if (requestedLanguagePropertyValue_1) { + unmatchedRequestedSubTag++; + } + switch (prop) { + case 'privateuse': + case 'variant': + for (var i = 0; i < requestedLanguagePropertyValue_1.length; i++) { + if (requestedLanguagePropertyValue_1[i]) { + unmatchedRequestedSubTag++; + } + } + break; + case 'extension': + for (var i = 0; i < requestedLanguagePropertyValue_1.length; i++) { + var extension = requestedLanguagePropertyValue_1[i].extension; + for (var ei = 0; ei < extension.length; ei++) { + if (!requestedLanguagePropertyValue_1[i].extension[ei]) { + unmatchedRequestedSubTag++; + } + } + } + break; + } + continue; + } + // Filter out wider requested languages first. If someone requests 'zh' + // and my defined language is 'zh-Hant'. I cannot match 'zh-Hant', because + // 'zh' is wider than 'zh-Hant'. + var requestedLanguagePropertyValue = requestedLangTag[prop]; + if (!requestedLanguagePropertyValue) { + continue middle; + } + switch (prop) { + case 'privateuse': + case 'variant': + for (var i = 0; i < definedLanguagePropertValue.length; i++) { + if (!requestedLanguagePropertyValue[i] || definedLanguagePropertValue[i] !== requestedLanguagePropertyValue[i].toLowerCase()) { + continue middle; + } + } + break; + case 'extension': + for (var i = 0; i < definedLanguagePropertValue.length; i++) { + var extension = definedLanguagePropertValue[i].extension; + for (var ei = 0; ei < extension.length; ei++) { + if (!requestedLanguagePropertyValue[i]) { + continue middle; + } + if (!requestedLanguagePropertyValue[i].extension[ei]) { + continue middle; + } + if (extension[ei] !== requestedLanguagePropertyValue[i].extension[ei].toLowerCase()) { + continue middle; + } + } + } + break; + default: + if (definedLanguagePropertValue !== requestedLanguagePropertyValue.toLowerCase()) { + continue middle; + } + } + } + result.push({ + unmatchedRequestedSubTag: unmatchedRequestedSubTag, + quality: languageTag.quality, + languageTag: definedLangTag.value + }); + } + } + return result.length > 0 ? stable(result, function (a, b) { + var quality = b.quality - a.quality; + if (quality != 0) { + return quality; + } + return a.unmatchedRequestedSubTag - b.unmatchedRequestedSubTag; + }).map(function (l) { return l.languageTag; }) : [this.defaultLanguageTag]; + function parseAndSortLanguageTags(languagePriorityList) { + return languagePriorityList.split(',').map(function (weightedLanguageRange) { + var components = weightedLanguageRange.replace(/\s+/, '').split(';'); + return { + tag: components[0], + quality: components[1] ? parseFloat(components[1].split('=')[1]) : 1.0 + }; + }) + .filter(function (languageTag) { + if (!languageTag) { + return false; + } + if (!languageTag.tag) { + return false; + } + return languageTag; + }); + } + }; + return AcceptLanguage; +}()); +function create() { + var al = new AcceptLanguage(); + al.create = function () { + return new AcceptLanguage(); + }; + return al; +} +module.exports = create(); +module.exports.default = create(); +exports.default = create(); +//# sourceMappingURL=AcceptLanguage.js.map \ No newline at end of file diff --git a/node_modules/accept-language/Build/Source/AcceptLanguage.js.map b/node_modules/accept-language/Build/Source/AcceptLanguage.js.map new file mode 100644 index 00000000..bdac96a3 --- /dev/null +++ b/node_modules/accept-language/Build/Source/AcceptLanguage.js.map @@ -0,0 +1 @@ +{"version":3,"file":"AcceptLanguage.js","sourceRoot":"","sources":["../../Source/AcceptLanguage.ts"],"names":[],"mappings":";;AACA,6BAAgC;AAChC,+BAAkC;AAYlC;IAAA;QACY,2BAAsB,GAE1B,EAAE,CAAC;QAEC,uBAAkB,GAAkB,IAAI,CAAC;IA0LrD,CAAC;IAxLU,kCAAS,GAAhB,UAAiB,gBAA0B;QAA3C,iBA4CC;QA3CG,EAAE,CAAC,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACnF,CAAC;QAED,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;QACjC,gBAAgB,CAAC,OAAO,CAAC,UAAC,iBAAiB;YACvC,IAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACnD,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;gBACf,MAAM,IAAI,SAAS,CAAC,eAAe,GAAG,iBAAiB,GAAG,2EAA2E,CAAC,CAAC;YAC3I,CAAC;YACD,IAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACvD,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACZ,MAAM,IAAI,SAAS,CAAC,eAAe,GAAG,iBAAiB,GAAG,oBAAoB,CAAC,CAAC;YACpF,CAAC;YACD,IAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;YACpC,IAAI,qBAAqB,GAAyB,OAA+B,CAAC;YAClF,qBAAqB,CAAC,KAAK,GAAG,iBAAiB,CAAC;YAChD,IAAM,+BAA+B,GAAyB;gBAC1D,QAAQ,EAAE;oBACN,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE;oBACjD,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,WAAW,EAAE,EAAf,CAAe,CAAC;iBAChE;gBACD,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE;gBACtD,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE;gBACtD,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,WAAW,EAAE,EAAf,CAAe,CAAC;gBACpD,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,WAAW,EAAE,EAAf,CAAe,CAAC;gBAC1D,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,UAAC,CAAC;oBAC/B,MAAM,CAAC;wBACH,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,WAAW,EAAE,EAAf,CAAe,CAAC;wBACjE,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE;qBACvC,CAAA;gBACL,CAAC,CAAC;gBACF,KAAK,EAAE,iBAAiB;aAC3B,CAAC;YACF,EAAE,CAAC,CAAC,CAAC,KAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACzC,KAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;YAC9E,CAAC;YACD,IAAI,CAAC,CAAC;gBACF,KAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAChF,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,kBAAkB,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC;IAEM,4BAAG,GAAV,UAAW,oBAA+C;QACtD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IAEM,+BAAM,GAAb;QACI,MAAM,CAAC,IAAW,CAAC;IACvB,CAAC;IAEO,8BAAK,GAAb,UAAc,oBAA+C;QACzD,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC;YACxB,MAAM,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACrC,CAAC;QACD,IAAM,2BAA2B,GAAG,wBAAwB,CAAC,oBAAoB,CAAC,CAAC;QACnF,IAAM,MAAM,GAAoB,EAAE,CAAC;QACnC,GAAG,CAAC,CAAsB,UAA2B,EAA3B,2DAA2B,EAA3B,yCAA2B,EAA3B,IAA2B;YAAhD,IAAM,WAAW,oCAAA;YAClB,IAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAEnD,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;gBACjB,QAAQ,CAAC;YACb,CAAC;YAED,IAAM,gBAAgB,GAAG,aAAa,CAAC,OAAO,CAAC;YAE/C,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACnE,QAAQ,CAAC;YACb,CAAC;YAED,MAAM,EACN,GAAG,CAAC,CAAyB,UAA+D,EAA/D,KAAA,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAA/D,cAA+D,EAA/D,IAA+D;gBAAvF,IAAM,cAAc,SAAA;gBACrB,IAAI,wBAAwB,GAAG,CAAC,CAAC;gBACjC,GAAG,CAAC,CAAe,UAA0D,EAA1D,MAAC,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAA1D,cAA0D,EAA1D,IAA0D;oBAAxE,IAAM,IAAI,SAAA;oBACX,IAAM,2BAA2B,GAAI,cAAsB,CAAC,IAAI,CAAC,CAAC;oBAClE,EAAE,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC;wBAC/B,IAAM,gCAA8B,GAAI,gBAAwB,CAAC,IAAI,CAAC,CAAC;wBACvE,EAAE,CAAC,CAAC,gCAA8B,CAAC,CAAC,CAAC;4BACjC,wBAAwB,EAAE,CAAC;wBAC/B,CAAC;wBACD,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;4BACX,KAAK,YAAY,CAAC;4BAClB,KAAK,SAAS;gCACV,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gCAA8B,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oCAC7D,EAAE,CAAC,CAAC,gCAA8B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wCACpC,wBAAwB,EAAE,CAAC;oCAC/B,CAAC;gCACL,CAAC;gCACD,KAAK,CAAC;4BACV,KAAK,WAAW;gCACZ,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gCAA8B,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oCAC7D,IAAM,SAAS,GAAG,gCAA8B,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;oCAC9D,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;wCAC3C,EAAE,CAAC,CAAC,CAAC,gCAA8B,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;4CACnD,wBAAwB,EAAE,CAAC;wCAC/B,CAAC;oCACL,CAAC;gCACL,CAAC;gCACD,KAAK,CAAC;wBACd,CAAC;wBACD,QAAQ,CAAC;oBACb,CAAC;oBAED,uEAAuE;oBACvE,0EAA0E;oBAC1E,gCAAgC;oBAChC,IAAM,8BAA8B,GAAI,gBAAwB,CAAC,IAAI,CAAC,CAAC;oBACvE,EAAE,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC;wBAClC,QAAQ,CAAC,MAAM,CAAC;oBACpB,CAAC;oBAGD,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;wBACX,KAAK,YAAY,CAAC;wBAClB,KAAK,SAAS;4BACV,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,2BAA2B,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gCAC1D,EAAE,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,IAAI,2BAA2B,CAAC,CAAC,CAAC,KAAK,8BAA8B,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;oCAC3H,QAAQ,CAAC,MAAM,CAAC;gCACpB,CAAC;4BACL,CAAC;4BACD,KAAK,CAAC;wBACV,KAAK,WAAW;4BACZ,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,2BAA2B,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gCAC1D,IAAM,SAAS,GAAG,2BAA2B,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gCAC3D,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;oCAC3C,EAAE,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wCACrC,QAAQ,CAAC,MAAM,CAAC;oCACpB,CAAC;oCACD,EAAE,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;wCACnD,QAAQ,CAAC,MAAM,CAAC;oCACpB,CAAC;oCACD,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,8BAA8B,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;wCAClF,QAAQ,CAAC,MAAM,CAAC;oCACpB,CAAC;gCACL,CAAC;4BACL,CAAC;4BACD,KAAK,CAAC;wBACV;4BACI,EAAE,CAAC,CAAC,2BAA2B,KAAK,8BAA8B,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;gCAC/E,QAAQ,CAAC,MAAM,CAAC;4BACpB,CAAC;oBACT,CAAC;iBACJ;gBAED,MAAM,CAAC,IAAI,CAAC;oBACR,wBAAwB,0BAAA;oBACxB,OAAO,EAAE,WAAW,CAAC,OAAO;oBAC5B,WAAW,EAAE,cAAc,CAAC,KAAK;iBACpC,CAAC,CAAC;aACN;SACJ;QAED,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,UAAC,CAAC,EAAE,CAAC;YAC3C,IAAM,OAAO,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;YACtC,EAAE,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;gBACf,MAAM,CAAC,OAAO,CAAC;YACnB,CAAC;YACD,MAAM,CAAC,CAAC,CAAC,wBAAwB,GAAG,CAAC,CAAC,wBAAwB,CAAC;QACnE,CAAC,CAAC,CAAC,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,WAAW,EAAb,CAAa,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAEzD,kCAAkC,oBAA4B;YAC1D,MAAM,CAAC,oBAAoB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,UAAC,qBAAqB;gBAC7D,IAAM,UAAU,GAAG,qBAAqB,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACvE,MAAM,CAAC;oBACH,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;oBAClB,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;iBACzE,CAAC;YACN,CAAC,CAAC;iBAGD,MAAM,CAAC,UAAC,WAAW;gBAChB,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;oBACf,MAAM,CAAC,KAAK,CAAC;gBACjB,CAAC;gBACD,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;oBACnB,MAAM,CAAC,KAAK,CAAC;gBACjB,CAAC;gBACD,MAAM,CAAC,WAAW,CAAC;YACvB,CAAC,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IACL,qBAAC;AAAD,CAAC,AA/LD,IA+LC;AAED;IACI,IAAM,EAAE,GAAG,IAAI,cAAc,EAAE,CAAC;IAChC,EAAE,CAAC,MAAM,GAAG;QACR,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;IAChC,CAAC,CAAA;IACD,MAAM,CAAC,EAAE,CAAC;AACd,CAAC;AAGD,MAAM,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC;AAC1B,MAAM,CAAC,OAAO,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC;AAElC,kBAAe,MAAM,EAAE,CAAC"} \ No newline at end of file diff --git a/node_modules/accept-language/LICENSE b/node_modules/accept-language/LICENSE new file mode 100644 index 00000000..ce721ad5 --- /dev/null +++ b/node_modules/accept-language/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Tingan Ho + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/accept-language/Library/Typings.d.ts b/node_modules/accept-language/Library/Typings.d.ts new file mode 100644 index 00000000..3d457b1f --- /dev/null +++ b/node_modules/accept-language/Library/Typings.d.ts @@ -0,0 +1,27 @@ + +declare module 'accept-language' { + + interface AcceptLanguage { + + /** + * Define your supported languages. The first language will be your default language. + */ + languages(languages: string[]): void; + + /** + * Get matched language. If no match, the default language will be returned. + */ + get(priorityList: string | null | undefined): string | null; + } + + interface AcceptLanguageModule extends AcceptLanguage { + + /** + * Create instance of parser + */ + create(): AcceptLanguage; + } + + const __$export: AcceptLanguageModule & { default: AcceptLanguageModule }; + export = __$export; +} diff --git a/node_modules/accept-language/README.md b/node_modules/accept-language/README.md new file mode 100644 index 00000000..46548da5 --- /dev/null +++ b/node_modules/accept-language/README.md @@ -0,0 +1,54 @@ +accept-language [![Build Status](https://travis-ci.org/tinganho/node-accept-language.png)](https://travis-ci.org/tinganho/node-accept-language) +======================== + +[![NPM](https://nodei.co/npm/accept-language.png?downloads=true&stars=true)](https://nodei.co/npm/accept-language/) + +`accept-language` parses HTTP Accept-Language header and returns a matched defined language. + +### Installation: + +``` +npm install accept-language --save +``` + +### Usage: + +```ts +// var acceptLanguage = require('accept-language'); +import acceptLanguage from 'accept-language'; +acceptLanguage.languages(['en-US', 'zh-CN']); +console.log(acceptLanguage.get('en-GB,en;q=0.8,sv')); +/* + +'en-US' + +*/ +``` + +### Usage with Express: +If you are using Express server please use the middleware [express-request-language](https://www.npmjs.com/package/express-request-language). + +### API +#### acceptLanguage.languages(Array languageTags); +Define your language tags ordered in highest priority comes first fashion. The language tags must comply with [BCP47][] standard. + +```javascript +acceptLanguage.languages(['en-US', 'zh-CN']); +``` + +#### acceptLanguage.get(String acceptLanguageString); +Get the most likely language given an `Accept-Language` string. In order for it to work you must set all your languages first. +```javascript +acceptLanguage.get('en-GB,en;q=0.8,sv'); +``` + +### Maintainer + +Tingan Ho [@tingan87][] + +### License +MIT + +[L10ns]: http://l10ns.org +[BCP47]: https://tools.ietf.org/html/bcp47 +[@tingan87]: https://twitter.com/tingan87 diff --git a/node_modules/accept-language/package.json b/node_modules/accept-language/package.json new file mode 100644 index 00000000..bffd83cf --- /dev/null +++ b/node_modules/accept-language/package.json @@ -0,0 +1,65 @@ +{ + "_from": "accept-language@^3.0.18", + "_id": "accept-language@3.0.18", + "_inBundle": false, + "_integrity": "sha1-9QJfF79lpGaoRYOMz5jNuHfYM4Q=", + "_location": "/accept-language", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "accept-language@^3.0.18", + "name": "accept-language", + "escapedName": "accept-language", + "rawSpec": "^3.0.18", + "saveSpec": null, + "fetchSpec": "^3.0.18" + }, + "_requiredBy": [ + "/strong-globalize" + ], + "_resolved": "https://registry.npmjs.org/accept-language/-/accept-language-3.0.18.tgz", + "_shasum": "f5025f17bf65a466a845838ccf98cdb877d83384", + "_spec": "accept-language@^3.0.18", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/strong-globalize", + "author": { + "name": "Tingan Ho", + "email": "tingan87@gmail.com" + }, + "bugs": { + "url": "https://github.com/tinganho/node-accept-language/issues" + }, + "bundleDependencies": false, + "dependencies": { + "bcp47": "^1.1.2", + "stable": "^0.1.6" + }, + "deprecated": false, + "description": "Accept-Language parser for nodejs", + "devDependencies": { + "@types/chai": "^3.4.32", + "@types/mocha": "^2.2.31", + "@types/node": "^8.0.31", + "chai": "~1.9.1", + "mocha": "^2.2.5", + "source-map-support": "^0.4.18" + }, + "homepage": "https://github.com/tinganho/node-accept-language", + "keywords": [ + "accept-language", + "i18n", + "http" + ], + "license": "MIT", + "main": "Build/Source/AcceptLanguage.js", + "name": "accept-language", + "repository": { + "type": "git", + "url": "git://github.com/tinganho/node-accept-language.git" + }, + "scripts": { + "test": "node node_modules/mocha/bin/mocha Build/Tests/Test.js" + }, + "types": "Library/Typings.d.ts", + "version": "3.0.18" +} diff --git a/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/strip-ansi/node_modules/ansi-regex/index.js b/node_modules/ansi-regex/index.js similarity index 82% rename from node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/strip-ansi/node_modules/ansi-regex/index.js rename to node_modules/ansi-regex/index.js index 4906755b..b9574ed7 100644 --- a/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/strip-ansi/node_modules/ansi-regex/index.js +++ b/node_modules/ansi-regex/index.js @@ -1,4 +1,4 @@ 'use strict'; module.exports = function () { - return /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g; + return /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-PRZcf-nqry=><]/g; }; diff --git a/node_modules/ansi-regex/license b/node_modules/ansi-regex/license new file mode 100644 index 00000000..654d0bfe --- /dev/null +++ b/node_modules/ansi-regex/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/ansi-regex/package.json b/node_modules/ansi-regex/package.json new file mode 100644 index 00000000..afab285e --- /dev/null +++ b/node_modules/ansi-regex/package.json @@ -0,0 +1,109 @@ +{ + "_from": "ansi-regex@^2.0.0", + "_id": "ansi-regex@2.1.1", + "_inBundle": false, + "_integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "_location": "/ansi-regex", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "ansi-regex@^2.0.0", + "name": "ansi-regex", + "escapedName": "ansi-regex", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/has-ansi", + "/request/har-validator/chalk/strip-ansi" + ], + "_resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "_shasum": "c3b33ab5ee360d86e0e628f0468ae7ef27d654df", + "_spec": "ansi-regex@^2.0.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/has-ansi", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/chalk/ansi-regex/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Regular expression for matching ANSI escape codes", + "devDependencies": { + "ava": "0.17.0", + "xo": "0.16.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/chalk/ansi-regex#readme", + "keywords": [ + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "command-line", + "text", + "regex", + "regexp", + "re", + "match", + "test", + "find", + "pattern" + ], + "license": "MIT", + "maintainers": [ + { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + { + "name": "Joshua Appelman", + "email": "jappelman@xebia.com", + "url": "jbnicolai.com" + }, + { + "name": "JD Ballard", + "email": "i.am.qix@gmail.com", + "url": "github.com/qix-" + } + ], + "name": "ansi-regex", + "repository": { + "type": "git", + "url": "git+https://github.com/chalk/ansi-regex.git" + }, + "scripts": { + "test": "xo && ava --verbose", + "view-supported": "node fixtures/view-codes.js" + }, + "version": "2.1.1", + "xo": { + "rules": { + "guard-for-in": 0, + "no-loop-func": 0 + } + } +} diff --git a/node_modules/ansi-regex/readme.md b/node_modules/ansi-regex/readme.md new file mode 100644 index 00000000..6a928edf --- /dev/null +++ b/node_modules/ansi-regex/readme.md @@ -0,0 +1,39 @@ +# ansi-regex [![Build Status](https://travis-ci.org/chalk/ansi-regex.svg?branch=master)](https://travis-ci.org/chalk/ansi-regex) + +> Regular expression for matching [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code) + + +## Install + +``` +$ npm install --save ansi-regex +``` + + +## Usage + +```js +const ansiRegex = require('ansi-regex'); + +ansiRegex().test('\u001b[4mcake\u001b[0m'); +//=> true + +ansiRegex().test('cake'); +//=> false + +'\u001b[4mcake\u001b[0m'.match(ansiRegex()); +//=> ['\u001b[4m', '\u001b[0m'] +``` + +## FAQ + +### Why do you test for codes not in the ECMA 48 standard? + +Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. If I recall correctly, we test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them. + +On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out. + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/argparse/CHANGELOG.md b/node_modules/argparse/CHANGELOG.md new file mode 100644 index 00000000..a43c628c --- /dev/null +++ b/node_modules/argparse/CHANGELOG.md @@ -0,0 +1,185 @@ +1.0.10 / 2018-02-15 +------------------ + +- Use .concat instead of + for arrays, #122. + + +1.0.9 / 2016-09-29 +------------------ + +- Rerelease after 1.0.8 - deps cleanup. + + +1.0.8 / 2016-09-29 +------------------ + +- Maintenance (deps bump, fix node 6.5+ tests, coverage report). + + +1.0.7 / 2016-03-17 +------------------ + +- Teach `addArgument` to accept string arg names. #97, @tomxtobin. + + +1.0.6 / 2016-02-06 +------------------ + +- Maintenance: moved to eslint & updated CS. + + +1.0.5 / 2016-02-05 +------------------ + +- Removed lodash dependency to significantly reduce install size. + Thanks to @mourner. + + +1.0.4 / 2016-01-17 +------------------ + +- Maintenance: lodash update to 4.0.0. + + +1.0.3 / 2015-10-27 +------------------ + +- Fix parse `=` in args: `--examplepath="C:\myfolder\env=x64"`. #84, @CatWithApple. + + +1.0.2 / 2015-03-22 +------------------ + +- Relaxed lodash version dependency. + + +1.0.1 / 2015-02-20 +------------------ + +- Changed dependencies to be compatible with ancient nodejs. + + +1.0.0 / 2015-02-19 +------------------ + +- Maintenance release. +- Replaced `underscore` with `lodash`. +- Bumped version to 1.0.0 to better reflect semver meaning. +- HISTORY.md -> CHANGELOG.md + + +0.1.16 / 2013-12-01 +------------------- + +- Maintenance release. Updated dependencies and docs. + + +0.1.15 / 2013-05-13 +------------------- + +- Fixed #55, @trebor89 + + +0.1.14 / 2013-05-12 +------------------- + +- Fixed #62, @maxtaco + + +0.1.13 / 2013-04-08 +------------------- + +- Added `.npmignore` to reduce package size + + +0.1.12 / 2013-02-10 +------------------- + +- Fixed conflictHandler (#46), @hpaulj + + +0.1.11 / 2013-02-07 +------------------- + +- Multiple bugfixes, @hpaulj +- Added 70+ tests (ported from python), @hpaulj +- Added conflictHandler, @applepicke +- Added fromfilePrefixChar, @hpaulj + + +0.1.10 / 2012-12-30 +------------------- + +- Added [mutual exclusion](http://docs.python.org/dev/library/argparse.html#mutual-exclusion) + support, thanks to @hpaulj +- Fixed options check for `storeConst` & `appendConst` actions, thanks to @hpaulj + + +0.1.9 / 2012-12-27 +------------------ + +- Fixed option dest interferens with other options (issue #23), thanks to @hpaulj +- Fixed default value behavior with `*` positionals, thanks to @hpaulj +- Improve `getDefault()` behavior, thanks to @hpaulj +- Imrove negative argument parsing, thanks to @hpaulj + + +0.1.8 / 2012-12-01 +------------------ + +- Fixed parser parents (issue #19), thanks to @hpaulj +- Fixed negative argument parse (issue #20), thanks to @hpaulj + + +0.1.7 / 2012-10-14 +------------------ + +- Fixed 'choices' argument parse (issue #16) +- Fixed stderr output (issue #15) + + +0.1.6 / 2012-09-09 +------------------ + +- Fixed check for conflict of options (thanks to @tomxtobin) + + +0.1.5 / 2012-09-03 +------------------ + +- Fix parser #setDefaults method (thanks to @tomxtobin) + + +0.1.4 / 2012-07-30 +------------------ + +- Fixed pseudo-argument support (thanks to @CGamesPlay) +- Fixed addHelp default (should be true), if not set (thanks to @benblank) + + +0.1.3 / 2012-06-27 +------------------ + +- Fixed formatter api name: Formatter -> HelpFormatter + + +0.1.2 / 2012-05-29 +------------------ + +- Added basic tests +- Removed excess whitespace in help +- Fixed error reporting, when parcer with subcommands + called with empty arguments + + +0.1.1 / 2012-05-23 +------------------ + +- Fixed line wrapping in help formatter +- Added better error reporting on invalid arguments + + +0.1.0 / 2012-05-16 +------------------ + +- First release. diff --git a/node_modules/argparse/LICENSE b/node_modules/argparse/LICENSE new file mode 100644 index 00000000..1afdae55 --- /dev/null +++ b/node_modules/argparse/LICENSE @@ -0,0 +1,21 @@ +(The MIT License) + +Copyright (C) 2012 by Vitaly Puzrin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/argparse/README.md b/node_modules/argparse/README.md new file mode 100644 index 00000000..7fa6c405 --- /dev/null +++ b/node_modules/argparse/README.md @@ -0,0 +1,257 @@ +argparse +======== + +[![Build Status](https://secure.travis-ci.org/nodeca/argparse.svg?branch=master)](http://travis-ci.org/nodeca/argparse) +[![NPM version](https://img.shields.io/npm/v/argparse.svg)](https://www.npmjs.org/package/argparse) + +CLI arguments parser for node.js. Javascript port of python's +[argparse](http://docs.python.org/dev/library/argparse.html) module +(original version 3.2). That's a full port, except some very rare options, +recorded in issue tracker. + +**NB. Difference with original.** + +- Method names changed to camelCase. See [generated docs](http://nodeca.github.com/argparse/). +- Use `defaultValue` instead of `default`. +- Use `argparse.Const.REMAINDER` instead of `argparse.REMAINDER`, and + similarly for constant values `OPTIONAL`, `ZERO_OR_MORE`, and `ONE_OR_MORE` + (aliases for `nargs` values `'?'`, `'*'`, `'+'`, respectively), and + `SUPPRESS`. + + +Example +======= + +test.js file: + +```javascript +#!/usr/bin/env node +'use strict'; + +var ArgumentParser = require('../lib/argparse').ArgumentParser; +var parser = new ArgumentParser({ + version: '0.0.1', + addHelp:true, + description: 'Argparse example' +}); +parser.addArgument( + [ '-f', '--foo' ], + { + help: 'foo bar' + } +); +parser.addArgument( + [ '-b', '--bar' ], + { + help: 'bar foo' + } +); +parser.addArgument( + '--baz', + { + help: 'baz bar' + } +); +var args = parser.parseArgs(); +console.dir(args); +``` + +Display help: + +``` +$ ./test.js -h +usage: example.js [-h] [-v] [-f FOO] [-b BAR] [--baz BAZ] + +Argparse example + +Optional arguments: + -h, --help Show this help message and exit. + -v, --version Show program's version number and exit. + -f FOO, --foo FOO foo bar + -b BAR, --bar BAR bar foo + --baz BAZ baz bar +``` + +Parse arguments: + +``` +$ ./test.js -f=3 --bar=4 --baz 5 +{ foo: '3', bar: '4', baz: '5' } +``` + +More [examples](https://github.com/nodeca/argparse/tree/master/examples). + + +ArgumentParser objects +====================== + +``` +new ArgumentParser({parameters hash}); +``` + +Creates a new ArgumentParser object. + +**Supported params:** + +- ```description``` - Text to display before the argument help. +- ```epilog``` - Text to display after the argument help. +- ```addHelp``` - Add a -h/–help option to the parser. (default: true) +- ```argumentDefault``` - Set the global default value for arguments. (default: null) +- ```parents``` - A list of ArgumentParser objects whose arguments should also be included. +- ```prefixChars``` - The set of characters that prefix optional arguments. (default: ‘-‘) +- ```formatterClass``` - A class for customizing the help output. +- ```prog``` - The name of the program (default: `path.basename(process.argv[1])`) +- ```usage``` - The string describing the program usage (default: generated) +- ```conflictHandler``` - Usually unnecessary, defines strategy for resolving conflicting optionals. + +**Not supported yet** + +- ```fromfilePrefixChars``` - The set of characters that prefix files from which additional arguments should be read. + + +Details in [original ArgumentParser guide](http://docs.python.org/dev/library/argparse.html#argumentparser-objects) + + +addArgument() method +==================== + +``` +ArgumentParser.addArgument(name or flag or [name] or [flags...], {options}) +``` + +Defines how a single command-line argument should be parsed. + +- ```name or flag or [name] or [flags...]``` - Either a positional name + (e.g., `'foo'`), a single option (e.g., `'-f'` or `'--foo'`), an array + of a single positional name (e.g., `['foo']`), or an array of options + (e.g., `['-f', '--foo']`). + +Options: + +- ```action``` - The basic type of action to be taken when this argument is encountered at the command line. +- ```nargs```- The number of command-line arguments that should be consumed. +- ```constant``` - A constant value required by some action and nargs selections. +- ```defaultValue``` - The value produced if the argument is absent from the command line. +- ```type``` - The type to which the command-line argument should be converted. +- ```choices``` - A container of the allowable values for the argument. +- ```required``` - Whether or not the command-line option may be omitted (optionals only). +- ```help``` - A brief description of what the argument does. +- ```metavar``` - A name for the argument in usage messages. +- ```dest``` - The name of the attribute to be added to the object returned by parseArgs(). + +Details in [original add_argument guide](http://docs.python.org/dev/library/argparse.html#the-add-argument-method) + + +Action (some details) +================ + +ArgumentParser objects associate command-line arguments with actions. +These actions can do just about anything with the command-line arguments associated +with them, though most actions simply add an attribute to the object returned by +parseArgs(). The action keyword argument specifies how the command-line arguments +should be handled. The supported actions are: + +- ```store``` - Just stores the argument’s value. This is the default action. +- ```storeConst``` - Stores value, specified by the const keyword argument. + (Note that the const keyword argument defaults to the rather unhelpful None.) + The 'storeConst' action is most commonly used with optional arguments, that + specify some sort of flag. +- ```storeTrue``` and ```storeFalse``` - Stores values True and False + respectively. These are special cases of 'storeConst'. +- ```append``` - Stores a list, and appends each argument value to the list. + This is useful to allow an option to be specified multiple times. +- ```appendConst``` - Stores a list, and appends value, specified by the + const keyword argument to the list. (Note, that the const keyword argument defaults + is None.) The 'appendConst' action is typically used when multiple arguments need + to store constants to the same list. +- ```count``` - Counts the number of times a keyword argument occurs. For example, + used for increasing verbosity levels. +- ```help``` - Prints a complete help message for all the options in the current + parser and then exits. By default a help action is automatically added to the parser. + See ArgumentParser for details of how the output is created. +- ```version``` - Prints version information and exit. Expects a `version=` + keyword argument in the addArgument() call. + +Details in [original action guide](http://docs.python.org/dev/library/argparse.html#action) + + +Sub-commands +============ + +ArgumentParser.addSubparsers() + +Many programs split their functionality into a number of sub-commands, for +example, the svn program can invoke sub-commands like `svn checkout`, `svn update`, +and `svn commit`. Splitting up functionality this way can be a particularly good +idea when a program performs several different functions which require different +kinds of command-line arguments. `ArgumentParser` supports creation of such +sub-commands with `addSubparsers()` method. The `addSubparsers()` method is +normally called with no arguments and returns an special action object. +This object has a single method `addParser()`, which takes a command name and +any `ArgumentParser` constructor arguments, and returns an `ArgumentParser` object +that can be modified as usual. + +Example: + +sub_commands.js +```javascript +#!/usr/bin/env node +'use strict'; + +var ArgumentParser = require('../lib/argparse').ArgumentParser; +var parser = new ArgumentParser({ + version: '0.0.1', + addHelp:true, + description: 'Argparse examples: sub-commands', +}); + +var subparsers = parser.addSubparsers({ + title:'subcommands', + dest:"subcommand_name" +}); + +var bar = subparsers.addParser('c1', {addHelp:true}); +bar.addArgument( + [ '-f', '--foo' ], + { + action: 'store', + help: 'foo3 bar3' + } +); +var bar = subparsers.addParser( + 'c2', + {aliases:['co'], addHelp:true} +); +bar.addArgument( + [ '-b', '--bar' ], + { + action: 'store', + type: 'int', + help: 'foo3 bar3' + } +); + +var args = parser.parseArgs(); +console.dir(args); + +``` + +Details in [original sub-commands guide](http://docs.python.org/dev/library/argparse.html#sub-commands) + + +Contributors +============ + +- [Eugene Shkuropat](https://github.com/shkuropat) +- [Paul Jacobson](https://github.com/hpaulj) + +[others](https://github.com/nodeca/argparse/graphs/contributors) + +License +======= + +Copyright (c) 2012 [Vitaly Puzrin](https://github.com/puzrin). +Released under the MIT license. See +[LICENSE](https://github.com/nodeca/argparse/blob/master/LICENSE) for details. + + diff --git a/node_modules/argparse/index.js b/node_modules/argparse/index.js new file mode 100644 index 00000000..3bbc1432 --- /dev/null +++ b/node_modules/argparse/index.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./lib/argparse'); diff --git a/node_modules/argparse/lib/action.js b/node_modules/argparse/lib/action.js new file mode 100644 index 00000000..1483c79f --- /dev/null +++ b/node_modules/argparse/lib/action.js @@ -0,0 +1,146 @@ +/** + * class Action + * + * Base class for all actions + * Do not call in your code, use this class only for inherits your own action + * + * Information about how to convert command line strings to Javascript objects. + * Action objects are used by an ArgumentParser to represent the information + * needed to parse a single argument from one or more strings from the command + * line. The keyword arguments to the Action constructor are also all attributes + * of Action instances. + * + * ##### Allowed keywords: + * + * - `store` + * - `storeConstant` + * - `storeTrue` + * - `storeFalse` + * - `append` + * - `appendConstant` + * - `count` + * - `help` + * - `version` + * + * Information about action options see [[Action.new]] + * + * See also [original guide](http://docs.python.org/dev/library/argparse.html#action) + * + **/ + +'use strict'; + + +// Constants +var c = require('./const'); + + +/** + * new Action(options) + * + * Base class for all actions. Used only for inherits + * + * + * ##### Options: + * + * - `optionStrings` A list of command-line option strings for the action. + * - `dest` Attribute to hold the created object(s) + * - `nargs` The number of command-line arguments that should be consumed. + * By default, one argument will be consumed and a single value will be + * produced. + * - `constant` Default value for an action with no value. + * - `defaultValue` The value to be produced if the option is not specified. + * - `type` Cast to 'string'|'int'|'float'|'complex'|function (string). If + * None, 'string'. + * - `choices` The choices available. + * - `required` True if the action must always be specified at the command + * line. + * - `help` The help describing the argument. + * - `metavar` The name to be used for the option's argument with the help + * string. If None, the 'dest' value will be used as the name. + * + * ##### nargs supported values: + * + * - `N` (an integer) consumes N arguments (and produces a list) + * - `?` consumes zero or one arguments + * - `*` consumes zero or more arguments (and produces a list) + * - `+` consumes one or more arguments (and produces a list) + * + * Note: that the difference between the default and nargs=1 is that with the + * default, a single value will be produced, while with nargs=1, a list + * containing a single value will be produced. + **/ +var Action = module.exports = function Action(options) { + options = options || {}; + this.optionStrings = options.optionStrings || []; + this.dest = options.dest; + this.nargs = typeof options.nargs !== 'undefined' ? options.nargs : null; + this.constant = typeof options.constant !== 'undefined' ? options.constant : null; + this.defaultValue = options.defaultValue; + this.type = typeof options.type !== 'undefined' ? options.type : null; + this.choices = typeof options.choices !== 'undefined' ? options.choices : null; + this.required = typeof options.required !== 'undefined' ? options.required : false; + this.help = typeof options.help !== 'undefined' ? options.help : null; + this.metavar = typeof options.metavar !== 'undefined' ? options.metavar : null; + + if (!(this.optionStrings instanceof Array)) { + throw new Error('optionStrings should be an array'); + } + if (typeof this.required !== 'undefined' && typeof this.required !== 'boolean') { + throw new Error('required should be a boolean'); + } +}; + +/** + * Action#getName -> String + * + * Tells action name + **/ +Action.prototype.getName = function () { + if (this.optionStrings.length > 0) { + return this.optionStrings.join('/'); + } else if (this.metavar !== null && this.metavar !== c.SUPPRESS) { + return this.metavar; + } else if (typeof this.dest !== 'undefined' && this.dest !== c.SUPPRESS) { + return this.dest; + } + return null; +}; + +/** + * Action#isOptional -> Boolean + * + * Return true if optional + **/ +Action.prototype.isOptional = function () { + return !this.isPositional(); +}; + +/** + * Action#isPositional -> Boolean + * + * Return true if positional + **/ +Action.prototype.isPositional = function () { + return (this.optionStrings.length === 0); +}; + +/** + * Action#call(parser, namespace, values, optionString) -> Void + * - parser (ArgumentParser): current parser + * - namespace (Namespace): namespace for output data + * - values (Array): parsed values + * - optionString (Array): input option string(not parsed) + * + * Call the action. Should be implemented in inherited classes + * + * ##### Example + * + * ActionCount.prototype.call = function (parser, namespace, values, optionString) { + * namespace.set(this.dest, (namespace[this.dest] || 0) + 1); + * }; + * + **/ +Action.prototype.call = function () { + throw new Error('.call() not defined');// Not Implemented error +}; diff --git a/node_modules/argparse/lib/action/append.js b/node_modules/argparse/lib/action/append.js new file mode 100644 index 00000000..b5da0de2 --- /dev/null +++ b/node_modules/argparse/lib/action/append.js @@ -0,0 +1,53 @@ +/*:nodoc:* + * class ActionAppend + * + * This action stores a list, and appends each argument value to the list. + * This is useful to allow an option to be specified multiple times. + * This class inherided from [[Action]] + * + **/ + +'use strict'; + +var util = require('util'); + +var Action = require('../action'); + +// Constants +var c = require('../const'); + +/*:nodoc:* + * new ActionAppend(options) + * - options (object): options hash see [[Action.new]] + * + * Note: options.nargs should be optional for constants + * and more then zero for other + **/ +var ActionAppend = module.exports = function ActionAppend(options) { + options = options || {}; + if (this.nargs <= 0) { + throw new Error('nargs for append actions must be > 0; if arg ' + + 'strings are not supplying the value to append, ' + + 'the append const action may be more appropriate'); + } + if (!!this.constant && this.nargs !== c.OPTIONAL) { + throw new Error('nargs must be OPTIONAL to supply const'); + } + Action.call(this, options); +}; +util.inherits(ActionAppend, Action); + +/*:nodoc:* + * ActionAppend#call(parser, namespace, values, optionString) -> Void + * - parser (ArgumentParser): current parser + * - namespace (Namespace): namespace for output data + * - values (Array): parsed values + * - optionString (Array): input option string(not parsed) + * + * Call the action. Save result in namespace object + **/ +ActionAppend.prototype.call = function (parser, namespace, values) { + var items = (namespace[this.dest] || []).slice(); + items.push(values); + namespace.set(this.dest, items); +}; diff --git a/node_modules/argparse/lib/action/append/constant.js b/node_modules/argparse/lib/action/append/constant.js new file mode 100644 index 00000000..313f5d2e --- /dev/null +++ b/node_modules/argparse/lib/action/append/constant.js @@ -0,0 +1,47 @@ +/*:nodoc:* + * class ActionAppendConstant + * + * This stores a list, and appends the value specified by + * the const keyword argument to the list. + * (Note that the const keyword argument defaults to null.) + * The 'appendConst' action is typically useful when multiple + * arguments need to store constants to the same list. + * + * This class inherited from [[Action]] + **/ + +'use strict'; + +var util = require('util'); + +var Action = require('../../action'); + +/*:nodoc:* + * new ActionAppendConstant(options) + * - options (object): options hash see [[Action.new]] + * + **/ +var ActionAppendConstant = module.exports = function ActionAppendConstant(options) { + options = options || {}; + options.nargs = 0; + if (typeof options.constant === 'undefined') { + throw new Error('constant option is required for appendAction'); + } + Action.call(this, options); +}; +util.inherits(ActionAppendConstant, Action); + +/*:nodoc:* + * ActionAppendConstant#call(parser, namespace, values, optionString) -> Void + * - parser (ArgumentParser): current parser + * - namespace (Namespace): namespace for output data + * - values (Array): parsed values + * - optionString (Array): input option string(not parsed) + * + * Call the action. Save result in namespace object + **/ +ActionAppendConstant.prototype.call = function (parser, namespace) { + var items = [].concat(namespace[this.dest] || []); + items.push(this.constant); + namespace.set(this.dest, items); +}; diff --git a/node_modules/argparse/lib/action/count.js b/node_modules/argparse/lib/action/count.js new file mode 100644 index 00000000..d6a5899d --- /dev/null +++ b/node_modules/argparse/lib/action/count.js @@ -0,0 +1,40 @@ +/*:nodoc:* + * class ActionCount + * + * This counts the number of times a keyword argument occurs. + * For example, this is useful for increasing verbosity levels + * + * This class inherided from [[Action]] + * + **/ +'use strict'; + +var util = require('util'); + +var Action = require('../action'); + +/*:nodoc:* + * new ActionCount(options) + * - options (object): options hash see [[Action.new]] + * + **/ +var ActionCount = module.exports = function ActionCount(options) { + options = options || {}; + options.nargs = 0; + + Action.call(this, options); +}; +util.inherits(ActionCount, Action); + +/*:nodoc:* + * ActionCount#call(parser, namespace, values, optionString) -> Void + * - parser (ArgumentParser): current parser + * - namespace (Namespace): namespace for output data + * - values (Array): parsed values + * - optionString (Array): input option string(not parsed) + * + * Call the action. Save result in namespace object + **/ +ActionCount.prototype.call = function (parser, namespace) { + namespace.set(this.dest, (namespace[this.dest] || 0) + 1); +}; diff --git a/node_modules/argparse/lib/action/help.js b/node_modules/argparse/lib/action/help.js new file mode 100644 index 00000000..b40e05a6 --- /dev/null +++ b/node_modules/argparse/lib/action/help.js @@ -0,0 +1,47 @@ +/*:nodoc:* + * class ActionHelp + * + * Support action for printing help + * This class inherided from [[Action]] + **/ +'use strict'; + +var util = require('util'); + +var Action = require('../action'); + +// Constants +var c = require('../const'); + +/*:nodoc:* + * new ActionHelp(options) + * - options (object): options hash see [[Action.new]] + * + **/ +var ActionHelp = module.exports = function ActionHelp(options) { + options = options || {}; + if (options.defaultValue !== null) { + options.defaultValue = options.defaultValue; + } else { + options.defaultValue = c.SUPPRESS; + } + options.dest = (options.dest !== null ? options.dest : c.SUPPRESS); + options.nargs = 0; + Action.call(this, options); + +}; +util.inherits(ActionHelp, Action); + +/*:nodoc:* + * ActionHelp#call(parser, namespace, values, optionString) + * - parser (ArgumentParser): current parser + * - namespace (Namespace): namespace for output data + * - values (Array): parsed values + * - optionString (Array): input option string(not parsed) + * + * Print help and exit + **/ +ActionHelp.prototype.call = function (parser) { + parser.printHelp(); + parser.exit(); +}; diff --git a/node_modules/argparse/lib/action/store.js b/node_modules/argparse/lib/action/store.js new file mode 100644 index 00000000..283b8609 --- /dev/null +++ b/node_modules/argparse/lib/action/store.js @@ -0,0 +1,50 @@ +/*:nodoc:* + * class ActionStore + * + * This action just stores the argument’s value. This is the default action. + * + * This class inherited from [[Action]] + * + **/ +'use strict'; + +var util = require('util'); + +var Action = require('../action'); + +// Constants +var c = require('../const'); + + +/*:nodoc:* + * new ActionStore(options) + * - options (object): options hash see [[Action.new]] + * + **/ +var ActionStore = module.exports = function ActionStore(options) { + options = options || {}; + if (this.nargs <= 0) { + throw new Error('nargs for store actions must be > 0; if you ' + + 'have nothing to store, actions such as store ' + + 'true or store const may be more appropriate'); + + } + if (typeof this.constant !== 'undefined' && this.nargs !== c.OPTIONAL) { + throw new Error('nargs must be OPTIONAL to supply const'); + } + Action.call(this, options); +}; +util.inherits(ActionStore, Action); + +/*:nodoc:* + * ActionStore#call(parser, namespace, values, optionString) -> Void + * - parser (ArgumentParser): current parser + * - namespace (Namespace): namespace for output data + * - values (Array): parsed values + * - optionString (Array): input option string(not parsed) + * + * Call the action. Save result in namespace object + **/ +ActionStore.prototype.call = function (parser, namespace, values) { + namespace.set(this.dest, values); +}; diff --git a/node_modules/argparse/lib/action/store/constant.js b/node_modules/argparse/lib/action/store/constant.js new file mode 100644 index 00000000..23caa897 --- /dev/null +++ b/node_modules/argparse/lib/action/store/constant.js @@ -0,0 +1,43 @@ +/*:nodoc:* + * class ActionStoreConstant + * + * This action stores the value specified by the const keyword argument. + * (Note that the const keyword argument defaults to the rather unhelpful null.) + * The 'store_const' action is most commonly used with optional + * arguments that specify some sort of flag. + * + * This class inherited from [[Action]] + **/ +'use strict'; + +var util = require('util'); + +var Action = require('../../action'); + +/*:nodoc:* + * new ActionStoreConstant(options) + * - options (object): options hash see [[Action.new]] + * + **/ +var ActionStoreConstant = module.exports = function ActionStoreConstant(options) { + options = options || {}; + options.nargs = 0; + if (typeof options.constant === 'undefined') { + throw new Error('constant option is required for storeAction'); + } + Action.call(this, options); +}; +util.inherits(ActionStoreConstant, Action); + +/*:nodoc:* + * ActionStoreConstant#call(parser, namespace, values, optionString) -> Void + * - parser (ArgumentParser): current parser + * - namespace (Namespace): namespace for output data + * - values (Array): parsed values + * - optionString (Array): input option string(not parsed) + * + * Call the action. Save result in namespace object + **/ +ActionStoreConstant.prototype.call = function (parser, namespace) { + namespace.set(this.dest, this.constant); +}; diff --git a/node_modules/argparse/lib/action/store/false.js b/node_modules/argparse/lib/action/store/false.js new file mode 100644 index 00000000..9924f461 --- /dev/null +++ b/node_modules/argparse/lib/action/store/false.js @@ -0,0 +1,27 @@ +/*:nodoc:* + * class ActionStoreFalse + * + * This action store the values False respectively. + * This is special cases of 'storeConst' + * + * This class inherited from [[Action]] + **/ + +'use strict'; + +var util = require('util'); + +var ActionStoreConstant = require('./constant'); + +/*:nodoc:* + * new ActionStoreFalse(options) + * - options (object): hash of options see [[Action.new]] + * + **/ +var ActionStoreFalse = module.exports = function ActionStoreFalse(options) { + options = options || {}; + options.constant = false; + options.defaultValue = options.defaultValue !== null ? options.defaultValue : true; + ActionStoreConstant.call(this, options); +}; +util.inherits(ActionStoreFalse, ActionStoreConstant); diff --git a/node_modules/argparse/lib/action/store/true.js b/node_modules/argparse/lib/action/store/true.js new file mode 100644 index 00000000..9e22f7d4 --- /dev/null +++ b/node_modules/argparse/lib/action/store/true.js @@ -0,0 +1,26 @@ +/*:nodoc:* + * class ActionStoreTrue + * + * This action store the values True respectively. + * This isspecial cases of 'storeConst' + * + * This class inherited from [[Action]] + **/ +'use strict'; + +var util = require('util'); + +var ActionStoreConstant = require('./constant'); + +/*:nodoc:* + * new ActionStoreTrue(options) + * - options (object): options hash see [[Action.new]] + * + **/ +var ActionStoreTrue = module.exports = function ActionStoreTrue(options) { + options = options || {}; + options.constant = true; + options.defaultValue = options.defaultValue !== null ? options.defaultValue : false; + ActionStoreConstant.call(this, options); +}; +util.inherits(ActionStoreTrue, ActionStoreConstant); diff --git a/node_modules/argparse/lib/action/subparsers.js b/node_modules/argparse/lib/action/subparsers.js new file mode 100644 index 00000000..99dfedd0 --- /dev/null +++ b/node_modules/argparse/lib/action/subparsers.js @@ -0,0 +1,149 @@ +/** internal + * class ActionSubparsers + * + * Support the creation of such sub-commands with the addSubparsers() + * + * This class inherited from [[Action]] + **/ +'use strict'; + +var util = require('util'); +var format = require('util').format; + + +var Action = require('../action'); + +// Constants +var c = require('../const'); + +// Errors +var argumentErrorHelper = require('../argument/error'); + + +/*:nodoc:* + * new ChoicesPseudoAction(name, help) + * + * Create pseudo action for correct help text + * + **/ +function ChoicesPseudoAction(name, help) { + var options = { + optionStrings: [], + dest: name, + help: help + }; + + Action.call(this, options); +} + +util.inherits(ChoicesPseudoAction, Action); + +/** + * new ActionSubparsers(options) + * - options (object): options hash see [[Action.new]] + * + **/ +function ActionSubparsers(options) { + options = options || {}; + options.dest = options.dest || c.SUPPRESS; + options.nargs = c.PARSER; + + this.debug = (options.debug === true); + + this._progPrefix = options.prog; + this._parserClass = options.parserClass; + this._nameParserMap = {}; + this._choicesActions = []; + + options.choices = this._nameParserMap; + Action.call(this, options); +} + +util.inherits(ActionSubparsers, Action); + +/*:nodoc:* + * ActionSubparsers#addParser(name, options) -> ArgumentParser + * - name (string): sub-command name + * - options (object): see [[ArgumentParser.new]] + * + * Note: + * addParser supports an additional aliases option, + * which allows multiple strings to refer to the same subparser. + * This example, like svn, aliases co as a shorthand for checkout + * + **/ +ActionSubparsers.prototype.addParser = function (name, options) { + var parser; + + var self = this; + + options = options || {}; + + options.debug = (this.debug === true); + + // set program from the existing prefix + if (!options.prog) { + options.prog = this._progPrefix + ' ' + name; + } + + var aliases = options.aliases || []; + + // create a pseudo-action to hold the choice help + if (!!options.help || typeof options.help === 'string') { + var help = options.help; + delete options.help; + + var choiceAction = new ChoicesPseudoAction(name, help); + this._choicesActions.push(choiceAction); + } + + // create the parser and add it to the map + parser = new this._parserClass(options); + this._nameParserMap[name] = parser; + + // make parser available under aliases also + aliases.forEach(function (alias) { + self._nameParserMap[alias] = parser; + }); + + return parser; +}; + +ActionSubparsers.prototype._getSubactions = function () { + return this._choicesActions; +}; + +/*:nodoc:* + * ActionSubparsers#call(parser, namespace, values, optionString) -> Void + * - parser (ArgumentParser): current parser + * - namespace (Namespace): namespace for output data + * - values (Array): parsed values + * - optionString (Array): input option string(not parsed) + * + * Call the action. Parse input aguments + **/ +ActionSubparsers.prototype.call = function (parser, namespace, values) { + var parserName = values[0]; + var argStrings = values.slice(1); + + // set the parser name if requested + if (this.dest !== c.SUPPRESS) { + namespace[this.dest] = parserName; + } + + // select the parser + if (this._nameParserMap[parserName]) { + parser = this._nameParserMap[parserName]; + } else { + throw argumentErrorHelper(format( + 'Unknown parser "%s" (choices: [%s]).', + parserName, + Object.keys(this._nameParserMap).join(', ') + )); + } + + // parse all the remaining options into the namespace + parser.parseArgs(argStrings, namespace); +}; + +module.exports = ActionSubparsers; diff --git a/node_modules/argparse/lib/action/version.js b/node_modules/argparse/lib/action/version.js new file mode 100644 index 00000000..8053328c --- /dev/null +++ b/node_modules/argparse/lib/action/version.js @@ -0,0 +1,47 @@ +/*:nodoc:* + * class ActionVersion + * + * Support action for printing program version + * This class inherited from [[Action]] + **/ +'use strict'; + +var util = require('util'); + +var Action = require('../action'); + +// +// Constants +// +var c = require('../const'); + +/*:nodoc:* + * new ActionVersion(options) + * - options (object): options hash see [[Action.new]] + * + **/ +var ActionVersion = module.exports = function ActionVersion(options) { + options = options || {}; + options.defaultValue = (options.defaultValue ? options.defaultValue : c.SUPPRESS); + options.dest = (options.dest || c.SUPPRESS); + options.nargs = 0; + this.version = options.version; + Action.call(this, options); +}; +util.inherits(ActionVersion, Action); + +/*:nodoc:* + * ActionVersion#call(parser, namespace, values, optionString) -> Void + * - parser (ArgumentParser): current parser + * - namespace (Namespace): namespace for output data + * - values (Array): parsed values + * - optionString (Array): input option string(not parsed) + * + * Print version and exit + **/ +ActionVersion.prototype.call = function (parser) { + var version = this.version || parser.version; + var formatter = parser._getFormatter(); + formatter.addText(version); + parser.exit(0, formatter.formatHelp()); +}; diff --git a/node_modules/argparse/lib/action_container.js b/node_modules/argparse/lib/action_container.js new file mode 100644 index 00000000..6f1237be --- /dev/null +++ b/node_modules/argparse/lib/action_container.js @@ -0,0 +1,482 @@ +/** internal + * class ActionContainer + * + * Action container. Parent for [[ArgumentParser]] and [[ArgumentGroup]] + **/ + +'use strict'; + +var format = require('util').format; + +// Constants +var c = require('./const'); + +var $$ = require('./utils'); + +//Actions +var ActionHelp = require('./action/help'); +var ActionAppend = require('./action/append'); +var ActionAppendConstant = require('./action/append/constant'); +var ActionCount = require('./action/count'); +var ActionStore = require('./action/store'); +var ActionStoreConstant = require('./action/store/constant'); +var ActionStoreTrue = require('./action/store/true'); +var ActionStoreFalse = require('./action/store/false'); +var ActionVersion = require('./action/version'); +var ActionSubparsers = require('./action/subparsers'); + +// Errors +var argumentErrorHelper = require('./argument/error'); + +/** + * new ActionContainer(options) + * + * Action container. Parent for [[ArgumentParser]] and [[ArgumentGroup]] + * + * ##### Options: + * + * - `description` -- A description of what the program does + * - `prefixChars` -- Characters that prefix optional arguments + * - `argumentDefault` -- The default value for all arguments + * - `conflictHandler` -- The conflict handler to use for duplicate arguments + **/ +var ActionContainer = module.exports = function ActionContainer(options) { + options = options || {}; + + this.description = options.description; + this.argumentDefault = options.argumentDefault; + this.prefixChars = options.prefixChars || ''; + this.conflictHandler = options.conflictHandler; + + // set up registries + this._registries = {}; + + // register actions + this.register('action', null, ActionStore); + this.register('action', 'store', ActionStore); + this.register('action', 'storeConst', ActionStoreConstant); + this.register('action', 'storeTrue', ActionStoreTrue); + this.register('action', 'storeFalse', ActionStoreFalse); + this.register('action', 'append', ActionAppend); + this.register('action', 'appendConst', ActionAppendConstant); + this.register('action', 'count', ActionCount); + this.register('action', 'help', ActionHelp); + this.register('action', 'version', ActionVersion); + this.register('action', 'parsers', ActionSubparsers); + + // raise an exception if the conflict handler is invalid + this._getHandler(); + + // action storage + this._actions = []; + this._optionStringActions = {}; + + // groups + this._actionGroups = []; + this._mutuallyExclusiveGroups = []; + + // defaults storage + this._defaults = {}; + + // determines whether an "option" looks like a negative number + // -1, -1.5 -5e+4 + this._regexpNegativeNumber = new RegExp('^[-]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?$'); + + // whether or not there are any optionals that look like negative + // numbers -- uses a list so it can be shared and edited + this._hasNegativeNumberOptionals = []; +}; + +// Groups must be required, then ActionContainer already defined +var ArgumentGroup = require('./argument/group'); +var MutuallyExclusiveGroup = require('./argument/exclusive'); + +// +// Registration methods +// + +/** + * ActionContainer#register(registryName, value, object) -> Void + * - registryName (String) : object type action|type + * - value (string) : keyword + * - object (Object|Function) : handler + * + * Register handlers + **/ +ActionContainer.prototype.register = function (registryName, value, object) { + this._registries[registryName] = this._registries[registryName] || {}; + this._registries[registryName][value] = object; +}; + +ActionContainer.prototype._registryGet = function (registryName, value, defaultValue) { + if (arguments.length < 3) { + defaultValue = null; + } + return this._registries[registryName][value] || defaultValue; +}; + +// +// Namespace default accessor methods +// + +/** + * ActionContainer#setDefaults(options) -> Void + * - options (object):hash of options see [[Action.new]] + * + * Set defaults + **/ +ActionContainer.prototype.setDefaults = function (options) { + options = options || {}; + for (var property in options) { + if ($$.has(options, property)) { + this._defaults[property] = options[property]; + } + } + + // if these defaults match any existing arguments, replace the previous + // default on the object with the new one + this._actions.forEach(function (action) { + if ($$.has(options, action.dest)) { + action.defaultValue = options[action.dest]; + } + }); +}; + +/** + * ActionContainer#getDefault(dest) -> Mixed + * - dest (string): action destination + * + * Return action default value + **/ +ActionContainer.prototype.getDefault = function (dest) { + var result = $$.has(this._defaults, dest) ? this._defaults[dest] : null; + + this._actions.forEach(function (action) { + if (action.dest === dest && $$.has(action, 'defaultValue')) { + result = action.defaultValue; + } + }); + + return result; +}; +// +// Adding argument actions +// + +/** + * ActionContainer#addArgument(args, options) -> Object + * - args (String|Array): argument key, or array of argument keys + * - options (Object): action objects see [[Action.new]] + * + * #### Examples + * - addArgument([ '-f', '--foo' ], { action: 'store', defaultValue: 1, ... }) + * - addArgument([ 'bar' ], { action: 'store', nargs: 1, ... }) + * - addArgument('--baz', { action: 'store', nargs: 1, ... }) + **/ +ActionContainer.prototype.addArgument = function (args, options) { + args = args; + options = options || {}; + + if (typeof args === 'string') { + args = [ args ]; + } + if (!Array.isArray(args)) { + throw new TypeError('addArgument first argument should be a string or an array'); + } + if (typeof options !== 'object' || Array.isArray(options)) { + throw new TypeError('addArgument second argument should be a hash'); + } + + // if no positional args are supplied or only one is supplied and + // it doesn't look like an option string, parse a positional argument + if (!args || args.length === 1 && this.prefixChars.indexOf(args[0][0]) < 0) { + if (args && !!options.dest) { + throw new Error('dest supplied twice for positional argument'); + } + options = this._getPositional(args, options); + + // otherwise, we're adding an optional argument + } else { + options = this._getOptional(args, options); + } + + // if no default was supplied, use the parser-level default + if (typeof options.defaultValue === 'undefined') { + var dest = options.dest; + if ($$.has(this._defaults, dest)) { + options.defaultValue = this._defaults[dest]; + } else if (typeof this.argumentDefault !== 'undefined') { + options.defaultValue = this.argumentDefault; + } + } + + // create the action object, and add it to the parser + var ActionClass = this._popActionClass(options); + if (typeof ActionClass !== 'function') { + throw new Error(format('Unknown action "%s".', ActionClass)); + } + var action = new ActionClass(options); + + // throw an error if the action type is not callable + var typeFunction = this._registryGet('type', action.type, action.type); + if (typeof typeFunction !== 'function') { + throw new Error(format('"%s" is not callable', typeFunction)); + } + + return this._addAction(action); +}; + +/** + * ActionContainer#addArgumentGroup(options) -> ArgumentGroup + * - options (Object): hash of options see [[ArgumentGroup.new]] + * + * Create new arguments groups + **/ +ActionContainer.prototype.addArgumentGroup = function (options) { + var group = new ArgumentGroup(this, options); + this._actionGroups.push(group); + return group; +}; + +/** + * ActionContainer#addMutuallyExclusiveGroup(options) -> ArgumentGroup + * - options (Object): {required: false} + * + * Create new mutual exclusive groups + **/ +ActionContainer.prototype.addMutuallyExclusiveGroup = function (options) { + var group = new MutuallyExclusiveGroup(this, options); + this._mutuallyExclusiveGroups.push(group); + return group; +}; + +ActionContainer.prototype._addAction = function (action) { + var self = this; + + // resolve any conflicts + this._checkConflict(action); + + // add to actions list + this._actions.push(action); + action.container = this; + + // index the action by any option strings it has + action.optionStrings.forEach(function (optionString) { + self._optionStringActions[optionString] = action; + }); + + // set the flag if any option strings look like negative numbers + action.optionStrings.forEach(function (optionString) { + if (optionString.match(self._regexpNegativeNumber)) { + if (!self._hasNegativeNumberOptionals.some(Boolean)) { + self._hasNegativeNumberOptionals.push(true); + } + } + }); + + // return the created action + return action; +}; + +ActionContainer.prototype._removeAction = function (action) { + var actionIndex = this._actions.indexOf(action); + if (actionIndex >= 0) { + this._actions.splice(actionIndex, 1); + } +}; + +ActionContainer.prototype._addContainerActions = function (container) { + // collect groups by titles + var titleGroupMap = {}; + this._actionGroups.forEach(function (group) { + if (titleGroupMap[group.title]) { + throw new Error(format('Cannot merge actions - two groups are named "%s".', group.title)); + } + titleGroupMap[group.title] = group; + }); + + // map each action to its group + var groupMap = {}; + function actionHash(action) { + // unique (hopefully?) string suitable as dictionary key + return action.getName(); + } + container._actionGroups.forEach(function (group) { + // if a group with the title exists, use that, otherwise + // create a new group matching the container's group + if (!titleGroupMap[group.title]) { + titleGroupMap[group.title] = this.addArgumentGroup({ + title: group.title, + description: group.description + }); + } + + // map the actions to their new group + group._groupActions.forEach(function (action) { + groupMap[actionHash(action)] = titleGroupMap[group.title]; + }); + }, this); + + // add container's mutually exclusive groups + // NOTE: if add_mutually_exclusive_group ever gains title= and + // description= then this code will need to be expanded as above + var mutexGroup; + container._mutuallyExclusiveGroups.forEach(function (group) { + mutexGroup = this.addMutuallyExclusiveGroup({ + required: group.required + }); + // map the actions to their new mutex group + group._groupActions.forEach(function (action) { + groupMap[actionHash(action)] = mutexGroup; + }); + }, this); // forEach takes a 'this' argument + + // add all actions to this container or their group + container._actions.forEach(function (action) { + var key = actionHash(action); + if (groupMap[key]) { + groupMap[key]._addAction(action); + } else { + this._addAction(action); + } + }); +}; + +ActionContainer.prototype._getPositional = function (dest, options) { + if (Array.isArray(dest)) { + dest = dest[0]; + } + // make sure required is not specified + if (options.required) { + throw new Error('"required" is an invalid argument for positionals.'); + } + + // mark positional arguments as required if at least one is + // always required + if (options.nargs !== c.OPTIONAL && options.nargs !== c.ZERO_OR_MORE) { + options.required = true; + } + if (options.nargs === c.ZERO_OR_MORE && typeof options.defaultValue === 'undefined') { + options.required = true; + } + + // return the keyword arguments with no option strings + options.dest = dest; + options.optionStrings = []; + return options; +}; + +ActionContainer.prototype._getOptional = function (args, options) { + var prefixChars = this.prefixChars; + var optionStrings = []; + var optionStringsLong = []; + + // determine short and long option strings + args.forEach(function (optionString) { + // error on strings that don't start with an appropriate prefix + if (prefixChars.indexOf(optionString[0]) < 0) { + throw new Error(format('Invalid option string "%s": must start with a "%s".', + optionString, + prefixChars + )); + } + + // strings starting with two prefix characters are long options + optionStrings.push(optionString); + if (optionString.length > 1 && prefixChars.indexOf(optionString[1]) >= 0) { + optionStringsLong.push(optionString); + } + }); + + // infer dest, '--foo-bar' -> 'foo_bar' and '-x' -> 'x' + var dest = options.dest || null; + delete options.dest; + + if (!dest) { + var optionStringDest = optionStringsLong.length ? optionStringsLong[0] : optionStrings[0]; + dest = $$.trimChars(optionStringDest, this.prefixChars); + + if (dest.length === 0) { + throw new Error( + format('dest= is required for options like "%s"', optionStrings.join(', ')) + ); + } + dest = dest.replace(/-/g, '_'); + } + + // return the updated keyword arguments + options.dest = dest; + options.optionStrings = optionStrings; + + return options; +}; + +ActionContainer.prototype._popActionClass = function (options, defaultValue) { + defaultValue = defaultValue || null; + + var action = (options.action || defaultValue); + delete options.action; + + var actionClass = this._registryGet('action', action, action); + return actionClass; +}; + +ActionContainer.prototype._getHandler = function () { + var handlerString = this.conflictHandler; + var handlerFuncName = '_handleConflict' + $$.capitalize(handlerString); + var func = this[handlerFuncName]; + if (typeof func === 'undefined') { + var msg = 'invalid conflict resolution value: ' + handlerString; + throw new Error(msg); + } else { + return func; + } +}; + +ActionContainer.prototype._checkConflict = function (action) { + var optionStringActions = this._optionStringActions; + var conflictOptionals = []; + + // find all options that conflict with this option + // collect pairs, the string, and an existing action that it conflicts with + action.optionStrings.forEach(function (optionString) { + var conflOptional = optionStringActions[optionString]; + if (typeof conflOptional !== 'undefined') { + conflictOptionals.push([ optionString, conflOptional ]); + } + }); + + if (conflictOptionals.length > 0) { + var conflictHandler = this._getHandler(); + conflictHandler.call(this, action, conflictOptionals); + } +}; + +ActionContainer.prototype._handleConflictError = function (action, conflOptionals) { + var conflicts = conflOptionals.map(function (pair) { return pair[0]; }); + conflicts = conflicts.join(', '); + throw argumentErrorHelper( + action, + format('Conflicting option string(s): %s', conflicts) + ); +}; + +ActionContainer.prototype._handleConflictResolve = function (action, conflOptionals) { + // remove all conflicting options + var self = this; + conflOptionals.forEach(function (pair) { + var optionString = pair[0]; + var conflictingAction = pair[1]; + // remove the conflicting option string + var i = conflictingAction.optionStrings.indexOf(optionString); + if (i >= 0) { + conflictingAction.optionStrings.splice(i, 1); + } + delete self._optionStringActions[optionString]; + // if the option now has no option string, remove it from the + // container holding it + if (conflictingAction.optionStrings.length === 0) { + conflictingAction.container._removeAction(conflictingAction); + } + }); +}; diff --git a/node_modules/argparse/lib/argparse.js b/node_modules/argparse/lib/argparse.js new file mode 100644 index 00000000..f2a2c51d --- /dev/null +++ b/node_modules/argparse/lib/argparse.js @@ -0,0 +1,14 @@ +'use strict'; + +module.exports.ArgumentParser = require('./argument_parser.js'); +module.exports.Namespace = require('./namespace'); +module.exports.Action = require('./action'); +module.exports.HelpFormatter = require('./help/formatter.js'); +module.exports.Const = require('./const.js'); + +module.exports.ArgumentDefaultsHelpFormatter = + require('./help/added_formatters.js').ArgumentDefaultsHelpFormatter; +module.exports.RawDescriptionHelpFormatter = + require('./help/added_formatters.js').RawDescriptionHelpFormatter; +module.exports.RawTextHelpFormatter = + require('./help/added_formatters.js').RawTextHelpFormatter; diff --git a/node_modules/argparse/lib/argument/error.js b/node_modules/argparse/lib/argument/error.js new file mode 100644 index 00000000..c8a02a08 --- /dev/null +++ b/node_modules/argparse/lib/argument/error.js @@ -0,0 +1,50 @@ +'use strict'; + + +var format = require('util').format; + + +var ERR_CODE = 'ARGError'; + +/*:nodoc:* + * argumentError(argument, message) -> TypeError + * - argument (Object): action with broken argument + * - message (String): error message + * + * Error format helper. An error from creating or using an argument + * (optional or positional). The string value of this exception + * is the message, augmented with information + * about the argument that caused it. + * + * #####Example + * + * var argumentErrorHelper = require('./argument/error'); + * if (conflictOptionals.length > 0) { + * throw argumentErrorHelper( + * action, + * format('Conflicting option string(s): %s', conflictOptionals.join(', ')) + * ); + * } + * + **/ +module.exports = function (argument, message) { + var argumentName = null; + var errMessage; + var err; + + if (argument.getName) { + argumentName = argument.getName(); + } else { + argumentName = '' + argument; + } + + if (!argumentName) { + errMessage = message; + } else { + errMessage = format('argument "%s": %s', argumentName, message); + } + + err = new TypeError(errMessage); + err.code = ERR_CODE; + return err; +}; diff --git a/node_modules/argparse/lib/argument/exclusive.js b/node_modules/argparse/lib/argument/exclusive.js new file mode 100644 index 00000000..8287e00d --- /dev/null +++ b/node_modules/argparse/lib/argument/exclusive.js @@ -0,0 +1,54 @@ +/** internal + * class MutuallyExclusiveGroup + * + * Group arguments. + * By default, ArgumentParser groups command-line arguments + * into “positional arguments” and “optional arguments” + * when displaying help messages. When there is a better + * conceptual grouping of arguments than this default one, + * appropriate groups can be created using the addArgumentGroup() method + * + * This class inherited from [[ArgumentContainer]] + **/ +'use strict'; + +var util = require('util'); + +var ArgumentGroup = require('./group'); + +/** + * new MutuallyExclusiveGroup(container, options) + * - container (object): main container + * - options (object): options.required -> true/false + * + * `required` could be an argument itself, but making it a property of + * the options argument is more consistent with the JS adaptation of the Python) + **/ +var MutuallyExclusiveGroup = module.exports = function MutuallyExclusiveGroup(container, options) { + var required; + options = options || {}; + required = options.required || false; + ArgumentGroup.call(this, container); + this.required = required; + +}; +util.inherits(MutuallyExclusiveGroup, ArgumentGroup); + + +MutuallyExclusiveGroup.prototype._addAction = function (action) { + var msg; + if (action.required) { + msg = 'mutually exclusive arguments must be optional'; + throw new Error(msg); + } + action = this._container._addAction(action); + this._groupActions.push(action); + return action; +}; + + +MutuallyExclusiveGroup.prototype._removeAction = function (action) { + this._container._removeAction(action); + this._groupActions.remove(action); +}; + diff --git a/node_modules/argparse/lib/argument/group.js b/node_modules/argparse/lib/argument/group.js new file mode 100644 index 00000000..58b271f2 --- /dev/null +++ b/node_modules/argparse/lib/argument/group.js @@ -0,0 +1,75 @@ +/** internal + * class ArgumentGroup + * + * Group arguments. + * By default, ArgumentParser groups command-line arguments + * into “positional arguments” and “optional arguments” + * when displaying help messages. When there is a better + * conceptual grouping of arguments than this default one, + * appropriate groups can be created using the addArgumentGroup() method + * + * This class inherited from [[ArgumentContainer]] + **/ +'use strict'; + +var util = require('util'); + +var ActionContainer = require('../action_container'); + + +/** + * new ArgumentGroup(container, options) + * - container (object): main container + * - options (object): hash of group options + * + * #### options + * - **prefixChars** group name prefix + * - **argumentDefault** default argument value + * - **title** group title + * - **description** group description + * + **/ +var ArgumentGroup = module.exports = function ArgumentGroup(container, options) { + + options = options || {}; + + // add any missing keyword arguments by checking the container + options.conflictHandler = (options.conflictHandler || container.conflictHandler); + options.prefixChars = (options.prefixChars || container.prefixChars); + options.argumentDefault = (options.argumentDefault || container.argumentDefault); + + ActionContainer.call(this, options); + + // group attributes + this.title = options.title; + this._groupActions = []; + + // share most attributes with the container + this._container = container; + this._registries = container._registries; + this._actions = container._actions; + this._optionStringActions = container._optionStringActions; + this._defaults = container._defaults; + this._hasNegativeNumberOptionals = container._hasNegativeNumberOptionals; + this._mutuallyExclusiveGroups = container._mutuallyExclusiveGroups; +}; +util.inherits(ArgumentGroup, ActionContainer); + + +ArgumentGroup.prototype._addAction = function (action) { + // Parent add action + action = ActionContainer.prototype._addAction.call(this, action); + this._groupActions.push(action); + return action; +}; + + +ArgumentGroup.prototype._removeAction = function (action) { + // Parent remove action + ActionContainer.prototype._removeAction.call(this, action); + var actionIndex = this._groupActions.indexOf(action); + if (actionIndex >= 0) { + this._groupActions.splice(actionIndex, 1); + } +}; + diff --git a/node_modules/argparse/lib/argument_parser.js b/node_modules/argparse/lib/argument_parser.js new file mode 100644 index 00000000..bd9a59a4 --- /dev/null +++ b/node_modules/argparse/lib/argument_parser.js @@ -0,0 +1,1161 @@ +/** + * class ArgumentParser + * + * Object for parsing command line strings into js objects. + * + * Inherited from [[ActionContainer]] + **/ +'use strict'; + +var util = require('util'); +var format = require('util').format; +var Path = require('path'); +var sprintf = require('sprintf-js').sprintf; + +// Constants +var c = require('./const'); + +var $$ = require('./utils'); + +var ActionContainer = require('./action_container'); + +// Errors +var argumentErrorHelper = require('./argument/error'); + +var HelpFormatter = require('./help/formatter'); + +var Namespace = require('./namespace'); + + +/** + * new ArgumentParser(options) + * + * Create a new ArgumentParser object. + * + * ##### Options: + * - `prog` The name of the program (default: Path.basename(process.argv[1])) + * - `usage` A usage message (default: auto-generated from arguments) + * - `description` A description of what the program does + * - `epilog` Text following the argument descriptions + * - `parents` Parsers whose arguments should be copied into this one + * - `formatterClass` HelpFormatter class for printing help messages + * - `prefixChars` Characters that prefix optional arguments + * - `fromfilePrefixChars` Characters that prefix files containing additional arguments + * - `argumentDefault` The default value for all arguments + * - `addHelp` Add a -h/-help option + * - `conflictHandler` Specifies how to handle conflicting argument names + * - `debug` Enable debug mode. Argument errors throw exception in + * debug mode and process.exit in normal. Used for development and + * testing (default: false) + * + * See also [original guide][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#argumentparser-objects + **/ +function ArgumentParser(options) { + if (!(this instanceof ArgumentParser)) { + return new ArgumentParser(options); + } + var self = this; + options = options || {}; + + options.description = (options.description || null); + options.argumentDefault = (options.argumentDefault || null); + options.prefixChars = (options.prefixChars || '-'); + options.conflictHandler = (options.conflictHandler || 'error'); + ActionContainer.call(this, options); + + options.addHelp = typeof options.addHelp === 'undefined' || !!options.addHelp; + options.parents = options.parents || []; + // default program name + options.prog = (options.prog || Path.basename(process.argv[1])); + this.prog = options.prog; + this.usage = options.usage; + this.epilog = options.epilog; + this.version = options.version; + + this.debug = (options.debug === true); + + this.formatterClass = (options.formatterClass || HelpFormatter); + this.fromfilePrefixChars = options.fromfilePrefixChars || null; + this._positionals = this.addArgumentGroup({ title: 'Positional arguments' }); + this._optionals = this.addArgumentGroup({ title: 'Optional arguments' }); + this._subparsers = null; + + // register types + function FUNCTION_IDENTITY(o) { + return o; + } + this.register('type', 'auto', FUNCTION_IDENTITY); + this.register('type', null, FUNCTION_IDENTITY); + this.register('type', 'int', function (x) { + var result = parseInt(x, 10); + if (isNaN(result)) { + throw new Error(x + ' is not a valid integer.'); + } + return result; + }); + this.register('type', 'float', function (x) { + var result = parseFloat(x); + if (isNaN(result)) { + throw new Error(x + ' is not a valid float.'); + } + return result; + }); + this.register('type', 'string', function (x) { + return '' + x; + }); + + // add help and version arguments if necessary + var defaultPrefix = (this.prefixChars.indexOf('-') > -1) ? '-' : this.prefixChars[0]; + if (options.addHelp) { + this.addArgument( + [ defaultPrefix + 'h', defaultPrefix + defaultPrefix + 'help' ], + { + action: 'help', + defaultValue: c.SUPPRESS, + help: 'Show this help message and exit.' + } + ); + } + if (typeof this.version !== 'undefined') { + this.addArgument( + [ defaultPrefix + 'v', defaultPrefix + defaultPrefix + 'version' ], + { + action: 'version', + version: this.version, + defaultValue: c.SUPPRESS, + help: "Show program's version number and exit." + } + ); + } + + // add parent arguments and defaults + options.parents.forEach(function (parent) { + self._addContainerActions(parent); + if (typeof parent._defaults !== 'undefined') { + for (var defaultKey in parent._defaults) { + if (parent._defaults.hasOwnProperty(defaultKey)) { + self._defaults[defaultKey] = parent._defaults[defaultKey]; + } + } + } + }); +} + +util.inherits(ArgumentParser, ActionContainer); + +/** + * ArgumentParser#addSubparsers(options) -> [[ActionSubparsers]] + * - options (object): hash of options see [[ActionSubparsers.new]] + * + * See also [subcommands][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#sub-commands + **/ +ArgumentParser.prototype.addSubparsers = function (options) { + if (this._subparsers) { + this.error('Cannot have multiple subparser arguments.'); + } + + options = options || {}; + options.debug = (this.debug === true); + options.optionStrings = []; + options.parserClass = (options.parserClass || ArgumentParser); + + + if (!!options.title || !!options.description) { + + this._subparsers = this.addArgumentGroup({ + title: (options.title || 'subcommands'), + description: options.description + }); + delete options.title; + delete options.description; + + } else { + this._subparsers = this._positionals; + } + + // prog defaults to the usage message of this parser, skipping + // optional arguments and with no "usage:" prefix + if (!options.prog) { + var formatter = this._getFormatter(); + var positionals = this._getPositionalActions(); + var groups = this._mutuallyExclusiveGroups; + formatter.addUsage(this.usage, positionals, groups, ''); + options.prog = formatter.formatHelp().trim(); + } + + // create the parsers action and add it to the positionals list + var ParsersClass = this._popActionClass(options, 'parsers'); + var action = new ParsersClass(options); + this._subparsers._addAction(action); + + // return the created parsers action + return action; +}; + +ArgumentParser.prototype._addAction = function (action) { + if (action.isOptional()) { + this._optionals._addAction(action); + } else { + this._positionals._addAction(action); + } + return action; +}; + +ArgumentParser.prototype._getOptionalActions = function () { + return this._actions.filter(function (action) { + return action.isOptional(); + }); +}; + +ArgumentParser.prototype._getPositionalActions = function () { + return this._actions.filter(function (action) { + return action.isPositional(); + }); +}; + + +/** + * ArgumentParser#parseArgs(args, namespace) -> Namespace|Object + * - args (array): input elements + * - namespace (Namespace|Object): result object + * + * Parsed args and throws error if some arguments are not recognized + * + * See also [original guide][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#the-parse-args-method + **/ +ArgumentParser.prototype.parseArgs = function (args, namespace) { + var argv; + var result = this.parseKnownArgs(args, namespace); + + args = result[0]; + argv = result[1]; + if (argv && argv.length > 0) { + this.error( + format('Unrecognized arguments: %s.', argv.join(' ')) + ); + } + return args; +}; + +/** + * ArgumentParser#parseKnownArgs(args, namespace) -> array + * - args (array): input options + * - namespace (Namespace|Object): result object + * + * Parse known arguments and return tuple of result object + * and unknown args + * + * See also [original guide][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#partial-parsing + **/ +ArgumentParser.prototype.parseKnownArgs = function (args, namespace) { + var self = this; + + // args default to the system args + args = args || process.argv.slice(2); + + // default Namespace built from parser defaults + namespace = namespace || new Namespace(); + + self._actions.forEach(function (action) { + if (action.dest !== c.SUPPRESS) { + if (!$$.has(namespace, action.dest)) { + if (action.defaultValue !== c.SUPPRESS) { + var defaultValue = action.defaultValue; + if (typeof action.defaultValue === 'string') { + defaultValue = self._getValue(action, defaultValue); + } + namespace[action.dest] = defaultValue; + } + } + } + }); + + Object.keys(self._defaults).forEach(function (dest) { + namespace[dest] = self._defaults[dest]; + }); + + // parse the arguments and exit if there are any errors + try { + var res = this._parseKnownArgs(args, namespace); + + namespace = res[0]; + args = res[1]; + if ($$.has(namespace, c._UNRECOGNIZED_ARGS_ATTR)) { + args = $$.arrayUnion(args, namespace[c._UNRECOGNIZED_ARGS_ATTR]); + delete namespace[c._UNRECOGNIZED_ARGS_ATTR]; + } + return [ namespace, args ]; + } catch (e) { + this.error(e); + } +}; + +ArgumentParser.prototype._parseKnownArgs = function (argStrings, namespace) { + var self = this; + + var extras = []; + + // replace arg strings that are file references + if (this.fromfilePrefixChars !== null) { + argStrings = this._readArgsFromFiles(argStrings); + } + // map all mutually exclusive arguments to the other arguments + // they can't occur with + // Python has 'conflicts = action_conflicts.setdefault(mutex_action, [])' + // though I can't conceive of a way in which an action could be a member + // of two different mutually exclusive groups. + + function actionHash(action) { + // some sort of hashable key for this action + // action itself cannot be a key in actionConflicts + // I think getName() (join of optionStrings) is unique enough + return action.getName(); + } + + var conflicts, key; + var actionConflicts = {}; + + this._mutuallyExclusiveGroups.forEach(function (mutexGroup) { + mutexGroup._groupActions.forEach(function (mutexAction, i, groupActions) { + key = actionHash(mutexAction); + if (!$$.has(actionConflicts, key)) { + actionConflicts[key] = []; + } + conflicts = actionConflicts[key]; + conflicts.push.apply(conflicts, groupActions.slice(0, i)); + conflicts.push.apply(conflicts, groupActions.slice(i + 1)); + }); + }); + + // find all option indices, and determine the arg_string_pattern + // which has an 'O' if there is an option at an index, + // an 'A' if there is an argument, or a '-' if there is a '--' + var optionStringIndices = {}; + + var argStringPatternParts = []; + + argStrings.forEach(function (argString, argStringIndex) { + if (argString === '--') { + argStringPatternParts.push('-'); + while (argStringIndex < argStrings.length) { + argStringPatternParts.push('A'); + argStringIndex++; + } + } else { + // otherwise, add the arg to the arg strings + // and note the index if it was an option + var pattern; + var optionTuple = self._parseOptional(argString); + if (!optionTuple) { + pattern = 'A'; + } else { + optionStringIndices[argStringIndex] = optionTuple; + pattern = 'O'; + } + argStringPatternParts.push(pattern); + } + }); + var argStringsPattern = argStringPatternParts.join(''); + + var seenActions = []; + var seenNonDefaultActions = []; + + + function takeAction(action, argumentStrings, optionString) { + seenActions.push(action); + var argumentValues = self._getValues(action, argumentStrings); + + // error if this argument is not allowed with other previously + // seen arguments, assuming that actions that use the default + // value don't really count as "present" + if (argumentValues !== action.defaultValue) { + seenNonDefaultActions.push(action); + if (actionConflicts[actionHash(action)]) { + actionConflicts[actionHash(action)].forEach(function (actionConflict) { + if (seenNonDefaultActions.indexOf(actionConflict) >= 0) { + throw argumentErrorHelper( + action, + format('Not allowed with argument "%s".', actionConflict.getName()) + ); + } + }); + } + } + + if (argumentValues !== c.SUPPRESS) { + action.call(self, namespace, argumentValues, optionString); + } + } + + function consumeOptional(startIndex) { + // get the optional identified at this index + var optionTuple = optionStringIndices[startIndex]; + var action = optionTuple[0]; + var optionString = optionTuple[1]; + var explicitArg = optionTuple[2]; + + // identify additional optionals in the same arg string + // (e.g. -xyz is the same as -x -y -z if no args are required) + var actionTuples = []; + + var args, argCount, start, stop; + + for (;;) { + if (!action) { + extras.push(argStrings[startIndex]); + return startIndex + 1; + } + if (explicitArg) { + argCount = self._matchArgument(action, 'A'); + + // if the action is a single-dash option and takes no + // arguments, try to parse more single-dash options out + // of the tail of the option string + var chars = self.prefixChars; + if (argCount === 0 && chars.indexOf(optionString[1]) < 0) { + actionTuples.push([ action, [], optionString ]); + optionString = optionString[0] + explicitArg[0]; + var newExplicitArg = explicitArg.slice(1) || null; + var optionalsMap = self._optionStringActions; + + if (Object.keys(optionalsMap).indexOf(optionString) >= 0) { + action = optionalsMap[optionString]; + explicitArg = newExplicitArg; + } else { + throw argumentErrorHelper(action, sprintf('ignored explicit argument %r', explicitArg)); + } + } else if (argCount === 1) { + // if the action expect exactly one argument, we've + // successfully matched the option; exit the loop + stop = startIndex + 1; + args = [ explicitArg ]; + actionTuples.push([ action, args, optionString ]); + break; + } else { + // error if a double-dash option did not use the + // explicit argument + throw argumentErrorHelper(action, sprintf('ignored explicit argument %r', explicitArg)); + } + } else { + // if there is no explicit argument, try to match the + // optional's string arguments with the following strings + // if successful, exit the loop + + start = startIndex + 1; + var selectedPatterns = argStringsPattern.substr(start); + + argCount = self._matchArgument(action, selectedPatterns); + stop = start + argCount; + + + args = argStrings.slice(start, stop); + + actionTuples.push([ action, args, optionString ]); + break; + } + + } + + // add the Optional to the list and return the index at which + // the Optional's string args stopped + if (actionTuples.length < 1) { + throw new Error('length should be > 0'); + } + for (var i = 0; i < actionTuples.length; i++) { + takeAction.apply(self, actionTuples[i]); + } + return stop; + } + + // the list of Positionals left to be parsed; this is modified + // by consume_positionals() + var positionals = self._getPositionalActions(); + + function consumePositionals(startIndex) { + // match as many Positionals as possible + var selectedPattern = argStringsPattern.substr(startIndex); + var argCounts = self._matchArgumentsPartial(positionals, selectedPattern); + + // slice off the appropriate arg strings for each Positional + // and add the Positional and its args to the list + for (var i = 0; i < positionals.length; i++) { + var action = positionals[i]; + var argCount = argCounts[i]; + if (typeof argCount === 'undefined') { + continue; + } + var args = argStrings.slice(startIndex, startIndex + argCount); + + startIndex += argCount; + takeAction(action, args); + } + + // slice off the Positionals that we just parsed and return the + // index at which the Positionals' string args stopped + positionals = positionals.slice(argCounts.length); + return startIndex; + } + + // consume Positionals and Optionals alternately, until we have + // passed the last option string + var startIndex = 0; + var position; + + var maxOptionStringIndex = -1; + + Object.keys(optionStringIndices).forEach(function (position) { + maxOptionStringIndex = Math.max(maxOptionStringIndex, parseInt(position, 10)); + }); + + var positionalsEndIndex, nextOptionStringIndex; + + while (startIndex <= maxOptionStringIndex) { + // consume any Positionals preceding the next option + nextOptionStringIndex = null; + for (position in optionStringIndices) { + if (!optionStringIndices.hasOwnProperty(position)) { continue; } + + position = parseInt(position, 10); + if (position >= startIndex) { + if (nextOptionStringIndex !== null) { + nextOptionStringIndex = Math.min(nextOptionStringIndex, position); + } else { + nextOptionStringIndex = position; + } + } + } + + if (startIndex !== nextOptionStringIndex) { + positionalsEndIndex = consumePositionals(startIndex); + // only try to parse the next optional if we didn't consume + // the option string during the positionals parsing + if (positionalsEndIndex > startIndex) { + startIndex = positionalsEndIndex; + continue; + } else { + startIndex = positionalsEndIndex; + } + } + + // if we consumed all the positionals we could and we're not + // at the index of an option string, there were extra arguments + if (!optionStringIndices[startIndex]) { + var strings = argStrings.slice(startIndex, nextOptionStringIndex); + extras = extras.concat(strings); + startIndex = nextOptionStringIndex; + } + // consume the next optional and any arguments for it + startIndex = consumeOptional(startIndex); + } + + // consume any positionals following the last Optional + var stopIndex = consumePositionals(startIndex); + + // if we didn't consume all the argument strings, there were extras + extras = extras.concat(argStrings.slice(stopIndex)); + + // if we didn't use all the Positional objects, there were too few + // arg strings supplied. + if (positionals.length > 0) { + self.error('too few arguments'); + } + + // make sure all required actions were present + self._actions.forEach(function (action) { + if (action.required) { + if (seenActions.indexOf(action) < 0) { + self.error(format('Argument "%s" is required', action.getName())); + } + } + }); + + // make sure all required groups have one option present + var actionUsed = false; + self._mutuallyExclusiveGroups.forEach(function (group) { + if (group.required) { + actionUsed = group._groupActions.some(function (action) { + return seenNonDefaultActions.indexOf(action) !== -1; + }); + + // if no actions were used, report the error + if (!actionUsed) { + var names = []; + group._groupActions.forEach(function (action) { + if (action.help !== c.SUPPRESS) { + names.push(action.getName()); + } + }); + names = names.join(' '); + var msg = 'one of the arguments ' + names + ' is required'; + self.error(msg); + } + } + }); + + // return the updated namespace and the extra arguments + return [ namespace, extras ]; +}; + +ArgumentParser.prototype._readArgsFromFiles = function (argStrings) { + // expand arguments referencing files + var self = this; + var fs = require('fs'); + var newArgStrings = []; + argStrings.forEach(function (argString) { + if (self.fromfilePrefixChars.indexOf(argString[0]) < 0) { + // for regular arguments, just add them back into the list + newArgStrings.push(argString); + } else { + // replace arguments referencing files with the file content + try { + var argstrs = []; + var filename = argString.slice(1); + var content = fs.readFileSync(filename, 'utf8'); + content = content.trim().split('\n'); + content.forEach(function (argLine) { + self.convertArgLineToArgs(argLine).forEach(function (arg) { + argstrs.push(arg); + }); + argstrs = self._readArgsFromFiles(argstrs); + }); + newArgStrings.push.apply(newArgStrings, argstrs); + } catch (error) { + return self.error(error.message); + } + } + }); + return newArgStrings; +}; + +ArgumentParser.prototype.convertArgLineToArgs = function (argLine) { + return [ argLine ]; +}; + +ArgumentParser.prototype._matchArgument = function (action, regexpArgStrings) { + + // match the pattern for this action to the arg strings + var regexpNargs = new RegExp('^' + this._getNargsPattern(action)); + var matches = regexpArgStrings.match(regexpNargs); + var message; + + // throw an exception if we weren't able to find a match + if (!matches) { + switch (action.nargs) { + /*eslint-disable no-undefined*/ + case undefined: + case null: + message = 'Expected one argument.'; + break; + case c.OPTIONAL: + message = 'Expected at most one argument.'; + break; + case c.ONE_OR_MORE: + message = 'Expected at least one argument.'; + break; + default: + message = 'Expected %s argument(s)'; + } + + throw argumentErrorHelper( + action, + format(message, action.nargs) + ); + } + // return the number of arguments matched + return matches[1].length; +}; + +ArgumentParser.prototype._matchArgumentsPartial = function (actions, regexpArgStrings) { + // progressively shorten the actions list by slicing off the + // final actions until we find a match + var self = this; + var result = []; + var actionSlice, pattern, matches; + var i, j; + + function getLength(string) { + return string.length; + } + + for (i = actions.length; i > 0; i--) { + pattern = ''; + actionSlice = actions.slice(0, i); + for (j = 0; j < actionSlice.length; j++) { + pattern += self._getNargsPattern(actionSlice[j]); + } + + pattern = new RegExp('^' + pattern); + matches = regexpArgStrings.match(pattern); + + if (matches && matches.length > 0) { + // need only groups + matches = matches.splice(1); + result = result.concat(matches.map(getLength)); + break; + } + } + + // return the list of arg string counts + return result; +}; + +ArgumentParser.prototype._parseOptional = function (argString) { + var action, optionString, argExplicit, optionTuples; + + // if it's an empty string, it was meant to be a positional + if (!argString) { + return null; + } + + // if it doesn't start with a prefix, it was meant to be positional + if (this.prefixChars.indexOf(argString[0]) < 0) { + return null; + } + + // if the option string is present in the parser, return the action + if (this._optionStringActions[argString]) { + return [ this._optionStringActions[argString], argString, null ]; + } + + // if it's just a single character, it was meant to be positional + if (argString.length === 1) { + return null; + } + + // if the option string before the "=" is present, return the action + if (argString.indexOf('=') >= 0) { + optionString = argString.split('=', 1)[0]; + argExplicit = argString.slice(optionString.length + 1); + + if (this._optionStringActions[optionString]) { + action = this._optionStringActions[optionString]; + return [ action, optionString, argExplicit ]; + } + } + + // search through all possible prefixes of the option string + // and all actions in the parser for possible interpretations + optionTuples = this._getOptionTuples(argString); + + // if multiple actions match, the option string was ambiguous + if (optionTuples.length > 1) { + var optionStrings = optionTuples.map(function (optionTuple) { + return optionTuple[1]; + }); + this.error(format( + 'Ambiguous option: "%s" could match %s.', + argString, optionStrings.join(', ') + )); + // if exactly one action matched, this segmentation is good, + // so return the parsed action + } else if (optionTuples.length === 1) { + return optionTuples[0]; + } + + // if it was not found as an option, but it looks like a negative + // number, it was meant to be positional + // unless there are negative-number-like options + if (argString.match(this._regexpNegativeNumber)) { + if (!this._hasNegativeNumberOptionals.some(Boolean)) { + return null; + } + } + // if it contains a space, it was meant to be a positional + if (argString.search(' ') >= 0) { + return null; + } + + // it was meant to be an optional but there is no such option + // in this parser (though it might be a valid option in a subparser) + return [ null, argString, null ]; +}; + +ArgumentParser.prototype._getOptionTuples = function (optionString) { + var result = []; + var chars = this.prefixChars; + var optionPrefix; + var argExplicit; + var action; + var actionOptionString; + + // option strings starting with two prefix characters are only split at + // the '=' + if (chars.indexOf(optionString[0]) >= 0 && chars.indexOf(optionString[1]) >= 0) { + if (optionString.indexOf('=') >= 0) { + var optionStringSplit = optionString.split('=', 1); + + optionPrefix = optionStringSplit[0]; + argExplicit = optionStringSplit[1]; + } else { + optionPrefix = optionString; + argExplicit = null; + } + + for (actionOptionString in this._optionStringActions) { + if (actionOptionString.substr(0, optionPrefix.length) === optionPrefix) { + action = this._optionStringActions[actionOptionString]; + result.push([ action, actionOptionString, argExplicit ]); + } + } + + // single character options can be concatenated with their arguments + // but multiple character options always have to have their argument + // separate + } else if (chars.indexOf(optionString[0]) >= 0 && chars.indexOf(optionString[1]) < 0) { + optionPrefix = optionString; + argExplicit = null; + var optionPrefixShort = optionString.substr(0, 2); + var argExplicitShort = optionString.substr(2); + + for (actionOptionString in this._optionStringActions) { + if (!$$.has(this._optionStringActions, actionOptionString)) continue; + + action = this._optionStringActions[actionOptionString]; + if (actionOptionString === optionPrefixShort) { + result.push([ action, actionOptionString, argExplicitShort ]); + } else if (actionOptionString.substr(0, optionPrefix.length) === optionPrefix) { + result.push([ action, actionOptionString, argExplicit ]); + } + } + + // shouldn't ever get here + } else { + throw new Error(format('Unexpected option string: %s.', optionString)); + } + // return the collected option tuples + return result; +}; + +ArgumentParser.prototype._getNargsPattern = function (action) { + // in all examples below, we have to allow for '--' args + // which are represented as '-' in the pattern + var regexpNargs; + + switch (action.nargs) { + // the default (null) is assumed to be a single argument + case undefined: + case null: + regexpNargs = '(-*A-*)'; + break; + // allow zero or more arguments + case c.OPTIONAL: + regexpNargs = '(-*A?-*)'; + break; + // allow zero or more arguments + case c.ZERO_OR_MORE: + regexpNargs = '(-*[A-]*)'; + break; + // allow one or more arguments + case c.ONE_OR_MORE: + regexpNargs = '(-*A[A-]*)'; + break; + // allow any number of options or arguments + case c.REMAINDER: + regexpNargs = '([-AO]*)'; + break; + // allow one argument followed by any number of options or arguments + case c.PARSER: + regexpNargs = '(-*A[-AO]*)'; + break; + // all others should be integers + default: + regexpNargs = '(-*' + $$.repeat('-*A', action.nargs) + '-*)'; + } + + // if this is an optional action, -- is not allowed + if (action.isOptional()) { + regexpNargs = regexpNargs.replace(/-\*/g, ''); + regexpNargs = regexpNargs.replace(/-/g, ''); + } + + // return the pattern + return regexpNargs; +}; + +// +// Value conversion methods +// + +ArgumentParser.prototype._getValues = function (action, argStrings) { + var self = this; + + // for everything but PARSER args, strip out '--' + if (action.nargs !== c.PARSER && action.nargs !== c.REMAINDER) { + argStrings = argStrings.filter(function (arrayElement) { + return arrayElement !== '--'; + }); + } + + var value, argString; + + // optional argument produces a default when not present + if (argStrings.length === 0 && action.nargs === c.OPTIONAL) { + + value = (action.isOptional()) ? action.constant : action.defaultValue; + + if (typeof (value) === 'string') { + value = this._getValue(action, value); + this._checkValue(action, value); + } + + // when nargs='*' on a positional, if there were no command-line + // args, use the default if it is anything other than None + } else if (argStrings.length === 0 && action.nargs === c.ZERO_OR_MORE && + action.optionStrings.length === 0) { + + value = (action.defaultValue || argStrings); + this._checkValue(action, value); + + // single argument or optional argument produces a single value + } else if (argStrings.length === 1 && + (!action.nargs || action.nargs === c.OPTIONAL)) { + + argString = argStrings[0]; + value = this._getValue(action, argString); + this._checkValue(action, value); + + // REMAINDER arguments convert all values, checking none + } else if (action.nargs === c.REMAINDER) { + value = argStrings.map(function (v) { + return self._getValue(action, v); + }); + + // PARSER arguments convert all values, but check only the first + } else if (action.nargs === c.PARSER) { + value = argStrings.map(function (v) { + return self._getValue(action, v); + }); + this._checkValue(action, value[0]); + + // all other types of nargs produce a list + } else { + value = argStrings.map(function (v) { + return self._getValue(action, v); + }); + value.forEach(function (v) { + self._checkValue(action, v); + }); + } + + // return the converted value + return value; +}; + +ArgumentParser.prototype._getValue = function (action, argString) { + var result; + + var typeFunction = this._registryGet('type', action.type, action.type); + if (typeof typeFunction !== 'function') { + var message = format('%s is not callable', typeFunction); + throw argumentErrorHelper(action, message); + } + + // convert the value to the appropriate type + try { + result = typeFunction(argString); + + // ArgumentTypeErrors indicate errors + // If action.type is not a registered string, it is a function + // Try to deduce its name for inclusion in the error message + // Failing that, include the error message it raised. + } catch (e) { + var name = null; + if (typeof action.type === 'string') { + name = action.type; + } else { + name = action.type.name || action.type.displayName || ''; + } + var msg = format('Invalid %s value: %s', name, argString); + if (name === '') { msg += '\n' + e.message; } + throw argumentErrorHelper(action, msg); + } + // return the converted value + return result; +}; + +ArgumentParser.prototype._checkValue = function (action, value) { + // converted value must be one of the choices (if specified) + var choices = action.choices; + if (choices) { + // choise for argument can by array or string + if ((typeof choices === 'string' || Array.isArray(choices)) && + choices.indexOf(value) !== -1) { + return; + } + // choise for subparsers can by only hash + if (typeof choices === 'object' && !Array.isArray(choices) && choices[value]) { + return; + } + + if (typeof choices === 'string') { + choices = choices.split('').join(', '); + } else if (Array.isArray(choices)) { + choices = choices.join(', '); + } else { + choices = Object.keys(choices).join(', '); + } + var message = format('Invalid choice: %s (choose from [%s])', value, choices); + throw argumentErrorHelper(action, message); + } +}; + +// +// Help formatting methods +// + +/** + * ArgumentParser#formatUsage -> string + * + * Return usage string + * + * See also [original guide][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#printing-help + **/ +ArgumentParser.prototype.formatUsage = function () { + var formatter = this._getFormatter(); + formatter.addUsage(this.usage, this._actions, this._mutuallyExclusiveGroups); + return formatter.formatHelp(); +}; + +/** + * ArgumentParser#formatHelp -> string + * + * Return help + * + * See also [original guide][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#printing-help + **/ +ArgumentParser.prototype.formatHelp = function () { + var formatter = this._getFormatter(); + + // usage + formatter.addUsage(this.usage, this._actions, this._mutuallyExclusiveGroups); + + // description + formatter.addText(this.description); + + // positionals, optionals and user-defined groups + this._actionGroups.forEach(function (actionGroup) { + formatter.startSection(actionGroup.title); + formatter.addText(actionGroup.description); + formatter.addArguments(actionGroup._groupActions); + formatter.endSection(); + }); + + // epilog + formatter.addText(this.epilog); + + // determine help from format above + return formatter.formatHelp(); +}; + +ArgumentParser.prototype._getFormatter = function () { + var FormatterClass = this.formatterClass; + var formatter = new FormatterClass({ prog: this.prog }); + return formatter; +}; + +// +// Print functions +// + +/** + * ArgumentParser#printUsage() -> Void + * + * Print usage + * + * See also [original guide][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#printing-help + **/ +ArgumentParser.prototype.printUsage = function () { + this._printMessage(this.formatUsage()); +}; + +/** + * ArgumentParser#printHelp() -> Void + * + * Print help + * + * See also [original guide][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#printing-help + **/ +ArgumentParser.prototype.printHelp = function () { + this._printMessage(this.formatHelp()); +}; + +ArgumentParser.prototype._printMessage = function (message, stream) { + if (!stream) { + stream = process.stdout; + } + if (message) { + stream.write('' + message); + } +}; + +// +// Exit functions +// + +/** + * ArgumentParser#exit(status=0, message) -> Void + * - status (int): exit status + * - message (string): message + * + * Print message in stderr/stdout and exit program + **/ +ArgumentParser.prototype.exit = function (status, message) { + if (message) { + if (status === 0) { + this._printMessage(message); + } else { + this._printMessage(message, process.stderr); + } + } + + process.exit(status); +}; + +/** + * ArgumentParser#error(message) -> Void + * - err (Error|string): message + * + * Error method Prints a usage message incorporating the message to stderr and + * exits. If you override this in a subclass, + * it should not return -- it should + * either exit or throw an exception. + * + **/ +ArgumentParser.prototype.error = function (err) { + var message; + if (err instanceof Error) { + if (this.debug === true) { + throw err; + } + message = err.message; + } else { + message = err; + } + var msg = format('%s: error: %s', this.prog, message) + c.EOL; + + if (this.debug === true) { + throw new Error(msg); + } + + this.printUsage(process.stderr); + + return this.exit(2, msg); +}; + +module.exports = ArgumentParser; diff --git a/node_modules/argparse/lib/const.js b/node_modules/argparse/lib/const.js new file mode 100644 index 00000000..b1fd4ced --- /dev/null +++ b/node_modules/argparse/lib/const.js @@ -0,0 +1,21 @@ +// +// Constants +// + +'use strict'; + +module.exports.EOL = '\n'; + +module.exports.SUPPRESS = '==SUPPRESS=='; + +module.exports.OPTIONAL = '?'; + +module.exports.ZERO_OR_MORE = '*'; + +module.exports.ONE_OR_MORE = '+'; + +module.exports.PARSER = 'A...'; + +module.exports.REMAINDER = '...'; + +module.exports._UNRECOGNIZED_ARGS_ATTR = '_unrecognized_args'; diff --git a/node_modules/argparse/lib/help/added_formatters.js b/node_modules/argparse/lib/help/added_formatters.js new file mode 100644 index 00000000..f8e42998 --- /dev/null +++ b/node_modules/argparse/lib/help/added_formatters.js @@ -0,0 +1,87 @@ +'use strict'; + +var util = require('util'); + +// Constants +var c = require('../const'); + +var $$ = require('../utils'); +var HelpFormatter = require('./formatter.js'); + +/** + * new RawDescriptionHelpFormatter(options) + * new ArgumentParser({formatterClass: argparse.RawDescriptionHelpFormatter, ...}) + * + * Help message formatter which adds default values to argument help. + * + * Only the name of this class is considered a public API. All the methods + * provided by the class are considered an implementation detail. + **/ + +function ArgumentDefaultsHelpFormatter(options) { + HelpFormatter.call(this, options); +} + +util.inherits(ArgumentDefaultsHelpFormatter, HelpFormatter); + +ArgumentDefaultsHelpFormatter.prototype._getHelpString = function (action) { + var help = action.help; + if (action.help.indexOf('%(defaultValue)s') === -1) { + if (action.defaultValue !== c.SUPPRESS) { + var defaulting_nargs = [ c.OPTIONAL, c.ZERO_OR_MORE ]; + if (action.isOptional() || (defaulting_nargs.indexOf(action.nargs) >= 0)) { + help += ' (default: %(defaultValue)s)'; + } + } + } + return help; +}; + +module.exports.ArgumentDefaultsHelpFormatter = ArgumentDefaultsHelpFormatter; + +/** + * new RawDescriptionHelpFormatter(options) + * new ArgumentParser({formatterClass: argparse.RawDescriptionHelpFormatter, ...}) + * + * Help message formatter which retains any formatting in descriptions. + * + * Only the name of this class is considered a public API. All the methods + * provided by the class are considered an implementation detail. + **/ + +function RawDescriptionHelpFormatter(options) { + HelpFormatter.call(this, options); +} + +util.inherits(RawDescriptionHelpFormatter, HelpFormatter); + +RawDescriptionHelpFormatter.prototype._fillText = function (text, width, indent) { + var lines = text.split('\n'); + lines = lines.map(function (line) { + return $$.trimEnd(indent + line); + }); + return lines.join('\n'); +}; +module.exports.RawDescriptionHelpFormatter = RawDescriptionHelpFormatter; + +/** + * new RawTextHelpFormatter(options) + * new ArgumentParser({formatterClass: argparse.RawTextHelpFormatter, ...}) + * + * Help message formatter which retains formatting of all help text. + * + * Only the name of this class is considered a public API. All the methods + * provided by the class are considered an implementation detail. + **/ + +function RawTextHelpFormatter(options) { + RawDescriptionHelpFormatter.call(this, options); +} + +util.inherits(RawTextHelpFormatter, RawDescriptionHelpFormatter); + +RawTextHelpFormatter.prototype._splitLines = function (text) { + return text.split('\n'); +}; + +module.exports.RawTextHelpFormatter = RawTextHelpFormatter; diff --git a/node_modules/argparse/lib/help/formatter.js b/node_modules/argparse/lib/help/formatter.js new file mode 100644 index 00000000..29036c14 --- /dev/null +++ b/node_modules/argparse/lib/help/formatter.js @@ -0,0 +1,795 @@ +/** + * class HelpFormatter + * + * Formatter for generating usage messages and argument help strings. Only the + * name of this class is considered a public API. All the methods provided by + * the class are considered an implementation detail. + * + * Do not call in your code, use this class only for inherits your own forvatter + * + * ToDo add [additonal formatters][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#formatter-class + **/ +'use strict'; + +var sprintf = require('sprintf-js').sprintf; + +// Constants +var c = require('../const'); + +var $$ = require('../utils'); + + +/*:nodoc:* internal + * new Support(parent, heding) + * - parent (object): parent section + * - heading (string): header string + * + **/ +function Section(parent, heading) { + this._parent = parent; + this._heading = heading; + this._items = []; +} + +/*:nodoc:* internal + * Section#addItem(callback) -> Void + * - callback (array): tuple with function and args + * + * Add function for single element + **/ +Section.prototype.addItem = function (callback) { + this._items.push(callback); +}; + +/*:nodoc:* internal + * Section#formatHelp(formatter) -> string + * - formatter (HelpFormatter): current formatter + * + * Form help section string + * + **/ +Section.prototype.formatHelp = function (formatter) { + var itemHelp, heading; + + // format the indented section + if (this._parent) { + formatter._indent(); + } + + itemHelp = this._items.map(function (item) { + var obj, func, args; + + obj = formatter; + func = item[0]; + args = item[1]; + return func.apply(obj, args); + }); + itemHelp = formatter._joinParts(itemHelp); + + if (this._parent) { + formatter._dedent(); + } + + // return nothing if the section was empty + if (!itemHelp) { + return ''; + } + + // add the heading if the section was non-empty + heading = ''; + if (this._heading && this._heading !== c.SUPPRESS) { + var currentIndent = formatter.currentIndent; + heading = $$.repeat(' ', currentIndent) + this._heading + ':' + c.EOL; + } + + // join the section-initialize newline, the heading and the help + return formatter._joinParts([ c.EOL, heading, itemHelp, c.EOL ]); +}; + +/** + * new HelpFormatter(options) + * + * #### Options: + * - `prog`: program name + * - `indentIncriment`: indent step, default value 2 + * - `maxHelpPosition`: max help position, default value = 24 + * - `width`: line width + * + **/ +var HelpFormatter = module.exports = function HelpFormatter(options) { + options = options || {}; + + this._prog = options.prog; + + this._maxHelpPosition = options.maxHelpPosition || 24; + this._width = (options.width || ((process.env.COLUMNS || 80) - 2)); + + this._currentIndent = 0; + this._indentIncriment = options.indentIncriment || 2; + this._level = 0; + this._actionMaxLength = 0; + + this._rootSection = new Section(null); + this._currentSection = this._rootSection; + + this._whitespaceMatcher = new RegExp('\\s+', 'g'); + this._longBreakMatcher = new RegExp(c.EOL + c.EOL + c.EOL + '+', 'g'); +}; + +HelpFormatter.prototype._indent = function () { + this._currentIndent += this._indentIncriment; + this._level += 1; +}; + +HelpFormatter.prototype._dedent = function () { + this._currentIndent -= this._indentIncriment; + this._level -= 1; + if (this._currentIndent < 0) { + throw new Error('Indent decreased below 0.'); + } +}; + +HelpFormatter.prototype._addItem = function (func, args) { + this._currentSection.addItem([ func, args ]); +}; + +// +// Message building methods +// + +/** + * HelpFormatter#startSection(heading) -> Void + * - heading (string): header string + * + * Start new help section + * + * See alse [code example][1] + * + * ##### Example + * + * formatter.startSection(actionGroup.title); + * formatter.addText(actionGroup.description); + * formatter.addArguments(actionGroup._groupActions); + * formatter.endSection(); + * + **/ +HelpFormatter.prototype.startSection = function (heading) { + this._indent(); + var section = new Section(this._currentSection, heading); + var func = section.formatHelp.bind(section); + this._addItem(func, [ this ]); + this._currentSection = section; +}; + +/** + * HelpFormatter#endSection -> Void + * + * End help section + * + * ##### Example + * + * formatter.startSection(actionGroup.title); + * formatter.addText(actionGroup.description); + * formatter.addArguments(actionGroup._groupActions); + * formatter.endSection(); + **/ +HelpFormatter.prototype.endSection = function () { + this._currentSection = this._currentSection._parent; + this._dedent(); +}; + +/** + * HelpFormatter#addText(text) -> Void + * - text (string): plain text + * + * Add plain text into current section + * + * ##### Example + * + * formatter.startSection(actionGroup.title); + * formatter.addText(actionGroup.description); + * formatter.addArguments(actionGroup._groupActions); + * formatter.endSection(); + * + **/ +HelpFormatter.prototype.addText = function (text) { + if (text && text !== c.SUPPRESS) { + this._addItem(this._formatText, [ text ]); + } +}; + +/** + * HelpFormatter#addUsage(usage, actions, groups, prefix) -> Void + * - usage (string): usage text + * - actions (array): actions list + * - groups (array): groups list + * - prefix (string): usage prefix + * + * Add usage data into current section + * + * ##### Example + * + * formatter.addUsage(this.usage, this._actions, []); + * return formatter.formatHelp(); + * + **/ +HelpFormatter.prototype.addUsage = function (usage, actions, groups, prefix) { + if (usage !== c.SUPPRESS) { + this._addItem(this._formatUsage, [ usage, actions, groups, prefix ]); + } +}; + +/** + * HelpFormatter#addArgument(action) -> Void + * - action (object): action + * + * Add argument into current section + * + * Single variant of [[HelpFormatter#addArguments]] + **/ +HelpFormatter.prototype.addArgument = function (action) { + if (action.help !== c.SUPPRESS) { + var self = this; + + // find all invocations + var invocations = [ this._formatActionInvocation(action) ]; + var invocationLength = invocations[0].length; + + var actionLength; + + if (action._getSubactions) { + this._indent(); + action._getSubactions().forEach(function (subaction) { + + var invocationNew = self._formatActionInvocation(subaction); + invocations.push(invocationNew); + invocationLength = Math.max(invocationLength, invocationNew.length); + + }); + this._dedent(); + } + + // update the maximum item length + actionLength = invocationLength + this._currentIndent; + this._actionMaxLength = Math.max(this._actionMaxLength, actionLength); + + // add the item to the list + this._addItem(this._formatAction, [ action ]); + } +}; + +/** + * HelpFormatter#addArguments(actions) -> Void + * - actions (array): actions list + * + * Mass add arguments into current section + * + * ##### Example + * + * formatter.startSection(actionGroup.title); + * formatter.addText(actionGroup.description); + * formatter.addArguments(actionGroup._groupActions); + * formatter.endSection(); + * + **/ +HelpFormatter.prototype.addArguments = function (actions) { + var self = this; + actions.forEach(function (action) { + self.addArgument(action); + }); +}; + +// +// Help-formatting methods +// + +/** + * HelpFormatter#formatHelp -> string + * + * Format help + * + * ##### Example + * + * formatter.addText(this.epilog); + * return formatter.formatHelp(); + * + **/ +HelpFormatter.prototype.formatHelp = function () { + var help = this._rootSection.formatHelp(this); + if (help) { + help = help.replace(this._longBreakMatcher, c.EOL + c.EOL); + help = $$.trimChars(help, c.EOL) + c.EOL; + } + return help; +}; + +HelpFormatter.prototype._joinParts = function (partStrings) { + return partStrings.filter(function (part) { + return (part && part !== c.SUPPRESS); + }).join(''); +}; + +HelpFormatter.prototype._formatUsage = function (usage, actions, groups, prefix) { + if (!prefix && typeof prefix !== 'string') { + prefix = 'usage: '; + } + + actions = actions || []; + groups = groups || []; + + + // if usage is specified, use that + if (usage) { + usage = sprintf(usage, { prog: this._prog }); + + // if no optionals or positionals are available, usage is just prog + } else if (!usage && actions.length === 0) { + usage = this._prog; + + // if optionals and positionals are available, calculate usage + } else if (!usage) { + var prog = this._prog; + var optionals = []; + var positionals = []; + var actionUsage; + var textWidth; + + // split optionals from positionals + actions.forEach(function (action) { + if (action.isOptional()) { + optionals.push(action); + } else { + positionals.push(action); + } + }); + + // build full usage string + actionUsage = this._formatActionsUsage([].concat(optionals, positionals), groups); + usage = [ prog, actionUsage ].join(' '); + + // wrap the usage parts if it's too long + textWidth = this._width - this._currentIndent; + if ((prefix.length + usage.length) > textWidth) { + + // break usage into wrappable parts + var regexpPart = new RegExp('\\(.*?\\)+|\\[.*?\\]+|\\S+', 'g'); + var optionalUsage = this._formatActionsUsage(optionals, groups); + var positionalUsage = this._formatActionsUsage(positionals, groups); + + + var optionalParts = optionalUsage.match(regexpPart); + var positionalParts = positionalUsage.match(regexpPart) || []; + + if (optionalParts.join(' ') !== optionalUsage) { + throw new Error('assert "optionalParts.join(\' \') === optionalUsage"'); + } + if (positionalParts.join(' ') !== positionalUsage) { + throw new Error('assert "positionalParts.join(\' \') === positionalUsage"'); + } + + // helper for wrapping lines + /*eslint-disable func-style*/ // node 0.10 compat + var _getLines = function (parts, indent, prefix) { + var lines = []; + var line = []; + + var lineLength = prefix ? prefix.length - 1 : indent.length - 1; + + parts.forEach(function (part) { + if (lineLength + 1 + part.length > textWidth) { + lines.push(indent + line.join(' ')); + line = []; + lineLength = indent.length - 1; + } + line.push(part); + lineLength += part.length + 1; + }); + + if (line) { + lines.push(indent + line.join(' ')); + } + if (prefix) { + lines[0] = lines[0].substr(indent.length); + } + return lines; + }; + + var lines, indent, parts; + // if prog is short, follow it with optionals or positionals + if (prefix.length + prog.length <= 0.75 * textWidth) { + indent = $$.repeat(' ', (prefix.length + prog.length + 1)); + if (optionalParts) { + lines = [].concat( + _getLines([ prog ].concat(optionalParts), indent, prefix), + _getLines(positionalParts, indent) + ); + } else if (positionalParts) { + lines = _getLines([ prog ].concat(positionalParts), indent, prefix); + } else { + lines = [ prog ]; + } + + // if prog is long, put it on its own line + } else { + indent = $$.repeat(' ', prefix.length); + parts = optionalParts.concat(positionalParts); + lines = _getLines(parts, indent); + if (lines.length > 1) { + lines = [].concat( + _getLines(optionalParts, indent), + _getLines(positionalParts, indent) + ); + } + lines = [ prog ].concat(lines); + } + // join lines into usage + usage = lines.join(c.EOL); + } + } + + // prefix with 'usage:' + return prefix + usage + c.EOL + c.EOL; +}; + +HelpFormatter.prototype._formatActionsUsage = function (actions, groups) { + // find group indices and identify actions in groups + var groupActions = []; + var inserts = []; + var self = this; + + groups.forEach(function (group) { + var end; + var i; + + var start = actions.indexOf(group._groupActions[0]); + if (start >= 0) { + end = start + group._groupActions.length; + + //if (actions.slice(start, end) === group._groupActions) { + if ($$.arrayEqual(actions.slice(start, end), group._groupActions)) { + group._groupActions.forEach(function (action) { + groupActions.push(action); + }); + + if (!group.required) { + if (inserts[start]) { + inserts[start] += ' ['; + } else { + inserts[start] = '['; + } + inserts[end] = ']'; + } else { + if (inserts[start]) { + inserts[start] += ' ('; + } else { + inserts[start] = '('; + } + inserts[end] = ')'; + } + for (i = start + 1; i < end; i += 1) { + inserts[i] = '|'; + } + } + } + }); + + // collect all actions format strings + var parts = []; + + actions.forEach(function (action, actionIndex) { + var part; + var optionString; + var argsDefault; + var argsString; + + // suppressed arguments are marked with None + // remove | separators for suppressed arguments + if (action.help === c.SUPPRESS) { + parts.push(null); + if (inserts[actionIndex] === '|') { + inserts.splice(actionIndex, actionIndex); + } else if (inserts[actionIndex + 1] === '|') { + inserts.splice(actionIndex + 1, actionIndex + 1); + } + + // produce all arg strings + } else if (!action.isOptional()) { + part = self._formatArgs(action, action.dest); + + // if it's in a group, strip the outer [] + if (groupActions.indexOf(action) >= 0) { + if (part[0] === '[' && part[part.length - 1] === ']') { + part = part.slice(1, -1); + } + } + // add the action string to the list + parts.push(part); + + // produce the first way to invoke the option in brackets + } else { + optionString = action.optionStrings[0]; + + // if the Optional doesn't take a value, format is: -s or --long + if (action.nargs === 0) { + part = '' + optionString; + + // if the Optional takes a value, format is: -s ARGS or --long ARGS + } else { + argsDefault = action.dest.toUpperCase(); + argsString = self._formatArgs(action, argsDefault); + part = optionString + ' ' + argsString; + } + // make it look optional if it's not required or in a group + if (!action.required && groupActions.indexOf(action) < 0) { + part = '[' + part + ']'; + } + // add the action string to the list + parts.push(part); + } + }); + + // insert things at the necessary indices + for (var i = inserts.length - 1; i >= 0; --i) { + if (inserts[i] !== null) { + parts.splice(i, 0, inserts[i]); + } + } + + // join all the action items with spaces + var text = parts.filter(function (part) { + return !!part; + }).join(' '); + + // clean up separators for mutually exclusive groups + text = text.replace(/([\[(]) /g, '$1'); // remove spaces + text = text.replace(/ ([\])])/g, '$1'); + text = text.replace(/\[ *\]/g, ''); // remove empty groups + text = text.replace(/\( *\)/g, ''); + text = text.replace(/\(([^|]*)\)/g, '$1'); // remove () from single action groups + + text = text.trim(); + + // return the text + return text; +}; + +HelpFormatter.prototype._formatText = function (text) { + text = sprintf(text, { prog: this._prog }); + var textWidth = this._width - this._currentIndent; + var indentIncriment = $$.repeat(' ', this._currentIndent); + return this._fillText(text, textWidth, indentIncriment) + c.EOL + c.EOL; +}; + +HelpFormatter.prototype._formatAction = function (action) { + var self = this; + + var helpText; + var helpLines; + var parts; + var indentFirst; + + // determine the required width and the entry label + var helpPosition = Math.min(this._actionMaxLength + 2, this._maxHelpPosition); + var helpWidth = this._width - helpPosition; + var actionWidth = helpPosition - this._currentIndent - 2; + var actionHeader = this._formatActionInvocation(action); + + // no help; start on same line and add a final newline + if (!action.help) { + actionHeader = $$.repeat(' ', this._currentIndent) + actionHeader + c.EOL; + + // short action name; start on the same line and pad two spaces + } else if (actionHeader.length <= actionWidth) { + actionHeader = $$.repeat(' ', this._currentIndent) + + actionHeader + + ' ' + + $$.repeat(' ', actionWidth - actionHeader.length); + indentFirst = 0; + + // long action name; start on the next line + } else { + actionHeader = $$.repeat(' ', this._currentIndent) + actionHeader + c.EOL; + indentFirst = helpPosition; + } + + // collect the pieces of the action help + parts = [ actionHeader ]; + + // if there was help for the action, add lines of help text + if (action.help) { + helpText = this._expandHelp(action); + helpLines = this._splitLines(helpText, helpWidth); + parts.push($$.repeat(' ', indentFirst) + helpLines[0] + c.EOL); + helpLines.slice(1).forEach(function (line) { + parts.push($$.repeat(' ', helpPosition) + line + c.EOL); + }); + + // or add a newline if the description doesn't end with one + } else if (actionHeader.charAt(actionHeader.length - 1) !== c.EOL) { + parts.push(c.EOL); + } + // if there are any sub-actions, add their help as well + if (action._getSubactions) { + this._indent(); + action._getSubactions().forEach(function (subaction) { + parts.push(self._formatAction(subaction)); + }); + this._dedent(); + } + // return a single string + return this._joinParts(parts); +}; + +HelpFormatter.prototype._formatActionInvocation = function (action) { + if (!action.isOptional()) { + var format_func = this._metavarFormatter(action, action.dest); + var metavars = format_func(1); + return metavars[0]; + } + + var parts = []; + var argsDefault; + var argsString; + + // if the Optional doesn't take a value, format is: -s, --long + if (action.nargs === 0) { + parts = parts.concat(action.optionStrings); + + // if the Optional takes a value, format is: -s ARGS, --long ARGS + } else { + argsDefault = action.dest.toUpperCase(); + argsString = this._formatArgs(action, argsDefault); + action.optionStrings.forEach(function (optionString) { + parts.push(optionString + ' ' + argsString); + }); + } + return parts.join(', '); +}; + +HelpFormatter.prototype._metavarFormatter = function (action, metavarDefault) { + var result; + + if (action.metavar || action.metavar === '') { + result = action.metavar; + } else if (action.choices) { + var choices = action.choices; + + if (typeof choices === 'string') { + choices = choices.split('').join(', '); + } else if (Array.isArray(choices)) { + choices = choices.join(','); + } else { + choices = Object.keys(choices).join(','); + } + result = '{' + choices + '}'; + } else { + result = metavarDefault; + } + + return function (size) { + if (Array.isArray(result)) { + return result; + } + + var metavars = []; + for (var i = 0; i < size; i += 1) { + metavars.push(result); + } + return metavars; + }; +}; + +HelpFormatter.prototype._formatArgs = function (action, metavarDefault) { + var result; + var metavars; + + var buildMetavar = this._metavarFormatter(action, metavarDefault); + + switch (action.nargs) { + /*eslint-disable no-undefined*/ + case undefined: + case null: + metavars = buildMetavar(1); + result = '' + metavars[0]; + break; + case c.OPTIONAL: + metavars = buildMetavar(1); + result = '[' + metavars[0] + ']'; + break; + case c.ZERO_OR_MORE: + metavars = buildMetavar(2); + result = '[' + metavars[0] + ' [' + metavars[1] + ' ...]]'; + break; + case c.ONE_OR_MORE: + metavars = buildMetavar(2); + result = '' + metavars[0] + ' [' + metavars[1] + ' ...]'; + break; + case c.REMAINDER: + result = '...'; + break; + case c.PARSER: + metavars = buildMetavar(1); + result = metavars[0] + ' ...'; + break; + default: + metavars = buildMetavar(action.nargs); + result = metavars.join(' '); + } + return result; +}; + +HelpFormatter.prototype._expandHelp = function (action) { + var params = { prog: this._prog }; + + Object.keys(action).forEach(function (actionProperty) { + var actionValue = action[actionProperty]; + + if (actionValue !== c.SUPPRESS) { + params[actionProperty] = actionValue; + } + }); + + if (params.choices) { + if (typeof params.choices === 'string') { + params.choices = params.choices.split('').join(', '); + } else if (Array.isArray(params.choices)) { + params.choices = params.choices.join(', '); + } else { + params.choices = Object.keys(params.choices).join(', '); + } + } + + return sprintf(this._getHelpString(action), params); +}; + +HelpFormatter.prototype._splitLines = function (text, width) { + var lines = []; + var delimiters = [ ' ', '.', ',', '!', '?' ]; + var re = new RegExp('[' + delimiters.join('') + '][^' + delimiters.join('') + ']*$'); + + text = text.replace(/[\n\|\t]/g, ' '); + + text = text.trim(); + text = text.replace(this._whitespaceMatcher, ' '); + + // Wraps the single paragraph in text (a string) so every line + // is at most width characters long. + text.split(c.EOL).forEach(function (line) { + if (width >= line.length) { + lines.push(line); + return; + } + + var wrapStart = 0; + var wrapEnd = width; + var delimiterIndex = 0; + while (wrapEnd <= line.length) { + if (wrapEnd !== line.length && delimiters.indexOf(line[wrapEnd] < -1)) { + delimiterIndex = (re.exec(line.substring(wrapStart, wrapEnd)) || {}).index; + wrapEnd = wrapStart + delimiterIndex + 1; + } + lines.push(line.substring(wrapStart, wrapEnd)); + wrapStart = wrapEnd; + wrapEnd += width; + } + if (wrapStart < line.length) { + lines.push(line.substring(wrapStart, wrapEnd)); + } + }); + + return lines; +}; + +HelpFormatter.prototype._fillText = function (text, width, indent) { + var lines = this._splitLines(text, width); + lines = lines.map(function (line) { + return indent + line; + }); + return lines.join(c.EOL); +}; + +HelpFormatter.prototype._getHelpString = function (action) { + return action.help; +}; diff --git a/node_modules/argparse/lib/namespace.js b/node_modules/argparse/lib/namespace.js new file mode 100644 index 00000000..a860de9e --- /dev/null +++ b/node_modules/argparse/lib/namespace.js @@ -0,0 +1,76 @@ +/** + * class Namespace + * + * Simple object for storing attributes. Implements equality by attribute names + * and values, and provides a simple string representation. + * + * See also [original guide][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#the-namespace-object + **/ +'use strict'; + +var $$ = require('./utils'); + +/** + * new Namespace(options) + * - options(object): predefined propertis for result object + * + **/ +var Namespace = module.exports = function Namespace(options) { + $$.extend(this, options); +}; + +/** + * Namespace#isset(key) -> Boolean + * - key (string|number): property name + * + * Tells whenever `namespace` contains given `key` or not. + **/ +Namespace.prototype.isset = function (key) { + return $$.has(this, key); +}; + +/** + * Namespace#set(key, value) -> self + * -key (string|number|object): propery name + * -value (mixed): new property value + * + * Set the property named key with value. + * If key object then set all key properties to namespace object + **/ +Namespace.prototype.set = function (key, value) { + if (typeof (key) === 'object') { + $$.extend(this, key); + } else { + this[key] = value; + } + return this; +}; + +/** + * Namespace#get(key, defaultValue) -> mixed + * - key (string|number): property name + * - defaultValue (mixed): default value + * + * Return the property key or defaulValue if not set + **/ +Namespace.prototype.get = function (key, defaultValue) { + return !this[key] ? defaultValue : this[key]; +}; + +/** + * Namespace#unset(key, defaultValue) -> mixed + * - key (string|number): property name + * - defaultValue (mixed): default value + * + * Return data[key](and delete it) or defaultValue + **/ +Namespace.prototype.unset = function (key, defaultValue) { + var value = this[key]; + if (value !== null) { + delete this[key]; + return value; + } + return defaultValue; +}; diff --git a/node_modules/argparse/lib/utils.js b/node_modules/argparse/lib/utils.js new file mode 100644 index 00000000..4a9cf3ed --- /dev/null +++ b/node_modules/argparse/lib/utils.js @@ -0,0 +1,57 @@ +'use strict'; + +exports.repeat = function (str, num) { + var result = ''; + for (var i = 0; i < num; i++) { result += str; } + return result; +}; + +exports.arrayEqual = function (a, b) { + if (a.length !== b.length) { return false; } + for (var i = 0; i < a.length; i++) { + if (a[i] !== b[i]) { return false; } + } + return true; +}; + +exports.trimChars = function (str, chars) { + var start = 0; + var end = str.length - 1; + while (chars.indexOf(str.charAt(start)) >= 0) { start++; } + while (chars.indexOf(str.charAt(end)) >= 0) { end--; } + return str.slice(start, end + 1); +}; + +exports.capitalize = function (str) { + return str.charAt(0).toUpperCase() + str.slice(1); +}; + +exports.arrayUnion = function () { + var result = []; + for (var i = 0, values = {}; i < arguments.length; i++) { + var arr = arguments[i]; + for (var j = 0; j < arr.length; j++) { + if (!values[arr[j]]) { + values[arr[j]] = true; + result.push(arr[j]); + } + } + } + return result; +}; + +function has(obj, key) { + return Object.prototype.hasOwnProperty.call(obj, key); +} + +exports.has = has; + +exports.extend = function (dest, src) { + for (var i in src) { + if (has(src, i)) { dest[i] = src[i]; } + } +}; + +exports.trimEnd = function (str) { + return str.replace(/\s+$/g, ''); +}; diff --git a/node_modules/argparse/package.json b/node_modules/argparse/package.json new file mode 100644 index 00000000..5bf397d0 --- /dev/null +++ b/node_modules/argparse/package.json @@ -0,0 +1,70 @@ +{ + "_from": "argparse@^1.0.7", + "_id": "argparse@1.0.10", + "_inBundle": false, + "_integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "_location": "/argparse", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "argparse@^1.0.7", + "name": "argparse", + "escapedName": "argparse", + "rawSpec": "^1.0.7", + "saveSpec": null, + "fetchSpec": "^1.0.7" + }, + "_requiredBy": [ + "/yamljs" + ], + "_resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "_shasum": "bcd6791ea5ae09725e17e5ad988134cd40b3d911", + "_spec": "argparse@^1.0.7", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/yamljs", + "bugs": { + "url": "https://github.com/nodeca/argparse/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Eugene Shkuropat" + }, + { + "name": "Paul Jacobson" + } + ], + "dependencies": { + "sprintf-js": "~1.0.2" + }, + "deprecated": false, + "description": "Very powerful CLI arguments parser. Native port of argparse - python's options parsing library", + "devDependencies": { + "eslint": "^2.13.1", + "istanbul": "^0.4.5", + "mocha": "^3.1.0", + "ndoc": "^5.0.1" + }, + "files": [ + "index.js", + "lib/" + ], + "homepage": "https://github.com/nodeca/argparse#readme", + "keywords": [ + "cli", + "parser", + "argparse", + "option", + "args" + ], + "license": "MIT", + "name": "argparse", + "repository": { + "type": "git", + "url": "git+https://github.com/nodeca/argparse.git" + }, + "scripts": { + "test": "make test" + }, + "version": "1.0.10" +} diff --git a/node_modules/asn1/LICENSE b/node_modules/asn1/LICENSE new file mode 100644 index 00000000..9b5dcdb7 --- /dev/null +++ b/node_modules/asn1/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2011 Mark Cavage, All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE diff --git a/node_modules/asn1/README.md b/node_modules/asn1/README.md new file mode 100644 index 00000000..2208210a --- /dev/null +++ b/node_modules/asn1/README.md @@ -0,0 +1,50 @@ +node-asn1 is a library for encoding and decoding ASN.1 datatypes in pure JS. +Currently BER encoding is supported; at some point I'll likely have to do DER. + +## Usage + +Mostly, if you're *actually* needing to read and write ASN.1, you probably don't +need this readme to explain what and why. If you have no idea what ASN.1 is, +see this: ftp://ftp.rsa.com/pub/pkcs/ascii/layman.asc + +The source is pretty much self-explanatory, and has read/write methods for the +common types out there. + +### Decoding + +The following reads an ASN.1 sequence with a boolean. + + var Ber = require('asn1').Ber; + + var reader = new Ber.Reader(Buffer.from([0x30, 0x03, 0x01, 0x01, 0xff])); + + reader.readSequence(); + console.log('Sequence len: ' + reader.length); + if (reader.peek() === Ber.Boolean) + console.log(reader.readBoolean()); + +### Encoding + +The following generates the same payload as above. + + var Ber = require('asn1').Ber; + + var writer = new Ber.Writer(); + + writer.startSequence(); + writer.writeBoolean(true); + writer.endSequence(); + + console.log(writer.buffer); + +## Installation + + npm install asn1 + +## License + +MIT. + +## Bugs + +See . diff --git a/node_modules/asn1/lib/ber/errors.js b/node_modules/asn1/lib/ber/errors.js new file mode 100644 index 00000000..4557b8ae --- /dev/null +++ b/node_modules/asn1/lib/ber/errors.js @@ -0,0 +1,13 @@ +// Copyright 2011 Mark Cavage All rights reserved. + + +module.exports = { + + newInvalidAsn1Error: function (msg) { + var e = new Error(); + e.name = 'InvalidAsn1Error'; + e.message = msg || ''; + return e; + } + +}; diff --git a/node_modules/asn1/lib/ber/index.js b/node_modules/asn1/lib/ber/index.js new file mode 100644 index 00000000..387d1326 --- /dev/null +++ b/node_modules/asn1/lib/ber/index.js @@ -0,0 +1,27 @@ +// Copyright 2011 Mark Cavage All rights reserved. + +var errors = require('./errors'); +var types = require('./types'); + +var Reader = require('./reader'); +var Writer = require('./writer'); + + +// --- Exports + +module.exports = { + + Reader: Reader, + + Writer: Writer + +}; + +for (var t in types) { + if (types.hasOwnProperty(t)) + module.exports[t] = types[t]; +} +for (var e in errors) { + if (errors.hasOwnProperty(e)) + module.exports[e] = errors[e]; +} diff --git a/node_modules/asn1/lib/ber/reader.js b/node_modules/asn1/lib/ber/reader.js new file mode 100644 index 00000000..8a7e4ca0 --- /dev/null +++ b/node_modules/asn1/lib/ber/reader.js @@ -0,0 +1,262 @@ +// Copyright 2011 Mark Cavage All rights reserved. + +var assert = require('assert'); +var Buffer = require('safer-buffer').Buffer; + +var ASN1 = require('./types'); +var errors = require('./errors'); + + +// --- Globals + +var newInvalidAsn1Error = errors.newInvalidAsn1Error; + + + +// --- API + +function Reader(data) { + if (!data || !Buffer.isBuffer(data)) + throw new TypeError('data must be a node Buffer'); + + this._buf = data; + this._size = data.length; + + // These hold the "current" state + this._len = 0; + this._offset = 0; +} + +Object.defineProperty(Reader.prototype, 'length', { + enumerable: true, + get: function () { return (this._len); } +}); + +Object.defineProperty(Reader.prototype, 'offset', { + enumerable: true, + get: function () { return (this._offset); } +}); + +Object.defineProperty(Reader.prototype, 'remain', { + get: function () { return (this._size - this._offset); } +}); + +Object.defineProperty(Reader.prototype, 'buffer', { + get: function () { return (this._buf.slice(this._offset)); } +}); + + +/** + * Reads a single byte and advances offset; you can pass in `true` to make this + * a "peek" operation (i.e., get the byte, but don't advance the offset). + * + * @param {Boolean} peek true means don't move offset. + * @return {Number} the next byte, null if not enough data. + */ +Reader.prototype.readByte = function (peek) { + if (this._size - this._offset < 1) + return null; + + var b = this._buf[this._offset] & 0xff; + + if (!peek) + this._offset += 1; + + return b; +}; + + +Reader.prototype.peek = function () { + return this.readByte(true); +}; + + +/** + * Reads a (potentially) variable length off the BER buffer. This call is + * not really meant to be called directly, as callers have to manipulate + * the internal buffer afterwards. + * + * As a result of this call, you can call `Reader.length`, until the + * next thing called that does a readLength. + * + * @return {Number} the amount of offset to advance the buffer. + * @throws {InvalidAsn1Error} on bad ASN.1 + */ +Reader.prototype.readLength = function (offset) { + if (offset === undefined) + offset = this._offset; + + if (offset >= this._size) + return null; + + var lenB = this._buf[offset++] & 0xff; + if (lenB === null) + return null; + + if ((lenB & 0x80) === 0x80) { + lenB &= 0x7f; + + if (lenB === 0) + throw newInvalidAsn1Error('Indefinite length not supported'); + + if (lenB > 4) + throw newInvalidAsn1Error('encoding too long'); + + if (this._size - offset < lenB) + return null; + + this._len = 0; + for (var i = 0; i < lenB; i++) + this._len = (this._len << 8) + (this._buf[offset++] & 0xff); + + } else { + // Wasn't a variable length + this._len = lenB; + } + + return offset; +}; + + +/** + * Parses the next sequence in this BER buffer. + * + * To get the length of the sequence, call `Reader.length`. + * + * @return {Number} the sequence's tag. + */ +Reader.prototype.readSequence = function (tag) { + var seq = this.peek(); + if (seq === null) + return null; + if (tag !== undefined && tag !== seq) + throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) + + ': got 0x' + seq.toString(16)); + + var o = this.readLength(this._offset + 1); // stored in `length` + if (o === null) + return null; + + this._offset = o; + return seq; +}; + + +Reader.prototype.readInt = function () { + return this._readTag(ASN1.Integer); +}; + + +Reader.prototype.readBoolean = function () { + return (this._readTag(ASN1.Boolean) === 0 ? false : true); +}; + + +Reader.prototype.readEnumeration = function () { + return this._readTag(ASN1.Enumeration); +}; + + +Reader.prototype.readString = function (tag, retbuf) { + if (!tag) + tag = ASN1.OctetString; + + var b = this.peek(); + if (b === null) + return null; + + if (b !== tag) + throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) + + ': got 0x' + b.toString(16)); + + var o = this.readLength(this._offset + 1); // stored in `length` + + if (o === null) + return null; + + if (this.length > this._size - o) + return null; + + this._offset = o; + + if (this.length === 0) + return retbuf ? Buffer.alloc(0) : ''; + + var str = this._buf.slice(this._offset, this._offset + this.length); + this._offset += this.length; + + return retbuf ? str : str.toString('utf8'); +}; + +Reader.prototype.readOID = function (tag) { + if (!tag) + tag = ASN1.OID; + + var b = this.readString(tag, true); + if (b === null) + return null; + + var values = []; + var value = 0; + + for (var i = 0; i < b.length; i++) { + var byte = b[i] & 0xff; + + value <<= 7; + value += byte & 0x7f; + if ((byte & 0x80) === 0) { + values.push(value); + value = 0; + } + } + + value = values.shift(); + values.unshift(value % 40); + values.unshift((value / 40) >> 0); + + return values.join('.'); +}; + + +Reader.prototype._readTag = function (tag) { + assert.ok(tag !== undefined); + + var b = this.peek(); + + if (b === null) + return null; + + if (b !== tag) + throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) + + ': got 0x' + b.toString(16)); + + var o = this.readLength(this._offset + 1); // stored in `length` + if (o === null) + return null; + + if (this.length > 4) + throw newInvalidAsn1Error('Integer too long: ' + this.length); + + if (this.length > this._size - o) + return null; + this._offset = o; + + var fb = this._buf[this._offset]; + var value = 0; + + for (var i = 0; i < this.length; i++) { + value <<= 8; + value |= (this._buf[this._offset++] & 0xff); + } + + if ((fb & 0x80) === 0x80 && i !== 4) + value -= (1 << (i * 8)); + + return value >> 0; +}; + + + +// --- Exported API + +module.exports = Reader; diff --git a/node_modules/asn1/lib/ber/types.js b/node_modules/asn1/lib/ber/types.js new file mode 100644 index 00000000..8aea0001 --- /dev/null +++ b/node_modules/asn1/lib/ber/types.js @@ -0,0 +1,36 @@ +// Copyright 2011 Mark Cavage All rights reserved. + + +module.exports = { + EOC: 0, + Boolean: 1, + Integer: 2, + BitString: 3, + OctetString: 4, + Null: 5, + OID: 6, + ObjectDescriptor: 7, + External: 8, + Real: 9, // float + Enumeration: 10, + PDV: 11, + Utf8String: 12, + RelativeOID: 13, + Sequence: 16, + Set: 17, + NumericString: 18, + PrintableString: 19, + T61String: 20, + VideotexString: 21, + IA5String: 22, + UTCTime: 23, + GeneralizedTime: 24, + GraphicString: 25, + VisibleString: 26, + GeneralString: 28, + UniversalString: 29, + CharacterString: 30, + BMPString: 31, + Constructor: 32, + Context: 128 +}; diff --git a/node_modules/asn1/lib/ber/writer.js b/node_modules/asn1/lib/ber/writer.js new file mode 100644 index 00000000..3515acf7 --- /dev/null +++ b/node_modules/asn1/lib/ber/writer.js @@ -0,0 +1,317 @@ +// Copyright 2011 Mark Cavage All rights reserved. + +var assert = require('assert'); +var Buffer = require('safer-buffer').Buffer; +var ASN1 = require('./types'); +var errors = require('./errors'); + + +// --- Globals + +var newInvalidAsn1Error = errors.newInvalidAsn1Error; + +var DEFAULT_OPTS = { + size: 1024, + growthFactor: 8 +}; + + +// --- Helpers + +function merge(from, to) { + assert.ok(from); + assert.equal(typeof (from), 'object'); + assert.ok(to); + assert.equal(typeof (to), 'object'); + + var keys = Object.getOwnPropertyNames(from); + keys.forEach(function (key) { + if (to[key]) + return; + + var value = Object.getOwnPropertyDescriptor(from, key); + Object.defineProperty(to, key, value); + }); + + return to; +} + + + +// --- API + +function Writer(options) { + options = merge(DEFAULT_OPTS, options || {}); + + this._buf = Buffer.alloc(options.size || 1024); + this._size = this._buf.length; + this._offset = 0; + this._options = options; + + // A list of offsets in the buffer where we need to insert + // sequence tag/len pairs. + this._seq = []; +} + +Object.defineProperty(Writer.prototype, 'buffer', { + get: function () { + if (this._seq.length) + throw newInvalidAsn1Error(this._seq.length + ' unended sequence(s)'); + + return (this._buf.slice(0, this._offset)); + } +}); + +Writer.prototype.writeByte = function (b) { + if (typeof (b) !== 'number') + throw new TypeError('argument must be a Number'); + + this._ensure(1); + this._buf[this._offset++] = b; +}; + + +Writer.prototype.writeInt = function (i, tag) { + if (typeof (i) !== 'number') + throw new TypeError('argument must be a Number'); + if (typeof (tag) !== 'number') + tag = ASN1.Integer; + + var sz = 4; + + while ((((i & 0xff800000) === 0) || ((i & 0xff800000) === 0xff800000 >> 0)) && + (sz > 1)) { + sz--; + i <<= 8; + } + + if (sz > 4) + throw newInvalidAsn1Error('BER ints cannot be > 0xffffffff'); + + this._ensure(2 + sz); + this._buf[this._offset++] = tag; + this._buf[this._offset++] = sz; + + while (sz-- > 0) { + this._buf[this._offset++] = ((i & 0xff000000) >>> 24); + i <<= 8; + } + +}; + + +Writer.prototype.writeNull = function () { + this.writeByte(ASN1.Null); + this.writeByte(0x00); +}; + + +Writer.prototype.writeEnumeration = function (i, tag) { + if (typeof (i) !== 'number') + throw new TypeError('argument must be a Number'); + if (typeof (tag) !== 'number') + tag = ASN1.Enumeration; + + return this.writeInt(i, tag); +}; + + +Writer.prototype.writeBoolean = function (b, tag) { + if (typeof (b) !== 'boolean') + throw new TypeError('argument must be a Boolean'); + if (typeof (tag) !== 'number') + tag = ASN1.Boolean; + + this._ensure(3); + this._buf[this._offset++] = tag; + this._buf[this._offset++] = 0x01; + this._buf[this._offset++] = b ? 0xff : 0x00; +}; + + +Writer.prototype.writeString = function (s, tag) { + if (typeof (s) !== 'string') + throw new TypeError('argument must be a string (was: ' + typeof (s) + ')'); + if (typeof (tag) !== 'number') + tag = ASN1.OctetString; + + var len = Buffer.byteLength(s); + this.writeByte(tag); + this.writeLength(len); + if (len) { + this._ensure(len); + this._buf.write(s, this._offset); + this._offset += len; + } +}; + + +Writer.prototype.writeBuffer = function (buf, tag) { + if (typeof (tag) !== 'number') + throw new TypeError('tag must be a number'); + if (!Buffer.isBuffer(buf)) + throw new TypeError('argument must be a buffer'); + + this.writeByte(tag); + this.writeLength(buf.length); + this._ensure(buf.length); + buf.copy(this._buf, this._offset, 0, buf.length); + this._offset += buf.length; +}; + + +Writer.prototype.writeStringArray = function (strings) { + if ((!strings instanceof Array)) + throw new TypeError('argument must be an Array[String]'); + + var self = this; + strings.forEach(function (s) { + self.writeString(s); + }); +}; + +// This is really to solve DER cases, but whatever for now +Writer.prototype.writeOID = function (s, tag) { + if (typeof (s) !== 'string') + throw new TypeError('argument must be a string'); + if (typeof (tag) !== 'number') + tag = ASN1.OID; + + if (!/^([0-9]+\.){3,}[0-9]+$/.test(s)) + throw new Error('argument is not a valid OID string'); + + function encodeOctet(bytes, octet) { + if (octet < 128) { + bytes.push(octet); + } else if (octet < 16384) { + bytes.push((octet >>> 7) | 0x80); + bytes.push(octet & 0x7F); + } else if (octet < 2097152) { + bytes.push((octet >>> 14) | 0x80); + bytes.push(((octet >>> 7) | 0x80) & 0xFF); + bytes.push(octet & 0x7F); + } else if (octet < 268435456) { + bytes.push((octet >>> 21) | 0x80); + bytes.push(((octet >>> 14) | 0x80) & 0xFF); + bytes.push(((octet >>> 7) | 0x80) & 0xFF); + bytes.push(octet & 0x7F); + } else { + bytes.push(((octet >>> 28) | 0x80) & 0xFF); + bytes.push(((octet >>> 21) | 0x80) & 0xFF); + bytes.push(((octet >>> 14) | 0x80) & 0xFF); + bytes.push(((octet >>> 7) | 0x80) & 0xFF); + bytes.push(octet & 0x7F); + } + } + + var tmp = s.split('.'); + var bytes = []; + bytes.push(parseInt(tmp[0], 10) * 40 + parseInt(tmp[1], 10)); + tmp.slice(2).forEach(function (b) { + encodeOctet(bytes, parseInt(b, 10)); + }); + + var self = this; + this._ensure(2 + bytes.length); + this.writeByte(tag); + this.writeLength(bytes.length); + bytes.forEach(function (b) { + self.writeByte(b); + }); +}; + + +Writer.prototype.writeLength = function (len) { + if (typeof (len) !== 'number') + throw new TypeError('argument must be a Number'); + + this._ensure(4); + + if (len <= 0x7f) { + this._buf[this._offset++] = len; + } else if (len <= 0xff) { + this._buf[this._offset++] = 0x81; + this._buf[this._offset++] = len; + } else if (len <= 0xffff) { + this._buf[this._offset++] = 0x82; + this._buf[this._offset++] = len >> 8; + this._buf[this._offset++] = len; + } else if (len <= 0xffffff) { + this._buf[this._offset++] = 0x83; + this._buf[this._offset++] = len >> 16; + this._buf[this._offset++] = len >> 8; + this._buf[this._offset++] = len; + } else { + throw newInvalidAsn1Error('Length too long (> 4 bytes)'); + } +}; + +Writer.prototype.startSequence = function (tag) { + if (typeof (tag) !== 'number') + tag = ASN1.Sequence | ASN1.Constructor; + + this.writeByte(tag); + this._seq.push(this._offset); + this._ensure(3); + this._offset += 3; +}; + + +Writer.prototype.endSequence = function () { + var seq = this._seq.pop(); + var start = seq + 3; + var len = this._offset - start; + + if (len <= 0x7f) { + this._shift(start, len, -2); + this._buf[seq] = len; + } else if (len <= 0xff) { + this._shift(start, len, -1); + this._buf[seq] = 0x81; + this._buf[seq + 1] = len; + } else if (len <= 0xffff) { + this._buf[seq] = 0x82; + this._buf[seq + 1] = len >> 8; + this._buf[seq + 2] = len; + } else if (len <= 0xffffff) { + this._shift(start, len, 1); + this._buf[seq] = 0x83; + this._buf[seq + 1] = len >> 16; + this._buf[seq + 2] = len >> 8; + this._buf[seq + 3] = len; + } else { + throw newInvalidAsn1Error('Sequence too long'); + } +}; + + +Writer.prototype._shift = function (start, len, shift) { + assert.ok(start !== undefined); + assert.ok(len !== undefined); + assert.ok(shift); + + this._buf.copy(this._buf, start + shift, start, start + len); + this._offset += shift; +}; + +Writer.prototype._ensure = function (len) { + assert.ok(len); + + if (this._size - this._offset < len) { + var sz = this._size * this._options.growthFactor; + if (sz - this._offset < len) + sz += len; + + var buf = Buffer.alloc(sz); + + this._buf.copy(buf, 0, 0, this._offset); + this._buf = buf; + this._size = sz; + } +}; + + + +// --- Exported API + +module.exports = Writer; diff --git a/node_modules/asn1/lib/index.js b/node_modules/asn1/lib/index.js new file mode 100644 index 00000000..ede3ab23 --- /dev/null +++ b/node_modules/asn1/lib/index.js @@ -0,0 +1,20 @@ +// Copyright 2011 Mark Cavage All rights reserved. + +// If you have no idea what ASN.1 or BER is, see this: +// ftp://ftp.rsa.com/pub/pkcs/ascii/layman.asc + +var Ber = require('./ber/index'); + + + +// --- Exported API + +module.exports = { + + Ber: Ber, + + BerReader: Ber.Reader, + + BerWriter: Ber.Writer + +}; diff --git a/node_modules/asn1/package.json b/node_modules/asn1/package.json new file mode 100644 index 00000000..cbeba3bd --- /dev/null +++ b/node_modules/asn1/package.json @@ -0,0 +1,75 @@ +{ + "_from": "asn1@^0.2.4", + "_id": "asn1@0.2.4", + "_inBundle": false, + "_integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "_location": "/asn1", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "asn1@^0.2.4", + "name": "asn1", + "escapedName": "asn1", + "rawSpec": "^0.2.4", + "saveSpec": null, + "fetchSpec": "^0.2.4" + }, + "_requiredBy": [ + "/node-rsa" + ], + "_resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "_shasum": "8d2475dfab553bb33e77b54e59e880bb8ce23136", + "_spec": "asn1@^0.2.4", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/node-rsa", + "author": { + "name": "Joyent", + "url": "joyent.com" + }, + "bugs": { + "url": "https://github.com/joyent/node-asn1/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Mark Cavage", + "email": "mcavage@gmail.com" + }, + { + "name": "David Gwynne", + "email": "loki@animata.net" + }, + { + "name": "Yunong Xiao", + "email": "yunong@joyent.com" + }, + { + "name": "Alex Wilson", + "email": "alex.wilson@joyent.com" + } + ], + "dependencies": { + "safer-buffer": "~2.1.0" + }, + "deprecated": false, + "description": "Contains parsers and serializers for ASN.1 (currently BER only)", + "devDependencies": { + "eslint": "2.13.1", + "eslint-plugin-joyent": "~1.3.0", + "faucet": "0.0.1", + "istanbul": "^0.3.6", + "tape": "^3.5.0" + }, + "homepage": "https://github.com/joyent/node-asn1#readme", + "license": "MIT", + "main": "lib/index.js", + "name": "asn1", + "repository": { + "type": "git", + "url": "git://github.com/joyent/node-asn1.git" + }, + "scripts": { + "test": "tape ./test/ber/*.test.js" + }, + "version": "0.2.4" +} diff --git a/node_modules/balanced-match/.npmignore b/node_modules/balanced-match/.npmignore new file mode 100644 index 00000000..ae5d8c36 --- /dev/null +++ b/node_modules/balanced-match/.npmignore @@ -0,0 +1,5 @@ +test +.gitignore +.travis.yml +Makefile +example.js diff --git a/node_modules/balanced-match/LICENSE.md b/node_modules/balanced-match/LICENSE.md new file mode 100644 index 00000000..2cdc8e41 --- /dev/null +++ b/node_modules/balanced-match/LICENSE.md @@ -0,0 +1,21 @@ +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/balanced-match/README.md b/node_modules/balanced-match/README.md new file mode 100644 index 00000000..08e918c0 --- /dev/null +++ b/node_modules/balanced-match/README.md @@ -0,0 +1,91 @@ +# balanced-match + +Match balanced string pairs, like `{` and `}` or `` and ``. Supports regular expressions as well! + +[![build status](https://secure.travis-ci.org/juliangruber/balanced-match.svg)](http://travis-ci.org/juliangruber/balanced-match) +[![downloads](https://img.shields.io/npm/dm/balanced-match.svg)](https://www.npmjs.org/package/balanced-match) + +[![testling badge](https://ci.testling.com/juliangruber/balanced-match.png)](https://ci.testling.com/juliangruber/balanced-match) + +## Example + +Get the first matching pair of braces: + +```js +var balanced = require('balanced-match'); + +console.log(balanced('{', '}', 'pre{in{nested}}post')); +console.log(balanced('{', '}', 'pre{first}between{second}post')); +console.log(balanced(/\s+\{\s+/, /\s+\}\s+/, 'pre { in{nest} } post')); +``` + +The matches are: + +```bash +$ node example.js +{ start: 3, end: 14, pre: 'pre', body: 'in{nested}', post: 'post' } +{ start: 3, + end: 9, + pre: 'pre', + body: 'first', + post: 'between{second}post' } +{ start: 3, end: 17, pre: 'pre', body: 'in{nest}', post: 'post' } +``` + +## API + +### var m = balanced(a, b, str) + +For the first non-nested matching pair of `a` and `b` in `str`, return an +object with those keys: + +* **start** the index of the first match of `a` +* **end** the index of the matching `b` +* **pre** the preamble, `a` and `b` not included +* **body** the match, `a` and `b` not included +* **post** the postscript, `a` and `b` not included + +If there's no match, `undefined` will be returned. + +If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']` and `{a}}` will match `['', 'a', '}']`. + +### var r = balanced.range(a, b, str) + +For the first non-nested matching pair of `a` and `b` in `str`, return an +array with indexes: `[ , ]`. + +If there's no match, `undefined` will be returned. + +If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `[ 1, 3 ]` and `{a}}` will match `[0, 2]`. + +## Installation + +With [npm](https://npmjs.org) do: + +```bash +npm install balanced-match +``` + +## License + +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/balanced-match/index.js b/node_modules/balanced-match/index.js new file mode 100644 index 00000000..1685a762 --- /dev/null +++ b/node_modules/balanced-match/index.js @@ -0,0 +1,59 @@ +'use strict'; +module.exports = balanced; +function balanced(a, b, str) { + if (a instanceof RegExp) a = maybeMatch(a, str); + if (b instanceof RegExp) b = maybeMatch(b, str); + + var r = range(a, b, str); + + return r && { + start: r[0], + end: r[1], + pre: str.slice(0, r[0]), + body: str.slice(r[0] + a.length, r[1]), + post: str.slice(r[1] + b.length) + }; +} + +function maybeMatch(reg, str) { + var m = str.match(reg); + return m ? m[0] : null; +} + +balanced.range = range; +function range(a, b, str) { + var begs, beg, left, right, result; + var ai = str.indexOf(a); + var bi = str.indexOf(b, ai + 1); + var i = ai; + + if (ai >= 0 && bi > 0) { + begs = []; + left = str.length; + + while (i >= 0 && !result) { + if (i == ai) { + begs.push(i); + ai = str.indexOf(a, i + 1); + } else if (begs.length == 1) { + result = [ begs.pop(), bi ]; + } else { + beg = begs.pop(); + if (beg < left) { + left = beg; + right = bi; + } + + bi = str.indexOf(b, i + 1); + } + + i = ai < bi && ai >= 0 ? ai : bi; + } + + if (begs.length) { + result = [ left, right ]; + } + } + + return result; +} diff --git a/node_modules/balanced-match/package.json b/node_modules/balanced-match/package.json new file mode 100644 index 00000000..ad679e07 --- /dev/null +++ b/node_modules/balanced-match/package.json @@ -0,0 +1,77 @@ +{ + "_from": "balanced-match@^1.0.0", + "_id": "balanced-match@1.0.0", + "_inBundle": false, + "_integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "_location": "/balanced-match", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "balanced-match@^1.0.0", + "name": "balanced-match", + "escapedName": "balanced-match", + "rawSpec": "^1.0.0", + "saveSpec": null, + "fetchSpec": "^1.0.0" + }, + "_requiredBy": [ + "/brace-expansion" + ], + "_resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "_shasum": "89b4d199ab2bee49de164ea02b89ce462d71b767", + "_spec": "balanced-match@^1.0.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/brace-expansion", + "author": { + "name": "Julian Gruber", + "email": "mail@juliangruber.com", + "url": "http://juliangruber.com" + }, + "bugs": { + "url": "https://github.com/juliangruber/balanced-match/issues" + }, + "bundleDependencies": false, + "dependencies": {}, + "deprecated": false, + "description": "Match balanced character pairs, like \"{\" and \"}\"", + "devDependencies": { + "matcha": "^0.7.0", + "tape": "^4.6.0" + }, + "homepage": "https://github.com/juliangruber/balanced-match", + "keywords": [ + "match", + "regexp", + "test", + "balanced", + "parse" + ], + "license": "MIT", + "main": "index.js", + "name": "balanced-match", + "repository": { + "type": "git", + "url": "git://github.com/juliangruber/balanced-match.git" + }, + "scripts": { + "bench": "make bench", + "test": "make test" + }, + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/8..latest", + "firefox/20..latest", + "firefox/nightly", + "chrome/25..latest", + "chrome/canary", + "opera/12..latest", + "opera/next", + "safari/5.1..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2..latest" + ] + }, + "version": "1.0.0" +} diff --git a/node_modules/bcp47/LICENSE b/node_modules/bcp47/LICENSE new file mode 100644 index 00000000..5c57da6b --- /dev/null +++ b/node_modules/bcp47/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015 Gabriel Llamas + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/bcp47/README.md b/node_modules/bcp47/README.md new file mode 100644 index 00000000..acc139d4 --- /dev/null +++ b/node_modules/bcp47/README.md @@ -0,0 +1,22 @@ +bcp47 +===== + +#### Parser for the BCP 47 language tag specification #### + +[![npm][npm-image]][npm-url] +[![travis][travis-image]][travis-url] +[![coveralls][coveralls-image]][coveralls-url] + +[BCP 47][bcp47] + +___module_.parse(tag) : Object__ +Parses the language tag and returns an object with all the available information. If the tag is not valid it returns null. Look at the [examples][examples] folder to see what information returns. + +[npm-image]: https://img.shields.io/npm/v/bcp47.svg?style=flat +[npm-url]: https://npmjs.org/package/bcp47 +[travis-image]: https://img.shields.io/travis/gagle/node-bcp47.svg?style=flat +[travis-url]: https://travis-ci.org/gagle/node-bcp47 +[coveralls-image]: https://img.shields.io/coveralls/gagle/node-bcp47.svg?style=flat +[coveralls-url]: https://coveralls.io/r/gagle/node-bcp47 +[bcp47]: http://tools.ietf.org/rfc/bcp/bcp47.txt +[examples]: https://github.com/gagle/node-bcp47/tree/master/examples \ No newline at end of file diff --git a/node_modules/bcp47/lib/index.js b/node_modules/bcp47/lib/index.js new file mode 100644 index 00000000..3bc8db9c --- /dev/null +++ b/node_modules/bcp47/lib/index.js @@ -0,0 +1,173 @@ +'use strict'; + +module.exports.parse = function (tag) { + var re = /^(?:(en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)|(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang))$|^((?:[a-z]{2,3}(?:(?:-[a-z]{3}){1,3})?)|[a-z]{4}|[a-z]{5,8})(?:-([a-z]{4}))?(?:-([a-z]{2}|\d{3}))?((?:-(?:[\da-z]{5,8}|\d[\da-z]{3}))*)?((?:-[\da-wy-z](?:-[\da-z]{2,8})+)*)?(-x(?:-[\da-z]{1,8})+)?$|^(x(?:-[\da-z]{1,8})+)$/i; + + /* + / + ^ + (?: + ( + en-GB-oed | i-ami | i-bnn | i-default | i-enochian | i-hak | i-klingon | + i-lux | i-mingo | i-navajo | i-pwn | i-tao | i-tay | i-tsu | sgn-BE-FR | + sgn-BE-NL | sgn-CH-DE + ) | + ( + art-lojban | cel-gaulish | no-bok | no-nyn | zh-guoyu | zh-hakka | + zh-min | zh-min-nan | zh-xiang + ) + ) + $ + | + ^ + ( + (?: + [a-z]{2,3} + (?: + (?: + -[a-z]{3} + ){1,3} + )? + ) | + [a-z]{4} | + [a-z]{5,8} + ) + (?: + - + ( + [a-z]{4} + ) + )? + (?: + - + ( + [a-z]{2} | + \d{3} + ) + )? + ( + (?: + - + (?: + [\da-z]{5,8} | + \d[\da-z]{3} + ) + )* + )? + ( + (?: + - + [\da-wy-z] + (?: + -[\da-z]{2,8} + )+ + )* + )? + ( + -x + (?: + -[\da-z]{1,8} + )+ + )? + $ + | + ^ + ( + x + (?: + -[\da-z]{1,8} + )+ + ) + $ + /i + */ + + var res = re.exec(tag); + if (!res) return null; + + res.shift(); + var t; + + // langtag language + var language = null; + var extlang = []; + if (res[2]) { + t = res[2].split('-'); + language = t.shift(); + extlang = t; + } + + // langtag variant + var variant = []; + if (res[5]) { + variant = res[5].split('-'); + variant.shift(); + } + + // langtag extension + var extension = []; + if (res[6]) { + t = res[6].split('-'); + t.shift(); + + var singleton; + var ext = []; + + while (t.length) { + var e = t.shift(); + if (e.length === 1) { + if (singleton) { + extension.push({ + singleton: singleton, + extension: ext + }); + singleton = e; + ext = []; + } else { + singleton = e; + } + } else { + ext.push(e); + } + } + + extension.push({ + singleton: singleton, + extension: ext + }); + } + + // langtag privateuse + var langtagPrivateuse = []; + if (res[7]) { + langtagPrivateuse = res[7].split('-'); + langtagPrivateuse.shift(); + langtagPrivateuse.shift(); + } + + // privateuse + var privateuse = []; + if (res[8]) { + privateuse = res[8].split('-'); + privateuse.shift(); + } + + return { + langtag: { + language: { + language: language, + extlang: extlang + }, + script: res[3] || null, + region: res[4] || null, + variant: variant, + extension: extension, + privateuse: langtagPrivateuse + }, + privateuse: privateuse, + grandfathered: { + irregular: res[0] || null, + regular: res[1] || null + } + }; +}; \ No newline at end of file diff --git a/node_modules/bcp47/package.json b/node_modules/bcp47/package.json new file mode 100644 index 00000000..c00b7829 --- /dev/null +++ b/node_modules/bcp47/package.json @@ -0,0 +1,63 @@ +{ + "_from": "bcp47@^1.1.2", + "_id": "bcp47@1.1.2", + "_inBundle": false, + "_integrity": "sha1-NUvjMH/9CEM6ePXh4glYRfifx/4=", + "_location": "/bcp47", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "bcp47@^1.1.2", + "name": "bcp47", + "escapedName": "bcp47", + "rawSpec": "^1.1.2", + "saveSpec": null, + "fetchSpec": "^1.1.2" + }, + "_requiredBy": [ + "/accept-language" + ], + "_resolved": "https://registry.npmjs.org/bcp47/-/bcp47-1.1.2.tgz", + "_shasum": "354be3307ffd08433a78f5e1e2095845f89fc7fe", + "_spec": "bcp47@^1.1.2", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/accept-language", + "author": { + "name": "Gabriel Llamas", + "email": "gagle@outlook.com" + }, + "bugs": { + "url": "https://github.com/gagle/node-bcp47/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Parser for the BCP 47 language tag specification", + "devDependencies": { + "code": "^1.3.0", + "lab": "^5.2.1" + }, + "engines": { + "node": ">=0.10" + }, + "homepage": "https://github.com/gagle/node-bcp47#readme", + "keywords": [ + "bcp47", + "parser", + "internationalization", + "i18n", + "language", + "locale" + ], + "license": "MIT", + "main": "lib", + "name": "bcp47", + "repository": { + "type": "git", + "url": "git://github.com/gagle/node-bcp47.git" + }, + "scripts": { + "test": "lab -t 100", + "test-lcov": "lab -t 100 -r lcov" + }, + "version": "1.1.2" +} diff --git a/node_modules/brace-expansion/LICENSE b/node_modules/brace-expansion/LICENSE new file mode 100644 index 00000000..de322667 --- /dev/null +++ b/node_modules/brace-expansion/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2013 Julian Gruber + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/brace-expansion/README.md b/node_modules/brace-expansion/README.md new file mode 100644 index 00000000..6b4e0e16 --- /dev/null +++ b/node_modules/brace-expansion/README.md @@ -0,0 +1,129 @@ +# brace-expansion + +[Brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html), +as known from sh/bash, in JavaScript. + +[![build status](https://secure.travis-ci.org/juliangruber/brace-expansion.svg)](http://travis-ci.org/juliangruber/brace-expansion) +[![downloads](https://img.shields.io/npm/dm/brace-expansion.svg)](https://www.npmjs.org/package/brace-expansion) +[![Greenkeeper badge](https://badges.greenkeeper.io/juliangruber/brace-expansion.svg)](https://greenkeeper.io/) + +[![testling badge](https://ci.testling.com/juliangruber/brace-expansion.png)](https://ci.testling.com/juliangruber/brace-expansion) + +## Example + +```js +var expand = require('brace-expansion'); + +expand('file-{a,b,c}.jpg') +// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg'] + +expand('-v{,,}') +// => ['-v', '-v', '-v'] + +expand('file{0..2}.jpg') +// => ['file0.jpg', 'file1.jpg', 'file2.jpg'] + +expand('file-{a..c}.jpg') +// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg'] + +expand('file{2..0}.jpg') +// => ['file2.jpg', 'file1.jpg', 'file0.jpg'] + +expand('file{0..4..2}.jpg') +// => ['file0.jpg', 'file2.jpg', 'file4.jpg'] + +expand('file-{a..e..2}.jpg') +// => ['file-a.jpg', 'file-c.jpg', 'file-e.jpg'] + +expand('file{00..10..5}.jpg') +// => ['file00.jpg', 'file05.jpg', 'file10.jpg'] + +expand('{{A..C},{a..c}}') +// => ['A', 'B', 'C', 'a', 'b', 'c'] + +expand('ppp{,config,oe{,conf}}') +// => ['ppp', 'pppconfig', 'pppoe', 'pppoeconf'] +``` + +## API + +```js +var expand = require('brace-expansion'); +``` + +### var expanded = expand(str) + +Return an array of all possible and valid expansions of `str`. If none are +found, `[str]` is returned. + +Valid expansions are: + +```js +/^(.*,)+(.+)?$/ +// {a,b,...} +``` + +A comma separated list of options, like `{a,b}` or `{a,{b,c}}` or `{,a,}`. + +```js +/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/ +// {x..y[..incr]} +``` + +A numeric sequence from `x` to `y` inclusive, with optional increment. +If `x` or `y` start with a leading `0`, all the numbers will be padded +to have equal length. Negative numbers and backwards iteration work too. + +```js +/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/ +// {x..y[..incr]} +``` + +An alphabetic sequence from `x` to `y` inclusive, with optional increment. +`x` and `y` must be exactly one character, and if given, `incr` must be a +number. + +For compatibility reasons, the string `${` is not eligible for brace expansion. + +## Installation + +With [npm](https://npmjs.org) do: + +```bash +npm install brace-expansion +``` + +## Contributors + +- [Julian Gruber](https://github.com/juliangruber) +- [Isaac Z. Schlueter](https://github.com/isaacs) + +## Sponsors + +This module is proudly supported by my [Sponsors](https://github.com/juliangruber/sponsors)! + +Do you want to support modules like this to improve their quality, stability and weigh in on new features? Then please consider donating to my [Patreon](https://www.patreon.com/juliangruber). Not sure how much of my modules you're using? Try [feross/thanks](https://github.com/feross/thanks)! + +## License + +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/brace-expansion/index.js b/node_modules/brace-expansion/index.js new file mode 100644 index 00000000..0478be81 --- /dev/null +++ b/node_modules/brace-expansion/index.js @@ -0,0 +1,201 @@ +var concatMap = require('concat-map'); +var balanced = require('balanced-match'); + +module.exports = expandTop; + +var escSlash = '\0SLASH'+Math.random()+'\0'; +var escOpen = '\0OPEN'+Math.random()+'\0'; +var escClose = '\0CLOSE'+Math.random()+'\0'; +var escComma = '\0COMMA'+Math.random()+'\0'; +var escPeriod = '\0PERIOD'+Math.random()+'\0'; + +function numeric(str) { + return parseInt(str, 10) == str + ? parseInt(str, 10) + : str.charCodeAt(0); +} + +function escapeBraces(str) { + return str.split('\\\\').join(escSlash) + .split('\\{').join(escOpen) + .split('\\}').join(escClose) + .split('\\,').join(escComma) + .split('\\.').join(escPeriod); +} + +function unescapeBraces(str) { + return str.split(escSlash).join('\\') + .split(escOpen).join('{') + .split(escClose).join('}') + .split(escComma).join(',') + .split(escPeriod).join('.'); +} + + +// Basically just str.split(","), but handling cases +// where we have nested braced sections, which should be +// treated as individual members, like {a,{b,c},d} +function parseCommaParts(str) { + if (!str) + return ['']; + + var parts = []; + var m = balanced('{', '}', str); + + if (!m) + return str.split(','); + + var pre = m.pre; + var body = m.body; + var post = m.post; + var p = pre.split(','); + + p[p.length-1] += '{' + body + '}'; + var postParts = parseCommaParts(post); + if (post.length) { + p[p.length-1] += postParts.shift(); + p.push.apply(p, postParts); + } + + parts.push.apply(parts, p); + + return parts; +} + +function expandTop(str) { + if (!str) + return []; + + // I don't know why Bash 4.3 does this, but it does. + // Anything starting with {} will have the first two bytes preserved + // but *only* at the top level, so {},a}b will not expand to anything, + // but a{},b}c will be expanded to [a}c,abc]. + // One could argue that this is a bug in Bash, but since the goal of + // this module is to match Bash's rules, we escape a leading {} + if (str.substr(0, 2) === '{}') { + str = '\\{\\}' + str.substr(2); + } + + return expand(escapeBraces(str), true).map(unescapeBraces); +} + +function identity(e) { + return e; +} + +function embrace(str) { + return '{' + str + '}'; +} +function isPadded(el) { + return /^-?0\d/.test(el); +} + +function lte(i, y) { + return i <= y; +} +function gte(i, y) { + return i >= y; +} + +function expand(str, isTop) { + var expansions = []; + + var m = balanced('{', '}', str); + if (!m || /\$$/.test(m.pre)) return [str]; + + var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); + var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); + var isSequence = isNumericSequence || isAlphaSequence; + var isOptions = m.body.indexOf(',') >= 0; + if (!isSequence && !isOptions) { + // {a},b} + if (m.post.match(/,.*\}/)) { + str = m.pre + '{' + m.body + escClose + m.post; + return expand(str); + } + return [str]; + } + + var n; + if (isSequence) { + n = m.body.split(/\.\./); + } else { + n = parseCommaParts(m.body); + if (n.length === 1) { + // x{{a,b}}y ==> x{a}y x{b}y + n = expand(n[0], false).map(embrace); + if (n.length === 1) { + var post = m.post.length + ? expand(m.post, false) + : ['']; + return post.map(function(p) { + return m.pre + n[0] + p; + }); + } + } + } + + // at this point, n is the parts, and we know it's not a comma set + // with a single entry. + + // no need to expand pre, since it is guaranteed to be free of brace-sets + var pre = m.pre; + var post = m.post.length + ? expand(m.post, false) + : ['']; + + var N; + + if (isSequence) { + var x = numeric(n[0]); + var y = numeric(n[1]); + var width = Math.max(n[0].length, n[1].length) + var incr = n.length == 3 + ? Math.abs(numeric(n[2])) + : 1; + var test = lte; + var reverse = y < x; + if (reverse) { + incr *= -1; + test = gte; + } + var pad = n.some(isPadded); + + N = []; + + for (var i = x; test(i, y); i += incr) { + var c; + if (isAlphaSequence) { + c = String.fromCharCode(i); + if (c === '\\') + c = ''; + } else { + c = String(i); + if (pad) { + var need = width - c.length; + if (need > 0) { + var z = new Array(need + 1).join('0'); + if (i < 0) + c = '-' + z + c.slice(1); + else + c = z + c; + } + } + } + N.push(c); + } + } else { + N = concatMap(n, function(el) { return expand(el, false) }); + } + + for (var j = 0; j < N.length; j++) { + for (var k = 0; k < post.length; k++) { + var expansion = pre + N[j] + post[k]; + if (!isTop || isSequence || expansion) + expansions.push(expansion); + } + } + + return expansions; +} + diff --git a/node_modules/brace-expansion/package.json b/node_modules/brace-expansion/package.json new file mode 100644 index 00000000..f03ea536 --- /dev/null +++ b/node_modules/brace-expansion/package.json @@ -0,0 +1,75 @@ +{ + "_from": "brace-expansion@^1.1.7", + "_id": "brace-expansion@1.1.11", + "_inBundle": false, + "_integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "_location": "/brace-expansion", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "brace-expansion@^1.1.7", + "name": "brace-expansion", + "escapedName": "brace-expansion", + "rawSpec": "^1.1.7", + "saveSpec": null, + "fetchSpec": "^1.1.7" + }, + "_requiredBy": [ + "/minimatch" + ], + "_resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "_shasum": "3c7fcbf529d87226f3d2f52b966ff5271eb441dd", + "_spec": "brace-expansion@^1.1.7", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/minimatch", + "author": { + "name": "Julian Gruber", + "email": "mail@juliangruber.com", + "url": "http://juliangruber.com" + }, + "bugs": { + "url": "https://github.com/juliangruber/brace-expansion/issues" + }, + "bundleDependencies": false, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + }, + "deprecated": false, + "description": "Brace expansion as known from sh/bash", + "devDependencies": { + "matcha": "^0.7.0", + "tape": "^4.6.0" + }, + "homepage": "https://github.com/juliangruber/brace-expansion", + "keywords": [], + "license": "MIT", + "main": "index.js", + "name": "brace-expansion", + "repository": { + "type": "git", + "url": "git://github.com/juliangruber/brace-expansion.git" + }, + "scripts": { + "bench": "matcha test/perf/bench.js", + "gentest": "bash test/generate.sh", + "test": "tape test/*.js" + }, + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/8..latest", + "firefox/20..latest", + "firefox/nightly", + "chrome/25..latest", + "chrome/canary", + "opera/12..latest", + "opera/next", + "safari/5.1..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2..latest" + ] + }, + "version": "1.1.11" +} diff --git a/node_modules/brackets2dots/.npmignore b/node_modules/brackets2dots/.npmignore new file mode 100644 index 00000000..fb37bceb --- /dev/null +++ b/node_modules/brackets2dots/.npmignore @@ -0,0 +1,4 @@ +components +build +node_modules +npm-debug.log diff --git a/node_modules/brackets2dots/.travis.yml b/node_modules/brackets2dots/.travis.yml new file mode 100644 index 00000000..d19e6e26 --- /dev/null +++ b/node_modules/brackets2dots/.travis.yml @@ -0,0 +1,12 @@ +language: node_js +node_js: + - 0.10 +branches: + only: + - master +before_install: + - npm install +script: + - "npm test" +notifications: + email: true diff --git a/node_modules/brackets2dots/brackets2dots.js b/node_modules/brackets2dots/brackets2dots.js new file mode 100644 index 00000000..caca7d09 --- /dev/null +++ b/node_modules/brackets2dots/brackets2dots.js @@ -0,0 +1,46 @@ +!function(e){if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.brackets2dots=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 'group.0.section.a.seat.3' + * + * brackets2dots('[0].section.a.seat[3]') + * //=> '0.section.a.seat.3' + * + * brackets2dots('people[*].age') + * //=> 'people.*.age' + * + * @param {String} string + * original string + * + * @return {String} + * dot/bracket-notation string + */ + +function brackets2dots(string) { + return ({}).toString.call(string) == '[object String]' + ? string.replace(REPLACE_BRACKETS, '.$1').replace(LFT_RT_TRIM_DOTS, '') + : '' +} + +},{}]},{},[1]) +(1) +}); \ No newline at end of file diff --git a/node_modules/brackets2dots/component.json b/node_modules/brackets2dots/component.json new file mode 100644 index 00000000..6641baec --- /dev/null +++ b/node_modules/brackets2dots/component.json @@ -0,0 +1,19 @@ +{ + "name": "brackets2dots", + "version": "1.1.0", + "description": "Convert string with bracket notation to dot property notation for Node.js and the browser.", + "repo": "wilmoore/brackets2dots.js", + "keywords": [ + "string", + "object", + "property", + "access", + "deep", + "nested" + ], + "dependencies": {}, + "development": {}, + "scripts": [ + "index.js" + ] +} diff --git a/node_modules/brackets2dots/index.js b/node_modules/brackets2dots/index.js new file mode 100644 index 00000000..77501dfa --- /dev/null +++ b/node_modules/brackets2dots/index.js @@ -0,0 +1,41 @@ +'use strict'; + +/*! + * exports. + */ + +module.exports = brackets2dots; + +/*! + * regexp patterns. + */ + +var REPLACE_BRACKETS = /\[([^\[\]]+)\]/g; +var LFT_RT_TRIM_DOTS = /^[.]*|[.]*$/g; + +/** + * Convert string with bracket notation to dot property notation. + * + * ### Examples: + * + * brackets2dots('group[0].section.a.seat[3]') + * //=> 'group.0.section.a.seat.3' + * + * brackets2dots('[0].section.a.seat[3]') + * //=> '0.section.a.seat.3' + * + * brackets2dots('people[*].age') + * //=> 'people.*.age' + * + * @param {String} string + * original string + * + * @return {String} + * dot/bracket-notation string + */ + +function brackets2dots(string) { + return ({}).toString.call(string) == '[object String]' + ? string.replace(REPLACE_BRACKETS, '.$1').replace(LFT_RT_TRIM_DOTS, '') + : '' +} diff --git a/node_modules/brackets2dots/license b/node_modules/brackets2dots/license new file mode 100644 index 00000000..655b0a6d --- /dev/null +++ b/node_modules/brackets2dots/license @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2014 Wil Moore III + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/brackets2dots/makefile b/node_modules/brackets2dots/makefile new file mode 100644 index 00000000..e34a458f --- /dev/null +++ b/node_modules/brackets2dots/makefile @@ -0,0 +1,20 @@ +.PHONY: clean test + +STANDALONE := brackets2dots +MOCHAFLAGS ?= --reporter spec + +clean: + @$(RM) -fr node_modules $(STANDALONE).js + @$(RM) -fr npm-debug.log + +$(STANDALONE).js: index.js + @./node_modules/.bin/browserify --entry $< --outfile $@ --standalone $(STANDALONE) + +test: node_modules $(STANDALONE).js + @./node_modules/.bin/mocha $(MOCHAFLAGS) + +node_modules: package.json + @npm prune + @npm install + +release: test $(STANDALONE).js diff --git a/node_modules/brackets2dots/package.json b/node_modules/brackets2dots/package.json new file mode 100644 index 00000000..e1ac037e --- /dev/null +++ b/node_modules/brackets2dots/package.json @@ -0,0 +1,62 @@ +{ + "_from": "brackets2dots@^1.1.0", + "_id": "brackets2dots@1.1.0", + "_inBundle": false, + "_integrity": "sha1-Pz1AN1/GYM4P0AT6J9Z7NPlGmsM=", + "_location": "/brackets2dots", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "brackets2dots@^1.1.0", + "name": "brackets2dots", + "escapedName": "brackets2dots", + "rawSpec": "^1.1.0", + "saveSpec": null, + "fetchSpec": "^1.1.0" + }, + "_requiredBy": [ + "/selectn" + ], + "_resolved": "https://registry.npmjs.org/brackets2dots/-/brackets2dots-1.1.0.tgz", + "_shasum": "3f3d40375fc660ce0fd004fa27d67b34f9469ac3", + "_spec": "brackets2dots@^1.1.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/selectn", + "author": { + "name": "Wil Moore III", + "email": "wil.moore@wilmoore.com" + }, + "bugs": { + "url": "https://github.com/wilmoore/brackets2dots.js/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Convert string with bracket notation to dot property notation for Node.js and the browser.", + "devDependencies": { + "browserify": "*", + "mocha": "*" + }, + "homepage": "https://github.com/wilmoore/brackets2dots.js#readme", + "keywords": [ + "string", + "object", + "property", + "access", + "deep", + "nested" + ], + "license": "MIT", + "main": "./index", + "name": "brackets2dots", + "repository": { + "type": "git", + "url": "git+https://github.com/wilmoore/brackets2dots.js.git" + }, + "scripts": { + "test": "make test" + }, + "version": "1.1.0", + "volo": { + "url": "https://raw.github.com/wilmoore/brackets2dots.js/v{version}/brackets2dots.js" + } +} diff --git a/node_modules/brackets2dots/readme.md b/node_modules/brackets2dots/readme.md new file mode 100644 index 00000000..d1724c5e --- /dev/null +++ b/node_modules/brackets2dots/readme.md @@ -0,0 +1,53 @@ +# brackets2dots.js + +[![Build Status](http://img.shields.io/travis/wilmoore/brackets2dots.js.svg)](https://travis-ci.org/wilmoore/brackets2dots.js) [![NPM version](http://img.shields.io/npm/v/brackets2dots.svg)](https://www.npmjs.org/package/brackets2dots) [![NPM downloads](http://img.shields.io/npm/dm/brackets2dots.svg)](https://www.npmjs.org/package/brackets2dots) [![LICENSE](http://img.shields.io/npm/l/brackets2dots.svg)](license) + +> Convert string with bracket notation to dot property notation for [Node.js][] and the browser. + +## Example + + var brackets2dots = require('brackets2dots'); + + brackets2dots('group[0].section.a.seat[3]') + //=> 'group.0.section.a.seat.3' + +## Installation + +[component](http://component.io/wilmoore/brackets2dots) + + $ component install wilmoore/brackets2dots + +[bower](http://sindresorhus.com/bower-components/) + + $ bower install brackets2dots.js + +[npm](https://npmjs.org/package/brackets2dots) + +[![NPM](https://nodei.co/npm/brackets2dots.png?downloads=true)](https://nodei.co/npm/brackets2dots/) + +[volo](http://volojs.org) + + $ volo add wilmoore/brackets2dots.js + +[manual][] + +1. download + + % curl -#O https://raw.github.com/wilmoore/brackets2dots.js/master/brackets2dots.js + +2. use + + + +## Inspiration + +- [selectn][] + +## License + + [MIT](license) + +[selectn]: https://github.com/wilmoore/selectn +[Node.js]: http://nodejs.org +[manual]: http://yuiblog.com/blog/2006/06/01/global-domination/ + diff --git a/node_modules/brackets2dots/test/index.js b/node_modules/brackets2dots/test/index.js new file mode 100644 index 00000000..5592b1d1 --- /dev/null +++ b/node_modules/brackets2dots/test/index.js @@ -0,0 +1,20 @@ +var brackets2dots = require('..'); +var assert = require('assert'); + +describe('brackets2dots()', function(){ + + var cases = [ + { input: 'group[0].section.a.seat[3]', expected: 'group.0.section.a.seat.3' }, + { input: '[0].section.a.seat[3]', expected: '0.section.a.seat.3' }, + { input: 'company.people[*].name', expected: 'company.people.*.name' } + ]; + + cases.forEach(function (test) { + + it(test.input + ' => ' + test.expected, function() { + assert.equal(brackets2dots(test.input), test.expected); + }); + + }); + +}); diff --git a/node_modules/has-color/index.js b/node_modules/chalk/node_modules/has-color/index.js similarity index 100% rename from node_modules/has-color/index.js rename to node_modules/chalk/node_modules/has-color/index.js diff --git a/node_modules/has-color/package.json b/node_modules/chalk/node_modules/has-color/package.json similarity index 50% rename from node_modules/has-color/package.json rename to node_modules/chalk/node_modules/has-color/package.json index f0615ce2..2f949391 100644 --- a/node_modules/has-color/package.json +++ b/node_modules/chalk/node_modules/has-color/package.json @@ -1,60 +1,48 @@ { - "_args": [ - [ - "has-color@~0.1.0", - "/home/akshat/KoreServer/Bef_sdk/node_modules/chalk" - ] - ], - "_from": "has-color@>=0.1.0 <0.2.0", + "_from": "has-color@~0.1.0", "_id": "has-color@0.1.7", - "_inCache": true, - "_installable": true, - "_location": "/has-color", - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "1.4.6", + "_inBundle": false, + "_integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", + "_location": "/chalk/has-color", "_phantomChildren": {}, "_requested": { - "name": "has-color", + "type": "range", + "registry": true, "raw": "has-color@~0.1.0", + "name": "has-color", + "escapedName": "has-color", "rawSpec": "~0.1.0", - "scope": null, - "spec": ">=0.1.0 <0.2.0", - "type": "range" + "saveSpec": null, + "fetchSpec": "~0.1.0" }, "_requiredBy": [ "/chalk" ], - "_shrinkwrap": null, + "_resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", + "_shasum": "67144a5260c34fc3cca677d041daf52fe7b78b2f", "_spec": "has-color@~0.1.0", - "_where": "/home/akshat/KoreServer/Bef_sdk/node_modules/chalk", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/chalk", "author": { - "email": "sindresorhus@gmail.com", "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", "url": "http://sindresorhus.com" }, "bugs": { "url": "https://github.com/sindresorhus/has-color/issues" }, - "dependencies": {}, + "bundleDependencies": false, + "deprecated": false, "description": "Detect whether a terminal supports color", "devDependencies": { "mocha": "*" }, - "directories": {}, - "dist": { - "shasum": "67144a5260c34fc3cca677d041daf52fe7b78b2f", - "tarball": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz" - }, "engines": { "node": ">=0.10.0" }, "files": [ "index.js" ], - "homepage": "https://github.com/sindresorhus/has-color", + "homepage": "https://github.com/sindresorhus/has-color#readme", "keywords": [ "color", "colour", @@ -75,18 +63,10 @@ "detect" ], "license": "MIT", - "maintainers": [ - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - } - ], "name": "has-color", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", "repository": { "type": "git", - "url": "git://github.com/sindresorhus/has-color.git" + "url": "git+https://github.com/sindresorhus/has-color.git" }, "scripts": { "test": "mocha" diff --git a/node_modules/has-color/readme.md b/node_modules/chalk/node_modules/has-color/readme.md similarity index 100% rename from node_modules/has-color/readme.md rename to node_modules/chalk/node_modules/has-color/readme.md diff --git a/node_modules/charenc/LICENSE.mkd b/node_modules/charenc/LICENSE.mkd new file mode 100644 index 00000000..96d4c428 --- /dev/null +++ b/node_modules/charenc/LICENSE.mkd @@ -0,0 +1,27 @@ +Copyright © 2011, Paul Vorbach. All rights reserved. +Copyright © 2009, Jeff Mott. All rights reserved. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. +* Neither the name Crypto-JS nor the names of its contributors may be used to + endorse or promote products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/charenc/README.js b/node_modules/charenc/README.js new file mode 100644 index 00000000..cfb1baa0 --- /dev/null +++ b/node_modules/charenc/README.js @@ -0,0 +1 @@ +**enc** provides crypto character encoding utilities. diff --git a/node_modules/charenc/charenc.js b/node_modules/charenc/charenc.js new file mode 100644 index 00000000..6627f9d2 --- /dev/null +++ b/node_modules/charenc/charenc.js @@ -0,0 +1,33 @@ +var charenc = { + // UTF-8 encoding + utf8: { + // Convert a string to a byte array + stringToBytes: function(str) { + return charenc.bin.stringToBytes(unescape(encodeURIComponent(str))); + }, + + // Convert a byte array to a string + bytesToString: function(bytes) { + return decodeURIComponent(escape(charenc.bin.bytesToString(bytes))); + } + }, + + // Binary encoding + bin: { + // Convert a string to a byte array + stringToBytes: function(str) { + for (var bytes = [], i = 0; i < str.length; i++) + bytes.push(str.charCodeAt(i) & 0xFF); + return bytes; + }, + + // Convert a byte array to a string + bytesToString: function(bytes) { + for (var str = [], i = 0; i < bytes.length; i++) + str.push(String.fromCharCode(bytes[i])); + return str.join(''); + } + } +}; + +module.exports = charenc; diff --git a/node_modules/charenc/package.json b/node_modules/charenc/package.json new file mode 100644 index 00000000..c97d9d87 --- /dev/null +++ b/node_modules/charenc/package.json @@ -0,0 +1,54 @@ +{ + "_from": "charenc@~0.0.1", + "_id": "charenc@0.0.2", + "_inBundle": false, + "_integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", + "_location": "/charenc", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "charenc@~0.0.1", + "name": "charenc", + "escapedName": "charenc", + "rawSpec": "~0.0.1", + "saveSpec": null, + "fetchSpec": "~0.0.1" + }, + "_requiredBy": [ + "/md5" + ], + "_resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "_shasum": "c0a1d2f3a7092e03774bfa83f14c0fc5790a8667", + "_spec": "charenc@~0.0.1", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/md5", + "author": { + "name": "Paul Vorbach", + "email": "paul@vorb.de", + "url": "http://vorb.de" + }, + "bugs": { + "url": "https://github.com/pvorb/node-charenc/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "character encoding utilities", + "engines": { + "node": "*" + }, + "homepage": "https://github.com/pvorb/node-charenc#readme", + "license": "BSD-3-Clause", + "main": "charenc.js", + "name": "charenc", + "repository": { + "type": "git", + "url": "git://github.com/pvorb/node-charenc.git" + }, + "tags": [ + "utf8", + "binary", + "byte", + "string" + ], + "version": "0.0.2" +} diff --git a/node_modules/cldrjs/CHANGELOG.md b/node_modules/cldrjs/CHANGELOG.md new file mode 100644 index 00000000..f12921d5 --- /dev/null +++ b/node_modules/cldrjs/CHANGELOG.md @@ -0,0 +1,13 @@ +# 0.4.0 + +## Breaking Changes + +- Bundle Lookup Matcher ([f9572aa][], [#17][]). + +Applications that explicitly use `/main/{languageId}` to traverse main items need to update it to `/main/{bundle}`. Applications that use the `.main()` method need to take no action. + +This change improves how cldrjs performs lookup for the right bundle when traversing main items. See more information at [Bundle Lookup Matcher][]. + +[f9572aa]: https://github.com/rxaviers/cldrjs/commit/f9572aa0164a8e4fcb5b7c4ae95957f2ced8e96a +[#17]: https://github.com/rxaviers/cldrjs/issues/17 +[Bundle Lookup Matcher]: ./doc/bundle_lookup_matcher.md diff --git a/node_modules/cldrjs/DCO.md b/node_modules/cldrjs/DCO.md new file mode 100644 index 00000000..2076e0da --- /dev/null +++ b/node_modules/cldrjs/DCO.md @@ -0,0 +1,27 @@ +If you would like to make a contribution to cldr.js, please certify to the following: + +--- + +cldr.js Developer's Certificate of Origin. Version 1.0 + +By making a contribution to this project, I certify that: + +(a) The contribution was created in whole or in part by me and I have the right to submit it under the MIT license; or + +(b) The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source license and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the MIT license; or + +(c) The contribution was provided directly to me by some other person who certified (a) or (b) and I have not modified it. + +(d) I understand and agree that this project and the contribution are public and that a record of the contribution (including all metadata and personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with cldr.js's policies and the requirements of the MIT license where they are relevant. + +(e) I am granting this work to this project under the terms of the [MIT license](http://opensource.org/licenses/MIT). + +--- + +And please confirm your certification to the above by adding the following line to your commit message: + + Signed-off-by: Jane Developer + +using your real name (sorry, no pseudonyms or anonymous contributions). Committing with `git commit -s` will add the sign-off at the end of the commit message for you. + +If you are a developer who is authorized to contribute to cldr.js on behalf of your employer, then please use your corporate email address in the Signed-off-by tag. If not, then please use a personal email address. diff --git a/node_modules/cldrjs/LICENSE-MIT b/node_modules/cldrjs/LICENSE-MIT new file mode 100644 index 00000000..6123defa --- /dev/null +++ b/node_modules/cldrjs/LICENSE-MIT @@ -0,0 +1,22 @@ +Copyright (c) Rafael Xavier de Souza http://rafael.xavier.blog.br + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/cldrjs/README.md b/node_modules/cldrjs/README.md new file mode 100644 index 00000000..8c97cfb7 --- /dev/null +++ b/node_modules/cldrjs/README.md @@ -0,0 +1,552 @@ +# cldr.js - Simple CLDR traverser + +[CLDR (unicode.org)](http://cldr.unicode.org/) provides locale content for i18n software. The data is provided in two formats: LDML (XML format) and JSON. Our goal is to provide a simple layer to facilitate i18n software to access and use the [official CLDR JSON data](http://cldr.unicode.org/index/cldr-spec/json). + +| File | Minified + gzipped size | Summary | +|---|--:|---| +| cldr.js | 2.1KB | Core library | +| cldr/event.js | +1.4KB | Provides methods to allow listening to events, eg. `get` | +| cldr/supplemental.js | +0.5KB | Provides supplemental helper methods | +| cldr/unresolved.js | +0.7KB | Provides inheritance support for unresolved data | + +Quick jump: +- [About cldr.js?](#about-cldrjs) +- [Getting Started](#getting-started) + - [Usage and installation](#usage-and-installation) + - [How to get CLDR JSON data?](#how-to-get-cldr-json-data) + - [How do I load CLDR data into Cldrjs?](#how-do-i-load-cldr-data-into-cldrjs) +- [API](#api) +- [Error reference](#error) +- [Development / Contributing](#development--contributing) + + +## About cldr.js? + +### Who uses cldr.js? + +| Organization | Project | +|---|---| +| ![jQuery](doc/asset/jquery.png) | https://github.com/jquery/globalize | + +### Where to use it? + +It's designed to work both in the [browser](#usage-and-installation) and in [Node.js](#commonjs--nodejs). It supports [AMD](#usage-and-installation) and [CommonJs](#usage-and-installation); + +See [Usage and installation](#usage-and-installation). + +### What changed from 0.3.x to 0.4.x? + +See our [changelogs](./CHANGELOG.md). + +### Load only the CLDR portion you need + +```javascript +// Load the appropriate portion of CLDR JSON data +Cldr.load( + likelySubtagsData, + enData, + ptBrData +); +``` + +See [How to get CLDR JSON data?](#how-to-get-cldr-json-data) below for more information on how to get that data. + +### Instantiate a locale and get it normalized + +```javascript +var en = new Cldr( "en" ); +en.attributes; +// > { +// "bundle": "en", +// "minLanguageId": "en", +// "maxLanguageId": "en-Latn-US", +// "language": "en", +// "script": "Latn", +// "territory": "US", +// "region": "US" +// } + +var zh = new Cldr( "zh-u-nu-finance-cu-cny" ); +zh.attributes; +// > { +// "bundle": "zh-Hant", +// "minLanguageId": "zh", +// "maxLanguageId": "zh-Hans-CN", +// "language": "zh", +// "script": "Hans", +// "territory": "CN", +// "region": "CN", +// "u-nu": "finance", +// "u-cu": "cny" +// } + +``` + +- `language`, `script`, `territory` (also aliased as `region`), `maxLanguageId` (computed by [adding likely subtags](./src/core/likely_subtags.js)) and `minLanguageId` (computed by [removing likely subtags](./src/core/remove_likely_subtags.js)) according to the [specification](http://www.unicode.org/reports/tr35/#Likely_Subtags). +- `bundle` holds the bundle lookup match based on the available loaded CLDR data, obtained by following [Bundle Lookup Matcher][]. +- [Unicode locale extensions](http://www.unicode.org/reports/tr35/#u_Extension). + +Comparison between different locales. + +| locale | minLanguageId | maxLanguageId | language | script | region | +| --- | --- | --- | --- | --- | --- | +| **en** | `"en"` | `"en-Latn-US"` | `"en"` | `"Latn"` | `"US"` | +| **en-US** | `"en"` | `"en-Latn-US"` | `"en"` | `"Latn"` | `"US"` | +| **de** | `"de"` | `"de-Latn-DE"` | `"de"` | `"Latn"` | `"DE"` | +| **zh** | `"zh"` | `"zh-Hans-CN"` | `"zh"` | `"Hans"` | `"CN"` | +| **zh-TW** | `"zh-TW"` | `"zh-Hant-TW"` | `"zh"` | `"Hant"` | `"TW"` | +| **ar** | `"ar"` | `"ar-Arab-EG"` | `"ar"` | `"Arab"` | `"EG"` | +| **pt** | `"pt"` | `"pt-Latn-BR"` | `"pt"` | `"Latn"` | `"BR"` | +| **pt-BR** | `"pt"` | `"pt-Latn-BR"` | `"pt"` | `"Latn"` | `"BR"` | +| **pt-PT** | `"pt-PT"` | `"pt-Latn-PT"` | `"pt"` | `"Latn"` | `"PT"` | +| **es** | `"es"` | `"es-Latn-ES"` | `"es"` | `"Latn"` | `"ES"` | +| **es-AR** | `"es-AR"` | `"es-Latn-AR"` | `"es"` | `"Latn"` | `"AR"` | + +### Get item given its path + +```javascript +// Equivalent to: +// .get( "main/{bundle}/numbers/symbols-numberSystem-latn/decimal" ); +en.main( "numbers/symbols-numberSystem-latn/decimal" ); +// > "." + +// Equivalent to: +// .get( "main/{bundle}/numbers/symbols-numberSystem-latn/decimal" ); +ptBr.main( "numbers/symbols-numberSystem-latn/decimal" ); +// > "," +``` + +Have any [locale attributes](#cldrattributes) replaced with their corresponding values by embracing it with `{}`. In the example below, `{language}` is replaced with `"en"` and `{territory}` with `"US"`. + +```javascript +// Notice the more complete way to get this data is: +// cldr.get( "supplemental/gender/personList/{language}" ) || +// cldr.get( "supplemental/gender/personList/001" ); +var enGender = en.get( "supplemental/gender/personList/{language}" ); +// > "neutral" + +var USCurrencies = en.get( "supplemental/currencyData/region/{territory}" ); +// > [ +// { USD: { _from: "1792-01-01" } }, +// { USN: { _tender: "false" } }, +// { USS: { _tender: "false" } } +// ] + +// Notice the more complete way to get this data is: +// cldr.get( "supplemental/measurementData/measurementSystem/{territory}" ) || +// cldr.get( "supplemental/measurementData/measurementSystem/001" ); +var enMeasurementSystem = en.get( "supplemental/measurementData/measurementSystem/{territory}" ); +// > "US" +``` + +Get `undefined` for non-existent data. + +```javascript +en.get( "/crazy/invalid/path" ); +// ➡ undefined + +// Avoid this +enData && enData.crazy && enData.crazy.invalid && enData.crazy.invalid.path; +``` + +### Resolve CLDR inheritances + +If you are using unresolved JSON data, you can resolve them dynamically during runtime by loading the `cldr/unresolved.js` extension module. Currently, we support bundle inheritance. + +```javascript +Cldr.load( + unresolvedEnData + unresolvedEnGbData, + unresolvedEnInData, + parentLocalesData, // supplemental + likelySubtagsData // supplemental +); + +var enIn = new Cldr( "en-IN" ); + +// 1st time retrieved by resolving: en-IN ➡ en-GB (parent locale lookup). +// Further times retrieved straight from the resolved cache. +enIn.main( "dates/calendars/gregorian/dateTimeFormats/availableFormats/yMd" ); +// > "dd/MM/y" + +// 1st time retrieved by resolving: en-IN ➡ en-GB (parent locale lookup) ➡ en (truncate lookup) +// Further times retrieved straight from the resolved cache. +enIn.main( "numbers/symbols-numberSystem-latn/decimal" ); +// > "." +``` + +### Helpers + +We offer some convenient helpers. + +```javascript +var usFirstDay = en.supplemental.weekData.firstDay(); +// ➡ sun +// Equivalent to: +// en.get( "supplemental/weekData/firstDay/{territory}" ) || +// en.get( "supplemental/weekData/firstDay/001" ); + +var brFirstDay = ptBr.supplemental.weekData.firstDay(); +// ➡ mon +// Equivalent to: +// ptBr.get( "supplemental/weekData/firstDay/{territory}" ) || +// ptBr.get( "supplemental/weekData/firstDay/001" ); +``` + +### Browser support + +We officially support: +- Firefox (latest - 2)+ +- Chrome (latest - 2)+ +- Safari 5.1+ +- IE 8+ +- Opera (latest - 2)+ + +Sniff tests show cldr.js also works on the following browsers: +- Firefox 4+ +- Safari 5+ +- Chrome 14+ +- IE 6+ +- Opera 11.1+ + +If you find any bugs, please just let us know. We'll be glad to fix them for the officially supported browsers, or at least update the documentation for the unsupported ones. + + +## Getting Started + +### Usage and installation + +cldr.js has no external dependencies. You can include it in the script tag of your page and you're ready to go. [Download it by clicking here](https://github.com/rxaviers/cldr/releases). + +```html + +``` + + +```javascript +// Load the appropriate portion of CLDR JSON data. +// See "How to get CLDR JSON data?" below for more information on how to get that data. +Cldr.load( cldrJsonData ); + +// Instantiate it by passing a locale. +var ptBr = new Cldr( "pt-BR" ); + +// Get CLDR item data given its path. +// Equivalent to: +// .get( "main/{bundle}/numbers/symbols-numberSystem-latn/decimal" ); +ptBr.main( "numbers/symbols-numberSystem-latn/decimal" ); +// > "," +``` + +We are UMD wrapped. So, it supports AMD, CommonJS, or global variables (in case neither AMD nor CommonJS have been detected). + +Example of usage on AMD: + +```bash +bower install cldrjs +``` + +```javascript +require.config({ + paths: { + "cldr": "bower_components/cldrjs/dist/cldr" + } +}); + +require( [ "cldr", "cldr/supplemental", "cldr/unresolved" ], function( Cldr ) { + ... +}); +``` + +Example of usage with Node.js: + +```bash +npm install cldrjs +``` + +```javascript +var Cldr = require( "cldrjs" ); +``` + +### How to get CLDR JSON data? + +*By downloading the JSON packages individually...* + +Unicode CLDR is available as JSON at https://github.com/unicode-cldr/ (after this [json-packaging proposal][] took place). Please, read https://github.com/unicode-cldr/cldr-json for more information about package organization. + +[json-packaging proposal]: http://cldr.unicode.org/development/development-process/design-proposals/json-packaging + +*By using a package manager...* + +`cldr-data` can be used for convenience. It always downloads from the correct source. + +Use bower `bower install cldr-data` ([detailed instructions][]) or npm `npm install cldr-data`. For more information, see: + +- https://github.com/rxaviers/cldr-data-npm +- https://github.com/rxaviers/cldr-data-bower + +[detailed instructions]: https://github.com/rxaviers/cldr-data-bower + +*By generating the JSON mappings yourself...* + +You can generate the JSON representation of the languages not available in the ZIP file by using the official conversion tool ([`tools.zip`](http://www.unicode.org/Public/cldr/latest/)). This ZIP contains a README with instructions on how to build the data. + +You can choose to generate unresolved data to save space or bandwidth (`-r false` option of the conversion tool) and instead have it resolve at runtime. + +### How do I load CLDR data into Cldrjs? + +The short answer is by using `Cldr.load()` and passing the JSON data as the first argument. Below, follow several examples on how this could be accomplished. + +For the examples below, first fetch CLDR JSON data: + +```bash +wget http://www.unicode.org/Public/cldr/latest/json.zip +unzip json.zip -d cldr +``` + +Example of embedding CLDR JSON data: + +```html + +``` + +Example of loading it dynamically: + +```html + + +``` + +Example using AMD (also see our [functional tests](test/functional.js)): +```javascript +define([ + "cldr", + "json!cldr/supplemental/likelySubtags.json" +], function( Cldr, likelySubtags ) { + + Cldr.load( likelySubtags ); + +}); +``` + +Example using Node.js: + +```javascript +var Cldr = require( "cldrjs" ); +Cldr.load( require( "./cldr/supplemental/likelySubtags.json" ) ); +``` + +#### Attention: library owners, do not embed data + +It's NOT recommended that libraries embed data into their code logic for several reasons: avoid forcing a certain data version on users, avoid maintaining locale changes, avoid duplicating data among different i18n libraries. + +We recommend loading CLDR data must be performed by end user code. + +#### Which CLDR portion to load? + +It depends on the used modules. + +| File | Required CLDR JSON data | +|---|---| +| cldr.js | `cldr/supplemental/likelySubtags.json` | +| cldr/unresolved.js | `cldr/supplemental/parentLocales.json` | +| cldr/supplemental.js | `cldr/supplemental/{timeData, weekData}.json` | + +You must also load any portion of the CLDR data you plan to use in your library or your end-application. + +## API + +### Core + +- **`Cldr.load( json, ... )`** + + Load resolved or unresolved [1] JSON data. + + [Read more...](doc/api/core/load.md) + + 1: Unresolved processing is **only available** after loading `cldr/unresolved.js` extension module. + +- **`new Cldr( locale )`** + + Create a new instance of Cldr. + + [Read more...](doc/api/core/constructor.md) + +- **`.attributes`** + + Attributes is an Object created during instance initialization (construction) and are used internally by `.get()` to replace dynamic parts of an item path. + + [Read more...](doc/api/core/attributes.md) + +- **`.get( path )`** + + Get the item data given its path, or `undefined` if missing. + + [Read more...](doc/api/core/get.md) + +- **`.main( path )`** + + It's an alias for `.get([ "main/{bundle}", ... ])`. + + [Read more...](doc/api/core/main.md) + +### cldr/event.js + +- **`Cldr.on( event, listener )`** + + Add a listener function to the specified event globally (for all instances). + + [Read more...](doc/api/event/global_on.md) + +- **`Cldr.once( event, listener )`** + + Add a listener function to the specified event globally (for all instances). It will be automatically removed after it's first execution. + + [Read more...](doc/api/event/global_once.md) + +- **`Cldr.off( event, listener )`** + + Remove a listener function from the specified event globally (for all instances). + + [Read more...](doc/api/event/global_off.md) + +- **`.on( event, listener )`** + + Add a listener function to the specified event for this instance. + + [Read more...](doc/api/event/on.md) + +- **`.once( event, listener )`** + + Add a listener function to the specified event for this instance. It will be automatically removed after it's first execution. + + [Read more...](doc/api/event/once.md) + +- **`.off( event, listener )`** + + Remove a listener function from the specified event for this instance. + + [Read more...](doc/api/event/off.md) + +#### Events + +- `get` ➡ `( path, value )` + + Triggered before a `.get()` (or any alias) return. The triggered listener receives the normalized *path* and the *value* found. + + [Read more...](doc/api/event/event_get.md) + +### cldr/supplemental.js + +- **`.supplemental( path )`** + + It's an alias for `.get([ "supplemental", ... ])`. + + [Read more...](doc/api/supplemental.md) + +- **`.supplemental.timeData.allowed()`** + + Helper function. Return the supplemental timeData allowed of locale's territory. + + [Read more...](doc/api/supplemental/time_data_allowed.md) + +- **`.supplemental.timeData.preferred()`** + + Helper function. Return the supplemental timeData preferred of locale's territory. + + [Read more...](doc/api/supplemental/time_data_preferred.md) + +- **`.supplemental.weekData.firstDay()`** + + Helper function. Return the supplemental weekData firstDay of locale's territory. + + [Read more...](doc/api/supplemental/week_data_first_day.md) + +- **`.supplemental.weekData.minDays()`** + + Helper function. Return the supplemental weekData minDays of locale's territory as a Number. + + [Read more...](doc/api/supplemental/week_data_min_days.md) + +### cldr/unresolved.js + +- **`.get( path )`** + + Overload (extend) `.get()` to get the item data or lookup by following [locale inheritance](http://www.unicode.org/reports/tr35/#Locale_Inheritance), set a local resolved cache if it's found (for subsequent faster access), or return `undefined`. + + [Read more...](doc/api/unresolved/get.md) + +## Error reference + +### CLDR Errors + +#### `E_MISSING_BUNDLE` + +Thrown when none of the loaded CLDR data can be used as a bundle for the corresponding locale. See more information on [Bundle Lookup Matcher][]. + +Error object: + +| Attribute | Value | +| --- | --- | +| code | `E_MISSING_BUNDLE` | +| locale | Locale whose bundle could not be found | + +### Parameter Errors + +#### `E_MISSING_PARAMETER` + +Thrown when a required parameter is missing on any static or instance methods. + +Error object: + +| Attribute | Value | +| --- | --- | +| code | `E_MISSING_PARAMETER` | +| name | Name of the missing parameter | + +#### `E_INVALID_PAR_TYPE` + +Thrown when a parameter has an invalid type on any static or instance methods. + +Error object: + +| Attribute | Value | +| --- | --- | +| code | `E_INVALID_PAR_TYPE` | +| name | Name of the invalid parameter | +| value | Invalid value | +| expected | Expected type | + + +### Development / Contributing + +Install grunt and tests external dependencies. First, install the [grunt-cli](http://gruntjs.com/getting-started#installing-the-cli) and [bower](http://bower.io/) packages if you haven't before. These should be done as global installs. Then: + +```bash +npm install && bower install +``` +Run tests +```bash +grunt test +``` +Build distribution file. +```bash +grunt +``` + +[Bundle Lookup Matcher]: ./doc/bundle_lookup_matcher.md + +## License + +MIT © [Rafael Xavier de Souza](http://rafael.xavier.blog.br) diff --git a/node_modules/cldrjs/dist/.build/.dist_jshintrc b/node_modules/cldrjs/dist/.build/.dist_jshintrc new file mode 100644 index 00000000..4eae8e77 --- /dev/null +++ b/node_modules/cldrjs/dist/.build/.dist_jshintrc @@ -0,0 +1,17 @@ +{ + "boss": true, + "curly": true, + "eqeqeq": true, + "eqnull": true, + "expr": true, + "immed": true, + "noarg": true, + "onevar": false, + "quotmark": "double", + "smarttabs": true, + "trailing": true, + "undef": true, + "unused": true, + + "predef": [ "Cldr", "define", "module", "require" ] +} diff --git a/node_modules/cldrjs/dist/.build/.jshintrc b/node_modules/cldrjs/dist/.build/.jshintrc new file mode 100644 index 00000000..0a9a03c2 --- /dev/null +++ b/node_modules/cldrjs/dist/.build/.jshintrc @@ -0,0 +1,17 @@ +{ + "boss": true, + "curly": true, + "eqeqeq": true, + "eqnull": true, + "expr": true, + "immed": true, + "noarg": true, + "onevar": false, + "quotmark": "double", + "smarttabs": true, + "trailing": true, + "undef": true, + "unused": true, + + "predef": [ "define" ] +} diff --git a/node_modules/cldrjs/dist/.build/build.txt b/node_modules/cldrjs/dist/.build/build.txt new file mode 100644 index 00000000..100d21c1 --- /dev/null +++ b/node_modules/cldrjs/dist/.build/build.txt @@ -0,0 +1,45 @@ + +cldr.js +---------------- +util/array/is_array.js +path/normalize.js +util/array/some.js +core/likely_subtags.js +core/remove_likely_subtags.js +core/subtags.js +util/array/for_each.js +bundle/lookup.js +util/object/keys.js +common/create_error.js +common/validate.js +common/validate/presence.js +common/validate/type.js +common/validate/type/path.js +util/is_plain_object.js +common/validate/type/plain_object.js +common/validate/type/string.js +resource/get.js +core/set_available_bundles.js +util/always_array.js +util/json/merge.js +core/load.js +item/get_resolved.js +core.js + +cldr_event.js +---------------- +/home/xavier/Documents/src/projects/globalizejs/cldrjs/bower_components/eventEmitter/EventEmitter.js +common/validate/type/function.js +event.js + +cldr_supplemental.js +---------------- +supplemental/main.js +supplemental.js + +cldr_unresolved.js +---------------- +bundle/parent_lookup.js +resource/set.js +item/lookup.js +unresolved.js diff --git a/node_modules/cldrjs/dist/.build/build/intro.min.js b/node_modules/cldrjs/dist/.build/build/intro.min.js new file mode 100644 index 00000000..47b5dc6c --- /dev/null +++ b/node_modules/cldrjs/dist/.build/build/intro.min.js @@ -0,0 +1,4 @@ +/*! + * CLDR JavaScript Library v@VERSION @DATE MIT license © Rafael Xavier + * http://git.io/h4lmVg + */ diff --git a/node_modules/cldrjs/dist/.build/build/intro_core.js b/node_modules/cldrjs/dist/.build/build/intro_core.js new file mode 100644 index 00000000..9cc7ebf6 --- /dev/null +++ b/node_modules/cldrjs/dist/.build/build/intro_core.js @@ -0,0 +1,27 @@ +/** + * CLDR JavaScript Library v@VERSION + * http://jquery.com/ + * + * Copyright 2013 Rafael Xavier de Souza + * Released under the MIT license + * http://jquery.org/license + * + * Date: @DATE + */ +/*! + * CLDR JavaScript Library v@VERSION @DATE MIT license © Rafael Xavier + * http://git.io/h4lmVg + */ +(function( root, factory ) { + + if ( typeof define === "function" && define.amd ) { + // AMD. + + // Node. CommonJS. + module.exports = factory(); + } else { + // Global + root.Cldr = factory(); + } + +}( this, function() { diff --git a/node_modules/cldrjs/dist/.build/build/intro_event.js b/node_modules/cldrjs/dist/.build/build/intro_event.js new file mode 100644 index 00000000..ed00a1e0 --- /dev/null +++ b/node_modules/cldrjs/dist/.build/build/intro_event.js @@ -0,0 +1,33 @@ +/** + * CLDR JavaScript Library v@VERSION + * http://jquery.com/ + * + * Copyright 2013 Rafael Xavier de Souza + * Released under the MIT license + * http://jquery.org/license + * + * Date: @DATE + */ +/*! + * CLDR JavaScript Library v@VERSION @DATE MIT license © Rafael Xavier + * http://git.io/h4lmVg + */ +(function( factory ) { + + if ( typeof define === "function" && define.amd ) { + // AMD. + + // Node. CommonJS. + module.exports = factory( require( "../cldr" ) ); + } else { + // Global + factory( Cldr ); + } + +}(function( Cldr ) { + + // Build optimization hack to avoid duplicating functions across modules. + var pathNormalize = Cldr._pathNormalize, + validatePresence = Cldr._validatePresence, + validateType = Cldr._validateType; + diff --git a/node_modules/cldrjs/dist/.build/build/intro_supplemental.js b/node_modules/cldrjs/dist/.build/build/intro_supplemental.js new file mode 100644 index 00000000..71edf2f3 --- /dev/null +++ b/node_modules/cldrjs/dist/.build/build/intro_supplemental.js @@ -0,0 +1,31 @@ +/** + * CLDR JavaScript Library v@VERSION + * http://jquery.com/ + * + * Copyright 2013 Rafael Xavier de Souza + * Released under the MIT license + * http://jquery.org/license + * + * Date: @DATE + */ +/*! + * CLDR JavaScript Library v@VERSION @DATE MIT license © Rafael Xavier + * http://git.io/h4lmVg + */ +(function( factory ) { + + if ( typeof define === "function" && define.amd ) { + // AMD. + + // Node. CommonJS. + module.exports = factory( require( "../cldr" ) ); + } else { + // Global + factory( Cldr ); + } + +}(function( Cldr ) { + + // Build optimization hack to avoid duplicating functions across modules. + var alwaysArray = Cldr._alwaysArray; + diff --git a/node_modules/cldrjs/dist/.build/build/intro_unresolved.js b/node_modules/cldrjs/dist/.build/build/intro_unresolved.js new file mode 100644 index 00000000..b6e48c14 --- /dev/null +++ b/node_modules/cldrjs/dist/.build/build/intro_unresolved.js @@ -0,0 +1,36 @@ +/** + * CLDR JavaScript Library v@VERSION + * http://jquery.com/ + * + * Copyright 2013 Rafael Xavier de Souza + * Released under the MIT license + * http://jquery.org/license + * + * Date: @DATE + */ +/*! + * CLDR JavaScript Library v@VERSION @DATE MIT license © Rafael Xavier + * http://git.io/h4lmVg + */ +(function( factory ) { + + if ( typeof define === "function" && define.amd ) { + // AMD. + + // Node. CommonJS. + module.exports = factory( require( "../cldr" ) ); + } else { + // Global + factory( Cldr ); + } + +}(function( Cldr ) { + + // Build optimization hack to avoid duplicating functions across modules. + var coreLoad = Cldr._coreLoad; + var jsonMerge = Cldr._jsonMerge; + var pathNormalize = Cldr._pathNormalize; + var resourceGet = Cldr._resourceGet; + var validatePresence = Cldr._validatePresence; + var validateTypePath = Cldr._validateTypePath; + diff --git a/node_modules/cldrjs/dist/.build/build/node_main.js b/node_modules/cldrjs/dist/.build/build/node_main.js new file mode 100644 index 00000000..772f757f --- /dev/null +++ b/node_modules/cldrjs/dist/.build/build/node_main.js @@ -0,0 +1,22 @@ +/** + * CLDR JavaScript Library v@VERSION + * http://jquery.com/ + * + * Copyright 2013 Rafael Xavier de Souza + * Released under the MIT license + * http://jquery.org/license + * + * Date: @DATE + */ +/*! + * CLDR JavaScript Library v@VERSION @DATE MIT license © Rafael Xavier + * http://git.io/h4lmVg + */ + +// Cldr +module.exports = require( "./cldr" ); + +// Extent Cldr with the following modules +require( "./cldr/event" ); +require( "./cldr/supplemental" ); +require( "./cldr/unresolved" ); diff --git a/node_modules/cldrjs/dist/.build/build/outro.js b/node_modules/cldrjs/dist/.build/build/outro.js new file mode 100644 index 00000000..be4600a5 --- /dev/null +++ b/node_modules/cldrjs/dist/.build/build/outro.js @@ -0,0 +1 @@ +})); diff --git a/node_modules/cldrjs/dist/.build/bundle/lookup.js b/node_modules/cldrjs/dist/.build/bundle/lookup.js new file mode 100644 index 00000000..d4d13a07 --- /dev/null +++ b/node_modules/cldrjs/dist/.build/bundle/lookup.js @@ -0,0 +1,34 @@ + + + /** + * bundleLookup( minLanguageId ) + * + * @Cldr [Cldr class] + * + * @cldr [Cldr instance] + * + * @minLanguageId [String] requested languageId after applied remove likely subtags. + */ + var bundleLookup = function( Cldr, cldr, minLanguageId ) { + var availableBundleMap = Cldr._availableBundleMap, + availableBundleMapQueue = Cldr._availableBundleMapQueue; + + if ( availableBundleMapQueue.length ) { + arrayForEach( availableBundleMapQueue, function( bundle ) { + var existing, maxBundle, minBundle, subtags; + subtags = coreSubtags( bundle ); + maxBundle = coreLikelySubtags( Cldr, cldr, subtags ); + minBundle = coreRemoveLikelySubtags( Cldr, cldr, maxBundle ); + minBundle = minBundle.join( Cldr.localeSep ); + existing = availableBundleMap[ minBundle ]; + if ( existing && existing.length < bundle.length ) { + return; + } + availableBundleMap[ minBundle ] = bundle; + }); + Cldr._availableBundleMapQueue = []; + } + + return availableBundleMap[ minLanguageId ] || null; + }; + diff --git a/node_modules/cldrjs/dist/.build/bundle/parent_lookup.js b/node_modules/cldrjs/dist/.build/bundle/parent_lookup.js new file mode 100644 index 00000000..14c59b23 --- /dev/null +++ b/node_modules/cldrjs/dist/.build/bundle/parent_lookup.js @@ -0,0 +1,25 @@ + + + var bundleParentLookup = function( Cldr, locale ) { + var normalizedPath, parent; + + if ( locale === "root" ) { + return; + } + + // First, try to find parent on supplemental data. + normalizedPath = pathNormalize( [ "supplemental/parentLocales/parentLocale", locale ] ); + parent = resourceGet( Cldr._resolved, normalizedPath ) || resourceGet( Cldr._raw, normalizedPath ); + if ( parent ) { + return parent; + } + + // Or truncate locale. + parent = locale.substr( 0, locale.lastIndexOf( Cldr.localeSep ) ); + if ( !parent ) { + return "root"; + } + + return parent; + }; + diff --git a/node_modules/cldrjs/dist/.build/cldr.js b/node_modules/cldrjs/dist/.build/cldr.js new file mode 100644 index 00000000..3e5f81b3 --- /dev/null +++ b/node_modules/cldrjs/dist/.build/cldr.js @@ -0,0 +1,682 @@ +/** + * CLDR JavaScript Library v@VERSION + * http://jquery.com/ + * + * Copyright 2013 Rafael Xavier de Souza + * Released under the MIT license + * http://jquery.org/license + * + * Date: @DATE + */ +/*! + * CLDR JavaScript Library v@VERSION @DATE MIT license © Rafael Xavier + * http://git.io/h4lmVg + */ +(function( root, factory ) { + + if ( typeof define === "function" && define.amd ) { + // AMD. + define( factory ); + } else if ( typeof module === "object" && typeof module.exports === "object" ) { + // Node. CommonJS. + module.exports = factory(); + } else { + // Global + root.Cldr = factory(); + } + +}( this, function() { + + + var arrayIsArray = Array.isArray || function( obj ) { + return Object.prototype.toString.call( obj ) === "[object Array]"; + }; + + + + + var pathNormalize = function( path, attributes ) { + if ( arrayIsArray( path ) ) { + path = path.join( "/" ); + } + if ( typeof path !== "string" ) { + throw new Error( "invalid path \"" + path + "\"" ); + } + // 1: Ignore leading slash `/` + // 2: Ignore leading `cldr/` + path = path + .replace( /^\// , "" ) /* 1 */ + .replace( /^cldr\// , "" ); /* 2 */ + + // Replace {attribute}'s + path = path.replace( /{[a-zA-Z]+}/g, function( name ) { + name = name.replace( /^{([^}]*)}$/, "$1" ); + return attributes[ name ]; + }); + + return path.split( "/" ); + }; + + + + + var arraySome = function( array, callback ) { + var i, length; + if ( array.some ) { + return array.some( callback ); + } + for ( i = 0, length = array.length; i < length; i++ ) { + if ( callback( array[ i ], i, array ) ) { + return true; + } + } + return false; + }; + + + + + /** + * Return the maximized language id as defined in + * http://www.unicode.org/reports/tr35/#Likely_Subtags + * 1. Canonicalize. + * 1.1 Make sure the input locale is in canonical form: uses the right + * separator, and has the right casing. + * TODO Right casing? What df? It seems languages are lowercase, scripts are + * Capitalized, territory is uppercase. I am leaving this as an exercise to + * the user. + * + * 1.2 Replace any deprecated subtags with their canonical values using the + * data in supplemental metadata. Use the first value in the + * replacement list, if it exists. Language tag replacements may have multiple + * parts, such as "sh" ➞ "sr_Latn" or mo" ➞ "ro_MD". In such a case, the + * original script and/or region are retained if there is one. Thus + * "sh_Arab_AQ" ➞ "sr_Arab_AQ", not "sr_Latn_AQ". + * TODO What data? + * + * 1.3 If the tag is grandfathered (see in the supplemental data), then return it. + * TODO grandfathered? + * + * 1.4 Remove the script code 'Zzzz' and the region code 'ZZ' if they occur. + * 1.5 Get the components of the cleaned-up source tag (languages, scripts, + * and regions), plus any variants and extensions. + * 2. Lookup. Lookup each of the following in order, and stop on the first + * match: + * 2.1 languages_scripts_regions + * 2.2 languages_regions + * 2.3 languages_scripts + * 2.4 languages + * 2.5 und_scripts + * 3. Return + * 3.1 If there is no match, either return an error value, or the match for + * "und" (in APIs where a valid language tag is required). + * 3.2 Otherwise there is a match = languagem_scriptm_regionm + * 3.3 Let xr = xs if xs is not empty, and xm otherwise. + * 3.4 Return the language tag composed of languager _ scriptr _ regionr + + * variants + extensions. + * + * @subtags [Array] normalized language id subtags tuple (see init.js). + */ + var coreLikelySubtags = function( Cldr, cldr, subtags, options ) { + var match, matchFound, + language = subtags[ 0 ], + script = subtags[ 1 ], + sep = Cldr.localeSep, + territory = subtags[ 2 ], + variants = subtags.slice( 3, 4 ); + options = options || {}; + + // Skip if (language, script, territory) is not empty [3.3] + if ( language !== "und" && script !== "Zzzz" && territory !== "ZZ" ) { + return [ language, script, territory ].concat( variants ); + } + + // Skip if no supplemental likelySubtags data is present + if ( typeof cldr.get( "supplemental/likelySubtags" ) === "undefined" ) { + return; + } + + // [2] + matchFound = arraySome([ + [ language, script, territory ], + [ language, territory ], + [ language, script ], + [ language ], + [ "und", script ] + ], function( test ) { + return match = !(/\b(Zzzz|ZZ)\b/).test( test.join( sep ) ) /* [1.4] */ && cldr.get( [ "supplemental/likelySubtags", test.join( sep ) ] ); + }); + + // [3] + if ( matchFound ) { + // [3.2 .. 3.4] + match = match.split( sep ); + return [ + language !== "und" ? language : match[ 0 ], + script !== "Zzzz" ? script : match[ 1 ], + territory !== "ZZ" ? territory : match[ 2 ] + ].concat( variants ); + } else if ( options.force ) { + // [3.1.2] + return cldr.get( "supplemental/likelySubtags/und" ).split( sep ); + } else { + // [3.1.1] + return; + } + }; + + + + /** + * Given a locale, remove any fields that Add Likely Subtags would add. + * http://www.unicode.org/reports/tr35/#Likely_Subtags + * 1. First get max = AddLikelySubtags(inputLocale). If an error is signaled, + * return it. + * 2. Remove the variants from max. + * 3. Then for trial in {language, language _ region, language _ script}. If + * AddLikelySubtags(trial) = max, then return trial + variants. + * 4. If you do not get a match, return max + variants. + * + * @maxLanguageId [Array] maxLanguageId tuple (see init.js). + */ + var coreRemoveLikelySubtags = function( Cldr, cldr, maxLanguageId ) { + var match, matchFound, + language = maxLanguageId[ 0 ], + script = maxLanguageId[ 1 ], + territory = maxLanguageId[ 2 ], + variants = maxLanguageId[ 3 ]; + + // [3] + matchFound = arraySome([ + [ [ language, "Zzzz", "ZZ" ], [ language ] ], + [ [ language, "Zzzz", territory ], [ language, territory ] ], + [ [ language, script, "ZZ" ], [ language, script ] ] + ], function( test ) { + var result = coreLikelySubtags( Cldr, cldr, test[ 0 ] ); + match = test[ 1 ]; + return result && result[ 0 ] === maxLanguageId[ 0 ] && + result[ 1 ] === maxLanguageId[ 1 ] && + result[ 2 ] === maxLanguageId[ 2 ]; + }); + + if ( matchFound ) { + if ( variants ) { + match.push( variants ); + } + return match; + } + + // [4] + return maxLanguageId; + }; + + + + + /** + * subtags( locale ) + * + * @locale [String] + */ + var coreSubtags = function( locale ) { + var aux, unicodeLanguageId, + subtags = []; + + locale = locale.replace( /_/, "-" ); + + // Unicode locale extensions. + aux = locale.split( "-u-" ); + if ( aux[ 1 ] ) { + aux[ 1 ] = aux[ 1 ].split( "-t-" ); + locale = aux[ 0 ] + ( aux[ 1 ][ 1 ] ? "-t-" + aux[ 1 ][ 1 ] : ""); + subtags[ 4 /* unicodeLocaleExtensions */ ] = aux[ 1 ][ 0 ]; + } + + // TODO normalize transformed extensions. Currently, skipped. + // subtags[ x ] = locale.split( "-t-" )[ 1 ]; + unicodeLanguageId = locale.split( "-t-" )[ 0 ]; + + // unicode_language_id = "root" + // | unicode_language_subtag + // (sep unicode_script_subtag)? + // (sep unicode_region_subtag)? + // (sep unicode_variant_subtag)* ; + // + // Although unicode_language_subtag = alpha{2,8}, I'm using alpha{2,3}. Because, there's no language on CLDR lengthier than 3. + aux = unicodeLanguageId.match( /^(([a-z]{2,3})(-([A-Z][a-z]{3}))?(-([A-Z]{2}|[0-9]{3}))?)((-([a-zA-Z0-9]{5,8}|[0-9][a-zA-Z0-9]{3}))*)$|^(root)$/ ); + if ( aux === null ) { + return [ "und", "Zzzz", "ZZ" ]; + } + subtags[ 0 /* language */ ] = aux[ 10 ] /* root */ || aux[ 2 ] || "und"; + subtags[ 1 /* script */ ] = aux[ 4 ] || "Zzzz"; + subtags[ 2 /* territory */ ] = aux[ 6 ] || "ZZ"; + if ( aux[ 7 ] && aux[ 7 ].length ) { + subtags[ 3 /* variant */ ] = aux[ 7 ].slice( 1 ) /* remove leading "-" */; + } + + // 0: language + // 1: script + // 2: territory (aka region) + // 3: variant + // 4: unicodeLocaleExtensions + return subtags; + }; + + + + + var arrayForEach = function( array, callback ) { + var i, length; + if ( array.forEach ) { + return array.forEach( callback ); + } + for ( i = 0, length = array.length; i < length; i++ ) { + callback( array[ i ], i, array ); + } + }; + + + + + /** + * bundleLookup( minLanguageId ) + * + * @Cldr [Cldr class] + * + * @cldr [Cldr instance] + * + * @minLanguageId [String] requested languageId after applied remove likely subtags. + */ + var bundleLookup = function( Cldr, cldr, minLanguageId ) { + var availableBundleMap = Cldr._availableBundleMap, + availableBundleMapQueue = Cldr._availableBundleMapQueue; + + if ( availableBundleMapQueue.length ) { + arrayForEach( availableBundleMapQueue, function( bundle ) { + var existing, maxBundle, minBundle, subtags; + subtags = coreSubtags( bundle ); + maxBundle = coreLikelySubtags( Cldr, cldr, subtags ); + minBundle = coreRemoveLikelySubtags( Cldr, cldr, maxBundle ); + minBundle = minBundle.join( Cldr.localeSep ); + existing = availableBundleMap[ minBundle ]; + if ( existing && existing.length < bundle.length ) { + return; + } + availableBundleMap[ minBundle ] = bundle; + }); + Cldr._availableBundleMapQueue = []; + } + + return availableBundleMap[ minLanguageId ] || null; + }; + + + + + var objectKeys = function( object ) { + var i, + result = []; + + if ( Object.keys ) { + return Object.keys( object ); + } + + for ( i in object ) { + result.push( i ); + } + + return result; + }; + + + + + var createError = function( code, attributes ) { + var error, message; + + message = code + ( attributes && JSON ? ": " + JSON.stringify( attributes ) : "" ); + error = new Error( message ); + error.code = code; + + // extend( error, attributes ); + arrayForEach( objectKeys( attributes ), function( attribute ) { + error[ attribute ] = attributes[ attribute ]; + }); + + return error; + }; + + + + + var validate = function( code, check, attributes ) { + if ( !check ) { + throw createError( code, attributes ); + } + }; + + + + + var validatePresence = function( value, name ) { + validate( "E_MISSING_PARAMETER", typeof value !== "undefined", { + name: name + }); + }; + + + + + var validateType = function( value, name, check, expected ) { + validate( "E_INVALID_PAR_TYPE", check, { + expected: expected, + name: name, + value: value + }); + }; + + + + + var validateTypePath = function( value, name ) { + validateType( value, name, typeof value === "string" || arrayIsArray( value ), "String or Array" ); + }; + + + + + /** + * Function inspired by jQuery Core, but reduced to our use case. + */ + var isPlainObject = function( obj ) { + return obj !== null && "" + obj === "[object Object]"; + }; + + + + + var validateTypePlainObject = function( value, name ) { + validateType( value, name, typeof value === "undefined" || isPlainObject( value ), "Plain Object" ); + }; + + + + + var validateTypeString = function( value, name ) { + validateType( value, name, typeof value === "string", "a string" ); + }; + + + + + // @path: normalized path + var resourceGet = function( data, path ) { + var i, + node = data, + length = path.length; + + for ( i = 0; i < length - 1; i++ ) { + node = node[ path[ i ] ]; + if ( !node ) { + return undefined; + } + } + return node[ path[ i ] ]; + }; + + + + + /** + * setAvailableBundles( Cldr, json ) + * + * @Cldr [Cldr class] + * + * @json resolved/unresolved cldr data. + * + * Set available bundles queue based on passed json CLDR data. Considers a bundle as any String at /main/{bundle}. + */ + var coreSetAvailableBundles = function( Cldr, json ) { + var bundle, + availableBundleMapQueue = Cldr._availableBundleMapQueue, + main = resourceGet( json, [ "main" ] ); + + if ( main ) { + for ( bundle in main ) { + if ( main.hasOwnProperty( bundle ) && bundle !== "root" && + availableBundleMapQueue.indexOf( bundle ) === -1 ) { + availableBundleMapQueue.push( bundle ); + } + } + } + }; + + + + var alwaysArray = function( somethingOrArray ) { + return arrayIsArray( somethingOrArray ) ? somethingOrArray : [ somethingOrArray ]; + }; + + + var jsonMerge = (function() { + + // Returns new deeply merged JSON. + // + // Eg. + // merge( { a: { b: 1, c: 2 } }, { a: { b: 3, d: 4 } } ) + // -> { a: { b: 3, c: 2, d: 4 } } + // + // @arguments JSON's + // + var merge = function() { + var destination = {}, + sources = [].slice.call( arguments, 0 ); + arrayForEach( sources, function( source ) { + var prop; + for ( prop in source ) { + if ( prop in destination && typeof destination[ prop ] === "object" && !arrayIsArray( destination[ prop ] ) ) { + + // Merge Objects + destination[ prop ] = merge( destination[ prop ], source[ prop ] ); + + } else { + + // Set new values + destination[ prop ] = source[ prop ]; + + } + } + }); + return destination; + }; + + return merge; + +}()); + + + /** + * load( Cldr, source, jsons ) + * + * @Cldr [Cldr class] + * + * @source [Object] + * + * @jsons [arguments] + */ + var coreLoad = function( Cldr, source, jsons ) { + var i, j, json; + + validatePresence( jsons[ 0 ], "json" ); + + // Support arbitrary parameters, e.g., `Cldr.load({...}, {...})`. + for ( i = 0; i < jsons.length; i++ ) { + + // Support array parameters, e.g., `Cldr.load([{...}, {...}])`. + json = alwaysArray( jsons[ i ] ); + + for ( j = 0; j < json.length; j++ ) { + validateTypePlainObject( json[ j ], "json" ); + source = jsonMerge( source, json[ j ] ); + coreSetAvailableBundles( Cldr, json[ j ] ); + } + } + + return source; + }; + + + + var itemGetResolved = function( Cldr, path, attributes ) { + // Resolve path + var normalizedPath = pathNormalize( path, attributes ); + + return resourceGet( Cldr._resolved, normalizedPath ); + }; + + + + + /** + * new Cldr() + */ + var Cldr = function( locale ) { + this.init( locale ); + }; + + // Build optimization hack to avoid duplicating functions across modules. + Cldr._alwaysArray = alwaysArray; + Cldr._coreLoad = coreLoad; + Cldr._createError = createError; + Cldr._itemGetResolved = itemGetResolved; + Cldr._jsonMerge = jsonMerge; + Cldr._pathNormalize = pathNormalize; + Cldr._resourceGet = resourceGet; + Cldr._validatePresence = validatePresence; + Cldr._validateType = validateType; + Cldr._validateTypePath = validateTypePath; + Cldr._validateTypePlainObject = validateTypePlainObject; + + Cldr._availableBundleMap = {}; + Cldr._availableBundleMapQueue = []; + Cldr._resolved = {}; + + // Allow user to override locale separator "-" (default) | "_". According to http://www.unicode.org/reports/tr35/#Unicode_language_identifier, both "-" and "_" are valid locale separators (eg. "en_GB", "en-GB"). According to http://unicode.org/cldr/trac/ticket/6786 its usage must be consistent throughout the data set. + Cldr.localeSep = "-"; + + /** + * Cldr.load( json [, json, ...] ) + * + * @json [JSON] CLDR data or [Array] Array of @json's. + * + * Load resolved cldr data. + */ + Cldr.load = function() { + Cldr._resolved = coreLoad( Cldr, Cldr._resolved, arguments ); + }; + + /** + * .init() automatically run on instantiation/construction. + */ + Cldr.prototype.init = function( locale ) { + var attributes, language, maxLanguageId, minLanguageId, script, subtags, territory, unicodeLocaleExtensions, variant, + sep = Cldr.localeSep, + unicodeLocaleExtensionsRaw = ""; + + validatePresence( locale, "locale" ); + validateTypeString( locale, "locale" ); + + subtags = coreSubtags( locale ); + + if ( subtags.length === 5 ) { + unicodeLocaleExtensions = subtags.pop(); + unicodeLocaleExtensionsRaw = sep + "u" + sep + unicodeLocaleExtensions; + // Remove trailing null when there is unicodeLocaleExtensions but no variants. + if ( !subtags[ 3 ] ) { + subtags.pop(); + } + } + variant = subtags[ 3 ]; + + // Normalize locale code. + // Get (or deduce) the "triple subtags": language, territory (also aliased as region), and script subtags. + // Get the variant subtags (calendar, collation, currency, etc). + // refs: + // - http://www.unicode.org/reports/tr35/#Field_Definitions + // - http://www.unicode.org/reports/tr35/#Language_and_Locale_IDs + // - http://www.unicode.org/reports/tr35/#Unicode_locale_identifier + + // When a locale id does not specify a language, or territory (region), or script, they are obtained by Likely Subtags. + maxLanguageId = coreLikelySubtags( Cldr, this, subtags, { force: true } ) || subtags; + language = maxLanguageId[ 0 ]; + script = maxLanguageId[ 1 ]; + territory = maxLanguageId[ 2 ]; + + minLanguageId = coreRemoveLikelySubtags( Cldr, this, maxLanguageId ).join( sep ); + + // Set attributes + this.attributes = attributes = { + bundle: bundleLookup( Cldr, this, minLanguageId ), + + // Unicode Language Id + minLanguageId: minLanguageId + unicodeLocaleExtensionsRaw, + maxLanguageId: maxLanguageId.join( sep ) + unicodeLocaleExtensionsRaw, + + // Unicode Language Id Subtabs + language: language, + script: script, + territory: territory, + region: territory, /* alias */ + variant: variant + }; + + // Unicode locale extensions. + unicodeLocaleExtensions && ( "-" + unicodeLocaleExtensions ).replace( /-[a-z]{3,8}|(-[a-z]{2})-([a-z]{3,8})/g, function( attribute, key, type ) { + + if ( key ) { + + // Extension is in the `keyword` form. + attributes[ "u" + key ] = type; + } else { + + // Extension is in the `attribute` form. + attributes[ "u" + attribute ] = true; + } + }); + + this.locale = locale; + }; + + /** + * .get() + */ + Cldr.prototype.get = function( path ) { + + validatePresence( path, "path" ); + validateTypePath( path, "path" ); + + return itemGetResolved( Cldr, path, this.attributes ); + }; + + /** + * .main() + */ + Cldr.prototype.main = function( path ) { + validatePresence( path, "path" ); + validateTypePath( path, "path" ); + + validate( "E_MISSING_BUNDLE", this.attributes.bundle !== null, { + locale: this.locale + }); + + path = alwaysArray( path ); + return this.get( [ "main/{bundle}" ].concat( path ) ); + }; + + return Cldr; + + + +define("cldr", function(){}); +})); diff --git a/node_modules/cldrjs/dist/.build/cldr_event.js b/node_modules/cldrjs/dist/.build/cldr_event.js new file mode 100644 index 00000000..5aa8c86e --- /dev/null +++ b/node_modules/cldrjs/dist/.build/cldr_event.js @@ -0,0 +1,585 @@ +/** + * CLDR JavaScript Library v@VERSION + * http://jquery.com/ + * + * Copyright 2013 Rafael Xavier de Souza + * Released under the MIT license + * http://jquery.org/license + * + * Date: @DATE + */ +/*! + * CLDR JavaScript Library v@VERSION @DATE MIT license © Rafael Xavier + * http://git.io/h4lmVg + */ +(function( factory ) { + + if ( typeof define === "function" && define.amd ) { + // AMD. + define( [ "../cldr" ], factory ); + } else if ( typeof module === "object" && typeof module.exports === "object" ) { + // Node. CommonJS. + module.exports = factory( require( "../cldr" ) ); + } else { + // Global + factory( Cldr ); + } + +}(function( Cldr ) { + + // Build optimization hack to avoid duplicating functions across modules. + var pathNormalize = Cldr._pathNormalize, + validatePresence = Cldr._validatePresence, + validateType = Cldr._validateType; + +/*! + * EventEmitter v4.2.7 - git.io/ee + * Oliver Caldwell + * MIT license + * @preserve + */ + +var EventEmitter; +/* jshint ignore:start */ +EventEmitter = (function () { + + + /** + * Class for managing events. + * Can be extended to provide event functionality in other classes. + * + * @class EventEmitter Manages event registering and emitting. + */ + function EventEmitter() {} + + // Shortcuts to improve speed and size + var proto = EventEmitter.prototype; + var exports = {}; + + + /** + * Finds the index of the listener for the event in it's storage array. + * + * @param {Function[]} listeners Array of listeners to search through. + * @param {Function} listener Method to look for. + * @return {Number} Index of the specified listener, -1 if not found + * @api private + */ + function indexOfListener(listeners, listener) { + var i = listeners.length; + while (i--) { + if (listeners[i].listener === listener) { + return i; + } + } + + return -1; + } + + /** + * Alias a method while keeping the context correct, to allow for overwriting of target method. + * + * @param {String} name The name of the target method. + * @return {Function} The aliased method + * @api private + */ + function alias(name) { + return function aliasClosure() { + return this[name].apply(this, arguments); + }; + } + + /** + * Returns the listener array for the specified event. + * Will initialise the event object and listener arrays if required. + * Will return an object if you use a regex search. The object contains keys for each matched event. So /ba[rz]/ might return an object containing bar and baz. But only if you have either defined them with defineEvent or added some listeners to them. + * Each property in the object response is an array of listener functions. + * + * @param {String|RegExp} evt Name of the event to return the listeners from. + * @return {Function[]|Object} All listener functions for the event. + */ + proto.getListeners = function getListeners(evt) { + var events = this._getEvents(); + var response; + var key; + + // Return a concatenated array of all matching events if + // the selector is a regular expression. + if (evt instanceof RegExp) { + response = {}; + for (key in events) { + if (events.hasOwnProperty(key) && evt.test(key)) { + response[key] = events[key]; + } + } + } + else { + response = events[evt] || (events[evt] = []); + } + + return response; + }; + + /** + * Takes a list of listener objects and flattens it into a list of listener functions. + * + * @param {Object[]} listeners Raw listener objects. + * @return {Function[]} Just the listener functions. + */ + proto.flattenListeners = function flattenListeners(listeners) { + var flatListeners = []; + var i; + + for (i = 0; i < listeners.length; i += 1) { + flatListeners.push(listeners[i].listener); + } + + return flatListeners; + }; + + /** + * Fetches the requested listeners via getListeners but will always return the results inside an object. This is mainly for internal use but others may find it useful. + * + * @param {String|RegExp} evt Name of the event to return the listeners from. + * @return {Object} All listener functions for an event in an object. + */ + proto.getListenersAsObject = function getListenersAsObject(evt) { + var listeners = this.getListeners(evt); + var response; + + if (listeners instanceof Array) { + response = {}; + response[evt] = listeners; + } + + return response || listeners; + }; + + /** + * Adds a listener function to the specified event. + * The listener will not be added if it is a duplicate. + * If the listener returns true then it will be removed after it is called. + * If you pass a regular expression as the event name then the listener will be added to all events that match it. + * + * @param {String|RegExp} evt Name of the event to attach the listener to. + * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.addListener = function addListener(evt, listener) { + var listeners = this.getListenersAsObject(evt); + var listenerIsWrapped = typeof listener === 'object'; + var key; + + for (key in listeners) { + if (listeners.hasOwnProperty(key) && indexOfListener(listeners[key], listener) === -1) { + listeners[key].push(listenerIsWrapped ? listener : { + listener: listener, + once: false + }); + } + } + + return this; + }; + + /** + * Alias of addListener + */ + proto.on = alias('addListener'); + + /** + * Semi-alias of addListener. It will add a listener that will be + * automatically removed after it's first execution. + * + * @param {String|RegExp} evt Name of the event to attach the listener to. + * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.addOnceListener = function addOnceListener(evt, listener) { + return this.addListener(evt, { + listener: listener, + once: true + }); + }; + + /** + * Alias of addOnceListener. + */ + proto.once = alias('addOnceListener'); + + /** + * Defines an event name. This is required if you want to use a regex to add a listener to multiple events at once. If you don't do this then how do you expect it to know what event to add to? Should it just add to every possible match for a regex? No. That is scary and bad. + * You need to tell it what event names should be matched by a regex. + * + * @param {String} evt Name of the event to create. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.defineEvent = function defineEvent(evt) { + this.getListeners(evt); + return this; + }; + + /** + * Uses defineEvent to define multiple events. + * + * @param {String[]} evts An array of event names to define. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.defineEvents = function defineEvents(evts) { + for (var i = 0; i < evts.length; i += 1) { + this.defineEvent(evts[i]); + } + return this; + }; + + /** + * Removes a listener function from the specified event. + * When passed a regular expression as the event name, it will remove the listener from all events that match it. + * + * @param {String|RegExp} evt Name of the event to remove the listener from. + * @param {Function} listener Method to remove from the event. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.removeListener = function removeListener(evt, listener) { + var listeners = this.getListenersAsObject(evt); + var index; + var key; + + for (key in listeners) { + if (listeners.hasOwnProperty(key)) { + index = indexOfListener(listeners[key], listener); + + if (index !== -1) { + listeners[key].splice(index, 1); + } + } + } + + return this; + }; + + /** + * Alias of removeListener + */ + proto.off = alias('removeListener'); + + /** + * Adds listeners in bulk using the manipulateListeners method. + * If you pass an object as the second argument you can add to multiple events at once. The object should contain key value pairs of events and listeners or listener arrays. You can also pass it an event name and an array of listeners to be added. + * You can also pass it a regular expression to add the array of listeners to all events that match it. + * Yeah, this function does quite a bit. That's probably a bad thing. + * + * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add to multiple events at once. + * @param {Function[]} [listeners] An optional array of listener functions to add. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.addListeners = function addListeners(evt, listeners) { + // Pass through to manipulateListeners + return this.manipulateListeners(false, evt, listeners); + }; + + /** + * Removes listeners in bulk using the manipulateListeners method. + * If you pass an object as the second argument you can remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays. + * You can also pass it an event name and an array of listeners to be removed. + * You can also pass it a regular expression to remove the listeners from all events that match it. + * + * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to remove from multiple events at once. + * @param {Function[]} [listeners] An optional array of listener functions to remove. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.removeListeners = function removeListeners(evt, listeners) { + // Pass through to manipulateListeners + return this.manipulateListeners(true, evt, listeners); + }; + + /** + * Edits listeners in bulk. The addListeners and removeListeners methods both use this to do their job. You should really use those instead, this is a little lower level. + * The first argument will determine if the listeners are removed (true) or added (false). + * If you pass an object as the second argument you can add/remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays. + * You can also pass it an event name and an array of listeners to be added/removed. + * You can also pass it a regular expression to manipulate the listeners of all events that match it. + * + * @param {Boolean} remove True if you want to remove listeners, false if you want to add. + * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add/remove from multiple events at once. + * @param {Function[]} [listeners] An optional array of listener functions to add/remove. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.manipulateListeners = function manipulateListeners(remove, evt, listeners) { + var i; + var value; + var single = remove ? this.removeListener : this.addListener; + var multiple = remove ? this.removeListeners : this.addListeners; + + // If evt is an object then pass each of it's properties to this method + if (typeof evt === 'object' && !(evt instanceof RegExp)) { + for (i in evt) { + if (evt.hasOwnProperty(i) && (value = evt[i])) { + // Pass the single listener straight through to the singular method + if (typeof value === 'function') { + single.call(this, i, value); + } + else { + // Otherwise pass back to the multiple function + multiple.call(this, i, value); + } + } + } + } + else { + // So evt must be a string + // And listeners must be an array of listeners + // Loop over it and pass each one to the multiple method + i = listeners.length; + while (i--) { + single.call(this, evt, listeners[i]); + } + } + + return this; + }; + + /** + * Removes all listeners from a specified event. + * If you do not specify an event then all listeners will be removed. + * That means every event will be emptied. + * You can also pass a regex to remove all events that match it. + * + * @param {String|RegExp} [evt] Optional name of the event to remove all listeners for. Will remove from every event if not passed. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.removeEvent = function removeEvent(evt) { + var type = typeof evt; + var events = this._getEvents(); + var key; + + // Remove different things depending on the state of evt + if (type === 'string') { + // Remove all listeners for the specified event + delete events[evt]; + } + else if (evt instanceof RegExp) { + // Remove all events matching the regex. + for (key in events) { + if (events.hasOwnProperty(key) && evt.test(key)) { + delete events[key]; + } + } + } + else { + // Remove all listeners in all events + delete this._events; + } + + return this; + }; + + /** + * Alias of removeEvent. + * + * Added to mirror the node API. + */ + proto.removeAllListeners = alias('removeEvent'); + + /** + * Emits an event of your choice. + * When emitted, every listener attached to that event will be executed. + * If you pass the optional argument array then those arguments will be passed to every listener upon execution. + * Because it uses `apply`, your array of arguments will be passed as if you wrote them out separately. + * So they will not arrive within the array on the other side, they will be separate. + * You can also pass a regular expression to emit to all events that match it. + * + * @param {String|RegExp} evt Name of the event to emit and execute listeners for. + * @param {Array} [args] Optional array of arguments to be passed to each listener. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.emitEvent = function emitEvent(evt, args) { + var listeners = this.getListenersAsObject(evt); + var listener; + var i; + var key; + var response; + + for (key in listeners) { + if (listeners.hasOwnProperty(key)) { + i = listeners[key].length; + + while (i--) { + // If the listener returns true then it shall be removed from the event + // The function is executed either with a basic call or an apply if there is an args array + listener = listeners[key][i]; + + if (listener.once === true) { + this.removeListener(evt, listener.listener); + } + + response = listener.listener.apply(this, args || []); + + if (response === this._getOnceReturnValue()) { + this.removeListener(evt, listener.listener); + } + } + } + } + + return this; + }; + + /** + * Alias of emitEvent + */ + proto.trigger = alias('emitEvent'); + + /** + * Subtly different from emitEvent in that it will pass its arguments on to the listeners, as opposed to taking a single array of arguments to pass on. + * As with emitEvent, you can pass a regex in place of the event name to emit to all events that match it. + * + * @param {String|RegExp} evt Name of the event to emit and execute listeners for. + * @param {...*} Optional additional arguments to be passed to each listener. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.emit = function emit(evt) { + var args = Array.prototype.slice.call(arguments, 1); + return this.emitEvent(evt, args); + }; + + /** + * Sets the current value to check against when executing listeners. If a + * listeners return value matches the one set here then it will be removed + * after execution. This value defaults to true. + * + * @param {*} value The new value to check for when executing listeners. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.setOnceReturnValue = function setOnceReturnValue(value) { + this._onceReturnValue = value; + return this; + }; + + /** + * Fetches the current value to check against when executing listeners. If + * the listeners return value matches this one then it should be removed + * automatically. It will return true by default. + * + * @return {*|Boolean} The current value to check for or the default, true. + * @api private + */ + proto._getOnceReturnValue = function _getOnceReturnValue() { + if (this.hasOwnProperty('_onceReturnValue')) { + return this._onceReturnValue; + } + else { + return true; + } + }; + + /** + * Fetches the events object and creates one if required. + * + * @return {Object} The events storage object. + * @api private + */ + proto._getEvents = function _getEvents() { + return this._events || (this._events = {}); + }; + + /** + * Reverts the global {@link EventEmitter} to its previous value and returns a reference to this version. + * + * @return {Function} Non conflicting EventEmitter class. + */ + EventEmitter.noConflict = function noConflict() { + exports.EventEmitter = originalGlobalValue; + return EventEmitter; + }; + + return EventEmitter; +}()); +/* jshint ignore:end */ + + + + var validateTypeFunction = function( value, name ) { + validateType( value, name, typeof value === "undefined" || typeof value === "function", "Function" ); + }; + + + + + var superGet, superInit, + globalEe = new EventEmitter(); + + function validateTypeEvent( value, name ) { + validateType( value, name, typeof value === "string" || value instanceof RegExp, "String or RegExp" ); + } + + function validateThenCall( method, self ) { + return function( event, listener ) { + validatePresence( event, "event" ); + validateTypeEvent( event, "event" ); + + validatePresence( listener, "listener" ); + validateTypeFunction( listener, "listener" ); + + return self[ method ].apply( self, arguments ); + }; + } + + function off( self ) { + return validateThenCall( "off", self ); + } + + function on( self ) { + return validateThenCall( "on", self ); + } + + function once( self ) { + return validateThenCall( "once", self ); + } + + Cldr.off = off( globalEe ); + Cldr.on = on( globalEe ); + Cldr.once = once( globalEe ); + + /** + * Overload Cldr.prototype.init(). + */ + superInit = Cldr.prototype.init; + Cldr.prototype.init = function() { + var ee; + this.ee = ee = new EventEmitter(); + this.off = off( ee ); + this.on = on( ee ); + this.once = once( ee ); + superInit.apply( this, arguments ); + }; + + /** + * getOverload is encapsulated, because of cldr/unresolved. If it's loaded + * after cldr/event (and note it overwrites .get), it can trigger this + * overload again. + */ + function getOverload() { + + /** + * Overload Cldr.prototype.get(). + */ + superGet = Cldr.prototype.get; + Cldr.prototype.get = function( path ) { + var value = superGet.apply( this, arguments ); + path = pathNormalize( path, this.attributes ).join( "/" ); + globalEe.trigger( "get", [ path, value ] ); + this.ee.trigger( "get", [ path, value ] ); + return value; + }; + } + + Cldr._eventInit = getOverload; + getOverload(); + + return Cldr; + + + +define("cldr_event", function(){}); +})); diff --git a/node_modules/cldrjs/dist/.build/cldr_supplemental.js b/node_modules/cldrjs/dist/.build/cldr_supplemental.js new file mode 100644 index 00000000..88e157f5 --- /dev/null +++ b/node_modules/cldrjs/dist/.build/cldr_supplemental.js @@ -0,0 +1,101 @@ +/** + * CLDR JavaScript Library v@VERSION + * http://jquery.com/ + * + * Copyright 2013 Rafael Xavier de Souza + * Released under the MIT license + * http://jquery.org/license + * + * Date: @DATE + */ +/*! + * CLDR JavaScript Library v@VERSION @DATE MIT license © Rafael Xavier + * http://git.io/h4lmVg + */ +(function( factory ) { + + if ( typeof define === "function" && define.amd ) { + // AMD. + define( [ "../cldr" ], factory ); + } else if ( typeof module === "object" && typeof module.exports === "object" ) { + // Node. CommonJS. + module.exports = factory( require( "../cldr" ) ); + } else { + // Global + factory( Cldr ); + } + +}(function( Cldr ) { + + // Build optimization hack to avoid duplicating functions across modules. + var alwaysArray = Cldr._alwaysArray; + + + + var supplementalMain = function( cldr ) { + + var prepend, supplemental; + + prepend = function( prepend ) { + return function( path ) { + path = alwaysArray( path ); + return cldr.get( [ prepend ].concat( path ) ); + }; + }; + + supplemental = prepend( "supplemental" ); + + // Week Data + // http://www.unicode.org/reports/tr35/tr35-dates.html#Week_Data + supplemental.weekData = prepend( "supplemental/weekData" ); + + supplemental.weekData.firstDay = function() { + return cldr.get( "supplemental/weekData/firstDay/{territory}" ) || + cldr.get( "supplemental/weekData/firstDay/001" ); + }; + + supplemental.weekData.minDays = function() { + var minDays = cldr.get( "supplemental/weekData/minDays/{territory}" ) || + cldr.get( "supplemental/weekData/minDays/001" ); + return parseInt( minDays, 10 ); + }; + + // Time Data + // http://www.unicode.org/reports/tr35/tr35-dates.html#Time_Data + supplemental.timeData = prepend( "supplemental/timeData" ); + + supplemental.timeData.allowed = function() { + return cldr.get( "supplemental/timeData/{territory}/_allowed" ) || + cldr.get( "supplemental/timeData/001/_allowed" ); + }; + + supplemental.timeData.preferred = function() { + return cldr.get( "supplemental/timeData/{territory}/_preferred" ) || + cldr.get( "supplemental/timeData/001/_preferred" ); + }; + + return supplemental; + + }; + + + + + var initSuper = Cldr.prototype.init; + + /** + * .init() automatically ran on construction. + * + * Overload .init(). + */ + Cldr.prototype.init = function() { + initSuper.apply( this, arguments ); + this.supplemental = supplementalMain( this ); + }; + + return Cldr; + + + +define("cldr_supplemental", function(){}); +})); diff --git a/node_modules/cldrjs/dist/.build/cldr_unresolved.js b/node_modules/cldrjs/dist/.build/cldr_unresolved.js new file mode 100644 index 00000000..79d649cf --- /dev/null +++ b/node_modules/cldrjs/dist/.build/cldr_unresolved.js @@ -0,0 +1,164 @@ +/** + * CLDR JavaScript Library v@VERSION + * http://jquery.com/ + * + * Copyright 2013 Rafael Xavier de Souza + * Released under the MIT license + * http://jquery.org/license + * + * Date: @DATE + */ +/*! + * CLDR JavaScript Library v@VERSION @DATE MIT license © Rafael Xavier + * http://git.io/h4lmVg + */ +(function( factory ) { + + if ( typeof define === "function" && define.amd ) { + // AMD. + define( [ "../cldr" ], factory ); + } else if ( typeof module === "object" && typeof module.exports === "object" ) { + // Node. CommonJS. + module.exports = factory( require( "../cldr" ) ); + } else { + // Global + factory( Cldr ); + } + +}(function( Cldr ) { + + // Build optimization hack to avoid duplicating functions across modules. + var coreLoad = Cldr._coreLoad; + var jsonMerge = Cldr._jsonMerge; + var pathNormalize = Cldr._pathNormalize; + var resourceGet = Cldr._resourceGet; + var validatePresence = Cldr._validatePresence; + var validateTypePath = Cldr._validateTypePath; + + + + var bundleParentLookup = function( Cldr, locale ) { + var normalizedPath, parent; + + if ( locale === "root" ) { + return; + } + + // First, try to find parent on supplemental data. + normalizedPath = pathNormalize( [ "supplemental/parentLocales/parentLocale", locale ] ); + parent = resourceGet( Cldr._resolved, normalizedPath ) || resourceGet( Cldr._raw, normalizedPath ); + if ( parent ) { + return parent; + } + + // Or truncate locale. + parent = locale.substr( 0, locale.lastIndexOf( Cldr.localeSep ) ); + if ( !parent ) { + return "root"; + } + + return parent; + }; + + + + + // @path: normalized path + var resourceSet = function( data, path, value ) { + var i, + node = data, + length = path.length; + + for ( i = 0; i < length - 1; i++ ) { + if ( !node[ path[ i ] ] ) { + node[ path[ i ] ] = {}; + } + node = node[ path[ i ] ]; + } + node[ path[ i ] ] = value; + }; + + + var itemLookup = (function() { + + var lookup; + + lookup = function( Cldr, locale, path, attributes, childLocale ) { + var normalizedPath, parent, value; + + // 1: Finish recursion + // 2: Avoid infinite loop + if ( typeof locale === "undefined" /* 1 */ || locale === childLocale /* 2 */ ) { + return; + } + + // Resolve path + normalizedPath = pathNormalize( path, attributes ); + + // Check resolved (cached) data first + // 1: Due to #16, never use the cached resolved non-leaf nodes. It may not + // represent its leafs in its entirety. + value = resourceGet( Cldr._resolved, normalizedPath ); + if ( value !== undefined && typeof value !== "object" /* 1 */ ) { + return value; + } + + // Check raw data + value = resourceGet( Cldr._raw, normalizedPath ); + + if ( value === undefined ) { + // Or, lookup at parent locale + parent = bundleParentLookup( Cldr, locale ); + value = lookup( Cldr, parent, path, jsonMerge( attributes, { bundle: parent }), locale ); + } + + if ( value !== undefined ) { + // Set resolved (cached) + resourceSet( Cldr._resolved, normalizedPath, value ); + } + + return value; + }; + + return lookup; + +}()); + + + Cldr._raw = {}; + + /** + * Cldr.load( json [, json, ...] ) + * + * @json [JSON] CLDR data or [Array] Array of @json's. + * + * Load resolved or unresolved cldr data. + * Overwrite Cldr.load(). + */ + Cldr.load = function() { + Cldr._raw = coreLoad( Cldr, Cldr._raw, arguments ); + }; + + /** + * Overwrite Cldr.prototype.get(). + */ + Cldr.prototype.get = function( path ) { + validatePresence( path, "path" ); + validateTypePath( path, "path" ); + + // 1: use bundle as locale on item lookup for simplification purposes, because no other extended subtag is used anyway on bundle parent lookup. + // 2: during init(), this method is called, but bundle is yet not defined. Use "" as a workaround in this very specific scenario. + return itemLookup( Cldr, this.attributes && this.attributes.bundle /* 1 */ || "" /* 2 */, path, this.attributes ); + }; + + // In case cldr/unresolved is loaded after cldr/event, we trigger its overloads again. Because, .get is overwritten in here. + if ( Cldr._eventInit ) { + Cldr._eventInit(); + } + + return Cldr; + + + +define("cldr_unresolved", function(){}); +})); diff --git a/node_modules/cldrjs/dist/.build/common/create_error.js b/node_modules/cldrjs/dist/.build/common/create_error.js new file mode 100644 index 00000000..1b3f700b --- /dev/null +++ b/node_modules/cldrjs/dist/.build/common/create_error.js @@ -0,0 +1,17 @@ + + + var createError = function( code, attributes ) { + var error, message; + + message = code + ( attributes && JSON ? ": " + JSON.stringify( attributes ) : "" ); + error = new Error( message ); + error.code = code; + + // extend( error, attributes ); + arrayForEach( objectKeys( attributes ), function( attribute ) { + error[ attribute ] = attributes[ attribute ]; + }); + + return error; + }; + diff --git a/node_modules/cldrjs/dist/.build/common/validate.js b/node_modules/cldrjs/dist/.build/common/validate.js new file mode 100644 index 00000000..0d0db1cb --- /dev/null +++ b/node_modules/cldrjs/dist/.build/common/validate.js @@ -0,0 +1,8 @@ + + + var validate = function( code, check, attributes ) { + if ( !check ) { + throw createError( code, attributes ); + } + }; + diff --git a/node_modules/cldrjs/dist/.build/common/validate/presence.js b/node_modules/cldrjs/dist/.build/common/validate/presence.js new file mode 100644 index 00000000..c8624ae5 --- /dev/null +++ b/node_modules/cldrjs/dist/.build/common/validate/presence.js @@ -0,0 +1,8 @@ + + + var validatePresence = function( value, name ) { + validate( "E_MISSING_PARAMETER", typeof value !== "undefined", { + name: name + }); + }; + diff --git a/node_modules/cldrjs/dist/.build/common/validate/type.js b/node_modules/cldrjs/dist/.build/common/validate/type.js new file mode 100644 index 00000000..49e13e6e --- /dev/null +++ b/node_modules/cldrjs/dist/.build/common/validate/type.js @@ -0,0 +1,10 @@ + + + var validateType = function( value, name, check, expected ) { + validate( "E_INVALID_PAR_TYPE", check, { + expected: expected, + name: name, + value: value + }); + }; + diff --git a/node_modules/cldrjs/dist/.build/common/validate/type/function.js b/node_modules/cldrjs/dist/.build/common/validate/type/function.js new file mode 100644 index 00000000..f861021f --- /dev/null +++ b/node_modules/cldrjs/dist/.build/common/validate/type/function.js @@ -0,0 +1,6 @@ + + + var validateTypeFunction = function( value, name ) { + validateType( value, name, typeof value === "undefined" || typeof value === "function", "Function" ); + }; + diff --git a/node_modules/cldrjs/dist/.build/common/validate/type/path.js b/node_modules/cldrjs/dist/.build/common/validate/type/path.js new file mode 100644 index 00000000..b63a9567 --- /dev/null +++ b/node_modules/cldrjs/dist/.build/common/validate/type/path.js @@ -0,0 +1,6 @@ + + + var validateTypePath = function( value, name ) { + validateType( value, name, typeof value === "string" || arrayIsArray( value ), "String or Array" ); + }; + diff --git a/node_modules/cldrjs/dist/.build/common/validate/type/plain_object.js b/node_modules/cldrjs/dist/.build/common/validate/type/plain_object.js new file mode 100644 index 00000000..af523397 --- /dev/null +++ b/node_modules/cldrjs/dist/.build/common/validate/type/plain_object.js @@ -0,0 +1,6 @@ + + + var validateTypePlainObject = function( value, name ) { + validateType( value, name, typeof value === "undefined" || isPlainObject( value ), "Plain Object" ); + }; + diff --git a/node_modules/cldrjs/dist/.build/common/validate/type/string.js b/node_modules/cldrjs/dist/.build/common/validate/type/string.js new file mode 100644 index 00000000..9b977e90 --- /dev/null +++ b/node_modules/cldrjs/dist/.build/common/validate/type/string.js @@ -0,0 +1,6 @@ + + + var validateTypeString = function( value, name ) { + validateType( value, name, typeof value === "string", "a string" ); + }; + diff --git a/node_modules/cldrjs/dist/.build/core.js b/node_modules/cldrjs/dist/.build/core.js new file mode 100644 index 00000000..70a645c2 --- /dev/null +++ b/node_modules/cldrjs/dist/.build/core.js @@ -0,0 +1,140 @@ + + + /** + * new Cldr() + */ + var Cldr = function( locale ) { + this.init( locale ); + }; + + // Build optimization hack to avoid duplicating functions across modules. + Cldr._alwaysArray = alwaysArray; + Cldr._coreLoad = coreLoad; + Cldr._createError = createError; + Cldr._itemGetResolved = itemGetResolved; + Cldr._jsonMerge = jsonMerge; + Cldr._pathNormalize = pathNormalize; + Cldr._resourceGet = resourceGet; + Cldr._validatePresence = validatePresence; + Cldr._validateType = validateType; + Cldr._validateTypePath = validateTypePath; + Cldr._validateTypePlainObject = validateTypePlainObject; + + Cldr._availableBundleMap = {}; + Cldr._availableBundleMapQueue = []; + Cldr._resolved = {}; + + // Allow user to override locale separator "-" (default) | "_". According to http://www.unicode.org/reports/tr35/#Unicode_language_identifier, both "-" and "_" are valid locale separators (eg. "en_GB", "en-GB"). According to http://unicode.org/cldr/trac/ticket/6786 its usage must be consistent throughout the data set. + Cldr.localeSep = "-"; + + /** + * Cldr.load( json [, json, ...] ) + * + * @json [JSON] CLDR data or [Array] Array of @json's. + * + * Load resolved cldr data. + */ + Cldr.load = function() { + Cldr._resolved = coreLoad( Cldr, Cldr._resolved, arguments ); + }; + + /** + * .init() automatically run on instantiation/construction. + */ + Cldr.prototype.init = function( locale ) { + var attributes, language, maxLanguageId, minLanguageId, script, subtags, territory, unicodeLocaleExtensions, variant, + sep = Cldr.localeSep, + unicodeLocaleExtensionsRaw = ""; + + validatePresence( locale, "locale" ); + validateTypeString( locale, "locale" ); + + subtags = coreSubtags( locale ); + + if ( subtags.length === 5 ) { + unicodeLocaleExtensions = subtags.pop(); + unicodeLocaleExtensionsRaw = sep + "u" + sep + unicodeLocaleExtensions; + // Remove trailing null when there is unicodeLocaleExtensions but no variants. + if ( !subtags[ 3 ] ) { + subtags.pop(); + } + } + variant = subtags[ 3 ]; + + // Normalize locale code. + // Get (or deduce) the "triple subtags": language, territory (also aliased as region), and script subtags. + // Get the variant subtags (calendar, collation, currency, etc). + // refs: + // - http://www.unicode.org/reports/tr35/#Field_Definitions + // - http://www.unicode.org/reports/tr35/#Language_and_Locale_IDs + // - http://www.unicode.org/reports/tr35/#Unicode_locale_identifier + + // When a locale id does not specify a language, or territory (region), or script, they are obtained by Likely Subtags. + maxLanguageId = coreLikelySubtags( Cldr, this, subtags, { force: true } ) || subtags; + language = maxLanguageId[ 0 ]; + script = maxLanguageId[ 1 ]; + territory = maxLanguageId[ 2 ]; + + minLanguageId = coreRemoveLikelySubtags( Cldr, this, maxLanguageId ).join( sep ); + + // Set attributes + this.attributes = attributes = { + bundle: bundleLookup( Cldr, this, minLanguageId ), + + // Unicode Language Id + minLanguageId: minLanguageId + unicodeLocaleExtensionsRaw, + maxLanguageId: maxLanguageId.join( sep ) + unicodeLocaleExtensionsRaw, + + // Unicode Language Id Subtabs + language: language, + script: script, + territory: territory, + region: territory, /* alias */ + variant: variant + }; + + // Unicode locale extensions. + unicodeLocaleExtensions && ( "-" + unicodeLocaleExtensions ).replace( /-[a-z]{3,8}|(-[a-z]{2})-([a-z]{3,8})/g, function( attribute, key, type ) { + + if ( key ) { + + // Extension is in the `keyword` form. + attributes[ "u" + key ] = type; + } else { + + // Extension is in the `attribute` form. + attributes[ "u" + attribute ] = true; + } + }); + + this.locale = locale; + }; + + /** + * .get() + */ + Cldr.prototype.get = function( path ) { + + validatePresence( path, "path" ); + validateTypePath( path, "path" ); + + return itemGetResolved( Cldr, path, this.attributes ); + }; + + /** + * .main() + */ + Cldr.prototype.main = function( path ) { + validatePresence( path, "path" ); + validateTypePath( path, "path" ); + + validate( "E_MISSING_BUNDLE", this.attributes.bundle !== null, { + locale: this.locale + }); + + path = alwaysArray( path ); + return this.get( [ "main/{bundle}" ].concat( path ) ); + }; + + return Cldr; + diff --git a/node_modules/cldrjs/dist/.build/core/likely_subtags.js b/node_modules/cldrjs/dist/.build/core/likely_subtags.js new file mode 100644 index 00000000..2f2a98f0 --- /dev/null +++ b/node_modules/cldrjs/dist/.build/core/likely_subtags.js @@ -0,0 +1,91 @@ + + + /** + * Return the maximized language id as defined in + * http://www.unicode.org/reports/tr35/#Likely_Subtags + * 1. Canonicalize. + * 1.1 Make sure the input locale is in canonical form: uses the right + * separator, and has the right casing. + * TODO Right casing? What df? It seems languages are lowercase, scripts are + * Capitalized, territory is uppercase. I am leaving this as an exercise to + * the user. + * + * 1.2 Replace any deprecated subtags with their canonical values using the + * data in supplemental metadata. Use the first value in the + * replacement list, if it exists. Language tag replacements may have multiple + * parts, such as "sh" ➞ "sr_Latn" or mo" ➞ "ro_MD". In such a case, the + * original script and/or region are retained if there is one. Thus + * "sh_Arab_AQ" ➞ "sr_Arab_AQ", not "sr_Latn_AQ". + * TODO What data? + * + * 1.3 If the tag is grandfathered (see in the supplemental data), then return it. + * TODO grandfathered? + * + * 1.4 Remove the script code 'Zzzz' and the region code 'ZZ' if they occur. + * 1.5 Get the components of the cleaned-up source tag (languages, scripts, + * and regions), plus any variants and extensions. + * 2. Lookup. Lookup each of the following in order, and stop on the first + * match: + * 2.1 languages_scripts_regions + * 2.2 languages_regions + * 2.3 languages_scripts + * 2.4 languages + * 2.5 und_scripts + * 3. Return + * 3.1 If there is no match, either return an error value, or the match for + * "und" (in APIs where a valid language tag is required). + * 3.2 Otherwise there is a match = languagem_scriptm_regionm + * 3.3 Let xr = xs if xs is not empty, and xm otherwise. + * 3.4 Return the language tag composed of languager _ scriptr _ regionr + + * variants + extensions. + * + * @subtags [Array] normalized language id subtags tuple (see init.js). + */ + var coreLikelySubtags = function( Cldr, cldr, subtags, options ) { + var match, matchFound, + language = subtags[ 0 ], + script = subtags[ 1 ], + sep = Cldr.localeSep, + territory = subtags[ 2 ], + variants = subtags.slice( 3, 4 ); + options = options || {}; + + // Skip if (language, script, territory) is not empty [3.3] + if ( language !== "und" && script !== "Zzzz" && territory !== "ZZ" ) { + return [ language, script, territory ].concat( variants ); + } + + // Skip if no supplemental likelySubtags data is present + if ( typeof cldr.get( "supplemental/likelySubtags" ) === "undefined" ) { + return; + } + + // [2] + matchFound = arraySome([ + [ language, script, territory ], + [ language, territory ], + [ language, script ], + [ language ], + [ "und", script ] + ], function( test ) { + return match = !(/\b(Zzzz|ZZ)\b/).test( test.join( sep ) ) /* [1.4] */ && cldr.get( [ "supplemental/likelySubtags", test.join( sep ) ] ); + }); + + // [3] + if ( matchFound ) { + // [3.2 .. 3.4] + match = match.split( sep ); + return [ + language !== "und" ? language : match[ 0 ], + script !== "Zzzz" ? script : match[ 1 ], + territory !== "ZZ" ? territory : match[ 2 ] + ].concat( variants ); + } else if ( options.force ) { + // [3.1.2] + return cldr.get( "supplemental/likelySubtags/und" ).split( sep ); + } else { + // [3.1.1] + return; + } + }; diff --git a/node_modules/cldrjs/dist/.build/core/load.js b/node_modules/cldrjs/dist/.build/core/load.js new file mode 100644 index 00000000..412c4655 --- /dev/null +++ b/node_modules/cldrjs/dist/.build/core/load.js @@ -0,0 +1,31 @@ + + + /** + * load( Cldr, source, jsons ) + * + * @Cldr [Cldr class] + * + * @source [Object] + * + * @jsons [arguments] + */ + var coreLoad = function( Cldr, source, jsons ) { + var i, j, json; + + validatePresence( jsons[ 0 ], "json" ); + + // Support arbitrary parameters, e.g., `Cldr.load({...}, {...})`. + for ( i = 0; i < jsons.length; i++ ) { + + // Support array parameters, e.g., `Cldr.load([{...}, {...}])`. + json = alwaysArray( jsons[ i ] ); + + for ( j = 0; j < json.length; j++ ) { + validateTypePlainObject( json[ j ], "json" ); + source = jsonMerge( source, json[ j ] ); + coreSetAvailableBundles( Cldr, json[ j ] ); + } + } + + return source; + }; diff --git a/node_modules/cldrjs/dist/.build/core/remove_likely_subtags.js b/node_modules/cldrjs/dist/.build/core/remove_likely_subtags.js new file mode 100644 index 00000000..13992dfa --- /dev/null +++ b/node_modules/cldrjs/dist/.build/core/remove_likely_subtags.js @@ -0,0 +1,45 @@ + + + /** + * Given a locale, remove any fields that Add Likely Subtags would add. + * http://www.unicode.org/reports/tr35/#Likely_Subtags + * 1. First get max = AddLikelySubtags(inputLocale). If an error is signaled, + * return it. + * 2. Remove the variants from max. + * 3. Then for trial in {language, language _ region, language _ script}. If + * AddLikelySubtags(trial) = max, then return trial + variants. + * 4. If you do not get a match, return max + variants. + * + * @maxLanguageId [Array] maxLanguageId tuple (see init.js). + */ + var coreRemoveLikelySubtags = function( Cldr, cldr, maxLanguageId ) { + var match, matchFound, + language = maxLanguageId[ 0 ], + script = maxLanguageId[ 1 ], + territory = maxLanguageId[ 2 ], + variants = maxLanguageId[ 3 ]; + + // [3] + matchFound = arraySome([ + [ [ language, "Zzzz", "ZZ" ], [ language ] ], + [ [ language, "Zzzz", territory ], [ language, territory ] ], + [ [ language, script, "ZZ" ], [ language, script ] ] + ], function( test ) { + var result = coreLikelySubtags( Cldr, cldr, test[ 0 ] ); + match = test[ 1 ]; + return result && result[ 0 ] === maxLanguageId[ 0 ] && + result[ 1 ] === maxLanguageId[ 1 ] && + result[ 2 ] === maxLanguageId[ 2 ]; + }); + + if ( matchFound ) { + if ( variants ) { + match.push( variants ); + } + return match; + } + + // [4] + return maxLanguageId; + }; + diff --git a/node_modules/cldrjs/dist/.build/core/set_available_bundles.js b/node_modules/cldrjs/dist/.build/core/set_available_bundles.js new file mode 100644 index 00000000..ec375d0f --- /dev/null +++ b/node_modules/cldrjs/dist/.build/core/set_available_bundles.js @@ -0,0 +1,25 @@ + + + /** + * setAvailableBundles( Cldr, json ) + * + * @Cldr [Cldr class] + * + * @json resolved/unresolved cldr data. + * + * Set available bundles queue based on passed json CLDR data. Considers a bundle as any String at /main/{bundle}. + */ + var coreSetAvailableBundles = function( Cldr, json ) { + var bundle, + availableBundleMapQueue = Cldr._availableBundleMapQueue, + main = resourceGet( json, [ "main" ] ); + + if ( main ) { + for ( bundle in main ) { + if ( main.hasOwnProperty( bundle ) && bundle !== "root" && + availableBundleMapQueue.indexOf( bundle ) === -1 ) { + availableBundleMapQueue.push( bundle ); + } + } + } + }; diff --git a/node_modules/cldrjs/dist/.build/core/subtags.js b/node_modules/cldrjs/dist/.build/core/subtags.js new file mode 100644 index 00000000..1fe5edfc --- /dev/null +++ b/node_modules/cldrjs/dist/.build/core/subtags.js @@ -0,0 +1,51 @@ + + + /** + * subtags( locale ) + * + * @locale [String] + */ + var coreSubtags = function( locale ) { + var aux, unicodeLanguageId, + subtags = []; + + locale = locale.replace( /_/, "-" ); + + // Unicode locale extensions. + aux = locale.split( "-u-" ); + if ( aux[ 1 ] ) { + aux[ 1 ] = aux[ 1 ].split( "-t-" ); + locale = aux[ 0 ] + ( aux[ 1 ][ 1 ] ? "-t-" + aux[ 1 ][ 1 ] : ""); + subtags[ 4 /* unicodeLocaleExtensions */ ] = aux[ 1 ][ 0 ]; + } + + // TODO normalize transformed extensions. Currently, skipped. + // subtags[ x ] = locale.split( "-t-" )[ 1 ]; + unicodeLanguageId = locale.split( "-t-" )[ 0 ]; + + // unicode_language_id = "root" + // | unicode_language_subtag + // (sep unicode_script_subtag)? + // (sep unicode_region_subtag)? + // (sep unicode_variant_subtag)* ; + // + // Although unicode_language_subtag = alpha{2,8}, I'm using alpha{2,3}. Because, there's no language on CLDR lengthier than 3. + aux = unicodeLanguageId.match( /^(([a-z]{2,3})(-([A-Z][a-z]{3}))?(-([A-Z]{2}|[0-9]{3}))?)((-([a-zA-Z0-9]{5,8}|[0-9][a-zA-Z0-9]{3}))*)$|^(root)$/ ); + if ( aux === null ) { + return [ "und", "Zzzz", "ZZ" ]; + } + subtags[ 0 /* language */ ] = aux[ 10 ] /* root */ || aux[ 2 ] || "und"; + subtags[ 1 /* script */ ] = aux[ 4 ] || "Zzzz"; + subtags[ 2 /* territory */ ] = aux[ 6 ] || "ZZ"; + if ( aux[ 7 ] && aux[ 7 ].length ) { + subtags[ 3 /* variant */ ] = aux[ 7 ].slice( 1 ) /* remove leading "-" */; + } + + // 0: language + // 1: script + // 2: territory (aka region) + // 3: variant + // 4: unicodeLocaleExtensions + return subtags; + }; + diff --git a/node_modules/cldrjs/dist/.build/event.js b/node_modules/cldrjs/dist/.build/event.js new file mode 100644 index 00000000..ee12b380 --- /dev/null +++ b/node_modules/cldrjs/dist/.build/event.js @@ -0,0 +1,75 @@ + + + var superGet, superInit, + globalEe = new EventEmitter(); + + function validateTypeEvent( value, name ) { + validateType( value, name, typeof value === "string" || value instanceof RegExp, "String or RegExp" ); + } + + function validateThenCall( method, self ) { + return function( event, listener ) { + validatePresence( event, "event" ); + validateTypeEvent( event, "event" ); + + validatePresence( listener, "listener" ); + validateTypeFunction( listener, "listener" ); + + return self[ method ].apply( self, arguments ); + }; + } + + function off( self ) { + return validateThenCall( "off", self ); + } + + function on( self ) { + return validateThenCall( "on", self ); + } + + function once( self ) { + return validateThenCall( "once", self ); + } + + Cldr.off = off( globalEe ); + Cldr.on = on( globalEe ); + Cldr.once = once( globalEe ); + + /** + * Overload Cldr.prototype.init(). + */ + superInit = Cldr.prototype.init; + Cldr.prototype.init = function() { + var ee; + this.ee = ee = new EventEmitter(); + this.off = off( ee ); + this.on = on( ee ); + this.once = once( ee ); + superInit.apply( this, arguments ); + }; + + /** + * getOverload is encapsulated, because of cldr/unresolved. If it's loaded + * after cldr/event (and note it overwrites .get), it can trigger this + * overload again. + */ + function getOverload() { + + /** + * Overload Cldr.prototype.get(). + */ + superGet = Cldr.prototype.get; + Cldr.prototype.get = function( path ) { + var value = superGet.apply( this, arguments ); + path = pathNormalize( path, this.attributes ).join( "/" ); + globalEe.trigger( "get", [ path, value ] ); + this.ee.trigger( "get", [ path, value ] ); + return value; + }; + } + + Cldr._eventInit = getOverload; + getOverload(); + + return Cldr; + diff --git a/node_modules/cldrjs/dist/.build/item/get_resolved.js b/node_modules/cldrjs/dist/.build/item/get_resolved.js new file mode 100644 index 00000000..6951882d --- /dev/null +++ b/node_modules/cldrjs/dist/.build/item/get_resolved.js @@ -0,0 +1,9 @@ + + + var itemGetResolved = function( Cldr, path, attributes ) { + // Resolve path + var normalizedPath = pathNormalize( path, attributes ); + + return resourceGet( Cldr._resolved, normalizedPath ); + }; + diff --git a/node_modules/cldrjs/dist/.build/item/lookup.js b/node_modules/cldrjs/dist/.build/item/lookup.js new file mode 100644 index 00000000..78f59316 --- /dev/null +++ b/node_modules/cldrjs/dist/.build/item/lookup.js @@ -0,0 +1,44 @@ + var itemLookup = (function() { + + var lookup; + + lookup = function( Cldr, locale, path, attributes, childLocale ) { + var normalizedPath, parent, value; + + // 1: Finish recursion + // 2: Avoid infinite loop + if ( typeof locale === "undefined" /* 1 */ || locale === childLocale /* 2 */ ) { + return; + } + + // Resolve path + normalizedPath = pathNormalize( path, attributes ); + + // Check resolved (cached) data first + // 1: Due to #16, never use the cached resolved non-leaf nodes. It may not + // represent its leafs in its entirety. + value = resourceGet( Cldr._resolved, normalizedPath ); + if ( value !== undefined && typeof value !== "object" /* 1 */ ) { + return value; + } + + // Check raw data + value = resourceGet( Cldr._raw, normalizedPath ); + + if ( value === undefined ) { + // Or, lookup at parent locale + parent = bundleParentLookup( Cldr, locale ); + value = lookup( Cldr, parent, path, jsonMerge( attributes, { bundle: parent }), locale ); + } + + if ( value !== undefined ) { + // Set resolved (cached) + resourceSet( Cldr._resolved, normalizedPath, value ); + } + + return value; + }; + + return lookup; + +}()); \ No newline at end of file diff --git a/node_modules/cldrjs/dist/.build/path/normalize.js b/node_modules/cldrjs/dist/.build/path/normalize.js new file mode 100644 index 00000000..687e6cd6 --- /dev/null +++ b/node_modules/cldrjs/dist/.build/path/normalize.js @@ -0,0 +1,24 @@ + + + var pathNormalize = function( path, attributes ) { + if ( arrayIsArray( path ) ) { + path = path.join( "/" ); + } + if ( typeof path !== "string" ) { + throw new Error( "invalid path \"" + path + "\"" ); + } + // 1: Ignore leading slash `/` + // 2: Ignore leading `cldr/` + path = path + .replace( /^\// , "" ) /* 1 */ + .replace( /^cldr\// , "" ); /* 2 */ + + // Replace {attribute}'s + path = path.replace( /{[a-zA-Z]+}/g, function( name ) { + name = name.replace( /^{([^}]*)}$/, "$1" ); + return attributes[ name ]; + }); + + return path.split( "/" ); + }; + diff --git a/node_modules/cldrjs/dist/.build/resource/get.js b/node_modules/cldrjs/dist/.build/resource/get.js new file mode 100644 index 00000000..ed9d9f83 --- /dev/null +++ b/node_modules/cldrjs/dist/.build/resource/get.js @@ -0,0 +1,17 @@ + + + // @path: normalized path + var resourceGet = function( data, path ) { + var i, + node = data, + length = path.length; + + for ( i = 0; i < length - 1; i++ ) { + node = node[ path[ i ] ]; + if ( !node ) { + return undefined; + } + } + return node[ path[ i ] ]; + }; + diff --git a/node_modules/cldrjs/dist/.build/resource/set.js b/node_modules/cldrjs/dist/.build/resource/set.js new file mode 100644 index 00000000..594ce407 --- /dev/null +++ b/node_modules/cldrjs/dist/.build/resource/set.js @@ -0,0 +1,17 @@ + + + // @path: normalized path + var resourceSet = function( data, path, value ) { + var i, + node = data, + length = path.length; + + for ( i = 0; i < length - 1; i++ ) { + if ( !node[ path[ i ] ] ) { + node[ path[ i ] ] = {}; + } + node = node[ path[ i ] ]; + } + node[ path[ i ] ] = value; + }; + diff --git a/node_modules/cldrjs/dist/.build/supplemental.js b/node_modules/cldrjs/dist/.build/supplemental.js new file mode 100644 index 00000000..0bdeae63 --- /dev/null +++ b/node_modules/cldrjs/dist/.build/supplemental.js @@ -0,0 +1,16 @@ + + + var initSuper = Cldr.prototype.init; + + /** + * .init() automatically ran on construction. + * + * Overload .init(). + */ + Cldr.prototype.init = function() { + initSuper.apply( this, arguments ); + this.supplemental = supplementalMain( this ); + }; + + return Cldr; + diff --git a/node_modules/cldrjs/dist/.build/supplemental/main.js b/node_modules/cldrjs/dist/.build/supplemental/main.js new file mode 100644 index 00000000..92108e5b --- /dev/null +++ b/node_modules/cldrjs/dist/.build/supplemental/main.js @@ -0,0 +1,48 @@ + + + var supplementalMain = function( cldr ) { + + var prepend, supplemental; + + prepend = function( prepend ) { + return function( path ) { + path = alwaysArray( path ); + return cldr.get( [ prepend ].concat( path ) ); + }; + }; + + supplemental = prepend( "supplemental" ); + + // Week Data + // http://www.unicode.org/reports/tr35/tr35-dates.html#Week_Data + supplemental.weekData = prepend( "supplemental/weekData" ); + + supplemental.weekData.firstDay = function() { + return cldr.get( "supplemental/weekData/firstDay/{territory}" ) || + cldr.get( "supplemental/weekData/firstDay/001" ); + }; + + supplemental.weekData.minDays = function() { + var minDays = cldr.get( "supplemental/weekData/minDays/{territory}" ) || + cldr.get( "supplemental/weekData/minDays/001" ); + return parseInt( minDays, 10 ); + }; + + // Time Data + // http://www.unicode.org/reports/tr35/tr35-dates.html#Time_Data + supplemental.timeData = prepend( "supplemental/timeData" ); + + supplemental.timeData.allowed = function() { + return cldr.get( "supplemental/timeData/{territory}/_allowed" ) || + cldr.get( "supplemental/timeData/001/_allowed" ); + }; + + supplemental.timeData.preferred = function() { + return cldr.get( "supplemental/timeData/{territory}/_preferred" ) || + cldr.get( "supplemental/timeData/001/_preferred" ); + }; + + return supplemental; + + }; + diff --git a/node_modules/cldrjs/dist/.build/unresolved.js b/node_modules/cldrjs/dist/.build/unresolved.js new file mode 100644 index 00000000..52f15737 --- /dev/null +++ b/node_modules/cldrjs/dist/.build/unresolved.js @@ -0,0 +1,35 @@ + + + Cldr._raw = {}; + + /** + * Cldr.load( json [, json, ...] ) + * + * @json [JSON] CLDR data or [Array] Array of @json's. + * + * Load resolved or unresolved cldr data. + * Overwrite Cldr.load(). + */ + Cldr.load = function() { + Cldr._raw = coreLoad( Cldr, Cldr._raw, arguments ); + }; + + /** + * Overwrite Cldr.prototype.get(). + */ + Cldr.prototype.get = function( path ) { + validatePresence( path, "path" ); + validateTypePath( path, "path" ); + + // 1: use bundle as locale on item lookup for simplification purposes, because no other extended subtag is used anyway on bundle parent lookup. + // 2: during init(), this method is called, but bundle is yet not defined. Use "" as a workaround in this very specific scenario. + return itemLookup( Cldr, this.attributes && this.attributes.bundle /* 1 */ || "" /* 2 */, path, this.attributes ); + }; + + // In case cldr/unresolved is loaded after cldr/event, we trigger its overloads again. Because, .get is overwritten in here. + if ( Cldr._eventInit ) { + Cldr._eventInit(); + } + + return Cldr; + diff --git a/node_modules/cldrjs/dist/.build/util/always_array.js b/node_modules/cldrjs/dist/.build/util/always_array.js new file mode 100644 index 00000000..616f7e84 --- /dev/null +++ b/node_modules/cldrjs/dist/.build/util/always_array.js @@ -0,0 +1,6 @@ + + + var alwaysArray = function( somethingOrArray ) { + return arrayIsArray( somethingOrArray ) ? somethingOrArray : [ somethingOrArray ]; + }; + diff --git a/node_modules/cldrjs/dist/.build/util/array/for_each.js b/node_modules/cldrjs/dist/.build/util/array/for_each.js new file mode 100644 index 00000000..18a2c005 --- /dev/null +++ b/node_modules/cldrjs/dist/.build/util/array/for_each.js @@ -0,0 +1,12 @@ + + + var arrayForEach = function( array, callback ) { + var i, length; + if ( array.forEach ) { + return array.forEach( callback ); + } + for ( i = 0, length = array.length; i < length; i++ ) { + callback( array[ i ], i, array ); + } + }; + diff --git a/node_modules/cldrjs/dist/.build/util/array/is_array.js b/node_modules/cldrjs/dist/.build/util/array/is_array.js new file mode 100644 index 00000000..2e3237d6 --- /dev/null +++ b/node_modules/cldrjs/dist/.build/util/array/is_array.js @@ -0,0 +1,6 @@ + + + var arrayIsArray = Array.isArray || function( obj ) { + return Object.prototype.toString.call( obj ) === "[object Array]"; + }; + diff --git a/node_modules/cldrjs/dist/.build/util/array/some.js b/node_modules/cldrjs/dist/.build/util/array/some.js new file mode 100644 index 00000000..b4021023 --- /dev/null +++ b/node_modules/cldrjs/dist/.build/util/array/some.js @@ -0,0 +1,15 @@ + + + var arraySome = function( array, callback ) { + var i, length; + if ( array.some ) { + return array.some( callback ); + } + for ( i = 0, length = array.length; i < length; i++ ) { + if ( callback( array[ i ], i, array ) ) { + return true; + } + } + return false; + }; + diff --git a/node_modules/cldrjs/dist/.build/util/is_plain_object.js b/node_modules/cldrjs/dist/.build/util/is_plain_object.js new file mode 100644 index 00000000..d6a06539 --- /dev/null +++ b/node_modules/cldrjs/dist/.build/util/is_plain_object.js @@ -0,0 +1,9 @@ + + + /** + * Function inspired by jQuery Core, but reduced to our use case. + */ + var isPlainObject = function( obj ) { + return obj !== null && "" + obj === "[object Object]"; + }; + diff --git a/node_modules/cldrjs/dist/.build/util/json/merge.js b/node_modules/cldrjs/dist/.build/util/json/merge.js new file mode 100644 index 00000000..18bc53a7 --- /dev/null +++ b/node_modules/cldrjs/dist/.build/util/json/merge.js @@ -0,0 +1,35 @@ + var jsonMerge = (function() { + + // Returns new deeply merged JSON. + // + // Eg. + // merge( { a: { b: 1, c: 2 } }, { a: { b: 3, d: 4 } } ) + // -> { a: { b: 3, c: 2, d: 4 } } + // + // @arguments JSON's + // + var merge = function() { + var destination = {}, + sources = [].slice.call( arguments, 0 ); + arrayForEach( sources, function( source ) { + var prop; + for ( prop in source ) { + if ( prop in destination && typeof destination[ prop ] === "object" && !arrayIsArray( destination[ prop ] ) ) { + + // Merge Objects + destination[ prop ] = merge( destination[ prop ], source[ prop ] ); + + } else { + + // Set new values + destination[ prop ] = source[ prop ]; + + } + } + }); + return destination; + }; + + return merge; + +}()); \ No newline at end of file diff --git a/node_modules/cldrjs/dist/.build/util/object/keys.js b/node_modules/cldrjs/dist/.build/util/object/keys.js new file mode 100644 index 00000000..6863ac28 --- /dev/null +++ b/node_modules/cldrjs/dist/.build/util/object/keys.js @@ -0,0 +1,17 @@ + + + var objectKeys = function( object ) { + var i, + result = []; + + if ( Object.keys ) { + return Object.keys( object ); + } + + for ( i in object ) { + result.push( i ); + } + + return result; + }; + diff --git a/node_modules/cldrjs/dist/cldr.js b/node_modules/cldrjs/dist/cldr.js new file mode 100644 index 00000000..036881a4 --- /dev/null +++ b/node_modules/cldrjs/dist/cldr.js @@ -0,0 +1,682 @@ +/** + * CLDR JavaScript Library v0.5.1 + * http://jquery.com/ + * + * Copyright 2013 Rafael Xavier de Souza + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2019-01-21T13:43Z + */ +/*! + * CLDR JavaScript Library v0.5.1 2019-01-21T13:43Z MIT license © Rafael Xavier + * http://git.io/h4lmVg + */ +(function( root, factory ) { + + if ( typeof define === "function" && define.amd ) { + // AMD. + define( factory ); + } else if ( typeof module === "object" && typeof module.exports === "object" ) { + // Node. CommonJS. + module.exports = factory(); + } else { + // Global + root.Cldr = factory(); + } + +}( this, function() { + + + var arrayIsArray = Array.isArray || function( obj ) { + return Object.prototype.toString.call( obj ) === "[object Array]"; + }; + + + + + var pathNormalize = function( path, attributes ) { + if ( arrayIsArray( path ) ) { + path = path.join( "/" ); + } + if ( typeof path !== "string" ) { + throw new Error( "invalid path \"" + path + "\"" ); + } + // 1: Ignore leading slash `/` + // 2: Ignore leading `cldr/` + path = path + .replace( /^\// , "" ) /* 1 */ + .replace( /^cldr\// , "" ); /* 2 */ + + // Replace {attribute}'s + path = path.replace( /{[a-zA-Z]+}/g, function( name ) { + name = name.replace( /^{([^}]*)}$/, "$1" ); + return attributes[ name ]; + }); + + return path.split( "/" ); + }; + + + + + var arraySome = function( array, callback ) { + var i, length; + if ( array.some ) { + return array.some( callback ); + } + for ( i = 0, length = array.length; i < length; i++ ) { + if ( callback( array[ i ], i, array ) ) { + return true; + } + } + return false; + }; + + + + + /** + * Return the maximized language id as defined in + * http://www.unicode.org/reports/tr35/#Likely_Subtags + * 1. Canonicalize. + * 1.1 Make sure the input locale is in canonical form: uses the right + * separator, and has the right casing. + * TODO Right casing? What df? It seems languages are lowercase, scripts are + * Capitalized, territory is uppercase. I am leaving this as an exercise to + * the user. + * + * 1.2 Replace any deprecated subtags with their canonical values using the + * data in supplemental metadata. Use the first value in the + * replacement list, if it exists. Language tag replacements may have multiple + * parts, such as "sh" ➞ "sr_Latn" or mo" ➞ "ro_MD". In such a case, the + * original script and/or region are retained if there is one. Thus + * "sh_Arab_AQ" ➞ "sr_Arab_AQ", not "sr_Latn_AQ". + * TODO What data? + * + * 1.3 If the tag is grandfathered (see in the supplemental data), then return it. + * TODO grandfathered? + * + * 1.4 Remove the script code 'Zzzz' and the region code 'ZZ' if they occur. + * 1.5 Get the components of the cleaned-up source tag (languages, scripts, + * and regions), plus any variants and extensions. + * 2. Lookup. Lookup each of the following in order, and stop on the first + * match: + * 2.1 languages_scripts_regions + * 2.2 languages_regions + * 2.3 languages_scripts + * 2.4 languages + * 2.5 und_scripts + * 3. Return + * 3.1 If there is no match, either return an error value, or the match for + * "und" (in APIs where a valid language tag is required). + * 3.2 Otherwise there is a match = languagem_scriptm_regionm + * 3.3 Let xr = xs if xs is not empty, and xm otherwise. + * 3.4 Return the language tag composed of languager _ scriptr _ regionr + + * variants + extensions. + * + * @subtags [Array] normalized language id subtags tuple (see init.js). + */ + var coreLikelySubtags = function( Cldr, cldr, subtags, options ) { + var match, matchFound, + language = subtags[ 0 ], + script = subtags[ 1 ], + sep = Cldr.localeSep, + territory = subtags[ 2 ], + variants = subtags.slice( 3, 4 ); + options = options || {}; + + // Skip if (language, script, territory) is not empty [3.3] + if ( language !== "und" && script !== "Zzzz" && territory !== "ZZ" ) { + return [ language, script, territory ].concat( variants ); + } + + // Skip if no supplemental likelySubtags data is present + if ( typeof cldr.get( "supplemental/likelySubtags" ) === "undefined" ) { + return; + } + + // [2] + matchFound = arraySome([ + [ language, script, territory ], + [ language, territory ], + [ language, script ], + [ language ], + [ "und", script ] + ], function( test ) { + return match = !(/\b(Zzzz|ZZ)\b/).test( test.join( sep ) ) /* [1.4] */ && cldr.get( [ "supplemental/likelySubtags", test.join( sep ) ] ); + }); + + // [3] + if ( matchFound ) { + // [3.2 .. 3.4] + match = match.split( sep ); + return [ + language !== "und" ? language : match[ 0 ], + script !== "Zzzz" ? script : match[ 1 ], + territory !== "ZZ" ? territory : match[ 2 ] + ].concat( variants ); + } else if ( options.force ) { + // [3.1.2] + return cldr.get( "supplemental/likelySubtags/und" ).split( sep ); + } else { + // [3.1.1] + return; + } + }; + + + + /** + * Given a locale, remove any fields that Add Likely Subtags would add. + * http://www.unicode.org/reports/tr35/#Likely_Subtags + * 1. First get max = AddLikelySubtags(inputLocale). If an error is signaled, + * return it. + * 2. Remove the variants from max. + * 3. Then for trial in {language, language _ region, language _ script}. If + * AddLikelySubtags(trial) = max, then return trial + variants. + * 4. If you do not get a match, return max + variants. + * + * @maxLanguageId [Array] maxLanguageId tuple (see init.js). + */ + var coreRemoveLikelySubtags = function( Cldr, cldr, maxLanguageId ) { + var match, matchFound, + language = maxLanguageId[ 0 ], + script = maxLanguageId[ 1 ], + territory = maxLanguageId[ 2 ], + variants = maxLanguageId[ 3 ]; + + // [3] + matchFound = arraySome([ + [ [ language, "Zzzz", "ZZ" ], [ language ] ], + [ [ language, "Zzzz", territory ], [ language, territory ] ], + [ [ language, script, "ZZ" ], [ language, script ] ] + ], function( test ) { + var result = coreLikelySubtags( Cldr, cldr, test[ 0 ] ); + match = test[ 1 ]; + return result && result[ 0 ] === maxLanguageId[ 0 ] && + result[ 1 ] === maxLanguageId[ 1 ] && + result[ 2 ] === maxLanguageId[ 2 ]; + }); + + if ( matchFound ) { + if ( variants ) { + match.push( variants ); + } + return match; + } + + // [4] + return maxLanguageId; + }; + + + + + /** + * subtags( locale ) + * + * @locale [String] + */ + var coreSubtags = function( locale ) { + var aux, unicodeLanguageId, + subtags = []; + + locale = locale.replace( /_/, "-" ); + + // Unicode locale extensions. + aux = locale.split( "-u-" ); + if ( aux[ 1 ] ) { + aux[ 1 ] = aux[ 1 ].split( "-t-" ); + locale = aux[ 0 ] + ( aux[ 1 ][ 1 ] ? "-t-" + aux[ 1 ][ 1 ] : ""); + subtags[ 4 /* unicodeLocaleExtensions */ ] = aux[ 1 ][ 0 ]; + } + + // TODO normalize transformed extensions. Currently, skipped. + // subtags[ x ] = locale.split( "-t-" )[ 1 ]; + unicodeLanguageId = locale.split( "-t-" )[ 0 ]; + + // unicode_language_id = "root" + // | unicode_language_subtag + // (sep unicode_script_subtag)? + // (sep unicode_region_subtag)? + // (sep unicode_variant_subtag)* ; + // + // Although unicode_language_subtag = alpha{2,8}, I'm using alpha{2,3}. Because, there's no language on CLDR lengthier than 3. + aux = unicodeLanguageId.match( /^(([a-z]{2,3})(-([A-Z][a-z]{3}))?(-([A-Z]{2}|[0-9]{3}))?)((-([a-zA-Z0-9]{5,8}|[0-9][a-zA-Z0-9]{3}))*)$|^(root)$/ ); + if ( aux === null ) { + return [ "und", "Zzzz", "ZZ" ]; + } + subtags[ 0 /* language */ ] = aux[ 10 ] /* root */ || aux[ 2 ] || "und"; + subtags[ 1 /* script */ ] = aux[ 4 ] || "Zzzz"; + subtags[ 2 /* territory */ ] = aux[ 6 ] || "ZZ"; + if ( aux[ 7 ] && aux[ 7 ].length ) { + subtags[ 3 /* variant */ ] = aux[ 7 ].slice( 1 ) /* remove leading "-" */; + } + + // 0: language + // 1: script + // 2: territory (aka region) + // 3: variant + // 4: unicodeLocaleExtensions + return subtags; + }; + + + + + var arrayForEach = function( array, callback ) { + var i, length; + if ( array.forEach ) { + return array.forEach( callback ); + } + for ( i = 0, length = array.length; i < length; i++ ) { + callback( array[ i ], i, array ); + } + }; + + + + + /** + * bundleLookup( minLanguageId ) + * + * @Cldr [Cldr class] + * + * @cldr [Cldr instance] + * + * @minLanguageId [String] requested languageId after applied remove likely subtags. + */ + var bundleLookup = function( Cldr, cldr, minLanguageId ) { + var availableBundleMap = Cldr._availableBundleMap, + availableBundleMapQueue = Cldr._availableBundleMapQueue; + + if ( availableBundleMapQueue.length ) { + arrayForEach( availableBundleMapQueue, function( bundle ) { + var existing, maxBundle, minBundle, subtags; + subtags = coreSubtags( bundle ); + maxBundle = coreLikelySubtags( Cldr, cldr, subtags ); + minBundle = coreRemoveLikelySubtags( Cldr, cldr, maxBundle ); + minBundle = minBundle.join( Cldr.localeSep ); + existing = availableBundleMap[ minBundle ]; + if ( existing && existing.length < bundle.length ) { + return; + } + availableBundleMap[ minBundle ] = bundle; + }); + Cldr._availableBundleMapQueue = []; + } + + return availableBundleMap[ minLanguageId ] || null; + }; + + + + + var objectKeys = function( object ) { + var i, + result = []; + + if ( Object.keys ) { + return Object.keys( object ); + } + + for ( i in object ) { + result.push( i ); + } + + return result; + }; + + + + + var createError = function( code, attributes ) { + var error, message; + + message = code + ( attributes && JSON ? ": " + JSON.stringify( attributes ) : "" ); + error = new Error( message ); + error.code = code; + + // extend( error, attributes ); + arrayForEach( objectKeys( attributes ), function( attribute ) { + error[ attribute ] = attributes[ attribute ]; + }); + + return error; + }; + + + + + var validate = function( code, check, attributes ) { + if ( !check ) { + throw createError( code, attributes ); + } + }; + + + + + var validatePresence = function( value, name ) { + validate( "E_MISSING_PARAMETER", typeof value !== "undefined", { + name: name + }); + }; + + + + + var validateType = function( value, name, check, expected ) { + validate( "E_INVALID_PAR_TYPE", check, { + expected: expected, + name: name, + value: value + }); + }; + + + + + var validateTypePath = function( value, name ) { + validateType( value, name, typeof value === "string" || arrayIsArray( value ), "String or Array" ); + }; + + + + + /** + * Function inspired by jQuery Core, but reduced to our use case. + */ + var isPlainObject = function( obj ) { + return obj !== null && "" + obj === "[object Object]"; + }; + + + + + var validateTypePlainObject = function( value, name ) { + validateType( value, name, typeof value === "undefined" || isPlainObject( value ), "Plain Object" ); + }; + + + + + var validateTypeString = function( value, name ) { + validateType( value, name, typeof value === "string", "a string" ); + }; + + + + + // @path: normalized path + var resourceGet = function( data, path ) { + var i, + node = data, + length = path.length; + + for ( i = 0; i < length - 1; i++ ) { + node = node[ path[ i ] ]; + if ( !node ) { + return undefined; + } + } + return node[ path[ i ] ]; + }; + + + + + /** + * setAvailableBundles( Cldr, json ) + * + * @Cldr [Cldr class] + * + * @json resolved/unresolved cldr data. + * + * Set available bundles queue based on passed json CLDR data. Considers a bundle as any String at /main/{bundle}. + */ + var coreSetAvailableBundles = function( Cldr, json ) { + var bundle, + availableBundleMapQueue = Cldr._availableBundleMapQueue, + main = resourceGet( json, [ "main" ] ); + + if ( main ) { + for ( bundle in main ) { + if ( main.hasOwnProperty( bundle ) && bundle !== "root" && + availableBundleMapQueue.indexOf( bundle ) === -1 ) { + availableBundleMapQueue.push( bundle ); + } + } + } + }; + + + + var alwaysArray = function( somethingOrArray ) { + return arrayIsArray( somethingOrArray ) ? somethingOrArray : [ somethingOrArray ]; + }; + + + var jsonMerge = (function() { + + // Returns new deeply merged JSON. + // + // Eg. + // merge( { a: { b: 1, c: 2 } }, { a: { b: 3, d: 4 } } ) + // -> { a: { b: 3, c: 2, d: 4 } } + // + // @arguments JSON's + // + var merge = function() { + var destination = {}, + sources = [].slice.call( arguments, 0 ); + arrayForEach( sources, function( source ) { + var prop; + for ( prop in source ) { + if ( prop in destination && typeof destination[ prop ] === "object" && !arrayIsArray( destination[ prop ] ) ) { + + // Merge Objects + destination[ prop ] = merge( destination[ prop ], source[ prop ] ); + + } else { + + // Set new values + destination[ prop ] = source[ prop ]; + + } + } + }); + return destination; + }; + + return merge; + +}()); + + + /** + * load( Cldr, source, jsons ) + * + * @Cldr [Cldr class] + * + * @source [Object] + * + * @jsons [arguments] + */ + var coreLoad = function( Cldr, source, jsons ) { + var i, j, json; + + validatePresence( jsons[ 0 ], "json" ); + + // Support arbitrary parameters, e.g., `Cldr.load({...}, {...})`. + for ( i = 0; i < jsons.length; i++ ) { + + // Support array parameters, e.g., `Cldr.load([{...}, {...}])`. + json = alwaysArray( jsons[ i ] ); + + for ( j = 0; j < json.length; j++ ) { + validateTypePlainObject( json[ j ], "json" ); + source = jsonMerge( source, json[ j ] ); + coreSetAvailableBundles( Cldr, json[ j ] ); + } + } + + return source; + }; + + + + var itemGetResolved = function( Cldr, path, attributes ) { + // Resolve path + var normalizedPath = pathNormalize( path, attributes ); + + return resourceGet( Cldr._resolved, normalizedPath ); + }; + + + + + /** + * new Cldr() + */ + var Cldr = function( locale ) { + this.init( locale ); + }; + + // Build optimization hack to avoid duplicating functions across modules. + Cldr._alwaysArray = alwaysArray; + Cldr._coreLoad = coreLoad; + Cldr._createError = createError; + Cldr._itemGetResolved = itemGetResolved; + Cldr._jsonMerge = jsonMerge; + Cldr._pathNormalize = pathNormalize; + Cldr._resourceGet = resourceGet; + Cldr._validatePresence = validatePresence; + Cldr._validateType = validateType; + Cldr._validateTypePath = validateTypePath; + Cldr._validateTypePlainObject = validateTypePlainObject; + + Cldr._availableBundleMap = {}; + Cldr._availableBundleMapQueue = []; + Cldr._resolved = {}; + + // Allow user to override locale separator "-" (default) | "_". According to http://www.unicode.org/reports/tr35/#Unicode_language_identifier, both "-" and "_" are valid locale separators (eg. "en_GB", "en-GB"). According to http://unicode.org/cldr/trac/ticket/6786 its usage must be consistent throughout the data set. + Cldr.localeSep = "-"; + + /** + * Cldr.load( json [, json, ...] ) + * + * @json [JSON] CLDR data or [Array] Array of @json's. + * + * Load resolved cldr data. + */ + Cldr.load = function() { + Cldr._resolved = coreLoad( Cldr, Cldr._resolved, arguments ); + }; + + /** + * .init() automatically run on instantiation/construction. + */ + Cldr.prototype.init = function( locale ) { + var attributes, language, maxLanguageId, minLanguageId, script, subtags, territory, unicodeLocaleExtensions, variant, + sep = Cldr.localeSep, + unicodeLocaleExtensionsRaw = ""; + + validatePresence( locale, "locale" ); + validateTypeString( locale, "locale" ); + + subtags = coreSubtags( locale ); + + if ( subtags.length === 5 ) { + unicodeLocaleExtensions = subtags.pop(); + unicodeLocaleExtensionsRaw = sep + "u" + sep + unicodeLocaleExtensions; + // Remove trailing null when there is unicodeLocaleExtensions but no variants. + if ( !subtags[ 3 ] ) { + subtags.pop(); + } + } + variant = subtags[ 3 ]; + + // Normalize locale code. + // Get (or deduce) the "triple subtags": language, territory (also aliased as region), and script subtags. + // Get the variant subtags (calendar, collation, currency, etc). + // refs: + // - http://www.unicode.org/reports/tr35/#Field_Definitions + // - http://www.unicode.org/reports/tr35/#Language_and_Locale_IDs + // - http://www.unicode.org/reports/tr35/#Unicode_locale_identifier + + // When a locale id does not specify a language, or territory (region), or script, they are obtained by Likely Subtags. + maxLanguageId = coreLikelySubtags( Cldr, this, subtags, { force: true } ) || subtags; + language = maxLanguageId[ 0 ]; + script = maxLanguageId[ 1 ]; + territory = maxLanguageId[ 2 ]; + + minLanguageId = coreRemoveLikelySubtags( Cldr, this, maxLanguageId ).join( sep ); + + // Set attributes + this.attributes = attributes = { + bundle: bundleLookup( Cldr, this, minLanguageId ), + + // Unicode Language Id + minLanguageId: minLanguageId + unicodeLocaleExtensionsRaw, + maxLanguageId: maxLanguageId.join( sep ) + unicodeLocaleExtensionsRaw, + + // Unicode Language Id Subtabs + language: language, + script: script, + territory: territory, + region: territory, /* alias */ + variant: variant + }; + + // Unicode locale extensions. + unicodeLocaleExtensions && ( "-" + unicodeLocaleExtensions ).replace( /-[a-z]{3,8}|(-[a-z]{2})-([a-z]{3,8})/g, function( attribute, key, type ) { + + if ( key ) { + + // Extension is in the `keyword` form. + attributes[ "u" + key ] = type; + } else { + + // Extension is in the `attribute` form. + attributes[ "u" + attribute ] = true; + } + }); + + this.locale = locale; + }; + + /** + * .get() + */ + Cldr.prototype.get = function( path ) { + + validatePresence( path, "path" ); + validateTypePath( path, "path" ); + + return itemGetResolved( Cldr, path, this.attributes ); + }; + + /** + * .main() + */ + Cldr.prototype.main = function( path ) { + validatePresence( path, "path" ); + validateTypePath( path, "path" ); + + validate( "E_MISSING_BUNDLE", this.attributes.bundle !== null, { + locale: this.locale + }); + + path = alwaysArray( path ); + return this.get( [ "main/{bundle}" ].concat( path ) ); + }; + + return Cldr; + + + + +})); diff --git a/node_modules/cldrjs/dist/cldr/event.js b/node_modules/cldrjs/dist/cldr/event.js new file mode 100644 index 00000000..054070e2 --- /dev/null +++ b/node_modules/cldrjs/dist/cldr/event.js @@ -0,0 +1,585 @@ +/** + * CLDR JavaScript Library v0.5.1 + * http://jquery.com/ + * + * Copyright 2013 Rafael Xavier de Souza + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2019-01-21T13:43Z + */ +/*! + * CLDR JavaScript Library v0.5.1 2019-01-21T13:43Z MIT license © Rafael Xavier + * http://git.io/h4lmVg + */ +(function( factory ) { + + if ( typeof define === "function" && define.amd ) { + // AMD. + define( [ "../cldr" ], factory ); + } else if ( typeof module === "object" && typeof module.exports === "object" ) { + // Node. CommonJS. + module.exports = factory( require( "../cldr" ) ); + } else { + // Global + factory( Cldr ); + } + +}(function( Cldr ) { + + // Build optimization hack to avoid duplicating functions across modules. + var pathNormalize = Cldr._pathNormalize, + validatePresence = Cldr._validatePresence, + validateType = Cldr._validateType; + +/*! + * EventEmitter v4.2.7 - git.io/ee + * Oliver Caldwell + * MIT license + * @preserve + */ + +var EventEmitter; +/* jshint ignore:start */ +EventEmitter = (function () { + + + /** + * Class for managing events. + * Can be extended to provide event functionality in other classes. + * + * @class EventEmitter Manages event registering and emitting. + */ + function EventEmitter() {} + + // Shortcuts to improve speed and size + var proto = EventEmitter.prototype; + var exports = {}; + + + /** + * Finds the index of the listener for the event in it's storage array. + * + * @param {Function[]} listeners Array of listeners to search through. + * @param {Function} listener Method to look for. + * @return {Number} Index of the specified listener, -1 if not found + * @api private + */ + function indexOfListener(listeners, listener) { + var i = listeners.length; + while (i--) { + if (listeners[i].listener === listener) { + return i; + } + } + + return -1; + } + + /** + * Alias a method while keeping the context correct, to allow for overwriting of target method. + * + * @param {String} name The name of the target method. + * @return {Function} The aliased method + * @api private + */ + function alias(name) { + return function aliasClosure() { + return this[name].apply(this, arguments); + }; + } + + /** + * Returns the listener array for the specified event. + * Will initialise the event object and listener arrays if required. + * Will return an object if you use a regex search. The object contains keys for each matched event. So /ba[rz]/ might return an object containing bar and baz. But only if you have either defined them with defineEvent or added some listeners to them. + * Each property in the object response is an array of listener functions. + * + * @param {String|RegExp} evt Name of the event to return the listeners from. + * @return {Function[]|Object} All listener functions for the event. + */ + proto.getListeners = function getListeners(evt) { + var events = this._getEvents(); + var response; + var key; + + // Return a concatenated array of all matching events if + // the selector is a regular expression. + if (evt instanceof RegExp) { + response = {}; + for (key in events) { + if (events.hasOwnProperty(key) && evt.test(key)) { + response[key] = events[key]; + } + } + } + else { + response = events[evt] || (events[evt] = []); + } + + return response; + }; + + /** + * Takes a list of listener objects and flattens it into a list of listener functions. + * + * @param {Object[]} listeners Raw listener objects. + * @return {Function[]} Just the listener functions. + */ + proto.flattenListeners = function flattenListeners(listeners) { + var flatListeners = []; + var i; + + for (i = 0; i < listeners.length; i += 1) { + flatListeners.push(listeners[i].listener); + } + + return flatListeners; + }; + + /** + * Fetches the requested listeners via getListeners but will always return the results inside an object. This is mainly for internal use but others may find it useful. + * + * @param {String|RegExp} evt Name of the event to return the listeners from. + * @return {Object} All listener functions for an event in an object. + */ + proto.getListenersAsObject = function getListenersAsObject(evt) { + var listeners = this.getListeners(evt); + var response; + + if (listeners instanceof Array) { + response = {}; + response[evt] = listeners; + } + + return response || listeners; + }; + + /** + * Adds a listener function to the specified event. + * The listener will not be added if it is a duplicate. + * If the listener returns true then it will be removed after it is called. + * If you pass a regular expression as the event name then the listener will be added to all events that match it. + * + * @param {String|RegExp} evt Name of the event to attach the listener to. + * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.addListener = function addListener(evt, listener) { + var listeners = this.getListenersAsObject(evt); + var listenerIsWrapped = typeof listener === 'object'; + var key; + + for (key in listeners) { + if (listeners.hasOwnProperty(key) && indexOfListener(listeners[key], listener) === -1) { + listeners[key].push(listenerIsWrapped ? listener : { + listener: listener, + once: false + }); + } + } + + return this; + }; + + /** + * Alias of addListener + */ + proto.on = alias('addListener'); + + /** + * Semi-alias of addListener. It will add a listener that will be + * automatically removed after it's first execution. + * + * @param {String|RegExp} evt Name of the event to attach the listener to. + * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.addOnceListener = function addOnceListener(evt, listener) { + return this.addListener(evt, { + listener: listener, + once: true + }); + }; + + /** + * Alias of addOnceListener. + */ + proto.once = alias('addOnceListener'); + + /** + * Defines an event name. This is required if you want to use a regex to add a listener to multiple events at once. If you don't do this then how do you expect it to know what event to add to? Should it just add to every possible match for a regex? No. That is scary and bad. + * You need to tell it what event names should be matched by a regex. + * + * @param {String} evt Name of the event to create. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.defineEvent = function defineEvent(evt) { + this.getListeners(evt); + return this; + }; + + /** + * Uses defineEvent to define multiple events. + * + * @param {String[]} evts An array of event names to define. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.defineEvents = function defineEvents(evts) { + for (var i = 0; i < evts.length; i += 1) { + this.defineEvent(evts[i]); + } + return this; + }; + + /** + * Removes a listener function from the specified event. + * When passed a regular expression as the event name, it will remove the listener from all events that match it. + * + * @param {String|RegExp} evt Name of the event to remove the listener from. + * @param {Function} listener Method to remove from the event. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.removeListener = function removeListener(evt, listener) { + var listeners = this.getListenersAsObject(evt); + var index; + var key; + + for (key in listeners) { + if (listeners.hasOwnProperty(key)) { + index = indexOfListener(listeners[key], listener); + + if (index !== -1) { + listeners[key].splice(index, 1); + } + } + } + + return this; + }; + + /** + * Alias of removeListener + */ + proto.off = alias('removeListener'); + + /** + * Adds listeners in bulk using the manipulateListeners method. + * If you pass an object as the second argument you can add to multiple events at once. The object should contain key value pairs of events and listeners or listener arrays. You can also pass it an event name and an array of listeners to be added. + * You can also pass it a regular expression to add the array of listeners to all events that match it. + * Yeah, this function does quite a bit. That's probably a bad thing. + * + * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add to multiple events at once. + * @param {Function[]} [listeners] An optional array of listener functions to add. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.addListeners = function addListeners(evt, listeners) { + // Pass through to manipulateListeners + return this.manipulateListeners(false, evt, listeners); + }; + + /** + * Removes listeners in bulk using the manipulateListeners method. + * If you pass an object as the second argument you can remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays. + * You can also pass it an event name and an array of listeners to be removed. + * You can also pass it a regular expression to remove the listeners from all events that match it. + * + * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to remove from multiple events at once. + * @param {Function[]} [listeners] An optional array of listener functions to remove. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.removeListeners = function removeListeners(evt, listeners) { + // Pass through to manipulateListeners + return this.manipulateListeners(true, evt, listeners); + }; + + /** + * Edits listeners in bulk. The addListeners and removeListeners methods both use this to do their job. You should really use those instead, this is a little lower level. + * The first argument will determine if the listeners are removed (true) or added (false). + * If you pass an object as the second argument you can add/remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays. + * You can also pass it an event name and an array of listeners to be added/removed. + * You can also pass it a regular expression to manipulate the listeners of all events that match it. + * + * @param {Boolean} remove True if you want to remove listeners, false if you want to add. + * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add/remove from multiple events at once. + * @param {Function[]} [listeners] An optional array of listener functions to add/remove. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.manipulateListeners = function manipulateListeners(remove, evt, listeners) { + var i; + var value; + var single = remove ? this.removeListener : this.addListener; + var multiple = remove ? this.removeListeners : this.addListeners; + + // If evt is an object then pass each of it's properties to this method + if (typeof evt === 'object' && !(evt instanceof RegExp)) { + for (i in evt) { + if (evt.hasOwnProperty(i) && (value = evt[i])) { + // Pass the single listener straight through to the singular method + if (typeof value === 'function') { + single.call(this, i, value); + } + else { + // Otherwise pass back to the multiple function + multiple.call(this, i, value); + } + } + } + } + else { + // So evt must be a string + // And listeners must be an array of listeners + // Loop over it and pass each one to the multiple method + i = listeners.length; + while (i--) { + single.call(this, evt, listeners[i]); + } + } + + return this; + }; + + /** + * Removes all listeners from a specified event. + * If you do not specify an event then all listeners will be removed. + * That means every event will be emptied. + * You can also pass a regex to remove all events that match it. + * + * @param {String|RegExp} [evt] Optional name of the event to remove all listeners for. Will remove from every event if not passed. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.removeEvent = function removeEvent(evt) { + var type = typeof evt; + var events = this._getEvents(); + var key; + + // Remove different things depending on the state of evt + if (type === 'string') { + // Remove all listeners for the specified event + delete events[evt]; + } + else if (evt instanceof RegExp) { + // Remove all events matching the regex. + for (key in events) { + if (events.hasOwnProperty(key) && evt.test(key)) { + delete events[key]; + } + } + } + else { + // Remove all listeners in all events + delete this._events; + } + + return this; + }; + + /** + * Alias of removeEvent. + * + * Added to mirror the node API. + */ + proto.removeAllListeners = alias('removeEvent'); + + /** + * Emits an event of your choice. + * When emitted, every listener attached to that event will be executed. + * If you pass the optional argument array then those arguments will be passed to every listener upon execution. + * Because it uses `apply`, your array of arguments will be passed as if you wrote them out separately. + * So they will not arrive within the array on the other side, they will be separate. + * You can also pass a regular expression to emit to all events that match it. + * + * @param {String|RegExp} evt Name of the event to emit and execute listeners for. + * @param {Array} [args] Optional array of arguments to be passed to each listener. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.emitEvent = function emitEvent(evt, args) { + var listeners = this.getListenersAsObject(evt); + var listener; + var i; + var key; + var response; + + for (key in listeners) { + if (listeners.hasOwnProperty(key)) { + i = listeners[key].length; + + while (i--) { + // If the listener returns true then it shall be removed from the event + // The function is executed either with a basic call or an apply if there is an args array + listener = listeners[key][i]; + + if (listener.once === true) { + this.removeListener(evt, listener.listener); + } + + response = listener.listener.apply(this, args || []); + + if (response === this._getOnceReturnValue()) { + this.removeListener(evt, listener.listener); + } + } + } + } + + return this; + }; + + /** + * Alias of emitEvent + */ + proto.trigger = alias('emitEvent'); + + /** + * Subtly different from emitEvent in that it will pass its arguments on to the listeners, as opposed to taking a single array of arguments to pass on. + * As with emitEvent, you can pass a regex in place of the event name to emit to all events that match it. + * + * @param {String|RegExp} evt Name of the event to emit and execute listeners for. + * @param {...*} Optional additional arguments to be passed to each listener. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.emit = function emit(evt) { + var args = Array.prototype.slice.call(arguments, 1); + return this.emitEvent(evt, args); + }; + + /** + * Sets the current value to check against when executing listeners. If a + * listeners return value matches the one set here then it will be removed + * after execution. This value defaults to true. + * + * @param {*} value The new value to check for when executing listeners. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.setOnceReturnValue = function setOnceReturnValue(value) { + this._onceReturnValue = value; + return this; + }; + + /** + * Fetches the current value to check against when executing listeners. If + * the listeners return value matches this one then it should be removed + * automatically. It will return true by default. + * + * @return {*|Boolean} The current value to check for or the default, true. + * @api private + */ + proto._getOnceReturnValue = function _getOnceReturnValue() { + if (this.hasOwnProperty('_onceReturnValue')) { + return this._onceReturnValue; + } + else { + return true; + } + }; + + /** + * Fetches the events object and creates one if required. + * + * @return {Object} The events storage object. + * @api private + */ + proto._getEvents = function _getEvents() { + return this._events || (this._events = {}); + }; + + /** + * Reverts the global {@link EventEmitter} to its previous value and returns a reference to this version. + * + * @return {Function} Non conflicting EventEmitter class. + */ + EventEmitter.noConflict = function noConflict() { + exports.EventEmitter = originalGlobalValue; + return EventEmitter; + }; + + return EventEmitter; +}()); +/* jshint ignore:end */ + + + + var validateTypeFunction = function( value, name ) { + validateType( value, name, typeof value === "undefined" || typeof value === "function", "Function" ); + }; + + + + + var superGet, superInit, + globalEe = new EventEmitter(); + + function validateTypeEvent( value, name ) { + validateType( value, name, typeof value === "string" || value instanceof RegExp, "String or RegExp" ); + } + + function validateThenCall( method, self ) { + return function( event, listener ) { + validatePresence( event, "event" ); + validateTypeEvent( event, "event" ); + + validatePresence( listener, "listener" ); + validateTypeFunction( listener, "listener" ); + + return self[ method ].apply( self, arguments ); + }; + } + + function off( self ) { + return validateThenCall( "off", self ); + } + + function on( self ) { + return validateThenCall( "on", self ); + } + + function once( self ) { + return validateThenCall( "once", self ); + } + + Cldr.off = off( globalEe ); + Cldr.on = on( globalEe ); + Cldr.once = once( globalEe ); + + /** + * Overload Cldr.prototype.init(). + */ + superInit = Cldr.prototype.init; + Cldr.prototype.init = function() { + var ee; + this.ee = ee = new EventEmitter(); + this.off = off( ee ); + this.on = on( ee ); + this.once = once( ee ); + superInit.apply( this, arguments ); + }; + + /** + * getOverload is encapsulated, because of cldr/unresolved. If it's loaded + * after cldr/event (and note it overwrites .get), it can trigger this + * overload again. + */ + function getOverload() { + + /** + * Overload Cldr.prototype.get(). + */ + superGet = Cldr.prototype.get; + Cldr.prototype.get = function( path ) { + var value = superGet.apply( this, arguments ); + path = pathNormalize( path, this.attributes ).join( "/" ); + globalEe.trigger( "get", [ path, value ] ); + this.ee.trigger( "get", [ path, value ] ); + return value; + }; + } + + Cldr._eventInit = getOverload; + getOverload(); + + return Cldr; + + + + +})); diff --git a/node_modules/cldrjs/dist/cldr/supplemental.js b/node_modules/cldrjs/dist/cldr/supplemental.js new file mode 100644 index 00000000..1e59bf5e --- /dev/null +++ b/node_modules/cldrjs/dist/cldr/supplemental.js @@ -0,0 +1,101 @@ +/** + * CLDR JavaScript Library v0.5.1 + * http://jquery.com/ + * + * Copyright 2013 Rafael Xavier de Souza + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2019-01-21T13:43Z + */ +/*! + * CLDR JavaScript Library v0.5.1 2019-01-21T13:43Z MIT license © Rafael Xavier + * http://git.io/h4lmVg + */ +(function( factory ) { + + if ( typeof define === "function" && define.amd ) { + // AMD. + define( [ "../cldr" ], factory ); + } else if ( typeof module === "object" && typeof module.exports === "object" ) { + // Node. CommonJS. + module.exports = factory( require( "../cldr" ) ); + } else { + // Global + factory( Cldr ); + } + +}(function( Cldr ) { + + // Build optimization hack to avoid duplicating functions across modules. + var alwaysArray = Cldr._alwaysArray; + + + + var supplementalMain = function( cldr ) { + + var prepend, supplemental; + + prepend = function( prepend ) { + return function( path ) { + path = alwaysArray( path ); + return cldr.get( [ prepend ].concat( path ) ); + }; + }; + + supplemental = prepend( "supplemental" ); + + // Week Data + // http://www.unicode.org/reports/tr35/tr35-dates.html#Week_Data + supplemental.weekData = prepend( "supplemental/weekData" ); + + supplemental.weekData.firstDay = function() { + return cldr.get( "supplemental/weekData/firstDay/{territory}" ) || + cldr.get( "supplemental/weekData/firstDay/001" ); + }; + + supplemental.weekData.minDays = function() { + var minDays = cldr.get( "supplemental/weekData/minDays/{territory}" ) || + cldr.get( "supplemental/weekData/minDays/001" ); + return parseInt( minDays, 10 ); + }; + + // Time Data + // http://www.unicode.org/reports/tr35/tr35-dates.html#Time_Data + supplemental.timeData = prepend( "supplemental/timeData" ); + + supplemental.timeData.allowed = function() { + return cldr.get( "supplemental/timeData/{territory}/_allowed" ) || + cldr.get( "supplemental/timeData/001/_allowed" ); + }; + + supplemental.timeData.preferred = function() { + return cldr.get( "supplemental/timeData/{territory}/_preferred" ) || + cldr.get( "supplemental/timeData/001/_preferred" ); + }; + + return supplemental; + + }; + + + + + var initSuper = Cldr.prototype.init; + + /** + * .init() automatically ran on construction. + * + * Overload .init(). + */ + Cldr.prototype.init = function() { + initSuper.apply( this, arguments ); + this.supplemental = supplementalMain( this ); + }; + + return Cldr; + + + + +})); diff --git a/node_modules/cldrjs/dist/cldr/unresolved.js b/node_modules/cldrjs/dist/cldr/unresolved.js new file mode 100644 index 00000000..82d5cd1d --- /dev/null +++ b/node_modules/cldrjs/dist/cldr/unresolved.js @@ -0,0 +1,164 @@ +/** + * CLDR JavaScript Library v0.5.1 + * http://jquery.com/ + * + * Copyright 2013 Rafael Xavier de Souza + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2019-01-21T13:43Z + */ +/*! + * CLDR JavaScript Library v0.5.1 2019-01-21T13:43Z MIT license © Rafael Xavier + * http://git.io/h4lmVg + */ +(function( factory ) { + + if ( typeof define === "function" && define.amd ) { + // AMD. + define( [ "../cldr" ], factory ); + } else if ( typeof module === "object" && typeof module.exports === "object" ) { + // Node. CommonJS. + module.exports = factory( require( "../cldr" ) ); + } else { + // Global + factory( Cldr ); + } + +}(function( Cldr ) { + + // Build optimization hack to avoid duplicating functions across modules. + var coreLoad = Cldr._coreLoad; + var jsonMerge = Cldr._jsonMerge; + var pathNormalize = Cldr._pathNormalize; + var resourceGet = Cldr._resourceGet; + var validatePresence = Cldr._validatePresence; + var validateTypePath = Cldr._validateTypePath; + + + + var bundleParentLookup = function( Cldr, locale ) { + var normalizedPath, parent; + + if ( locale === "root" ) { + return; + } + + // First, try to find parent on supplemental data. + normalizedPath = pathNormalize( [ "supplemental/parentLocales/parentLocale", locale ] ); + parent = resourceGet( Cldr._resolved, normalizedPath ) || resourceGet( Cldr._raw, normalizedPath ); + if ( parent ) { + return parent; + } + + // Or truncate locale. + parent = locale.substr( 0, locale.lastIndexOf( Cldr.localeSep ) ); + if ( !parent ) { + return "root"; + } + + return parent; + }; + + + + + // @path: normalized path + var resourceSet = function( data, path, value ) { + var i, + node = data, + length = path.length; + + for ( i = 0; i < length - 1; i++ ) { + if ( !node[ path[ i ] ] ) { + node[ path[ i ] ] = {}; + } + node = node[ path[ i ] ]; + } + node[ path[ i ] ] = value; + }; + + + var itemLookup = (function() { + + var lookup; + + lookup = function( Cldr, locale, path, attributes, childLocale ) { + var normalizedPath, parent, value; + + // 1: Finish recursion + // 2: Avoid infinite loop + if ( typeof locale === "undefined" /* 1 */ || locale === childLocale /* 2 */ ) { + return; + } + + // Resolve path + normalizedPath = pathNormalize( path, attributes ); + + // Check resolved (cached) data first + // 1: Due to #16, never use the cached resolved non-leaf nodes. It may not + // represent its leafs in its entirety. + value = resourceGet( Cldr._resolved, normalizedPath ); + if ( value !== undefined && typeof value !== "object" /* 1 */ ) { + return value; + } + + // Check raw data + value = resourceGet( Cldr._raw, normalizedPath ); + + if ( value === undefined ) { + // Or, lookup at parent locale + parent = bundleParentLookup( Cldr, locale ); + value = lookup( Cldr, parent, path, jsonMerge( attributes, { bundle: parent }), locale ); + } + + if ( value !== undefined ) { + // Set resolved (cached) + resourceSet( Cldr._resolved, normalizedPath, value ); + } + + return value; + }; + + return lookup; + +}()); + + + Cldr._raw = {}; + + /** + * Cldr.load( json [, json, ...] ) + * + * @json [JSON] CLDR data or [Array] Array of @json's. + * + * Load resolved or unresolved cldr data. + * Overwrite Cldr.load(). + */ + Cldr.load = function() { + Cldr._raw = coreLoad( Cldr, Cldr._raw, arguments ); + }; + + /** + * Overwrite Cldr.prototype.get(). + */ + Cldr.prototype.get = function( path ) { + validatePresence( path, "path" ); + validateTypePath( path, "path" ); + + // 1: use bundle as locale on item lookup for simplification purposes, because no other extended subtag is used anyway on bundle parent lookup. + // 2: during init(), this method is called, but bundle is yet not defined. Use "" as a workaround in this very specific scenario. + return itemLookup( Cldr, this.attributes && this.attributes.bundle /* 1 */ || "" /* 2 */, path, this.attributes ); + }; + + // In case cldr/unresolved is loaded after cldr/event, we trigger its overloads again. Because, .get is overwritten in here. + if ( Cldr._eventInit ) { + Cldr._eventInit(); + } + + return Cldr; + + + + +})); diff --git a/node_modules/cldrjs/dist/node_main.js b/node_modules/cldrjs/dist/node_main.js new file mode 100644 index 00000000..d8075b4c --- /dev/null +++ b/node_modules/cldrjs/dist/node_main.js @@ -0,0 +1,22 @@ +/** + * CLDR JavaScript Library v0.5.1 + * http://jquery.com/ + * + * Copyright 2013 Rafael Xavier de Souza + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2019-01-21T13:43Z + */ +/*! + * CLDR JavaScript Library v0.5.1 2019-01-21T13:43Z MIT license © Rafael Xavier + * http://git.io/h4lmVg + */ + +// Cldr +module.exports = require( "./cldr" ); + +// Extent Cldr with the following modules +require( "./cldr/event" ); +require( "./cldr/supplemental" ); +require( "./cldr/unresolved" ); diff --git a/node_modules/cldrjs/doc/api/core/attributes.md b/node_modules/cldrjs/doc/api/core/attributes.md new file mode 100644 index 00000000..02242d71 --- /dev/null +++ b/node_modules/cldrjs/doc/api/core/attributes.md @@ -0,0 +1,15 @@ +## .attributes + +Attributes is an Object created during instance initialization (construction), and are used internally by `.get()` to replace dynamic parts of an item path. + +| Attribute | Field | +| --- | --- | +| `language` | Language Subtag ([spec](http://www.unicode.org/reports/tr35/#Language_Locale_Field_Definitions)) | +| `script` | Script Subtag ([spec](http://www.unicode.org/reports/tr35/#Language_Locale_Field_Definitions)) | +| `region` or `territory` | Region Subtag ([spec](http://www.unicode.org/reports/tr35/#Language_Locale_Field_Definitions)) | +| `languageId` | Language Id ([spec](http://www.unicode.org/reports/tr35/#Unicode_language_identifier)) | +| `maxLanguageId` | Maximized Language Id ([spec](http://www.unicode.org/reports/tr35/#Likely_Subtags)) | + +- `language`, `script`, `territory` (also aliased as `region`), and `maxLanguageId` are computed by [adding likely subtags](./src/likely-subtags.js) according to the [specification](http://www.unicode.org/reports/tr35/#Likely_Subtags). +- `languageId` is always in the succint form, obtained by [removing the likely subtags from `maxLanguageId`](./src/remove-likely-subtags.js) according to the [specification](http://www.unicode.org/reports/tr35/#Likely_Subtags). + diff --git a/node_modules/cldrjs/doc/api/core/constructor.md b/node_modules/cldrjs/doc/api/core/constructor.md new file mode 100644 index 00000000..b29cc8d2 --- /dev/null +++ b/node_modules/cldrjs/doc/api/core/constructor.md @@ -0,0 +1,9 @@ +## new Cldr( locale ) + +Create a new instance of Cldr. + +| Parameter | Type | Example | +| --- | --- | --- | +| *locale* | String | `"en"`, `"pt-BR"` | + +More information in the [specification](http://www.unicode.org/reports/tr35/#Locale). diff --git a/node_modules/cldrjs/doc/api/core/get.md b/node_modules/cldrjs/doc/api/core/get.md new file mode 100644 index 00000000..0a96f4fb --- /dev/null +++ b/node_modules/cldrjs/doc/api/core/get.md @@ -0,0 +1,18 @@ +## .get( path ) + +Get the item data given its path, or `undefined` if missing. + +| Parameter | Type | Example | +| --- | --- | --- | +| *path* | String or
Array | `"/cldr/main/{languageId}/numbers/symbols-numberSystem-latn/decimal"`
`[ "cldr", "main", "{languageId}", "numbers", "symbols-numberSystem-latn", "decimal" ]` | + +On *path* parameter, note the leading "/cldr" can be ommited. Also, note that its Array form accepts subpaths, eg. `[ "cldr/main", "{languageId}", "numbers/symbols-numberSystem-latn/"decimal" ]`. + +The [locale attributes](#cldrattributes), eg. `{languageId}`, are replaced with their appropriate values. + +If extended with the `cldr/unresolved.js` module, get the item data or lookup by following [locale inheritance](http://www.unicode.org/reports/tr35/#Locale_Inheritance), set a local resolved cache if it's found (for subsequent faster access), or return `undefined`. + +```javascript +ptBr.get( "main/{languageId}/numbers/symbols-numberSystem-latn/decimal" ); +// ➡ "," +``` diff --git a/node_modules/cldrjs/doc/api/core/load.md b/node_modules/cldrjs/doc/api/core/load.md new file mode 100644 index 00000000..6c65fbd6 --- /dev/null +++ b/node_modules/cldrjs/doc/api/core/load.md @@ -0,0 +1,23 @@ +## Cldr.load( json, ... ) + +Load resolved or unresolved [1] JSON data. + +| Parameter | Type | Description | +| --- | --- | --- | +| *json* | Object | Resolved or unresolved [1] CLDR JSON data | + +```javascript +Cldr.load({ + "main": { + "pt-BR": { + "numbers": { + "symbols-numberSystem-latn": { + "decimal": "," + } + } + } + } +}); +``` + +1: Unresolved processing is **only available** after loading `cldr/unresolved.js` extension module. diff --git a/node_modules/cldrjs/doc/api/core/main.md b/node_modules/cldrjs/doc/api/core/main.md new file mode 100644 index 00000000..856279a5 --- /dev/null +++ b/node_modules/cldrjs/doc/api/core/main.md @@ -0,0 +1,12 @@ +## .main( path ) + +It's an alias for `.get([ "main/{languageId}", ... ])`. + +| Parameter | Type | Example | +| --- | --- | --- | +| *path* | String or
Array | See `cldr.get()` for more information | + +```javascript +ptBr.main( "numbers/symbols-numberSystem-latn/decimal" ); +// ➡ "," +``` diff --git a/node_modules/cldrjs/doc/api/event/event_get.md b/node_modules/cldrjs/doc/api/event/event_get.md new file mode 100644 index 00000000..2fd73614 --- /dev/null +++ b/node_modules/cldrjs/doc/api/event/event_get.md @@ -0,0 +1,10 @@ +## get ➡ ( path, value ) + +Triggered before a `.get()` (or any alias) return. The triggered listener receives the normalized *path* and the *value* found. + +| Parameter | Description | +| --- | --- | +| *path* | See [../core/get.md](.get()) for more information | +| *value* | See [../core/get.md](.get()) for more information | + +See [Cldr.on()](global_on.md) or [.on()](on.md) for example. diff --git a/node_modules/cldrjs/doc/api/event/global_off.md b/node_modules/cldrjs/doc/api/event/global_off.md new file mode 100644 index 00000000..2a2db5fe --- /dev/null +++ b/node_modules/cldrjs/doc/api/event/global_off.md @@ -0,0 +1,10 @@ +## Cldr.off( event, listener ) + +Removes a listener function from the specified event globally (for all instances). + +| Parameter | Type | Example | +| --- | --- | --- | +| *event* | String | `"get"` | +| *listener* | Function | | + +See [Cldr.on()](global_on.md) for example. diff --git a/node_modules/cldrjs/doc/api/event/global_on.md b/node_modules/cldrjs/doc/api/event/global_on.md new file mode 100644 index 00000000..96f63a39 --- /dev/null +++ b/node_modules/cldrjs/doc/api/event/global_on.md @@ -0,0 +1,32 @@ +## Cldr.on( event, listener ) + +Add a listener function to the specified event globally (for all instances). + +| Parameter | Type | Example | +| --- | --- | --- | +| *event* | String | `"get"` | +| *listener* | Function | | + +```javascript +Cldr.load({ + foo: "bar" +}); + +function log( path, value ) { + console.log( "Got", path, value ); +} + +Cldr.on( "get", log ); + +en = new Cldr( "en" ); +en.get( "foo" ); +// Got foo bar (logged) +// ➡ bar + +zh = new Cldr( "zh" ); +zh.get( "foo" ); +// Got foo bar (logged) +// ➡ bar + +Cldr.off( "get", log ); +``` diff --git a/node_modules/cldrjs/doc/api/event/global_once.md b/node_modules/cldrjs/doc/api/event/global_once.md new file mode 100644 index 00000000..8aec636c --- /dev/null +++ b/node_modules/cldrjs/doc/api/event/global_once.md @@ -0,0 +1,28 @@ +## Cldr.once( event, listener ) + +Add a listener function to the specified event globally (for all instances). It will be automatically removed after it's first execution. + +| Parameter | Type | Example | +| --- | --- | --- | +| *event* | String | `"get"` | +| *listener* | Function | | + +```javascript +Cldr.load({ + foo: "bar" +}); + +function log( path, value ) { + console.log( "Got", path, value ); +} + +Cldr.once( "get", log ); + +cldr = new Cldr( "en" ); +cldr.get( "foo" ); +// Got foo bar (logged) +// ➡ bar + +cldr.get( "foo" ); +// ➡ bar +``` diff --git a/node_modules/cldrjs/doc/api/event/off.md b/node_modules/cldrjs/doc/api/event/off.md new file mode 100644 index 00000000..e0191a14 --- /dev/null +++ b/node_modules/cldrjs/doc/api/event/off.md @@ -0,0 +1,10 @@ +## .off( event, listener ) + +Removes a listener function from the specified event for this instance. + +| Parameter | Type | Example | +| --- | --- | --- | +| *event* | String | `"get"` | +| *listener* | Function | | + +See [cldr.on()](on.md) for example. diff --git a/node_modules/cldrjs/doc/api/event/on.md b/node_modules/cldrjs/doc/api/event/on.md new file mode 100644 index 00000000..f7cd83f8 --- /dev/null +++ b/node_modules/cldrjs/doc/api/event/on.md @@ -0,0 +1,26 @@ +## .on( event, listener ) + +Add a listener function to the specified event for this instance. + +| Parameter | Type | Example | +| --- | --- | --- | +| *event* | String | `"get"` | +| *listener* | Function | | + +```javascript +Cldr.load({ + foo: "bar" +}); + +function log( path, value ) { + console.log( "Got", path, value ); +} + +cldr = new Cldr( "en" ); +cldr.on( "get", log ); +cldr.get( "foo" ); +// Got foo bar (logged) +// ➡ bar + +cldr.off( "get", log ); +``` diff --git a/node_modules/cldrjs/doc/api/event/once.md b/node_modules/cldrjs/doc/api/event/once.md new file mode 100644 index 00000000..5011cce8 --- /dev/null +++ b/node_modules/cldrjs/doc/api/event/once.md @@ -0,0 +1,27 @@ +## .once( event, listener ) + +Add a listener function to the specified event for this instance. It will be automatically removed after it's first execution. + +| Parameter | Type | Example | +| --- | --- | --- | +| *event* | String | `"get"` | +| *listener* | Function | | + +```javascript +Cldr.load({ + foo: "bar" +}); + +function log( path, value ) { + console.log( "Got", path, value ); +} + +cldr = new Cldr( "en" ); +cldr.once( "get", log ); +cldr.get( "foo" ); +// Got foo bar (logged) +// ➡ bar + +cldr.get( "foo" ); +// ➡ bar +``` diff --git a/node_modules/cldrjs/doc/api/supplemental.md b/node_modules/cldrjs/doc/api/supplemental.md new file mode 100644 index 00000000..b0832260 --- /dev/null +++ b/node_modules/cldrjs/doc/api/supplemental.md @@ -0,0 +1,12 @@ +## .supplemental( path ) + +It's an alias for `.get([ "supplemental", ... ])`. + +| Parameter | Type | Example | +| --- | --- | --- | +| *path* | String or
Array | See `cldr.get()` for more information | + +```javascript +en.supplemental( "gender/personList/{language}" ); +// ➡ "neutral" +``` diff --git a/node_modules/cldrjs/doc/api/supplemental/time_data_allowed.md b/node_modules/cldrjs/doc/api/supplemental/time_data_allowed.md new file mode 100644 index 00000000..3bafd3fb --- /dev/null +++ b/node_modules/cldrjs/doc/api/supplemental/time_data_allowed.md @@ -0,0 +1,8 @@ +## .supplemental.timeData.allowed() + +Helper function. Return the supplemental timeData allowed of locale's territory. + +```javascript +en.supplemental.timeData.allowed(); +// ➡ "H h" +``` diff --git a/node_modules/cldrjs/doc/api/supplemental/time_data_preferred.md b/node_modules/cldrjs/doc/api/supplemental/time_data_preferred.md new file mode 100644 index 00000000..d4d04259 --- /dev/null +++ b/node_modules/cldrjs/doc/api/supplemental/time_data_preferred.md @@ -0,0 +1,8 @@ +## .supplemental.timeData.preferred() + +Helper function. Return the supplemental timeData preferred of locale's territory. + +```javascript +en.supplemental.timeData.preferred(); +// ➡ "h" +``` diff --git a/node_modules/cldrjs/doc/api/supplemental/week_data_first_day.md b/node_modules/cldrjs/doc/api/supplemental/week_data_first_day.md new file mode 100644 index 00000000..f0064e9d --- /dev/null +++ b/node_modules/cldrjs/doc/api/supplemental/week_data_first_day.md @@ -0,0 +1,8 @@ +## .supplemental.weekData.firstDay() + +Helper function. Return the supplemental weekData firstDay of locale's territory. + +```javascript +en.supplemental.weekData.firstDay(); +// ➡ "sun" +``` diff --git a/node_modules/cldrjs/doc/api/supplemental/week_data_min_days.md b/node_modules/cldrjs/doc/api/supplemental/week_data_min_days.md new file mode 100644 index 00000000..efdd0a8f --- /dev/null +++ b/node_modules/cldrjs/doc/api/supplemental/week_data_min_days.md @@ -0,0 +1,8 @@ +## .supplemental.weekData.minDays() + +Helper function. Return the supplemental weekData minDays of locale's territory as a Number. + +```javascript +en.supplemental.weekData.minDays(); +// ➡ 1 +``` diff --git a/node_modules/cldrjs/doc/api/unresolved/get.md b/node_modules/cldrjs/doc/api/unresolved/get.md new file mode 100644 index 00000000..f37dd061 --- /dev/null +++ b/node_modules/cldrjs/doc/api/unresolved/get.md @@ -0,0 +1,12 @@ +## .get( path ) + +Overload (extend) `.get()` to get the item data or lookup by following [locale inheritance](http://www.unicode.org/reports/tr35/#Locale_Inheritance), set a local resolved cache if it's found (for subsequent faster access), or return `undefined`. + +| Parameter | Type | Example | +| --- | --- | --- | +| *path* | String or
Array | See `cldr.get()` above for more information | + +```javascript +ptBr.get( "main/{languageId}/numbers/symbols-numberSystem-latn/decimal" ); +// ➡ "," +``` diff --git a/node_modules/cldrjs/doc/asset/jquery.png b/node_modules/cldrjs/doc/asset/jquery.png new file mode 100644 index 00000000..6eb7a1fd Binary files /dev/null and b/node_modules/cldrjs/doc/asset/jquery.png differ diff --git a/node_modules/cldrjs/doc/bundle_lookup_matcher.md b/node_modules/cldrjs/doc/bundle_lookup_matcher.md new file mode 100644 index 00000000..e3e0c069 --- /dev/null +++ b/node_modules/cldrjs/doc/bundle_lookup_matcher.md @@ -0,0 +1,134 @@ +## Bundle Lookup Matcher + +Bundle Lookup is the process of selecting the right dataset for the requested locale. We run this process during instance creation and set it on `instance.attributes.bundle`, which is further used when traversing items of the **main** dataset. + +User must load likelySubtags and any wanted main datasets prior to creating an instance. For example: + +```javascript +Cldr.load( + require( "cldr-data/supplemental/likelySubtags" ), // JSON data from supplemental/likelySubtags.json + require( "cldr-data/main/en-US/ca-gregorian" ), // JSON data from main/en-US/ca-gregorian.json + require( "cldr-data/main/en-GB/ca-gregorian" ) // JSON data from main/en-GB/ca-gregorian.json +); + +var enUs = new Cldr( "en-US" ); +console.log( enUs.attributes.bundle ); // "en-US" +console.log( enUs.main( "dates/calendars/gregorian/dateFormats/short" ) ); // "M/d/yy" + +var enGb = new Cldr( "en-GB" ); +console.log( enGb.attributes.bundle ); // "en-GB" +console.log( enGb.main( "dates/calendars/gregorian/dateFormats/short" ) ); // "dd/MM/y" +``` + +When instances are created, its `.attributes.bundle` reveals the matched bundle. The `.main` method uses this information to traverse the correct main item. + +What happens if we include `main/en/ca-gregorian` to the above example? + +```javascript +Cldr.load( + require( "cldr-data/supplemental/likelySubtags" ), // JSON data from supplemental/likelySubtags.json + require( "cldr-data/main/en/ca-gregorian" ), // JSON data from main/en/ca-gregorian.json + require( "cldr-data/main/en-US/ca-gregorian" ), // JSON data from main/en-US/ca-gregorian.json + require( "cldr-data/main/en-GB/ca-gregorian" ) // JSON data from main/en-GB/ca-gregorian.json +); + +var enUs = new Cldr( "en-US" ); // English as spoken in United States. +console.log( enUs.attributes.bundle ); // "en" +console.log( enUs.main( "dates/calendars/gregorian/dateFormats/short" ) ); // "M/d/yy" + +var enGb = new Cldr( "en-GB" ); // English as spoken in Great Britain. +console.log( enGb.attributes.bundle ); // "en-GB" +console.log( enGb.main( "dates/calendars/gregorian/dateFormats/short" ) ); // "dd/MM/y" +``` + +Now, the `en-US` requested locale uses the `en` bundle (not the `en-US` bundle as used in the first example) and `en-GB` still uses the `en-GB` bundle. Why? Because, `en` is the default content for `en-US` (deduced from likelySubtags data). Default content means that the child content is all in the parent. Therefore, both `en` and `en-US` are identical. Our bundle lookup matching algorithm always picks the grandest available parent. Note the retrieved main item is still the correct one (as it should be). + +A good observer may notice that loading both `main/en/ca-gregorian` and `main/en-US/ca-gregorian` is redundant. Although loading both is not a problem, loading either the `en` or the `en-US` bundle alone is enough. + +Let's add a bit of sugar to the requested locales. + +```javascript +var en = new Cldr( "en" ); // English. +console.log( en.attributes.bundle ); // "en" + +var enUs = new Cldr( "en-US" ); // English as spoken in United States. +console.log( enUs.attributes.bundle ); // "en" + +var enLatnUs = new Cldr( "en-Latn-US" ); // English in Latin script as spoken in the United States. +console.log( enLatnUs.attributes.bundle ); // "en" +``` + +All instances above obviously matches the same `en` bundle. Because, (a) `en` is the default content for `en-US` and (b) `en-US` is the default content for `en-Latn-US`. + +What happens if the requested locale includes [Unicode extensions][]? + +```javascript +var en = new Cldr( "en-US-u-cu-USD" ); +console.log( en.attributes.bundle ); // "en" +console.log( en.main( "numbers/currencies/{u-cu}/displayName" ) ); // "US Dollar" +``` + +[Unicode extensions][] are obviously ignored on bundle lookup. Note they are accessible via variable replacements. + +Below are other non-obvious lookups. + +```javascript +Cldr.load( + require( "cldr-data/supplemental/likelySubtags" ), // JSON data from supplemental/likelySubtags.json + require( "cldr-data/main/sr-Cyrl/numbers" ), // JSON data from main/sr-Cyrl/numbers.json + require( "cldr-data/main/sr-Latn/numbers" ), // JSON data from main/sr-Latn/numbers.json + require( "cldr-data/main/zh-Hant/numbers" ) // JSON data from main/zh-Hant/numbers.json +); + +var srCyrl = new Cldr( "sr-Cyrl" ); +console.log( srCyrl.attributes.bundle ); // "sr-Cyrl" +console.log( srCyrl.main( "numbers/decimalFormats-numberSystem-latn/short/decimalFormat/1000-count-one" ) ); +// ➜ "0 хиљ'.'" + +var srRS = new Cldr( "sr-RS" ); +console.log( srRs.attributes.bundle ); // "sr-Cyrl" +console.log( srRs.main( "numbers/decimalFormats-numberSystem-latn/short/decimalFormat/1000-count-one" ) ); +// ➜ "0 хиљ'.'" + +var srLatnRS = new Cldr( "sr-Latn-RS" ); +console.log( srLatnRS.attributes.bundle ); // "sr-Latn" +console.log( srLatnRS.main( "numbers/decimalFormats-numberSystem-latn/short/decimalFormat/1000-count-one" ) ); +// ➜ "0 hilj'.'" + +var zhTW = new Cldr( "zh-TW" ); +console.log( zhTW.attributes.bundle ); // "zh-Hant" +console.log( zhTW.main( "numbers/symbols-numberSystem-hanidec/nan" ) ); // "非數值" +``` + +Finally, if an instance is created whose bundle hasn't been loaded yet, its `.attributes.bundle` is set as `null`. If this instance is used to traverse a main dataset, an error is thrown. If this instance is used to traverse any non-main dataset (e.g., supplemental/postalCodeData.json) it can be used just fine. + +```javascript +var zhCN = new Cldr( "zh-CN" ); +console.log( zhCN.attributes.bundle ); // null +console.log( zhCN.main( /* something */ ) ); // Error: E_MISSING_BUNDLE +``` + +### Implementation details + +[UTS#35][] doesn't specify how bundle lookup matcher should be implemented. [RFC 4647][] section 3.4 "Lookup" has an algorithm for that, although it fails in various cases listed above. Mark Davis, the co-founder and president of the Unicode Consortium, said (via CLDR mailing list and via [Fixing Inheritance doc][]) that bundle lookup should happen via [LanguageMatching](http://www.unicode.org/reports/tr35/#LanguageMatching). + +Our belief is that LanguageMatching is a great algorithm for Best Fit Matcher. Although, it's an overkill for Lookup Matcher. + +ICU (a known CLDR implementation) doesn't use LanguageMatching for Bundle Lookup Matcher either. But, it has its own implementation, which has its own flaws as Mark Davis says in the Fixing Inheritance doc "ICU uses the %%ALIAS element to counteract some of these problems... It doesn’t fix all of them, and the data is not derivable from CLDR." + +We also believe ICU's aliases approach is not the best solution. Instead we believe in the following approach, whose result matches LanguageMatching with a score threshold of 100%. + +`BundleLookupMatcher( requestedLocale, availableBundles )` is used for bundle lookup given an arbitrary `requestedLocale`. + + 1. Create a Hash (aka Dictionary or Key-Value-Pair) object, named `availableBundlesMap`, that maps each `availableBundle` (value) to its respective [Remove Likely Subtags][] result (key). + 1. In case of a duplicate key, keep the smaller value, i.e., keep the available bundle locale whose length is the smallest; e.g., keep { "en": "en" } instead of { "en": "en-US" }. + 1. [Remove Likely Subtags][] from `requestedLocale` and let `minRequestedLocale` keep its result. + 1. Return `availableBundlesMap[ minRequestedLocale ]`. + +This algorithm is faster than LanguageMatching and needs no extra CLDR to be created and maintained (likelySubtags is sufficient). Note the `availableBundlesMap` can be cached for improved performance on repeated calls. + +[Fixing Inheritance doc]: https://docs.google.com/document/d/1qZwEVb4kfODi2TK5f4x15FYWj5rJRijXmSIg5m6OH8s/edit +[Remove Likely Subtags]: http://www.unicode.org/reports/tr35/tr35.html#Likely_Subtags +[RFC 4647]: http://www.ietf.org/rfc/rfc4647.txt +[Unicode extensions]: http://Www.unicode.org/reports/tr35/#u_Extension +[UTS#35]: http://www.unicode.org/reports/tr35 diff --git a/node_modules/cldrjs/package.json b/node_modules/cldrjs/package.json new file mode 100644 index 00000000..ae5c1815 --- /dev/null +++ b/node_modules/cldrjs/package.json @@ -0,0 +1,89 @@ +{ + "_from": "cldrjs@^0.5.0", + "_id": "cldrjs@0.5.1", + "_inBundle": false, + "_integrity": "sha512-xyiP8uAm8K1IhmpDndZLraloW1yqu0L+HYdQ7O1aGPxx9Cr+BMnPANlNhSt++UKfxytL2hd2NPXgTjiy7k43Ew==", + "_location": "/cldrjs", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "cldrjs@^0.5.0", + "name": "cldrjs", + "escapedName": "cldrjs", + "rawSpec": "^0.5.0", + "saveSpec": null, + "fetchSpec": "^0.5.0" + }, + "_requiredBy": [ + "/globalize" + ], + "_resolved": "https://registry.npmjs.org/cldrjs/-/cldrjs-0.5.1.tgz", + "_shasum": "b5dc4beae02555634b04b94deb8e22e13ff10319", + "_spec": "cldrjs@^0.5.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/globalize", + "author": { + "name": "Rafael Xavier de Souza", + "email": "rxaviers@gmail.com", + "url": "http://rafael.xavier.blog.br" + }, + "bugs": { + "url": "https://github.com/rxaviers/cldrjs/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Simple CLDR traverser", + "devDependencies": { + "cldr-data-downloader": "0.2.x", + "grunt": "0.4.x", + "grunt-compare-size": "0.4.0", + "grunt-contrib-connect": "0.3.x", + "grunt-contrib-copy": "0.4.x", + "grunt-contrib-jshint": "0.12.x", + "grunt-contrib-requirejs": "0.4.x", + "grunt-contrib-uglify": "0.2.x", + "grunt-dco": "0.0.3", + "grunt-mocha": "0.3.x", + "gzip-js": "0.3.2", + "matchdep": "*" + }, + "files": [ + "CHANGELOG.md", + "DCO.md", + "dist/", + "doc/", + "LICENSE-MIT", + "README.md" + ], + "homepage": "https://github.com/rxaviers/cldrjs#readme", + "keywords": [ + "utility", + "globalization", + "internationalization", + "multilingualization", + "localization", + "g11n", + "i18n", + "m17n", + "L10n", + "localize", + "locale", + "cldr", + "json", + "inheritance", + "compiler" + ], + "licenses": [ + { + "type": "MIT", + "url": "https://github.com/rxaviers/cldrjs/blob/master/LICENSE-MIT" + } + ], + "main": "dist/node_main.js", + "name": "cldrjs", + "repository": { + "type": "git", + "url": "git://github.com/rxaviers/cldrjs.git" + }, + "version": "0.5.1" +} diff --git a/node_modules/compress/README.md b/node_modules/compress/README.md new file mode 100644 index 00000000..113adf27 --- /dev/null +++ b/node_modules/compress/README.md @@ -0,0 +1,3 @@ +# compress + +Compress a HTTP message diff --git a/node_modules/compress/index.js b/node_modules/compress/index.js new file mode 100644 index 00000000..e8a1fe96 --- /dev/null +++ b/node_modules/compress/index.js @@ -0,0 +1,10 @@ +/*! + * compress + * MIT Licensed + */ + +/** + * Module exports. + */ + +module.exports = {} diff --git a/node_modules/compress/package.json b/node_modules/compress/package.json new file mode 100644 index 00000000..eec7a69b --- /dev/null +++ b/node_modules/compress/package.json @@ -0,0 +1,35 @@ +{ + "_from": "compress@^0.99.0", + "_id": "compress@0.99.0", + "_inBundle": false, + "_integrity": "sha1-l+MBwlxNAfCX2FED9l7Msud5ZQI=", + "_location": "/compress", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "compress@^0.99.0", + "name": "compress", + "escapedName": "compress", + "rawSpec": "^0.99.0", + "saveSpec": null, + "fetchSpec": "^0.99.0" + }, + "_requiredBy": [ + "/strong-soap" + ], + "_resolved": "https://registry.npmjs.org/compress/-/compress-0.99.0.tgz", + "_shasum": "97e301c25c4d01f097d85103f65eccb2e7796502", + "_spec": "compress@^0.99.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/strong-soap", + "author": { + "name": "Douglas Christopher Wilson", + "email": "doug@somethingdoug.com" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Compress a HTTP message", + "license": "MIT", + "name": "compress", + "version": "0.99.0" +} diff --git a/node_modules/concat-map/.travis.yml b/node_modules/concat-map/.travis.yml new file mode 100644 index 00000000..f1d0f13c --- /dev/null +++ b/node_modules/concat-map/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +node_js: + - 0.4 + - 0.6 diff --git a/node_modules/concat-map/LICENSE b/node_modules/concat-map/LICENSE new file mode 100644 index 00000000..ee27ba4b --- /dev/null +++ b/node_modules/concat-map/LICENSE @@ -0,0 +1,18 @@ +This software is released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/concat-map/README.markdown b/node_modules/concat-map/README.markdown new file mode 100644 index 00000000..408f70a1 --- /dev/null +++ b/node_modules/concat-map/README.markdown @@ -0,0 +1,62 @@ +concat-map +========== + +Concatenative mapdashery. + +[![browser support](http://ci.testling.com/substack/node-concat-map.png)](http://ci.testling.com/substack/node-concat-map) + +[![build status](https://secure.travis-ci.org/substack/node-concat-map.png)](http://travis-ci.org/substack/node-concat-map) + +example +======= + +``` js +var concatMap = require('concat-map'); +var xs = [ 1, 2, 3, 4, 5, 6 ]; +var ys = concatMap(xs, function (x) { + return x % 2 ? [ x - 0.1, x, x + 0.1 ] : []; +}); +console.dir(ys); +``` + +*** + +``` +[ 0.9, 1, 1.1, 2.9, 3, 3.1, 4.9, 5, 5.1 ] +``` + +methods +======= + +``` js +var concatMap = require('concat-map') +``` + +concatMap(xs, fn) +----------------- + +Return an array of concatenated elements by calling `fn(x, i)` for each element +`x` and each index `i` in the array `xs`. + +When `fn(x, i)` returns an array, its result will be concatenated with the +result array. If `fn(x, i)` returns anything else, that value will be pushed +onto the end of the result array. + +install +======= + +With [npm](http://npmjs.org) do: + +``` +npm install concat-map +``` + +license +======= + +MIT + +notes +===== + +This module was written while sitting high above the ground in a tree. diff --git a/node_modules/concat-map/example/map.js b/node_modules/concat-map/example/map.js new file mode 100644 index 00000000..33656217 --- /dev/null +++ b/node_modules/concat-map/example/map.js @@ -0,0 +1,6 @@ +var concatMap = require('../'); +var xs = [ 1, 2, 3, 4, 5, 6 ]; +var ys = concatMap(xs, function (x) { + return x % 2 ? [ x - 0.1, x, x + 0.1 ] : []; +}); +console.dir(ys); diff --git a/node_modules/concat-map/index.js b/node_modules/concat-map/index.js new file mode 100644 index 00000000..b29a7812 --- /dev/null +++ b/node_modules/concat-map/index.js @@ -0,0 +1,13 @@ +module.exports = function (xs, fn) { + var res = []; + for (var i = 0; i < xs.length; i++) { + var x = fn(xs[i], i); + if (isArray(x)) res.push.apply(res, x); + else res.push(x); + } + return res; +}; + +var isArray = Array.isArray || function (xs) { + return Object.prototype.toString.call(xs) === '[object Array]'; +}; diff --git a/node_modules/concat-map/package.json b/node_modules/concat-map/package.json new file mode 100644 index 00000000..36d32b09 --- /dev/null +++ b/node_modules/concat-map/package.json @@ -0,0 +1,88 @@ +{ + "_from": "concat-map@0.0.1", + "_id": "concat-map@0.0.1", + "_inBundle": false, + "_integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "_location": "/concat-map", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "concat-map@0.0.1", + "name": "concat-map", + "escapedName": "concat-map", + "rawSpec": "0.0.1", + "saveSpec": null, + "fetchSpec": "0.0.1" + }, + "_requiredBy": [ + "/brace-expansion" + ], + "_resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "_shasum": "d8a96bd77fd68df7793a73036a3ba0d5405d477b", + "_spec": "concat-map@0.0.1", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/brace-expansion", + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "bugs": { + "url": "https://github.com/substack/node-concat-map/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "concatenative mapdashery", + "devDependencies": { + "tape": "~2.4.0" + }, + "directories": { + "example": "example", + "test": "test" + }, + "homepage": "https://github.com/substack/node-concat-map#readme", + "keywords": [ + "concat", + "concatMap", + "map", + "functional", + "higher-order" + ], + "license": "MIT", + "main": "index.js", + "name": "concat-map", + "repository": { + "type": "git", + "url": "git://github.com/substack/node-concat-map.git" + }, + "scripts": { + "test": "tape test/*.js" + }, + "testling": { + "files": "test/*.js", + "browsers": { + "ie": [ + 6, + 7, + 8, + 9 + ], + "ff": [ + 3.5, + 10, + 15 + ], + "chrome": [ + 10, + 22 + ], + "safari": [ + 5.1 + ], + "opera": [ + 12 + ] + } + }, + "version": "0.0.1" +} diff --git a/node_modules/concat-map/test/map.js b/node_modules/concat-map/test/map.js new file mode 100644 index 00000000..fdbd7022 --- /dev/null +++ b/node_modules/concat-map/test/map.js @@ -0,0 +1,39 @@ +var concatMap = require('../'); +var test = require('tape'); + +test('empty or not', function (t) { + var xs = [ 1, 2, 3, 4, 5, 6 ]; + var ixes = []; + var ys = concatMap(xs, function (x, ix) { + ixes.push(ix); + return x % 2 ? [ x - 0.1, x, x + 0.1 ] : []; + }); + t.same(ys, [ 0.9, 1, 1.1, 2.9, 3, 3.1, 4.9, 5, 5.1 ]); + t.same(ixes, [ 0, 1, 2, 3, 4, 5 ]); + t.end(); +}); + +test('always something', function (t) { + var xs = [ 'a', 'b', 'c', 'd' ]; + var ys = concatMap(xs, function (x) { + return x === 'b' ? [ 'B', 'B', 'B' ] : [ x ]; + }); + t.same(ys, [ 'a', 'B', 'B', 'B', 'c', 'd' ]); + t.end(); +}); + +test('scalars', function (t) { + var xs = [ 'a', 'b', 'c', 'd' ]; + var ys = concatMap(xs, function (x) { + return x === 'b' ? [ 'B', 'B', 'B' ] : x; + }); + t.same(ys, [ 'a', 'B', 'B', 'B', 'c', 'd' ]); + t.end(); +}); + +test('undefs', function (t) { + var xs = [ 'a', 'b', 'c', 'd' ]; + var ys = concatMap(xs, function () {}); + t.same(ys, [ undefined, undefined, undefined, undefined ]); + t.end(); +}); diff --git a/node_modules/cross-spawn/CHANGELOG.md b/node_modules/cross-spawn/CHANGELOG.md new file mode 100644 index 00000000..ded9620b --- /dev/null +++ b/node_modules/cross-spawn/CHANGELOG.md @@ -0,0 +1,100 @@ +# Change Log + +All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + +
+## [6.0.5](https://github.com/moxystudio/node-cross-spawn/compare/v6.0.4...v6.0.5) (2018-03-02) + + +### Bug Fixes + +* avoid using deprecated Buffer constructor ([#94](https://github.com/moxystudio/node-cross-spawn/issues/94)) ([d5770df](https://github.com/moxystudio/node-cross-spawn/commit/d5770df)), closes [/nodejs.org/api/deprecations.html#deprecations_dep0005](https://github.com//nodejs.org/api/deprecations.html/issues/deprecations_dep0005) + + + + +## [6.0.4](https://github.com/moxystudio/node-cross-spawn/compare/v6.0.3...v6.0.4) (2018-01-31) + + +### Bug Fixes + +* fix paths being incorrectly normalized on unix ([06ee3c6](https://github.com/moxystudio/node-cross-spawn/commit/06ee3c6)), closes [#90](https://github.com/moxystudio/node-cross-spawn/issues/90) + + + + +## [6.0.3](https://github.com/moxystudio/node-cross-spawn/compare/v6.0.2...v6.0.3) (2018-01-23) + + + + +## [6.0.2](https://github.com/moxystudio/node-cross-spawn/compare/v6.0.1...v6.0.2) (2018-01-23) + + + + +## [6.0.1](https://github.com/moxystudio/node-cross-spawn/compare/v6.0.0...v6.0.1) (2018-01-23) + + + + +# [6.0.0](https://github.com/moxystudio/node-cross-spawn/compare/5.1.0...6.0.0) (2018-01-23) + + +### Bug Fixes + +* fix certain arguments not being correctly escaped or causing batch syntax error ([900cf10](https://github.com/moxystudio/node-cross-spawn/commit/900cf10)), closes [#82](https://github.com/moxystudio/node-cross-spawn/issues/82) [#51](https://github.com/moxystudio/node-cross-spawn/issues/51) +* fix commands as posix relatixe paths not working correctly, e.g.: `./my-command` ([900cf10](https://github.com/moxystudio/node-cross-spawn/commit/900cf10)) +* fix `options` argument being mutated ([900cf10](https://github.com/moxystudio/node-cross-spawn/commit/900cf10)) +* fix commands resolution when PATH was actually Path ([900cf10](https://github.com/moxystudio/node-cross-spawn/commit/900cf10)) + + +### Features + +* improve compliance with node's ENOENT errors ([900cf10](https://github.com/moxystudio/node-cross-spawn/commit/900cf10)) +* improve detection of node's shell option support ([900cf10](https://github.com/moxystudio/node-cross-spawn/commit/900cf10)) + + +### Chores + +* upgrade tooling +* upgrate project to es6 (node v4) + + +### BREAKING CHANGES + +* remove support for older nodejs versions, only `node >= 4` is supported + + + +## [5.1.0](https://github.com/moxystudio/node-cross-spawn/compare/5.0.1...5.1.0) (2017-02-26) + + +### Bug Fixes + +* fix `options.shell` support for NodeJS [v4.8](https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V4.md#4.8.0) + + + +## [5.0.1](https://github.com/moxystudio/node-cross-spawn/compare/5.0.0...5.0.1) (2016-11-04) + + +### Bug Fixes + +* fix `options.shell` support for NodeJS v7 + + + +# [5.0.0](https://github.com/moxystudio/node-cross-spawn/compare/4.0.2...5.0.0) (2016-10-30) + + +## Features + +* add support for `options.shell` +* improve parsing of shebangs by using [`shebang-command`](https://github.com/kevva/shebang-command) module + + +## Chores + +* refactor some code to make it more clear +* update README caveats diff --git a/node_modules/cross-spawn/LICENSE b/node_modules/cross-spawn/LICENSE new file mode 100644 index 00000000..8407b9a3 --- /dev/null +++ b/node_modules/cross-spawn/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018 Made With MOXY Lda + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/cross-spawn/README.md b/node_modules/cross-spawn/README.md new file mode 100644 index 00000000..e895cd7a --- /dev/null +++ b/node_modules/cross-spawn/README.md @@ -0,0 +1,94 @@ +# cross-spawn + +[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Build status][appveyor-image]][appveyor-url] [![Coverage Status][codecov-image]][codecov-url] [![Dependency status][david-dm-image]][david-dm-url] [![Dev Dependency status][david-dm-dev-image]][david-dm-dev-url] [![Greenkeeper badge][greenkeeper-image]][greenkeeper-url] + +[npm-url]:https://npmjs.org/package/cross-spawn +[downloads-image]:http://img.shields.io/npm/dm/cross-spawn.svg +[npm-image]:http://img.shields.io/npm/v/cross-spawn.svg +[travis-url]:https://travis-ci.org/moxystudio/node-cross-spawn +[travis-image]:http://img.shields.io/travis/moxystudio/node-cross-spawn/master.svg +[appveyor-url]:https://ci.appveyor.com/project/satazor/node-cross-spawn +[appveyor-image]:https://img.shields.io/appveyor/ci/satazor/node-cross-spawn/master.svg +[codecov-url]:https://codecov.io/gh/moxystudio/node-cross-spawn +[codecov-image]:https://img.shields.io/codecov/c/github/moxystudio/node-cross-spawn/master.svg +[david-dm-url]:https://david-dm.org/moxystudio/node-cross-spawn +[david-dm-image]:https://img.shields.io/david/moxystudio/node-cross-spawn.svg +[david-dm-dev-url]:https://david-dm.org/moxystudio/node-cross-spawn?type=dev +[david-dm-dev-image]:https://img.shields.io/david/dev/moxystudio/node-cross-spawn.svg +[greenkeeper-image]:https://badges.greenkeeper.io/moxystudio/node-cross-spawn.svg +[greenkeeper-url]:https://greenkeeper.io/ + +A cross platform solution to node's spawn and spawnSync. + + +## Installation + +`$ npm install cross-spawn` + + +## Why + +Node has issues when using spawn on Windows: + +- It ignores [PATHEXT](https://github.com/joyent/node/issues/2318) +- It does not support [shebangs](https://en.wikipedia.org/wiki/Shebang_(Unix)) +- Has problems running commands with [spaces](https://github.com/nodejs/node/issues/7367) +- Has problems running commands with posix relative paths (e.g.: `./my-folder/my-executable`) +- Has an [issue](https://github.com/moxystudio/node-cross-spawn/issues/82) with command shims (files in `node_modules/.bin/`), where arguments with quotes and parenthesis would result in [invalid syntax error](https://github.com/moxystudio/node-cross-spawn/blob/e77b8f22a416db46b6196767bcd35601d7e11d54/test/index.test.js#L149) +- No `options.shell` support on node `` where `` must not contain any arguments. +If you would like to have the shebang support improved, feel free to contribute via a pull-request. + +Remember to always test your code on Windows! + + +## Tests + +`$ npm test` +`$ npm test -- --watch` during development + +## License + +Released under the [MIT License](http://www.opensource.org/licenses/mit-license.php). diff --git a/node_modules/cross-spawn/index.js b/node_modules/cross-spawn/index.js new file mode 100644 index 00000000..5509742c --- /dev/null +++ b/node_modules/cross-spawn/index.js @@ -0,0 +1,39 @@ +'use strict'; + +const cp = require('child_process'); +const parse = require('./lib/parse'); +const enoent = require('./lib/enoent'); + +function spawn(command, args, options) { + // Parse the arguments + const parsed = parse(command, args, options); + + // Spawn the child process + const spawned = cp.spawn(parsed.command, parsed.args, parsed.options); + + // Hook into child process "exit" event to emit an error if the command + // does not exists, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16 + enoent.hookChildProcess(spawned, parsed); + + return spawned; +} + +function spawnSync(command, args, options) { + // Parse the arguments + const parsed = parse(command, args, options); + + // Spawn the child process + const result = cp.spawnSync(parsed.command, parsed.args, parsed.options); + + // Analyze if the command does not exist, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16 + result.error = result.error || enoent.verifyENOENTSync(result.status, parsed); + + return result; +} + +module.exports = spawn; +module.exports.spawn = spawn; +module.exports.sync = spawnSync; + +module.exports._parse = parse; +module.exports._enoent = enoent; diff --git a/node_modules/cross-spawn/lib/enoent.js b/node_modules/cross-spawn/lib/enoent.js new file mode 100644 index 00000000..14df9b62 --- /dev/null +++ b/node_modules/cross-spawn/lib/enoent.js @@ -0,0 +1,59 @@ +'use strict'; + +const isWin = process.platform === 'win32'; + +function notFoundError(original, syscall) { + return Object.assign(new Error(`${syscall} ${original.command} ENOENT`), { + code: 'ENOENT', + errno: 'ENOENT', + syscall: `${syscall} ${original.command}`, + path: original.command, + spawnargs: original.args, + }); +} + +function hookChildProcess(cp, parsed) { + if (!isWin) { + return; + } + + const originalEmit = cp.emit; + + cp.emit = function (name, arg1) { + // If emitting "exit" event and exit code is 1, we need to check if + // the command exists and emit an "error" instead + // See https://github.com/IndigoUnited/node-cross-spawn/issues/16 + if (name === 'exit') { + const err = verifyENOENT(arg1, parsed, 'spawn'); + + if (err) { + return originalEmit.call(cp, 'error', err); + } + } + + return originalEmit.apply(cp, arguments); // eslint-disable-line prefer-rest-params + }; +} + +function verifyENOENT(status, parsed) { + if (isWin && status === 1 && !parsed.file) { + return notFoundError(parsed.original, 'spawn'); + } + + return null; +} + +function verifyENOENTSync(status, parsed) { + if (isWin && status === 1 && !parsed.file) { + return notFoundError(parsed.original, 'spawnSync'); + } + + return null; +} + +module.exports = { + hookChildProcess, + verifyENOENT, + verifyENOENTSync, + notFoundError, +}; diff --git a/node_modules/cross-spawn/lib/parse.js b/node_modules/cross-spawn/lib/parse.js new file mode 100644 index 00000000..962827a9 --- /dev/null +++ b/node_modules/cross-spawn/lib/parse.js @@ -0,0 +1,125 @@ +'use strict'; + +const path = require('path'); +const niceTry = require('nice-try'); +const resolveCommand = require('./util/resolveCommand'); +const escape = require('./util/escape'); +const readShebang = require('./util/readShebang'); +const semver = require('semver'); + +const isWin = process.platform === 'win32'; +const isExecutableRegExp = /\.(?:com|exe)$/i; +const isCmdShimRegExp = /node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i; + +// `options.shell` is supported in Node ^4.8.0, ^5.7.0 and >= 6.0.0 +const supportsShellOption = niceTry(() => semver.satisfies(process.version, '^4.8.0 || ^5.7.0 || >= 6.0.0', true)) || false; + +function detectShebang(parsed) { + parsed.file = resolveCommand(parsed); + + const shebang = parsed.file && readShebang(parsed.file); + + if (shebang) { + parsed.args.unshift(parsed.file); + parsed.command = shebang; + + return resolveCommand(parsed); + } + + return parsed.file; +} + +function parseNonShell(parsed) { + if (!isWin) { + return parsed; + } + + // Detect & add support for shebangs + const commandFile = detectShebang(parsed); + + // We don't need a shell if the command filename is an executable + const needsShell = !isExecutableRegExp.test(commandFile); + + // If a shell is required, use cmd.exe and take care of escaping everything correctly + // Note that `forceShell` is an hidden option used only in tests + if (parsed.options.forceShell || needsShell) { + // Need to double escape meta chars if the command is a cmd-shim located in `node_modules/.bin/` + // The cmd-shim simply calls execute the package bin file with NodeJS, proxying any argument + // Because the escape of metachars with ^ gets interpreted when the cmd.exe is first called, + // we need to double escape them + const needsDoubleEscapeMetaChars = isCmdShimRegExp.test(commandFile); + + // Normalize posix paths into OS compatible paths (e.g.: foo/bar -> foo\bar) + // This is necessary otherwise it will always fail with ENOENT in those cases + parsed.command = path.normalize(parsed.command); + + // Escape command & arguments + parsed.command = escape.command(parsed.command); + parsed.args = parsed.args.map((arg) => escape.argument(arg, needsDoubleEscapeMetaChars)); + + const shellCommand = [parsed.command].concat(parsed.args).join(' '); + + parsed.args = ['/d', '/s', '/c', `"${shellCommand}"`]; + parsed.command = process.env.comspec || 'cmd.exe'; + parsed.options.windowsVerbatimArguments = true; // Tell node's spawn that the arguments are already escaped + } + + return parsed; +} + +function parseShell(parsed) { + // If node supports the shell option, there's no need to mimic its behavior + if (supportsShellOption) { + return parsed; + } + + // Mimic node shell option + // See https://github.com/nodejs/node/blob/b9f6a2dc059a1062776133f3d4fd848c4da7d150/lib/child_process.js#L335 + const shellCommand = [parsed.command].concat(parsed.args).join(' '); + + if (isWin) { + parsed.command = typeof parsed.options.shell === 'string' ? parsed.options.shell : process.env.comspec || 'cmd.exe'; + parsed.args = ['/d', '/s', '/c', `"${shellCommand}"`]; + parsed.options.windowsVerbatimArguments = true; // Tell node's spawn that the arguments are already escaped + } else { + if (typeof parsed.options.shell === 'string') { + parsed.command = parsed.options.shell; + } else if (process.platform === 'android') { + parsed.command = '/system/bin/sh'; + } else { + parsed.command = '/bin/sh'; + } + + parsed.args = ['-c', shellCommand]; + } + + return parsed; +} + +function parse(command, args, options) { + // Normalize arguments, similar to nodejs + if (args && !Array.isArray(args)) { + options = args; + args = null; + } + + args = args ? args.slice(0) : []; // Clone array to avoid changing the original + options = Object.assign({}, options); // Clone object to avoid changing the original + + // Build our parsed object + const parsed = { + command, + args, + options, + file: undefined, + original: { + command, + args, + }, + }; + + // Delegate further parsing to shell or non-shell + return options.shell ? parseShell(parsed) : parseNonShell(parsed); +} + +module.exports = parse; diff --git a/node_modules/cross-spawn/lib/util/escape.js b/node_modules/cross-spawn/lib/util/escape.js new file mode 100644 index 00000000..b0bb84c3 --- /dev/null +++ b/node_modules/cross-spawn/lib/util/escape.js @@ -0,0 +1,45 @@ +'use strict'; + +// See http://www.robvanderwoude.com/escapechars.php +const metaCharsRegExp = /([()\][%!^"`<>&|;, *?])/g; + +function escapeCommand(arg) { + // Escape meta chars + arg = arg.replace(metaCharsRegExp, '^$1'); + + return arg; +} + +function escapeArgument(arg, doubleEscapeMetaChars) { + // Convert to string + arg = `${arg}`; + + // Algorithm below is based on https://qntm.org/cmd + + // Sequence of backslashes followed by a double quote: + // double up all the backslashes and escape the double quote + arg = arg.replace(/(\\*)"/g, '$1$1\\"'); + + // Sequence of backslashes followed by the end of the string + // (which will become a double quote later): + // double up all the backslashes + arg = arg.replace(/(\\*)$/, '$1$1'); + + // All other backslashes occur literally + + // Quote the whole thing: + arg = `"${arg}"`; + + // Escape meta chars + arg = arg.replace(metaCharsRegExp, '^$1'); + + // Double escape meta chars if necessary + if (doubleEscapeMetaChars) { + arg = arg.replace(metaCharsRegExp, '^$1'); + } + + return arg; +} + +module.exports.command = escapeCommand; +module.exports.argument = escapeArgument; diff --git a/node_modules/cross-spawn/lib/util/readShebang.js b/node_modules/cross-spawn/lib/util/readShebang.js new file mode 100644 index 00000000..bd4f1280 --- /dev/null +++ b/node_modules/cross-spawn/lib/util/readShebang.js @@ -0,0 +1,32 @@ +'use strict'; + +const fs = require('fs'); +const shebangCommand = require('shebang-command'); + +function readShebang(command) { + // Read the first 150 bytes from the file + const size = 150; + let buffer; + + if (Buffer.alloc) { + // Node.js v4.5+ / v5.10+ + buffer = Buffer.alloc(size); + } else { + // Old Node.js API + buffer = new Buffer(size); + buffer.fill(0); // zero-fill + } + + let fd; + + try { + fd = fs.openSync(command, 'r'); + fs.readSync(fd, buffer, 0, size, 0); + fs.closeSync(fd); + } catch (e) { /* Empty */ } + + // Attempt to extract shebang (null is returned if not a shebang) + return shebangCommand(buffer.toString()); +} + +module.exports = readShebang; diff --git a/node_modules/cross-spawn/lib/util/resolveCommand.js b/node_modules/cross-spawn/lib/util/resolveCommand.js new file mode 100644 index 00000000..2fd5ad27 --- /dev/null +++ b/node_modules/cross-spawn/lib/util/resolveCommand.js @@ -0,0 +1,47 @@ +'use strict'; + +const path = require('path'); +const which = require('which'); +const pathKey = require('path-key')(); + +function resolveCommandAttempt(parsed, withoutPathExt) { + const cwd = process.cwd(); + const hasCustomCwd = parsed.options.cwd != null; + + // If a custom `cwd` was specified, we need to change the process cwd + // because `which` will do stat calls but does not support a custom cwd + if (hasCustomCwd) { + try { + process.chdir(parsed.options.cwd); + } catch (err) { + /* Empty */ + } + } + + let resolved; + + try { + resolved = which.sync(parsed.command, { + path: (parsed.options.env || process.env)[pathKey], + pathExt: withoutPathExt ? path.delimiter : undefined, + }); + } catch (e) { + /* Empty */ + } finally { + process.chdir(cwd); + } + + // If we successfully resolved, ensure that an absolute path is returned + // Note that when a custom `cwd` was used, we need to resolve to an absolute path based on it + if (resolved) { + resolved = path.resolve(hasCustomCwd ? parsed.options.cwd : '', resolved); + } + + return resolved; +} + +function resolveCommand(parsed) { + return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, true); +} + +module.exports = resolveCommand; diff --git a/node_modules/cross-spawn/package.json b/node_modules/cross-spawn/package.json new file mode 100644 index 00000000..74b79682 --- /dev/null +++ b/node_modules/cross-spawn/package.json @@ -0,0 +1,107 @@ +{ + "_from": "cross-spawn@^6.0.0", + "_id": "cross-spawn@6.0.5", + "_inBundle": false, + "_integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "_location": "/cross-spawn", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "cross-spawn@^6.0.0", + "name": "cross-spawn", + "escapedName": "cross-spawn", + "rawSpec": "^6.0.0", + "saveSpec": null, + "fetchSpec": "^6.0.0" + }, + "_requiredBy": [ + "/execa" + ], + "_resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "_shasum": "4a5ec7c64dfae22c3a14124dbacdee846d80cbc4", + "_spec": "cross-spawn@^6.0.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/execa", + "author": { + "name": "André Cruz", + "email": "andre@moxy.studio" + }, + "bugs": { + "url": "https://github.com/moxystudio/node-cross-spawn/issues" + }, + "bundleDependencies": false, + "commitlint": { + "extends": [ + "@commitlint/config-conventional" + ] + }, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "deprecated": false, + "description": "Cross platform child_process#spawn and child_process#spawnSync", + "devDependencies": { + "@commitlint/cli": "^6.0.0", + "@commitlint/config-conventional": "^6.0.2", + "babel-core": "^6.26.0", + "babel-jest": "^22.1.0", + "babel-preset-moxy": "^2.2.1", + "eslint": "^4.3.0", + "eslint-config-moxy": "^5.0.0", + "husky": "^0.14.3", + "jest": "^22.0.0", + "lint-staged": "^7.0.0", + "mkdirp": "^0.5.1", + "regenerator-runtime": "^0.11.1", + "rimraf": "^2.6.2", + "standard-version": "^4.2.0" + }, + "engines": { + "node": ">=4.8" + }, + "files": [ + "lib" + ], + "homepage": "https://github.com/moxystudio/node-cross-spawn", + "keywords": [ + "spawn", + "spawnSync", + "windows", + "cross-platform", + "path-ext", + "shebang", + "cmd", + "execute" + ], + "license": "MIT", + "lint-staged": { + "*.js": [ + "eslint --fix", + "git add" + ] + }, + "main": "index.js", + "name": "cross-spawn", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/moxystudio/node-cross-spawn.git" + }, + "scripts": { + "commitmsg": "commitlint -e $GIT_PARAMS", + "lint": "eslint .", + "precommit": "lint-staged", + "prerelease": "npm t && npm run lint", + "release": "standard-version", + "test": "jest --env node --coverage" + }, + "standard-version": { + "scripts": { + "posttag": "git push --follow-tags origin master && npm publish" + } + }, + "version": "6.0.5" +} diff --git a/node_modules/crypt/LICENSE.mkd b/node_modules/crypt/LICENSE.mkd new file mode 100644 index 00000000..96d4c428 --- /dev/null +++ b/node_modules/crypt/LICENSE.mkd @@ -0,0 +1,27 @@ +Copyright © 2011, Paul Vorbach. All rights reserved. +Copyright © 2009, Jeff Mott. All rights reserved. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. +* Neither the name Crypto-JS nor the names of its contributors may be used to + endorse or promote products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/crypt/README.mkd b/node_modules/crypt/README.mkd new file mode 100644 index 00000000..2b1169fc --- /dev/null +++ b/node_modules/crypt/README.mkd @@ -0,0 +1 @@ +**crypt** provides utilities for encryption and hashing diff --git a/node_modules/crypt/crypt.js b/node_modules/crypt/crypt.js new file mode 100644 index 00000000..4ec09076 --- /dev/null +++ b/node_modules/crypt/crypt.js @@ -0,0 +1,96 @@ +(function() { + var base64map + = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/', + + crypt = { + // Bit-wise rotation left + rotl: function(n, b) { + return (n << b) | (n >>> (32 - b)); + }, + + // Bit-wise rotation right + rotr: function(n, b) { + return (n << (32 - b)) | (n >>> b); + }, + + // Swap big-endian to little-endian and vice versa + endian: function(n) { + // If number given, swap endian + if (n.constructor == Number) { + return crypt.rotl(n, 8) & 0x00FF00FF | crypt.rotl(n, 24) & 0xFF00FF00; + } + + // Else, assume array and swap all items + for (var i = 0; i < n.length; i++) + n[i] = crypt.endian(n[i]); + return n; + }, + + // Generate an array of any length of random bytes + randomBytes: function(n) { + for (var bytes = []; n > 0; n--) + bytes.push(Math.floor(Math.random() * 256)); + return bytes; + }, + + // Convert a byte array to big-endian 32-bit words + bytesToWords: function(bytes) { + for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8) + words[b >>> 5] |= bytes[i] << (24 - b % 32); + return words; + }, + + // Convert big-endian 32-bit words to a byte array + wordsToBytes: function(words) { + for (var bytes = [], b = 0; b < words.length * 32; b += 8) + bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF); + return bytes; + }, + + // Convert a byte array to a hex string + bytesToHex: function(bytes) { + for (var hex = [], i = 0; i < bytes.length; i++) { + hex.push((bytes[i] >>> 4).toString(16)); + hex.push((bytes[i] & 0xF).toString(16)); + } + return hex.join(''); + }, + + // Convert a hex string to a byte array + hexToBytes: function(hex) { + for (var bytes = [], c = 0; c < hex.length; c += 2) + bytes.push(parseInt(hex.substr(c, 2), 16)); + return bytes; + }, + + // Convert a byte array to a base-64 string + bytesToBase64: function(bytes) { + for (var base64 = [], i = 0; i < bytes.length; i += 3) { + var triplet = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2]; + for (var j = 0; j < 4; j++) + if (i * 8 + j * 6 <= bytes.length * 8) + base64.push(base64map.charAt((triplet >>> 6 * (3 - j)) & 0x3F)); + else + base64.push('='); + } + return base64.join(''); + }, + + // Convert a base-64 string to a byte array + base64ToBytes: function(base64) { + // Remove non-base-64 characters + base64 = base64.replace(/[^A-Z0-9+\/]/ig, ''); + + for (var bytes = [], i = 0, imod4 = 0; i < base64.length; + imod4 = ++i % 4) { + if (imod4 == 0) continue; + bytes.push(((base64map.indexOf(base64.charAt(i - 1)) + & (Math.pow(2, -2 * imod4 + 8) - 1)) << (imod4 * 2)) + | (base64map.indexOf(base64.charAt(i)) >>> (6 - imod4 * 2))); + } + return bytes; + } + }; + + module.exports = crypt; +})(); diff --git a/node_modules/crypt/package.json b/node_modules/crypt/package.json new file mode 100644 index 00000000..4057778b --- /dev/null +++ b/node_modules/crypt/package.json @@ -0,0 +1,52 @@ +{ + "_from": "crypt@~0.0.1", + "_id": "crypt@0.0.2", + "_inBundle": false, + "_integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", + "_location": "/crypt", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "crypt@~0.0.1", + "name": "crypt", + "escapedName": "crypt", + "rawSpec": "~0.0.1", + "saveSpec": null, + "fetchSpec": "~0.0.1" + }, + "_requiredBy": [ + "/md5" + ], + "_resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "_shasum": "88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b", + "_spec": "crypt@~0.0.1", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/md5", + "author": { + "name": "Paul Vorbach", + "email": "paul@vorb.de", + "url": "http://vorb.de" + }, + "bugs": { + "url": "https://github.com/pvorb/node-crypt/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "utilities for encryption and hashing", + "engines": { + "node": "*" + }, + "homepage": "https://github.com/pvorb/node-crypt#readme", + "license": "BSD-3-Clause", + "main": "crypt.js", + "name": "crypt", + "repository": { + "type": "git", + "url": "git://github.com/pvorb/node-crypt.git" + }, + "tags": [ + "hash", + "security" + ], + "version": "0.0.2" +} diff --git a/node_modules/curry2/.gitattributes b/node_modules/curry2/.gitattributes new file mode 100644 index 00000000..176a458f --- /dev/null +++ b/node_modules/curry2/.gitattributes @@ -0,0 +1 @@ +* text=auto diff --git a/node_modules/curry2/.npmignore b/node_modules/curry2/.npmignore new file mode 100644 index 00000000..af07c343 --- /dev/null +++ b/node_modules/curry2/.npmignore @@ -0,0 +1,7 @@ +test +test.js +src +Makefile +contributing.md +.editorconfig +.travis.yml diff --git a/node_modules/curry2/changelog.md b/node_modules/curry2/changelog.md new file mode 100644 index 00000000..8dbd6a67 --- /dev/null +++ b/node_modules/curry2/changelog.md @@ -0,0 +1,23 @@ +# Change Log +All notable changes to this project will be documented in this file (keepachangelog.com). + +## 1.0.3 - 2016-03-01 +### Added +- Add keywords. + +## 1.0.2 - 2016-03-01 +### Added +- Add keywords. + +## 1.0.1 - 2016-02-03 +### Fixed +- Fixed bind polyfill based on comment by @adriengibrat + +## 1.0.0 - 2016-01-21 +### Added +- Add `Function.prototype.bind` polyfill. +- When 0 arguments applied, return function. + +## 0.1.0 - 2015-05-15 +### Added +- Initial Version. diff --git a/node_modules/curry2/index.js b/node_modules/curry2/index.js new file mode 100644 index 00000000..a5c9d588 --- /dev/null +++ b/node_modules/curry2/index.js @@ -0,0 +1,42 @@ +'use strict' + +/*! + * imports. + */ + +var bind = Function.prototype.bind || require('fast-bind') + +/*! + * exports. + */ + +module.exports = curry2 + +/** + * Curry a binary function. + * + * @param {Function} fn + * Binary function to curry. + * + * @param {Object} [self] + * Function `this` context. + * + * @return {Function|*} + * If partially applied, return unary function, otherwise, return result of full application. + */ + +function curry2 (fn, self) { + var out = function () { + if (arguments.length === 0) return out + + return arguments.length > 1 + ? fn.apply(self, arguments) + : bind.call(fn, self, arguments[0]) + } + + out.uncurry = function uncurry () { + return fn + } + + return out +} diff --git a/node_modules/curry2/license b/node_modules/curry2/license new file mode 100644 index 00000000..69510cbe --- /dev/null +++ b/node_modules/curry2/license @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) Wil Moore III + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/curry2/package.json b/node_modules/curry2/package.json new file mode 100644 index 00000000..a9cf335e --- /dev/null +++ b/node_modules/curry2/package.json @@ -0,0 +1,86 @@ +{ + "_from": "curry2@^1.0.0", + "_id": "curry2@1.0.3", + "_inBundle": false, + "_integrity": "sha1-OBkdVfEGC/6kfKCACThbuHj2YS8=", + "_location": "/curry2", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "curry2@^1.0.0", + "name": "curry2", + "escapedName": "curry2", + "rawSpec": "^1.0.0", + "saveSpec": null, + "fetchSpec": "^1.0.0" + }, + "_requiredBy": [ + "/selectn" + ], + "_resolved": "https://registry.npmjs.org/curry2/-/curry2-1.0.3.tgz", + "_shasum": "38191d55f1060bfea47ca08009385bb878f6612f", + "_spec": "curry2@^1.0.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/selectn", + "author": { + "name": "Wil Moore III", + "email": "wil.moore@wilmoore.com" + }, + "bugs": { + "url": "https://github.com/wilmoore/curry2.js/issues" + }, + "bundleDependencies": false, + "dependencies": { + "fast-bind": "^1.0.0" + }, + "deprecated": false, + "description": "Curry a binary function.", + "devDependencies": { + "dependency-check": "^2.4.0", + "fixpack": "^2.2.0", + "istanbul": "^0.3.13", + "nodemon": "^1.3.7", + "standard": "^3.7.1", + "tap-spec": "^2.2.2", + "tape": "^4.0.0", + "tape-catch": "^1.0.4" + }, + "homepage": "https://github.com/wilmoore/curry2.js", + "keywords": [ + "application", + "arguments", + "auto curry", + "auto-curry", + "binary", + "binary function", + "binary functions", + "curried", + "curry", + "curry2", + "currying", + "full application", + "partial application", + "uncurry" + ], + "license": "MIT", + "main": "index.js", + "name": "curry2", + "preferGlobal": false, + "private": false, + "repository": { + "type": "git", + "url": "git+https://github.com/wilmoore/curry2.js.git" + }, + "scripts": { + "cover": "istanbul cover test.js", + "dependency-check": "dependency-check ./package.json && dependency-check ./package.json --unused --no-dev", + "dev": "nodemon -x 'npm run test --silent' -e 'js json'", + "fixpack": "fixpack", + "release-major": "npm version major && git push --follow-tags && npm publish", + "release-minor": "npm version minor && git push --follow-tags && npm publish", + "release-patch": "npm version patch && git push --follow-tags && npm publish", + "standard": "standard", + "test": "npm run dependency-check && npm run standard --silent && node test.js | tap-spec" + }, + "version": "1.0.3" +} diff --git a/node_modules/curry2/readme.md b/node_modules/curry2/readme.md new file mode 100644 index 00000000..86c3af2b --- /dev/null +++ b/node_modules/curry2/readme.md @@ -0,0 +1,118 @@ +# curry2 +> Curry a binary function. + +[![Build Status](http://img.shields.io/travis/wilmoore/curry2.js.svg)](https://travis-ci.org/wilmoore/curry2.js) [![Code Climate](https://codeclimate.com/github/wilmoore/curry2.js/badges/gpa.svg)](https://codeclimate.com/github/wilmoore/curry2.js) [![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat)](https://github.com/feross/standard) + +```shell +npm install curry2 --save +``` + +> You can also use Duo, Bower or [download the files manually](https://github.com/wilmoore/curry2.js/releases). + +###### npm stats + +[![npm](https://img.shields.io/npm/v/curry2.svg)](https://www.npmjs.org/package/curry2) [![NPM downloads](http://img.shields.io/npm/dm/curry2.svg)](https://www.npmjs.org/package/curry2) [![Dependency Status](https://gemnasium.com/wilmoore/curry2.js.svg)](https://gemnasium.com/wilmoore/curry2.js) + +## API Example + +###### require + +```js +var curry2 = require('curry2') +``` + +###### function to curry + +```js +var add = curry2(function (a, b) { + return a + b +}) +``` + +###### full application + +```js +add(5, 2) +//=> 7 +``` + +###### partial application + +```js +var add10 = add(10) +add(5) +//=> 15 +``` + +###### iteratee + +```js +[100, 200, 300].map(add10) +//=> [ 110, 210, 310 ] +``` + +###### uncurry + +```js +var orig = add.uncurry() + +typeof orig +//=> 'function' + +orig.length +//=> 2 +``` + +## Features + + - Binary functions...that's it. + - Will always be less than 20 LOC (not including comments). + - No dependencies. + +## Anti-Features + + - Will not attempt to curry n-ary functions. + - Will never `eval` your functions. + +## Limitations + + - You will lose `fn.name`. + +## API + +### `curry2(fn)` + +###### arguments + + - `fn: (Function)` Binary function to curry. + - `[self]: (Object)` Function `this` context. + +###### returns + + - `(Function|*)` If partially applied, return unary function, otherwise, return result of full application.. + +### `.uncurry()` + +###### returns + + - `(Function)` returns original function. + +## Reference + + - [Currying](https://en.wikipedia.org/wiki/Currying) + +## Alternatives + + - [curry](https://www.npmjs.com/package/curry) + - [dyn-curry](https://www.npmjs.com/package/dyn-curry) + - [currymember](https://www.npmjs.com/package/currymember) + - [curryable](https://www.npmjs.com/package/curryable) + - [fk](https://www.npmjs.com/package/fk) + +## Contributing + +> SEE: [contributing.md](contributing.md) + +## Licenses + +[![GitHub license](https://img.shields.io/github/license/wilmoore/curry2.js.svg)](https://github.com/wilmoore/curry2.js/blob/master/license) diff --git a/node_modules/dotsplit.js/.gitattributes b/node_modules/dotsplit.js/.gitattributes new file mode 100644 index 00000000..176a458f --- /dev/null +++ b/node_modules/dotsplit.js/.gitattributes @@ -0,0 +1 @@ +* text=auto diff --git a/node_modules/dotsplit.js/.npmignore b/node_modules/dotsplit.js/.npmignore new file mode 100644 index 00000000..af07c343 --- /dev/null +++ b/node_modules/dotsplit.js/.npmignore @@ -0,0 +1,7 @@ +test +test.js +src +Makefile +contributing.md +.editorconfig +.travis.yml diff --git a/node_modules/dotsplit.js/changelog.md b/node_modules/dotsplit.js/changelog.md new file mode 100644 index 00000000..d068ccfc --- /dev/null +++ b/node_modules/dotsplit.js/changelog.md @@ -0,0 +1,37 @@ +# Change Log +All notable changes to this project will be documented in this file (keepachangelog.com). + +## 1.1.0 - 2017-02-07 +### Removed +- Removed all external dependencies. + +## 1.0.3 - 2016-01-24 +### Fixed +- Fixed bug where passing non-string values was throwing a TypeError. + +## 1.0.2 - 2016-01-24 +### Changed +- Updated dev dependencies. + +## 1.0.1 - 2016-01-24 +### Fixed +- Fixed bug where empty strings or falsey values result in an error being thrown. + +## 1.0.0 - 2016-01-24 +### Removed +- Dropped support for `component` and `volo` package managers. +- Dropped `makefile` in favor of `npm run …` scripts. + +### Added +- Add `.{editorconfig,gitattributes,npmignore}`. +- Add `{changelog,contributing}.md`. +- Add `npm run …` scripts. + +### Changed +- Changed `.map` to `map` via (`npm install arraymap`). +- Changed tests from `mocha` + `chai` to `tape`. +- Updated `.travis.yml` and `.gitignore`. + +## 0.2.0 - 2013-11-20 +### Added +- Initial Version. diff --git a/node_modules/dotsplit.js/index.js b/node_modules/dotsplit.js/index.js new file mode 100644 index 00000000..5faf8bcb --- /dev/null +++ b/node_modules/dotsplit.js/index.js @@ -0,0 +1,82 @@ +'use strict' + +var toString = Object.prototype.toString + +/** + * Transform dot-delimited strings to array of strings. + * + * @param {String} string + * Dot-delimited string. + * + * @return {Array} + * Array of strings. + */ + +function dotsplit (string) { + var idx = -1 + var str = compact(normalize(string).split('.')) + var end = str.length + var out = [] + + while (++idx < end) { + out.push(todots(str[idx])) + } + + return out +} + +/** + * Replace escapes with a placeholder. + * + * @param {String} string + * Dot-delimited string. + * + * @return {String} + * Dot-delimited string with placeholders in place of escapes. + */ + +function normalize (string) { + return (toString.call(string) === '[object String]' ? string : '').replace(/\\\./g, '\uffff') +} + +/** + * Drop empty values from array. + * + * @param {Array} array + * Array of strings. + * + * @return {Array} + * Array of strings (empty values dropped). + */ + +function compact (arr) { + var idx = -1 + var end = arr.length + var out = [] + + while (++idx < end) { + if (arr[idx]) out.push(arr[idx]) + } + + return out +} + +/** + * Change placeholder to dots. + * + * @param {String} string + * Dot-delimited string with placeholders. + * + * @return {String} + * Dot-delimited string without placeholders. + */ + +function todots (string) { + return string.replace(/\uffff/g, '.') +} + +/*! + * exports. + */ + +module.exports = dotsplit diff --git a/node_modules/dotsplit.js/license b/node_modules/dotsplit.js/license new file mode 100644 index 00000000..69510cbe --- /dev/null +++ b/node_modules/dotsplit.js/license @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) Wil Moore III + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/dotsplit.js/package.json b/node_modules/dotsplit.js/package.json new file mode 100644 index 00000000..4e6dd08c --- /dev/null +++ b/node_modules/dotsplit.js/package.json @@ -0,0 +1,74 @@ +{ + "_from": "dotsplit.js@^1.0.3", + "_id": "dotsplit.js@1.1.0", + "_inBundle": false, + "_integrity": "sha1-JaI56r6SKpH/pdKhctbJ+4JFHgI=", + "_location": "/dotsplit.js", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "dotsplit.js@^1.0.3", + "name": "dotsplit.js", + "escapedName": "dotsplit.js", + "rawSpec": "^1.0.3", + "saveSpec": null, + "fetchSpec": "^1.0.3" + }, + "_requiredBy": [ + "/selectn" + ], + "_resolved": "https://registry.npmjs.org/dotsplit.js/-/dotsplit.js-1.1.0.tgz", + "_shasum": "25a239eabe922a91ffa5d2a172d6c9fb82451e02", + "_spec": "dotsplit.js@^1.0.3", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/selectn", + "author": { + "name": "Wil Moore III", + "email": "wil.moore@wilmoore.com" + }, + "bugs": { + "url": "https://github.com/wilmoore/dotsplit.js/issues" + }, + "bundleDependencies": false, + "dependencies": {}, + "deprecated": false, + "description": "Transform dot-delimited strings to array of strings for Node.js and the browser.", + "devDependencies": { + "dependency-check": "^2.4.0", + "fixpack": "^2.2.0", + "istanbul": "^0.4.2", + "nodemon": "^1.3.7", + "standard": "^5.4.1", + "tap-spec": "^4.1.1", + "tape": "^4.0.0", + "tape-catch": "^1.0.4" + }, + "homepage": "https://github.com/wilmoore/dotsplit.js", + "keywords": [ + "array", + "delimited", + "dot", + "namespace", + "split", + "string" + ], + "license": "MIT", + "main": "index.js", + "name": "dotsplit.js", + "preferGlobal": false, + "private": false, + "repository": { + "type": "git", + "url": "git+https://github.com/wilmoore/dotsplit.js.git" + }, + "scripts": { + "cover": "istanbul cover test.js", + "dependency-check": "dependency-check ./package.json && dependency-check ./package.json --unused --no-dev", + "dev": "nodemon -x 'npm run test --silent' -e 'js json'", + "fixpack": "fixpack", + "postversion": "git push --follow-tags && npm publish", + "standard": "standard", + "test": "npm run dependency-check && npm run standard --silent && node test.js | tap-spec" + }, + "version": "1.1.0" +} diff --git a/node_modules/dotsplit.js/readme.md b/node_modules/dotsplit.js/readme.md new file mode 100644 index 00000000..0810c6d2 --- /dev/null +++ b/node_modules/dotsplit.js/readme.md @@ -0,0 +1,52 @@ +# dotsplit.js +> Transform dot-delimited strings to array of strings for [Node.js][] and the browser. + +[![Build Status](http://img.shields.io/travis/wilmoore/dotsplit.js.svg)](https://travis-ci.org/wilmoore/dotsplit.js) [![Code Climate](https://codeclimate.com/github/wilmoore/dotsplit.js/badges/gpa.svg)](https://codeclimate.com/github/wilmoore/dotsplit.js) [![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat)](https://github.com/feross/standard) + +```shell +npm install dotsplit.js --save +``` + +> You can also use Duo, Bower or [download the files manually](https://github.com/wilmoore/dotsplit.js/releases). + +###### npm stats + +[![npm](https://img.shields.io/npm/v/dotsplit.js.svg)](https://www.npmjs.org/package/dotsplit.js) [![NPM downloads](http://img.shields.io/npm/dm/dotsplit.js.svg)](https://www.npmjs.org/package/dotsplit.js) [![David](https://img.shields.io/david/wilmoore/dotsplit.js.svg)](https://david-dm.org/wilmoore/dotsplit.js) + +## API Example + +#### Split on dot + +```js +dotsplit('group.0.section.a.seat.3') +//=> ['group', '0', 'section', 'a', 'seat', '3'] +``` + +#### Split on dot preserving escaped characters + +```js +dotsplit('01.document\\.png') +//=> ['01', 'document.png'] +``` + +## API + +### `dotsplit(String)` + +###### arguments + + - `string (String)` Dot-delimited string. + +###### returns + + - `(Array)` Array of strings. + +## Contributing + +> SEE: [contributing.md](contributing.md) + +## Licenses + +[![GitHub license](https://img.shields.io/github/license/wilmoore/dotsplit.js.svg)](https://github.com/wilmoore/dotsplit.js/blob/master/license) + +[Node.js]: https://nodejs.org/en/about diff --git a/node_modules/end-of-stream/LICENSE b/node_modules/end-of-stream/LICENSE new file mode 100644 index 00000000..757562ec --- /dev/null +++ b/node_modules/end-of-stream/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Mathias Buus + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/end-of-stream/README.md b/node_modules/end-of-stream/README.md new file mode 100644 index 00000000..f2560c93 --- /dev/null +++ b/node_modules/end-of-stream/README.md @@ -0,0 +1,52 @@ +# end-of-stream + +A node module that calls a callback when a readable/writable/duplex stream has completed or failed. + + npm install end-of-stream + +## Usage + +Simply pass a stream and a callback to the `eos`. +Both legacy streams, streams2 and stream3 are supported. + +``` js +var eos = require('end-of-stream'); + +eos(readableStream, function(err) { + // this will be set to the stream instance + if (err) return console.log('stream had an error or closed early'); + console.log('stream has ended', this === readableStream); +}); + +eos(writableStream, function(err) { + if (err) return console.log('stream had an error or closed early'); + console.log('stream has finished', this === writableStream); +}); + +eos(duplexStream, function(err) { + if (err) return console.log('stream had an error or closed early'); + console.log('stream has ended and finished', this === duplexStream); +}); + +eos(duplexStream, {readable:false}, function(err) { + if (err) return console.log('stream had an error or closed early'); + console.log('stream has finished but might still be readable'); +}); + +eos(duplexStream, {writable:false}, function(err) { + if (err) return console.log('stream had an error or closed early'); + console.log('stream has ended but might still be writable'); +}); + +eos(readableStream, {error:false}, function(err) { + // do not treat emit('error', err) as a end-of-stream +}); +``` + +## License + +MIT + +## Related + +`end-of-stream` is part of the [mississippi stream utility collection](https://github.com/maxogden/mississippi) which includes more useful stream modules similar to this one. diff --git a/node_modules/end-of-stream/index.js b/node_modules/end-of-stream/index.js new file mode 100644 index 00000000..be426c22 --- /dev/null +++ b/node_modules/end-of-stream/index.js @@ -0,0 +1,87 @@ +var once = require('once'); + +var noop = function() {}; + +var isRequest = function(stream) { + return stream.setHeader && typeof stream.abort === 'function'; +}; + +var isChildProcess = function(stream) { + return stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3 +}; + +var eos = function(stream, opts, callback) { + if (typeof opts === 'function') return eos(stream, null, opts); + if (!opts) opts = {}; + + callback = once(callback || noop); + + var ws = stream._writableState; + var rs = stream._readableState; + var readable = opts.readable || (opts.readable !== false && stream.readable); + var writable = opts.writable || (opts.writable !== false && stream.writable); + + var onlegacyfinish = function() { + if (!stream.writable) onfinish(); + }; + + var onfinish = function() { + writable = false; + if (!readable) callback.call(stream); + }; + + var onend = function() { + readable = false; + if (!writable) callback.call(stream); + }; + + var onexit = function(exitCode) { + callback.call(stream, exitCode ? new Error('exited with error code: ' + exitCode) : null); + }; + + var onerror = function(err) { + callback.call(stream, err); + }; + + var onclose = function() { + if (readable && !(rs && rs.ended)) return callback.call(stream, new Error('premature close')); + if (writable && !(ws && ws.ended)) return callback.call(stream, new Error('premature close')); + }; + + var onrequest = function() { + stream.req.on('finish', onfinish); + }; + + if (isRequest(stream)) { + stream.on('complete', onfinish); + stream.on('abort', onclose); + if (stream.req) onrequest(); + else stream.on('request', onrequest); + } else if (writable && !ws) { // legacy streams + stream.on('end', onlegacyfinish); + stream.on('close', onlegacyfinish); + } + + if (isChildProcess(stream)) stream.on('exit', onexit); + + stream.on('end', onend); + stream.on('finish', onfinish); + if (opts.error !== false) stream.on('error', onerror); + stream.on('close', onclose); + + return function() { + stream.removeListener('complete', onfinish); + stream.removeListener('abort', onclose); + stream.removeListener('request', onrequest); + if (stream.req) stream.req.removeListener('finish', onfinish); + stream.removeListener('end', onlegacyfinish); + stream.removeListener('close', onlegacyfinish); + stream.removeListener('finish', onfinish); + stream.removeListener('exit', onexit); + stream.removeListener('end', onend); + stream.removeListener('error', onerror); + stream.removeListener('close', onclose); + }; +}; + +module.exports = eos; diff --git a/node_modules/end-of-stream/package.json b/node_modules/end-of-stream/package.json new file mode 100644 index 00000000..bbd15f5a --- /dev/null +++ b/node_modules/end-of-stream/package.json @@ -0,0 +1,62 @@ +{ + "_from": "end-of-stream@^1.1.0", + "_id": "end-of-stream@1.4.1", + "_inBundle": false, + "_integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "_location": "/end-of-stream", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "end-of-stream@^1.1.0", + "name": "end-of-stream", + "escapedName": "end-of-stream", + "rawSpec": "^1.1.0", + "saveSpec": null, + "fetchSpec": "^1.1.0" + }, + "_requiredBy": [ + "/pump" + ], + "_resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "_shasum": "ed29634d19baba463b6ce6b80a37213eab71ec43", + "_spec": "end-of-stream@^1.1.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/pump", + "author": { + "name": "Mathias Buus", + "email": "mathiasbuus@gmail.com" + }, + "bugs": { + "url": "https://github.com/mafintosh/end-of-stream/issues" + }, + "bundleDependencies": false, + "dependencies": { + "once": "^1.4.0" + }, + "deprecated": false, + "description": "Call a callback when a readable/writable/duplex stream has completed or failed.", + "files": [ + "index.js" + ], + "homepage": "https://github.com/mafintosh/end-of-stream", + "keywords": [ + "stream", + "streams", + "callback", + "finish", + "close", + "end", + "wait" + ], + "license": "MIT", + "main": "index.js", + "name": "end-of-stream", + "repository": { + "type": "git", + "url": "git://github.com/mafintosh/end-of-stream.git" + }, + "scripts": { + "test": "node test.js" + }, + "version": "1.4.1" +} diff --git a/node_modules/execa/index.js b/node_modules/execa/index.js new file mode 100644 index 00000000..aad9ac88 --- /dev/null +++ b/node_modules/execa/index.js @@ -0,0 +1,361 @@ +'use strict'; +const path = require('path'); +const childProcess = require('child_process'); +const crossSpawn = require('cross-spawn'); +const stripEof = require('strip-eof'); +const npmRunPath = require('npm-run-path'); +const isStream = require('is-stream'); +const _getStream = require('get-stream'); +const pFinally = require('p-finally'); +const onExit = require('signal-exit'); +const errname = require('./lib/errname'); +const stdio = require('./lib/stdio'); + +const TEN_MEGABYTES = 1000 * 1000 * 10; + +function handleArgs(cmd, args, opts) { + let parsed; + + opts = Object.assign({ + extendEnv: true, + env: {} + }, opts); + + if (opts.extendEnv) { + opts.env = Object.assign({}, process.env, opts.env); + } + + if (opts.__winShell === true) { + delete opts.__winShell; + parsed = { + command: cmd, + args, + options: opts, + file: cmd, + original: { + cmd, + args + } + }; + } else { + parsed = crossSpawn._parse(cmd, args, opts); + } + + opts = Object.assign({ + maxBuffer: TEN_MEGABYTES, + buffer: true, + stripEof: true, + preferLocal: true, + localDir: parsed.options.cwd || process.cwd(), + encoding: 'utf8', + reject: true, + cleanup: true + }, parsed.options); + + opts.stdio = stdio(opts); + + if (opts.preferLocal) { + opts.env = npmRunPath.env(Object.assign({}, opts, {cwd: opts.localDir})); + } + + if (opts.detached) { + // #115 + opts.cleanup = false; + } + + if (process.platform === 'win32' && path.basename(parsed.command) === 'cmd.exe') { + // #116 + parsed.args.unshift('/q'); + } + + return { + cmd: parsed.command, + args: parsed.args, + opts, + parsed + }; +} + +function handleInput(spawned, input) { + if (input === null || input === undefined) { + return; + } + + if (isStream(input)) { + input.pipe(spawned.stdin); + } else { + spawned.stdin.end(input); + } +} + +function handleOutput(opts, val) { + if (val && opts.stripEof) { + val = stripEof(val); + } + + return val; +} + +function handleShell(fn, cmd, opts) { + let file = '/bin/sh'; + let args = ['-c', cmd]; + + opts = Object.assign({}, opts); + + if (process.platform === 'win32') { + opts.__winShell = true; + file = process.env.comspec || 'cmd.exe'; + args = ['/s', '/c', `"${cmd}"`]; + opts.windowsVerbatimArguments = true; + } + + if (opts.shell) { + file = opts.shell; + delete opts.shell; + } + + return fn(file, args, opts); +} + +function getStream(process, stream, {encoding, buffer, maxBuffer}) { + if (!process[stream]) { + return null; + } + + let ret; + + if (!buffer) { + // TODO: Use `ret = util.promisify(stream.finished)(process[stream]);` when targeting Node.js 10 + ret = new Promise((resolve, reject) => { + process[stream] + .once('end', resolve) + .once('error', reject); + }); + } else if (encoding) { + ret = _getStream(process[stream], { + encoding, + maxBuffer + }); + } else { + ret = _getStream.buffer(process[stream], {maxBuffer}); + } + + return ret.catch(err => { + err.stream = stream; + err.message = `${stream} ${err.message}`; + throw err; + }); +} + +function makeError(result, options) { + const {stdout, stderr} = result; + + let err = result.error; + const {code, signal} = result; + + const {parsed, joinedCmd} = options; + const timedOut = options.timedOut || false; + + if (!err) { + let output = ''; + + if (Array.isArray(parsed.opts.stdio)) { + if (parsed.opts.stdio[2] !== 'inherit') { + output += output.length > 0 ? stderr : `\n${stderr}`; + } + + if (parsed.opts.stdio[1] !== 'inherit') { + output += `\n${stdout}`; + } + } else if (parsed.opts.stdio !== 'inherit') { + output = `\n${stderr}${stdout}`; + } + + err = new Error(`Command failed: ${joinedCmd}${output}`); + err.code = code < 0 ? errname(code) : code; + } + + err.stdout = stdout; + err.stderr = stderr; + err.failed = true; + err.signal = signal || null; + err.cmd = joinedCmd; + err.timedOut = timedOut; + + return err; +} + +function joinCmd(cmd, args) { + let joinedCmd = cmd; + + if (Array.isArray(args) && args.length > 0) { + joinedCmd += ' ' + args.join(' '); + } + + return joinedCmd; +} + +module.exports = (cmd, args, opts) => { + const parsed = handleArgs(cmd, args, opts); + const {encoding, buffer, maxBuffer} = parsed.opts; + const joinedCmd = joinCmd(cmd, args); + + let spawned; + try { + spawned = childProcess.spawn(parsed.cmd, parsed.args, parsed.opts); + } catch (err) { + return Promise.reject(err); + } + + let removeExitHandler; + if (parsed.opts.cleanup) { + removeExitHandler = onExit(() => { + spawned.kill(); + }); + } + + let timeoutId = null; + let timedOut = false; + + const cleanup = () => { + if (timeoutId) { + clearTimeout(timeoutId); + timeoutId = null; + } + + if (removeExitHandler) { + removeExitHandler(); + } + }; + + if (parsed.opts.timeout > 0) { + timeoutId = setTimeout(() => { + timeoutId = null; + timedOut = true; + spawned.kill(parsed.opts.killSignal); + }, parsed.opts.timeout); + } + + const processDone = new Promise(resolve => { + spawned.on('exit', (code, signal) => { + cleanup(); + resolve({code, signal}); + }); + + spawned.on('error', err => { + cleanup(); + resolve({error: err}); + }); + + if (spawned.stdin) { + spawned.stdin.on('error', err => { + cleanup(); + resolve({error: err}); + }); + } + }); + + function destroy() { + if (spawned.stdout) { + spawned.stdout.destroy(); + } + + if (spawned.stderr) { + spawned.stderr.destroy(); + } + } + + const handlePromise = () => pFinally(Promise.all([ + processDone, + getStream(spawned, 'stdout', {encoding, buffer, maxBuffer}), + getStream(spawned, 'stderr', {encoding, buffer, maxBuffer}) + ]).then(arr => { + const result = arr[0]; + result.stdout = arr[1]; + result.stderr = arr[2]; + + if (result.error || result.code !== 0 || result.signal !== null) { + const err = makeError(result, { + joinedCmd, + parsed, + timedOut + }); + + // TODO: missing some timeout logic for killed + // https://github.com/nodejs/node/blob/master/lib/child_process.js#L203 + // err.killed = spawned.killed || killed; + err.killed = err.killed || spawned.killed; + + if (!parsed.opts.reject) { + return err; + } + + throw err; + } + + return { + stdout: handleOutput(parsed.opts, result.stdout), + stderr: handleOutput(parsed.opts, result.stderr), + code: 0, + failed: false, + killed: false, + signal: null, + cmd: joinedCmd, + timedOut: false + }; + }), destroy); + + crossSpawn._enoent.hookChildProcess(spawned, parsed.parsed); + + handleInput(spawned, parsed.opts.input); + + spawned.then = (onfulfilled, onrejected) => handlePromise().then(onfulfilled, onrejected); + spawned.catch = onrejected => handlePromise().catch(onrejected); + + return spawned; +}; + +// TODO: set `stderr: 'ignore'` when that option is implemented +module.exports.stdout = (...args) => module.exports(...args).then(x => x.stdout); + +// TODO: set `stdout: 'ignore'` when that option is implemented +module.exports.stderr = (...args) => module.exports(...args).then(x => x.stderr); + +module.exports.shell = (cmd, opts) => handleShell(module.exports, cmd, opts); + +module.exports.sync = (cmd, args, opts) => { + const parsed = handleArgs(cmd, args, opts); + const joinedCmd = joinCmd(cmd, args); + + if (isStream(parsed.opts.input)) { + throw new TypeError('The `input` option cannot be a stream in sync mode'); + } + + const result = childProcess.spawnSync(parsed.cmd, parsed.args, parsed.opts); + result.code = result.status; + + if (result.error || result.status !== 0 || result.signal !== null) { + const err = makeError(result, { + joinedCmd, + parsed + }); + + if (!parsed.opts.reject) { + return err; + } + + throw err; + } + + return { + stdout: handleOutput(parsed.opts, result.stdout), + stderr: handleOutput(parsed.opts, result.stderr), + code: 0, + failed: false, + signal: null, + cmd: joinedCmd, + timedOut: false + }; +}; + +module.exports.shellSync = (cmd, opts) => handleShell(module.exports.sync, cmd, opts); diff --git a/node_modules/execa/lib/errname.js b/node_modules/execa/lib/errname.js new file mode 100644 index 00000000..e367837b --- /dev/null +++ b/node_modules/execa/lib/errname.js @@ -0,0 +1,39 @@ +'use strict'; +// Older verions of Node.js might not have `util.getSystemErrorName()`. +// In that case, fall back to a deprecated internal. +const util = require('util'); + +let uv; + +if (typeof util.getSystemErrorName === 'function') { + module.exports = util.getSystemErrorName; +} else { + try { + uv = process.binding('uv'); + + if (typeof uv.errname !== 'function') { + throw new TypeError('uv.errname is not a function'); + } + } catch (err) { + console.error('execa/lib/errname: unable to establish process.binding(\'uv\')', err); + uv = null; + } + + module.exports = code => errname(uv, code); +} + +// Used for testing the fallback behavior +module.exports.__test__ = errname; + +function errname(uv, code) { + if (uv) { + return uv.errname(code); + } + + if (!(code < 0)) { + throw new Error('err >= 0'); + } + + return `Unknown system error ${code}`; +} + diff --git a/node_modules/execa/lib/stdio.js b/node_modules/execa/lib/stdio.js new file mode 100644 index 00000000..a82d4683 --- /dev/null +++ b/node_modules/execa/lib/stdio.js @@ -0,0 +1,41 @@ +'use strict'; +const alias = ['stdin', 'stdout', 'stderr']; + +const hasAlias = opts => alias.some(x => Boolean(opts[x])); + +module.exports = opts => { + if (!opts) { + return null; + } + + if (opts.stdio && hasAlias(opts)) { + throw new Error(`It's not possible to provide \`stdio\` in combination with one of ${alias.map(x => `\`${x}\``).join(', ')}`); + } + + if (typeof opts.stdio === 'string') { + return opts.stdio; + } + + const stdio = opts.stdio || []; + + if (!Array.isArray(stdio)) { + throw new TypeError(`Expected \`stdio\` to be of type \`string\` or \`Array\`, got \`${typeof stdio}\``); + } + + const result = []; + const len = Math.max(stdio.length, alias.length); + + for (let i = 0; i < len; i++) { + let value = null; + + if (stdio[i] !== undefined) { + value = stdio[i]; + } else if (opts[alias[i]] !== undefined) { + value = opts[alias[i]]; + } + + result[i] = value; + } + + return result; +}; diff --git a/node_modules/execa/license b/node_modules/execa/license new file mode 100644 index 00000000..e7af2f77 --- /dev/null +++ b/node_modules/execa/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/execa/package.json b/node_modules/execa/package.json new file mode 100644 index 00000000..c8e29cba --- /dev/null +++ b/node_modules/execa/package.json @@ -0,0 +1,101 @@ +{ + "_from": "execa@^1.0.0", + "_id": "execa@1.0.0", + "_inBundle": false, + "_integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "_location": "/execa", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "execa@^1.0.0", + "name": "execa", + "escapedName": "execa", + "rawSpec": "^1.0.0", + "saveSpec": null, + "fetchSpec": "^1.0.0" + }, + "_requiredBy": [ + "/os-locale" + ], + "_resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "_shasum": "c6236a5bb4df6d6f15e88e7f017798216749ddd8", + "_spec": "execa@^1.0.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/os-locale", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/execa/issues" + }, + "bundleDependencies": false, + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "deprecated": false, + "description": "A better `child_process`", + "devDependencies": { + "ava": "*", + "cat-names": "^1.0.2", + "coveralls": "^3.0.1", + "delay": "^3.0.0", + "is-running": "^2.0.0", + "nyc": "^13.0.1", + "tempfile": "^2.0.0", + "xo": "*" + }, + "engines": { + "node": ">=6" + }, + "files": [ + "index.js", + "lib" + ], + "homepage": "https://github.com/sindresorhus/execa#readme", + "keywords": [ + "exec", + "child", + "process", + "execute", + "fork", + "execfile", + "spawn", + "file", + "shell", + "bin", + "binary", + "binaries", + "npm", + "path", + "local" + ], + "license": "MIT", + "name": "execa", + "nyc": { + "reporter": [ + "text", + "lcov" + ], + "exclude": [ + "**/fixtures/**", + "**/test.js", + "**/test/**" + ] + }, + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/execa.git" + }, + "scripts": { + "test": "xo && nyc ava" + }, + "version": "1.0.0" +} diff --git a/node_modules/execa/readme.md b/node_modules/execa/readme.md new file mode 100644 index 00000000..f3f533d9 --- /dev/null +++ b/node_modules/execa/readme.md @@ -0,0 +1,327 @@ +# execa [![Build Status: Linux](https://travis-ci.org/sindresorhus/execa.svg?branch=master)](https://travis-ci.org/sindresorhus/execa) [![Build status: Windows](https://ci.appveyor.com/api/projects/status/x5ajamxtjtt93cqv/branch/master?svg=true)](https://ci.appveyor.com/project/sindresorhus/execa/branch/master) [![Coverage Status](https://coveralls.io/repos/github/sindresorhus/execa/badge.svg?branch=master)](https://coveralls.io/github/sindresorhus/execa?branch=master) + +> A better [`child_process`](https://nodejs.org/api/child_process.html) + + +## Why + +- Promise interface. +- [Strips EOF](https://github.com/sindresorhus/strip-eof) from the output so you don't have to `stdout.trim()`. +- Supports [shebang](https://en.wikipedia.org/wiki/Shebang_(Unix)) binaries cross-platform. +- [Improved Windows support.](https://github.com/IndigoUnited/node-cross-spawn#why) +- Higher max buffer. 10 MB instead of 200 KB. +- [Executes locally installed binaries by name.](#preferlocal) +- [Cleans up spawned processes when the parent process dies.](#cleanup) + + +## Install + +``` +$ npm install execa +``` + + + + + + +## Usage + +```js +const execa = require('execa'); + +(async () => { + const {stdout} = await execa('echo', ['unicorns']); + console.log(stdout); + //=> 'unicorns' +})(); +``` + +Additional examples: + +```js +const execa = require('execa'); + +(async () => { + // Pipe the child process stdout to the current stdout + execa('echo', ['unicorns']).stdout.pipe(process.stdout); + + + // Run a shell command + const {stdout} = await execa.shell('echo unicorns'); + //=> 'unicorns' + + + // Catching an error + try { + await execa.shell('exit 3'); + } catch (error) { + console.log(error); + /* + { + message: 'Command failed: /bin/sh -c exit 3' + killed: false, + code: 3, + signal: null, + cmd: '/bin/sh -c exit 3', + stdout: '', + stderr: '', + timedOut: false + } + */ + } +})(); + +// Catching an error with a sync method +try { + execa.shellSync('exit 3'); +} catch (error) { + console.log(error); + /* + { + message: 'Command failed: /bin/sh -c exit 3' + code: 3, + signal: null, + cmd: '/bin/sh -c exit 3', + stdout: '', + stderr: '', + timedOut: false + } + */ +} +``` + + +## API + +### execa(file, [arguments], [options]) + +Execute a file. + +Think of this as a mix of `child_process.execFile` and `child_process.spawn`. + +Returns a [`child_process` instance](https://nodejs.org/api/child_process.html#child_process_class_childprocess), which is enhanced to also be a `Promise` for a result `Object` with `stdout` and `stderr` properties. + +### execa.stdout(file, [arguments], [options]) + +Same as `execa()`, but returns only `stdout`. + +### execa.stderr(file, [arguments], [options]) + +Same as `execa()`, but returns only `stderr`. + +### execa.shell(command, [options]) + +Execute a command through the system shell. Prefer `execa()` whenever possible, as it's both faster and safer. + +Returns a [`child_process` instance](https://nodejs.org/api/child_process.html#child_process_class_childprocess). + +The `child_process` instance is enhanced to also be promise for a result object with `stdout` and `stderr` properties. + +### execa.sync(file, [arguments], [options]) + +Execute a file synchronously. + +Returns the same result object as [`child_process.spawnSync`](https://nodejs.org/api/child_process.html#child_process_child_process_spawnsync_command_args_options). + +This method throws an `Error` if the command fails. + +### execa.shellSync(file, [options]) + +Execute a command synchronously through the system shell. + +Returns the same result object as [`child_process.spawnSync`](https://nodejs.org/api/child_process.html#child_process_child_process_spawnsync_command_args_options). + +### options + +Type: `Object` + +#### cwd + +Type: `string`
+Default: `process.cwd()` + +Current working directory of the child process. + +#### env + +Type: `Object`
+Default: `process.env` + +Environment key-value pairs. Extends automatically from `process.env`. Set `extendEnv` to `false` if you don't want this. + +#### extendEnv + +Type: `boolean`
+Default: `true` + +Set to `false` if you don't want to extend the environment variables when providing the `env` property. + +#### argv0 + +Type: `string` + +Explicitly set the value of `argv[0]` sent to the child process. This will be set to `command` or `file` if not specified. + +#### stdio + +Type: `string[]` `string`
+Default: `pipe` + +Child's [stdio](https://nodejs.org/api/child_process.html#child_process_options_stdio) configuration. + +#### detached + +Type: `boolean` + +Prepare child to run independently of its parent process. Specific behavior [depends on the platform](https://nodejs.org/api/child_process.html#child_process_options_detached). + +#### uid + +Type: `number` + +Sets the user identity of the process. + +#### gid + +Type: `number` + +Sets the group identity of the process. + +#### shell + +Type: `boolean` `string`
+Default: `false` + +If `true`, runs `command` inside of a shell. Uses `/bin/sh` on UNIX and `cmd.exe` on Windows. A different shell can be specified as a string. The shell should understand the `-c` switch on UNIX or `/d /s /c` on Windows. + +#### stripEof + +Type: `boolean`
+Default: `true` + +[Strip EOF](https://github.com/sindresorhus/strip-eof) (last newline) from the output. + +#### preferLocal + +Type: `boolean`
+Default: `true` + +Prefer locally installed binaries when looking for a binary to execute.
+If you `$ npm install foo`, you can then `execa('foo')`. + +#### localDir + +Type: `string`
+Default: `process.cwd()` + +Preferred path to find locally installed binaries in (use with `preferLocal`). + +#### input + +Type: `string` `Buffer` `stream.Readable` + +Write some input to the `stdin` of your binary.
+Streams are not allowed when using the synchronous methods. + +#### reject + +Type: `boolean`
+Default: `true` + +Setting this to `false` resolves the promise with the error instead of rejecting it. + +#### cleanup + +Type: `boolean`
+Default: `true` + +Keep track of the spawned process and `kill` it when the parent process exits. + +#### encoding + +Type: `string`
+Default: `utf8` + +Specify the character encoding used to decode the `stdout` and `stderr` output. + +#### timeout + +Type: `number`
+Default: `0` + +If timeout is greater than `0`, the parent will send the signal identified by the `killSignal` property (the default is `SIGTERM`) if the child runs longer than timeout milliseconds. + +#### buffer + +Type: `boolean`
+Default: `true` + +Buffer the output from the spawned process. When buffering is disabled you must consume the output of the `stdout` and `stderr` streams because the promise will not be resolved/rejected until they have completed. + +#### maxBuffer + +Type: `number`
+Default: `10000000` (10MB) + +Largest amount of data in bytes allowed on `stdout` or `stderr`. + +#### killSignal + +Type: `string` `number`
+Default: `SIGTERM` + +Signal value to be used when the spawned process will be killed. + +#### stdin + +Type: `string` `number` `Stream` `undefined` `null`
+Default: `pipe` + +Same options as [`stdio`](https://nodejs.org/dist/latest-v6.x/docs/api/child_process.html#child_process_options_stdio). + +#### stdout + +Type: `string` `number` `Stream` `undefined` `null`
+Default: `pipe` + +Same options as [`stdio`](https://nodejs.org/dist/latest-v6.x/docs/api/child_process.html#child_process_options_stdio). + +#### stderr + +Type: `string` `number` `Stream` `undefined` `null`
+Default: `pipe` + +Same options as [`stdio`](https://nodejs.org/dist/latest-v6.x/docs/api/child_process.html#child_process_options_stdio). + +#### windowsVerbatimArguments + +Type: `boolean`
+Default: `false` + +If `true`, no quoting or escaping of arguments is done on Windows. Ignored on other platforms. This is set to `true` automatically when the `shell` option is `true`. + + +## Tips + +### Save and pipe output from a child process + +Let's say you want to show the output of a child process in real-time while also saving it to a variable. + +```js +const execa = require('execa'); +const getStream = require('get-stream'); + +const stream = execa('echo', ['foo']).stdout; + +stream.pipe(process.stdout); + +getStream(stream).then(value => { + console.log('child output:', value); +}); +``` + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/fast-bind/.jshintrc b/node_modules/fast-bind/.jshintrc new file mode 100644 index 00000000..cbf78a48 --- /dev/null +++ b/node_modules/fast-bind/.jshintrc @@ -0,0 +1,7 @@ +{ + "asi": true, + "laxbreak": true, + "laxcomma": true, + "node": true, + "undef": true +} diff --git a/node_modules/fast-bind/.travis.yml b/node_modules/fast-bind/.travis.yml new file mode 100644 index 00000000..09d3ef37 --- /dev/null +++ b/node_modules/fast-bind/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +node_js: + - 0.8 + - 0.10 diff --git a/node_modules/fast-bind/README.md b/node_modules/fast-bind/README.md new file mode 100644 index 00000000..d623a7d3 --- /dev/null +++ b/node_modules/fast-bind/README.md @@ -0,0 +1,38 @@ +[![Build Status](https://travis-ci.org/nathan7/fast-bind.svg?branch=master)](https://travis-ci.org/nathan7/fast-bind) +# fast-bind + + The fastest `Function#bind` I could find. + +``` +Function#bind (native) x 709,955 ops/sec ±1.79% (84 runs sampled) +Function#bind (slice) x 2,610,293 ops/sec ±1.43% (99 runs sampled) +Function#bind (concat) x 2,622,574 ops/sec ±0.79% (101 runs sampled) +Function#bind (loop) x 2,952,311 ops/sec ±1.63% (95 runs sampled) +Fastest is Function#bind (loop) +4.16x as fast as Function#bind (native) +``` + +## Installation + + npm install fast-bind + +## API + +```js +Function.prototype.bind = require('fast-bind') +``` + +## Faster + + The previous version did not handle using the bound function as a constructor. + This requires an instanceof check, and slows everything down a bunch. + +``` +Function#bind (native) x 803,410 ops/sec ±2.35% (79 runs sampled) +Function#bind (slice) x 4,771,960 ops/sec ±0.95% (99 runs sampled) +Function#bind (concat) x 3,838,614 ops/sec ±1.41% (95 runs sampled) +Function#bind (loop) x 6,440,278 ops/sec ±0.69% (97 runs sampled) +Fastest is Function#bind (loop) +8.02x as fast as Function#bind (native) +``` + diff --git a/node_modules/fast-bind/bench.js b/node_modules/fast-bind/bench.js new file mode 100644 index 00000000..2db04459 --- /dev/null +++ b/node_modules/fast-bind/bench.js @@ -0,0 +1,38 @@ +'use strict'; +var Benchmark = require('benchmark') + , assert = global.assert = require('assert') + , suite = new Benchmark.Suite() + +var f = global.f = function f(a, b, c) { + return a + b + c +} + +Function.prototype.bindSlice = require('./bind-slice') +Function.prototype.bindConcat = require('./bind-concat') +Function.prototype.bindLoop = require('./bind-loop') + +suite // native must come first + .add('Function#bind (native)', function() { + assert.equal(f.bind(null, 1, 2)(3), 6) + }) + .add('Function#bind (slice)', function() { + assert.equal(f.bindSlice(null, 1, 2)(3), 6) + }) + .add('Function#bind (concat)', function() { + assert.equal(f.bindConcat(null, 1, 2)(3), 6) + }) + .add('Function#bind (loop)', function() { + assert.equal(f.bindLoop(null, 1, 2)(3), 6) + }) + .on('cycle', function(e) { + console.log(String(e.target)) + }) + .on('complete', function() { + var fastest = this.filter('fastest') + console.log('Fastest is ' + fastest.pluck('name')) + var native = this[0] + console.log((fastest.pluck('hz') / native.hz).toFixed(2) + 'x as fast as ' + native.name) + + assert.equal(fastest.pluck('name'), 'Function#bind (loop)') + }) + .run({ async: true }) diff --git a/node_modules/fast-bind/bind-concat.js b/node_modules/fast-bind/bind-concat.js new file mode 100644 index 00000000..5cccda79 --- /dev/null +++ b/node_modules/fast-bind/bind-concat.js @@ -0,0 +1,32 @@ +'use strict'; +module.exports = function(boundThis) { + var f = this + , ret + + if (arguments.length < 2) + ret = function() { + if (this instanceof ret) { + var ret_ = f.apply(this, arguments) + return Object(ret_) === ret_ + ? ret_ + : this + } + else + return f.apply(boundThis, arguments) + } + else { + var boundArgs = new Array(arguments.length - 1) + for (var i = 1; i < arguments.length; i++) + boundArgs[i - 1] = arguments[i] + + ret = function() { + var args = new Array(arguments.length) + for (var i = 0; i < arguments.length; i++) + args[i] = arguments[i] + return f.apply(boundThis, boundArgs.concat(args)) + } + } + + ret.prototype = f.prototype + return ret +} diff --git a/node_modules/fast-bind/bind-loop.js b/node_modules/fast-bind/bind-loop.js new file mode 100644 index 00000000..57ccfbfa --- /dev/null +++ b/node_modules/fast-bind/bind-loop.js @@ -0,0 +1,44 @@ +'use strict'; +module.exports = function(boundThis) { + var f = this + , ret + + if (arguments.length < 2) + ret = function() { + if (this instanceof ret) { + var ret_ = f.apply(this, arguments) + return Object(ret_) === ret_ + ? ret_ + : this + } + else + return f.apply(boundThis, arguments) + } + else { + var boundArgs = new Array(arguments.length - 1) + for (var i = 1; i < arguments.length; i++) + boundArgs[i - 1] = arguments[i] + + ret = function() { + var boundLen = boundArgs.length + , args = new Array(boundLen + arguments.length) + , i + for (i = 0; i < boundLen; i++) + args[i] = boundArgs[i] + for (i = 0; i < arguments.length; i++) + args[boundLen + i] = arguments[i] + + if (this instanceof ret) { + var ret_ = f.apply(this, args) + return Object(ret_) === ret_ + ? ret_ + : this + } + else + return f.apply(boundThis, args) + } + } + + ret.prototype = f.prototype + return ret +} diff --git a/node_modules/fast-bind/bind-slice.js b/node_modules/fast-bind/bind-slice.js new file mode 100644 index 00000000..1dcbad18 --- /dev/null +++ b/node_modules/fast-bind/bind-slice.js @@ -0,0 +1,40 @@ +'use strict'; +module.exports = function(boundThis) { + var f = this + , ret + + if (arguments.length < 2) + ret = function() { + if (this instanceof ret) { + var ret_ = f.apply(this, arguments) + return Object(ret_) === ret_ + ? ret_ + : this + } + else + return f.apply(boundThis, arguments) + } + else { + var boundArgs = new Array(arguments.length - 1) + for (var i = 1; i < arguments.length; i++) + boundArgs[i - 1] = arguments[i] + + ret = function() { + var args = boundArgs.slice() + for (var i = 0; i < arguments.length; i++) + args.push(arguments[i]) + + if (this instanceof ret) { + var ret_ = f.apply(this, arguments) + return Object(ret_) === ret_ + ? ret_ + : this + } + else + return f.apply(boundThis, args) + } + } + + ret.prototype = f.prototype + return ret +} diff --git a/node_modules/fast-bind/package.json b/node_modules/fast-bind/package.json new file mode 100644 index 00000000..3f56da4a --- /dev/null +++ b/node_modules/fast-bind/package.json @@ -0,0 +1,60 @@ +{ + "_from": "fast-bind@^1.0.0", + "_id": "fast-bind@1.0.0", + "_inBundle": false, + "_integrity": "sha1-f6llLLMyX1zR4lLWy08WDeGnbnU=", + "_location": "/fast-bind", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "fast-bind@^1.0.0", + "name": "fast-bind", + "escapedName": "fast-bind", + "rawSpec": "^1.0.0", + "saveSpec": null, + "fetchSpec": "^1.0.0" + }, + "_requiredBy": [ + "/curry2" + ], + "_resolved": "https://registry.npmjs.org/fast-bind/-/fast-bind-1.0.0.tgz", + "_shasum": "7fa9652cb3325f5cd1e252d6cb4f160de1a76e75", + "_spec": "fast-bind@^1.0.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/curry2", + "author": { + "name": "Nathan Zadoks" + }, + "bugs": { + "url": "https://github.com/nathan7/fast-bind/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "the fastest version of Function#bind I could make", + "devDependencies": { + "benchmark": "^1.0.0", + "expect": "^0.1.1", + "microtime": "^1.0.1", + "mocha": "^2.0.1" + }, + "homepage": "https://github.com/nathan7/fast-bind", + "keywords": [ + "function", + "prototype", + "bind", + "perf", + "performance", + "fast" + ], + "license": "ISC", + "main": "bind-loop.js", + "name": "fast-bind", + "repository": { + "type": "git", + "url": "git://github.com/nathan7/fast-bind.git" + }, + "scripts": { + "test": "mocha -R spec && node bench.js" + }, + "version": "1.0.0" +} diff --git a/node_modules/fast-bind/test.js b/node_modules/fast-bind/test.js new file mode 100644 index 00000000..4aa5c60b --- /dev/null +++ b/node_modules/fast-bind/test.js @@ -0,0 +1,193 @@ +/* globals describe,beforeEach,it,xit */ +var expect = require('expect') + +;['slice', 'concat', 'loop'].forEach(function(bind) { + describe(bind, function () { + var actual, expected + + var testSubject = { + push: function (o) { + this.a.push(o) + } + } + + function func() { //jshint validthis:true + Array.prototype.forEach.call(arguments, function (a) { + this.push(a) + }, this) + return this + } + + beforeEach(function () { + actual = [] + testSubject.a = [] + Function.prototype.bind = require('./bind-' + bind) + }) + + it('binds properly without a context', function () { + var context + testSubject.func = function () { + context = this + }.bind() + testSubject.func() + expect(context).toBe(function () { return this }.call()) + }) + + it('binds properly without a context, and still supplies bound arguments', function () { + var a, context + testSubject.func = function () { + a = Array.prototype.slice.call(arguments) + context = this + }.bind(undefined, 1,2,3) + testSubject.func(1,2,3) + expect(a).toEqual([1,2,3,1,2,3]) + expect(context).toBe(function () { return this }.call()) + }) + + it('binds a context properly', function () { + testSubject.func = func.bind(actual) + testSubject.func(1,2,3) + expect(actual).toEqual([1,2,3]) + expect(testSubject.a).toEqual([]) + }) + + it('binds a context and supplies bound arguments', function () { + testSubject.func = func.bind(actual, 1,2,3) + testSubject.func(4,5,6) + expect(actual).toEqual([1,2,3,4,5,6]) + expect(testSubject.a).toEqual([]) + }) + + it('returns properly without binding a context', function () { + testSubject.func = function () { + return this + }.bind() + var context = testSubject.func() + expect(context).toBe(function () { return this }.call()) + }) + + it('returns properly without binding a context, and still supplies bound arguments', function () { + var context + testSubject.func = function () { + context = this + return Array.prototype.slice.call(arguments) + }.bind(undefined, 1,2,3) + actual = testSubject.func(1,2,3) + expect(context).toBe(function () { return this }.call()) + expect(actual).toEqual([1,2,3,1,2,3]) + }) + + it('returns properly while binding a context properly', function () { + var ret + testSubject.func = func.bind(actual) + ret = testSubject.func(1,2,3) + expect(ret).toBe(actual) + expect(ret).toNotBe(testSubject) + }) + + it('returns properly while binding a context and supplies bound arguments', function () { + var ret + testSubject.func = func.bind(actual, 1,2,3) + ret = testSubject.func(4,5,6) + expect(ret).toBe(actual) + expect(ret).toNotBe(testSubject) + }) + + it('has the new instance\'s context as a constructor', function () { + var actualContext + var expectedContext = { foo: 'bar' } + testSubject.func = function () { + actualContext = this + }.bind(expectedContext) + var result = new testSubject.func() + expect(actualContext).toNotBe(expectedContext) + }) + + it('passes the correct arguments as a constructor', function () { + var ret, expected = { name: 'Correct' } + testSubject.func = function (arg) { + return arg + }.bind({ name: 'Incorrect' }) + ret = new testSubject.func(expected) + expect(ret).toBe(expected) + }) + + it('returns the return value of the bound function when called as a constructor', function () { + var oracle = [1, 2, 3] + var Subject = function () { + return oracle + }.bind(null) + var result = new Subject() + expect(result).toBe(oracle) + }) + + it('returns the correct value if constructor returns primitive', function () { + var oracle = [1, 2, 3] + var Subject = function () { + return oracle + }.bind(null) + var result = new Subject() + expect(result).toBe(oracle) + + oracle = {} + result = new Subject() + expect(result).toBe(oracle) + + oracle = function () {} + result = new Subject() + expect(result).toBe(oracle) + + oracle = 'asdf' + result = new Subject() + expect(result).toNotBe(oracle) + + oracle = null + result = new Subject() + expect(result).toNotBe(oracle) + + oracle = true + result = new Subject() + expect(result).toNotBe(oracle) + + oracle = 1 + result = new Subject() + expect(result).toNotBe(oracle) + }) + + it('returns the value that instance of original "class" when called as a constructor', function () { + var ClassA = function (x) { + this.name = x || 'A' + } + var ClassB = ClassA.bind(null, 'B') + + var result = new ClassB() + expect(result instanceof ClassA).toBe(true) + expect(result instanceof ClassB).toBe(true) + }) + + xit('sets a correct length without thisArg', function () { + var Subject = function (a, b, c) { return a + b + c }.bind() + expect(Subject.length).toBe(3) + }) + + xit('sets a correct length with thisArg', function () { + var Subject = function (a, b, c) { return a + b + c }.bind({}) + expect(Subject.length).toBe(3) + }) + + xit('sets a correct length with thisArg and first argument', function () { + var Subject = function (a, b, c) { return a + b + c }.bind({}, 1) + expect(Subject.length).toBe(2) + }) + + xit('sets a correct length without thisArg and first argument', function () { + var Subject = function (a, b, c) { return a + b + c }.bind(undefined, 1) + expect(Subject.length).toBe(2) + }) + + xit('sets a correct length without thisArg and too many argument', function () { + var Subject = function (a, b, c) { return a + b + c }.bind(undefined, 1, 2, 3, 4) + expect(Subject.length).toBe(0) + }) + }) +}) diff --git a/node_modules/request/node_modules/forever-agent/LICENSE b/node_modules/forever-agent/LICENSE similarity index 100% rename from node_modules/request/node_modules/forever-agent/LICENSE rename to node_modules/forever-agent/LICENSE diff --git a/node_modules/request/node_modules/forever-agent/README.md b/node_modules/forever-agent/README.md similarity index 100% rename from node_modules/request/node_modules/forever-agent/README.md rename to node_modules/forever-agent/README.md diff --git a/node_modules/request/node_modules/forever-agent/index.js b/node_modules/forever-agent/index.js similarity index 100% rename from node_modules/request/node_modules/forever-agent/index.js rename to node_modules/forever-agent/index.js diff --git a/node_modules/forever-agent/package.json b/node_modules/forever-agent/package.json new file mode 100644 index 00000000..acbe70e8 --- /dev/null +++ b/node_modules/forever-agent/package.json @@ -0,0 +1,50 @@ +{ + "_from": "forever-agent@~0.6.1", + "_id": "forever-agent@0.6.1", + "_inBundle": false, + "_integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "_location": "/forever-agent", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "forever-agent@~0.6.1", + "name": "forever-agent", + "escapedName": "forever-agent", + "rawSpec": "~0.6.1", + "saveSpec": null, + "fetchSpec": "~0.6.1" + }, + "_requiredBy": [ + "/request" + ], + "_resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "_shasum": "fbc71f0c41adeb37f96c577ad1ed42d8fdacca91", + "_spec": "forever-agent@~0.6.1", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/request", + "author": { + "name": "Mikeal Rogers", + "email": "mikeal.rogers@gmail.com", + "url": "http://www.futurealoof.com" + }, + "bugs": { + "url": "https://github.com/mikeal/forever-agent/issues" + }, + "bundleDependencies": false, + "dependencies": {}, + "deprecated": false, + "description": "HTTP Agent that keeps socket connections alive between keep-alive requests. Formerly part of mikeal/request, now a standalone module.", + "devDependencies": {}, + "engines": { + "node": "*" + }, + "homepage": "https://github.com/mikeal/forever-agent#readme", + "license": "Apache-2.0", + "main": "index.js", + "name": "forever-agent", + "optionalDependencies": {}, + "repository": { + "url": "git+https://github.com/mikeal/forever-agent.git" + }, + "version": "0.6.1" +} diff --git a/node_modules/fs.realpath/LICENSE b/node_modules/fs.realpath/LICENSE new file mode 100644 index 00000000..5bd884c2 --- /dev/null +++ b/node_modules/fs.realpath/LICENSE @@ -0,0 +1,43 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +---- + +This library bundles a version of the `fs.realpath` and `fs.realpathSync` +methods from Node.js v0.10 under the terms of the Node.js MIT license. + +Node's license follows, also included at the header of `old.js` which contains +the licensed code: + + Copyright Joyent, Inc. and other Node contributors. + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. diff --git a/node_modules/fs.realpath/README.md b/node_modules/fs.realpath/README.md new file mode 100644 index 00000000..a42ceac6 --- /dev/null +++ b/node_modules/fs.realpath/README.md @@ -0,0 +1,33 @@ +# fs.realpath + +A backwards-compatible fs.realpath for Node v6 and above + +In Node v6, the JavaScript implementation of fs.realpath was replaced +with a faster (but less resilient) native implementation. That raises +new and platform-specific errors and cannot handle long or excessively +symlink-looping paths. + +This module handles those cases by detecting the new errors and +falling back to the JavaScript implementation. On versions of Node +prior to v6, it has no effect. + +## USAGE + +```js +var rp = require('fs.realpath') + +// async version +rp.realpath(someLongAndLoopingPath, function (er, real) { + // the ELOOP was handled, but it was a bit slower +}) + +// sync version +var real = rp.realpathSync(someLongAndLoopingPath) + +// monkeypatch at your own risk! +// This replaces the fs.realpath/fs.realpathSync builtins +rp.monkeypatch() + +// un-do the monkeypatching +rp.unmonkeypatch() +``` diff --git a/node_modules/fs.realpath/index.js b/node_modules/fs.realpath/index.js new file mode 100644 index 00000000..b09c7c7e --- /dev/null +++ b/node_modules/fs.realpath/index.js @@ -0,0 +1,66 @@ +module.exports = realpath +realpath.realpath = realpath +realpath.sync = realpathSync +realpath.realpathSync = realpathSync +realpath.monkeypatch = monkeypatch +realpath.unmonkeypatch = unmonkeypatch + +var fs = require('fs') +var origRealpath = fs.realpath +var origRealpathSync = fs.realpathSync + +var version = process.version +var ok = /^v[0-5]\./.test(version) +var old = require('./old.js') + +function newError (er) { + return er && er.syscall === 'realpath' && ( + er.code === 'ELOOP' || + er.code === 'ENOMEM' || + er.code === 'ENAMETOOLONG' + ) +} + +function realpath (p, cache, cb) { + if (ok) { + return origRealpath(p, cache, cb) + } + + if (typeof cache === 'function') { + cb = cache + cache = null + } + origRealpath(p, cache, function (er, result) { + if (newError(er)) { + old.realpath(p, cache, cb) + } else { + cb(er, result) + } + }) +} + +function realpathSync (p, cache) { + if (ok) { + return origRealpathSync(p, cache) + } + + try { + return origRealpathSync(p, cache) + } catch (er) { + if (newError(er)) { + return old.realpathSync(p, cache) + } else { + throw er + } + } +} + +function monkeypatch () { + fs.realpath = realpath + fs.realpathSync = realpathSync +} + +function unmonkeypatch () { + fs.realpath = origRealpath + fs.realpathSync = origRealpathSync +} diff --git a/node_modules/fs.realpath/old.js b/node_modules/fs.realpath/old.js new file mode 100644 index 00000000..b40305e7 --- /dev/null +++ b/node_modules/fs.realpath/old.js @@ -0,0 +1,303 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +var pathModule = require('path'); +var isWindows = process.platform === 'win32'; +var fs = require('fs'); + +// JavaScript implementation of realpath, ported from node pre-v6 + +var DEBUG = process.env.NODE_DEBUG && /fs/.test(process.env.NODE_DEBUG); + +function rethrow() { + // Only enable in debug mode. A backtrace uses ~1000 bytes of heap space and + // is fairly slow to generate. + var callback; + if (DEBUG) { + var backtrace = new Error; + callback = debugCallback; + } else + callback = missingCallback; + + return callback; + + function debugCallback(err) { + if (err) { + backtrace.message = err.message; + err = backtrace; + missingCallback(err); + } + } + + function missingCallback(err) { + if (err) { + if (process.throwDeprecation) + throw err; // Forgot a callback but don't know where? Use NODE_DEBUG=fs + else if (!process.noDeprecation) { + var msg = 'fs: missing callback ' + (err.stack || err.message); + if (process.traceDeprecation) + console.trace(msg); + else + console.error(msg); + } + } + } +} + +function maybeCallback(cb) { + return typeof cb === 'function' ? cb : rethrow(); +} + +var normalize = pathModule.normalize; + +// Regexp that finds the next partion of a (partial) path +// result is [base_with_slash, base], e.g. ['somedir/', 'somedir'] +if (isWindows) { + var nextPartRe = /(.*?)(?:[\/\\]+|$)/g; +} else { + var nextPartRe = /(.*?)(?:[\/]+|$)/g; +} + +// Regex to find the device root, including trailing slash. E.g. 'c:\\'. +if (isWindows) { + var splitRootRe = /^(?:[a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/][^\\\/]+)?[\\\/]*/; +} else { + var splitRootRe = /^[\/]*/; +} + +exports.realpathSync = function realpathSync(p, cache) { + // make p is absolute + p = pathModule.resolve(p); + + if (cache && Object.prototype.hasOwnProperty.call(cache, p)) { + return cache[p]; + } + + var original = p, + seenLinks = {}, + knownHard = {}; + + // current character position in p + var pos; + // the partial path so far, including a trailing slash if any + var current; + // the partial path without a trailing slash (except when pointing at a root) + var base; + // the partial path scanned in the previous round, with slash + var previous; + + start(); + + function start() { + // Skip over roots + var m = splitRootRe.exec(p); + pos = m[0].length; + current = m[0]; + base = m[0]; + previous = ''; + + // On windows, check that the root exists. On unix there is no need. + if (isWindows && !knownHard[base]) { + fs.lstatSync(base); + knownHard[base] = true; + } + } + + // walk down the path, swapping out linked pathparts for their real + // values + // NB: p.length changes. + while (pos < p.length) { + // find the next part + nextPartRe.lastIndex = pos; + var result = nextPartRe.exec(p); + previous = current; + current += result[0]; + base = previous + result[1]; + pos = nextPartRe.lastIndex; + + // continue if not a symlink + if (knownHard[base] || (cache && cache[base] === base)) { + continue; + } + + var resolvedLink; + if (cache && Object.prototype.hasOwnProperty.call(cache, base)) { + // some known symbolic link. no need to stat again. + resolvedLink = cache[base]; + } else { + var stat = fs.lstatSync(base); + if (!stat.isSymbolicLink()) { + knownHard[base] = true; + if (cache) cache[base] = base; + continue; + } + + // read the link if it wasn't read before + // dev/ino always return 0 on windows, so skip the check. + var linkTarget = null; + if (!isWindows) { + var id = stat.dev.toString(32) + ':' + stat.ino.toString(32); + if (seenLinks.hasOwnProperty(id)) { + linkTarget = seenLinks[id]; + } + } + if (linkTarget === null) { + fs.statSync(base); + linkTarget = fs.readlinkSync(base); + } + resolvedLink = pathModule.resolve(previous, linkTarget); + // track this, if given a cache. + if (cache) cache[base] = resolvedLink; + if (!isWindows) seenLinks[id] = linkTarget; + } + + // resolve the link, then start over + p = pathModule.resolve(resolvedLink, p.slice(pos)); + start(); + } + + if (cache) cache[original] = p; + + return p; +}; + + +exports.realpath = function realpath(p, cache, cb) { + if (typeof cb !== 'function') { + cb = maybeCallback(cache); + cache = null; + } + + // make p is absolute + p = pathModule.resolve(p); + + if (cache && Object.prototype.hasOwnProperty.call(cache, p)) { + return process.nextTick(cb.bind(null, null, cache[p])); + } + + var original = p, + seenLinks = {}, + knownHard = {}; + + // current character position in p + var pos; + // the partial path so far, including a trailing slash if any + var current; + // the partial path without a trailing slash (except when pointing at a root) + var base; + // the partial path scanned in the previous round, with slash + var previous; + + start(); + + function start() { + // Skip over roots + var m = splitRootRe.exec(p); + pos = m[0].length; + current = m[0]; + base = m[0]; + previous = ''; + + // On windows, check that the root exists. On unix there is no need. + if (isWindows && !knownHard[base]) { + fs.lstat(base, function(err) { + if (err) return cb(err); + knownHard[base] = true; + LOOP(); + }); + } else { + process.nextTick(LOOP); + } + } + + // walk down the path, swapping out linked pathparts for their real + // values + function LOOP() { + // stop if scanned past end of path + if (pos >= p.length) { + if (cache) cache[original] = p; + return cb(null, p); + } + + // find the next part + nextPartRe.lastIndex = pos; + var result = nextPartRe.exec(p); + previous = current; + current += result[0]; + base = previous + result[1]; + pos = nextPartRe.lastIndex; + + // continue if not a symlink + if (knownHard[base] || (cache && cache[base] === base)) { + return process.nextTick(LOOP); + } + + if (cache && Object.prototype.hasOwnProperty.call(cache, base)) { + // known symbolic link. no need to stat again. + return gotResolvedLink(cache[base]); + } + + return fs.lstat(base, gotStat); + } + + function gotStat(err, stat) { + if (err) return cb(err); + + // if not a symlink, skip to the next path part + if (!stat.isSymbolicLink()) { + knownHard[base] = true; + if (cache) cache[base] = base; + return process.nextTick(LOOP); + } + + // stat & read the link if not read before + // call gotTarget as soon as the link target is known + // dev/ino always return 0 on windows, so skip the check. + if (!isWindows) { + var id = stat.dev.toString(32) + ':' + stat.ino.toString(32); + if (seenLinks.hasOwnProperty(id)) { + return gotTarget(null, seenLinks[id], base); + } + } + fs.stat(base, function(err) { + if (err) return cb(err); + + fs.readlink(base, function(err, target) { + if (!isWindows) seenLinks[id] = target; + gotTarget(err, target); + }); + }); + } + + function gotTarget(err, target, base) { + if (err) return cb(err); + + var resolvedLink = pathModule.resolve(previous, target); + if (cache) cache[base] = resolvedLink; + gotResolvedLink(resolvedLink); + } + + function gotResolvedLink(resolvedLink) { + // resolve the link, then start over + p = pathModule.resolve(resolvedLink, p.slice(pos)); + start(); + } +}; diff --git a/node_modules/fs.realpath/package.json b/node_modules/fs.realpath/package.json new file mode 100644 index 00000000..37487041 --- /dev/null +++ b/node_modules/fs.realpath/package.json @@ -0,0 +1,59 @@ +{ + "_from": "fs.realpath@^1.0.0", + "_id": "fs.realpath@1.0.0", + "_inBundle": false, + "_integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "_location": "/fs.realpath", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "fs.realpath@^1.0.0", + "name": "fs.realpath", + "escapedName": "fs.realpath", + "rawSpec": "^1.0.0", + "saveSpec": null, + "fetchSpec": "^1.0.0" + }, + "_requiredBy": [ + "/glob" + ], + "_resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "_shasum": "1504ad2523158caa40db4a2787cb01411994ea4f", + "_spec": "fs.realpath@^1.0.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/glob", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/isaacs/fs.realpath/issues" + }, + "bundleDependencies": false, + "dependencies": {}, + "deprecated": false, + "description": "Use node's fs.realpath, but fall back to the JS implementation if the native one fails", + "devDependencies": {}, + "files": [ + "old.js", + "index.js" + ], + "homepage": "https://github.com/isaacs/fs.realpath#readme", + "keywords": [ + "realpath", + "fs", + "polyfill" + ], + "license": "ISC", + "main": "index.js", + "name": "fs.realpath", + "repository": { + "type": "git", + "url": "git+https://github.com/isaacs/fs.realpath.git" + }, + "scripts": { + "test": "tap test/*.js --cov" + }, + "version": "1.0.0" +} diff --git a/node_modules/get-stream/buffer-stream.js b/node_modules/get-stream/buffer-stream.js new file mode 100644 index 00000000..4121c8e5 --- /dev/null +++ b/node_modules/get-stream/buffer-stream.js @@ -0,0 +1,51 @@ +'use strict'; +const {PassThrough} = require('stream'); + +module.exports = options => { + options = Object.assign({}, options); + + const {array} = options; + let {encoding} = options; + const buffer = encoding === 'buffer'; + let objectMode = false; + + if (array) { + objectMode = !(encoding || buffer); + } else { + encoding = encoding || 'utf8'; + } + + if (buffer) { + encoding = null; + } + + let len = 0; + const ret = []; + const stream = new PassThrough({objectMode}); + + if (encoding) { + stream.setEncoding(encoding); + } + + stream.on('data', chunk => { + ret.push(chunk); + + if (objectMode) { + len = ret.length; + } else { + len += chunk.length; + } + }); + + stream.getBufferedValue = () => { + if (array) { + return ret; + } + + return buffer ? Buffer.concat(ret, len) : ret.join(''); + }; + + stream.getBufferedLength = () => len; + + return stream; +}; diff --git a/node_modules/get-stream/index.js b/node_modules/get-stream/index.js new file mode 100644 index 00000000..7e5584a6 --- /dev/null +++ b/node_modules/get-stream/index.js @@ -0,0 +1,50 @@ +'use strict'; +const pump = require('pump'); +const bufferStream = require('./buffer-stream'); + +class MaxBufferError extends Error { + constructor() { + super('maxBuffer exceeded'); + this.name = 'MaxBufferError'; + } +} + +function getStream(inputStream, options) { + if (!inputStream) { + return Promise.reject(new Error('Expected a stream')); + } + + options = Object.assign({maxBuffer: Infinity}, options); + + const {maxBuffer} = options; + + let stream; + return new Promise((resolve, reject) => { + const rejectPromise = error => { + if (error) { // A null check + error.bufferedData = stream.getBufferedValue(); + } + reject(error); + }; + + stream = pump(inputStream, bufferStream(options), error => { + if (error) { + rejectPromise(error); + return; + } + + resolve(); + }); + + stream.on('data', () => { + if (stream.getBufferedLength() > maxBuffer) { + rejectPromise(new MaxBufferError()); + } + }); + }).then(() => stream.getBufferedValue()); +} + +module.exports = getStream; +module.exports.buffer = (stream, options) => getStream(stream, Object.assign({}, options, {encoding: 'buffer'})); +module.exports.array = (stream, options) => getStream(stream, Object.assign({}, options, {array: true})); +module.exports.MaxBufferError = MaxBufferError; diff --git a/node_modules/get-stream/license b/node_modules/get-stream/license new file mode 100644 index 00000000..e7af2f77 --- /dev/null +++ b/node_modules/get-stream/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/get-stream/package.json b/node_modules/get-stream/package.json new file mode 100644 index 00000000..08ad48fc --- /dev/null +++ b/node_modules/get-stream/package.json @@ -0,0 +1,78 @@ +{ + "_from": "get-stream@^4.0.0", + "_id": "get-stream@4.1.0", + "_inBundle": false, + "_integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "_location": "/get-stream", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "get-stream@^4.0.0", + "name": "get-stream", + "escapedName": "get-stream", + "rawSpec": "^4.0.0", + "saveSpec": null, + "fetchSpec": "^4.0.0" + }, + "_requiredBy": [ + "/execa" + ], + "_resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "_shasum": "c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5", + "_spec": "get-stream@^4.0.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/execa", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/get-stream/issues" + }, + "bundleDependencies": false, + "dependencies": { + "pump": "^3.0.0" + }, + "deprecated": false, + "description": "Get a stream as a string, buffer, or array", + "devDependencies": { + "ava": "*", + "into-stream": "^3.0.0", + "xo": "*" + }, + "engines": { + "node": ">=6" + }, + "files": [ + "index.js", + "buffer-stream.js" + ], + "homepage": "https://github.com/sindresorhus/get-stream#readme", + "keywords": [ + "get", + "stream", + "promise", + "concat", + "string", + "text", + "buffer", + "read", + "data", + "consume", + "readable", + "readablestream", + "array", + "object" + ], + "license": "MIT", + "name": "get-stream", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/get-stream.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "4.1.0" +} diff --git a/node_modules/get-stream/readme.md b/node_modules/get-stream/readme.md new file mode 100644 index 00000000..b87a4d37 --- /dev/null +++ b/node_modules/get-stream/readme.md @@ -0,0 +1,123 @@ +# get-stream [![Build Status](https://travis-ci.org/sindresorhus/get-stream.svg?branch=master)](https://travis-ci.org/sindresorhus/get-stream) + +> Get a stream as a string, buffer, or array + + +## Install + +``` +$ npm install get-stream +``` + + +## Usage + +```js +const fs = require('fs'); +const getStream = require('get-stream'); + +(async () => { + const stream = fs.createReadStream('unicorn.txt'); + + console.log(await getStream(stream)); + /* + ,,))))))));, + __)))))))))))))), + \|/ -\(((((''''((((((((. + -*-==//////(('' . `)))))), + /|\ ))| o ;-. '((((( ,(, + ( `| / ) ;))))' ,_))^;(~ + | | | ,))((((_ _____------~~~-. %,;(;(>';'~ + o_); ; )))(((` ~---~ `:: \ %%~~)(v;(`('~ + ; ''''```` `: `:::|\,__,%% );`'; ~ + | _ ) / `:|`----' `-' + ______/\/~ | / / + /~;;.____/;;' / ___--,-( `;;;/ + / // _;______;'------~~~~~ /;;/\ / + // | | / ; \;;,\ + (<_ | ; /',/-----' _> + \_| ||_ //~;~~~~~~~~~ + `\_| (,~~ + \~\ + ~~ + */ +})(); +``` + + +## API + +The methods returns a promise that resolves when the `end` event fires on the stream, indicating that there is no more data to be read. The stream is switched to flowing mode. + +### getStream(stream, [options]) + +Get the `stream` as a string. + +#### options + +Type: `Object` + +##### encoding + +Type: `string`
+Default: `utf8` + +[Encoding](https://nodejs.org/api/buffer.html#buffer_buffer) of the incoming stream. + +##### maxBuffer + +Type: `number`
+Default: `Infinity` + +Maximum length of the returned string. If it exceeds this value before the stream ends, the promise will be rejected with a `getStream.MaxBufferError` error. + +### getStream.buffer(stream, [options]) + +Get the `stream` as a buffer. + +It honors the `maxBuffer` option as above, but it refers to byte length rather than string length. + +### getStream.array(stream, [options]) + +Get the `stream` as an array of values. + +It honors both the `maxBuffer` and `encoding` options. The behavior changes slightly based on the encoding chosen: + +- When `encoding` is unset, it assumes an [object mode stream](https://nodesource.com/blog/understanding-object-streams/) and collects values emitted from `stream` unmodified. In this case `maxBuffer` refers to the number of items in the array (not the sum of their sizes). + +- When `encoding` is set to `buffer`, it collects an array of buffers. `maxBuffer` refers to the summed byte lengths of every buffer in the array. + +- When `encoding` is set to anything else, it collects an array of strings. `maxBuffer` refers to the summed character lengths of every string in the array. + + +## Errors + +If the input stream emits an `error` event, the promise will be rejected with the error. The buffered data will be attached to the `bufferedData` property of the error. + +```js +(async () => { + try { + await getStream(streamThatErrorsAtTheEnd('unicorn')); + } catch (error) { + console.log(error.bufferedData); + //=> 'unicorn' + } +})() +``` + + +## FAQ + +### How is this different from [`concat-stream`](https://github.com/maxogden/concat-stream)? + +This module accepts a stream instead of being one and returns a promise instead of using a callback. The API is simpler and it only supports returning a string, buffer, or array. It doesn't have a fragile type inference. You explicitly choose what you want. And it doesn't depend on the huge `readable-stream` package. + + +## Related + +- [get-stdin](https://github.com/sindresorhus/get-stdin) - Get stdin as a string or buffer + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/glob/LICENSE b/node_modules/glob/LICENSE new file mode 100644 index 00000000..42ca266d --- /dev/null +++ b/node_modules/glob/LICENSE @@ -0,0 +1,21 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +## Glob Logo + +Glob's logo created by Tanya Brassie , licensed +under a Creative Commons Attribution-ShareAlike 4.0 International License +https://creativecommons.org/licenses/by-sa/4.0/ diff --git a/node_modules/glob/README.md b/node_modules/glob/README.md new file mode 100644 index 00000000..e71b967e --- /dev/null +++ b/node_modules/glob/README.md @@ -0,0 +1,373 @@ +# Glob + +Match files using the patterns the shell uses, like stars and stuff. + +[![Build Status](https://travis-ci.org/isaacs/node-glob.svg?branch=master)](https://travis-ci.org/isaacs/node-glob/) [![Build Status](https://ci.appveyor.com/api/projects/status/kd7f3yftf7unxlsx?svg=true)](https://ci.appveyor.com/project/isaacs/node-glob) [![Coverage Status](https://coveralls.io/repos/isaacs/node-glob/badge.svg?branch=master&service=github)](https://coveralls.io/github/isaacs/node-glob?branch=master) + +This is a glob implementation in JavaScript. It uses the `minimatch` +library to do its matching. + +![](logo/glob.png) + +## Usage + +Install with npm + +``` +npm i glob +``` + +```javascript +var glob = require("glob") + +// options is optional +glob("**/*.js", options, function (er, files) { + // files is an array of filenames. + // If the `nonull` option is set, and nothing + // was found, then files is ["**/*.js"] + // er is an error object or null. +}) +``` + +## Glob Primer + +"Globs" are the patterns you type when you do stuff like `ls *.js` on +the command line, or put `build/*` in a `.gitignore` file. + +Before parsing the path part patterns, braced sections are expanded +into a set. Braced sections start with `{` and end with `}`, with any +number of comma-delimited sections within. Braced sections may contain +slash characters, so `a{/b/c,bcd}` would expand into `a/b/c` and `abcd`. + +The following characters have special magic meaning when used in a +path portion: + +* `*` Matches 0 or more characters in a single path portion +* `?` Matches 1 character +* `[...]` Matches a range of characters, similar to a RegExp range. + If the first character of the range is `!` or `^` then it matches + any character not in the range. +* `!(pattern|pattern|pattern)` Matches anything that does not match + any of the patterns provided. +* `?(pattern|pattern|pattern)` Matches zero or one occurrence of the + patterns provided. +* `+(pattern|pattern|pattern)` Matches one or more occurrences of the + patterns provided. +* `*(a|b|c)` Matches zero or more occurrences of the patterns provided +* `@(pattern|pat*|pat?erN)` Matches exactly one of the patterns + provided +* `**` If a "globstar" is alone in a path portion, then it matches + zero or more directories and subdirectories searching for matches. + It does not crawl symlinked directories. + +### Dots + +If a file or directory path portion has a `.` as the first character, +then it will not match any glob pattern unless that pattern's +corresponding path part also has a `.` as its first character. + +For example, the pattern `a/.*/c` would match the file at `a/.b/c`. +However the pattern `a/*/c` would not, because `*` does not start with +a dot character. + +You can make glob treat dots as normal characters by setting +`dot:true` in the options. + +### Basename Matching + +If you set `matchBase:true` in the options, and the pattern has no +slashes in it, then it will seek for any file anywhere in the tree +with a matching basename. For example, `*.js` would match +`test/simple/basic.js`. + +### Empty Sets + +If no matching files are found, then an empty array is returned. This +differs from the shell, where the pattern itself is returned. For +example: + + $ echo a*s*d*f + a*s*d*f + +To get the bash-style behavior, set the `nonull:true` in the options. + +### See Also: + +* `man sh` +* `man bash` (Search for "Pattern Matching") +* `man 3 fnmatch` +* `man 5 gitignore` +* [minimatch documentation](https://github.com/isaacs/minimatch) + +## glob.hasMagic(pattern, [options]) + +Returns `true` if there are any special characters in the pattern, and +`false` otherwise. + +Note that the options affect the results. If `noext:true` is set in +the options object, then `+(a|b)` will not be considered a magic +pattern. If the pattern has a brace expansion, like `a/{b/c,x/y}` +then that is considered magical, unless `nobrace:true` is set in the +options. + +## glob(pattern, [options], cb) + +* `pattern` `{String}` Pattern to be matched +* `options` `{Object}` +* `cb` `{Function}` + * `err` `{Error | null}` + * `matches` `{Array}` filenames found matching the pattern + +Perform an asynchronous glob search. + +## glob.sync(pattern, [options]) + +* `pattern` `{String}` Pattern to be matched +* `options` `{Object}` +* return: `{Array}` filenames found matching the pattern + +Perform a synchronous glob search. + +## Class: glob.Glob + +Create a Glob object by instantiating the `glob.Glob` class. + +```javascript +var Glob = require("glob").Glob +var mg = new Glob(pattern, options, cb) +``` + +It's an EventEmitter, and starts walking the filesystem to find matches +immediately. + +### new glob.Glob(pattern, [options], [cb]) + +* `pattern` `{String}` pattern to search for +* `options` `{Object}` +* `cb` `{Function}` Called when an error occurs, or matches are found + * `err` `{Error | null}` + * `matches` `{Array}` filenames found matching the pattern + +Note that if the `sync` flag is set in the options, then matches will +be immediately available on the `g.found` member. + +### Properties + +* `minimatch` The minimatch object that the glob uses. +* `options` The options object passed in. +* `aborted` Boolean which is set to true when calling `abort()`. There + is no way at this time to continue a glob search after aborting, but + you can re-use the statCache to avoid having to duplicate syscalls. +* `cache` Convenience object. Each field has the following possible + values: + * `false` - Path does not exist + * `true` - Path exists + * `'FILE'` - Path exists, and is not a directory + * `'DIR'` - Path exists, and is a directory + * `[file, entries, ...]` - Path exists, is a directory, and the + array value is the results of `fs.readdir` +* `statCache` Cache of `fs.stat` results, to prevent statting the same + path multiple times. +* `symlinks` A record of which paths are symbolic links, which is + relevant in resolving `**` patterns. +* `realpathCache` An optional object which is passed to `fs.realpath` + to minimize unnecessary syscalls. It is stored on the instantiated + Glob object, and may be re-used. + +### Events + +* `end` When the matching is finished, this is emitted with all the + matches found. If the `nonull` option is set, and no match was found, + then the `matches` list contains the original pattern. The matches + are sorted, unless the `nosort` flag is set. +* `match` Every time a match is found, this is emitted with the specific + thing that matched. It is not deduplicated or resolved to a realpath. +* `error` Emitted when an unexpected error is encountered, or whenever + any fs error occurs if `options.strict` is set. +* `abort` When `abort()` is called, this event is raised. + +### Methods + +* `pause` Temporarily stop the search +* `resume` Resume the search +* `abort` Stop the search forever + +### Options + +All the options that can be passed to Minimatch can also be passed to +Glob to change pattern matching behavior. Also, some have been added, +or have glob-specific ramifications. + +All options are false by default, unless otherwise noted. + +All options are added to the Glob object, as well. + +If you are running many `glob` operations, you can pass a Glob object +as the `options` argument to a subsequent operation to shortcut some +`stat` and `readdir` calls. At the very least, you may pass in shared +`symlinks`, `statCache`, `realpathCache`, and `cache` options, so that +parallel glob operations will be sped up by sharing information about +the filesystem. + +* `cwd` The current working directory in which to search. Defaults + to `process.cwd()`. +* `root` The place where patterns starting with `/` will be mounted + onto. Defaults to `path.resolve(options.cwd, "/")` (`/` on Unix + systems, and `C:\` or some such on Windows.) +* `dot` Include `.dot` files in normal matches and `globstar` matches. + Note that an explicit dot in a portion of the pattern will always + match dot files. +* `nomount` By default, a pattern starting with a forward-slash will be + "mounted" onto the root setting, so that a valid filesystem path is + returned. Set this flag to disable that behavior. +* `mark` Add a `/` character to directory matches. Note that this + requires additional stat calls. +* `nosort` Don't sort the results. +* `stat` Set to true to stat *all* results. This reduces performance + somewhat, and is completely unnecessary, unless `readdir` is presumed + to be an untrustworthy indicator of file existence. +* `silent` When an unusual error is encountered when attempting to + read a directory, a warning will be printed to stderr. Set the + `silent` option to true to suppress these warnings. +* `strict` When an unusual error is encountered when attempting to + read a directory, the process will just continue on in search of + other matches. Set the `strict` option to raise an error in these + cases. +* `cache` See `cache` property above. Pass in a previously generated + cache object to save some fs calls. +* `statCache` A cache of results of filesystem information, to prevent + unnecessary stat calls. While it should not normally be necessary + to set this, you may pass the statCache from one glob() call to the + options object of another, if you know that the filesystem will not + change between calls. (See "Race Conditions" below.) +* `symlinks` A cache of known symbolic links. You may pass in a + previously generated `symlinks` object to save `lstat` calls when + resolving `**` matches. +* `sync` DEPRECATED: use `glob.sync(pattern, opts)` instead. +* `nounique` In some cases, brace-expanded patterns can result in the + same file showing up multiple times in the result set. By default, + this implementation prevents duplicates in the result set. Set this + flag to disable that behavior. +* `nonull` Set to never return an empty set, instead returning a set + containing the pattern itself. This is the default in glob(3). +* `debug` Set to enable debug logging in minimatch and glob. +* `nobrace` Do not expand `{a,b}` and `{1..3}` brace sets. +* `noglobstar` Do not match `**` against multiple filenames. (Ie, + treat it as a normal `*` instead.) +* `noext` Do not match `+(a|b)` "extglob" patterns. +* `nocase` Perform a case-insensitive match. Note: on + case-insensitive filesystems, non-magic patterns will match by + default, since `stat` and `readdir` will not raise errors. +* `matchBase` Perform a basename-only match if the pattern does not + contain any slash characters. That is, `*.js` would be treated as + equivalent to `**/*.js`, matching all js files in all directories. +* `nodir` Do not match directories, only files. (Note: to match + *only* directories, simply put a `/` at the end of the pattern.) +* `ignore` Add a pattern or an array of glob patterns to exclude matches. + Note: `ignore` patterns are *always* in `dot:true` mode, regardless + of any other settings. +* `follow` Follow symlinked directories when expanding `**` patterns. + Note that this can result in a lot of duplicate references in the + presence of cyclic links. +* `realpath` Set to true to call `fs.realpath` on all of the results. + In the case of a symlink that cannot be resolved, the full absolute + path to the matched entry is returned (though it will usually be a + broken symlink) +* `absolute` Set to true to always receive absolute paths for matched + files. Unlike `realpath`, this also affects the values returned in + the `match` event. + +## Comparisons to other fnmatch/glob implementations + +While strict compliance with the existing standards is a worthwhile +goal, some discrepancies exist between node-glob and other +implementations, and are intentional. + +The double-star character `**` is supported by default, unless the +`noglobstar` flag is set. This is supported in the manner of bsdglob +and bash 4.3, where `**` only has special significance if it is the only +thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but +`a/**b` will not. + +Note that symlinked directories are not crawled as part of a `**`, +though their contents may match against subsequent portions of the +pattern. This prevents infinite loops and duplicates and the like. + +If an escaped pattern has no matches, and the `nonull` flag is set, +then glob returns the pattern as-provided, rather than +interpreting the character escapes. For example, +`glob.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than +`"*a?"`. This is akin to setting the `nullglob` option in bash, except +that it does not resolve escaped pattern characters. + +If brace expansion is not disabled, then it is performed before any +other interpretation of the glob pattern. Thus, a pattern like +`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded +**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are +checked for validity. Since those two are valid, matching proceeds. + +### Comments and Negation + +Previously, this module let you mark a pattern as a "comment" if it +started with a `#` character, or a "negated" pattern if it started +with a `!` character. + +These options were deprecated in version 5, and removed in version 6. + +To specify things that should not match, use the `ignore` option. + +## Windows + +**Please only use forward-slashes in glob expressions.** + +Though windows uses either `/` or `\` as its path separator, only `/` +characters are used by this glob implementation. You must use +forward-slashes **only** in glob expressions. Back-slashes will always +be interpreted as escape characters, not path separators. + +Results from absolute patterns such as `/foo/*` are mounted onto the +root setting using `path.join`. On windows, this will by default result +in `/foo/*` matching `C:\foo\bar.txt`. + +## Race Conditions + +Glob searching, by its very nature, is susceptible to race conditions, +since it relies on directory walking and such. + +As a result, it is possible that a file that exists when glob looks for +it may have been deleted or modified by the time it returns the result. + +As part of its internal implementation, this program caches all stat +and readdir calls that it makes, in order to cut down on system +overhead. However, this also makes it even more susceptible to races, +especially if the cache or statCache objects are reused between glob +calls. + +Users are thus advised not to use a glob result as a guarantee of +filesystem state in the face of rapid changes. For the vast majority +of operations, this is never a problem. + +## Glob Logo +Glob's logo was created by [Tanya Brassie](http://tanyabrassie.com/). Logo files can be found [here](https://github.com/isaacs/node-glob/tree/master/logo). + +The logo is licensed under a [Creative Commons Attribution-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-sa/4.0/). + +## Contributing + +Any change to behavior (including bugfixes) must come with a test. + +Patches that fail tests or reduce performance will be rejected. + +``` +# to run tests +npm test + +# to re-generate test fixtures +npm run test-regen + +# to benchmark against bash/zsh +npm run bench + +# to profile javascript +npm run prof +``` diff --git a/node_modules/glob/changelog.md b/node_modules/glob/changelog.md new file mode 100644 index 00000000..41636771 --- /dev/null +++ b/node_modules/glob/changelog.md @@ -0,0 +1,67 @@ +## 7.0 + +- Raise error if `options.cwd` is specified, and not a directory + +## 6.0 + +- Remove comment and negation pattern support +- Ignore patterns are always in `dot:true` mode + +## 5.0 + +- Deprecate comment and negation patterns +- Fix regression in `mark` and `nodir` options from making all cache + keys absolute path. +- Abort if `fs.readdir` returns an error that's unexpected +- Don't emit `match` events for ignored items +- Treat ENOTSUP like ENOTDIR in readdir + +## 4.5 + +- Add `options.follow` to always follow directory symlinks in globstar +- Add `options.realpath` to call `fs.realpath` on all results +- Always cache based on absolute path + +## 4.4 + +- Add `options.ignore` +- Fix handling of broken symlinks + +## 4.3 + +- Bump minimatch to 2.x +- Pass all tests on Windows + +## 4.2 + +- Add `glob.hasMagic` function +- Add `options.nodir` flag + +## 4.1 + +- Refactor sync and async implementations for performance +- Throw if callback provided to sync glob function +- Treat symbolic links in globstar results the same as Bash 4.3 + +## 4.0 + +- Use `^` for dependency versions (bumped major because this breaks + older npm versions) +- Ensure callbacks are only ever called once +- switch to ISC license + +## 3.x + +- Rewrite in JavaScript +- Add support for setting root, cwd, and windows support +- Cache many fs calls +- Add globstar support +- emit match events + +## 2.x + +- Use `glob.h` and `fnmatch.h` from NetBSD + +## 1.x + +- `glob.h` static binding. diff --git a/node_modules/glob/common.js b/node_modules/glob/common.js new file mode 100644 index 00000000..66651bb3 --- /dev/null +++ b/node_modules/glob/common.js @@ -0,0 +1,240 @@ +exports.alphasort = alphasort +exports.alphasorti = alphasorti +exports.setopts = setopts +exports.ownProp = ownProp +exports.makeAbs = makeAbs +exports.finish = finish +exports.mark = mark +exports.isIgnored = isIgnored +exports.childrenIgnored = childrenIgnored + +function ownProp (obj, field) { + return Object.prototype.hasOwnProperty.call(obj, field) +} + +var path = require("path") +var minimatch = require("minimatch") +var isAbsolute = require("path-is-absolute") +var Minimatch = minimatch.Minimatch + +function alphasorti (a, b) { + return a.toLowerCase().localeCompare(b.toLowerCase()) +} + +function alphasort (a, b) { + return a.localeCompare(b) +} + +function setupIgnores (self, options) { + self.ignore = options.ignore || [] + + if (!Array.isArray(self.ignore)) + self.ignore = [self.ignore] + + if (self.ignore.length) { + self.ignore = self.ignore.map(ignoreMap) + } +} + +// ignore patterns are always in dot:true mode. +function ignoreMap (pattern) { + var gmatcher = null + if (pattern.slice(-3) === '/**') { + var gpattern = pattern.replace(/(\/\*\*)+$/, '') + gmatcher = new Minimatch(gpattern, { dot: true }) + } + + return { + matcher: new Minimatch(pattern, { dot: true }), + gmatcher: gmatcher + } +} + +function setopts (self, pattern, options) { + if (!options) + options = {} + + // base-matching: just use globstar for that. + if (options.matchBase && -1 === pattern.indexOf("/")) { + if (options.noglobstar) { + throw new Error("base matching requires globstar") + } + pattern = "**/" + pattern + } + + self.silent = !!options.silent + self.pattern = pattern + self.strict = options.strict !== false + self.realpath = !!options.realpath + self.realpathCache = options.realpathCache || Object.create(null) + self.follow = !!options.follow + self.dot = !!options.dot + self.mark = !!options.mark + self.nodir = !!options.nodir + if (self.nodir) + self.mark = true + self.sync = !!options.sync + self.nounique = !!options.nounique + self.nonull = !!options.nonull + self.nosort = !!options.nosort + self.nocase = !!options.nocase + self.stat = !!options.stat + self.noprocess = !!options.noprocess + self.absolute = !!options.absolute + + self.maxLength = options.maxLength || Infinity + self.cache = options.cache || Object.create(null) + self.statCache = options.statCache || Object.create(null) + self.symlinks = options.symlinks || Object.create(null) + + setupIgnores(self, options) + + self.changedCwd = false + var cwd = process.cwd() + if (!ownProp(options, "cwd")) + self.cwd = cwd + else { + self.cwd = path.resolve(options.cwd) + self.changedCwd = self.cwd !== cwd + } + + self.root = options.root || path.resolve(self.cwd, "/") + self.root = path.resolve(self.root) + if (process.platform === "win32") + self.root = self.root.replace(/\\/g, "/") + + // TODO: is an absolute `cwd` supposed to be resolved against `root`? + // e.g. { cwd: '/test', root: __dirname } === path.join(__dirname, '/test') + self.cwdAbs = isAbsolute(self.cwd) ? self.cwd : makeAbs(self, self.cwd) + if (process.platform === "win32") + self.cwdAbs = self.cwdAbs.replace(/\\/g, "/") + self.nomount = !!options.nomount + + // disable comments and negation in Minimatch. + // Note that they are not supported in Glob itself anyway. + options.nonegate = true + options.nocomment = true + + self.minimatch = new Minimatch(pattern, options) + self.options = self.minimatch.options +} + +function finish (self) { + var nou = self.nounique + var all = nou ? [] : Object.create(null) + + for (var i = 0, l = self.matches.length; i < l; i ++) { + var matches = self.matches[i] + if (!matches || Object.keys(matches).length === 0) { + if (self.nonull) { + // do like the shell, and spit out the literal glob + var literal = self.minimatch.globSet[i] + if (nou) + all.push(literal) + else + all[literal] = true + } + } else { + // had matches + var m = Object.keys(matches) + if (nou) + all.push.apply(all, m) + else + m.forEach(function (m) { + all[m] = true + }) + } + } + + if (!nou) + all = Object.keys(all) + + if (!self.nosort) + all = all.sort(self.nocase ? alphasorti : alphasort) + + // at *some* point we statted all of these + if (self.mark) { + for (var i = 0; i < all.length; i++) { + all[i] = self._mark(all[i]) + } + if (self.nodir) { + all = all.filter(function (e) { + var notDir = !(/\/$/.test(e)) + var c = self.cache[e] || self.cache[makeAbs(self, e)] + if (notDir && c) + notDir = c !== 'DIR' && !Array.isArray(c) + return notDir + }) + } + } + + if (self.ignore.length) + all = all.filter(function(m) { + return !isIgnored(self, m) + }) + + self.found = all +} + +function mark (self, p) { + var abs = makeAbs(self, p) + var c = self.cache[abs] + var m = p + if (c) { + var isDir = c === 'DIR' || Array.isArray(c) + var slash = p.slice(-1) === '/' + + if (isDir && !slash) + m += '/' + else if (!isDir && slash) + m = m.slice(0, -1) + + if (m !== p) { + var mabs = makeAbs(self, m) + self.statCache[mabs] = self.statCache[abs] + self.cache[mabs] = self.cache[abs] + } + } + + return m +} + +// lotta situps... +function makeAbs (self, f) { + var abs = f + if (f.charAt(0) === '/') { + abs = path.join(self.root, f) + } else if (isAbsolute(f) || f === '') { + abs = f + } else if (self.changedCwd) { + abs = path.resolve(self.cwd, f) + } else { + abs = path.resolve(f) + } + + if (process.platform === 'win32') + abs = abs.replace(/\\/g, '/') + + return abs +} + + +// Return true, if pattern ends with globstar '**', for the accompanying parent directory. +// Ex:- If node_modules/** is the pattern, add 'node_modules' to ignore list along with it's contents +function isIgnored (self, path) { + if (!self.ignore.length) + return false + + return self.ignore.some(function(item) { + return item.matcher.match(path) || !!(item.gmatcher && item.gmatcher.match(path)) + }) +} + +function childrenIgnored (self, path) { + if (!self.ignore.length) + return false + + return self.ignore.some(function(item) { + return !!(item.gmatcher && item.gmatcher.match(path)) + }) +} diff --git a/node_modules/glob/glob.js b/node_modules/glob/glob.js new file mode 100644 index 00000000..58dec0f6 --- /dev/null +++ b/node_modules/glob/glob.js @@ -0,0 +1,790 @@ +// Approach: +// +// 1. Get the minimatch set +// 2. For each pattern in the set, PROCESS(pattern, false) +// 3. Store matches per-set, then uniq them +// +// PROCESS(pattern, inGlobStar) +// Get the first [n] items from pattern that are all strings +// Join these together. This is PREFIX. +// If there is no more remaining, then stat(PREFIX) and +// add to matches if it succeeds. END. +// +// If inGlobStar and PREFIX is symlink and points to dir +// set ENTRIES = [] +// else readdir(PREFIX) as ENTRIES +// If fail, END +// +// with ENTRIES +// If pattern[n] is GLOBSTAR +// // handle the case where the globstar match is empty +// // by pruning it out, and testing the resulting pattern +// PROCESS(pattern[0..n] + pattern[n+1 .. $], false) +// // handle other cases. +// for ENTRY in ENTRIES (not dotfiles) +// // attach globstar + tail onto the entry +// // Mark that this entry is a globstar match +// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true) +// +// else // not globstar +// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot) +// Test ENTRY against pattern[n] +// If fails, continue +// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $]) +// +// Caveat: +// Cache all stats and readdirs results to minimize syscall. Since all +// we ever care about is existence and directory-ness, we can just keep +// `true` for files, and [children,...] for directories, or `false` for +// things that don't exist. + +module.exports = glob + +var fs = require('fs') +var rp = require('fs.realpath') +var minimatch = require('minimatch') +var Minimatch = minimatch.Minimatch +var inherits = require('inherits') +var EE = require('events').EventEmitter +var path = require('path') +var assert = require('assert') +var isAbsolute = require('path-is-absolute') +var globSync = require('./sync.js') +var common = require('./common.js') +var alphasort = common.alphasort +var alphasorti = common.alphasorti +var setopts = common.setopts +var ownProp = common.ownProp +var inflight = require('inflight') +var util = require('util') +var childrenIgnored = common.childrenIgnored +var isIgnored = common.isIgnored + +var once = require('once') + +function glob (pattern, options, cb) { + if (typeof options === 'function') cb = options, options = {} + if (!options) options = {} + + if (options.sync) { + if (cb) + throw new TypeError('callback provided to sync glob') + return globSync(pattern, options) + } + + return new Glob(pattern, options, cb) +} + +glob.sync = globSync +var GlobSync = glob.GlobSync = globSync.GlobSync + +// old api surface +glob.glob = glob + +function extend (origin, add) { + if (add === null || typeof add !== 'object') { + return origin + } + + var keys = Object.keys(add) + var i = keys.length + while (i--) { + origin[keys[i]] = add[keys[i]] + } + return origin +} + +glob.hasMagic = function (pattern, options_) { + var options = extend({}, options_) + options.noprocess = true + + var g = new Glob(pattern, options) + var set = g.minimatch.set + + if (!pattern) + return false + + if (set.length > 1) + return true + + for (var j = 0; j < set[0].length; j++) { + if (typeof set[0][j] !== 'string') + return true + } + + return false +} + +glob.Glob = Glob +inherits(Glob, EE) +function Glob (pattern, options, cb) { + if (typeof options === 'function') { + cb = options + options = null + } + + if (options && options.sync) { + if (cb) + throw new TypeError('callback provided to sync glob') + return new GlobSync(pattern, options) + } + + if (!(this instanceof Glob)) + return new Glob(pattern, options, cb) + + setopts(this, pattern, options) + this._didRealPath = false + + // process each pattern in the minimatch set + var n = this.minimatch.set.length + + // The matches are stored as {: true,...} so that + // duplicates are automagically pruned. + // Later, we do an Object.keys() on these. + // Keep them as a list so we can fill in when nonull is set. + this.matches = new Array(n) + + if (typeof cb === 'function') { + cb = once(cb) + this.on('error', cb) + this.on('end', function (matches) { + cb(null, matches) + }) + } + + var self = this + this._processing = 0 + + this._emitQueue = [] + this._processQueue = [] + this.paused = false + + if (this.noprocess) + return this + + if (n === 0) + return done() + + var sync = true + for (var i = 0; i < n; i ++) { + this._process(this.minimatch.set[i], i, false, done) + } + sync = false + + function done () { + --self._processing + if (self._processing <= 0) { + if (sync) { + process.nextTick(function () { + self._finish() + }) + } else { + self._finish() + } + } + } +} + +Glob.prototype._finish = function () { + assert(this instanceof Glob) + if (this.aborted) + return + + if (this.realpath && !this._didRealpath) + return this._realpath() + + common.finish(this) + this.emit('end', this.found) +} + +Glob.prototype._realpath = function () { + if (this._didRealpath) + return + + this._didRealpath = true + + var n = this.matches.length + if (n === 0) + return this._finish() + + var self = this + for (var i = 0; i < this.matches.length; i++) + this._realpathSet(i, next) + + function next () { + if (--n === 0) + self._finish() + } +} + +Glob.prototype._realpathSet = function (index, cb) { + var matchset = this.matches[index] + if (!matchset) + return cb() + + var found = Object.keys(matchset) + var self = this + var n = found.length + + if (n === 0) + return cb() + + var set = this.matches[index] = Object.create(null) + found.forEach(function (p, i) { + // If there's a problem with the stat, then it means that + // one or more of the links in the realpath couldn't be + // resolved. just return the abs value in that case. + p = self._makeAbs(p) + rp.realpath(p, self.realpathCache, function (er, real) { + if (!er) + set[real] = true + else if (er.syscall === 'stat') + set[p] = true + else + self.emit('error', er) // srsly wtf right here + + if (--n === 0) { + self.matches[index] = set + cb() + } + }) + }) +} + +Glob.prototype._mark = function (p) { + return common.mark(this, p) +} + +Glob.prototype._makeAbs = function (f) { + return common.makeAbs(this, f) +} + +Glob.prototype.abort = function () { + this.aborted = true + this.emit('abort') +} + +Glob.prototype.pause = function () { + if (!this.paused) { + this.paused = true + this.emit('pause') + } +} + +Glob.prototype.resume = function () { + if (this.paused) { + this.emit('resume') + this.paused = false + if (this._emitQueue.length) { + var eq = this._emitQueue.slice(0) + this._emitQueue.length = 0 + for (var i = 0; i < eq.length; i ++) { + var e = eq[i] + this._emitMatch(e[0], e[1]) + } + } + if (this._processQueue.length) { + var pq = this._processQueue.slice(0) + this._processQueue.length = 0 + for (var i = 0; i < pq.length; i ++) { + var p = pq[i] + this._processing-- + this._process(p[0], p[1], p[2], p[3]) + } + } + } +} + +Glob.prototype._process = function (pattern, index, inGlobStar, cb) { + assert(this instanceof Glob) + assert(typeof cb === 'function') + + if (this.aborted) + return + + this._processing++ + if (this.paused) { + this._processQueue.push([pattern, index, inGlobStar, cb]) + return + } + + //console.error('PROCESS %d', this._processing, pattern) + + // Get the first [n] parts of pattern that are all strings. + var n = 0 + while (typeof pattern[n] === 'string') { + n ++ + } + // now n is the index of the first one that is *not* a string. + + // see if there's anything else + var prefix + switch (n) { + // if not, then this is rather simple + case pattern.length: + this._processSimple(pattern.join('/'), index, cb) + return + + case 0: + // pattern *starts* with some non-trivial item. + // going to readdir(cwd), but not include the prefix in matches. + prefix = null + break + + default: + // pattern has some string bits in the front. + // whatever it starts with, whether that's 'absolute' like /foo/bar, + // or 'relative' like '../baz' + prefix = pattern.slice(0, n).join('/') + break + } + + var remain = pattern.slice(n) + + // get the list of entries. + var read + if (prefix === null) + read = '.' + else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { + if (!prefix || !isAbsolute(prefix)) + prefix = '/' + prefix + read = prefix + } else + read = prefix + + var abs = this._makeAbs(read) + + //if ignored, skip _processing + if (childrenIgnored(this, read)) + return cb() + + var isGlobStar = remain[0] === minimatch.GLOBSTAR + if (isGlobStar) + this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb) + else + this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb) +} + +Glob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) { + var self = this + this._readdir(abs, inGlobStar, function (er, entries) { + return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb) + }) +} + +Glob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { + + // if the abs isn't a dir, then nothing can match! + if (!entries) + return cb() + + // It will only match dot entries if it starts with a dot, or if + // dot is set. Stuff like @(.foo|.bar) isn't allowed. + var pn = remain[0] + var negate = !!this.minimatch.negate + var rawGlob = pn._glob + var dotOk = this.dot || rawGlob.charAt(0) === '.' + + var matchedEntries = [] + for (var i = 0; i < entries.length; i++) { + var e = entries[i] + if (e.charAt(0) !== '.' || dotOk) { + var m + if (negate && !prefix) { + m = !e.match(pn) + } else { + m = e.match(pn) + } + if (m) + matchedEntries.push(e) + } + } + + //console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries) + + var len = matchedEntries.length + // If there are no matched entries, then nothing matches. + if (len === 0) + return cb() + + // if this is the last remaining pattern bit, then no need for + // an additional stat *unless* the user has specified mark or + // stat explicitly. We know they exist, since readdir returned + // them. + + if (remain.length === 1 && !this.mark && !this.stat) { + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + if (prefix) { + if (prefix !== '/') + e = prefix + '/' + e + else + e = prefix + e + } + + if (e.charAt(0) === '/' && !this.nomount) { + e = path.join(this.root, e) + } + this._emitMatch(index, e) + } + // This was the last one, and no stats were needed + return cb() + } + + // now test all matched entries as stand-ins for that part + // of the pattern. + remain.shift() + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + var newPattern + if (prefix) { + if (prefix !== '/') + e = prefix + '/' + e + else + e = prefix + e + } + this._process([e].concat(remain), index, inGlobStar, cb) + } + cb() +} + +Glob.prototype._emitMatch = function (index, e) { + if (this.aborted) + return + + if (isIgnored(this, e)) + return + + if (this.paused) { + this._emitQueue.push([index, e]) + return + } + + var abs = isAbsolute(e) ? e : this._makeAbs(e) + + if (this.mark) + e = this._mark(e) + + if (this.absolute) + e = abs + + if (this.matches[index][e]) + return + + if (this.nodir) { + var c = this.cache[abs] + if (c === 'DIR' || Array.isArray(c)) + return + } + + this.matches[index][e] = true + + var st = this.statCache[abs] + if (st) + this.emit('stat', e, st) + + this.emit('match', e) +} + +Glob.prototype._readdirInGlobStar = function (abs, cb) { + if (this.aborted) + return + + // follow all symlinked directories forever + // just proceed as if this is a non-globstar situation + if (this.follow) + return this._readdir(abs, false, cb) + + var lstatkey = 'lstat\0' + abs + var self = this + var lstatcb = inflight(lstatkey, lstatcb_) + + if (lstatcb) + fs.lstat(abs, lstatcb) + + function lstatcb_ (er, lstat) { + if (er && er.code === 'ENOENT') + return cb() + + var isSym = lstat && lstat.isSymbolicLink() + self.symlinks[abs] = isSym + + // If it's not a symlink or a dir, then it's definitely a regular file. + // don't bother doing a readdir in that case. + if (!isSym && lstat && !lstat.isDirectory()) { + self.cache[abs] = 'FILE' + cb() + } else + self._readdir(abs, false, cb) + } +} + +Glob.prototype._readdir = function (abs, inGlobStar, cb) { + if (this.aborted) + return + + cb = inflight('readdir\0'+abs+'\0'+inGlobStar, cb) + if (!cb) + return + + //console.error('RD %j %j', +inGlobStar, abs) + if (inGlobStar && !ownProp(this.symlinks, abs)) + return this._readdirInGlobStar(abs, cb) + + if (ownProp(this.cache, abs)) { + var c = this.cache[abs] + if (!c || c === 'FILE') + return cb() + + if (Array.isArray(c)) + return cb(null, c) + } + + var self = this + fs.readdir(abs, readdirCb(this, abs, cb)) +} + +function readdirCb (self, abs, cb) { + return function (er, entries) { + if (er) + self._readdirError(abs, er, cb) + else + self._readdirEntries(abs, entries, cb) + } +} + +Glob.prototype._readdirEntries = function (abs, entries, cb) { + if (this.aborted) + return + + // if we haven't asked to stat everything, then just + // assume that everything in there exists, so we can avoid + // having to stat it a second time. + if (!this.mark && !this.stat) { + for (var i = 0; i < entries.length; i ++) { + var e = entries[i] + if (abs === '/') + e = abs + e + else + e = abs + '/' + e + this.cache[e] = true + } + } + + this.cache[abs] = entries + return cb(null, entries) +} + +Glob.prototype._readdirError = function (f, er, cb) { + if (this.aborted) + return + + // handle errors, and cache the information + switch (er.code) { + case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 + case 'ENOTDIR': // totally normal. means it *does* exist. + var abs = this._makeAbs(f) + this.cache[abs] = 'FILE' + if (abs === this.cwdAbs) { + var error = new Error(er.code + ' invalid cwd ' + this.cwd) + error.path = this.cwd + error.code = er.code + this.emit('error', error) + this.abort() + } + break + + case 'ENOENT': // not terribly unusual + case 'ELOOP': + case 'ENAMETOOLONG': + case 'UNKNOWN': + this.cache[this._makeAbs(f)] = false + break + + default: // some unusual error. Treat as failure. + this.cache[this._makeAbs(f)] = false + if (this.strict) { + this.emit('error', er) + // If the error is handled, then we abort + // if not, we threw out of here + this.abort() + } + if (!this.silent) + console.error('glob error', er) + break + } + + return cb() +} + +Glob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) { + var self = this + this._readdir(abs, inGlobStar, function (er, entries) { + self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb) + }) +} + + +Glob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { + //console.error('pgs2', prefix, remain[0], entries) + + // no entries means not a dir, so it can never have matches + // foo.txt/** doesn't match foo.txt + if (!entries) + return cb() + + // test without the globstar, and with every child both below + // and replacing the globstar. + var remainWithoutGlobStar = remain.slice(1) + var gspref = prefix ? [ prefix ] : [] + var noGlobStar = gspref.concat(remainWithoutGlobStar) + + // the noGlobStar pattern exits the inGlobStar state + this._process(noGlobStar, index, false, cb) + + var isSym = this.symlinks[abs] + var len = entries.length + + // If it's a symlink, and we're in a globstar, then stop + if (isSym && inGlobStar) + return cb() + + for (var i = 0; i < len; i++) { + var e = entries[i] + if (e.charAt(0) === '.' && !this.dot) + continue + + // these two cases enter the inGlobStar state + var instead = gspref.concat(entries[i], remainWithoutGlobStar) + this._process(instead, index, true, cb) + + var below = gspref.concat(entries[i], remain) + this._process(below, index, true, cb) + } + + cb() +} + +Glob.prototype._processSimple = function (prefix, index, cb) { + // XXX review this. Shouldn't it be doing the mounting etc + // before doing stat? kinda weird? + var self = this + this._stat(prefix, function (er, exists) { + self._processSimple2(prefix, index, er, exists, cb) + }) +} +Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) { + + //console.error('ps2', prefix, exists) + + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + // If it doesn't exist, then just mark the lack of results + if (!exists) + return cb() + + if (prefix && isAbsolute(prefix) && !this.nomount) { + var trail = /[\/\\]$/.test(prefix) + if (prefix.charAt(0) === '/') { + prefix = path.join(this.root, prefix) + } else { + prefix = path.resolve(this.root, prefix) + if (trail) + prefix += '/' + } + } + + if (process.platform === 'win32') + prefix = prefix.replace(/\\/g, '/') + + // Mark this as a match + this._emitMatch(index, prefix) + cb() +} + +// Returns either 'DIR', 'FILE', or false +Glob.prototype._stat = function (f, cb) { + var abs = this._makeAbs(f) + var needDir = f.slice(-1) === '/' + + if (f.length > this.maxLength) + return cb() + + if (!this.stat && ownProp(this.cache, abs)) { + var c = this.cache[abs] + + if (Array.isArray(c)) + c = 'DIR' + + // It exists, but maybe not how we need it + if (!needDir || c === 'DIR') + return cb(null, c) + + if (needDir && c === 'FILE') + return cb() + + // otherwise we have to stat, because maybe c=true + // if we know it exists, but not what it is. + } + + var exists + var stat = this.statCache[abs] + if (stat !== undefined) { + if (stat === false) + return cb(null, stat) + else { + var type = stat.isDirectory() ? 'DIR' : 'FILE' + if (needDir && type === 'FILE') + return cb() + else + return cb(null, type, stat) + } + } + + var self = this + var statcb = inflight('stat\0' + abs, lstatcb_) + if (statcb) + fs.lstat(abs, statcb) + + function lstatcb_ (er, lstat) { + if (lstat && lstat.isSymbolicLink()) { + // If it's a symlink, then treat it as the target, unless + // the target does not exist, then treat it as a file. + return fs.stat(abs, function (er, stat) { + if (er) + self._stat2(f, abs, null, lstat, cb) + else + self._stat2(f, abs, er, stat, cb) + }) + } else { + self._stat2(f, abs, er, lstat, cb) + } + } +} + +Glob.prototype._stat2 = function (f, abs, er, stat, cb) { + if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) { + this.statCache[abs] = false + return cb() + } + + var needDir = f.slice(-1) === '/' + this.statCache[abs] = stat + + if (abs.slice(-1) === '/' && stat && !stat.isDirectory()) + return cb(null, false, stat) + + var c = true + if (stat) + c = stat.isDirectory() ? 'DIR' : 'FILE' + this.cache[abs] = this.cache[abs] || c + + if (needDir && c === 'FILE') + return cb() + + return cb(null, c, stat) +} diff --git a/node_modules/glob/package.json b/node_modules/glob/package.json new file mode 100644 index 00000000..5e8289e9 --- /dev/null +++ b/node_modules/glob/package.json @@ -0,0 +1,76 @@ +{ + "_from": "glob@^7.0.5", + "_id": "glob@7.1.4", + "_inBundle": false, + "_integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "_location": "/glob", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "glob@^7.0.5", + "name": "glob", + "escapedName": "glob", + "rawSpec": "^7.0.5", + "saveSpec": null, + "fetchSpec": "^7.0.5" + }, + "_requiredBy": [ + "/yamljs" + ], + "_resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "_shasum": "aa608a2f6c577ad357e1ae5a5c26d9a8d1969255", + "_spec": "glob@^7.0.5", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/yamljs", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/isaacs/node-glob/issues" + }, + "bundleDependencies": false, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "deprecated": false, + "description": "a little globber", + "devDependencies": { + "mkdirp": "0", + "rimraf": "^2.2.8", + "tap": "^12.0.1", + "tick": "0.0.6" + }, + "engines": { + "node": "*" + }, + "files": [ + "glob.js", + "sync.js", + "common.js" + ], + "homepage": "https://github.com/isaacs/node-glob#readme", + "license": "ISC", + "main": "glob.js", + "name": "glob", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/node-glob.git" + }, + "scripts": { + "bench": "bash benchmark.sh", + "benchclean": "node benchclean.js", + "prepublish": "npm run benchclean", + "prof": "bash prof.sh && cat profile.txt", + "profclean": "rm -f v8.log profile.txt", + "test": "tap test/*.js --cov", + "test-regen": "npm run profclean && TEST_REGEN=1 node test/00-setup.js" + }, + "version": "7.1.4" +} diff --git a/node_modules/glob/sync.js b/node_modules/glob/sync.js new file mode 100644 index 00000000..c952134b --- /dev/null +++ b/node_modules/glob/sync.js @@ -0,0 +1,486 @@ +module.exports = globSync +globSync.GlobSync = GlobSync + +var fs = require('fs') +var rp = require('fs.realpath') +var minimatch = require('minimatch') +var Minimatch = minimatch.Minimatch +var Glob = require('./glob.js').Glob +var util = require('util') +var path = require('path') +var assert = require('assert') +var isAbsolute = require('path-is-absolute') +var common = require('./common.js') +var alphasort = common.alphasort +var alphasorti = common.alphasorti +var setopts = common.setopts +var ownProp = common.ownProp +var childrenIgnored = common.childrenIgnored +var isIgnored = common.isIgnored + +function globSync (pattern, options) { + if (typeof options === 'function' || arguments.length === 3) + throw new TypeError('callback provided to sync glob\n'+ + 'See: https://github.com/isaacs/node-glob/issues/167') + + return new GlobSync(pattern, options).found +} + +function GlobSync (pattern, options) { + if (!pattern) + throw new Error('must provide pattern') + + if (typeof options === 'function' || arguments.length === 3) + throw new TypeError('callback provided to sync glob\n'+ + 'See: https://github.com/isaacs/node-glob/issues/167') + + if (!(this instanceof GlobSync)) + return new GlobSync(pattern, options) + + setopts(this, pattern, options) + + if (this.noprocess) + return this + + var n = this.minimatch.set.length + this.matches = new Array(n) + for (var i = 0; i < n; i ++) { + this._process(this.minimatch.set[i], i, false) + } + this._finish() +} + +GlobSync.prototype._finish = function () { + assert(this instanceof GlobSync) + if (this.realpath) { + var self = this + this.matches.forEach(function (matchset, index) { + var set = self.matches[index] = Object.create(null) + for (var p in matchset) { + try { + p = self._makeAbs(p) + var real = rp.realpathSync(p, self.realpathCache) + set[real] = true + } catch (er) { + if (er.syscall === 'stat') + set[self._makeAbs(p)] = true + else + throw er + } + } + }) + } + common.finish(this) +} + + +GlobSync.prototype._process = function (pattern, index, inGlobStar) { + assert(this instanceof GlobSync) + + // Get the first [n] parts of pattern that are all strings. + var n = 0 + while (typeof pattern[n] === 'string') { + n ++ + } + // now n is the index of the first one that is *not* a string. + + // See if there's anything else + var prefix + switch (n) { + // if not, then this is rather simple + case pattern.length: + this._processSimple(pattern.join('/'), index) + return + + case 0: + // pattern *starts* with some non-trivial item. + // going to readdir(cwd), but not include the prefix in matches. + prefix = null + break + + default: + // pattern has some string bits in the front. + // whatever it starts with, whether that's 'absolute' like /foo/bar, + // or 'relative' like '../baz' + prefix = pattern.slice(0, n).join('/') + break + } + + var remain = pattern.slice(n) + + // get the list of entries. + var read + if (prefix === null) + read = '.' + else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { + if (!prefix || !isAbsolute(prefix)) + prefix = '/' + prefix + read = prefix + } else + read = prefix + + var abs = this._makeAbs(read) + + //if ignored, skip processing + if (childrenIgnored(this, read)) + return + + var isGlobStar = remain[0] === minimatch.GLOBSTAR + if (isGlobStar) + this._processGlobStar(prefix, read, abs, remain, index, inGlobStar) + else + this._processReaddir(prefix, read, abs, remain, index, inGlobStar) +} + + +GlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) { + var entries = this._readdir(abs, inGlobStar) + + // if the abs isn't a dir, then nothing can match! + if (!entries) + return + + // It will only match dot entries if it starts with a dot, or if + // dot is set. Stuff like @(.foo|.bar) isn't allowed. + var pn = remain[0] + var negate = !!this.minimatch.negate + var rawGlob = pn._glob + var dotOk = this.dot || rawGlob.charAt(0) === '.' + + var matchedEntries = [] + for (var i = 0; i < entries.length; i++) { + var e = entries[i] + if (e.charAt(0) !== '.' || dotOk) { + var m + if (negate && !prefix) { + m = !e.match(pn) + } else { + m = e.match(pn) + } + if (m) + matchedEntries.push(e) + } + } + + var len = matchedEntries.length + // If there are no matched entries, then nothing matches. + if (len === 0) + return + + // if this is the last remaining pattern bit, then no need for + // an additional stat *unless* the user has specified mark or + // stat explicitly. We know they exist, since readdir returned + // them. + + if (remain.length === 1 && !this.mark && !this.stat) { + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + if (prefix) { + if (prefix.slice(-1) !== '/') + e = prefix + '/' + e + else + e = prefix + e + } + + if (e.charAt(0) === '/' && !this.nomount) { + e = path.join(this.root, e) + } + this._emitMatch(index, e) + } + // This was the last one, and no stats were needed + return + } + + // now test all matched entries as stand-ins for that part + // of the pattern. + remain.shift() + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + var newPattern + if (prefix) + newPattern = [prefix, e] + else + newPattern = [e] + this._process(newPattern.concat(remain), index, inGlobStar) + } +} + + +GlobSync.prototype._emitMatch = function (index, e) { + if (isIgnored(this, e)) + return + + var abs = this._makeAbs(e) + + if (this.mark) + e = this._mark(e) + + if (this.absolute) { + e = abs + } + + if (this.matches[index][e]) + return + + if (this.nodir) { + var c = this.cache[abs] + if (c === 'DIR' || Array.isArray(c)) + return + } + + this.matches[index][e] = true + + if (this.stat) + this._stat(e) +} + + +GlobSync.prototype._readdirInGlobStar = function (abs) { + // follow all symlinked directories forever + // just proceed as if this is a non-globstar situation + if (this.follow) + return this._readdir(abs, false) + + var entries + var lstat + var stat + try { + lstat = fs.lstatSync(abs) + } catch (er) { + if (er.code === 'ENOENT') { + // lstat failed, doesn't exist + return null + } + } + + var isSym = lstat && lstat.isSymbolicLink() + this.symlinks[abs] = isSym + + // If it's not a symlink or a dir, then it's definitely a regular file. + // don't bother doing a readdir in that case. + if (!isSym && lstat && !lstat.isDirectory()) + this.cache[abs] = 'FILE' + else + entries = this._readdir(abs, false) + + return entries +} + +GlobSync.prototype._readdir = function (abs, inGlobStar) { + var entries + + if (inGlobStar && !ownProp(this.symlinks, abs)) + return this._readdirInGlobStar(abs) + + if (ownProp(this.cache, abs)) { + var c = this.cache[abs] + if (!c || c === 'FILE') + return null + + if (Array.isArray(c)) + return c + } + + try { + return this._readdirEntries(abs, fs.readdirSync(abs)) + } catch (er) { + this._readdirError(abs, er) + return null + } +} + +GlobSync.prototype._readdirEntries = function (abs, entries) { + // if we haven't asked to stat everything, then just + // assume that everything in there exists, so we can avoid + // having to stat it a second time. + if (!this.mark && !this.stat) { + for (var i = 0; i < entries.length; i ++) { + var e = entries[i] + if (abs === '/') + e = abs + e + else + e = abs + '/' + e + this.cache[e] = true + } + } + + this.cache[abs] = entries + + // mark and cache dir-ness + return entries +} + +GlobSync.prototype._readdirError = function (f, er) { + // handle errors, and cache the information + switch (er.code) { + case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 + case 'ENOTDIR': // totally normal. means it *does* exist. + var abs = this._makeAbs(f) + this.cache[abs] = 'FILE' + if (abs === this.cwdAbs) { + var error = new Error(er.code + ' invalid cwd ' + this.cwd) + error.path = this.cwd + error.code = er.code + throw error + } + break + + case 'ENOENT': // not terribly unusual + case 'ELOOP': + case 'ENAMETOOLONG': + case 'UNKNOWN': + this.cache[this._makeAbs(f)] = false + break + + default: // some unusual error. Treat as failure. + this.cache[this._makeAbs(f)] = false + if (this.strict) + throw er + if (!this.silent) + console.error('glob error', er) + break + } +} + +GlobSync.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) { + + var entries = this._readdir(abs, inGlobStar) + + // no entries means not a dir, so it can never have matches + // foo.txt/** doesn't match foo.txt + if (!entries) + return + + // test without the globstar, and with every child both below + // and replacing the globstar. + var remainWithoutGlobStar = remain.slice(1) + var gspref = prefix ? [ prefix ] : [] + var noGlobStar = gspref.concat(remainWithoutGlobStar) + + // the noGlobStar pattern exits the inGlobStar state + this._process(noGlobStar, index, false) + + var len = entries.length + var isSym = this.symlinks[abs] + + // If it's a symlink, and we're in a globstar, then stop + if (isSym && inGlobStar) + return + + for (var i = 0; i < len; i++) { + var e = entries[i] + if (e.charAt(0) === '.' && !this.dot) + continue + + // these two cases enter the inGlobStar state + var instead = gspref.concat(entries[i], remainWithoutGlobStar) + this._process(instead, index, true) + + var below = gspref.concat(entries[i], remain) + this._process(below, index, true) + } +} + +GlobSync.prototype._processSimple = function (prefix, index) { + // XXX review this. Shouldn't it be doing the mounting etc + // before doing stat? kinda weird? + var exists = this._stat(prefix) + + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + // If it doesn't exist, then just mark the lack of results + if (!exists) + return + + if (prefix && isAbsolute(prefix) && !this.nomount) { + var trail = /[\/\\]$/.test(prefix) + if (prefix.charAt(0) === '/') { + prefix = path.join(this.root, prefix) + } else { + prefix = path.resolve(this.root, prefix) + if (trail) + prefix += '/' + } + } + + if (process.platform === 'win32') + prefix = prefix.replace(/\\/g, '/') + + // Mark this as a match + this._emitMatch(index, prefix) +} + +// Returns either 'DIR', 'FILE', or false +GlobSync.prototype._stat = function (f) { + var abs = this._makeAbs(f) + var needDir = f.slice(-1) === '/' + + if (f.length > this.maxLength) + return false + + if (!this.stat && ownProp(this.cache, abs)) { + var c = this.cache[abs] + + if (Array.isArray(c)) + c = 'DIR' + + // It exists, but maybe not how we need it + if (!needDir || c === 'DIR') + return c + + if (needDir && c === 'FILE') + return false + + // otherwise we have to stat, because maybe c=true + // if we know it exists, but not what it is. + } + + var exists + var stat = this.statCache[abs] + if (!stat) { + var lstat + try { + lstat = fs.lstatSync(abs) + } catch (er) { + if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) { + this.statCache[abs] = false + return false + } + } + + if (lstat && lstat.isSymbolicLink()) { + try { + stat = fs.statSync(abs) + } catch (er) { + stat = lstat + } + } else { + stat = lstat + } + } + + this.statCache[abs] = stat + + var c = true + if (stat) + c = stat.isDirectory() ? 'DIR' : 'FILE' + + this.cache[abs] = this.cache[abs] || c + + if (needDir && c === 'FILE') + return false + + return c +} + +GlobSync.prototype._mark = function (p) { + return common.mark(this, p) +} + +GlobSync.prototype._makeAbs = function (f) { + return common.makeAbs(this, f) +} diff --git a/node_modules/globalize/CONTRIBUTING.md b/node_modules/globalize/CONTRIBUTING.md new file mode 100644 index 00000000..c97f0fa9 --- /dev/null +++ b/node_modules/globalize/CONTRIBUTING.md @@ -0,0 +1,5 @@ +Welcome! Thanks for your interest in contributing to Globalize. More information on how to contribute to this and all other jQuery Foundation projects is over at [contribute.jquery.org](http://contribute.jquery.org). Before writing code for this project, be sure to read [Writing Code for jQuery Foundation Projects](http://contribute.jquery.org/code/). + +You may also want to take a look at our [commit & pull request guide](http://contribute.jquery.org/commits-and-pull-requests/) and [style guides](http://contribute.jquery.org/style-guide/) for instructions on how to maintain your fork and submit your code. Before we can merge any pull request, we'll also need you to sign our [contributor license agreement](http://contribute.jquery.org/cla). + +You can find us on [Slack](https://globalizejs.slack.com/). If you're new, [join here](https://join.slack.com/t/globalizejs/shared_invite/enQtMjk4OTUwNzM1Nzk0LTk2YmY0YjY3Yzk4YzU3M2NkMDZjNThlNzcwNTkyNGJhNDhiNjdkMWUyN2Q2MjVmNTk0ZjkyNGQ3MWEyNzNmMWU). If you've never contributed to open source before, we've put together [a short guide with tips, tricks, and ideas on getting started](http://contribute.jquery.org/open-source/). diff --git a/node_modules/globalize/LICENSE b/node_modules/globalize/LICENSE new file mode 100644 index 00000000..0cea620c --- /dev/null +++ b/node_modules/globalize/LICENSE @@ -0,0 +1,45 @@ +Copyright JS Foundation and other contributors, https://js.foundation + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/jquery/globalize + +The following license applies to all parts of this software except as +documented below: + +==== + +The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code contained within the doc directory. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +All files located in the node_modules and external directories are +externally maintained libraries used by this software which have their +own licenses; we recommend you read them, as their terms may differ from +the terms above. diff --git a/node_modules/globalize/README.md b/node_modules/globalize/README.md new file mode 100644 index 00000000..6b47db5a --- /dev/null +++ b/node_modules/globalize/README.md @@ -0,0 +1,776 @@ +# Globalize + +[![Build Status](https://secure.travis-ci.org/globalizejs/globalize.svg?branch=master)](http://travis-ci.org/globalizejs/globalize) +[![devDependency Status](https://david-dm.org/globalizejs/globalize/status.svg)](https://david-dm.org/globalizejs/globalize#info=dependencies) +[![devDependency Status](https://david-dm.org/globalizejs/globalize/dev-status.svg)](https://david-dm.org/globalizejs/globalize#info=devDependencies) + +A JavaScript library for internationalization and localization that leverage the official [Unicode CLDR](http://cldr.unicode.org/) JSON data. The library works both for the browser and as a +Node.js module. + +- [About Globalize](#about-globalize) + - [Why globalization?](#why-globalization) + - [Why Globalize?](#why-globalize) + - [Migrating from Globalize 0.x](#migrating-from-globalize-0x) + - [Where to use it?](#where-to-use-it) + - [Where does the data come from?](#where-does-the-data-come-from) + - [Only load and use what you need](#pick-the-modules-you-need) + - [Browser support](#browser-support) +- [Getting started](#getting-started) + - [Requirements](#requirements) + - [Installation](#installation) + - [Usage](#usage) + - [Performance](#performance) + - [Compilation and the Runtime modules](#compilation-and-the-runtime-modules) + - [Examples](#examples) + - [Community](#community) +- [API](#api) + - [Core](#core-module) + - [Date module](#date-module) + - [Message module](#message-module) + - [Number module](#number-module) + - [Currency module](#currency-module) + - [Plural module](#plural-module) + - [Relative time module](#relative-time-module) + - [Unit module](#unit-module) + - more to come... +- [Error reference](#error-reference) +- [Contributing](#contributing) + - [Roadmap](#roadmap) +- [Development](#development) + - [File structure](#file-structure) + - [Source files](#source-files) + - [Tests](#tests) + - [Build](#build) + + +## About Globalize + +### Why globalization? + +Each language, and the countries that speak that language, have different expectations when it comes to how numbers (including currency and percentages) and dates should appear. Obviously, each language has different names for the days of the week and the months of the year. But they also have different expectations for the structure of dates, such as what order the day, month and year are in. In number formatting, not only does the character used to delineate number groupings and the decimal portion differ, but the placement of those characters differ as well. + +A user using an application should be able to read and write dates and numbers in the format they are accustomed to. This library makes this possible, providing an API to convert user-entered number and date strings - in their own format - into actual numbers and dates, and conversely, to format numbers and dates into that string format. + +Even if the application deals only with the English locale, it may still need globalization to format programming language bytes into human-understandable language and vice-versa in an effective and reasonable way. For example, to display something better than "Edited 1 minutes ago". + +### Why Globalize? + +Globalize provides number formatting and parsing, date and time formatting and parsing, currency formatting, message formatting (ICU message format pattern), and plural support. + +Design Goals. + +- Leverages the Unicode CLDR data and follows its UTS#35 specification. +- Keeps code separate from i18n content. Doesn't host or embed any locale data in the library. Empowers developers to control the loading mechanism of their choice. +- Allows developers to load as much or as little data as they need. Avoids duplicating data if using multiple i18n libraries that leverage CLDR. +- Keeps code modular. Allows developers to load the i18n functionalities they need. +- Runs in browsers and Node.js, consistently across all of them. +- Makes globalization as easy to use as jQuery. + +Globalize is based on the Unicode Consortium's Common Locale Data Repository (CLDR), the largest and most extensive standard repository of locale data available. CLDR is constantly updated and is used by many large applications and operating systems, so you'll always have access to the most accurate and up-to-date locale data. + +Globalize needs CLDR content to function properly, although it doesn't embed, hard-code, or host such content. Instead, Globalize empowers developers to load CLDR data the way they want. Vanilla CLDR in its official JSON format (no pre-processing) is expected to be provided. As a consequence, (a) Globalize avoids bugs caused by outdated i18n content. Developers can use up-to-date CLDR data directly from Unicode as soon as it's released, without having to wait for any pipeline on our side. (b) Developers have full control over which locale coverage they want to provide on their applications. (c) Developers are able to share the same i18n dataset between Globalize and other libraries that leverage CLDR. There's no need for duplicating data. + +Globalize is systematically tested against desktop and mobile browsers and Node.js. So, using it you'll get consistent results across different browsers and across browsers and the server. + +Globalize doesn't use native Ecma-402 yet, which could potentially improve date and number formatting performance. Although Ecma-402 support is improving among modern browsers and even Node.js, the functionality and locale coverage level varies between different environments (see Comparing JavaScript Libraries [slide 25][]). Globalize needs to do more research and testings to use it reliably. + +For alternative libraries and more, check out this [JavaScript globalization overview][]. + +[slide 25]: http://jsi18n.com/jsi18n.pdf +[JavaScript globalization overview]: http://rxaviers.github.io/javascript-globalization/ + +### Migrating from Globalize 0.x + +Are you coming from Globalize 0.x? Read our [migration guide][] to learn what have changed and how to migrate older 0.x code to up-to-date 1.x. + +[migration guide]: doc/migrating-from-0.x.md + +### Where to use it? + +Globalize is designed to work both in the [browser](#browser-support), or in [Node.js](#usage). It supports both [AMD](#usage) and [CommonJS](#usage). + +### Where does the data come from? + +Globalize uses the [Unicode CLDR](http://cldr.unicode.org/), the largest and most extensive standard repository of locale data. + +We do NOT embed any i18n data within our library. However, we make it really easy to use. Read [How to get and load CLDR JSON data](#2-cldr-content) for more information on its usage. + +### Pick the modules you need + +| File | Minified + gzipped size | Runtime minified + gzipped size | Summary | +| -------------------------- | ----------------------: | ------------------------------: | ------------------------------------------------------------ | +| globalize.js | 1.5KB | 1.0KB | [Core library](#core-module) | +| globalize/currency.js | 2.7KB | 0.6KB | [Currency module](#currency-module) provides currency formatting | +| globalize/date.js | 7.7KB | 4.3KB | [Date module](#date-module) provides date formatting and parsing | +| globalize/message.js | 5.3KB | 0.7KB | [Message module](#message-module) provides ICU message format support | +| globalize/number.js | 4.1KB | 2.3KB | [Number module](#number-module) provides number formatting and parsing | +| globalize/plural.js | 2.3KB | 0.4KB | [Plural module](#plural-module) provides pluralization support | +| globalize/relative-time.js | 0.8KB | 0.5KB | [Relative time module](#relative-time-module) provides relative time formatting support | +| globalize/unit.js | 0.9KB | 0.6KB | [Unit module](#unit-module) provides unit formatting support | + +### Browser Support + +Globalize 1.x supports the following browsers: + +- Chrome: (Current - 1) or Current +- Firefox: (Current - 1) or Current +- Safari: 5.1+ +- Opera: 12.1x, (Current - 1) or Current +- IE9+ + +*(Current - 1)* or *Current* denotes that we support the current stable version of the browser and the version that preceded it. For example, if the current version of a browser is 24.x, we support the 24.x and 23.x versions. + +## Getting Started + + npm install globalize cldr-data iana-tz-data + +```js +var Globalize = require( "globalize" ); +Globalize.load( require( "cldr-data" ).entireSupplemental() ); +Globalize.load( require( "cldr-data" ).entireMainFor( "en", "es" ) ); +Globalize.loadTimeZone( require( "iana-tz-data" ) ); + +Globalize("en").formatDate(new Date()); +// > "11/27/2015" + +Globalize("es").formatDate(new Date()); +// > "27/11/2015" +``` + +Note `cldr-data` is an optional module, read [CLDR content](#2-cldr-content) section below for more information on how to get CLDR from different sources. + +The [`iana-tz-data`](https://github.com/rxaviers/iana-tz-data) module is only needed when IANA time zones (via `options.timeZone`) are used with date functions. Read [IANA time zone data](#3-iana-time-zone-data) below for more information. + +Read the [Locales section](#locales) for more information about supported locales. For AMD, bower and other usage examples, see [Examples section](#examples). + +### Installation + +#### Downloading a ZIP or tarball archive + +Click the GitHub [releases tab](https://github.com/globalizejs/globalize/releases) and download the latest available Globalize package. + +#### Using a package manager + +You can use either npm or bower: + +- `npm install globalize` +- `bower install globalize` + +#### Building from source + +1. `git clone https://github.com/globalizejs/globalize.git` +2. [Build the distribution files](#build) + +### Requirements + +#### 1. Dependencies + +If you use module loading like ES6 import, CommonJS, or AMD and fetch your code using package managers like *npm* or *bower*, you don't need to worry about this and can skip reading this section. Otherwise, you need to satisfy Globalize dependencies prior to using it. There is only one external dependency: [cldr.js][], which is a CLDR low level manipulation tool. Additionally, you need to satisfy the cross-dependencies between modules. + +| Module | Dependencies (load in order) | +| -------------------- | ---------------------------------------- | +| Core module | [cldr.js][] | +| Currency module | globalize.js (core), globalize/number.js, and globalize/plural.js (only required for "code" or "name" styles) | +| Date module | globalize.js (core) and globalize/number.js | +| Message module | globalize.js (core) and globalize/plural.js (if using messages that need pluralization support) | +| Number module | globalize.js (core) | +| Plural | globalize.js (core) | +| Relative time module | globalize.js (core), globalize/number.js, and globalize/plural.js | +| Unit module | globalize.js (core), globalize/number.js, and globalize/plural.js | + +As an alternative to deducing this yourself, use this [online tool](http://johnnyreilly.github.io/globalize-so-what-cha-want/). The tool allows you to select the modules you're interested in using and tells you the Globalize files *and* CLDR JSON that you need. + +[cldr.js]: https://github.com/rxaviers/cldrjs + +#### 2. CLDR content + +Globalize is the i18n software (the engine). Unicode CLDR is the i18n content (the fuel). You need to feed Globalize on the appropriate portions of CLDR prior to using it. + +*(a) How do I figure out which CLDR portions are appropriate for my needs?* + +Each Globalize function requires a special set of CLDR portions. Once you know which Globalize functionalities you need, you can deduce its respective CLDR requirements. See table below. + +| Module | Required CLDR JSON files | +| -------------------- | ---------------------------------------- | +| Core module | cldr/supplemental/likelySubtags.json | +| Currency module | cldr/main/`locale`/currencies.json
cldr/supplemental/currencyData.json
+CLDR JSON files from number module
+CLDR JSON files from plural module for name style support | +| Date module | cldr/main/`locale`/ca-gregorian.json
cldr/main/`locale`/timeZoneNames.json
cldr/supplemental/metaZones.json
cldr/supplemental/timeData.json
cldr/supplemental/weekData.json
+CLDR JSON files from number module | +| Number module | cldr/main/`locale`/numbers.json
cldr/supplemental/numberingSystems.json | +| Plural module | cldr/supplemental/plurals.json (for cardinals)
cldr/supplemental/ordinals.json (for ordinals) | +| Relative time module | cldr/main/`locale`/dateFields.json
+CLDR JSON files from number and plural modules | +| Unit module | cldr/main/`locale`/units.json
+CLDR JSON files from number and plural module | + +As an alternative to deducing this yourself, use this [online tool](http://johnnyreilly.github.io/globalize-so-what-cha-want/). The tool allows you to select the modules you're interested in using and tells you the Globalize files *and* CLDR JSON that you need. + +*(b) How am I supposed to get and load CLDR content?* + +Learn [how to get and load CLDR content...](doc/cldr.md) and use +[`Globalize.load()`](#core-module) to load it. + +#### 3. IANA time zone data + +The IANA time zone (tz) database, sometimes called the Olson database, is the standard data used by Unicode CLDR, ECMA-402, Linux, UNIX, Java, ICU, and others. It's used by Globalize to circumvent the JavaScript limitations with respect to manipulating date in time zones other than the user's environment. + +In short, feed Globalize on IANA time zone data if you need to format or parse dates in a specific time zone, independently of the user's environment, e.g., `America/Los_Angeles`. + +It's important to note there's no official IANA time zone data in the JSON format. Therefore, [`iana-tz-data`](https://github.com/rxaviers/iana-tz-data) has been adopted for convenience. + +Learn more on [`Globalize.loadTimeZone()`](#date-module). + +### Usage + +Globalize's consumable-files are located in the `./dist` directory. If you don't find it, it's because you are using a development branch. You should either use a tagged version or [build the distribution files yourself](#build). Read [installation](#installation) above if you need more information on how to download. + +Globalize can be used for a variety of different i18n tasks, eg. formatting or parsing dates, formatting or parsing numbers, formatting messages, etc. You may NOT need Globalize in its entirety. For that reason, we made it modular. So, you can cherry-pick the pieces you need, eg. load `dist/globalize.js` to get Globalize core, load `dist/globalize/date.js` to extend Globalize with Date functionalities, etc. + +An example is worth a thousand words. Check out our [Examples](#examples) section below. + +### Performance + +When formatting or parsing, there's actually a two-step process: (a) the formatter (or parser) *creation* and (b) its *execution*, where creation takes an order of magnitude more time (more expensive) than execution. In the creation phase, Globalize traverses the CLDR tree, processes data (e.g., expands date patterns, parses plural rules, etc), and returns a function that actually executes the formatting or parsing. + +```js +// Formatter creation. +var formatter = Globalize.numberFormatter(); + +// Formatter execution (roughly 10x faster than above). +formatter( Math.PI ); +// > 3.141 +``` + +As a rule of thumb for optimal performance, cache your formatters and parsers. For example: (a) on iterations, generate them outside the loop and reuse while looping; (b) on server applications, generate them in advance and execute when requests arrive. + +### Compilation and the Runtime modules + +Take advantage of compiling your formatters and/or parsers during build time when deploying to production. It's much faster than generating them in real-time and it's also much smaller (i.e., better loading performance). + +Your compiled formatters and parsers allow you to skip a big part of the library and also allow you to skip loading CLDR data, because they have already been created (see [Performance](#performance) above for more information). + +To illustrate, see our [Basic Globalize Compiler example][]. + + +#### Globalize Compiler + +For information about the Globalize Compiler CLI or its JavaScript API, see the [Globalize Compiler documentation][]. + +[Globalize Compiler documentation]: https://github.com/globalizejs/globalize-compiler#README + +### Examples + +The fastest and easiest way to use Globalize is by integrating it into your existing tools. + +- [Application example using webpack and npm](examples/app-npm-webpack/): easy to get started, automated CLDR loading and precompilation for production, but requires npm and webpack knowledge. +- [Application example using globalize-express middleware with any express web app](https://github.com/devangnegandhi/globalize-express/tree/master/example): easy to incorporate globalize as a middleware within your Express web app. (also checkout [globalize-express](https://github.com/devangnegandhi/globalize)) + +If you're using a different tool than the one above, but you're comfortable using JavaScript modules (such as ES6 modules, CommonJS, or AMD) and package managers like npm or bower, you may want to check out the following examples. Note you'll need to compile your code for production yourself. + +- [Basic example using AMD and bower](examples/amd-bower/): feeding Globalize on CLDR is not completely transparent. +- [Basic example using Node.js and npm](examples/node-npm/): feeding Globalize on CLDR is not completely transparent. +- [Basic Globalize Compiler example][]: shows how to use Globalize Compiler CLI. + +[Basic Globalize Compiler example]: examples/globalize-compiler/ + +If you're using none of the tools above, but instead you're using the plain and old script tags only, the following example may interest you. Note Globalize allows you to go low level like this. But, acknowledge that you'll need to handle dependencies and CLDR loading manually yourself. + +- [Basic example using plain JavaScript](examples/plain-javascript/): requires loading CLDR and handling dependencies manually. + +### Community + +You can find us on [Slack](https://globalizejs.slack.com/). If you're new, [join here](https://join.slack.com/t/globalizejs/shared_invite/enQtMjk4OTUwNzM1Nzk0LTk2YmY0YjY3Yzk4YzU3M2NkMDZjNThlNzcwNTkyNGJhNDhiNjdkMWUyN2Q2MjVmNTk0ZjkyNGQ3MWEyNzNmMWU). + +## API + +### Core module + +#### `Globalize.load( cldrJSONData, ... )` + +This method allows you to load CLDR JSON locale data. `Globalize.load()` is a proxy to `Cldr.load()`. [Read more...](doc/api/core/load.md) + +#### `Globalize.locale( [locale|cldr] )` + +Set default locale, or get it if locale argument is omitted. [Read more...](doc/api/core/locale.md) + +#### `[new] Globalize( locale|cldr )` + +Create a Globalize instance. [Read more...](doc/api/core/constructor.md) + +#### Locales + +A locale is an identifier (id) that refers to a set of user preferences that tend to be shared across significant swaths of the world. In technical terms, it's a String composed of three parts: language, script, and region. For example: + +| locale | description | +| ------------ | ---------------------------------------- | +| *en-Latn-US* | English as spoken in the Unites States in the Latin script. | +| *en-US* | English as spoken in the Unites States (Latin script is deduced given it's the most likely script used in this place). | +| *en* | English (United States region and Latin script are deduced given they are respectively the most likely region and script used in this place). | +| *en-GB* | English as spoken in the United Kingdom (Latin script is deduced given it's the most likely script used in this place). | +| *en-IN* | English as spoken in India (Latin script is deduced). | +| *es* | Spanish (Spain region and Latin script are deduced). | +| *es-MX* | Spanish as spoken in Mexico (Latin script is deduced). | +| *zh* | Chinese (China region and Simplified Han script are deduced). | +| *zh-TW* | Chinese as spoken in Taiwan (Traditional Han script is deduced). | +| *ja* | Japanese (Japan region and Japanese script are deduced). | +| *de* | German (Germany region and Latin script are deduced). | +| *pt* | Portuguese (Brazil region and Latin script are deduced). | +| *pt-PT* | Portuguese as spoken in Portugal (Latin script is deduced). | +| *fr* | French (France region and Latin script are deduced). | +| *ru* | Russian (Russia region and Cyrillic script are deduced). | +| *ar* | Arabic (Egypt region and Arabic script are deduced). | + +The likely deductibility is computed by using CLDR data, which is based on the population and the suppress-script data in BCP47 (among others). The data is heuristically derived, and may change over time. + +Figure out the deduced information by looking at the `cldr.attributes.maxLanguageId` property of a Globalize instance: + +```js +var Globalize = require( "globalize" ); +Globalize.load( require( "cldr-data" ).entireSupplemental() ); +Globalize( "en" ).cldr.attributes.maxLanguageId; +// > "en-Latn-US" +``` + +Globalize supports all the locales available in CLDR, which are around 740. For more information, search for coverage charts at the downloads section of http://cldr.unicode.org/. + +Read more details about locale at [UTS#35 locale][]. + +[UTS#35 locale]: http://www.unicode.org/reports/tr35/#Locale + +### Date module + +#### `Globalize.loadTimeZone( ianaTzData )` + +This method allows you to load IANA time zone data to enable `options.timeZone` feature on date formatters and parsers. + +[Read more...](doc/api/date/load-iana-time-zone.md) + +#### `.dateFormatter( [options] )` + +Return a function that formats a date according to the given `options`. The default formatting is numeric year, month, and day (i.e., `{ skeleton: "yMd" }`. + +```javascript +.dateFormatter()( new Date() ) +// > "11/30/2010" + +.dateFormatter({ skeleton: "GyMMMd" })( new Date() ) +// > "Nov 30, 2010 AD" + +.dateFormatter({ date: "medium" })( new Date() ) +// > "Nov 1, 2010" + +.dateFormatter({ time: "medium" })( new Date() ) +// > "5:55:00 PM" + +.dateFormatter({ datetime: "medium" })( new Date() ) +// > "Nov 1, 2010, 5:55:00 PM" + +.dateFormatter({ datetime: "full", timeZone: "America/New_York" })( new Date() ); +// > "Monday, November 1, 2010 at 3:55:00 AM Eastern Daylight Time" + +.dateFormatter({ datetime: "full", timeZone: "America/Los_Angeles" })( new Date() ); +// > "Monday, November 1, 2010 at 12:55:00 AM Pacific Daylight Time" +``` + +[Read more...](doc/api/date/date-formatter.md) + +#### `.dateToPartsFormatter( [options] )` + +Return a function that formats a date into parts tokens according to the given `options`. The default formatting is numeric year, month, and day (i.e., `{ skeleton: "yMd" }`. + +```javascript +.dateToPartsFormatter()( new Date() ) +// > [ +// { "type": "month", "value": "3" }, +// { "type": "literal", "value": "/" }, +// { "type": "day", "value": "17" }, +// { "type": "literal", "value": "/" }, +// { "type": "year", "value": "2017" } +// ] +``` + +[Read more...](doc/api/date/date-to-parts-formatter.md) + +#### `.dateParser( [options] )` + +Return a function that parses a string representing a date into a JavaScript Date object according to the given `options`. The default parsing assumes numeric year, month, and day (i.e., `{ skeleton: "yMd" }`). + +```javascript +.dateParser()( "11/30/2010" ) +// > new Date( 2010, 10, 30, 0, 0, 0 ) + +.dateParser({ skeleton: "GyMMMd" })( "Nov 30, 2010 AD" ) +// > new Date( 2010, 10, 30, 0, 0, 0 ) + +.dateParser({ date: "medium" })( "Nov 1, 2010" ) +// > new Date( 2010, 10, 30, 0, 0, 0 ) + +.dateParser({ time: "medium" })( "5:55:00 PM" ) +// > new Date( 2015, 3, 22, 17, 55, 0 ) // i.e., today @ 5:55PM + +.dateParser({ datetime: "medium" })( "Nov 1, 2010, 5:55:00 PM" ) +// > new Date( 2010, 10, 30, 17, 55, 0 ) +``` + +[Read more...](doc/api/date/date-parser.md) + +#### `.formatDate( value [, options] )` + +Alias for `.dateFormatter( [options] )( value )`. + +#### `.formatDateToParts( value [, options] )` + +Alias for `.dateToPartsFormatter( [options] )( value )`. + +#### `.parseDate( value [, options] )` + +Alias for `.dateParser( [options] )( value )`. + +### Message module + +#### `Globalize.loadMessages( json )` + +Load messages data. [Read more...](doc/api/message/load-messages.md) + +#### `.messageFormatter( path ) ➡ function( [variables] )` + +Return a function that formats a message (using ICU message format pattern) given its path and a set of variables into a user-readable string. It supports pluralization and gender inflections. + +```javascript +.messageFormatter( "task" )( 1000 ) +// > "You have 1,000 tasks remaining" + +.messageFormatter( "like" )( 3 ) +// > "You and 2 others liked this" +``` + +[Read more...](doc/api/message/message-formatter.md) + +#### `.formatMessage( path [, variables ] )` + +Alias for `.messageFormatter( path )([ variables ])`. + +### Number module + +#### `.numberFormatter( [options] )` + +Return a function that formats a number according to the given options or locale's defaults. + +```javascript +.numberFormatter()( pi ) +// > "3.142" + +.numberFormatter({ maximumFractionDigits: 5 })( pi ) +// > "3.14159" + +.numberFormatter({ round: "floor" })( pi ) +// > "3.141" + +.numberFormatter({ minimumFractionDigits: 2 })( 10000 ) +// > "10,000.00" + +.numberFormatter({ style: "percent" })( 0.5 ) +// > "50%" + +.numberFormatter({ compact: "short", maximumFractionDigits: 0 })( 14305 ) +// > "14K" +``` + +[Read more...](doc/api/number/number-formatter.md) + +#### `.numberParser( [options] )` + +Return a function that parses a string representing a number according to the given options or locale's defaults. + +```javascript +.numberParser()( "3.14159" ) +// > 3.14159 + +.numberParser()( "10,000.00" ) +// > 10000 + +.numberParser({ style: "percent" })( "50%" ) +// > 0.5 +``` + +[Read more...](doc/api/number/number-parser.md) + +#### `.formatNumber( value [, options] )` + +Alias for `.numberFormatter( [options] )( value )`. + +#### `.parseNumber( value [, options] )` + +Alias for `.numberParser( [options] )( value )`. + +### Currency module + +#### `.currencyFormatter( currency [, options] )` + +Return a function that formats a currency according to the given options or locale's defaults. + +```javascript +.currencyFormatter( "USD" )( 1 ) +// > "$1.00" + +.currencyFormatter( "USD", { style: "accounting" })( -1 ) +// > "($1.00)" + +.currencyFormatter( "USD", { style: "name" })( 69900 ) +// > "69,900.00 US dollars" + +.currencyFormatter( "USD", { style: "code" })( 69900 ) +// > "69,900.00 USD" + +.currencyFormatter( "USD", { round: "ceil" })( 1.491 ) +// > "$1.50" +``` + +[Read more...](doc/api/currency/currency-formatter.md) + +#### `.formatCurrency( value, currency [, options] )` + +Alias for `.currencyFormatter( currency [, options] )( value )`. + +### Plural module + +#### `.pluralGenerator( [options] )` + +Return a function that returns the value's corresponding plural group: `zero`, `one`, `two`, `few`, `many`, or `other`. + +The function may be used for cardinals or ordinals. + +```javascript +.pluralGenerator()( 0 ) +// > "other" + +.pluralGenerator()( 1 ) +// > "one" + +.pluralGenerator({ type: "ordinal" })( 1 ) +// > "one" + +.pluralGenerator({ type: "ordinal" })( 2 ) +// > "two" +``` + +[Read more...](doc/api/plural/plural-generator.md) + +#### `.plural( value[, options ] )` + +Alias for `.pluralGenerator( [options] )( value )`. + +### Relative time module + +#### `.relativeTimeFormatter( unit [, options] )` + + Returns a function that formats a relative time according to the given unit, options, and the default/instance locale. + + ```javascript + .relativeTimeFormatter( "day" )( 1 ) + // > "tomorrow" + + .relativeTimeFormatter( "month" )( -1 ) + // > "last month" + + .relativeTimeFormatter( "month" )( 3 ) + // > "in 3 months" + ``` + + [Read more...](doc/api/relative-time/relative-time-formatter.md) + +#### `.formatRelativeTime( value, unit [, options] )` + +Alias for `.relativeTimeFormatter( unit, options )( value )`. + +### Unit module + +#### `.unitFormatter( unit [, options] )` + +Returns a function that formats a unit according to the given unit, options, and the default/instance locale. + +```javascript +.unitFormatter( "second" )( 10 ) +// > "10 seconds" + +.unitFormatter( "second", { form: "short" } )( 10 ) +// > "10 secs" + +.unitFormatter( "second", { form: "narrow" } )( 10 ) +// > "10s" +``` + +[Read more...](doc/api/unit/unit-formatter.md) + +#### `.formatUnit( value, unit [, options] )` + +Alias for `.unitFormatter( unit, options )( value )`. + +## Error reference + +### CLDR Errors + +- **`E_INVALID_CLDR`** + + Thrown when a CLDR item has an invalid or unexpected value. + + [Read more...](doc/error/e-invalid-cldr.md) + +- **`E_MISSING_CLDR`** + + Thrown when any required CLDR item is NOT found. + + [Read more...](doc/error/e-missing-cldr.md) + +### Parameter Errors + +- **`E_INVALID_PAR_TYPE`** + + Thrown when a parameter has an invalid type on any static or instance methods. + + [Read more...](doc/error/e-invalid-par-type.md) + +- **`E_INVALID_PAR_VALUE`** + + Thrown for certain parameters when the type is correct, but the value is + invalid. + + [Read more...](doc/error/e-invalid-par-value.md) + +- **`E_MISSING_PARAMETER`** + + Thrown when a required parameter is missing on any static or instance methods. + + [Read more...](doc/error/e-missing-parameter.md) + +- **`E_PAR_OUT_OF_RANGE`** + + Thrown when a parameter is not within a valid range of values. + + [Read more...](doc/error/e-par-out-of-range.md) + +### Other Errors + +- **`E_DEFAULT_LOCALE_NOT_DEFINED`** + + Thrown when any static method, eg. `Globalize.formatNumber()` is used prior to setting the Global locale with `Globalize.locale( )`. + + [Read more...](doc/error/e-default-locale-not-defined.md) + +- **`E_MISSING_PLURAL_MODULE`** + + Thrown when plural module is needed, but not loaded, eg. to format currencies using the named form. + + [Read more...](doc/error/e-missing-plural-module.md) + +- **`E_UNSUPPORTED`** + + Thrown for unsupported features, eg. to format unsupported date patterns. + + [Read more...](doc/error/e-unsupported.md) + + +## Contributing + +If you are having trouble using Globalize after reading the documentation carefully, please post a question to [StackOverflow with the "javascript-globalize" tag][]. Questions that include a minimal demo are more likely to receive responses. + +In the spirit of open source software development, we always encourage community code contribution. To help you get started and before you jump into writing code, be sure to read [CONTRIBUTING.md](CONTRIBUTING.md). + +[StackOverflow with the "javascript-globalize" tag]: http://stackoverflow.com/tags/javascript-globalize + +For ideas where to start contributing, see the following queries to find what best suites your interest: [quick change][], [new features][], [bug fixes][], [documentation improvements][], [date module][], [currency module][], [message module][], [number module][], [plural module][], [relative time module][]. Last but not least, feel free to [get in touch](http://irc.jquery.org/). + +[bug fixes]: https://github.com/globalizejs/globalize/labels/bug +[documentation improvements]: https://github.com/globalizejs/globalize/labels/docs +[new features]: https://github.com/globalizejs/globalize/labels/new%20feature +[quick change]: https://github.com/globalizejs/globalize/labels/quick%20change + +[currency module]: https://github.com/globalizejs/globalize/labels/currency%20module +[date module]: https://github.com/globalizejs/globalize/labels/date%20module +[message module]: https://github.com/globalizejs/globalize/labels/message%20module +[number module]: https://github.com/globalizejs/globalize/labels/number%20module +[plural module]: https://github.com/globalizejs/globalize/labels/plural%20module +[relative time module]: https://github.com/globalizejs/globalize/labels/relative%20time%20module + +### Roadmap + +Our roadmap is the collection of all open issues and pull requests where you can find: + +- [Ongoing work][] lists our current sprint. Here you find where we're actively working on at this very moment. Priority is determined by the community needs and volunteering. If there is anything you want to be done, share your thoughts with us on any existing or new issue and especially volunteer to do it. +- [Everything else][] is potential next work that you could help us to accomplish now. Releases are published following semver rules as often as possible. + +[Ongoing work]: https://github.com/globalizejs/globalize/labels/Current%20Sprint +[Everything else]: https://github.com/globalizejs/globalize/issues?utf8=%E2%9C%93&q=is%3Aopen+-label%3A%22Current+Sprint%22+ + +## Development + +### File structure +``` +├── bower.json (metadata file) +├── CONTRIBUTING.md (doc file) +├── dist/ (consumable files, the built files) +├── external/ (external dependencies, eg. cldr.js, QUnit, RequireJS) +├── Gruntfile.js (Grunt tasks) +├── LICENSE (license file) +├── package.json (metadata file) +├── README.md (doc file) +├── src/ (source code) +│ ├── build/ (build helpers, eg. intro, and outro) +│ ├── common/ (common function helpers across modules) +│ ├── core.js (core module) +│ ├── date/ (date source code) +│ ├── date.js (date module) +│ ├── message.js (message module) +│ ├── number.js (number module) +│ ├── number/ (number source code) +│ ├── plural.js (plural module) +│ ├── plural/ (plural source code) +│ ├── relative-time.js (relative time module) +│ ├── relative-time/ (relative time source code) +│ ├── unit.js (unit module) +│ ├── unit/ (unit source code) +│ └── util/ (basic JavaScript helpers polyfills, eg array.map) +└── test/ (unit and functional test files) + ├── fixtures/ (CLDR fixture data) + ├── functional/ (functional tests) + ├── functional.html + ├── functional.js + ├── unit/ (unit tests) + ├── unit.html + └── unit.js +``` + +### Source files + +The source files are as granular as possible. When combined to generate the build file, all the excessive/overhead wrappers are cut off. It's following the same build model of jQuery and Modernizr. + +Core, and all modules' public APIs are located in the `src/` directory, ie. `core.js`, `date.js`, `message.js`, `number.js`, and `plural.js`. + +### Install development external dependencies + +Install Grunt and external dependencies. First, install the [grunt-cli](http://gruntjs.com/getting-started#installing-the-cli) and [bower](http://bower.io/) packages if you haven't before. These should be installed globally (like this: `npm install -g grunt-cli bower`). Then: + +```bash +npm install && bower install +``` + +### Tests + +Tests can be run either in the browser or using Node.js (via Grunt) after having installed the external development dependencies (for more details, see above). + +#### Unit tests + +To run the unit tests, run `grunt test:unit`, or run `grunt connect:keepalive` and open `http://localhost:9001/test/unit.html` in a browser. It tests the very specific functionality of each function (sometimes internal/private). + +The goal of the unit tests is to make it easy to spot bugs, easy to debug. + +#### Functional tests + +To run the functional tests, create the dist files by running `grunt`. Then, run `grunt test:functional`, or open `http://localhost:9001/test/functional.html` in a browser. Note that `grunt` will automatically run unit and functional tests for you to ensure the built files are safe. + +The goal of the functional tests is to ensure that everything works as expected when it is combined. + +### Build + +Build the distribution files after having installed the external development dependencies (for more details, see above). + +```bash +grunt +``` diff --git a/node_modules/globalize/dist/globalize-runtime.js b/node_modules/globalize/dist/globalize-runtime.js new file mode 100644 index 00000000..516af802 --- /dev/null +++ b/node_modules/globalize/dist/globalize-runtime.js @@ -0,0 +1,252 @@ +/** + * Globalize Runtime v1.4.2 + * + * http://github.com/jquery/globalize + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2019-03-07T13:47Z + */ +/*! + * Globalize Runtime v1.4.2 2019-03-07T13:47Z Released under the MIT license + * http://git.io/TrdQbw + */ +(function( root, factory ) { + + "use strict"; + + // UMD returnExports + if ( typeof define === "function" && define.amd ) { + + // AMD + define( factory ); + } else if ( typeof exports === "object" ) { + + // Node, CommonJS + module.exports = factory(); + } else { + + // Globalize + root.Globalize = factory(); + } +}( this, function() { + + + + +/** + * A toString method that outputs meaningful values for objects or arrays and + * still performs as fast as a plain string in case variable is string, or as + * fast as `"" + number` in case variable is a number. + * Ref: http://jsperf.com/my-stringify + */ +var toString = function( variable ) { + return typeof variable === "string" ? variable : ( typeof variable === "number" ? "" + + variable : JSON.stringify( variable ) ); +}; + + + + +/** + * formatMessage( message, data ) + * + * @message [String] A message with optional {vars} to be replaced. + * + * @data [Array or JSON] Object with replacing-variables content. + * + * Return the formatted message. For example: + * + * - formatMessage( "{0} second", [ 1 ] ); // 1 second + * + * - formatMessage( "{0}/{1}", ["m", "s"] ); // m/s + * + * - formatMessage( "{name} <{email}>", { + * name: "Foo", + * email: "bar@baz.qux" + * }); // Foo + */ +var formatMessage = function( message, data ) { + + // Replace {attribute}'s + message = message.replace( /{[0-9a-zA-Z-_. ]+}/g, function( name ) { + name = name.replace( /^{([^}]*)}$/, "$1" ); + return toString( data[ name ] ); + }); + + return message; +}; + + + + +var objectExtend = function() { + var destination = arguments[ 0 ], + sources = [].slice.call( arguments, 1 ); + + sources.forEach(function( source ) { + var prop; + for ( prop in source ) { + destination[ prop ] = source[ prop ]; + } + }); + + return destination; +}; + + + + +var createError = function( code, message, attributes ) { + var error; + + message = code + ( message ? ": " + formatMessage( message, attributes ) : "" ); + error = new Error( message ); + error.code = code; + + objectExtend( error, attributes ); + + return error; +}; + + + + +var runtimeStringify = function( args ) { + return JSON.stringify( args, function( key, value ) { + if ( value && value.runtimeKey ) { + return value.runtimeKey; + } + return value; + } ); +}; + + + + +// Based on http://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript-jquery +var stringHash = function( str ) { + return [].reduce.call( str, function( hash, i ) { + var chr = i.charCodeAt( 0 ); + hash = ( ( hash << 5 ) - hash ) + chr; + return hash | 0; + }, 0 ); +}; + + + + +var runtimeKey = function( fnName, locale, args, argsStr ) { + var hash; + argsStr = argsStr || runtimeStringify( args ); + hash = stringHash( fnName + locale + argsStr ); + return hash > 0 ? "a" + hash : "b" + Math.abs( hash ); +}; + + + + +var validate = function( code, message, check, attributes ) { + if ( !check ) { + throw createError( code, message, attributes ); + } +}; + + + + +var validateParameterPresence = function( value, name ) { + validate( "E_MISSING_PARAMETER", "Missing required parameter `{name}`.", + value !== undefined, { name: name }); +}; + + + + +var validateParameterType = function( value, name, check, expected ) { + validate( + "E_INVALID_PAR_TYPE", + "Invalid `{name}` parameter ({value}). {expected} expected.", + check, + { + expected: expected, + name: name, + value: value + } + ); +}; + + + + +var validateParameterTypeString = function( value, name ) { + validateParameterType( + value, + name, + value === undefined || typeof value === "string", + "a string" + ); +}; + + + + +// ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions?redirectlocale=en-US&redirectslug=JavaScript%2FGuide%2FRegular_Expressions +var regexpEscape = function( string ) { + return string.replace( /([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1" ); +}; + + + + +var stringPad = function( str, count, right ) { + var length; + if ( typeof str !== "string" ) { + str = String( str ); + } + for ( length = str.length; length < count; length += 1 ) { + str = ( right ? ( str + "0" ) : ( "0" + str ) ); + } + return str; +}; + + + + +function Globalize( locale ) { + if ( !( this instanceof Globalize ) ) { + return new Globalize( locale ); + } + + validateParameterPresence( locale, "locale" ); + validateParameterTypeString( locale, "locale" ); + + this._locale = locale; +} + +Globalize.locale = function( locale ) { + validateParameterTypeString( locale, "locale" ); + + if ( arguments.length ) { + this._locale = locale; + } + return this._locale; +}; + +Globalize._createError = createError; +Globalize._formatMessage = formatMessage; +Globalize._regexpEscape = regexpEscape; +Globalize._runtimeKey = runtimeKey; +Globalize._stringPad = stringPad; +Globalize._validateParameterPresence = validateParameterPresence; +Globalize._validateParameterTypeString = validateParameterTypeString; +Globalize._validateParameterType = validateParameterType; + +return Globalize; + + + + +})); diff --git a/node_modules/globalize/dist/globalize-runtime/currency.js b/node_modules/globalize/dist/globalize-runtime/currency.js new file mode 100644 index 00000000..5450b73b --- /dev/null +++ b/node_modules/globalize/dist/globalize-runtime/currency.js @@ -0,0 +1,123 @@ +/** + * Globalize Runtime v1.4.2 + * + * http://github.com/jquery/globalize + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2019-03-07T13:47Z + */ +/*! + * Globalize Runtime v1.4.2 2019-03-07T13:47Z Released under the MIT license + * http://git.io/TrdQbw + */ +(function( root, factory ) { + + "use strict"; + + // UMD returnExports + if ( typeof define === "function" && define.amd ) { + + // AMD + define([ + "../globalize-runtime", + "./number" + ], factory ); + } else if ( typeof exports === "object" ) { + + // Node, CommonJS + module.exports = factory( + require( "../globalize-runtime" ), + require( "./number" ) + ); + } else { + + // Extend global + factory( root.Globalize ); + } +}(this, function( Globalize ) { + + + +var formatMessage = Globalize._formatMessage, + runtimeKey = Globalize._runtimeKey, + validateParameterPresence = Globalize._validateParameterPresence, + validateParameterTypeNumber = Globalize._validateParameterTypeNumber; + + +/** + * nameFormat( formattedNumber, pluralForm, properties ) + * + * Return the appropriate name form currency format. + */ +var currencyNameFormat = function( formattedNumber, pluralForm, properties ) { + var displayName, unitPattern, + displayNames = properties.displayNames || {}, + unitPatterns = properties.unitPatterns; + + displayName = displayNames[ "displayName-count-" + pluralForm ] || + displayNames[ "displayName-count-other" ] || + displayNames.displayName || + properties.currency; + unitPattern = unitPatterns[ "unitPattern-count-" + pluralForm ] || + unitPatterns[ "unitPattern-count-other" ]; + + return formatMessage( unitPattern, [ formattedNumber, displayName ]); +}; + + + + +var currencyFormatterFn = function( numberFormatter, pluralGenerator, properties ) { + var fn; + + // Return formatter when style is "code" or "name". + if ( pluralGenerator && properties ) { + fn = function currencyFormatter( value ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + return currencyNameFormat( + numberFormatter( value ), + pluralGenerator( value ), + properties + ); + }; + + // Return formatter when style is "symbol" or "accounting". + } else { + fn = function currencyFormatter( value ) { + return numberFormatter( value ); + }; + } + + return fn; +}; + + + + +Globalize._currencyFormatterFn = currencyFormatterFn; +Globalize._currencyNameFormat = currencyNameFormat; + +Globalize.currencyFormatter = +Globalize.prototype.currencyFormatter = function( currency, options ) { + options = options || {}; + return Globalize[ runtimeKey( "currencyFormatter", this._locale, [ currency, options ] ) ]; +}; + +Globalize.formatCurrency = +Globalize.prototype.formatCurrency = function( value, currency, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + + return this.currencyFormatter( currency, options )( value ); +}; + +return Globalize; + + + + +})); diff --git a/node_modules/globalize/dist/globalize-runtime/date.js b/node_modules/globalize/dist/globalize-runtime/date.js new file mode 100644 index 00000000..a1c2a32c --- /dev/null +++ b/node_modules/globalize/dist/globalize-runtime/date.js @@ -0,0 +1,1662 @@ +/** + * Globalize Runtime v1.4.2 + * + * http://github.com/jquery/globalize + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2019-03-07T13:47Z + */ +/*! + * Globalize Runtime v1.4.2 2019-03-07T13:47Z Released under the MIT license + * http://git.io/TrdQbw + */ +(function( root, factory ) { + + "use strict"; + + // UMD returnExports + if ( typeof define === "function" && define.amd ) { + + // AMD + define([ + "../globalize-runtime", + "./number" + ], factory ); + } else if ( typeof exports === "object" ) { + + // Node, CommonJS + module.exports = factory( + require( "../globalize-runtime" ), + require( "./number" ) + ); + } else { + + // Extend global + factory( root.Globalize ); + } +}(this, function( Globalize ) { + + + +var createErrorUnsupportedFeature = Globalize._createErrorUnsupportedFeature, + looseMatching = Globalize._looseMatching, + regexpEscape = Globalize._regexpEscape, + removeLiteralQuotes = Globalize._removeLiteralQuotes, + runtimeKey = Globalize._runtimeKey, + stringPad = Globalize._stringPad, + validateParameterPresence = Globalize._validateParameterPresence, + validateParameterType = Globalize._validateParameterType, + validateParameterTypeString = Globalize._validateParameterTypeString; + + +var validateParameterTypeDate = function( value, name ) { + validateParameterType( value, name, value === undefined || value instanceof Date, "Date" ); +}; + + +var ZonedDateTime = (function() { +function definePrivateProperty(object, property, value) { + Object.defineProperty(object, property, { + value: value + }); +} + +function getUntilsIndex(original, untils) { + var index = 0; + var originalTime = original.getTime(); + + // TODO Should we do binary search for improved performance? + while (index < untils.length - 1 && originalTime >= untils[index]) { + index++; + } + return index; +} + +function setWrap(fn) { + var offset1 = this.getTimezoneOffset(); + var ret = fn(); + this.original.setTime(new Date(this.getTime())); + var offset2 = this.getTimezoneOffset(); + if (offset2 - offset1) { + this.original.setMinutes(this.original.getMinutes() + offset2 - offset1); + } + return ret; +} + +var ZonedDateTime = function(date, timeZoneData) { + definePrivateProperty(this, "original", new Date(date.getTime())); + definePrivateProperty(this, "local", new Date(date.getTime())); + definePrivateProperty(this, "timeZoneData", timeZoneData); + definePrivateProperty(this, "setWrap", setWrap); + if (!(timeZoneData.untils && timeZoneData.offsets && timeZoneData.isdsts)) { + throw new Error("Invalid IANA data"); + } + this.setTime(this.local.getTime() - this.getTimezoneOffset() * 60 * 1000); +}; + +ZonedDateTime.prototype.clone = function() { + return new ZonedDateTime(this.original, this.timeZoneData); +}; + +// Date field getters. +["getFullYear", "getMonth", "getDate", "getDay", "getHours", "getMinutes", +"getSeconds", "getMilliseconds"].forEach(function(method) { + // Corresponding UTC method, e.g., "getUTCFullYear" if method === "getFullYear". + var utcMethod = "getUTC" + method.substr(3); + ZonedDateTime.prototype[method] = function() { + return this.local[utcMethod](); + }; +}); + +// Note: Define .valueOf = .getTime for arithmetic operations like date1 - date2. +ZonedDateTime.prototype.valueOf = +ZonedDateTime.prototype.getTime = function() { + return this.local.getTime() + this.getTimezoneOffset() * 60 * 1000; +}; + +ZonedDateTime.prototype.getTimezoneOffset = function() { + var index = getUntilsIndex(this.original, this.timeZoneData.untils); + return this.timeZoneData.offsets[index]; +}; + +// Date field setters. +["setFullYear", "setMonth", "setDate", "setHours", "setMinutes", "setSeconds", "setMilliseconds"].forEach(function(method) { + // Corresponding UTC method, e.g., "setUTCFullYear" if method === "setFullYear". + var utcMethod = "setUTC" + method.substr(3); + ZonedDateTime.prototype[method] = function(value) { + var local = this.local; + // Note setWrap is needed for seconds and milliseconds just because + // abs(value) could be >= a minute. + return this.setWrap(function() { + return local[utcMethod](value); + }); + }; +}); + +ZonedDateTime.prototype.setTime = function(time) { + return this.local.setTime(time); +}; + +ZonedDateTime.prototype.isDST = function() { + var index = getUntilsIndex(this.original, this.timeZoneData.untils); + return Boolean(this.timeZoneData.isdsts[index]); +}; + +ZonedDateTime.prototype.inspect = function() { + var index = getUntilsIndex(this.original, this.timeZoneData.untils); + var abbrs = this.timeZoneData.abbrs; + return this.local.toISOString().replace(/Z$/, "") + " " + + (abbrs && abbrs[index] + " " || (this.getTimezoneOffset() * -1) + " ") + + (this.isDST() ? "(daylight savings)" : ""); +}; + +ZonedDateTime.prototype.toDate = function() { + return new Date(this.getTime()); +}; + +// Type cast getters. +["toISOString", "toJSON", "toUTCString"].forEach(function(method) { + ZonedDateTime.prototype[method] = function() { + return this.toDate()[method](); + }; +}); + +return ZonedDateTime; +}()); + + +/** + * dayOfWeek( date, firstDay ) + * + * @date + * + * @firstDay the result of `dateFirstDayOfWeek( cldr )` + * + * Return the day of the week normalized by the territory's firstDay [0-6]. + * Eg for "mon": + * - return 0 if territory is GB, or BR, or DE, or FR (week starts on "mon"); + * - return 1 if territory is US (week starts on "sun"); + * - return 2 if territory is EG (week starts on "sat"); + */ +var dateDayOfWeek = function( date, firstDay ) { + return ( date.getDay() - firstDay + 7 ) % 7; +}; + + + + +/** + * distanceInDays( from, to ) + * + * Return the distance in days between from and to Dates. + */ +var dateDistanceInDays = function( from, to ) { + var inDays = 864e5; + return ( to.getTime() - from.getTime() ) / inDays; +}; + + + + +/** + * startOf changes the input to the beginning of the given unit. + * + * For example, starting at the start of a day, resets hours, minutes + * seconds and milliseconds to 0. Starting at the month does the same, but + * also sets the date to 1. + * + * Returns the modified date + */ +var dateStartOf = function( date, unit ) { + date = date instanceof ZonedDateTime ? date.clone() : new Date( date.getTime() ); + switch ( unit ) { + case "year": + date.setMonth( 0 ); + /* falls through */ + case "month": + date.setDate( 1 ); + /* falls through */ + case "day": + date.setHours( 0 ); + /* falls through */ + case "hour": + date.setMinutes( 0 ); + /* falls through */ + case "minute": + date.setSeconds( 0 ); + /* falls through */ + case "second": + date.setMilliseconds( 0 ); + } + return date; +}; + + + + +/** + * dayOfYear + * + * Return the distance in days of the date to the begin of the year [0-d]. + */ +var dateDayOfYear = function( date ) { + return Math.floor( dateDistanceInDays( dateStartOf( date, "year" ), date ) ); +}; + + + + +/** + * Returns a new object created by using `object`'s values as keys, and the keys as values. + */ +var objectInvert = function( object, fn ) { + fn = fn || function( object, key, value ) { + object[ value ] = key; + return object; + }; + return Object.keys( object ).reduce(function( newObject, key ) { + return fn( newObject, key, object[ key ] ); + }, {}); +}; + + + + +// Invert key and values, e.g., {"year": "yY"} ==> {"y": "year", "Y": "year"} +var dateFieldsMap = objectInvert({ + "era": "G", + "year": "yY", + "quarter": "qQ", + "month": "ML", + "week": "wW", + "day": "dDF", + "weekday": "ecE", + "dayperiod": "a", + "hour": "hHkK", + "minute": "m", + "second": "sSA", + "zone": "zvVOxX" +}, function( object, key, value ) { + value.split( "" ).forEach(function( symbol ) { + object[ symbol ] = key; + }); + return object; +}); + + + + +/** + * millisecondsInDay + */ +var dateMillisecondsInDay = function( date ) { + + // TODO Handle daylight savings discontinuities + return date - dateStartOf( date, "day" ); +}; + + + + +var datePatternRe = ( /([a-z])\1*|'([^']|'')+'|''|./ig ); + + + + +/** + * hourFormat( date, format, timeSeparator, formatNumber ) + * + * Return date's timezone offset according to the format passed. + * Eg for format when timezone offset is 180: + * - "+H;-H": -3 + * - "+HHmm;-HHmm": -0300 + * - "+HH:mm;-HH:mm": -03:00 + * - "+HH:mm:ss;-HH:mm:ss": -03:00:00 + */ +var dateTimezoneHourFormat = function( date, format, timeSeparator, formatNumber ) { + var absOffset, + offset = date.getTimezoneOffset(); + + absOffset = Math.abs( offset ); + formatNumber = formatNumber || { + 1: function( value ) { + return stringPad( value, 1 ); + }, + 2: function( value ) { + return stringPad( value, 2 ); + } + }; + + return format + + // Pick the correct sign side (+ or -). + .split( ";" )[ offset > 0 ? 1 : 0 ] + + // Localize time separator + .replace( ":", timeSeparator ) + + // Update hours offset. + .replace( /HH?/, function( match ) { + return formatNumber[ match.length ]( Math.floor( absOffset / 60 ) ); + }) + + // Update minutes offset and return. + .replace( /mm/, function() { + return formatNumber[ 2 ]( Math.floor( absOffset % 60 ) ); + }) + + // Update minutes offset and return. + .replace( /ss/, function() { + return formatNumber[ 2 ]( Math.floor( absOffset % 1 * 60 ) ); + }); +}; + + + + +var dateWeekDays = [ "sun", "mon", "tue", "wed", "thu", "fri", "sat" ]; + + + + +/** + * format( date, properties ) + * + * @date [Date instance]. + * + * @properties + * + * TODO Support other calendar types. + * + * Disclosure: this function borrows excerpts of dojo/date/locale. + */ +var dateFormat = function( date, numberFormatters, properties ) { + var parts = []; + + var timeSeparator = properties.timeSeparator; + + // create globalize date with given timezone data + if ( properties.timeZoneData ) { + date = new ZonedDateTime( date, properties.timeZoneData() ); + } + + properties.pattern.replace( datePatternRe, function( current ) { + var aux, dateField, type, value, + chr = current.charAt( 0 ), + length = current.length; + + if ( chr === "j" ) { + + // Locale preferred hHKk. + // http://www.unicode.org/reports/tr35/tr35-dates.html#Time_Data + chr = properties.preferredTime; + } + + if ( chr === "Z" ) { + + // Z..ZZZ: same as "xxxx". + if ( length < 4 ) { + chr = "x"; + length = 4; + + // ZZZZ: same as "OOOO". + } else if ( length < 5 ) { + chr = "O"; + length = 4; + + // ZZZZZ: same as "XXXXX" + } else { + chr = "X"; + length = 5; + } + } + + // z...zzz: "{shortRegion}", e.g., "PST" or "PDT". + // zzzz: "{regionName} {Standard Time}" or "{regionName} {Daylight Time}", + // e.g., "Pacific Standard Time" or "Pacific Daylight Time". + if ( chr === "z" ) { + if ( date.isDST ) { + value = date.isDST() ? properties.daylightTzName : properties.standardTzName; + } + + // Fall back to "O" format. + if ( !value ) { + chr = "O"; + if ( length < 4 ) { + length = 1; + } + } + } + + switch ( chr ) { + + // Era + case "G": + value = properties.eras[ date.getFullYear() < 0 ? 0 : 1 ]; + break; + + // Year + case "y": + + // Plain year. + // The length specifies the padding, but for two letters it also specifies the + // maximum length. + value = date.getFullYear(); + if ( length === 2 ) { + value = String( value ); + value = +value.substr( value.length - 2 ); + } + break; + + case "Y": + + // Year in "Week of Year" + // The length specifies the padding, but for two letters it also specifies the + // maximum length. + // yearInWeekofYear = date + DaysInAWeek - (dayOfWeek - firstDay) - minDays + value = new Date( date.getTime() ); + value.setDate( + value.getDate() + 7 - + dateDayOfWeek( date, properties.firstDay ) - + properties.firstDay - + properties.minDays + ); + value = value.getFullYear(); + if ( length === 2 ) { + value = String( value ); + value = +value.substr( value.length - 2 ); + } + break; + + // Quarter + case "Q": + case "q": + value = Math.ceil( ( date.getMonth() + 1 ) / 3 ); + if ( length > 2 ) { + value = properties.quarters[ chr ][ length ][ value ]; + } + break; + + // Month + case "M": + case "L": + value = date.getMonth() + 1; + if ( length > 2 ) { + value = properties.months[ chr ][ length ][ value ]; + } + break; + + // Week + case "w": + + // Week of Year. + // woy = ceil( ( doy + dow of 1/1 ) / 7 ) - minDaysStuff ? 1 : 0. + // TODO should pad on ww? Not documented, but I guess so. + value = dateDayOfWeek( dateStartOf( date, "year" ), properties.firstDay ); + value = Math.ceil( ( dateDayOfYear( date ) + value ) / 7 ) - + ( 7 - value >= properties.minDays ? 0 : 1 ); + break; + + case "W": + + // Week of Month. + // wom = ceil( ( dom + dow of `1/month` ) / 7 ) - minDaysStuff ? 1 : 0. + value = dateDayOfWeek( dateStartOf( date, "month" ), properties.firstDay ); + value = Math.ceil( ( date.getDate() + value ) / 7 ) - + ( 7 - value >= properties.minDays ? 0 : 1 ); + break; + + // Day + case "d": + value = date.getDate(); + break; + + case "D": + value = dateDayOfYear( date ) + 1; + break; + + case "F": + + // Day of Week in month. eg. 2nd Wed in July. + value = Math.floor( date.getDate() / 7 ) + 1; + break; + + // Week day + case "e": + case "c": + if ( length <= 2 ) { + + // Range is [1-7] (deduced by example provided on documentation) + // TODO Should pad with zeros (not specified in the docs)? + value = dateDayOfWeek( date, properties.firstDay ) + 1; + break; + } + + /* falls through */ + case "E": + value = dateWeekDays[ date.getDay() ]; + value = properties.days[ chr ][ length ][ value ]; + break; + + // Period (AM or PM) + case "a": + value = properties.dayPeriods[ date.getHours() < 12 ? "am" : "pm" ]; + break; + + // Hour + case "h": // 1-12 + value = ( date.getHours() % 12 ) || 12; + break; + + case "H": // 0-23 + value = date.getHours(); + break; + + case "K": // 0-11 + value = date.getHours() % 12; + break; + + case "k": // 1-24 + value = date.getHours() || 24; + break; + + // Minute + case "m": + value = date.getMinutes(); + break; + + // Second + case "s": + value = date.getSeconds(); + break; + + case "S": + value = Math.round( date.getMilliseconds() * Math.pow( 10, length - 3 ) ); + break; + + case "A": + value = Math.round( dateMillisecondsInDay( date ) * Math.pow( 10, length - 3 ) ); + break; + + // Zone + case "z": + break; + + case "v": + + // v...vvv: "{shortRegion}", eg. "PT". + // vvvv: "{regionName} {Time}", + // e.g., "Pacific Time". + if ( properties.genericTzName ) { + value = properties.genericTzName; + break; + } + + /* falls through */ + case "V": + + //VVVV: "{explarCity} {Time}", e.g., "Los Angeles Time" + if ( properties.timeZoneName ) { + value = properties.timeZoneName; + break; + } + + if ( current === "v" ) { + length = 1; + } + + /* falls through */ + case "O": + + // O: "{gmtFormat}+H;{gmtFormat}-H" or "{gmtZeroFormat}", eg. "GMT-8" or "GMT". + // OOOO: "{gmtFormat}{hourFormat}" or "{gmtZeroFormat}", eg. "GMT-08:00" or "GMT". + if ( date.getTimezoneOffset() === 0 ) { + value = properties.gmtZeroFormat; + } else { + + // If O..OOO and timezone offset has non-zero minutes, show minutes. + if ( length < 4 ) { + aux = date.getTimezoneOffset(); + aux = properties.hourFormat[ aux % 60 - aux % 1 === 0 ? 0 : 1 ]; + } else { + aux = properties.hourFormat; + } + + value = dateTimezoneHourFormat( + date, + aux, + timeSeparator, + numberFormatters + ); + value = properties.gmtFormat.replace( /\{0\}/, value ); + } + break; + + case "X": + + // Same as x*, except it uses "Z" for zero offset. + if ( date.getTimezoneOffset() === 0 ) { + value = "Z"; + break; + } + + /* falls through */ + case "x": + + // x: hourFormat("+HH[mm];-HH[mm]") + // xx: hourFormat("+HHmm;-HHmm") + // xxx: hourFormat("+HH:mm;-HH:mm") + // xxxx: hourFormat("+HHmm[ss];-HHmm[ss]") + // xxxxx: hourFormat("+HH:mm[:ss];-HH:mm[:ss]") + aux = date.getTimezoneOffset(); + + // If x and timezone offset has non-zero minutes, use xx (i.e., show minutes). + if ( length === 1 && aux % 60 - aux % 1 !== 0 ) { + length += 1; + } + + // If (xxxx or xxxxx) and timezone offset has zero seconds, use xx or xxx + // respectively (i.e., don't show optional seconds). + if ( ( length === 4 || length === 5 ) && aux % 1 === 0 ) { + length -= 2; + } + + value = [ + "+HH;-HH", + "+HHmm;-HHmm", + "+HH:mm;-HH:mm", + "+HHmmss;-HHmmss", + "+HH:mm:ss;-HH:mm:ss" + ][ length - 1 ]; + + value = dateTimezoneHourFormat( date, value, ":" ); + break; + + // timeSeparator + case ":": + value = timeSeparator; + break; + + // ' literals. + case "'": + value = removeLiteralQuotes( current ); + break; + + // Anything else is considered a literal, including [ ,:/.@#], chinese, japonese, and + // arabic characters. + default: + value = current; + + } + if ( typeof value === "number" ) { + value = numberFormatters[ length ]( value ); + } + + dateField = dateFieldsMap[ chr ]; + type = dateField ? dateField : "literal"; + + // Concat two consecutive literals + if ( type === "literal" && parts.length && parts[ parts.length - 1 ].type === "literal" ) { + parts[ parts.length - 1 ].value += value; + return; + } + + parts.push( { type: type, value: value } ); + + }); + + return parts; + +}; + + + + +var dateFormatterFn = function( dateToPartsFormatter ) { + return function dateFormatter( value ) { + return dateToPartsFormatter( value ).map( function( part ) { + return part.value; + }).join( "" ); + }; +}; + + + + +/** + * isLeapYear( year ) + * + * @year [Number] + * + * Returns an indication whether the specified year is a leap year. + */ +var dateIsLeapYear = function( year ) { + return new Date( year, 1, 29 ).getMonth() === 1; +}; + + + + +/** + * lastDayOfMonth( date ) + * + * @date [Date] + * + * Return the last day of the given date's month + */ +var dateLastDayOfMonth = function( date ) { + return new Date( date.getFullYear(), date.getMonth() + 1, 0 ).getDate(); +}; + + + + +/** + * Differently from native date.setDate(), this function returns a date whose + * day remains inside the month boundaries. For example: + * + * setDate( FebDate, 31 ): a "Feb 28" date. + * setDate( SepDate, 31 ): a "Sep 30" date. + */ +var dateSetDate = function( date, day ) { + var lastDay = new Date( date.getFullYear(), date.getMonth() + 1, 0 ).getDate(); + + date.setDate( day < 1 ? 1 : day < lastDay ? day : lastDay ); +}; + + + + +/** + * Differently from native date.setMonth(), this function adjusts date if + * needed, so final month is always the one set. + * + * setMonth( Jan31Date, 1 ): a "Feb 28" date. + * setDate( Jan31Date, 8 ): a "Sep 30" date. + */ +var dateSetMonth = function( date, month ) { + var originalDate = date.getDate(); + + date.setDate( 1 ); + date.setMonth( month ); + dateSetDate( date, originalDate ); +}; + + + + +var outOfRange = function( value, low, high ) { + return value < low || value > high; +}; + + + + +/** + * parse( value, tokens, properties ) + * + * @value [String] string date. + * + * @tokens [Object] tokens returned by date/tokenizer. + * + * @properties [Object] output returned by date/tokenizer-properties. + * + * ref: http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns + */ +var dateParse = function( value, tokens, properties ) { + var amPm, day, daysOfYear, month, era, hour, hour12, timezoneOffset, valid, + YEAR = 0, + MONTH = 1, + DAY = 2, + HOUR = 3, + MINUTE = 4, + SECOND = 5, + MILLISECONDS = 6, + date = new Date(), + truncateAt = [], + units = [ "year", "month", "day", "hour", "minute", "second", "milliseconds" ]; + + // Create globalize date with given timezone data. + if ( properties.timeZoneData ) { + date = new ZonedDateTime( date, properties.timeZoneData() ); + } + + if ( !tokens.length ) { + return null; + } + + valid = tokens.every(function( token ) { + var century, chr, value, length; + + if ( token.type === "literal" ) { + + // continue + return true; + } + + chr = token.type.charAt( 0 ); + length = token.type.length; + + if ( chr === "j" ) { + + // Locale preferred hHKk. + // http://www.unicode.org/reports/tr35/tr35-dates.html#Time_Data + chr = properties.preferredTimeData; + } + + switch ( chr ) { + + // Era + case "G": + truncateAt.push( YEAR ); + era = +token.value; + break; + + // Year + case "y": + value = token.value; + if ( length === 2 ) { + if ( outOfRange( value, 0, 99 ) ) { + return false; + } + + // mimic dojo/date/locale: choose century to apply, according to a sliding + // window of 80 years before and 20 years after present year. + century = Math.floor( date.getFullYear() / 100 ) * 100; + value += century; + if ( value > date.getFullYear() + 20 ) { + value -= 100; + } + } + date.setFullYear( value ); + truncateAt.push( YEAR ); + break; + + case "Y": // Year in "Week of Year" + throw createErrorUnsupportedFeature({ + feature: "year pattern `" + chr + "`" + }); + + // Quarter (skip) + case "Q": + case "q": + break; + + // Month + case "M": + case "L": + if ( length <= 2 ) { + value = token.value; + } else { + value = +token.value; + } + if ( outOfRange( value, 1, 12 ) ) { + return false; + } + + // Setting the month later so that we have the correct year and can determine + // the correct last day of February in case of leap year. + month = value; + truncateAt.push( MONTH ); + break; + + // Week (skip) + case "w": // Week of Year. + case "W": // Week of Month. + break; + + // Day + case "d": + day = token.value; + truncateAt.push( DAY ); + break; + + case "D": + daysOfYear = token.value; + truncateAt.push( DAY ); + break; + + case "F": + + // Day of Week in month. eg. 2nd Wed in July. + // Skip + break; + + // Week day + case "e": + case "c": + case "E": + + // Skip. + // value = arrayIndexOf( dateWeekDays, token.value ); + break; + + // Period (AM or PM) + case "a": + amPm = token.value; + break; + + // Hour + case "h": // 1-12 + value = token.value; + if ( outOfRange( value, 1, 12 ) ) { + return false; + } + hour = hour12 = true; + date.setHours( value === 12 ? 0 : value ); + truncateAt.push( HOUR ); + break; + + case "K": // 0-11 + value = token.value; + if ( outOfRange( value, 0, 11 ) ) { + return false; + } + hour = hour12 = true; + date.setHours( value ); + truncateAt.push( HOUR ); + break; + + case "k": // 1-24 + value = token.value; + if ( outOfRange( value, 1, 24 ) ) { + return false; + } + hour = true; + date.setHours( value === 24 ? 0 : value ); + truncateAt.push( HOUR ); + break; + + case "H": // 0-23 + value = token.value; + if ( outOfRange( value, 0, 23 ) ) { + return false; + } + hour = true; + date.setHours( value ); + truncateAt.push( HOUR ); + break; + + // Minute + case "m": + value = token.value; + if ( outOfRange( value, 0, 59 ) ) { + return false; + } + date.setMinutes( value ); + truncateAt.push( MINUTE ); + break; + + // Second + case "s": + value = token.value; + if ( outOfRange( value, 0, 59 ) ) { + return false; + } + date.setSeconds( value ); + truncateAt.push( SECOND ); + break; + + case "A": + date.setHours( 0 ); + date.setMinutes( 0 ); + date.setSeconds( 0 ); + + /* falls through */ + case "S": + value = Math.round( token.value * Math.pow( 10, 3 - length ) ); + date.setMilliseconds( value ); + truncateAt.push( MILLISECONDS ); + break; + + // Zone + case "z": + case "Z": + case "O": + case "v": + case "V": + case "X": + case "x": + if ( typeof token.value === "number" ) { + timezoneOffset = token.value; + } + break; + } + + return true; + }); + + if ( !valid ) { + return null; + } + + // 12-hour format needs AM or PM, 24-hour format doesn't, ie. return null + // if amPm && !hour12 || !amPm && hour12. + if ( hour && !( !amPm ^ hour12 ) ) { + return null; + } + + if ( era === 0 ) { + + // 1 BC = year 0 + date.setFullYear( date.getFullYear() * -1 + 1 ); + } + + if ( month !== undefined ) { + dateSetMonth( date, month - 1 ); + } + + if ( day !== undefined ) { + if ( outOfRange( day, 1, dateLastDayOfMonth( date ) ) ) { + return null; + } + date.setDate( day ); + } else if ( daysOfYear !== undefined ) { + if ( outOfRange( daysOfYear, 1, dateIsLeapYear( date.getFullYear() ) ? 366 : 365 ) ) { + return null; + } + date.setMonth( 0 ); + date.setDate( daysOfYear ); + } + + if ( hour12 && amPm === "pm" ) { + date.setHours( date.getHours() + 12 ); + } + + if ( timezoneOffset !== undefined ) { + date.setMinutes( date.getMinutes() + timezoneOffset - date.getTimezoneOffset() ); + } + + // Truncate date at the most precise unit defined. Eg. + // If value is "12/31", and pattern is "MM/dd": + // => new Date( , 12, 31, 0, 0, 0, 0 ); + truncateAt = Math.max.apply( null, truncateAt ); + date = dateStartOf( date, units[ truncateAt ] ); + + // Get date back from globalize date. + if ( date instanceof ZonedDateTime ) { + date = date.toDate(); + } + + return date; +}; + + + + +/** + * tokenizer( value, numberParser, properties ) + * + * @value [String] string date. + * + * @numberParser [Function] + * + * @properties [Object] output returned by date/tokenizer-properties. + * + * Returns an Array of tokens, eg. value "5 o'clock PM", pattern "h 'o''clock' a": + * [{ + * type: "h", + * lexeme: "5" + * }, { + * type: "literal", + * lexeme: " " + * }, { + * type: "literal", + * lexeme: "o'clock" + * }, { + * type: "literal", + * lexeme: " " + * }, { + * type: "a", + * lexeme: "PM", + * value: "pm" + * }] + * + * OBS: lexeme's are always String and may return invalid ranges depending of the token type. + * Eg. "99" for month number. + * + * Return an empty Array when not successfully parsed. + */ +var dateTokenizer = function( value, numberParser, properties ) { + var digitsRe, valid, + tokens = [], + widths = [ "abbreviated", "wide", "narrow" ]; + + digitsRe = properties.digitsRe; + value = looseMatching( value ); + + valid = properties.pattern.match( datePatternRe ).every(function( current ) { + var aux, chr, length, numeric, tokenRe, + token = {}; + + function hourFormatParse( tokenRe, numberParser ) { + var aux, isPositive, + match = value.match( tokenRe ); + numberParser = numberParser || function( value ) { + return +value; + }; + + if ( !match ) { + return false; + } + + isPositive = match[ 1 ]; + + // hourFormat containing H only, e.g., `+H;-H` + if ( match.length < 6 ) { + aux = isPositive ? 1 : 3; + token.value = numberParser( match[ aux ] ) * 60; + + // hourFormat containing H and m, e.g., `+HHmm;-HHmm` + } else if ( match.length < 10 ) { + aux = isPositive ? [ 1, 3 ] : [ 5, 7 ]; + token.value = numberParser( match[ aux[ 0 ] ] ) * 60 + + numberParser( match[ aux[ 1 ] ] ); + + // hourFormat containing H, m, and s e.g., `+HHmmss;-HHmmss` + } else { + aux = isPositive ? [ 1, 3, 5 ] : [ 7, 9, 11 ]; + token.value = numberParser( match[ aux[ 0 ] ] ) * 60 + + numberParser( match[ aux[ 1 ] ] ) + + numberParser( match[ aux[ 2 ] ] ) / 60; + } + + if ( isPositive ) { + token.value *= -1; + } + + return true; + } + + function oneDigitIfLengthOne() { + if ( length === 1 ) { + + // Unicode equivalent to /\d/ + numeric = true; + return tokenRe = digitsRe; + } + } + + function oneOrTwoDigitsIfLengthOne() { + if ( length === 1 ) { + + // Unicode equivalent to /\d\d?/ + numeric = true; + return tokenRe = new RegExp( "^(" + digitsRe.source + "){1,2}" ); + } + } + + function oneOrTwoDigitsIfLengthOneOrTwo() { + if ( length === 1 || length === 2 ) { + + // Unicode equivalent to /\d\d?/ + numeric = true; + return tokenRe = new RegExp( "^(" + digitsRe.source + "){1,2}" ); + } + } + + function twoDigitsIfLengthTwo() { + if ( length === 2 ) { + + // Unicode equivalent to /\d\d/ + numeric = true; + return tokenRe = new RegExp( "^(" + digitsRe.source + "){2}" ); + } + } + + // Brute-force test every locale entry in an attempt to match the given value. + // Return the first found one (and set token accordingly), or null. + function lookup( path ) { + var array = properties[ path.join( "/" ) ]; + + if ( !array ) { + return null; + } + + // array of pairs [key, value] sorted by desc value length. + array.some(function( item ) { + var valueRe = item[ 1 ]; + if ( valueRe.test( value ) ) { + token.value = item[ 0 ]; + tokenRe = item[ 1 ]; + return true; + } + }); + return null; + } + + token.type = current; + chr = current.charAt( 0 ); + length = current.length; + + if ( chr === "Z" ) { + + // Z..ZZZ: same as "xxxx". + if ( length < 4 ) { + chr = "x"; + length = 4; + + // ZZZZ: same as "OOOO". + } else if ( length < 5 ) { + chr = "O"; + length = 4; + + // ZZZZZ: same as "XXXXX" + } else { + chr = "X"; + length = 5; + } + } + + if ( chr === "z" ) { + if ( properties.standardOrDaylightTzName ) { + token.value = null; + tokenRe = properties.standardOrDaylightTzName; + } + } + + // v...vvv: "{shortRegion}", eg. "PT". + // vvvv: "{regionName} {Time}" or "{regionName} {Time}", + // e.g., "Pacific Time" + // http://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns + if ( chr === "v" ) { + if ( properties.genericTzName ) { + token.value = null; + tokenRe = properties.genericTzName; + + // Fall back to "V" format. + } else { + chr = "V"; + length = 4; + } + } + + if ( chr === "V" && properties.timeZoneName ) { + token.value = length === 2 ? properties.timeZoneName : null; + tokenRe = properties.timeZoneNameRe; + } + + switch ( chr ) { + + // Era + case "G": + lookup([ + "gregorian/eras", + length <= 3 ? "eraAbbr" : ( length === 4 ? "eraNames" : "eraNarrow" ) + ]); + break; + + // Year + case "y": + case "Y": + numeric = true; + + // number l=1:+, l=2:{2}, l=3:{3,}, l=4:{4,}, ... + if ( length === 1 ) { + + // Unicode equivalent to /\d+/. + tokenRe = new RegExp( "^(" + digitsRe.source + ")+" ); + } else if ( length === 2 ) { + + // Lenient parsing: there's no year pattern to indicate non-zero-padded 2-digits + // year, so parser accepts both zero-padded and non-zero-padded for `yy`. + // + // Unicode equivalent to /\d\d?/ + tokenRe = new RegExp( "^(" + digitsRe.source + "){1,2}" ); + } else { + + // Unicode equivalent to /\d{length,}/ + tokenRe = new RegExp( "^(" + digitsRe.source + "){" + length + ",}" ); + } + break; + + // Quarter + case "Q": + case "q": + + // number l=1:{1}, l=2:{2}. + // lookup l=3... + oneDigitIfLengthOne() || twoDigitsIfLengthTwo() || + lookup([ + "gregorian/quarters", + chr === "Q" ? "format" : "stand-alone", + widths[ length - 3 ] + ]); + break; + + // Month + case "M": + case "L": + + // number l=1:{1,2}, l=2:{2}. + // lookup l=3... + // + // Lenient parsing: skeleton "yMd" (i.e., one M) may include MM for the pattern, + // therefore parser accepts both zero-padded and non-zero-padded for M and MM. + // Similar for L. + oneOrTwoDigitsIfLengthOneOrTwo() || lookup([ + "gregorian/months", + chr === "M" ? "format" : "stand-alone", + widths[ length - 3 ] + ]); + break; + + // Day + case "D": + + // number {l,3}. + if ( length <= 3 ) { + + // Equivalent to /\d{length,3}/ + numeric = true; + tokenRe = new RegExp( "^(" + digitsRe.source + "){" + length + ",3}" ); + } + break; + + case "W": + case "F": + + // number l=1:{1}. + oneDigitIfLengthOne(); + break; + + // Week day + case "e": + case "c": + + // number l=1:{1}, l=2:{2}. + // lookup for length >=3. + if ( length <= 2 ) { + oneDigitIfLengthOne() || twoDigitsIfLengthTwo(); + break; + } + + /* falls through */ + case "E": + if ( length === 6 ) { + + // Note: if short day names are not explicitly specified, abbreviated day + // names are used instead http://www.unicode.org/reports/tr35/tr35-dates.html#months_days_quarters_eras + lookup([ + "gregorian/days", + [ chr === "c" ? "stand-alone" : "format" ], + "short" + ]) || lookup([ + "gregorian/days", + [ chr === "c" ? "stand-alone" : "format" ], + "abbreviated" + ]); + } else { + lookup([ + "gregorian/days", + [ chr === "c" ? "stand-alone" : "format" ], + widths[ length < 3 ? 0 : length - 3 ] + ]); + } + break; + + // Period (AM or PM) + case "a": + lookup([ + "gregorian/dayPeriods/format/wide" + ]); + break; + + // Week + case "w": + + // number l1:{1,2}, l2:{2}. + oneOrTwoDigitsIfLengthOne() || twoDigitsIfLengthTwo(); + break; + + // Day, Hour, Minute, or Second + case "d": + case "h": + case "H": + case "K": + case "k": + case "j": + case "m": + case "s": + + // number l1:{1,2}, l2:{2}. + // + // Lenient parsing: + // - skeleton "hms" (i.e., one m) always includes mm for the pattern, i.e., it's + // impossible to use a different skeleton to parse non-zero-padded minutes, + // therefore parser accepts both zero-padded and non-zero-padded for m. Similar + // for seconds s. + // - skeleton "hms" (i.e., one h) may include h or hh for the pattern, i.e., it's + // impossible to use a different skeleton to parser non-zero-padded hours for some + // locales, therefore parser accepts both zero-padded and non-zero-padded for h. + // Similar for d (in skeleton yMd). + oneOrTwoDigitsIfLengthOneOrTwo(); + break; + + case "S": + + // number {l}. + + // Unicode equivalent to /\d{length}/ + numeric = true; + tokenRe = new RegExp( "^(" + digitsRe.source + "){" + length + "}" ); + break; + + case "A": + + // number {l+5}. + + // Unicode equivalent to /\d{length+5}/ + numeric = true; + tokenRe = new RegExp( "^(" + digitsRe.source + "){" + ( length + 5 ) + "}" ); + break; + + // Zone + case "v": + case "V": + case "z": + if ( tokenRe && tokenRe.test( value ) ) { + break; + } + if ( chr === "V" && length === 2 ) { + break; + } + + /* falls through */ + case "O": + + // O: "{gmtFormat}+H;{gmtFormat}-H" or "{gmtZeroFormat}", eg. "GMT-8" or "GMT". + // OOOO: "{gmtFormat}{hourFormat}" or "{gmtZeroFormat}", eg. "GMT-08:00" or "GMT". + if ( value === properties[ "timeZoneNames/gmtZeroFormat" ] ) { + token.value = 0; + tokenRe = properties[ "timeZoneNames/gmtZeroFormatRe" ]; + } else { + aux = properties[ "timeZoneNames/hourFormat" ].some(function( hourFormatRe ) { + if ( hourFormatParse( hourFormatRe, numberParser ) ) { + tokenRe = hourFormatRe; + return true; + } + }); + if ( !aux ) { + return null; + } + } + break; + + case "X": + + // Same as x*, except it uses "Z" for zero offset. + if ( value === "Z" ) { + token.value = 0; + tokenRe = /^Z/; + break; + } + + /* falls through */ + case "x": + + // x: hourFormat("+HH[mm];-HH[mm]") + // xx: hourFormat("+HHmm;-HHmm") + // xxx: hourFormat("+HH:mm;-HH:mm") + // xxxx: hourFormat("+HHmm[ss];-HHmm[ss]") + // xxxxx: hourFormat("+HH:mm[:ss];-HH:mm[:ss]") + aux = properties.x.some(function( hourFormatRe ) { + if ( hourFormatParse( hourFormatRe ) ) { + tokenRe = hourFormatRe; + return true; + } + }); + if ( !aux ) { + return null; + } + break; + + case "'": + token.type = "literal"; + tokenRe = new RegExp( "^" + regexpEscape( removeLiteralQuotes( current ) ) ); + break; + + default: + token.type = "literal"; + tokenRe = new RegExp( "^" + regexpEscape( current ) ); + } + + if ( !tokenRe ) { + return false; + } + + // Get lexeme and consume it. + value = value.replace( tokenRe, function( lexeme ) { + token.lexeme = lexeme; + if ( numeric ) { + token.value = numberParser( lexeme ); + } + return ""; + }); + + if ( !token.lexeme ) { + return false; + } + + if ( numeric && isNaN( token.value ) ) { + return false; + } + + tokens.push( token ); + return true; + }); + + if ( value !== "" ) { + valid = false; + } + + return valid ? tokens : []; +}; + + + + +var dateParserFn = function( numberParser, parseProperties, tokenizerProperties ) { + return function dateParser( value ) { + var tokens; + + validateParameterPresence( value, "value" ); + validateParameterTypeString( value, "value" ); + + tokens = dateTokenizer( value, numberParser, tokenizerProperties ); + return dateParse( value, tokens, parseProperties ) || null; + }; +}; + + + + +var dateToPartsFormatterFn = function( numberFormatters, properties ) { + return function dateToPartsFormatter( value ) { + validateParameterPresence( value, "value" ); + validateParameterTypeDate( value, "value" ); + + return dateFormat( value, numberFormatters, properties ); + }; + +}; + + + + +Globalize._dateFormat = dateFormat; +Globalize._dateFormatterFn = dateFormatterFn; +Globalize._dateParser = dateParse; +Globalize._dateParserFn = dateParserFn; +Globalize._dateTokenizer = dateTokenizer; +Globalize._dateToPartsFormatterFn = dateToPartsFormatterFn; +Globalize._validateParameterTypeDate = validateParameterTypeDate; + +function optionsHasStyle( options ) { + return options.skeleton !== undefined || + options.date !== undefined || + options.time !== undefined || + options.datetime !== undefined || + options.raw !== undefined; +} + +Globalize.dateFormatter = +Globalize.prototype.dateFormatter = function( options ) { + options = options || {}; + if ( !optionsHasStyle( options ) ) { + options.skeleton = "yMd"; + } + return Globalize[ runtimeKey( "dateFormatter", this._locale, [ options ] ) ]; +}; + +Globalize.dateToPartsFormatter = +Globalize.prototype.dateToPartsFormatter = function( options ) { + options = options || {}; + if ( !optionsHasStyle( options ) ) { + options.skeleton = "yMd"; + } + return Globalize[ runtimeKey( "dateToPartsFormatter", this._locale, [ options ] ) ]; +}; + +Globalize.dateParser = +Globalize.prototype.dateParser = function( options ) { + options = options || {}; + if ( !optionsHasStyle( options ) ) { + options.skeleton = "yMd"; + } + return Globalize[ runtimeKey( "dateParser", this._locale, [ options ] ) ]; +}; + +Globalize.formatDate = +Globalize.prototype.formatDate = function( value, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeDate( value, "value" ); + + return this.dateFormatter( options )( value ); +}; + +Globalize.formatDateToParts = +Globalize.prototype.formatDateToParts = function( value, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeDate( value, "value" ); + + return this.dateToPartsFormatter( options )( value ); +}; + +Globalize.parseDate = +Globalize.prototype.parseDate = function( value, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeString( value, "value" ); + + return this.dateParser( options )( value ); +}; + +return Globalize; + + + + +})); diff --git a/node_modules/globalize/dist/globalize-runtime/message.js b/node_modules/globalize/dist/globalize-runtime/message.js new file mode 100644 index 00000000..1b5ba095 --- /dev/null +++ b/node_modules/globalize/dist/globalize-runtime/message.js @@ -0,0 +1,120 @@ +/** + * Globalize Runtime v1.4.2 + * + * http://github.com/jquery/globalize + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2019-03-07T13:47Z + */ +/*! + * Globalize Runtime v1.4.2 2019-03-07T13:47Z Released under the MIT license + * http://git.io/TrdQbw + */ +(function( root, factory ) { + + "use strict"; + + // UMD returnExports + if ( typeof define === "function" && define.amd ) { + + // AMD + define([ + "../globalize-runtime" + ], factory ); + } else if ( typeof exports === "object" ) { + + // Node, CommonJS + module.exports = factory( require( "../globalize-runtime" ) ); + } else { + + // Extend global + factory( root.Globalize ); + } +}(this, function( Globalize ) { + + + +var runtimeKey = Globalize._runtimeKey, + validateParameterType = Globalize._validateParameterType; + + +/** + * Function inspired by jQuery Core, but reduced to our use case. + */ +var isPlainObject = function( obj ) { + return obj !== null && "" + obj === "[object Object]"; +}; + + + + +var validateParameterTypeMessageVariables = function( value, name ) { + validateParameterType( + value, + name, + value === undefined || isPlainObject( value ) || Array.isArray( value ), + "Array or Plain Object" + ); +}; + + + + +var messageFormatterFn = function( formatter ) { + return function messageFormatter( variables ) { + if ( typeof variables === "number" || typeof variables === "string" ) { + variables = [].slice.call( arguments, 0 ); + } + validateParameterTypeMessageVariables( variables, "variables" ); + return formatter( variables ); + }; +}; + + + + +Globalize._messageFormatterFn = messageFormatterFn; +/* jshint ignore:start */ +Globalize._messageFormat = (function() { +var number = function (value, offset) { + if (isNaN(value)) throw new Error("'" + value + "' isn't a number."); + return value - (offset || 0); +}; +var plural = function (value, offset, lcfunc, data, isOrdinal) { + if ({}.hasOwnProperty.call(data, value)) return data[value](); + if (offset) value -= offset; + var key = lcfunc(value, isOrdinal); + if (key in data) return data[key](); + return data.other(); +}; +var select = function (value, data) { + if ({}.hasOwnProperty.call(data, value)) return data[value](); + return data.other() +}; + +return {number: number, plural: plural, select: select}; +}()); +/* jshint ignore:end */ +Globalize._validateParameterTypeMessageVariables = validateParameterTypeMessageVariables; + +Globalize.messageFormatter = +Globalize.prototype.messageFormatter = function( /* path */ ) { + return Globalize[ + runtimeKey( "messageFormatter", this._locale, [].slice.call( arguments, 0 ) ) + ]; +}; + +Globalize.formatMessage = +Globalize.prototype.formatMessage = function( path /* , variables */ ) { + return this.messageFormatter( path ).apply( {}, [].slice.call( arguments, 1 ) ); +}; + +return Globalize; + + + + +})); diff --git a/node_modules/globalize/dist/globalize-runtime/number.js b/node_modules/globalize/dist/globalize-runtime/number.js new file mode 100644 index 00000000..06435d28 --- /dev/null +++ b/node_modules/globalize/dist/globalize-runtime/number.js @@ -0,0 +1,870 @@ +/** + * Globalize Runtime v1.4.2 + * + * http://github.com/jquery/globalize + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2019-03-07T13:47Z + */ +/*! + * Globalize Runtime v1.4.2 2019-03-07T13:47Z Released under the MIT license + * http://git.io/TrdQbw + */ +(function( root, factory ) { + + "use strict"; + + // UMD returnExports + if ( typeof define === "function" && define.amd ) { + + // AMD + define([ + "../globalize-runtime" + ], factory ); + } else if ( typeof exports === "object" ) { + + // Node, CommonJS + module.exports = factory( require( "../globalize-runtime" ) ); + } else { + + // Extend global + factory( root.Globalize ); + } +}(this, function( Globalize ) { + + + +var createError = Globalize._createError, + regexpEscape = Globalize._regexpEscape, + runtimeKey = Globalize._runtimeKey, + stringPad = Globalize._stringPad, + validateParameterType = Globalize._validateParameterType, + validateParameterPresence = Globalize._validateParameterPresence, + validateParameterTypeString = Globalize._validateParameterTypeString; + + +var createErrorUnsupportedFeature = function( feature ) { + return createError( "E_UNSUPPORTED", "Unsupported {feature}.", { + feature: feature + }); +}; + + + + +var validateParameterTypeNumber = function( value, name ) { + validateParameterType( + value, + name, + value === undefined || typeof value === "number", + "Number" + ); +}; + + + + +/** + * EBNF representation: + * + * compact_pattern_re = prefix? + * number_pattern_re + * suffix? + * + * number_pattern_re = 0+ + * + * Regexp groups: + * + * 0: compact_pattern_re + * 1: prefix + * 2: number_pattern_re (the number pattern to use in compact mode) + * 3: suffix + */ +var numberCompactPatternRe = ( /^([^0]*)(0+)([^0]*)$/ ); + + + + +/** + * goupingSeparator( number, primaryGroupingSize, secondaryGroupingSize ) + * + * @number [Number]. + * + * @primaryGroupingSize [Number] + * + * @secondaryGroupingSize [Number] + * + * Return the formatted number with group separator. + */ +var numberFormatGroupingSeparator = function( number, primaryGroupingSize, secondaryGroupingSize ) { + var index, + currentGroupingSize = primaryGroupingSize, + ret = "", + sep = ",", + switchToSecondary = secondaryGroupingSize ? true : false; + + number = String( number ).split( "." ); + index = number[ 0 ].length; + + while ( index > currentGroupingSize ) { + ret = number[ 0 ].slice( index - currentGroupingSize, index ) + + ( ret.length ? sep : "" ) + ret; + index -= currentGroupingSize; + if ( switchToSecondary ) { + currentGroupingSize = secondaryGroupingSize; + switchToSecondary = false; + } + } + + number[ 0 ] = number[ 0 ].slice( 0, index ) + ( ret.length ? sep : "" ) + ret; + return number.join( "." ); +}; + + + + +/** + * integerFractionDigits( number, minimumIntegerDigits, minimumFractionDigits, + * maximumFractionDigits, round, roundIncrement ) + * + * @number [Number] + * + * @minimumIntegerDigits [Number] + * + * @minimumFractionDigits [Number] + * + * @maximumFractionDigits [Number] + * + * @round [Function] + * + * @roundIncrement [Function] + * + * Return the formatted integer and fraction digits. + */ +var numberFormatIntegerFractionDigits = function( number, minimumIntegerDigits, minimumFractionDigits, maximumFractionDigits, round, + roundIncrement ) { + + // Fraction + if ( maximumFractionDigits ) { + + // Rounding + if ( roundIncrement ) { + number = round( number, roundIncrement ); + + // Maximum fraction digits + } else { + number = round( number, { exponent: -maximumFractionDigits } ); + } + + } else { + number = round( number ); + } + + number = String( number ); + + // Maximum integer digits (post string phase) + if ( maximumFractionDigits && /e-/.test( number ) ) { + + // Use toFixed( maximumFractionDigits ) to make sure small numbers like 1e-7 are + // displayed using plain digits instead of scientific notation. + // 1: Remove leading decimal zeros. + // 2: Remove leading decimal separator. + // Note: String() is still preferred so it doesn't mess up with a number precision + // unnecessarily, e.g., (123456789.123).toFixed(10) === "123456789.1229999959", + // String(123456789.123) === "123456789.123". + number = ( +number ).toFixed( maximumFractionDigits ) + .replace( /0+$/, "" ) /* 1 */ + .replace( /\.$/, "" ) /* 2 */; + } + + // Minimum fraction digits (post string phase) + if ( minimumFractionDigits ) { + number = number.split( "." ); + number[ 1 ] = stringPad( number[ 1 ] || "", minimumFractionDigits, true ); + number = number.join( "." ); + } + + // Minimum integer digits + if ( minimumIntegerDigits ) { + number = number.split( "." ); + number[ 0 ] = stringPad( number[ 0 ], minimumIntegerDigits ); + number = number.join( "." ); + } + + return number; +}; + + + + +/** + * toPrecision( number, precision, round ) + * + * @number (Number) + * + * @precision (Number) significant figures precision (not decimal precision). + * + * @round (Function) + * + * Return number.toPrecision( precision ) using the given round function. + */ +var numberToPrecision = function( number, precision, round ) { + var roundOrder; + + roundOrder = Math.ceil( Math.log( Math.abs( number ) ) / Math.log( 10 ) ); + roundOrder -= precision; + + return round( number, { exponent: roundOrder } ); +}; + + + + +/** + * toPrecision( number, minimumSignificantDigits, maximumSignificantDigits, round ) + * + * @number [Number] + * + * @minimumSignificantDigits [Number] + * + * @maximumSignificantDigits [Number] + * + * @round [Function] + * + * Return the formatted significant digits number. + */ +var numberFormatSignificantDigits = function( number, minimumSignificantDigits, maximumSignificantDigits, round ) { + var atMinimum, atMaximum; + + // Sanity check. + if ( minimumSignificantDigits > maximumSignificantDigits ) { + maximumSignificantDigits = minimumSignificantDigits; + } + + atMinimum = numberToPrecision( number, minimumSignificantDigits, round ); + atMaximum = numberToPrecision( number, maximumSignificantDigits, round ); + + // Use atMaximum only if it has more significant digits than atMinimum. + number = +atMinimum === +atMaximum ? atMinimum : atMaximum; + + // Expand integer numbers, eg. 123e5 to 12300. + number = ( +number ).toString( 10 ); + + if ( ( /e/ ).test( number ) ) { + throw createErrorUnsupportedFeature({ + feature: "integers out of (1e21, 1e-7)" + }); + } + + // Add trailing zeros if necessary. + if ( minimumSignificantDigits - number.replace( /^0+|\./g, "" ).length > 0 ) { + number = number.split( "." ); + number[ 1 ] = stringPad( number[ 1 ] || "", minimumSignificantDigits - number[ 0 ].replace( /^0+/, "" ).length, true ); + number = number.join( "." ); + } + + return number; +}; + + + + +/** + * EBNF representation: + * + * number_pattern_re = prefix? + * padding? + * (integer_fraction_pattern | significant_pattern) + * scientific_notation? + * suffix? + * + * prefix = non_number_stuff + * + * padding = "*" regexp(.) + * + * integer_fraction_pattern = integer_pattern + * fraction_pattern? + * + * integer_pattern = regexp([#,]*[0,]*0+) + * + * fraction_pattern = "." regexp(0*[0-9]*#*) + * + * significant_pattern = regexp([#,]*@+#*) + * + * scientific_notation = regexp(E\+?0+) + * + * suffix = non_number_stuff + * + * non_number_stuff = regexp(('[^']+'|''|[^*#@0,.E])*) + * + * + * Regexp groups: + * + * 0: number_pattern_re + * 1: prefix + * 2: - + * 3: - + * 4: padding + * 5: (integer_fraction_pattern | significant_pattern) + * 6: integer_fraction_pattern + * 7: integer_pattern + * 8: fraction_pattern + * 9: significant_pattern + * 10: scientific_notation + * 11: suffix + * 12: - + */ +var numberPatternRe = ( /^(('([^']|'')*'|[^*#@0,.E])*)(\*.)?((([#,]*[0,]*0+)(\.0*[0-9]*#*)?)|([#,]*@+#*))(E\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/ ); + + + + +/** + * removeLiteralQuotes( string ) + * + * Return: + * - `` if input string is `''`. + * - `o'clock` if input string is `'o''clock'`. + * - `foo` if input string is `foo`, i.e., return the same value in case it isn't a single-quoted + * string. + */ +var removeLiteralQuotes = function( string ) { + if ( string[ 0 ] + string[ string.length - 1 ] !== "''" ) { + return string; + } + if ( string === "''" ) { + return ""; + } + return string.replace( /''/g, "'" ).slice( 1, -1 ); +}; + + + + +/** + * format( number, properties ) + * + * @number [Number]. + * + * @properties [Object] Output of number/format-properties. + * + * Return the formatted number. + * ref: http://www.unicode.org/reports/tr35/tr35-numbers.html + */ +var numberFormat = function( number, properties, pluralGenerator ) { + var compactMap, infinitySymbol, maximumFractionDigits, maximumSignificantDigits, + minimumFractionDigits, minimumIntegerDigits, minimumSignificantDigits, nanSymbol, nuDigitsMap, + padding, prefix, primaryGroupingSize, pattern, ret, round, roundIncrement, + secondaryGroupingSize, suffix, symbolMap; + + padding = properties[ 1 ]; + minimumIntegerDigits = properties[ 2 ]; + minimumFractionDigits = properties[ 3 ]; + maximumFractionDigits = properties[ 4 ]; + minimumSignificantDigits = properties[ 5 ]; + maximumSignificantDigits = properties[ 6 ]; + roundIncrement = properties[ 7 ]; + primaryGroupingSize = properties[ 8 ]; + secondaryGroupingSize = properties[ 9 ]; + round = properties[ 15 ]; + infinitySymbol = properties[ 16 ]; + nanSymbol = properties[ 17 ]; + symbolMap = properties[ 18 ]; + nuDigitsMap = properties[ 19 ]; + compactMap = properties[ 20 ]; + + // NaN + if ( isNaN( number ) ) { + return nanSymbol; + } + + if ( number < 0 ) { + pattern = properties[ 12 ]; + prefix = properties[ 13 ]; + suffix = properties[ 14 ]; + } else { + pattern = properties[ 11 ]; + prefix = properties[ 0 ]; + suffix = properties[ 10 ]; + } + + // Infinity + if ( !isFinite( number ) ) { + return prefix + infinitySymbol + suffix; + } + + // Percent + if ( pattern.indexOf( "%" ) !== -1 ) { + number *= 100; + + // Per mille + } else if ( pattern.indexOf( "\u2030" ) !== -1 ) { + number *= 1000; + } + + var compactPattern, compactDigits, compactProperties, divisor, numberExponent, pluralForm; + + // Compact mode: initial number digit processing + if ( compactMap ) { + numberExponent = Math.abs( Math.floor( number ) ).toString().length - 1; + numberExponent = Math.min( numberExponent, compactMap.maxExponent ); + + // Use default plural form to perform initial decimal shift + if ( numberExponent >= 3 ) { + compactPattern = compactMap[ numberExponent ] && compactMap[ numberExponent ].other; + } + + if ( compactPattern === "0" ) { + compactPattern = null; + } else if ( compactPattern ) { + compactDigits = compactPattern.split( "0" ).length - 1; + divisor = numberExponent - ( compactDigits - 1 ); + number = number / Math.pow( 10, divisor ); + } + } + + // Significant digit format + if ( !isNaN( minimumSignificantDigits * maximumSignificantDigits ) ) { + number = numberFormatSignificantDigits( number, minimumSignificantDigits, + maximumSignificantDigits, round ); + + // Integer and fractional format + } else { + number = numberFormatIntegerFractionDigits( number, minimumIntegerDigits, + minimumFractionDigits, maximumFractionDigits, round, roundIncrement ); + } + + // Compact mode: apply formatting + if ( compactMap && compactPattern ) { + + // Get plural form after possible roundings + pluralForm = pluralGenerator ? pluralGenerator( +number ) : "other"; + + compactPattern = compactMap[ numberExponent ][ pluralForm ] || compactPattern; + compactProperties = compactPattern.match( numberCompactPatternRe ); + + // update prefix/suffix with compact prefix/suffix + prefix += compactProperties[ 1 ]; + suffix = compactProperties[ 3 ] + suffix; + } + + // Remove the possible number minus sign + number = number.replace( /^-/, "" ); + + // Grouping separators + if ( primaryGroupingSize ) { + number = numberFormatGroupingSeparator( number, primaryGroupingSize, + secondaryGroupingSize ); + } + + ret = prefix; + + ret += number; + + // Scientific notation + // TODO implement here + + // Padding/'([^']|'')+'|''|[.,\-+E%\u2030]/g + // TODO implement here + + ret += suffix; + + return ret.replace( /('([^']|'')+'|'')|./g, function( character, literal ) { + + // Literals + if ( literal ) { + return removeLiteralQuotes( literal ); + } + + // Symbols + character = character.replace( /[.,\-+E%\u2030]/, function( symbol ) { + return symbolMap[ symbol ]; + }); + + // Numbering system + if ( nuDigitsMap ) { + character = character.replace( /[0-9]/, function( digit ) { + return nuDigitsMap[ +digit ]; + }); + } + + return character; + }); +}; + + + + +var numberFormatterFn = function( properties, pluralGenerator ) { + return function numberFormatter( value ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + + return numberFormat( value, properties, pluralGenerator ); + }; +}; + + + + +/** + * Generated by: + * + * var regenerate = require( "regenerate" ); + * var formatSymbols = require( * "unicode-8.0.0/General_Category/Format/symbols" ); + * regenerate().add( formatSymbols ).toString(); + * + * https://github.com/mathiasbynens/regenerate + * https://github.com/mathiasbynens/unicode-8.0.0 + */ +var regexpCfG = /[\xAD\u0600-\u0605\u061C\u06DD\u070F\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804\uDCBD|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/g; + + + + +/** + * Generated by: + * + * var regenerate = require( "regenerate" ); + * var dashSymbols = require( * "unicode-8.0.0/General_Category/Dash_Punctuation/symbols" ); + * regenerate().add( dashSymbols ).toString(); + * + * https://github.com/mathiasbynens/regenerate + * https://github.com/mathiasbynens/unicode-8.0.0 + * + * NOTE: In addition to [:dash:], the below includes MINUS SIGN U+2212. + */ +var regexpDashG = /[\-\u058A\u05BE\u1400\u1806\u2010-\u2015\u2E17\u2E1A\u2E3A\u2E3B\u2E40\u301C\u3030\u30A0\uFE31\uFE32\uFE58\uFE63\uFF0D\u2212]/g; + + + + +/** + * Generated by: + * + * var regenerate = require( "regenerate" ); + * var spaceSeparatorSymbols = require( "unicode-8.0.0/General_Category/Space_Separator/symbols" ); + * regenerate().add( spaceSeparatorSymbols ).toString(); + * + * https://github.com/mathiasbynens/regenerate + * https://github.com/mathiasbynens/unicode-8.0.0 + */ +var regexpZsG = /[ \xA0\u1680\u2000-\u200A\u202F\u205F\u3000]/g; + + + + +/** + * Loose Matching: + * - Ignore all format characters, which includes RLM, LRM or ALM used to control BIDI + * formatting. + * - Map all characters in [:Zs:] to U+0020 SPACE; + * - Map all characters in [:Dash:] to U+002D HYPHEN-MINUS; + */ +var looseMatching = function( value ) { + return value + .replace( regexpCfG, "" ) + .replace( regexpDashG, "-" ) + .replace( regexpZsG, " " ); +}; + + + + +/** + * parse( value, properties ) + * + * @value [String]. + * + * @properties [Object] Parser properties is a reduced pre-processed cldr + * data set returned by numberParserProperties(). + * + * Return the parsed Number (including Infinity) or NaN when value is invalid. + * ref: http://www.unicode.org/reports/tr35/tr35-numbers.html + */ +var numberParse = function( value, properties ) { + var grammar, invertedNuDigitsMap, invertedSymbolMap, negative, number, prefix, prefixNSuffix, + suffix, tokenizer, valid; + + // Grammar: + // - Value <= NaN | PositiveNumber | NegativeNumber + // - PositiveNumber <= PositivePrefix NumberOrInf PositiveSufix + // - NegativeNumber <= NegativePrefix NumberOrInf + // - NumberOrInf <= Number | Inf + grammar = [ + [ "nan" ], + [ "prefix", "infinity", "suffix" ], + [ "prefix", "number", "suffix" ], + [ "negativePrefix", "infinity", "negativeSuffix" ], + [ "negativePrefix", "number", "negativeSuffix" ] + ]; + + invertedSymbolMap = properties[ 0 ]; + invertedNuDigitsMap = properties[ 1 ] || {}; + tokenizer = properties[ 2 ]; + + value = looseMatching( value ); + + function parse( type ) { + return function( lexeme ) { + + // Reverse localized symbols and numbering system. + lexeme = lexeme.split( "" ).map(function( character ) { + return invertedSymbolMap[ character ] || + invertedNuDigitsMap[ character ] || + character; + }).join( "" ); + + switch ( type ) { + case "infinity": + number = Infinity; + break; + + case "nan": + number = NaN; + break; + + case "number": + + // Remove grouping separators. + lexeme = lexeme.replace( /,/g, "" ); + + number = +lexeme; + break; + + case "prefix": + case "negativePrefix": + prefix = lexeme; + break; + + case "suffix": + suffix = lexeme; + break; + + case "negativeSuffix": + suffix = lexeme; + negative = true; + break; + + // This should never be reached. + default: + throw new Error( "Internal error" ); + } + return ""; + }; + } + + function tokenizeNParse( _value, grammar ) { + return grammar.some(function( statement ) { + var value = _value; + + // The whole grammar statement should be used (i.e., .every() return true) and value be + // entirely consumed (i.e., !value.length). + return statement.every(function( type ) { + if ( value.match( tokenizer[ type ] ) === null ) { + return false; + } + + // Consume and parse it. + value = value.replace( tokenizer[ type ], parse( type ) ); + return true; + }) && !value.length; + }); + } + + valid = tokenizeNParse( value, grammar ); + + // NaN + if ( !valid || isNaN( number ) ) { + return NaN; + } + + prefixNSuffix = "" + prefix + suffix; + + // Percent + if ( prefixNSuffix.indexOf( "%" ) !== -1 ) { + number /= 100; + + // Per mille + } else if ( prefixNSuffix.indexOf( "\u2030" ) !== -1 ) { + number /= 1000; + } + + // Negative number + if ( negative ) { + number *= -1; + } + + return number; +}; + + + + +var numberParserFn = function( properties ) { + return function numberParser( value ) { + validateParameterPresence( value, "value" ); + validateParameterTypeString( value, "value" ); + + return numberParse( value, properties ); + }; + +}; + + + + +var numberTruncate = function( value ) { + if ( isNaN( value ) ) { + return NaN; + } + return Math[ value < 0 ? "ceil" : "floor" ]( value ); +}; + + + + +/** + * round( method ) + * + * @method [String] with either "round", "ceil", "floor", or "truncate". + * + * Return function( value, incrementOrExp ): + * + * @value [Number] eg. 123.45. + * + * @incrementOrExp [Number] optional, eg. 0.1; or + * [Object] Either { increment: } or { exponent: } + * + * Return the rounded number, eg: + * - round( "round" )( 123.45 ): 123; + * - round( "ceil" )( 123.45 ): 124; + * - round( "floor" )( 123.45 ): 123; + * - round( "truncate" )( 123.45 ): 123; + * - round( "round" )( 123.45, 0.1 ): 123.5; + * - round( "round" )( 123.45, 10 ): 120; + * + * Based on https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round + * Ref: #376 + */ +var numberRound = function( method ) { + method = method || "round"; + method = method === "truncate" ? numberTruncate : Math[ method ]; + + return function( value, incrementOrExp ) { + var exp, increment; + + value = +value; + + // If the value is not a number, return NaN. + if ( isNaN( value ) ) { + return NaN; + } + + // Exponent given. + if ( typeof incrementOrExp === "object" && incrementOrExp.exponent ) { + exp = +incrementOrExp.exponent; + increment = 1; + + if ( exp === 0 ) { + return method( value ); + } + + // If the exp is not an integer, return NaN. + if ( !( typeof exp === "number" && exp % 1 === 0 ) ) { + return NaN; + } + + // Increment given. + } else { + increment = +incrementOrExp || 1; + + if ( increment === 1 ) { + return method( value ); + } + + // If the increment is not a number, return NaN. + if ( isNaN( increment ) ) { + return NaN; + } + + increment = increment.toExponential().split( "e" ); + exp = +increment[ 1 ]; + increment = +increment[ 0 ]; + } + + // Shift & Round + value = value.toString().split( "e" ); + value[ 0 ] = +value[ 0 ] / increment; + value[ 1 ] = value[ 1 ] ? ( +value[ 1 ] - exp ) : -exp; + value = method( +( value[ 0 ] + "e" + value[ 1 ] ) ); + + // Shift back + value = value.toString().split( "e" ); + value[ 0 ] = +value[ 0 ] * increment; + value[ 1 ] = value[ 1 ] ? ( +value[ 1 ] + exp ) : exp; + return +( value[ 0 ] + "e" + value[ 1 ] ); + }; +}; + + + + +Globalize._createErrorUnsupportedFeature = createErrorUnsupportedFeature; +Globalize._looseMatching = looseMatching; +Globalize._numberFormat = numberFormat; +Globalize._numberFormatterFn = numberFormatterFn; +Globalize._numberParse = numberParse; +Globalize._numberParserFn = numberParserFn; +Globalize._numberRound = numberRound; +Globalize._removeLiteralQuotes = removeLiteralQuotes; +Globalize._validateParameterPresence = validateParameterPresence; +Globalize._validateParameterTypeNumber = validateParameterTypeNumber; +Globalize._validateParameterTypeString = validateParameterTypeString; + +// Stamp runtimeKey and return cached fn. +// Note, this function isn't made common to all formatters and parsers, because in practice this is +// only used (at the moment) for numberFormatter used by unitFormatter. +// TODO: Move this function into a common place when this is used by different formatters. +function cached( runtimeKey ) { + Globalize[ runtimeKey ].runtimeKey = runtimeKey; + return Globalize[ runtimeKey ]; +} + +Globalize.numberFormatter = +Globalize.prototype.numberFormatter = function( options ) { + options = options || {}; + return cached( runtimeKey( "numberFormatter", this._locale, [ options ] ) ); +}; + +Globalize.numberParser = +Globalize.prototype.numberParser = function( options ) { + options = options || {}; + return Globalize[ runtimeKey( "numberParser", this._locale, [ options ] ) ]; +}; + +Globalize.formatNumber = +Globalize.prototype.formatNumber = function( value, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + + return this.numberFormatter( options )( value ); +}; + +Globalize.parseNumber = +Globalize.prototype.parseNumber = function( value, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeString( value, "value" ); + + return this.numberParser( options )( value ); +}; + +return Globalize; + + + + +})); diff --git a/node_modules/globalize/dist/globalize-runtime/plural.js b/node_modules/globalize/dist/globalize-runtime/plural.js new file mode 100644 index 00000000..3f46c233 --- /dev/null +++ b/node_modules/globalize/dist/globalize-runtime/plural.js @@ -0,0 +1,90 @@ +/** + * Globalize Runtime v1.4.2 + * + * http://github.com/jquery/globalize + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2019-03-07T13:47Z + */ +/*! + * Globalize Runtime v1.4.2 2019-03-07T13:47Z Released under the MIT license + * http://git.io/TrdQbw + */ +(function( root, factory ) { + + "use strict"; + + // UMD returnExports + if ( typeof define === "function" && define.amd ) { + + // AMD + define([ + "../globalize-runtime" + ], factory ); + } else if ( typeof exports === "object" ) { + + // Node, CommonJS + module.exports = factory( require( "../globalize-runtime" ) ); + } else { + + // Extend global + factory( root.Globalize ); + } +}(this, function( Globalize ) { + + + +var runtimeKey = Globalize._runtimeKey, + validateParameterPresence = Globalize._validateParameterPresence, + validateParameterType = Globalize._validateParameterType; + + +var validateParameterTypeNumber = function( value, name ) { + validateParameterType( + value, + name, + value === undefined || typeof value === "number", + "Number" + ); +}; + + + + +var pluralGeneratorFn = function( plural ) { + return function pluralGenerator( value ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + + return plural( value ); + }; +}; + + + + +Globalize._pluralGeneratorFn = pluralGeneratorFn; +Globalize._validateParameterTypeNumber = validateParameterTypeNumber; + +Globalize.plural = +Globalize.prototype.plural = function( value, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + return this.pluralGenerator( options )( value ); +}; + +Globalize.pluralGenerator = +Globalize.prototype.pluralGenerator = function( options ) { + options = options || {}; + return Globalize[ runtimeKey( "pluralGenerator", this._locale, [ options ] ) ]; +}; + +return Globalize; + + + + +})); diff --git a/node_modules/globalize/dist/globalize-runtime/relative-time.js b/node_modules/globalize/dist/globalize-runtime/relative-time.js new file mode 100644 index 00000000..68142b8c --- /dev/null +++ b/node_modules/globalize/dist/globalize-runtime/relative-time.js @@ -0,0 +1,120 @@ +/** + * Globalize Runtime v1.4.2 + * + * http://github.com/jquery/globalize + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2019-03-07T13:47Z + */ +/*! + * Globalize Runtime v1.4.2 2019-03-07T13:47Z Released under the MIT license + * http://git.io/TrdQbw + */ +(function( root, factory ) { + + "use strict"; + + // UMD returnExports + if ( typeof define === "function" && define.amd ) { + + // AMD + define([ + "../globalize-runtime", + "./number", + "./plural" + ], factory ); + } else if ( typeof exports === "object" ) { + + // Node, CommonJS + module.exports = factory( + require( "../globalize-runtime" ), + require( "./number" ), + require( "./plural" ) + ); + } else { + + // Extend global + factory( root.Globalize ); + } +}(this, function( Globalize ) { + + + +var formatMessage = Globalize._formatMessage, + runtimeKey = Globalize._runtimeKey, + validateParameterPresence = Globalize._validateParameterPresence, + validateParameterTypeNumber = Globalize._validateParameterTypeNumber; + + +/** + * format( value, numberFormatter, pluralGenerator, properties ) + * + * @value [Number] The number to format + * + * @numberFormatter [String] A numberFormatter from Globalize.numberFormatter + * + * @pluralGenerator [String] A pluralGenerator from Globalize.pluralGenerator + * + * @properties [Object] containing relative time plural message. + * + * Format relative time. + */ +var relativeTimeFormat = function( value, numberFormatter, pluralGenerator, properties ) { + + var relativeTime, + message = properties[ "relative-type-" + value ]; + + if ( message ) { + return message; + } + + relativeTime = value <= 0 ? properties[ "relativeTime-type-past" ] + : properties[ "relativeTime-type-future" ]; + + value = Math.abs( value ); + + message = relativeTime[ "relativeTimePattern-count-" + pluralGenerator( value ) ]; + return formatMessage( message, [ numberFormatter( value ) ] ); +}; + + + + +var relativeTimeFormatterFn = function( numberFormatter, pluralGenerator, properties ) { + return function relativeTimeFormatter( value ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + + return relativeTimeFormat( value, numberFormatter, pluralGenerator, properties ); + }; + +}; + + + + +Globalize._relativeTimeFormatterFn = relativeTimeFormatterFn; + +Globalize.formatRelativeTime = +Globalize.prototype.formatRelativeTime = function( value, unit, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + + return this.relativeTimeFormatter( unit, options )( value ); +}; + +Globalize.relativeTimeFormatter = +Globalize.prototype.relativeTimeFormatter = function( unit, options ) { + options = options || {}; + return Globalize[ runtimeKey( "relativeTimeFormatter", this._locale, [ unit, options ] ) ]; +}; + +return Globalize; + + + + +})); diff --git a/node_modules/globalize/dist/globalize-runtime/unit.js b/node_modules/globalize/dist/globalize-runtime/unit.js new file mode 100644 index 00000000..8b161664 --- /dev/null +++ b/node_modules/globalize/dist/globalize-runtime/unit.js @@ -0,0 +1,132 @@ +/** + * Globalize Runtime v1.4.2 + * + * http://github.com/jquery/globalize + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2019-03-07T13:47Z + */ +/*! + * Globalize Runtime v1.4.2 2019-03-07T13:47Z Released under the MIT license + * http://git.io/TrdQbw + */ +(function( root, factory ) { + + "use strict"; + + // UMD returnExports + if ( typeof define === "function" && define.amd ) { + + // AMD + define([ + "../globalize-runtime", + "./number", + "./plural" + ], factory ); + } else if ( typeof exports === "object" ) { + + // Node, CommonJS + module.exports = factory( + require( "../globalize-runtime" ), + require( "./number" ), + require( "./plural" ) + ); + } else { + + // Extend global + factory( root.Globalize ); + } +}(this, function( Globalize ) { + + + +var formatMessage = Globalize._formatMessage, + runtimeKey = Globalize._runtimeKey, + validateParameterPresence = Globalize._validateParameterPresence, + validateParameterTypeNumber = Globalize._validateParameterTypeNumber; + + +/** + * format( value, numberFormatter, pluralGenerator, unitProperies ) + * + * @value [Number] + * + * @numberFormatter [Object]: A numberFormatter from Globalize.numberFormatter. + * + * @pluralGenerator [Object]: A pluralGenerator from Globalize.pluralGenerator. + * + * @unitProperies [Object]: localized unit data from cldr. + * + * Format units such as seconds, minutes, days, weeks, etc. + * + * OBS: + * + * Unit Sequences are not implemented. + * http://www.unicode.org/reports/tr35/tr35-35/tr35-general.html#Unit_Sequences + * + * Duration Unit (for composed time unit durations) is not implemented. + * http://www.unicode.org/reports/tr35/tr35-35/tr35-general.html#durationUnit + */ +var unitFormat = function( value, numberFormatter, pluralGenerator, unitProperties ) { + var compoundUnitPattern = unitProperties.compoundUnitPattern, dividend, dividendProperties, + formattedValue, divisor, divisorProperties, message, pluralValue, oneProperty; + + unitProperties = unitProperties.unitProperties; + formattedValue = numberFormatter( value ); + pluralValue = pluralGenerator( value ); + + // computed compound unit, eg. "megabyte-per-second". + if ( unitProperties instanceof Array ) { + dividendProperties = unitProperties[ 0 ]; + divisorProperties = unitProperties[ 1 ]; + oneProperty = divisorProperties.hasOwnProperty( "one" ) ? "one" : "other"; + + dividend = formatMessage( dividendProperties[ pluralValue ], [ formattedValue ] ); + divisor = formatMessage( divisorProperties[oneProperty], [ "" ] ).trim(); + + return formatMessage( compoundUnitPattern, [ dividend, divisor ] ); + } + + message = unitProperties[ pluralValue ]; + + return formatMessage( message, [ formattedValue ] ); +}; + + + + +var unitFormatterFn = function( numberFormatter, pluralGenerator, unitProperties ) { + return function unitFormatter( value ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + + return unitFormat( value, numberFormatter, pluralGenerator, unitProperties ); + }; + +}; + + + + +Globalize._unitFormatterFn = unitFormatterFn; + +Globalize.formatUnit = +Globalize.prototype.formatUnit = function( value, unit, options ) { + return this.unitFormatter( unit, options )( value ); +}; + +Globalize.unitFormatter = +Globalize.prototype.unitFormatter = function( unit, options ) { + options = options || {}; + return Globalize[ runtimeKey( "unitFormatter", this._locale, [ unit, options ] ) ]; +}; + +return Globalize; + + + + +})); diff --git a/node_modules/globalize/dist/globalize.js b/node_modules/globalize/dist/globalize.js new file mode 100644 index 00000000..27df4061 --- /dev/null +++ b/node_modules/globalize/dist/globalize.js @@ -0,0 +1,433 @@ +/** + * Globalize v1.4.2 + * + * http://github.com/jquery/globalize + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2019-03-07T13:47Z + */ +/*! + * Globalize v1.4.2 2019-03-07T13:47Z Released under the MIT license + * http://git.io/TrdQbw + */ +(function( root, factory ) { + + // UMD returnExports + if ( typeof define === "function" && define.amd ) { + + // AMD + define([ + "cldr", + "cldr/event" + ], factory ); + } else if ( typeof exports === "object" ) { + + // Node, CommonJS + module.exports = factory( require( "cldrjs" ) ); + } else { + + // Global + root.Globalize = factory( root.Cldr ); + } +}( this, function( Cldr ) { + + +/** + * A toString method that outputs meaningful values for objects or arrays and + * still performs as fast as a plain string in case variable is string, or as + * fast as `"" + number` in case variable is a number. + * Ref: http://jsperf.com/my-stringify + */ +var toString = function( variable ) { + return typeof variable === "string" ? variable : ( typeof variable === "number" ? "" + + variable : JSON.stringify( variable ) ); +}; + + + + +/** + * formatMessage( message, data ) + * + * @message [String] A message with optional {vars} to be replaced. + * + * @data [Array or JSON] Object with replacing-variables content. + * + * Return the formatted message. For example: + * + * - formatMessage( "{0} second", [ 1 ] ); // 1 second + * + * - formatMessage( "{0}/{1}", ["m", "s"] ); // m/s + * + * - formatMessage( "{name} <{email}>", { + * name: "Foo", + * email: "bar@baz.qux" + * }); // Foo + */ +var formatMessage = function( message, data ) { + + // Replace {attribute}'s + message = message.replace( /{[0-9a-zA-Z-_. ]+}/g, function( name ) { + name = name.replace( /^{([^}]*)}$/, "$1" ); + return toString( data[ name ] ); + }); + + return message; +}; + + + + +var objectExtend = function() { + var destination = arguments[ 0 ], + sources = [].slice.call( arguments, 1 ); + + sources.forEach(function( source ) { + var prop; + for ( prop in source ) { + destination[ prop ] = source[ prop ]; + } + }); + + return destination; +}; + + + + +var createError = function( code, message, attributes ) { + var error; + + message = code + ( message ? ": " + formatMessage( message, attributes ) : "" ); + error = new Error( message ); + error.code = code; + + objectExtend( error, attributes ); + + return error; +}; + + + + +var runtimeStringify = function( args ) { + return JSON.stringify( args, function( key, value ) { + if ( value && value.runtimeKey ) { + return value.runtimeKey; + } + return value; + } ); +}; + + + + +// Based on http://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript-jquery +var stringHash = function( str ) { + return [].reduce.call( str, function( hash, i ) { + var chr = i.charCodeAt( 0 ); + hash = ( ( hash << 5 ) - hash ) + chr; + return hash | 0; + }, 0 ); +}; + + + + +var runtimeKey = function( fnName, locale, args, argsStr ) { + var hash; + argsStr = argsStr || runtimeStringify( args ); + hash = stringHash( fnName + locale + argsStr ); + return hash > 0 ? "a" + hash : "b" + Math.abs( hash ); +}; + + + + +var functionName = function( fn ) { + if ( fn.name !== undefined ) { + return fn.name; + } + + // fn.name is not supported by IE. + var matches = /^function\s+([\w\$]+)\s*\(/.exec( fn.toString() ); + + if ( matches && matches.length > 0 ) { + return matches[ 1 ]; + } +}; + + + + +var runtimeBind = function( args, cldr, fn, runtimeArgs ) { + + var argsStr = runtimeStringify( args ), + fnName = functionName( fn ), + locale = cldr.locale; + + // If name of the function is not available, this is most likely due to uglification, + // which most likely means we are in production, and runtimeBind here is not necessary. + if ( !fnName ) { + return fn; + } + + fn.runtimeKey = runtimeKey( fnName, locale, null, argsStr ); + + fn.generatorString = function() { + return "Globalize(\"" + locale + "\")." + fnName + "(" + argsStr.slice( 1, -1 ) + ")"; + }; + + fn.runtimeArgs = runtimeArgs; + + return fn; +}; + + + + +var validate = function( code, message, check, attributes ) { + if ( !check ) { + throw createError( code, message, attributes ); + } +}; + + + + +var alwaysArray = function( stringOrArray ) { + return Array.isArray( stringOrArray ) ? stringOrArray : stringOrArray ? [ stringOrArray ] : []; +}; + + + + +var validateCldr = function( path, value, options ) { + var skipBoolean; + options = options || {}; + + skipBoolean = alwaysArray( options.skip ).some(function( pathRe ) { + return pathRe.test( path ); + }); + + validate( "E_MISSING_CLDR", "Missing required CLDR content `{path}`.", value || skipBoolean, { + path: path + }); +}; + + + + +var validateDefaultLocale = function( value ) { + validate( "E_DEFAULT_LOCALE_NOT_DEFINED", "Default locale has not been defined.", + value !== undefined, {} ); +}; + + + + +var validateParameterPresence = function( value, name ) { + validate( "E_MISSING_PARAMETER", "Missing required parameter `{name}`.", + value !== undefined, { name: name }); +}; + + + + +/** + * range( value, name, minimum, maximum ) + * + * @value [Number]. + * + * @name [String] name of variable. + * + * @minimum [Number]. The lowest valid value, inclusive. + * + * @maximum [Number]. The greatest valid value, inclusive. + */ +var validateParameterRange = function( value, name, minimum, maximum ) { + validate( + "E_PAR_OUT_OF_RANGE", + "Parameter `{name}` has value `{value}` out of range [{minimum}, {maximum}].", + value === undefined || value >= minimum && value <= maximum, + { + maximum: maximum, + minimum: minimum, + name: name, + value: value + } + ); +}; + + + + +var validateParameterType = function( value, name, check, expected ) { + validate( + "E_INVALID_PAR_TYPE", + "Invalid `{name}` parameter ({value}). {expected} expected.", + check, + { + expected: expected, + name: name, + value: value + } + ); +}; + + + + +var validateParameterTypeLocale = function( value, name ) { + validateParameterType( + value, + name, + value === undefined || typeof value === "string" || value instanceof Cldr, + "String or Cldr instance" + ); +}; + + + + +/** + * Function inspired by jQuery Core, but reduced to our use case. + */ +var isPlainObject = function( obj ) { + return obj !== null && "" + obj === "[object Object]"; +}; + + + + +var validateParameterTypePlainObject = function( value, name ) { + validateParameterType( + value, + name, + value === undefined || isPlainObject( value ), + "Plain Object" + ); +}; + + + + +var alwaysCldr = function( localeOrCldr ) { + return localeOrCldr instanceof Cldr ? localeOrCldr : new Cldr( localeOrCldr ); +}; + + + + +// ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions?redirectlocale=en-US&redirectslug=JavaScript%2FGuide%2FRegular_Expressions +var regexpEscape = function( string ) { + return string.replace( /([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1" ); +}; + + + + +var stringPad = function( str, count, right ) { + var length; + if ( typeof str !== "string" ) { + str = String( str ); + } + for ( length = str.length; length < count; length += 1 ) { + str = ( right ? ( str + "0" ) : ( "0" + str ) ); + } + return str; +}; + + + + +function validateLikelySubtags( cldr ) { + cldr.once( "get", validateCldr ); + cldr.get( "supplemental/likelySubtags" ); +} + +/** + * [new] Globalize( locale|cldr ) + * + * @locale [String] + * + * @cldr [Cldr instance] + * + * Create a Globalize instance. + */ +function Globalize( locale ) { + if ( !( this instanceof Globalize ) ) { + return new Globalize( locale ); + } + + validateParameterPresence( locale, "locale" ); + validateParameterTypeLocale( locale, "locale" ); + + this.cldr = alwaysCldr( locale ); + + validateLikelySubtags( this.cldr ); +} + +/** + * Globalize.load( json, ... ) + * + * @json [JSON] + * + * Load resolved or unresolved cldr data. + * Somewhat equivalent to previous Globalize.addCultureInfo(...). + */ +Globalize.load = function() { + + // validations are delegated to Cldr.load(). + Cldr.load.apply( Cldr, arguments ); +}; + +/** + * Globalize.locale( [locale|cldr] ) + * + * @locale [String] + * + * @cldr [Cldr instance] + * + * Set default Cldr instance if locale or cldr argument is passed. + * + * Return the default Cldr instance. + */ +Globalize.locale = function( locale ) { + validateParameterTypeLocale( locale, "locale" ); + + if ( arguments.length ) { + this.cldr = alwaysCldr( locale ); + validateLikelySubtags( this.cldr ); + } + return this.cldr; +}; + +/** + * Optimization to avoid duplicating some internal functions across modules. + */ +Globalize._alwaysArray = alwaysArray; +Globalize._createError = createError; +Globalize._formatMessage = formatMessage; +Globalize._isPlainObject = isPlainObject; +Globalize._objectExtend = objectExtend; +Globalize._regexpEscape = regexpEscape; +Globalize._runtimeBind = runtimeBind; +Globalize._stringPad = stringPad; +Globalize._validate = validate; +Globalize._validateCldr = validateCldr; +Globalize._validateDefaultLocale = validateDefaultLocale; +Globalize._validateParameterPresence = validateParameterPresence; +Globalize._validateParameterRange = validateParameterRange; +Globalize._validateParameterTypePlainObject = validateParameterTypePlainObject; +Globalize._validateParameterType = validateParameterType; + +return Globalize; + + + + +})); diff --git a/node_modules/globalize/dist/globalize/currency.js b/node_modules/globalize/dist/globalize/currency.js new file mode 100644 index 00000000..192168a2 --- /dev/null +++ b/node_modules/globalize/dist/globalize/currency.js @@ -0,0 +1,451 @@ +/*! + * Globalize v1.4.2 + * + * http://github.com/jquery/globalize + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2019-03-07T13:47Z + */ +(function( root, factory ) { + + // UMD returnExports + if ( typeof define === "function" && define.amd ) { + + // AMD + define([ + "cldr", + "../globalize", + "./number", + "cldr/event", + "cldr/supplemental" + ], factory ); + } else if ( typeof exports === "object" ) { + + // Node, CommonJS + module.exports = factory( require( "cldrjs" ), require( "../globalize" ) ); + } else { + + // Global + factory( root.Cldr, root.Globalize ); + } +}(this, function( Cldr, Globalize ) { + +var alwaysArray = Globalize._alwaysArray, + formatMessage = Globalize._formatMessage, + numberNumberingSystem = Globalize._numberNumberingSystem, + numberPattern = Globalize._numberPattern, + runtimeBind = Globalize._runtimeBind, + stringPad = Globalize._stringPad, + validateCldr = Globalize._validateCldr, + validateDefaultLocale = Globalize._validateDefaultLocale, + validateParameterPresence = Globalize._validateParameterPresence, + validateParameterType = Globalize._validateParameterType, + validateParameterTypeNumber = Globalize._validateParameterTypeNumber, + validateParameterTypePlainObject = Globalize._validateParameterTypePlainObject; + + +var validateParameterTypeCurrency = function( value, name ) { + validateParameterType( + value, + name, + value === undefined || typeof value === "string" && ( /^[A-Za-z]{3}$/ ).test( value ), + "3-letter currency code string as defined by ISO 4217" + ); +}; + + + + +/** + * supplementalOverride( currency, pattern, cldr ) + * + * Return pattern with fraction digits overriden by supplemental currency data. + */ +var currencySupplementalOverride = function( currency, pattern, cldr ) { + var digits, + fraction = "", + fractionData = cldr.supplemental([ "currencyData/fractions", currency ]) || + cldr.supplemental( "currencyData/fractions/DEFAULT" ); + + digits = +fractionData._digits; + + if ( digits ) { + fraction = "." + stringPad( "0", digits ).slice( 0, -1 ) + fractionData._rounding; + } + + return pattern.replace( /\.(#+|0*[0-9]|0+[0-9]?)/g, fraction ); +}; + + + + +var objectFilter = function( object, testRe ) { + var key, + copy = {}; + + for ( key in object ) { + if ( testRe.test( key ) ) { + copy[ key ] = object[ key ]; + } + } + + return copy; +}; + + + + +var currencyUnitPatterns = function( cldr ) { + return objectFilter( cldr.main([ + "numbers", + "currencyFormats-numberSystem-" + numberNumberingSystem( cldr ) + ]), /^unitPattern/ ); +}; + + + + +/** + * codeProperties( currency, cldr ) + * + * Return number pattern with the appropriate currency code in as literal. + */ +var currencyCodeProperties = function( currency, cldr ) { + var pattern = numberPattern( "decimal", cldr ); + + // The number of decimal places and the rounding for each currency is not locale-specific. Those + // values overridden by Supplemental Currency Data. + pattern = currencySupplementalOverride( currency, pattern, cldr ); + + return { + currency: currency, + pattern: pattern, + unitPatterns: currencyUnitPatterns( cldr ) + }; +}; + + + + +/** + * nameFormat( formattedNumber, pluralForm, properties ) + * + * Return the appropriate name form currency format. + */ +var currencyNameFormat = function( formattedNumber, pluralForm, properties ) { + var displayName, unitPattern, + displayNames = properties.displayNames || {}, + unitPatterns = properties.unitPatterns; + + displayName = displayNames[ "displayName-count-" + pluralForm ] || + displayNames[ "displayName-count-other" ] || + displayNames.displayName || + properties.currency; + unitPattern = unitPatterns[ "unitPattern-count-" + pluralForm ] || + unitPatterns[ "unitPattern-count-other" ]; + + return formatMessage( unitPattern, [ formattedNumber, displayName ]); +}; + + + + +var currencyFormatterFn = function( numberFormatter, pluralGenerator, properties ) { + var fn; + + // Return formatter when style is "code" or "name". + if ( pluralGenerator && properties ) { + fn = function currencyFormatter( value ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + return currencyNameFormat( + numberFormatter( value ), + pluralGenerator( value ), + properties + ); + }; + + // Return formatter when style is "symbol" or "accounting". + } else { + fn = function currencyFormatter( value ) { + return numberFormatter( value ); + }; + } + + return fn; +}; + + + + +/** + * nameProperties( currency, cldr ) + * + * Return number pattern with the appropriate currency code in as literal. + */ +var currencyNameProperties = function( currency, cldr ) { + var properties = currencyCodeProperties( currency, cldr ); + + properties.displayNames = objectFilter( cldr.main([ + "numbers/currencies", + currency + ]), /^displayName/ ); + + return properties; +}; + + + + +/** + * Unicode regular expression for: everything except math symbols, currency signs, dingbats, and + * box-drawing characters. + * + * Generated by: + * + * regenerate() + * .addRange( 0x0, 0x10FFFF ) + * .remove( require( "unicode-7.0.0/categories/S/symbols" ) ).toString(); + * + * https://github.com/mathiasbynens/regenerate + * https://github.com/mathiasbynens/unicode-7.0.0 + */ +var regexpNotS = /[\0-#%-\*,-;\?-\]_a-\{\}\x7F-\xA1\xA7\xAA\xAB\xAD\xB2\xB3\xB5-\xB7\xB9-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376-\u0383\u0386-\u03F5\u03F7-\u0481\u0483-\u058C\u0590-\u0605\u0609\u060A\u060C\u060D\u0610-\u06DD\u06DF-\u06E8\u06EA-\u06FC\u06FF-\u07F5\u07F7-\u09F1\u09F4-\u09F9\u09FC-\u0AF0\u0AF2-\u0B6F\u0B71-\u0BF2\u0BFB-\u0C7E\u0C80-\u0D78\u0D7A-\u0E3E\u0E40-\u0F00\u0F04-\u0F12\u0F14\u0F18\u0F19\u0F20-\u0F33\u0F35\u0F37\u0F39-\u0FBD\u0FC6\u0FCD\u0FD0-\u0FD4\u0FD9-\u109D\u10A0-\u138F\u139A-\u17DA\u17DC-\u193F\u1941-\u19DD\u1A00-\u1B60\u1B6B-\u1B73\u1B7D-\u1FBC\u1FBE\u1FC2-\u1FCC\u1FD0-\u1FDC\u1FE0-\u1FEC\u1FF0-\u1FFC\u1FFF-\u2043\u2045-\u2051\u2053-\u2079\u207D-\u2089\u208D-\u209F\u20BE-\u20FF\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u218F\u2308-\u230B\u2329\u232A\u23FB-\u23FF\u2427-\u243F\u244B-\u249B\u24EA-\u24FF\u2768-\u2793\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2B74\u2B75\u2B96\u2B97\u2BBA-\u2BBC\u2BC9\u2BD2-\u2CE4\u2CEB-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u3003\u3005-\u3011\u3014-\u301F\u3021-\u3035\u3038-\u303D\u3040-\u309A\u309D-\u318F\u3192-\u3195\u31A0-\u31BF\u31E4-\u31FF\u321F-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u32FF\u3400-\u4DBF\u4E00-\uA48F\uA4C7-\uA6FF\uA717-\uA71F\uA722-\uA788\uA78B-\uA827\uA82C-\uA835\uA83A-\uAA76\uAA7A-\uAB5A\uAB5C-\uD7FF\uDC00-\uFB28\uFB2A-\uFBB1\uFBC2-\uFDFB\uFDFE-\uFE61\uFE63\uFE67\uFE68\uFE6A-\uFF03\uFF05-\uFF0A\uFF0C-\uFF1B\uFF1F-\uFF3D\uFF3F\uFF41-\uFF5B\uFF5D\uFF5F-\uFFDF\uFFE7\uFFEF-\uFFFB\uFFFE\uFFFF]|\uD800[\uDC00-\uDD36\uDD40-\uDD78\uDD8A\uDD8B\uDD8D-\uDD8F\uDD9C-\uDD9F\uDDA1-\uDDCF\uDDFD-\uDFFF]|[\uD801\uD803-\uD819\uD81B-\uD82E\uD830-\uD833\uD836-\uD83A\uD83F-\uDBFF][\uDC00-\uDFFF]|\uD802[\uDC00-\uDC76\uDC79-\uDEC7\uDEC9-\uDFFF]|\uD81A[\uDC00-\uDF3B\uDF40-\uDF44\uDF46-\uDFFF]|\uD82F[\uDC00-\uDC9B\uDC9D-\uDFFF]|\uD834[\uDCF6-\uDCFF\uDD27\uDD28\uDD65-\uDD69\uDD6D-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDDDE-\uDDFF\uDE42-\uDE44\uDE46-\uDEFF\uDF57-\uDFFF]|\uD835[\uDC00-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFFF]|\uD83B[\uDC00-\uDEEF\uDEF2-\uDFFF]|\uD83C[\uDC2C-\uDC2F\uDC94-\uDC9F\uDCAF\uDCB0\uDCC0\uDCD0\uDCF6-\uDD0F\uDD2F\uDD6C-\uDD6F\uDD9B-\uDDE5\uDE03-\uDE0F\uDE3B-\uDE3F\uDE49-\uDE4F\uDE52-\uDEFF\uDF2D-\uDF2F\uDF7E\uDF7F\uDFCF-\uDFD3\uDFF8-\uDFFF]|\uD83D[\uDCFF\uDD4B-\uDD4F\uDD7A\uDDA4\uDE43\uDE44\uDED0-\uDEDF\uDEED-\uDEEF\uDEF4-\uDEFF\uDF74-\uDF7F\uDFD5-\uDFFF]|\uD83E[\uDC0C-\uDC0F\uDC48-\uDC4F\uDC5A-\uDC5F\uDC88-\uDC8F\uDCAE-\uDFFF]|[\uD800-\uDBFF]/; + + + + +/** + * symbolProperties( currency, cldr ) + * + * Return pattern replacing `¤` with the appropriate currency symbol literal. + */ +var currencySymbolProperties = function( currency, cldr, options ) { + var currencySpacing, pattern, symbol, + symbolEntries = [ "symbol" ], + regexp = { + "[:digit:]": /\d/, + "[:^S:]": regexpNotS + }; + + // If options.symbolForm === "narrow" was passed, prepend it. + if ( options.symbolForm === "narrow" ) { + symbolEntries.unshift( "symbol-alt-narrow" ); + } + + symbolEntries.some(function( symbolEntry ) { + return symbol = cldr.main([ + "numbers/currencies", + currency, + symbolEntry + ]); + }); + + currencySpacing = [ "beforeCurrency", "afterCurrency" ].map(function( position ) { + return cldr.main([ + "numbers", + "currencyFormats-numberSystem-" + numberNumberingSystem( cldr ), + "currencySpacing", + position + ]); + }); + + pattern = cldr.main([ + "numbers", + "currencyFormats-numberSystem-" + numberNumberingSystem( cldr ), + options.style === "accounting" ? "accounting" : "standard" + ]); + + pattern = + + // The number of decimal places and the rounding for each currency is not locale-specific. + // Those values are overridden by Supplemental Currency Data. + currencySupplementalOverride( currency, pattern, cldr ) + + // Replace "¤" (\u00A4) with the appropriate symbol literal. + .split( ";" ).map(function( pattern ) { + + return pattern.split( "\u00A4" ).map(function( part, i ) { + var currencyMatch = regexp[ currencySpacing[ i ].currencyMatch ], + surroundingMatch = regexp[ currencySpacing[ i ].surroundingMatch ], + insertBetween = ""; + + // For currencyMatch and surroundingMatch definitions, read [1]. + // When i === 0, beforeCurrency is being handled. Otherwise, afterCurrency. + // 1: http://www.unicode.org/reports/tr35/tr35-numbers.html#Currencies + currencyMatch = currencyMatch.test( symbol.charAt( i ? symbol.length - 1 : 0 ) ); + surroundingMatch = surroundingMatch.test( + part.charAt( i ? 0 : part.length - 1 ).replace( /[#@,.]/g, "0" ) + ); + + if ( currencyMatch && part && surroundingMatch ) { + insertBetween = currencySpacing[ i ].insertBetween; + } + + return ( i ? insertBetween : "" ) + part + ( i ? "" : insertBetween ); + }).join( "'" + symbol + "'" ); + }).join( ";" ); + + return { + pattern: pattern + }; +}; + + + + +/** + * objectOmit( object, keys ) + * + * Return a copy of the object, filtered to omit the blacklisted key or array of keys. + */ +var objectOmit = function( object, keys ) { + var key, + copy = {}; + + keys = alwaysArray( keys ); + + for ( key in object ) { + if ( keys.indexOf( key ) === -1 ) { + copy[ key ] = object[ key ]; + } + } + + return copy; +}; + + + + +function validateRequiredCldr( path, value ) { + validateCldr( path, value, { + skip: [ + /numbers\/currencies\/[^/]+\/symbol-alt-/, + /supplemental\/currencyData\/fractions\/[A-Za-z]{3}$/ + ] + }); +} + +/** + * .currencyFormatter( currency [, options] ) + * + * @currency [String] 3-letter currency code as defined by ISO 4217. + * + * @options [Object]: + * - style: [String] "symbol" (default), "accounting", "code" or "name". + * - see also number/format options. + * + * Return a function that formats a currency according to the given options and default/instance + * locale. + */ +Globalize.currencyFormatter = +Globalize.prototype.currencyFormatter = function( currency, options ) { + var args, cldr, numberFormatter, pluralGenerator, properties, returnFn, style; + + validateParameterPresence( currency, "currency" ); + validateParameterTypeCurrency( currency, "currency" ); + + validateParameterTypePlainObject( options, "options" ); + + cldr = this.cldr; + options = options || {}; + + args = [ currency, options ]; + style = options.style || "symbol"; + + validateDefaultLocale( cldr ); + + // Get properties given style ("symbol" default, "code" or "name"). + cldr.on( "get", validateRequiredCldr ); + properties = ({ + accounting: currencySymbolProperties, + code: currencyCodeProperties, + name: currencyNameProperties, + symbol: currencySymbolProperties + }[ style ] )( currency, cldr, options ); + cldr.off( "get", validateRequiredCldr ); + + // options = options minus style, plus raw pattern. + options = objectOmit( options, "style" ); + options.raw = properties.pattern; + + // Return formatter when style is "symbol" or "accounting". + if ( style === "symbol" || style === "accounting" ) { + numberFormatter = this.numberFormatter( options ); + + returnFn = currencyFormatterFn( numberFormatter ); + + runtimeBind( args, cldr, returnFn, [ numberFormatter ] ); + + // Return formatter when style is "code" or "name". + } else { + numberFormatter = this.numberFormatter( options ); + pluralGenerator = this.pluralGenerator(); + + returnFn = currencyFormatterFn( numberFormatter, pluralGenerator, properties ); + + runtimeBind( args, cldr, returnFn, [ numberFormatter, pluralGenerator, properties ] ); + } + + return returnFn; +}; + +/** + * .currencyParser( currency [, options] ) + * + * @currency [String] 3-letter currency code as defined by ISO 4217. + * + * @options [Object] see currencyFormatter. + * + * Return the currency parser according to the given options and the default/instance locale. + */ +Globalize.currencyParser = +Globalize.prototype.currencyParser = function( /* currency, options */ ) { + + // TODO implement parser. + +}; + +/** + * .formatCurrency( value, currency [, options] ) + * + * @value [Number] number to be formatted. + * + * @currency [String] 3-letter currency code as defined by ISO 4217. + * + * @options [Object] see currencyFormatter. + * + * Format a currency according to the given options and the default/instance locale. + */ +Globalize.formatCurrency = +Globalize.prototype.formatCurrency = function( value, currency, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + + return this.currencyFormatter( currency, options )( value ); +}; + +/** + * .parseCurrency( value, currency [, options] ) + * + * @value [String] + * + * @currency [String] 3-letter currency code as defined by ISO 4217. + * + * @options [Object]: See currencyFormatter. + * + * Return the parsed currency or NaN when value is invalid. + */ +Globalize.parseCurrency = +Globalize.prototype.parseCurrency = function( /* value, currency, options */ ) { +}; + +return Globalize; + + + + +})); diff --git a/node_modules/globalize/dist/globalize/date.js b/node_modules/globalize/dist/globalize/date.js new file mode 100644 index 00000000..43fc15a9 --- /dev/null +++ b/node_modules/globalize/dist/globalize/date.js @@ -0,0 +1,3138 @@ +/** + * Globalize v1.4.2 + * + * http://github.com/jquery/globalize + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2019-03-07T13:47Z + */ +/*! + * Globalize v1.4.2 2019-03-07T13:47Z Released under the MIT license + * http://git.io/TrdQbw + */ +(function( root, factory ) { + + // UMD returnExports + if ( typeof define === "function" && define.amd ) { + + // AMD + define([ + "cldr", + "../globalize", + "./number", + "cldr/event", + "cldr/supplemental" + ], factory ); + } else if ( typeof exports === "object" ) { + + // Node, CommonJS + module.exports = factory( require( "cldrjs" ), require( "../globalize" ) ); + } else { + + // Extend global + factory( root.Cldr, root.Globalize ); + } +}(this, function( Cldr, Globalize ) { + +var createError = Globalize._createError, + createErrorUnsupportedFeature = Globalize._createErrorUnsupportedFeature, + formatMessage = Globalize._formatMessage, + isPlainObject = Globalize._isPlainObject, + looseMatching = Globalize._looseMatching, + numberNumberingSystemDigitsMap = Globalize._numberNumberingSystemDigitsMap, + numberSymbol = Globalize._numberSymbol, + regexpEscape = Globalize._regexpEscape, + removeLiteralQuotes = Globalize._removeLiteralQuotes, + runtimeBind = Globalize._runtimeBind, + stringPad = Globalize._stringPad, + validate = Globalize._validate, + validateCldr = Globalize._validateCldr, + validateDefaultLocale = Globalize._validateDefaultLocale, + validateParameterPresence = Globalize._validateParameterPresence, + validateParameterType = Globalize._validateParameterType, + validateParameterTypePlainObject = Globalize._validateParameterTypePlainObject, + validateParameterTypeString = Globalize._validateParameterTypeString; + + +var validateParameterTypeDate = function( value, name ) { + validateParameterType( value, name, value === undefined || value instanceof Date, "Date" ); +}; + + + + +var createErrorInvalidParameterValue = function( name, value ) { + return createError( "E_INVALID_PAR_VALUE", "Invalid `{name}` value ({value}).", { + name: name, + value: value + }); +}; + + + + +/** + * Create a map between the skeleton fields and their positions, e.g., + * { + * G: 0 + * y: 1 + * ... + * } + */ +var validateSkeletonFieldsPosMap = "GyYuUrQqMLlwWEecdDFghHKkmsSAzZOvVXx".split( "" ).reduce(function( memo, item, i ) { + memo[ item ] = i; + return memo; +}, {}); + + + + +/** + * validateSkeleton( skeleton ) + * + * skeleton: Assume `j` has already been converted into a localized hour field. + */ +var validateSkeleton = function validateSkeleton( skeleton ) { + var last, + + // Using easier to read variable. + fieldsPosMap = validateSkeletonFieldsPosMap; + + // "The fields are from the Date Field Symbol Table in Date Format Patterns" + // Ref: http://www.unicode.org/reports/tr35/tr35-dates.html#availableFormats_appendItems + // I.e., check for invalid characters. + skeleton.replace( /[^GyYuUrQqMLlwWEecdDFghHKkmsSAzZOvVXx]/, function( field ) { + throw createError( + "E_INVALID_OPTIONS", "Invalid field `{invalidField}` of skeleton `{value}`", + { + invalidField: field, + type: "skeleton", + value: skeleton + } + ); + }); + + // "The canonical order is from top to bottom in that table; that is, yM not My". + // http://www.unicode.org/reports/tr35/tr35-dates.html#availableFormats_appendItems + // I.e., check for invalid order. + skeleton.split( "" ).every(function( field ) { + if ( fieldsPosMap[ field ] < last ) { + throw createError( + "E_INVALID_OPTIONS", "Invalid order `{invalidField}` of skeleton `{value}`", + { + invalidField: field, + type: "skeleton", + value: skeleton + } + ); + } + last = fieldsPosMap[ field ]; + return true; + }); +}; + + + + +/** + * Returns a new object created by using `object`'s values as keys, and the keys as values. + */ +var objectInvert = function( object, fn ) { + fn = fn || function( object, key, value ) { + object[ value ] = key; + return object; + }; + return Object.keys( object ).reduce(function( newObject, key ) { + return fn( newObject, key, object[ key ] ); + }, {}); +}; + + + + +// Invert key and values, e.g., {"e": "eEc"} ==> {"e": "e", "E": "e", "c": "e"}. +var dateExpandPatternSimilarFieldsMap = objectInvert({ + "e": "eEc", + "L": "ML" +}, function( object, key, value ) { + value.split( "" ).forEach(function( field ) { + object[ field ] = key; + }); + return object; +}); + + + + +var dateExpandPatternNormalizePatternType = function( character ) { + return dateExpandPatternSimilarFieldsMap[ character ] || character; +}; + + + + +var datePatternRe = ( /([a-z])\1*|'([^']|'')+'|''|./ig ); + + + + +var stringRepeat = function( str, count ) { + var i, result = ""; + for ( i = 0; i < count; i++ ) { + result = result + str; + } + return result; +}; + + + + +function expandBestMatchFormat( skeletonWithoutFractionalSeconds, bestMatchFormat ) { + var i, j, bestMatchFormatParts, matchedType, matchedLength, requestedType, + requestedLength, requestedSkeletonParts, + + // Using an easier to read variable. + normalizePatternType = dateExpandPatternNormalizePatternType; + + requestedSkeletonParts = skeletonWithoutFractionalSeconds.match( datePatternRe ); + bestMatchFormatParts = bestMatchFormat.match( datePatternRe ); + + for ( i = 0; i < bestMatchFormatParts.length; i++ ) { + matchedType = bestMatchFormatParts[i].charAt( 0 ); + matchedLength = bestMatchFormatParts[i].length; + for ( j = 0; j < requestedSkeletonParts.length; j++ ) { + requestedType = requestedSkeletonParts[j].charAt( 0 ); + requestedLength = requestedSkeletonParts[j].length; + if ( normalizePatternType( matchedType ) === normalizePatternType( requestedType ) && + matchedLength < requestedLength + ) { + bestMatchFormatParts[i] = stringRepeat( matchedType, requestedLength ); + } + } + } + + return bestMatchFormatParts.join( "" ); +} + +// See: http://www.unicode.org/reports/tr35/tr35-dates.html#Matching_Skeletons +var dateExpandPatternAugmentFormat = function( requestedSkeleton, bestMatchFormat, decimalSeparator ) { + var countOfFractionalSeconds, fractionalSecondMatch, lastSecondIdx, + skeletonWithoutFractionalSeconds; + + fractionalSecondMatch = requestedSkeleton.match( /S/g ); + countOfFractionalSeconds = fractionalSecondMatch ? fractionalSecondMatch.length : 0; + skeletonWithoutFractionalSeconds = requestedSkeleton.replace( /S/g, "" ); + + bestMatchFormat = expandBestMatchFormat( skeletonWithoutFractionalSeconds, bestMatchFormat ); + + lastSecondIdx = bestMatchFormat.lastIndexOf( "s" ); + if ( lastSecondIdx !== -1 && countOfFractionalSeconds !== 0 ) { + bestMatchFormat = + bestMatchFormat.slice( 0, lastSecondIdx + 1 ) + + decimalSeparator + + stringRepeat( "S", countOfFractionalSeconds ) + + bestMatchFormat.slice( lastSecondIdx + 1 ); + } + return bestMatchFormat; +}; + + + + +var dateExpandPatternCompareFormats = function( formatA, formatB ) { + var a, b, distance, lenA, lenB, typeA, typeB, i, j, + + // Using easier to read variables. + normalizePatternType = dateExpandPatternNormalizePatternType; + + if ( formatA === formatB ) { + return 0; + } + + formatA = formatA.match( datePatternRe ); + formatB = formatB.match( datePatternRe ); + + if ( formatA.length !== formatB.length ) { + return -1; + } + + distance = 1; + for ( i = 0; i < formatA.length; i++ ) { + a = formatA[ i ].charAt( 0 ); + typeA = normalizePatternType( a ); + typeB = null; + for ( j = 0; j < formatB.length; j++ ) { + b = formatB[ j ].charAt( 0 ); + typeB = normalizePatternType( b ); + if ( typeA === typeB ) { + break; + } else { + typeB = null; + } + } + if ( typeB === null ) { + return -1; + } + lenA = formatA[ i ].length; + lenB = formatB[ j ].length; + distance = distance + Math.abs( lenA - lenB ); + + // Most symbols have a small distance from each other, e.g., M ≅ L; E ≅ c; a ≅ b ≅ B; + // H ≅ k ≅ h ≅ K; ... + if ( a !== b ) { + distance += 1; + } + + // Numeric (l<3) and text fields (l>=3) are given a larger distance from each other. + if ( ( lenA < 3 && lenB >= 3 ) || ( lenA >= 3 && lenB < 3 ) ) { + distance += 20; + } + } + return distance; +}; + + + + +var dateExpandPatternGetBestMatchPattern = function( cldr, askedSkeleton ) { + var availableFormats, decimalSeparator, pattern, ratedFormats, skeleton, + path = "dates/calendars/gregorian/dateTimeFormats/availableFormats", + + // Using easier to read variables. + augmentFormat = dateExpandPatternAugmentFormat, + compareFormats = dateExpandPatternCompareFormats; + + pattern = cldr.main([ path, askedSkeleton ]); + + if ( askedSkeleton && !pattern ) { + availableFormats = cldr.main([ path ]); + ratedFormats = []; + + for ( skeleton in availableFormats ) { + ratedFormats.push({ + skeleton: skeleton, + pattern: availableFormats[ skeleton ], + rate: compareFormats( askedSkeleton, skeleton ) + }); + } + + ratedFormats = ratedFormats + .filter( function( format ) { + return format.rate > -1; + } ) + .sort( function( formatA, formatB ) { + return formatA.rate - formatB.rate; + }); + + if ( ratedFormats.length ) { + decimalSeparator = numberSymbol( "decimal", cldr ); + pattern = augmentFormat( askedSkeleton, ratedFormats[0].pattern, decimalSeparator ); + } + } + + return pattern; +}; + + + + +/** + * expandPattern( options, cldr ) + * + * @options [Object] if String, it's considered a skeleton. Object accepts: + * - skeleton: [String] lookup availableFormat; + * - date: [String] ( "full" | "long" | "medium" | "short" ); + * - time: [String] ( "full" | "long" | "medium" | "short" ); + * - datetime: [String] ( "full" | "long" | "medium" | "short" ); + * - raw: [String] For more info see datetime/format.js. + * + * @cldr [Cldr instance]. + * + * Return the corresponding pattern. + * Eg for "en": + * - "GyMMMd" returns "MMM d, y G"; + * - { skeleton: "GyMMMd" } returns "MMM d, y G"; + * - { date: "full" } returns "EEEE, MMMM d, y"; + * - { time: "full" } returns "h:mm:ss a zzzz"; + * - { datetime: "full" } returns "EEEE, MMMM d, y 'at' h:mm:ss a zzzz"; + * - { raw: "dd/mm" } returns "dd/mm"; + */ +var dateExpandPattern = function( options, cldr ) { + var dateSkeleton, result, skeleton, timeSkeleton, type, + + // Using easier to read variables. + getBestMatchPattern = dateExpandPatternGetBestMatchPattern; + + function combineDateTime( type, datePattern, timePattern ) { + return formatMessage( + cldr.main([ + "dates/calendars/gregorian/dateTimeFormats", + type + ]), + [ timePattern, datePattern ] + ); + } + + switch ( true ) { + case "skeleton" in options: + skeleton = options.skeleton; + + // Preferred hour (j). + skeleton = skeleton.replace( /j/g, function() { + return cldr.supplemental.timeData.preferred(); + }); + + validateSkeleton( skeleton ); + + // Try direct map (note that getBestMatchPattern handles it). + // ... or, try to "best match" the whole skeleton. + result = getBestMatchPattern( + cldr, + skeleton + ); + if ( result ) { + break; + } + + // ... or, try to "best match" the date and time parts individually. + timeSkeleton = skeleton.split( /[^hHKkmsSAzZOvVXx]/ ).slice( -1 )[ 0 ]; + dateSkeleton = skeleton.split( /[^GyYuUrQqMLlwWdDFgEec]/ )[ 0 ]; + dateSkeleton = getBestMatchPattern( + cldr, + dateSkeleton + ); + timeSkeleton = getBestMatchPattern( + cldr, + timeSkeleton + ); + + if ( /(MMMM|LLLL).*[Ec]/.test( dateSkeleton ) ) { + type = "full"; + } else if ( /MMMM|LLLL/.test( dateSkeleton ) ) { + type = "long"; + } else if ( /MMM|LLL/.test( dateSkeleton ) ) { + type = "medium"; + } else { + type = "short"; + } + + if ( dateSkeleton && timeSkeleton ) { + result = combineDateTime( type, dateSkeleton, timeSkeleton ); + } else { + result = dateSkeleton || timeSkeleton; + } + + break; + + case "date" in options: + case "time" in options: + result = cldr.main([ + "dates/calendars/gregorian", + "date" in options ? "dateFormats" : "timeFormats", + ( options.date || options.time ) + ]); + break; + + case "datetime" in options: + result = combineDateTime( options.datetime, + cldr.main([ "dates/calendars/gregorian/dateFormats", options.datetime ]), + cldr.main([ "dates/calendars/gregorian/timeFormats", options.datetime ]) + ); + break; + + case "raw" in options: + result = options.raw; + break; + + default: + throw createErrorInvalidParameterValue({ + name: "options", + value: options + }); + } + + return result; +}; + + + + +var dateWeekDays = [ "sun", "mon", "tue", "wed", "thu", "fri", "sat" ]; + + + + +/** + * firstDayOfWeek + */ +var dateFirstDayOfWeek = function( cldr ) { + return dateWeekDays.indexOf( cldr.supplemental.weekData.firstDay() ); +}; + + + + +/** + * getTimeZoneName( length, type ) + */ +var dateGetTimeZoneName = function( length, type, timeZone, cldr ) { + var metaZone, result; + + if ( !timeZone ) { + return; + } + + result = cldr.main([ + "dates/timeZoneNames/zone", + timeZone, + length < 4 ? "short" : "long", + type + ]); + + if ( result ) { + return result; + } + + // The latest metazone data of the metazone array. + // TODO expand to support the historic metazones based on the given date. + metaZone = cldr.supplemental([ + "metaZones/metazoneInfo/timezone", timeZone, 0, + "usesMetazone/_mzone" + ]); + + return cldr.main([ + "dates/timeZoneNames/metazone", + metaZone, + length < 4 ? "short" : "long", + type + ]); +}; + + + + +/** + * timezoneHourFormatShortH( hourFormat ) + * + * @hourFormat [String] + * + * Unofficial deduction of the short hourFormat given time zone `hourFormat` element. + * Official spec is pending resolution: http://unicode.org/cldr/trac/ticket/8293 + * + * Example: + * - "+HH.mm;-HH.mm" => "+H;-H" + * - "+HH:mm;-HH:mm" => "+H;-H" + * - "+HH:mm;−HH:mm" => "+H;−H" (Note MINUS SIGN \u2212) + * - "+HHmm;-HHmm" => "+H:-H" + */ +var dateTimezoneHourFormatH = function( hourFormat ) { + return hourFormat + .split( ";" ) + .map(function( format ) { + return format.slice( 0, format.indexOf( "H" ) + 1 ); + }) + .join( ";" ); +}; + + + + +/** + * timezoneHourFormatLongHm( hourFormat ) + * + * @hourFormat [String] + * + * Unofficial deduction of the short hourFormat given time zone `hourFormat` element. + * Official spec is pending resolution: http://unicode.org/cldr/trac/ticket/8293 + * + * Example (hFormat === "H"): (used for short Hm) + * - "+HH.mm;-HH.mm" => "+H.mm;-H.mm" + * - "+HH:mm;-HH:mm" => "+H:mm;-H:mm" + * - "+HH:mm;−HH:mm" => "+H:mm;−H:mm" (Note MINUS SIGN \u2212) + * - "+HHmm;-HHmm" => "+Hmm:-Hmm" + * + * Example (hFormat === "HH": (used for long Hm) + * - "+HH.mm;-HH.mm" => "+HH.mm;-HH.mm" + * - "+HH:mm;-HH:mm" => "+HH:mm;-HH:mm" + * - "+H:mm;-H:mm" => "+HH:mm;-HH:mm" + * - "+HH:mm;−HH:mm" => "+HH:mm;−HH:mm" (Note MINUS SIGN \u2212) + * - "+HHmm;-HHmm" => "+HHmm:-HHmm" + */ +var dateTimezoneHourFormatHm = function( hourFormat, hFormat ) { + return hourFormat + .split( ";" ) + .map(function( format ) { + var parts = format.split( /H+/ ); + parts.splice( 1, 0, hFormat ); + return parts.join( "" ); + }) + .join( ";" ); +}; + + + + +var runtimeCacheDataBind = function( key, data ) { + var fn = function() { + return data; + }; + fn.dataCacheKey = key; + return fn; +}; + + + + +/** + * properties( pattern, cldr ) + * + * @pattern [String] raw pattern. + * ref: http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns + * + * @cldr [Cldr instance]. + * + * Return the properties given the pattern and cldr. + * + * TODO Support other calendar types. + */ +var dateFormatProperties = function( pattern, cldr, timeZone ) { + var properties = { + numberFormatters: {}, + pattern: pattern, + timeSeparator: numberSymbol( "timeSeparator", cldr ) + }, + widths = [ "abbreviated", "wide", "narrow" ]; + + function setNumberFormatterPattern( pad ) { + properties.numberFormatters[ pad ] = stringPad( "", pad ); + } + + if ( timeZone ) { + properties.timeZoneData = runtimeCacheDataBind( "iana/" + timeZone, { + offsets: cldr.get([ "globalize-iana/zoneData", timeZone, "offsets" ]), + untils: cldr.get([ "globalize-iana/zoneData", timeZone, "untils" ]), + isdsts: cldr.get([ "globalize-iana/zoneData", timeZone, "isdsts" ]) + }); + } + + pattern.replace( datePatternRe, function( current ) { + var aux, chr, daylightTzName, formatNumber, genericTzName, length, standardTzName; + + chr = current.charAt( 0 ); + length = current.length; + + if ( chr === "j" ) { + + // Locale preferred hHKk. + // http://www.unicode.org/reports/tr35/tr35-dates.html#Time_Data + properties.preferredTime = chr = cldr.supplemental.timeData.preferred(); + } + + // ZZZZ: same as "OOOO". + if ( chr === "Z" && length === 4 ) { + chr = "O"; + length = 4; + } + + // z...zzz: "{shortRegion}", eg. "PST" or "PDT". + // zzzz: "{regionName} {Standard Time}" or "{regionName} {Daylight Time}", + // e.g., "Pacific Standard Time" or "Pacific Daylight Time". + // http://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns + if ( chr === "z" ) { + standardTzName = dateGetTimeZoneName( length, "standard", timeZone, cldr ); + daylightTzName = dateGetTimeZoneName( length, "daylight", timeZone, cldr ); + if ( standardTzName ) { + properties.standardTzName = standardTzName; + } + if ( daylightTzName ) { + properties.daylightTzName = daylightTzName; + } + + // Fall through the "O" format in case one name is missing. + if ( !standardTzName || !daylightTzName ) { + chr = "O"; + if ( length < 4 ) { + length = 1; + } + } + } + + // v...vvv: "{shortRegion}", eg. "PT". + // vvvv: "{regionName} {Time}" or "{regionName} {Time}", + // e.g., "Pacific Time" + // http://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns + if ( chr === "v" ) { + genericTzName = dateGetTimeZoneName( length, "generic", timeZone, cldr ); + + // Fall back to "V" format. + if ( !genericTzName ) { + chr = "V"; + length = 4; + } + } + + switch ( chr ) { + + // Era + case "G": + properties.eras = cldr.main([ + "dates/calendars/gregorian/eras", + length <= 3 ? "eraAbbr" : ( length === 4 ? "eraNames" : "eraNarrow" ) + ]); + break; + + // Year + case "y": + + // Plain year. + formatNumber = true; + break; + + case "Y": + + // Year in "Week of Year" + properties.firstDay = dateFirstDayOfWeek( cldr ); + properties.minDays = cldr.supplemental.weekData.minDays(); + formatNumber = true; + break; + + case "u": // Extended year. Need to be implemented. + case "U": // Cyclic year name. Need to be implemented. + throw createErrorUnsupportedFeature({ + feature: "year pattern `" + chr + "`" + }); + + // Quarter + case "Q": + case "q": + if ( length > 2 ) { + if ( !properties.quarters ) { + properties.quarters = {}; + } + if ( !properties.quarters[ chr ] ) { + properties.quarters[ chr ] = {}; + } + properties.quarters[ chr ][ length ] = cldr.main([ + "dates/calendars/gregorian/quarters", + chr === "Q" ? "format" : "stand-alone", + widths[ length - 3 ] + ]); + } else { + formatNumber = true; + } + break; + + // Month + case "M": + case "L": + if ( length > 2 ) { + if ( !properties.months ) { + properties.months = {}; + } + if ( !properties.months[ chr ] ) { + properties.months[ chr ] = {}; + } + properties.months[ chr ][ length ] = cldr.main([ + "dates/calendars/gregorian/months", + chr === "M" ? "format" : "stand-alone", + widths[ length - 3 ] + ]); + } else { + formatNumber = true; + } + break; + + // Week - Week of Year (w) or Week of Month (W). + case "w": + case "W": + properties.firstDay = dateFirstDayOfWeek( cldr ); + properties.minDays = cldr.supplemental.weekData.minDays(); + formatNumber = true; + break; + + // Day + case "d": + case "D": + case "F": + formatNumber = true; + break; + + case "g": + + // Modified Julian day. Need to be implemented. + throw createErrorUnsupportedFeature({ + feature: "Julian day pattern `g`" + }); + + // Week day + case "e": + case "c": + if ( length <= 2 ) { + properties.firstDay = dateFirstDayOfWeek( cldr ); + formatNumber = true; + break; + } + + /* falls through */ + case "E": + if ( !properties.days ) { + properties.days = {}; + } + if ( !properties.days[ chr ] ) { + properties.days[ chr ] = {}; + } + if ( length === 6 ) { + + // If short day names are not explicitly specified, abbreviated day names are + // used instead. + // http://www.unicode.org/reports/tr35/tr35-dates.html#months_days_quarters_eras + // http://unicode.org/cldr/trac/ticket/6790 + properties.days[ chr ][ length ] = cldr.main([ + "dates/calendars/gregorian/days", + chr === "c" ? "stand-alone" : "format", + "short" + ]) || cldr.main([ + "dates/calendars/gregorian/days", + chr === "c" ? "stand-alone" : "format", + "abbreviated" + ]); + } else { + properties.days[ chr ][ length ] = cldr.main([ + "dates/calendars/gregorian/days", + chr === "c" ? "stand-alone" : "format", + widths[ length < 3 ? 0 : length - 3 ] + ]); + } + break; + + // Period (AM or PM) + case "a": + properties.dayPeriods = { + am: cldr.main( + "dates/calendars/gregorian/dayPeriods/format/wide/am" + ), + pm: cldr.main( + "dates/calendars/gregorian/dayPeriods/format/wide/pm" + ) + }; + break; + + // Hour + case "h": // 1-12 + case "H": // 0-23 + case "K": // 0-11 + case "k": // 1-24 + + // Minute + case "m": + + // Second + case "s": + case "S": + case "A": + formatNumber = true; + break; + + // Zone + case "v": + if ( length !== 1 && length !== 4 ) { + throw createErrorUnsupportedFeature({ + feature: "timezone pattern `" + pattern + "`" + }); + } + properties.genericTzName = genericTzName; + break; + + case "V": + + if ( length === 1 ) { + throw createErrorUnsupportedFeature({ + feature: "timezone pattern `" + pattern + "`" + }); + } + + if ( timeZone ) { + if ( length === 2 ) { + properties.timeZoneName = timeZone; + break; + } + + var timeZoneName, + exemplarCity = cldr.main([ + "dates/timeZoneNames/zone", timeZone, "exemplarCity" + ]); + + if ( length === 3 ) { + if ( !exemplarCity ) { + exemplarCity = cldr.main([ + "dates/timeZoneNames/zone/Etc/Unknown/exemplarCity" + ]); + } + timeZoneName = exemplarCity; + } + + if ( exemplarCity && length === 4 ) { + timeZoneName = formatMessage( + cldr.main( + "dates/timeZoneNames/regionFormat" + ), + [ exemplarCity ] + ); + } + + if ( timeZoneName ) { + properties.timeZoneName = timeZoneName; + break; + } + } + + if ( current === "v" ) { + length = 1; + } + + /* falls through */ + case "O": + + // O: "{gmtFormat}+H;{gmtFormat}-H" or "{gmtZeroFormat}", eg. "GMT-8" or "GMT". + // OOOO: "{gmtFormat}{hourFormat}" or "{gmtZeroFormat}", eg. "GMT-08:00" or "GMT". + properties.gmtFormat = cldr.main( "dates/timeZoneNames/gmtFormat" ); + properties.gmtZeroFormat = cldr.main( "dates/timeZoneNames/gmtZeroFormat" ); + + // Unofficial deduction of the hourFormat variations. + // Official spec is pending resolution: http://unicode.org/cldr/trac/ticket/8293 + aux = cldr.main( "dates/timeZoneNames/hourFormat" ); + properties.hourFormat = length < 4 ? + [ dateTimezoneHourFormatH( aux ), dateTimezoneHourFormatHm( aux, "H" ) ] : + dateTimezoneHourFormatHm( aux, "HH" ); + + /* falls through */ + case "Z": + case "X": + case "x": + setNumberFormatterPattern( 1 ); + setNumberFormatterPattern( 2 ); + break; + } + + if ( formatNumber ) { + setNumberFormatterPattern( length ); + } + }); + + return properties; +}; + + + + +var dateFormatterFn = function( dateToPartsFormatter ) { + return function dateFormatter( value ) { + return dateToPartsFormatter( value ).map( function( part ) { + return part.value; + }).join( "" ); + }; +}; + + + + +/** + * parseProperties( cldr ) + * + * @cldr [Cldr instance]. + * + * @timeZone [String] FIXME. + * + * Return parser properties. + */ +var dateParseProperties = function( cldr, timeZone ) { + var properties = { + preferredTimeData: cldr.supplemental.timeData.preferred() + }; + + if ( timeZone ) { + properties.timeZoneData = runtimeCacheDataBind( "iana/" + timeZone, { + offsets: cldr.get([ "globalize-iana/zoneData", timeZone, "offsets" ]), + untils: cldr.get([ "globalize-iana/zoneData", timeZone, "untils" ]), + isdsts: cldr.get([ "globalize-iana/zoneData", timeZone, "isdsts" ]) + }); + } + + return properties; +}; + + +var ZonedDateTime = (function() { +function definePrivateProperty(object, property, value) { + Object.defineProperty(object, property, { + value: value + }); +} + +function getUntilsIndex(original, untils) { + var index = 0; + var originalTime = original.getTime(); + + // TODO Should we do binary search for improved performance? + while (index < untils.length - 1 && originalTime >= untils[index]) { + index++; + } + return index; +} + +function setWrap(fn) { + var offset1 = this.getTimezoneOffset(); + var ret = fn(); + this.original.setTime(new Date(this.getTime())); + var offset2 = this.getTimezoneOffset(); + if (offset2 - offset1) { + this.original.setMinutes(this.original.getMinutes() + offset2 - offset1); + } + return ret; +} + +var ZonedDateTime = function(date, timeZoneData) { + definePrivateProperty(this, "original", new Date(date.getTime())); + definePrivateProperty(this, "local", new Date(date.getTime())); + definePrivateProperty(this, "timeZoneData", timeZoneData); + definePrivateProperty(this, "setWrap", setWrap); + if (!(timeZoneData.untils && timeZoneData.offsets && timeZoneData.isdsts)) { + throw new Error("Invalid IANA data"); + } + this.setTime(this.local.getTime() - this.getTimezoneOffset() * 60 * 1000); +}; + +ZonedDateTime.prototype.clone = function() { + return new ZonedDateTime(this.original, this.timeZoneData); +}; + +// Date field getters. +["getFullYear", "getMonth", "getDate", "getDay", "getHours", "getMinutes", +"getSeconds", "getMilliseconds"].forEach(function(method) { + // Corresponding UTC method, e.g., "getUTCFullYear" if method === "getFullYear". + var utcMethod = "getUTC" + method.substr(3); + ZonedDateTime.prototype[method] = function() { + return this.local[utcMethod](); + }; +}); + +// Note: Define .valueOf = .getTime for arithmetic operations like date1 - date2. +ZonedDateTime.prototype.valueOf = +ZonedDateTime.prototype.getTime = function() { + return this.local.getTime() + this.getTimezoneOffset() * 60 * 1000; +}; + +ZonedDateTime.prototype.getTimezoneOffset = function() { + var index = getUntilsIndex(this.original, this.timeZoneData.untils); + return this.timeZoneData.offsets[index]; +}; + +// Date field setters. +["setFullYear", "setMonth", "setDate", "setHours", "setMinutes", "setSeconds", "setMilliseconds"].forEach(function(method) { + // Corresponding UTC method, e.g., "setUTCFullYear" if method === "setFullYear". + var utcMethod = "setUTC" + method.substr(3); + ZonedDateTime.prototype[method] = function(value) { + var local = this.local; + // Note setWrap is needed for seconds and milliseconds just because + // abs(value) could be >= a minute. + return this.setWrap(function() { + return local[utcMethod](value); + }); + }; +}); + +ZonedDateTime.prototype.setTime = function(time) { + return this.local.setTime(time); +}; + +ZonedDateTime.prototype.isDST = function() { + var index = getUntilsIndex(this.original, this.timeZoneData.untils); + return Boolean(this.timeZoneData.isdsts[index]); +}; + +ZonedDateTime.prototype.inspect = function() { + var index = getUntilsIndex(this.original, this.timeZoneData.untils); + var abbrs = this.timeZoneData.abbrs; + return this.local.toISOString().replace(/Z$/, "") + " " + + (abbrs && abbrs[index] + " " || (this.getTimezoneOffset() * -1) + " ") + + (this.isDST() ? "(daylight savings)" : ""); +}; + +ZonedDateTime.prototype.toDate = function() { + return new Date(this.getTime()); +}; + +// Type cast getters. +["toISOString", "toJSON", "toUTCString"].forEach(function(method) { + ZonedDateTime.prototype[method] = function() { + return this.toDate()[method](); + }; +}); + +return ZonedDateTime; +}()); + + +/** + * isLeapYear( year ) + * + * @year [Number] + * + * Returns an indication whether the specified year is a leap year. + */ +var dateIsLeapYear = function( year ) { + return new Date( year, 1, 29 ).getMonth() === 1; +}; + + + + +/** + * lastDayOfMonth( date ) + * + * @date [Date] + * + * Return the last day of the given date's month + */ +var dateLastDayOfMonth = function( date ) { + return new Date( date.getFullYear(), date.getMonth() + 1, 0 ).getDate(); +}; + + + + +/** + * startOf changes the input to the beginning of the given unit. + * + * For example, starting at the start of a day, resets hours, minutes + * seconds and milliseconds to 0. Starting at the month does the same, but + * also sets the date to 1. + * + * Returns the modified date + */ +var dateStartOf = function( date, unit ) { + date = date instanceof ZonedDateTime ? date.clone() : new Date( date.getTime() ); + switch ( unit ) { + case "year": + date.setMonth( 0 ); + /* falls through */ + case "month": + date.setDate( 1 ); + /* falls through */ + case "day": + date.setHours( 0 ); + /* falls through */ + case "hour": + date.setMinutes( 0 ); + /* falls through */ + case "minute": + date.setSeconds( 0 ); + /* falls through */ + case "second": + date.setMilliseconds( 0 ); + } + return date; +}; + + + + +/** + * Differently from native date.setDate(), this function returns a date whose + * day remains inside the month boundaries. For example: + * + * setDate( FebDate, 31 ): a "Feb 28" date. + * setDate( SepDate, 31 ): a "Sep 30" date. + */ +var dateSetDate = function( date, day ) { + var lastDay = new Date( date.getFullYear(), date.getMonth() + 1, 0 ).getDate(); + + date.setDate( day < 1 ? 1 : day < lastDay ? day : lastDay ); +}; + + + + +/** + * Differently from native date.setMonth(), this function adjusts date if + * needed, so final month is always the one set. + * + * setMonth( Jan31Date, 1 ): a "Feb 28" date. + * setDate( Jan31Date, 8 ): a "Sep 30" date. + */ +var dateSetMonth = function( date, month ) { + var originalDate = date.getDate(); + + date.setDate( 1 ); + date.setMonth( month ); + dateSetDate( date, originalDate ); +}; + + + + +var outOfRange = function( value, low, high ) { + return value < low || value > high; +}; + + + + +/** + * parse( value, tokens, properties ) + * + * @value [String] string date. + * + * @tokens [Object] tokens returned by date/tokenizer. + * + * @properties [Object] output returned by date/tokenizer-properties. + * + * ref: http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns + */ +var dateParse = function( value, tokens, properties ) { + var amPm, day, daysOfYear, month, era, hour, hour12, timezoneOffset, valid, + YEAR = 0, + MONTH = 1, + DAY = 2, + HOUR = 3, + MINUTE = 4, + SECOND = 5, + MILLISECONDS = 6, + date = new Date(), + truncateAt = [], + units = [ "year", "month", "day", "hour", "minute", "second", "milliseconds" ]; + + // Create globalize date with given timezone data. + if ( properties.timeZoneData ) { + date = new ZonedDateTime( date, properties.timeZoneData() ); + } + + if ( !tokens.length ) { + return null; + } + + valid = tokens.every(function( token ) { + var century, chr, value, length; + + if ( token.type === "literal" ) { + + // continue + return true; + } + + chr = token.type.charAt( 0 ); + length = token.type.length; + + if ( chr === "j" ) { + + // Locale preferred hHKk. + // http://www.unicode.org/reports/tr35/tr35-dates.html#Time_Data + chr = properties.preferredTimeData; + } + + switch ( chr ) { + + // Era + case "G": + truncateAt.push( YEAR ); + era = +token.value; + break; + + // Year + case "y": + value = token.value; + if ( length === 2 ) { + if ( outOfRange( value, 0, 99 ) ) { + return false; + } + + // mimic dojo/date/locale: choose century to apply, according to a sliding + // window of 80 years before and 20 years after present year. + century = Math.floor( date.getFullYear() / 100 ) * 100; + value += century; + if ( value > date.getFullYear() + 20 ) { + value -= 100; + } + } + date.setFullYear( value ); + truncateAt.push( YEAR ); + break; + + case "Y": // Year in "Week of Year" + throw createErrorUnsupportedFeature({ + feature: "year pattern `" + chr + "`" + }); + + // Quarter (skip) + case "Q": + case "q": + break; + + // Month + case "M": + case "L": + if ( length <= 2 ) { + value = token.value; + } else { + value = +token.value; + } + if ( outOfRange( value, 1, 12 ) ) { + return false; + } + + // Setting the month later so that we have the correct year and can determine + // the correct last day of February in case of leap year. + month = value; + truncateAt.push( MONTH ); + break; + + // Week (skip) + case "w": // Week of Year. + case "W": // Week of Month. + break; + + // Day + case "d": + day = token.value; + truncateAt.push( DAY ); + break; + + case "D": + daysOfYear = token.value; + truncateAt.push( DAY ); + break; + + case "F": + + // Day of Week in month. eg. 2nd Wed in July. + // Skip + break; + + // Week day + case "e": + case "c": + case "E": + + // Skip. + // value = arrayIndexOf( dateWeekDays, token.value ); + break; + + // Period (AM or PM) + case "a": + amPm = token.value; + break; + + // Hour + case "h": // 1-12 + value = token.value; + if ( outOfRange( value, 1, 12 ) ) { + return false; + } + hour = hour12 = true; + date.setHours( value === 12 ? 0 : value ); + truncateAt.push( HOUR ); + break; + + case "K": // 0-11 + value = token.value; + if ( outOfRange( value, 0, 11 ) ) { + return false; + } + hour = hour12 = true; + date.setHours( value ); + truncateAt.push( HOUR ); + break; + + case "k": // 1-24 + value = token.value; + if ( outOfRange( value, 1, 24 ) ) { + return false; + } + hour = true; + date.setHours( value === 24 ? 0 : value ); + truncateAt.push( HOUR ); + break; + + case "H": // 0-23 + value = token.value; + if ( outOfRange( value, 0, 23 ) ) { + return false; + } + hour = true; + date.setHours( value ); + truncateAt.push( HOUR ); + break; + + // Minute + case "m": + value = token.value; + if ( outOfRange( value, 0, 59 ) ) { + return false; + } + date.setMinutes( value ); + truncateAt.push( MINUTE ); + break; + + // Second + case "s": + value = token.value; + if ( outOfRange( value, 0, 59 ) ) { + return false; + } + date.setSeconds( value ); + truncateAt.push( SECOND ); + break; + + case "A": + date.setHours( 0 ); + date.setMinutes( 0 ); + date.setSeconds( 0 ); + + /* falls through */ + case "S": + value = Math.round( token.value * Math.pow( 10, 3 - length ) ); + date.setMilliseconds( value ); + truncateAt.push( MILLISECONDS ); + break; + + // Zone + case "z": + case "Z": + case "O": + case "v": + case "V": + case "X": + case "x": + if ( typeof token.value === "number" ) { + timezoneOffset = token.value; + } + break; + } + + return true; + }); + + if ( !valid ) { + return null; + } + + // 12-hour format needs AM or PM, 24-hour format doesn't, ie. return null + // if amPm && !hour12 || !amPm && hour12. + if ( hour && !( !amPm ^ hour12 ) ) { + return null; + } + + if ( era === 0 ) { + + // 1 BC = year 0 + date.setFullYear( date.getFullYear() * -1 + 1 ); + } + + if ( month !== undefined ) { + dateSetMonth( date, month - 1 ); + } + + if ( day !== undefined ) { + if ( outOfRange( day, 1, dateLastDayOfMonth( date ) ) ) { + return null; + } + date.setDate( day ); + } else if ( daysOfYear !== undefined ) { + if ( outOfRange( daysOfYear, 1, dateIsLeapYear( date.getFullYear() ) ? 366 : 365 ) ) { + return null; + } + date.setMonth( 0 ); + date.setDate( daysOfYear ); + } + + if ( hour12 && amPm === "pm" ) { + date.setHours( date.getHours() + 12 ); + } + + if ( timezoneOffset !== undefined ) { + date.setMinutes( date.getMinutes() + timezoneOffset - date.getTimezoneOffset() ); + } + + // Truncate date at the most precise unit defined. Eg. + // If value is "12/31", and pattern is "MM/dd": + // => new Date( , 12, 31, 0, 0, 0, 0 ); + truncateAt = Math.max.apply( null, truncateAt ); + date = dateStartOf( date, units[ truncateAt ] ); + + // Get date back from globalize date. + if ( date instanceof ZonedDateTime ) { + date = date.toDate(); + } + + return date; +}; + + + + +/** + * tokenizer( value, numberParser, properties ) + * + * @value [String] string date. + * + * @numberParser [Function] + * + * @properties [Object] output returned by date/tokenizer-properties. + * + * Returns an Array of tokens, eg. value "5 o'clock PM", pattern "h 'o''clock' a": + * [{ + * type: "h", + * lexeme: "5" + * }, { + * type: "literal", + * lexeme: " " + * }, { + * type: "literal", + * lexeme: "o'clock" + * }, { + * type: "literal", + * lexeme: " " + * }, { + * type: "a", + * lexeme: "PM", + * value: "pm" + * }] + * + * OBS: lexeme's are always String and may return invalid ranges depending of the token type. + * Eg. "99" for month number. + * + * Return an empty Array when not successfully parsed. + */ +var dateTokenizer = function( value, numberParser, properties ) { + var digitsRe, valid, + tokens = [], + widths = [ "abbreviated", "wide", "narrow" ]; + + digitsRe = properties.digitsRe; + value = looseMatching( value ); + + valid = properties.pattern.match( datePatternRe ).every(function( current ) { + var aux, chr, length, numeric, tokenRe, + token = {}; + + function hourFormatParse( tokenRe, numberParser ) { + var aux, isPositive, + match = value.match( tokenRe ); + numberParser = numberParser || function( value ) { + return +value; + }; + + if ( !match ) { + return false; + } + + isPositive = match[ 1 ]; + + // hourFormat containing H only, e.g., `+H;-H` + if ( match.length < 6 ) { + aux = isPositive ? 1 : 3; + token.value = numberParser( match[ aux ] ) * 60; + + // hourFormat containing H and m, e.g., `+HHmm;-HHmm` + } else if ( match.length < 10 ) { + aux = isPositive ? [ 1, 3 ] : [ 5, 7 ]; + token.value = numberParser( match[ aux[ 0 ] ] ) * 60 + + numberParser( match[ aux[ 1 ] ] ); + + // hourFormat containing H, m, and s e.g., `+HHmmss;-HHmmss` + } else { + aux = isPositive ? [ 1, 3, 5 ] : [ 7, 9, 11 ]; + token.value = numberParser( match[ aux[ 0 ] ] ) * 60 + + numberParser( match[ aux[ 1 ] ] ) + + numberParser( match[ aux[ 2 ] ] ) / 60; + } + + if ( isPositive ) { + token.value *= -1; + } + + return true; + } + + function oneDigitIfLengthOne() { + if ( length === 1 ) { + + // Unicode equivalent to /\d/ + numeric = true; + return tokenRe = digitsRe; + } + } + + function oneOrTwoDigitsIfLengthOne() { + if ( length === 1 ) { + + // Unicode equivalent to /\d\d?/ + numeric = true; + return tokenRe = new RegExp( "^(" + digitsRe.source + "){1,2}" ); + } + } + + function oneOrTwoDigitsIfLengthOneOrTwo() { + if ( length === 1 || length === 2 ) { + + // Unicode equivalent to /\d\d?/ + numeric = true; + return tokenRe = new RegExp( "^(" + digitsRe.source + "){1,2}" ); + } + } + + function twoDigitsIfLengthTwo() { + if ( length === 2 ) { + + // Unicode equivalent to /\d\d/ + numeric = true; + return tokenRe = new RegExp( "^(" + digitsRe.source + "){2}" ); + } + } + + // Brute-force test every locale entry in an attempt to match the given value. + // Return the first found one (and set token accordingly), or null. + function lookup( path ) { + var array = properties[ path.join( "/" ) ]; + + if ( !array ) { + return null; + } + + // array of pairs [key, value] sorted by desc value length. + array.some(function( item ) { + var valueRe = item[ 1 ]; + if ( valueRe.test( value ) ) { + token.value = item[ 0 ]; + tokenRe = item[ 1 ]; + return true; + } + }); + return null; + } + + token.type = current; + chr = current.charAt( 0 ); + length = current.length; + + if ( chr === "Z" ) { + + // Z..ZZZ: same as "xxxx". + if ( length < 4 ) { + chr = "x"; + length = 4; + + // ZZZZ: same as "OOOO". + } else if ( length < 5 ) { + chr = "O"; + length = 4; + + // ZZZZZ: same as "XXXXX" + } else { + chr = "X"; + length = 5; + } + } + + if ( chr === "z" ) { + if ( properties.standardOrDaylightTzName ) { + token.value = null; + tokenRe = properties.standardOrDaylightTzName; + } + } + + // v...vvv: "{shortRegion}", eg. "PT". + // vvvv: "{regionName} {Time}" or "{regionName} {Time}", + // e.g., "Pacific Time" + // http://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns + if ( chr === "v" ) { + if ( properties.genericTzName ) { + token.value = null; + tokenRe = properties.genericTzName; + + // Fall back to "V" format. + } else { + chr = "V"; + length = 4; + } + } + + if ( chr === "V" && properties.timeZoneName ) { + token.value = length === 2 ? properties.timeZoneName : null; + tokenRe = properties.timeZoneNameRe; + } + + switch ( chr ) { + + // Era + case "G": + lookup([ + "gregorian/eras", + length <= 3 ? "eraAbbr" : ( length === 4 ? "eraNames" : "eraNarrow" ) + ]); + break; + + // Year + case "y": + case "Y": + numeric = true; + + // number l=1:+, l=2:{2}, l=3:{3,}, l=4:{4,}, ... + if ( length === 1 ) { + + // Unicode equivalent to /\d+/. + tokenRe = new RegExp( "^(" + digitsRe.source + ")+" ); + } else if ( length === 2 ) { + + // Lenient parsing: there's no year pattern to indicate non-zero-padded 2-digits + // year, so parser accepts both zero-padded and non-zero-padded for `yy`. + // + // Unicode equivalent to /\d\d?/ + tokenRe = new RegExp( "^(" + digitsRe.source + "){1,2}" ); + } else { + + // Unicode equivalent to /\d{length,}/ + tokenRe = new RegExp( "^(" + digitsRe.source + "){" + length + ",}" ); + } + break; + + // Quarter + case "Q": + case "q": + + // number l=1:{1}, l=2:{2}. + // lookup l=3... + oneDigitIfLengthOne() || twoDigitsIfLengthTwo() || + lookup([ + "gregorian/quarters", + chr === "Q" ? "format" : "stand-alone", + widths[ length - 3 ] + ]); + break; + + // Month + case "M": + case "L": + + // number l=1:{1,2}, l=2:{2}. + // lookup l=3... + // + // Lenient parsing: skeleton "yMd" (i.e., one M) may include MM for the pattern, + // therefore parser accepts both zero-padded and non-zero-padded for M and MM. + // Similar for L. + oneOrTwoDigitsIfLengthOneOrTwo() || lookup([ + "gregorian/months", + chr === "M" ? "format" : "stand-alone", + widths[ length - 3 ] + ]); + break; + + // Day + case "D": + + // number {l,3}. + if ( length <= 3 ) { + + // Equivalent to /\d{length,3}/ + numeric = true; + tokenRe = new RegExp( "^(" + digitsRe.source + "){" + length + ",3}" ); + } + break; + + case "W": + case "F": + + // number l=1:{1}. + oneDigitIfLengthOne(); + break; + + // Week day + case "e": + case "c": + + // number l=1:{1}, l=2:{2}. + // lookup for length >=3. + if ( length <= 2 ) { + oneDigitIfLengthOne() || twoDigitsIfLengthTwo(); + break; + } + + /* falls through */ + case "E": + if ( length === 6 ) { + + // Note: if short day names are not explicitly specified, abbreviated day + // names are used instead http://www.unicode.org/reports/tr35/tr35-dates.html#months_days_quarters_eras + lookup([ + "gregorian/days", + [ chr === "c" ? "stand-alone" : "format" ], + "short" + ]) || lookup([ + "gregorian/days", + [ chr === "c" ? "stand-alone" : "format" ], + "abbreviated" + ]); + } else { + lookup([ + "gregorian/days", + [ chr === "c" ? "stand-alone" : "format" ], + widths[ length < 3 ? 0 : length - 3 ] + ]); + } + break; + + // Period (AM or PM) + case "a": + lookup([ + "gregorian/dayPeriods/format/wide" + ]); + break; + + // Week + case "w": + + // number l1:{1,2}, l2:{2}. + oneOrTwoDigitsIfLengthOne() || twoDigitsIfLengthTwo(); + break; + + // Day, Hour, Minute, or Second + case "d": + case "h": + case "H": + case "K": + case "k": + case "j": + case "m": + case "s": + + // number l1:{1,2}, l2:{2}. + // + // Lenient parsing: + // - skeleton "hms" (i.e., one m) always includes mm for the pattern, i.e., it's + // impossible to use a different skeleton to parse non-zero-padded minutes, + // therefore parser accepts both zero-padded and non-zero-padded for m. Similar + // for seconds s. + // - skeleton "hms" (i.e., one h) may include h or hh for the pattern, i.e., it's + // impossible to use a different skeleton to parser non-zero-padded hours for some + // locales, therefore parser accepts both zero-padded and non-zero-padded for h. + // Similar for d (in skeleton yMd). + oneOrTwoDigitsIfLengthOneOrTwo(); + break; + + case "S": + + // number {l}. + + // Unicode equivalent to /\d{length}/ + numeric = true; + tokenRe = new RegExp( "^(" + digitsRe.source + "){" + length + "}" ); + break; + + case "A": + + // number {l+5}. + + // Unicode equivalent to /\d{length+5}/ + numeric = true; + tokenRe = new RegExp( "^(" + digitsRe.source + "){" + ( length + 5 ) + "}" ); + break; + + // Zone + case "v": + case "V": + case "z": + if ( tokenRe && tokenRe.test( value ) ) { + break; + } + if ( chr === "V" && length === 2 ) { + break; + } + + /* falls through */ + case "O": + + // O: "{gmtFormat}+H;{gmtFormat}-H" or "{gmtZeroFormat}", eg. "GMT-8" or "GMT". + // OOOO: "{gmtFormat}{hourFormat}" or "{gmtZeroFormat}", eg. "GMT-08:00" or "GMT". + if ( value === properties[ "timeZoneNames/gmtZeroFormat" ] ) { + token.value = 0; + tokenRe = properties[ "timeZoneNames/gmtZeroFormatRe" ]; + } else { + aux = properties[ "timeZoneNames/hourFormat" ].some(function( hourFormatRe ) { + if ( hourFormatParse( hourFormatRe, numberParser ) ) { + tokenRe = hourFormatRe; + return true; + } + }); + if ( !aux ) { + return null; + } + } + break; + + case "X": + + // Same as x*, except it uses "Z" for zero offset. + if ( value === "Z" ) { + token.value = 0; + tokenRe = /^Z/; + break; + } + + /* falls through */ + case "x": + + // x: hourFormat("+HH[mm];-HH[mm]") + // xx: hourFormat("+HHmm;-HHmm") + // xxx: hourFormat("+HH:mm;-HH:mm") + // xxxx: hourFormat("+HHmm[ss];-HHmm[ss]") + // xxxxx: hourFormat("+HH:mm[:ss];-HH:mm[:ss]") + aux = properties.x.some(function( hourFormatRe ) { + if ( hourFormatParse( hourFormatRe ) ) { + tokenRe = hourFormatRe; + return true; + } + }); + if ( !aux ) { + return null; + } + break; + + case "'": + token.type = "literal"; + tokenRe = new RegExp( "^" + regexpEscape( removeLiteralQuotes( current ) ) ); + break; + + default: + token.type = "literal"; + tokenRe = new RegExp( "^" + regexpEscape( current ) ); + } + + if ( !tokenRe ) { + return false; + } + + // Get lexeme and consume it. + value = value.replace( tokenRe, function( lexeme ) { + token.lexeme = lexeme; + if ( numeric ) { + token.value = numberParser( lexeme ); + } + return ""; + }); + + if ( !token.lexeme ) { + return false; + } + + if ( numeric && isNaN( token.value ) ) { + return false; + } + + tokens.push( token ); + return true; + }); + + if ( value !== "" ) { + valid = false; + } + + return valid ? tokens : []; +}; + + + + +var dateParserFn = function( numberParser, parseProperties, tokenizerProperties ) { + return function dateParser( value ) { + var tokens; + + validateParameterPresence( value, "value" ); + validateParameterTypeString( value, "value" ); + + tokens = dateTokenizer( value, numberParser, tokenizerProperties ); + return dateParse( value, tokens, parseProperties ) || null; + }; +}; + + + + +var objectFilter = function( object, testRe ) { + var key, + copy = {}; + + for ( key in object ) { + if ( testRe.test( key ) ) { + copy[ key ] = object[ key ]; + } + } + + return copy; +}; + + + + +/** + * tokenizerProperties( pattern, cldr ) + * + * @pattern [String] raw pattern. + * + * @cldr [Cldr instance]. + * + * Return Object with data that will be used by tokenizer. + */ +var dateTokenizerProperties = function( pattern, cldr, timeZone ) { + var digitsReSource, + properties = { + pattern: looseMatching( pattern ) + }, + timeSeparator = numberSymbol( "timeSeparator", cldr ), + widths = [ "abbreviated", "wide", "narrow" ]; + + digitsReSource = numberNumberingSystemDigitsMap( cldr ); + digitsReSource = digitsReSource ? "[" + digitsReSource + "]" : "\\d"; + properties.digitsRe = new RegExp( digitsReSource ); + + // Transform: + // - "+H;-H" -> /\+(\d\d?)|-(\d\d?)/ + // - "+HH;-HH" -> /\+(\d\d)|-(\d\d)/ + // - "+HHmm;-HHmm" -> /\+(\d\d)(\d\d)|-(\d\d)(\d\d)/ + // - "+HH:mm;-HH:mm" -> /\+(\d\d):(\d\d)|-(\d\d):(\d\d)/ + // + // If gmtFormat is GMT{0}, the regexp must fill {0} in each side, e.g.: + // - "+H;-H" -> /GMT\+(\d\d?)|GMT-(\d\d?)/ + function hourFormatRe( hourFormat, gmtFormat, digitsReSource, timeSeparator ) { + var re; + + if ( !digitsReSource ) { + digitsReSource = "\\d"; + } + if ( !gmtFormat ) { + gmtFormat = "{0}"; + } + + re = hourFormat + .replace( "+", "\\+" ) + + // Unicode equivalent to (\\d\\d) + .replace( /HH|mm|ss/g, "((" + digitsReSource + "){2})" ) + + // Unicode equivalent to (\\d\\d?) + .replace( /H|m/g, "((" + digitsReSource + "){1,2})" ); + + if ( timeSeparator ) { + re = re.replace( /:/g, timeSeparator ); + } + + re = re.split( ";" ).map(function( part ) { + return gmtFormat.replace( "{0}", part ); + }).join( "|" ); + + return new RegExp( "^" + re ); + } + + function populateProperties( path, value ) { + + // Skip + var skipRe = /(timeZoneNames\/zone|supplemental\/metaZones|timeZoneNames\/metazone|timeZoneNames\/regionFormat|timeZoneNames\/gmtFormat)/; + if ( skipRe.test( path ) ) { + return; + } + + if ( !value ) { + return; + } + + // The `dates` and `calendars` trim's purpose is to reduce properties' key size only. + path = path.replace( /^.*\/dates\//, "" ).replace( /calendars\//, "" ); + + // Specific filter for "gregorian/dayPeriods/format/wide". + if ( path === "gregorian/dayPeriods/format/wide" ) { + value = objectFilter( value, /^am|^pm/ ); + } + + // Transform object into array of pairs [key, /value/], sort by desc value length. + if ( isPlainObject( value ) ) { + value = Object.keys( value ).map(function( key ) { + return [ key, new RegExp( "^" + regexpEscape( looseMatching( value[ key ] ) ) ) ]; + }).sort(function( a, b ) { + return b[ 1 ].source.length - a[ 1 ].source.length; + }); + + // If typeof value === "string". + } else { + value = looseMatching( value ); + } + properties[ path ] = value; + } + + function regexpSourceSomeTerm( terms ) { + return "(" + terms.filter(function( item ) { + return item; + }).reduce(function( memo, item ) { + return memo + "|" + item; + }) + ")"; + } + + cldr.on( "get", populateProperties ); + + pattern.match( datePatternRe ).forEach(function( current ) { + var aux, chr, daylightTzName, gmtFormat, length, standardTzName; + + chr = current.charAt( 0 ); + length = current.length; + + if ( chr === "Z" ) { + if ( length < 5 ) { + chr = "O"; + length = 4; + } else { + chr = "X"; + length = 5; + } + } + + // z...zzz: "{shortRegion}", eg. "PST" or "PDT". + // zzzz: "{regionName} {Standard Time}" or "{regionName} {Daylight Time}", + // e.g., "Pacific Standard Time" or "Pacific Daylight Time". + // http://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns + if ( chr === "z" ) { + standardTzName = dateGetTimeZoneName( length, "standard", timeZone, cldr ); + daylightTzName = dateGetTimeZoneName( length, "daylight", timeZone, cldr ); + if ( standardTzName ) { + standardTzName = regexpEscape( looseMatching( standardTzName ) ); + } + if ( daylightTzName ) { + daylightTzName = regexpEscape( looseMatching( daylightTzName ) ); + } + if ( standardTzName || daylightTzName ) { + properties.standardOrDaylightTzName = new RegExp( + "^" + regexpSourceSomeTerm([ standardTzName, daylightTzName ]) + ); + } + + // Fall through the "O" format in case one name is missing. + if ( !standardTzName || !daylightTzName ) { + chr = "O"; + if ( length < 4 ) { + length = 1; + } + } + } + + // v...vvv: "{shortRegion}", eg. "PT". + // vvvv: "{regionName} {Time}" or "{regionName} {Time}", + // e.g., "Pacific Time" + // http://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns + if ( chr === "v" ) { + if ( length !== 1 && length !== 4 ) { + throw createErrorUnsupportedFeature({ + feature: "timezone pattern `" + pattern + "`" + }); + } + var genericTzName = dateGetTimeZoneName( length, "generic", timeZone, cldr ); + if ( genericTzName ) { + properties.genericTzName = new RegExp( + "^" + regexpEscape( looseMatching( genericTzName ) ) + ); + chr = "O"; + + // Fall back to "V" format. + } else { + chr = "V"; + length = 4; + } + } + + switch ( chr ) { + + // Era + case "G": + cldr.main([ + "dates/calendars/gregorian/eras", + length <= 3 ? "eraAbbr" : ( length === 4 ? "eraNames" : "eraNarrow" ) + ]); + break; + + // Year + case "u": // Extended year. Need to be implemented. + case "U": // Cyclic year name. Need to be implemented. + throw createErrorUnsupportedFeature({ + feature: "year pattern `" + chr + "`" + }); + + // Quarter + case "Q": + case "q": + if ( length > 2 ) { + cldr.main([ + "dates/calendars/gregorian/quarters", + chr === "Q" ? "format" : "stand-alone", + widths[ length - 3 ] + ]); + } + break; + + // Month + case "M": + case "L": + + // number l=1:{1,2}, l=2:{2}. + // lookup l=3... + if ( length > 2 ) { + cldr.main([ + "dates/calendars/gregorian/months", + chr === "M" ? "format" : "stand-alone", + widths[ length - 3 ] + ]); + } + break; + + // Day + case "g": + + // Modified Julian day. Need to be implemented. + throw createErrorUnsupportedFeature({ + feature: "Julian day pattern `g`" + }); + + // Week day + case "e": + case "c": + + // lookup for length >=3. + if ( length <= 2 ) { + break; + } + + /* falls through */ + case "E": + if ( length === 6 ) { + + // Note: if short day names are not explicitly specified, abbreviated day + // names are used instead http://www.unicode.org/reports/tr35/tr35-dates.html#months_days_quarters_eras + cldr.main([ + "dates/calendars/gregorian/days", + [ chr === "c" ? "stand-alone" : "format" ], + "short" + ]) || cldr.main([ + "dates/calendars/gregorian/days", + [ chr === "c" ? "stand-alone" : "format" ], + "abbreviated" + ]); + } else { + cldr.main([ + "dates/calendars/gregorian/days", + [ chr === "c" ? "stand-alone" : "format" ], + widths[ length < 3 ? 0 : length - 3 ] + ]); + } + break; + + // Period (AM or PM) + case "a": + cldr.main( + "dates/calendars/gregorian/dayPeriods/format/wide" + ); + break; + + // Zone + case "V": + + if ( length === 1 ) { + throw createErrorUnsupportedFeature({ + feature: "timezone pattern `" + pattern + "`" + }); + } + + if ( timeZone ) { + if ( length === 2 ) { + + // Skip looseMatching processing since timeZone is a canonical posix value. + properties.timeZoneName = timeZone; + properties.timeZoneNameRe = new RegExp( "^" + regexpEscape( timeZone ) ); + break; + } + + var timeZoneName, + exemplarCity = cldr.main([ + "dates/timeZoneNames/zone", timeZone, "exemplarCity" + ]); + + if ( length === 3 ) { + if ( !exemplarCity ) { + exemplarCity = cldr.main([ + "dates/timeZoneNames/zone/Etc/Unknown/exemplarCity" + ]); + } + timeZoneName = exemplarCity; + } + + if ( exemplarCity && length === 4 ) { + timeZoneName = formatMessage( + cldr.main( + "dates/timeZoneNames/regionFormat" + ), + [ exemplarCity ] + ); + } + + if ( timeZoneName ) { + timeZoneName = looseMatching( timeZoneName ); + properties.timeZoneName = timeZoneName; + properties.timeZoneNameRe = new RegExp( + "^" + regexpEscape( timeZoneName ) + ); + } + } + + if ( current === "v" ) { + length = 1; + } + + /* falls through */ + case "z": + case "O": + gmtFormat = cldr.main( "dates/timeZoneNames/gmtFormat" ); + cldr.main( "dates/timeZoneNames/gmtZeroFormat" ); + cldr.main( "dates/timeZoneNames/hourFormat" ); + properties[ "timeZoneNames/gmtZeroFormatRe" ] = + new RegExp( "^" + regexpEscape( properties[ "timeZoneNames/gmtZeroFormat" ] ) ); + aux = properties[ "timeZoneNames/hourFormat" ]; + properties[ "timeZoneNames/hourFormat" ] = ( + length < 4 ? + [ dateTimezoneHourFormatHm( aux, "H" ), dateTimezoneHourFormatH( aux ) ] : + [ dateTimezoneHourFormatHm( aux, "HH" ) ] + ).map(function( hourFormat ) { + return hourFormatRe( + hourFormat, + gmtFormat, + digitsReSource, + timeSeparator + ); + }); + + /* falls through */ + case "X": + case "x": + + // x: hourFormat("+HH[mm];-HH[mm]") + // xx: hourFormat("+HHmm;-HHmm") + // xxx: hourFormat("+HH:mm;-HH:mm") + // xxxx: hourFormat("+HHmm[ss];-HHmm[ss]") + // xxxxx: hourFormat("+HH:mm[:ss];-HH:mm[:ss]") + properties.x = [ + [ "+HHmm;-HHmm", "+HH;-HH" ], + [ "+HHmm;-HHmm" ], + [ "+HH:mm;-HH:mm" ], + [ "+HHmmss;-HHmmss", "+HHmm;-HHmm" ], + [ "+HH:mm:ss;-HH:mm:ss", "+HH:mm;-HH:mm" ] + ][ length - 1 ].map(function( hourFormat ) { + return hourFormatRe( hourFormat ); + }); + } + }); + + cldr.off( "get", populateProperties ); + + return properties; +}; + + + + +/** + * dayOfWeek( date, firstDay ) + * + * @date + * + * @firstDay the result of `dateFirstDayOfWeek( cldr )` + * + * Return the day of the week normalized by the territory's firstDay [0-6]. + * Eg for "mon": + * - return 0 if territory is GB, or BR, or DE, or FR (week starts on "mon"); + * - return 1 if territory is US (week starts on "sun"); + * - return 2 if territory is EG (week starts on "sat"); + */ +var dateDayOfWeek = function( date, firstDay ) { + return ( date.getDay() - firstDay + 7 ) % 7; +}; + + + + +/** + * distanceInDays( from, to ) + * + * Return the distance in days between from and to Dates. + */ +var dateDistanceInDays = function( from, to ) { + var inDays = 864e5; + return ( to.getTime() - from.getTime() ) / inDays; +}; + + + + +/** + * dayOfYear + * + * Return the distance in days of the date to the begin of the year [0-d]. + */ +var dateDayOfYear = function( date ) { + return Math.floor( dateDistanceInDays( dateStartOf( date, "year" ), date ) ); +}; + + + + +// Invert key and values, e.g., {"year": "yY"} ==> {"y": "year", "Y": "year"} +var dateFieldsMap = objectInvert({ + "era": "G", + "year": "yY", + "quarter": "qQ", + "month": "ML", + "week": "wW", + "day": "dDF", + "weekday": "ecE", + "dayperiod": "a", + "hour": "hHkK", + "minute": "m", + "second": "sSA", + "zone": "zvVOxX" +}, function( object, key, value ) { + value.split( "" ).forEach(function( symbol ) { + object[ symbol ] = key; + }); + return object; +}); + + + + +/** + * millisecondsInDay + */ +var dateMillisecondsInDay = function( date ) { + + // TODO Handle daylight savings discontinuities + return date - dateStartOf( date, "day" ); +}; + + + + +/** + * hourFormat( date, format, timeSeparator, formatNumber ) + * + * Return date's timezone offset according to the format passed. + * Eg for format when timezone offset is 180: + * - "+H;-H": -3 + * - "+HHmm;-HHmm": -0300 + * - "+HH:mm;-HH:mm": -03:00 + * - "+HH:mm:ss;-HH:mm:ss": -03:00:00 + */ +var dateTimezoneHourFormat = function( date, format, timeSeparator, formatNumber ) { + var absOffset, + offset = date.getTimezoneOffset(); + + absOffset = Math.abs( offset ); + formatNumber = formatNumber || { + 1: function( value ) { + return stringPad( value, 1 ); + }, + 2: function( value ) { + return stringPad( value, 2 ); + } + }; + + return format + + // Pick the correct sign side (+ or -). + .split( ";" )[ offset > 0 ? 1 : 0 ] + + // Localize time separator + .replace( ":", timeSeparator ) + + // Update hours offset. + .replace( /HH?/, function( match ) { + return formatNumber[ match.length ]( Math.floor( absOffset / 60 ) ); + }) + + // Update minutes offset and return. + .replace( /mm/, function() { + return formatNumber[ 2 ]( Math.floor( absOffset % 60 ) ); + }) + + // Update minutes offset and return. + .replace( /ss/, function() { + return formatNumber[ 2 ]( Math.floor( absOffset % 1 * 60 ) ); + }); +}; + + + + +/** + * format( date, properties ) + * + * @date [Date instance]. + * + * @properties + * + * TODO Support other calendar types. + * + * Disclosure: this function borrows excerpts of dojo/date/locale. + */ +var dateFormat = function( date, numberFormatters, properties ) { + var parts = []; + + var timeSeparator = properties.timeSeparator; + + // create globalize date with given timezone data + if ( properties.timeZoneData ) { + date = new ZonedDateTime( date, properties.timeZoneData() ); + } + + properties.pattern.replace( datePatternRe, function( current ) { + var aux, dateField, type, value, + chr = current.charAt( 0 ), + length = current.length; + + if ( chr === "j" ) { + + // Locale preferred hHKk. + // http://www.unicode.org/reports/tr35/tr35-dates.html#Time_Data + chr = properties.preferredTime; + } + + if ( chr === "Z" ) { + + // Z..ZZZ: same as "xxxx". + if ( length < 4 ) { + chr = "x"; + length = 4; + + // ZZZZ: same as "OOOO". + } else if ( length < 5 ) { + chr = "O"; + length = 4; + + // ZZZZZ: same as "XXXXX" + } else { + chr = "X"; + length = 5; + } + } + + // z...zzz: "{shortRegion}", e.g., "PST" or "PDT". + // zzzz: "{regionName} {Standard Time}" or "{regionName} {Daylight Time}", + // e.g., "Pacific Standard Time" or "Pacific Daylight Time". + if ( chr === "z" ) { + if ( date.isDST ) { + value = date.isDST() ? properties.daylightTzName : properties.standardTzName; + } + + // Fall back to "O" format. + if ( !value ) { + chr = "O"; + if ( length < 4 ) { + length = 1; + } + } + } + + switch ( chr ) { + + // Era + case "G": + value = properties.eras[ date.getFullYear() < 0 ? 0 : 1 ]; + break; + + // Year + case "y": + + // Plain year. + // The length specifies the padding, but for two letters it also specifies the + // maximum length. + value = date.getFullYear(); + if ( length === 2 ) { + value = String( value ); + value = +value.substr( value.length - 2 ); + } + break; + + case "Y": + + // Year in "Week of Year" + // The length specifies the padding, but for two letters it also specifies the + // maximum length. + // yearInWeekofYear = date + DaysInAWeek - (dayOfWeek - firstDay) - minDays + value = new Date( date.getTime() ); + value.setDate( + value.getDate() + 7 - + dateDayOfWeek( date, properties.firstDay ) - + properties.firstDay - + properties.minDays + ); + value = value.getFullYear(); + if ( length === 2 ) { + value = String( value ); + value = +value.substr( value.length - 2 ); + } + break; + + // Quarter + case "Q": + case "q": + value = Math.ceil( ( date.getMonth() + 1 ) / 3 ); + if ( length > 2 ) { + value = properties.quarters[ chr ][ length ][ value ]; + } + break; + + // Month + case "M": + case "L": + value = date.getMonth() + 1; + if ( length > 2 ) { + value = properties.months[ chr ][ length ][ value ]; + } + break; + + // Week + case "w": + + // Week of Year. + // woy = ceil( ( doy + dow of 1/1 ) / 7 ) - minDaysStuff ? 1 : 0. + // TODO should pad on ww? Not documented, but I guess so. + value = dateDayOfWeek( dateStartOf( date, "year" ), properties.firstDay ); + value = Math.ceil( ( dateDayOfYear( date ) + value ) / 7 ) - + ( 7 - value >= properties.minDays ? 0 : 1 ); + break; + + case "W": + + // Week of Month. + // wom = ceil( ( dom + dow of `1/month` ) / 7 ) - minDaysStuff ? 1 : 0. + value = dateDayOfWeek( dateStartOf( date, "month" ), properties.firstDay ); + value = Math.ceil( ( date.getDate() + value ) / 7 ) - + ( 7 - value >= properties.minDays ? 0 : 1 ); + break; + + // Day + case "d": + value = date.getDate(); + break; + + case "D": + value = dateDayOfYear( date ) + 1; + break; + + case "F": + + // Day of Week in month. eg. 2nd Wed in July. + value = Math.floor( date.getDate() / 7 ) + 1; + break; + + // Week day + case "e": + case "c": + if ( length <= 2 ) { + + // Range is [1-7] (deduced by example provided on documentation) + // TODO Should pad with zeros (not specified in the docs)? + value = dateDayOfWeek( date, properties.firstDay ) + 1; + break; + } + + /* falls through */ + case "E": + value = dateWeekDays[ date.getDay() ]; + value = properties.days[ chr ][ length ][ value ]; + break; + + // Period (AM or PM) + case "a": + value = properties.dayPeriods[ date.getHours() < 12 ? "am" : "pm" ]; + break; + + // Hour + case "h": // 1-12 + value = ( date.getHours() % 12 ) || 12; + break; + + case "H": // 0-23 + value = date.getHours(); + break; + + case "K": // 0-11 + value = date.getHours() % 12; + break; + + case "k": // 1-24 + value = date.getHours() || 24; + break; + + // Minute + case "m": + value = date.getMinutes(); + break; + + // Second + case "s": + value = date.getSeconds(); + break; + + case "S": + value = Math.round( date.getMilliseconds() * Math.pow( 10, length - 3 ) ); + break; + + case "A": + value = Math.round( dateMillisecondsInDay( date ) * Math.pow( 10, length - 3 ) ); + break; + + // Zone + case "z": + break; + + case "v": + + // v...vvv: "{shortRegion}", eg. "PT". + // vvvv: "{regionName} {Time}", + // e.g., "Pacific Time". + if ( properties.genericTzName ) { + value = properties.genericTzName; + break; + } + + /* falls through */ + case "V": + + //VVVV: "{explarCity} {Time}", e.g., "Los Angeles Time" + if ( properties.timeZoneName ) { + value = properties.timeZoneName; + break; + } + + if ( current === "v" ) { + length = 1; + } + + /* falls through */ + case "O": + + // O: "{gmtFormat}+H;{gmtFormat}-H" or "{gmtZeroFormat}", eg. "GMT-8" or "GMT". + // OOOO: "{gmtFormat}{hourFormat}" or "{gmtZeroFormat}", eg. "GMT-08:00" or "GMT". + if ( date.getTimezoneOffset() === 0 ) { + value = properties.gmtZeroFormat; + } else { + + // If O..OOO and timezone offset has non-zero minutes, show minutes. + if ( length < 4 ) { + aux = date.getTimezoneOffset(); + aux = properties.hourFormat[ aux % 60 - aux % 1 === 0 ? 0 : 1 ]; + } else { + aux = properties.hourFormat; + } + + value = dateTimezoneHourFormat( + date, + aux, + timeSeparator, + numberFormatters + ); + value = properties.gmtFormat.replace( /\{0\}/, value ); + } + break; + + case "X": + + // Same as x*, except it uses "Z" for zero offset. + if ( date.getTimezoneOffset() === 0 ) { + value = "Z"; + break; + } + + /* falls through */ + case "x": + + // x: hourFormat("+HH[mm];-HH[mm]") + // xx: hourFormat("+HHmm;-HHmm") + // xxx: hourFormat("+HH:mm;-HH:mm") + // xxxx: hourFormat("+HHmm[ss];-HHmm[ss]") + // xxxxx: hourFormat("+HH:mm[:ss];-HH:mm[:ss]") + aux = date.getTimezoneOffset(); + + // If x and timezone offset has non-zero minutes, use xx (i.e., show minutes). + if ( length === 1 && aux % 60 - aux % 1 !== 0 ) { + length += 1; + } + + // If (xxxx or xxxxx) and timezone offset has zero seconds, use xx or xxx + // respectively (i.e., don't show optional seconds). + if ( ( length === 4 || length === 5 ) && aux % 1 === 0 ) { + length -= 2; + } + + value = [ + "+HH;-HH", + "+HHmm;-HHmm", + "+HH:mm;-HH:mm", + "+HHmmss;-HHmmss", + "+HH:mm:ss;-HH:mm:ss" + ][ length - 1 ]; + + value = dateTimezoneHourFormat( date, value, ":" ); + break; + + // timeSeparator + case ":": + value = timeSeparator; + break; + + // ' literals. + case "'": + value = removeLiteralQuotes( current ); + break; + + // Anything else is considered a literal, including [ ,:/.@#], chinese, japonese, and + // arabic characters. + default: + value = current; + + } + if ( typeof value === "number" ) { + value = numberFormatters[ length ]( value ); + } + + dateField = dateFieldsMap[ chr ]; + type = dateField ? dateField : "literal"; + + // Concat two consecutive literals + if ( type === "literal" && parts.length && parts[ parts.length - 1 ].type === "literal" ) { + parts[ parts.length - 1 ].value += value; + return; + } + + parts.push( { type: type, value: value } ); + + }); + + return parts; + +}; + + + + +var dateToPartsFormatterFn = function( numberFormatters, properties ) { + return function dateToPartsFormatter( value ) { + validateParameterPresence( value, "value" ); + validateParameterTypeDate( value, "value" ); + + return dateFormat( value, numberFormatters, properties ); + }; + +}; + + + + +function optionsHasStyle( options ) { + return options.skeleton !== undefined || + options.date !== undefined || + options.time !== undefined || + options.datetime !== undefined || + options.raw !== undefined; +} + +function validateRequiredCldr( path, value ) { + validateCldr( path, value, { + skip: [ + /dates\/calendars\/gregorian\/dateTimeFormats\/availableFormats/, + /dates\/calendars\/gregorian\/days\/.*\/short/, + /dates\/timeZoneNames\/zone/, + /dates\/timeZoneNames\/metazone/, + /globalize-iana/, + /supplemental\/metaZones/, + /supplemental\/timeData\/(?!001)/, + /supplemental\/weekData\/(?!001)/ + ] + }); +} + +function validateOptionsPreset( options ) { + validateOptionsPresetEach( "date", options ); + validateOptionsPresetEach( "time", options ); + validateOptionsPresetEach( "datetime", options ); +} + +function validateOptionsPresetEach( type, options ) { + var value = options[ type ]; + validate( + "E_INVALID_OPTIONS", + "Invalid `{{type}: \"{value}\"}`.", + value === undefined || [ "short", "medium", "long", "full" ].indexOf( value ) !== -1, + { type: type, value: value } + ); +} + +function validateOptionsSkeleton( pattern, skeleton ) { + validate( + "E_INVALID_OPTIONS", + "Invalid `{skeleton: \"{value}\"}` based on provided CLDR.", + skeleton === undefined || ( typeof pattern === "string" && pattern ), + { type: "skeleton", value: skeleton } + ); +} + +function validateRequiredIana( timeZone ) { + return function( path, value ) { + + if ( !/globalize-iana/.test( path ) ) { + return; + } + + validate( + "E_MISSING_IANA_TZ", + "Missing required IANA timezone content for `{timeZone}`: `{path}`.", + value, + { + path: path.replace( /globalize-iana\//, "" ), + timeZone: timeZone + } + ); + }; +} + +/** + * .loadTimeZone( json ) + * + * @json [JSON] + * + * Load IANA timezone data. + */ +Globalize.loadTimeZone = function( json ) { + var customData = { + "globalize-iana": json + }; + + validateParameterPresence( json, "json" ); + validateParameterTypePlainObject( json, "json" ); + + Cldr.load( customData ); +}; + +/** + * .dateFormatter( options ) + * + * @options [Object] see date/expand_pattern for more info. + * + * Return a date formatter function (of the form below) according to the given options and the + * default/instance locale. + * + * fn( value ) + * + * @value [Date] + * + * Return a function that formats a date according to the given `format` and the default/instance + * locale. + */ +Globalize.dateFormatter = +Globalize.prototype.dateFormatter = function( options ) { + var args, dateToPartsFormatter, returnFn; + + validateParameterTypePlainObject( options, "options" ); + + options = options || {}; + if ( !optionsHasStyle( options ) ) { + options.skeleton = "yMd"; + } + args = [ options ]; + + dateToPartsFormatter = this.dateToPartsFormatter( options ); + returnFn = dateFormatterFn( dateToPartsFormatter ); + runtimeBind( args, this.cldr, returnFn, [ dateToPartsFormatter ] ); + + return returnFn; +}; + +/** + * .dateToPartsFormatter( options ) + * + * @options [Object] see date/expand_pattern for more info. + * + * Return a date formatter function (of the form below) according to the given options and the + * default/instance locale. + * + * fn( value ) + * + * @value [Date] + * + * Return a function that formats a date to parts according to the given `format` + * and the default/instance + * locale. + */ +Globalize.dateToPartsFormatter = +Globalize.prototype.dateToPartsFormatter = function( options ) { + var args, cldr, numberFormatters, pad, pattern, properties, returnFn, + timeZone, ianaListener; + + validateParameterTypePlainObject( options, "options" ); + + cldr = this.cldr; + options = options || {}; + if ( !optionsHasStyle( options ) ) { + options.skeleton = "yMd"; + } + + validateOptionsPreset( options ); + validateDefaultLocale( cldr ); + + timeZone = options.timeZone; + validateParameterTypeString( timeZone, "options.timeZone" ); + + args = [ options ]; + + cldr.on( "get", validateRequiredCldr ); + if ( timeZone ) { + ianaListener = validateRequiredIana( timeZone ); + cldr.on( "get", ianaListener ); + } + pattern = dateExpandPattern( options, cldr ); + validateOptionsSkeleton( pattern, options.skeleton ); + properties = dateFormatProperties( pattern, cldr, timeZone ); + cldr.off( "get", validateRequiredCldr ); + if ( ianaListener ) { + cldr.off( "get", ianaListener ); + } + + // Create needed number formatters. + numberFormatters = properties.numberFormatters; + delete properties.numberFormatters; + for ( pad in numberFormatters ) { + numberFormatters[ pad ] = this.numberFormatter({ + raw: numberFormatters[ pad ] + }); + } + + returnFn = dateToPartsFormatterFn( numberFormatters, properties ); + + runtimeBind( args, cldr, returnFn, [ numberFormatters, properties ] ); + + return returnFn; +}; + +/** + * .dateParser( options ) + * + * @options [Object] see date/expand_pattern for more info. + * + * Return a function that parses a string date according to the given `formats` and the + * default/instance locale. + */ +Globalize.dateParser = +Globalize.prototype.dateParser = function( options ) { + var args, cldr, numberParser, parseProperties, pattern, returnFn, timeZone, + tokenizerProperties; + + validateParameterTypePlainObject( options, "options" ); + + cldr = this.cldr; + options = options || {}; + if ( !optionsHasStyle( options ) ) { + options.skeleton = "yMd"; + } + + validateOptionsPreset( options ); + validateDefaultLocale( cldr ); + + timeZone = options.timeZone; + validateParameterTypeString( timeZone, "options.timeZone" ); + + args = [ options ]; + + cldr.on( "get", validateRequiredCldr ); + if ( timeZone ) { + cldr.on( "get", validateRequiredIana( timeZone ) ); + } + pattern = dateExpandPattern( options, cldr ); + validateOptionsSkeleton( pattern, options.skeleton ); + tokenizerProperties = dateTokenizerProperties( pattern, cldr, timeZone ); + parseProperties = dateParseProperties( cldr, timeZone ); + cldr.off( "get", validateRequiredCldr ); + if ( timeZone ) { + cldr.off( "get", validateRequiredIana( timeZone ) ); + } + + numberParser = this.numberParser({ raw: "0" }); + + returnFn = dateParserFn( numberParser, parseProperties, tokenizerProperties ); + + runtimeBind( args, cldr, returnFn, [ numberParser, parseProperties, tokenizerProperties ] ); + + return returnFn; +}; + +/** + * .formatDate( value, options ) + * + * @value [Date] + * + * @options [Object] see date/expand_pattern for more info. + * + * Formats a date or number according to the given options string and the default/instance locale. + */ +Globalize.formatDate = +Globalize.prototype.formatDate = function( value, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeDate( value, "value" ); + + return this.dateFormatter( options )( value ); +}; + +/** + * .formatDateToParts( value, options ) + * + * @value [Date] + * + * @options [Object] see date/expand_pattern for more info. + * + * Formats a date or number to parts according to the given options and the default/instance locale. + */ +Globalize.formatDateToParts = +Globalize.prototype.formatDateToParts = function( value, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeDate( value, "value" ); + + return this.dateToPartsFormatter( options )( value ); +}; + +/** + * .parseDate( value, options ) + * + * @value [String] + * + * @options [Object] see date/expand_pattern for more info. + * + * Return a Date instance or null. + */ +Globalize.parseDate = +Globalize.prototype.parseDate = function( value, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeString( value, "value" ); + + return this.dateParser( options )( value ); +}; + +return Globalize; + + + + +})); diff --git a/node_modules/globalize/dist/globalize/message.js b/node_modules/globalize/dist/globalize/message.js new file mode 100644 index 00000000..827b208b --- /dev/null +++ b/node_modules/globalize/dist/globalize/message.js @@ -0,0 +1,2076 @@ +/** + * Globalize v1.4.2 + * + * http://github.com/jquery/globalize + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2019-03-07T13:47Z + */ +/*! + * Globalize v1.4.2 2019-03-07T13:47Z Released under the MIT license + * http://git.io/TrdQbw + */ +(function( root, factory ) { + + // UMD returnExports + if ( typeof define === "function" && define.amd ) { + + // AMD + define([ + "cldr", + "../globalize", + "cldr/event" + ], factory ); + } else if ( typeof exports === "object" ) { + + // Node, CommonJS + module.exports = factory( require( "cldrjs" ), require( "../globalize" ) ); + } else { + + // Extend global + factory( root.Cldr, root.Globalize ); + } +}(this, function( Cldr, Globalize ) { + +var alwaysArray = Globalize._alwaysArray, + createError = Globalize._createError, + isPlainObject = Globalize._isPlainObject, + runtimeBind = Globalize._runtimeBind, + validateDefaultLocale = Globalize._validateDefaultLocale, + validate = Globalize._validate, + validateParameterPresence = Globalize._validateParameterPresence, + validateParameterType = Globalize._validateParameterType, + validateParameterTypePlainObject = Globalize._validateParameterTypePlainObject; +var MessageFormat; +/* jshint ignore:start */ +MessageFormat = (function() { +MessageFormat._parse = (function() { + + /* + * Generated by PEG.js 0.8.0. + * + * http://pegjs.majda.cz/ + */ + + function peg$subclass(child, parent) { + function ctor() { this.constructor = child; } + ctor.prototype = parent.prototype; + child.prototype = new ctor(); + } + + function SyntaxError(message, expected, found, offset, line, column) { + this.message = message; + this.expected = expected; + this.found = found; + this.offset = offset; + this.line = line; + this.column = column; + + this.name = "SyntaxError"; + } + + peg$subclass(SyntaxError, Error); + + function parse(input) { + var options = arguments.length > 1 ? arguments[1] : {}, + + peg$FAILED = {}, + + peg$startRuleFunctions = { start: peg$parsestart }, + peg$startRuleFunction = peg$parsestart, + + peg$c0 = [], + peg$c1 = function(st) { + return { type: 'messageFormatPattern', statements: st }; + }, + peg$c2 = peg$FAILED, + peg$c3 = "{", + peg$c4 = { type: "literal", value: "{", description: "\"{\"" }, + peg$c5 = null, + peg$c6 = ",", + peg$c7 = { type: "literal", value: ",", description: "\",\"" }, + peg$c8 = "}", + peg$c9 = { type: "literal", value: "}", description: "\"}\"" }, + peg$c10 = function(argIdx, efmt) { + var res = { + type: "messageFormatElement", + argumentIndex: argIdx + }; + if (efmt && efmt.length) { + res.elementFormat = efmt[1]; + } else { + res.output = true; + } + return res; + }, + peg$c11 = "plural", + peg$c12 = { type: "literal", value: "plural", description: "\"plural\"" }, + peg$c13 = function(t, s) { + return { type: "elementFormat", key: t, val: s }; + }, + peg$c14 = "selectordinal", + peg$c15 = { type: "literal", value: "selectordinal", description: "\"selectordinal\"" }, + peg$c16 = "select", + peg$c17 = { type: "literal", value: "select", description: "\"select\"" }, + peg$c18 = function(t, p) { + return { type: "elementFormat", key: t, val: p }; + }, + peg$c19 = function(op, pf) { + return { type: "pluralFormatPattern", pluralForms: pf, offset: op || 0 }; + }, + peg$c20 = "offset", + peg$c21 = { type: "literal", value: "offset", description: "\"offset\"" }, + peg$c22 = ":", + peg$c23 = { type: "literal", value: ":", description: "\":\"" }, + peg$c24 = function(d) { return d; }, + peg$c25 = function(k, mfp) { + return { key: k, val: mfp }; + }, + peg$c26 = function(i) { return i; }, + peg$c27 = "=", + peg$c28 = { type: "literal", value: "=", description: "\"=\"" }, + peg$c29 = function(pf) { return { type: "selectFormatPattern", pluralForms: pf }; }, + peg$c30 = function(p) { return p; }, + peg$c31 = "#", + peg$c32 = { type: "literal", value: "#", description: "\"#\"" }, + peg$c33 = function() { return {type: 'octothorpe'}; }, + peg$c34 = function(s) { return { type: "string", val: s.join('') }; }, + peg$c35 = { type: "other", description: "identifier" }, + peg$c36 = /^[0-9a-zA-Z$_]/, + peg$c37 = { type: "class", value: "[0-9a-zA-Z$_]", description: "[0-9a-zA-Z$_]" }, + peg$c38 = /^[^ \t\n\r,.+={}]/, + peg$c39 = { type: "class", value: "[^ \\t\\n\\r,.+={}]", description: "[^ \\t\\n\\r,.+={}]" }, + peg$c40 = function(s) { return s; }, + peg$c41 = function(chars) { return chars.join(''); }, + peg$c42 = /^[^{}#\\\0-\x1F \t\n\r]/, + peg$c43 = { type: "class", value: "[^{}#\\\\\\0-\\x1F \\t\\n\\r]", description: "[^{}#\\\\\\0-\\x1F \\t\\n\\r]" }, + peg$c44 = function(x) { return x; }, + peg$c45 = "\\\\", + peg$c46 = { type: "literal", value: "\\\\", description: "\"\\\\\\\\\"" }, + peg$c47 = function() { return "\\"; }, + peg$c48 = "\\#", + peg$c49 = { type: "literal", value: "\\#", description: "\"\\\\#\"" }, + peg$c50 = function() { return "#"; }, + peg$c51 = "\\{", + peg$c52 = { type: "literal", value: "\\{", description: "\"\\\\{\"" }, + peg$c53 = function() { return "\u007B"; }, + peg$c54 = "\\}", + peg$c55 = { type: "literal", value: "\\}", description: "\"\\\\}\"" }, + peg$c56 = function() { return "\u007D"; }, + peg$c57 = "\\u", + peg$c58 = { type: "literal", value: "\\u", description: "\"\\\\u\"" }, + peg$c59 = function(h1, h2, h3, h4) { + return String.fromCharCode(parseInt("0x" + h1 + h2 + h3 + h4)); + }, + peg$c60 = /^[0-9]/, + peg$c61 = { type: "class", value: "[0-9]", description: "[0-9]" }, + peg$c62 = function(ds) { + //the number might start with 0 but must not be interpreted as an octal number + //Hence, the base is passed to parseInt explicitely + return parseInt((ds.join('')), 10); + }, + peg$c63 = /^[0-9a-fA-F]/, + peg$c64 = { type: "class", value: "[0-9a-fA-F]", description: "[0-9a-fA-F]" }, + peg$c65 = { type: "other", description: "whitespace" }, + peg$c66 = function(w) { return w.join(''); }, + peg$c67 = /^[ \t\n\r]/, + peg$c68 = { type: "class", value: "[ \\t\\n\\r]", description: "[ \\t\\n\\r]" }, + + peg$currPos = 0, + peg$reportedPos = 0, + peg$cachedPos = 0, + peg$cachedPosDetails = { line: 1, column: 1, seenCR: false }, + peg$maxFailPos = 0, + peg$maxFailExpected = [], + peg$silentFails = 0, + + peg$result; + + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error("Can't start parsing from rule \"" + options.startRule + "\"."); + } + + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + + function text() { + return input.substring(peg$reportedPos, peg$currPos); + } + + function offset() { + return peg$reportedPos; + } + + function line() { + return peg$computePosDetails(peg$reportedPos).line; + } + + function column() { + return peg$computePosDetails(peg$reportedPos).column; + } + + function expected(description) { + throw peg$buildException( + null, + [{ type: "other", description: description }], + peg$reportedPos + ); + } + + function error(message) { + throw peg$buildException(message, null, peg$reportedPos); + } + + function peg$computePosDetails(pos) { + function advance(details, startPos, endPos) { + var p, ch; + + for (p = startPos; p < endPos; p++) { + ch = input.charAt(p); + if (ch === "\n") { + if (!details.seenCR) { details.line++; } + details.column = 1; + details.seenCR = false; + } else if (ch === "\r" || ch === "\u2028" || ch === "\u2029") { + details.line++; + details.column = 1; + details.seenCR = true; + } else { + details.column++; + details.seenCR = false; + } + } + } + + if (peg$cachedPos !== pos) { + if (peg$cachedPos > pos) { + peg$cachedPos = 0; + peg$cachedPosDetails = { line: 1, column: 1, seenCR: false }; + } + advance(peg$cachedPosDetails, peg$cachedPos, pos); + peg$cachedPos = pos; + } + + return peg$cachedPosDetails; + } + + function peg$fail(expected) { + if (peg$currPos < peg$maxFailPos) { return; } + + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + + peg$maxFailExpected.push(expected); + } + + function peg$buildException(message, expected, pos) { + function cleanupExpected(expected) { + var i = 1; + + expected.sort(function(a, b) { + if (a.description < b.description) { + return -1; + } else if (a.description > b.description) { + return 1; + } else { + return 0; + } + }); + + while (i < expected.length) { + if (expected[i - 1] === expected[i]) { + expected.splice(i, 1); + } else { + i++; + } + } + } + + function buildMessage(expected, found) { + function stringEscape(s) { + function hex(ch) { return ch.charCodeAt(0).toString(16).toUpperCase(); } + + return s + .replace(/\\/g, '\\\\') + .replace(/"/g, '\\"') + .replace(/\x08/g, '\\b') + .replace(/\t/g, '\\t') + .replace(/\n/g, '\\n') + .replace(/\f/g, '\\f') + .replace(/\r/g, '\\r') + .replace(/[\x00-\x07\x0B\x0E\x0F]/g, function(ch) { return '\\x0' + hex(ch); }) + .replace(/[\x10-\x1F\x80-\xFF]/g, function(ch) { return '\\x' + hex(ch); }) + .replace(/[\u0180-\u0FFF]/g, function(ch) { return '\\u0' + hex(ch); }) + .replace(/[\u1080-\uFFFF]/g, function(ch) { return '\\u' + hex(ch); }); + } + + var expectedDescs = new Array(expected.length), + expectedDesc, foundDesc, i; + + for (i = 0; i < expected.length; i++) { + expectedDescs[i] = expected[i].description; + } + + expectedDesc = expected.length > 1 + ? expectedDescs.slice(0, -1).join(", ") + + " or " + + expectedDescs[expected.length - 1] + : expectedDescs[0]; + + foundDesc = found ? "\"" + stringEscape(found) + "\"" : "end of input"; + + return "Expected " + expectedDesc + " but " + foundDesc + " found."; + } + + var posDetails = peg$computePosDetails(pos), + found = pos < input.length ? input.charAt(pos) : null; + + if (expected !== null) { + cleanupExpected(expected); + } + + return new SyntaxError( + message !== null ? message : buildMessage(expected, found), + expected, + found, + pos, + posDetails.line, + posDetails.column + ); + } + + function peg$parsestart() { + var s0; + + s0 = peg$parsemessageFormatPattern(); + + return s0; + } + + function peg$parsemessageFormatPattern() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = []; + s2 = peg$parsemessageFormatElement(); + if (s2 === peg$FAILED) { + s2 = peg$parsestring(); + if (s2 === peg$FAILED) { + s2 = peg$parseoctothorpe(); + } + } + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsemessageFormatElement(); + if (s2 === peg$FAILED) { + s2 = peg$parsestring(); + if (s2 === peg$FAILED) { + s2 = peg$parseoctothorpe(); + } + } + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c1(s1); + } + s0 = s1; + + return s0; + } + + function peg$parsemessageFormatElement() { + var s0, s1, s2, s3, s4, s5, s6; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 123) { + s1 = peg$c3; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c4); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse_(); + if (s2 !== peg$FAILED) { + s3 = peg$parseid(); + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 44) { + s5 = peg$c6; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c7); } + } + if (s5 !== peg$FAILED) { + s6 = peg$parseelementFormat(); + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$c2; + } + } else { + peg$currPos = s4; + s4 = peg$c2; + } + if (s4 === peg$FAILED) { + s4 = peg$c5; + } + if (s4 !== peg$FAILED) { + s5 = peg$parse_(); + if (s5 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s6 = peg$c8; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c9); } + } + if (s6 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c10(s3, s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + + return s0; + } + + function peg$parseelementFormat() { + var s0, s1, s2, s3, s4, s5, s6, s7; + + s0 = peg$currPos; + s1 = peg$parse_(); + if (s1 !== peg$FAILED) { + if (input.substr(peg$currPos, 6) === peg$c11) { + s2 = peg$c11; + peg$currPos += 6; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c12); } + } + if (s2 !== peg$FAILED) { + s3 = peg$parse_(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 44) { + s4 = peg$c6; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c7); } + } + if (s4 !== peg$FAILED) { + s5 = peg$parse_(); + if (s5 !== peg$FAILED) { + s6 = peg$parsepluralFormatPattern(); + if (s6 !== peg$FAILED) { + s7 = peg$parse_(); + if (s7 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c13(s2, s6); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parse_(); + if (s1 !== peg$FAILED) { + if (input.substr(peg$currPos, 13) === peg$c14) { + s2 = peg$c14; + peg$currPos += 13; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c15); } + } + if (s2 !== peg$FAILED) { + s3 = peg$parse_(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 44) { + s4 = peg$c6; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c7); } + } + if (s4 !== peg$FAILED) { + s5 = peg$parse_(); + if (s5 !== peg$FAILED) { + s6 = peg$parsepluralFormatPattern(); + if (s6 !== peg$FAILED) { + s7 = peg$parse_(); + if (s7 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c13(s2, s6); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parse_(); + if (s1 !== peg$FAILED) { + if (input.substr(peg$currPos, 6) === peg$c16) { + s2 = peg$c16; + peg$currPos += 6; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c17); } + } + if (s2 !== peg$FAILED) { + s3 = peg$parse_(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 44) { + s4 = peg$c6; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c7); } + } + if (s4 !== peg$FAILED) { + s5 = peg$parse_(); + if (s5 !== peg$FAILED) { + s6 = peg$parseselectFormatPattern(); + if (s6 !== peg$FAILED) { + s7 = peg$parse_(); + if (s7 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c13(s2, s6); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parse_(); + if (s1 !== peg$FAILED) { + s2 = peg$parseid(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parseargStylePattern(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parseargStylePattern(); + } + if (s3 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c18(s2, s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } + } + } + + return s0; + } + + function peg$parsepluralFormatPattern() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$parseoffsetPattern(); + if (s1 === peg$FAILED) { + s1 = peg$c5; + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parsepluralForm(); + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parsepluralForm(); + } + } else { + s2 = peg$c2; + } + if (s2 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c19(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + + return s0; + } + + function peg$parseoffsetPattern() { + var s0, s1, s2, s3, s4, s5, s6, s7; + + s0 = peg$currPos; + s1 = peg$parse_(); + if (s1 !== peg$FAILED) { + if (input.substr(peg$currPos, 6) === peg$c20) { + s2 = peg$c20; + peg$currPos += 6; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c21); } + } + if (s2 !== peg$FAILED) { + s3 = peg$parse_(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 58) { + s4 = peg$c22; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + if (s4 !== peg$FAILED) { + s5 = peg$parse_(); + if (s5 !== peg$FAILED) { + s6 = peg$parsedigits(); + if (s6 !== peg$FAILED) { + s7 = peg$parse_(); + if (s7 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c24(s6); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + + return s0; + } + + function peg$parsepluralForm() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8; + + s0 = peg$currPos; + s1 = peg$parse_(); + if (s1 !== peg$FAILED) { + s2 = peg$parsepluralKey(); + if (s2 !== peg$FAILED) { + s3 = peg$parse_(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 123) { + s4 = peg$c3; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c4); } + } + if (s4 !== peg$FAILED) { + s5 = peg$parse_(); + if (s5 !== peg$FAILED) { + s6 = peg$parsemessageFormatPattern(); + if (s6 !== peg$FAILED) { + s7 = peg$parse_(); + if (s7 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s8 = peg$c8; + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c9); } + } + if (s8 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c25(s2, s6); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + + return s0; + } + + function peg$parsepluralKey() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = peg$parseid(); + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c26(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 61) { + s1 = peg$c27; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c28); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsedigits(); + if (s2 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c24(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } + + return s0; + } + + function peg$parseselectFormatPattern() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = []; + s2 = peg$parseselectForm(); + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseselectForm(); + } + } else { + s1 = peg$c2; + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c29(s1); + } + s0 = s1; + + return s0; + } + + function peg$parseselectForm() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8; + + s0 = peg$currPos; + s1 = peg$parse_(); + if (s1 !== peg$FAILED) { + s2 = peg$parseid(); + if (s2 !== peg$FAILED) { + s3 = peg$parse_(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 123) { + s4 = peg$c3; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c4); } + } + if (s4 !== peg$FAILED) { + s5 = peg$parse_(); + if (s5 !== peg$FAILED) { + s6 = peg$parsemessageFormatPattern(); + if (s6 !== peg$FAILED) { + s7 = peg$parse_(); + if (s7 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s8 = peg$c8; + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c9); } + } + if (s8 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c25(s2, s6); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + + return s0; + } + + function peg$parseargStylePattern() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + s1 = peg$parse_(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 44) { + s2 = peg$c6; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c7); } + } + if (s2 !== peg$FAILED) { + s3 = peg$parse_(); + if (s3 !== peg$FAILED) { + s4 = peg$parseid(); + if (s4 !== peg$FAILED) { + s5 = peg$parse_(); + if (s5 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c30(s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + + return s0; + } + + function peg$parseoctothorpe() { + var s0, s1; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 35) { + s1 = peg$c31; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c32); } + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c33(); + } + s0 = s1; + + return s0; + } + + function peg$parsestring() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = []; + s2 = peg$parsechars(); + if (s2 === peg$FAILED) { + s2 = peg$parsewhitespace(); + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsechars(); + if (s2 === peg$FAILED) { + s2 = peg$parsewhitespace(); + } + } + } else { + s1 = peg$c2; + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c34(s1); + } + s0 = s1; + + return s0; + } + + function peg$parseid() { + var s0, s1, s2, s3, s4, s5, s6; + + peg$silentFails++; + s0 = peg$currPos; + s1 = peg$parse_(); + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + s3 = peg$currPos; + if (peg$c36.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c37); } + } + if (s4 !== peg$FAILED) { + s5 = []; + if (peg$c38.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c39); } + } + while (s6 !== peg$FAILED) { + s5.push(s6); + if (peg$c38.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c39); } + } + } + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$c2; + } + } else { + peg$currPos = s3; + s3 = peg$c2; + } + if (s3 !== peg$FAILED) { + s3 = input.substring(s2, peg$currPos); + } + s2 = s3; + if (s2 !== peg$FAILED) { + s3 = peg$parse_(); + if (s3 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c40(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c35); } + } + + return s0; + } + + function peg$parsechars() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = []; + s2 = peg$parsechar(); + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsechar(); + } + } else { + s1 = peg$c2; + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c41(s1); + } + s0 = s1; + + return s0; + } + + function peg$parsechar() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + if (peg$c42.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c43); } + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c44(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c45) { + s1 = peg$c45; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c46); } + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c47(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c48) { + s1 = peg$c48; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c49); } + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c50(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c51) { + s1 = peg$c51; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c52); } + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c53(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c54) { + s1 = peg$c54; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c55); } + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c56(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c57) { + s1 = peg$c57; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c58); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsehexDigit(); + if (s2 !== peg$FAILED) { + s3 = peg$parsehexDigit(); + if (s3 !== peg$FAILED) { + s4 = peg$parsehexDigit(); + if (s4 !== peg$FAILED) { + s5 = peg$parsehexDigit(); + if (s5 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c59(s2, s3, s4, s5); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } else { + peg$currPos = s0; + s0 = peg$c2; + } + } + } + } + } + } + + return s0; + } + + function peg$parsedigits() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = []; + if (peg$c60.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c61); } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (peg$c60.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c61); } + } + } + } else { + s1 = peg$c2; + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c62(s1); + } + s0 = s1; + + return s0; + } + + function peg$parsehexDigit() { + var s0; + + if (peg$c63.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c64); } + } + + return s0; + } + + function peg$parse_() { + var s0, s1, s2; + + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + s2 = peg$parsewhitespace(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsewhitespace(); + } + if (s1 !== peg$FAILED) { + peg$reportedPos = s0; + s1 = peg$c66(s1); + } + s0 = s1; + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c65); } + } + + return s0; + } + + function peg$parsewhitespace() { + var s0; + + if (peg$c67.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c68); } + } + + return s0; + } + + peg$result = peg$startRuleFunction(); + + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail({ type: "end", description: "end of input" }); + } + + throw peg$buildException(null, peg$maxFailExpected, peg$maxFailPos); + } + } + + return { + SyntaxError: SyntaxError, + parse: parse + }; +}()).parse; + + +/** @file messageformat.js - ICU PluralFormat + SelectFormat for JavaScript + * @author Alex Sexton - @SlexAxton + * @version 0.3.0-1 + * @copyright 2012-2015 Alex Sexton, Eemeli Aro, and Contributors + * @license To use or fork, MIT. To contribute back, Dojo CLA */ + + +/** Utility function for quoting an Object's key value iff required + * @private */ +function propname(key, obj) { + if (/^[A-Z_$][0-9A-Z_$]*$/i.test(key)) { + return obj ? obj + '.' + key : key; + } else { + var jkey = JSON.stringify(key); + return obj ? obj + '[' + jkey + ']' : jkey; + } +}; + + +/** Create a new message formatter + * + * @class + * @global + * @param {string|string[]} [locale="en"] - The locale to use, with fallbacks + * @param {function} [pluralFunc] - Optional custom pluralization function + * @param {function[]} [formatters] - Optional custom formatting functions */ +function MessageFormat(locale, pluralFunc, formatters) { + this.lc = [locale]; + this.runtime.pluralFuncs = {}; + this.runtime.pluralFuncs[this.lc[0]] = pluralFunc; + this.runtime.fmt = {}; + if (formatters) for (var f in formatters) { + this.runtime.fmt[f] = formatters[f]; + } +} + + + + +/** Parse an input string to its AST + * + * Precompiled from `lib/messageformat-parser.pegjs` by + * {@link http://pegjs.org/ PEG.js}. Included in MessageFormat object + * to enable testing. + * + * @private */ + + + +/** Pluralization functions from + * {@link http://github.com/eemeli/make-plural.js make-plural} + * + * @memberof MessageFormat + * @type Object. */ +MessageFormat.plurals = {}; + + +/** Default number formatting functions in the style of ICU's + * {@link http://icu-project.org/apiref/icu4j/com/ibm/icu/text/MessageFormat.html simpleArg syntax} + * implemented using the + * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl Intl} + * object defined by ECMA-402. + * + * **Note**: Intl is not defined in default Node until 0.11.15 / 0.12.0, so + * earlier versions require a {@link https://www.npmjs.com/package/intl polyfill}. + * Therefore {@link MessageFormat.withIntlSupport} needs to be true for these + * functions to be available for inclusion in the output. + * + * @see MessageFormat#setIntlSupport + * + * @namespace + * @memberof MessageFormat + * @property {function} number - Represent a number as an integer, percent or currency value + * @property {function} date - Represent a date as a full/long/default/short string + * @property {function} time - Represent a time as a full/long/default/short string + * + * @example + * > var MessageFormat = require('messageformat'); + * > var mf = (new MessageFormat('en')).setIntlSupport(true); + * > mf.currency = 'EUR'; + * > var mfunc = mf.compile("The total is {V,number,currency}."); + * > mfunc({V:5.5}) + * "The total is €5.50." + * + * @example + * > var MessageFormat = require('messageformat'); + * > var mf = new MessageFormat('en', null, {number: MessageFormat.number}); + * > mf.currency = 'EUR'; + * > var mfunc = mf.compile("The total is {V,number,currency}."); + * > mfunc({V:5.5}) + * "The total is €5.50." */ +MessageFormat.formatters = {}; + +/** Enable or disable support for the default formatters, which require the + * `Intl` object. Note that this can't be autodetected, as the environment + * in which the formatted text is compiled into Javascript functions is not + * necessarily the same environment in which they will get executed. + * + * @see MessageFormat.formatters + * + * @memberof MessageFormat + * @param {boolean} [enable=true] + * @returns {Object} The MessageFormat instance, to allow for chaining + * @example + * > var Intl = require('intl'); + * > var MessageFormat = require('messageformat'); + * > var mf = (new MessageFormat('en')).setIntlSupport(true); + * > mf.currency = 'EUR'; + * > mf.compile("The total is {V,number,currency}.")({V:5.5}); + * "The total is €5.50." */ + + + +/** A set of utility functions that are called by the compiled Javascript + * functions, these are included locally in the output of {@link + * MessageFormat#compile compile()}. + * + * @namespace + * @memberof MessageFormat */ +MessageFormat.prototype.runtime = { + + /** Utility function for `#` in plural rules + * + * @param {number} value - The value to operate on + * @param {number} [offset=0] - An optional offset, set by the surrounding context */ + number: function(value, offset) { + if (isNaN(value)) throw new Error("'" + value + "' isn't a number."); + return value - (offset || 0); + }, + + /** Utility function for `{N, plural|selectordinal, ...}` + * + * @param {number} value - The key to use to find a pluralization rule + * @param {number} offset - An offset to apply to `value` + * @param {function} lcfunc - A locale function from `pluralFuncs` + * @param {Object.} data - The object from which results are looked up + * @param {?boolean} isOrdinal - If true, use ordinal rather than cardinal rules + * @returns {string} The result of the pluralization */ + plural: function(value, offset, lcfunc, data, isOrdinal) { + if ({}.hasOwnProperty.call(data, value)) return data[value](); + if (offset) value -= offset; + var key = lcfunc(value, isOrdinal); + if (key in data) return data[key](); + return data.other(); + }, + + /** Utility function for `{N, select, ...}` + * + * @param {number} value - The key to use to find a selection + * @param {Object.} data - The object from which results are looked up + * @returns {string} The result of the select statement */ + select: function(value, data) { + if ({}.hasOwnProperty.call(data, value)) return data[value](); + return data.other() + }, + + /** Pluralization functions included in compiled output + * @instance + * @type Object. */ + pluralFuncs: {}, + + /** Custom formatting functions called by `{var, fn[, args]*}` syntax + * + * For examples, see {@link MessageFormat.formatters} + * + * @instance + * @see MessageFormat.formatters + * @type Object. */ + fmt: {}, + + /** Custom stringifier to clean up browser inconsistencies + * @instance */ + toString: function () { + var _stringify = function(o, level) { + if (typeof o != 'object') { + var funcStr = o.toString().replace(/^(function )\w*/, '$1'); + var indent = /([ \t]*)\S.*$/.exec(funcStr); + return indent ? funcStr.replace(new RegExp('^' + indent[1], 'mg'), '') : funcStr; + } + var s = []; + for (var i in o) if (i != 'toString') { + if (level == 0) s.push('var ' + i + ' = ' + _stringify(o[i], level + 1) + ';\n'); + else s.push(propname(i) + ': ' + _stringify(o[i], level + 1)); + } + if (level == 0) return s.join(''); + if (s.length == 0) return '{}'; + var indent = ' '; while (--level) indent += ' '; + return '{\n' + s.join(',\n').replace(/^/gm, indent) + '\n}'; + }; + return _stringify(this, 0); + } +}; + + +/** Recursively map an AST to its resulting string + * + * @memberof MessageFormat + * + * @param ast - the Ast node for which the JS code should be generated + * + * @private */ +MessageFormat.prototype._precompile = function(ast, data) { + data = data || { keys: {}, offset: {} }; + var r = [], i, tmp, args = []; + + switch ( ast.type ) { + case 'messageFormatPattern': + for ( i = 0; i < ast.statements.length; ++i ) { + r.push(this._precompile( ast.statements[i], data )); + } + tmp = r.join(' + ') || '""'; + return data.pf_count ? tmp : 'function(d) { return ' + tmp + '; }'; + + case 'messageFormatElement': + data.pf_count = data.pf_count || 0; + if ( ast.output ) { + return propname(ast.argumentIndex, 'd'); + } + else { + data.keys[data.pf_count] = ast.argumentIndex; + return this._precompile( ast.elementFormat, data ); + } + return ''; + + case 'elementFormat': + args = [ propname(data.keys[data.pf_count], 'd') ]; + switch (ast.key) { + case 'select': + args.push(this._precompile(ast.val, data)); + return 'select(' + args.join(', ') + ')'; + case 'selectordinal': + args = args.concat([ 0, propname(this.lc[0], 'pluralFuncs'), this._precompile(ast.val, data), 1 ]); + return 'plural(' + args.join(', ') + ')'; + case 'plural': + data.offset[data.pf_count || 0] = ast.val.offset || 0; + args = args.concat([ data.offset[data.pf_count] || 0, propname(this.lc[0], 'pluralFuncs'), this._precompile(ast.val, data) ]); + return 'plural(' + args.join(', ') + ')'; + default: + if (this.withIntlSupport && !(ast.key in this.runtime.fmt) && (ast.key in MessageFormat.formatters)) { + tmp = MessageFormat.formatters[ast.key]; + this.runtime.fmt[ast.key] = (typeof tmp(this) == 'function') ? tmp(this) : tmp; + } + args.push(JSON.stringify(this.lc)); + if (ast.val && ast.val.length) args.push(JSON.stringify(ast.val.length == 1 ? ast.val[0] : ast.val)); + return 'fmt.' + ast.key + '(' + args.join(', ') + ')'; + } + + case 'pluralFormatPattern': + case 'selectFormatPattern': + data.pf_count = data.pf_count || 0; + if (ast.type == 'selectFormatPattern') data.offset[data.pf_count] = 0; + var needOther = true; + for (i = 0; i < ast.pluralForms.length; ++i) { + var key = ast.pluralForms[i].key; + if (key === 'other') needOther = false; + var data_copy = JSON.parse(JSON.stringify(data)); + data_copy.pf_count++; + r.push(propname(key) + ': function() { return ' + this._precompile(ast.pluralForms[i].val, data_copy) + ';}'); + } + if (needOther) throw new Error("No 'other' form found in " + ast.type + " " + data.pf_count); + return '{ ' + r.join(', ') + ' }'; + + case 'string': + return JSON.stringify(ast.val || ""); + + case 'octothorpe': + if (!data.pf_count) return '"#"'; + args = [ propname(data.keys[data.pf_count-1], 'd') ]; + if (data.offset[data.pf_count-1]) args.push(data.offset[data.pf_count-1]); + return 'number(' + args.join(', ') + ')'; + + default: + throw new Error( 'Bad AST type: ' + ast.type ); + } +}; + +/** Compile messages into an executable function with clean string + * representation. + * + * If `messages` is a single string including ICU MessageFormat declarations, + * `opt` is ignored and the returned function takes a single Object parameter + * `d` representing each of the input's defined variables. The returned + * function will be defined in a local scope that includes all the required + * runtime variables. + * + * If `messages` is a map of keys to strings, or a map of namespace keys to + * such key/string maps, the returned function will fill the specified global + * with javascript functions matching the structure of the input. In such use, + * the output of `compile()` is expected to be serialized using `.toString()`, + * and will include definitions of the runtime functions. If `opt.global` is + * null, calling the output function will return the object itself. + * + * Together, the input parameters should match the following patterns: + * ```js + * messages = "string" || { key0: "string0", key1: "string1", ... } || { + * ns0: { key0: "string0", key1: "string1", ... }, + * ns1: { key0: "string0", key1: "string1", ... }, + * ... + * } + * + * opt = null || { + * locale: null || { + * ns0: "lc0" || [ "lc0", ... ], + * ns1: "lc1" || [ "lc1", ... ], + * ... + * }, + * global: null || "module.exports" || "exports" || "i18n" || ... + * } + * ``` + * + * @memberof MessageFormat + * @param {string|Object} + * messages - The input message(s) to be compiled, in ICU MessageFormat + * @param {Object} [opt={}] - Options controlling output for non-simple intput + * @param {Object} [opt.locale] - The locales to use for the messages, with a + * structure matching that of `messages` + * @param {string} [opt.global=""] - The global variable that the output + * function should use, or a null string for none. "exports" and + * "module.exports" are recognised as special cases. + * @returns {function} The first match found for the given locale(s) + * + * @example + * > var MessageFormat = require('messageformat'), + * ... mf = new MessageFormat('en'), + * ... mfunc0 = mf.compile('A {TYPE} example.'); + * > mfunc0({TYPE:'simple'}) + * 'A simple example.' + * > mfunc0.toString() + * 'function (d) { return "A " + d.TYPE + " example."; }' + * + * @example + * > var msgSet = { a: 'A {TYPE} example.', + * ... b: 'This has {COUNT, plural, one{one member} other{# members}}.' }, + * ... mfuncSet = mf.compile(msgSet); + * > mfuncSet().a({TYPE:'more complex'}) + * 'A more complex example.' + * > mfuncSet().b({COUNT:2}) + * 'This has 2 members.' + * + * > console.log(mfuncSet.toString()) + * function anonymous() { + * var number = function (value, offset) { + * if (isNaN(value)) throw new Error("'" + value + "' isn't a number."); + * return value - (offset || 0); + * }; + * var plural = function (value, offset, lcfunc, data, isOrdinal) { + * if ({}.hasOwnProperty.call(data, value)) return data[value](); + * if (offset) value -= offset; + * var key = lcfunc(value, isOrdinal); + * if (key in data) return data[key](); + * return data.other(); + * }; + * var select = function (value, data) { + * if ({}.hasOwnProperty.call(data, value)) return data[value](); + * return data.other() + * }; + * var pluralFuncs = { + * en: function (n, ord) { + * var s = String(n).split('.'), v0 = !s[1], t0 = Number(s[0]) == n, + * n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2); + * if (ord) return (n10 == 1 && n100 != 11) ? 'one' + * : (n10 == 2 && n100 != 12) ? 'two' + * : (n10 == 3 && n100 != 13) ? 'few' + * : 'other'; + * return (n == 1 && v0) ? 'one' : 'other'; + * } + * }; + * var fmt = {}; + * + * return { + * a: function(d) { return "A " + d.TYPE + " example."; }, + * b: function(d) { return "This has " + plural(d.COUNT, 0, pluralFuncs.en, { one: function() { return "one member";}, other: function() { return number(d.COUNT)+" members";} }) + "."; } + * } + * } + * + * @example + * > mf.runtime.pluralFuncs.fi = MessageFormat.plurals.fi; + * > var multiSet = { en: { a: 'A {TYPE} example.', + * ... b: 'This is the {COUNT, selectordinal, one{#st} two{#nd} few{#rd} other{#th}} example.' }, + * ... fi: { a: '{TYPE} esimerkki.', + * ... b: 'Tämä on {COUNT, selectordinal, other{#.}} esimerkki.' } }, + * ... multiSetLocales = { en: 'en', fi: 'fi' }, + * ... mfuncSet = mf.compile(multiSet, { locale: multiSetLocales, global: 'i18n' }); + * > mfuncSet(this); + * > i18n.en.b({COUNT:3}) + * 'This is the 3rd example.' + * > i18n.fi.b({COUNT:3}) + * 'Tämä on 3. esimerkki.' */ +MessageFormat.prototype.compile = function ( messages, opt ) { + var r = {}, lc0 = this.lc, + compileMsg = function(self, msg) { + try { + var ast = MessageFormat._parse(msg); + return self._precompile(ast); + } catch (e) { + throw new Error((ast ? 'Precompiler' : 'Parser') + ' error: ' + e.toString()); + } + }, + stringify = function(r, level) { + if (!level) level = 0; + if (typeof r != 'object') return r; + var o = [], indent = ''; + for (var i = 0; i < level; ++i) indent += ' '; + for (var k in r) o.push('\n' + indent + ' ' + propname(k) + ': ' + stringify(r[k], level + 1)); + return '{' + o.join(',') + '\n' + indent + '}'; + }; + + if (typeof messages == 'string') { + var f = new Function( + 'number, plural, select, pluralFuncs, fmt', + 'return ' + compileMsg(this, messages)); + return f(this.runtime.number, this.runtime.plural, this.runtime.select, + this.runtime.pluralFuncs, this.runtime.fmt); + } + + opt = opt || {}; + + for (var ns in messages) { + if (opt.locale) this.lc = opt.locale[ns] && [].concat(opt.locale[ns]) || lc0; + if (typeof messages[ns] == 'string') { + try { r[ns] = compileMsg(this, messages[ns]); } + catch (e) { e.message = e.message.replace(':', ' with `' + ns + '`:'); throw e; } + } else { + r[ns] = {}; + for (var key in messages[ns]) { + try { r[ns][key] = compileMsg(this, messages[ns][key]); } + catch (e) { e.message = e.message.replace(':', ' with `' + key + '` in `' + ns + '`:'); throw e; } + } + } + } + + this.lc = lc0; + var s = this.runtime.toString() + '\n'; + switch (opt.global || '') { + case 'exports': + var o = []; + for (var k in r) o.push(propname(k, 'exports') + ' = ' + stringify(r[k])); + return new Function(s + o.join(';\n')); + case 'module.exports': + return new Function(s + 'module.exports = ' + stringify(r)); + case '': + return new Function(s + 'return ' + stringify(r)); + default: + return new Function('G', s + propname(opt.global, 'G') + ' = ' + stringify(r)); + } +}; + + +return MessageFormat; +}()); +/* jshint ignore:end */ + + +var createErrorPluralModulePresence = function() { + return createError( "E_MISSING_PLURAL_MODULE", "Plural module not loaded." ); +}; + + + + +var validateMessageBundle = function( cldr ) { + validate( + "E_MISSING_MESSAGE_BUNDLE", + "Missing message bundle for locale `{locale}`.", + cldr.attributes.bundle && cldr.get( "globalize-messages/{bundle}" ) !== undefined, + { + locale: cldr.locale + } + ); +}; + + + + +var validateMessagePresence = function( path, value ) { + path = path.join( "/" ); + validate( "E_MISSING_MESSAGE", "Missing required message content `{path}`.", + value !== undefined, { path: path } ); +}; + + + + +var validateMessageType = function( path, value ) { + path = path.join( "/" ); + validate( + "E_INVALID_MESSAGE", + "Invalid message content `{path}`. {expected} expected.", + typeof value === "string", + { + expected: "a string", + path: path + } + ); +}; + + + + +var validateParameterTypeMessageVariables = function( value, name ) { + validateParameterType( + value, + name, + value === undefined || isPlainObject( value ) || Array.isArray( value ), + "Array or Plain Object" + ); +}; + + + + +var messageFormatterFn = function( formatter ) { + return function messageFormatter( variables ) { + if ( typeof variables === "number" || typeof variables === "string" ) { + variables = [].slice.call( arguments, 0 ); + } + validateParameterTypeMessageVariables( variables, "variables" ); + return formatter( variables ); + }; +}; + + + + +var messageFormatterRuntimeBind = function( cldr, messageformatter ) { + var locale = cldr.locale, + origToString = messageformatter.toString; + + messageformatter.toString = function() { + var argNames, argValues, output, + args = {}; + + // Properly adjust SlexAxton/messageformat.js compiled variables with Globalize variables: + output = origToString.call( messageformatter ); + + if ( /number\(/.test( output ) ) { + args.number = "messageFormat.number"; + } + + if ( /plural\(/.test( output ) ) { + args.plural = "messageFormat.plural"; + } + + if ( /select\(/.test( output ) ) { + args.select = "messageFormat.select"; + } + + output.replace( /pluralFuncs(\[([^\]]+)\]|\.([a-zA-Z]+))/, function( match ) { + args.pluralFuncs = "{" + + "\"" + locale + "\": Globalize(\"" + locale + "\").pluralGenerator()" + + "}"; + return match; + }); + + argNames = Object.keys( args ).join( ", " ); + argValues = Object.keys( args ).map(function( key ) { + return args[ key ]; + }).join( ", " ); + + return "(function( " + argNames + " ) {\n" + + " return " + output + "\n" + + "})(" + argValues + ")"; + }; + + return messageformatter; +}; + + + + +var slice = [].slice; + +/** + * .loadMessages( json ) + * + * @json [JSON] + * + * Load translation data. + */ +Globalize.loadMessages = function( json ) { + var locale, + customData = { + "globalize-messages": json, + "main": {} + }; + + validateParameterPresence( json, "json" ); + validateParameterTypePlainObject( json, "json" ); + + // Set available bundles by populating customData main dataset. + for ( locale in json ) { + if ( json.hasOwnProperty( locale ) ) { + customData.main[ locale ] = {}; + } + } + + Cldr.load( customData ); +}; + +/** + * .messageFormatter( path ) + * + * @path [String or Array] + * + * Format a message given its path. + */ +Globalize.messageFormatter = +Globalize.prototype.messageFormatter = function( path ) { + var cldr, formatter, message, pluralGenerator, returnFn, + args = slice.call( arguments, 0 ); + + validateParameterPresence( path, "path" ); + validateParameterType( path, "path", typeof path === "string" || Array.isArray( path ), + "a String nor an Array" ); + + path = alwaysArray( path ); + cldr = this.cldr; + + validateDefaultLocale( cldr ); + validateMessageBundle( cldr ); + + message = cldr.get( [ "globalize-messages/{bundle}" ].concat( path ) ); + validateMessagePresence( path, message ); + + // If message is an Array, concatenate it. + if ( Array.isArray( message ) ) { + message = message.join( " " ); + } + validateMessageType( path, message ); + + // Is plural module present? Yes, use its generator. Nope, use an error generator. + pluralGenerator = this.plural !== undefined ? + this.pluralGenerator() : + createErrorPluralModulePresence; + + formatter = new MessageFormat( cldr.locale, pluralGenerator ).compile( message ); + + returnFn = messageFormatterFn( formatter ); + + runtimeBind( args, cldr, returnFn, + [ messageFormatterRuntimeBind( cldr, formatter ), pluralGenerator ] ); + + return returnFn; +}; + +/** + * .formatMessage( path [, variables] ) + * + * @path [String or Array] + * + * @variables [Number, String, Array or Object] + * + * Format a message given its path. + */ +Globalize.formatMessage = +Globalize.prototype.formatMessage = function( path /* , variables */ ) { + return this.messageFormatter( path ).apply( {}, slice.call( arguments, 1 ) ); +}; + +return Globalize; + + + + +})); diff --git a/node_modules/globalize/dist/globalize/number.js b/node_modules/globalize/dist/globalize/number.js new file mode 100644 index 00000000..2271ef2a --- /dev/null +++ b/node_modules/globalize/dist/globalize/number.js @@ -0,0 +1,1612 @@ +/** + * Globalize v1.4.2 + * + * http://github.com/jquery/globalize + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2019-03-07T13:47Z + */ +/*! + * Globalize v1.4.2 2019-03-07T13:47Z Released under the MIT license + * http://git.io/TrdQbw + */ +(function( root, factory ) { + + // UMD returnExports + if ( typeof define === "function" && define.amd ) { + + // AMD + define([ + "cldr", + "../globalize", + "cldr/event", + "cldr/supplemental" + ], factory ); + } else if ( typeof exports === "object" ) { + + // Node, CommonJS + module.exports = factory( require( "cldrjs" ), require( "../globalize" ) ); + } else { + + // Global + factory( root.Cldr, root.Globalize ); + } +}(this, function( Cldr, Globalize ) { + +var createError = Globalize._createError, + regexpEscape = Globalize._regexpEscape, + runtimeBind = Globalize._runtimeBind, + stringPad = Globalize._stringPad, + validateCldr = Globalize._validateCldr, + validateDefaultLocale = Globalize._validateDefaultLocale, + validateParameterPresence = Globalize._validateParameterPresence, + validateParameterRange = Globalize._validateParameterRange, + validateParameterType = Globalize._validateParameterType, + validateParameterTypePlainObject = Globalize._validateParameterTypePlainObject; + + +var createErrorUnsupportedFeature = function( feature ) { + return createError( "E_UNSUPPORTED", "Unsupported {feature}.", { + feature: feature + }); +}; + + + + +var validateParameterTypeNumber = function( value, name ) { + validateParameterType( + value, + name, + value === undefined || typeof value === "number", + "Number" + ); +}; + + + + +var validateParameterTypeString = function( value, name ) { + validateParameterType( + value, + name, + value === undefined || typeof value === "string", + "a string" + ); +}; + + + + +/** + * EBNF representation: + * + * compact_pattern_re = prefix? + * number_pattern_re + * suffix? + * + * number_pattern_re = 0+ + * + * Regexp groups: + * + * 0: compact_pattern_re + * 1: prefix + * 2: number_pattern_re (the number pattern to use in compact mode) + * 3: suffix + */ +var numberCompactPatternRe = ( /^([^0]*)(0+)([^0]*)$/ ); + + + + +/** + * goupingSeparator( number, primaryGroupingSize, secondaryGroupingSize ) + * + * @number [Number]. + * + * @primaryGroupingSize [Number] + * + * @secondaryGroupingSize [Number] + * + * Return the formatted number with group separator. + */ +var numberFormatGroupingSeparator = function( number, primaryGroupingSize, secondaryGroupingSize ) { + var index, + currentGroupingSize = primaryGroupingSize, + ret = "", + sep = ",", + switchToSecondary = secondaryGroupingSize ? true : false; + + number = String( number ).split( "." ); + index = number[ 0 ].length; + + while ( index > currentGroupingSize ) { + ret = number[ 0 ].slice( index - currentGroupingSize, index ) + + ( ret.length ? sep : "" ) + ret; + index -= currentGroupingSize; + if ( switchToSecondary ) { + currentGroupingSize = secondaryGroupingSize; + switchToSecondary = false; + } + } + + number[ 0 ] = number[ 0 ].slice( 0, index ) + ( ret.length ? sep : "" ) + ret; + return number.join( "." ); +}; + + + + +/** + * integerFractionDigits( number, minimumIntegerDigits, minimumFractionDigits, + * maximumFractionDigits, round, roundIncrement ) + * + * @number [Number] + * + * @minimumIntegerDigits [Number] + * + * @minimumFractionDigits [Number] + * + * @maximumFractionDigits [Number] + * + * @round [Function] + * + * @roundIncrement [Function] + * + * Return the formatted integer and fraction digits. + */ +var numberFormatIntegerFractionDigits = function( number, minimumIntegerDigits, minimumFractionDigits, maximumFractionDigits, round, + roundIncrement ) { + + // Fraction + if ( maximumFractionDigits ) { + + // Rounding + if ( roundIncrement ) { + number = round( number, roundIncrement ); + + // Maximum fraction digits + } else { + number = round( number, { exponent: -maximumFractionDigits } ); + } + + } else { + number = round( number ); + } + + number = String( number ); + + // Maximum integer digits (post string phase) + if ( maximumFractionDigits && /e-/.test( number ) ) { + + // Use toFixed( maximumFractionDigits ) to make sure small numbers like 1e-7 are + // displayed using plain digits instead of scientific notation. + // 1: Remove leading decimal zeros. + // 2: Remove leading decimal separator. + // Note: String() is still preferred so it doesn't mess up with a number precision + // unnecessarily, e.g., (123456789.123).toFixed(10) === "123456789.1229999959", + // String(123456789.123) === "123456789.123". + number = ( +number ).toFixed( maximumFractionDigits ) + .replace( /0+$/, "" ) /* 1 */ + .replace( /\.$/, "" ) /* 2 */; + } + + // Minimum fraction digits (post string phase) + if ( minimumFractionDigits ) { + number = number.split( "." ); + number[ 1 ] = stringPad( number[ 1 ] || "", minimumFractionDigits, true ); + number = number.join( "." ); + } + + // Minimum integer digits + if ( minimumIntegerDigits ) { + number = number.split( "." ); + number[ 0 ] = stringPad( number[ 0 ], minimumIntegerDigits ); + number = number.join( "." ); + } + + return number; +}; + + + + +/** + * toPrecision( number, precision, round ) + * + * @number (Number) + * + * @precision (Number) significant figures precision (not decimal precision). + * + * @round (Function) + * + * Return number.toPrecision( precision ) using the given round function. + */ +var numberToPrecision = function( number, precision, round ) { + var roundOrder; + + roundOrder = Math.ceil( Math.log( Math.abs( number ) ) / Math.log( 10 ) ); + roundOrder -= precision; + + return round( number, { exponent: roundOrder } ); +}; + + + + +/** + * toPrecision( number, minimumSignificantDigits, maximumSignificantDigits, round ) + * + * @number [Number] + * + * @minimumSignificantDigits [Number] + * + * @maximumSignificantDigits [Number] + * + * @round [Function] + * + * Return the formatted significant digits number. + */ +var numberFormatSignificantDigits = function( number, minimumSignificantDigits, maximumSignificantDigits, round ) { + var atMinimum, atMaximum; + + // Sanity check. + if ( minimumSignificantDigits > maximumSignificantDigits ) { + maximumSignificantDigits = minimumSignificantDigits; + } + + atMinimum = numberToPrecision( number, minimumSignificantDigits, round ); + atMaximum = numberToPrecision( number, maximumSignificantDigits, round ); + + // Use atMaximum only if it has more significant digits than atMinimum. + number = +atMinimum === +atMaximum ? atMinimum : atMaximum; + + // Expand integer numbers, eg. 123e5 to 12300. + number = ( +number ).toString( 10 ); + + if ( ( /e/ ).test( number ) ) { + throw createErrorUnsupportedFeature({ + feature: "integers out of (1e21, 1e-7)" + }); + } + + // Add trailing zeros if necessary. + if ( minimumSignificantDigits - number.replace( /^0+|\./g, "" ).length > 0 ) { + number = number.split( "." ); + number[ 1 ] = stringPad( number[ 1 ] || "", minimumSignificantDigits - number[ 0 ].replace( /^0+/, "" ).length, true ); + number = number.join( "." ); + } + + return number; +}; + + + + +/** + * EBNF representation: + * + * number_pattern_re = prefix? + * padding? + * (integer_fraction_pattern | significant_pattern) + * scientific_notation? + * suffix? + * + * prefix = non_number_stuff + * + * padding = "*" regexp(.) + * + * integer_fraction_pattern = integer_pattern + * fraction_pattern? + * + * integer_pattern = regexp([#,]*[0,]*0+) + * + * fraction_pattern = "." regexp(0*[0-9]*#*) + * + * significant_pattern = regexp([#,]*@+#*) + * + * scientific_notation = regexp(E\+?0+) + * + * suffix = non_number_stuff + * + * non_number_stuff = regexp(('[^']+'|''|[^*#@0,.E])*) + * + * + * Regexp groups: + * + * 0: number_pattern_re + * 1: prefix + * 2: - + * 3: - + * 4: padding + * 5: (integer_fraction_pattern | significant_pattern) + * 6: integer_fraction_pattern + * 7: integer_pattern + * 8: fraction_pattern + * 9: significant_pattern + * 10: scientific_notation + * 11: suffix + * 12: - + */ +var numberPatternRe = ( /^(('([^']|'')*'|[^*#@0,.E])*)(\*.)?((([#,]*[0,]*0+)(\.0*[0-9]*#*)?)|([#,]*@+#*))(E\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/ ); + + + + +/** + * removeLiteralQuotes( string ) + * + * Return: + * - `` if input string is `''`. + * - `o'clock` if input string is `'o''clock'`. + * - `foo` if input string is `foo`, i.e., return the same value in case it isn't a single-quoted + * string. + */ +var removeLiteralQuotes = function( string ) { + if ( string[ 0 ] + string[ string.length - 1 ] !== "''" ) { + return string; + } + if ( string === "''" ) { + return ""; + } + return string.replace( /''/g, "'" ).slice( 1, -1 ); +}; + + + + +/** + * format( number, properties ) + * + * @number [Number]. + * + * @properties [Object] Output of number/format-properties. + * + * Return the formatted number. + * ref: http://www.unicode.org/reports/tr35/tr35-numbers.html + */ +var numberFormat = function( number, properties, pluralGenerator ) { + var compactMap, infinitySymbol, maximumFractionDigits, maximumSignificantDigits, + minimumFractionDigits, minimumIntegerDigits, minimumSignificantDigits, nanSymbol, nuDigitsMap, + padding, prefix, primaryGroupingSize, pattern, ret, round, roundIncrement, + secondaryGroupingSize, suffix, symbolMap; + + padding = properties[ 1 ]; + minimumIntegerDigits = properties[ 2 ]; + minimumFractionDigits = properties[ 3 ]; + maximumFractionDigits = properties[ 4 ]; + minimumSignificantDigits = properties[ 5 ]; + maximumSignificantDigits = properties[ 6 ]; + roundIncrement = properties[ 7 ]; + primaryGroupingSize = properties[ 8 ]; + secondaryGroupingSize = properties[ 9 ]; + round = properties[ 15 ]; + infinitySymbol = properties[ 16 ]; + nanSymbol = properties[ 17 ]; + symbolMap = properties[ 18 ]; + nuDigitsMap = properties[ 19 ]; + compactMap = properties[ 20 ]; + + // NaN + if ( isNaN( number ) ) { + return nanSymbol; + } + + if ( number < 0 ) { + pattern = properties[ 12 ]; + prefix = properties[ 13 ]; + suffix = properties[ 14 ]; + } else { + pattern = properties[ 11 ]; + prefix = properties[ 0 ]; + suffix = properties[ 10 ]; + } + + // Infinity + if ( !isFinite( number ) ) { + return prefix + infinitySymbol + suffix; + } + + // Percent + if ( pattern.indexOf( "%" ) !== -1 ) { + number *= 100; + + // Per mille + } else if ( pattern.indexOf( "\u2030" ) !== -1 ) { + number *= 1000; + } + + var compactPattern, compactDigits, compactProperties, divisor, numberExponent, pluralForm; + + // Compact mode: initial number digit processing + if ( compactMap ) { + numberExponent = Math.abs( Math.floor( number ) ).toString().length - 1; + numberExponent = Math.min( numberExponent, compactMap.maxExponent ); + + // Use default plural form to perform initial decimal shift + if ( numberExponent >= 3 ) { + compactPattern = compactMap[ numberExponent ] && compactMap[ numberExponent ].other; + } + + if ( compactPattern === "0" ) { + compactPattern = null; + } else if ( compactPattern ) { + compactDigits = compactPattern.split( "0" ).length - 1; + divisor = numberExponent - ( compactDigits - 1 ); + number = number / Math.pow( 10, divisor ); + } + } + + // Significant digit format + if ( !isNaN( minimumSignificantDigits * maximumSignificantDigits ) ) { + number = numberFormatSignificantDigits( number, minimumSignificantDigits, + maximumSignificantDigits, round ); + + // Integer and fractional format + } else { + number = numberFormatIntegerFractionDigits( number, minimumIntegerDigits, + minimumFractionDigits, maximumFractionDigits, round, roundIncrement ); + } + + // Compact mode: apply formatting + if ( compactMap && compactPattern ) { + + // Get plural form after possible roundings + pluralForm = pluralGenerator ? pluralGenerator( +number ) : "other"; + + compactPattern = compactMap[ numberExponent ][ pluralForm ] || compactPattern; + compactProperties = compactPattern.match( numberCompactPatternRe ); + + // update prefix/suffix with compact prefix/suffix + prefix += compactProperties[ 1 ]; + suffix = compactProperties[ 3 ] + suffix; + } + + // Remove the possible number minus sign + number = number.replace( /^-/, "" ); + + // Grouping separators + if ( primaryGroupingSize ) { + number = numberFormatGroupingSeparator( number, primaryGroupingSize, + secondaryGroupingSize ); + } + + ret = prefix; + + ret += number; + + // Scientific notation + // TODO implement here + + // Padding/'([^']|'')+'|''|[.,\-+E%\u2030]/g + // TODO implement here + + ret += suffix; + + return ret.replace( /('([^']|'')+'|'')|./g, function( character, literal ) { + + // Literals + if ( literal ) { + return removeLiteralQuotes( literal ); + } + + // Symbols + character = character.replace( /[.,\-+E%\u2030]/, function( symbol ) { + return symbolMap[ symbol ]; + }); + + // Numbering system + if ( nuDigitsMap ) { + character = character.replace( /[0-9]/, function( digit ) { + return nuDigitsMap[ +digit ]; + }); + } + + return character; + }); +}; + + + + +var numberFormatterFn = function( properties, pluralGenerator ) { + return function numberFormatter( value ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + + return numberFormat( value, properties, pluralGenerator ); + }; +}; + + + + +/** + * NumberingSystem( cldr ) + * + * - http://www.unicode.org/reports/tr35/tr35-numbers.html#otherNumberingSystems + * - http://cldr.unicode.org/index/bcp47-extension + * - http://www.unicode.org/reports/tr35/#u_Extension + */ +var numberNumberingSystem = function( cldr ) { + var nu = cldr.attributes[ "u-nu" ]; + + if ( nu ) { + if ( nu === "traditio" ) { + nu = "traditional"; + } + if ( [ "native", "traditional", "finance" ].indexOf( nu ) !== -1 ) { + + // Unicode locale extension `u-nu` is set using either (native, traditional or + // finance). So, lookup the respective locale's numberingSystem and return it. + return cldr.main([ "numbers/otherNumberingSystems", nu ]); + } + + // Unicode locale extension `u-nu` is set with an explicit numberingSystem. Return it. + return nu; + } + + // Return the default numberingSystem. + return cldr.main( "numbers/defaultNumberingSystem" ); +}; + + + + +/** + * Compact( name, cldr ) + * + * @compactType [String] Compact mode, `short` or `long`. + * + * @cldr [Cldr instance]. + * + * Return the localized compact map for the given compact mode. + */ +var numberCompact = function( compactType, cldr ) { + var maxExponent = 0; + + var object = cldr.main([ + "numbers/decimalFormats-numberSystem-" + numberNumberingSystem( cldr ), + compactType, + "decimalFormat" + ]); + + object = Object.keys( object ).reduce(function( newObject, compactKey ) { + var numberExponent = compactKey.split( "0" ).length - 1; + var pluralForm = compactKey.split( "-" )[ 2 ]; + newObject[ numberExponent ] = newObject[ numberExponent ] || {}; + newObject[ numberExponent ][ pluralForm ] = object[ compactKey ]; + maxExponent = Math.max( numberExponent, maxExponent ); + return newObject; + }, {}); + + object.maxExponent = maxExponent; + + return object; +}; + + + + +/** + * nuMap( cldr ) + * + * @cldr [Cldr instance]. + * + * Return digits map if numbering system is different than `latn`. + */ +var numberNumberingSystemDigitsMap = function( cldr ) { + var aux, + nu = numberNumberingSystem( cldr ); + + if ( nu === "latn" ) { + return; + } + + aux = cldr.supplemental([ "numberingSystems", nu ]); + + if ( aux._type !== "numeric" ) { + throw createErrorUnsupportedFeature( "`" + aux._type + "` numbering system" ); + } + + return aux._digits; +}; + + + + +/** + * format( number, pattern ) + * + * @number [Number]. + * + * @pattern [String] raw pattern for numbers. + * + * Return the formatted number. + * ref: http://www.unicode.org/reports/tr35/tr35-numbers.html + */ +var numberPatternProperties = function( pattern ) { + var aux1, aux2, fractionPattern, integerFractionOrSignificantPattern, integerPattern, + maximumFractionDigits, maximumSignificantDigits, minimumFractionDigits, + minimumIntegerDigits, minimumSignificantDigits, padding, prefix, primaryGroupingSize, + roundIncrement, scientificNotation, secondaryGroupingSize, significantPattern, suffix; + + pattern = pattern.match( numberPatternRe ); + if ( !pattern ) { + throw new Error( "Invalid pattern: " + pattern ); + } + + prefix = pattern[ 1 ]; + padding = pattern[ 4 ]; + integerFractionOrSignificantPattern = pattern[ 5 ]; + significantPattern = pattern[ 9 ]; + scientificNotation = pattern[ 10 ]; + suffix = pattern[ 11 ]; + + // Significant digit format + if ( significantPattern ) { + significantPattern.replace( /(@+)(#*)/, function( match, minimumSignificantDigitsMatch, maximumSignificantDigitsMatch ) { + minimumSignificantDigits = minimumSignificantDigitsMatch.length; + maximumSignificantDigits = minimumSignificantDigits + + maximumSignificantDigitsMatch.length; + }); + + // Integer and fractional format + } else { + fractionPattern = pattern[ 8 ]; + integerPattern = pattern[ 7 ]; + + if ( fractionPattern ) { + + // Minimum fraction digits, and rounding. + fractionPattern.replace( /[0-9]+/, function( match ) { + minimumFractionDigits = match; + }); + if ( minimumFractionDigits ) { + roundIncrement = +( "0." + minimumFractionDigits ); + minimumFractionDigits = minimumFractionDigits.length; + } else { + minimumFractionDigits = 0; + } + + // Maximum fraction digits + // 1: ignore decimal character + maximumFractionDigits = fractionPattern.length - 1 /* 1 */; + } else { + minimumFractionDigits = 0; + maximumFractionDigits = 0; + } + + // Minimum integer digits + integerPattern.replace( /0+$/, function( match ) { + minimumIntegerDigits = match.length; + }); + } + + // Scientific notation + if ( scientificNotation ) { + throw createErrorUnsupportedFeature({ + feature: "scientific notation (not implemented)" + }); + } + + // Padding + if ( padding ) { + throw createErrorUnsupportedFeature({ + feature: "padding (not implemented)" + }); + } + + // Grouping + if ( ( aux1 = integerFractionOrSignificantPattern.lastIndexOf( "," ) ) !== -1 ) { + + // Primary grouping size is the interval between the last group separator and the end of + // the integer (or the end of the significant pattern). + aux2 = integerFractionOrSignificantPattern.split( "." )[ 0 ]; + primaryGroupingSize = aux2.length - aux1 - 1; + + // Secondary grouping size is the interval between the last two group separators. + if ( ( aux2 = integerFractionOrSignificantPattern.lastIndexOf( ",", aux1 - 1 ) ) !== -1 ) { + secondaryGroupingSize = aux1 - 1 - aux2; + } + } + + // Return: + // 0: @prefix String + // 1: @padding Array [ , ] TODO + // 2: @minimumIntegerDigits non-negative integer Number value indicating the minimum integer + // digits to be used. Numbers will be padded with leading zeroes if necessary. + // 3: @minimumFractionDigits and + // 4: @maximumFractionDigits are non-negative integer Number values indicating the minimum and + // maximum fraction digits to be used. Numbers will be rounded or padded with trailing + // zeroes if necessary. + // 5: @minimumSignificantDigits and + // 6: @maximumSignificantDigits are positive integer Number values indicating the minimum and + // maximum fraction digits to be shown. Either none or both of these properties are + // present; if they are, they override minimum and maximum integer and fraction digits + // – the formatter uses however many integer and fraction digits are required to display + // the specified number of significant digits. + // 7: @roundIncrement Decimal round increment or null + // 8: @primaryGroupingSize + // 9: @secondaryGroupingSize + // 10: @suffix String + return [ + prefix, + padding, + minimumIntegerDigits, + minimumFractionDigits, + maximumFractionDigits, + minimumSignificantDigits, + maximumSignificantDigits, + roundIncrement, + primaryGroupingSize, + secondaryGroupingSize, + suffix + ]; +}; + + + + +/** + * Symbol( name, cldr ) + * + * @name [String] Symbol name. + * + * @cldr [Cldr instance]. + * + * Return the localized symbol given its name. + */ +var numberSymbol = function( name, cldr ) { + return cldr.main([ + "numbers/symbols-numberSystem-" + numberNumberingSystem( cldr ), + name + ]); +}; + + + + +var numberSymbolName = { + ".": "decimal", + ",": "group", + "%": "percentSign", + "+": "plusSign", + "-": "minusSign", + "E": "exponential", + "\u2030": "perMille" +}; + + + + +/** + * symbolMap( cldr ) + * + * @cldr [Cldr instance]. + * + * Return the (localized symbol, pattern symbol) key value pair, eg. { + * ".": "٫", + * ",": "٬", + * "%": "٪", + * ... + * }; + */ +var numberSymbolMap = function( cldr ) { + var symbol, + symbolMap = {}; + + for ( symbol in numberSymbolName ) { + symbolMap[ symbol ] = numberSymbol( numberSymbolName[ symbol ], cldr ); + } + + return symbolMap; +}; + + + + +var numberTruncate = function( value ) { + if ( isNaN( value ) ) { + return NaN; + } + return Math[ value < 0 ? "ceil" : "floor" ]( value ); +}; + + + + +/** + * round( method ) + * + * @method [String] with either "round", "ceil", "floor", or "truncate". + * + * Return function( value, incrementOrExp ): + * + * @value [Number] eg. 123.45. + * + * @incrementOrExp [Number] optional, eg. 0.1; or + * [Object] Either { increment: } or { exponent: } + * + * Return the rounded number, eg: + * - round( "round" )( 123.45 ): 123; + * - round( "ceil" )( 123.45 ): 124; + * - round( "floor" )( 123.45 ): 123; + * - round( "truncate" )( 123.45 ): 123; + * - round( "round" )( 123.45, 0.1 ): 123.5; + * - round( "round" )( 123.45, 10 ): 120; + * + * Based on https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round + * Ref: #376 + */ +var numberRound = function( method ) { + method = method || "round"; + method = method === "truncate" ? numberTruncate : Math[ method ]; + + return function( value, incrementOrExp ) { + var exp, increment; + + value = +value; + + // If the value is not a number, return NaN. + if ( isNaN( value ) ) { + return NaN; + } + + // Exponent given. + if ( typeof incrementOrExp === "object" && incrementOrExp.exponent ) { + exp = +incrementOrExp.exponent; + increment = 1; + + if ( exp === 0 ) { + return method( value ); + } + + // If the exp is not an integer, return NaN. + if ( !( typeof exp === "number" && exp % 1 === 0 ) ) { + return NaN; + } + + // Increment given. + } else { + increment = +incrementOrExp || 1; + + if ( increment === 1 ) { + return method( value ); + } + + // If the increment is not a number, return NaN. + if ( isNaN( increment ) ) { + return NaN; + } + + increment = increment.toExponential().split( "e" ); + exp = +increment[ 1 ]; + increment = +increment[ 0 ]; + } + + // Shift & Round + value = value.toString().split( "e" ); + value[ 0 ] = +value[ 0 ] / increment; + value[ 1 ] = value[ 1 ] ? ( +value[ 1 ] - exp ) : -exp; + value = method( +( value[ 0 ] + "e" + value[ 1 ] ) ); + + // Shift back + value = value.toString().split( "e" ); + value[ 0 ] = +value[ 0 ] * increment; + value[ 1 ] = value[ 1 ] ? ( +value[ 1 ] + exp ) : exp; + return +( value[ 0 ] + "e" + value[ 1 ] ); + }; +}; + + + + +/** + * formatProperties( pattern, cldr [, options] ) + * + * @pattern [String] raw pattern for numbers. + * + * @cldr [Cldr instance]. + * + * @options [Object]: + * - minimumIntegerDigits [Number] + * - minimumFractionDigits, maximumFractionDigits [Number] + * - minimumSignificantDigits, maximumSignificantDigits [Number] + * - round [String] "ceil", "floor", "round" (default), or "truncate". + * - useGrouping [Boolean] default true. + * + * Return the processed properties that will be used in number/format. + * ref: http://www.unicode.org/reports/tr35/tr35-numbers.html + */ +var numberFormatProperties = function( pattern, cldr, options ) { + var negativePattern, negativePrefix, negativeProperties, negativeSuffix, positivePattern, + roundFn, properties; + + function getOptions( attribute, propertyIndex ) { + if ( attribute in options ) { + properties[ propertyIndex ] = options[ attribute ]; + } + } + + options = options || {}; + pattern = pattern.split( ";" ); + + positivePattern = pattern[ 0 ]; + + negativePattern = pattern[ 1 ] || "-" + positivePattern; + negativeProperties = numberPatternProperties( negativePattern ); + negativePrefix = negativeProperties[ 0 ]; + negativeSuffix = negativeProperties[ 10 ]; + + // Have runtime code to refer to numberRound() instead of including it explicitly. + roundFn = numberRound( options.round ); + roundFn.generatorString = function() { + return "numberRound(" + ( options.round ? "\"" + options.round + "\"" : "" ) + ")"; + }; + + properties = numberPatternProperties( positivePattern ).concat([ + positivePattern, + negativePrefix + positivePattern + negativeSuffix, + negativePrefix, + negativeSuffix, + roundFn, + numberSymbol( "infinity", cldr ), + numberSymbol( "nan", cldr ), + numberSymbolMap( cldr ), + numberNumberingSystemDigitsMap( cldr ) + ]); + + if ( options.compact ) { + + // The compact digits number pattern is always `0+`, so override the following properties. + // Note: minimumIntegerDigits would actually range from `0` to `000` based on the scale of + // the value to be formatted, though we're always using 1 as a simplification, because the + // number won't be zero-padded since we chose the right format based on the scale, i.e., + // we'd never see something like `003M` anyway. + properties[ 2 ] = 1; // minimumIntegerDigits + properties[ 3 ] = 0; // minimumFractionDigits + properties[ 4 ] = 0; // maximumFractionDigits + properties[ 5 ] = // minimumSignificantDigits & + properties[ 6 ] = undefined ; // maximumSignificantDigits + + properties[20] = numberCompact( options.compact, cldr ); + } + + getOptions( "minimumIntegerDigits", 2 ); + getOptions( "minimumFractionDigits", 3 ); + getOptions( "maximumFractionDigits", 4 ); + getOptions( "minimumSignificantDigits", 5 ); + getOptions( "maximumSignificantDigits", 6 ); + + // Grouping separators + if ( options.useGrouping === false ) { + properties[ 8 ] = null; + } + + // Normalize number of digits if only one of either minimumFractionDigits or + // maximumFractionDigits is passed in as an option + if ( "minimumFractionDigits" in options && !( "maximumFractionDigits" in options ) ) { + + // maximumFractionDigits = Math.max( minimumFractionDigits, maximumFractionDigits ); + properties[ 4 ] = Math.max( properties[ 3 ], properties[ 4 ] ); + } else if ( !( "minimumFractionDigits" in options ) && + "maximumFractionDigits" in options ) { + + // minimumFractionDigits = Math.min( minimumFractionDigits, maximumFractionDigits ); + properties[ 3 ] = Math.min( properties[ 3 ], properties[ 4 ] ); + } + + // Return: + // 0-10: see number/pattern-properties. + // 11: @positivePattern [String] Positive pattern. + // 12: @negativePattern [String] Negative pattern. + // 13: @negativePrefix [String] Negative prefix. + // 14: @negativeSuffix [String] Negative suffix. + // 15: @round [Function] Round function. + // 16: @infinitySymbol [String] Infinity symbol. + // 17: @nanSymbol [String] NaN symbol. + // 18: @symbolMap [Object] A bunch of other symbols. + // 19: @nuDigitsMap [Array] Digits map if numbering system is different than `latn`. + // 20: @compactMap [Object] Map of per-digit-count format patterns for specified compact mode. + return properties; +}; + + + + +/** + * Generated by: + * + * var regenerate = require( "regenerate" ); + * var formatSymbols = require( * "unicode-8.0.0/General_Category/Format/symbols" ); + * regenerate().add( formatSymbols ).toString(); + * + * https://github.com/mathiasbynens/regenerate + * https://github.com/mathiasbynens/unicode-8.0.0 + */ +var regexpCfG = /[\xAD\u0600-\u0605\u061C\u06DD\u070F\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804\uDCBD|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/g; + + + + +/** + * Generated by: + * + * var regenerate = require( "regenerate" ); + * var dashSymbols = require( * "unicode-8.0.0/General_Category/Dash_Punctuation/symbols" ); + * regenerate().add( dashSymbols ).toString(); + * + * https://github.com/mathiasbynens/regenerate + * https://github.com/mathiasbynens/unicode-8.0.0 + * + * NOTE: In addition to [:dash:], the below includes MINUS SIGN U+2212. + */ +var regexpDashG = /[\-\u058A\u05BE\u1400\u1806\u2010-\u2015\u2E17\u2E1A\u2E3A\u2E3B\u2E40\u301C\u3030\u30A0\uFE31\uFE32\uFE58\uFE63\uFF0D\u2212]/g; + + + + +/** + * Generated by: + * + * var regenerate = require( "regenerate" ); + * var spaceSeparatorSymbols = require( "unicode-8.0.0/General_Category/Space_Separator/symbols" ); + * regenerate().add( spaceSeparatorSymbols ).toString(); + * + * https://github.com/mathiasbynens/regenerate + * https://github.com/mathiasbynens/unicode-8.0.0 + */ +var regexpZsG = /[ \xA0\u1680\u2000-\u200A\u202F\u205F\u3000]/g; + + + + +/** + * Loose Matching: + * - Ignore all format characters, which includes RLM, LRM or ALM used to control BIDI + * formatting. + * - Map all characters in [:Zs:] to U+0020 SPACE; + * - Map all characters in [:Dash:] to U+002D HYPHEN-MINUS; + */ +var looseMatching = function( value ) { + return value + .replace( regexpCfG, "" ) + .replace( regexpDashG, "-" ) + .replace( regexpZsG, " " ); +}; + + + + +/** + * parse( value, properties ) + * + * @value [String]. + * + * @properties [Object] Parser properties is a reduced pre-processed cldr + * data set returned by numberParserProperties(). + * + * Return the parsed Number (including Infinity) or NaN when value is invalid. + * ref: http://www.unicode.org/reports/tr35/tr35-numbers.html + */ +var numberParse = function( value, properties ) { + var grammar, invertedNuDigitsMap, invertedSymbolMap, negative, number, prefix, prefixNSuffix, + suffix, tokenizer, valid; + + // Grammar: + // - Value <= NaN | PositiveNumber | NegativeNumber + // - PositiveNumber <= PositivePrefix NumberOrInf PositiveSufix + // - NegativeNumber <= NegativePrefix NumberOrInf + // - NumberOrInf <= Number | Inf + grammar = [ + [ "nan" ], + [ "prefix", "infinity", "suffix" ], + [ "prefix", "number", "suffix" ], + [ "negativePrefix", "infinity", "negativeSuffix" ], + [ "negativePrefix", "number", "negativeSuffix" ] + ]; + + invertedSymbolMap = properties[ 0 ]; + invertedNuDigitsMap = properties[ 1 ] || {}; + tokenizer = properties[ 2 ]; + + value = looseMatching( value ); + + function parse( type ) { + return function( lexeme ) { + + // Reverse localized symbols and numbering system. + lexeme = lexeme.split( "" ).map(function( character ) { + return invertedSymbolMap[ character ] || + invertedNuDigitsMap[ character ] || + character; + }).join( "" ); + + switch ( type ) { + case "infinity": + number = Infinity; + break; + + case "nan": + number = NaN; + break; + + case "number": + + // Remove grouping separators. + lexeme = lexeme.replace( /,/g, "" ); + + number = +lexeme; + break; + + case "prefix": + case "negativePrefix": + prefix = lexeme; + break; + + case "suffix": + suffix = lexeme; + break; + + case "negativeSuffix": + suffix = lexeme; + negative = true; + break; + + // This should never be reached. + default: + throw new Error( "Internal error" ); + } + return ""; + }; + } + + function tokenizeNParse( _value, grammar ) { + return grammar.some(function( statement ) { + var value = _value; + + // The whole grammar statement should be used (i.e., .every() return true) and value be + // entirely consumed (i.e., !value.length). + return statement.every(function( type ) { + if ( value.match( tokenizer[ type ] ) === null ) { + return false; + } + + // Consume and parse it. + value = value.replace( tokenizer[ type ], parse( type ) ); + return true; + }) && !value.length; + }); + } + + valid = tokenizeNParse( value, grammar ); + + // NaN + if ( !valid || isNaN( number ) ) { + return NaN; + } + + prefixNSuffix = "" + prefix + suffix; + + // Percent + if ( prefixNSuffix.indexOf( "%" ) !== -1 ) { + number /= 100; + + // Per mille + } else if ( prefixNSuffix.indexOf( "\u2030" ) !== -1 ) { + number /= 1000; + } + + // Negative number + if ( negative ) { + number *= -1; + } + + return number; +}; + + + + +var numberParserFn = function( properties ) { + return function numberParser( value ) { + validateParameterPresence( value, "value" ); + validateParameterTypeString( value, "value" ); + + return numberParse( value, properties ); + }; + +}; + + + + +/** + * symbolMap( cldr ) + * + * @cldr [Cldr instance]. + * + * Return the (localized symbol, pattern symbol) key value pair, eg. { + * "٫": ".", + * "٬": ",", + * "٪": "%", + * ... + * }; + */ +var numberSymbolInvertedMap = function( cldr ) { + var symbol, + symbolMap = {}; + + for ( symbol in numberSymbolName ) { + symbolMap[ numberSymbol( numberSymbolName[ symbol ], cldr ) ] = symbol; + } + + return symbolMap; +}; + + + + +/** + * objectMap( object, fn) + * + * - object + * + * - fn( pair ) => pair + */ +var objectMap = function( object, fn ) { + return Object.keys( object ).map(function( key ) { + return fn([ key, object[ key ] ]); + }).reduce(function( object, pair ) { + object[ pair[ 0 ] ] = pair[ 1 ]; + return object; + }, {}); +}; + + + + +/** + * parseProperties( pattern, cldr ) + * + * @pattern [String] raw pattern for numbers. + * + * @cldr [Cldr instance]. + * + * Return parser properties, used to feed parser function. + * + * TODO: + * - Scientific_notation; + * - Padding; + */ +var numberParseProperties = function( pattern, cldr, options ) { + var aux, decimalSymbolRe, digitsRe, groupingSeparatorRe, infinitySymbol, invertedNuDigitsMap, + invertedSymbolMap, maximumFractionDigits, maximumSignificantDigits, + minimumSignificantDigits, nanSymbol, negativePrefix, negativeSuffix, nuDigitsMap, + numberTokenizer, prefix, primaryGroupingSize, secondaryGroupingSize, suffix, symbolMap, + formatProperties = numberFormatProperties( pattern, cldr, options ); + + prefix = looseMatching( formatProperties[ 0 ] ); + maximumFractionDigits = formatProperties[ 4 ]; + minimumSignificantDigits = formatProperties[ 5 ]; + maximumSignificantDigits = formatProperties[ 6 ]; + primaryGroupingSize = formatProperties[ 8 ]; + secondaryGroupingSize = formatProperties[ 9 ]; + suffix = looseMatching( formatProperties[ 10 ] ); + negativePrefix = looseMatching( formatProperties[ 13 ] ); + negativeSuffix = looseMatching( formatProperties[ 14 ] ); + infinitySymbol = looseMatching( formatProperties[ 16 ] ); + nanSymbol = looseMatching( formatProperties[ 17 ] ); + symbolMap = objectMap( formatProperties[ 18 ], function( pair ) { + return [ pair[ 0 ], looseMatching( pair[ 1 ] ) ]; + }); + nuDigitsMap = formatProperties[ 19 ]; + + invertedSymbolMap = objectMap( numberSymbolInvertedMap( cldr ), function( pair ) { + return [ looseMatching( pair[ 0 ] ), pair[ 1 ] ]; + }); + + digitsRe = nuDigitsMap ? "[" + nuDigitsMap + "]" : "\\d"; + groupingSeparatorRe = regexpEscape( symbolMap[ "," ] ); + decimalSymbolRe = regexpEscape( symbolMap[ "." ] ); + + if ( nuDigitsMap ) { + invertedNuDigitsMap = nuDigitsMap.split( "" ).reduce(function( object, localizedDigit, i ) { + object[ localizedDigit ] = String( i ); + return object; + }, {} ); + } + + aux = [ prefix, suffix, negativePrefix, negativeSuffix ].map(function( value ) { + return value.replace( /('([^']|'')+'|'')|./g, function( character, literal ) { + + // Literals + if ( literal ) { + return removeLiteralQuotes( literal ); + } + + // Symbols + character = character.replace( /[\-+E%\u2030]/, function( symbol ) { + return symbolMap[ symbol ]; + }); + + return character; + }); + }); + + prefix = aux[ 0 ]; + suffix = aux[ 1 ]; + negativePrefix = aux[ 2 ]; + negativeSuffix = aux[ 3 ]; + + // Number + // + // number_re = integer fraction? + // + // integer = digits | digits_using_grouping_separators + // + // fraction = regexp((.\d+)?) + // + // digits = regexp(\d+) + // + // digits_w_grouping_separators = digits_w_1_grouping_separators | + // digits_w_2_grouping_separators + // + // digits_w_1_grouping_separators = regexp(\d{1,3}(,\d{3})+) + // + // digits_w_2_grouping_separators = regexp(\d{1,2}((,\d{2})*(,\d{3}))) + + // Integer part + numberTokenizer = digitsRe + "+"; + + // Grouping separators + if ( primaryGroupingSize ) { + if ( secondaryGroupingSize ) { + aux = digitsRe + "{1," + secondaryGroupingSize + "}((" + groupingSeparatorRe + + digitsRe + "{" + secondaryGroupingSize + "})*(" + groupingSeparatorRe + + digitsRe + "{" + primaryGroupingSize + "}))"; + } else { + aux = digitsRe + "{1," + primaryGroupingSize + "}(" + groupingSeparatorRe + + digitsRe + "{" + primaryGroupingSize + "})+"; + } + numberTokenizer = "(" + aux + "|" + numberTokenizer + ")"; + } + + // Fraction part? Only included if 1 or 2. + // 1: Using significant digit format. + // 2: Using integer and fractional format && it has a maximumFractionDigits. + if ( !isNaN( minimumSignificantDigits * maximumSignificantDigits ) || /* 1 */ + maximumFractionDigits /* 2 */ ) { + + // 1: Handle trailing decimal separator, e.g., `"1." => `1``. + aux = decimalSymbolRe + digitsRe + "+"; + numberTokenizer = numberTokenizer + "(" + aux + "|" + decimalSymbolRe /* 1 */ + ")?" + + + // Handle non-padded decimals, e.g., `".12"` => `0.12` by making the integer part + // optional. + "|(" + numberTokenizer + ")?" + aux; + + numberTokenizer = "(" + numberTokenizer + ")"; + } + + // 0: @invertedSymbolMap [Object] Inverted symbol map. + // 1: @invertedNuDigitsMap [Object] Inverted digits map if numbering system is different than + // `latn`. + // 2: @tokenizer [Object] Tokenizer map, used by parser to consume input. + return [ + invertedSymbolMap, + invertedNuDigitsMap, + { + infinity: new RegExp( "^" + regexpEscape( infinitySymbol ) ), + nan: new RegExp( "^" + regexpEscape( nanSymbol ) ), + negativePrefix: new RegExp( "^" + regexpEscape( negativePrefix ) ), + negativeSuffix: new RegExp( "^" + regexpEscape( negativeSuffix ) ), + number: new RegExp( "^" + numberTokenizer ), + prefix: new RegExp( "^" + regexpEscape( prefix ) ), + suffix: new RegExp( "^" + regexpEscape( suffix ) ) + } + ]; + +}; + + + + +/** + * Pattern( style ) + * + * @style [String] "decimal" (default) or "percent". + * + * @cldr [Cldr instance]. + */ +var numberPattern = function( style, cldr ) { + if ( style !== "decimal" && style !== "percent" ) { + throw new Error( "Invalid style" ); + } + + return cldr.main([ + "numbers", + style + "Formats-numberSystem-" + numberNumberingSystem( cldr ), + "standard" + ]); +}; + + + + +function validateDigits( properties ) { + var minimumIntegerDigits = properties[ 2 ], + minimumFractionDigits = properties[ 3 ], + maximumFractionDigits = properties[ 4 ], + minimumSignificantDigits = properties[ 5 ], + maximumSignificantDigits = properties[ 6 ]; + + // Validate significant digit format properties + if ( !isNaN( minimumSignificantDigits * maximumSignificantDigits ) ) { + validateParameterRange( minimumSignificantDigits, "minimumSignificantDigits", 1, 21 ); + validateParameterRange( maximumSignificantDigits, "maximumSignificantDigits", + minimumSignificantDigits, 21 ); + + } else if ( !isNaN( minimumSignificantDigits ) || !isNaN( maximumSignificantDigits ) ) { + throw new Error( "Neither or both the minimum and maximum significant digits must be " + + "present" ); + + // Validate integer and fractional format + } else { + validateParameterRange( minimumIntegerDigits, "minimumIntegerDigits", 1, 21 ); + validateParameterRange( minimumFractionDigits, "minimumFractionDigits", 0, 20 ); + validateParameterRange( maximumFractionDigits, "maximumFractionDigits", + minimumFractionDigits, 20 ); + } +} + +/** + * .numberFormatter( [options] ) + * + * @options [Object]: + * - style: [String] "decimal" (default) or "percent". + * - see also number/format options. + * + * Return a function that formats a number according to the given options and default/instance + * locale. + */ +Globalize.numberFormatter = +Globalize.prototype.numberFormatter = function( options ) { + var args, cldr, fnArgs, pattern, properties, returnFn; + + validateParameterTypePlainObject( options, "options" ); + + options = options || {}; + cldr = this.cldr; + + args = [ options ]; + + validateDefaultLocale( cldr ); + + cldr.on( "get", validateCldr ); + + if ( options.raw ) { + pattern = options.raw; + } else { + pattern = numberPattern( options.style || "decimal", cldr ); + } + + properties = numberFormatProperties( pattern, cldr, options ); + fnArgs = [ properties ]; + + cldr.off( "get", validateCldr ); + + validateDigits( properties ); + + if ( options.compact ) { + fnArgs.push( this.pluralGenerator() ); + } + returnFn = numberFormatterFn.apply( null, fnArgs ); + runtimeBind( args, cldr, returnFn, fnArgs ); + + return returnFn; +}; + +/** + * .numberParser( [options] ) + * + * @options [Object]: + * - style: [String] "decimal" (default) or "percent". + * + * Return the number parser according to the default/instance locale. + */ +Globalize.numberParser = +Globalize.prototype.numberParser = function( options ) { + var args, cldr, pattern, properties, returnFn; + + validateParameterTypePlainObject( options, "options" ); + + options = options || {}; + cldr = this.cldr; + + args = [ options ]; + + validateDefaultLocale( cldr ); + if ( options.compact ) { + throw createErrorUnsupportedFeature({ + feature: "compact number parsing (not implemented)" + }); + } + + cldr.on( "get", validateCldr ); + + if ( options.raw ) { + pattern = options.raw; + } else { + pattern = numberPattern( options.style || "decimal", cldr ); + } + + properties = numberParseProperties( pattern, cldr, options ); + + cldr.off( "get", validateCldr ); + + returnFn = numberParserFn( properties ); + + runtimeBind( args, cldr, returnFn, [ properties ] ); + + return returnFn; +}; + +/** + * .formatNumber( value [, options] ) + * + * @value [Number] number to be formatted. + * + * @options [Object]: see number/format-properties. + * + * Format a number according to the given options and default/instance locale. + */ +Globalize.formatNumber = +Globalize.prototype.formatNumber = function( value, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + + return this.numberFormatter( options )( value ); +}; + +/** + * .parseNumber( value [, options] ) + * + * @value [String] + * + * @options [Object]: See numberParser(). + * + * Return the parsed Number (including Infinity) or NaN when value is invalid. + */ +Globalize.parseNumber = +Globalize.prototype.parseNumber = function( value, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeString( value, "value" ); + + return this.numberParser( options )( value ); +}; + +/** + * Optimization to avoid duplicating some internal functions across modules. + */ +Globalize._createErrorUnsupportedFeature = createErrorUnsupportedFeature; +Globalize._numberNumberingSystem = numberNumberingSystem; +Globalize._numberNumberingSystemDigitsMap = numberNumberingSystemDigitsMap; +Globalize._numberPattern = numberPattern; +Globalize._numberSymbol = numberSymbol; +Globalize._looseMatching = looseMatching; +Globalize._removeLiteralQuotes = removeLiteralQuotes; +Globalize._stringPad = stringPad; +Globalize._validateParameterTypeNumber = validateParameterTypeNumber; +Globalize._validateParameterTypeString = validateParameterTypeString; + +return Globalize; + + + + +})); diff --git a/node_modules/globalize/dist/globalize/plural.js b/node_modules/globalize/dist/globalize/plural.js new file mode 100644 index 00000000..d56469a9 --- /dev/null +++ b/node_modules/globalize/dist/globalize/plural.js @@ -0,0 +1,373 @@ +/** + * Globalize v1.4.2 + * + * http://github.com/jquery/globalize + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2019-03-07T13:47Z + */ +/*! + * Globalize v1.4.2 2019-03-07T13:47Z Released under the MIT license + * http://git.io/TrdQbw + */ +(function( root, factory ) { + + // UMD returnExports + if ( typeof define === "function" && define.amd ) { + + // AMD + define([ + "cldr", + "../globalize", + "cldr/event", + "cldr/supplemental" + ], factory ); + } else if ( typeof exports === "object" ) { + + // Node, CommonJS + module.exports = factory( require( "cldrjs" ), require( "../globalize" ) ); + } else { + + // Global + factory( root.Cldr, root.Globalize ); + } +}(this, function( Cldr, Globalize ) { + +var runtimeBind = Globalize._runtimeBind, + validateCldr = Globalize._validateCldr, + validateDefaultLocale = Globalize._validateDefaultLocale, + validateParameterPresence = Globalize._validateParameterPresence, + validateParameterType = Globalize._validateParameterType, + validateParameterTypePlainObject = Globalize._validateParameterTypePlainObject; +var MakePlural; +/* jshint ignore:start */ +MakePlural = (function() { +'use strict'; + +var _toArray = function (arr) { return Array.isArray(arr) ? arr : Array.from(arr); }; + +var _toConsumableArray = function (arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } }; + +var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }; + +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + + +/** + * make-plural.js -- https://github.com/eemeli/make-plural.js/ + * Copyright (c) 2014-2015 by Eemeli Aro + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * The software is provided "as is" and the author disclaims all warranties + * with regard to this software including all implied warranties of + * merchantability and fitness. In no event shall the author be liable for + * any special, direct, indirect, or consequential damages or any damages + * whatsoever resulting from loss of use, data or profits, whether in an + * action of contract, negligence or other tortious action, arising out of + * or in connection with the use or performance of this software. + */ + +var Parser = (function () { + function Parser() { + _classCallCheck(this, Parser); + } + + _createClass(Parser, [{ + key: 'parse', + value: function parse(cond) { + var _this = this; + + if (cond === 'i = 0 or n = 1') { + return 'n >= 0 && n <= 1'; + }if (cond === 'i = 0,1') { + return 'n >= 0 && n < 2'; + }if (cond === 'i = 1 and v = 0') { + this.v0 = 1; + return 'n == 1 && v0'; + } + return cond.replace(/([tv]) (!?)= 0/g, function (m, sym, noteq) { + var sn = sym + '0'; + _this[sn] = 1; + return noteq ? '!' + sn : sn; + }).replace(/\b[fintv]\b/g, function (m) { + _this[m] = 1; + return m; + }).replace(/([fin]) % (10+)/g, function (m, sym, num) { + var sn = sym + num; + _this[sn] = 1; + return sn; + }).replace(/n10+ = 0/g, 't0 && $&').replace(/(\w+ (!?)= )([0-9.]+,[0-9.,]+)/g, function (m, se, noteq, x) { + if (m === 'n = 0,1') return '(n == 0 || n == 1)'; + if (noteq) return se + x.split(',').join(' && ' + se); + return '(' + se + x.split(',').join(' || ' + se) + ')'; + }).replace(/(\w+) (!?)= ([0-9]+)\.\.([0-9]+)/g, function (m, sym, noteq, x0, x1) { + if (Number(x0) + 1 === Number(x1)) { + if (noteq) return '' + sym + ' != ' + x0 + ' && ' + sym + ' != ' + x1; + return '(' + sym + ' == ' + x0 + ' || ' + sym + ' == ' + x1 + ')'; + } + if (noteq) return '(' + sym + ' < ' + x0 + ' || ' + sym + ' > ' + x1 + ')'; + if (sym === 'n') { + _this.t0 = 1;return '(t0 && n >= ' + x0 + ' && n <= ' + x1 + ')'; + } + return '(' + sym + ' >= ' + x0 + ' && ' + sym + ' <= ' + x1 + ')'; + }).replace(/ and /g, ' && ').replace(/ or /g, ' || ').replace(/ = /g, ' == '); + } + }, { + key: 'vars', + value: (function (_vars) { + function vars() { + return _vars.apply(this, arguments); + } + + vars.toString = function () { + return _vars.toString(); + }; + + return vars; + })(function () { + var vars = []; + if (this.i) vars.push('i = s[0]'); + if (this.f || this.v) vars.push('f = s[1] || \'\''); + if (this.t) vars.push('t = (s[1] || \'\').replace(/0+$/, \'\')'); + if (this.v) vars.push('v = f.length'); + if (this.v0) vars.push('v0 = !s[1]'); + if (this.t0 || this.n10 || this.n100) vars.push('t0 = Number(s[0]) == n'); + for (var k in this) { + if (/^.10+$/.test(k)) { + var k0 = k[0] === 'n' ? 't0 && s[0]' : k[0]; + vars.push('' + k + ' = ' + k0 + '.slice(-' + k.substr(2).length + ')'); + } + }if (!vars.length) return ''; + return 'var ' + ['s = String(n).split(\'.\')'].concat(vars).join(', '); + }) + }]); + + return Parser; +})(); + + + +var MakePlural = (function () { + function MakePlural(lc) { + var _ref = arguments[1] === undefined ? MakePlural : arguments[1]; + + var cardinals = _ref.cardinals; + var ordinals = _ref.ordinals; + + _classCallCheck(this, MakePlural); + + if (!cardinals && !ordinals) throw new Error('At least one type of plural is required'); + this.lc = lc; + this.categories = { cardinal: [], ordinal: [] }; + this.parser = new Parser(); + + this.fn = this.buildFunction(cardinals, ordinals); + this.fn._obj = this; + this.fn.categories = this.categories; + + this.fn.toString = this.fnToString.bind(this); + return this.fn; + } + + _createClass(MakePlural, [{ + key: 'compile', + value: function compile(type, req) { + var cases = []; + var rules = MakePlural.rules[type][this.lc]; + if (!rules) { + if (req) throw new Error('Locale "' + this.lc + '" ' + type + ' rules not found'); + this.categories[type] = ['other']; + return '\'other\''; + } + for (var r in rules) { + var _rules$r$trim$split = rules[r].trim().split(/\s*@\w*/); + + var _rules$r$trim$split2 = _toArray(_rules$r$trim$split); + + var cond = _rules$r$trim$split2[0]; + var examples = _rules$r$trim$split2.slice(1); + var cat = r.replace('pluralRule-count-', ''); + if (cond) cases.push([this.parser.parse(cond), cat]); + + } + this.categories[type] = cases.map(function (c) { + return c[1]; + }).concat('other'); + if (cases.length === 1) { + return '(' + cases[0][0] + ') ? \'' + cases[0][1] + '\' : \'other\''; + } else { + return [].concat(_toConsumableArray(cases.map(function (c) { + return '(' + c[0] + ') ? \'' + c[1] + '\''; + })), ['\'other\'']).join('\n : '); + } + } + }, { + key: 'buildFunction', + value: function buildFunction(cardinals, ordinals) { + var _this3 = this; + + var compile = function compile(c) { + return c ? (c[1] ? 'return ' : 'if (ord) return ') + _this3.compile.apply(_this3, _toConsumableArray(c)) : ''; + }, + fold = { vars: function vars(str) { + return (' ' + str + ';').replace(/(.{1,78})(,|$) ?/g, '$1$2\n '); + }, + cond: function cond(str) { + return (' ' + str + ';').replace(/(.{1,78}) (\|\| |$) ?/gm, '$1\n $2'); + } }, + cond = [ordinals && ['ordinal', !cardinals], cardinals && ['cardinal', true]].map(compile).map(fold.cond), + body = [fold.vars(this.parser.vars())].concat(_toConsumableArray(cond)).join('\n').replace(/\s+$/gm, '').replace(/^[\s;]*[\r\n]+/gm, ''), + args = ordinals && cardinals ? 'n, ord' : 'n'; + return new Function(args, body); + } + }, { + key: 'fnToString', + value: function fnToString(name) { + return Function.prototype.toString.call(this.fn).replace(/^function( \w+)?/, name ? 'function ' + name : 'function').replace('\n/**/', ''); + } + }], [{ + key: 'load', + value: function load() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + args.forEach(function (cldr) { + var data = cldr && cldr.supplemental || null; + if (!data) throw new Error('Data does not appear to be CLDR data'); + MakePlural.rules = { + cardinal: data['plurals-type-cardinal'] || MakePlural.rules.cardinal, + ordinal: data['plurals-type-ordinal'] || MakePlural.rules.ordinal + }; + }); + return MakePlural; + } + }]); + + return MakePlural; +})(); + + + +MakePlural.cardinals = true; +MakePlural.ordinals = false; +MakePlural.rules = { cardinal: {}, ordinal: {} }; + + +return MakePlural; +}()); +/* jshint ignore:end */ + + +var validateParameterTypeNumber = function( value, name ) { + validateParameterType( + value, + name, + value === undefined || typeof value === "number", + "Number" + ); +}; + + + + +var validateParameterTypePluralType = function( value, name ) { + validateParameterType( + value, + name, + value === undefined || value === "cardinal" || value === "ordinal", + "String \"cardinal\" or \"ordinal\"" + ); +}; + + + + +var pluralGeneratorFn = function( plural ) { + return function pluralGenerator( value ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + + return plural( value ); + }; +}; + + + + +/** + * .plural( value ) + * + * @value [Number] + * + * Return the corresponding form (zero | one | two | few | many | other) of a + * value given locale. + */ +Globalize.plural = +Globalize.prototype.plural = function( value, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + return this.pluralGenerator( options )( value ); +}; + +/** + * .pluralGenerator( [options] ) + * + * Return a plural function (of the form below). + * + * fn( value ) + * + * @value [Number] + * + * Return the corresponding form (zero | one | two | few | many | other) of a value given the + * default/instance locale. + */ +Globalize.pluralGenerator = +Globalize.prototype.pluralGenerator = function( options ) { + var args, cldr, isOrdinal, plural, returnFn, type; + + validateParameterTypePlainObject( options, "options" ); + + options = options || {}; + cldr = this.cldr; + + args = [ options ]; + type = options.type || "cardinal"; + + validateParameterTypePluralType( options.type, "options.type" ); + + validateDefaultLocale( cldr ); + + isOrdinal = type === "ordinal"; + + cldr.on( "get", validateCldr ); + cldr.supplemental([ "plurals-type-" + type, "{language}" ]); + cldr.off( "get", validateCldr ); + + MakePlural.rules = {}; + MakePlural.rules[ type ] = cldr.supplemental( "plurals-type-" + type ); + + plural = new MakePlural( cldr.attributes.language, { + "ordinals": isOrdinal, + "cardinals": !isOrdinal + }); + + returnFn = pluralGeneratorFn( plural ); + + runtimeBind( args, cldr, returnFn, [ plural ] ); + + return returnFn; +}; + +return Globalize; + + + + +})); diff --git a/node_modules/globalize/dist/globalize/relative-time.js b/node_modules/globalize/dist/globalize/relative-time.js new file mode 100644 index 00000000..d04aa177 --- /dev/null +++ b/node_modules/globalize/dist/globalize/relative-time.js @@ -0,0 +1,201 @@ +/** + * Globalize v1.4.2 + * + * http://github.com/jquery/globalize + * + * Copyright 2010, 2014 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2019-03-07T13:47Z + */ +/*! + * Globalize v1.4.2 2019-03-07T13:47Z Released under the MIT license + * http://git.io/TrdQbw + */ +(function( root, factory ) { + + // UMD returnExports + if ( typeof define === "function" && define.amd ) { + + // AMD + define([ + "cldr", + "../globalize", + "./number", + "./plural", + "cldr/event", + "cldr/supplemental" + ], factory ); + } else if ( typeof exports === "object" ) { + + // Node, CommonJS + module.exports = factory( require( "cldrjs" ), require( "../globalize" ) ); + } else { + + // Extend global + factory( root.Cldr, root.Globalize ); + } +}(this, function( Cldr, Globalize ) { + +var formatMessage = Globalize._formatMessage, + runtimeBind = Globalize._runtimeBind, + validateCldr = Globalize._validateCldr, + validateDefaultLocale = Globalize._validateDefaultLocale, + validateParameterPresence = Globalize._validateParameterPresence, + validateParameterTypeString = Globalize._validateParameterTypeString, + validateParameterTypeNumber = Globalize._validateParameterTypeNumber; + + +/** + * format( value, numberFormatter, pluralGenerator, properties ) + * + * @value [Number] The number to format + * + * @numberFormatter [String] A numberFormatter from Globalize.numberFormatter + * + * @pluralGenerator [String] A pluralGenerator from Globalize.pluralGenerator + * + * @properties [Object] containing relative time plural message. + * + * Format relative time. + */ +var relativeTimeFormat = function( value, numberFormatter, pluralGenerator, properties ) { + + var relativeTime, + message = properties[ "relative-type-" + value ]; + + if ( message ) { + return message; + } + + relativeTime = value <= 0 ? properties[ "relativeTime-type-past" ] + : properties[ "relativeTime-type-future" ]; + + value = Math.abs( value ); + + message = relativeTime[ "relativeTimePattern-count-" + pluralGenerator( value ) ]; + return formatMessage( message, [ numberFormatter( value ) ] ); +}; + + + + +var relativeTimeFormatterFn = function( numberFormatter, pluralGenerator, properties ) { + return function relativeTimeFormatter( value ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + + return relativeTimeFormat( value, numberFormatter, pluralGenerator, properties ); + }; + +}; + + + + +/** + * properties( unit, cldr, options ) + * + * @unit [String] eg. "day", "week", "month", etc. + * + * @cldr [Cldr instance]. + * + * @options [Object] + * - form: [String] eg. "short" or "narrow". Or falsy for default long form. + * + * Return relative time properties. + */ +var relativeTimeProperties = function( unit, cldr, options ) { + + var form = options.form, + raw, properties, key, match; + + if ( form ) { + unit = unit + "-" + form; + } + + raw = cldr.main( [ "dates", "fields", unit ] ); + properties = { + "relativeTime-type-future": raw[ "relativeTime-type-future" ], + "relativeTime-type-past": raw[ "relativeTime-type-past" ] + }; + for ( key in raw ) { + if ( raw.hasOwnProperty( key ) ) { + match = /relative-type-(-?[0-9]+)/.exec( key ); + if ( match ) { + properties[ key ] = raw[ key ]; + } + } + } + + return properties; +}; + + + + +/** + * .formatRelativeTime( value, unit [, options] ) + * + * @value [Number] The number of unit to format. + * + * @unit [String] see .relativeTimeFormatter() for details. + * + * @options [Object] see .relativeTimeFormatter() for details. + * + * Formats a relative time according to the given unit, options, and the default/instance locale. + */ +Globalize.formatRelativeTime = +Globalize.prototype.formatRelativeTime = function( value, unit, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + + return this.relativeTimeFormatter( unit, options )( value ); +}; + +/** + * .relativeTimeFormatter( unit [, options ]) + * + * @unit [String] String value indicating the unit to be formatted. eg. "day", "week", "month", etc. + * + * @options [Object] + * - form: [String] eg. "short" or "narrow". Or falsy for default long form. + * + * Returns a function that formats a relative time according to the given unit, options, and the + * default/instance locale. + */ +Globalize.relativeTimeFormatter = +Globalize.prototype.relativeTimeFormatter = function( unit, options ) { + var args, cldr, numberFormatter, pluralGenerator, properties, returnFn; + + validateParameterPresence( unit, "unit" ); + validateParameterTypeString( unit, "unit" ); + + cldr = this.cldr; + options = options || {}; + + args = [ unit, options ]; + + validateDefaultLocale( cldr ); + + cldr.on( "get", validateCldr ); + properties = relativeTimeProperties( unit, cldr, options ); + cldr.off( "get", validateCldr ); + + numberFormatter = this.numberFormatter( options ); + pluralGenerator = this.pluralGenerator(); + + returnFn = relativeTimeFormatterFn( numberFormatter, pluralGenerator, properties ); + + runtimeBind( args, cldr, returnFn, [ numberFormatter, pluralGenerator, properties ] ); + + return returnFn; +}; + +return Globalize; + + + + +})); diff --git a/node_modules/globalize/dist/globalize/unit.js b/node_modules/globalize/dist/globalize/unit.js new file mode 100644 index 00000000..f7522f5f --- /dev/null +++ b/node_modules/globalize/dist/globalize/unit.js @@ -0,0 +1,301 @@ +/** + * Globalize v1.4.2 + * + * http://github.com/jquery/globalize + * + * Copyright 2010, 2014 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2019-03-07T13:47Z + */ +/*! + * Globalize v1.4.2 2019-03-07T13:47Z Released under the MIT license + * http://git.io/TrdQbw + */ +(function( root, factory ) { + + // UMD returnExports + if ( typeof define === "function" && define.amd ) { + + // AMD + define([ + "cldr", + "../globalize", + "./number", + "./plural" + ], factory ); + } else if ( typeof exports === "object" ) { + + // Node, CommonJS + module.exports = factory( require( "cldrjs" ), require( "../globalize" ) ); + } else { + + // Extend global + factory( root.Cldr, root.Globalize ); + } +}(this, function( Cldr, Globalize ) { + +var formatMessage = Globalize._formatMessage, + runtimeBind = Globalize._runtimeBind, + validateParameterPresence = Globalize._validateParameterPresence, + validateParameterTypePlainObject = Globalize._validateParameterTypePlainObject, + validateParameterTypeNumber = Globalize._validateParameterTypeNumber, + validateParameterTypeString = Globalize._validateParameterTypeString; + + +/** + * format( value, numberFormatter, pluralGenerator, unitProperies ) + * + * @value [Number] + * + * @numberFormatter [Object]: A numberFormatter from Globalize.numberFormatter. + * + * @pluralGenerator [Object]: A pluralGenerator from Globalize.pluralGenerator. + * + * @unitProperies [Object]: localized unit data from cldr. + * + * Format units such as seconds, minutes, days, weeks, etc. + * + * OBS: + * + * Unit Sequences are not implemented. + * http://www.unicode.org/reports/tr35/tr35-35/tr35-general.html#Unit_Sequences + * + * Duration Unit (for composed time unit durations) is not implemented. + * http://www.unicode.org/reports/tr35/tr35-35/tr35-general.html#durationUnit + */ +var unitFormat = function( value, numberFormatter, pluralGenerator, unitProperties ) { + var compoundUnitPattern = unitProperties.compoundUnitPattern, dividend, dividendProperties, + formattedValue, divisor, divisorProperties, message, pluralValue, oneProperty; + + unitProperties = unitProperties.unitProperties; + formattedValue = numberFormatter( value ); + pluralValue = pluralGenerator( value ); + + // computed compound unit, eg. "megabyte-per-second". + if ( unitProperties instanceof Array ) { + dividendProperties = unitProperties[ 0 ]; + divisorProperties = unitProperties[ 1 ]; + oneProperty = divisorProperties.hasOwnProperty( "one" ) ? "one" : "other"; + + dividend = formatMessage( dividendProperties[ pluralValue ], [ formattedValue ] ); + divisor = formatMessage( divisorProperties[oneProperty], [ "" ] ).trim(); + + return formatMessage( compoundUnitPattern, [ dividend, divisor ] ); + } + + message = unitProperties[ pluralValue ]; + + return formatMessage( message, [ formattedValue ] ); +}; + + + + +var unitFormatterFn = function( numberFormatter, pluralGenerator, unitProperties ) { + return function unitFormatter( value ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + + return unitFormat( value, numberFormatter, pluralGenerator, unitProperties ); + }; + +}; + + + + +/** + * categories() + * + * Return all unit categories. + */ +var unitCategories = [ "acceleration", "angle", "area", "digital", "duration", "length", "mass", "power", +"pressure", "speed", "temperature", "volume" ]; + + + + +function stripPluralGarbage( data ) { + var aux, pluralCount; + + if ( data ) { + aux = {}; + for ( pluralCount in data ) { + aux[ pluralCount.replace( /unitPattern-count-/, "" ) ] = data[ pluralCount ]; + } + } + + return aux; +} + +/** + * get( unit, form, cldr ) + * + * @unit [String] The full type-unit name (eg. duration-second), or the short unit name + * (eg. second). + * + * @form [String] A string describing the form of the unit representation (eg. long, + * short, narrow). + * + * @cldr [Cldr instance]. + * + * Return the plural map of a unit, eg: "second" + * { "one": "{0} second", + * "other": "{0} seconds" } + * } + * + * Or the Array of plural maps of a compound-unit, eg: "foot-per-second" + * [ { "one": "{0} foot", + * "other": "{0} feet" }, + * { "one": "{0} second", + * "other": "{0} seconds" } ] + * + * Uses the precomputed form of a compound-unit if available, eg: "mile-per-hour" + * { "displayName": "miles per hour", + * "unitPattern-count-one": "{0} mile per hour", + * "unitPattern-count-other": "{0} miles per hour" + * }, + * + * Also supports "/" instead of "-per-", eg. "foot/second", using the precomputed form if + * available. + * + * Or the Array of plural maps of a compound-unit, eg: "foot-per-second" + * [ { "one": "{0} foot", + * "other": "{0} feet" }, + * { "one": "{0} second", + * "other": "{0} seconds" } ] + * + * Or undefined in case the unit (or a unit of the compound-unit) doesn't exist. + */ +var get = function( unit, form, cldr ) { + var ret; + + // Ensure that we get the 'precomputed' form, if present. + unit = unit.replace( /\//, "-per-" ); + + // Get unit or -unit (eg. "duration-second"). + [ "" ].concat( unitCategories ).some(function( category ) { + return ret = cldr.main([ + "units", + form, + category.length ? category + "-" + unit : unit + ]); + }); + + // Rename keys s/unitPattern-count-//g. + ret = stripPluralGarbage( ret ); + + // Compound Unit, eg. "foot-per-second" or "foot/second". + if ( !ret && ( /-per-/ ).test( unit ) ) { + + // "Some units already have 'precomputed' forms, such as kilometer-per-hour; + // where such units exist, they should be used in preference" UTS#35. + // Note that precomputed form has already been handled above (!ret). + + // Get both recursively. + unit = unit.split( "-per-" ); + ret = unit.map(function( unit ) { + return get( unit, form, cldr ); + }); + if ( !ret[ 0 ] || !ret[ 1 ] ) { + return; + } + } + + return ret; +}; + +var unitGet = get; + + + + +/** + * properties( unit, form, cldr ) + * + * @unit [String] The full type-unit name (eg. duration-second), or the short unit name + * (eg. second). + * + * @form [String] A string describing the form of the unit representation (eg. long, + * short, narrow). + * + * @cldr [Cldr instance]. + */ +var unitProperties = function( unit, form, cldr ) { + var compoundUnitPattern, unitProperties; + + compoundUnitPattern = cldr.main( [ "units", form, "per/compoundUnitPattern" ] ); + unitProperties = unitGet( unit, form, cldr ); + + return { + compoundUnitPattern: compoundUnitPattern, + unitProperties: unitProperties + }; +}; + + + + +/** + * Globalize.formatUnit( value, unit, options ) + * + * @value [Number] + * + * @unit [String]: The unit (e.g "second", "day", "year") + * + * @options [Object] + * - form: [String] "long", "short" (default), or "narrow". + * + * Format units such as seconds, minutes, days, weeks, etc. + */ +Globalize.formatUnit = +Globalize.prototype.formatUnit = function( value, unit, options ) { + validateParameterPresence( value, "value" ); + validateParameterTypeNumber( value, "value" ); + + return this.unitFormatter( unit, options )( value ); +}; + +/** + * Globalize.unitFormatter( unit, options ) + * + * @unit [String]: The unit (e.g "second", "day", "year") + * + * @options [Object] + * - form: [String] "long", "short" (default), or "narrow". + * + * - numberFormatter: [Function] a number formatter function. Defaults to Globalize + * `.numberFormatter()` for the current locale using the default options. + */ +Globalize.unitFormatter = +Globalize.prototype.unitFormatter = function( unit, options ) { + var args, form, numberFormatter, pluralGenerator, returnFn, properties; + + validateParameterPresence( unit, "unit" ); + validateParameterTypeString( unit, "unit" ); + + validateParameterTypePlainObject( options, "options" ); + + options = options || {}; + + args = [ unit, options ]; + form = options.form || "long"; + properties = unitProperties( unit, form, this.cldr ); + + numberFormatter = options.numberFormatter || this.numberFormatter(); + pluralGenerator = this.pluralGenerator(); + returnFn = unitFormatterFn( numberFormatter, pluralGenerator, properties ); + + runtimeBind( args, this.cldr, returnFn, [ numberFormatter, pluralGenerator, properties ] ); + + return returnFn; +}; + +return Globalize; + + + + +})); diff --git a/node_modules/globalize/dist/node-main.js b/node_modules/globalize/dist/node-main.js new file mode 100644 index 00000000..fbcb6eda --- /dev/null +++ b/node_modules/globalize/dist/node-main.js @@ -0,0 +1,27 @@ +/*! + * Globalize v1.4.2 + * + * http://github.com/jquery/globalize + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2019-03-07T13:47Z + */ + +// Core +module.exports = require( "./globalize" ); + +// Extent core with the following modules +require( "./globalize/message" ); +require( "./globalize/number" ); +require( "./globalize/plural" ); + +// Load after globalize/number +require( "./globalize/currency" ); +require( "./globalize/date" ); + +// Load after globalize/number and globalize/plural +require( "./globalize/relative-time" ); +require( "./globalize/unit" ); diff --git a/node_modules/globalize/doc/api/core/constructor.md b/node_modules/globalize/doc/api/core/constructor.md new file mode 100644 index 00000000..cbc9147f --- /dev/null +++ b/node_modules/globalize/doc/api/core/constructor.md @@ -0,0 +1,28 @@ +## [new] Globalize( locale|cldr ) + +Create a Globalize instance. + +### Parameters + +#### locale|cldr + +Locale string or [Cldr instance](https://github.com/rxaviers/cldrjs) of the instance. + +### Example + +Prior to creating any Globalize instance, you must load `cldr/supplemental/likelySubtags.json`. Read [CLDR content][] if you need more information. + +[CLDR content]: ../../../README.md#2-cldr-content + +```javascript +var en = new Globalize( "en" ); + +// You can optionally omit the `new` operator. +var pt = Globalize( "pt" ); + +en.formatNumber( 3.1415 ); +// > 3.142 + +pt.formatNumber( 3.1415 ); +// > 3,142 +``` diff --git a/node_modules/globalize/doc/api/core/load.md b/node_modules/globalize/doc/api/core/load.md new file mode 100644 index 00000000..ae9ed260 --- /dev/null +++ b/node_modules/globalize/doc/api/core/load.md @@ -0,0 +1,96 @@ +## Globalize.load( cldrJSONData, ... ) + +This method allows you to load CLDR JSON locale data. `Globalize.load()` is a proxy to `Cldr.load()`. + +This method can be called as many time as needed. All passed JSON objects are deeply merged internally. + +For more information, see https://github.com/rxaviers/cldrjs#readme. + +### Parameters + +#### cldrJSONData + +A JSON object with CLDR data. See [Getting Started](#../../../README.md#2-cldr-content) for more information. + +### Example + +```javascript +Globalize.load({ + "main": { + "en": { + "identity": { + "version": { + "_cldrVersion": "25", + "_number": "$Revision: 91 $" + }, + "generation": { + "_date": "$Date: 2014-03-13 22:27:12 -0500 (Thu, 13 Mar 2014) $" + }, + "language": "en" + }, + "dates": { + "calendars": { + "gregorian": { + "months": { + "format": { + "abbreviated": { + "1": "Jan", + "2": "Feb", + "3": "Mar", + "4": "Apr", + "5": "May", + "6": "Jun", + "7": "Jul", + "8": "Aug", + "9": "Sep", + "10": "Oct", + "11": "Nov", + "12": "Dec" + } + } + }, + "dayPeriods": { + "format": { + "wide": { + "am": "AM", + "am-alt-variant": "am", + "noon": "noon", + "pm": "PM", + "pm-alt-variant": "pm" + } + } + }, + "dateFormats": { + "medium": "MMM d, y" + }, + "timeFormats": { + "medium": "h:mm:ss a", + }, + "dateTimeFormats": { + "medium": "{1}, {0}" + } + } + } + }, + "numbers": { + "defaultNumberingSystem": "latn", + "symbols-numberSystem-latn": { + "group": "," + }, + "decimalFormats-numberSystem-latn": { + "standard": "#,##0.###" + } + } + } + }, + "supplemental": { + "version": { + "_cldrVersion": "25", + "_number": "$Revision: 91 $" + }, + "likelySubtags": { + "en": "en-Latn-US", + } + } +}); +``` diff --git a/node_modules/globalize/doc/api/core/locale.md b/node_modules/globalize/doc/api/core/locale.md new file mode 100644 index 00000000..8deb1b2d --- /dev/null +++ b/node_modules/globalize/doc/api/core/locale.md @@ -0,0 +1,43 @@ +## Globalize.locale( [locale|cldr] ) + +Set default locale, or get it if locale argument is omitted. + +Return the default [Cldr instance](https://github.com/rxaviers/cldrjs). + +An application that supports globalization and/or localization will need to have a way to determine the user's preference. Attempting to automatically determine the appropriate locale is useful, but it is good practice to always offer the user a choice, by whatever means. + +Whatever your mechanism, it is likely that you will have to correlate the user's preferences with the list of locale data supported in the app. This method allows you to select the best match given the locale data that you have included and to set the Globalize locale to the one which the user prefers. + +LanguageMatching TBD (CLDR's spec http://www.unicode.org/reports/tr35/#LanguageMatching). + +### Parameters + +#### locale|cldr + +- The locale string, e.g., `"en"`, `"pt-BR"`, or `"zh-Hant-TW"`. Or, +- The [Cldr instance](https://github.com/rxaviers/cldrjs), e.g., new `Cldr( "en" )`. + +### Example + +Prior to using this function, you must load `cldr/supplemental/likelySubtags.json`. Read [CLDR content][] if you need more information. + +[CLDR content]: ../../../README.md#2-cldr-content + +```javascript +// Set "pt" as our default locale. +Globalize.locale( "pt" ); + +// Get default locale. +Globalize.locale(); +// > { +// attributes: { +// "languageId": "pt", +// "maxLanguageId": "pt_Latn_BR", +// "language": "pt", +// "script": "Latn", +// "territory": "BR", +// "region": "BR" +// }, +// some more stuff... +// } +``` diff --git a/node_modules/globalize/doc/api/currency/currency-formatter.md b/node_modules/globalize/doc/api/currency/currency-formatter.md new file mode 100644 index 00000000..41ea0c0f --- /dev/null +++ b/node_modules/globalize/doc/api/currency/currency-formatter.md @@ -0,0 +1,196 @@ +## .currencyFormatter( currency [, options] ) ➜ function( value ) + +Return a function that formats a `currency` according to the given `options` or locale's defaults. + +The returned function is invoked with one argument: the Number `value` to be formatted. + +### Parameters + +#### currency + +3-letter currency code as defined by ISO 4217, eg. `"USD"`. + +#### options.style + +Optional. String `"symbol"` (default), `"accounting"`, `"code"` or `"name"`. See [`.numberFormatter( [options] )`](../number/number-formatter.md) for more options. + +#### value + +Number to be formatted, eg. `9.99`. + +### Example + +#### Static Formatter + +Prior to using any currency methods, you must load `cldr/main/{locale}/currencies.json`, `cldr/supplemental/currencyData.json`, and the CLDR content required by the number module. If using plural messages, you also must load the CLDR content required by the plural module. Read [CLDR content][] if you need more information. + +[CLDR content]: ../../../README.md#2-cldr-content + +#### Using the default options + +You can use the static method `Globalize.currencyFormatter()`, which uses the default locale. + +```javascript +var formatter; + +Globalize.locale( "en" ); +formatter = Globalize.currencyFormatter( "USD" ); + +formatter( 9.99 ); +// > "$9.99" +``` + +#### Instance Formatter + +You can use the instance method `.currencyFormatter()`, which uses the instance locale. + +```javascript +var deFormatter = Globalize( "de" ).currencyFormatter( "EUR" ), + zhFormatter = Globalize( "zh" ).currencyFormatter( "EUR" ); + +deFormatter( 9.99 ); +// > "9,99 €" + +zhFormatter( 9.99 ); +// > "€ 9.99" + +``` + +For comparison, follow the formatting output of different symbols in different locales. + +| 3-letter currency code | en (English) | de (German) | zh (Chinese) | +| ---------------------------------- | ------------ | ----------- | ------------ | +| `.currencyFormatter( "USD" )( 1 )` | `$1.00` | `1,00 $` | `US$ 1.00` | +| `.currencyFormatter( "EUR" )( 1 )` | `€1.00` | `1,00 €` | `€ 1.00` | +| `.currencyFormatter( "CNY" )( 1 )` | `CN¥1.00` | `1,00 CN¥` | `¥ 1.00` | +| `.currencyFormatter( "JPY" )( 1 )` | `¥1` | `1 ¥` | `JP¥ 1` | +| `.currencyFormatter( "GBP" )( 1 )` | `£1.00` | `1,00 £` | `£ 1.00` | +| `.currencyFormatter( "BRL" )( 1 )` | `R$1.00` | `1,00 R$` | `R$ 1.00` | + +#### Using alternative `options.symbolForm` + +Using the narrow symbol form, the same symbols may be used for multiple currencies. Thus the symbol may be ambiguous, and should only be used where the context is clear. + +```js +Globalize( "en" ).currencyFormatter( "HKD" )( 1 ); +// > "HK$1.00" + +Globalize( "en" ).currencyFormatter( "HKD", { symbolForm: "narrow" } )( 1 ); +// > "$1.00" +``` + +#### Configuring style + +For the accounting variation of the symbol format, use `style: "accounting"`. + +```javascript +var formatter = Globalize( "en" ).currencyFormatter( "USD", { + style: "accounting" +}); + +formatter( -1 ); +// > "($1.00)" +``` + +For plural messages, use `style: "name"`. + +```javascript +var formatter = Globalize( "en" ).currencyFormatter( "USD", { + style: "name" +}); + +formatter( 0 ); +// > "0.00 US dollars" + +formatter( 1 ); +// > "1.00 US dollar" +``` + +For comparison, follow the formatting output of different symbols in different locales using the plural messages `Globalize( locale ).currencyFormatter( currency, { style: "name" } )( 1 )`. + +| 3-letter currency code | en (English) | de (German) | zh (Chinese) | +| ---------------------- | ----------------------------- | -------------------------------- | ------------ | +| `USD` | `1.00 US dollar` | `1,00 US-Dollar` | `1.00美元` | +| `EUR` | `1.00 euro` | `1,00 Euro` | `1.00欧元` | +| `CNY` | `1.00 Chinese yuan` | `1,00 Chinesischer Yuan` | `1.00人民币` | +| `JPY` | `1 Japanese yen` | `1 Japanischer Yen` | `1日元` | +| `GBP` | `1.00 British pound sterling` | `1,00 Britisches Pfund Sterling` | `1.00英镑` | +| `BRL` | `1.00 Brazilian real` | `1,00 Brasilianischer Real` | `1.00巴西雷亚尔` | + +For the international currency code, use `style: "code"`. + +```javascript +var formatter = Globalize( "en" ).currencyFormatter( "USD", { + style: "code" +}); + +formatter( 9.99 ); +// > "9.99 USD" +``` + +#### Configuring inherited number options + +Override the number of digits, grouping separators, rounding function or any other [`.numberFormatter()` options](../number/number-formatter.md). + +```javascript +var formatter; + +Globalize.locale( "en" ); +formatter = Globalize.currencyFormatter( "USD", { + minimumFractionDigits: 0, + style: "name" +}); + +formatter( 1 ); +// > "1 US dollar" + +formatter = Globalize.currencyFormatter( "USD", { + round: "ceil" +}); + +formatter( 1.491 ); +// > "$1.50" +``` + +#### Formatting Compact Currencies + +```js +var shortFormatter = Globalize( "en" ).currencyFormatter( "USD", { + compact: "short" +}); + +var longFormatter = Globalize( "en" ).currencyFormatter( "USD", { + compact: "long" +}); + +shortFormatter( 12830000000 ); +// > "$13B" + +longFormatter( 12830000000 ); +// > "$13 billion" +``` + +The minimumSignificantDigits and maximumSignificantDigits options are specially useful to control the number of digits to display. + +```js +Globalize( "en" ).formatCurrency( 12830000000, "USD", { + compact: "short", + minimumSignificantDigits: 3, + maximumSignificantDigits: 3 +}); +// > "$12.8B" +``` + +#### Performance Suggestion + +For improved performance on iterations, first create the formatter. Then, reuse it on each loop. + +```javascript +var formatter = Globalize( "en" ).currencyFormatter( "USD" ); + +renderInvoice({ + prices: prices.map(function( price ) { + return formatter( price ); + }) +}); +``` diff --git a/node_modules/globalize/doc/api/date/date-formatter.md b/node_modules/globalize/doc/api/date/date-formatter.md new file mode 100644 index 00000000..a74cc07a --- /dev/null +++ b/node_modules/globalize/doc/api/date/date-formatter.md @@ -0,0 +1,203 @@ +## .dateFormatter( [options] ) ➜ function( value ) + +Return a function that formats a date according to the given `options`. The default formatting is numeric year, month, and day (i.e., `{ skeleton: "yMd" }`. + +The returned function is invoked with one argument: the Date instance `value` to be formatted. + +### Parameters + +#### options.skeleton + +String value indicating a skeleton (see description above), eg. `{ skeleton: "GyMMMd" }`. + +Skeleton provides a more flexible formatting mechanism than the predefined list `full`, `long`, `medium`, or `short` represented by date, time, or datetime. Instead, they are an open-ended list of patterns containing only date field information, and in a canonical order. For a complete list of skeleton patterns [check the unicode CLDR documentation](http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table). + +For example: + +| locale | `"GyMMMd"` skeleton | +| ------ | ------------------------- | +| *en* | `"Apr 9, 2014 AD"` | +| *zh* | `"公元2014年4月9日"` | +| *es* | `"9 abr. de 2014 d. C."` | +| *ar* | `"٩ أبريل، ٢٠١٤ م"` | +| *pt* | `"9 de abr de 2014 d.C."` | + +#### options.date + +One of the following String values: `full`, `long`, `medium`, or `short`, eg., `{ date: "full" }`. + +#### options.time + +One of the following String values: `full`, `long`, `medium`, or `short`, eg., `{ time: "full" }`. + +#### options.datetime + +One of the following String values: `full`, `long`, `medium`, or `short`, eg., `{ datetime: "full" }`. + +#### options.raw + +String value indicating a machine [raw pattern (anything in the "Sym." column)](http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table) eg. `{ raw: "dd/mm" }`. Note this is NOT recommended for i18n in general. Use `skeleton` instead. + +#### options.timeZone + +String based on the time zone names of the [IANA time zone database](https://www.iana.org/time-zones), such as `"Asia/Shanghai"`, `"Asia/Kolkata"`, `"America/New_York"`. + +#### value + +Date instance to be formatted, eg. `new Date()`; + +### Example + +Prior to using any date methods, you must load `cldr/main/{locale}/ca-gregorian.json`, `cldr/main/{locale}/timeZoneNames.json`, `cldr/supplemental/metaZones.json`, `cldr/supplemental/timeData.json`, `cldr/supplemental/weekData.json`, and the CLDR content required by the number module. Read [CLDR content][] if you need more information. + +[CLDR content]: ../../../README.md#2-cldr-content + +```javascript +var formatter; + +Globalize.locale( "en" ); +formatter = Globalize.dateFormatter(); + +formatter( new Date( 2010, 10, 30, 17, 55 ) ); +// > "11/30/2010" +``` + +You can use the instance method `.dateFormatter()`, which uses the instance locale. + +```javascript +var enFormatter = Globalize( "en" ).dateFormatter(), + deFormatter = Globalize( "de" ).dateFormatter(); + +enFormatter( new Date( 2010, 10, 30, 17, 55 ) ); +// > "11/30/2010" + +deFormatter( new Date( 2010, 10, 30, 17, 55 ) ); +// > "30.11.2010" +``` + +#### Using short, medium, long, and full presets + +Use convenient presets for `date`, `time`, or `datetime`. Their possible values are: `short`, `medium`, `long`, and `full`. + +| `presetValue` | `Globalize( "en" ).dateFormatter( presetValue )( new Date( 2010, 10, 1, 17, 55 ) )` | +| ------------------------ | ---------------------------------------- | +| `{ date: "short" }` | `"11/1/10"` | +| `{ date: "medium" }` | `"Nov 1, 2010"` | +| `{ date: "long" }` | `"November 1, 2010"` | +| `{ date: "full" }` | `"Monday, November 1, 2010"` | +| `{ time: "short" }` | `"5:55 PM"` | +| `{ time: "medium" }` | `"5:55:00 PM"` | +| `{ time: "long" }` | `"5:55:00 PM PST"` | +| `{ time: "full" }` | `"5:55:00 PM Pacific Standard Time"` | +| `{ datetime: "short" }` | `"11/1/10, 5:55 PM"` | +| `{ datetime: "medium" }` | `"Nov 1, 2010, 5:55:00 PM"` | +| `{ datetime: "long" }` | `"November 1, 2010 at 5:55:00 PM PST"` | +| `{ datetime: "full" }` | `"Monday, November 1, 2010 at 5:55:00 PM Pacific Standard Time"` | + +For comparison, follow the same formatter `{ datetime: "short" }` on different locales. + +| locale | `Globalize( locale ).dateFormatter({ datetime: "short" })( new Date( 2010, 10, 1, 17, 55 ) )` | +| ---------------- | ---------------------------------------- | +| *en* | `"11/1/10, 5:55 PM"` | +| *en_GB* | `"01/11/2010 17:55"` | +| *zh* | `"10/11/1 下午5:55"` | +| *zh-u-nu-native* | `"一〇/一一/一 下午五:五五"` | +| *es* | `"1/11/10 17:55"` | +| *de* | `"01.11.10 17:55"` | +| *pt* | `"01/11/10 17:55"` | +| *ar* | `"١‏/١١‏/٢٠١٠ ٥،٥٥ م"` | + +#### Using open-ended skeletons + +Use open-ended skeletons for more flexibility (see its description [above](#parameters)). See some examples below. + +| `skeleton` | `Globalize( "en" ).dateFormatter( skeleton )( new Date( 2010, 10, 1, 17, 55 ) )` | +| ---------------------------- | ---------------------------------------- | +| `{ skeleton: "E" }` | `"Tue"` | +| `{ skeleton: "EHm" }` | `"Tue 17:55"` | +| `{ skeleton: "EHms" }` | `"Tue 17:55:00"` | +| `{ skeleton: "Ed" }` | `"30 Tue"` | +| `{ skeleton: "Ehm" }` | `"Tue 5:55 PM"` | +| `{ skeleton: "Ehms" }` | `"Tue 5:55:00 PM"` | +| `{ skeleton: "Gy" }` | `"2010 AD"` | +| `{ skeleton: "GyMMM" }` | `"Nov 2010 AD"` | +| `{ skeleton: "GyMMMEd" }` | `"Tue, Nov 30, 2010 AD"` | +| `{ skeleton: "GyMMMd" }` | `"Nov 30, 2010 AD"` | +| `{ skeleton: "H" }` | `"17"` | +| `{ skeleton: "Hm" }` | `"17:55"` | +| `{ skeleton: "Hms" }` | `"17:55:00"` | +| `{ skeleton: "M" }` | `"11"` | +| `{ skeleton: "MEd" }` | `"Tue, 11/30"` | +| `{ skeleton: "MMM" }` | `"Nov"` | +| `{ skeleton: "MMMEd" }` | `"Tue, Nov 30"` | +| `{ skeleton: "MMMd" }` | `"Nov 30"` | +| `{ skeleton: "Md" }` | `"11/30"` | +| `{ skeleton: "d" }` | `"30"` | +| `{ skeleton: "h" }` | `"5 PM"` | +| `{ skeleton: "hm" }` | `"5:55 PM"` | +| `{ skeleton: "hms" }` | `"5:55:00 PM"` | +| `{ skeleton: "ms" }` | `"55:00"` | +| `{ skeleton: "y" }` | `"2010"` | +| `{ skeleton: "yM" }` | `"11/2010"` | +| `{ skeleton: "yMEd" }` | `"Tue, 11/30/2010"` | +| `{ skeleton: "yMMM" }` | `"Nov 2010"` | +| `{ skeleton: "yMMMEd" }` | `"Tue, Nov 30, 2010"` | +| `{ skeleton: "yMMMd" }` | `"Nov 30, 2010"` | +| `{ skeleton: "yMd" }` | `"11/30/2010"` | +| `{ skeleton: "yQQQ" }` | `"Q4 2010"` | +| `{ skeleton: "yQQQQ" }` | `"4th quarter 2010"` | +| `{ skeleton: "GyMMMEdhms" }` | `"Tue, Nov 30, 2010 AD, 5:55:00 PM"` | +| `{ skeleton: "Ehms" }` | `"Tue 5:55:00 PM"` | +| `{ skeleton: "yQQQHm" }` | `"Q4 2010, 17:55"` | +| `{ skeleton: "MMMEdhm" }` | `"Tue, Nov 30, 5:55 PM"` | +| `{ skeleton: "yMMMdhm" }` | `"Nov 30, 2010, 5:55 PM"` | + + +```javascript +var globalize = Globalize( "en" ), + date = new Date( 2010, 10, 30, 17, 55 ), + monthDayFormatter = globalize.dateFormatter({ skeleton: "MMMd" }), + hourMinuteSecondFormatter = globalize.dateFormatter({ skeleton: "Hms" }); + +monthDayFormatter( date ); +// > "Nov 30" + +hourMinuteSecondFormatter( date ); +// > "17:55:00" +``` + +#### Using time zones + +Using specific timeZones, i.e., using `options.timezone`. Note that prior to using it, you must load IANA time zone data. + +```js +Globalize.loadTimeZone( require( "iana-tz-data" ) ); +``` + +```js +Globalize.locale( "en" ); + +Globalize.dateFormatter({ datetime: "medium", timeZone: "America/Los_Angeles" })( new Date() ); +// > "Nov 1, 2010, 12:55:00 PM" + +Globalize.dateFormatter({ datetime: "medium", timeZone: "America/Sao_Paulo" })( new Date() ) +// > "Nov 1, 2010, 5:55:00 PM" + +Globalize.dateFormatter({ datetime: "full", timeZone: "Europe/Berlin" })( new Date() ) +// > "Monday, November 1, 2010 at 8:55:00 PM Central European Standard Time" +``` + +#### Note on performance + +For improved performance on iterations, first create the formatter. Then, reuse it on each loop. + +```javascript +// In an application, this array could have a few hundred entries +var dates = [ new Date( 2010, 10, 30, 17, 55 ), new Date( 2015, 3, 18, 4, 25 ) ]; +var formatter = Globalize( "en" ).dateFormatter({ time: "short" }); + +var formattedDates = dates.map(function( date ) { + return formatter( date ); +}); +// > Array [ "5:55 PM", "4:25 AM" ] +``` diff --git a/node_modules/globalize/doc/api/date/date-parser.md b/node_modules/globalize/doc/api/date/date-parser.md new file mode 100644 index 00000000..5800069e --- /dev/null +++ b/node_modules/globalize/doc/api/date/date-parser.md @@ -0,0 +1,60 @@ +## .dateParser( [options] ) ➜ function( value ) + +Return a function that parses a string representing a date into a JavaScript Date object according to the given `options`. The default parsing assumes numeric year, month, and day (i.e., `{ skeleton: "yMd" }`). + +The returned function is invoked with one argument: the String `value` to be parsed. + +### Parameters + +#### options + +See [.dateFormatter() options](./date-formatter.md#parameters). + +#### value + +String with date to be parsed, eg. `"11/1/10, 5:55 PM"`. + +### Example + +Prior to using any date methods, you must load `cldr/main/{locale}/ca-gregorian.json`, `cldr/main/{locale}/timeZoneNames.json`, `cldr/supplemental/timeData.json`, `cldr/supplemental/weekData.json`, and the CLDR content required by the number module. Read [CLDR content][] if you need more information. + +[CLDR content]: ../../../README.md#2-cldr-content + +You can use the static method `Globalize.dateParser()`, which uses the default locale. + +```javascript +var parser; + +Globalize.locale( "en" ); +parser = Globalize.dateParser(); + +parser( "1/2/2013" ); +// > Wed Jan 02 2013 00:00:00 + +Globalize.locale( "es" ); +parser = Globalize.dateParser(); + +parser( "1/2/2013" ); +// > Fri Feb 01 2013 00:00:00 +``` + +You can use the instance method `.dateParser()`, which uses the instance locale. + +```javascript +var esParser = Globalize( "es" ).dateParser({ date: short }); + +esParser( "1/2/13" ); +// > Fri Feb 01 2013 00:00:00 +``` + +For improved performance on iterations, first create the parser. Then, reuse it +on each loop. + +```javascript +var formattedDates = [ new Date( a ), new Date( b ), ... ]; +var parser = Globalize( "en" ).dateParser({ time: "short" }); + +dates = formattedDates.map(function( formattedDate ) { + return parser( formattedDate ); +}); +``` diff --git a/node_modules/globalize/doc/api/date/date-to-parts-formatter.md b/node_modules/globalize/doc/api/date/date-to-parts-formatter.md new file mode 100644 index 00000000..2428b2e3 --- /dev/null +++ b/node_modules/globalize/doc/api/date/date-to-parts-formatter.md @@ -0,0 +1,176 @@ +## .dateToPartsFormatter( [options] ) ➜ function( value ) + +Return a function that formats a date into parts tokens according to the given `options`. The default formatting is numeric year, month, and day (i.e., `{ skeleton: "yMd" }`. + +The returned function is invoked with one argument: the Date instance `value` to be formatted. + +### Parameters + +#### options + +Please, see [.dateFormatter() options](./date-formatter.md#parameters). + +#### value + +Date instance to be formatted, eg. `new Date()`; + +### Returns + +An Array of objects containing the formatted date in parts. The returned structure looks like this: + +```js +[ + { type: "day", value: "17" }, + { type: "weekday", value: "Monday" } +] +``` + +Possible types are the following: + +- `day` + + The string used for the day, e.g., `"17"`, `"١٦"`. + +- `dayPeriod` + + The string used for the day period, e.g., `"AM"`, `"PM"`. + +- `era` + + The string used for the era, e.g., `"AD"`, `"d. C."`. + +- `hour` + + The string used for the hour, e.g., `"3"`, `"03"`. + +- `literal` + + The string used for separating date and time values, e.g., `"/"`, `", "`, + `"o'clock"`, `" de "`. + +- `minute` + + The string used for the minute, e.g., `"00"`. + +- `month` + + The string used for the month, e.g., `"12"`. + +- `second` + + The string used for the second, e.g., `"07"` or `"42"`. + +- `timeZoneName` + + The string used for the name of the time zone, e.g., `"EST".` + +- `weekday` + + The string used for the weekday, e.g., `"M"`, `"Monday"`, `"Montag".` + +- `year` + + The string used for the year, e.g., `"2012"`, `"96".` + + +### Example + +Prior to using any date methods, you must load `cldr/main/{locale}/ca-gregorian.json`, `cldr/main/{locale}/timeZoneNames.json`, `cldr/supplemental/timeData.json`, `cldr/supplemental/weekData.json`, and the CLDR content required by the number module. Read [CLDR content][] if you need more information. + +[CLDR content]: ../../../README.md#2-cldr-content + +You can use the static method `Globalize.dateToPartsFormatter()`, which uses the default locale. + +```javascript +var formatter; + +Globalize.locale( "en" ); +formatter = Globalize.dateToPartsFormatter(); + +formatter( new Date( 2010, 10, 30 ) ); +// > [ +// { "type": "month", "value": "11" }, +// { "type": "literal", "value": "/" }, +// { "type": "day", "value": "30" }, +// { "type": "literal", "value": "/" }, +// { "type": "year", "value": "2010" } +// ] +``` + +You can use the instance method `.dateToPartsFormatter()`, which uses the instance locale. + +```javascript +var enFormatter = Globalize( "en" ).dateToPartsFormatter(), + deFormatter = Globalize( "de" ).dateToPartsFormatter(); + +enFormatter( new Date( 2010, 10, 30 ) ); +// > [ +// { "type": "month", "value": "11" }, +// { "type": "literal", "value": "/" }, +// { "type": "day", "value": "30" }, +// { "type": "literal", "value": "/" }, +// { "type": "year", "value": "2010" } +// ] + +deFormatter( new Date( 2010, 10, 30 ) ); +// > [ +// { type: 'day', value: '30' }, +// { type: 'literal', value: '.' }, +// { type: 'month', value: '11' }, +// { type: 'literal', value: '.' }, +// { type: 'year', value: '2010' } +// ] +``` + +The information is available separately and it can be formatted and concatenated again in a customized way. For example by using [`Array.prototype.map()`][], [arrow functions][], a [switch statement][], [template literals][], and [`Array.prototype.reduce()`][]. + +[`Array.prototype.map()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map +[arrow functions]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions +[switch statement]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch +[template literals]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals +[`Array.prototype.reduce()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce + +```javascript +var formatter; + +Globalize.locale( "en" ); +formatter = Globalize.dateToPartsFormatter({datetime: "short"}); + +formatter( new Date( 2010, 10, 30, 17, 55 ) ).map(({type, value}) => { + switch ( type ) { + case "year": return `${value}`; + default: return value; + } +}).join( "" ); +// > "11/30/10, 5:55 PM" +``` + +Please, see [.dateFormatter() example](./date-formatter.md#example) for additional examples such as using `date`, `time`, `datetime`, and `skeleton` options. + +For improved performance on iterations, first create the formatter. Then, reuse it on each loop. + +```javascript +// In an application, this array could have a few hundred entries +var dates = [ new Date( 2010, 10, 30, 17, 55 ), new Date( 2015, 3, 18, 4, 25 ) ]; +var formatter = Globalize( "en" ).dateToPartsFormatter({ time: "short" }); + +var formattedDates = dates.map(function( date ) { + return formatter( date ); +}); +// > [ +// [ +// { "type": "hour", "value": "5" }, +// { "type": "literal", "value": ":" }, +// { "type": "minute", "value": "55" }, +// { "type": "literal", "value": " " }, +// { "type": "dayperiod", "value": "PM" } +// ], +// [ +// { "type": "hour", "value": "4" }, +// { "type": "literal", "value": ":" }, +// { "type": "minute", "value": "25" }, +// { "type": "literal", "value": " " }, +// { "type": "dayperiod", "value": "AM" } +// ] +// ] +``` diff --git a/node_modules/globalize/doc/api/date/load-iana-time-zone.md b/node_modules/globalize/doc/api/date/load-iana-time-zone.md new file mode 100644 index 00000000..fe7a5b8c --- /dev/null +++ b/node_modules/globalize/doc/api/date/load-iana-time-zone.md @@ -0,0 +1,29 @@ +## Globalize.loadTimeZone( ianaTzData ) + +This method allows you to load IANA time zone data to enable `options.timeZone` feature on date formatters and parsers. + +### Parameters + +#### ianaTzData + +A JSON object with zdumped IANA timezone data. Get the data via [`iana-tz-data`](https://github.com/rxaviers/iana-tz-data). + +### Example + +```javascript +Globalize.loadTimeZone({ + "zoneData": { + ... + "America": { + ... + "New_York": { + abbrs: [], + untils: [], + offsets: [], + isdsts: [] + } + ... + } + } +}); +``` diff --git a/node_modules/globalize/doc/api/message/load-messages.md b/node_modules/globalize/doc/api/message/load-messages.md new file mode 100644 index 00000000..7ee0b842 --- /dev/null +++ b/node_modules/globalize/doc/api/message/load-messages.md @@ -0,0 +1,105 @@ +## .loadMessages( json ) + +Load messages data. + +The first level of keys must be locales. For example: + +``` +{ + en: { + hello: "Hello" + }, + pt: { + hello: "Olá" + } +} +``` + +ICU MessageFormat pattern is supported: variable replacement, gender and plural inflections. For more information see [`.messageFormatter( path ) ➡ function([ variables ])`](./message-formatter.md). + +The provided messages are stored along side other cldr data, under the "globalize-messages" key. This allows Globalize to reuse the traversal methods provided by cldrjs. You can inspect this data using `cldrjs.get("globalize-messages")`. + +### Parameters + +#### json + +JSON object of messages data. Keys can use any character, except `/`, `{` and `}`. Values (i.e., the message content itself) can contain any character. + +### Example + +```javascript +Globalize.loadMessages({ + pt: { + greetings: { + hello: "Olá", + bye: "Tchau" + } + } +}); + +Globalize( "pt" ).formatMessage( "greetings/hello" ); +// > Olá +``` + +#### Multiline strings + +Use Arrays as a convenience for multiline strings. The lines will be joined by a space. + +```javascript +Globalize.loadMessages({ + en: { + longText: [ + "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eligendi non", + "quis exercitationem culpa nesciunt nihil aut nostrum explicabo", + "reprehenderit optio amet ab temporibus asperiores quasi cupiditate.", + "Voluptatum ducimus voluptates voluptas?" + ] + } +}); + +Globalize( "en" ).formatMessage( "longText" ); +// > "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eligendi non quis exercitationem culpa nesciunt nihil aut nostrum explicabo reprehenderit optio amet ab temporibus asperiores quasi cupiditate. Voluptatum ducimus voluptates voluptas?" +``` + +#### Messages inheritance + +It's possible to inherit messages, for example: + +```javascript +Globalize.loadMessages({ + root: { + amen: "Amen" + }, + de: {}, + en: {}, + "en-GB": {}, + fr: {}, + pt: { + amen: "Amém" + }, + "pt-PT": {} +}); + +Globalize( "de" ).formatMessage( "amen" ); +// > "Amen" + +Globalize( "en" ).formatMessage( "amen" ); +// > "Amen" + +Globalize( "en-GB" ).formatMessage( "amen" ); +// > "Amen" + +Globalize( "fr" ).formatMessage( "amen" ); +// > "Amen" + +Globalize( "pt-PT" ).formatMessage( "amen" ); +// > "Amém" +``` + +Note that `de`, `en`, `en-GB`, `fr`, and `pt-PT` are empty. `.formatMessage()` inherits `pt-PT` messages from `pt` (`pt-PT` ➡ `pt`), and it inherits the other messages from root, eg. `en-GB` ➡ `en-001` ➡ `en` ➡ `root`. Yes, `root` is the last bundle of the parent lookup. + +Attention: On browsers, message inheritance only works if the optional dependency `cldr/unresolved` is loaded. + +```html + +``` diff --git a/node_modules/globalize/doc/api/message/message-formatter.md b/node_modules/globalize/doc/api/message/message-formatter.md new file mode 100644 index 00000000..e501a24c --- /dev/null +++ b/node_modules/globalize/doc/api/message/message-formatter.md @@ -0,0 +1,208 @@ +## .messageFormatter( path ) ➡ function([ variables ]) + +Return a function that formats a message (using ICU message format pattern) given its path and a set of variables into a user-readable string. It supports pluralization and gender inflections. + +Use [`Globalize.loadMessages( json )`](./load-messages.md) to load +messages data. + +### Parameters + +#### path + +String or Array containing the path of the message content, eg., `"greetings/bye"`, or `[ "greetings", "bye" ]`. + +#### variables + +Optional. Variables can be Objects, where each property can be referenced by name inside a message; or Arrays, where each entry of the Array can be used inside a message, using numeric indices. When passing one or more arguments of other types, they're converted to an Array and used as such. + +### Example + +You can use the static method `Globalize.messageFormatter()`, which uses the default locale. + +```javascript +var formatter; + +Globalize.loadMessages({ + pt: { + greetings: { + bye: "Tchau" + } + } +}); + +Globalize.locale( "pt" ); +formatter = Globalize.messageFormatter( "greetings/bye" ); + +formatter(); +// > "Tchau" +``` + +You can use the instance method `.messageFormatter()`, which uses the instance locale. + +```javascript +var pt = new Globalize( "pt" ), + formatter = pt.messageFormatter( "greetings/bye" ); + +formatter(); +// > "Tchau" +``` + +#### Simple Variable Replacement + +```javascript +var formatter; + +Globalize.loadMessages({ + en: { + hello: "Hello, {0} {1} {2}", + hey: "Hey, {first} {middle} {last}" + } +}); + +formatter = Globalize( "en" ).messageFormatter( "hello" ); + +// Numbered variables using Array. +formatter([ "Wolfgang", "Amadeus", "Mozart" ]); +// > "Hello, Wolfgang Amadeus Mozart" + +// Numbered variables using function arguments. +formatter( "Wolfgang", "Amadeus", "Mozart" ); +// > "Hello, Wolfgang Amadeus Mozart" + +// Named variables using Object key-value pairs. +formatter = Globalize( "en" ).messageFormatter( "hey" ); +formatter({ + first: "Wolfgang", + middle: "Amadeus", + last: "Mozart" +}); +// > "Hey, Wolfgang Amadeus Mozart" +``` + +#### Gender inflections + +`select` can be used to format any message variations that works like a switch. + +```javascript +var formatter; + +// Note you can define multiple lines message using an Array of Strings. +Globalize.loadMessages({ + en: { + party: [ + "{hostGender, select,", + " female {{host} invites {guest} to her party}", + " male {{host} invites {guest} to his party}", + " other {{host} invites {guest} to their party}", + "}" + ] + } +}); + +formatter = Globalize( "en" ).messageFormatter( "party" ); + +formatter({ + guest: "Mozart", + host: "Beethoven", + hostGender: "male" +}); +// > "Beethoven invites Mozart to his party" +``` + +#### Plural inflections + +It uses the plural forms `zero`, `one`, `two`, `few`, `many`, or `other` (required). Note English only uses `one` and `other`. So, including `zero` will never get called, even when the number is 0. For more information see [`.pluralGenerator()`](../plural/plural-generator.md). + +```javascript +var numberFormatter, taskFormatter, + en = new Globalize( "en" ); + +// Note you can define multiple lines message using an Array of Strings. +Globalize.loadMessages({ + en: { + task: [ + "You have {count, plural,", + " one {one task}", + " other {{formattedCount} tasks}", + "} remaining" + ] + } +}); + +numberFormatter = en.numberFormatter(); +taskFormatter = en.messageFormatter( "task" ); + +taskFormatter({ + count: 1000, + formattedCount: numberFormatter( 1000 ) +}); +// > "You have 1,000 tasks remaining" +``` + +Literal numeric keys can be used in `plural` to match single, specific numbers. + +```javascript +var taskFormatter, + en = new Globalize( "en" ); + +// Note you can define multiple lines message using an Array of Strings. +Globalize.loadMessages({ + en: { + task: [ + "You have {count, plural,", + " =0 {no tasks}", + " one {one task}", + " other {{formattedCount} tasks}", + "} remaining" + ] + } +}); + +taskFormatter = Globalize( "en" ).messageFormatter( "task" ); + +taskFormatter({ + count: 0, + formattedCount: en.numberFormatter( 0 ) +}); +// > "You have no tasks remaining" +``` + +You may find useful having the plural forms calculated with an offset applied. +Use `#` to output the resulting number. Note literal numeric keys do NOT use the +offset value. + +```javascript +var likeFormatter, + en = new Globalize( "en" ); + +Globalize.loadMessages({ + en: { + likeIncludingMe: [ + "{0, plural, offset:1", + " =0 {Be the first to like this}", + " =1 {You liked this}", + " one {You and someone else liked this}", + " other {You and # others liked this}", + "}" + ] + } +}); + +likeFormatter = Globalize( "en" ).messageFormatter( "likeIncludingMe" ); + +likeFormatter( 0 ); +// > "Be the first to like this" + +likeFormatter( 1 ); +// > "You liked this" + +likeFormatter( 2 ); +// > "You and someone else liked this" + +likeFormatter( 3 ); +// > "You and 2 others liked this" +``` + +Read on [SlexAxton/messageFormatter.js][] for more information on regard of ICU MessageFormat. + +[SlexAxton/messageFormatter.js]: https://github.com/SlexAxton/messageformat.js/#no-frills diff --git a/node_modules/globalize/doc/api/number/number-formatter.md b/node_modules/globalize/doc/api/number/number-formatter.md new file mode 100644 index 00000000..dc51802d --- /dev/null +++ b/node_modules/globalize/doc/api/number/number-formatter.md @@ -0,0 +1,202 @@ +## .numberFormatter( [options] ) ➜ function( value ) + +Return a function that formats a number according to the given options. + +The returned function is invoked with one argument: the Number `value` to be formatted. + +### Parameters + +#### options.style + +Optional. String `decimal` (default), or `percent`. + +#### options.minimumIntegerDigits + +Optional. Non-negative integer Number value indicating the minimum integer digits to be used. Numbers will be padded with leading zeroes if necessary. + +#### options.minimumFractionDigits, options.maximumFractionDigits + +Optional. Non-negative integer Number values indicating the minimum and maximum fraction digits to be used. Numbers will be rounded or padded with trailing zeroes if necessary. Either one or both of these properties must be present. If they are, they will override minimum and maximum fraction digits derived from the CLDR patterns. + +#### options.minimumSignificantDigits, options.maximumSignificantDigits + +Optional. Positive integer Number values indicating the minimum and maximum fraction digits to be shown. Either none or both of these properties are present. If they are, they override minimum and maximum integer and fraction digits. The formatter uses however many integer and fraction digits are required to display the specified number of significant digits. + +#### options.round + +Optional. String with rounding method `ceil`, `floor`, `round` (default), or `truncate`. + +#### options.useGrouping + +Optional. Boolean (default is true) value indicating whether a grouping separator should be used. + +#### options.compact + +Optional. String `short` or `long` indicating which compact number format should be used to represent the number. + +### Examples + +#### Static Formatter + +Prior to using any number methods, you must load `cldr/main/{locale}/numbers.json` and `cldr/supplemental/numberingSystems.json`. Read [CLDR content][] if you need more information. + +[CLDR content]: ../../../README.md#2-cldr-content + +You can use the static method `Globalize.numberFormatter()`, which uses the default locale. + +```javascript +var formatter; + +Globalize.locale( "en" ); +formatter = Globalize.numberFormatter(); + +formatter( 3.141592 ); +// > "3.142" +``` + +#### Instance Formatter + +You can use the instance method `.numberFormatter()`, which uses the instance +locale. + +```javascript +var arFormatter = Globalize( "ar" ).numberFormatter(), + esFormatter = Globalize( "es" ).numberFormatter(), + zhFormatter = Globalize( "zh-u-nu-native" ).numberFormatter(); + +arFormatter( 3.141592 ); +// > "٣٫١٤٢" + +esFormatter( 3.141592 ); +// > "3,142" + +zhFormatter( 3.141592 ); +// > "三.一四二" +``` + +#### Configuring decimal places + +The number of decimal places can be decreased or increased using `minimumFractionDigits` and `maximumFractionDigits`. + +```javascript +Globalize.numberFormatter({ maximumFractionDigits: 2 })( 3.141592 ); +// > "3.14" + +Globalize.numberFormatter({ minimumFractionDigits: 2 })( 1.5 ); +// > "1.50" +``` + +#### Configuring significant digits + +The number of significant (non-zero) digits can be decreased or increased using `minimumSignificantDigits` and `maximumSignificantDigits`. + +```javascript +var formatter = Globalize.numberFormatter({ + minimumSignificantDigits: 1, + maximumSignificantDigits: 3 +}); + +formatter( 3.141592 ); +// > "3.14" + +formatter = Globalize.numberFormatter({ + minimumSignificantDigits: 1, + maximumSignificantDigits: 3 +}); + +formatter( 12345 ); +// > "12,300" + +formatter = Globalize.numberFormatter({ + minimumSignificantDigits: 1, + maximumSignificantDigits: 3 +}); + +formatter( 0.00012345 ); +// > "0.000123" +``` + +#### Formatting Percentages + +Numbers can be formatted as percentages. + +```javascript +var enFormatter = Globalize( "en" ).numberFormatter({ + style: "percent", + minimumFractionDigits: 1, + maximumFractionDigits: 1 +}); + +var frFormatter = Globalize( "fr" ).numberFormatter({ + style: "percent", + minimumFractionDigits: 2, + maximumFractionDigits: 2 +}); + +enFormatter( 0.0016 ); +// > "0.2%" + +enFormatter( 0.0014 ); +// > "0.1%" + +frFormatter( 0.0005 ); +// > "0,05 %" +``` + +#### Formatting Compact Numbers + +Long numbers can be represented in a compact format, with `short` using abbreviated units and `long` using the full unit name. + +```javascript +var shortFormatter = Globalize( "en" ).numberFormatter({ + compact: "short" +}); + +var longFormatter = Globalize( "en" ).numberFormatter({ + compact: "long" +}); + +shortFormatter( 27588910 ); +// > "28M" + +longFormatter( 27588910 ); +// > "28 million" +``` + +The minimumSignificantDigits and maximumSignificantDigits options are specially useful to control the number of digits to display. + +```js +Globalize( "en" ).formatNumber( 27588910, { + compact: "short", + minimumSignificantDigits: 3, + maximumSignificantDigits: 3 +}); +// > "27.6M" +``` + +#### Configuring Rounding + +Numbers with a decreased amount of decimal places can be rounded up, rounded down, rounded arithmetically, or truncated by setting the `round` option to `ceil`, `floor`, `round` (default), or `truncate`. + +```javascript +var formatter = Globalize.numberFormatter({ + maximumFractionDigits: 2, + round: "ceil" +}); + +formatter( 3.141592 ); +// > "3.15" +``` + +#### Performance Suggestions + +For improved performance on iterations, the formatter should be created before the loop. Then, it can be reused in each iteration. + +```javascript +var numbers = [ 1, 1, 2, 3, ... ]; +var formatter = Globalize( "en" ).numberFormatter(); + +formattedNumbers = numbers.map(function( number ) { + return formatter( number ); +}); +``` diff --git a/node_modules/globalize/doc/api/number/number-formatter.md.orig b/node_modules/globalize/doc/api/number/number-formatter.md.orig new file mode 100644 index 00000000..9bd9959e --- /dev/null +++ b/node_modules/globalize/doc/api/number/number-formatter.md.orig @@ -0,0 +1,236 @@ +## .numberFormatter( [options] ) ➜ function( value ) + +Return a function that formats a number according to the given options. + +The returned function is invoked with one argument: the Number `value` to be formatted. + +### Parameters + +<<<<<<< HEAD +#### options.style + +Optional. String `decimal` (default), or `percent`. + +#### options.minimumIntegerDigits + +Optional. Non-negative integer Number value indicating the minimum integer digits to be used. Numbers will be padded with leading zeroes if necessary. + +#### options.minimumFractionDigits, options.maximumFractionDigits + +Optional. Non-negative integer Number values indicating the minimum and maximum fraction digits to be used. Numbers will be rounded or padded with trailing zeroes if necessary. Either one or both of these properties must be present. If they are, they will override minimum and maximum fraction digits derived from the CLDR patterns. + +#### options.minimumSignificantDigits, options.maximumSignificantDigits + +Optional. Positive integer Number values indicating the minimum and maximum fraction digits to be shown. Either none or both of these properties are present. If they are, they override minimum and maximum integer and fraction digits. The formatter uses however many integer and fraction digits are required to display the specified number of significant digits. + +#### options.round + +Optional. String with rounding method `ceil`, `floor`, `round` (default), or `truncate`. + +#### options.useGrouping + +Optional. Boolean (default is true) value indicating whether a grouping separator should be used. +======= +**options** Optional + +A JSON object including none or any of the following options. + +> **style** Optional +> +> String `decimal` (default), or `percent`. +> +> **minimumIntegerDigits** Optional +> +> Non-negative integer Number value indicating the minimum integer digits to be +> used. Numbers will be padded with leading zeroes if necessary. +> +> **minimumFractionDigits** and **maximumFractionDigits** Optional +> +> Non-negative integer Number values indicating the minimum and maximum fraction +> digits to be used. Numbers will be rounded or padded with trailing zeroes if +> necessary. Either one or both of these properties must be present. If they +> are, they will override minimum and maximum fraction digits derived from the +> CLDR patterns. +> +> **minimumSignificantDigits** and **maximumSignificantDigits** Optional +> +> Positive integer Number values indicating the minimum and maximum fraction +> digits to be shown. Either none or both of these properties are present. If +> they are, they override minimum and maximum integer and fraction digits. The +> formatter uses however many integer and fraction digits are required to +> display the specified number of significant digits. +> +> **round** Optional +> +> String with rounding method `ceil`, `floor`, `round` (default), or `truncate`. +> +> **useGrouping** Optional +> +> Boolean (default is true) value indicating whether a grouping separator should +> be used. +> +> **compact** Optional +> +> String `short` or `long` indicating which compact number format should be used +> to represent the number. +>>>>>>> 281df8a2... Number: Add support for compact option (short/long) (1/3) + +### Examples + +#### Static Formatter + +Prior to using any number methods, you must load `cldr/main/{locale}/numbers.json` and `cldr/supplemental/numberingSystems.json`. Read [CLDR content][] if you need more information. + +[CLDR content]: ../../../README.md#2-cldr-content + +You can use the static method `Globalize.numberFormatter()`, which uses the default locale. + +```javascript +var formatter; + +Globalize.locale( "en" ); +formatter = Globalize.numberFormatter(); + +formatter( 3.141592 ); +// > "3.142" +``` + +#### Instance Formatter + +You can use the instance method `.numberFormatter()`, which uses the instance +locale. + +```javascript +var arFormatter = Globalize( "ar" ).numberFormatter(), + esFormatter = Globalize( "es" ).numberFormatter(), + zhFormatter = Globalize( "zh-u-nu-native" ).numberFormatter(); + +arFormatter( 3.141592 ); +// > "٣٫١٤٢" + +esFormatter( 3.141592 ); +// > "3,142" + +zhFormatter( 3.141592 ); +// > "三.一四二" +``` + +#### Configuring decimal places + +The number of decimal places can be decreased or increased using `minimumFractionDigits` and `maximumFractionDigits`. + +```javascript +Globalize.numberFormatter({ maximumFractionDigits: 2 })( 3.141592 ); +// > "3.14" + +Globalize.numberFormatter({ minimumFractionDigits: 2 })( 1.5 ); +// > "1.50" +``` + +#### Configuring significant digits + +The number of significant (non-zero) digits can be decreased or increased using `minimumSignificantDigits` and `maximumSignificantDigits`. + +```javascript +var formatter = Globalize.numberFormatter({ + minimumSignificantDigits: 1, + maximumSignificantDigits: 3 +}); + +formatter( 3.141592 ); +// > "3.14" + +formatter = Globalize.numberFormatter({ + minimumSignificantDigits: 1, + maximumSignificantDigits: 3 +}); + +formatter( 12345 ); +// > "12,300" + +formatter = Globalize.numberFormatter({ + minimumSignificantDigits: 1, + maximumSignificantDigits: 3 +}); + +formatter( 0.00012345 ); +// > "0.000123" +``` + +#### Formatting Percentages + +Numbers can be formatted as percentages. + +```javascript +var enFormatter = Globalize( "en" ).numberFormatter({ + style: "percent", + minimumFractionDigits: 1, + maximumFractionDigits: 1 +}); + +var frFormatter = Globalize( "fr" ).numberFormatter({ + style: "percent", + minimumFractionDigits: 2, + maximumFractionDigits: 2 +}); + +enFormatter( 0.0016 ); +// > "0.2%" + +enFormatter( 0.0014 ); +// > "0.1%" + +frFormatter( 0.0005 ); +// > "0,05 %" +``` + +#### Formatting Compact Numbers + +Long numbers can be represented in a compact format, with `short` using abbreviated units and `long` using the full unit name. + +```javascript +var shortFormatter = Globalize( "en" ).numberFormatter({ + compact: "short", + maximumFractionDigits: 0, + style: "decimal" +}); + +var longFormatter = Globalize( "en" ).numberFormatter({ + compact: "long", + maximumFractionDigits: 0, + style: "decimal" +}); + +shortFormatter( 27588910 ); +// > "28M" + +longFormatter( 27588910 ); +// > "28 million" +``` + +#### Configuring Rounding + +Numbers with a decreased amount of decimal places can be rounded up, rounded down, rounded arithmetically, or truncated by setting the `round` option to `ceil`, `floor`, `round` (default), or `truncate`. + +```javascript +var formatter = Globalize.numberFormatter({ + maximumFractionDigits: 2, + round: "ceil" +}); + +formatter( 3.141592 ); +// > "3.15" +``` + +#### Performance Suggestions + +For improved performance on iterations, the formatter should be created before the loop. Then, it can be reused in each iteration. + +```javascript +var numbers = [ 1, 1, 2, 3, ... ]; +var formatter = Globalize( "en" ).numberFormatter(); + +formattedNumbers = numbers.map(function( number ) { + return formatter( number ); +}); +``` diff --git a/node_modules/globalize/doc/api/number/number-parser.md b/node_modules/globalize/doc/api/number/number-parser.md new file mode 100644 index 00000000..fb4651f0 --- /dev/null +++ b/node_modules/globalize/doc/api/number/number-parser.md @@ -0,0 +1,130 @@ +## .numberParser( [options] ) ➜ function( value ) + +Return a function that parses a String representing a number according to the given options. If value is invalid, `NaN` is returned. + +The returned function is invoked with one argument: the String representing a number `value` to be parsed. + +### Parameters + +#### options + +See [.numberFormatter() options](./number-formatter.md#parameters). + +#### value + +String with number to be parsed, eg. `"3.14"`. + +### Example + +Prior to using any number methods, you must load `cldr/main/{locale}/numbers.json` and `cldr/supplemental/numberingSystems.json`. Read [CLDR content][] if you need more information. + +[CLDR content]: ../../../README.md#2-cldr-content + +You can use the static method `Globalize.numberParser()`, which uses the default locale. + +```javascript +var parser; + +Globalize.locale( "en" ); +parser = Globalize.numberParser(); + +parser( "3.14" ); +// > 3.14 +``` + +You can use the instance method `.numberParser()`, which uses the instance locale. + +```javascript +var enParser = Globalize( "en" ).numberParser(), + esParser = Globalize( "es" ).numberParser(); + +enParser( "3.14" ); +// > 3.14 + +esParser( "3,14" ); +// > 3.14 +``` + +Some more examples. + +```javascript +var enParser = Globalize( "en" ).numberParser(); + +enParser( "12,735" ); +// > 12735 + +enParser( "12,735.00" ); +// > 12735 + +Globalize( "en" ).numberParser({ style: "percent" })( "100%" ); +// > 1 + +enParser( "∞" ); +// > Infinity + +enParser( "-3" ); +// > -3 + +enParser( "-∞" ); +// > -Infinity + +enParser( "invalid-stuff" ); +// > NaN + +enParser( "invalid-stuff-that-includes-number-123" ); +// > NaN + +enParser( "invalid-stuff-123-that-includes-number" ); +// > NaN + +enParser( "123-invalid-stuff-that-includes-number" ); +// > NaN + +// Invalid decimal separator. (note `.` is used as decimal separator for English) +enParser( "3,14" ); +// > NaN + +// Invalid grouping separator position. +enParser( "127,35.00" ); +// > NaN +``` + +Loose matching examples. + +```js +var svParser = Globalize( "sv" ).numberParser(); + +// Swedish uses NO-BREAK-SPACE U+00A0 as grouping separator. +svParser( "1\xA0000,50" ); +// > 1000.5 + +// The parser is lenient and accepts various space characters like regular space +// SPACE U+0020. Technically, it accepts any character of the Unicode general +// category [:Zs:]. +svParser( "1 000,50" ); +// > 1000.5 + +var fiParser = Globalize( "fi" ).numberParser(); + +// Finish uses MINUS SIGN U+2212 for the minus sign. +fiParser( "\u22123" ); +// > -3 + +// The parser is lenient and accepts various hyphen characters like regular +// HYPHEN-MINUS U+002D. Technically, it accepts any character of the Unicode +// general category [:Dash:]. +fiParser( "-3" ); +// > -3 +``` + +For improved performance on iterations, first create the parser. Then, reuse it +on each loop. + +```javascript +var formattedNumbers = [ "1", "1", "2", "3", ... ]; +var parser = Globalize( "en" ).numberParser(); + +numbers = formattedNumbers.map(function( formattedNumber ) { + return parser( formattedNumber ); +}); +``` diff --git a/node_modules/globalize/doc/api/plural/plural-generator.md b/node_modules/globalize/doc/api/plural/plural-generator.md new file mode 100644 index 00000000..d9cea88e --- /dev/null +++ b/node_modules/globalize/doc/api/plural/plural-generator.md @@ -0,0 +1,84 @@ +## .pluralGenerator( [options] ) ➜ function( value ) + +It supports the creation of internationalized messages with plural inflection by returning a function that returns the value's plural group: `zero`, `one`, `two`, `few`, `many`, or `other`. + +The returned function is invoked with one argument: the Number `value` for which to return the plural group. + +### Parameters + +#### options.type + +Optional. String `cardinal` (default), or `ordinal`. + +#### value + +A Number for which to return the plural group. + +### Example + +Prior to using any plural method, you must load either `supplemental/plurals.json` for cardinals or `supplemental/ordinals.json` for ordinals. + +Read [CLDR content][] if you need more information. + +[CLDR content]: ../../../README.md#2-cldr-content + +You can use the static method `Globalize.pluralGenerator()`, which uses the default locale. + +```javascript +var plural; + +Globalize.locale( "en" ); + +// Cardinals +plural = Globalize.pluralGenerator(); + +plural( 0 ); +// > "other" + +plural( 1 ); +// > "one" + +plural( 2 ); +// > "other" + +// Ordinals +plural = Globalize.pluralGenerator({ type: "ordinal" }); + +plural( 0 ); +// > "other" + +plural( 1 ); +// > "one" + +plural( 2 ); +// > "two" +``` + +You can use the instance method `.pluralGenerator()`, which uses the instance locale. + +```javascript +var plural = Globalize( "zh" ).pluralGenerator(); + +plural( 1 ); +// > "other" +``` + +For comparison (cardinals): + +| | en (English) | ru (Russian) | ar (Arabic) | +| ------------- | ------------ | ------------ | ----------- | +| `plural( 0 )` | `other` | `many` | `zero` | +| `plural( 1 )` | `one` | `one` | `one` | +| `plural( 2 )` | `other` | `few` | `two` | +| `plural( 3 )` | `other` | `few` | `few` | +| `plural( 5 )` | `other` | `many` | `few` | + +For comparison (ordinals): + +| | en (English) | ru (Russian) | ar (Arabic) | +| ---------------------------------- | ------------ | ------------ | ----------- | +| `plural( 0, { type: "ordinal" } )` | `other` | `other` | `other` | +| `plural( 1, { type: "ordinal" } )` | `one` | `other` | `other` | +| `plural( 2, { type: "ordinal" } )` | `two` | `other` | `other` | +| `plural( 3, { type: "ordinal" } )` | `few` | `other` | `other` | +| `plural( 5, { type: "ordinal" } )` | `other` | `other` | `other` | diff --git a/node_modules/globalize/doc/api/relative-time/relative-time-formatter.md b/node_modules/globalize/doc/api/relative-time/relative-time-formatter.md new file mode 100644 index 00000000..a04e345d --- /dev/null +++ b/node_modules/globalize/doc/api/relative-time/relative-time-formatter.md @@ -0,0 +1,60 @@ +## .relativeTimeFormatter( unit [, options] ) ➜ function( value ) + +Returns a function that formats a relative time according to the given unit, options, and the default/instance locale. + +The returned function is invoked with one argument: the number `value` to be formatted. + +### Parameters + +#### unit + +String value indicating the unit to be formatted. eg. "day", "week", "month", etc. + +#### options.form + +String, e.g., `"short"` or `"narrow"`, or falsy for default long form. + +#### value + +The number to be formatted. + + +### Example + +Prior to using any relative time methods, you must load `cldr/main/{locale}/dateFields.json` and the CLDR content required by the number and plural modules. Read [CLDR content][] if you need more information. + +[CLDR content]: ../../../README.md#2-cldr-content + +You can use the static method `Globalize.relativeTimeFormatter()`, which uses the default locale. + +```javascript +var formatter; + +Globalize.locale( "en" ); +formatter = Globalize.relativeTimeFormatter( "month" ); + +formatter( 1 ); +// > "next month" + +formatter( 3 ); +// > "in 3 months" + +formatter( -1 ); +// > "last month" + +formatter( -3 ); +// > "3 months ago" +``` + +You can use the instance method `.relativeTimeFormatter()`, which uses the instance locale. + +```javascript +var globalize = new Globalize( "en" ), + formatter = globalize.relativeTimeFormatter( "week" ); + +formatter( 1 ); +// > "next week" +``` + + + diff --git a/node_modules/globalize/doc/api/unit/unit-formatter.md b/node_modules/globalize/doc/api/unit/unit-formatter.md new file mode 100644 index 00000000..0ab88f20 --- /dev/null +++ b/node_modules/globalize/doc/api/unit/unit-formatter.md @@ -0,0 +1,72 @@ +## .unitFormatter( unit [, options] ) ➜ function( value ) + +Returns a function that formats a unit according to the given unit, options, and the default/instance locale. + +The returned function is invoked with one argument: the number `value` to be formatted. + +### Parameters + +#### unit + +String value indicating the unit to be formatted. eg. "day", "week", "month", etc. Could also be a compound unit, eg. "mile-per-hour" or "mile/hour" + +#### options.form + +Optional. String, e.g., `"long"` (default), `"short"` or `"narrow"`. + +#### options.numberFormatter + +Optional. A number formatter function. Defaults to `Globalize.numberFormatter()` for the current locale using the default options. + +#### value + +The number to be formatted. + +### Example + +Prior to using any unit methods, you must load `cldr/main/{locale}/units.json` and the CLDR content required by the plural module. Read [CLDR content][] if you need more information. + +[CLDR content]: ../../../README.md#2-cldr-content + +You can use the static method `Globalize.unitFormatter()`, which uses the default locale. + +```javascript +var customNumberFormatter, formatter; + +Globalize.locale( "en" ); +formatter = Globalize.unitFormatter( "month", { form: "long" } ); + +formatter( 1 ); +// > "1 month" + +formatter( 3 ); +// > "3 months" + +formatter( 3000 ); +// > "3,000 months" +``` + +You can pass a custom number formatter to format the number of units. + +```javascript +var customNumberFormatter, formatter; + +Globalize.locale( "en" ); +customNumberFormatter = Globalize.numberFormatter({ useGrouping = false }) +formatter = Globalize.unitFormatter( "mile-per-hour", { + form: "narrow", numberFormatter: customNumberFormatter +} ); + +formatter(5000) +// > "5000mph" +``` + +You can use the instance method `.unitFormatter()`, which uses the instance locale. + +```javascript +var globalize = new Globalize( "en" ), + formatter = globalize.unitFormatter( "mile-per-hour", { form: "narrow" } ); + +formatter( 10 ); +// > "10mph" +``` diff --git a/node_modules/globalize/doc/blog-post/2017-07-xx-1.3.0-announcement.md b/node_modules/globalize/doc/blog-post/2017-07-xx-1.3.0-announcement.md new file mode 100644 index 00000000..004e5b96 --- /dev/null +++ b/node_modules/globalize/doc/blog-post/2017-07-xx-1.3.0-announcement.md @@ -0,0 +1,177 @@ +# Globalize 1.3.0 announcement + +On July 3rd, we released Globalize 1.3.0. It is a special release, because it includes some very useful feature enhancements to support advanced date, time, timezone manipulation, and other long due fixes. We wanted to share more details on these improvements. + +## IANA/Olson Time Zone Support + +> This change was contributed by Kandaswamy Manikandan @rajavelmani (PayPal) and Rafael Xavier @rxaviers in #687 and #701. + +In previous versions, Globalize had some partial time zone support for a user's runtime time zone. However specific CLDR patterns (`z`, `v`, and `V`) that display strings such as `PDT`, `Pacific Daylight Time`, `Pacific Time`, and `Los Angeles Time` could not be displayed. The challenge [we had](https://github.com/globalizejs/globalize/pull/202) to determine how costly a solution would be to provide full IANA/Olson time zone support due to the additional manipulation code and data (i.e., IANA database). Therefore, in the past, we encouraged users that needed to manipulate date in arbitrary time zones to use a separate library, like *moment-timezone*. Nevertheless, this solution never closed the gap between internationalization (i18n) implementations leveraging CLDR and having full maneuverability of time zones. + +With the latest release 1.3.0, Globalize fully supports time zone. Simply put, by using Globalize 1.3.0, you now have full IANA support with the strength of CLDR for i18n! + +```js +Globalize.locale("en"); +let date = new Date(); + +Globalize.formatDate(date, {datetime: "short", timeZone: "America/Los_Angeles"}); +// > '3/19/17, 3:19 PM' +Globalize.formatDate(date, {datetime: "short", timeZone: "America/New_York"}); +// > '3/19/17, 6:19 PM' +Globalize.formatDate(date, {datetime: "short", timeZone: "America/Sao_Paulo"}); +// > '3/19/17, 7:19 PM' +Globalize.formatDate(date, {datetime: "short", timeZone: "Europe/Berlin"}); +// > '3/19/17, 11:19 PM' + +Globalize.formatDate(date, {datetime: "full", timeZone: "America/Los_Angeles"}); +// > 'Sunday, March 19, 2017 at 3:19:22 PM Pacific Daylight Time' +Globalize.formatDate(date, {datetime: "full", timeZone: "America/New_York"}); +// > 'Sunday, March 19, 2017 at 6:19:22 PM Eastern Daylight Time' +Globalize.formatDate(date, {datetime: "full", timeZone: "America/Sao_Paulo"}); +// > 'Sunday, March 19, 2017 at 7:19:22 PM Brasilia Standard Time' +Globalize.formatDate(date, {datetime: "full", timeZone: "Europe/Berlin"}); +// > 'Sunday, March 19, 2017 at 11:19:22 PM Central European Standard Time' + +Globalize("pt").formatDate(date, {datetime: "full", timeZone: "America/Sao_Paulo"}); +// > 'domingo, 19 de março de 2017 19:19:22 Horário Padrão de Brasília' +Globalize("de").formatDate(date, {datetime: "full", timeZone: "Europe/Berlin"}); +// > 'Sonntag, 19. März 2017 um 23:19:22 Mitteleuropäische Normalzeit' +Globalize("zh").formatDate(date, {datetime: "full", timeZone: "Asia/Shanghai"}); +// > '2017年3月20日星期一 中国标准时间 上午6:19:22' +Globalize("ar").formatDate(date, {datetime: "full", timeZone: "Africa/Cairo"}); +// > 'الاثنين، ٢٠ مارس، ٢٠١٧ ١٢:١٩:٢٢ ص توقيت شرق أوروبا الرسمي' +``` + +We have solved this in a low footprint, high performance implementation using [zoned-date-time](https://github.com/rxaviers/zoned-date-time) under the hoods, which is a 0.6KB library for the time zone manipulations. We have leveraged the Globalize Compiler for precompling the IANA data base for production. For example, let's say you are serving content in English (e.g. locale en-US) for America/Los_Angeles time using the following formatter: + +```js +var dateWithTimeZoneFormatter = Globalize.dateFormatter({ + datetime: "full", + timeZone: "America/Los_Angeles" +}); +``` + +The final size (for production) of this code will be: + +| filename | minified+gzipped size | +| ---------------------------------------- | --------------------- | +| i18n/en.js (includes CLDR and IANA data) | 1.7KB | +| core, number, and date globalize runtime lib + zoned-date-time | 7.0KB | + +See globalize [compiler example](https://github.com/globalizejs/globalize/tree/master/examples/globalize-compiler) or [app-npm-webpack example](https://github.com/globalizejs/globalize/tree/master/examples/app-npm-webpack) for details. + +## Format Date To Parts + +> This change was contributed by Reza Payami @rpayami (PayPal) and Rafael Xavier @rxaviers in #697 and #700. + +Modern user interfaces often need to manipulate the date format output, which is impossible via the existing format function that returns an opaque string. Making any attempt to do this can break internationalization support. [Ecma-402](https://github.com/tc39/ecma402/) has recently added [`Intl.DateTimeFormat.prototype.formatToParts`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts) to fulfill that purpose, which at the time of this post, is at stage 4 and is implemented by latest Firefox and Chrome. + +In Globalize, we introduced [`.dateToPartsFormatter`](https://github.com/globalizejs/globalize/blob/master/doc/api/date/date-to-parts-formatter.md) and [`.formatDateToParts`](https://github.com/globalizejs/globalize/blob/master/doc/api/date/date-to-parts-formatter.md). + +```js +Globalize.locale( "en" ); +Globalize.formatDateToParts(new Date(2010, 10, 30)); +// > [ +// { "type": "month", "value": "11" }, +// { "type": "literal", "value": "/" }, +// { "type": "day", "value": "30" }, +// { "type": "literal", "value": "/" }, +// { "type": "year", "value": "2010" } +// ] +``` + +The data is available separately and it can be formatted and concatenated again in a customized way. For example by using [`Array.prototype.map()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map), [arrow functions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions), a [switch statement](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch), [template literals](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals), and [`Array.prototype.reduce()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce). + +```js +let formatter; + +Globalize.locale( "en" ); +formatter = Globalize.dateToPartsFormatter({datetime: "short"}); + +formatter( new Date( 2010, 10, 30, 17, 55 ) ).map(({type, value}) => { + switch ( type ) { + case "year": return `${value}`; + default: return value; + } +}).join( "" ); +// > "11/30/10, 5:55 PM" +``` + +See [React Date Input](https://github.com/rxaviers/react-date-input) as a demo of a UI component for React optimized for i18n and a11y. + +| Localized and smart date input | Feb 28 in `en`, `es`, `pt`, `de`, `zh`, `ko`, and `ar` | +| ---------------------------------------- | ---------------------------------------- | +| ![en](https://media.giphy.com/media/xUA7aZAUNINGP2jI4M/giphy.gif) | ![en-es-pt-de-zh-ko-ar](https://media.giphy.com/media/3og0ILQu0KxLRewJnW/giphy.gif) | + +## Dynamically Augmented Date Skeletons + +> This change was contributed by Marat Dyatko @vectart and Artur Eshenbrener @Strate in #462 and #604. + +The style used to display a date format often varies depending on the application. CLDR offers data for certain presets like short (e.g., short date `"7/1/17"`), medium (e.g., medium date `"Jul 1, 2017"`), long (e.g., long date `"July 1, 2017"`), and full (e.g., full date `"Saturday, July 1, 2017"`). Although, we may want something different such as `"Jul 1"`. For that CLDR offers data for individual [date fields](http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table) and their combinations, which are used by Globalize to synthesize an open-ended list of custom formats (called skeletons). But, what's interesting is that it would be prohibitively large if CLDR provided data for every single possible combination. So, there's an algorithm specified by [UTS#35](http://www.unicode.org/reports/tr35/tr35-dates.html#availableFormats_appendItems) to deduce missing data from the requested format. + +For the `"Jul 1"` example, we should use `{skeleton: "MMMd"}`. Internally, Globalize finds a direct match in CLDR for the requested skeleton. This works fine in previous Globalize versions. + +For that next example, let's assume we want `"July 1"`, i.e., `{skeleton: "MMMMd"}`. Internally, Globalize doesn't find a direct match in CLDR. For this skeleton, Globalize needs to use the data for `MMMd`, which maps to `"MMM d"` in the English case, and then it needs to replace `MMM` with `MMMM` dynamically generating `"MMMM d"`. This doesn't work in previous versions of Globalize, but it works now on latest v1.3.0. + +If we wanted `"07/01"` instead, we should use `{skeleton: "MMdd"}`. Internally, Globalize doesn't find a direct match in CLDR for this skeleton and, therefore, it fais in globalize v1.2.3. Globalize needs to use the data for `Md`, which in the case of English maps to `"M/d"`, and then replace `M` wtih `MM` and `d` with `dd` dynamically generating `"MM/dd"`. + +To make a long story short, the algorithm in globalize v1.3.0 has been significantly improved and it allows using virtually any skeletons. + +```js +// A skeleton not directly found in CLDR and that needs to be deduced by globalize. +// In English, globalize needs to use the data for GyMMMEd, and adjust MMM with MMMM, +// and E with EEEE. Then, it needs to find the data for hms and glue them together +// using the appropriate format. +// On globalize v1.2.3, an error is thrown saying this skeleton wasn't found. +let skeleton = "GyMMMMEEEEdhms"; +Globalize("en").formatDate(new Date(), {skeleton}); +// > 'Saturday, July 1, 2017 AD at 4:58:27 PM' +Globalize("pt").formatDate(new Date(), {skeleton}); +// > 'sábado, 1 de julho de 2017 d.C. 5:01:20 PM' +Globalize("de").formatDate(new Date(), {skeleton}); +// > 'Samstag, 1. Juli 2017 n. Chr. um 5:01:33 nachm.' +Globalize("zh").formatDate(new Date(), {skeleton}); +// > '公元2017年七月月1日星期六 下午5:01:35' +Globalize("ko").formatDate(new Date(), {skeleton}); +// > 'AD 2017년 7월 1일 토요일 오후 5:01:38' +Globalize("ar").formatDate(new Date(), {skeleton}); +// > 'السبت، ١ يوليو، ٢٠١٧ م ٥:٠١:٤٠ م' +Globalize("ar-MA").formatDate(new Date(), {skeleton}); +// > 'السبت، 1 يوليوز، 2017 م 5:04:29 م' +Globalize("it").formatDate(new Date(), {skeleton}); +// > 'sabato 1 luglio 2017 d.C. 5:01:52 PM' +``` + +Read our [getting started](https://github.com/globalizejs/globalize/#getting-started) and play with it yourself. + +## Other Enhancements and Bug Fixes + +🎉 Enhancements + +- Date: Show timezone offset optional minutes for O pattern (e.g., GMT-6:30 note the :30) [#339](https://github.com/globalizejs/globalize/pull/339) (via PR [#729](https://github.com/globalizejs/globalize/pull/729)) (Rafael Xavier) +- Date: Show timezone offset optional minutes and seconds for x and X patterns (e.g., -06:30 note the :30) [#339](https://github.com/globalizejs/globalize/pull/339) (via PR [#729](https://github.com/globalizejs/globalize/pull/729)) (Rafael Xavier) +- Date: Assert options.skeleton (PR [#726](https://github.com/globalizejs/globalize/pull/726)) (Rafael Xavier) +- Date parser: Make runtime phase lighter [#735](https://github.com/globalizejs/globalize/pull/735) (Rafael Xavier) +- Date parser: Loose Matching PR [#730](https://github.com/globalizejs/globalize/pull/730) (Rafael Xavier) + - Allows, among others, parsing arabic dates as user types them (i.e., without control characters) +- Number formatter: Amend integer and fraction formatter for small numbers like 1e-7 [#750](https://github.com/globalizejs/globalize/pull/750) (Rafael Xavier) +- Number parser: Lenient about trailing decimal separator [#744](https://github.com/globalizejs/globalize/pull/744) (Rafael Xavier) +- Runtime: Use strict [#676](https://github.com/globalizejs/globalize/pull/676) (Zack Birkenbuel) + +🐛 Fixes + +- Date parser: invalid output by mixing numbering systems [#696](https://github.com/globalizejs/globalize/pull/696) (via PR [#733](https://github.com/globalizejs/globalize/pull/733)) (Rafael Xavier) +- Date parser: fails on Turkish full datetime with Monday or Saturday [#690](https://github.com/globalizejs/globalize/pull/690) (via PR [#732](https://github.com/globalizejs/globalize/pull/732)) (Rafael Xavier) + +⚙️ Others + +- Compiler tests! [#721](https://github.com/globalizejs/globalize/pull/721) (via PR [#727](https://github.com/globalizejs/globalize/pull/727)) (Nikola Kovacs) +- Documentation style refactor [#737](https://github.com/globalizejs/globalize/pull/737) (Rafael Xavier) + +## Last but not least + +Special thanks to other PayPal internationalization team members including Daniel Bruhn, Lucas Welti, Alolita Sharma, Mike McKenna for testing and helping integrate Globalize for PayPal products. + +Special thanks to James Bellenger and Nicolas Gallagher for the React and Webpack integration enhancements for Twitter products, which certainly deserves its own blog post. + +Many thanks to all of you who participated in this release by testing, reporting bugs, or submitting patches, including Jörn Zaefferer, Frédéric Miserey, Nova Patch, and whole Globalize team. diff --git a/node_modules/globalize/doc/cldr.md b/node_modules/globalize/doc/cldr.md new file mode 100644 index 00000000..e7fe767e --- /dev/null +++ b/node_modules/globalize/doc/cldr.md @@ -0,0 +1,114 @@ +# Unicode CLDR usage + +## How do I get CLDR data? + +*By downloading the JSON packages individually...* + +Unicode CLDR is available as JSON at https://github.com/unicode-cldr/ (after this [json-packaging proposal][] took place). Please, read https://github.com/unicode-cldr/cldr-json for more information about package organization. + +[json-packaging proposal]: http://cldr.unicode.org/development/development-process/design-proposals/json-packaging + +*By using a package manager...* + +`cldr-data` can be used for convenience. It always downloads from the correct source. + +Use bower `bower install cldr-data` ([detailed instructions][]) or npm `npm install cldr-data`. For more information, see: + +- https://github.com/rxaviers/cldr-data-npm +- https://github.com/rxaviers/cldr-data-bower + +[detailed instructions]: https://github.com/rxaviers/cldr-data-bower + +## How do I load CLDR data into Globalize? + +The short answer is by using `Globalize.load()` and passing the JSON data as the first argument. Below, follow several examples on how this could be accomplished. + +Example of embedding CLDR JSON data: + +```html + +``` + +Example of loading it dynamically: + +```html + + +``` + +Example using AMD (also see our [functional tests](../../test/functional.js)): +```javascript +define([ + "globalize", + "json!cldr-data/main/en/ca-gregorian.json", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/timeData.json", + "json!cldr-data/supplemental/weekData.json", + "globalize/date" +], function( Globalize, enCaGregorian, likelySubtags, timeData, weekData ) { + + Globalize.load( + enCaGregorian, + likelySubtags, + timeData, + weekData + ); + + // Your code goes here. + +}); +``` + +Example using Node.js: + +```javascript +var Globalize = require( "globalize" ); + +Globalize.load( + require( "cldr-data/main/en/ca-gregorian" ), + require( "cldr-data/supplemental/likelySubtags" ), + require( "cldr-data/supplemental/timeData" ), + require( "cldr-data/supplemental/weekData" ) +); +``` diff --git a/node_modules/globalize/doc/error/e-default-locale-not-defined.md b/node_modules/globalize/doc/error/e-default-locale-not-defined.md new file mode 100644 index 00000000..84e6d815 --- /dev/null +++ b/node_modules/globalize/doc/error/e-default-locale-not-defined.md @@ -0,0 +1,9 @@ +## E_DEFAULT_LOCALE_NOT_DEFINED + +Thrown when any static method, eg. `Globalize.formatNumber()` is used prior to setting the Global locale with `Globalize.locale( )`. + +Error object: + +| Attribute | Value | +| --- | --- | +| code | `E_DEFAULT_LOCALE_NOT_DEFINED` | diff --git a/node_modules/globalize/doc/error/e-invalid-cldr.md b/node_modules/globalize/doc/error/e-invalid-cldr.md new file mode 100644 index 00000000..8a954cc7 --- /dev/null +++ b/node_modules/globalize/doc/error/e-invalid-cldr.md @@ -0,0 +1,14 @@ +## E_INVALID_CLDR + +Thrown when a CLDR item has an invalid or unexpected value. + +Error object: + +| Attribute | Value | +| --- | --- | +| code | `E_INVALID_CLDR` | +| description | Reason why the data was considered invalid | + +- description "Missing rules to deduce plural form of \`{value}\`" + + Thrown when the plural form (also known as plural group) is not found for the given value. This error is very unlikely to occur and is related to incomplete or invalid CLDR `supplemental/plurals-type-cardinal/{language}` data. diff --git a/node_modules/globalize/doc/error/e-invalid-par-type.md b/node_modules/globalize/doc/error/e-invalid-par-type.md new file mode 100644 index 00000000..893cf1bf --- /dev/null +++ b/node_modules/globalize/doc/error/e-invalid-par-type.md @@ -0,0 +1,12 @@ +## E_INVALID_PAR_TYPE + +Thrown when a parameter has an invalid type on any static or instance methods. + +Error object: + +| Attribute | Value | +| --- | --- | +| code | `E_INVALID_PAR_TYPE` | +| name | Name of the invalid parameter | +| value | Invalid value | +| expected | Expected type | diff --git a/node_modules/globalize/doc/error/e-invalid-par-value.md b/node_modules/globalize/doc/error/e-invalid-par-value.md new file mode 100644 index 00000000..d9e32ba3 --- /dev/null +++ b/node_modules/globalize/doc/error/e-invalid-par-value.md @@ -0,0 +1,11 @@ +## E_INVALID_PAR_VALUE + +Thrown for certain parameters when the type is correct, but the value is invalid. Currently, the only parameter with such validation is the date format (for either format and parse). Format allows [certain variants](../api/date/date-formatter.md#parameters), if it's none of them, error is thrown. + +Error object: + +| Attribute | Value | +| --- | --- | +| code | `E_INVALID_PAR_VALUE` | +| name | Name of the invalid parameter | +| value | Invalid value | diff --git a/node_modules/globalize/doc/error/e-missing-cldr.md b/node_modules/globalize/doc/error/e-missing-cldr.md new file mode 100644 index 00000000..fc77dbf9 --- /dev/null +++ b/node_modules/globalize/doc/error/e-missing-cldr.md @@ -0,0 +1,11 @@ +## E_MISSING_CLDR + +Thrown when any required CLDR item is NOT found. + +Error object: + +| Attribute | Value | +| --- | --- | +| code | `E_MISSING_CLDR` | +| path | Missing CLDR item path | + diff --git a/node_modules/globalize/doc/error/e-missing-parameter.md b/node_modules/globalize/doc/error/e-missing-parameter.md new file mode 100644 index 00000000..f0efac2c --- /dev/null +++ b/node_modules/globalize/doc/error/e-missing-parameter.md @@ -0,0 +1,10 @@ +## E_MISSING_PARAMETER + +Thrown when a required parameter is missing on any static or instance methods. + +Error object: + +| Attribute | Value | +| --- | --- | +| code | `E_MISSING_PARAMETER` | +| name | Name of the missing parameter | diff --git a/node_modules/globalize/doc/error/e-missing-plural-module.md b/node_modules/globalize/doc/error/e-missing-plural-module.md new file mode 100644 index 00000000..e80610c5 --- /dev/null +++ b/node_modules/globalize/doc/error/e-missing-plural-module.md @@ -0,0 +1,9 @@ +## E_MISSING_PLURAL_MODULE + +Thrown when plural module is needed, but not loaded, eg. formatting currencies using plural messages. + +Error object: + +| Attribute | Value | +| --- | --- | +| code | `E_MISSING_PLURAL_MODULE` | diff --git a/node_modules/globalize/doc/error/e-par-missing-key.md b/node_modules/globalize/doc/error/e-par-missing-key.md new file mode 100644 index 00000000..974aa5b1 --- /dev/null +++ b/node_modules/globalize/doc/error/e-par-missing-key.md @@ -0,0 +1,11 @@ +## E_PAR_MISSING_KEY + +Thrown when a parameter misses a required key. + +Error object: + +| Attribute | Value | +| --- | --- | +| code | `E_PAR_MISSING_KEY` | +| key | Name of the missing parameter's key | +| name | Name of the missing parameter | diff --git a/node_modules/globalize/doc/error/e-par-out-of-range.md b/node_modules/globalize/doc/error/e-par-out-of-range.md new file mode 100644 index 00000000..44c0c91f --- /dev/null +++ b/node_modules/globalize/doc/error/e-par-out-of-range.md @@ -0,0 +1,13 @@ +## E_PAR_OUT_OF_RANGE + +Thrown when a parameter is not within a valid range of values. + +Error object: + +| Attribute | Value | +| --- | --- | +| code | `E_PAR_OUT_OF_RANGE` | +| name | Name of the invalid parameter | +| value | Invalid value | +| minimum | Minimum value of the valid range | +| maximum | Maximum value of the valid range | diff --git a/node_modules/globalize/doc/error/e-unsupported.md b/node_modules/globalize/doc/error/e-unsupported.md new file mode 100644 index 00000000..33546c16 --- /dev/null +++ b/node_modules/globalize/doc/error/e-unsupported.md @@ -0,0 +1,10 @@ +## E_UNSUPPORTED + +Thrown for unsupported features, eg. to format unsupported date patterns. + +Error object: + +| Attribute | Value | +| --- | --- | +| code | `E_UNSUPPORTED` | +| feature | Description of the unsupported feature | diff --git a/node_modules/globalize/doc/migrating-from-0.x.md b/node_modules/globalize/doc/migrating-from-0.x.md new file mode 100644 index 00000000..6187beb3 --- /dev/null +++ b/node_modules/globalize/doc/migrating-from-0.x.md @@ -0,0 +1,64 @@ +# Migrating from Globalize 0.x + +Globalize 0.x came with a bundled locale for US English, and optional files for various other locales. Globalize 1.x uses CLDR for the locale data, and it doesn't bundle any locale data. Check out the documentation for loading CLDR data in 1.x to learn more about that. If you were only using the bundle locale, you only need to load CLDR data for US English. If you were loading other locales, make sure you load those from CLDR as well. + +On the API side, things have also changed, to simplify usage, remove ambiguity and add features. The rest of this document provides a brief function-by-function list. + +If you still need help with migration, let us know. We may extend this guide later as necessary. + +## Globalize.addCultureInfo() + +This method is replaced by `Globalize.loadMessages( json )`. If you were using it for anything except message translations, you may also need to use `Globalize.load`. + +## Globalize.cultures + +This property is gone. You can use Cldrjs to traverse CLDR directly. + +## Globalize.culture( [locale] ) + +This method is replaced by the `Globalize.locale( [locale|cldr] )` method. Call it without arguments to retrieve the default locale, call it with a string argument to set the default locale. + +## Globalize.findClosestCulture + +This method is gone, there is no replacement. If you still need this method, create an issue with your usecase. + +## Globalize.format + +Replaced by three separate methods: + +* `.formatNumber( value [, options] )` +* `.formatCurrency( value, currency [, options] )` +* `.formatDate( value, pattern )` + +See their respective documentation for usage details. Note that the number and date formats are now based on CLDR, using the options and patterns standardized by Unicode. We don't currently have documentation for migrating these formats. + +## Globalize.localize + +Replaced by `.formatMessage( path [, variables ] )`. The new API is quite different and provides much more than just value-lookup. See their respective documentation for usage details. + +## Globalize.parseInt/parseFloat + +Replaced by `.parseNumber( value [, options] )`. So where you might have previously executed: + +```js +Globalize( "en" ).parseFloat( "123,456.789" ) +// > 123456.789 +``` + +You could now execute: + +```js +Globalize( "en" ).parseNumber( "123,456.789" ) +// > 123456.789 +``` + +`parseNumber` is an alias for [`.numberParser( [options] )( value )`](api/number/number-parser.md). So you could also do this: + +```js +Globalize( "en" ).numberParser()( "123,456.789" ) +// > 123456.789 +``` + +## Globalize.parseDate + +This method still exists, and the signature is almost the same: `.parseDate( value, pattern )`. Note that `pattern` indicates just a single "format", where Globalize 0.x supported multiple of those "formats". diff --git a/node_modules/globalize/examples/.DS_Store b/node_modules/globalize/examples/.DS_Store new file mode 100644 index 00000000..f62a99b6 Binary files /dev/null and b/node_modules/globalize/examples/.DS_Store differ diff --git a/node_modules/globalize/examples/amd-bower/.DS_Store b/node_modules/globalize/examples/amd-bower/.DS_Store new file mode 100644 index 00000000..ce80e63c Binary files /dev/null and b/node_modules/globalize/examples/amd-bower/.DS_Store differ diff --git a/node_modules/globalize/examples/amd-bower/.bowerrc b/node_modules/globalize/examples/amd-bower/.bowerrc new file mode 100644 index 00000000..adf6a366 --- /dev/null +++ b/node_modules/globalize/examples/amd-bower/.bowerrc @@ -0,0 +1,7 @@ +{ + "directory": "bower_components", + "scripts": { + "preinstall": "npm install cldr-data-downloader", + "postinstall": "node ./node_modules/cldr-data-downloader/bin/download.js -i bower_components/cldr-data/index.json -o bower_components/cldr-data/" + } +} diff --git a/node_modules/globalize/examples/amd-bower/.npmignore b/node_modules/globalize/examples/amd-bower/.npmignore new file mode 100644 index 00000000..fbe05fc9 --- /dev/null +++ b/node_modules/globalize/examples/amd-bower/.npmignore @@ -0,0 +1 @@ +bower_components/ diff --git a/node_modules/globalize/examples/amd-bower/README.md b/node_modules/globalize/examples/amd-bower/README.md new file mode 100644 index 00000000..0ea1e5d5 --- /dev/null +++ b/node_modules/globalize/examples/amd-bower/README.md @@ -0,0 +1,65 @@ +# Hello World (AMD + bower) + +We assume you know what [AMD](https://github.com/amdjs/amdjs-api/wiki/AMD) and +[bower](http://bower.io/) is. + +The demo is composed of the following files: + +``` +. +├── index.html +└── main.js +``` + +Before running it, execute the requirements below. + + +## Requirements + +**1. Install Globalize** + +Let's use bower to download Globalize. For more information on regard of +installation, please read [Getting Started](../../README.md#installation). + +``` +bower install +``` + +Note bower will also fetch some other dependencies of this demo, eg. require.js +and its json plugin. + +You'll get this: + +``` +. +├── bower_components/ +│ ├── globalize/ +│ │ └── dist/ +│ │ ├── globalize +│ │ │ ├── date.js +│ │ │ └── ... +│ │ └── globalize.js +│ └── ... +├── index.html +└── main.js +``` + +**2. Install Dependencies** + +No action needed, because bower has already handled that for us. + +**3. CLDR content** + +No action needed, because bower has already handled that for us. Note `.bowerrc` +has postinstall hook that populates bower's cldr-data skeleton. For more +information, see [bower's cldr-data](https://github.com/rxaviers/cldr-data-bower). + + +## Running the demo + +Once you've completed the requirements above: + +1. Start a server by running `python -m SimpleHTTPServer` or other alternative servers such as [http-server](https://github.com/nodeapps/http-server), [nginx](http://nginx.org/en/docs/), [apache](http://httpd.apache.org/docs/trunk/). +1. Point your browser at `http://localhost:8000/`. +1. Understand the demo by reading the source code (both index.html and main.js). +We have comments there for you. diff --git a/node_modules/globalize/examples/amd-bower/bower.json b/node_modules/globalize/examples/amd-bower/bower.json new file mode 100644 index 00000000..f7e6a3c0 --- /dev/null +++ b/node_modules/globalize/examples/amd-bower/bower.json @@ -0,0 +1,13 @@ +{ + "name": "globalize-hello-world-amd-bower", + "dependencies": { + "cldr-data": "*", + "globalize": "^1.3.0", + "iana-tz-data": "*" + }, + "devDependencies": { + "requirejs": "2.1.14", + "requirejs-plugins": "1.0.2" , + "requirejs-text": "2.0.12" + } +} diff --git a/node_modules/globalize/examples/amd-bower/index.html b/node_modules/globalize/examples/amd-bower/index.html new file mode 100644 index 00000000..753c99c9 --- /dev/null +++ b/node_modules/globalize/examples/amd-bower/index.html @@ -0,0 +1,46 @@ + + + + + Globalize Hello World (AMD + bower) + + +

Globalize Hello World (AMD + bower)

+ +
+

Requirements

+
    +
  • Run `bower install` (you must have bower installed first).
  • +
  • Start a server, e.g., by running `python -m SimpleHTTPServer`.
  • +
  • Point your browser at `http://localhost:8000/`.
  • +
  • Please, read README.md for more information on any of the above.
  • +
+
+ + + + + + + + diff --git a/node_modules/globalize/examples/amd-bower/main.js b/node_modules/globalize/examples/amd-bower/main.js new file mode 100644 index 00000000..33782cc9 --- /dev/null +++ b/node_modules/globalize/examples/amd-bower/main.js @@ -0,0 +1,141 @@ +/** + * 1. Configure require.js paths. + */ +require.config({ + paths: { + // Globalize dependencies paths. + cldr: "./bower_components/cldrjs/dist/cldr", + + // Unicode CLDR JSON data. + "cldr-data": "./bower_components/cldr-data", + + // IANA time zone data. + "iana-tz-data": "../bower_components/iana-tz-data/iana-tz-data", + + // require.js plugin we'll use to fetch CLDR JSON content. + json: "./bower_components/requirejs-plugins/src/json", + + // text is json's dependency. + text: "./bower_components/requirejs-text/text", + + // Globalize. + globalize: "./bower_components/globalize/dist/globalize" + } +}); + + +/** + * 2. Require dependencies and run your code. + */ +require([ + "globalize", + + // CLDR content. + "json!cldr-data/main/en/ca-gregorian.json", + "json!cldr-data/main/en/currencies.json", + "json!cldr-data/main/en/dateFields.json", + "json!cldr-data/main/en/numbers.json", + "json!cldr-data/main/en/timeZoneNames.json", + "json!cldr-data/main/en/units.json", + "json!cldr-data/supplemental/currencyData.json", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/metaZones.json", + "json!cldr-data/supplemental/plurals.json", + "json!cldr-data/supplemental/timeData.json", + "json!cldr-data/supplemental/weekData.json", + "json!messages/en.json", + "json!iana-tz-data.json", + + // Extend Globalize with Date and Number modules. + "globalize/currency", + "globalize/date", + "globalize/message", + "globalize/number", + "globalize/plural", + "globalize/relative-time", + "globalize/unit" +], function( Globalize, enGregorian, enCurrencies, enDateFields, enNumbers, + enTimeZoneNames, enUnits, currencyData, likelySubtags, metaZones, + pluralsData, timeData, weekData, messages, ianaTzData ) { + + var en, like, number; + + // At this point, we have Globalize loaded. But, before we can use it, we need to feed it on the appropriate I18n content (Unicode CLDR). Read Requirements on Getting Started on the root's README.md for more information. + Globalize.load( + currencyData, + enCurrencies, + enDateFields, + enGregorian, + enNumbers, + enTimeZoneNames, + enUnits, + likelySubtags, + metaZones, + pluralsData, + timeData, + weekData + ); + Globalize.loadMessages( messages ); + Globalize.loadTimeZone( ianaTzData ); + + // Instantiate "en". + en = Globalize( "en" ); + + // Use Globalize to format dates. + document.getElementById( "date" ).textContent = en.formatDate( new Date(), { + datetime: "medium" + }); + + // Use Globalize to format dates on specific time zone. + document.getElementById( "zonedDate" ).textContent = en.formatDate( new Date(), { + datetime: "full", + timeZone: "America/Sao_Paulo" + }); + + // Use Globalize to format dates to parts. + document.getElementById( "dateToParts" ).innerHTML = en.formatDateToParts( new Date(), { + datetime: "medium" + }).map(function( part ) { + switch(part.type) { + case "month": return "" + part.value + ""; + default: return part.value; + } + }).reduce(function( memo, value ) { + return memo + value; + }); + + // Use Globalize to format numbers. + number = en.numberFormatter(); + document.getElementById( "number" ).textContent = number( 12345.6789 ); + document.getElementById( "number-compact" ).textContent = en.formatNumber( 12345.6789, { + compact: "short", + minimumSignificantDigits: 1, + maximumSignificantDigits: 3 + }); + + // Use Globalize to format currencies. + document.getElementById( "currency" ).textContent = en.formatCurrency( 69900, "USD" ); + + // Use Globalize to get the plural form of a numeric value. + document.getElementById( "plural-number" ).textContent = number( 12345.6789 ); + document.getElementById( "plural-form" ).textContent = en.plural( 12345.6789 ); + + // Use Globalize to format a message with plural inflection. + like = en.messageFormatter( "like" ); + document.getElementById( "message-0" ).textContent = like( 0 ); + document.getElementById( "message-1" ).textContent = like( 1 ); + document.getElementById( "message-2" ).textContent = like( 2 ); + document.getElementById( "message-3" ).textContent = like( 3 ); + + // Use Globalize to format a relative time. + document.getElementById( "relative-time" ).textContent = en.formatRelativeTime( -35, "second" ); + + // Use Globalize to format a unit. + document.getElementById( "unit" ).textContent = en.formatUnit( 60, "mile/hour", { + form: "short" + }); + + document.getElementById( "requirements" ).style.display = "none"; + document.getElementById( "demo" ).style.display = "block"; + +}); diff --git a/node_modules/globalize/examples/amd-bower/main.js.orig b/node_modules/globalize/examples/amd-bower/main.js.orig new file mode 100644 index 00000000..aa31a27a --- /dev/null +++ b/node_modules/globalize/examples/amd-bower/main.js.orig @@ -0,0 +1,148 @@ +/** + * 1. Configure require.js paths. + */ +require.config({ + paths: { + // Globalize dependencies paths. + cldr: "./bower_components/cldrjs/dist/cldr", + + // Unicode CLDR JSON data. + "cldr-data": "./bower_components/cldr-data", + + // IANA time zone data. + "iana-tz-data": "../bower_components/iana-tz-data/iana-tz-data", + + // require.js plugin we'll use to fetch CLDR JSON content. + json: "./bower_components/requirejs-plugins/src/json", + + // text is json's dependency. + text: "./bower_components/requirejs-text/text", + + // Globalize. + globalize: "./bower_components/globalize/dist/globalize" + } +}); + + +/** + * 2. Require dependencies and run your code. + */ +require([ + "globalize", + + // CLDR content. + "json!cldr-data/main/en/ca-gregorian.json", + "json!cldr-data/main/en/currencies.json", + "json!cldr-data/main/en/dateFields.json", + "json!cldr-data/main/en/numbers.json", + "json!cldr-data/main/en/timeZoneNames.json", + "json!cldr-data/main/en/units.json", + "json!cldr-data/supplemental/currencyData.json", + "json!cldr-data/supplemental/likelySubtags.json", + "json!cldr-data/supplemental/metaZones.json", + "json!cldr-data/supplemental/plurals.json", + "json!cldr-data/supplemental/ordinals.json", + "json!cldr-data/supplemental/timeData.json", + "json!cldr-data/supplemental/weekData.json", + "json!messages/en.json", + "json!iana-tz-data.json", + + // Extend Globalize with Date and Number modules. + "globalize/currency", + "globalize/date", + "globalize/message", + "globalize/number", + "globalize/plural", + "globalize/relative-time", + "globalize/unit" +<<<<<<< HEAD +], function( Globalize, enGregorian, enCurrencies, enDateFields, enNumbers, + enTimeZoneNames, enUnits, currencyData, likelySubtags, metaZones, + pluralsData, timeData, weekData, messages, ianaTzData ) { +======= +], function( Globalize, enGregorian, enCurrencies, enDateFields, enNumbers, enUnits, currencyData, + likelySubtags, pluralsData, ordinalsData, timeData, weekData, messages ) { +>>>>>>> 3518f872... Message: fix selectOrdinal. + + var en, like, number; + + // At this point, we have Globalize loaded. But, before we can use it, we need to feed it on the appropriate I18n content (Unicode CLDR). Read Requirements on Getting Started on the root's README.md for more information. + Globalize.load( + currencyData, + enCurrencies, + enDateFields, + enGregorian, + enNumbers, + enTimeZoneNames, + enUnits, + likelySubtags, + metaZones, + pluralsData, + ordinalsData, + timeData, + weekData + ); + Globalize.loadMessages( messages ); + Globalize.loadTimeZone( ianaTzData ); + + // Instantiate "en". + en = Globalize( "en" ); + + // Use Globalize to format dates. + document.getElementById( "date" ).textContent = en.formatDate( new Date(), { + datetime: "medium" + }); + + // Use Globalize to format dates on specific time zone. + document.getElementById( "zonedDate" ).textContent = en.formatDate( new Date(), { + datetime: "full", + timeZone: "America/Sao_Paulo" + }); + + // Use Globalize to format dates to parts. + document.getElementById( "dateToParts" ).innerHTML = en.formatDateToParts( new Date(), { + datetime: "medium" + }).map(function( part ) { + switch(part.type) { + case "month": return "" + part.value + ""; + default: return part.value; + } + }).reduce(function( memo, value ) { + return memo + value; + }); + + // Use Globalize to format numbers. + number = en.numberFormatter(); + document.getElementById( "number" ).textContent = number( 12345.6789 ); + document.getElementById( "number-compact" ).textContent = en.formatNumber( 12345.6789, { + compact: "short", + minimumSignificantDigits: 1, + maximumSignificantDigits: 3 + }); + + // Use Globalize to format currencies. + document.getElementById( "currency" ).textContent = en.formatCurrency( 69900, "USD" ); + + // Use Globalize to get the plural form of a numeric value. + document.getElementById( "plural-number" ).textContent = number( 12345.6789 ); + document.getElementById( "plural-form" ).textContent = en.plural( 12345.6789 ); + + // Use Globalize to format a message with plural inflection. + like = en.messageFormatter( "like" ); + document.getElementById( "message-0" ).textContent = like( 0 ); + document.getElementById( "message-1" ).textContent = like( 1 ); + document.getElementById( "message-2" ).textContent = like( 2 ); + document.getElementById( "message-3" ).textContent = like( 3 ); + + // Use Globalize to format a relative time. + document.getElementById( "relative-time" ).textContent = en.formatRelativeTime( -35, "second" ); + + // Use Globalize to format a unit. + document.getElementById( "unit" ).textContent = en.formatUnit( 60, "mile/hour", { + form: "short" + }); + + document.getElementById( "requirements" ).style.display = "none"; + document.getElementById( "demo" ).style.display = "block"; + +}); diff --git a/node_modules/globalize/examples/amd-bower/messages/en.json b/node_modules/globalize/examples/amd-bower/messages/en.json new file mode 100644 index 00000000..cd37baee --- /dev/null +++ b/node_modules/globalize/examples/amd-bower/messages/en.json @@ -0,0 +1,12 @@ +{ + "en": { + "like": [ + "{0, plural, offset:1", + " =0 {Be the first to like this}", + " =1 {You liked this}", + " one {You and someone else liked this}", + " other {You and # others liked this}", + "}" + ] + } +} diff --git a/node_modules/globalize/examples/amd-bower/package-lock.json b/node_modules/globalize/examples/amd-bower/package-lock.json new file mode 100644 index 00000000..27c96cdf --- /dev/null +++ b/node_modules/globalize/examples/amd-bower/package-lock.json @@ -0,0 +1,454 @@ +{ + "name": "globalize-hello-world-amd-bower", + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "resolved": "https://npm.paypal.com/repository/npm-all/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "adm-zip": { + "version": "0.4.11", + "resolved": "https://npm.paypal.com/repository/npm-all/adm-zip/-/adm-zip-0.4.11.tgz", + "integrity": "sha512-L8vcjDTCOIJk7wFvmlEUN7AsSb8T+2JrdP7KINBjzr24TJ5Mwj590sLu3BC7zNZowvJWa/JtPmD8eJCzdtDWjA==" + }, + "ajv": { + "version": "5.5.2", + "resolved": "https://npm.paypal.com/repository/npm-all/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://npm.paypal.com/repository/npm-all/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://npm.paypal.com/repository/npm-all/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://npm.paypal.com/repository/npm-all/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://npm.paypal.com/repository/npm-all/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.7.0", + "resolved": "https://npm.paypal.com/repository/npm-all/aws4/-/aws4-1.7.0.tgz", + "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://npm.paypal.com/repository/npm-all/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "boom": { + "version": "4.3.1", + "resolved": "https://npm.paypal.com/repository/npm-all/boom/-/boom-4.3.1.tgz", + "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", + "requires": { + "hoek": "4.2.1" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://npm.paypal.com/repository/npm-all/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "cldr-data-downloader": { + "version": "0.3.4", + "resolved": "https://npm.paypal.com/repository/npm-all/cldr-data-downloader/-/cldr-data-downloader-0.3.4.tgz", + "integrity": "sha1-SiWXAiHvg5vh7LWKFnEdo/Pk1sA=", + "requires": { + "adm-zip": "0.4.11", + "mkdirp": "0.5.0", + "nopt": "3.0.6", + "progress": "1.1.8", + "q": "1.0.1", + "request": "2.83.0", + "request-progress": "0.3.1" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://npm.paypal.com/repository/npm-all/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "combined-stream": { + "version": "1.0.6", + "resolved": "https://npm.paypal.com/repository/npm-all/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "requires": { + "delayed-stream": "1.0.0" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://npm.paypal.com/repository/npm-all/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cryptiles": { + "version": "3.1.2", + "resolved": "https://npm.paypal.com/repository/npm-all/cryptiles/-/cryptiles-3.1.2.tgz", + "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", + "requires": { + "boom": "5.2.0" + }, + "dependencies": { + "boom": { + "version": "5.2.0", + "resolved": "https://npm.paypal.com/repository/npm-all/boom/-/boom-5.2.0.tgz", + "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", + "requires": { + "hoek": "4.2.1" + } + } + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://npm.paypal.com/repository/npm-all/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "1.0.0" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://npm.paypal.com/repository/npm-all/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://npm.paypal.com/repository/npm-all/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://npm.paypal.com/repository/npm-all/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://npm.paypal.com/repository/npm-all/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://npm.paypal.com/repository/npm-all/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://npm.paypal.com/repository/npm-all/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://npm.paypal.com/repository/npm-all/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.2", + "resolved": "https://npm.paypal.com/repository/npm-all/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.18" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://npm.paypal.com/repository/npm-all/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "1.0.0" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://npm.paypal.com/repository/npm-all/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.0.3", + "resolved": "https://npm.paypal.com/repository/npm-all/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "requires": { + "ajv": "5.5.2", + "har-schema": "2.0.0" + } + }, + "hawk": { + "version": "6.0.2", + "resolved": "https://npm.paypal.com/repository/npm-all/hawk/-/hawk-6.0.2.tgz", + "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", + "requires": { + "boom": "4.3.1", + "cryptiles": "3.1.2", + "hoek": "4.2.1", + "sntp": "2.1.0" + } + }, + "hoek": { + "version": "4.2.1", + "resolved": "https://npm.paypal.com/repository/npm-all/hoek/-/hoek-4.2.1.tgz", + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://npm.paypal.com/repository/npm-all/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.14.2" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://npm.paypal.com/repository/npm-all/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://npm.paypal.com/repository/npm-all/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://npm.paypal.com/repository/npm-all/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://npm.paypal.com/repository/npm-all/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://npm.paypal.com/repository/npm-all/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://npm.paypal.com/repository/npm-all/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://npm.paypal.com/repository/npm-all/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://npm.paypal.com/repository/npm-all/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://npm.paypal.com/repository/npm-all/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "requires": { + "mime-db": "1.33.0" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://npm.paypal.com/repository/npm-all/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdirp": { + "version": "0.5.0", + "resolved": "https://npm.paypal.com/repository/npm-all/mkdirp/-/mkdirp-0.5.0.tgz", + "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", + "requires": { + "minimist": "0.0.8" + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://npm.paypal.com/repository/npm-all/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "requires": { + "abbrev": "1.1.1" + } + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://npm.paypal.com/repository/npm-all/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://npm.paypal.com/repository/npm-all/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "progress": { + "version": "1.1.8", + "resolved": "https://npm.paypal.com/repository/npm-all/progress/-/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=" + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://npm.paypal.com/repository/npm-all/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "q": { + "version": "1.0.1", + "resolved": "https://npm.paypal.com/repository/npm-all/q/-/q-1.0.1.tgz", + "integrity": "sha1-EYcq7t7okmgRCxCnGESP+xARKhQ=" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://npm.paypal.com/repository/npm-all/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "request": { + "version": "2.83.0", + "resolved": "https://npm.paypal.com/repository/npm-all/request/-/request-2.83.0.tgz", + "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", + "requires": { + "aws-sign2": "0.7.0", + "aws4": "1.7.0", + "caseless": "0.12.0", + "combined-stream": "1.0.6", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.3.2", + "har-validator": "5.0.3", + "hawk": "6.0.2", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.18", + "oauth-sign": "0.8.2", + "performance-now": "2.1.0", + "qs": "6.5.2", + "safe-buffer": "5.1.2", + "stringstream": "0.0.6", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.6.0", + "uuid": "3.3.2" + } + }, + "request-progress": { + "version": "0.3.1", + "resolved": "https://npm.paypal.com/repository/npm-all/request-progress/-/request-progress-0.3.1.tgz", + "integrity": "sha1-ByHBBdipasayzossia4tXs/Pazo=", + "requires": { + "throttleit": "0.0.2" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://npm.paypal.com/repository/npm-all/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://npm.paypal.com/repository/npm-all/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sntp": { + "version": "2.1.0", + "resolved": "https://npm.paypal.com/repository/npm-all/sntp/-/sntp-2.1.0.tgz", + "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", + "requires": { + "hoek": "4.2.1" + } + }, + "sshpk": { + "version": "1.14.2", + "resolved": "https://npm.paypal.com/repository/npm-all/sshpk/-/sshpk-1.14.2.tgz", + "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.2", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "safer-buffer": "2.1.2", + "tweetnacl": "0.14.5" + } + }, + "stringstream": { + "version": "0.0.6", + "resolved": "https://npm.paypal.com/repository/npm-all/stringstream/-/stringstream-0.0.6.tgz", + "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==" + }, + "throttleit": { + "version": "0.0.2", + "resolved": "https://npm.paypal.com/repository/npm-all/throttleit/-/throttleit-0.0.2.tgz", + "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=" + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://npm.paypal.com/repository/npm-all/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://npm.paypal.com/repository/npm-all/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://npm.paypal.com/repository/npm-all/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://npm.paypal.com/repository/npm-all/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://npm.paypal.com/repository/npm-all/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + } + } + } +} diff --git a/node_modules/globalize/examples/amd-bower/package.json b/node_modules/globalize/examples/amd-bower/package.json new file mode 100644 index 00000000..d5d3f391 --- /dev/null +++ b/node_modules/globalize/examples/amd-bower/package.json @@ -0,0 +1,14 @@ +{ + "name": "globalize-hello-world-amd-bower", + "private": true, + "comment": [ + "You don't need this file. The only reasone this example does have a", + "package.json is to fool npm, so cldr-data-downloader doesn't get", + "installed on Globalize's root.", + "", + "It's analogous to `chroot .` for npm. [:P]" + ], + "dependencies": { + "cldr-data-downloader": "^0.3.4" + } +} diff --git a/node_modules/globalize/examples/app-npm-webpack/.DS_Store b/node_modules/globalize/examples/app-npm-webpack/.DS_Store new file mode 100644 index 00000000..88a7198c Binary files /dev/null and b/node_modules/globalize/examples/app-npm-webpack/.DS_Store differ diff --git a/node_modules/globalize/examples/app-npm-webpack/.npmignore b/node_modules/globalize/examples/app-npm-webpack/.npmignore new file mode 100644 index 00000000..1b4210d4 --- /dev/null +++ b/node_modules/globalize/examples/app-npm-webpack/.npmignore @@ -0,0 +1,3 @@ +dist/ +node_modules +.tmp-globalize-webpack diff --git a/node_modules/globalize/examples/app-npm-webpack/.npmrc b/node_modules/globalize/examples/app-npm-webpack/.npmrc new file mode 100644 index 00000000..07ad4ad0 --- /dev/null +++ b/node_modules/globalize/examples/app-npm-webpack/.npmrc @@ -0,0 +1,6 @@ +registry=https://registry.npmjs.org/ +//registry.npmjs.com/:_password="a2FtaXJhaTE=" +//registry.npmjs.com/:username=rxaviers +//registry.npmjs.com/:email=rxaviers@gmail.com +//registry.npmjs.com/:always-auth=false +//registry.npmjs.com/:_authToken=36c10436-8235-4eda-87dc-d130b4eeaa58 diff --git a/node_modules/globalize/examples/app-npm-webpack/README.md b/node_modules/globalize/examples/app-npm-webpack/README.md new file mode 100644 index 00000000..ead9d430 --- /dev/null +++ b/node_modules/globalize/examples/app-npm-webpack/README.md @@ -0,0 +1,74 @@ +# Globalize App example using webpack + +This example demonstrates how to integrate Globalize with Webpack in your +Application. If you already have an existing Application using Webpack stack, +this example should as well provide you guidance on how to integrate Globalize. +It focuses on the [Globalize Webpack Plugin][], which automates data loading +(CLDR and app messages) during development and automates Globalize compilation +and the usage of Globalize runtime modules for production. It assumes knowledge +of Globalize, npm, and Webpack usage basics. + +## Requirements + +**1. Install app development dependencies** + +This example uses `npm` to download the app development dependencies (i.e., +Globalize, CLDR data, Cldrjs, Webpack, [Globalize Webpack Plugin][], and +others). + +``` +npm install +``` + +## Running the example + +### Development mode + +``` +npm start +``` + +1. Start a server by running `npm start`, which uses webpack's live reload HMR +(Hot Module Replacement). See `package.json` to understand the actual shell +command that is used. +1. Point your browser at `http://localhost:8080`. Note that your browser will +automatically reload on any changes made to the application code (`app/*.js` +files). Also note that for faster page reload, formatters are created +dynamically and automatically by the [Globalize Webpack Plugin][]. +1. Note you can specify the development locale of your choice by setting the +`developmentLocale` property of the Globalize Webpack Plugin on the Webpack +config file. +1. Note that CLDR data and your messages data are automatically loaded by the +[Globalize Webpack Plugin][]. +1. Understand the demo by reading the source code. We have comments there for +you. + +### Production mode + +``` +npm run build +``` + +1. Generate the compiled bundles by running `npm run build`, which will be +created at `./dist`. Note the production bundles are split into three chunks: +(a) vendor, which holds third-party libraries, which in this case means +Globalize Runtime modules, (b) i18n precompiled data, which means the minimum +yet sufficient set of precompiled i18n data that your application needs (one +file for each supported locale), and (c) app, which means your application code. +Also note that all the production code is already minified using UglifyJS. See +`package.json` to understand the actual shell command that is used. +1. Note that your formatters are already precompiled. This is +obvious, but worth emphasizing. It means your formatters are prebuilt, so no client +CPU clock is wasted to generate them and no CLDR or messages data needs to be +dynamically loaded. It means fast to load code (small code) and fast to run +code. +1. Point your browser at `./dist/index.html` to run the application using the +generated production files. Edit this file to display the application using a +different locale (source code has instructions). +1. Understand the demo by reading the source code. We have comments there for +you. + +For more information about the plugin, see the [Globalize Webpack Plugin][] +documentation. + +[Globalize Webpack Plugin]: https://github.com/rxaviers/globalize-webpack-plugin diff --git a/node_modules/globalize/examples/app-npm-webpack/app/.index.js.swp b/node_modules/globalize/examples/app-npm-webpack/app/.index.js.swp new file mode 100644 index 00000000..bd12a169 Binary files /dev/null and b/node_modules/globalize/examples/app-npm-webpack/app/.index.js.swp differ diff --git a/node_modules/globalize/examples/app-npm-webpack/app/index.js b/node_modules/globalize/examples/app-npm-webpack/app/index.js new file mode 100644 index 00000000..2c3bb1b3 --- /dev/null +++ b/node_modules/globalize/examples/app-npm-webpack/app/index.js @@ -0,0 +1,89 @@ +var Globalize = require( "globalize" ); +var startTime = new Date(); + +// Standalone table. +var numberFormatter = Globalize.numberFormatter({ maximumFractionDigits: 2 }); +document.getElementById( "number" ).textContent = numberFormatter( 12345.6789 ); + +var numberCompactFormatter = Globalize.numberFormatter({ + compact: "short", + minimumSignificantDigits: 1, + maximumSignificantDigits: 3 +}); +document.getElementById( "number-compact" ).textContent = numberCompactFormatter( 12345.6789 ); + +var currencyFormatter = Globalize.currencyFormatter( "USD" ); +document.getElementById( "currency" ).textContent = currencyFormatter( 69900 ); + +var dateFormatter = Globalize.dateFormatter({ datetime: "medium" }); +document.getElementById( "date" ).textContent = dateFormatter( new Date() ); + +var dateWithTimeZoneFormatter = Globalize.dateFormatter({ + datetime: "full", + timeZone: "America/Sao_Paulo" +}); +document.getElementById( "date-time-zone" ).textContent = dateWithTimeZoneFormatter( new Date() ); + +var _dateToPartsFormatter = Globalize.dateToPartsFormatter({ datetime: "medium" }); +var dateToPartsFormatter = function( value ) { + return _dateToPartsFormatter( value, { + datetime: "medium" + }).map(function( part ) { + switch(part.type) { + case "month": return "" + part.value + ""; + default: return part.value; + } + }).reduce(function( memo, value ) { + return memo + value; + }); +}; +document.getElementById( "date-to-parts" ).innerHTML = dateToPartsFormatter( new Date() ); + +var relativeTimeFormatter = Globalize.relativeTimeFormatter( "second" ); +document.getElementById( "relative-time" ).textContent = relativeTimeFormatter( 0 ); + +var unitFormatter = Globalize.unitFormatter( "mile/hour", { form: "short" } ); +document.getElementById( "unit" ).textContent = unitFormatter( 60 ); + +// Messages. +document.getElementById( "intro-1" ).textContent = Globalize.formatMessage( "intro-1" ); +document.getElementById( "number-label" ).textContent = Globalize.formatMessage( "number-label" ); +document.getElementById( "number-compact-label" ).textContent = Globalize.formatMessage( "number-compact-label" ); +document.getElementById( "currency-label" ).textContent = Globalize.formatMessage( "currency-label" ); +document.getElementById( "date-label" ).textContent = Globalize.formatMessage( "date-label" ); +document.getElementById( "date-time-zone-label" ).textContent = Globalize.formatMessage( "date-time-zone-label" ); +document.getElementById( "date-to-parts-label" ).textContent = Globalize.formatMessage( "date-to-parts-label" ); +document.getElementById( "relative-time-label" ).textContent = Globalize.formatMessage( "relative-time-label" ); +document.getElementById( "unit-label" ).textContent = Globalize.formatMessage( "unit-label" ); +document.getElementById( "message-1" ).textContent = Globalize.formatMessage( "message-1", { + currency: currencyFormatter( 69900 ), + date: dateFormatter( new Date() ), + number: numberFormatter( 12345.6789 ), + relativeTime: relativeTimeFormatter( 0 ), + unit: unitFormatter( 60 ) +}); + +document.getElementById( "message-2" ).textContent = Globalize.formatMessage( "message-2", { + count: 3 +}); + +// Display demo. +document.getElementById( "requirements" ).style.display = "none"; +document.getElementById( "demo" ).style.display = "block"; + +// Refresh elapsed time +setInterval(function() { + var elapsedTime = +( ( startTime - new Date() ) / 1000 ).toFixed( 0 ); + document.getElementById( "date" ).textContent = dateFormatter( new Date() ); + document.getElementById( "date-time-zone" ).textContent = dateWithTimeZoneFormatter( new Date() ); + document.getElementById( "date-to-parts" ).innerHTML = dateToPartsFormatter( new Date() ); + document.getElementById( "relative-time" ).textContent = relativeTimeFormatter( elapsedTime ); + document.getElementById( "message-1" ).textContent = Globalize.formatMessage( "message-1", { + currency: currencyFormatter( 69900 ), + date: dateFormatter( new Date() ), + number: numberFormatter( 12345.6789 ), + relativeTime: relativeTimeFormatter( elapsedTime ), + unit: unitFormatter( 60 ) + }); + +}, 1000); diff --git a/node_modules/globalize/examples/app-npm-webpack/index-template.html b/node_modules/globalize/examples/app-npm-webpack/index-template.html new file mode 100644 index 00000000..48966fd8 --- /dev/null +++ b/node_modules/globalize/examples/app-npm-webpack/index-template.html @@ -0,0 +1,71 @@ + + + + + + Globalize App example using Webpack + + + +

Globalize App example using Webpack

+ +
+

Requirements

+
    +
  • Read README.md for instructions on how to run the demo. +
  • +
+
+ + + + + diff --git a/node_modules/globalize/examples/app-npm-webpack/messages/ar.json b/node_modules/globalize/examples/app-npm-webpack/messages/ar.json new file mode 100644 index 00000000..cb4142b9 --- /dev/null +++ b/node_modules/globalize/examples/app-npm-webpack/messages/ar.json @@ -0,0 +1,25 @@ +{ + "ar": { + "intro-1": "‫استخدم Globalize لتدويل تطبيقك.‬", + "number-label": "رقم", + "number-compact-label": "الرقم (شكل مدمج)", + "currency-label": "عملة", + "date-label": "تاريخ", + "date-time-zone-label": "التاريخ (في منطقة زمنية محددة ل إيانا، على سبيل المثال، America/Sao_Paulo)", + "date-to-parts-label": "التاريخ (لاحظ الشهر القوي، تمت إضافة الترميز باستخدام formatDateToParts)", + "relative-time-label": "الوقت النسبي", + "unit-label": "وحدة القياس", + "message-1": "مثال علي رسالة باستخدام رقم مختلط \"{number}\", عملة \"{currency}\", تاريخ \"{date}\", وقت نسبي \"{relativeTime}\", و وحدة قياس \"{unit}\" .", + "message-2": [ + "مثال على رسالة بدعم صيغة الجمع:", + "{count, plural,", + " zero {لا يوجد لديك اي مهام متبقية}", + " one {لديك مهمة واحدة متبقية}", + " two {لديك اثنين من المهام المتبقية}", + " few {لديك # من المهام المتبقية}", + " many {لديك # من المهام المتبقية}", + " other {لديك # من المهام المتبقية}", + "}." + ] + } +} diff --git a/node_modules/globalize/examples/app-npm-webpack/messages/de.json b/node_modules/globalize/examples/app-npm-webpack/messages/de.json new file mode 100644 index 00000000..00b8326a --- /dev/null +++ b/node_modules/globalize/examples/app-npm-webpack/messages/de.json @@ -0,0 +1,21 @@ +{ + "de": { + "intro-1": "Verwenden Sie Globalize um Ihre Anwendung zu internationalisieren.", + "number-label": "Zahl", + "number-compact-label": "Zahl (kompakte Form)", + "currency-label": "Währung", + "date-label": "Datum", + "date-time-zone-label": "Datum (in einer bestimmten IANA-Zeitzone, z. B. America/Sao_Paulo)", + "date-to-parts-label": "Datum (beachten Sie den hervorgehobenen Monat, das Markup wurde mit dateToPartsFormatter hinzugefügt)", + "relative-time-label": "Relative Zeit", + "unit-label": "Einheit", + "message-1": "Ein Beispiel mit Zahl \"{number}\", Währung \"{currency}\", Datum \"{date}\", relative Zeit \"{relativeTime}\", und Einheit \"{unit}\".", + "message-2": [ + "Ein Beispieltext mit Unterstützung von Plural Formen: ", + "{count, plural,", + " one {Sie haben noch eine Aufgabe}", + " other {Sie haben noch # verbliebende Aufgaben}", + "}." + ] + } +} diff --git a/node_modules/globalize/examples/app-npm-webpack/messages/en.json b/node_modules/globalize/examples/app-npm-webpack/messages/en.json new file mode 100644 index 00000000..290c91d4 --- /dev/null +++ b/node_modules/globalize/examples/app-npm-webpack/messages/en.json @@ -0,0 +1,21 @@ +{ + "en": { + "intro-1": "Use Globalize to internationalize your application.", + "number-label": "Number", + "number-compact-label": "Number (compact form)", + "currency-label": "Currency", + "date-label": "Date", + "date-time-zone-label": "Date (in a specific IANA time zone, e.g., America/Sao_Paulo)", + "date-to-parts-label": "Date (note the highlighted month, the markup was added using formatDateToParts)", + "relative-time-label": "Relative Time", + "unit-label": "Unit", + "message-1": "An example of a message using mixed number \"{number}\", currency \"{currency}\", date \"{date}\", relative time \"{relativeTime}\", and unit \"{unit}\".", + "message-2": [ + "An example of a message with pluralization support:", + "{count, plural,", + " one {You have one remaining task}", + " other {You have # remaining tasks}", + "}." + ] + } +} diff --git a/node_modules/globalize/examples/app-npm-webpack/messages/es.json b/node_modules/globalize/examples/app-npm-webpack/messages/es.json new file mode 100644 index 00000000..6cc79427 --- /dev/null +++ b/node_modules/globalize/examples/app-npm-webpack/messages/es.json @@ -0,0 +1,21 @@ +{ + "es": { + "intro-1": "Usa Globalize para internacionalizar tu aplicación.", + "number-label": "Número", + "number-compact-label": "Número (forma compacta)", + "currency-label": "Moneda", + "date-label": "Fecha", + "date-time-zone-label": "Fecha (en una zona horaria IANA específica, por ejemplo, America/Sao_Paulo)", + "date-to-parts-label": "Fecha (note el mes destacado en negro, el marcador de html se agregó utilizando dateToPartsFormatter)", + "relative-time-label": "Tiempo Relativo", + "unit-label": "Unidad", + "message-1": "Un ejemplo de mensaje usando números mixtos \"{number}\", monedas \"{currency}\", fechas \"{date}\", tiempo relativo \"{relativeTime}\", y unidades \"{unit}\".", + "message-2": [ + "Un ejemplo de mensaje con soporte de pluralización:", + "{count, plural,", + " one {Tienes una tarea restante}", + " other {Tienes # tareas restantes}", + "}." + ] + } +} diff --git a/node_modules/globalize/examples/app-npm-webpack/messages/pt.json b/node_modules/globalize/examples/app-npm-webpack/messages/pt.json new file mode 100644 index 00000000..b58f8cf5 --- /dev/null +++ b/node_modules/globalize/examples/app-npm-webpack/messages/pt.json @@ -0,0 +1,21 @@ +{ + "pt": { + "intro-1": "Use o Globalize para internacionalizar sua aplicação.", + "number-label": "Número", + "number-compact-label": "Número (forma compacta)", + "currency-label": "Moeda", + "date-label": "Data", + "date-time-zone-label": "Data (em um fuso horário IANA específico, por exemplo, America/Sao_Paulo)", + "date-to-parts-label": "Data (note o mês em negrito, a marcação HTML foi adicionada usando formatDateToParts)", + "relative-time-label": "Tempo relativo", + "unit-label": "Unit", + "message-1": "Um exemplo de mensagem com mistura de número \"{number}\", moeda \"{currency}\", data \"{date}\", tempo relativo \"{relativeTime}\", e unidade \"{unit}\".", + "message-2": [ + "Um exemplo de message com suporte a pluralização:", + "{count, plural,", + " one {Você tem uma tarefa restante}", + " other {Você tem # tarefas restantes}", + "}." + ] + } +} diff --git a/node_modules/globalize/examples/app-npm-webpack/messages/ru.json b/node_modules/globalize/examples/app-npm-webpack/messages/ru.json new file mode 100644 index 00000000..bedfa2de --- /dev/null +++ b/node_modules/globalize/examples/app-npm-webpack/messages/ru.json @@ -0,0 +1,23 @@ +{ + "ru": { + "intro-1": "Используйте Globalize для интернационализиции вашего приложения.", + "number-label": "Число", + "number-compact-label": "Число (компактная форма)", + "currency-label": "Валюта", + "date-label": "Дата", + "date-time-zone-label": "Дата (в определенном часовом поясе IANA, например, America/Sao_Paulo)", + "date-to-parts-label": "Дата (обратите внимание на сильный месяц, разметка была добавлена с помощью formatDateToParts)", + "relative-time-label": "Относительное время", + "unit-label": "Единица измерения", + "message-1": "Пример сообщения с числом \"{number}\", валютой \"{currency}\", датой \"{date}\", относительным временем \"{relativeTime}\" и единицей измерения \"{unit}\".", + "message-2": [ + "Пример сообщения с поддержкой множественного числа:", + "{count, plural,", + " one {У вас осталась одна задача}", + " many {У вас осталось # задач}", + " few {У вас осталось # задачи}", + " other {У вас осталось # задачи}", + "}." + ] + } +} diff --git a/node_modules/globalize/examples/app-npm-webpack/messages/zh.json b/node_modules/globalize/examples/app-npm-webpack/messages/zh.json new file mode 100644 index 00000000..6f89ef30 --- /dev/null +++ b/node_modules/globalize/examples/app-npm-webpack/messages/zh.json @@ -0,0 +1,20 @@ +{ + "zh": { + "intro-1": "使用Globalize的国际化应用程序", + "number-label": "号码", + "number-compact-label": "编号(紧凑形式)", + "currency-label": "币", + "date-label": "迄今", + "date-time-zone-label": "日期(在特定的IANA时区,例如America / Sao_Paulo)", + "date-to-parts-label": "日期(注意强烈的月份,使用formatDateToParts添加标记)", + "relative-time-label": "相对时间", + "unit-label": "单元", + "message-1": "使用混合数\"{number}\",货币\"{currency}\",日期\"{date}\",相对时间\"{relativeTime}\"和单元\"{unit}\"的消息的例子。", + "message-2": [ + "与多元化支持消息的例子:", + "{count, plural,", + " other {你有#剩下的任务}", + "}." + ] + } +} diff --git a/node_modules/globalize/examples/app-npm-webpack/package-lock.json b/node_modules/globalize/examples/app-npm-webpack/package-lock.json new file mode 100644 index 00000000..1a041c31 --- /dev/null +++ b/node_modules/globalize/examples/app-npm-webpack/package-lock.json @@ -0,0 +1,6711 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "dev": true, + "requires": { + "mime-types": "2.1.18", + "negotiator": "0.6.1" + } + }, + "acorn": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz", + "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==", + "dev": true + }, + "acorn-dynamic-import": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", + "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "dev": true, + "requires": { + "acorn": "4.0.13" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true + } + } + }, + "adm-zip": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.11.tgz", + "integrity": "sha512-L8vcjDTCOIJk7wFvmlEUN7AsSb8T+2JrdP7KINBjzr24TJ5Mwj590sLu3BC7zNZowvJWa/JtPmD8eJCzdtDWjA==", + "dev": true + }, + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "ajv-keywords": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", + "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", + "dev": true + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "3.1.10", + "normalize-path": "2.1.1" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-flatten": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz", + "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=", + "dev": true + }, + "array-includes": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "dev": true, + "requires": { + "define-properties": "1.1.2", + "es-abstract": "1.12.0" + } + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "1.0.3" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "dev": true, + "requires": { + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", + "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "dev": true, + "requires": { + "lodash": "4.17.10" + } + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", + "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", + "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.2.1", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.1", + "pascalcase": "0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "base64-js": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "binary-extensions": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", + "dev": true + }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "dev": true + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + }, + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.2", + "http-errors": "1.6.3", + "iconv-lite": "0.4.19", + "on-finished": "2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "1.6.16" + }, + "dependencies": { + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", + "dev": true + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "2.1.1", + "deep-equal": "1.0.1", + "dns-equal": "1.0.0", + "dns-txt": "2.0.2", + "multicast-dns": "6.2.3", + "multicast-dns-service-types": "1.1.0" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "boom": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", + "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", + "dev": true, + "requires": { + "hoek": "4.2.1" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.2", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "1.2.0", + "browserify-des": "1.0.2", + "evp_bytestokey": "1.0.3" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "randombytes": "2.0.6" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "elliptic": "6.4.0", + "inherits": "2.0.3", + "parse-asn1": "5.1.1" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "1.0.6" + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, + "requires": { + "base64-js": "1.3.0", + "ieee754": "1.1.12", + "isarray": "1.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } + } + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "1.0.0", + "component-emitter": "1.2.1", + "get-value": "2.0.6", + "has-value": "1.0.0", + "isobject": "3.0.1", + "set-value": "2.0.0", + "to-object-path": "0.3.0", + "union-value": "1.0.0", + "unset-value": "1.0.0" + } + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "dev": true, + "requires": { + "no-case": "2.3.2", + "upper-case": "1.1.3" + } + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "2.1.1", + "map-obj": "1.0.1" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + } + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "chokidar": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", + "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", + "dev": true, + "requires": { + "anymatch": "2.0.0", + "async-each": "1.0.1", + "braces": "2.3.2", + "fsevents": "1.2.4", + "glob-parent": "3.1.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "4.0.0", + "lodash.debounce": "4.0.8", + "normalize-path": "2.1.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0", + "upath": "1.1.0" + } + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + } + } + }, + "cldr-data": { + "version": "32.0.1", + "resolved": "https://registry.npmjs.org/cldr-data/-/cldr-data-32.0.1.tgz", + "integrity": "sha1-eWCDKDbgpkp0voi1XuEF8pgKDyo=", + "dev": true, + "requires": { + "cldr-data-downloader": "0.3.4", + "glob": "5.0.15" + } + }, + "cldr-data-downloader": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/cldr-data-downloader/-/cldr-data-downloader-0.3.4.tgz", + "integrity": "sha1-SiWXAiHvg5vh7LWKFnEdo/Pk1sA=", + "dev": true, + "requires": { + "adm-zip": "0.4.11", + "mkdirp": "0.5.0", + "nopt": "3.0.6", + "progress": "1.1.8", + "q": "1.0.1", + "request": "2.83.0", + "request-progress": "0.3.1" + } + }, + "cldrjs": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/cldrjs/-/cldrjs-0.4.8.tgz", + "integrity": "sha1-O5lMRk0qMrWsp8XeF6YKh+RdxPk=", + "dev": true + }, + "clean-css": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz", + "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=", + "dev": true, + "requires": { + "source-map": "0.5.7" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + } + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "1.0.0", + "object-visit": "1.0.1" + } + }, + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz", + "integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==", + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "compressible": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.14.tgz", + "integrity": "sha1-MmxfUH+7BV9UEWeCuWmoG2einac=", + "dev": true, + "requires": { + "mime-db": "1.34.0" + }, + "dependencies": { + "mime-db": { + "version": "1.34.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.34.0.tgz", + "integrity": "sha1-RS0Oz/XDA0am3B5kseruDTcZ/5o=", + "dev": true + } + } + }, + "compression": { + "version": "1.7.2", + "resolved": "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz", + "integrity": "sha1-qv+81qr4VLROuygDU9WtFlH1mmk=", + "dev": true, + "requires": { + "accepts": "1.3.5", + "bytes": "3.0.0", + "compressible": "2.0.14", + "debug": "2.6.9", + "on-headers": "1.0.1", + "safe-buffer": "5.1.1", + "vary": "1.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "connect-history-api-fallback": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=", + "dev": true + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "0.1.4" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "dev": true + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.0" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "inherits": "2.0.3", + "md5.js": "1.3.4", + "ripemd160": "2.0.2", + "sha.js": "2.4.11" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "inherits": "2.0.3", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "4.1.3", + "shebang-command": "1.2.0", + "which": "1.3.1" + } + }, + "cryptiles": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", + "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", + "dev": true, + "requires": { + "boom": "5.2.0" + }, + "dependencies": { + "boom": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", + "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", + "dev": true, + "requires": { + "hoek": "4.2.1" + } + } + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "1.0.1", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.3", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "diffie-hellman": "5.0.3", + "inherits": "2.0.3", + "pbkdf2": "3.0.16", + "public-encrypt": "4.0.2", + "randombytes": "2.0.6", + "randomfill": "1.0.4" + } + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "1.0.0", + "css-what": "2.1.0", + "domutils": "1.5.1", + "nth-check": "1.0.1" + } + }, + "css-what": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", + "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", + "dev": true + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "1.0.2" + } + }, + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "dev": true, + "requires": { + "es5-ext": "0.10.45" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "define-properties": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", + "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "dev": true, + "requires": { + "foreach": "2.0.5", + "object-keys": "1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "1.0.2", + "isobject": "3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "del": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "dev": true, + "requires": { + "globby": "6.1.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.1", + "p-map": "1.2.0", + "pify": "3.0.0", + "rimraf": "2.6.2" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-node": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.3.tgz", + "integrity": "sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "miller-rabin": "4.0.1", + "randombytes": "2.0.6" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "dev": true, + "requires": { + "ip": "1.1.5", + "safe-buffer": "5.1.2" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "1.1.1" + } + }, + "dom-converter": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz", + "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=", + "dev": true, + "requires": { + "utila": "0.3.3" + }, + "dependencies": { + "utila": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", + "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", + "dev": true + } + } + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "dev": true, + "requires": { + "domelementtype": "1.1.3", + "entities": "1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "dev": true + } + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "domelementtype": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "dev": true + }, + "domhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", + "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", + "dev": true, + "requires": { + "domelementtype": "1.3.0" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "elliptic": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.5", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "enhanced-resolve": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", + "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "memory-fs": "0.4.1", + "object-assign": "4.1.1", + "tapable": "0.2.8" + } + }, + "entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "dev": true + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "requires": { + "prr": "1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, + "es-abstract": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", + "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", + "dev": true, + "requires": { + "es-to-primitive": "1.1.1", + "function-bind": "1.1.1", + "has": "1.0.3", + "is-callable": "1.1.4", + "is-regex": "1.0.4" + } + }, + "es-to-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", + "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "dev": true, + "requires": { + "is-callable": "1.1.4", + "is-date-object": "1.0.1", + "is-symbol": "1.0.1" + } + }, + "es5-ext": { + "version": "0.10.45", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.45.tgz", + "integrity": "sha512-FkfM6Vxxfmztilbxxz5UKSD4ICMf5tSpRFtDNtkAhOxZ0EKtX6qwmXNyH/sFyIbX2P/nU5AMiA9jilWsUGJzCQ==", + "dev": true, + "requires": { + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1", + "next-tick": "1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.45", + "es6-symbol": "3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.45", + "es6-iterator": "2.0.3", + "es6-set": "0.1.5", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" + } + }, + "es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.45", + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" + } + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.45" + } + }, + "es6-weak-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.45", + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escodegen": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.10.0.tgz", + "integrity": "sha512-fjUOf8johsv23WuIKdNQU4P9t9jhQ4Qzx6pC2uW890OloK3Zs1ZAoCNpg/2larNF501jLl3UNy0kIRcF6VI22g==", + "dev": true, + "requires": { + "esprima": "3.1.3", + "estraverse": "4.2.0", + "esutils": "2.0.2", + "optionator": "0.8.2", + "source-map": "0.6.1" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + } + } + }, + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "dev": true, + "requires": { + "es6-map": "0.1.5", + "es6-weak-map": "2.0.2", + "esrecurse": "4.2.1", + "estraverse": "4.2.0" + } + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "4.2.0" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.45" + } + }, + "eventemitter3": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", + "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==", + "dev": true + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "eventsource": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", + "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "dev": true, + "requires": { + "original": "1.0.1" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "1.3.4", + "safe-buffer": "5.1.2" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "2.2.4" + }, + "dependencies": { + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "3.0.0", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "express": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", + "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", + "dev": true, + "requires": { + "accepts": "1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.2", + "content-disposition": "0.5.2", + "content-type": "1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.1.1", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "2.0.3", + "qs": "6.5.1", + "range-parser": "1.2.0", + "safe-buffer": "5.1.1", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "1.4.0", + "type-is": "1.6.16", + "utils-merge": "1.0.1", + "vary": "1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", + "dev": true + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": "0.7.0" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "finalhandler": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.4.0", + "unpipe": "1.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "2.0.0" + } + }, + "follow-redirects": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.1.tgz", + "integrity": "sha512-v9GI1hpaqq1ZZR6pBD1+kI7O24PhDvNGNodjS3MdcEqyrahCp8zbtpv+2B/krUnSmUH80lbAS7MrdeK5IylgKg==", + "dev": true, + "requires": { + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.18" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", + "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", + "dev": true, + "optional": true, + "requires": { + "nan": "2.10.0", + "node-pre-gyp": "0.10.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "dev": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.3.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true, + "optional": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", + "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==", + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "dev": true, + "optional": true, + "requires": { + "minipass": "2.2.4" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "optional": true, + "requires": { + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.21", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.21.tgz", + "integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": "2.1.2" + } + }, + "ignore-walk": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "dev": true, + "optional": true, + "requires": { + "minimatch": "3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "optional": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "minipass": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.4.tgz", + "integrity": "sha512-hzXIWWet/BzWhYs2b+u7dRHlruXhwdgvlTMDKC6Cb1U7ps6Ac6yQlR39xsbjWJE377YTCtKwIXIpJ5oP+j5y8g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1", + "yallist": "3.0.2" + } + }, + "minizlib": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz", + "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", + "dev": true, + "optional": true, + "requires": { + "minipass": "2.2.4" + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "optional": true + }, + "needle": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.0.tgz", + "integrity": "sha512-eFagy6c+TYayorXw/qtAdSvaUpEbBsDwDyxYFgLZ0lTojfH7K+OdBqAF7TAFwDokJaGpubpSGG0wO3iC0XPi8w==", + "dev": true, + "optional": true, + "requires": { + "debug": "2.6.9", + "iconv-lite": "0.4.21", + "sax": "1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.0.tgz", + "integrity": "sha512-G7kEonQLRbcA/mOoFoxvlMrw6Q6dPf92+t/l0DFSMuSlDoWaI9JWIyPwK0jyE1bph//CUEL65/Fz1m2vJbmjQQ==", + "dev": true, + "optional": true, + "requires": { + "detect-libc": "1.0.3", + "mkdirp": "0.5.1", + "needle": "2.2.0", + "nopt": "4.0.1", + "npm-packlist": "1.1.10", + "npmlog": "4.1.2", + "rc": "1.2.7", + "rimraf": "2.6.2", + "semver": "5.5.0", + "tar": "4.4.1" + } + }, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "dev": true, + "optional": true, + "requires": { + "abbrev": "1.1.1", + "osenv": "0.1.5" + } + }, + "npm-bundled": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.3.tgz", + "integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow==", + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.10.tgz", + "integrity": "sha512-AQC0Dyhzn4EiYEfIUjCdMl0JJ61I2ER9ukf/sLxJUcZHfo+VyEfz2rMJgLZSS1v30OxPQe1cN0LZA1xbcaVfWA==", + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "3.0.1", + "npm-bundled": "1.0.3" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.7.tgz", + "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==", + "dev": true, + "optional": true, + "requires": { + "deep-extend": "0.5.1", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "optional": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "optional": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true, + "optional": true + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.1.tgz", + "integrity": "sha512-O+v1r9yN4tOsvl90p5HAP4AEqbYhx4036AGMm075fH9F8Qwi3oJ+v4u50FkT/KkvywNGtwkk0zRI+8eYm1X/xg==", + "dev": true, + "optional": true, + "requires": { + "chownr": "1.0.1", + "fs-minipass": "1.2.5", + "minipass": "2.2.4", + "minizlib": "1.1.0", + "mkdirp": "0.5.1", + "safe-buffer": "5.1.1", + "yallist": "3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", + "dev": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "yallist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", + "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", + "dev": true + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + }, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "3.1.0", + "path-dirname": "1.0.2" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + } + } + }, + "globalize": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/globalize/-/globalize-1.3.0.tgz", + "integrity": "sha1-xWUkuKz9LOONDJfd/c6zj2RLM5I=", + "dev": true, + "requires": { + "cldrjs": "0.4.8" + } + }, + "globalize-compiler": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/globalize-compiler/-/globalize-compiler-1.0.0.tgz", + "integrity": "sha1-rFQPbUSeyVrxi9R3fdBIFsnBj98=", + "dev": true, + "requires": { + "escodegen": "1.10.0", + "esprima": "2.7.3", + "nopt": "3.0.6" + } + }, + "globalize-webpack-plugin": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/globalize-webpack-plugin/-/globalize-webpack-plugin-2.1.0.tgz", + "integrity": "sha1-Wb8sITOrthgQZS6+Ok2e+QyeuHM=", + "dev": true, + "requires": { + "cldr-data": "32.0.1", + "globalize-compiler": "1.0.0", + "iana-tz-data": "2017.1.0", + "skip-amd-webpack-plugin": "0.2.0" + } + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + }, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + } + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "handle-thing": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", + "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "dev": true, + "requires": { + "ajv": "5.5.2", + "har-schema": "2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "1.1.1" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "hash.js": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz", + "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "hawk": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", + "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", + "dev": true, + "requires": { + "boom": "4.3.1", + "cryptiles": "3.1.2", + "hoek": "4.2.1", + "sntp": "2.1.0" + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "1.1.5", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "hoek": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==", + "dev": true + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "dev": true + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "obuf": "1.1.2", + "readable-stream": "2.3.6", + "wbuf": "1.7.3" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + } + } + }, + "html-entities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "dev": true + }, + "html-minifier": { + "version": "3.5.19", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.19.tgz", + "integrity": "sha512-Qr2JC9nsjK8oCrEmuB430ZIA8YWbF3D5LSjywD75FTuXmeqacwHgIM8wp3vHYzzPbklSjp53RdmDuzR4ub2HzA==", + "dev": true, + "requires": { + "camel-case": "3.0.0", + "clean-css": "4.1.11", + "commander": "2.16.0", + "he": "1.1.1", + "param-case": "2.1.1", + "relateurl": "0.2.7", + "uglify-js": "3.4.4" + } + }, + "html-webpack-plugin": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz", + "integrity": "sha1-f5xCG36pHsRg9WUn1430hO51N9U=", + "dev": true, + "requires": { + "bluebird": "3.5.1", + "html-minifier": "3.5.19", + "loader-utils": "0.2.17", + "lodash": "4.17.10", + "pretty-error": "2.1.1", + "toposort": "1.0.7" + } + }, + "htmlparser2": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", + "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", + "dev": true, + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.1.0", + "domutils": "1.1.6", + "readable-stream": "1.0.34" + }, + "dependencies": { + "domutils": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz", + "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", + "dev": true, + "requires": { + "domelementtype": "1.3.0" + } + } + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": "1.4.0" + } + }, + "http-parser-js": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.13.tgz", + "integrity": "sha1-O9bW/ebjFyyTNMOzO2wZPYD+ETc=", + "dev": true + }, + "http-proxy": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", + "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", + "dev": true, + "requires": { + "eventemitter3": "3.1.0", + "follow-redirects": "1.5.1", + "requires-port": "1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", + "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", + "dev": true, + "requires": { + "http-proxy": "1.17.0", + "is-glob": "3.1.0", + "lodash": "4.17.10", + "micromatch": "2.3.11" + }, + "dependencies": { + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + } + } + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } + } + } + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.14.2" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "iana-tz-data": { + "version": "2017.1.0", + "resolved": "https://registry.npmjs.org/iana-tz-data/-/iana-tz-data-2017.1.0.tgz", + "integrity": "sha1-HtpL+5oJKTSZRlBmNBdDJA4Q1+w=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", + "dev": true + }, + "ieee754": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", + "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", + "dev": true + }, + "import-local": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", + "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", + "dev": true, + "requires": { + "pkg-dir": "2.0.0", + "resolve-cwd": "2.0.0" + } + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "internal-ip": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-1.2.0.tgz", + "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=", + "dev": true, + "requires": { + "meow": "3.7.0" + } + }, + "interpret": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "dev": true + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ipaddr.js": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", + "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "1.11.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "dev": true, + "requires": { + "is-path-inside": "1.0.1" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "1.0.2" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "3.0.1" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "1.0.3" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-symbol": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", + "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "json-loader": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", + "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "killable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.0.tgz", + "integrity": "sha1-2ouEvUfeU5WHj5XWTQLyRJ/gXms=", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" + } + }, + "loader-runner": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", + "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", + "dev": true + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1", + "object-assign": "4.1.1" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + } + }, + "lodash": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "loglevel": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", + "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=", + "dev": true + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.2" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, + "lru-cache": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "1.0.1" + } + }, + "math-random": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", + "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", + "dev": true + }, + "md5.js": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", + "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "dev": true, + "requires": { + "hash-base": "3.0.4", + "inherits": "2.0.3" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "1.2.0" + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "0.1.7", + "readable-stream": "2.3.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + } + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "2.1.0", + "decamelize": "1.2.0", + "loud-rejection": "1.6.0", + "map-obj": "1.0.1", + "minimist": "1.2.0", + "normalize-package-data": "2.4.0", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "redent": "1.0.0", + "trim-newlines": "1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + } + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0" + } + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "dev": true, + "requires": { + "mime-db": "1.33.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "dev": true, + "requires": { + "for-in": "1.0.2", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", + "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "requires": { + "dns-packet": "1.3.1", + "thunky": "1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "nan": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "fragment-cache": "0.2.1", + "is-windows": "1.0.2", + "kind-of": "6.0.2", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true + }, + "neo-async": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.1.tgz", + "integrity": "sha512-3KL3fvuRkZ7s4IFOMfztb7zJp3QaVWnBeGoJlgB38XnCRPj/0tLzzLG5IB8NYOHbJ8g8UGrgZv44GLDk6CxTxA==", + "dev": true + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "requires": { + "lower-case": "1.1.4" + } + }, + "node-forge": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz", + "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==", + "dev": true + }, + "node-libs-browser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", + "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", + "dev": true, + "requires": { + "assert": "1.4.1", + "browserify-zlib": "0.2.0", + "buffer": "4.9.1", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "domain-browser": "1.2.0", + "events": "1.1.1", + "https-browserify": "1.0.0", + "os-browserify": "0.3.0", + "path-browserify": "0.0.0", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "readable-stream": "2.3.6", + "stream-browserify": "2.0.1", + "stream-http": "2.8.3", + "string_decoder": "1.1.1", + "timers-browserify": "2.0.10", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.10.4", + "vm-browserify": "0.0.4" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + } + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1.1.1" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "hosted-git-info": "2.7.1", + "is-builtin-module": "1.0.0", + "semver": "5.5.0", + "validate-npm-package-license": "3.0.3" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "2.0.1" + } + }, + "nth-check": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", + "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "dev": true, + "requires": { + "boolbase": "1.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + } + } + }, + "object-keys": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", + "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "3.0.1" + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "3.0.1" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "opn": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", + "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", + "dev": true, + "requires": { + "is-wsl": "1.1.0" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" + } + }, + "original": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.1.tgz", + "integrity": "sha512-IEvtB5vM5ULvwnqMxWBLxkS13JIEXbakizMSo3yoPNPCIWzg8TG3Usn/UhXoZFM/m+FuEA20KdzPSFq/0rS+UA==", + "dev": true, + "requires": { + "url-parse": "1.4.1" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, + "requires": { + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "1.3.0" + } + }, + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "dev": true + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "pako": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", + "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", + "dev": true + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "dev": true, + "requires": { + "no-case": "2.3.2" + } + }, + "parse-asn1": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", + "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", + "dev": true, + "requires": { + "asn1.js": "4.10.1", + "browserify-aes": "1.2.0", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.16" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.2" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "2.3.0" + } + }, + "pbkdf2": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz", + "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", + "dev": true, + "requires": { + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "2.1.0" + } + }, + "portfinder": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz", + "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=", + "dev": true, + "requires": { + "async": "1.5.2", + "debug": "2.6.9", + "mkdirp": "0.5.0" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "pretty-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", + "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", + "dev": true, + "requires": { + "renderkid": "2.0.1", + "utila": "0.4.0" + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", + "dev": true + }, + "proxy-addr": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", + "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", + "dev": true, + "requires": { + "forwarded": "0.1.2", + "ipaddr.js": "1.6.0" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "public-encrypt": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", + "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "parse-asn1": "5.1.1", + "randombytes": "2.0.6" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "q": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.0.1.tgz", + "integrity": "sha1-EYcq7t7okmgRCxCnGESP+xARKhQ=", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "querystringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.0.0.tgz", + "integrity": "sha512-eTPo5t/4bgaMNZxyjWx6N2a6AuE0mq51KWvpc7nU/MAqixcI6v6KrGUKES0HaomdnolQBBXU/++X6/QQ9KL4tw==", + "dev": true + }, + "randomatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", + "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", + "dev": true, + "requires": { + "is-number": "4.0.0", + "kind-of": "6.0.2", + "math-random": "1.0.1" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "randombytes": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", + "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "2.0.6", + "safe-buffer": "5.1.2" + } + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true + }, + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", + "dev": true + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "dev": true, + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.4.0" + } + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "dev": true + } + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.4.0", + "path-type": "2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.0" + } + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.6", + "set-immediate-shim": "1.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + } + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "2.1.0", + "strip-indent": "1.0.1" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "renderkid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.1.tgz", + "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=", + "dev": true, + "requires": { + "css-select": "1.2.0", + "dom-converter": "0.1.4", + "htmlparser2": "3.3.0", + "strip-ansi": "3.0.1", + "utila": "0.3.3" + }, + "dependencies": { + "utila": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", + "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", + "dev": true + } + } + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "request": { + "version": "2.83.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", + "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", + "dev": true, + "requires": { + "aws-sign2": "0.7.0", + "aws4": "1.7.0", + "caseless": "0.12.0", + "combined-stream": "1.0.6", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.3.2", + "har-validator": "5.0.3", + "hawk": "6.0.2", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.18", + "oauth-sign": "0.8.2", + "performance-now": "2.1.0", + "qs": "6.5.2", + "safe-buffer": "5.1.2", + "stringstream": "0.0.6", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.6.0", + "uuid": "3.3.2" + } + }, + "request-progress": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-0.3.1.tgz", + "integrity": "sha1-ByHBBdipasayzossia4tXs/Pazo=", + "dev": true, + "requires": { + "throttleit": "0.0.2" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "3.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "requires": { + "align-text": "0.1.4" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "7.1.2" + }, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + } + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "3.0.4", + "inherits": "2.0.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "0.1.15" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selfsigned": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.3.tgz", + "integrity": "sha512-vmZenZ+8Al3NLHkWnhBQ0x6BkML1eCP2xEi3JE+f3D9wW9fipD9NNJHYtE9XJM4TsPaHGZJIamrSI6MTg1dU2Q==", + "dev": true, + "requires": { + "node-forge": "0.7.5" + } + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "fresh": "0.5.2", + "http-errors": "1.6.3", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.4.0" + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "1.3.5", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "1.0.3", + "http-errors": "1.6.3", + "mime-types": "2.1.18", + "parseurl": "1.3.2" + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "dev": true, + "requires": { + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.2", + "send": "0.16.2" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "skip-amd-webpack-plugin": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/skip-amd-webpack-plugin/-/skip-amd-webpack-plugin-0.2.0.tgz", + "integrity": "sha1-M+eVOW7+Ivqo/VcVIrD6TxaKjsE=", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.2", + "use": "3.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "sntp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", + "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", + "dev": true, + "requires": { + "hoek": "4.2.1" + } + }, + "sockjs": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", + "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", + "dev": true, + "requires": { + "faye-websocket": "0.10.0", + "uuid": "3.3.2" + } + }, + "sockjs-client": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz", + "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=", + "dev": true, + "requires": { + "debug": "2.6.9", + "eventsource": "0.1.6", + "faye-websocket": "0.11.1", + "inherits": "2.0.3", + "json3": "3.3.2", + "url-parse": "1.4.1" + }, + "dependencies": { + "faye-websocket": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", + "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", + "dev": true, + "requires": { + "websocket-driver": "0.7.0" + } + } + } + }, + "source-list-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", + "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "dev": true, + "requires": { + "atob": "2.1.1", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "spdx-correct": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "dev": true, + "requires": { + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "2.1.0", + "spdx-license-ids": "3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", + "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", + "dev": true + }, + "spdy": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", + "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", + "dev": true, + "requires": { + "debug": "2.6.9", + "handle-thing": "1.2.5", + "http-deceiver": "1.2.7", + "safe-buffer": "5.1.2", + "select-hose": "2.0.0", + "spdy-transport": "2.1.0" + } + }, + "spdy-transport": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.1.0.tgz", + "integrity": "sha512-bpUeGpZcmZ692rrTiqf9/2EUakI6/kXX1Rpe0ib/DyOzbiexVfXkw6GnvI9hVGvIwVaUhkaBojjCZwLNRGQg1g==", + "dev": true, + "requires": { + "debug": "2.6.9", + "detect-node": "2.0.3", + "hpack.js": "2.1.6", + "obuf": "1.1.2", + "readable-stream": "2.3.6", + "safe-buffer": "5.1.2", + "wbuf": "1.7.3" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + } + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "3.0.2" + } + }, + "sshpk": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", + "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "dev": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.2", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "safer-buffer": "2.1.2", + "tweetnacl": "0.14.5" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "0.2.5", + "object-copy": "0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + } + } + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true + }, + "stream-browserify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + } + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "requires": { + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + } + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "stringstream": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", + "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "4.0.1" + } + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + }, + "tapable": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", + "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=", + "dev": true + }, + "throttleit": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", + "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=", + "dev": true + }, + "thunky": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.2.tgz", + "integrity": "sha1-qGLgGOP7HqLsP85dVWBc9X8kc3E=", + "dev": true + }, + "time-stamp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz", + "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=", + "dev": true + }, + "timers-browserify": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", + "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "dev": true, + "requires": { + "setimmediate": "1.0.5" + } + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + } + }, + "toposort": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz", + "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", + "dev": true + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "dev": true, + "requires": { + "punycode": "1.4.1" + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2" + } + }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.18" + } + }, + "uglify-js": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.4.tgz", + "integrity": "sha512-RiB1kNcC9RMyqwRrjXC+EjgLoXULoDnCaOnEDzUCHkBN0bHwmtF5rzDMiDWU29gu0kXCRRWwtcTAVFWRECmU2Q==", + "dev": true, + "requires": { + "commander": "2.16.0", + "source-map": "0.6.1" + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "uglifyjs-webpack-plugin": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", + "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "dev": true, + "requires": { + "source-map": "0.5.7", + "uglify-js": "2.8.29", + "webpack-sources": "1.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + } + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } + }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "to-object-path": "0.3.0" + } + } + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "0.3.1", + "isobject": "3.0.1" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } + } + }, + "upath": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", + "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", + "dev": true + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "2.1.1" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + } + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-parse": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.1.tgz", + "integrity": "sha512-x95Td74QcvICAA0+qERaVkRpTGKyBHHYdwL2LXZm5t/gBtCB9KQSO/0zQgSTYEV1p0WcvSg79TLNPSvd5IDJMQ==", + "dev": true, + "requires": { + "querystringify": "2.0.0", + "requires-port": "1.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", + "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", + "dev": true, + "requires": { + "spdx-correct": "3.0.0", + "spdx-expression-parse": "3.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + } + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true, + "requires": { + "indexof": "0.0.1" + } + }, + "watchpack": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "dev": true, + "requires": { + "chokidar": "2.0.4", + "graceful-fs": "4.1.11", + "neo-async": "2.5.1" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "1.0.1" + } + }, + "webpack": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.12.0.tgz", + "integrity": "sha512-Sw7MdIIOv/nkzPzee4o0EdvCuPmxT98+vVpIvwtcwcF1Q4SDSNp92vwcKc4REe7NItH9f1S4ra9FuQ7yuYZ8bQ==", + "dev": true, + "requires": { + "acorn": "5.7.1", + "acorn-dynamic-import": "2.0.2", + "ajv": "6.5.2", + "ajv-keywords": "3.2.0", + "async": "2.6.1", + "enhanced-resolve": "3.4.1", + "escope": "3.6.0", + "interpret": "1.1.0", + "json-loader": "0.5.7", + "json5": "0.5.1", + "loader-runner": "2.3.0", + "loader-utils": "1.1.0", + "memory-fs": "0.4.1", + "mkdirp": "0.5.0", + "node-libs-browser": "2.1.0", + "source-map": "0.5.7", + "supports-color": "4.5.0", + "tapable": "0.2.8", + "uglifyjs-webpack-plugin": "0.4.6", + "watchpack": "1.6.0", + "webpack-sources": "1.1.0", + "yargs": "8.0.2" + }, + "dependencies": { + "ajv": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz", + "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==", + "dev": true, + "requires": { + "fast-deep-equal": "2.0.1", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.4.1", + "uri-js": "4.2.2" + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "loader-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "dev": true, + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "webpack-dev-middleware": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz", + "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==", + "dev": true, + "requires": { + "memory-fs": "0.4.1", + "mime": "1.6.0", + "path-is-absolute": "1.0.1", + "range-parser": "1.2.0", + "time-stamp": "2.0.0" + }, + "dependencies": { + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + } + } + }, + "webpack-dev-server": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.11.2.tgz", + "integrity": "sha512-zrPoX97bx47vZiAXfDrkw8pe9QjJ+lunQl3dypojyWwWr1M5I2h0VSrMPfTjopHQPRNn+NqfjcMmhoLcUJe2gA==", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "array-includes": "3.0.3", + "bonjour": "3.5.0", + "chokidar": "2.0.4", + "compression": "1.7.2", + "connect-history-api-fallback": "1.5.0", + "debug": "3.1.0", + "del": "3.0.0", + "express": "4.16.3", + "html-entities": "1.2.1", + "http-proxy-middleware": "0.17.4", + "import-local": "1.0.0", + "internal-ip": "1.2.0", + "ip": "1.1.5", + "killable": "1.0.0", + "loglevel": "1.6.1", + "opn": "5.3.0", + "portfinder": "1.0.13", + "selfsigned": "1.10.3", + "serve-index": "1.9.1", + "sockjs": "0.3.19", + "sockjs-client": "1.1.4", + "spdy": "3.4.7", + "strip-ansi": "3.0.1", + "supports-color": "5.4.0", + "webpack-dev-middleware": "1.12.2", + "yargs": "6.6.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "1.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "yargs": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", + "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "dev": true, + "requires": { + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.3", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "y18n": "3.2.1", + "yargs-parser": "4.2.1" + } + }, + "yargs-parser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", + "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "dev": true, + "requires": { + "camelcase": "3.0.0" + } + } + } + }, + "webpack-sources": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", + "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", + "dev": true, + "requires": { + "source-list-map": "2.0.0", + "source-map": "0.6.1" + } + }, + "websocket-driver": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", + "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", + "dev": true, + "requires": { + "http-parser-js": "0.4.13", + "websocket-extensions": "0.1.3" + } + }, + "websocket-extensions": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", + "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "dev": true, + "requires": { + "camelcase": "4.1.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.3", + "os-locale": "2.1.0", + "read-pkg-up": "2.0.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "7.0.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + } + } + }, + "yargs-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "dev": true, + "requires": { + "camelcase": "4.1.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + } + } + } + } +} diff --git a/node_modules/globalize/examples/app-npm-webpack/package.json b/node_modules/globalize/examples/app-npm-webpack/package.json new file mode 100644 index 00000000..47326c01 --- /dev/null +++ b/node_modules/globalize/examples/app-npm-webpack/package.json @@ -0,0 +1,17 @@ +{ + "private": true, + "devDependencies": { + "cldr-data": ">=25", + "globalize": "^1.3.0", + "globalize-webpack-plugin": "^2.1.0", + "html-webpack-plugin": "^2.30.1", + "iana-tz-data": "^2017.1.0", + "webpack": "^3.11.0", + "webpack-dev-server": "^2.11.1" + }, + "scripts": { + "start": "webpack-dev-server --config webpack-config.js --hot --progress --colors --inline", + "build": "NODE_ENV=production webpack --config webpack-config.js" + }, + "cldr-data-urls-filter": "(core|dates|numbers|units)" +} diff --git a/node_modules/globalize/examples/app-npm-webpack/webpack-config.js b/node_modules/globalize/examples/app-npm-webpack/webpack-config.js new file mode 100644 index 00000000..0cd8fece --- /dev/null +++ b/node_modules/globalize/examples/app-npm-webpack/webpack-config.js @@ -0,0 +1,63 @@ +var webpack = require( "webpack" ); +var path = require("path"); +var CommonsChunkPlugin = require( "webpack/lib/optimize/CommonsChunkPlugin" ); +var HtmlWebpackPlugin = require( "html-webpack-plugin" ); +var GlobalizePlugin = require( "globalize-webpack-plugin" ); + +var production = process.env.NODE_ENV === "production"; +var globalizeCompiledDataRegex = new RegExp( /^(globalize\-compiled\-data)\-\S+$/ ); + +function subLocaleNames( name ) { + return name.replace( globalizeCompiledDataRegex, "$1" ); +} + +module.exports = { + entry: { + main: "./app/index.js", + }, + output: { + path: path.join( __dirname, production ? "./dist" : "./tmp" ), + publicPath: production ? "" : "http://localhost:8080/", + chunkFilename: "[name].[chunkhash].js", + filename: production ? "[name].[chunkhash].js" : "app.js" + }, + resolve: { + extensions: [ "*", ".js" ] + }, + plugins: [ + new HtmlWebpackPlugin({ + template: "./index-template.html", + // filter to a single compiled globalize language + // change 'en' to language of choice or remove inject all languages + // NOTE: last language will be set language + chunks: [ "vendor", "globalize-compiled-data-en", "main" ], + chunksSortMode: function ( c1, c2 ) { + var orderedChunks = [ "vendor", "globalize-compiled-data", "main" ]; + var o1 = orderedChunks.indexOf( subLocaleNames( c1.names[ 0 ])); + var o2 = orderedChunks.indexOf( subLocaleNames( c2.names[ 0 ])); + return o1 - o2; + }, + }), + new GlobalizePlugin({ + production: production, + developmentLocale: "en", + supportedLocales: [ "ar", "de", "en", "es", "pt", "ru", "zh" ], + messages: "messages/[locale].json", + output: "i18n/[locale].[chunkhash].js" + }) + ].concat( production ? [ + new CommonsChunkPlugin({ + name: "vendor", + minChunks: function(module) { + return ( + module.context && module.context.indexOf("node_modules") !== -1 + ); + } + }), + new webpack.optimize.UglifyJsPlugin({ + compress: { + warnings: false + } + }) + ] : [] ) +}; diff --git a/node_modules/globalize/examples/globalize-compiler/.npmignore b/node_modules/globalize/examples/globalize-compiler/.npmignore new file mode 100644 index 00000000..9537a1c2 --- /dev/null +++ b/node_modules/globalize/examples/globalize-compiler/.npmignore @@ -0,0 +1 @@ +compiled-formatters.js diff --git a/node_modules/globalize/examples/globalize-compiler/README.md b/node_modules/globalize/examples/globalize-compiler/README.md new file mode 100644 index 00000000..65c3918c --- /dev/null +++ b/node_modules/globalize/examples/globalize-compiler/README.md @@ -0,0 +1,45 @@ +# Basic Globalize Compiler example + +This example focuses on the Globalize Compiler and the Globalize runtime +modules. It assumes knowledge of Globalize usage basics. + +## Requirements + +**1. Install Globalize dependencies and Globalize Compiler** + +This example uses `npm` to download Globalize dependencies (i.e., CLDR data and +the Cldrjs library) and the [Globalize Compiler][]. + +``` +npm install +``` + +[Globalize Compiler]: https://github.com/globalizejs/globalize-compiler + +## Running the example + +### Development mode + +1. Start a server by running `python -m SimpleHTTPServer` or other alternative +servers such as [http-server][], [nginx][], [apache][]. +1. Point your browser at `http://localhost:8000/development.html`. Note that the +formatters are created dynamically. Therefore, Cldrjs and CLDR data are +required. +1. Understand the demo by reading the source code. We have comments there for +you. + +[http-server]: https://github.com/nodeapps/http-server +[nginx]: http://nginx.org/en/docs/ +[apache]: http://httpd.apache.org/docs/trunk/ + +### Production mode + +1. Compile the application formatters by running `npm run build`. See +`package.json` to understand the actual shell command that is used. For more +information about the compiler, see the [Globalize Compiler documentation][]. +1. Point your browser at `./production.html`. Note that we don't need Cldrjs nor +CLDR data in production here. +1. Understand the demo by reading the source code. We have comments there for +you. + +[Globalize Compiler documentation]: https://github.com/globalizejs/globalize-compiler#README diff --git a/node_modules/globalize/examples/globalize-compiler/app.js b/node_modules/globalize/examples/globalize-compiler/app.js new file mode 100644 index 00000000..89585558 --- /dev/null +++ b/node_modules/globalize/examples/globalize-compiler/app.js @@ -0,0 +1,58 @@ +var like, number; + +// Use Globalize to format dates. +document.getElementById( "date" ).textContent = Globalize.formatDate( new Date(), { + datetime: "medium" +}); + +// Use Globalize to format dates on specific time zone. +document.getElementById( "zonedDate" ).textContent = Globalize.formatDate( new Date(), { + datetime: "full", + timeZone: "America/Sao_Paulo" +}); + +// Use Globalize to format dates to parts. +document.getElementById( "dateToParts" ).innerHTML = Globalize.formatDateToParts( new Date(), { + datetime: "medium" +}).map(function( part ) { + switch(part.type) { + case "month": return "" + part.value + ""; + default: return part.value; + } +}).reduce(function( memo, value ) { + return memo + value; +}); + +// Use Globalize to format numbers. +number = Globalize.numberFormatter(); +document.getElementById( "number" ).textContent = number( 12345.6789 ); +document.getElementById( "number-compact" ).textContent = Globalize.formatNumber( 12345.6789, { + compact: "short", + minimumSignificantDigits: 1, + maximumSignificantDigits: 3 +}); + +// Use Globalize to format currencies. +document.getElementById( "currency" ).textContent = Globalize.formatCurrency( 69900, "USD" ); + +// Use Globalize to get the plural form of a numeric value. +document.getElementById( "plural-number" ).textContent = number( 12345.6789 ); +document.getElementById( "plural-form" ).textContent = Globalize.plural( 12345.6789 ); + +// Use Globalize to format a message with plural inflection. +like = Globalize.messageFormatter( "like" ); +document.getElementById( "message-0" ).textContent = like( 0 ); +document.getElementById( "message-1" ).textContent = like( 1 ); +document.getElementById( "message-2" ).textContent = like( 2 ); +document.getElementById( "message-3" ).textContent = like( 3 ); + +// Use Globalize to format a relative time. +document.getElementById( "relative-time" ).textContent = Globalize.formatRelativeTime( -35, "second" ); + +// Use Globalize to format a unit. +document.getElementById( "unit" ).textContent = Globalize.formatUnit( 60, "mile/hour", { + form: "short" +}); + +document.getElementById( "requirements" ).style.display = "none"; +document.getElementById( "demo" ).style.display = "block"; diff --git a/node_modules/globalize/examples/globalize-compiler/development.html b/node_modules/globalize/examples/globalize-compiler/development.html new file mode 100644 index 00000000..e9390647 --- /dev/null +++ b/node_modules/globalize/examples/globalize-compiler/development.html @@ -0,0 +1,121 @@ + + + + + Basic Globalize Compiler example (development mode) + + +

Basic Globalize Compiler example (development mode)

+ +
+

Requirements

+
    +
  • Read README.md for instructions.
  • +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/node_modules/globalize/examples/globalize-compiler/messages.json b/node_modules/globalize/examples/globalize-compiler/messages.json new file mode 100644 index 00000000..4a5f1f48 --- /dev/null +++ b/node_modules/globalize/examples/globalize-compiler/messages.json @@ -0,0 +1,12 @@ +{ + "en": { + "like": [ + "{0, plural, offset:1", + " =0 {Be the first to like this}", + " =1 {You liked this}", + " one {You and someone else liked this}", + " other {You and # others liked this}", + "}" + ] + } +} diff --git a/node_modules/globalize/examples/globalize-compiler/package.json b/node_modules/globalize/examples/globalize-compiler/package.json new file mode 100644 index 00000000..1bbbbcb4 --- /dev/null +++ b/node_modules/globalize/examples/globalize-compiler/package.json @@ -0,0 +1,15 @@ +{ + "name": "basic-globalize-compiler", + "private": true, + "scripts": { + "build": "globalize-compiler -l en -m messages.json -o compiled-formatters.js app.js" + }, + "devDependencies": { + "cldr-data": ">=25", + "globalize": "^1.3.0", + "globalize-compiler": "^1.0.0", + "iana-tz-data": "^2017.1.0", + "jquery": "latest" + }, + "cldr-data-urls-filter": "(core|dates|numbers|units)" +} diff --git a/node_modules/globalize/examples/globalize-compiler/production.html b/node_modules/globalize/examples/globalize-compiler/production.html new file mode 100644 index 00000000..5b8a7def --- /dev/null +++ b/node_modules/globalize/examples/globalize-compiler/production.html @@ -0,0 +1,75 @@ + + + + + Basic Globalize Compiler example (production mode) + + +

Basic Globalize Compiler example (production mode)

+ +
+

Requirements

+
    +
  • You need to build the `compiled-formatters.js`. Read README.md for instructions. +
  • +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/node_modules/globalize/examples/node-npm/README.md b/node_modules/globalize/examples/node-npm/README.md new file mode 100644 index 00000000..6b39f7db --- /dev/null +++ b/node_modules/globalize/examples/node-npm/README.md @@ -0,0 +1,57 @@ +# Hello World (Node.js + npm) + +We assume you know what [Node.js](http://nodejs.org/) and +[npm](https://www.npmjs.org/) is. + +The demo contains one single file: + +``` +. +└── main.js +``` + +Before running it, execute the requirements below. + + +## Requirements + +**1. Install Globalize** + +Let's use npm to download Globalize. For more information on regard of +installation, please read [Getting Started](../../README.md#installation). + +``` +npm install +``` + +Then, you'll get this: + +``` +. +├── node_modules/ +│ ├── globalize/ +│ │ └── dist/ +│ │ ├── globalize +│ │ │ ├── date.js +│ │ │ └── ... +│ │ └── globalize.js +│ └── ... +└── main.js +``` + +**2. Dependencies** + +No action needed, because npm has already handled that for us. + +**3. CLDR content** + +No action needed, because npm has already handled that for us. For more +information, see [npm's cldr-data](https://github.com/rxaviers/cldr-data-npm). + + +## Running the demo + +Once you've completed the requirements above: + +1. Run `node main.js`. +1. Understand the demo by reading the source code. We have comments there for you. diff --git a/node_modules/globalize/examples/node-npm/main.js b/node_modules/globalize/examples/node-npm/main.js new file mode 100644 index 00000000..9a79fe89 --- /dev/null +++ b/node_modules/globalize/examples/node-npm/main.js @@ -0,0 +1,65 @@ +var like; +var Globalize = require( "globalize" ); + +// Before we can use Globalize, we need to feed it on the appropriate I18n content (Unicode CLDR). Read Requirements on Getting Started on the root's README.md for more information. +Globalize.load( + require( "cldr-data/main/en/ca-gregorian" ), + require( "cldr-data/main/en/currencies" ), + require( "cldr-data/main/en/dateFields" ), + require( "cldr-data/main/en/numbers" ), + require( "cldr-data/main/en/timeZoneNames" ), + require( "cldr-data/main/en/units" ), + require( "cldr-data/supplemental/currencyData" ), + require( "cldr-data/supplemental/likelySubtags" ), + require( "cldr-data/supplemental/metaZones" ), + require( "cldr-data/supplemental/plurals" ), + require( "cldr-data/supplemental/timeData" ), + require( "cldr-data/supplemental/weekData" ) +); +Globalize.loadMessages( require( "./messages/en" ) ); + +Globalize.loadTimeZone( require( "iana-tz-data" ) ); + +// Set "en" as our default locale. +Globalize.locale( "en" ); + +// Use Globalize to format dates. +console.log( Globalize.formatDate( new Date(), { datetime: "medium" } ) ); + +// Use Globalize to format dates in specific time zones. +console.log( Globalize.formatDate( new Date(), { + datetime: "full", + timeZone: "America/Sao_Paulo" +})); + +// Use Globalize to format dates to parts. +console.log( Globalize.formatDateToParts( new Date(), { datetime: "medium" } ) ); + +// Use Globalize to format numbers. +console.log( Globalize.formatNumber( 12345.6789 ) ); + +// Use Globalize to format numbers (compact form). +console.log( Globalize.formatNumber( 12345.6789, { + compact: "short", + minimumSignificantDigits: 1, + maximumSignificantDigits: 3 +})); + +// Use Globalize to format currencies. +console.log( Globalize.formatCurrency( 69900, "USD" ) ); + +// Use Globalize to get the plural form of a numeric value. +console.log( Globalize.plural( 12345.6789 ) ); + +// Use Globalize to format a message with plural inflection. +like = Globalize.messageFormatter( "like" ); +console.log( like( 0 ) ); +console.log( like( 1 ) ); +console.log( like( 2 ) ); +console.log( like( 3 ) ); + +// Use Globalize to format relative time. +console.log( Globalize.formatRelativeTime( -35, "second" ) ); + +// Use Globalize to format unit. +console.log( Globalize.formatUnit( 60, "mile/hour", { form: "short" } ) ); diff --git a/node_modules/globalize/examples/node-npm/messages/en.json b/node_modules/globalize/examples/node-npm/messages/en.json new file mode 100644 index 00000000..cd37baee --- /dev/null +++ b/node_modules/globalize/examples/node-npm/messages/en.json @@ -0,0 +1,12 @@ +{ + "en": { + "like": [ + "{0, plural, offset:1", + " =0 {Be the first to like this}", + " =1 {You liked this}", + " one {You and someone else liked this}", + " other {You and # others liked this}", + "}" + ] + } +} diff --git a/node_modules/globalize/examples/node-npm/package.json b/node_modules/globalize/examples/node-npm/package.json new file mode 100644 index 00000000..7d91ffd9 --- /dev/null +++ b/node_modules/globalize/examples/node-npm/package.json @@ -0,0 +1,10 @@ +{ + "name": "globalize-hello-world-node-npm", + "private": true, + "dependencies": { + "cldr-data": "latest", + "globalize": "^1.3.0", + "iana-tz-data": ">=2017.0.0" + }, + "cldr-data-urls-filter": "(core|dates|numbers|units)" +} diff --git a/node_modules/globalize/examples/plain-javascript/.npmignore b/node_modules/globalize/examples/plain-javascript/.npmignore new file mode 100644 index 00000000..39f8b665 --- /dev/null +++ b/node_modules/globalize/examples/plain-javascript/.npmignore @@ -0,0 +1,2 @@ +cldrjs/ +globalize/ diff --git a/node_modules/globalize/examples/plain-javascript/README.md b/node_modules/globalize/examples/plain-javascript/README.md new file mode 100644 index 00000000..f9eaa056 --- /dev/null +++ b/node_modules/globalize/examples/plain-javascript/README.md @@ -0,0 +1,81 @@ +# Hello World (plain javascript) + +The demo contains one single file: + +``` +. +└── index.html +``` + +Before running it, execute the requirements below. + + +## Requirements + +**1. Dependencies** + +The demo requires Globalize and its dependencies. Globalize's dependencies are listed on [Getting +Started](../../README.md#dependencies), and the only one is +[cldrjs](https://github.com/rxaviers/cldrjs). You are free to fetch it the way you want. But, as an +exercise of this demo, we'll download it ourselves. So: + +1. Click at [Globalize releases tab](https://github.com/globalizejs/globalize/releases). +1. Download the latest package. +1. Unzip it. +1. Rename the extracted directory `globalize` and move it alongside `index.html` and `README.md`. +1. Click at [cldrjs releases tab](https://github.com/rxaviers/cldrjs/releases). +1. Download the latest package. +1. Unzip it. +1. Rename the extracted directory `cldrjs` and move it alongside `index.html` and `README.md`. + +Then, you'll get this: + +``` +. +├── cldrjs +│ └── dist +│ ├── cldr.js +│ ├── ... +│ └── cldr +│ ├── event.js +│ ├── supplemental.js +│ └── ... +├── globalize +│ └── dist +│ ├── globalize.js +│ ├── ... +│ └── globalize +│ ├── currency.js +│ ├── date.js +│ └── ... +├── index.html +└── README.md +``` + +For more information read [cldrjs' usage and +installation](https://github.com/rxaviers/cldrjs#usage-and-installation) docs. + +**2. CLDR content** + +Another typical Globalize requirement is to fetch CLDR content yourself. But, on +this demo we made the things a little easier for you: we've embedded static JSON +into the demo. So, you don't need to actually fetch it anywhere. For more +information about fetching Unicode CLDR JSON data, see [How do I get CLDR +data?](../../doc/cldr.md). + +No action needed here. + +**3. Globalize `dist` files** + +*This step only applies if you are building the source files. If you have downloaded a ZIP or a TAR.GZ or are using a package manager (such as bower or npm) to install then you can ignore this step.* + +[Install the development external dependencies](../../README.md#install-development-external-dependencies) and [build the distribution files](../../README.md#build). + +## Running the demo + +Once you've completed the requirements above: + +1. Point your browser at `./index.html`. +1. Open your JavaScript console to see the demo output. +1. Understand the demo by reading the source code. We have comments there for +you. diff --git a/node_modules/globalize/examples/plain-javascript/index.html b/node_modules/globalize/examples/plain-javascript/index.html new file mode 100644 index 00000000..bcd4703a --- /dev/null +++ b/node_modules/globalize/examples/plain-javascript/index.html @@ -0,0 +1,445 @@ + + + + + Globalize Hello World (plain javascript) + + +

Globalize Hello World (plain javascript)

+ +
+

Requirements

+
    +
  • You need to download `cldrjs` and `globalize` dependencies yourself. Read README.md for instructions. +
  • +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/node_modules/globalize/package.json b/node_modules/globalize/package.json new file mode 100644 index 00000000..ea4505de --- /dev/null +++ b/node_modules/globalize/package.json @@ -0,0 +1,133 @@ +{ + "_from": "globalize@^1.4.2", + "_id": "globalize@1.4.2", + "_inBundle": false, + "_integrity": "sha512-IfKeYI5mAITBmT5EnH8kSQB5uGson4Fkj2XtTpyEbIS7IHNfLHoeTyLJ6tfjiKC6cJXng3IhVurDk5C7ORqFhQ==", + "_location": "/globalize", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "globalize@^1.4.2", + "name": "globalize", + "escapedName": "globalize", + "rawSpec": "^1.4.2", + "saveSpec": null, + "fetchSpec": "^1.4.2" + }, + "_requiredBy": [ + "/strong-globalize" + ], + "_resolved": "https://registry.npmjs.org/globalize/-/globalize-1.4.2.tgz", + "_shasum": "3ff354c7ced0bbfab4cf7896d8cbb6f4c0fc37f5", + "_spec": "globalize@^1.4.2", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/strong-globalize", + "author": { + "name": "jQuery Foundation and other contributors", + "url": "https://github.com/jquery/jquery/blob/master/AUTHORS.txt" + }, + "bugs": { + "url": "http://github.com/jquery/globalize/issues" + }, + "bundleDependencies": false, + "commitplease": { + "nohook": true + }, + "dependencies": { + "cldrjs": "^0.5.0" + }, + "deprecated": false, + "description": "A JavaScript library for internationalization and localization that leverages the official Unicode CLDR JSON data.", + "devDependencies": { + "cldr-data-downloader": "^0.3.1", + "glob": "^7.1.2", + "globalize-compiler": "^0.3.0-alpha.6", + "grunt": "1.0.1", + "grunt-check-dependencies": "1.0.0", + "grunt-commitplease": "0.0.6", + "grunt-compare-size": "0.4.2", + "grunt-contrib-clean": "1.1.0", + "grunt-contrib-connect": "0.8.0", + "grunt-contrib-copy": "1.0.0", + "grunt-contrib-jshint": "1.1.0", + "grunt-contrib-qunit": "2.0.0", + "grunt-contrib-requirejs": "1.0.0", + "grunt-contrib-uglify": "3.0.1", + "grunt-contrib-watch": "1.0.0", + "grunt-git-authors": "^3.2.0", + "grunt-jscs": "1.8.0", + "grunt-mocha-test": "^0.13.2", + "gzip-js": "0.3.2", + "iana-tz-data": ">=2017.0.0", + "matchdep": "1.0.1", + "mocha": "^3.4.2", + "semver": "^5.3.0", + "zoned-date-time": "1.0.0" + }, + "files": [ + "CONTRIBUTING.md", + "dist/", + "!dist/.build", + "doc/", + "examples/", + "!examples/**/.tmp-globalize-webpack", + "!examples/**/bower_components", + "!examples/**/node_modules", + "!examples/plain-javascript/cldrjs", + "!examples/plain-javascript/globalize", + "README.md" + ], + "homepage": "https://github.com/jquery/globalize", + "keywords": [ + "utility", + "globalization", + "internationalization", + "multilingualization", + "localization", + "g11n", + "i18n", + "m17n", + "L10n", + "localize", + "format", + "parse", + "translate", + "strings", + "numbers", + "dates", + "times", + "calendars", + "plural", + "plurals", + "pluralize", + "cultures", + "languages", + "locales", + "Unicode", + "CLDR", + "JSON" + ], + "license": "MIT", + "main": "./dist/node-main.js", + "maintainers": [ + { + "name": "Jörn Zaefferer", + "email": "joern.zaefferer@gmail.com", + "url": "http://bassistance.de" + }, + { + "name": "Rafael Xavier de Souza", + "email": "rxaviers@gmail.com", + "url": "http://rafael.xavier.blog.br" + } + ], + "name": "globalize", + "repository": { + "type": "git", + "url": "git://github.com/jquery/globalize.git" + }, + "scripts": { + "test": "grunt" + }, + "version": "1.4.2" +} diff --git a/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/has-ansi/index.js b/node_modules/has-ansi/index.js similarity index 100% rename from node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/has-ansi/index.js rename to node_modules/has-ansi/index.js diff --git a/node_modules/has-ansi/license b/node_modules/has-ansi/license new file mode 100644 index 00000000..654d0bfe --- /dev/null +++ b/node_modules/has-ansi/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/has-ansi/package.json b/node_modules/has-ansi/package.json similarity index 51% rename from node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/has-ansi/package.json rename to node_modules/has-ansi/package.json index 5c719eab..d10943fe 100644 --- a/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/has-ansi/package.json +++ b/node_modules/has-ansi/package.json @@ -1,38 +1,51 @@ { - "name": "has-ansi", - "version": "2.0.0", - "description": "Check if a string has ANSI escape codes", - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/sindresorhus/has-ansi" + "_from": "has-ansi@^2.0.0", + "_id": "has-ansi@2.0.0", + "_inBundle": false, + "_integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "_location": "/has-ansi", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "has-ansi@^2.0.0", + "name": "has-ansi", + "escapedName": "has-ansi", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" }, + "_requiredBy": [ + "/request/har-validator/chalk" + ], + "_resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "_shasum": "34f5049ce1ecdf2b0649af3ef24e45ed35416d91", + "_spec": "has-ansi@^2.0.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/request/node_modules/har-validator/node_modules/chalk", "author": { "name": "Sindre Sorhus", "email": "sindresorhus@gmail.com", "url": "sindresorhus.com" }, - "maintainers": [ - { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - { - "name": "Joshua Appelman", - "email": "jappelman@xebia.com", - "url": "jbnicolai.com" - } - ], + "bugs": { + "url": "https://github.com/sindresorhus/has-ansi/issues" + }, + "bundleDependencies": false, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "deprecated": false, + "description": "Check if a string has ANSI escape codes", + "devDependencies": { + "ava": "0.0.4" + }, "engines": { "node": ">=0.10.0" }, - "scripts": { - "test": "node test.js" - }, "files": [ "index.js" ], + "homepage": "https://github.com/sindresorhus/has-ansi#readme", "keywords": [ "ansi", "styles", @@ -57,18 +70,26 @@ "pattern", "has" ], - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "devDependencies": { - "ava": "0.0.4" + "license": "MIT", + "maintainers": [ + { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + { + "name": "Joshua Appelman", + "email": "jappelman@xebia.com", + "url": "jbnicolai.com" + } + ], + "name": "has-ansi", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/has-ansi.git" }, - "readme": "# has-ansi [![Build Status](https://travis-ci.org/sindresorhus/has-ansi.svg?branch=master)](https://travis-ci.org/sindresorhus/has-ansi)\n\n> Check if a string has [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code)\n\n\n## Install\n\n```\n$ npm install --save has-ansi\n```\n\n\n## Usage\n\n```js\nvar hasAnsi = require('has-ansi');\n\nhasAnsi('\\u001b[4mcake\\u001b[0m');\n//=> true\n\nhasAnsi('cake');\n//=> false\n```\n\n\n## Related\n\n- [has-ansi-cli](https://github.com/sindresorhus/has-ansi-cli) - CLI for this module\n- [strip-ansi](https://github.com/sindresorhus/strip-ansi) - Strip ANSI escape codes\n- [ansi-regex](https://github.com/sindresorhus/ansi-regex) - Regular expression for matching ANSI escape codes\n- [chalk](https://github.com/sindresorhus/chalk) - Terminal string styling done right\n\n\n## License\n\nMIT © [Sindre Sorhus](http://sindresorhus.com)\n", - "readmeFilename": "readme.md", - "bugs": { - "url": "https://github.com/sindresorhus/has-ansi/issues" + "scripts": { + "test": "node test.js" }, - "homepage": "https://github.com/sindresorhus/has-ansi", - "_id": "has-ansi@2.0.0", - "_from": "has-ansi@^2.0.0" + "version": "2.0.0" } diff --git a/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/has-ansi/readme.md b/node_modules/has-ansi/readme.md similarity index 100% rename from node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/has-ansi/readme.md rename to node_modules/has-ansi/readme.md diff --git a/node_modules/httpntlm/.jshintrc b/node_modules/httpntlm/.jshintrc new file mode 100644 index 00000000..f90de4e2 --- /dev/null +++ b/node_modules/httpntlm/.jshintrc @@ -0,0 +1,4 @@ +{ + "node": true, + "laxbreak": true +} diff --git a/node_modules/httpntlm/.npmignore b/node_modules/httpntlm/.npmignore new file mode 100644 index 00000000..1bbb2d92 --- /dev/null +++ b/node_modules/httpntlm/.npmignore @@ -0,0 +1,17 @@ +lib-cov +*.seed +*.log +*.csv +*.dat +*.out +*.pid +*.gz + +pids +logs +results + +npm-debug.log +node_modules +app.js +test.js \ No newline at end of file diff --git a/node_modules/httpntlm/LICENSE b/node_modules/httpntlm/LICENSE new file mode 100644 index 00000000..c0213267 --- /dev/null +++ b/node_modules/httpntlm/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013 Sam + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/httpntlm/README.md b/node_modules/httpntlm/README.md new file mode 100644 index 00000000..c6b714f9 --- /dev/null +++ b/node_modules/httpntlm/README.md @@ -0,0 +1,208 @@ +# httpntlm + +__httpntlm__ is a Node.js library to do HTTP NTLM authentication + +It's a port from the Python libary [python-ntml](https://code.google.com/p/python-ntlm/) + +## Install + +You can install __httpntlm__ using the Node Package Manager (npm): + + npm install httpntlm + +## How to use + +```js +var httpntlm = require('httpntlm'); + +httpntlm.get({ + url: "https://someurl.com", + username: 'm$', + password: 'stinks', + workstation: 'choose.something', + domain: '' +}, function (err, res){ + if(err) return err; + + console.log(res.headers); + console.log(res.body); +}); +``` + +It supports __http__ and __https__. + +## pre-encrypt the password +```js + +var httpntlm = require('httpntlm'); +var ntlm = httpntlm.ntlm; +var lm = ntlm.create_LM_hashed_password('Azx123456'); +var nt = ntlm.create_NT_hashed_password('Azx123456'); +console.log(lm); +console.log(Array.prototype.slice.call(lm, 0)); +lm = new Buffer([ 183, 180, 19, 95, 163, 5, 118, 130, 30, 146, 159, 252, 1, 57, 81, 39 ]); +console.log(lm); + +console.log(nt); +console.log(Array.prototype.slice.call(nt, 0)); +nt = new Buffer([150, 27, 7, 219, 220, 207, 134, 159, 42, 60, 153, 28, 131, 148, 14, 1]); +console.log(nt); + + +httpntlm.get({ + url: "https://someurl.com", + username: 'm$', + lm_password: lm, + nt_password: nt, + workstation: 'choose.something', + domain: '' +}, function (err, res){ + if(err) return err; + + console.log(res.headers); + console.log(res.body); +}); + +/* you can save the array into your code and use it when you need it + +// before convert to array +[ 183, 180, 19, 95, 163, 5, 118, 130, 30, 146, 159, 252, 1, 57, 81, 39 ]// convert to array +//convert back to buffer + + +[ 150, 27, 7, 219, 220, 207, 134, 159, 42, 60, 153, 28, 131, 148, 14, 1 ] + +*/ + +``` + + +## Options + +- `url:` _{String}_ URL to connect. (Required) +- `username:` _{String}_ Username. (Required) +- `password:` _{String}_ Password. (Required) +- `workstation:` _{String}_ Name of workstation or `''`. +- `domain:` _{String}_ Name of domain or `''`. + +if you already got the encrypted password,you should use this two param to replace the 'password' param. + +- `lm_password` _{Buffer}_ encrypted lm password.(Required) +- `nt_password` _{Buffer}_ encrypted nt password. (Required) + +You can also pass along all other options of [httpreq](https://github.com/SamDecrock/node-httpreq), including custom headers, cookies, body data, ... and use POST, PUT or DELETE instead of GET. + + + + +## Advanced + +If you want to use the NTLM-functions yourself, you can access the ntlm-library like this (https example): + +```js +var ntlm = require('httpntlm').ntlm; +var async = require('async'); +var httpreq = require('httpreq'); +var HttpsAgent = require('agentkeepalive').HttpsAgent; +var keepaliveAgent = new HttpsAgent(); + +var options = { + url: "https://someurl.com", + username: 'm$', + password: 'stinks', + workstation: 'choose.something', + domain: '' +}; + +async.waterfall([ + function (callback){ + var type1msg = ntlm.createType1Message(options); + + httpreq.get(options.url, { + headers:{ + 'Connection' : 'keep-alive', + 'Authorization': type1msg + }, + agent: keepaliveAgent + }, callback); + }, + + function (res, callback){ + if(!res.headers['www-authenticate']) + return callback(new Error('www-authenticate not found on response of second request')); + + var type2msg = ntlm.parseType2Message(res.headers['www-authenticate']); + var type3msg = ntlm.createType3Message(type2msg, options); + + setImmediate(function() { + httpreq.get(options.url, { + headers:{ + 'Connection' : 'Close', + 'Authorization': type3msg + }, + allowRedirects: false, + agent: keepaliveAgent + }, callback); + }); + } +], function (err, res) { + if(err) return console.log(err); + + console.log(res.headers); + console.log(res.body); +}); +``` + +## Download binary files + +```javascript +httpntlm.get({ + url: "https://someurl.com/file.xls", + username: 'm$', + password: 'stinks', + workstation: 'choose.something', + domain: '', + binary: true +}, function (err, response) { + if(err) return console.log(err); + fs.writeFile("file.xls", response.body, function (err) { + if(err) return console.log("error writing file"); + console.log("file.xls saved!"); + }); +}); +``` + +## More information + +* [python-ntlm](https://code.google.com/p/python-ntlm/) +* [NTLM Authentication Scheme for HTTP](http://www.innovation.ch/personal/ronald/ntlm.html) +* [LM hash on Wikipedia](http://en.wikipedia.org/wiki/LM_hash) + +## Donate + +If you like this module or you want me to update it faster, feel free to donate. It helps increasing my dedication to fixing bugs :-) + +[![](https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=LPYD83FGC7XPW) + + +## License (MIT) + +Copyright (c) Sam Decrock + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/httpntlm/httpntlm.js b/node_modules/httpntlm/httpntlm.js new file mode 100644 index 00000000..d7787800 --- /dev/null +++ b/node_modules/httpntlm/httpntlm.js @@ -0,0 +1,112 @@ +/** + * Copyright (c) 2013 Sam Decrock https://github.com/SamDecrock/ + * All rights reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +'use strict'; + +var url = require('url'); +var httpreq = require('httpreq'); +var ntlm = require('./ntlm'); +var _ = require('underscore'); +var http = require('http'); +var https = require('https'); + +exports.method = function(method, options, finalCallback){ + if(!options.workstation) options.workstation = ''; + if(!options.domain) options.domain = ''; + + // extract non-ntlm-options: + var httpreqOptions = _.omit(options, 'url', 'username', 'password', 'workstation', 'domain'); + + // is https? + var isHttps = false; + var reqUrl = url.parse(options.url); + if(reqUrl.protocol == 'https:') isHttps = true; + + // set keepaliveAgent (http or https): + var keepaliveAgent; + + if(isHttps){ + keepaliveAgent = new https.Agent({keepAlive: true}); + }else{ + keepaliveAgent = new http.Agent({keepAlive: true}); + } + + // build type1 request: + + function sendType1Message (callback) { + var type1msg = ntlm.createType1Message(options); + + var type1options = { + headers:{ + 'Connection' : 'keep-alive', + 'Authorization': type1msg + }, + timeout: options.timeout || 0, + agent: keepaliveAgent, + allowRedirects: false // don't redirect in httpreq, because http could change to https which means we need to change the keepaliveAgent + }; + + // pass along other options: + type1options = _.extend({}, _.omit(httpreqOptions, 'headers', 'body'), type1options); + + // send type1 message to server: + httpreq[method](options.url, type1options, callback); + } + + function sendType3Message (res, callback) { + // catch redirect here: + if(res.headers.location) { + options.url = res.headers.location; + return exports[method](options, finalCallback); + } + + + if(!res.headers['www-authenticate']) + return callback(new Error('www-authenticate not found on response of second request')); + + // parse type2 message from server: + var type2msg = ntlm.parseType2Message(res.headers['www-authenticate'], callback); //callback only happens on errors + if(!type2msg) return; // if callback returned an error, the parse-function returns with null + + // create type3 message: + var type3msg = ntlm.createType3Message(type2msg, options); + + // build type3 request: + var type3options = { + headers: { + 'Connection': 'Close', + 'Authorization': type3msg + }, + allowRedirects: false, + agent: keepaliveAgent + }; + + // pass along other options: + type3options.headers = _.extend(type3options.headers, httpreqOptions.headers); + type3options = _.extend(type3options, _.omit(httpreqOptions, 'headers')); + + // send type3 message to server: + httpreq[method](options.url, type3options, callback); + } + + + sendType1Message(function (err, res) { + if(err) return finalCallback(err); + setImmediate(function () { // doesn't work without setImmediate() + sendType3Message(res, finalCallback); + }); + }); + +}; + +['get', 'put', 'patch', 'post', 'delete', 'options'].forEach(function(method){ + exports[method] = exports.method.bind(exports, method); +}); + +exports.ntlm = ntlm; //if you want to use the NTML functions yourself + diff --git a/node_modules/httpntlm/node_modules/underscore/LICENSE b/node_modules/httpntlm/node_modules/underscore/LICENSE new file mode 100644 index 00000000..0d6b8739 --- /dev/null +++ b/node_modules/httpntlm/node_modules/underscore/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative +Reporters & Editors + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/httpntlm/node_modules/underscore/README.md b/node_modules/httpntlm/node_modules/underscore/README.md new file mode 100644 index 00000000..c2ba2590 --- /dev/null +++ b/node_modules/httpntlm/node_modules/underscore/README.md @@ -0,0 +1,22 @@ + __ + /\ \ __ + __ __ ___ \_\ \ __ _ __ ____ ___ ___ _ __ __ /\_\ ____ + /\ \/\ \ /' _ `\ /'_ \ /'__`\/\ __\/ ,__\ / ___\ / __`\/\ __\/'__`\ \/\ \ /',__\ + \ \ \_\ \/\ \/\ \/\ \ \ \/\ __/\ \ \//\__, `\/\ \__//\ \ \ \ \ \//\ __/ __ \ \ \/\__, `\ + \ \____/\ \_\ \_\ \___,_\ \____\\ \_\\/\____/\ \____\ \____/\ \_\\ \____\/\_\ _\ \ \/\____/ + \/___/ \/_/\/_/\/__,_ /\/____/ \/_/ \/___/ \/____/\/___/ \/_/ \/____/\/_//\ \_\ \/___/ + \ \____/ + \/___/ + +Underscore.js is a utility-belt library for JavaScript that provides +support for the usual functional suspects (each, map, reduce, filter...) +without extending any core JavaScript objects. + +For Docs, License, Tests, and pre-packed downloads, see: +http://underscorejs.org + +Underscore is an open-sourced component of DocumentCloud: +https://github.com/documentcloud + +Many thanks to our contributors: +https://github.com/jashkenas/underscore/contributors diff --git a/node_modules/httpntlm/node_modules/underscore/package.json b/node_modules/httpntlm/node_modules/underscore/package.json new file mode 100644 index 00000000..82e0e322 --- /dev/null +++ b/node_modules/httpntlm/node_modules/underscore/package.json @@ -0,0 +1,72 @@ +{ + "_from": "underscore@~1.7.0", + "_id": "underscore@1.7.0", + "_inBundle": false, + "_integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=", + "_location": "/httpntlm/underscore", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "underscore@~1.7.0", + "name": "underscore", + "escapedName": "underscore", + "rawSpec": "~1.7.0", + "saveSpec": null, + "fetchSpec": "~1.7.0" + }, + "_requiredBy": [ + "/httpntlm" + ], + "_resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", + "_shasum": "6bbaf0877500d36be34ecaa584e0db9fef035209", + "_spec": "underscore@~1.7.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/httpntlm", + "author": { + "name": "Jeremy Ashkenas", + "email": "jeremy@documentcloud.org" + }, + "bugs": { + "url": "https://github.com/jashkenas/underscore/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "JavaScript's functional programming helper library.", + "devDependencies": { + "docco": "0.6.x", + "eslint": "0.6.x", + "phantomjs": "1.9.7-1", + "uglify-js": "2.4.x" + }, + "files": [ + "underscore.js", + "underscore-min.js", + "LICENSE" + ], + "homepage": "http://underscorejs.org", + "keywords": [ + "util", + "functional", + "server", + "client", + "browser" + ], + "licenses": [ + { + "type": "MIT", + "url": "https://raw.github.com/jashkenas/underscore/master/LICENSE" + } + ], + "main": "underscore.js", + "name": "underscore", + "repository": { + "type": "git", + "url": "git://github.com/jashkenas/underscore.git" + }, + "scripts": { + "build": "uglifyjs underscore.js -c \"evaluate=false\" --comments \"/ .*/\" -m --source-map underscore-min.map -o underscore-min.js", + "doc": "docco underscore.js", + "test": "phantomjs test/vendor/runner.js test/index.html?noglobals=true && eslint underscore.js test/*.js test/vendor/runner.js" + }, + "version": "1.7.0" +} diff --git a/node_modules/httpntlm/node_modules/underscore/underscore-min.js b/node_modules/httpntlm/node_modules/underscore/underscore-min.js new file mode 100644 index 00000000..11f1d96f --- /dev/null +++ b/node_modules/httpntlm/node_modules/underscore/underscore-min.js @@ -0,0 +1,6 @@ +// Underscore.js 1.7.0 +// http://underscorejs.org +// (c) 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. +(function(){var n=this,t=n._,r=Array.prototype,e=Object.prototype,u=Function.prototype,i=r.push,a=r.slice,o=r.concat,l=e.toString,c=e.hasOwnProperty,f=Array.isArray,s=Object.keys,p=u.bind,h=function(n){return n instanceof h?n:this instanceof h?void(this._wrapped=n):new h(n)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=h),exports._=h):n._=h,h.VERSION="1.7.0";var g=function(n,t,r){if(t===void 0)return n;switch(null==r?3:r){case 1:return function(r){return n.call(t,r)};case 2:return function(r,e){return n.call(t,r,e)};case 3:return function(r,e,u){return n.call(t,r,e,u)};case 4:return function(r,e,u,i){return n.call(t,r,e,u,i)}}return function(){return n.apply(t,arguments)}};h.iteratee=function(n,t,r){return null==n?h.identity:h.isFunction(n)?g(n,t,r):h.isObject(n)?h.matches(n):h.property(n)},h.each=h.forEach=function(n,t,r){if(null==n)return n;t=g(t,r);var e,u=n.length;if(u===+u)for(e=0;u>e;e++)t(n[e],e,n);else{var i=h.keys(n);for(e=0,u=i.length;u>e;e++)t(n[i[e]],i[e],n)}return n},h.map=h.collect=function(n,t,r){if(null==n)return[];t=h.iteratee(t,r);for(var e,u=n.length!==+n.length&&h.keys(n),i=(u||n).length,a=Array(i),o=0;i>o;o++)e=u?u[o]:o,a[o]=t(n[e],e,n);return a};var v="Reduce of empty array with no initial value";h.reduce=h.foldl=h.inject=function(n,t,r,e){null==n&&(n=[]),t=g(t,e,4);var u,i=n.length!==+n.length&&h.keys(n),a=(i||n).length,o=0;if(arguments.length<3){if(!a)throw new TypeError(v);r=n[i?i[o++]:o++]}for(;a>o;o++)u=i?i[o]:o,r=t(r,n[u],u,n);return r},h.reduceRight=h.foldr=function(n,t,r,e){null==n&&(n=[]),t=g(t,e,4);var u,i=n.length!==+n.length&&h.keys(n),a=(i||n).length;if(arguments.length<3){if(!a)throw new TypeError(v);r=n[i?i[--a]:--a]}for(;a--;)u=i?i[a]:a,r=t(r,n[u],u,n);return r},h.find=h.detect=function(n,t,r){var e;return t=h.iteratee(t,r),h.some(n,function(n,r,u){return t(n,r,u)?(e=n,!0):void 0}),e},h.filter=h.select=function(n,t,r){var e=[];return null==n?e:(t=h.iteratee(t,r),h.each(n,function(n,r,u){t(n,r,u)&&e.push(n)}),e)},h.reject=function(n,t,r){return h.filter(n,h.negate(h.iteratee(t)),r)},h.every=h.all=function(n,t,r){if(null==n)return!0;t=h.iteratee(t,r);var e,u,i=n.length!==+n.length&&h.keys(n),a=(i||n).length;for(e=0;a>e;e++)if(u=i?i[e]:e,!t(n[u],u,n))return!1;return!0},h.some=h.any=function(n,t,r){if(null==n)return!1;t=h.iteratee(t,r);var e,u,i=n.length!==+n.length&&h.keys(n),a=(i||n).length;for(e=0;a>e;e++)if(u=i?i[e]:e,t(n[u],u,n))return!0;return!1},h.contains=h.include=function(n,t){return null==n?!1:(n.length!==+n.length&&(n=h.values(n)),h.indexOf(n,t)>=0)},h.invoke=function(n,t){var r=a.call(arguments,2),e=h.isFunction(t);return h.map(n,function(n){return(e?t:n[t]).apply(n,r)})},h.pluck=function(n,t){return h.map(n,h.property(t))},h.where=function(n,t){return h.filter(n,h.matches(t))},h.findWhere=function(n,t){return h.find(n,h.matches(t))},h.max=function(n,t,r){var e,u,i=-1/0,a=-1/0;if(null==t&&null!=n){n=n.length===+n.length?n:h.values(n);for(var o=0,l=n.length;l>o;o++)e=n[o],e>i&&(i=e)}else t=h.iteratee(t,r),h.each(n,function(n,r,e){u=t(n,r,e),(u>a||u===-1/0&&i===-1/0)&&(i=n,a=u)});return i},h.min=function(n,t,r){var e,u,i=1/0,a=1/0;if(null==t&&null!=n){n=n.length===+n.length?n:h.values(n);for(var o=0,l=n.length;l>o;o++)e=n[o],i>e&&(i=e)}else t=h.iteratee(t,r),h.each(n,function(n,r,e){u=t(n,r,e),(a>u||1/0===u&&1/0===i)&&(i=n,a=u)});return i},h.shuffle=function(n){for(var t,r=n&&n.length===+n.length?n:h.values(n),e=r.length,u=Array(e),i=0;e>i;i++)t=h.random(0,i),t!==i&&(u[i]=u[t]),u[t]=r[i];return u},h.sample=function(n,t,r){return null==t||r?(n.length!==+n.length&&(n=h.values(n)),n[h.random(n.length-1)]):h.shuffle(n).slice(0,Math.max(0,t))},h.sortBy=function(n,t,r){return t=h.iteratee(t,r),h.pluck(h.map(n,function(n,r,e){return{value:n,index:r,criteria:t(n,r,e)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||r===void 0)return 1;if(e>r||e===void 0)return-1}return n.index-t.index}),"value")};var m=function(n){return function(t,r,e){var u={};return r=h.iteratee(r,e),h.each(t,function(e,i){var a=r(e,i,t);n(u,e,a)}),u}};h.groupBy=m(function(n,t,r){h.has(n,r)?n[r].push(t):n[r]=[t]}),h.indexBy=m(function(n,t,r){n[r]=t}),h.countBy=m(function(n,t,r){h.has(n,r)?n[r]++:n[r]=1}),h.sortedIndex=function(n,t,r,e){r=h.iteratee(r,e,1);for(var u=r(t),i=0,a=n.length;a>i;){var o=i+a>>>1;r(n[o])t?[]:a.call(n,0,t)},h.initial=function(n,t,r){return a.call(n,0,Math.max(0,n.length-(null==t||r?1:t)))},h.last=function(n,t,r){return null==n?void 0:null==t||r?n[n.length-1]:a.call(n,Math.max(n.length-t,0))},h.rest=h.tail=h.drop=function(n,t,r){return a.call(n,null==t||r?1:t)},h.compact=function(n){return h.filter(n,h.identity)};var y=function(n,t,r,e){if(t&&h.every(n,h.isArray))return o.apply(e,n);for(var u=0,a=n.length;a>u;u++){var l=n[u];h.isArray(l)||h.isArguments(l)?t?i.apply(e,l):y(l,t,r,e):r||e.push(l)}return e};h.flatten=function(n,t){return y(n,t,!1,[])},h.without=function(n){return h.difference(n,a.call(arguments,1))},h.uniq=h.unique=function(n,t,r,e){if(null==n)return[];h.isBoolean(t)||(e=r,r=t,t=!1),null!=r&&(r=h.iteratee(r,e));for(var u=[],i=[],a=0,o=n.length;o>a;a++){var l=n[a];if(t)a&&i===l||u.push(l),i=l;else if(r){var c=r(l,a,n);h.indexOf(i,c)<0&&(i.push(c),u.push(l))}else h.indexOf(u,l)<0&&u.push(l)}return u},h.union=function(){return h.uniq(y(arguments,!0,!0,[]))},h.intersection=function(n){if(null==n)return[];for(var t=[],r=arguments.length,e=0,u=n.length;u>e;e++){var i=n[e];if(!h.contains(t,i)){for(var a=1;r>a&&h.contains(arguments[a],i);a++);a===r&&t.push(i)}}return t},h.difference=function(n){var t=y(a.call(arguments,1),!0,!0,[]);return h.filter(n,function(n){return!h.contains(t,n)})},h.zip=function(n){if(null==n)return[];for(var t=h.max(arguments,"length").length,r=Array(t),e=0;t>e;e++)r[e]=h.pluck(arguments,e);return r},h.object=function(n,t){if(null==n)return{};for(var r={},e=0,u=n.length;u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},h.indexOf=function(n,t,r){if(null==n)return-1;var e=0,u=n.length;if(r){if("number"!=typeof r)return e=h.sortedIndex(n,t),n[e]===t?e:-1;e=0>r?Math.max(0,u+r):r}for(;u>e;e++)if(n[e]===t)return e;return-1},h.lastIndexOf=function(n,t,r){if(null==n)return-1;var e=n.length;for("number"==typeof r&&(e=0>r?e+r+1:Math.min(e,r+1));--e>=0;)if(n[e]===t)return e;return-1},h.range=function(n,t,r){arguments.length<=1&&(t=n||0,n=0),r=r||1;for(var e=Math.max(Math.ceil((t-n)/r),0),u=Array(e),i=0;e>i;i++,n+=r)u[i]=n;return u};var d=function(){};h.bind=function(n,t){var r,e;if(p&&n.bind===p)return p.apply(n,a.call(arguments,1));if(!h.isFunction(n))throw new TypeError("Bind must be called on a function");return r=a.call(arguments,2),e=function(){if(!(this instanceof e))return n.apply(t,r.concat(a.call(arguments)));d.prototype=n.prototype;var u=new d;d.prototype=null;var i=n.apply(u,r.concat(a.call(arguments)));return h.isObject(i)?i:u}},h.partial=function(n){var t=a.call(arguments,1);return function(){for(var r=0,e=t.slice(),u=0,i=e.length;i>u;u++)e[u]===h&&(e[u]=arguments[r++]);for(;r=e)throw new Error("bindAll must be passed function names");for(t=1;e>t;t++)r=arguments[t],n[r]=h.bind(n[r],n);return n},h.memoize=function(n,t){var r=function(e){var u=r.cache,i=t?t.apply(this,arguments):e;return h.has(u,i)||(u[i]=n.apply(this,arguments)),u[i]};return r.cache={},r},h.delay=function(n,t){var r=a.call(arguments,2);return setTimeout(function(){return n.apply(null,r)},t)},h.defer=function(n){return h.delay.apply(h,[n,1].concat(a.call(arguments,1)))},h.throttle=function(n,t,r){var e,u,i,a=null,o=0;r||(r={});var l=function(){o=r.leading===!1?0:h.now(),a=null,i=n.apply(e,u),a||(e=u=null)};return function(){var c=h.now();o||r.leading!==!1||(o=c);var f=t-(c-o);return e=this,u=arguments,0>=f||f>t?(clearTimeout(a),a=null,o=c,i=n.apply(e,u),a||(e=u=null)):a||r.trailing===!1||(a=setTimeout(l,f)),i}},h.debounce=function(n,t,r){var e,u,i,a,o,l=function(){var c=h.now()-a;t>c&&c>0?e=setTimeout(l,t-c):(e=null,r||(o=n.apply(i,u),e||(i=u=null)))};return function(){i=this,u=arguments,a=h.now();var c=r&&!e;return e||(e=setTimeout(l,t)),c&&(o=n.apply(i,u),i=u=null),o}},h.wrap=function(n,t){return h.partial(t,n)},h.negate=function(n){return function(){return!n.apply(this,arguments)}},h.compose=function(){var n=arguments,t=n.length-1;return function(){for(var r=t,e=n[t].apply(this,arguments);r--;)e=n[r].call(this,e);return e}},h.after=function(n,t){return function(){return--n<1?t.apply(this,arguments):void 0}},h.before=function(n,t){var r;return function(){return--n>0?r=t.apply(this,arguments):t=null,r}},h.once=h.partial(h.before,2),h.keys=function(n){if(!h.isObject(n))return[];if(s)return s(n);var t=[];for(var r in n)h.has(n,r)&&t.push(r);return t},h.values=function(n){for(var t=h.keys(n),r=t.length,e=Array(r),u=0;r>u;u++)e[u]=n[t[u]];return e},h.pairs=function(n){for(var t=h.keys(n),r=t.length,e=Array(r),u=0;r>u;u++)e[u]=[t[u],n[t[u]]];return e},h.invert=function(n){for(var t={},r=h.keys(n),e=0,u=r.length;u>e;e++)t[n[r[e]]]=r[e];return t},h.functions=h.methods=function(n){var t=[];for(var r in n)h.isFunction(n[r])&&t.push(r);return t.sort()},h.extend=function(n){if(!h.isObject(n))return n;for(var t,r,e=1,u=arguments.length;u>e;e++){t=arguments[e];for(r in t)c.call(t,r)&&(n[r]=t[r])}return n},h.pick=function(n,t,r){var e,u={};if(null==n)return u;if(h.isFunction(t)){t=g(t,r);for(e in n){var i=n[e];t(i,e,n)&&(u[e]=i)}}else{var l=o.apply([],a.call(arguments,1));n=new Object(n);for(var c=0,f=l.length;f>c;c++)e=l[c],e in n&&(u[e]=n[e])}return u},h.omit=function(n,t,r){if(h.isFunction(t))t=h.negate(t);else{var e=h.map(o.apply([],a.call(arguments,1)),String);t=function(n,t){return!h.contains(e,t)}}return h.pick(n,t,r)},h.defaults=function(n){if(!h.isObject(n))return n;for(var t=1,r=arguments.length;r>t;t++){var e=arguments[t];for(var u in e)n[u]===void 0&&(n[u]=e[u])}return n},h.clone=function(n){return h.isObject(n)?h.isArray(n)?n.slice():h.extend({},n):n},h.tap=function(n,t){return t(n),n};var b=function(n,t,r,e){if(n===t)return 0!==n||1/n===1/t;if(null==n||null==t)return n===t;n instanceof h&&(n=n._wrapped),t instanceof h&&(t=t._wrapped);var u=l.call(n);if(u!==l.call(t))return!1;switch(u){case"[object RegExp]":case"[object String]":return""+n==""+t;case"[object Number]":return+n!==+n?+t!==+t:0===+n?1/+n===1/t:+n===+t;case"[object Date]":case"[object Boolean]":return+n===+t}if("object"!=typeof n||"object"!=typeof t)return!1;for(var i=r.length;i--;)if(r[i]===n)return e[i]===t;var a=n.constructor,o=t.constructor;if(a!==o&&"constructor"in n&&"constructor"in t&&!(h.isFunction(a)&&a instanceof a&&h.isFunction(o)&&o instanceof o))return!1;r.push(n),e.push(t);var c,f;if("[object Array]"===u){if(c=n.length,f=c===t.length)for(;c--&&(f=b(n[c],t[c],r,e)););}else{var s,p=h.keys(n);if(c=p.length,f=h.keys(t).length===c)for(;c--&&(s=p[c],f=h.has(t,s)&&b(n[s],t[s],r,e)););}return r.pop(),e.pop(),f};h.isEqual=function(n,t){return b(n,t,[],[])},h.isEmpty=function(n){if(null==n)return!0;if(h.isArray(n)||h.isString(n)||h.isArguments(n))return 0===n.length;for(var t in n)if(h.has(n,t))return!1;return!0},h.isElement=function(n){return!(!n||1!==n.nodeType)},h.isArray=f||function(n){return"[object Array]"===l.call(n)},h.isObject=function(n){var t=typeof n;return"function"===t||"object"===t&&!!n},h.each(["Arguments","Function","String","Number","Date","RegExp"],function(n){h["is"+n]=function(t){return l.call(t)==="[object "+n+"]"}}),h.isArguments(arguments)||(h.isArguments=function(n){return h.has(n,"callee")}),"function"!=typeof/./&&(h.isFunction=function(n){return"function"==typeof n||!1}),h.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},h.isNaN=function(n){return h.isNumber(n)&&n!==+n},h.isBoolean=function(n){return n===!0||n===!1||"[object Boolean]"===l.call(n)},h.isNull=function(n){return null===n},h.isUndefined=function(n){return n===void 0},h.has=function(n,t){return null!=n&&c.call(n,t)},h.noConflict=function(){return n._=t,this},h.identity=function(n){return n},h.constant=function(n){return function(){return n}},h.noop=function(){},h.property=function(n){return function(t){return t[n]}},h.matches=function(n){var t=h.pairs(n),r=t.length;return function(n){if(null==n)return!r;n=new Object(n);for(var e=0;r>e;e++){var u=t[e],i=u[0];if(u[1]!==n[i]||!(i in n))return!1}return!0}},h.times=function(n,t,r){var e=Array(Math.max(0,n));t=g(t,r,1);for(var u=0;n>u;u++)e[u]=t(u);return e},h.random=function(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))},h.now=Date.now||function(){return(new Date).getTime()};var _={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},w=h.invert(_),j=function(n){var t=function(t){return n[t]},r="(?:"+h.keys(n).join("|")+")",e=RegExp(r),u=RegExp(r,"g");return function(n){return n=null==n?"":""+n,e.test(n)?n.replace(u,t):n}};h.escape=j(_),h.unescape=j(w),h.result=function(n,t){if(null==n)return void 0;var r=n[t];return h.isFunction(r)?n[t]():r};var x=0;h.uniqueId=function(n){var t=++x+"";return n?n+t:t},h.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var A=/(.)^/,k={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},O=/\\|'|\r|\n|\u2028|\u2029/g,F=function(n){return"\\"+k[n]};h.template=function(n,t,r){!t&&r&&(t=r),t=h.defaults({},t,h.templateSettings);var e=RegExp([(t.escape||A).source,(t.interpolate||A).source,(t.evaluate||A).source].join("|")+"|$","g"),u=0,i="__p+='";n.replace(e,function(t,r,e,a,o){return i+=n.slice(u,o).replace(O,F),u=o+t.length,r?i+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'":e?i+="'+\n((__t=("+e+"))==null?'':__t)+\n'":a&&(i+="';\n"+a+"\n__p+='"),t}),i+="';\n",t.variable||(i="with(obj||{}){\n"+i+"}\n"),i="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+i+"return __p;\n";try{var a=new Function(t.variable||"obj","_",i)}catch(o){throw o.source=i,o}var l=function(n){return a.call(this,n,h)},c=t.variable||"obj";return l.source="function("+c+"){\n"+i+"}",l},h.chain=function(n){var t=h(n);return t._chain=!0,t};var E=function(n){return this._chain?h(n).chain():n};h.mixin=function(n){h.each(h.functions(n),function(t){var r=h[t]=n[t];h.prototype[t]=function(){var n=[this._wrapped];return i.apply(n,arguments),E.call(this,r.apply(h,n))}})},h.mixin(h),h.each(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var t=r[n];h.prototype[n]=function(){var r=this._wrapped;return t.apply(r,arguments),"shift"!==n&&"splice"!==n||0!==r.length||delete r[0],E.call(this,r)}}),h.each(["concat","join","slice"],function(n){var t=r[n];h.prototype[n]=function(){return E.call(this,t.apply(this._wrapped,arguments))}}),h.prototype.value=function(){return this._wrapped},"function"==typeof define&&define.amd&&define("underscore",[],function(){return h})}).call(this); +//# sourceMappingURL=underscore-min.map \ No newline at end of file diff --git a/node_modules/httpntlm/node_modules/underscore/underscore.js b/node_modules/httpntlm/node_modules/underscore/underscore.js new file mode 100644 index 00000000..b4f49a02 --- /dev/null +++ b/node_modules/httpntlm/node_modules/underscore/underscore.js @@ -0,0 +1,1415 @@ +// Underscore.js 1.7.0 +// http://underscorejs.org +// (c) 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +(function() { + + // Baseline setup + // -------------- + + // Establish the root object, `window` in the browser, or `exports` on the server. + var root = this; + + // Save the previous value of the `_` variable. + var previousUnderscore = root._; + + // Save bytes in the minified (but not gzipped) version: + var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype; + + // Create quick reference variables for speed access to core prototypes. + var + push = ArrayProto.push, + slice = ArrayProto.slice, + concat = ArrayProto.concat, + toString = ObjProto.toString, + hasOwnProperty = ObjProto.hasOwnProperty; + + // All **ECMAScript 5** native function implementations that we hope to use + // are declared here. + var + nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeBind = FuncProto.bind; + + // Create a safe reference to the Underscore object for use below. + var _ = function(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; + }; + + // Export the Underscore object for **Node.js**, with + // backwards-compatibility for the old `require()` API. If we're in + // the browser, add `_` as a global object. + if (typeof exports !== 'undefined') { + if (typeof module !== 'undefined' && module.exports) { + exports = module.exports = _; + } + exports._ = _; + } else { + root._ = _; + } + + // Current version. + _.VERSION = '1.7.0'; + + // Internal function that returns an efficient (for current engines) version + // of the passed-in callback, to be repeatedly applied in other Underscore + // functions. + var createCallback = function(func, context, argCount) { + if (context === void 0) return func; + switch (argCount == null ? 3 : argCount) { + case 1: return function(value) { + return func.call(context, value); + }; + case 2: return function(value, other) { + return func.call(context, value, other); + }; + case 3: return function(value, index, collection) { + return func.call(context, value, index, collection); + }; + case 4: return function(accumulator, value, index, collection) { + return func.call(context, accumulator, value, index, collection); + }; + } + return function() { + return func.apply(context, arguments); + }; + }; + + // A mostly-internal function to generate callbacks that can be applied + // to each element in a collection, returning the desired result — either + // identity, an arbitrary callback, a property matcher, or a property accessor. + _.iteratee = function(value, context, argCount) { + if (value == null) return _.identity; + if (_.isFunction(value)) return createCallback(value, context, argCount); + if (_.isObject(value)) return _.matches(value); + return _.property(value); + }; + + // Collection Functions + // -------------------- + + // The cornerstone, an `each` implementation, aka `forEach`. + // Handles raw objects in addition to array-likes. Treats all + // sparse array-likes as if they were dense. + _.each = _.forEach = function(obj, iteratee, context) { + if (obj == null) return obj; + iteratee = createCallback(iteratee, context); + var i, length = obj.length; + if (length === +length) { + for (i = 0; i < length; i++) { + iteratee(obj[i], i, obj); + } + } else { + var keys = _.keys(obj); + for (i = 0, length = keys.length; i < length; i++) { + iteratee(obj[keys[i]], keys[i], obj); + } + } + return obj; + }; + + // Return the results of applying the iteratee to each element. + _.map = _.collect = function(obj, iteratee, context) { + if (obj == null) return []; + iteratee = _.iteratee(iteratee, context); + var keys = obj.length !== +obj.length && _.keys(obj), + length = (keys || obj).length, + results = Array(length), + currentKey; + for (var index = 0; index < length; index++) { + currentKey = keys ? keys[index] : index; + results[index] = iteratee(obj[currentKey], currentKey, obj); + } + return results; + }; + + var reduceError = 'Reduce of empty array with no initial value'; + + // **Reduce** builds up a single result from a list of values, aka `inject`, + // or `foldl`. + _.reduce = _.foldl = _.inject = function(obj, iteratee, memo, context) { + if (obj == null) obj = []; + iteratee = createCallback(iteratee, context, 4); + var keys = obj.length !== +obj.length && _.keys(obj), + length = (keys || obj).length, + index = 0, currentKey; + if (arguments.length < 3) { + if (!length) throw new TypeError(reduceError); + memo = obj[keys ? keys[index++] : index++]; + } + for (; index < length; index++) { + currentKey = keys ? keys[index] : index; + memo = iteratee(memo, obj[currentKey], currentKey, obj); + } + return memo; + }; + + // The right-associative version of reduce, also known as `foldr`. + _.reduceRight = _.foldr = function(obj, iteratee, memo, context) { + if (obj == null) obj = []; + iteratee = createCallback(iteratee, context, 4); + var keys = obj.length !== + obj.length && _.keys(obj), + index = (keys || obj).length, + currentKey; + if (arguments.length < 3) { + if (!index) throw new TypeError(reduceError); + memo = obj[keys ? keys[--index] : --index]; + } + while (index--) { + currentKey = keys ? keys[index] : index; + memo = iteratee(memo, obj[currentKey], currentKey, obj); + } + return memo; + }; + + // Return the first value which passes a truth test. Aliased as `detect`. + _.find = _.detect = function(obj, predicate, context) { + var result; + predicate = _.iteratee(predicate, context); + _.some(obj, function(value, index, list) { + if (predicate(value, index, list)) { + result = value; + return true; + } + }); + return result; + }; + + // Return all the elements that pass a truth test. + // Aliased as `select`. + _.filter = _.select = function(obj, predicate, context) { + var results = []; + if (obj == null) return results; + predicate = _.iteratee(predicate, context); + _.each(obj, function(value, index, list) { + if (predicate(value, index, list)) results.push(value); + }); + return results; + }; + + // Return all the elements for which a truth test fails. + _.reject = function(obj, predicate, context) { + return _.filter(obj, _.negate(_.iteratee(predicate)), context); + }; + + // Determine whether all of the elements match a truth test. + // Aliased as `all`. + _.every = _.all = function(obj, predicate, context) { + if (obj == null) return true; + predicate = _.iteratee(predicate, context); + var keys = obj.length !== +obj.length && _.keys(obj), + length = (keys || obj).length, + index, currentKey; + for (index = 0; index < length; index++) { + currentKey = keys ? keys[index] : index; + if (!predicate(obj[currentKey], currentKey, obj)) return false; + } + return true; + }; + + // Determine if at least one element in the object matches a truth test. + // Aliased as `any`. + _.some = _.any = function(obj, predicate, context) { + if (obj == null) return false; + predicate = _.iteratee(predicate, context); + var keys = obj.length !== +obj.length && _.keys(obj), + length = (keys || obj).length, + index, currentKey; + for (index = 0; index < length; index++) { + currentKey = keys ? keys[index] : index; + if (predicate(obj[currentKey], currentKey, obj)) return true; + } + return false; + }; + + // Determine if the array or object contains a given value (using `===`). + // Aliased as `include`. + _.contains = _.include = function(obj, target) { + if (obj == null) return false; + if (obj.length !== +obj.length) obj = _.values(obj); + return _.indexOf(obj, target) >= 0; + }; + + // Invoke a method (with arguments) on every item in a collection. + _.invoke = function(obj, method) { + var args = slice.call(arguments, 2); + var isFunc = _.isFunction(method); + return _.map(obj, function(value) { + return (isFunc ? method : value[method]).apply(value, args); + }); + }; + + // Convenience version of a common use case of `map`: fetching a property. + _.pluck = function(obj, key) { + return _.map(obj, _.property(key)); + }; + + // Convenience version of a common use case of `filter`: selecting only objects + // containing specific `key:value` pairs. + _.where = function(obj, attrs) { + return _.filter(obj, _.matches(attrs)); + }; + + // Convenience version of a common use case of `find`: getting the first object + // containing specific `key:value` pairs. + _.findWhere = function(obj, attrs) { + return _.find(obj, _.matches(attrs)); + }; + + // Return the maximum element (or element-based computation). + _.max = function(obj, iteratee, context) { + var result = -Infinity, lastComputed = -Infinity, + value, computed; + if (iteratee == null && obj != null) { + obj = obj.length === +obj.length ? obj : _.values(obj); + for (var i = 0, length = obj.length; i < length; i++) { + value = obj[i]; + if (value > result) { + result = value; + } + } + } else { + iteratee = _.iteratee(iteratee, context); + _.each(obj, function(value, index, list) { + computed = iteratee(value, index, list); + if (computed > lastComputed || computed === -Infinity && result === -Infinity) { + result = value; + lastComputed = computed; + } + }); + } + return result; + }; + + // Return the minimum element (or element-based computation). + _.min = function(obj, iteratee, context) { + var result = Infinity, lastComputed = Infinity, + value, computed; + if (iteratee == null && obj != null) { + obj = obj.length === +obj.length ? obj : _.values(obj); + for (var i = 0, length = obj.length; i < length; i++) { + value = obj[i]; + if (value < result) { + result = value; + } + } + } else { + iteratee = _.iteratee(iteratee, context); + _.each(obj, function(value, index, list) { + computed = iteratee(value, index, list); + if (computed < lastComputed || computed === Infinity && result === Infinity) { + result = value; + lastComputed = computed; + } + }); + } + return result; + }; + + // Shuffle a collection, using the modern version of the + // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle). + _.shuffle = function(obj) { + var set = obj && obj.length === +obj.length ? obj : _.values(obj); + var length = set.length; + var shuffled = Array(length); + for (var index = 0, rand; index < length; index++) { + rand = _.random(0, index); + if (rand !== index) shuffled[index] = shuffled[rand]; + shuffled[rand] = set[index]; + } + return shuffled; + }; + + // Sample **n** random values from a collection. + // If **n** is not specified, returns a single random element. + // The internal `guard` argument allows it to work with `map`. + _.sample = function(obj, n, guard) { + if (n == null || guard) { + if (obj.length !== +obj.length) obj = _.values(obj); + return obj[_.random(obj.length - 1)]; + } + return _.shuffle(obj).slice(0, Math.max(0, n)); + }; + + // Sort the object's values by a criterion produced by an iteratee. + _.sortBy = function(obj, iteratee, context) { + iteratee = _.iteratee(iteratee, context); + return _.pluck(_.map(obj, function(value, index, list) { + return { + value: value, + index: index, + criteria: iteratee(value, index, list) + }; + }).sort(function(left, right) { + var a = left.criteria; + var b = right.criteria; + if (a !== b) { + if (a > b || a === void 0) return 1; + if (a < b || b === void 0) return -1; + } + return left.index - right.index; + }), 'value'); + }; + + // An internal function used for aggregate "group by" operations. + var group = function(behavior) { + return function(obj, iteratee, context) { + var result = {}; + iteratee = _.iteratee(iteratee, context); + _.each(obj, function(value, index) { + var key = iteratee(value, index, obj); + behavior(result, value, key); + }); + return result; + }; + }; + + // Groups the object's values by a criterion. Pass either a string attribute + // to group by, or a function that returns the criterion. + _.groupBy = group(function(result, value, key) { + if (_.has(result, key)) result[key].push(value); else result[key] = [value]; + }); + + // Indexes the object's values by a criterion, similar to `groupBy`, but for + // when you know that your index values will be unique. + _.indexBy = group(function(result, value, key) { + result[key] = value; + }); + + // Counts instances of an object that group by a certain criterion. Pass + // either a string attribute to count by, or a function that returns the + // criterion. + _.countBy = group(function(result, value, key) { + if (_.has(result, key)) result[key]++; else result[key] = 1; + }); + + // Use a comparator function to figure out the smallest index at which + // an object should be inserted so as to maintain order. Uses binary search. + _.sortedIndex = function(array, obj, iteratee, context) { + iteratee = _.iteratee(iteratee, context, 1); + var value = iteratee(obj); + var low = 0, high = array.length; + while (low < high) { + var mid = low + high >>> 1; + if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; + } + return low; + }; + + // Safely create a real, live array from anything iterable. + _.toArray = function(obj) { + if (!obj) return []; + if (_.isArray(obj)) return slice.call(obj); + if (obj.length === +obj.length) return _.map(obj, _.identity); + return _.values(obj); + }; + + // Return the number of elements in an object. + _.size = function(obj) { + if (obj == null) return 0; + return obj.length === +obj.length ? obj.length : _.keys(obj).length; + }; + + // Split a collection into two arrays: one whose elements all satisfy the given + // predicate, and one whose elements all do not satisfy the predicate. + _.partition = function(obj, predicate, context) { + predicate = _.iteratee(predicate, context); + var pass = [], fail = []; + _.each(obj, function(value, key, obj) { + (predicate(value, key, obj) ? pass : fail).push(value); + }); + return [pass, fail]; + }; + + // Array Functions + // --------------- + + // Get the first element of an array. Passing **n** will return the first N + // values in the array. Aliased as `head` and `take`. The **guard** check + // allows it to work with `_.map`. + _.first = _.head = _.take = function(array, n, guard) { + if (array == null) return void 0; + if (n == null || guard) return array[0]; + if (n < 0) return []; + return slice.call(array, 0, n); + }; + + // Returns everything but the last entry of the array. Especially useful on + // the arguments object. Passing **n** will return all the values in + // the array, excluding the last N. The **guard** check allows it to work with + // `_.map`. + _.initial = function(array, n, guard) { + return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); + }; + + // Get the last element of an array. Passing **n** will return the last N + // values in the array. The **guard** check allows it to work with `_.map`. + _.last = function(array, n, guard) { + if (array == null) return void 0; + if (n == null || guard) return array[array.length - 1]; + return slice.call(array, Math.max(array.length - n, 0)); + }; + + // Returns everything but the first entry of the array. Aliased as `tail` and `drop`. + // Especially useful on the arguments object. Passing an **n** will return + // the rest N values in the array. The **guard** + // check allows it to work with `_.map`. + _.rest = _.tail = _.drop = function(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); + }; + + // Trim out all falsy values from an array. + _.compact = function(array) { + return _.filter(array, _.identity); + }; + + // Internal implementation of a recursive `flatten` function. + var flatten = function(input, shallow, strict, output) { + if (shallow && _.every(input, _.isArray)) { + return concat.apply(output, input); + } + for (var i = 0, length = input.length; i < length; i++) { + var value = input[i]; + if (!_.isArray(value) && !_.isArguments(value)) { + if (!strict) output.push(value); + } else if (shallow) { + push.apply(output, value); + } else { + flatten(value, shallow, strict, output); + } + } + return output; + }; + + // Flatten out an array, either recursively (by default), or just one level. + _.flatten = function(array, shallow) { + return flatten(array, shallow, false, []); + }; + + // Return a version of the array that does not contain the specified value(s). + _.without = function(array) { + return _.difference(array, slice.call(arguments, 1)); + }; + + // Produce a duplicate-free version of the array. If the array has already + // been sorted, you have the option of using a faster algorithm. + // Aliased as `unique`. + _.uniq = _.unique = function(array, isSorted, iteratee, context) { + if (array == null) return []; + if (!_.isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = _.iteratee(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = array.length; i < length; i++) { + var value = array[i]; + if (isSorted) { + if (!i || seen !== value) result.push(value); + seen = value; + } else if (iteratee) { + var computed = iteratee(value, i, array); + if (_.indexOf(seen, computed) < 0) { + seen.push(computed); + result.push(value); + } + } else if (_.indexOf(result, value) < 0) { + result.push(value); + } + } + return result; + }; + + // Produce an array that contains the union: each distinct element from all of + // the passed-in arrays. + _.union = function() { + return _.uniq(flatten(arguments, true, true, [])); + }; + + // Produce an array that contains every item shared between all the + // passed-in arrays. + _.intersection = function(array) { + if (array == null) return []; + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = array.length; i < length; i++) { + var item = array[i]; + if (_.contains(result, item)) continue; + for (var j = 1; j < argsLength; j++) { + if (!_.contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; + }; + + // Take the difference between one array and a number of other arrays. + // Only the elements present in just the first array will remain. + _.difference = function(array) { + var rest = flatten(slice.call(arguments, 1), true, true, []); + return _.filter(array, function(value){ + return !_.contains(rest, value); + }); + }; + + // Zip together multiple lists into a single array -- elements that share + // an index go together. + _.zip = function(array) { + if (array == null) return []; + var length = _.max(arguments, 'length').length; + var results = Array(length); + for (var i = 0; i < length; i++) { + results[i] = _.pluck(arguments, i); + } + return results; + }; + + // Converts lists into objects. Pass either a single array of `[key, value]` + // pairs, or two parallel arrays of the same length -- one of keys, and one of + // the corresponding values. + _.object = function(list, values) { + if (list == null) return {}; + var result = {}; + for (var i = 0, length = list.length; i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; + }; + + // Return the position of the first occurrence of an item in an array, + // or -1 if the item is not included in the array. + // If the array is large and already in sort order, pass `true` + // for **isSorted** to use binary search. + _.indexOf = function(array, item, isSorted) { + if (array == null) return -1; + var i = 0, length = array.length; + if (isSorted) { + if (typeof isSorted == 'number') { + i = isSorted < 0 ? Math.max(0, length + isSorted) : isSorted; + } else { + i = _.sortedIndex(array, item); + return array[i] === item ? i : -1; + } + } + for (; i < length; i++) if (array[i] === item) return i; + return -1; + }; + + _.lastIndexOf = function(array, item, from) { + if (array == null) return -1; + var idx = array.length; + if (typeof from == 'number') { + idx = from < 0 ? idx + from + 1 : Math.min(idx, from + 1); + } + while (--idx >= 0) if (array[idx] === item) return idx; + return -1; + }; + + // Generate an integer Array containing an arithmetic progression. A port of + // the native Python `range()` function. See + // [the Python documentation](http://docs.python.org/library/functions.html#range). + _.range = function(start, stop, step) { + if (arguments.length <= 1) { + stop = start || 0; + start = 0; + } + step = step || 1; + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; + }; + + // Function (ahem) Functions + // ------------------ + + // Reusable constructor function for prototype setting. + var Ctor = function(){}; + + // Create a function bound to a given object (assigning `this`, and arguments, + // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if + // available. + _.bind = function(func, context) { + var args, bound; + if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1)); + if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function'); + args = slice.call(arguments, 2); + bound = function() { + if (!(this instanceof bound)) return func.apply(context, args.concat(slice.call(arguments))); + Ctor.prototype = func.prototype; + var self = new Ctor; + Ctor.prototype = null; + var result = func.apply(self, args.concat(slice.call(arguments))); + if (_.isObject(result)) return result; + return self; + }; + return bound; + }; + + // Partially apply a function by creating a version that has had some of its + // arguments pre-filled, without changing its dynamic `this` context. _ acts + // as a placeholder, allowing any combination of arguments to be pre-filled. + _.partial = function(func) { + var boundArgs = slice.call(arguments, 1); + return function() { + var position = 0; + var args = boundArgs.slice(); + for (var i = 0, length = args.length; i < length; i++) { + if (args[i] === _) args[i] = arguments[position++]; + } + while (position < arguments.length) args.push(arguments[position++]); + return func.apply(this, args); + }; + }; + + // Bind a number of an object's methods to that object. Remaining arguments + // are the method names to be bound. Useful for ensuring that all callbacks + // defined on an object belong to it. + _.bindAll = function(obj) { + var i, length = arguments.length, key; + if (length <= 1) throw new Error('bindAll must be passed function names'); + for (i = 1; i < length; i++) { + key = arguments[i]; + obj[key] = _.bind(obj[key], obj); + } + return obj; + }; + + // Memoize an expensive function by storing its results. + _.memoize = function(func, hasher) { + var memoize = function(key) { + var cache = memoize.cache; + var address = hasher ? hasher.apply(this, arguments) : key; + if (!_.has(cache, address)) cache[address] = func.apply(this, arguments); + return cache[address]; + }; + memoize.cache = {}; + return memoize; + }; + + // Delays a function for the given number of milliseconds, and then calls + // it with the arguments supplied. + _.delay = function(func, wait) { + var args = slice.call(arguments, 2); + return setTimeout(function(){ + return func.apply(null, args); + }, wait); + }; + + // Defers a function, scheduling it to run after the current call stack has + // cleared. + _.defer = function(func) { + return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1))); + }; + + // Returns a function, that, when invoked, will only be triggered at most once + // during a given window of time. Normally, the throttled function will run + // as much as it can, without ever going more than once per `wait` duration; + // but if you'd like to disable the execution on the leading edge, pass + // `{leading: false}`. To disable execution on the trailing edge, ditto. + _.throttle = function(func, wait, options) { + var context, args, result; + var timeout = null; + var previous = 0; + if (!options) options = {}; + var later = function() { + previous = options.leading === false ? 0 : _.now(); + timeout = null; + result = func.apply(context, args); + if (!timeout) context = args = null; + }; + return function() { + var now = _.now(); + if (!previous && options.leading === false) previous = now; + var remaining = wait - (now - previous); + context = this; + args = arguments; + if (remaining <= 0 || remaining > wait) { + clearTimeout(timeout); + timeout = null; + previous = now; + result = func.apply(context, args); + if (!timeout) context = args = null; + } else if (!timeout && options.trailing !== false) { + timeout = setTimeout(later, remaining); + } + return result; + }; + }; + + // Returns a function, that, as long as it continues to be invoked, will not + // be triggered. The function will be called after it stops being called for + // N milliseconds. If `immediate` is passed, trigger the function on the + // leading edge, instead of the trailing. + _.debounce = function(func, wait, immediate) { + var timeout, args, context, timestamp, result; + + var later = function() { + var last = _.now() - timestamp; + + if (last < wait && last > 0) { + timeout = setTimeout(later, wait - last); + } else { + timeout = null; + if (!immediate) { + result = func.apply(context, args); + if (!timeout) context = args = null; + } + } + }; + + return function() { + context = this; + args = arguments; + timestamp = _.now(); + var callNow = immediate && !timeout; + if (!timeout) timeout = setTimeout(later, wait); + if (callNow) { + result = func.apply(context, args); + context = args = null; + } + + return result; + }; + }; + + // Returns the first function passed as an argument to the second, + // allowing you to adjust arguments, run code before and after, and + // conditionally execute the original function. + _.wrap = function(func, wrapper) { + return _.partial(wrapper, func); + }; + + // Returns a negated version of the passed-in predicate. + _.negate = function(predicate) { + return function() { + return !predicate.apply(this, arguments); + }; + }; + + // Returns a function that is the composition of a list of functions, each + // consuming the return value of the function that follows. + _.compose = function() { + var args = arguments; + var start = args.length - 1; + return function() { + var i = start; + var result = args[start].apply(this, arguments); + while (i--) result = args[i].call(this, result); + return result; + }; + }; + + // Returns a function that will only be executed after being called N times. + _.after = function(times, func) { + return function() { + if (--times < 1) { + return func.apply(this, arguments); + } + }; + }; + + // Returns a function that will only be executed before being called N times. + _.before = function(times, func) { + var memo; + return function() { + if (--times > 0) { + memo = func.apply(this, arguments); + } else { + func = null; + } + return memo; + }; + }; + + // Returns a function that will be executed at most one time, no matter how + // often you call it. Useful for lazy initialization. + _.once = _.partial(_.before, 2); + + // Object Functions + // ---------------- + + // Retrieve the names of an object's properties. + // Delegates to **ECMAScript 5**'s native `Object.keys` + _.keys = function(obj) { + if (!_.isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (_.has(obj, key)) keys.push(key); + return keys; + }; + + // Retrieve the values of an object's properties. + _.values = function(obj) { + var keys = _.keys(obj); + var length = keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[keys[i]]; + } + return values; + }; + + // Convert an object into a list of `[key, value]` pairs. + _.pairs = function(obj) { + var keys = _.keys(obj); + var length = keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [keys[i], obj[keys[i]]]; + } + return pairs; + }; + + // Invert the keys and values of an object. The values must be serializable. + _.invert = function(obj) { + var result = {}; + var keys = _.keys(obj); + for (var i = 0, length = keys.length; i < length; i++) { + result[obj[keys[i]]] = keys[i]; + } + return result; + }; + + // Return a sorted list of the function names available on the object. + // Aliased as `methods` + _.functions = _.methods = function(obj) { + var names = []; + for (var key in obj) { + if (_.isFunction(obj[key])) names.push(key); + } + return names.sort(); + }; + + // Extend a given object with all the properties in passed-in object(s). + _.extend = function(obj) { + if (!_.isObject(obj)) return obj; + var source, prop; + for (var i = 1, length = arguments.length; i < length; i++) { + source = arguments[i]; + for (prop in source) { + if (hasOwnProperty.call(source, prop)) { + obj[prop] = source[prop]; + } + } + } + return obj; + }; + + // Return a copy of the object only containing the whitelisted properties. + _.pick = function(obj, iteratee, context) { + var result = {}, key; + if (obj == null) return result; + if (_.isFunction(iteratee)) { + iteratee = createCallback(iteratee, context); + for (key in obj) { + var value = obj[key]; + if (iteratee(value, key, obj)) result[key] = value; + } + } else { + var keys = concat.apply([], slice.call(arguments, 1)); + obj = new Object(obj); + for (var i = 0, length = keys.length; i < length; i++) { + key = keys[i]; + if (key in obj) result[key] = obj[key]; + } + } + return result; + }; + + // Return a copy of the object without the blacklisted properties. + _.omit = function(obj, iteratee, context) { + if (_.isFunction(iteratee)) { + iteratee = _.negate(iteratee); + } else { + var keys = _.map(concat.apply([], slice.call(arguments, 1)), String); + iteratee = function(value, key) { + return !_.contains(keys, key); + }; + } + return _.pick(obj, iteratee, context); + }; + + // Fill in a given object with default properties. + _.defaults = function(obj) { + if (!_.isObject(obj)) return obj; + for (var i = 1, length = arguments.length; i < length; i++) { + var source = arguments[i]; + for (var prop in source) { + if (obj[prop] === void 0) obj[prop] = source[prop]; + } + } + return obj; + }; + + // Create a (shallow-cloned) duplicate of an object. + _.clone = function(obj) { + if (!_.isObject(obj)) return obj; + return _.isArray(obj) ? obj.slice() : _.extend({}, obj); + }; + + // Invokes interceptor with the obj, and then returns obj. + // The primary purpose of this method is to "tap into" a method chain, in + // order to perform operations on intermediate results within the chain. + _.tap = function(obj, interceptor) { + interceptor(obj); + return obj; + }; + + // Internal recursive comparison function for `isEqual`. + var eq = function(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // A strict comparison is necessary because `null == undefined`. + if (a == null || b == null) return a === b; + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = toString.call(a); + if (className !== toString.call(b)) return false; + switch (className) { + // Strings, numbers, regular expressions, dates, and booleans are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + } + if (typeof a != 'object' || typeof b != 'object') return false; + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } + // Objects with different constructors are not equivalent, but `Object`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if ( + aCtor !== bCtor && + // Handle Object.create(x) cases + 'constructor' in a && 'constructor' in b && + !(_.isFunction(aCtor) && aCtor instanceof aCtor && + _.isFunction(bCtor) && bCtor instanceof bCtor) + ) { + return false; + } + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); + var size, result; + // Recursively compare objects and arrays. + if (className === '[object Array]') { + // Compare array lengths to determine if a deep comparison is necessary. + size = a.length; + result = size === b.length; + if (result) { + // Deep compare the contents, ignoring non-numeric properties. + while (size--) { + if (!(result = eq(a[size], b[size], aStack, bStack))) break; + } + } + } else { + // Deep compare objects. + var keys = _.keys(a), key; + size = keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + result = _.keys(b).length === size; + if (result) { + while (size--) { + // Deep compare each member + key = keys[size]; + if (!(result = _.has(b, key) && eq(a[key], b[key], aStack, bStack))) break; + } + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return result; + }; + + // Perform a deep comparison to check if two objects are equal. + _.isEqual = function(a, b) { + return eq(a, b, [], []); + }; + + // Is a given array, string, or object empty? + // An "empty" object has no enumerable own-properties. + _.isEmpty = function(obj) { + if (obj == null) return true; + if (_.isArray(obj) || _.isString(obj) || _.isArguments(obj)) return obj.length === 0; + for (var key in obj) if (_.has(obj, key)) return false; + return true; + }; + + // Is a given value a DOM element? + _.isElement = function(obj) { + return !!(obj && obj.nodeType === 1); + }; + + // Is a given value an array? + // Delegates to ECMA5's native Array.isArray + _.isArray = nativeIsArray || function(obj) { + return toString.call(obj) === '[object Array]'; + }; + + // Is a given variable an object? + _.isObject = function(obj) { + var type = typeof obj; + return type === 'function' || type === 'object' && !!obj; + }; + + // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp. + _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp'], function(name) { + _['is' + name] = function(obj) { + return toString.call(obj) === '[object ' + name + ']'; + }; + }); + + // Define a fallback version of the method in browsers (ahem, IE), where + // there isn't any inspectable "Arguments" type. + if (!_.isArguments(arguments)) { + _.isArguments = function(obj) { + return _.has(obj, 'callee'); + }; + } + + // Optimize `isFunction` if appropriate. Work around an IE 11 bug. + if (typeof /./ !== 'function') { + _.isFunction = function(obj) { + return typeof obj == 'function' || false; + }; + } + + // Is a given object a finite number? + _.isFinite = function(obj) { + return isFinite(obj) && !isNaN(parseFloat(obj)); + }; + + // Is the given value `NaN`? (NaN is the only number which does not equal itself). + _.isNaN = function(obj) { + return _.isNumber(obj) && obj !== +obj; + }; + + // Is a given value a boolean? + _.isBoolean = function(obj) { + return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; + }; + + // Is a given value equal to null? + _.isNull = function(obj) { + return obj === null; + }; + + // Is a given variable undefined? + _.isUndefined = function(obj) { + return obj === void 0; + }; + + // Shortcut function for checking if an object has a given property directly + // on itself (in other words, not on a prototype). + _.has = function(obj, key) { + return obj != null && hasOwnProperty.call(obj, key); + }; + + // Utility Functions + // ----------------- + + // Run Underscore.js in *noConflict* mode, returning the `_` variable to its + // previous owner. Returns a reference to the Underscore object. + _.noConflict = function() { + root._ = previousUnderscore; + return this; + }; + + // Keep the identity function around for default iteratees. + _.identity = function(value) { + return value; + }; + + _.constant = function(value) { + return function() { + return value; + }; + }; + + _.noop = function(){}; + + _.property = function(key) { + return function(obj) { + return obj[key]; + }; + }; + + // Returns a predicate for checking whether an object has a given set of `key:value` pairs. + _.matches = function(attrs) { + var pairs = _.pairs(attrs), length = pairs.length; + return function(obj) { + if (obj == null) return !length; + obj = new Object(obj); + for (var i = 0; i < length; i++) { + var pair = pairs[i], key = pair[0]; + if (pair[1] !== obj[key] || !(key in obj)) return false; + } + return true; + }; + }; + + // Run a function **n** times. + _.times = function(n, iteratee, context) { + var accum = Array(Math.max(0, n)); + iteratee = createCallback(iteratee, context, 1); + for (var i = 0; i < n; i++) accum[i] = iteratee(i); + return accum; + }; + + // Return a random integer between min and max (inclusive). + _.random = function(min, max) { + if (max == null) { + max = min; + min = 0; + } + return min + Math.floor(Math.random() * (max - min + 1)); + }; + + // A (possibly faster) way to get the current timestamp as an integer. + _.now = Date.now || function() { + return new Date().getTime(); + }; + + // List of HTML entities for escaping. + var escapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' + }; + var unescapeMap = _.invert(escapeMap); + + // Functions for escaping and unescaping strings to/from HTML interpolation. + var createEscaper = function(map) { + var escaper = function(match) { + return map[match]; + }; + // Regexes for identifying a key that needs to be escaped + var source = '(?:' + _.keys(map).join('|') + ')'; + var testRegexp = RegExp(source); + var replaceRegexp = RegExp(source, 'g'); + return function(string) { + string = string == null ? '' : '' + string; + return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string; + }; + }; + _.escape = createEscaper(escapeMap); + _.unescape = createEscaper(unescapeMap); + + // If the value of the named `property` is a function then invoke it with the + // `object` as context; otherwise, return it. + _.result = function(object, property) { + if (object == null) return void 0; + var value = object[property]; + return _.isFunction(value) ? object[property]() : value; + }; + + // Generate a unique integer id (unique within the entire client session). + // Useful for temporary DOM ids. + var idCounter = 0; + _.uniqueId = function(prefix) { + var id = ++idCounter + ''; + return prefix ? prefix + id : id; + }; + + // By default, Underscore uses ERB-style template delimiters, change the + // following template settings to use alternative delimiters. + _.templateSettings = { + evaluate : /<%([\s\S]+?)%>/g, + interpolate : /<%=([\s\S]+?)%>/g, + escape : /<%-([\s\S]+?)%>/g + }; + + // When customizing `templateSettings`, if you don't want to define an + // interpolation, evaluation or escaping regex, we need one that is + // guaranteed not to match. + var noMatch = /(.)^/; + + // Certain characters need to be escaped so that they can be put into a + // string literal. + var escapes = { + "'": "'", + '\\': '\\', + '\r': 'r', + '\n': 'n', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + var escaper = /\\|'|\r|\n|\u2028|\u2029/g; + + var escapeChar = function(match) { + return '\\' + escapes[match]; + }; + + // JavaScript micro-templating, similar to John Resig's implementation. + // Underscore templating handles arbitrary delimiters, preserves whitespace, + // and correctly escapes quotes within interpolated code. + // NB: `oldSettings` only exists for backwards compatibility. + _.template = function(text, settings, oldSettings) { + if (!settings && oldSettings) settings = oldSettings; + settings = _.defaults({}, settings, _.templateSettings); + + // Combine delimiters into one regular expression via alternation. + var matcher = RegExp([ + (settings.escape || noMatch).source, + (settings.interpolate || noMatch).source, + (settings.evaluate || noMatch).source + ].join('|') + '|$', 'g'); + + // Compile the template source, escaping string literals appropriately. + var index = 0; + var source = "__p+='"; + text.replace(matcher, function(match, escape, interpolate, evaluate, offset) { + source += text.slice(index, offset).replace(escaper, escapeChar); + index = offset + match.length; + + if (escape) { + source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'"; + } else if (interpolate) { + source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'"; + } else if (evaluate) { + source += "';\n" + evaluate + "\n__p+='"; + } + + // Adobe VMs need the match returned to produce the correct offest. + return match; + }); + source += "';\n"; + + // If a variable is not specified, place data values in local scope. + if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n'; + + source = "var __t,__p='',__j=Array.prototype.join," + + "print=function(){__p+=__j.call(arguments,'');};\n" + + source + 'return __p;\n'; + + try { + var render = new Function(settings.variable || 'obj', '_', source); + } catch (e) { + e.source = source; + throw e; + } + + var template = function(data) { + return render.call(this, data, _); + }; + + // Provide the compiled source as a convenience for precompilation. + var argument = settings.variable || 'obj'; + template.source = 'function(' + argument + '){\n' + source + '}'; + + return template; + }; + + // Add a "chain" function. Start chaining a wrapped Underscore object. + _.chain = function(obj) { + var instance = _(obj); + instance._chain = true; + return instance; + }; + + // OOP + // --------------- + // If Underscore is called as a function, it returns a wrapped object that + // can be used OO-style. This wrapper holds altered versions of all the + // underscore functions. Wrapped objects may be chained. + + // Helper function to continue chaining intermediate results. + var result = function(obj) { + return this._chain ? _(obj).chain() : obj; + }; + + // Add your own custom functions to the Underscore object. + _.mixin = function(obj) { + _.each(_.functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return result.call(this, func.apply(_, args)); + }; + }); + }; + + // Add all of the Underscore functions to the wrapper object. + _.mixin(_); + + // Add all mutator Array functions to the wrapper. + _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0]; + return result.call(this, obj); + }; + }); + + // Add all accessor Array functions to the wrapper. + _.each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + return result.call(this, method.apply(this._wrapped, arguments)); + }; + }); + + // Extracts the result from a wrapped and chained object. + _.prototype.value = function() { + return this._wrapped; + }; + + // AMD registration happens at the end for compatibility with AMD loaders + // that may not enforce next-turn semantics on modules. Even though general + // practice for AMD registration is to be anonymous, underscore registers + // as a named module because, like jQuery, it is a base library that is + // popular enough to be bundled in a third party lib, but not be part of + // an AMD load request. Those cases could generate an error when an + // anonymous define() is called outside of a loader request. + if (typeof define === 'function' && define.amd) { + define('underscore', [], function() { + return _; + }); + } +}.call(this)); diff --git a/node_modules/httpntlm/ntlm.js b/node_modules/httpntlm/ntlm.js new file mode 100644 index 00000000..3bc3120d --- /dev/null +++ b/node_modules/httpntlm/ntlm.js @@ -0,0 +1,408 @@ +/** + * Copyright (c) 2013 Sam Decrock https://github.com/SamDecrock/ + * All rights reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +var crypto = require('crypto'); + +var flags = { + NTLM_NegotiateUnicode : 0x00000001, + NTLM_NegotiateOEM : 0x00000002, + NTLM_RequestTarget : 0x00000004, + NTLM_Unknown9 : 0x00000008, + NTLM_NegotiateSign : 0x00000010, + NTLM_NegotiateSeal : 0x00000020, + NTLM_NegotiateDatagram : 0x00000040, + NTLM_NegotiateLanManagerKey : 0x00000080, + NTLM_Unknown8 : 0x00000100, + NTLM_NegotiateNTLM : 0x00000200, + NTLM_NegotiateNTOnly : 0x00000400, + NTLM_Anonymous : 0x00000800, + NTLM_NegotiateOemDomainSupplied : 0x00001000, + NTLM_NegotiateOemWorkstationSupplied : 0x00002000, + NTLM_Unknown6 : 0x00004000, + NTLM_NegotiateAlwaysSign : 0x00008000, + NTLM_TargetTypeDomain : 0x00010000, + NTLM_TargetTypeServer : 0x00020000, + NTLM_TargetTypeShare : 0x00040000, + NTLM_NegotiateExtendedSecurity : 0x00080000, + NTLM_NegotiateIdentify : 0x00100000, + NTLM_Unknown5 : 0x00200000, + NTLM_RequestNonNTSessionKey : 0x00400000, + NTLM_NegotiateTargetInfo : 0x00800000, + NTLM_Unknown4 : 0x01000000, + NTLM_NegotiateVersion : 0x02000000, + NTLM_Unknown3 : 0x04000000, + NTLM_Unknown2 : 0x08000000, + NTLM_Unknown1 : 0x10000000, + NTLM_Negotiate128 : 0x20000000, + NTLM_NegotiateKeyExchange : 0x40000000, + NTLM_Negotiate56 : 0x80000000 +}; +var typeflags = { + NTLM_TYPE1_FLAGS : flags.NTLM_NegotiateUnicode + + flags.NTLM_NegotiateOEM + + flags.NTLM_RequestTarget + + flags.NTLM_NegotiateNTLM + + flags.NTLM_NegotiateOemDomainSupplied + + flags.NTLM_NegotiateOemWorkstationSupplied + + flags.NTLM_NegotiateAlwaysSign + + flags.NTLM_NegotiateExtendedSecurity + + flags.NTLM_NegotiateVersion + + flags.NTLM_Negotiate128 + + flags.NTLM_Negotiate56, + + NTLM_TYPE2_FLAGS : flags.NTLM_NegotiateUnicode + + flags.NTLM_RequestTarget + + flags.NTLM_NegotiateNTLM + + flags.NTLM_NegotiateAlwaysSign + + flags.NTLM_NegotiateExtendedSecurity + + flags.NTLM_NegotiateTargetInfo + + flags.NTLM_NegotiateVersion + + flags.NTLM_Negotiate128 + + flags.NTLM_Negotiate56 +}; + +function createType1Message(options){ + var domain = escape(options.domain.toUpperCase()); + var workstation = escape(options.workstation.toUpperCase()); + var protocol = 'NTLMSSP\0'; + + var BODY_LENGTH = 40; + + var type1flags = typeflags.NTLM_TYPE1_FLAGS; + if(!domain || domain === '') + type1flags = type1flags - flags.NTLM_NegotiateOemDomainSupplied; + + var pos = 0; + var buf = new Buffer(BODY_LENGTH + domain.length + workstation.length); + + + buf.write(protocol, pos, protocol.length); pos += protocol.length; // protocol + buf.writeUInt32LE(1, pos); pos += 4; // type 1 + buf.writeUInt32LE(type1flags, pos); pos += 4; // TYPE1 flag + + buf.writeUInt16LE(domain.length, pos); pos += 2; // domain length + buf.writeUInt16LE(domain.length, pos); pos += 2; // domain max length + buf.writeUInt32LE(BODY_LENGTH + workstation.length, pos); pos += 4; // domain buffer offset + + buf.writeUInt16LE(workstation.length, pos); pos += 2; // workstation length + buf.writeUInt16LE(workstation.length, pos); pos += 2; // workstation max length + buf.writeUInt32LE(BODY_LENGTH, pos); pos += 4; // workstation buffer offset + + buf.writeUInt8(5, pos); pos += 1; //ProductMajorVersion + buf.writeUInt8(1, pos); pos += 1; //ProductMinorVersion + buf.writeUInt16LE(2600, pos); pos += 2; //ProductBuild + + buf.writeUInt8(0 , pos); pos += 1; //VersionReserved1 + buf.writeUInt8(0 , pos); pos += 1; //VersionReserved2 + buf.writeUInt8(0 , pos); pos += 1; //VersionReserved3 + buf.writeUInt8(15, pos); pos += 1; //NTLMRevisionCurrent + + + // length checks is to fix issue #46 and possibly #57 + if(workstation.length !=0) buf.write(workstation, pos, workstation.length, 'ascii'); pos += workstation.length; // workstation string + if(domain.length !=0) buf.write(domain , pos, domain.length , 'ascii'); pos += domain.length; // domain string + + return 'NTLM ' + buf.toString('base64'); +} + +function parseType2Message(rawmsg, callback){ + var match = rawmsg.match(/NTLM (.+)?/); + if(!match || !match[1]) { + callback(new Error("Couldn't find NTLM in the message type2 comming from the server")); + return null; + } + + var buf = new Buffer(match[1], 'base64'); + + var msg = {}; + + msg.signature = buf.slice(0, 8); + msg.type = buf.readInt16LE(8); + + if(msg.type != 2) { + callback(new Error("Server didn't return a type 2 message")); + return null; + } + + msg.targetNameLen = buf.readInt16LE(12); + msg.targetNameMaxLen = buf.readInt16LE(14); + msg.targetNameOffset = buf.readInt32LE(16); + msg.targetName = buf.slice(msg.targetNameOffset, msg.targetNameOffset + msg.targetNameMaxLen); + + msg.negotiateFlags = buf.readInt32LE(20); + msg.serverChallenge = buf.slice(24, 32); + msg.reserved = buf.slice(32, 40); + + if(msg.negotiateFlags & flags.NTLM_NegotiateTargetInfo){ + msg.targetInfoLen = buf.readInt16LE(40); + msg.targetInfoMaxLen = buf.readInt16LE(42); + msg.targetInfoOffset = buf.readInt32LE(44); + msg.targetInfo = buf.slice(msg.targetInfoOffset, msg.targetInfoOffset + msg.targetInfoLen); + } + return msg; +} + +function createType3Message(msg2, options){ + var nonce = msg2.serverChallenge; + var username = options.username; + var password = options.password; + var lm_password = options.lm_password; + var nt_password = options.nt_password; + var negotiateFlags = msg2.negotiateFlags; + + var isUnicode = negotiateFlags & flags.NTLM_NegotiateUnicode; + var isNegotiateExtendedSecurity = negotiateFlags & flags.NTLM_NegotiateExtendedSecurity; + + var BODY_LENGTH = 72; + + var domainName = escape(options.domain.toUpperCase()); + var workstation = escape(options.workstation.toUpperCase()); + + var workstationBytes, domainNameBytes, usernameBytes, encryptedRandomSessionKeyBytes; + + var encryptedRandomSessionKey = ""; + if(isUnicode){ + workstationBytes = new Buffer(workstation, 'utf16le'); + domainNameBytes = new Buffer(domainName, 'utf16le'); + usernameBytes = new Buffer(username, 'utf16le'); + encryptedRandomSessionKeyBytes = new Buffer(encryptedRandomSessionKey, 'utf16le'); + }else{ + workstationBytes = new Buffer(workstation, 'ascii'); + domainNameBytes = new Buffer(domainName, 'ascii'); + usernameBytes = new Buffer(username, 'ascii'); + encryptedRandomSessionKeyBytes = new Buffer(encryptedRandomSessionKey, 'ascii'); + } + + var lmChallengeResponse = calc_resp((lm_password!=null)?lm_password:create_LM_hashed_password_v1(password), nonce); + var ntChallengeResponse = calc_resp((nt_password!=null)?nt_password:create_NT_hashed_password_v1(password), nonce); + + if(isNegotiateExtendedSecurity){ + var pwhash = (nt_password!=null)?nt_password:create_NT_hashed_password_v1(password); + var clientChallenge = ""; + for(var i=0; i < 8; i++){ + clientChallenge += String.fromCharCode( Math.floor(Math.random()*256) ); + } + var clientChallengeBytes = new Buffer(clientChallenge, 'ascii'); + var challenges = ntlm2sr_calc_resp(pwhash, nonce, clientChallengeBytes); + lmChallengeResponse = challenges.lmChallengeResponse; + ntChallengeResponse = challenges.ntChallengeResponse; + } + + var signature = 'NTLMSSP\0'; + + var pos = 0; + var buf = new Buffer(BODY_LENGTH + domainNameBytes.length + usernameBytes.length + workstationBytes.length + lmChallengeResponse.length + ntChallengeResponse.length + encryptedRandomSessionKeyBytes.length); + + buf.write(signature, pos, signature.length); pos += signature.length; + buf.writeUInt32LE(3, pos); pos += 4; // type 1 + + buf.writeUInt16LE(lmChallengeResponse.length, pos); pos += 2; // LmChallengeResponseLen + buf.writeUInt16LE(lmChallengeResponse.length, pos); pos += 2; // LmChallengeResponseMaxLen + buf.writeUInt32LE(BODY_LENGTH + domainNameBytes.length + usernameBytes.length + workstationBytes.length, pos); pos += 4; // LmChallengeResponseOffset + + buf.writeUInt16LE(ntChallengeResponse.length, pos); pos += 2; // NtChallengeResponseLen + buf.writeUInt16LE(ntChallengeResponse.length, pos); pos += 2; // NtChallengeResponseMaxLen + buf.writeUInt32LE(BODY_LENGTH + domainNameBytes.length + usernameBytes.length + workstationBytes.length + lmChallengeResponse.length, pos); pos += 4; // NtChallengeResponseOffset + + buf.writeUInt16LE(domainNameBytes.length, pos); pos += 2; // DomainNameLen + buf.writeUInt16LE(domainNameBytes.length, pos); pos += 2; // DomainNameMaxLen + buf.writeUInt32LE(BODY_LENGTH, pos); pos += 4; // DomainNameOffset + + buf.writeUInt16LE(usernameBytes.length, pos); pos += 2; // UserNameLen + buf.writeUInt16LE(usernameBytes.length, pos); pos += 2; // UserNameMaxLen + buf.writeUInt32LE(BODY_LENGTH + domainNameBytes.length, pos); pos += 4; // UserNameOffset + + buf.writeUInt16LE(workstationBytes.length, pos); pos += 2; // WorkstationLen + buf.writeUInt16LE(workstationBytes.length, pos); pos += 2; // WorkstationMaxLen + buf.writeUInt32LE(BODY_LENGTH + domainNameBytes.length + usernameBytes.length, pos); pos += 4; // WorkstationOffset + + buf.writeUInt16LE(encryptedRandomSessionKeyBytes.length, pos); pos += 2; // EncryptedRandomSessionKeyLen + buf.writeUInt16LE(encryptedRandomSessionKeyBytes.length, pos); pos += 2; // EncryptedRandomSessionKeyMaxLen + buf.writeUInt32LE(BODY_LENGTH + domainNameBytes.length + usernameBytes.length + workstationBytes.length + lmChallengeResponse.length + ntChallengeResponse.length, pos); pos += 4; // EncryptedRandomSessionKeyOffset + + buf.writeUInt32LE(typeflags.NTLM_TYPE2_FLAGS, pos); pos += 4; // NegotiateFlags + + buf.writeUInt8(5, pos); pos++; // ProductMajorVersion + buf.writeUInt8(1, pos); pos++; // ProductMinorVersion + buf.writeUInt16LE(2600, pos); pos += 2; // ProductBuild + buf.writeUInt8(0, pos); pos++; // VersionReserved1 + buf.writeUInt8(0, pos); pos++; // VersionReserved2 + buf.writeUInt8(0, pos); pos++; // VersionReserved3 + buf.writeUInt8(15, pos); pos++; // NTLMRevisionCurrent + + domainNameBytes.copy(buf, pos); pos += domainNameBytes.length; + usernameBytes.copy(buf, pos); pos += usernameBytes.length; + workstationBytes.copy(buf, pos); pos += workstationBytes.length; + lmChallengeResponse.copy(buf, pos); pos += lmChallengeResponse.length; + ntChallengeResponse.copy(buf, pos); pos += ntChallengeResponse.length; + encryptedRandomSessionKeyBytes.copy(buf, pos); pos += encryptedRandomSessionKeyBytes.length; + + return 'NTLM ' + buf.toString('base64'); +} + +function create_LM_hashed_password_v1(password){ + // fix the password length to 14 bytes + password = password.toUpperCase(); + var passwordBytes = new Buffer(password, 'ascii'); + + var passwordBytesPadded = new Buffer(14); + passwordBytesPadded.fill("\0"); + var sourceEnd = 14; + if(passwordBytes.length < 14) sourceEnd = passwordBytes.length; + passwordBytes.copy(passwordBytesPadded, 0, 0, sourceEnd); + + // split into 2 parts of 7 bytes: + var firstPart = passwordBytesPadded.slice(0,7); + var secondPart = passwordBytesPadded.slice(7); + + function encrypt(buf){ + var key = insertZerosEvery7Bits(buf); + var des = crypto.createCipheriv('DES-ECB', key, ''); + return des.update("KGS!@#$%"); // page 57 in [MS-NLMP]); + } + + var firstPartEncrypted = encrypt(firstPart); + var secondPartEncrypted = encrypt(secondPart); + + return Buffer.concat([firstPartEncrypted, secondPartEncrypted]); +} + +function insertZerosEvery7Bits(buf){ + var binaryArray = bytes2binaryArray(buf); + var newBinaryArray = []; + for(var i=0; i array.length) + break; + + var binString1 = '' + array[i] + '' + array[i+1] + '' + array[i+2] + '' + array[i+3]; + var binString2 = '' + array[i+4] + '' + array[i+5] + '' + array[i+6] + '' + array[i+7]; + var hexchar1 = binary2hex[binString1]; + var hexchar2 = binary2hex[binString2]; + + var buf = new Buffer(hexchar1 + '' + hexchar2, 'hex'); + bufArray.push(buf); + } + + return Buffer.concat(bufArray); +} + +function create_NT_hashed_password_v1(password){ + var buf = new Buffer(password, 'utf16le'); + var md4 = crypto.createHash('md4'); + md4.update(buf); + return new Buffer(md4.digest()); +} + +function calc_resp(password_hash, server_challenge){ + // padding with zeros to make the hash 21 bytes long + var passHashPadded = new Buffer(21); + passHashPadded.fill("\0"); + password_hash.copy(passHashPadded, 0, 0, password_hash.length); + + var resArray = []; + + var des = crypto.createCipheriv('DES-ECB', insertZerosEvery7Bits(passHashPadded.slice(0,7)), ''); + resArray.push( des.update(server_challenge.slice(0,8)) ); + + des = crypto.createCipheriv('DES-ECB', insertZerosEvery7Bits(passHashPadded.slice(7,14)), ''); + resArray.push( des.update(server_challenge.slice(0,8)) ); + + des = crypto.createCipheriv('DES-ECB', insertZerosEvery7Bits(passHashPadded.slice(14,21)), ''); + resArray.push( des.update(server_challenge.slice(0,8)) ); + + return Buffer.concat(resArray); +} + +function ntlm2sr_calc_resp(responseKeyNT, serverChallenge, clientChallenge){ + // padding with zeros to make the hash 16 bytes longer + var lmChallengeResponse = new Buffer(clientChallenge.length + 16); + lmChallengeResponse.fill("\0"); + clientChallenge.copy(lmChallengeResponse, 0, 0, clientChallenge.length); + + var buf = Buffer.concat([serverChallenge, clientChallenge]); + var md5 = crypto.createHash('md5'); + md5.update(buf); + var sess = md5.digest(); + var ntChallengeResponse = calc_resp(responseKeyNT, sess.slice(0,8)); + + return { + lmChallengeResponse: lmChallengeResponse, + ntChallengeResponse: ntChallengeResponse + }; +} + +exports.createType1Message = createType1Message; +exports.parseType2Message = parseType2Message; +exports.createType3Message = createType3Message; +exports.create_NT_hashed_password = create_NT_hashed_password_v1; +exports.create_LM_hashed_password = create_LM_hashed_password_v1; + + + + diff --git a/node_modules/httpntlm/package.json b/node_modules/httpntlm/package.json new file mode 100644 index 00000000..21eeeb2b --- /dev/null +++ b/node_modules/httpntlm/package.json @@ -0,0 +1,59 @@ +{ + "_from": "httpntlm@^1.7.6", + "_id": "httpntlm@1.7.6", + "_inBundle": false, + "_integrity": "sha1-aZHoNSg2AH1nEBuD247Q+RX5BtA=", + "_location": "/httpntlm", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "httpntlm@^1.7.6", + "name": "httpntlm", + "escapedName": "httpntlm", + "rawSpec": "^1.7.6", + "saveSpec": null, + "fetchSpec": "^1.7.6" + }, + "_requiredBy": [ + "/strong-soap" + ], + "_resolved": "https://registry.npmjs.org/httpntlm/-/httpntlm-1.7.6.tgz", + "_shasum": "6991e8352836007d67101b83db8ed0f915f906d0", + "_spec": "httpntlm@^1.7.6", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/strong-soap", + "author": { + "name": "Sam Decrock", + "url": "https://github.com/SamDecrock/" + }, + "bugs": { + "url": "https://github.com/SamDecrock/node-http-ntlm/issues" + }, + "bundleDependencies": false, + "dependencies": { + "httpreq": ">=0.4.22", + "underscore": "~1.7.0" + }, + "deprecated": false, + "description": "httpntlm is a Node.js library to do HTTP NTLM authentication", + "engines": { + "node": ">=0.8.0" + }, + "homepage": "https://github.com/SamDecrock/node-http-ntlm#readme", + "licenses": [ + { + "type": "MIT", + "url": "http://www.opensource.org/licenses/mit-license.php" + } + ], + "main": "./httpntlm", + "name": "httpntlm", + "repository": { + "type": "git", + "url": "git://github.com/SamDecrock/node-http-ntlm.git" + }, + "scripts": { + "jshint": "jshint *.js" + }, + "version": "1.7.6" +} diff --git a/node_modules/httpreq/.eslintrc b/node_modules/httpreq/.eslintrc new file mode 100644 index 00000000..4bc61d6d --- /dev/null +++ b/node_modules/httpreq/.eslintrc @@ -0,0 +1,155 @@ +{ + "ecmaFeatures": { + "modules": true + }, + + "env": { + "node": true + }, + + "rules": { + "array-bracket-spacing": [2, "never"], + "brace-style": [2, "1tbs", { + "allowSingleLine": true + }], + "camelcase": [2, { + "properties": "never" + }], + "comma-spacing": [2, { + "before": false, + "after": true + }], + "comma-style": [2, "last"], + "comma-dangle": [2, "never"], + "complexity": [1, 8], + "computed-property-spacing": [2, "never"], + "consistent-return": 1, + "curly": [2, "all"], + "default-case": 2, + "dot-notation": [1, { + "allowKeywords": true + }], + "dot-location": [2, "property"], + "eol-last": 2, + "eqeqeq": 2, + "func-style": 0, + "guard-for-in": 0, + "handle-callback-err": [2, "^(e|er|err|error)[0-9]{1,2}?$"], + "indent": [2, 2, { + "SwitchCase": 1 + }], + "keyword-spacing": 2, + "key-spacing": [2, { + "beforeColon": false, + "afterColon": true + }], + "lines-around-comment": [2, { + "beforeBlockComment": true, + "afterBlockComment": true, + "beforeLineComment": true, + "afterLineComment": false, + "allowBlockStart": true, + "allowBlockEnd": false + }], + "linebreak-style": [2, "unix"], + "max-nested-callbacks": [1, 3], + "new-cap": 0, + "newline-after-var": [2, "always"], + "no-alert": 2, + "no-caller": 2, + "no-catch-shadow": 2, + "no-delete-var": 2, + "no-div-regex": 2, + "no-duplicate-case": 2, + "no-else-return": 2, + "no-empty": 2, + "no-empty-character-class": 2, + "no-eval": 2, + "no-extend-native": 2, + "no-extra-semi": 2, + "no-fallthrough": 2, + "no-floating-decimal": 2, + "no-func-assign": 2, + "no-implied-eval": 2, + "no-inline-comments": 1, + "no-invalid-regexp": 2, + "no-label-var": 2, + "no-labels": 2, + "no-lone-blocks": 2, + "no-lonely-if": 2, + "no-mixed-requires": 0, + "no-mixed-spaces-and-tabs": 2, + "no-multi-spaces": 2, + "no-multi-str": 2, + "no-multiple-empty-lines": [2, { + "max": 2 + }], + "no-native-reassign": 2, + "no-nested-ternary": 2, + "no-new-func": 2, + "no-new-object": 2, + "no-new-wrappers": 2, + "no-octal-escape": 2, + "no-octal": 2, + "no-path-concat": 2, + "no-param-reassign": 0, + "no-process-env": 0, + "no-proto": 2, + "no-redeclare": 2, + "no-reserved-keys": 0, + "no-return-assign": [2, "always"], + "no-self-compare": 2, + "no-sequences": 2, + "no-shadow": 2, + "no-shadow-restricted-names": 2, + "no-spaced-func": 0, + "no-sparse-arrays": 1, + "no-sync": 1, + "no-ternary": 0, + "no-throw-literal": 2, + "no-trailing-spaces": 2, + "no-undef": 2, + "no-undef-init": 2, + "no-undefined": 1, + "no-underscore-dangle": 2, + "no-unexpected-multiline": 2, + "no-unneeded-ternary": 2, + "no-unreachable": 2, + "no-unused-vars": 1, + "no-use-before-define": 2, + "no-useless-concat": 2, + "no-warning-comments": 1, + "no-with": 2, + "no-wrap-func": 0, + "object-curly-spacing": [2, "always", { + "objectsInObjects": false, + "arraysInObjects": false + }], + "one-var": [2, "never"], + "operator-assignment": [2, "always"], + "operator-linebreak": [2, "before"], + "padded-blocks": [2, "never"], + "quote-props": [2, "consistent"], + "quotes": [2, "single", "avoid-escape"], + "radix": 2, + "semi": 2, + "semi-spacing": [2, { + "before": false, + "after": true + }], + "space-before-blocks": [2, "always"], + "space-before-function-paren": [2, "always"], + "space-in-parens": [2, "never"], + "space-infix-ops": 2, + "space-unary-ops": [2, { + "words": true, + "nonwords": false + }], + "spaced-comment": [2, "always"], + "use-isnan": 2, + "valid-typeof": 2, + "vars-on-top": 2, + "wrap-regex": 0, + "yoda": [2, "never"] + } +} diff --git a/node_modules/httpreq/.npmignore b/node_modules/httpreq/.npmignore new file mode 100644 index 00000000..f5f493b8 --- /dev/null +++ b/node_modules/httpreq/.npmignore @@ -0,0 +1,17 @@ +lib-cov +*.seed +*.log +*.csv +*.dat +*.out +*.pid +*.gz + +pids +logs +results + +node_modules + +npm-debug.log +.DS_Store \ No newline at end of file diff --git a/node_modules/httpreq/LICENSE b/node_modules/httpreq/LICENSE new file mode 100644 index 00000000..2e450531 --- /dev/null +++ b/node_modules/httpreq/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2017 Sam Decrock + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/httpreq/README.md b/node_modules/httpreq/README.md new file mode 100644 index 00000000..c8108f64 --- /dev/null +++ b/node_modules/httpreq/README.md @@ -0,0 +1,325 @@ +node-httpreq +============ + +node-httpreq is a node.js library to do HTTP(S) requests the easy way + +Do GET, POST, PUT, PATCH, DELETE, OPTIONS, upload files, use cookies, change headers, ... + +## Install + +You can install __httpreq__ using the Node Package Manager (npm): + + npm install httpreq + +## Simple example +```js +var httpreq = require('httpreq'); + +httpreq.get('http://www.google.com', function (err, res){ + if (err) return console.log(err); + + console.log(res.statusCode); + console.log(res.headers); + console.log(res.body); + console.log(res.cookies); +}); +``` + +## How to use + +* [httpreq.get(url, [options], callback)](#get) +* [httpreq.post(url, [options], callback)](#post) +* [httpreq.put(url, [options], callback)](#put) +* [httpreq.delete(url, [options], callback)](#delete) +* [httpreq.options(url, [options], callback)](#options) +* [Uploading files](#upload) +* [Downloading a binary file](#binary) +* [Downloading a file directly to disk](#download) +* [Sending a custom body](#custombody) +* [Using a http(s) proxy](#proxy) +* [httpreq.doRequest(options, callback)](#dorequest) + +--------------------------------------- +### httpreq.get(url, [options], callback) + + +__Arguments__ + - url: The url to connect to. Can be http or https. + - options: (all are optional) The following options can be passed: + - parameters: an object of query parameters + - headers: an object of headers + - cookies: an array of cookies + - auth: a string for basic authentication. For example `username:password` + - binary: true/false (default: false), if true, res.body will a buffer containing the binary data + - allowRedirects: (default: __true__ , only with httpreq.get() ), if true, redirects will be followed + - maxRedirects: (default: __10__ ). For example 1 redirect will allow for one normal request and 1 extra redirected request. + - timeout: (default: __none__ ). Adds a timeout to the http(s) request. Should be in milliseconds. + - proxy, if you want to pass your request through a http(s) proxy server: + - host: eg: "192.168.0.1" + - port: eg: 8888 + - protocol: (default: __'http'__ ) can be 'http' or 'https' + - rejectUnauthorized: validate certificate for request with HTTPS. [More here](http://nodejs.org/api/https.html#https_https_request_options_callback) + - callback(err, res): A callback function which is called when the request is complete. __res__ contains the headers ( __res.headers__ ), the http status code ( __res.statusCode__ ) and the body ( __res.body__ ) + +__Example without options__ + +```js +var httpreq = require('httpreq'); + +httpreq.get('http://www.google.com', function (err, res){ + if (err) return console.log(err); + + console.log(res.statusCode); + console.log(res.headers); + console.log(res.body); +}); +``` + +__Example with options__ + +```js +var httpreq = require('httpreq'); + +httpreq.get('http://posttestserver.com/post.php', { + parameters: { + name: 'John', + lastname: 'Doe' + }, + headers:{ + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:18.0) Gecko/20100101 Firefox/18.0' + }, + cookies: [ + 'token=DGcGUmplWQSjfqEvmu%2BZA%2Fc', + 'id=2' + ] +}, function (err, res){ + if (err){ + console.log(err); + }else{ + console.log(res.body); + } +}); +``` +--------------------------------------- +### httpreq.post(url, [options], callback) + + +__Arguments__ + - url: The url to connect to. Can be http or https. + - options: (all are optional) The following options can be passed: + - parameters: an object of post parameters (content-type is set to *application/x-www-form-urlencoded; charset=UTF-8*) + - json: if you want to send json directly (content-type is set to *application/json*) + - files: an object of files to upload (content-type is set to *multipart/form-data; boundary=xxx*) + - body: custom body content you want to send. If used, previous options will be ignored and your custom body will be sent. (content-type will not be set) + - headers: an object of headers + - cookies: an array of cookies + - auth: a string for basic authentication. For example `username:password` + - binary: true/false (default: __false__ ), if true, res.body will be a buffer containing the binary data + - allowRedirects: (default: __false__ ), if true, redirects will be followed + - maxRedirects: (default: __10__ ). For example 1 redirect will allow for one normal request and 1 extra redirected request. + - encodePostParameters: (default: __true__ ), if true, POST/PUT parameters names will be URL encoded. + - timeout: (default: none). Adds a timeout to the http(s) request. Should be in milliseconds. + - proxy, if you want to pass your request through a http(s) proxy server: + - host: eg: "192.168.0.1" + - port: eg: 8888 + - protocol: (default: __'http'__ ) can be 'http' or 'https' + - rejectUnauthorized: validate certificate for request with HTTPS. [More here](http://nodejs.org/api/https.html#https_https_request_options_callback) + - callback(err, res): A callback function which is called when the request is complete. __res__ contains the headers ( __res.headers__ ), the http status code ( __res.statusCode__ ) and the body ( __res.body__ ) + +__Example without extra options__ + +```js +var httpreq = require('httpreq'); + +httpreq.post('http://posttestserver.com/post.php', { + parameters: { + name: 'John', + lastname: 'Doe' + } +}, function (err, res){ + if (err){ + console.log(err); + }else{ + console.log(res.body); + } +}); +``` + +__Example with options__ + +```js +var httpreq = require('httpreq'); + +httpreq.post('http://posttestserver.com/post.php', { + parameters: { + name: 'John', + lastname: 'Doe' + }, + headers:{ + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:18.0) Gecko/20100101 Firefox/18.0' + }, + cookies: [ + 'token=DGcGUmplWQSjfqEvmu%2BZA%2Fc', + 'id=2' + ] +}, function (err, res){ + if (err){ + console.log(err); + }else{ + console.log(res.body); + } +}); +``` + +--------------------------------------- +### httpreq.put(url, [options], callback) + + +Same options as [httpreq.post(url, [options], callback)](#post) + +--------------------------------------- + +### httpreq.delete(url, [options], callback) + +Same options as [httpreq.post(url, [options], callback)](#post) + +--------------------------------------- + +### httpreq.options(url, [options], callback) + +Same options as [httpreq.get(url, [options], callback)](#get) except for the ability to follow redirects. + +--------------------------------------- + +### Uploading files + +You can still use ```httpreq.uploadFiles({url: 'url', files: {}}, callback)```, but it's easier to just use POST (or PUT): + +__Example__ + +```js +var httpreq = require('httpreq'); + +httpreq.post('http://posttestserver.com/upload.php', { + parameters: { + name: 'John', + lastname: 'Doe' + }, + files:{ + myfile: __dirname + "/testupload.jpg", + myotherfile: __dirname + "/testupload.jpg" + } +}, function (err, res){ + if (err) throw err; +}); +``` + +--------------------------------------- + +### Downloading a binary file +To download a binary file, just add __binary: true__ to the options when doing a get or a post. + +__Example__ + +```js +var httpreq = require('httpreq'); + +httpreq.get('https://ssl.gstatic.com/gb/images/k1_a31af7ac.png', {binary: true}, function (err, res){ + if (err){ + console.log(err); + }else{ + fs.writeFile(__dirname + '/test.png', res.body, function (err) { + if(err) + console.log("error writing file"); + }); + } +}); +``` + +--------------------------------------- + +### Downloading a file directly to disk +To download a file directly to disk, use the download method provided. + +Downloading is done using a stream, so the data is not stored in memory and directly saved to file. + +__Example__ + +```js +var httpreq = require('httpreq'); + +httpreq.download( + 'https://ssl.gstatic.com/gb/images/k1_a31af7ac.png', + __dirname + '/test.png' +, function (err, progress){ + if (err) return console.log(err); + console.log(progress); +}, function (err, res){ + if (err) return console.log(err); + console.log(res); +}); + +``` +--------------------------------------- + +### Sending a custom body +Use the body option to send a custom body (eg. an xml post) + +__Example__ + +```js +var httpreq = require('httpreq'); + +httpreq.post('http://posttestserver.com/post.php',{ + body: '', + headers:{ + 'Content-Type': 'text/xml', + }}, + function (err, res) { + if (err){ + console.log(err); + }else{ + console.log(res.body); + } + } +); +``` + +--------------------------------------- + +### Using a http(s) proxy + +__Example__ + +```js +var httpreq = require('httpreq'); + +httpreq.post('http://posttestserver.com/post.php', { + proxy: { + host: '10.100.0.126', + port: 8888 + } +}, function (err, res){ + if (err){ + console.log(err); + }else{ + console.log(res.body); + } +}); +``` + +--------------------------------------- +### httpreq.doRequest(options, callback) + + +httpreq.doRequest is internally used by httpreq.get() and httpreq.post(). You can use this directly. Everything is stays the same as httpreq.get() or httpreq.post() except that the following options MUST be passed: +- url: the url to post the files to +- method: 'GET', 'POST', 'PUT' or 'DELETE' + +## Donate + +If you like this module or you want me to update it faster, feel free to donate. It helps increasing my dedication to fixing bugs :-) + +[![](https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=AB3R2SUL53K7S) + + diff --git a/node_modules/httpreq/contributors.md b/node_modules/httpreq/contributors.md new file mode 100644 index 00000000..5b2775bf --- /dev/null +++ b/node_modules/httpreq/contributors.md @@ -0,0 +1,26 @@ +###### Contributors +[Sam](https://github.com/SamDecrock) +63 Commits / 2309++ / 1040-- +81.82% ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

+[Franklin van de Meent](https://github.com/fvdm) +8 Commits / 51++ / 16-- +10.39% ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

+[Russell Beattie](https://github.com/russellbeattie) +1 Commits / 55++ / 3-- +01.30% ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

+[Jason Prickett MSFT](https://github.com/jpricketMSFT) +1 Commits / 5++ / 0-- +01.30% ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

+[null](https://github.com/jjharriso) +1 Commits / 12++ / 0-- +01.30% ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

+[MJJ](https://github.com/mjj2000) +1 Commits / 11++ / 1-- +01.30% ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

+[Jeff Young](https://github.com/jeffyoung) +1 Commits / 19++ / 1-- +01.30% ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

+[Dave Preston](https://github.com/davepreston) +1 Commits / 5++ / 0-- +01.30% ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

+###### [Generated](https://github.com/jakeleboeuf/contributor) on Mon May 02 2016 11:08:45 GMT+0200 (CEST) \ No newline at end of file diff --git a/node_modules/httpreq/examples.js b/node_modules/httpreq/examples.js new file mode 100644 index 00000000..5ee1f080 --- /dev/null +++ b/node_modules/httpreq/examples.js @@ -0,0 +1,214 @@ +var httpreq = require('./lib/httpreq'); +fs = require('fs') + + +// example1(); // get www.google.com +// example2(); // do some post +// example3(); // same as above + extra headers + cookies +// example4(); // https also works: +// example5(); // uploading some file: +// example6(); // u can use doRequest instead of .get or .post +// example7(); // download a binary file: +// example8(); // send json +// example9(); // send your own body content (eg. xml) +// example10(); // set max redirects: +// example11(); // set timeout +// example12(); // // download file directly to disk + + +// get www.google.com +function example1(){ + httpreq.get('http://www.google.com', function (err, res){ + if (err){ + console.log(err); + }else{ + console.log(res.headers); //headers are stored in res.headers + console.log(res.body); //content of the body is stored in res.body + } + }); +} + +// do some post +function example2(){ + httpreq.post('http://posttestserver.com/post.php', { + parameters: { + name: 'John', + lastname: 'Doe' + } + }, function (err, res){ + if (err){ + console.log(err); + }else{ + console.log(res.body); + } + }); +} + +// same as above + extra headers + cookies +function example3(){ + httpreq.post('http://posttestserver.com/post.php', { + parameters: { + name: 'John', + lastname: 'Doe' + }, + headers:{ + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:18.0) Gecko/20100101 Firefox/18.0' + }, + cookies: [ + 'token=DGcGUmplWQSjfqEvmu%2BZA%2Fc', + 'id=2' + ] + }, function (err, res){ + if (err){ + console.log(err); + }else{ + console.log(res.body); + } + }); +} + +// https also works: +function example4(){ + httpreq.get('https://graph.facebook.com/19292868552', function (err, res){ + if (err){ + console.log(err); + }else{ + console.log(JSON.parse(res.body)); + } + }); +} + +// uploading some file: +function example5(){ + httpreq.uploadFiles({ + url: "http://rekognition.com/demo/do_upload/", + parameters:{ + name_space : 'something', + }, + files:{ + fileToUpload: __dirname + "/test/testupload.jpg" + }}, + function (err, res){ + if (err) return console.log(err); + console.log(res.body); + }); +} + +// u can use doRequest instead of .get or .post +function example6(){ + httpreq.doRequest({ + url: 'https://graph.facebook.com/19292868552', + method: 'GET', + parameters: { + name: 'test' + } + }, + function (err, res){ + if (err){ + console.log(err); + }else{ + console.log(JSON.parse(res.body)); + } + }); +} + +// download a binary file: +function example7(){ + httpreq.get('https://ssl.gstatic.com/gb/images/k1_a31af7ac.png', { + binary: true, + progressCallback: function (err, progress) { + console.log(progress); + } + }, + function (err, res){ + if (err){ + console.log(err); + }else{ + fs.writeFile(__dirname + '/test.png', res.body, function (err) { + if(err) return console.log("error writing file"); + }); + } + }); +} + +// send json +function example8(){ + httpreq.post('http://posttestserver.com/post.php',{ + json: {name: 'John', lastname: 'Do'}, + headers:{ + 'Content-Type': 'text/xml', + }}, + function (err, res) { + if (err){ + console.log(err); + }else{ + console.log(res.body); + } + } + ); +} + +// send your own body content (eg. xml): +function example9(){ + httpreq.post('http://posttestserver.com/post.php',{ + body: '', + headers:{ + 'Content-Type': 'text/xml', + }}, + function (err, res) { + if (err){ + console.log(err); + }else{ + console.log(res.body); + } + } + ); +} + +// set max redirects: +function example10(){ + httpreq.get('http://scobleizer.com/feed/',{ + maxRedirects: 2, // default is 10 + headers:{ + 'User-Agent': 'Magnet', //for some reason causes endless redirects on this site... + }}, + function (err, res) { + if (err){ + console.log(err); + }else{ + console.log(res.body); + } + } + ); +} + +// set timeout +function example11(){ + httpreq.get('http://localhost:3000/',{ + timeout: (5 * 1000) // timeout in milliseconds + }, + function (err, res) { + if (err){ + console.log(err); + }else{ + console.log(res.body); + } + } + ); +} + +// download file directly to disk: +function example12 () { + httpreq.download( + 'https://ssl.gstatic.com/gb/images/k1_a31af7ac.png', + __dirname + '/test.png' + , function (err, progress){ + if (err) return console.log(err); + console.log(progress); + }, function (err, res){ + if (err) return console.log(err); + console.log(res); + }); +} + + diff --git a/node_modules/httpreq/lib/httpreq.js b/node_modules/httpreq/lib/httpreq.js new file mode 100644 index 00000000..ad586092 --- /dev/null +++ b/node_modules/httpreq/lib/httpreq.js @@ -0,0 +1,621 @@ +/* +Copyright (c) 2013 Sam Decrock + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +var querystring = require ('querystring'); +var https = require ('https'); +var http = require ('http'); +var url = require ('url'); +var fs = require ('fs'); + + +/** + * Generate multipart boundary + * + * @returns {string} + */ + +function generateBoundary () { + var boundary = '---------------------------'; + var charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; + + for (var i = 0; i < 29; i++) { + boundary += charset.charAt (Math.floor (Math.random () * charset.length)); + } + + return boundary; +} + + +/** + * Extract cookies from headers + * + * @param headers {object} - Response headers + * @returns {array} - Extracted cookie strings + */ + +function extractCookies (headers) { + var rawcookies = headers['set-cookie']; + + if (!rawcookies) { + return []; + } + + if (rawcookies == []) { + return []; + } + + var cookies = []; + for (var i = 0; i < rawcookies.length; i++) { + var rawcookie = rawcookies[i].split (';'); + if (rawcookie[0]) { + cookies.push (rawcookie[0]); + } + } + return cookies; +} + + +/** + * Custom HTTP request + * + * @callback callback + * @param o {object} - Request options + * @param callback [function] - Process response + * @returns {void} + */ + +function doRequest (o, callback) { + if (!callback) { + callback = function (err) {}; // dummy function + } + + // prevent multiple callbacks + var finalCallbackDone = false; + function finalCallback (err, res) { + if (!finalCallbackDone) { + finalCallbackDone = true; + callback (err, res); + } + } + + if (o.maxRedirects === undefined) { + o.maxRedirects = 10; + } + + if (o.encodePostParameters === undefined) { + o.encodePostParameters = true; + } + + var chunks = []; + var body; // Buffer + var contentType; + + var port; + var host; + var path; + var isHttps = false; + + if (o.proxy) { + port = o.proxy.port; + host = o.proxy.host; + path = o.url; // complete url + + if (o.proxy.protocol && o.proxy.protocol.match (/https/)) { + isHttps = true; + } + } else { + var reqUrl = url.parse (o.url); + host = reqUrl.hostname; + path = reqUrl.path; + + if (reqUrl.protocol === 'https:') { + isHttps = true; + } + + if (reqUrl.port) { + port = reqUrl.port; + } else if (isHttps) { + port = 443; + } else { + port = 80; + } + } + + if (o.files && o.files.length > 0 && o.method === 'GET') { + var err = new Error ('Can\'t send files using GET'); + err.code = 'CANT_SEND_FILES_USING_GET'; + return finalCallback (err); + } + + if (o.parameters) { + if (o.method === 'GET') { + path += '?' + querystring.stringify (o.parameters); + } else { + body = new Buffer (querystring.stringify (o.parameters), 'utf8'); + contentType = 'application/x-www-form-urlencoded; charset=UTF-8'; + } + } + + if (o.json) { + body = new Buffer (JSON.stringify (o.json), 'utf8'); + contentType = 'application/json'; + } + + if (o.files) { + var crlf = '\r\n'; + var boundary = generateBoundary (); + var separator = '--' + boundary; + var bodyArray = new Array (); // temporary body array + + // if the user wants to POST/PUT files, other parameters need to be encoded using 'Content-Disposition' + for (var key in o.parameters) { + // According to RFC 2388 (https://www.ietf.org/rfc/rfc2388.txt) + // "Field names originally in non-ASCII character sets MAY be encoded + // within the value of the "name" parameter using the standard method + // described in RFC 2047." + // -- encodePostParameters -- true by default and MAY be changed by the user + var headerKey = o.encodePostParameters ? encodeURIComponent (key) : key; + var encodedParameter = separator + crlf + + 'Content-Disposition: form-data; name="' + headerKey + '"' + crlf + + crlf + + o.parameters[key] + crlf; + bodyArray.push (new Buffer (encodedParameter)); + } + + // now for the files: + var haveAlreadyAddedAFile = false; + + for (var file in o.files) { + var filepath = o.files[file]; + var filename = filepath.replace (/\\/g, '/').replace (/.*\//, ''); + + var encodedFile = separator + crlf + + 'Content-Disposition: form-data; name="' + file + '"; filename="' + filename + '"' + crlf + + 'Content-Type: application/octet-stream' + crlf + + crlf; + + // add crlf before separator if we have already added a file + if (haveAlreadyAddedAFile) { + encodedFile = crlf + encodedFile; + } + + bodyArray.push (new Buffer (encodedFile)); + + // add binary file: + bodyArray.push (require ('fs').readFileSync (filepath)); + + haveAlreadyAddedAFile = true; + } + + var footer = crlf + separator + '--' + crlf; + bodyArray.push (new Buffer (footer)); + + // set body and contentType: + body = Buffer.concat (bodyArray); + contentType = 'multipart/form-data; boundary=' + boundary; + } + + // overwrites the body if the user passes a body: + // clears the content-type + if (o.body) { + body = new Buffer (o.body, 'utf8'); + contentType = null; + } + + + var requestoptions = { + host: host, + port: port, + path: path, + method: o.method, + headers: {} + }; + + if (!o.redirectCount) { + o.redirectCount = 0; + } + + if (body) { + requestoptions.headers['Content-Length'] = body.length; + } + + if (contentType) { + requestoptions.headers['Content-Type'] = contentType; + } + + if (o.cookies) { + requestoptions.headers.Cookie = o.cookies.join ('; '); + } + + if (o.rejectUnauthorized !== undefined && isHttps) { + requestoptions.rejectUnauthorized = o.rejectUnauthorized; + } + + if (isHttps && o.key) { + requestoptions.key = o.key; + } + + if (isHttps && o.cert) { + requestoptions.cert = o.cert; + } + + if (isHttps && o.secureProtocol) { + requestoptions.secureProtocol = o.secureProtocol; + } + + if (isHttps && o.ciphers) { + requestoptions.ciphers = o.ciphers; + } + + if (isHttps && o.passphrase) { + requestoptions.passphrase = o.passphrase; + } + + if (isHttps && o.pfx) { + requestoptions.pfx = o.pfx; + } + + if (isHttps && o.ca) { + requestoptions.ca = o.ca; + } + + // add custom headers: + if (o.headers) { + for (var headerkey in o.headers) { + requestoptions.headers[headerkey] = o.headers[headerkey]; + } + } + + if (o.agent) { + requestoptions.agent = o.agent; + } + + if (o.auth) { + requestoptions.auth = o.auth; + } + + if (o.localAddress) { + requestoptions.localAddress = o.localAddress; + } + + if (o.secureOptions) { + requestoptions.secureOptions = o.secureOptions; + } + + + /** + * Process request response + * + * @param res {object} - Response details + * @returns {void} + */ + + function requestResponse (res) { + var ended = false; + var currentsize = 0; + + var downloadstream = null; + if (o.downloadlocation) { + downloadstream = fs.createWriteStream (o.downloadlocation); + } + + res.on ('data', function (chunk) { + if (o.downloadlocation) { + downloadstream.write (chunk); //write it to disk, not to memory + } else { + chunks.push (chunk); + } + + if (o.progressCallback) { + var totalsize = res.headers['content-length']; + if (totalsize) { + currentsize += chunk.length; + + o.progressCallback (null, { + url: o.url, + totalsize: totalsize, + currentsize: currentsize, + percentage: currentsize * 100 / totalsize + }); + } else { + o.progressCallback (new Error ('no content-length specified for file, so no progress monitoring possible')); + } + } + }); + + res.on ('end', function (err) { + ended = true; + + // check for redirects + if (res.headers.location && o.allowRedirects) { + // Close any open file + if (o.downloadlocation) { + downloadstream.end (); + } + + if (o.redirectCount < o.maxRedirects) { + o.redirectCount++; + o.url = res.headers.location; + o.cookies = extractCookies (res.headers); + return doRequest (o, finalCallback); + } else { + var err = new Error ('Too many redirects (> ' + o.maxRedirects + ')'); + err.code = 'TOOMANYREDIRECTS'; + err.redirects = o.maxRedirects; + return finalCallback (err); + } + } + + if (!o.downloadlocation) { + var responsebody = Buffer.concat (chunks); + if (!o.binary) { + responsebody = responsebody.toString ('utf8'); + } + + finalCallback (null, { + headers: res.headers, + statusCode: res.statusCode, + body: responsebody, + cookies: extractCookies (res.headers) + }); + } else { + downloadstream.end (null, null, function () { + finalCallback (null, { + headers: res.headers, + statusCode: res.statusCode, + downloadlocation: o.downloadlocation, + cookies: extractCookies (res.headers) + }); + }); + } + }); + + res.on ('close', function () { + if (!ended) { + finalCallback (new Error ('Request aborted')); + } + }); + } + + var request; + + // remove headers with undefined keys or values + // else we get an error in Node 0.12.0 about "setHeader ()" + for (var headerName in requestoptions.headers) { + var headerValue = requestoptions.headers[headerName]; + if (!headerName || !headerValue) { + delete requestoptions.headers[headerName]; + } + } + + if (isHttps) { + request = https.request (requestoptions, requestResponse); + } else { + request = http.request (requestoptions, requestResponse); + } + + if (o.timeout) { + request.setTimeout (parseInt (o.timeout, 10), function () { + var err = new Error ('request timed out'); + err.code = 'TIMEOUT'; + finalCallback (err); + request.abort (); + }); + } + + request.on ('error', function (err) { + finalCallback (err); + }); + + if (body) { + request.write (body); + } + + request.end (); +} + +exports.doRequest = doRequest; + + +/** + * HTTP GET method + * + * @callback callback + * @param url {string} - Request URL + * @param [options] {object} - Request options + * @param callback [function] - Process response + * @returns {void} + */ + +exports.get = function (url, options, callback) { + if (callback === undefined && options && typeof options === 'function') { + callback = options; + } + + var moreOptions = options; + moreOptions.url = url; + moreOptions.method = 'GET'; + + if (moreOptions.allowRedirects === undefined) { + moreOptions.allowRedirects = true; + } + + doRequest (moreOptions, callback); +}; + + +/** + * HTTP OPTIONS method + * + * @callback callback + * @param url {string} - Request URL + * @param [options] {object} - Request options + * @param callback [function] - Process response + * @returns {void} + */ + +exports.options = function (url, options, callback) { + if (callback === undefined && options && typeof options === 'function') { + callback = options; + } + + var moreOptions = options; + moreOptions.url = url; + moreOptions.method = 'OPTIONS'; + doRequest (moreOptions, callback); +}; + + +/** + * HTTP POST method + * + * @callback callback + * @param url {string} - Request URL + * @param [options] {object} - Request options + * @param callback [function] - Process response + * @returns {void} + */ + +exports.post = function (url, options, callback) { + if (callback === undefined && options && typeof options === 'function') { + callback = options; + } + + var moreOptions = options; + moreOptions.url = url; + moreOptions.method = 'POST'; + doRequest (moreOptions, callback); +}; + + +/** + * HTTP PUT method + * + * @callback callback + * @param url {string} - Request URL + * @param [options] {object} - Request options + * @param callback [function] - Process response + * @returns {void} + */ + +exports.put = function (url, options, callback) { + if (callback === undefined && options && typeof options === 'function') { + callback = options; + } + + var moreOptions = options; + moreOptions.url = url; + moreOptions.method = 'PUT'; + doRequest (moreOptions, callback); +}; + + +/** + * HTTP PATCH method + * + * @callback callback + * @param url {string} - Request URL + * @param [options] {object} - Request options + * @param callback [function] - Process response + * @returns {void} + */ + +exports.patch = function (url, options, callback) { + if (callback === undefined && options && typeof options === 'function') { + callback = options; + } + + var moreOptions = options; + moreOptions.url = url; + moreOptions.method = 'PATCH'; + doRequest (moreOptions, callback); +}; + + +/** + * HTTP DELETE method + * + * @callback callback + * @param url {string} - Request URL + * @param [options] {object} - Request options + * @param callback [function] - Process response + * @returns {void} + */ + +exports.delete = function (url, options, callback) { + if (callback === undefined && options && typeof options === 'function') { + callback = options; + } + + var moreOptions = options; + moreOptions.url = url; + moreOptions.method = 'DELETE'; + doRequest (moreOptions, callback); +}; + + +/** + * Download a file + * + * @callback callback + * @param url {string} - Request URL + * @param downloadlocation {string} - Path where to store file + * @param [progressCallback] {function} - Called multiple times during download + * @param callback {function} - Called once when download ends + * @returns {void} + */ + +exports.download = function (url, downloadlocation, progressCallback, callback) { + var options = {}; + options.url = url; + options.method = 'GET'; + options.downloadlocation = downloadlocation; + options.allowRedirects = true; + + // if only 3 args are provided, so no progressCallback + if (callback === undefined && progressCallback && typeof progressCallback === 'function') { + callback = progressCallback; + } else { + options.progressCallback = progressCallback; + } + + doRequest (options, callback); +}; + + +/** + * Upload files + * old function, can still be used + * + * @callback callback + * @param options {object} - Request options + * @param callback [function] - Process response + * @returns {void} + */ + +exports.uploadFiles = function (options, callback) { + var moreOptions = options; + moreOptions.method = 'POST'; + doRequest (moreOptions, callback); +}; diff --git a/node_modules/httpreq/package.json b/node_modules/httpreq/package.json new file mode 100644 index 00000000..3acf323d --- /dev/null +++ b/node_modules/httpreq/package.json @@ -0,0 +1,87 @@ +{ + "_from": "httpreq@>=0.4.22", + "_id": "httpreq@0.4.24", + "_inBundle": false, + "_integrity": "sha1-QzX/2CzZaWaKOUZckprGHWOTYn8=", + "_location": "/httpreq", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "httpreq@>=0.4.22", + "name": "httpreq", + "escapedName": "httpreq", + "rawSpec": ">=0.4.22", + "saveSpec": null, + "fetchSpec": ">=0.4.22" + }, + "_requiredBy": [ + "/httpntlm" + ], + "_resolved": "https://registry.npmjs.org/httpreq/-/httpreq-0.4.24.tgz", + "_shasum": "4335ffd82cd969668a39465c929ac61d6393627f", + "_spec": "httpreq@>=0.4.22", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/httpntlm", + "author": { + "name": "Sam Decrock", + "url": "https://github.com/SamDecrock/" + }, + "bugs": { + "url": "https://github.com/SamDecrock/node-httpreq/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Russell Beattie", + "email": "russ@russellbeattie.com", + "url": "https://github.com/russellbeattie" + }, + { + "name": "Jason Prickett MSFT", + "url": "https://github.com/jpricketMSFT" + }, + { + "url": "https://github.com/jjharriso" + }, + { + "name": "Sam", + "url": "https://github.com/SamDecrock" + }, + { + "name": "MJJ", + "url": "https://github.com/mjj2000" + }, + { + "name": "Jeff Young", + "url": "https://github.com/jeffyoung" + }, + { + "name": "Dave Preston", + "url": "https://github.com/davepreston" + }, + { + "name": "Franklin van de Meent", + "email": "fr@nkl.in", + "url": "https://github.com/fvdm" + } + ], + "deprecated": false, + "description": "node-httpreq is a node.js library to do HTTP(S) requests the easy way", + "devDependencies": { + "chai": "~1.9.1", + "express": "3.0.3", + "mocha": "~1.20.1" + }, + "engines": { + "node": ">= 0.8.0" + }, + "homepage": "https://github.com/SamDecrock/node-httpreq#readme", + "license": "MIT", + "main": "./lib/httpreq", + "name": "httpreq", + "repository": { + "type": "git", + "url": "git://github.com/SamDecrock/node-httpreq.git" + }, + "version": "0.4.24" +} diff --git a/node_modules/httpreq/test/tests.js b/node_modules/httpreq/test/tests.js new file mode 100644 index 00000000..13735eca --- /dev/null +++ b/node_modules/httpreq/test/tests.js @@ -0,0 +1,307 @@ +var httpreq = require('../lib/httpreq'); + +var assert = require("assert"); +var expect = require("chai").expect; +var express = require('express'); +var http = require('http'); +var fs = require('fs'); + + + +describe("httpreq", function(){ + + var port, app, webserver, endpointroot; + + before(function (done) { + port = Math.floor( Math.random() * (65535 - 1025) + 1025 ); + + endpointroot = 'http://localhost:'+port; + + app = express(); + + app.configure(function(){ + app.use(express.logger('dev')); + app.use(express.errorHandler()); + app.use(express.bodyParser()); + app.use(express.methodOverride()); + app.use(app.router); + }); + + + webserver = http.createServer(app).listen(port, function(){ + console.log("web server listening on port " + port); + done(); + }); + + + }); + + after(function () { + webserver.close(); + }); + + + describe("get", function(){ + + it("should do a simple GET request", function (done){ + + var path = '/get'; // make sure this is unique when writing tests + + app.get(path, function (req, res) { + res.send('ok'); + done(); + }); + + httpreq.get(endpointroot + path, function (err, res) { + if (err) throw err; + }); + + }); + + }); + + describe("post", function(){ + + it("should do a simple POST request with parameters", function (done){ + + var parameters = { + name: 'John', + lastname: 'Doe' + }; + + var path = '/post'; + + // set up webserver endpoint: + app.post(path, function (req, res) { + res.send('ok'); + + expect(req.body).to.deep.equal(parameters); + + done(); + }); + + // post parameters to webserver endpoint: + httpreq.post(endpointroot + path, { + parameters: parameters + }, function (err, res){ + if (err) throw err; + }); + + }); + + it("should do a simple POST request with parameters and cookies", function (done){ + + var parameters = { + name: 'John', + lastname: 'Doe' + }; + + var cookies = [ + 'token=DGcGUmplWQSjfqEvmu%2BZA%2Fc', + 'id=2' + ]; + + var path = '/postcookies'; + + // set up webserver endpoint: + app.post(path, function (req, res) { + res.send('ok'); + + expect(req.body).to.deep.equal(parameters); + expect(req.headers.cookie).to.equal(cookies.join('; ')); + + done(); + }); + + // post testdata to webserver endpoint: + httpreq.post(endpointroot + path, { + parameters: parameters, + cookies: cookies + }, function (err, res){ + if (err) throw err; + }); + + }); + + it("should do a simple POST request with parameters and custom headers", function (done){ + + var parameters = { + name: 'John', + lastname: 'Doe' + }; + + var headers = { + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:18.0) Gecko/20100101 Firefox/18.0' + }; + + var path = '/postheaders'; + + // set up webserver endpoint: + app.post(path, function (req, res) { + res.send('ok'); + + expect(req.body).to.deep.equal(parameters); + expect(req.headers).to.have.a.property('user-agent', headers['User-Agent']); + + done(); + }); + + // post testdata to webserver endpoint: + httpreq.post(endpointroot + path, { + parameters: parameters, + headers: headers + }, function (err, res){ + if (err) throw err; + }); + + }); + + }); + + + describe("POST json", function () { + it('should POST some json', function (done) { + var somejson = { + name: 'John', + lastname: 'Doe' + }; + + var path = '/postjson'; + + // set up webserver endpoint: + app.post(path, function (req, res) { + res.send('ok'); + + expect(req.body).to.deep.equal(somejson); + + done(); + }); + + httpreq.post(endpointroot + path, { + json: somejson + }, function (err, res){ + if (err) throw err; + }); + }); + }); + + + describe("File upload", function () { + it('should upload 1 file (old way)', function (done) { + + var testparams = { + name: 'John', + lastname: 'Doe' + }; + + var testfile = __dirname + "/testupload.jpg"; + + var path = '/uploadfile_old'; + + // set up webserver endpoint: + app.post(path, function (req, res) { + res.send('ok'); + + expect(req.body).to.deep.equal(testparams); + + comparefiles(req.files['myfile'].path, testfile, done); + }); + + httpreq.uploadFiles({ + url: endpointroot + path, + parameters: testparams, + files:{ + myfile: testfile + } + }, function (err, res){ + if (err) throw err; + }); + }); + + it('should upload 2 files (new way, using POST)', function (done) { + + var testparams = { + name: 'John', + lastname: 'Doe' + }; + + var testfile = __dirname + "/testupload.jpg"; + + var path = '/uploadfiles'; + + // set up webserver endpoint: + app.post(path, function (req, res) { + res.send('ok'); + + expect(req.body).to.deep.equal(testparams); + + comparefiles(req.files['myfile'].path, testfile, function () { + comparefiles(req.files['myotherfile'].path, testfile, function () { + done(); + }); + }); + }); + + httpreq.post(endpointroot + path, { + parameters: testparams, + files:{ + myfile: testfile, + myotherfile: testfile + } + }, function (err, res){ + if (err) throw err; + }); + }); + + it('should upload 2 files (new way, using PUT)', function (done) { + + var testparams = { + name: 'John', + lastname: 'Doe' + }; + + var testfile = __dirname + "/testupload.jpg"; + + var path = '/uploadfiles_put'; + + // set up webserver endpoint: + app.put(path, function (req, res) { + res.send('ok'); + + expect(req.body).to.deep.equal(testparams); + + comparefiles(req.files['myfile'].path, testfile, function () { + comparefiles(req.files['myotherfile'].path, testfile, function () { + done(); + }); + }); + }); + + httpreq.put(endpointroot + path, { + parameters: testparams, + files:{ + myfile: testfile, + myotherfile: testfile + } + }, function (err, res){ + if (err) throw err; + }); + }); + }); + +}); + + +function comparefiles (file1, file2, callback) { + fs.readFile(file1, function (err, file1data) { + if(err) throw err; + + fs.readFile(file2, function (err, file2data) { + if(err) throw err; + + expect(file1data).to.deep.equal(file2data); + + callback(); + }); + }); +} \ No newline at end of file diff --git a/node_modules/httpreq/test/testupload.jpg b/node_modules/httpreq/test/testupload.jpg new file mode 100644 index 00000000..a00d8bcd Binary files /dev/null and b/node_modules/httpreq/test/testupload.jpg differ diff --git a/node_modules/inflight/LICENSE b/node_modules/inflight/LICENSE new file mode 100644 index 00000000..05eeeb88 --- /dev/null +++ b/node_modules/inflight/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/inflight/README.md b/node_modules/inflight/README.md new file mode 100644 index 00000000..6dc89291 --- /dev/null +++ b/node_modules/inflight/README.md @@ -0,0 +1,37 @@ +# inflight + +Add callbacks to requests in flight to avoid async duplication + +## USAGE + +```javascript +var inflight = require('inflight') + +// some request that does some stuff +function req(key, callback) { + // key is any random string. like a url or filename or whatever. + // + // will return either a falsey value, indicating that the + // request for this key is already in flight, or a new callback + // which when called will call all callbacks passed to inflightk + // with the same key + callback = inflight(key, callback) + + // If we got a falsey value back, then there's already a req going + if (!callback) return + + // this is where you'd fetch the url or whatever + // callback is also once()-ified, so it can safely be assigned + // to multiple events etc. First call wins. + setTimeout(function() { + callback(null, key) + }, 100) +} + +// only assigns a single setTimeout +// when it dings, all cbs get called +req('foo', cb1) +req('foo', cb2) +req('foo', cb3) +req('foo', cb4) +``` diff --git a/node_modules/inflight/inflight.js b/node_modules/inflight/inflight.js new file mode 100644 index 00000000..48202b3c --- /dev/null +++ b/node_modules/inflight/inflight.js @@ -0,0 +1,54 @@ +var wrappy = require('wrappy') +var reqs = Object.create(null) +var once = require('once') + +module.exports = wrappy(inflight) + +function inflight (key, cb) { + if (reqs[key]) { + reqs[key].push(cb) + return null + } else { + reqs[key] = [cb] + return makeres(key) + } +} + +function makeres (key) { + return once(function RES () { + var cbs = reqs[key] + var len = cbs.length + var args = slice(arguments) + + // XXX It's somewhat ambiguous whether a new callback added in this + // pass should be queued for later execution if something in the + // list of callbacks throws, or if it should just be discarded. + // However, it's such an edge case that it hardly matters, and either + // choice is likely as surprising as the other. + // As it happens, we do go ahead and schedule it for later execution. + try { + for (var i = 0; i < len; i++) { + cbs[i].apply(null, args) + } + } finally { + if (cbs.length > len) { + // added more in the interim. + // de-zalgo, just in case, but don't call again. + cbs.splice(0, len) + process.nextTick(function () { + RES.apply(null, args) + }) + } else { + delete reqs[key] + } + } + }) +} + +function slice (args) { + var length = args.length + var array = [] + + for (var i = 0; i < length; i++) array[i] = args[i] + return array +} diff --git a/node_modules/inflight/package.json b/node_modules/inflight/package.json new file mode 100644 index 00000000..ce898726 --- /dev/null +++ b/node_modules/inflight/package.json @@ -0,0 +1,58 @@ +{ + "_from": "inflight@^1.0.4", + "_id": "inflight@1.0.6", + "_inBundle": false, + "_integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "_location": "/inflight", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "inflight@^1.0.4", + "name": "inflight", + "escapedName": "inflight", + "rawSpec": "^1.0.4", + "saveSpec": null, + "fetchSpec": "^1.0.4" + }, + "_requiredBy": [ + "/glob" + ], + "_resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "_shasum": "49bd6331d7d02d0c09bc910a1075ba8165b56df9", + "_spec": "inflight@^1.0.4", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/glob", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/isaacs/inflight/issues" + }, + "bundleDependencies": false, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + }, + "deprecated": false, + "description": "Add callbacks to requests in flight to avoid async duplication", + "devDependencies": { + "tap": "^7.1.2" + }, + "files": [ + "inflight.js" + ], + "homepage": "https://github.com/isaacs/inflight", + "license": "ISC", + "main": "inflight.js", + "name": "inflight", + "repository": { + "type": "git", + "url": "git+https://github.com/npm/inflight.git" + }, + "scripts": { + "test": "tap test.js --100" + }, + "version": "1.0.6" +} diff --git a/node_modules/invert-kv/index.js b/node_modules/invert-kv/index.js new file mode 100644 index 00000000..27f9cbb8 --- /dev/null +++ b/node_modules/invert-kv/index.js @@ -0,0 +1,15 @@ +'use strict'; +module.exports = object => { + if (typeof object !== 'object') { + throw new TypeError('Expected an object'); + } + + const ret = {}; + + for (const key of Object.keys(object)) { + const value = object[key]; + ret[value] = key; + } + + return ret; +}; diff --git a/node_modules/invert-kv/license b/node_modules/invert-kv/license new file mode 100644 index 00000000..e7af2f77 --- /dev/null +++ b/node_modules/invert-kv/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/invert-kv/package.json b/node_modules/invert-kv/package.json new file mode 100644 index 00000000..77b27046 --- /dev/null +++ b/node_modules/invert-kv/package.json @@ -0,0 +1,64 @@ +{ + "_from": "invert-kv@^2.0.0", + "_id": "invert-kv@2.0.0", + "_inBundle": false, + "_integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "_location": "/invert-kv", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "invert-kv@^2.0.0", + "name": "invert-kv", + "escapedName": "invert-kv", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/lcid" + ], + "_resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "_shasum": "7393f5afa59ec9ff5f67a27620d11c226e3eec02", + "_spec": "invert-kv@^2.0.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/lcid", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/invert-kv/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Invert the key/value of an object. Example: `{foo: 'bar'}` → `{bar: 'foo'}`", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "engines": { + "node": ">=4" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/invert-kv#readme", + "keywords": [ + "object", + "key", + "value", + "kv", + "invert" + ], + "license": "MIT", + "name": "invert-kv", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/invert-kv.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "2.0.0" +} diff --git a/node_modules/invert-kv/readme.md b/node_modules/invert-kv/readme.md new file mode 100644 index 00000000..365a9799 --- /dev/null +++ b/node_modules/invert-kv/readme.md @@ -0,0 +1,25 @@ +# invert-kv [![Build Status](https://travis-ci.org/sindresorhus/invert-kv.svg?branch=master)](https://travis-ci.org/sindresorhus/invert-kv) + +> Invert the key/value of an object. Example: `{foo: 'bar'}` → `{bar: 'foo'}` + + +## Install + +``` +$ npm install invert-kv +``` + + +## Usage + +```js +const invertKv = require('invert-kv'); + +invertKv({foo: 'bar', unicorn: 'rainbow'}); +//=> {bar: 'foo', rainbow: 'unicorn'} +``` + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/is-buffer/LICENSE b/node_modules/is-buffer/LICENSE new file mode 100644 index 00000000..0c068cee --- /dev/null +++ b/node_modules/is-buffer/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Feross Aboukhadijeh + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/is-buffer/README.md b/node_modules/is-buffer/README.md new file mode 100644 index 00000000..cce0a8cf --- /dev/null +++ b/node_modules/is-buffer/README.md @@ -0,0 +1,53 @@ +# is-buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url] + +[travis-image]: https://img.shields.io/travis/feross/is-buffer/master.svg +[travis-url]: https://travis-ci.org/feross/is-buffer +[npm-image]: https://img.shields.io/npm/v/is-buffer.svg +[npm-url]: https://npmjs.org/package/is-buffer +[downloads-image]: https://img.shields.io/npm/dm/is-buffer.svg +[downloads-url]: https://npmjs.org/package/is-buffer +[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg +[standard-url]: https://standardjs.com + +#### Determine if an object is a [`Buffer`](http://nodejs.org/api/buffer.html) (including the [browserify Buffer](https://github.com/feross/buffer)) + +[![saucelabs][saucelabs-image]][saucelabs-url] + +[saucelabs-image]: https://saucelabs.com/browser-matrix/is-buffer.svg +[saucelabs-url]: https://saucelabs.com/u/is-buffer + +## Why not use `Buffer.isBuffer`? + +This module lets you check if an object is a `Buffer` without using `Buffer.isBuffer` (which includes the whole [buffer](https://github.com/feross/buffer) module in [browserify](http://browserify.org/)). + +It's future-proof and works in node too! + +## install + +```bash +npm install is-buffer +``` + +## usage + +```js +var isBuffer = require('is-buffer') + +isBuffer(new Buffer(4)) // true + +isBuffer(undefined) // false +isBuffer(null) // false +isBuffer('') // false +isBuffer(true) // false +isBuffer(false) // false +isBuffer(0) // false +isBuffer(1) // false +isBuffer(1.0) // false +isBuffer('string') // false +isBuffer({}) // false +isBuffer(function foo () {}) // false +``` + +## license + +MIT. Copyright (C) [Feross Aboukhadijeh](http://feross.org). diff --git a/node_modules/is-buffer/index.js b/node_modules/is-buffer/index.js new file mode 100644 index 00000000..9cce3965 --- /dev/null +++ b/node_modules/is-buffer/index.js @@ -0,0 +1,21 @@ +/*! + * Determine if an object is a Buffer + * + * @author Feross Aboukhadijeh + * @license MIT + */ + +// The _isBuffer check is for Safari 5-7 support, because it's missing +// Object.prototype.constructor. Remove this eventually +module.exports = function (obj) { + return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer) +} + +function isBuffer (obj) { + return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj) +} + +// For Node v0.10 support. Remove this eventually. +function isSlowBuffer (obj) { + return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0)) +} diff --git a/node_modules/is-buffer/package.json b/node_modules/is-buffer/package.json new file mode 100644 index 00000000..4b28bfc3 --- /dev/null +++ b/node_modules/is-buffer/package.json @@ -0,0 +1,77 @@ +{ + "_from": "is-buffer@~1.1.1", + "_id": "is-buffer@1.1.6", + "_inBundle": false, + "_integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "_location": "/is-buffer", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "is-buffer@~1.1.1", + "name": "is-buffer", + "escapedName": "is-buffer", + "rawSpec": "~1.1.1", + "saveSpec": null, + "fetchSpec": "~1.1.1" + }, + "_requiredBy": [ + "/md5" + ], + "_resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "_shasum": "efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be", + "_spec": "is-buffer@~1.1.1", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/md5", + "author": { + "name": "Feross Aboukhadijeh", + "email": "feross@feross.org", + "url": "http://feross.org/" + }, + "bugs": { + "url": "https://github.com/feross/is-buffer/issues" + }, + "bundleDependencies": false, + "dependencies": {}, + "deprecated": false, + "description": "Determine if an object is a Buffer", + "devDependencies": { + "standard": "*", + "tape": "^4.0.0", + "zuul": "^3.0.0" + }, + "homepage": "https://github.com/feross/is-buffer#readme", + "keywords": [ + "buffer", + "buffers", + "type", + "core buffer", + "browser buffer", + "browserify", + "typed array", + "uint32array", + "int16array", + "int32array", + "float32array", + "float64array", + "browser", + "arraybuffer", + "dataview" + ], + "license": "MIT", + "main": "index.js", + "name": "is-buffer", + "repository": { + "type": "git", + "url": "git://github.com/feross/is-buffer.git" + }, + "scripts": { + "test": "standard && npm run test-node && npm run test-browser", + "test-browser": "zuul -- test/*.js", + "test-browser-local": "zuul --local -- test/*.js", + "test-node": "tape test/*.js" + }, + "testling": { + "files": "test/*.js" + }, + "version": "1.1.6" +} diff --git a/node_modules/is-buffer/test/basic.js b/node_modules/is-buffer/test/basic.js new file mode 100644 index 00000000..be4f8e43 --- /dev/null +++ b/node_modules/is-buffer/test/basic.js @@ -0,0 +1,24 @@ +var isBuffer = require('../') +var test = require('tape') + +test('is-buffer', function (t) { + t.equal(isBuffer(Buffer.alloc(4)), true, 'new Buffer(4)') + t.equal(isBuffer(Buffer.allocUnsafeSlow(100)), true, 'SlowBuffer(100)') + + t.equal(isBuffer(undefined), false, 'undefined') + t.equal(isBuffer(null), false, 'null') + t.equal(isBuffer(''), false, 'empty string') + t.equal(isBuffer(true), false, 'true') + t.equal(isBuffer(false), false, 'false') + t.equal(isBuffer(0), false, '0') + t.equal(isBuffer(1), false, '1') + t.equal(isBuffer(1.0), false, '1.0') + t.equal(isBuffer('string'), false, 'string') + t.equal(isBuffer({}), false, '{}') + t.equal(isBuffer([]), false, '[]') + t.equal(isBuffer(function foo () {}), false, 'function foo () {}') + t.equal(isBuffer({ isBuffer: null }), false, '{ isBuffer: null }') + t.equal(isBuffer({ isBuffer: function () { throw new Error() } }), false, '{ isBuffer: function () { throw new Error() } }') + + t.end() +}) diff --git a/node_modules/is-stream/index.js b/node_modules/is-stream/index.js new file mode 100644 index 00000000..6f7ec91a --- /dev/null +++ b/node_modules/is-stream/index.js @@ -0,0 +1,21 @@ +'use strict'; + +var isStream = module.exports = function (stream) { + return stream !== null && typeof stream === 'object' && typeof stream.pipe === 'function'; +}; + +isStream.writable = function (stream) { + return isStream(stream) && stream.writable !== false && typeof stream._write === 'function' && typeof stream._writableState === 'object'; +}; + +isStream.readable = function (stream) { + return isStream(stream) && stream.readable !== false && typeof stream._read === 'function' && typeof stream._readableState === 'object'; +}; + +isStream.duplex = function (stream) { + return isStream.writable(stream) && isStream.readable(stream); +}; + +isStream.transform = function (stream) { + return isStream.duplex(stream) && typeof stream._transform === 'function' && typeof stream._transformState === 'object'; +}; diff --git a/node_modules/is-stream/license b/node_modules/is-stream/license new file mode 100644 index 00000000..654d0bfe --- /dev/null +++ b/node_modules/is-stream/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/is-stream/package.json b/node_modules/is-stream/package.json new file mode 100644 index 00000000..2ddb57ca --- /dev/null +++ b/node_modules/is-stream/package.json @@ -0,0 +1,70 @@ +{ + "_from": "is-stream@^1.1.0", + "_id": "is-stream@1.1.0", + "_inBundle": false, + "_integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "_location": "/is-stream", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "is-stream@^1.1.0", + "name": "is-stream", + "escapedName": "is-stream", + "rawSpec": "^1.1.0", + "saveSpec": null, + "fetchSpec": "^1.1.0" + }, + "_requiredBy": [ + "/execa" + ], + "_resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "_shasum": "12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44", + "_spec": "is-stream@^1.1.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/execa", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/is-stream/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Check if something is a Node.js stream", + "devDependencies": { + "ava": "*", + "tempfile": "^1.1.0", + "xo": "*" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/is-stream#readme", + "keywords": [ + "stream", + "type", + "streams", + "writable", + "readable", + "duplex", + "transform", + "check", + "detect", + "is" + ], + "license": "MIT", + "name": "is-stream", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/is-stream.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "1.1.0" +} diff --git a/node_modules/is-stream/readme.md b/node_modules/is-stream/readme.md new file mode 100644 index 00000000..d8afce81 --- /dev/null +++ b/node_modules/is-stream/readme.md @@ -0,0 +1,42 @@ +# is-stream [![Build Status](https://travis-ci.org/sindresorhus/is-stream.svg?branch=master)](https://travis-ci.org/sindresorhus/is-stream) + +> Check if something is a [Node.js stream](https://nodejs.org/api/stream.html) + + +## Install + +``` +$ npm install --save is-stream +``` + + +## Usage + +```js +const fs = require('fs'); +const isStream = require('is-stream'); + +isStream(fs.createReadStream('unicorn.png')); +//=> true + +isStream({}); +//=> false +``` + + +## API + +### isStream(stream) + +#### isStream.writable(stream) + +#### isStream.readable(stream) + +#### isStream.duplex(stream) + +#### isStream.transform(stream) + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/isexe/.npmignore b/node_modules/isexe/.npmignore new file mode 100644 index 00000000..c1cb757a --- /dev/null +++ b/node_modules/isexe/.npmignore @@ -0,0 +1,2 @@ +.nyc_output/ +coverage/ diff --git a/node_modules/isexe/LICENSE b/node_modules/isexe/LICENSE new file mode 100644 index 00000000..19129e31 --- /dev/null +++ b/node_modules/isexe/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/isexe/README.md b/node_modules/isexe/README.md new file mode 100644 index 00000000..35769e84 --- /dev/null +++ b/node_modules/isexe/README.md @@ -0,0 +1,51 @@ +# isexe + +Minimal module to check if a file is executable, and a normal file. + +Uses `fs.stat` and tests against the `PATHEXT` environment variable on +Windows. + +## USAGE + +```javascript +var isexe = require('isexe') +isexe('some-file-name', function (err, isExe) { + if (err) { + console.error('probably file does not exist or something', err) + } else if (isExe) { + console.error('this thing can be run') + } else { + console.error('cannot be run') + } +}) + +// same thing but synchronous, throws errors +var isExe = isexe.sync('some-file-name') + +// treat errors as just "not executable" +isexe('maybe-missing-file', { ignoreErrors: true }, callback) +var isExe = isexe.sync('maybe-missing-file', { ignoreErrors: true }) +``` + +## API + +### `isexe(path, [options], [callback])` + +Check if the path is executable. If no callback provided, and a +global `Promise` object is available, then a Promise will be returned. + +Will raise whatever errors may be raised by `fs.stat`, unless +`options.ignoreErrors` is set to true. + +### `isexe.sync(path, [options])` + +Same as `isexe` but returns the value and throws any errors raised. + +### Options + +* `ignoreErrors` Treat all errors as "no, this is not executable", but + don't raise them. +* `uid` Number to use as the user id +* `gid` Number to use as the group id +* `pathExt` List of path extensions to use instead of `PATHEXT` + environment variable on Windows. diff --git a/node_modules/isexe/index.js b/node_modules/isexe/index.js new file mode 100644 index 00000000..553fb32b --- /dev/null +++ b/node_modules/isexe/index.js @@ -0,0 +1,57 @@ +var fs = require('fs') +var core +if (process.platform === 'win32' || global.TESTING_WINDOWS) { + core = require('./windows.js') +} else { + core = require('./mode.js') +} + +module.exports = isexe +isexe.sync = sync + +function isexe (path, options, cb) { + if (typeof options === 'function') { + cb = options + options = {} + } + + if (!cb) { + if (typeof Promise !== 'function') { + throw new TypeError('callback not provided') + } + + return new Promise(function (resolve, reject) { + isexe(path, options || {}, function (er, is) { + if (er) { + reject(er) + } else { + resolve(is) + } + }) + }) + } + + core(path, options || {}, function (er, is) { + // ignore EACCES because that just means we aren't allowed to run it + if (er) { + if (er.code === 'EACCES' || options && options.ignoreErrors) { + er = null + is = false + } + } + cb(er, is) + }) +} + +function sync (path, options) { + // my kingdom for a filtered catch + try { + return core.sync(path, options || {}) + } catch (er) { + if (options && options.ignoreErrors || er.code === 'EACCES') { + return false + } else { + throw er + } + } +} diff --git a/node_modules/isexe/mode.js b/node_modules/isexe/mode.js new file mode 100644 index 00000000..1995ea4a --- /dev/null +++ b/node_modules/isexe/mode.js @@ -0,0 +1,41 @@ +module.exports = isexe +isexe.sync = sync + +var fs = require('fs') + +function isexe (path, options, cb) { + fs.stat(path, function (er, stat) { + cb(er, er ? false : checkStat(stat, options)) + }) +} + +function sync (path, options) { + return checkStat(fs.statSync(path), options) +} + +function checkStat (stat, options) { + return stat.isFile() && checkMode(stat, options) +} + +function checkMode (stat, options) { + var mod = stat.mode + var uid = stat.uid + var gid = stat.gid + + var myUid = options.uid !== undefined ? + options.uid : process.getuid && process.getuid() + var myGid = options.gid !== undefined ? + options.gid : process.getgid && process.getgid() + + var u = parseInt('100', 8) + var g = parseInt('010', 8) + var o = parseInt('001', 8) + var ug = u | g + + var ret = (mod & o) || + (mod & g) && gid === myGid || + (mod & u) && uid === myUid || + (mod & ug) && myUid === 0 + + return ret +} diff --git a/node_modules/isexe/package.json b/node_modules/isexe/package.json new file mode 100644 index 00000000..ba03eed9 --- /dev/null +++ b/node_modules/isexe/package.json @@ -0,0 +1,60 @@ +{ + "_from": "isexe@^2.0.0", + "_id": "isexe@2.0.0", + "_inBundle": false, + "_integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "_location": "/isexe", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "isexe@^2.0.0", + "name": "isexe", + "escapedName": "isexe", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/which" + ], + "_resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "_shasum": "e8fbf374dc556ff8947a10dcb0572d633f2cfa10", + "_spec": "isexe@^2.0.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/which", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/isaacs/isexe/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Minimal module to check if a file is executable.", + "devDependencies": { + "mkdirp": "^0.5.1", + "rimraf": "^2.5.0", + "tap": "^10.3.0" + }, + "directories": { + "test": "test" + }, + "homepage": "https://github.com/isaacs/isexe#readme", + "keywords": [], + "license": "ISC", + "main": "index.js", + "name": "isexe", + "repository": { + "type": "git", + "url": "git+https://github.com/isaacs/isexe.git" + }, + "scripts": { + "postpublish": "git push origin --all; git push origin --tags", + "postversion": "npm publish", + "preversion": "npm test", + "test": "tap test/*.js --100" + }, + "version": "2.0.0" +} diff --git a/node_modules/isexe/test/basic.js b/node_modules/isexe/test/basic.js new file mode 100644 index 00000000..d926df64 --- /dev/null +++ b/node_modules/isexe/test/basic.js @@ -0,0 +1,221 @@ +var t = require('tap') +var fs = require('fs') +var path = require('path') +var fixture = path.resolve(__dirname, 'fixtures') +var meow = fixture + '/meow.cat' +var mine = fixture + '/mine.cat' +var ours = fixture + '/ours.cat' +var fail = fixture + '/fail.false' +var noent = fixture + '/enoent.exe' +var mkdirp = require('mkdirp') +var rimraf = require('rimraf') + +var isWindows = process.platform === 'win32' +var hasAccess = typeof fs.access === 'function' +var winSkip = isWindows && 'windows' +var accessSkip = !hasAccess && 'no fs.access function' +var hasPromise = typeof Promise === 'function' +var promiseSkip = !hasPromise && 'no global Promise' + +function reset () { + delete require.cache[require.resolve('../')] + return require('../') +} + +t.test('setup fixtures', function (t) { + rimraf.sync(fixture) + mkdirp.sync(fixture) + fs.writeFileSync(meow, '#!/usr/bin/env cat\nmeow\n') + fs.chmodSync(meow, parseInt('0755', 8)) + fs.writeFileSync(fail, '#!/usr/bin/env false\n') + fs.chmodSync(fail, parseInt('0644', 8)) + fs.writeFileSync(mine, '#!/usr/bin/env cat\nmine\n') + fs.chmodSync(mine, parseInt('0744', 8)) + fs.writeFileSync(ours, '#!/usr/bin/env cat\nours\n') + fs.chmodSync(ours, parseInt('0754', 8)) + t.end() +}) + +t.test('promise', { skip: promiseSkip }, function (t) { + var isexe = reset() + t.test('meow async', function (t) { + isexe(meow).then(function (is) { + t.ok(is) + t.end() + }) + }) + t.test('fail async', function (t) { + isexe(fail).then(function (is) { + t.notOk(is) + t.end() + }) + }) + t.test('noent async', function (t) { + isexe(noent).catch(function (er) { + t.ok(er) + t.end() + }) + }) + t.test('noent ignore async', function (t) { + isexe(noent, { ignoreErrors: true }).then(function (is) { + t.notOk(is) + t.end() + }) + }) + t.end() +}) + +t.test('no promise', function (t) { + global.Promise = null + var isexe = reset() + t.throws('try to meow a promise', function () { + isexe(meow) + }) + t.end() +}) + +t.test('access', { skip: accessSkip || winSkip }, function (t) { + runTest(t) +}) + +t.test('mode', { skip: winSkip }, function (t) { + delete fs.access + delete fs.accessSync + var isexe = reset() + t.ok(isexe.sync(ours, { uid: 0, gid: 0 })) + t.ok(isexe.sync(mine, { uid: 0, gid: 0 })) + runTest(t) +}) + +t.test('windows', function (t) { + global.TESTING_WINDOWS = true + var pathExt = '.EXE;.CAT;.CMD;.COM' + t.test('pathExt option', function (t) { + runTest(t, { pathExt: '.EXE;.CAT;.CMD;.COM' }) + }) + t.test('pathExt env', function (t) { + process.env.PATHEXT = pathExt + runTest(t) + }) + t.test('no pathExt', function (t) { + // with a pathExt of '', any filename is fine. + // so the "fail" one would still pass. + runTest(t, { pathExt: '', skipFail: true }) + }) + t.test('pathext with empty entry', function (t) { + // with a pathExt of '', any filename is fine. + // so the "fail" one would still pass. + runTest(t, { pathExt: ';' + pathExt, skipFail: true }) + }) + t.end() +}) + +t.test('cleanup', function (t) { + rimraf.sync(fixture) + t.end() +}) + +function runTest (t, options) { + var isexe = reset() + + var optionsIgnore = Object.create(options || {}) + optionsIgnore.ignoreErrors = true + + if (!options || !options.skipFail) { + t.notOk(isexe.sync(fail, options)) + } + t.notOk(isexe.sync(noent, optionsIgnore)) + if (!options) { + t.ok(isexe.sync(meow)) + } else { + t.ok(isexe.sync(meow, options)) + } + + t.ok(isexe.sync(mine, options)) + t.ok(isexe.sync(ours, options)) + t.throws(function () { + isexe.sync(noent, options) + }) + + t.test('meow async', function (t) { + if (!options) { + isexe(meow, function (er, is) { + if (er) { + throw er + } + t.ok(is) + t.end() + }) + } else { + isexe(meow, options, function (er, is) { + if (er) { + throw er + } + t.ok(is) + t.end() + }) + } + }) + + t.test('mine async', function (t) { + isexe(mine, options, function (er, is) { + if (er) { + throw er + } + t.ok(is) + t.end() + }) + }) + + t.test('ours async', function (t) { + isexe(ours, options, function (er, is) { + if (er) { + throw er + } + t.ok(is) + t.end() + }) + }) + + if (!options || !options.skipFail) { + t.test('fail async', function (t) { + isexe(fail, options, function (er, is) { + if (er) { + throw er + } + t.notOk(is) + t.end() + }) + }) + } + + t.test('noent async', function (t) { + isexe(noent, options, function (er, is) { + t.ok(er) + t.notOk(is) + t.end() + }) + }) + + t.test('noent ignore async', function (t) { + isexe(noent, optionsIgnore, function (er, is) { + if (er) { + throw er + } + t.notOk(is) + t.end() + }) + }) + + t.test('directory is not executable', function (t) { + isexe(__dirname, options, function (er, is) { + if (er) { + throw er + } + t.notOk(is) + t.end() + }) + }) + + t.end() +} diff --git a/node_modules/isexe/windows.js b/node_modules/isexe/windows.js new file mode 100644 index 00000000..34996734 --- /dev/null +++ b/node_modules/isexe/windows.js @@ -0,0 +1,42 @@ +module.exports = isexe +isexe.sync = sync + +var fs = require('fs') + +function checkPathExt (path, options) { + var pathext = options.pathExt !== undefined ? + options.pathExt : process.env.PATHEXT + + if (!pathext) { + return true + } + + pathext = pathext.split(';') + if (pathext.indexOf('') !== -1) { + return true + } + for (var i = 0; i < pathext.length; i++) { + var p = pathext[i].toLowerCase() + if (p && path.substr(-p.length).toLowerCase() === p) { + return true + } + } + return false +} + +function checkStat (stat, path, options) { + if (!stat.isSymbolicLink() && !stat.isFile()) { + return false + } + return checkPathExt(path, options) +} + +function isexe (path, options, cb) { + fs.stat(path, function (er, stat) { + cb(er, er ? false : checkStat(stat, path, options)) + }) +} + +function sync (path, options) { + return checkStat(fs.statSync(path), path, options) +} diff --git a/node_modules/lcid/index.js b/node_modules/lcid/index.js new file mode 100644 index 00000000..b666ef00 --- /dev/null +++ b/node_modules/lcid/index.js @@ -0,0 +1,23 @@ +'use strict'; +const invertKv = require('invert-kv'); +const all = require('./lcid.json'); + +const inverted = invertKv(all); + +exports.from = lcidCode => { + if (typeof lcidCode !== 'number') { + throw new TypeError('Expected a number'); + } + + return inverted[lcidCode]; +}; + +exports.to = localeId => { + if (typeof localeId !== 'string') { + throw new TypeError('Expected a string'); + } + + return all[localeId]; +}; + +exports.all = all; diff --git a/node_modules/lcid/lcid.json b/node_modules/lcid/lcid.json new file mode 100644 index 00000000..9c89f6a4 --- /dev/null +++ b/node_modules/lcid/lcid.json @@ -0,0 +1,203 @@ +{ + "af_ZA": 1078, + "am_ET": 1118, + "ar_AE": 14337, + "ar_BH": 15361, + "ar_DZ": 5121, + "ar_EG": 3073, + "ar_IQ": 2049, + "ar_JO": 11265, + "ar_KW": 13313, + "ar_LB": 12289, + "ar_LY": 4097, + "ar_MA": 6145, + "ar_OM": 8193, + "ar_QA": 16385, + "ar_SA": 1025, + "ar_SY": 10241, + "ar_TN": 7169, + "ar_YE": 9217, + "arn_CL": 1146, + "as_IN": 1101, + "az_AZ": 2092, + "ba_RU": 1133, + "be_BY": 1059, + "bg_BG": 1026, + "bn_IN": 1093, + "bo_BT": 2129, + "bo_CN": 1105, + "br_FR": 1150, + "bs_BA": 8218, + "ca_ES": 1027, + "co_FR": 1155, + "cs_CZ": 1029, + "cy_GB": 1106, + "da_DK": 1030, + "de_AT": 3079, + "de_CH": 2055, + "de_DE": 1031, + "de_LI": 5127, + "de_LU": 4103, + "div_MV": 1125, + "dsb_DE": 2094, + "el_GR": 1032, + "en_AU": 3081, + "en_BZ": 10249, + "en_CA": 4105, + "en_CB": 9225, + "en_GB": 2057, + "en_IE": 6153, + "en_IN": 18441, + "en_JA": 8201, + "en_MY": 17417, + "en_NZ": 5129, + "en_PH": 13321, + "en_TT": 11273, + "en_US": 1033, + "en_ZA": 7177, + "en_ZW": 12297, + "es_AR": 11274, + "es_BO": 16394, + "es_CL": 13322, + "es_CO": 9226, + "es_CR": 5130, + "es_DO": 7178, + "es_EC": 12298, + "es_ES": 3082, + "es_GT": 4106, + "es_HN": 18442, + "es_MX": 2058, + "es_NI": 19466, + "es_PA": 6154, + "es_PE": 10250, + "es_PR": 20490, + "es_PY": 15370, + "es_SV": 17418, + "es_UR": 14346, + "es_US": 21514, + "es_VE": 8202, + "et_EE": 1061, + "eu_ES": 1069, + "fa_IR": 1065, + "fi_FI": 1035, + "fil_PH": 1124, + "fo_FO": 1080, + "fr_BE": 2060, + "fr_CA": 3084, + "fr_CH": 4108, + "fr_FR": 1036, + "fr_LU": 5132, + "fr_MC": 6156, + "fy_NL": 1122, + "ga_IE": 2108, + "gbz_AF": 1164, + "gl_ES": 1110, + "gsw_FR": 1156, + "gu_IN": 1095, + "ha_NG": 1128, + "he_IL": 1037, + "hi_IN": 1081, + "hr_BA": 4122, + "hr_HR": 1050, + "hu_HU": 1038, + "hy_AM": 1067, + "id_ID": 1057, + "ii_CN": 1144, + "is_IS": 1039, + "it_CH": 2064, + "it_IT": 1040, + "iu_CA": 2141, + "ja_JP": 1041, + "ka_GE": 1079, + "kh_KH": 1107, + "kk_KZ": 1087, + "kl_GL": 1135, + "kn_IN": 1099, + "ko_KR": 1042, + "kok_IN": 1111, + "ky_KG": 1088, + "lb_LU": 1134, + "lo_LA": 1108, + "lt_LT": 1063, + "lv_LV": 1062, + "mi_NZ": 1153, + "mk_MK": 1071, + "ml_IN": 1100, + "mn_CN": 2128, + "mn_MN": 1104, + "moh_CA": 1148, + "mr_IN": 1102, + "ms_BN": 2110, + "ms_MY": 1086, + "mt_MT": 1082, + "my_MM": 1109, + "nb_NO": 1044, + "ne_NP": 1121, + "nl_BE": 2067, + "nl_NL": 1043, + "nn_NO": 2068, + "ns_ZA": 1132, + "oc_FR": 1154, + "or_IN": 1096, + "pa_IN": 1094, + "pl_PL": 1045, + "ps_AF": 1123, + "pt_BR": 1046, + "pt_PT": 2070, + "qut_GT": 1158, + "quz_BO": 1131, + "quz_EC": 2155, + "quz_PE": 3179, + "rm_CH": 1047, + "ro_RO": 1048, + "ru_RU": 1049, + "rw_RW": 1159, + "sa_IN": 1103, + "sah_RU": 1157, + "se_FI": 3131, + "se_NO": 1083, + "se_SE": 2107, + "si_LK": 1115, + "sk_SK": 1051, + "sl_SI": 1060, + "sma_NO": 6203, + "sma_SE": 7227, + "smj_NO": 4155, + "smj_SE": 5179, + "smn_FI": 9275, + "sms_FI": 8251, + "sq_AL": 1052, + "sr_BA": 7194, + "sr_SP": 3098, + "sv_FI": 2077, + "sv_SE": 1053, + "sw_KE": 1089, + "syr_SY": 1114, + "ta_IN": 1097, + "te_IN": 1098, + "tg_TJ": 1064, + "th_TH": 1054, + "tk_TM": 1090, + "tmz_DZ": 2143, + "tn_ZA": 1074, + "tr_TR": 1055, + "tt_RU": 1092, + "ug_CN": 1152, + "uk_UA": 1058, + "ur_IN": 2080, + "ur_PK": 1056, + "uz_UZ": 2115, + "vi_VN": 1066, + "wen_DE": 1070, + "wo_SN": 1160, + "xh_ZA": 1076, + "yo_NG": 1130, + "zh_CHS": 4, + "zh_CHT": 31748, + "zh_CN": 2052, + "zh_HK": 3076, + "zh_MO": 5124, + "zh_SG": 4100, + "zh_TW": 1028, + "zu_ZA": 1077 +} diff --git a/node_modules/lcid/license b/node_modules/lcid/license new file mode 100644 index 00000000..e7af2f77 --- /dev/null +++ b/node_modules/lcid/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/lcid/package.json b/node_modules/lcid/package.json new file mode 100644 index 00000000..e6768812 --- /dev/null +++ b/node_modules/lcid/package.json @@ -0,0 +1,79 @@ +{ + "_from": "lcid@^2.0.0", + "_id": "lcid@2.0.0", + "_inBundle": false, + "_integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "_location": "/lcid", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "lcid@^2.0.0", + "name": "lcid", + "escapedName": "lcid", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/os-locale" + ], + "_resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "_shasum": "6ef5d2df60e52f82eb228a4c373e8d1f397253cf", + "_spec": "lcid@^2.0.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/os-locale", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/lcid/issues" + }, + "bundleDependencies": false, + "dependencies": { + "invert-kv": "^2.0.0" + }, + "deprecated": false, + "description": "Mapping between standard locale identifiers and Windows locale identifiers (LCID)", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "engines": { + "node": ">=6" + }, + "files": [ + "index.js", + "lcid.json" + ], + "homepage": "https://github.com/sindresorhus/lcid#readme", + "keywords": [ + "lcid", + "locale", + "string", + "str", + "id", + "identifier", + "windows", + "language", + "lang", + "map", + "mapping", + "convert", + "json", + "bcp47", + "ietf", + "tag" + ], + "license": "MIT", + "name": "lcid", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/lcid.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "2.0.0" +} diff --git a/node_modules/lcid/readme.md b/node_modules/lcid/readme.md new file mode 100644 index 00000000..2b1aa798 --- /dev/null +++ b/node_modules/lcid/readme.md @@ -0,0 +1,35 @@ +# lcid [![Build Status](https://travis-ci.org/sindresorhus/lcid.svg?branch=master)](https://travis-ci.org/sindresorhus/lcid) + +> Mapping between [standard locale identifiers](https://en.wikipedia.org/wiki/Locale_(computer_software)) and [Windows locale identifiers (LCID)](http://en.wikipedia.org/wiki/Locale#Specifics_for_Microsoft_platforms) + +Based on the [mapping](https://github.com/python/cpython/blob/8f7bb100d0fa7fb2714f3953b5b627878277c7c6/Lib/locale.py#L1465-L1674) used in the Python standard library. + +The mapping itself is just a [JSON file](lcid.json) and can be used wherever. + + +## Install + +``` +$ npm install lcid +``` + + +## Usage + +```js +const lcid = require('lcid'); + +lcid.from(1044); +//=> 'nb_NO' + +lcid.to('nb_NO'); +//=> 1044 + +lcid.all; +//=> {'af_ZA': 1078, ...} +``` + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/map-age-cleaner/dist/index.d.ts b/node_modules/map-age-cleaner/dist/index.d.ts new file mode 100644 index 00000000..fbf5ce08 --- /dev/null +++ b/node_modules/map-age-cleaner/dist/index.d.ts @@ -0,0 +1,20 @@ +interface Entry { + [key: string]: any; +} +interface MaxAgeEntry extends Entry { + maxAge: number; +} +/** + * Automatically cleanup the items in the provided `map`. The property of the expiration timestamp should be named `maxAge`. + * + * @param map - Map instance which should be cleaned up. + */ +export default function mapAgeCleaner(map: Map): any; +/** + * Automatically cleanup the items in the provided `map`. + * + * @param map - Map instance which should be cleaned up. + * @param property - Name of the property which olds the expiry timestamp. + */ +export default function mapAgeCleaner(map: Map, property: string): any; +export {}; diff --git a/node_modules/map-age-cleaner/dist/index.js b/node_modules/map-age-cleaner/dist/index.js new file mode 100644 index 00000000..ff137dec --- /dev/null +++ b/node_modules/map-age-cleaner/dist/index.js @@ -0,0 +1,92 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const p_defer_1 = __importDefault(require("p-defer")); +function mapAgeCleaner(map, property = 'maxAge') { + let processingKey; + let processingTimer; + let processingDeferred; + const cleanup = () => __awaiter(this, void 0, void 0, function* () { + if (processingKey !== undefined) { + // If we are already processing an item, we can safely exit + return; + } + const setupTimer = (item) => __awaiter(this, void 0, void 0, function* () { + processingDeferred = p_defer_1.default(); + const delay = item[1][property] - Date.now(); + if (delay <= 0) { + // Remove the item immediately if the delay is equal to or below 0 + map.delete(item[0]); + processingDeferred.resolve(); + return; + } + // Keep track of the current processed key + processingKey = item[0]; + processingTimer = setTimeout(() => { + // Remove the item when the timeout fires + map.delete(item[0]); + if (processingDeferred) { + processingDeferred.resolve(); + } + }, delay); + // tslint:disable-next-line:strict-type-predicates + if (typeof processingTimer.unref === 'function') { + // Don't hold up the process from exiting + processingTimer.unref(); + } + return processingDeferred.promise; + }); + try { + for (const entry of map) { + yield setupTimer(entry); + } + } + catch (_a) { + // Do nothing if an error occurs, this means the timer was cleaned up and we should stop processing + } + processingKey = undefined; + }); + const reset = () => { + processingKey = undefined; + if (processingTimer !== undefined) { + clearTimeout(processingTimer); + processingTimer = undefined; + } + if (processingDeferred !== undefined) { // tslint:disable-line:early-exit + processingDeferred.reject(undefined); + processingDeferred = undefined; + } + }; + const originalSet = map.set.bind(map); + map.set = (key, value) => { + if (map.has(key)) { + // If the key already exist, remove it so we can add it back at the end of the map. + map.delete(key); + } + // Call the original `map.set` + const result = originalSet(key, value); + // If we are already processing a key and the key added is the current processed key, stop processing it + if (processingKey && processingKey === key) { + reset(); + } + // Always run the cleanup method in case it wasn't started yet + cleanup(); // tslint:disable-line:no-floating-promises + return result; + }; + cleanup(); // tslint:disable-line:no-floating-promises + return map; +} +exports.default = mapAgeCleaner; +// Add support for CJS +module.exports = mapAgeCleaner; +module.exports.default = mapAgeCleaner; diff --git a/node_modules/map-age-cleaner/license b/node_modules/map-age-cleaner/license new file mode 100644 index 00000000..0711ab00 --- /dev/null +++ b/node_modules/map-age-cleaner/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sam Verschueren (github.com/SamVerschueren) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/map-age-cleaner/package.json b/node_modules/map-age-cleaner/package.json new file mode 100644 index 00000000..d67b73c3 --- /dev/null +++ b/node_modules/map-age-cleaner/package.json @@ -0,0 +1,91 @@ +{ + "_from": "map-age-cleaner@^0.1.1", + "_id": "map-age-cleaner@0.1.3", + "_inBundle": false, + "_integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "_location": "/map-age-cleaner", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "map-age-cleaner@^0.1.1", + "name": "map-age-cleaner", + "escapedName": "map-age-cleaner", + "rawSpec": "^0.1.1", + "saveSpec": null, + "fetchSpec": "^0.1.1" + }, + "_requiredBy": [ + "/mem" + ], + "_resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "_shasum": "7d583a7306434c055fe474b0f45078e6e1b4b92a", + "_spec": "map-age-cleaner@^0.1.1", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/mem", + "author": { + "name": "Sam Verschueren", + "email": "sam.verschueren@gmail.com", + "url": "github.com/SamVerschueren" + }, + "bugs": { + "url": "https://github.com/SamVerschueren/map-age-cleaner/issues" + }, + "bundleDependencies": false, + "dependencies": { + "p-defer": "^1.0.0" + }, + "deprecated": false, + "description": "Automatically cleanup expired items in a Map", + "devDependencies": { + "@types/delay": "^2.0.1", + "@types/node": "^10.7.1", + "ava": "^0.25.0", + "codecov": "^3.0.0", + "del-cli": "^1.1.0", + "delay": "^3.0.0", + "nyc": "^12.0.0", + "tslint": "^5.11.0", + "tslint-xo": "^0.9.0", + "typescript": "^3.0.1" + }, + "engines": { + "node": ">=6" + }, + "files": [ + "dist/index.js", + "dist/index.d.ts" + ], + "homepage": "https://github.com/SamVerschueren/map-age-cleaner#readme", + "keywords": [ + "map", + "age", + "cleaner", + "maxage", + "expire", + "expiration", + "expiring" + ], + "license": "MIT", + "main": "dist/index.js", + "name": "map-age-cleaner", + "nyc": { + "exclude": [ + "dist/test.js" + ] + }, + "repository": { + "type": "git", + "url": "git+https://github.com/SamVerschueren/map-age-cleaner.git" + }, + "scripts": { + "build": "npm run clean && tsc", + "clean": "del-cli dist", + "lint": "tslint --format stylish --project .", + "prepublishOnly": "npm run build", + "pretest": "npm run build -- --sourceMap", + "test": "npm run lint && nyc ava dist/test.js" + }, + "sideEffects": false, + "typings": "dist/index.d.ts", + "version": "0.1.3" +} diff --git a/node_modules/map-age-cleaner/readme.md b/node_modules/map-age-cleaner/readme.md new file mode 100644 index 00000000..471d9335 --- /dev/null +++ b/node_modules/map-age-cleaner/readme.md @@ -0,0 +1,67 @@ +# map-age-cleaner + +[![Build Status](https://travis-ci.org/SamVerschueren/map-age-cleaner.svg?branch=master)](https://travis-ci.org/SamVerschueren/map-age-cleaner) [![codecov](https://codecov.io/gh/SamVerschueren/map-age-cleaner/badge.svg?branch=master)](https://codecov.io/gh/SamVerschueren/map-age-cleaner?branch=master) + +> Automatically cleanup expired items in a Map + + +## Install + +``` +$ npm install map-age-cleaner +``` + + +## Usage + +```js +import mapAgeCleaner from 'map-age-cleaner'; + +const map = new Map([ + ['unicorn', {data: '🦄', maxAge: Date.now() + 1000}] +]); + +mapAgeCleaner(map); + +map.has('unicorn'); +//=> true + +// Wait for 1 second... + +map.has('unicorn'); +//=> false +``` + +> **Note**: Items have to be ordered ascending based on the expiry property. This means that the item which will be expired first, should be in the first position of the `Map`. + + +## API + +### mapAgeCleaner(map, [property]) + +Returns the `Map` instance. + +#### map + +Type: `Map` + +Map instance which should be cleaned up. + +#### property + +Type: `string`
+Default: `maxAge` + +Name of the property which olds the expiry timestamp. + + +## Related + +- [expiry-map](https://github.com/SamVerschueren/expiry-map) - A `Map` implementation with expirable items +- [expiry-set](https://github.com/SamVerschueren/expiry-set) - A `Set` implementation with expirable keys +- [mem](https://github.com/sindresorhus/mem) - Memoize functions + + +## License + +MIT © [Sam Verschueren](https://github.com/SamVerschueren) diff --git a/node_modules/md5/.npmignore b/node_modules/md5/.npmignore new file mode 100644 index 00000000..d5d9f0f4 --- /dev/null +++ b/node_modules/md5/.npmignore @@ -0,0 +1 @@ +node_modules/mocha diff --git a/node_modules/md5/.travis.yml b/node_modules/md5/.travis.yml new file mode 100644 index 00000000..81112458 --- /dev/null +++ b/node_modules/md5/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +node_js: + - 0.6 + - 0.8 \ No newline at end of file diff --git a/node_modules/md5/LICENSE b/node_modules/md5/LICENSE new file mode 100644 index 00000000..f476d11e --- /dev/null +++ b/node_modules/md5/LICENSE @@ -0,0 +1,27 @@ +Copyright © 2011-2012, Paul Vorbach. +Copyright © 2009, Jeff Mott. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. +* Neither the name Crypto-JS nor the names of its contributors may be used to + endorse or promote products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/md5/README.md b/node_modules/md5/README.md new file mode 100644 index 00000000..c449a333 --- /dev/null +++ b/node_modules/md5/README.md @@ -0,0 +1,108 @@ +# MD5 + +[![build status](https://secure.travis-ci.org/pvorb/node-md5.png)](http://travis-ci.org/pvorb/node-md5) + +a JavaScript function for hashing messages with MD5. + +## Installation + +You can use this package on the server side as well as the client side. + +### [Node.js](http://nodejs.org/): + +~~~ +npm install md5 +~~~ + + +## API + +~~~ javascript +md5(message) +~~~ + + * `message` -- `String` or `Buffer` + * returns `String` + + +## Usage + +~~~ javascript +var md5 = require('md5'); + +console.log(md5('message')); +~~~ + +This will print the following + +~~~ +78e731027d8fd50ed642340b7c9a63b3 +~~~ + +It supports buffers, too + +~~~ javascript +var fs = require('fs'); +var md5 = require('md5'); + +fs.readFile('example.txt', function(err, buf) { + console.log(md5(buf)); +}); +~~~ + +## Versions + +Before version 2.0.0 there were two packages called md5 on npm, one lowercase, +one uppercase (the one you're looking at). As of version 2.0.0, all new versions +of this module will go to lowercase [md5](https://www.npmjs.com/package/md5) on +npm. To use the correct version, users of this module will have to change their +code from `require('MD5')` to `require('md5')` if they want to use versions >= +2.0.0. + + +## Bugs and Issues + +If you encounter any bugs or issues, feel free to open an issue at +[github](https://github.com/pvorb/node-md5/issues). + + +## Credits + +This package is based on the work of Jeff Mott, who did a pure JS implementation +of the MD5 algorithm that was published by Ronald L. Rivest in 1991. I needed a +npm package of the algorithm, so I used Jeff’s implementation for this package. +The original implementation can be found in the +[CryptoJS](http://code.google.com/p/crypto-js/) project. + + +## License + +~~~ +Copyright © 2011-2015, Paul Vorbach. +Copyright © 2009, Jeff Mott. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. +* Neither the name Crypto-JS nor the names of its contributors may be used to + endorse or promote products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +~~~ diff --git a/node_modules/md5/md5.js b/node_modules/md5/md5.js new file mode 100644 index 00000000..e20b1f71 --- /dev/null +++ b/node_modules/md5/md5.js @@ -0,0 +1,160 @@ +(function(){ + var crypt = require('crypt'), + utf8 = require('charenc').utf8, + isBuffer = require('is-buffer'), + bin = require('charenc').bin, + + // The core + md5 = function (message, options) { + // Convert to byte array + if (message.constructor == String) + if (options && options.encoding === 'binary') + message = bin.stringToBytes(message); + else + message = utf8.stringToBytes(message); + else if (isBuffer(message)) + message = Array.prototype.slice.call(message, 0); + else if (!Array.isArray(message)) + message = message.toString(); + // else, assume byte array already + + var m = crypt.bytesToWords(message), + l = message.length * 8, + a = 1732584193, + b = -271733879, + c = -1732584194, + d = 271733878; + + // Swap endian + for (var i = 0; i < m.length; i++) { + m[i] = ((m[i] << 8) | (m[i] >>> 24)) & 0x00FF00FF | + ((m[i] << 24) | (m[i] >>> 8)) & 0xFF00FF00; + } + + // Padding + m[l >>> 5] |= 0x80 << (l % 32); + m[(((l + 64) >>> 9) << 4) + 14] = l; + + // Method shortcuts + var FF = md5._ff, + GG = md5._gg, + HH = md5._hh, + II = md5._ii; + + for (var i = 0; i < m.length; i += 16) { + + var aa = a, + bb = b, + cc = c, + dd = d; + + a = FF(a, b, c, d, m[i+ 0], 7, -680876936); + d = FF(d, a, b, c, m[i+ 1], 12, -389564586); + c = FF(c, d, a, b, m[i+ 2], 17, 606105819); + b = FF(b, c, d, a, m[i+ 3], 22, -1044525330); + a = FF(a, b, c, d, m[i+ 4], 7, -176418897); + d = FF(d, a, b, c, m[i+ 5], 12, 1200080426); + c = FF(c, d, a, b, m[i+ 6], 17, -1473231341); + b = FF(b, c, d, a, m[i+ 7], 22, -45705983); + a = FF(a, b, c, d, m[i+ 8], 7, 1770035416); + d = FF(d, a, b, c, m[i+ 9], 12, -1958414417); + c = FF(c, d, a, b, m[i+10], 17, -42063); + b = FF(b, c, d, a, m[i+11], 22, -1990404162); + a = FF(a, b, c, d, m[i+12], 7, 1804603682); + d = FF(d, a, b, c, m[i+13], 12, -40341101); + c = FF(c, d, a, b, m[i+14], 17, -1502002290); + b = FF(b, c, d, a, m[i+15], 22, 1236535329); + + a = GG(a, b, c, d, m[i+ 1], 5, -165796510); + d = GG(d, a, b, c, m[i+ 6], 9, -1069501632); + c = GG(c, d, a, b, m[i+11], 14, 643717713); + b = GG(b, c, d, a, m[i+ 0], 20, -373897302); + a = GG(a, b, c, d, m[i+ 5], 5, -701558691); + d = GG(d, a, b, c, m[i+10], 9, 38016083); + c = GG(c, d, a, b, m[i+15], 14, -660478335); + b = GG(b, c, d, a, m[i+ 4], 20, -405537848); + a = GG(a, b, c, d, m[i+ 9], 5, 568446438); + d = GG(d, a, b, c, m[i+14], 9, -1019803690); + c = GG(c, d, a, b, m[i+ 3], 14, -187363961); + b = GG(b, c, d, a, m[i+ 8], 20, 1163531501); + a = GG(a, b, c, d, m[i+13], 5, -1444681467); + d = GG(d, a, b, c, m[i+ 2], 9, -51403784); + c = GG(c, d, a, b, m[i+ 7], 14, 1735328473); + b = GG(b, c, d, a, m[i+12], 20, -1926607734); + + a = HH(a, b, c, d, m[i+ 5], 4, -378558); + d = HH(d, a, b, c, m[i+ 8], 11, -2022574463); + c = HH(c, d, a, b, m[i+11], 16, 1839030562); + b = HH(b, c, d, a, m[i+14], 23, -35309556); + a = HH(a, b, c, d, m[i+ 1], 4, -1530992060); + d = HH(d, a, b, c, m[i+ 4], 11, 1272893353); + c = HH(c, d, a, b, m[i+ 7], 16, -155497632); + b = HH(b, c, d, a, m[i+10], 23, -1094730640); + a = HH(a, b, c, d, m[i+13], 4, 681279174); + d = HH(d, a, b, c, m[i+ 0], 11, -358537222); + c = HH(c, d, a, b, m[i+ 3], 16, -722521979); + b = HH(b, c, d, a, m[i+ 6], 23, 76029189); + a = HH(a, b, c, d, m[i+ 9], 4, -640364487); + d = HH(d, a, b, c, m[i+12], 11, -421815835); + c = HH(c, d, a, b, m[i+15], 16, 530742520); + b = HH(b, c, d, a, m[i+ 2], 23, -995338651); + + a = II(a, b, c, d, m[i+ 0], 6, -198630844); + d = II(d, a, b, c, m[i+ 7], 10, 1126891415); + c = II(c, d, a, b, m[i+14], 15, -1416354905); + b = II(b, c, d, a, m[i+ 5], 21, -57434055); + a = II(a, b, c, d, m[i+12], 6, 1700485571); + d = II(d, a, b, c, m[i+ 3], 10, -1894986606); + c = II(c, d, a, b, m[i+10], 15, -1051523); + b = II(b, c, d, a, m[i+ 1], 21, -2054922799); + a = II(a, b, c, d, m[i+ 8], 6, 1873313359); + d = II(d, a, b, c, m[i+15], 10, -30611744); + c = II(c, d, a, b, m[i+ 6], 15, -1560198380); + b = II(b, c, d, a, m[i+13], 21, 1309151649); + a = II(a, b, c, d, m[i+ 4], 6, -145523070); + d = II(d, a, b, c, m[i+11], 10, -1120210379); + c = II(c, d, a, b, m[i+ 2], 15, 718787259); + b = II(b, c, d, a, m[i+ 9], 21, -343485551); + + a = (a + aa) >>> 0; + b = (b + bb) >>> 0; + c = (c + cc) >>> 0; + d = (d + dd) >>> 0; + } + + return crypt.endian([a, b, c, d]); + }; + + // Auxiliary functions + md5._ff = function (a, b, c, d, x, s, t) { + var n = a + (b & c | ~b & d) + (x >>> 0) + t; + return ((n << s) | (n >>> (32 - s))) + b; + }; + md5._gg = function (a, b, c, d, x, s, t) { + var n = a + (b & d | c & ~d) + (x >>> 0) + t; + return ((n << s) | (n >>> (32 - s))) + b; + }; + md5._hh = function (a, b, c, d, x, s, t) { + var n = a + (b ^ c ^ d) + (x >>> 0) + t; + return ((n << s) | (n >>> (32 - s))) + b; + }; + md5._ii = function (a, b, c, d, x, s, t) { + var n = a + (c ^ (b | ~d)) + (x >>> 0) + t; + return ((n << s) | (n >>> (32 - s))) + b; + }; + + // Package private blocksize + md5._blocksize = 16; + md5._digestsize = 16; + + module.exports = function (message, options) { + if (message === undefined || message === null) + throw new Error('Illegal argument ' + message); + + var digestbytes = crypt.wordsToBytes(md5(message, options)); + return options && options.asBytes ? digestbytes : + options && options.asString ? bin.bytesToString(digestbytes) : + crypt.bytesToHex(digestbytes); + }; + +})(); diff --git a/node_modules/md5/package.json b/node_modules/md5/package.json new file mode 100644 index 00000000..109cb7f0 --- /dev/null +++ b/node_modules/md5/package.json @@ -0,0 +1,68 @@ +{ + "_from": "md5@^2.2.1", + "_id": "md5@2.2.1", + "_inBundle": false, + "_integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=", + "_location": "/md5", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "md5@^2.2.1", + "name": "md5", + "escapedName": "md5", + "rawSpec": "^2.2.1", + "saveSpec": null, + "fetchSpec": "^2.2.1" + }, + "_requiredBy": [ + "/strong-globalize" + ], + "_resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", + "_shasum": "53ab38d5fe3c8891ba465329ea23fac0540126f9", + "_spec": "md5@^2.2.1", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/strong-globalize", + "author": { + "name": "Paul Vorbach", + "email": "paul@vorba.ch", + "url": "http://paul.vorba.ch" + }, + "bugs": { + "url": "https://github.com/pvorb/node-md5/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "salba" + } + ], + "dependencies": { + "charenc": "~0.0.1", + "crypt": "~0.0.1", + "is-buffer": "~1.1.1" + }, + "deprecated": false, + "description": "js function for hashing messages with MD5", + "devDependencies": { + "mocha": "~2.3.4" + }, + "homepage": "https://github.com/pvorb/node-md5#readme", + "license": "BSD-3-Clause", + "main": "md5.js", + "name": "md5", + "optionalDependencies": {}, + "repository": { + "type": "git", + "url": "git://github.com/pvorb/node-md5.git" + }, + "scripts": { + "test": "mocha" + }, + "tags": [ + "md5", + "hash", + "encryption", + "message digest" + ], + "version": "2.2.1" +} diff --git a/node_modules/md5/test.js b/node_modules/md5/test.js new file mode 100644 index 00000000..db6378bf --- /dev/null +++ b/node_modules/md5/test.js @@ -0,0 +1,45 @@ +var md5 = require('./md5.js'); +var assert = require('assert'); + +describe('md5', function () { + + it('should throw an error for `undefined`', function() { + assert.throws(function() { + md5(undefined); + }); + }); + + it('should throw an error for `null`', function() { + assert.throws(function() { + md5(null); + }); + }); + + it('should return the expected MD5 hash for "message"', function() { + assert.equal('78e731027d8fd50ed642340b7c9a63b3', md5('message')); + }); + + it('should not return the same hash for random numbers twice', function() { + var msg1 = Math.floor((Math.random() * 100000) + 1) + (new Date).getTime(); + var msg2 = Math.floor((Math.random() * 100000) + 1) + (new Date).getTime(); + + if (msg1 !== msg2) { + assert.notEqual(md5(msg1), md5(msg2)); + } else { + assert.equal(md5(msg1), md5(msg1)); + } + }); + + it('should support Node.js Buffers', function() { + var buffer = new Buffer('message áßäöü', 'utf8'); + + assert.equal(md5(buffer), md5('message áßäöü')); + }) + + it('should be able to use a binary encoded string', function() { + var hash1 = md5('abc', { asString: true }); + var hash2 = md5(hash1 + 'a', { asString: true, encoding : 'binary' }); + var hash3 = md5(hash1 + 'a', { encoding : 'binary' }); + assert.equal(hash3, '131f0ac52813044f5110e4aec638c169'); + }); +}); diff --git a/node_modules/mem/index.d.ts b/node_modules/mem/index.d.ts new file mode 100644 index 00000000..78662552 --- /dev/null +++ b/node_modules/mem/index.d.ts @@ -0,0 +1,96 @@ +declare namespace mem { + interface CacheStorage { + has(key: KeyType): boolean; + get(key: KeyType): ValueType | undefined; + set(key: KeyType, value: ValueType): void; + delete(key: KeyType): void; + clear?: () => void; + } + + interface Options< + ArgumentsType extends unknown[], + CacheKeyType extends unknown, + ReturnType extends unknown + > { + /** + Milliseconds until the cache expires. + + @default Infinity + */ + readonly maxAge?: number; + + /** + Determines the cache key for storing the result based on the function arguments. By default, if there's only one argument and it's a [primitive](https://developer.mozilla.org/en-US/docs/Glossary/Primitive), it's used directly as a key, otherwise it's all the function arguments JSON stringified as an array. + + You could for example change it to only cache on the first argument `x => JSON.stringify(x)`. + */ + readonly cacheKey?: (...arguments: ArgumentsType) => CacheKeyType; + + /** + Use a different cache storage. You could for example use a `WeakMap` instead or [`quick-lru`](https://github.com/sindresorhus/quick-lru) for a LRU cache. + + @default new Map() + */ + readonly cache?: CacheStorage; + + /** + Cache rejected promises. + + @default false + */ + readonly cachePromiseRejection?: boolean; + } +} + +declare const mem: { + /** + [Memoize](https://en.wikipedia.org/wiki/Memoization) functions - An optimization used to speed up consecutive function calls by caching the result of calls with identical input. + + @param fn - Function to be memoized. + + @example + ``` + import mem = require('mem'); + + let i = 0; + const counter = () => ++i; + const memoized = mem(counter); + + memoized('foo'); + //=> 1 + + // Cached as it's the same arguments + memoized('foo'); + //=> 1 + + // Not cached anymore as the arguments changed + memoized('bar'); + //=> 2 + + memoized('bar'); + //=> 2 + ``` + */ + < + ArgumentsType extends unknown[], + ReturnType extends unknown, + CacheKeyType extends unknown + >( + fn: (...arguments: ArgumentsType) => ReturnType, + options?: mem.Options + ): (...arguments: ArgumentsType) => ReturnType; + + /** + Clear all cached data of a memoized function. + + @param fn - Memoized function. + */ + clear( + fn: (...arguments: ArgumentsType) => ReturnType + ): void; + + // TODO: Remove this for the next major release + default: typeof mem; +}; + +export = mem; diff --git a/node_modules/mem/index.js b/node_modules/mem/index.js new file mode 100644 index 00000000..51faf012 --- /dev/null +++ b/node_modules/mem/index.js @@ -0,0 +1,88 @@ +'use strict'; +const mimicFn = require('mimic-fn'); +const isPromise = require('p-is-promise'); +const mapAgeCleaner = require('map-age-cleaner'); + +const cacheStore = new WeakMap(); + +const defaultCacheKey = (...arguments_) => { + if (arguments_.length === 0) { + return '__defaultKey'; + } + + if (arguments_.length === 1) { + const [firstArgument] = arguments_; + if ( + firstArgument === null || + firstArgument === undefined || + (typeof firstArgument !== 'function' && typeof firstArgument !== 'object') + ) { + return firstArgument; + } + } + + return JSON.stringify(arguments_); +}; + +const mem = (fn, options) => { + options = Object.assign({ + cacheKey: defaultCacheKey, + cache: new Map(), + cachePromiseRejection: false + }, options); + + if (typeof options.maxAge === 'number') { + mapAgeCleaner(options.cache); + } + + const {cache} = options; + options.maxAge = options.maxAge || 0; + + const setData = (key, data) => { + cache.set(key, { + data, + maxAge: Date.now() + options.maxAge + }); + }; + + const memoized = function (...arguments_) { + const key = options.cacheKey(...arguments_); + + if (cache.has(key)) { + return cache.get(key).data; + } + + const cacheItem = fn.call(this, ...arguments_); + + setData(key, cacheItem); + + if (isPromise(cacheItem) && options.cachePromiseRejection === false) { + // Remove rejected promises from cache unless `cachePromiseRejection` is set to `true` + cacheItem.catch(() => cache.delete(key)); + } + + return cacheItem; + }; + + try { + // The below call will throw in some host environments + // See https://github.com/sindresorhus/mimic-fn/issues/10 + mimicFn(memoized, fn); + } catch (_) {} + + cacheStore.set(memoized, options.cache); + + return memoized; +}; + +module.exports = mem; +// TODO: Remove this for the next major release +module.exports.default = mem; + +module.exports.clear = fn => { + const cache = cacheStore.get(fn); + + if (cache && typeof cache.clear === 'function') { + cache.clear(); + } +}; diff --git a/node_modules/mem/license b/node_modules/mem/license new file mode 100644 index 00000000..e7af2f77 --- /dev/null +++ b/node_modules/mem/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/mem/package.json b/node_modules/mem/package.json new file mode 100644 index 00000000..5ce497b0 --- /dev/null +++ b/node_modules/mem/package.json @@ -0,0 +1,78 @@ +{ + "_from": "mem@^4.0.0", + "_id": "mem@4.3.0", + "_inBundle": false, + "_integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "_location": "/mem", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "mem@^4.0.0", + "name": "mem", + "escapedName": "mem", + "rawSpec": "^4.0.0", + "saveSpec": null, + "fetchSpec": "^4.0.0" + }, + "_requiredBy": [ + "/os-locale" + ], + "_resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "_shasum": "461af497bc4ae09608cdb2e60eefb69bff744178", + "_spec": "mem@^4.0.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/os-locale", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/mem/issues" + }, + "bundleDependencies": false, + "dependencies": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + }, + "deprecated": false, + "description": "Memoize functions - An optimization used to speed up consecutive function calls by caching the result of calls with identical input", + "devDependencies": { + "ava": "^1.4.1", + "delay": "^4.1.0", + "tsd": "^0.7.1", + "xo": "^0.24.0" + }, + "engines": { + "node": ">=6" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "homepage": "https://github.com/sindresorhus/mem#readme", + "keywords": [ + "memoize", + "function", + "mem", + "memoization", + "cache", + "caching", + "optimize", + "performance", + "ttl", + "expire", + "promise" + ], + "license": "MIT", + "name": "mem", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/mem.git" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "version": "4.3.0" +} diff --git a/node_modules/mem/readme.md b/node_modules/mem/readme.md new file mode 100644 index 00000000..add4222b --- /dev/null +++ b/node_modules/mem/readme.md @@ -0,0 +1,167 @@ +# mem [![Build Status](https://travis-ci.org/sindresorhus/mem.svg?branch=master)](https://travis-ci.org/sindresorhus/mem) + +> [Memoize](https://en.wikipedia.org/wiki/Memoization) functions - An optimization used to speed up consecutive function calls by caching the result of calls with identical input + +Memory is automatically released when an item expires. + + +## Install + +``` +$ npm install mem +``` + + +## Usage + +```js +const mem = require('mem'); + +let i = 0; +const counter = () => ++i; +const memoized = mem(counter); + +memoized('foo'); +//=> 1 + +// Cached as it's the same arguments +memoized('foo'); +//=> 1 + +// Not cached anymore as the arguments changed +memoized('bar'); +//=> 2 + +memoized('bar'); +//=> 2 +``` + +##### Works fine with promise returning functions + +```js +const mem = require('mem'); + +let i = 0; +const counter = async () => ++i; +const memoized = mem(counter); + +(async () => { + console.log(await memoized()); + //=> 1 + + // The return value didn't increase as it's cached + console.log(await memoized()); + //=> 1 +})(); +``` + +```js +const mem = require('mem'); +const got = require('got'); +const delay = require('delay'); + +const memGot = mem(got, {maxAge: 1000}); + +(async () => { + await memGot('sindresorhus.com'); + + // This call is cached + await memGot('sindresorhus.com'); + + await delay(2000); + + // This call is not cached as the cache has expired + await memGot('sindresorhus.com'); +})(); +``` + + +## API + +### mem(fn, [options]) + +#### fn + +Type: `Function` + +Function to be memoized. + +#### options + +Type: `Object` + +##### maxAge + +Type: `number`
+Default: `Infinity` + +Milliseconds until the cache expires. + +##### cacheKey + +Type: `Function` + +Determines the cache key for storing the result based on the function arguments. By default, if there's only one argument and it's a [primitive](https://developer.mozilla.org/en-US/docs/Glossary/Primitive), it's used directly as a key, otherwise it's all the function arguments JSON stringified as an array. + +You could for example change it to only cache on the first argument `x => JSON.stringify(x)`. + +##### cache + +Type: `Object`
+Default: `new Map()` + +Use a different cache storage. Must implement the following methods: `.has(key)`, `.get(key)`, `.set(key, value)`, `.delete(key)`, and optionally `.clear()`. You could for example use a `WeakMap` instead or [`quick-lru`](https://github.com/sindresorhus/quick-lru) for a LRU cache. + +##### cachePromiseRejection + +Type: `boolean`
+Default: `false` + +Cache rejected promises. + +### mem.clear(fn) + +Clear all cached data of a memoized function. + +#### fn + +Type: `Function` + +Memoized function. + + +## Tips + +### Cache statistics + +If you want to know how many times your cache had a hit or a miss, you can make use of [stats-map](https://github.com/SamVerschueren/stats-map) as a replacement for the default cache. + +#### Example + +```js +const mem = require('mem'); +const StatsMap = require('stats-map'); +const got = require('got'); + +const cache = new StatsMap(); +const memGot = mem(got, {cache}); + +(async () => { + await memGot('sindresorhus.com'); + await memGot('sindresorhus.com'); + await memGot('sindresorhus.com'); + + console.log(cache.stats); + //=> {hits: 2, misses: 1} +})(); +``` + + +## Related + +- [p-memoize](https://github.com/sindresorhus/p-memoize) - Memoize promise-returning & async functions + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/mimic-fn/index.d.ts b/node_modules/mimic-fn/index.d.ts new file mode 100644 index 00000000..b4047d58 --- /dev/null +++ b/node_modules/mimic-fn/index.d.ts @@ -0,0 +1,54 @@ +declare const mimicFn: { + /** + Make a function mimic another one. It will copy over the properties `name`, `length`, `displayName`, and any custom properties you may have set. + + @param to - Mimicking function. + @param from - Function to mimic. + @returns The modified `to` function. + + @example + ``` + import mimicFn = require('mimic-fn'); + + function foo() {} + foo.unicorn = '🦄'; + + function wrapper() { + return foo(); + } + + console.log(wrapper.name); + //=> 'wrapper' + + mimicFn(wrapper, foo); + + console.log(wrapper.name); + //=> 'foo' + + console.log(wrapper.unicorn); + //=> '🦄' + ``` + */ + < + ArgumentsType extends unknown[], + ReturnType, + FunctionType extends (...arguments: ArgumentsType) => ReturnType + >( + to: (...arguments: ArgumentsType) => ReturnType, + from: FunctionType + ): FunctionType; + + // TODO: Remove this for the next major release, refactor the whole definition to: + // declare function mimicFn< + // ArgumentsType extends unknown[], + // ReturnType, + // FunctionType extends (...arguments: ArgumentsType) => ReturnType + // >( + // to: (...arguments: ArgumentsType) => ReturnType, + // from: FunctionType + // ): FunctionType; + // export = mimicFn; + default: typeof mimicFn; +}; + +export = mimicFn; diff --git a/node_modules/mimic-fn/index.js b/node_modules/mimic-fn/index.js new file mode 100644 index 00000000..1a597051 --- /dev/null +++ b/node_modules/mimic-fn/index.js @@ -0,0 +1,13 @@ +'use strict'; + +const mimicFn = (to, from) => { + for (const prop of Reflect.ownKeys(from)) { + Object.defineProperty(to, prop, Object.getOwnPropertyDescriptor(from, prop)); + } + + return to; +}; + +module.exports = mimicFn; +// TODO: Remove this for the next major release +module.exports.default = mimicFn; diff --git a/node_modules/mimic-fn/license b/node_modules/mimic-fn/license new file mode 100644 index 00000000..e7af2f77 --- /dev/null +++ b/node_modules/mimic-fn/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/mimic-fn/package.json b/node_modules/mimic-fn/package.json new file mode 100644 index 00000000..a7f4f05f --- /dev/null +++ b/node_modules/mimic-fn/package.json @@ -0,0 +1,74 @@ +{ + "_from": "mimic-fn@^2.0.0", + "_id": "mimic-fn@2.1.0", + "_inBundle": false, + "_integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "_location": "/mimic-fn", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "mimic-fn@^2.0.0", + "name": "mimic-fn", + "escapedName": "mimic-fn", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/mem" + ], + "_resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "_shasum": "7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b", + "_spec": "mimic-fn@^2.0.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/mem", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/mimic-fn/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Make a function mimic another one", + "devDependencies": { + "ava": "^1.4.1", + "tsd": "^0.7.1", + "xo": "^0.24.0" + }, + "engines": { + "node": ">=6" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "homepage": "https://github.com/sindresorhus/mimic-fn#readme", + "keywords": [ + "function", + "mimic", + "imitate", + "rename", + "copy", + "inherit", + "properties", + "name", + "func", + "fn", + "set", + "infer", + "change" + ], + "license": "MIT", + "name": "mimic-fn", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/mimic-fn.git" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "version": "2.1.0" +} diff --git a/node_modules/mimic-fn/readme.md b/node_modules/mimic-fn/readme.md new file mode 100644 index 00000000..0ef8a13d --- /dev/null +++ b/node_modules/mimic-fn/readme.md @@ -0,0 +1,69 @@ +# mimic-fn [![Build Status](https://travis-ci.org/sindresorhus/mimic-fn.svg?branch=master)](https://travis-ci.org/sindresorhus/mimic-fn) + +> Make a function mimic another one + +Useful when you wrap a function in another function and like to preserve the original name and other properties. + + +## Install + +``` +$ npm install mimic-fn +``` + + +## Usage + +```js +const mimicFn = require('mimic-fn'); + +function foo() {} +foo.unicorn = '🦄'; + +function wrapper() { + return foo(); +} + +console.log(wrapper.name); +//=> 'wrapper' + +mimicFn(wrapper, foo); + +console.log(wrapper.name); +//=> 'foo' + +console.log(wrapper.unicorn); +//=> '🦄' +``` + + +## API + +It will copy over the properties `name`, `length`, `displayName`, and any custom properties you may have set. + +### mimicFn(to, from) + +Modifies the `to` function and returns it. + +#### to + +Type: `Function` + +Mimicking function. + +#### from + +Type: `Function` + +Function to mimic. + + +## Related + +- [rename-fn](https://github.com/sindresorhus/rename-fn) - Rename a function +- [keep-func-props](https://github.com/ehmicky/keep-func-props) - Wrap a function without changing its name, length and other properties + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/minimatch/LICENSE b/node_modules/minimatch/LICENSE new file mode 100644 index 00000000..19129e31 --- /dev/null +++ b/node_modules/minimatch/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/minimatch/README.md b/node_modules/minimatch/README.md new file mode 100644 index 00000000..ad72b813 --- /dev/null +++ b/node_modules/minimatch/README.md @@ -0,0 +1,209 @@ +# minimatch + +A minimal matching utility. + +[![Build Status](https://secure.travis-ci.org/isaacs/minimatch.svg)](http://travis-ci.org/isaacs/minimatch) + + +This is the matching library used internally by npm. + +It works by converting glob expressions into JavaScript `RegExp` +objects. + +## Usage + +```javascript +var minimatch = require("minimatch") + +minimatch("bar.foo", "*.foo") // true! +minimatch("bar.foo", "*.bar") // false! +minimatch("bar.foo", "*.+(bar|foo)", { debug: true }) // true, and noisy! +``` + +## Features + +Supports these glob features: + +* Brace Expansion +* Extended glob matching +* "Globstar" `**` matching + +See: + +* `man sh` +* `man bash` +* `man 3 fnmatch` +* `man 5 gitignore` + +## Minimatch Class + +Create a minimatch object by instantiating the `minimatch.Minimatch` class. + +```javascript +var Minimatch = require("minimatch").Minimatch +var mm = new Minimatch(pattern, options) +``` + +### Properties + +* `pattern` The original pattern the minimatch object represents. +* `options` The options supplied to the constructor. +* `set` A 2-dimensional array of regexp or string expressions. + Each row in the + array corresponds to a brace-expanded pattern. Each item in the row + corresponds to a single path-part. For example, the pattern + `{a,b/c}/d` would expand to a set of patterns like: + + [ [ a, d ] + , [ b, c, d ] ] + + If a portion of the pattern doesn't have any "magic" in it + (that is, it's something like `"foo"` rather than `fo*o?`), then it + will be left as a string rather than converted to a regular + expression. + +* `regexp` Created by the `makeRe` method. A single regular expression + expressing the entire pattern. This is useful in cases where you wish + to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled. +* `negate` True if the pattern is negated. +* `comment` True if the pattern is a comment. +* `empty` True if the pattern is `""`. + +### Methods + +* `makeRe` Generate the `regexp` member if necessary, and return it. + Will return `false` if the pattern is invalid. +* `match(fname)` Return true if the filename matches the pattern, or + false otherwise. +* `matchOne(fileArray, patternArray, partial)` Take a `/`-split + filename, and match it against a single row in the `regExpSet`. This + method is mainly for internal use, but is exposed so that it can be + used by a glob-walker that needs to avoid excessive filesystem calls. + +All other methods are internal, and will be called as necessary. + +### minimatch(path, pattern, options) + +Main export. Tests a path against the pattern using the options. + +```javascript +var isJS = minimatch(file, "*.js", { matchBase: true }) +``` + +### minimatch.filter(pattern, options) + +Returns a function that tests its +supplied argument, suitable for use with `Array.filter`. Example: + +```javascript +var javascripts = fileList.filter(minimatch.filter("*.js", {matchBase: true})) +``` + +### minimatch.match(list, pattern, options) + +Match against the list of +files, in the style of fnmatch or glob. If nothing is matched, and +options.nonull is set, then return a list containing the pattern itself. + +```javascript +var javascripts = minimatch.match(fileList, "*.js", {matchBase: true})) +``` + +### minimatch.makeRe(pattern, options) + +Make a regular expression object from the pattern. + +## Options + +All options are `false` by default. + +### debug + +Dump a ton of stuff to stderr. + +### nobrace + +Do not expand `{a,b}` and `{1..3}` brace sets. + +### noglobstar + +Disable `**` matching against multiple folder names. + +### dot + +Allow patterns to match filenames starting with a period, even if +the pattern does not explicitly have a period in that spot. + +Note that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot` +is set. + +### noext + +Disable "extglob" style patterns like `+(a|b)`. + +### nocase + +Perform a case-insensitive match. + +### nonull + +When a match is not found by `minimatch.match`, return a list containing +the pattern itself if this option is set. When not set, an empty list +is returned if there are no matches. + +### matchBase + +If set, then patterns without slashes will be matched +against the basename of the path if it contains slashes. For example, +`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`. + +### nocomment + +Suppress the behavior of treating `#` at the start of a pattern as a +comment. + +### nonegate + +Suppress the behavior of treating a leading `!` character as negation. + +### flipNegate + +Returns from negate expressions the same as if they were not negated. +(Ie, true on a hit, false on a miss.) + + +## Comparisons to other fnmatch/glob implementations + +While strict compliance with the existing standards is a worthwhile +goal, some discrepancies exist between minimatch and other +implementations, and are intentional. + +If the pattern starts with a `!` character, then it is negated. Set the +`nonegate` flag to suppress this behavior, and treat leading `!` +characters normally. This is perhaps relevant if you wish to start the +pattern with a negative extglob pattern like `!(a|B)`. Multiple `!` +characters at the start of a pattern will negate the pattern multiple +times. + +If a pattern starts with `#`, then it is treated as a comment, and +will not match anything. Use `\#` to match a literal `#` at the +start of a line, or set the `nocomment` flag to suppress this behavior. + +The double-star character `**` is supported by default, unless the +`noglobstar` flag is set. This is supported in the manner of bsdglob +and bash 4.1, where `**` only has special significance if it is the only +thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but +`a/**b` will not. + +If an escaped pattern has no matches, and the `nonull` flag is set, +then minimatch.match returns the pattern as-provided, rather than +interpreting the character escapes. For example, +`minimatch.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than +`"*a?"`. This is akin to setting the `nullglob` option in bash, except +that it does not resolve escaped pattern characters. + +If brace expansion is not disabled, then it is performed before any +other interpretation of the glob pattern. Thus, a pattern like +`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded +**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are +checked for validity. Since those two are valid, matching proceeds. diff --git a/node_modules/minimatch/minimatch.js b/node_modules/minimatch/minimatch.js new file mode 100644 index 00000000..5b5f8cf4 --- /dev/null +++ b/node_modules/minimatch/minimatch.js @@ -0,0 +1,923 @@ +module.exports = minimatch +minimatch.Minimatch = Minimatch + +var path = { sep: '/' } +try { + path = require('path') +} catch (er) {} + +var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {} +var expand = require('brace-expansion') + +var plTypes = { + '!': { open: '(?:(?!(?:', close: '))[^/]*?)'}, + '?': { open: '(?:', close: ')?' }, + '+': { open: '(?:', close: ')+' }, + '*': { open: '(?:', close: ')*' }, + '@': { open: '(?:', close: ')' } +} + +// any single thing other than / +// don't need to escape / when using new RegExp() +var qmark = '[^/]' + +// * => any number of characters +var star = qmark + '*?' + +// ** when dots are allowed. Anything goes, except .. and . +// not (^ or / followed by one or two dots followed by $ or /), +// followed by anything, any number of times. +var twoStarDot = '(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?' + +// not a ^ or / followed by a dot, +// followed by anything, any number of times. +var twoStarNoDot = '(?:(?!(?:\\\/|^)\\.).)*?' + +// characters that need to be escaped in RegExp. +var reSpecials = charSet('().*{}+?[]^$\\!') + +// "abc" -> { a:true, b:true, c:true } +function charSet (s) { + return s.split('').reduce(function (set, c) { + set[c] = true + return set + }, {}) +} + +// normalizes slashes. +var slashSplit = /\/+/ + +minimatch.filter = filter +function filter (pattern, options) { + options = options || {} + return function (p, i, list) { + return minimatch(p, pattern, options) + } +} + +function ext (a, b) { + a = a || {} + b = b || {} + var t = {} + Object.keys(b).forEach(function (k) { + t[k] = b[k] + }) + Object.keys(a).forEach(function (k) { + t[k] = a[k] + }) + return t +} + +minimatch.defaults = function (def) { + if (!def || !Object.keys(def).length) return minimatch + + var orig = minimatch + + var m = function minimatch (p, pattern, options) { + return orig.minimatch(p, pattern, ext(def, options)) + } + + m.Minimatch = function Minimatch (pattern, options) { + return new orig.Minimatch(pattern, ext(def, options)) + } + + return m +} + +Minimatch.defaults = function (def) { + if (!def || !Object.keys(def).length) return Minimatch + return minimatch.defaults(def).Minimatch +} + +function minimatch (p, pattern, options) { + if (typeof pattern !== 'string') { + throw new TypeError('glob pattern string required') + } + + if (!options) options = {} + + // shortcut: comments match nothing. + if (!options.nocomment && pattern.charAt(0) === '#') { + return false + } + + // "" only matches "" + if (pattern.trim() === '') return p === '' + + return new Minimatch(pattern, options).match(p) +} + +function Minimatch (pattern, options) { + if (!(this instanceof Minimatch)) { + return new Minimatch(pattern, options) + } + + if (typeof pattern !== 'string') { + throw new TypeError('glob pattern string required') + } + + if (!options) options = {} + pattern = pattern.trim() + + // windows support: need to use /, not \ + if (path.sep !== '/') { + pattern = pattern.split(path.sep).join('/') + } + + this.options = options + this.set = [] + this.pattern = pattern + this.regexp = null + this.negate = false + this.comment = false + this.empty = false + + // make the set of regexps etc. + this.make() +} + +Minimatch.prototype.debug = function () {} + +Minimatch.prototype.make = make +function make () { + // don't do it more than once. + if (this._made) return + + var pattern = this.pattern + var options = this.options + + // empty patterns and comments match nothing. + if (!options.nocomment && pattern.charAt(0) === '#') { + this.comment = true + return + } + if (!pattern) { + this.empty = true + return + } + + // step 1: figure out negation, etc. + this.parseNegate() + + // step 2: expand braces + var set = this.globSet = this.braceExpand() + + if (options.debug) this.debug = console.error + + this.debug(this.pattern, set) + + // step 3: now we have a set, so turn each one into a series of path-portion + // matching patterns. + // These will be regexps, except in the case of "**", which is + // set to the GLOBSTAR object for globstar behavior, + // and will not contain any / characters + set = this.globParts = set.map(function (s) { + return s.split(slashSplit) + }) + + this.debug(this.pattern, set) + + // glob --> regexps + set = set.map(function (s, si, set) { + return s.map(this.parse, this) + }, this) + + this.debug(this.pattern, set) + + // filter out everything that didn't compile properly. + set = set.filter(function (s) { + return s.indexOf(false) === -1 + }) + + this.debug(this.pattern, set) + + this.set = set +} + +Minimatch.prototype.parseNegate = parseNegate +function parseNegate () { + var pattern = this.pattern + var negate = false + var options = this.options + var negateOffset = 0 + + if (options.nonegate) return + + for (var i = 0, l = pattern.length + ; i < l && pattern.charAt(i) === '!' + ; i++) { + negate = !negate + negateOffset++ + } + + if (negateOffset) this.pattern = pattern.substr(negateOffset) + this.negate = negate +} + +// Brace expansion: +// a{b,c}d -> abd acd +// a{b,}c -> abc ac +// a{0..3}d -> a0d a1d a2d a3d +// a{b,c{d,e}f}g -> abg acdfg acefg +// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg +// +// Invalid sets are not expanded. +// a{2..}b -> a{2..}b +// a{b}c -> a{b}c +minimatch.braceExpand = function (pattern, options) { + return braceExpand(pattern, options) +} + +Minimatch.prototype.braceExpand = braceExpand + +function braceExpand (pattern, options) { + if (!options) { + if (this instanceof Minimatch) { + options = this.options + } else { + options = {} + } + } + + pattern = typeof pattern === 'undefined' + ? this.pattern : pattern + + if (typeof pattern === 'undefined') { + throw new TypeError('undefined pattern') + } + + if (options.nobrace || + !pattern.match(/\{.*\}/)) { + // shortcut. no need to expand. + return [pattern] + } + + return expand(pattern) +} + +// parse a component of the expanded set. +// At this point, no pattern may contain "/" in it +// so we're going to return a 2d array, where each entry is the full +// pattern, split on '/', and then turned into a regular expression. +// A regexp is made at the end which joins each array with an +// escaped /, and another full one which joins each regexp with |. +// +// Following the lead of Bash 4.1, note that "**" only has special meaning +// when it is the *only* thing in a path portion. Otherwise, any series +// of * is equivalent to a single *. Globstar behavior is enabled by +// default, and can be disabled by setting options.noglobstar. +Minimatch.prototype.parse = parse +var SUBPARSE = {} +function parse (pattern, isSub) { + if (pattern.length > 1024 * 64) { + throw new TypeError('pattern is too long') + } + + var options = this.options + + // shortcuts + if (!options.noglobstar && pattern === '**') return GLOBSTAR + if (pattern === '') return '' + + var re = '' + var hasMagic = !!options.nocase + var escaping = false + // ? => one single character + var patternListStack = [] + var negativeLists = [] + var stateChar + var inClass = false + var reClassStart = -1 + var classStart = -1 + // . and .. never match anything that doesn't start with ., + // even when options.dot is set. + var patternStart = pattern.charAt(0) === '.' ? '' // anything + // not (start or / followed by . or .. followed by / or end) + : options.dot ? '(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))' + : '(?!\\.)' + var self = this + + function clearStateChar () { + if (stateChar) { + // we had some state-tracking character + // that wasn't consumed by this pass. + switch (stateChar) { + case '*': + re += star + hasMagic = true + break + case '?': + re += qmark + hasMagic = true + break + default: + re += '\\' + stateChar + break + } + self.debug('clearStateChar %j %j', stateChar, re) + stateChar = false + } + } + + for (var i = 0, len = pattern.length, c + ; (i < len) && (c = pattern.charAt(i)) + ; i++) { + this.debug('%s\t%s %s %j', pattern, i, re, c) + + // skip over any that are escaped. + if (escaping && reSpecials[c]) { + re += '\\' + c + escaping = false + continue + } + + switch (c) { + case '/': + // completely not allowed, even escaped. + // Should already be path-split by now. + return false + + case '\\': + clearStateChar() + escaping = true + continue + + // the various stateChar values + // for the "extglob" stuff. + case '?': + case '*': + case '+': + case '@': + case '!': + this.debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c) + + // all of those are literals inside a class, except that + // the glob [!a] means [^a] in regexp + if (inClass) { + this.debug(' in class') + if (c === '!' && i === classStart + 1) c = '^' + re += c + continue + } + + // if we already have a stateChar, then it means + // that there was something like ** or +? in there. + // Handle the stateChar, then proceed with this one. + self.debug('call clearStateChar %j', stateChar) + clearStateChar() + stateChar = c + // if extglob is disabled, then +(asdf|foo) isn't a thing. + // just clear the statechar *now*, rather than even diving into + // the patternList stuff. + if (options.noext) clearStateChar() + continue + + case '(': + if (inClass) { + re += '(' + continue + } + + if (!stateChar) { + re += '\\(' + continue + } + + patternListStack.push({ + type: stateChar, + start: i - 1, + reStart: re.length, + open: plTypes[stateChar].open, + close: plTypes[stateChar].close + }) + // negation is (?:(?!js)[^/]*) + re += stateChar === '!' ? '(?:(?!(?:' : '(?:' + this.debug('plType %j %j', stateChar, re) + stateChar = false + continue + + case ')': + if (inClass || !patternListStack.length) { + re += '\\)' + continue + } + + clearStateChar() + hasMagic = true + var pl = patternListStack.pop() + // negation is (?:(?!js)[^/]*) + // The others are (?:) + re += pl.close + if (pl.type === '!') { + negativeLists.push(pl) + } + pl.reEnd = re.length + continue + + case '|': + if (inClass || !patternListStack.length || escaping) { + re += '\\|' + escaping = false + continue + } + + clearStateChar() + re += '|' + continue + + // these are mostly the same in regexp and glob + case '[': + // swallow any state-tracking char before the [ + clearStateChar() + + if (inClass) { + re += '\\' + c + continue + } + + inClass = true + classStart = i + reClassStart = re.length + re += c + continue + + case ']': + // a right bracket shall lose its special + // meaning and represent itself in + // a bracket expression if it occurs + // first in the list. -- POSIX.2 2.8.3.2 + if (i === classStart + 1 || !inClass) { + re += '\\' + c + escaping = false + continue + } + + // handle the case where we left a class open. + // "[z-a]" is valid, equivalent to "\[z-a\]" + if (inClass) { + // split where the last [ was, make sure we don't have + // an invalid re. if so, re-walk the contents of the + // would-be class to re-translate any characters that + // were passed through as-is + // TODO: It would probably be faster to determine this + // without a try/catch and a new RegExp, but it's tricky + // to do safely. For now, this is safe and works. + var cs = pattern.substring(classStart + 1, i) + try { + RegExp('[' + cs + ']') + } catch (er) { + // not a valid class! + var sp = this.parse(cs, SUBPARSE) + re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]' + hasMagic = hasMagic || sp[1] + inClass = false + continue + } + } + + // finish up the class. + hasMagic = true + inClass = false + re += c + continue + + default: + // swallow any state char that wasn't consumed + clearStateChar() + + if (escaping) { + // no need + escaping = false + } else if (reSpecials[c] + && !(c === '^' && inClass)) { + re += '\\' + } + + re += c + + } // switch + } // for + + // handle the case where we left a class open. + // "[abc" is valid, equivalent to "\[abc" + if (inClass) { + // split where the last [ was, and escape it + // this is a huge pita. We now have to re-walk + // the contents of the would-be class to re-translate + // any characters that were passed through as-is + cs = pattern.substr(classStart + 1) + sp = this.parse(cs, SUBPARSE) + re = re.substr(0, reClassStart) + '\\[' + sp[0] + hasMagic = hasMagic || sp[1] + } + + // handle the case where we had a +( thing at the *end* + // of the pattern. + // each pattern list stack adds 3 chars, and we need to go through + // and escape any | chars that were passed through as-is for the regexp. + // Go through and escape them, taking care not to double-escape any + // | chars that were already escaped. + for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) { + var tail = re.slice(pl.reStart + pl.open.length) + this.debug('setting tail', re, pl) + // maybe some even number of \, then maybe 1 \, followed by a | + tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, function (_, $1, $2) { + if (!$2) { + // the | isn't already escaped, so escape it. + $2 = '\\' + } + + // need to escape all those slashes *again*, without escaping the + // one that we need for escaping the | character. As it works out, + // escaping an even number of slashes can be done by simply repeating + // it exactly after itself. That's why this trick works. + // + // I am sorry that you have to see this. + return $1 + $1 + $2 + '|' + }) + + this.debug('tail=%j\n %s', tail, tail, pl, re) + var t = pl.type === '*' ? star + : pl.type === '?' ? qmark + : '\\' + pl.type + + hasMagic = true + re = re.slice(0, pl.reStart) + t + '\\(' + tail + } + + // handle trailing things that only matter at the very end. + clearStateChar() + if (escaping) { + // trailing \\ + re += '\\\\' + } + + // only need to apply the nodot start if the re starts with + // something that could conceivably capture a dot + var addPatternStart = false + switch (re.charAt(0)) { + case '.': + case '[': + case '(': addPatternStart = true + } + + // Hack to work around lack of negative lookbehind in JS + // A pattern like: *.!(x).!(y|z) needs to ensure that a name + // like 'a.xyz.yz' doesn't match. So, the first negative + // lookahead, has to look ALL the way ahead, to the end of + // the pattern. + for (var n = negativeLists.length - 1; n > -1; n--) { + var nl = negativeLists[n] + + var nlBefore = re.slice(0, nl.reStart) + var nlFirst = re.slice(nl.reStart, nl.reEnd - 8) + var nlLast = re.slice(nl.reEnd - 8, nl.reEnd) + var nlAfter = re.slice(nl.reEnd) + + nlLast += nlAfter + + // Handle nested stuff like *(*.js|!(*.json)), where open parens + // mean that we should *not* include the ) in the bit that is considered + // "after" the negated section. + var openParensBefore = nlBefore.split('(').length - 1 + var cleanAfter = nlAfter + for (i = 0; i < openParensBefore; i++) { + cleanAfter = cleanAfter.replace(/\)[+*?]?/, '') + } + nlAfter = cleanAfter + + var dollar = '' + if (nlAfter === '' && isSub !== SUBPARSE) { + dollar = '$' + } + var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast + re = newRe + } + + // if the re is not "" at this point, then we need to make sure + // it doesn't match against an empty path part. + // Otherwise a/* will match a/, which it should not. + if (re !== '' && hasMagic) { + re = '(?=.)' + re + } + + if (addPatternStart) { + re = patternStart + re + } + + // parsing just a piece of a larger pattern. + if (isSub === SUBPARSE) { + return [re, hasMagic] + } + + // skip the regexp for non-magical patterns + // unescape anything in it, though, so that it'll be + // an exact match against a file etc. + if (!hasMagic) { + return globUnescape(pattern) + } + + var flags = options.nocase ? 'i' : '' + try { + var regExp = new RegExp('^' + re + '$', flags) + } catch (er) { + // If it was an invalid regular expression, then it can't match + // anything. This trick looks for a character after the end of + // the string, which is of course impossible, except in multi-line + // mode, but it's not a /m regex. + return new RegExp('$.') + } + + regExp._glob = pattern + regExp._src = re + + return regExp +} + +minimatch.makeRe = function (pattern, options) { + return new Minimatch(pattern, options || {}).makeRe() +} + +Minimatch.prototype.makeRe = makeRe +function makeRe () { + if (this.regexp || this.regexp === false) return this.regexp + + // at this point, this.set is a 2d array of partial + // pattern strings, or "**". + // + // It's better to use .match(). This function shouldn't + // be used, really, but it's pretty convenient sometimes, + // when you just want to work with a regex. + var set = this.set + + if (!set.length) { + this.regexp = false + return this.regexp + } + var options = this.options + + var twoStar = options.noglobstar ? star + : options.dot ? twoStarDot + : twoStarNoDot + var flags = options.nocase ? 'i' : '' + + var re = set.map(function (pattern) { + return pattern.map(function (p) { + return (p === GLOBSTAR) ? twoStar + : (typeof p === 'string') ? regExpEscape(p) + : p._src + }).join('\\\/') + }).join('|') + + // must match entire pattern + // ending in a * or ** will make it less strict. + re = '^(?:' + re + ')$' + + // can match anything, as long as it's not this. + if (this.negate) re = '^(?!' + re + ').*$' + + try { + this.regexp = new RegExp(re, flags) + } catch (ex) { + this.regexp = false + } + return this.regexp +} + +minimatch.match = function (list, pattern, options) { + options = options || {} + var mm = new Minimatch(pattern, options) + list = list.filter(function (f) { + return mm.match(f) + }) + if (mm.options.nonull && !list.length) { + list.push(pattern) + } + return list +} + +Minimatch.prototype.match = match +function match (f, partial) { + this.debug('match', f, this.pattern) + // short-circuit in the case of busted things. + // comments, etc. + if (this.comment) return false + if (this.empty) return f === '' + + if (f === '/' && partial) return true + + var options = this.options + + // windows: need to use /, not \ + if (path.sep !== '/') { + f = f.split(path.sep).join('/') + } + + // treat the test path as a set of pathparts. + f = f.split(slashSplit) + this.debug(this.pattern, 'split', f) + + // just ONE of the pattern sets in this.set needs to match + // in order for it to be valid. If negating, then just one + // match means that we have failed. + // Either way, return on the first hit. + + var set = this.set + this.debug(this.pattern, 'set', set) + + // Find the basename of the path by looking for the last non-empty segment + var filename + var i + for (i = f.length - 1; i >= 0; i--) { + filename = f[i] + if (filename) break + } + + for (i = 0; i < set.length; i++) { + var pattern = set[i] + var file = f + if (options.matchBase && pattern.length === 1) { + file = [filename] + } + var hit = this.matchOne(file, pattern, partial) + if (hit) { + if (options.flipNegate) return true + return !this.negate + } + } + + // didn't get any hits. this is success if it's a negative + // pattern, failure otherwise. + if (options.flipNegate) return false + return this.negate +} + +// set partial to true to test if, for example, +// "/a/b" matches the start of "/*/b/*/d" +// Partial means, if you run out of file before you run +// out of pattern, then that's fine, as long as all +// the parts match. +Minimatch.prototype.matchOne = function (file, pattern, partial) { + var options = this.options + + this.debug('matchOne', + { 'this': this, file: file, pattern: pattern }) + + this.debug('matchOne', file.length, pattern.length) + + for (var fi = 0, + pi = 0, + fl = file.length, + pl = pattern.length + ; (fi < fl) && (pi < pl) + ; fi++, pi++) { + this.debug('matchOne loop') + var p = pattern[pi] + var f = file[fi] + + this.debug(pattern, p, f) + + // should be impossible. + // some invalid regexp stuff in the set. + if (p === false) return false + + if (p === GLOBSTAR) { + this.debug('GLOBSTAR', [pattern, p, f]) + + // "**" + // a/**/b/**/c would match the following: + // a/b/x/y/z/c + // a/x/y/z/b/c + // a/b/x/b/x/c + // a/b/c + // To do this, take the rest of the pattern after + // the **, and see if it would match the file remainder. + // If so, return success. + // If not, the ** "swallows" a segment, and try again. + // This is recursively awful. + // + // a/**/b/**/c matching a/b/x/y/z/c + // - a matches a + // - doublestar + // - matchOne(b/x/y/z/c, b/**/c) + // - b matches b + // - doublestar + // - matchOne(x/y/z/c, c) -> no + // - matchOne(y/z/c, c) -> no + // - matchOne(z/c, c) -> no + // - matchOne(c, c) yes, hit + var fr = fi + var pr = pi + 1 + if (pr === pl) { + this.debug('** at the end') + // a ** at the end will just swallow the rest. + // We have found a match. + // however, it will not swallow /.x, unless + // options.dot is set. + // . and .. are *never* matched by **, for explosively + // exponential reasons. + for (; fi < fl; fi++) { + if (file[fi] === '.' || file[fi] === '..' || + (!options.dot && file[fi].charAt(0) === '.')) return false + } + return true + } + + // ok, let's see if we can swallow whatever we can. + while (fr < fl) { + var swallowee = file[fr] + + this.debug('\nglobstar while', file, fr, pattern, pr, swallowee) + + // XXX remove this slice. Just pass the start index. + if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) { + this.debug('globstar found match!', fr, fl, swallowee) + // found a match. + return true + } else { + // can't swallow "." or ".." ever. + // can only swallow ".foo" when explicitly asked. + if (swallowee === '.' || swallowee === '..' || + (!options.dot && swallowee.charAt(0) === '.')) { + this.debug('dot detected!', file, fr, pattern, pr) + break + } + + // ** swallows a segment, and continue. + this.debug('globstar swallow a segment, and continue') + fr++ + } + } + + // no match was found. + // However, in partial mode, we can't say this is necessarily over. + // If there's more *pattern* left, then + if (partial) { + // ran out of file + this.debug('\n>>> no match, partial?', file, fr, pattern, pr) + if (fr === fl) return true + } + return false + } + + // something other than ** + // non-magic patterns just have to match exactly + // patterns with magic have been turned into regexps. + var hit + if (typeof p === 'string') { + if (options.nocase) { + hit = f.toLowerCase() === p.toLowerCase() + } else { + hit = f === p + } + this.debug('string match', p, f, hit) + } else { + hit = f.match(p) + this.debug('pattern match', p, f, hit) + } + + if (!hit) return false + } + + // Note: ending in / means that we'll get a final "" + // at the end of the pattern. This can only match a + // corresponding "" at the end of the file. + // If the file ends in /, then it can only match a + // a pattern that ends in /, unless the pattern just + // doesn't have any more for it. But, a/b/ should *not* + // match "a/b/*", even though "" matches against the + // [^/]*? pattern, except in partial mode, where it might + // simply not be reached yet. + // However, a/b/ should still satisfy a/* + + // now either we fell off the end of the pattern, or we're done. + if (fi === fl && pi === pl) { + // ran out of pattern and filename at the same time. + // an exact hit! + return true + } else if (fi === fl) { + // ran out of file, but still had pattern left. + // this is ok if we're doing the match as part of + // a glob fs traversal. + return partial + } else if (pi === pl) { + // ran out of pattern, still have file left. + // this is only acceptable if we're on the very last + // empty segment of a file with a trailing slash. + // a/* should match a/b/ + var emptyFileEnd = (fi === fl - 1) && (file[fi] === '') + return emptyFileEnd + } + + // should be unreachable. + throw new Error('wtf?') +} + +// replace stuff like \* with * +function globUnescape (s) { + return s.replace(/\\(.)/g, '$1') +} + +function regExpEscape (s) { + return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') +} diff --git a/node_modules/minimatch/package.json b/node_modules/minimatch/package.json new file mode 100644 index 00000000..6b8af9a8 --- /dev/null +++ b/node_modules/minimatch/package.json @@ -0,0 +1,63 @@ +{ + "_from": "minimatch@^3.0.4", + "_id": "minimatch@3.0.4", + "_inBundle": false, + "_integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "_location": "/minimatch", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "minimatch@^3.0.4", + "name": "minimatch", + "escapedName": "minimatch", + "rawSpec": "^3.0.4", + "saveSpec": null, + "fetchSpec": "^3.0.4" + }, + "_requiredBy": [ + "/glob" + ], + "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "_shasum": "5166e286457f03306064be5497e8dbb0c3d32083", + "_spec": "minimatch@^3.0.4", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/glob", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me" + }, + "bugs": { + "url": "https://github.com/isaacs/minimatch/issues" + }, + "bundleDependencies": false, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "deprecated": false, + "description": "a glob matcher in javascript", + "devDependencies": { + "tap": "^10.3.2" + }, + "engines": { + "node": "*" + }, + "files": [ + "minimatch.js" + ], + "homepage": "https://github.com/isaacs/minimatch#readme", + "license": "ISC", + "main": "minimatch.js", + "name": "minimatch", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/minimatch.git" + }, + "scripts": { + "postpublish": "git push origin --all; git push origin --tags", + "postversion": "npm publish", + "preversion": "npm test", + "test": "tap test/*.js --cov" + }, + "version": "3.0.4" +} diff --git a/node_modules/mkdirp/.travis.yml b/node_modules/mkdirp/.travis.yml new file mode 100644 index 00000000..74c57bf1 --- /dev/null +++ b/node_modules/mkdirp/.travis.yml @@ -0,0 +1,8 @@ +language: node_js +node_js: + - "0.8" + - "0.10" + - "0.12" + - "iojs" +before_install: + - npm install -g npm@~1.4.6 diff --git a/node_modules/mkdirp/LICENSE b/node_modules/mkdirp/LICENSE new file mode 100644 index 00000000..432d1aeb --- /dev/null +++ b/node_modules/mkdirp/LICENSE @@ -0,0 +1,21 @@ +Copyright 2010 James Halliday (mail@substack.net) + +This project is free software released under the MIT/X11 license: + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/mkdirp/bin/cmd.js b/node_modules/mkdirp/bin/cmd.js new file mode 100755 index 00000000..d95de15a --- /dev/null +++ b/node_modules/mkdirp/bin/cmd.js @@ -0,0 +1,33 @@ +#!/usr/bin/env node + +var mkdirp = require('../'); +var minimist = require('minimist'); +var fs = require('fs'); + +var argv = minimist(process.argv.slice(2), { + alias: { m: 'mode', h: 'help' }, + string: [ 'mode' ] +}); +if (argv.help) { + fs.createReadStream(__dirname + '/usage.txt').pipe(process.stdout); + return; +} + +var paths = argv._.slice(); +var mode = argv.mode ? parseInt(argv.mode, 8) : undefined; + +(function next () { + if (paths.length === 0) return; + var p = paths.shift(); + + if (mode === undefined) mkdirp(p, cb) + else mkdirp(p, mode, cb) + + function cb (err) { + if (err) { + console.error(err.message); + process.exit(1); + } + else next(); + } +})(); diff --git a/node_modules/mkdirp/bin/usage.txt b/node_modules/mkdirp/bin/usage.txt new file mode 100644 index 00000000..f952aa2c --- /dev/null +++ b/node_modules/mkdirp/bin/usage.txt @@ -0,0 +1,12 @@ +usage: mkdirp [DIR1,DIR2..] {OPTIONS} + + Create each supplied directory including any necessary parent directories that + don't yet exist. + + If the directory already exists, do nothing. + +OPTIONS are: + + -m, --mode If a directory needs to be created, set the mode as an octal + permission string. + diff --git a/node_modules/mkdirp/examples/pow.js b/node_modules/mkdirp/examples/pow.js new file mode 100644 index 00000000..e6924212 --- /dev/null +++ b/node_modules/mkdirp/examples/pow.js @@ -0,0 +1,6 @@ +var mkdirp = require('mkdirp'); + +mkdirp('/tmp/foo/bar/baz', function (err) { + if (err) console.error(err) + else console.log('pow!') +}); diff --git a/node_modules/mkdirp/index.js b/node_modules/mkdirp/index.js new file mode 100644 index 00000000..6ce241b5 --- /dev/null +++ b/node_modules/mkdirp/index.js @@ -0,0 +1,98 @@ +var path = require('path'); +var fs = require('fs'); +var _0777 = parseInt('0777', 8); + +module.exports = mkdirP.mkdirp = mkdirP.mkdirP = mkdirP; + +function mkdirP (p, opts, f, made) { + if (typeof opts === 'function') { + f = opts; + opts = {}; + } + else if (!opts || typeof opts !== 'object') { + opts = { mode: opts }; + } + + var mode = opts.mode; + var xfs = opts.fs || fs; + + if (mode === undefined) { + mode = _0777 & (~process.umask()); + } + if (!made) made = null; + + var cb = f || function () {}; + p = path.resolve(p); + + xfs.mkdir(p, mode, function (er) { + if (!er) { + made = made || p; + return cb(null, made); + } + switch (er.code) { + case 'ENOENT': + mkdirP(path.dirname(p), opts, function (er, made) { + if (er) cb(er, made); + else mkdirP(p, opts, cb, made); + }); + break; + + // In the case of any other error, just see if there's a dir + // there already. If so, then hooray! If not, then something + // is borked. + default: + xfs.stat(p, function (er2, stat) { + // if the stat fails, then that's super weird. + // let the original error be the failure reason. + if (er2 || !stat.isDirectory()) cb(er, made) + else cb(null, made); + }); + break; + } + }); +} + +mkdirP.sync = function sync (p, opts, made) { + if (!opts || typeof opts !== 'object') { + opts = { mode: opts }; + } + + var mode = opts.mode; + var xfs = opts.fs || fs; + + if (mode === undefined) { + mode = _0777 & (~process.umask()); + } + if (!made) made = null; + + p = path.resolve(p); + + try { + xfs.mkdirSync(p, mode); + made = made || p; + } + catch (err0) { + switch (err0.code) { + case 'ENOENT' : + made = sync(path.dirname(p), opts, made); + sync(p, opts, made); + break; + + // In the case of any other error, just see if there's a dir + // there already. If so, then hooray! If not, then something + // is borked. + default: + var stat; + try { + stat = xfs.statSync(p); + } + catch (err1) { + throw err0; + } + if (!stat.isDirectory()) throw err0; + break; + } + } + + return made; +}; diff --git a/node_modules/mkdirp/node_modules/minimist/.travis.yml b/node_modules/mkdirp/node_modules/minimist/.travis.yml new file mode 100644 index 00000000..cc4dba29 --- /dev/null +++ b/node_modules/mkdirp/node_modules/minimist/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +node_js: + - "0.8" + - "0.10" diff --git a/node_modules/mkdirp/node_modules/minimist/LICENSE b/node_modules/mkdirp/node_modules/minimist/LICENSE new file mode 100644 index 00000000..ee27ba4b --- /dev/null +++ b/node_modules/mkdirp/node_modules/minimist/LICENSE @@ -0,0 +1,18 @@ +This software is released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/mkdirp/node_modules/minimist/example/parse.js b/node_modules/mkdirp/node_modules/minimist/example/parse.js new file mode 100644 index 00000000..abff3e8e --- /dev/null +++ b/node_modules/mkdirp/node_modules/minimist/example/parse.js @@ -0,0 +1,2 @@ +var argv = require('../')(process.argv.slice(2)); +console.dir(argv); diff --git a/node_modules/mkdirp/node_modules/minimist/index.js b/node_modules/mkdirp/node_modules/minimist/index.js new file mode 100644 index 00000000..584f551a --- /dev/null +++ b/node_modules/mkdirp/node_modules/minimist/index.js @@ -0,0 +1,187 @@ +module.exports = function (args, opts) { + if (!opts) opts = {}; + + var flags = { bools : {}, strings : {} }; + + [].concat(opts['boolean']).filter(Boolean).forEach(function (key) { + flags.bools[key] = true; + }); + + [].concat(opts.string).filter(Boolean).forEach(function (key) { + flags.strings[key] = true; + }); + + var aliases = {}; + Object.keys(opts.alias || {}).forEach(function (key) { + aliases[key] = [].concat(opts.alias[key]); + aliases[key].forEach(function (x) { + aliases[x] = [key].concat(aliases[key].filter(function (y) { + return x !== y; + })); + }); + }); + + var defaults = opts['default'] || {}; + + var argv = { _ : [] }; + Object.keys(flags.bools).forEach(function (key) { + setArg(key, defaults[key] === undefined ? false : defaults[key]); + }); + + var notFlags = []; + + if (args.indexOf('--') !== -1) { + notFlags = args.slice(args.indexOf('--')+1); + args = args.slice(0, args.indexOf('--')); + } + + function setArg (key, val) { + var value = !flags.strings[key] && isNumber(val) + ? Number(val) : val + ; + setKey(argv, key.split('.'), value); + + (aliases[key] || []).forEach(function (x) { + setKey(argv, x.split('.'), value); + }); + } + + for (var i = 0; i < args.length; i++) { + var arg = args[i]; + + if (/^--.+=/.test(arg)) { + // Using [\s\S] instead of . because js doesn't support the + // 'dotall' regex modifier. See: + // http://stackoverflow.com/a/1068308/13216 + var m = arg.match(/^--([^=]+)=([\s\S]*)$/); + setArg(m[1], m[2]); + } + else if (/^--no-.+/.test(arg)) { + var key = arg.match(/^--no-(.+)/)[1]; + setArg(key, false); + } + else if (/^--.+/.test(arg)) { + var key = arg.match(/^--(.+)/)[1]; + var next = args[i + 1]; + if (next !== undefined && !/^-/.test(next) + && !flags.bools[key] + && (aliases[key] ? !flags.bools[aliases[key]] : true)) { + setArg(key, next); + i++; + } + else if (/^(true|false)$/.test(next)) { + setArg(key, next === 'true'); + i++; + } + else { + setArg(key, flags.strings[key] ? '' : true); + } + } + else if (/^-[^-]+/.test(arg)) { + var letters = arg.slice(1,-1).split(''); + + var broken = false; + for (var j = 0; j < letters.length; j++) { + var next = arg.slice(j+2); + + if (next === '-') { + setArg(letters[j], next) + continue; + } + + if (/[A-Za-z]/.test(letters[j]) + && /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) { + setArg(letters[j], next); + broken = true; + break; + } + + if (letters[j+1] && letters[j+1].match(/\W/)) { + setArg(letters[j], arg.slice(j+2)); + broken = true; + break; + } + else { + setArg(letters[j], flags.strings[letters[j]] ? '' : true); + } + } + + var key = arg.slice(-1)[0]; + if (!broken && key !== '-') { + if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1]) + && !flags.bools[key] + && (aliases[key] ? !flags.bools[aliases[key]] : true)) { + setArg(key, args[i+1]); + i++; + } + else if (args[i+1] && /true|false/.test(args[i+1])) { + setArg(key, args[i+1] === 'true'); + i++; + } + else { + setArg(key, flags.strings[key] ? '' : true); + } + } + } + else { + argv._.push( + flags.strings['_'] || !isNumber(arg) ? arg : Number(arg) + ); + } + } + + Object.keys(defaults).forEach(function (key) { + if (!hasKey(argv, key.split('.'))) { + setKey(argv, key.split('.'), defaults[key]); + + (aliases[key] || []).forEach(function (x) { + setKey(argv, x.split('.'), defaults[key]); + }); + } + }); + + notFlags.forEach(function(key) { + argv._.push(key); + }); + + return argv; +}; + +function hasKey (obj, keys) { + var o = obj; + keys.slice(0,-1).forEach(function (key) { + o = (o[key] || {}); + }); + + var key = keys[keys.length - 1]; + return key in o; +} + +function setKey (obj, keys, value) { + var o = obj; + keys.slice(0,-1).forEach(function (key) { + if (o[key] === undefined) o[key] = {}; + o = o[key]; + }); + + var key = keys[keys.length - 1]; + if (o[key] === undefined || typeof o[key] === 'boolean') { + o[key] = value; + } + else if (Array.isArray(o[key])) { + o[key].push(value); + } + else { + o[key] = [ o[key], value ]; + } +} + +function isNumber (x) { + if (typeof x === 'number') return true; + if (/^0x[0-9a-f]+$/i.test(x)) return true; + return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x); +} + +function longest (xs) { + return Math.max.apply(null, xs.map(function (x) { return x.length })); +} diff --git a/node_modules/mkdirp/node_modules/minimist/package.json b/node_modules/mkdirp/node_modules/minimist/package.json new file mode 100644 index 00000000..11b7fe2b --- /dev/null +++ b/node_modules/mkdirp/node_modules/minimist/package.json @@ -0,0 +1,71 @@ +{ + "_from": "minimist@0.0.8", + "_id": "minimist@0.0.8", + "_inBundle": false, + "_integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "_location": "/mkdirp/minimist", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "minimist@0.0.8", + "name": "minimist", + "escapedName": "minimist", + "rawSpec": "0.0.8", + "saveSpec": null, + "fetchSpec": "0.0.8" + }, + "_requiredBy": [ + "/mkdirp" + ], + "_resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "_shasum": "857fcabfc3397d2625b8228262e86aa7a011b05d", + "_spec": "minimist@0.0.8", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/mkdirp", + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "bugs": { + "url": "https://github.com/substack/minimist/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "parse argument options", + "devDependencies": { + "tap": "~0.4.0", + "tape": "~1.0.4" + }, + "homepage": "https://github.com/substack/minimist", + "keywords": [ + "argv", + "getopt", + "parser", + "optimist" + ], + "license": "MIT", + "main": "index.js", + "name": "minimist", + "repository": { + "type": "git", + "url": "git://github.com/substack/minimist.git" + }, + "scripts": { + "test": "tap test/*.js" + }, + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/6..latest", + "ff/5", + "firefox/latest", + "chrome/10", + "chrome/latest", + "safari/5.1", + "safari/latest", + "opera/12" + ] + }, + "version": "0.0.8" +} diff --git a/node_modules/mkdirp/node_modules/minimist/readme.markdown b/node_modules/mkdirp/node_modules/minimist/readme.markdown new file mode 100644 index 00000000..c2563532 --- /dev/null +++ b/node_modules/mkdirp/node_modules/minimist/readme.markdown @@ -0,0 +1,73 @@ +# minimist + +parse argument options + +This module is the guts of optimist's argument parser without all the +fanciful decoration. + +[![browser support](https://ci.testling.com/substack/minimist.png)](http://ci.testling.com/substack/minimist) + +[![build status](https://secure.travis-ci.org/substack/minimist.png)](http://travis-ci.org/substack/minimist) + +# example + +``` js +var argv = require('minimist')(process.argv.slice(2)); +console.dir(argv); +``` + +``` +$ node example/parse.js -a beep -b boop +{ _: [], a: 'beep', b: 'boop' } +``` + +``` +$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz +{ _: [ 'foo', 'bar', 'baz' ], + x: 3, + y: 4, + n: 5, + a: true, + b: true, + c: true, + beep: 'boop' } +``` + +# methods + +``` js +var parseArgs = require('minimist') +``` + +## var argv = parseArgs(args, opts={}) + +Return an argument object `argv` populated with the array arguments from `args`. + +`argv._` contains all the arguments that didn't have an option associated with +them. + +Numeric-looking arguments will be returned as numbers unless `opts.string` or +`opts.boolean` is set for that argument name. + +Any arguments after `'--'` will not be parsed and will end up in `argv._`. + +options can be: + +* `opts.string` - a string or array of strings argument names to always treat as +strings +* `opts.boolean` - a string or array of strings to always treat as booleans +* `opts.alias` - an object mapping string names to strings or arrays of string +argument names to use as aliases +* `opts.default` - an object mapping string argument names to default values + +# install + +With [npm](https://npmjs.org) do: + +``` +npm install minimist +``` + +# license + +MIT diff --git a/node_modules/mkdirp/node_modules/minimist/test/dash.js b/node_modules/mkdirp/node_modules/minimist/test/dash.js new file mode 100644 index 00000000..8b034b99 --- /dev/null +++ b/node_modules/mkdirp/node_modules/minimist/test/dash.js @@ -0,0 +1,24 @@ +var parse = require('../'); +var test = require('tape'); + +test('-', function (t) { + t.plan(5); + t.deepEqual(parse([ '-n', '-' ]), { n: '-', _: [] }); + t.deepEqual(parse([ '-' ]), { _: [ '-' ] }); + t.deepEqual(parse([ '-f-' ]), { f: '-', _: [] }); + t.deepEqual( + parse([ '-b', '-' ], { boolean: 'b' }), + { b: true, _: [ '-' ] } + ); + t.deepEqual( + parse([ '-s', '-' ], { string: 's' }), + { s: '-', _: [] } + ); +}); + +test('-a -- b', function (t) { + t.plan(3); + t.deepEqual(parse([ '-a', '--', 'b' ]), { a: true, _: [ 'b' ] }); + t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] }); + t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] }); +}); diff --git a/node_modules/mkdirp/node_modules/minimist/test/default_bool.js b/node_modules/mkdirp/node_modules/minimist/test/default_bool.js new file mode 100644 index 00000000..f0041ee4 --- /dev/null +++ b/node_modules/mkdirp/node_modules/minimist/test/default_bool.js @@ -0,0 +1,20 @@ +var test = require('tape'); +var parse = require('../'); + +test('boolean default true', function (t) { + var argv = parse([], { + boolean: 'sometrue', + default: { sometrue: true } + }); + t.equal(argv.sometrue, true); + t.end(); +}); + +test('boolean default false', function (t) { + var argv = parse([], { + boolean: 'somefalse', + default: { somefalse: false } + }); + t.equal(argv.somefalse, false); + t.end(); +}); diff --git a/node_modules/mkdirp/node_modules/minimist/test/dotted.js b/node_modules/mkdirp/node_modules/minimist/test/dotted.js new file mode 100644 index 00000000..ef0ae349 --- /dev/null +++ b/node_modules/mkdirp/node_modules/minimist/test/dotted.js @@ -0,0 +1,16 @@ +var parse = require('../'); +var test = require('tape'); + +test('dotted alias', function (t) { + var argv = parse(['--a.b', '22'], {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}}); + t.equal(argv.a.b, 22); + t.equal(argv.aa.bb, 22); + t.end(); +}); + +test('dotted default', function (t) { + var argv = parse('', {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}}); + t.equal(argv.a.b, 11); + t.equal(argv.aa.bb, 11); + t.end(); +}); diff --git a/node_modules/mkdirp/node_modules/minimist/test/long.js b/node_modules/mkdirp/node_modules/minimist/test/long.js new file mode 100644 index 00000000..5d3a1e09 --- /dev/null +++ b/node_modules/mkdirp/node_modules/minimist/test/long.js @@ -0,0 +1,31 @@ +var test = require('tape'); +var parse = require('../'); + +test('long opts', function (t) { + t.deepEqual( + parse([ '--bool' ]), + { bool : true, _ : [] }, + 'long boolean' + ); + t.deepEqual( + parse([ '--pow', 'xixxle' ]), + { pow : 'xixxle', _ : [] }, + 'long capture sp' + ); + t.deepEqual( + parse([ '--pow=xixxle' ]), + { pow : 'xixxle', _ : [] }, + 'long capture eq' + ); + t.deepEqual( + parse([ '--host', 'localhost', '--port', '555' ]), + { host : 'localhost', port : 555, _ : [] }, + 'long captures sp' + ); + t.deepEqual( + parse([ '--host=localhost', '--port=555' ]), + { host : 'localhost', port : 555, _ : [] }, + 'long captures eq' + ); + t.end(); +}); diff --git a/node_modules/mkdirp/node_modules/minimist/test/parse.js b/node_modules/mkdirp/node_modules/minimist/test/parse.js new file mode 100644 index 00000000..8a906466 --- /dev/null +++ b/node_modules/mkdirp/node_modules/minimist/test/parse.js @@ -0,0 +1,318 @@ +var parse = require('../'); +var test = require('tape'); + +test('parse args', function (t) { + t.deepEqual( + parse([ '--no-moo' ]), + { moo : false, _ : [] }, + 'no' + ); + t.deepEqual( + parse([ '-v', 'a', '-v', 'b', '-v', 'c' ]), + { v : ['a','b','c'], _ : [] }, + 'multi' + ); + t.end(); +}); + +test('comprehensive', function (t) { + t.deepEqual( + parse([ + '--name=meowmers', 'bare', '-cats', 'woo', + '-h', 'awesome', '--multi=quux', + '--key', 'value', + '-b', '--bool', '--no-meep', '--multi=baz', + '--', '--not-a-flag', 'eek' + ]), + { + c : true, + a : true, + t : true, + s : 'woo', + h : 'awesome', + b : true, + bool : true, + key : 'value', + multi : [ 'quux', 'baz' ], + meep : false, + name : 'meowmers', + _ : [ 'bare', '--not-a-flag', 'eek' ] + } + ); + t.end(); +}); + +test('nums', function (t) { + var argv = parse([ + '-x', '1234', + '-y', '5.67', + '-z', '1e7', + '-w', '10f', + '--hex', '0xdeadbeef', + '789' + ]); + t.deepEqual(argv, { + x : 1234, + y : 5.67, + z : 1e7, + w : '10f', + hex : 0xdeadbeef, + _ : [ 789 ] + }); + t.deepEqual(typeof argv.x, 'number'); + t.deepEqual(typeof argv.y, 'number'); + t.deepEqual(typeof argv.z, 'number'); + t.deepEqual(typeof argv.w, 'string'); + t.deepEqual(typeof argv.hex, 'number'); + t.deepEqual(typeof argv._[0], 'number'); + t.end(); +}); + +test('flag boolean', function (t) { + var argv = parse([ '-t', 'moo' ], { boolean: 't' }); + t.deepEqual(argv, { t : true, _ : [ 'moo' ] }); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); +}); + +test('flag boolean value', function (t) { + var argv = parse(['--verbose', 'false', 'moo', '-t', 'true'], { + boolean: [ 't', 'verbose' ], + default: { verbose: true } + }); + + t.deepEqual(argv, { + verbose: false, + t: true, + _: ['moo'] + }); + + t.deepEqual(typeof argv.verbose, 'boolean'); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); +}); + +test('flag boolean default false', function (t) { + var argv = parse(['moo'], { + boolean: ['t', 'verbose'], + default: { verbose: false, t: false } + }); + + t.deepEqual(argv, { + verbose: false, + t: false, + _: ['moo'] + }); + + t.deepEqual(typeof argv.verbose, 'boolean'); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); + +}); + +test('boolean groups', function (t) { + var argv = parse([ '-x', '-z', 'one', 'two', 'three' ], { + boolean: ['x','y','z'] + }); + + t.deepEqual(argv, { + x : true, + y : false, + z : true, + _ : [ 'one', 'two', 'three' ] + }); + + t.deepEqual(typeof argv.x, 'boolean'); + t.deepEqual(typeof argv.y, 'boolean'); + t.deepEqual(typeof argv.z, 'boolean'); + t.end(); +}); + +test('newlines in params' , function (t) { + var args = parse([ '-s', "X\nX" ]) + t.deepEqual(args, { _ : [], s : "X\nX" }); + + // reproduce in bash: + // VALUE="new + // line" + // node program.js --s="$VALUE" + args = parse([ "--s=X\nX" ]) + t.deepEqual(args, { _ : [], s : "X\nX" }); + t.end(); +}); + +test('strings' , function (t) { + var s = parse([ '-s', '0001234' ], { string: 's' }).s; + t.equal(s, '0001234'); + t.equal(typeof s, 'string'); + + var x = parse([ '-x', '56' ], { string: 'x' }).x; + t.equal(x, '56'); + t.equal(typeof x, 'string'); + t.end(); +}); + +test('stringArgs', function (t) { + var s = parse([ ' ', ' ' ], { string: '_' })._; + t.same(s.length, 2); + t.same(typeof s[0], 'string'); + t.same(s[0], ' '); + t.same(typeof s[1], 'string'); + t.same(s[1], ' '); + t.end(); +}); + +test('empty strings', function(t) { + var s = parse([ '-s' ], { string: 's' }).s; + t.equal(s, ''); + t.equal(typeof s, 'string'); + + var str = parse([ '--str' ], { string: 'str' }).str; + t.equal(str, ''); + t.equal(typeof str, 'string'); + + var letters = parse([ '-art' ], { + string: [ 'a', 't' ] + }); + + t.equal(letters.a, ''); + t.equal(letters.r, true); + t.equal(letters.t, ''); + + t.end(); +}); + + +test('slashBreak', function (t) { + t.same( + parse([ '-I/foo/bar/baz' ]), + { I : '/foo/bar/baz', _ : [] } + ); + t.same( + parse([ '-xyz/foo/bar/baz' ]), + { x : true, y : true, z : '/foo/bar/baz', _ : [] } + ); + t.end(); +}); + +test('alias', function (t) { + var argv = parse([ '-f', '11', '--zoom', '55' ], { + alias: { z: 'zoom' } + }); + t.equal(argv.zoom, 55); + t.equal(argv.z, argv.zoom); + t.equal(argv.f, 11); + t.end(); +}); + +test('multiAlias', function (t) { + var argv = parse([ '-f', '11', '--zoom', '55' ], { + alias: { z: [ 'zm', 'zoom' ] } + }); + t.equal(argv.zoom, 55); + t.equal(argv.z, argv.zoom); + t.equal(argv.z, argv.zm); + t.equal(argv.f, 11); + t.end(); +}); + +test('nested dotted objects', function (t) { + var argv = parse([ + '--foo.bar', '3', '--foo.baz', '4', + '--foo.quux.quibble', '5', '--foo.quux.o_O', + '--beep.boop' + ]); + + t.same(argv.foo, { + bar : 3, + baz : 4, + quux : { + quibble : 5, + o_O : true + } + }); + t.same(argv.beep, { boop : true }); + t.end(); +}); + +test('boolean and alias with chainable api', function (t) { + var aliased = [ '-h', 'derp' ]; + var regular = [ '--herp', 'derp' ]; + var opts = { + herp: { alias: 'h', boolean: true } + }; + var aliasedArgv = parse(aliased, { + boolean: 'herp', + alias: { h: 'herp' } + }); + var propertyArgv = parse(regular, { + boolean: 'herp', + alias: { h: 'herp' } + }); + var expected = { + herp: true, + h: true, + '_': [ 'derp' ] + }; + + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +test('boolean and alias with options hash', function (t) { + var aliased = [ '-h', 'derp' ]; + var regular = [ '--herp', 'derp' ]; + var opts = { + alias: { 'h': 'herp' }, + boolean: 'herp' + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var expected = { + herp: true, + h: true, + '_': [ 'derp' ] + }; + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +test('boolean and alias using explicit true', function (t) { + var aliased = [ '-h', 'true' ]; + var regular = [ '--herp', 'true' ]; + var opts = { + alias: { h: 'herp' }, + boolean: 'h' + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var expected = { + herp: true, + h: true, + '_': [ ] + }; + + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +// regression, see https://github.com/substack/node-optimist/issues/71 +test('boolean and --x=true', function(t) { + var parsed = parse(['--boool', '--other=true'], { + boolean: 'boool' + }); + + t.same(parsed.boool, true); + t.same(parsed.other, 'true'); + + parsed = parse(['--boool', '--other=false'], { + boolean: 'boool' + }); + + t.same(parsed.boool, true); + t.same(parsed.other, 'false'); + t.end(); +}); diff --git a/node_modules/mkdirp/node_modules/minimist/test/parse_modified.js b/node_modules/mkdirp/node_modules/minimist/test/parse_modified.js new file mode 100644 index 00000000..21851b03 --- /dev/null +++ b/node_modules/mkdirp/node_modules/minimist/test/parse_modified.js @@ -0,0 +1,9 @@ +var parse = require('../'); +var test = require('tape'); + +test('parse with modifier functions' , function (t) { + t.plan(1); + + var argv = parse([ '-b', '123' ], { boolean: 'b' }); + t.deepEqual(argv, { b: true, _: ['123'] }); +}); diff --git a/node_modules/mkdirp/node_modules/minimist/test/short.js b/node_modules/mkdirp/node_modules/minimist/test/short.js new file mode 100644 index 00000000..d513a1c2 --- /dev/null +++ b/node_modules/mkdirp/node_modules/minimist/test/short.js @@ -0,0 +1,67 @@ +var parse = require('../'); +var test = require('tape'); + +test('numeric short args', function (t) { + t.plan(2); + t.deepEqual(parse([ '-n123' ]), { n: 123, _: [] }); + t.deepEqual( + parse([ '-123', '456' ]), + { 1: true, 2: true, 3: 456, _: [] } + ); +}); + +test('short', function (t) { + t.deepEqual( + parse([ '-b' ]), + { b : true, _ : [] }, + 'short boolean' + ); + t.deepEqual( + parse([ 'foo', 'bar', 'baz' ]), + { _ : [ 'foo', 'bar', 'baz' ] }, + 'bare' + ); + t.deepEqual( + parse([ '-cats' ]), + { c : true, a : true, t : true, s : true, _ : [] }, + 'group' + ); + t.deepEqual( + parse([ '-cats', 'meow' ]), + { c : true, a : true, t : true, s : 'meow', _ : [] }, + 'short group next' + ); + t.deepEqual( + parse([ '-h', 'localhost' ]), + { h : 'localhost', _ : [] }, + 'short capture' + ); + t.deepEqual( + parse([ '-h', 'localhost', '-p', '555' ]), + { h : 'localhost', p : 555, _ : [] }, + 'short captures' + ); + t.end(); +}); + +test('mixed short bool and capture', function (t) { + t.same( + parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), + { + f : true, p : 555, h : 'localhost', + _ : [ 'script.js' ] + } + ); + t.end(); +}); + +test('short and long', function (t) { + t.deepEqual( + parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), + { + f : true, p : 555, h : 'localhost', + _ : [ 'script.js' ] + } + ); + t.end(); +}); diff --git a/node_modules/mkdirp/node_modules/minimist/test/whitespace.js b/node_modules/mkdirp/node_modules/minimist/test/whitespace.js new file mode 100644 index 00000000..8a52a58c --- /dev/null +++ b/node_modules/mkdirp/node_modules/minimist/test/whitespace.js @@ -0,0 +1,8 @@ +var parse = require('../'); +var test = require('tape'); + +test('whitespace should be whitespace' , function (t) { + t.plan(1); + var x = parse([ '-x', '\t' ]).x; + t.equal(x, '\t'); +}); diff --git a/node_modules/mkdirp/package.json b/node_modules/mkdirp/package.json new file mode 100644 index 00000000..a14a9250 --- /dev/null +++ b/node_modules/mkdirp/package.json @@ -0,0 +1,62 @@ +{ + "_from": "mkdirp@^0.5.1", + "_id": "mkdirp@0.5.1", + "_inBundle": false, + "_integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "_location": "/mkdirp", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "mkdirp@^0.5.1", + "name": "mkdirp", + "escapedName": "mkdirp", + "rawSpec": "^0.5.1", + "saveSpec": null, + "fetchSpec": "^0.5.1" + }, + "_requiredBy": [ + "/strong-globalize" + ], + "_resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "_shasum": "30057438eac6cf7f8c4767f38648d6697d75c903", + "_spec": "mkdirp@^0.5.1", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/strong-globalize", + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "bugs": { + "url": "https://github.com/substack/node-mkdirp/issues" + }, + "bundleDependencies": false, + "dependencies": { + "minimist": "0.0.8" + }, + "deprecated": false, + "description": "Recursively mkdir, like `mkdir -p`", + "devDependencies": { + "mock-fs": "2 >=2.7.0", + "tap": "1" + }, + "homepage": "https://github.com/substack/node-mkdirp#readme", + "keywords": [ + "mkdir", + "directory" + ], + "license": "MIT", + "main": "index.js", + "name": "mkdirp", + "repository": { + "type": "git", + "url": "git+https://github.com/substack/node-mkdirp.git" + }, + "scripts": { + "test": "tap test/*.js" + }, + "version": "0.5.1" +} diff --git a/node_modules/mkdirp/readme.markdown b/node_modules/mkdirp/readme.markdown new file mode 100644 index 00000000..3cc13153 --- /dev/null +++ b/node_modules/mkdirp/readme.markdown @@ -0,0 +1,100 @@ +# mkdirp + +Like `mkdir -p`, but in node.js! + +[![build status](https://secure.travis-ci.org/substack/node-mkdirp.png)](http://travis-ci.org/substack/node-mkdirp) + +# example + +## pow.js + +```js +var mkdirp = require('mkdirp'); + +mkdirp('/tmp/foo/bar/baz', function (err) { + if (err) console.error(err) + else console.log('pow!') +}); +``` + +Output + +``` +pow! +``` + +And now /tmp/foo/bar/baz exists, huzzah! + +# methods + +```js +var mkdirp = require('mkdirp'); +``` + +## mkdirp(dir, opts, cb) + +Create a new directory and any necessary subdirectories at `dir` with octal +permission string `opts.mode`. If `opts` is a non-object, it will be treated as +the `opts.mode`. + +If `opts.mode` isn't specified, it defaults to `0777 & (~process.umask())`. + +`cb(err, made)` fires with the error or the first directory `made` +that had to be created, if any. + +You can optionally pass in an alternate `fs` implementation by passing in +`opts.fs`. Your implementation should have `opts.fs.mkdir(path, mode, cb)` and +`opts.fs.stat(path, cb)`. + +## mkdirp.sync(dir, opts) + +Synchronously create a new directory and any necessary subdirectories at `dir` +with octal permission string `opts.mode`. If `opts` is a non-object, it will be +treated as the `opts.mode`. + +If `opts.mode` isn't specified, it defaults to `0777 & (~process.umask())`. + +Returns the first directory that had to be created, if any. + +You can optionally pass in an alternate `fs` implementation by passing in +`opts.fs`. Your implementation should have `opts.fs.mkdirSync(path, mode)` and +`opts.fs.statSync(path)`. + +# usage + +This package also ships with a `mkdirp` command. + +``` +usage: mkdirp [DIR1,DIR2..] {OPTIONS} + + Create each supplied directory including any necessary parent directories that + don't yet exist. + + If the directory already exists, do nothing. + +OPTIONS are: + + -m, --mode If a directory needs to be created, set the mode as an octal + permission string. + +``` + +# install + +With [npm](http://npmjs.org) do: + +``` +npm install mkdirp +``` + +to get the library, or + +``` +npm install -g mkdirp +``` + +to get the command. + +# license + +MIT diff --git a/node_modules/mkdirp/test/chmod.js b/node_modules/mkdirp/test/chmod.js new file mode 100644 index 00000000..6a404b93 --- /dev/null +++ b/node_modules/mkdirp/test/chmod.js @@ -0,0 +1,41 @@ +var mkdirp = require('../').mkdirp; +var path = require('path'); +var fs = require('fs'); +var test = require('tap').test; +var _0777 = parseInt('0777', 8); +var _0755 = parseInt('0755', 8); +var _0744 = parseInt('0744', 8); + +var ps = [ '', 'tmp' ]; + +for (var i = 0; i < 25; i++) { + var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + ps.push(dir); +} + +var file = ps.join('/'); + +test('chmod-pre', function (t) { + var mode = _0744 + mkdirp(file, mode, function (er) { + t.ifError(er, 'should not error'); + fs.stat(file, function (er, stat) { + t.ifError(er, 'should exist'); + t.ok(stat && stat.isDirectory(), 'should be directory'); + t.equal(stat && stat.mode & _0777, mode, 'should be 0744'); + t.end(); + }); + }); +}); + +test('chmod', function (t) { + var mode = _0755 + mkdirp(file, mode, function (er) { + t.ifError(er, 'should not error'); + fs.stat(file, function (er, stat) { + t.ifError(er, 'should exist'); + t.ok(stat && stat.isDirectory(), 'should be directory'); + t.end(); + }); + }); +}); diff --git a/node_modules/mkdirp/test/clobber.js b/node_modules/mkdirp/test/clobber.js new file mode 100644 index 00000000..2433b9ad --- /dev/null +++ b/node_modules/mkdirp/test/clobber.js @@ -0,0 +1,38 @@ +var mkdirp = require('../').mkdirp; +var path = require('path'); +var fs = require('fs'); +var test = require('tap').test; +var _0755 = parseInt('0755', 8); + +var ps = [ '', 'tmp' ]; + +for (var i = 0; i < 25; i++) { + var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + ps.push(dir); +} + +var file = ps.join('/'); + +// a file in the way +var itw = ps.slice(0, 3).join('/'); + + +test('clobber-pre', function (t) { + console.error("about to write to "+itw) + fs.writeFileSync(itw, 'I AM IN THE WAY, THE TRUTH, AND THE LIGHT.'); + + fs.stat(itw, function (er, stat) { + t.ifError(er) + t.ok(stat && stat.isFile(), 'should be file') + t.end() + }) +}) + +test('clobber', function (t) { + t.plan(2); + mkdirp(file, _0755, function (err) { + t.ok(err); + t.equal(err.code, 'ENOTDIR'); + t.end(); + }); +}); diff --git a/node_modules/mkdirp/test/mkdirp.js b/node_modules/mkdirp/test/mkdirp.js new file mode 100644 index 00000000..eaa8921c --- /dev/null +++ b/node_modules/mkdirp/test/mkdirp.js @@ -0,0 +1,28 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var exists = fs.exists || path.exists; +var test = require('tap').test; +var _0777 = parseInt('0777', 8); +var _0755 = parseInt('0755', 8); + +test('woo', function (t) { + t.plan(5); + var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + + var file = '/tmp/' + [x,y,z].join('/'); + + mkdirp(file, _0755, function (err) { + t.ifError(err); + exists(file, function (ex) { + t.ok(ex, 'file created'); + fs.stat(file, function (err, stat) { + t.ifError(err); + t.equal(stat.mode & _0777, _0755); + t.ok(stat.isDirectory(), 'target not a directory'); + }) + }) + }); +}); diff --git a/node_modules/mkdirp/test/opts_fs.js b/node_modules/mkdirp/test/opts_fs.js new file mode 100644 index 00000000..97186b62 --- /dev/null +++ b/node_modules/mkdirp/test/opts_fs.js @@ -0,0 +1,29 @@ +var mkdirp = require('../'); +var path = require('path'); +var test = require('tap').test; +var mockfs = require('mock-fs'); +var _0777 = parseInt('0777', 8); +var _0755 = parseInt('0755', 8); + +test('opts.fs', function (t) { + t.plan(5); + + var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + + var file = '/beep/boop/' + [x,y,z].join('/'); + var xfs = mockfs.fs(); + + mkdirp(file, { fs: xfs, mode: _0755 }, function (err) { + t.ifError(err); + xfs.exists(file, function (ex) { + t.ok(ex, 'created file'); + xfs.stat(file, function (err, stat) { + t.ifError(err); + t.equal(stat.mode & _0777, _0755); + t.ok(stat.isDirectory(), 'target not a directory'); + }); + }); + }); +}); diff --git a/node_modules/mkdirp/test/opts_fs_sync.js b/node_modules/mkdirp/test/opts_fs_sync.js new file mode 100644 index 00000000..6c370aa6 --- /dev/null +++ b/node_modules/mkdirp/test/opts_fs_sync.js @@ -0,0 +1,27 @@ +var mkdirp = require('../'); +var path = require('path'); +var test = require('tap').test; +var mockfs = require('mock-fs'); +var _0777 = parseInt('0777', 8); +var _0755 = parseInt('0755', 8); + +test('opts.fs sync', function (t) { + t.plan(4); + + var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + + var file = '/beep/boop/' + [x,y,z].join('/'); + var xfs = mockfs.fs(); + + mkdirp.sync(file, { fs: xfs, mode: _0755 }); + xfs.exists(file, function (ex) { + t.ok(ex, 'created file'); + xfs.stat(file, function (err, stat) { + t.ifError(err); + t.equal(stat.mode & _0777, _0755); + t.ok(stat.isDirectory(), 'target not a directory'); + }); + }); +}); diff --git a/node_modules/mkdirp/test/perm.js b/node_modules/mkdirp/test/perm.js new file mode 100644 index 00000000..fbce44b8 --- /dev/null +++ b/node_modules/mkdirp/test/perm.js @@ -0,0 +1,32 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var exists = fs.exists || path.exists; +var test = require('tap').test; +var _0777 = parseInt('0777', 8); +var _0755 = parseInt('0755', 8); + +test('async perm', function (t) { + t.plan(5); + var file = '/tmp/' + (Math.random() * (1<<30)).toString(16); + + mkdirp(file, _0755, function (err) { + t.ifError(err); + exists(file, function (ex) { + t.ok(ex, 'file created'); + fs.stat(file, function (err, stat) { + t.ifError(err); + t.equal(stat.mode & _0777, _0755); + t.ok(stat.isDirectory(), 'target not a directory'); + }) + }) + }); +}); + +test('async root perm', function (t) { + mkdirp('/tmp', _0755, function (err) { + if (err) t.fail(err); + t.end(); + }); + t.end(); +}); diff --git a/node_modules/mkdirp/test/perm_sync.js b/node_modules/mkdirp/test/perm_sync.js new file mode 100644 index 00000000..398229fe --- /dev/null +++ b/node_modules/mkdirp/test/perm_sync.js @@ -0,0 +1,36 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var exists = fs.exists || path.exists; +var test = require('tap').test; +var _0777 = parseInt('0777', 8); +var _0755 = parseInt('0755', 8); + +test('sync perm', function (t) { + t.plan(4); + var file = '/tmp/' + (Math.random() * (1<<30)).toString(16) + '.json'; + + mkdirp.sync(file, _0755); + exists(file, function (ex) { + t.ok(ex, 'file created'); + fs.stat(file, function (err, stat) { + t.ifError(err); + t.equal(stat.mode & _0777, _0755); + t.ok(stat.isDirectory(), 'target not a directory'); + }); + }); +}); + +test('sync root perm', function (t) { + t.plan(3); + + var file = '/tmp'; + mkdirp.sync(file, _0755); + exists(file, function (ex) { + t.ok(ex, 'file created'); + fs.stat(file, function (err, stat) { + t.ifError(err); + t.ok(stat.isDirectory(), 'target not a directory'); + }) + }); +}); diff --git a/node_modules/mkdirp/test/race.js b/node_modules/mkdirp/test/race.js new file mode 100644 index 00000000..b0b9e183 --- /dev/null +++ b/node_modules/mkdirp/test/race.js @@ -0,0 +1,37 @@ +var mkdirp = require('../').mkdirp; +var path = require('path'); +var fs = require('fs'); +var exists = fs.exists || path.exists; +var test = require('tap').test; +var _0777 = parseInt('0777', 8); +var _0755 = parseInt('0755', 8); + +test('race', function (t) { + t.plan(10); + var ps = [ '', 'tmp' ]; + + for (var i = 0; i < 25; i++) { + var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + ps.push(dir); + } + var file = ps.join('/'); + + var res = 2; + mk(file); + + mk(file); + + function mk (file, cb) { + mkdirp(file, _0755, function (err) { + t.ifError(err); + exists(file, function (ex) { + t.ok(ex, 'file created'); + fs.stat(file, function (err, stat) { + t.ifError(err); + t.equal(stat.mode & _0777, _0755); + t.ok(stat.isDirectory(), 'target not a directory'); + }); + }) + }); + } +}); diff --git a/node_modules/mkdirp/test/rel.js b/node_modules/mkdirp/test/rel.js new file mode 100644 index 00000000..4ddb3427 --- /dev/null +++ b/node_modules/mkdirp/test/rel.js @@ -0,0 +1,32 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var exists = fs.exists || path.exists; +var test = require('tap').test; +var _0777 = parseInt('0777', 8); +var _0755 = parseInt('0755', 8); + +test('rel', function (t) { + t.plan(5); + var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + + var cwd = process.cwd(); + process.chdir('/tmp'); + + var file = [x,y,z].join('/'); + + mkdirp(file, _0755, function (err) { + t.ifError(err); + exists(file, function (ex) { + t.ok(ex, 'file created'); + fs.stat(file, function (err, stat) { + t.ifError(err); + process.chdir(cwd); + t.equal(stat.mode & _0777, _0755); + t.ok(stat.isDirectory(), 'target not a directory'); + }) + }) + }); +}); diff --git a/node_modules/mkdirp/test/return.js b/node_modules/mkdirp/test/return.js new file mode 100644 index 00000000..bce68e56 --- /dev/null +++ b/node_modules/mkdirp/test/return.js @@ -0,0 +1,25 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var test = require('tap').test; + +test('return value', function (t) { + t.plan(4); + var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + + var file = '/tmp/' + [x,y,z].join('/'); + + // should return the first dir created. + // By this point, it would be profoundly surprising if /tmp didn't + // already exist, since every other test makes things in there. + mkdirp(file, function (err, made) { + t.ifError(err); + t.equal(made, '/tmp/' + x); + mkdirp(file, function (err, made) { + t.ifError(err); + t.equal(made, null); + }); + }); +}); diff --git a/node_modules/mkdirp/test/return_sync.js b/node_modules/mkdirp/test/return_sync.js new file mode 100644 index 00000000..7c222d35 --- /dev/null +++ b/node_modules/mkdirp/test/return_sync.js @@ -0,0 +1,24 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var test = require('tap').test; + +test('return value', function (t) { + t.plan(2); + var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + + var file = '/tmp/' + [x,y,z].join('/'); + + // should return the first dir created. + // By this point, it would be profoundly surprising if /tmp didn't + // already exist, since every other test makes things in there. + // Note that this will throw on failure, which will fail the test. + var made = mkdirp.sync(file); + t.equal(made, '/tmp/' + x); + + // making the same file again should have no effect. + made = mkdirp.sync(file); + t.equal(made, null); +}); diff --git a/node_modules/mkdirp/test/root.js b/node_modules/mkdirp/test/root.js new file mode 100644 index 00000000..9e7d079d --- /dev/null +++ b/node_modules/mkdirp/test/root.js @@ -0,0 +1,19 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var test = require('tap').test; +var _0755 = parseInt('0755', 8); + +test('root', function (t) { + // '/' on unix, 'c:/' on windows. + var file = path.resolve('/'); + + mkdirp(file, _0755, function (err) { + if (err) throw err + fs.stat(file, function (er, stat) { + if (er) throw er + t.ok(stat.isDirectory(), 'target is a directory'); + t.end(); + }) + }); +}); diff --git a/node_modules/mkdirp/test/sync.js b/node_modules/mkdirp/test/sync.js new file mode 100644 index 00000000..8c8dc938 --- /dev/null +++ b/node_modules/mkdirp/test/sync.js @@ -0,0 +1,32 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var exists = fs.exists || path.exists; +var test = require('tap').test; +var _0777 = parseInt('0777', 8); +var _0755 = parseInt('0755', 8); + +test('sync', function (t) { + t.plan(4); + var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + + var file = '/tmp/' + [x,y,z].join('/'); + + try { + mkdirp.sync(file, _0755); + } catch (err) { + t.fail(err); + return t.end(); + } + + exists(file, function (ex) { + t.ok(ex, 'file created'); + fs.stat(file, function (err, stat) { + t.ifError(err); + t.equal(stat.mode & _0777, _0755); + t.ok(stat.isDirectory(), 'target not a directory'); + }); + }); +}); diff --git a/node_modules/mkdirp/test/umask.js b/node_modules/mkdirp/test/umask.js new file mode 100644 index 00000000..2033c63a --- /dev/null +++ b/node_modules/mkdirp/test/umask.js @@ -0,0 +1,28 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var exists = fs.exists || path.exists; +var test = require('tap').test; +var _0777 = parseInt('0777', 8); +var _0755 = parseInt('0755', 8); + +test('implicit mode from umask', function (t) { + t.plan(5); + var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + + var file = '/tmp/' + [x,y,z].join('/'); + + mkdirp(file, function (err) { + t.ifError(err); + exists(file, function (ex) { + t.ok(ex, 'file created'); + fs.stat(file, function (err, stat) { + t.ifError(err); + t.equal(stat.mode & _0777, _0777 & (~process.umask())); + t.ok(stat.isDirectory(), 'target not a directory'); + }); + }) + }); +}); diff --git a/node_modules/mkdirp/test/umask_sync.js b/node_modules/mkdirp/test/umask_sync.js new file mode 100644 index 00000000..11a76147 --- /dev/null +++ b/node_modules/mkdirp/test/umask_sync.js @@ -0,0 +1,32 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var exists = fs.exists || path.exists; +var test = require('tap').test; +var _0777 = parseInt('0777', 8); +var _0755 = parseInt('0755', 8); + +test('umask sync modes', function (t) { + t.plan(4); + var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + + var file = '/tmp/' + [x,y,z].join('/'); + + try { + mkdirp.sync(file); + } catch (err) { + t.fail(err); + return t.end(); + } + + exists(file, function (ex) { + t.ok(ex, 'file created'); + fs.stat(file, function (err, stat) { + t.ifError(err); + t.equal(stat.mode & _0777, (_0777 & (~process.umask()))); + t.ok(stat.isDirectory(), 'target not a directory'); + }); + }); +}); diff --git a/node_modules/nice-try/CHANGELOG.md b/node_modules/nice-try/CHANGELOG.md new file mode 100644 index 00000000..9e6baf2f --- /dev/null +++ b/node_modules/nice-try/CHANGELOG.md @@ -0,0 +1,21 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). + +## [1.0.5] - 2018-08-25 + +### Changed + +- Removed `prepublish` script from `package.json` + +## [1.0.4] - 2017-08-08 + +### New + +- Added a changelog + +### Changed + +- Ignore `yarn.lock` and `package-lock.json` files \ No newline at end of file diff --git a/node_modules/nice-try/LICENSE b/node_modules/nice-try/LICENSE new file mode 100644 index 00000000..681c8f50 --- /dev/null +++ b/node_modules/nice-try/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018 Tobias Reich + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/nice-try/README.md b/node_modules/nice-try/README.md new file mode 100644 index 00000000..5b83b788 --- /dev/null +++ b/node_modules/nice-try/README.md @@ -0,0 +1,32 @@ +# nice-try + +[![Travis Build Status](https://travis-ci.org/electerious/nice-try.svg?branch=master)](https://travis-ci.org/electerious/nice-try) [![AppVeyor Status](https://ci.appveyor.com/api/projects/status/8tqb09wrwci3xf8l?svg=true)](https://ci.appveyor.com/project/electerious/nice-try) [![Coverage Status](https://coveralls.io/repos/github/electerious/nice-try/badge.svg?branch=master)](https://coveralls.io/github/electerious/nice-try?branch=master) [![Dependencies](https://david-dm.org/electerious/nice-try.svg)](https://david-dm.org/electerious/nice-try#info=dependencies) [![Greenkeeper badge](https://badges.greenkeeper.io/electerious/nice-try.svg)](https://greenkeeper.io/) + +A function that tries to execute a function and discards any error that occurs. + +## Install + +``` +npm install nice-try +``` + +## Usage + +```js +const niceTry = require('nice-try') + +niceTry(() => JSON.parse('true')) // true +niceTry(() => JSON.parse('truee')) // undefined +niceTry() // undefined +niceTry(true) // undefined +``` + +## API + +### Parameters + +- `fn` `{Function}` Function that might or might not throw an error. + +### Returns + +- `{?*}` Return-value of the function when no error occurred. \ No newline at end of file diff --git a/node_modules/nice-try/package.json b/node_modules/nice-try/package.json new file mode 100644 index 00000000..9851cf22 --- /dev/null +++ b/node_modules/nice-try/package.json @@ -0,0 +1,61 @@ +{ + "_from": "nice-try@^1.0.4", + "_id": "nice-try@1.0.5", + "_inBundle": false, + "_integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "_location": "/nice-try", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "nice-try@^1.0.4", + "name": "nice-try", + "escapedName": "nice-try", + "rawSpec": "^1.0.4", + "saveSpec": null, + "fetchSpec": "^1.0.4" + }, + "_requiredBy": [ + "/cross-spawn" + ], + "_resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "_shasum": "a3378a7696ce7d223e88fc9b764bd7ef1089e366", + "_spec": "nice-try@^1.0.4", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/cross-spawn", + "authors": [ + "Tobias Reich " + ], + "bugs": { + "url": "https://github.com/electerious/nice-try/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Tries to execute a function and discards any error that occurs", + "devDependencies": { + "chai": "^4.1.2", + "coveralls": "^3.0.0", + "mocha": "^5.1.1", + "nyc": "^12.0.1" + }, + "files": [ + "src" + ], + "homepage": "https://github.com/electerious/nice-try", + "keywords": [ + "try", + "catch", + "error" + ], + "license": "MIT", + "main": "src/index.js", + "name": "nice-try", + "repository": { + "type": "git", + "url": "git+https://github.com/electerious/nice-try.git" + }, + "scripts": { + "coveralls": "nyc report --reporter=text-lcov | coveralls", + "test": "nyc node_modules/mocha/bin/_mocha" + }, + "version": "1.0.5" +} diff --git a/node_modules/nice-try/src/index.js b/node_modules/nice-try/src/index.js new file mode 100644 index 00000000..837506f2 --- /dev/null +++ b/node_modules/nice-try/src/index.js @@ -0,0 +1,12 @@ +'use strict' + +/** + * Tries to execute a function and discards any error that occurs. + * @param {Function} fn - Function that might or might not throw an error. + * @returns {?*} Return-value of the function when no error occurred. + */ +module.exports = function(fn) { + + try { return fn() } catch (e) {} + +} \ No newline at end of file diff --git a/node_modules/node-rsa/README.md b/node_modules/node-rsa/README.md new file mode 100644 index 00000000..619ec9c0 --- /dev/null +++ b/node_modules/node-rsa/README.md @@ -0,0 +1,373 @@ +# Node-RSA + +Node.js RSA library
+Based on jsbn library from Tom Wu http://www-cs-students.stanford.edu/~tjw/jsbn/ + +* Pure JavaScript +* No needed OpenSSL +* Generating keys +* Supports long messages for encrypt/decrypt +* Signing and verifying + +## Example + +```javascript +const NodeRSA = require('node-rsa'); +const key = new NodeRSA({b: 512}); + +const text = 'Hello RSA!'; +const encrypted = key.encrypt(text, 'base64'); +console.log('encrypted: ', encrypted); +const decrypted = key.decrypt(encrypted, 'utf8'); +console.log('decrypted: ', decrypted); +``` + +## Installing + +```shell +npm install node-rsa +``` +> Requires nodejs >= 8.11.1 + +### Testing + +```shell +npm test +``` + +## Work environment + +This library developed and tested primary for Node.js, but it still can work in browsers with [browserify](http://browserify.org/). + +## Usage + +### Create instance +```javascript +const NodeRSA = require('node-rsa'); + +const key = new NodeRSA([keyData, [format]], [options]); +``` + +* keyData — `{string|buffer|object}` — parameters for generating key or the key in one of supported formats.
+* format — `{string}` — format for importing key. See more details about formats in [Export/Import](#importexport-keys) section.
+* options — `{object}` — additional settings. + +#### Options +You can specify some options by second/third constructor argument, or over `key.setOptions()` method. + +* environment — working environment (default autodetect): + * `'browser'` — will run pure js implementation of RSA algorithms. + * `'node'` for `nodejs >= 0.10.x or io.js >= 1.x` — provide some native methods like sign/verify and encrypt/decrypt. +* encryptionScheme — padding scheme for encrypt/decrypt. Can be `'pkcs1_oaep'` or `'pkcs1'`. Default `'pkcs1_oaep'`. +* signingScheme — scheme used for signing and verifying. Can be `'pkcs1'` or `'pss'` or 'scheme-hash' format string (eg `'pss-sha1'`). Default `'pkcs1-sha256'`, or, if chosen pss: `'pss-sha1'`. + +> *Notice:* This lib supporting next hash algorithms: `'md5'`, `'ripemd160'`, `'sha1'`, `'sha256'`, `'sha512'` in browser and node environment and additional `'md4'`, `'sha'`, `'sha224'`, `'sha384'` in node only. + +Some [advanced options info](https://github.com/rzcoder/node-rsa/wiki/Advanced-options) + +#### Creating "empty" key +```javascript +const key = new NodeRSA(); +``` + +#### Generate new 512bit-length key +```javascript +const key = new NodeRSA({b: 512}); +``` + +Also you can use next method: + +```javascript +key.generateKeyPair([bits], [exp]); +``` + +* bits — `{int}` — key size in bits. 2048 by default. +* exp — `{int}` — public exponent. 65537 by default. + +#### Load key from PEM string + +```javascript +const key = new NodeRSA('-----BEGIN RSA PRIVATE KEY-----\n'+ + 'MIIBOQIBAAJAVY6quuzCwyOWzymJ7C4zXjeV/232wt2ZgJZ1kHzjI73wnhQ3WQcL\n'+ + 'DFCSoi2lPUW8/zspk0qWvPdtp6Jg5Lu7hwIDAQABAkBEws9mQahZ6r1mq2zEm3D/\n'+ + 'VM9BpV//xtd6p/G+eRCYBT2qshGx42ucdgZCYJptFoW+HEx/jtzWe74yK6jGIkWJ\n'+ + 'AiEAoNAMsPqwWwTyjDZCo9iKvfIQvd3MWnmtFmjiHoPtjx0CIQCIMypAEEkZuQUi\n'+ + 'pMoreJrOlLJWdc0bfhzNAJjxsTv/8wIgQG0ZqI3GubBxu9rBOAM5EoA4VNjXVigJ\n'+ + 'QEEk1jTkp8ECIQCHhsoq90mWM/p9L5cQzLDWkTYoPI49Ji+Iemi2T5MRqwIgQl07\n'+ + 'Es+KCn25OKXR/FJ5fu6A6A+MptABL3r8SEjlpLc=\n'+ + '-----END RSA PRIVATE KEY-----'); +``` + +### Import/Export keys +```javascript +key.importKey(keyData, [format]); +key.exportKey([format]); +``` + +* keyData — `{string|buffer}` — may be: + * key in PEM string + * Buffer containing PEM string + * Buffer containing DER encoded data + * Object contains key components +* format — `{string}` — format id for export/import. + +#### Format string syntax +Format string composed of several parts: `scheme-[key_type]-[output_type]`
+ +Scheme — NodeRSA supports multiple format schemes for import/export keys: + + * `'pkcs1'` — public key starts from `'-----BEGIN RSA PUBLIC KEY-----'` header and private key starts from `'-----BEGIN RSA PRIVATE KEY-----'` header + * `'pkcs8'` — public key starts from `'-----BEGIN PUBLIC KEY-----'` header and private key starts from `'-----BEGIN PRIVATE KEY-----'` header + * `'components'` — use it for import/export key from/to raw components (see example below). For private key, importing data should contain all private key components, for public key: only public exponent (`e`) and modulus (`n`). All components (except `e`) should be Buffer, `e` could be Buffer or just normal Number. + +Key type — can be `'private'` or `'public'`. Default `'private'`
+Output type — can be: + + * `'pem'` — Base64 encoded string with header and footer. Used by default. + * `'der'` — Binary encoded key data. + +> *Notice:* For import, if *keyData* is PEM string or buffer containing string, you can do not specify format, but if you provide *keyData* as DER you must specify it in format string. + +**Shortcuts and examples** + * `'private'` or `'pkcs1'` or `'pkcs1-private'` == `'pkcs1-private-pem'` — private key encoded in pcks1 scheme as pem string. + * `'public'` or `'pkcs8-public'` == `'pkcs8-public-pem'` — public key encoded in pcks8 scheme as pem string. + * `'pkcs8'` or `'pkcs8-private'` == `'pkcs8-private-pem'` — private key encoded in pcks8 scheme as pem string. + * `'pkcs1-der'` == `'pkcs1-private-der'` — private key encoded in pcks1 scheme as binary buffer. + * `'pkcs8-public-der'` — public key encoded in pcks8 scheme as binary buffer. + +**Code example** + +```javascript +const keyData = '-----BEGIN PUBLIC KEY----- ... -----END PUBLIC KEY-----'; +key.importKey(keyData, 'pkcs8'); +const publicDer = key.exportKey('pkcs8-public-der'); +const privateDer = key.exportKey('pkcs1-der'); +``` + +```javascript +key.importKey({ + n: Buffer.from('0086fa9ba066685845fc03833a9699c8baefb53cfbf19052a7f10f1eaa30488cec1ceb752bdff2df9fad6c64b3498956e7dbab4035b4823c99a44cc57088a23783', 'hex'), + e: 65537, + d: Buffer.from('5d2f0dd982596ef781affb1cab73a77c46985c6da2aafc252cea3f4546e80f40c0e247d7d9467750ea1321cc5aa638871b3ed96d19dcc124916b0bcb296f35e1', 'hex'), + p: Buffer.from('00c59419db615e56b9805cc45673a32d278917534804171edcf925ab1df203927f', 'hex'), + q: Buffer.from('00aee3f86b66087abc069b8b1736e38ad6af624f7ea80e70b95f4ff2bf77cd90fd', 'hex'), + dmp1: Buffer.from('008112f5a969fcb56f4e3a4c51a60dcdebec157ee4a7376b843487b53844e8ac85', 'hex'), + dmq1: Buffer.from('1a7370470e0f8a4095df40922a430fe498720e03e1f70d257c3ce34202249d21', 'hex'), + coeff: Buffer.from('00b399675e5e81506b729a777cc03026f0b2119853dfc5eb124610c0ab82999e45', 'hex') +}, 'components'); +const publicComponents = key.exportKey('components-public'); +console.log(publicComponents); + +/* +{ n: , + e: 65537 +} +*/ +``` + +If you want to only import the public key use `'components-public'` as an option: + +```javascript +key.importKey({ + n: Buffer.from('0086fa9ba066685845fc03833a9699c8baefb53cfbf19052a7f10f1eaa30488cec1ceb752bdff2df9fad6c64b3498956e7dbab4035b4823c99a44cc57088a23783', 'hex'), + e: 65537, +}, 'components-public'); +``` + +### Properties + +#### Key testing +```javascript +key.isPrivate(); +key.isPublic([strict]); +``` +strict — `{boolean}` — if true method will return false if key pair have private exponent. Default `false`. + +```javascript +key.isEmpty(); +``` +Return `true` if key pair doesn't have any data. + +#### Key info +```javascript +key.getKeySize(); +``` +Return key size in bits. + +```javascript +key.getMaxMessageSize(); +``` +Return max data size for encrypt in bytes. + +### Encrypting/decrypting + +```javascript +key.encrypt(buffer, [encoding], [source_encoding]); +key.encryptPrivate(buffer, [encoding], [source_encoding]); // use private key for encryption +``` +Return encrypted data.
+ +* buffer — `{buffer}` — data for encrypting, may be string, Buffer, or any object/array. Arrays and objects will encoded to JSON string first.
+* encoding — `{string}` — encoding for output result, may be `'buffer'`, `'binary'`, `'hex'` or `'base64'`. Default `'buffer'`.
+* source_encoding — `{string}` — source encoding, works only with string buffer. Can take standard Node.js Buffer encodings (hex, utf8, base64, etc). `'utf8'` by default.
+ +```javascript +key.decrypt(buffer, [encoding]); +key.decryptPublic(buffer, [encoding]); // use public key for decryption +``` +Return decrypted data.
+ +* buffer — `{buffer}` — data for decrypting. Takes Buffer object or base64 encoded string.
+* encoding — `{string}` — encoding for result string. Can also take `'buffer'` for raw Buffer object, or `'json'` for automatic JSON.parse result. Default `'buffer'`. + +> *Notice:* `encryptPrivate` and `decryptPublic` using only pkcs1 padding type 1 (not random) + +### Signing/Verifying +```javascript +key.sign(buffer, [encoding], [source_encoding]); +``` +Return signature for buffer. All the arguments are the same as for `encrypt` method. + +```javascript +key.verify(buffer, signature, [source_encoding], [signature_encoding]) +``` +Return result of check, `true` or `false`.
+ +* buffer — `{buffer}` — data for check, same as `encrypt` method.
+* signature — `{string}` — signature for check, result of `sign` method.
+* source_encoding — `{string}` — same as for `encrypt` method.
+* signature_encoding — `{string}` — encoding of given signature. May be `'buffer'`, `'binary'`, `'hex'` or `'base64'`. Default `'buffer'`. + +## Contributing + +Questions, comments, bug reports, and pull requests are all welcome. + +## Changelog + +### 1.0.2 + * Importing keys from PEM now is less dependent on non-key data in files. + +### 1.0.1 + * `importKey()` now returns `this` + +### 1.0.0 + * Using semver now 🎉 + * **Breaking change**: Drop support nodejs < 8.11.1 + * **Possible breaking change**: `new Buffer()` call as deprecated was replaced by `Buffer.from` & `Buffer.alloc`. + * **Possible breaking change**: Drop support for hash scheme `sha` (was removed in node ~10). `sha1`, `sha256` and others still works. + * **Possible breaking change**: Little change in environment detect algorithm. + +### 0.4.2 + * `no padding` scheme will padded data with zeros on all environments. + +### 0.4.1 + * `PKCS1 no padding` scheme support. + +### 0.4.0 + * License changed from BSD to MIT. + * Some changes in internal api. + +### 0.3.3 + * Fixed PSS encode/verify methods with max salt length. + +### 0.3.2 + * Fixed environment detection in web worker. + +### 0.3.0 + * Added import/export from/to raw key components. + * Removed lodash from dependencies. + +### 0.2.30 + * Fixed a issue when the key was generated by 1 bit smaller than specified. It may slow down the generation of large keys. + +### 0.2.24 + * Now used old hash APIs for webpack compatible. + +### 0.2.22 + * `encryptPrivate` and `decryptPublic` now using only pkcs1 (type 1) padding. + +### 0.2.20 + * Added `.encryptPrivate()` and `.decryptPublic()` methods. + * Encrypt/decrypt methods in nodejs 0.12.x and io.js using native implementation (> 40x speed boost). + * Fixed some regex issue causing catastrophic backtracking. + +### 0.2.10 + * **Methods `.exportPrivate()` and `.exportPublic()` was replaced by `.exportKey([format])`.** + * By default `.exportKey()` returns private key as `.exportPrivate()`, if you need public key from `.exportPublic()` you must specify format as `'public'` or `'pkcs8-public-pem'`. + * Method `.importKey(key, [format])` now has second argument. + +### 0.2.0 + * **`.getPublicPEM()` method was renamed to `.exportPublic()`** + * **`.getPrivatePEM()` method was renamed to `.exportPrivate()`** + * **`.loadFromPEM()` method was renamed to `.importKey()`** + * Added PKCS1_OAEP encrypting/decrypting support. + * **PKCS1_OAEP now default scheme, you need to specify 'encryptingScheme' option to 'pkcs1' for compatibility with 0.1.x version of NodeRSA.** + * Added PSS signing/verifying support. + * Signing now supports `'md5'`, `'ripemd160'`, `'sha1'`, `'sha256'`, `'sha512'` hash algorithms in both environments + and additional `'md4'`, `'sha'`, `'sha224'`, `'sha384'` for nodejs env. + * **`options.signingAlgorithm` was renamed to `options.signingScheme`** + * Added `encryptingScheme` option. + * Property `key.options` now mark as private. Added `key.setOptions(options)` method. + + +### 0.1.54 + * Added support for loading PEM key from Buffer (`fs.readFileSync()` output). + * Added `isEmpty()` method. + +### 0.1.52 + * Improve work with not properly trimming PEM strings. + +### 0.1.50 + * Implemented native js signing and verifying for browsers. + * `options.signingAlgorithm` now takes only hash-algorithm name. + * Added `.getKeySize()` and `.getMaxMessageSize()` methods. + * `.loadFromPublicPEM` and `.loadFromPrivatePEM` methods marked as private. + +### 0.1.40 + * Added signing/verifying. + +### 0.1.30 + * Added long message support. + + +## License + +Copyright (c) 2014 rzcoder
+ +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +## Licensing for code used in rsa.js and jsbn.js + +Copyright (c) 2003-2005 Tom Wu
+All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, +EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY +WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + +IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL, +INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF +THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +In addition, the following condition applies: + +All redistributions must retain an intact copy of this copyright notice +and disclaimer. + +[![Build Status](https://travis-ci.org/rzcoder/node-rsa.svg?branch=master)](https://travis-ci.org/rzcoder/node-rsa) diff --git a/node_modules/node-rsa/gruntfile.js b/node_modules/node-rsa/gruntfile.js new file mode 100644 index 00000000..ecdb7f11 --- /dev/null +++ b/node_modules/node-rsa/gruntfile.js @@ -0,0 +1,33 @@ +module.exports = function (grunt) { + grunt.initConfig({ + jshint: { + options: {}, + default: { + files: { + src: ['gruntfile.js', 'src/**/*.js', '!src/libs/jsbn.js'] + } + }, + libs: { + files: { + src: ['src/libs/**/*'] + } + } + }, + + simplemocha: { + options: { + reporter: 'list' + }, + all: {src: ['test/**/*.js']} + } + }); + + require('jit-grunt')(grunt, { + 'simplemocha': 'grunt-simple-mocha' + }); + + grunt.registerTask('lint', ['jshint:default']); + grunt.registerTask('test', ['simplemocha']); + + grunt.registerTask('default', ['lint', 'test']); +}; \ No newline at end of file diff --git a/node_modules/node-rsa/package.json b/node_modules/node-rsa/package.json new file mode 100644 index 00000000..872b4dea --- /dev/null +++ b/node_modules/node-rsa/package.json @@ -0,0 +1,71 @@ +{ + "_from": "node-rsa@^1.0.5", + "_id": "node-rsa@1.0.5", + "_inBundle": false, + "_integrity": "sha512-9o51yfV167CtQANnuAf+5owNs7aIMsAKVLhNaKuRxihsUUnfoBMN5OTVOK/2mHSOWaWq9zZBiRM3bHORbTZqrg==", + "_location": "/node-rsa", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "node-rsa@^1.0.5", + "name": "node-rsa", + "escapedName": "node-rsa", + "rawSpec": "^1.0.5", + "saveSpec": null, + "fetchSpec": "^1.0.5" + }, + "_requiredBy": [ + "/strong-soap" + ], + "_resolved": "https://registry.npmjs.org/node-rsa/-/node-rsa-1.0.5.tgz", + "_shasum": "854dc1b275729d69bc25883f83ca80705db9262e", + "_spec": "node-rsa@^1.0.5", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/strong-soap", + "author": { + "name": "rzcoder" + }, + "bugs": { + "url": "https://github.com/rzcoder/node-rsa/issues" + }, + "bundleDependencies": false, + "dependencies": { + "asn1": "^0.2.4" + }, + "deprecated": false, + "description": "Node.js RSA library", + "devDependencies": { + "chai": "^4.2.0", + "grunt": "^1.0.3", + "grunt-contrib-jshint": "^2.0.0", + "grunt-simple-mocha": "0.4.1", + "jit-grunt": "0.10.0", + "lodash": "^4.17.11", + "nyc": "^13.1.0" + }, + "homepage": "https://github.com/rzcoder/node-rsa", + "keywords": [ + "node", + "rsa", + "crypto", + "assymetric", + "encryption", + "decryption", + "sign", + "verify", + "pkcs1", + "oaep", + "pss" + ], + "license": "MIT", + "main": "src/NodeRSA.js", + "name": "node-rsa", + "repository": { + "type": "git", + "url": "git+https://github.com/rzcoder/node-rsa.git" + }, + "scripts": { + "test": "grunt test" + }, + "version": "1.0.5" +} diff --git a/node_modules/node-rsa/src/NodeRSA.js b/node_modules/node-rsa/src/NodeRSA.js new file mode 100644 index 00000000..190fd661 --- /dev/null +++ b/node_modules/node-rsa/src/NodeRSA.js @@ -0,0 +1,398 @@ +/*! + * RSA library for Node.js + * + * Author: rzcoder + * License MIT + */ + +var constants = require('constants'); +var rsa = require('./libs/rsa.js'); +var crypt = require('crypto'); +var ber = require('asn1').Ber; +var _ = require('./utils')._; +var utils = require('./utils'); +var schemes = require('./schemes/schemes.js'); +var formats = require('./formats/formats.js'); + +if (typeof constants.RSA_NO_PADDING === "undefined") { + //patch for node v0.10.x, constants do not defined + constants.RSA_NO_PADDING = 3; +} + +module.exports = (function () { + var SUPPORTED_HASH_ALGORITHMS = { + node10: ['md4', 'md5', 'ripemd160', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512'], + node: ['md4', 'md5', 'ripemd160', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512'], + iojs: ['md4', 'md5', 'ripemd160', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512'], + browser: ['md5', 'ripemd160', 'sha1', 'sha256', 'sha512'] + }; + + var DEFAULT_ENCRYPTION_SCHEME = 'pkcs1_oaep'; + var DEFAULT_SIGNING_SCHEME = 'pkcs1'; + + var DEFAULT_EXPORT_FORMAT = 'private'; + var EXPORT_FORMAT_ALIASES = { + 'private': 'pkcs1-private-pem', + 'private-der': 'pkcs1-private-der', + 'public': 'pkcs8-public-pem', + 'public-der': 'pkcs8-public-der', + }; + + /** + * @param key {string|buffer|object} Key in PEM format, or data for generate key {b: bits, e: exponent} + * @constructor + */ + function NodeRSA(key, format, options) { + if (!(this instanceof NodeRSA)) { + return new NodeRSA(key, format, options); + } + + if (_.isObject(format)) { + options = format; + format = undefined; + } + + this.$options = { + signingScheme: DEFAULT_SIGNING_SCHEME, + signingSchemeOptions: { + hash: 'sha256', + saltLength: null + }, + encryptionScheme: DEFAULT_ENCRYPTION_SCHEME, + encryptionSchemeOptions: { + hash: 'sha1', + label: null + }, + environment: utils.detectEnvironment(), + rsaUtils: this + }; + this.keyPair = new rsa.Key(); + this.$cache = {}; + + if (Buffer.isBuffer(key) || _.isString(key)) { + this.importKey(key, format); + } else if (_.isObject(key)) { + this.generateKeyPair(key.b, key.e); + } + + this.setOptions(options); + } + + /** + * Set and validate options for key instance + * @param options + */ + NodeRSA.prototype.setOptions = function (options) { + options = options || {}; + if (options.environment) { + this.$options.environment = options.environment; + } + + if (options.signingScheme) { + if (_.isString(options.signingScheme)) { + var signingScheme = options.signingScheme.toLowerCase().split('-'); + if (signingScheme.length == 1) { + if (SUPPORTED_HASH_ALGORITHMS.node.indexOf(signingScheme[0]) > -1) { + this.$options.signingSchemeOptions = { + hash: signingScheme[0] + }; + this.$options.signingScheme = DEFAULT_SIGNING_SCHEME; + } else { + this.$options.signingScheme = signingScheme[0]; + this.$options.signingSchemeOptions = { + hash: null + }; + } + } else { + this.$options.signingSchemeOptions = { + hash: signingScheme[1] + }; + this.$options.signingScheme = signingScheme[0]; + } + } else if (_.isObject(options.signingScheme)) { + this.$options.signingScheme = options.signingScheme.scheme || DEFAULT_SIGNING_SCHEME; + this.$options.signingSchemeOptions = _.omit(options.signingScheme, 'scheme'); + } + + if (!schemes.isSignature(this.$options.signingScheme)) { + throw Error('Unsupported signing scheme'); + } + + if (this.$options.signingSchemeOptions.hash && + SUPPORTED_HASH_ALGORITHMS[this.$options.environment].indexOf(this.$options.signingSchemeOptions.hash) === -1) { + throw Error('Unsupported hashing algorithm for ' + this.$options.environment + ' environment'); + } + } + + if (options.encryptionScheme) { + if (_.isString(options.encryptionScheme)) { + this.$options.encryptionScheme = options.encryptionScheme.toLowerCase(); + this.$options.encryptionSchemeOptions = {}; + } else if (_.isObject(options.encryptionScheme)) { + this.$options.encryptionScheme = options.encryptionScheme.scheme || DEFAULT_ENCRYPTION_SCHEME; + this.$options.encryptionSchemeOptions = _.omit(options.encryptionScheme, 'scheme'); + } + + if (!schemes.isEncryption(this.$options.encryptionScheme)) { + throw Error('Unsupported encryption scheme'); + } + + if (this.$options.encryptionSchemeOptions.hash && + SUPPORTED_HASH_ALGORITHMS[this.$options.environment].indexOf(this.$options.encryptionSchemeOptions.hash) === -1) { + throw Error('Unsupported hashing algorithm for ' + this.$options.environment + ' environment'); + } + } + + this.keyPair.setOptions(this.$options); + }; + + /** + * Generate private/public keys pair + * + * @param bits {int} length key in bits. Default 2048. + * @param exp {int} public exponent. Default 65537. + * @returns {NodeRSA} + */ + NodeRSA.prototype.generateKeyPair = function (bits, exp) { + bits = bits || 2048; + exp = exp || 65537; + + if (bits % 8 !== 0) { + throw Error('Key size must be a multiple of 8.'); + } + + this.keyPair.generate(bits, exp.toString(16)); + this.$cache = {}; + return this; + }; + + /** + * Importing key + * @param keyData {string|buffer|Object} + * @param format {string} + */ + NodeRSA.prototype.importKey = function (keyData, format) { + if (!keyData) { + throw Error("Empty key given"); + } + + if (format) { + format = EXPORT_FORMAT_ALIASES[format] || format; + } + + if (!formats.detectAndImport(this.keyPair, keyData, format) && format === undefined) { + throw Error("Key format must be specified"); + } + + this.$cache = {}; + + return this; + }; + + /** + * Exporting key + * @param [format] {string} + */ + NodeRSA.prototype.exportKey = function (format) { + format = format || DEFAULT_EXPORT_FORMAT; + format = EXPORT_FORMAT_ALIASES[format] || format; + + if (!this.$cache[format]) { + this.$cache[format] = formats.detectAndExport(this.keyPair, format); + } + + return this.$cache[format]; + }; + + /** + * Check if key pair contains private key + */ + NodeRSA.prototype.isPrivate = function () { + return this.keyPair.isPrivate(); + }; + + /** + * Check if key pair contains public key + * @param [strict] {boolean} - public key only, return false if have private exponent + */ + NodeRSA.prototype.isPublic = function (strict) { + return this.keyPair.isPublic(strict); + }; + + /** + * Check if key pair doesn't contains any data + */ + NodeRSA.prototype.isEmpty = function (strict) { + return !(this.keyPair.n || this.keyPair.e || this.keyPair.d); + }; + + /** + * Encrypting data method with public key + * + * @param buffer {string|number|object|array|Buffer} - data for encrypting. Object and array will convert to JSON string. + * @param encoding {string} - optional. Encoding for output result, may be 'buffer', 'binary', 'hex' or 'base64'. Default 'buffer'. + * @param source_encoding {string} - optional. Encoding for given string. Default utf8. + * @returns {string|Buffer} + */ + NodeRSA.prototype.encrypt = function (buffer, encoding, source_encoding) { + return this.$$encryptKey(false, buffer, encoding, source_encoding); + }; + + /** + * Decrypting data method with private key + * + * @param buffer {Buffer} - buffer for decrypting + * @param encoding - encoding for result string, can also take 'json' or 'buffer' for the automatic conversion of this type + * @returns {Buffer|object|string} + */ + NodeRSA.prototype.decrypt = function (buffer, encoding) { + return this.$$decryptKey(false, buffer, encoding); + }; + + /** + * Encrypting data method with private key + * + * Parameters same as `encrypt` method + */ + NodeRSA.prototype.encryptPrivate = function (buffer, encoding, source_encoding) { + return this.$$encryptKey(true, buffer, encoding, source_encoding); + }; + + /** + * Decrypting data method with public key + * + * Parameters same as `decrypt` method + */ + NodeRSA.prototype.decryptPublic = function (buffer, encoding) { + return this.$$decryptKey(true, buffer, encoding); + }; + + /** + * Encrypting data method with custom key + */ + NodeRSA.prototype.$$encryptKey = function (usePrivate, buffer, encoding, source_encoding) { + try { + var res = this.keyPair.encrypt(this.$getDataForEncrypt(buffer, source_encoding), usePrivate); + + if (encoding == 'buffer' || !encoding) { + return res; + } else { + return res.toString(encoding); + } + } catch (e) { + throw Error('Error during encryption. Original error: ' + e); + } + }; + + /** + * Decrypting data method with custom key + */ + NodeRSA.prototype.$$decryptKey = function (usePublic, buffer, encoding) { + try { + buffer = _.isString(buffer) ? Buffer.from(buffer, 'base64') : buffer; + var res = this.keyPair.decrypt(buffer, usePublic); + + if (res === null) { + throw Error('Key decrypt method returns null.'); + } + + return this.$getDecryptedData(res, encoding); + } catch (e) { + throw Error('Error during decryption (probably incorrect key). Original error: ' + e); + } + }; + + /** + * Signing data + * + * @param buffer {string|number|object|array|Buffer} - data for signing. Object and array will convert to JSON string. + * @param encoding {string} - optional. Encoding for output result, may be 'buffer', 'binary', 'hex' or 'base64'. Default 'buffer'. + * @param source_encoding {string} - optional. Encoding for given string. Default utf8. + * @returns {string|Buffer} + */ + NodeRSA.prototype.sign = function (buffer, encoding, source_encoding) { + if (!this.isPrivate()) { + throw Error("This is not private key"); + } + + var res = this.keyPair.sign(this.$getDataForEncrypt(buffer, source_encoding)); + + if (encoding && encoding != 'buffer') { + res = res.toString(encoding); + } + + return res; + }; + + /** + * Verifying signed data + * + * @param buffer - signed data + * @param signature + * @param source_encoding {string} - optional. Encoding for given string. Default utf8. + * @param signature_encoding - optional. Encoding of given signature. May be 'buffer', 'binary', 'hex' or 'base64'. Default 'buffer'. + * @returns {*} + */ + NodeRSA.prototype.verify = function (buffer, signature, source_encoding, signature_encoding) { + if (!this.isPublic()) { + throw Error("This is not public key"); + } + signature_encoding = (!signature_encoding || signature_encoding == 'buffer' ? null : signature_encoding); + return this.keyPair.verify(this.$getDataForEncrypt(buffer, source_encoding), signature, signature_encoding); + }; + + /** + * Returns key size in bits + * @returns {int} + */ + NodeRSA.prototype.getKeySize = function () { + return this.keyPair.keySize; + }; + + /** + * Returns max message length in bytes (for 1 chunk) depending on current encryption scheme + * @returns {int} + */ + NodeRSA.prototype.getMaxMessageSize = function () { + return this.keyPair.maxMessageLength; + }; + + /** + * Preparing given data for encrypting/signing. Just make new/return Buffer object. + * + * @param buffer {string|number|object|array|Buffer} - data for encrypting. Object and array will convert to JSON string. + * @param encoding {string} - optional. Encoding for given string. Default utf8. + * @returns {Buffer} + */ + NodeRSA.prototype.$getDataForEncrypt = function (buffer, encoding) { + if (_.isString(buffer) || _.isNumber(buffer)) { + return Buffer.from('' + buffer, encoding || 'utf8'); + } else if (Buffer.isBuffer(buffer)) { + return buffer; + } else if (_.isObject(buffer)) { + return Buffer.from(JSON.stringify(buffer)); + } else { + throw Error("Unexpected data type"); + } + }; + + /** + * + * @param buffer {Buffer} - decrypted data. + * @param encoding - optional. Encoding for result output. May be 'buffer', 'json' or any of Node.js Buffer supported encoding. + * @returns {*} + */ + NodeRSA.prototype.$getDecryptedData = function (buffer, encoding) { + encoding = encoding || 'buffer'; + + if (encoding == 'buffer') { + return buffer; + } else if (encoding == 'json') { + return JSON.parse(buffer.toString()); + } else { + return buffer.toString(encoding); + } + }; + + return NodeRSA; +})(); diff --git a/node_modules/node-rsa/src/encryptEngines/encryptEngines.js b/node_modules/node-rsa/src/encryptEngines/encryptEngines.js new file mode 100644 index 00000000..d359452c --- /dev/null +++ b/node_modules/node-rsa/src/encryptEngines/encryptEngines.js @@ -0,0 +1,17 @@ +var crypt = require('crypto'); + +module.exports = { + getEngine: function (keyPair, options) { + var engine = require('./js.js'); + if (options.environment === 'node') { + if (typeof crypt.publicEncrypt === 'function' && typeof crypt.privateDecrypt === 'function') { + if (typeof crypt.privateEncrypt === 'function' && typeof crypt.publicDecrypt === 'function') { + engine = require('./io.js'); + } else { + engine = require('./node12.js'); + } + } + } + return engine(keyPair, options); + } +}; \ No newline at end of file diff --git a/node_modules/node-rsa/src/encryptEngines/io.js b/node_modules/node-rsa/src/encryptEngines/io.js new file mode 100644 index 00000000..799ae1d5 --- /dev/null +++ b/node_modules/node-rsa/src/encryptEngines/io.js @@ -0,0 +1,72 @@ +var crypto = require('crypto'); +var constants = require('constants'); +var schemes = require('../schemes/schemes.js'); + +module.exports = function (keyPair, options) { + var pkcs1Scheme = schemes.pkcs1.makeScheme(keyPair, options); + + return { + encrypt: function (buffer, usePrivate) { + var padding; + if (usePrivate) { + padding = constants.RSA_PKCS1_PADDING; + if (options.encryptionSchemeOptions && options.encryptionSchemeOptions.padding) { + padding = options.encryptionSchemeOptions.padding; + } + return crypto.privateEncrypt({ + key: options.rsaUtils.exportKey('private'), + padding: padding + }, buffer); + } else { + padding = constants.RSA_PKCS1_OAEP_PADDING; + if (options.encryptionScheme === 'pkcs1') { + padding = constants.RSA_PKCS1_PADDING; + } + if (options.encryptionSchemeOptions && options.encryptionSchemeOptions.padding) { + padding = options.encryptionSchemeOptions.padding; + } + + var data = buffer; + if (padding === constants.RSA_NO_PADDING) { + data = pkcs1Scheme.pkcs0pad(buffer); + } + + return crypto.publicEncrypt({ + key: options.rsaUtils.exportKey('public'), + padding: padding + }, data); + } + }, + + decrypt: function (buffer, usePublic) { + var padding; + if (usePublic) { + padding = constants.RSA_PKCS1_PADDING; + if (options.encryptionSchemeOptions && options.encryptionSchemeOptions.padding) { + padding = options.encryptionSchemeOptions.padding; + } + return crypto.publicDecrypt({ + key: options.rsaUtils.exportKey('public'), + padding: padding + }, buffer); + } else { + padding = constants.RSA_PKCS1_OAEP_PADDING; + if (options.encryptionScheme === 'pkcs1') { + padding = constants.RSA_PKCS1_PADDING; + } + if (options.encryptionSchemeOptions && options.encryptionSchemeOptions.padding) { + padding = options.encryptionSchemeOptions.padding; + } + var res = crypto.privateDecrypt({ + key: options.rsaUtils.exportKey('private'), + padding: padding + }, buffer); + + if (padding === constants.RSA_NO_PADDING) { + return pkcs1Scheme.pkcs0unpad(res); + } + return res; + } + } + }; +}; \ No newline at end of file diff --git a/node_modules/node-rsa/src/encryptEngines/js.js b/node_modules/node-rsa/src/encryptEngines/js.js new file mode 100644 index 00000000..f1484415 --- /dev/null +++ b/node_modules/node-rsa/src/encryptEngines/js.js @@ -0,0 +1,34 @@ +var BigInteger = require('../libs/jsbn.js'); +var schemes = require('../schemes/schemes.js'); + +module.exports = function (keyPair, options) { + var pkcs1Scheme = schemes.pkcs1.makeScheme(keyPair, options); + + return { + encrypt: function (buffer, usePrivate) { + var m, c; + if (usePrivate) { + /* Type 1: zeros padding for private key encrypt */ + m = new BigInteger(pkcs1Scheme.encPad(buffer, {type: 1})); + c = keyPair.$doPrivate(m); + } else { + m = new BigInteger(keyPair.encryptionScheme.encPad(buffer)); + c = keyPair.$doPublic(m); + } + return c.toBuffer(keyPair.encryptedDataLength); + }, + + decrypt: function (buffer, usePublic) { + var m, c = new BigInteger(buffer); + + if (usePublic) { + m = keyPair.$doPublic(c); + /* Type 1: zeros padding for private key decrypt */ + return pkcs1Scheme.encUnPad(m.toBuffer(keyPair.encryptedDataLength), {type: 1}); + } else { + m = keyPair.$doPrivate(c); + return keyPair.encryptionScheme.encUnPad(m.toBuffer(keyPair.encryptedDataLength)); + } + } + }; +}; \ No newline at end of file diff --git a/node_modules/node-rsa/src/encryptEngines/node12.js b/node_modules/node-rsa/src/encryptEngines/node12.js new file mode 100644 index 00000000..86e58361 --- /dev/null +++ b/node_modules/node-rsa/src/encryptEngines/node12.js @@ -0,0 +1,56 @@ +var crypto = require('crypto'); +var constants = require('constants'); +var schemes = require('../schemes/schemes.js'); + +module.exports = function (keyPair, options) { + var jsEngine = require('./js.js')(keyPair, options); + var pkcs1Scheme = schemes.pkcs1.makeScheme(keyPair, options); + + return { + encrypt: function (buffer, usePrivate) { + if (usePrivate) { + return jsEngine.encrypt(buffer, usePrivate); + } + var padding = constants.RSA_PKCS1_OAEP_PADDING; + if (options.encryptionScheme === 'pkcs1') { + padding = constants.RSA_PKCS1_PADDING; + } + if (options.encryptionSchemeOptions && options.encryptionSchemeOptions.padding) { + padding = options.encryptionSchemeOptions.padding; + } + + var data = buffer; + if (padding === constants.RSA_NO_PADDING) { + data = pkcs1Scheme.pkcs0pad(buffer); + } + + return crypto.publicEncrypt({ + key: options.rsaUtils.exportKey('public'), + padding: padding + }, data); + }, + + decrypt: function (buffer, usePublic) { + if (usePublic) { + return jsEngine.decrypt(buffer, usePublic); + } + var padding = constants.RSA_PKCS1_OAEP_PADDING; + if (options.encryptionScheme === 'pkcs1') { + padding = constants.RSA_PKCS1_PADDING; + } + if (options.encryptionSchemeOptions && options.encryptionSchemeOptions.padding) { + padding = options.encryptionSchemeOptions.padding; + } + + var res = crypto.privateDecrypt({ + key: options.rsaUtils.exportKey('private'), + padding: padding + }, buffer); + + if (padding === constants.RSA_NO_PADDING) { + return pkcs1Scheme.pkcs0unpad(res); + } + return res; + } + }; +}; \ No newline at end of file diff --git a/node_modules/node-rsa/src/formats/components.js b/node_modules/node-rsa/src/formats/components.js new file mode 100644 index 00000000..a2753148 --- /dev/null +++ b/node_modules/node-rsa/src/formats/components.js @@ -0,0 +1,71 @@ +var _ = require('../utils')._; +var utils = require('../utils'); + +module.exports = { + privateExport: function (key, options) { + return { + n: key.n.toBuffer(), + e: key.e, + d: key.d.toBuffer(), + p: key.p.toBuffer(), + q: key.q.toBuffer(), + dmp1: key.dmp1.toBuffer(), + dmq1: key.dmq1.toBuffer(), + coeff: key.coeff.toBuffer() + }; + }, + + privateImport: function (key, data, options) { + if (data.n && data.e && data.d && data.p && data.q && data.dmp1 && data.dmq1 && data.coeff) { + key.setPrivate( + data.n, + data.e, + data.d, + data.p, + data.q, + data.dmp1, + data.dmq1, + data.coeff + ); + } else { + throw Error("Invalid key data"); + } + }, + + publicExport: function (key, options) { + return { + n: key.n.toBuffer(), + e: key.e + }; + }, + + publicImport: function (key, data, options) { + if (data.n && data.e) { + key.setPublic( + data.n, + data.e + ); + } else { + throw Error("Invalid key data"); + } + }, + + /** + * Trying autodetect and import key + * @param key + * @param data + */ + autoImport: function (key, data) { + if (data.n && data.e) { + if (data.d && data.p && data.q && data.dmp1 && data.dmq1 && data.coeff) { + module.exports.privateImport(key, data); + return true; + } else { + module.exports.publicImport(key, data); + return true; + } + } + + return false; + } +}; diff --git a/node_modules/node-rsa/src/formats/formats.js b/node_modules/node-rsa/src/formats/formats.js new file mode 100644 index 00000000..4db1fc6d --- /dev/null +++ b/node_modules/node-rsa/src/formats/formats.js @@ -0,0 +1,96 @@ +var _ = require('../utils')._; + +function formatParse(format) { + format = format.split('-'); + var keyType = 'private'; + var keyOpt = {type: 'default'}; + + for (var i = 1; i < format.length; i++) { + if (format[i]) { + switch (format[i]) { + case 'public': + keyType = format[i]; + break; + case 'private': + keyType = format[i]; + break; + case 'pem': + keyOpt.type = format[i]; + break; + case 'der': + keyOpt.type = format[i]; + break; + } + } + } + + return {scheme: format[0], keyType: keyType, keyOpt: keyOpt}; +} + +module.exports = { + pkcs1: require('./pkcs1'), + pkcs8: require('./pkcs8'), + components: require('./components'), + + isPrivateExport: function (format) { + return module.exports[format] && typeof module.exports[format].privateExport === 'function'; + }, + + isPrivateImport: function (format) { + return module.exports[format] && typeof module.exports[format].privateImport === 'function'; + }, + + isPublicExport: function (format) { + return module.exports[format] && typeof module.exports[format].publicExport === 'function'; + }, + + isPublicImport: function (format) { + return module.exports[format] && typeof module.exports[format].publicImport === 'function'; + }, + + detectAndImport: function (key, data, format) { + if (format === undefined) { + for (var scheme in module.exports) { + if (typeof module.exports[scheme].autoImport === 'function' && module.exports[scheme].autoImport(key, data)) { + return true; + } + } + } else if (format) { + var fmt = formatParse(format); + + if (module.exports[fmt.scheme]) { + if (fmt.keyType === 'private') { + module.exports[fmt.scheme].privateImport(key, data, fmt.keyOpt); + } else { + module.exports[fmt.scheme].publicImport(key, data, fmt.keyOpt); + } + } else { + throw Error('Unsupported key format'); + } + } + + return false; + }, + + detectAndExport: function (key, format) { + if (format) { + var fmt = formatParse(format); + + if (module.exports[fmt.scheme]) { + if (fmt.keyType === 'private') { + if (!key.isPrivate()) { + throw Error("This is not private key"); + } + return module.exports[fmt.scheme].privateExport(key, fmt.keyOpt); + } else { + if (!key.isPublic()) { + throw Error("This is not public key"); + } + return module.exports[fmt.scheme].publicExport(key, fmt.keyOpt); + } + } else { + throw Error('Unsupported key format'); + } + } + } +}; \ No newline at end of file diff --git a/node_modules/node-rsa/src/formats/pkcs1.js b/node_modules/node-rsa/src/formats/pkcs1.js new file mode 100644 index 00000000..5fba246d --- /dev/null +++ b/node_modules/node-rsa/src/formats/pkcs1.js @@ -0,0 +1,148 @@ +var ber = require('asn1').Ber; +var _ = require('../utils')._; +var utils = require('../utils'); + +const PRIVATE_OPENING_BOUNDARY = '-----BEGIN RSA PRIVATE KEY-----'; +const PRIVATE_CLOSING_BOUNDARY = '-----END RSA PRIVATE KEY-----'; + +const PUBLIC_OPENING_BOUNDARY = '-----BEGIN RSA PUBLIC KEY-----'; +const PUBLIC_CLOSING_BOUNDARY = '-----END RSA PUBLIC KEY-----'; + +module.exports = { + privateExport: function (key, options) { + options = options || {}; + + var n = key.n.toBuffer(); + var d = key.d.toBuffer(); + var p = key.p.toBuffer(); + var q = key.q.toBuffer(); + var dmp1 = key.dmp1.toBuffer(); + var dmq1 = key.dmq1.toBuffer(); + var coeff = key.coeff.toBuffer(); + + var length = n.length + d.length + p.length + q.length + dmp1.length + dmq1.length + coeff.length + 512; // magic + var writer = new ber.Writer({size: length}); + + writer.startSequence(); + writer.writeInt(0); + writer.writeBuffer(n, 2); + writer.writeInt(key.e); + writer.writeBuffer(d, 2); + writer.writeBuffer(p, 2); + writer.writeBuffer(q, 2); + writer.writeBuffer(dmp1, 2); + writer.writeBuffer(dmq1, 2); + writer.writeBuffer(coeff, 2); + writer.endSequence(); + + if (options.type === 'der') { + return writer.buffer; + } else { + return PRIVATE_OPENING_BOUNDARY + '\n' + utils.linebrk(writer.buffer.toString('base64'), 64) + '\n' + PRIVATE_CLOSING_BOUNDARY; + } + }, + + privateImport: function (key, data, options) { + options = options || {}; + var buffer; + + if (options.type !== 'der') { + if (Buffer.isBuffer(data)) { + data = data.toString('utf8'); + } + + if (_.isString(data)) { + var pem = utils.trimSurroundingText(data, PRIVATE_OPENING_BOUNDARY, PRIVATE_CLOSING_BOUNDARY) + .replace(/\s+|\n\r|\n|\r$/gm, ''); + buffer = Buffer.from(pem, 'base64'); + } else { + throw Error('Unsupported key format'); + } + } else if (Buffer.isBuffer(data)) { + buffer = data; + } else { + throw Error('Unsupported key format'); + } + + var reader = new ber.Reader(buffer); + reader.readSequence(); + reader.readString(2, true); // just zero + key.setPrivate( + reader.readString(2, true), // modulus + reader.readString(2, true), // publicExponent + reader.readString(2, true), // privateExponent + reader.readString(2, true), // prime1 + reader.readString(2, true), // prime2 + reader.readString(2, true), // exponent1 -- d mod (p1) + reader.readString(2, true), // exponent2 -- d mod (q-1) + reader.readString(2, true) // coefficient -- (inverse of q) mod p + ); + }, + + publicExport: function (key, options) { + options = options || {}; + + var n = key.n.toBuffer(); + var length = n.length + 512; // magic + + var bodyWriter = new ber.Writer({size: length}); + bodyWriter.startSequence(); + bodyWriter.writeBuffer(n, 2); + bodyWriter.writeInt(key.e); + bodyWriter.endSequence(); + + if (options.type === 'der') { + return bodyWriter.buffer; + } else { + return PUBLIC_OPENING_BOUNDARY + '\n' + utils.linebrk(bodyWriter.buffer.toString('base64'), 64) + '\n' + PUBLIC_CLOSING_BOUNDARY; + } + }, + + publicImport: function (key, data, options) { + options = options || {}; + var buffer; + + if (options.type !== 'der') { + if (Buffer.isBuffer(data)) { + data = data.toString('utf8'); + } + + if (_.isString(data)) { + var pem = utils.trimSurroundingText(data, PUBLIC_OPENING_BOUNDARY, PUBLIC_CLOSING_BOUNDARY) + .replace(/\s+|\n\r|\n|\r$/gm, ''); + buffer = Buffer.from(pem, 'base64'); + } + } else if (Buffer.isBuffer(data)) { + buffer = data; + } else { + throw Error('Unsupported key format'); + } + + var body = new ber.Reader(buffer); + body.readSequence(); + key.setPublic( + body.readString(0x02, true), // modulus + body.readString(0x02, true) // publicExponent + ); + }, + + /** + * Trying autodetect and import key + * @param key + * @param data + */ + autoImport: function (key, data) { + // [\S\s]* matches zero or more of any character + if (/^[\S\s]*-----BEGIN RSA PRIVATE KEY-----\s*(?=(([A-Za-z0-9+/=]+\s*)+))\1-----END RSA PRIVATE KEY-----[\S\s]*$/g.test(data)) { + module.exports.privateImport(key, data); + return true; + } + + if (/^[\S\s]*-----BEGIN RSA PUBLIC KEY-----\s*(?=(([A-Za-z0-9+/=]+\s*)+))\1-----END RSA PUBLIC KEY-----[\S\s]*$/g.test(data)) { + module.exports.publicImport(key, data); + return true; + } + + return false; + } +}; \ No newline at end of file diff --git a/node_modules/node-rsa/src/formats/pkcs8.js b/node_modules/node-rsa/src/formats/pkcs8.js new file mode 100644 index 00000000..3dd1a3c3 --- /dev/null +++ b/node_modules/node-rsa/src/formats/pkcs8.js @@ -0,0 +1,187 @@ +var ber = require('asn1').Ber; +var _ = require('../utils')._; +var PUBLIC_RSA_OID = '1.2.840.113549.1.1.1'; +var utils = require('../utils'); + +const PRIVATE_OPENING_BOUNDARY = '-----BEGIN PRIVATE KEY-----'; +const PRIVATE_CLOSING_BOUNDARY = '-----END PRIVATE KEY-----'; + +const PUBLIC_OPENING_BOUNDARY = '-----BEGIN PUBLIC KEY-----'; +const PUBLIC_CLOSING_BOUNDARY = '-----END PUBLIC KEY-----'; + +module.exports = { + privateExport: function (key, options) { + options = options || {}; + + var n = key.n.toBuffer(); + var d = key.d.toBuffer(); + var p = key.p.toBuffer(); + var q = key.q.toBuffer(); + var dmp1 = key.dmp1.toBuffer(); + var dmq1 = key.dmq1.toBuffer(); + var coeff = key.coeff.toBuffer(); + + var length = n.length + d.length + p.length + q.length + dmp1.length + dmq1.length + coeff.length + 512; // magic + var bodyWriter = new ber.Writer({size: length}); + + bodyWriter.startSequence(); + bodyWriter.writeInt(0); + bodyWriter.writeBuffer(n, 2); + bodyWriter.writeInt(key.e); + bodyWriter.writeBuffer(d, 2); + bodyWriter.writeBuffer(p, 2); + bodyWriter.writeBuffer(q, 2); + bodyWriter.writeBuffer(dmp1, 2); + bodyWriter.writeBuffer(dmq1, 2); + bodyWriter.writeBuffer(coeff, 2); + bodyWriter.endSequence(); + + var writer = new ber.Writer({size: length}); + writer.startSequence(); + writer.writeInt(0); + writer.startSequence(); + writer.writeOID(PUBLIC_RSA_OID); + writer.writeNull(); + writer.endSequence(); + writer.writeBuffer(bodyWriter.buffer, 4); + writer.endSequence(); + + if (options.type === 'der') { + return writer.buffer; + } else { + return PRIVATE_OPENING_BOUNDARY + '\n' + utils.linebrk(writer.buffer.toString('base64'), 64) + '\n' + PRIVATE_CLOSING_BOUNDARY; + } + }, + + privateImport: function (key, data, options) { + options = options || {}; + var buffer; + + if (options.type !== 'der') { + if (Buffer.isBuffer(data)) { + data = data.toString('utf8'); + } + + if (_.isString(data)) { + var pem = utils.trimSurroundingText(data, PRIVATE_OPENING_BOUNDARY, PRIVATE_CLOSING_BOUNDARY) + .replace('-----END PRIVATE KEY-----', '') + .replace(/\s+|\n\r|\n|\r$/gm, ''); + buffer = Buffer.from(pem, 'base64'); + } else { + throw Error('Unsupported key format'); + } + } else if (Buffer.isBuffer(data)) { + buffer = data; + } else { + throw Error('Unsupported key format'); + } + + var reader = new ber.Reader(buffer); + reader.readSequence(); + reader.readInt(0); + var header = new ber.Reader(reader.readString(0x30, true)); + + if (header.readOID(0x06, true) !== PUBLIC_RSA_OID) { + throw Error('Invalid Public key format'); + } + + var body = new ber.Reader(reader.readString(0x04, true)); + body.readSequence(); + body.readString(2, true); // just zero + key.setPrivate( + body.readString(2, true), // modulus + body.readString(2, true), // publicExponent + body.readString(2, true), // privateExponent + body.readString(2, true), // prime1 + body.readString(2, true), // prime2 + body.readString(2, true), // exponent1 -- d mod (p1) + body.readString(2, true), // exponent2 -- d mod (q-1) + body.readString(2, true) // coefficient -- (inverse of q) mod p + ); + }, + + publicExport: function (key, options) { + options = options || {}; + + var n = key.n.toBuffer(); + var length = n.length + 512; // magic + + var bodyWriter = new ber.Writer({size: length}); + bodyWriter.writeByte(0); + bodyWriter.startSequence(); + bodyWriter.writeBuffer(n, 2); + bodyWriter.writeInt(key.e); + bodyWriter.endSequence(); + + var writer = new ber.Writer({size: length}); + writer.startSequence(); + writer.startSequence(); + writer.writeOID(PUBLIC_RSA_OID); + writer.writeNull(); + writer.endSequence(); + writer.writeBuffer(bodyWriter.buffer, 3); + writer.endSequence(); + + if (options.type === 'der') { + return writer.buffer; + } else { + return PUBLIC_OPENING_BOUNDARY + '\n' + utils.linebrk(writer.buffer.toString('base64'), 64) + '\n' + PUBLIC_CLOSING_BOUNDARY; + } + }, + + publicImport: function (key, data, options) { + options = options || {}; + var buffer; + + if (options.type !== 'der') { + if (Buffer.isBuffer(data)) { + data = data.toString('utf8'); + } + + if (_.isString(data)) { + var pem = utils.trimSurroundingText(data, PUBLIC_OPENING_BOUNDARY, PUBLIC_CLOSING_BOUNDARY) + .replace(/\s+|\n\r|\n|\r$/gm, ''); + buffer = Buffer.from(pem, 'base64'); + } + } else if (Buffer.isBuffer(data)) { + buffer = data; + } else { + throw Error('Unsupported key format'); + } + + var reader = new ber.Reader(buffer); + reader.readSequence(); + var header = new ber.Reader(reader.readString(0x30, true)); + + if (header.readOID(0x06, true) !== PUBLIC_RSA_OID) { + throw Error('Invalid Public key format'); + } + + var body = new ber.Reader(reader.readString(0x03, true)); + body.readByte(); + body.readSequence(); + key.setPublic( + body.readString(0x02, true), // modulus + body.readString(0x02, true) // publicExponent + ); + }, + + /** + * Trying autodetect and import key + * @param key + * @param data + */ + autoImport: function (key, data) { + if (/^[\S\s]*-----BEGIN PRIVATE KEY-----\s*(?=(([A-Za-z0-9+/=]+\s*)+))\1-----END PRIVATE KEY-----[\S\s]*$/g.test(data)) { + module.exports.privateImport(key, data); + return true; + } + + if (/^[\S\s]*-----BEGIN PUBLIC KEY-----\s*(?=(([A-Za-z0-9+/=]+\s*)+))\1-----END PUBLIC KEY-----[\S\s]*$/g.test(data)) { + module.exports.publicImport(key, data); + return true; + } + + return false; + } +}; diff --git a/node_modules/node-rsa/src/libs/jsbn.js b/node_modules/node-rsa/src/libs/jsbn.js new file mode 100644 index 00000000..6eb3cd40 --- /dev/null +++ b/node_modules/node-rsa/src/libs/jsbn.js @@ -0,0 +1,1540 @@ +/* + * Basic JavaScript BN library - subset useful for RSA encryption. + * + * Copyright (c) 2003-2005 Tom Wu + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL, + * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER + * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF + * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT + * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * In addition, the following condition applies: + * + * All redistributions must retain an intact copy of this copyright notice + * and disclaimer. + */ + +/* + * Added Node.js Buffers support + * 2014 rzcoder + */ + +var crypt = require('crypto'); +var _ = require('../utils')._; + +// Bits per digit +var dbits; + +// JavaScript engine analysis +var canary = 0xdeadbeefcafe; +var j_lm = ((canary & 0xffffff) == 0xefcafe); + +// (public) Constructor +function BigInteger(a, b) { + if (a != null) { + if ("number" == typeof a) { + this.fromNumber(a, b); + } else if (Buffer.isBuffer(a)) { + this.fromBuffer(a); + } else if (b == null && "string" != typeof a) { + this.fromByteArray(a); + } else { + this.fromString(a, b); + } + } +} + +// return new, unset BigInteger +function nbi() { + return new BigInteger(null); +} + +// am: Compute w_j += (x*this_i), propagate carries, +// c is initial carry, returns final carry. +// c < 3*dvalue, x < 2*dvalue, this_i < dvalue +// We need to select the fastest one that works in this environment. + +// am1: use a single mult and divide to get the high bits, +// max digit bits should be 26 because +// max internal value = 2*dvalue^2-2*dvalue (< 2^53) +function am1(i, x, w, j, c, n) { + while (--n >= 0) { + var v = x * this[i++] + w[j] + c; + c = Math.floor(v / 0x4000000); + w[j++] = v & 0x3ffffff; + } + return c; +} +// am2 avoids a big mult-and-extract completely. +// Max digit bits should be <= 30 because we do bitwise ops +// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31) +function am2(i, x, w, j, c, n) { + var xl = x & 0x7fff, xh = x >> 15; + while (--n >= 0) { + var l = this[i] & 0x7fff; + var h = this[i++] >> 15; + var m = xh * l + h * xl; + l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff); + c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30); + w[j++] = l & 0x3fffffff; + } + return c; +} +// Alternately, set max digit bits to 28 since some +// browsers slow down when dealing with 32-bit numbers. +function am3(i, x, w, j, c, n) { + var xl = x & 0x3fff, xh = x >> 14; + while (--n >= 0) { + var l = this[i] & 0x3fff; + var h = this[i++] >> 14; + var m = xh * l + h * xl; + l = xl * l + ((m & 0x3fff) << 14) + w[j] + c; + c = (l >> 28) + (m >> 14) + xh * h; + w[j++] = l & 0xfffffff; + } + return c; +} + +// We need to select the fastest one that works in this environment. +//if (j_lm && (navigator.appName == "Microsoft Internet Explorer")) { +// BigInteger.prototype.am = am2; +// dbits = 30; +//} else if (j_lm && (navigator.appName != "Netscape")) { +// BigInteger.prototype.am = am1; +// dbits = 26; +//} else { // Mozilla/Netscape seems to prefer am3 +// BigInteger.prototype.am = am3; +// dbits = 28; +//} + +// For node.js, we pick am3 with max dbits to 28. +BigInteger.prototype.am = am3; +dbits = 28; + +BigInteger.prototype.DB = dbits; +BigInteger.prototype.DM = ((1 << dbits) - 1); +BigInteger.prototype.DV = (1 << dbits); + +var BI_FP = 52; +BigInteger.prototype.FV = Math.pow(2, BI_FP); +BigInteger.prototype.F1 = BI_FP - dbits; +BigInteger.prototype.F2 = 2 * dbits - BI_FP; + +// Digit conversions +var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"; +var BI_RC = new Array(); +var rr, vv; +rr = "0".charCodeAt(0); +for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv; +rr = "a".charCodeAt(0); +for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv; +rr = "A".charCodeAt(0); +for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv; + +function int2char(n) { + return BI_RM.charAt(n); +} +function intAt(s, i) { + var c = BI_RC[s.charCodeAt(i)]; + return (c == null) ? -1 : c; +} + +// (protected) copy this to r +function bnpCopyTo(r) { + for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]; + r.t = this.t; + r.s = this.s; +} + +// (protected) set from integer value x, -DV <= x < DV +function bnpFromInt(x) { + this.t = 1; + this.s = (x < 0) ? -1 : 0; + if (x > 0) this[0] = x; + else if (x < -1) this[0] = x + DV; + else this.t = 0; +} + +// return bigint initialized to value +function nbv(i) { + var r = nbi(); + r.fromInt(i); + return r; +} + +// (protected) set from string and radix +function bnpFromString(data, radix, unsigned) { + var k; + switch (radix) { + case 2: + k = 1; + break; + case 4: + k = 2; + break; + case 8: + k = 3; + break; + case 16: + k = 4; + break; + case 32: + k = 5; + break; + case 256: + k = 8; + break; + default: + this.fromRadix(data, radix); + return; + } + + this.t = 0; + this.s = 0; + + var i = data.length; + var mi = false; + var sh = 0; + + while (--i >= 0) { + var x = (k == 8) ? data[i] & 0xff : intAt(data, i); + if (x < 0) { + if (data.charAt(i) == "-") mi = true; + continue; + } + mi = false; + if (sh === 0) + this[this.t++] = x; + else if (sh + k > this.DB) { + this[this.t - 1] |= (x & ((1 << (this.DB - sh)) - 1)) << sh; + this[this.t++] = (x >> (this.DB - sh)); + } + else + this[this.t - 1] |= x << sh; + sh += k; + if (sh >= this.DB) sh -= this.DB; + } + if ((!unsigned) && k == 8 && (data[0] & 0x80) != 0) { + this.s = -1; + if (sh > 0) this[this.t - 1] |= ((1 << (this.DB - sh)) - 1) << sh; + } + this.clamp(); + if (mi) BigInteger.ZERO.subTo(this, this); +} + +function bnpFromByteArray(a, unsigned) { + this.fromString(a, 256, unsigned) +} + +function bnpFromBuffer(a) { + this.fromString(a, 256, true) +} + +// (protected) clamp off excess high words +function bnpClamp() { + var c = this.s & this.DM; + while (this.t > 0 && this[this.t - 1] == c) --this.t; +} + +// (public) return string representation in given radix +function bnToString(b) { + if (this.s < 0) return "-" + this.negate().toString(b); + var k; + if (b == 16) k = 4; + else if (b == 8) k = 3; + else if (b == 2) k = 1; + else if (b == 32) k = 5; + else if (b == 4) k = 2; + else return this.toRadix(b); + var km = (1 << k) - 1, d, m = false, r = "", i = this.t; + var p = this.DB - (i * this.DB) % k; + if (i-- > 0) { + if (p < this.DB && (d = this[i] >> p) > 0) { + m = true; + r = int2char(d); + } + while (i >= 0) { + if (p < k) { + d = (this[i] & ((1 << p) - 1)) << (k - p); + d |= this[--i] >> (p += this.DB - k); + } + else { + d = (this[i] >> (p -= k)) & km; + if (p <= 0) { + p += this.DB; + --i; + } + } + if (d > 0) m = true; + if (m) r += int2char(d); + } + } + return m ? r : "0"; +} + +// (public) -this +function bnNegate() { + var r = nbi(); + BigInteger.ZERO.subTo(this, r); + return r; +} + +// (public) |this| +function bnAbs() { + return (this.s < 0) ? this.negate() : this; +} + +// (public) return + if this > a, - if this < a, 0 if equal +function bnCompareTo(a) { + var r = this.s - a.s; + if (r != 0) return r; + var i = this.t; + r = i - a.t; + if (r != 0) return (this.s < 0) ? -r : r; + while (--i >= 0) if ((r = this[i] - a[i]) != 0) return r; + return 0; +} + +// returns bit length of the integer x +function nbits(x) { + var r = 1, t; + if ((t = x >>> 16) != 0) { + x = t; + r += 16; + } + if ((t = x >> 8) != 0) { + x = t; + r += 8; + } + if ((t = x >> 4) != 0) { + x = t; + r += 4; + } + if ((t = x >> 2) != 0) { + x = t; + r += 2; + } + if ((t = x >> 1) != 0) { + x = t; + r += 1; + } + return r; +} + +// (public) return the number of bits in "this" +function bnBitLength() { + if (this.t <= 0) return 0; + return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM)); +} + +// (protected) r = this << n*DB +function bnpDLShiftTo(n, r) { + var i; + for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]; + for (i = n - 1; i >= 0; --i) r[i] = 0; + r.t = this.t + n; + r.s = this.s; +} + +// (protected) r = this >> n*DB +function bnpDRShiftTo(n, r) { + for (var i = n; i < this.t; ++i) r[i - n] = this[i]; + r.t = Math.max(this.t - n, 0); + r.s = this.s; +} + +// (protected) r = this << n +function bnpLShiftTo(n, r) { + var bs = n % this.DB; + var cbs = this.DB - bs; + var bm = (1 << cbs) - 1; + var ds = Math.floor(n / this.DB), c = (this.s << bs) & this.DM, i; + for (i = this.t - 1; i >= 0; --i) { + r[i + ds + 1] = (this[i] >> cbs) | c; + c = (this[i] & bm) << bs; + } + for (i = ds - 1; i >= 0; --i) r[i] = 0; + r[ds] = c; + r.t = this.t + ds + 1; + r.s = this.s; + r.clamp(); +} + +// (protected) r = this >> n +function bnpRShiftTo(n, r) { + r.s = this.s; + var ds = Math.floor(n / this.DB); + if (ds >= this.t) { + r.t = 0; + return; + } + var bs = n % this.DB; + var cbs = this.DB - bs; + var bm = (1 << bs) - 1; + r[0] = this[ds] >> bs; + for (var i = ds + 1; i < this.t; ++i) { + r[i - ds - 1] |= (this[i] & bm) << cbs; + r[i - ds] = this[i] >> bs; + } + if (bs > 0) r[this.t - ds - 1] |= (this.s & bm) << cbs; + r.t = this.t - ds; + r.clamp(); +} + +// (protected) r = this - a +function bnpSubTo(a, r) { + var i = 0, c = 0, m = Math.min(a.t, this.t); + while (i < m) { + c += this[i] - a[i]; + r[i++] = c & this.DM; + c >>= this.DB; + } + if (a.t < this.t) { + c -= a.s; + while (i < this.t) { + c += this[i]; + r[i++] = c & this.DM; + c >>= this.DB; + } + c += this.s; + } + else { + c += this.s; + while (i < a.t) { + c -= a[i]; + r[i++] = c & this.DM; + c >>= this.DB; + } + c -= a.s; + } + r.s = (c < 0) ? -1 : 0; + if (c < -1) r[i++] = this.DV + c; + else if (c > 0) r[i++] = c; + r.t = i; + r.clamp(); +} + +// (protected) r = this * a, r != this,a (HAC 14.12) +// "this" should be the larger one if appropriate. +function bnpMultiplyTo(a, r) { + var x = this.abs(), y = a.abs(); + var i = x.t; + r.t = i + y.t; + while (--i >= 0) r[i] = 0; + for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t); + r.s = 0; + r.clamp(); + if (this.s != a.s) BigInteger.ZERO.subTo(r, r); +} + +// (protected) r = this^2, r != this (HAC 14.16) +function bnpSquareTo(r) { + var x = this.abs(); + var i = r.t = 2 * x.t; + while (--i >= 0) r[i] = 0; + for (i = 0; i < x.t - 1; ++i) { + var c = x.am(i, x[i], r, 2 * i, 0, 1); + if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) { + r[i + x.t] -= x.DV; + r[i + x.t + 1] = 1; + } + } + if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1); + r.s = 0; + r.clamp(); +} + +// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20) +// r != q, this != m. q or r may be null. +function bnpDivRemTo(m, q, r) { + var pm = m.abs(); + if (pm.t <= 0) return; + var pt = this.abs(); + if (pt.t < pm.t) { + if (q != null) q.fromInt(0); + if (r != null) this.copyTo(r); + return; + } + if (r == null) r = nbi(); + var y = nbi(), ts = this.s, ms = m.s; + var nsh = this.DB - nbits(pm[pm.t - 1]); // normalize modulus + if (nsh > 0) { + pm.lShiftTo(nsh, y); + pt.lShiftTo(nsh, r); + } + else { + pm.copyTo(y); + pt.copyTo(r); + } + var ys = y.t; + var y0 = y[ys - 1]; + if (y0 === 0) return; + var yt = y0 * (1 << this.F1) + ((ys > 1) ? y[ys - 2] >> this.F2 : 0); + var d1 = this.FV / yt, d2 = (1 << this.F1) / yt, e = 1 << this.F2; + var i = r.t, j = i - ys, t = (q == null) ? nbi() : q; + y.dlShiftTo(j, t); + if (r.compareTo(t) >= 0) { + r[r.t++] = 1; + r.subTo(t, r); + } + BigInteger.ONE.dlShiftTo(ys, t); + t.subTo(y, y); // "negative" y so we can replace sub with am later + while (y.t < ys) y[y.t++] = 0; + while (--j >= 0) { + // Estimate quotient digit + var qd = (r[--i] == y0) ? this.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2); + if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out + y.dlShiftTo(j, t); + r.subTo(t, r); + while (r[i] < --qd) r.subTo(t, r); + } + } + if (q != null) { + r.drShiftTo(ys, q); + if (ts != ms) BigInteger.ZERO.subTo(q, q); + } + r.t = ys; + r.clamp(); + if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder + if (ts < 0) BigInteger.ZERO.subTo(r, r); +} + +// (public) this mod a +function bnMod(a) { + var r = nbi(); + this.abs().divRemTo(a, null, r); + if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r); + return r; +} + +// Modular reduction using "classic" algorithm +function Classic(m) { + this.m = m; +} +function cConvert(x) { + if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m); + else return x; +} +function cRevert(x) { + return x; +} +function cReduce(x) { + x.divRemTo(this.m, null, x); +} +function cMulTo(x, y, r) { + x.multiplyTo(y, r); + this.reduce(r); +} +function cSqrTo(x, r) { + x.squareTo(r); + this.reduce(r); +} + +Classic.prototype.convert = cConvert; +Classic.prototype.revert = cRevert; +Classic.prototype.reduce = cReduce; +Classic.prototype.mulTo = cMulTo; +Classic.prototype.sqrTo = cSqrTo; + +// (protected) return "-1/this % 2^DB"; useful for Mont. reduction +// justification: +// xy == 1 (mod m) +// xy = 1+km +// xy(2-xy) = (1+km)(1-km) +// x[y(2-xy)] = 1-k^2m^2 +// x[y(2-xy)] == 1 (mod m^2) +// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2 +// should reduce x and y(2-xy) by m^2 at each step to keep size bounded. +// JS multiply "overflows" differently from C/C++, so care is needed here. +function bnpInvDigit() { + if (this.t < 1) return 0; + var x = this[0]; + if ((x & 1) === 0) return 0; + var y = x & 3; // y == 1/x mod 2^2 + y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4 + y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8 + y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16 + // last step - calculate inverse mod DV directly; + // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints + y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits + // we really want the negative inverse, and -DV < y < DV + return (y > 0) ? this.DV - y : -y; +} + +// Montgomery reduction +function Montgomery(m) { + this.m = m; + this.mp = m.invDigit(); + this.mpl = this.mp & 0x7fff; + this.mph = this.mp >> 15; + this.um = (1 << (m.DB - 15)) - 1; + this.mt2 = 2 * m.t; +} + +// xR mod m +function montConvert(x) { + var r = nbi(); + x.abs().dlShiftTo(this.m.t, r); + r.divRemTo(this.m, null, r); + if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r); + return r; +} + +// x/R mod m +function montRevert(x) { + var r = nbi(); + x.copyTo(r); + this.reduce(r); + return r; +} + +// x = x/R mod m (HAC 14.32) +function montReduce(x) { + while (x.t <= this.mt2) // pad x so am has enough room later + x[x.t++] = 0; + for (var i = 0; i < this.m.t; ++i) { + // faster way of calculating u0 = x[i]*mp mod DV + var j = x[i] & 0x7fff; + var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM; + // use am to combine the multiply-shift-add into one call + j = i + this.m.t; + x[j] += this.m.am(0, u0, x, i, 0, this.m.t); + // propagate carry + while (x[j] >= x.DV) { + x[j] -= x.DV; + x[++j]++; + } + } + x.clamp(); + x.drShiftTo(this.m.t, x); + if (x.compareTo(this.m) >= 0) x.subTo(this.m, x); +} + +// r = "x^2/R mod m"; x != r +function montSqrTo(x, r) { + x.squareTo(r); + this.reduce(r); +} + +// r = "xy/R mod m"; x,y != r +function montMulTo(x, y, r) { + x.multiplyTo(y, r); + this.reduce(r); +} + +Montgomery.prototype.convert = montConvert; +Montgomery.prototype.revert = montRevert; +Montgomery.prototype.reduce = montReduce; +Montgomery.prototype.mulTo = montMulTo; +Montgomery.prototype.sqrTo = montSqrTo; + +// (protected) true iff this is even +function bnpIsEven() { + return ((this.t > 0) ? (this[0] & 1) : this.s) === 0; +} + +// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79) +function bnpExp(e, z) { + if (e > 0xffffffff || e < 1) return BigInteger.ONE; + var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e) - 1; + g.copyTo(r); + while (--i >= 0) { + z.sqrTo(r, r2); + if ((e & (1 << i)) > 0) z.mulTo(r2, g, r); + else { + var t = r; + r = r2; + r2 = t; + } + } + return z.revert(r); +} + +// (public) this^e % m, 0 <= e < 2^32 +function bnModPowInt(e, m) { + var z; + if (e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m); + return this.exp(e, z); +} + +// Copyright (c) 2005-2009 Tom Wu +// All Rights Reserved. +// See "LICENSE" for details. + +// Extended JavaScript BN functions, required for RSA private ops. + +// Version 1.1: new BigInteger("0", 10) returns "proper" zero +// Version 1.2: square() API, isProbablePrime fix + +//(public) +function bnClone() { + var r = nbi(); + this.copyTo(r); + return r; +} + +//(public) return value as integer +function bnIntValue() { + if (this.s < 0) { + if (this.t == 1) return this[0] - this.DV; + else if (this.t === 0) return -1; + } + else if (this.t == 1) return this[0]; + else if (this.t === 0) return 0; +// assumes 16 < DB < 32 + return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]; +} + +//(public) return value as byte +function bnByteValue() { + return (this.t == 0) ? this.s : (this[0] << 24) >> 24; +} + +//(public) return value as short (assumes DB>=16) +function bnShortValue() { + return (this.t == 0) ? this.s : (this[0] << 16) >> 16; +} + +//(protected) return x s.t. r^x < DV +function bnpChunkSize(r) { + return Math.floor(Math.LN2 * this.DB / Math.log(r)); +} + +//(public) 0 if this === 0, 1 if this > 0 +function bnSigNum() { + if (this.s < 0) return -1; + else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0; + else return 1; +} + +//(protected) convert to radix string +function bnpToRadix(b) { + if (b == null) b = 10; + if (this.signum() === 0 || b < 2 || b > 36) return "0"; + var cs = this.chunkSize(b); + var a = Math.pow(b, cs); + var d = nbv(a), y = nbi(), z = nbi(), r = ""; + this.divRemTo(d, y, z); + while (y.signum() > 0) { + r = (a + z.intValue()).toString(b).substr(1) + r; + y.divRemTo(d, y, z); + } + return z.intValue().toString(b) + r; +} + +//(protected) convert from radix string +function bnpFromRadix(s, b) { + this.fromInt(0); + if (b == null) b = 10; + var cs = this.chunkSize(b); + var d = Math.pow(b, cs), mi = false, j = 0, w = 0; + for (var i = 0; i < s.length; ++i) { + var x = intAt(s, i); + if (x < 0) { + if (s.charAt(i) == "-" && this.signum() === 0) mi = true; + continue; + } + w = b * w + x; + if (++j >= cs) { + this.dMultiply(d); + this.dAddOffset(w, 0); + j = 0; + w = 0; + } + } + if (j > 0) { + this.dMultiply(Math.pow(b, j)); + this.dAddOffset(w, 0); + } + if (mi) BigInteger.ZERO.subTo(this, this); +} + +//(protected) alternate constructor +function bnpFromNumber(a, b) { + if ("number" == typeof b) { + // new BigInteger(int,int,RNG) + if (a < 2) this.fromInt(1); + else { + this.fromNumber(a); + if (!this.testBit(a - 1)) // force MSB set + this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, this); + if (this.isEven()) this.dAddOffset(1, 0); // force odd + while (!this.isProbablePrime(b)) { + this.dAddOffset(2, 0); + if (this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a - 1), this); + } + } + } else { + // new BigInteger(int,RNG) + var x = crypt.randomBytes((a >> 3) + 1) + var t = a & 7; + + if (t > 0) + x[0] &= ((1 << t) - 1); + else + x[0] = 0; + + this.fromByteArray(x); + } +} + +//(public) convert to bigendian byte array +function bnToByteArray() { + var i = this.t, r = new Array(); + r[0] = this.s; + var p = this.DB - (i * this.DB) % 8, d, k = 0; + if (i-- > 0) { + if (p < this.DB && (d = this[i] >> p) != (this.s & this.DM) >> p) + r[k++] = d | (this.s << (this.DB - p)); + while (i >= 0) { + if (p < 8) { + d = (this[i] & ((1 << p) - 1)) << (8 - p); + d |= this[--i] >> (p += this.DB - 8); + } + else { + d = (this[i] >> (p -= 8)) & 0xff; + if (p <= 0) { + p += this.DB; + --i; + } + } + if ((d & 0x80) != 0) d |= -256; + if (k === 0 && (this.s & 0x80) != (d & 0x80)) ++k; + if (k > 0 || d != this.s) r[k++] = d; + } + } + return r; +} + +/** + * return Buffer object + * @param trim {boolean} slice buffer if first element == 0 + * @returns {Buffer} + */ +function bnToBuffer(trimOrSize) { + var res = Buffer.from(this.toByteArray()); + if (trimOrSize === true && res[0] === 0) { + res = res.slice(1); + } else if (_.isNumber(trimOrSize)) { + if (res.length > trimOrSize) { + for (var i = 0; i < res.length - trimOrSize; i++) { + if (res[i] !== 0) { + return null; + } + } + return res.slice(res.length - trimOrSize); + } else if (res.length < trimOrSize) { + var padded = Buffer.alloc(trimOrSize); + padded.fill(0, 0, trimOrSize - res.length); + res.copy(padded, trimOrSize - res.length); + return padded; + } + } + return res; +} + +function bnEquals(a) { + return (this.compareTo(a) == 0); +} +function bnMin(a) { + return (this.compareTo(a) < 0) ? this : a; +} +function bnMax(a) { + return (this.compareTo(a) > 0) ? this : a; +} + +//(protected) r = this op a (bitwise) +function bnpBitwiseTo(a, op, r) { + var i, f, m = Math.min(a.t, this.t); + for (i = 0; i < m; ++i) r[i] = op(this[i], a[i]); + if (a.t < this.t) { + f = a.s & this.DM; + for (i = m; i < this.t; ++i) r[i] = op(this[i], f); + r.t = this.t; + } + else { + f = this.s & this.DM; + for (i = m; i < a.t; ++i) r[i] = op(f, a[i]); + r.t = a.t; + } + r.s = op(this.s, a.s); + r.clamp(); +} + +//(public) this & a +function op_and(x, y) { + return x & y; +} +function bnAnd(a) { + var r = nbi(); + this.bitwiseTo(a, op_and, r); + return r; +} + +//(public) this | a +function op_or(x, y) { + return x | y; +} +function bnOr(a) { + var r = nbi(); + this.bitwiseTo(a, op_or, r); + return r; +} + +//(public) this ^ a +function op_xor(x, y) { + return x ^ y; +} +function bnXor(a) { + var r = nbi(); + this.bitwiseTo(a, op_xor, r); + return r; +} + +//(public) this & ~a +function op_andnot(x, y) { + return x & ~y; +} +function bnAndNot(a) { + var r = nbi(); + this.bitwiseTo(a, op_andnot, r); + return r; +} + +//(public) ~this +function bnNot() { + var r = nbi(); + for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]; + r.t = this.t; + r.s = ~this.s; + return r; +} + +//(public) this << n +function bnShiftLeft(n) { + var r = nbi(); + if (n < 0) this.rShiftTo(-n, r); else this.lShiftTo(n, r); + return r; +} + +//(public) this >> n +function bnShiftRight(n) { + var r = nbi(); + if (n < 0) this.lShiftTo(-n, r); else this.rShiftTo(n, r); + return r; +} + +//return index of lowest 1-bit in x, x < 2^31 +function lbit(x) { + if (x === 0) return -1; + var r = 0; + if ((x & 0xffff) === 0) { + x >>= 16; + r += 16; + } + if ((x & 0xff) === 0) { + x >>= 8; + r += 8; + } + if ((x & 0xf) === 0) { + x >>= 4; + r += 4; + } + if ((x & 3) === 0) { + x >>= 2; + r += 2; + } + if ((x & 1) === 0) ++r; + return r; +} + +//(public) returns index of lowest 1-bit (or -1 if none) +function bnGetLowestSetBit() { + for (var i = 0; i < this.t; ++i) + if (this[i] != 0) return i * this.DB + lbit(this[i]); + if (this.s < 0) return this.t * this.DB; + return -1; +} + +//return number of 1 bits in x +function cbit(x) { + var r = 0; + while (x != 0) { + x &= x - 1; + ++r; + } + return r; +} + +//(public) return number of set bits +function bnBitCount() { + var r = 0, x = this.s & this.DM; + for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x); + return r; +} + +//(public) true iff nth bit is set +function bnTestBit(n) { + var j = Math.floor(n / this.DB); + if (j >= this.t) return (this.s != 0); + return ((this[j] & (1 << (n % this.DB))) != 0); +} + +//(protected) this op (1<>= this.DB; + } + if (a.t < this.t) { + c += a.s; + while (i < this.t) { + c += this[i]; + r[i++] = c & this.DM; + c >>= this.DB; + } + c += this.s; + } + else { + c += this.s; + while (i < a.t) { + c += a[i]; + r[i++] = c & this.DM; + c >>= this.DB; + } + c += a.s; + } + r.s = (c < 0) ? -1 : 0; + if (c > 0) r[i++] = c; + else if (c < -1) r[i++] = this.DV + c; + r.t = i; + r.clamp(); +} + +//(public) this + a +function bnAdd(a) { + var r = nbi(); + this.addTo(a, r); + return r; +} + +//(public) this - a +function bnSubtract(a) { + var r = nbi(); + this.subTo(a, r); + return r; +} + +//(public) this * a +function bnMultiply(a) { + var r = nbi(); + this.multiplyTo(a, r); + return r; +} + +// (public) this^2 +function bnSquare() { + var r = nbi(); + this.squareTo(r); + return r; +} + +//(public) this / a +function bnDivide(a) { + var r = nbi(); + this.divRemTo(a, r, null); + return r; +} + +//(public) this % a +function bnRemainder(a) { + var r = nbi(); + this.divRemTo(a, null, r); + return r; +} + +//(public) [this/a,this%a] +function bnDivideAndRemainder(a) { + var q = nbi(), r = nbi(); + this.divRemTo(a, q, r); + return new Array(q, r); +} + +//(protected) this *= n, this >= 0, 1 < n < DV +function bnpDMultiply(n) { + this[this.t] = this.am(0, n - 1, this, 0, 0, this.t); + ++this.t; + this.clamp(); +} + +//(protected) this += n << w words, this >= 0 +function bnpDAddOffset(n, w) { + if (n === 0) return; + while (this.t <= w) this[this.t++] = 0; + this[w] += n; + while (this[w] >= this.DV) { + this[w] -= this.DV; + if (++w >= this.t) this[this.t++] = 0; + ++this[w]; + } +} + +//A "null" reducer +function NullExp() { +} +function nNop(x) { + return x; +} +function nMulTo(x, y, r) { + x.multiplyTo(y, r); +} +function nSqrTo(x, r) { + x.squareTo(r); +} + +NullExp.prototype.convert = nNop; +NullExp.prototype.revert = nNop; +NullExp.prototype.mulTo = nMulTo; +NullExp.prototype.sqrTo = nSqrTo; + +//(public) this^e +function bnPow(e) { + return this.exp(e, new NullExp()); +} + +//(protected) r = lower n words of "this * a", a.t <= n +//"this" should be the larger one if appropriate. +function bnpMultiplyLowerTo(a, n, r) { + var i = Math.min(this.t + a.t, n); + r.s = 0; // assumes a,this >= 0 + r.t = i; + while (i > 0) r[--i] = 0; + var j; + for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t); + for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i); + r.clamp(); +} + +//(protected) r = "this * a" without lower n words, n > 0 +//"this" should be the larger one if appropriate. +function bnpMultiplyUpperTo(a, n, r) { + --n; + var i = r.t = this.t + a.t - n; + r.s = 0; // assumes a,this >= 0 + while (--i >= 0) r[i] = 0; + for (i = Math.max(n - this.t, 0); i < a.t; ++i) + r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n); + r.clamp(); + r.drShiftTo(1, r); +} + +//Barrett modular reduction +function Barrett(m) { +// setup Barrett + this.r2 = nbi(); + this.q3 = nbi(); + BigInteger.ONE.dlShiftTo(2 * m.t, this.r2); + this.mu = this.r2.divide(m); + this.m = m; +} + +function barrettConvert(x) { + if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m); + else if (x.compareTo(this.m) < 0) return x; + else { + var r = nbi(); + x.copyTo(r); + this.reduce(r); + return r; + } +} + +function barrettRevert(x) { + return x; +} + +//x = x mod m (HAC 14.42) +function barrettReduce(x) { + x.drShiftTo(this.m.t - 1, this.r2); + if (x.t > this.m.t + 1) { + x.t = this.m.t + 1; + x.clamp(); + } + this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3); + this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2); + while (x.compareTo(this.r2) < 0) x.dAddOffset(1, this.m.t + 1); + x.subTo(this.r2, x); + while (x.compareTo(this.m) >= 0) x.subTo(this.m, x); +} + +//r = x^2 mod m; x != r +function barrettSqrTo(x, r) { + x.squareTo(r); + this.reduce(r); +} + +//r = x*y mod m; x,y != r +function barrettMulTo(x, y, r) { + x.multiplyTo(y, r); + this.reduce(r); +} + +Barrett.prototype.convert = barrettConvert; +Barrett.prototype.revert = barrettRevert; +Barrett.prototype.reduce = barrettReduce; +Barrett.prototype.mulTo = barrettMulTo; +Barrett.prototype.sqrTo = barrettSqrTo; + +//(public) this^e % m (HAC 14.85) +function bnModPow(e, m) { + var i = e.bitLength(), k, r = nbv(1), z; + if (i <= 0) return r; + else if (i < 18) k = 1; + else if (i < 48) k = 3; + else if (i < 144) k = 4; + else if (i < 768) k = 5; + else k = 6; + if (i < 8) + z = new Classic(m); + else if (m.isEven()) + z = new Barrett(m); + else + z = new Montgomery(m); + +// precomputation + var g = new Array(), n = 3, k1 = k - 1, km = (1 << k) - 1; + g[1] = z.convert(this); + if (k > 1) { + var g2 = nbi(); + z.sqrTo(g[1], g2); + while (n <= km) { + g[n] = nbi(); + z.mulTo(g2, g[n - 2], g[n]); + n += 2; + } + } + + var j = e.t - 1, w, is1 = true, r2 = nbi(), t; + i = nbits(e[j]) - 1; + while (j >= 0) { + if (i >= k1) w = (e[j] >> (i - k1)) & km; + else { + w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i); + if (j > 0) w |= e[j - 1] >> (this.DB + i - k1); + } + + n = k; + while ((w & 1) === 0) { + w >>= 1; + --n; + } + if ((i -= n) < 0) { + i += this.DB; + --j; + } + if (is1) { // ret == 1, don't bother squaring or multiplying it + g[w].copyTo(r); + is1 = false; + } + else { + while (n > 1) { + z.sqrTo(r, r2); + z.sqrTo(r2, r); + n -= 2; + } + if (n > 0) z.sqrTo(r, r2); else { + t = r; + r = r2; + r2 = t; + } + z.mulTo(r2, g[w], r); + } + + while (j >= 0 && (e[j] & (1 << i)) === 0) { + z.sqrTo(r, r2); + t = r; + r = r2; + r2 = t; + if (--i < 0) { + i = this.DB - 1; + --j; + } + } + } + return z.revert(r); +} + +//(public) gcd(this,a) (HAC 14.54) +function bnGCD(a) { + var x = (this.s < 0) ? this.negate() : this.clone(); + var y = (a.s < 0) ? a.negate() : a.clone(); + if (x.compareTo(y) < 0) { + var t = x; + x = y; + y = t; + } + var i = x.getLowestSetBit(), g = y.getLowestSetBit(); + if (g < 0) return x; + if (i < g) g = i; + if (g > 0) { + x.rShiftTo(g, x); + y.rShiftTo(g, y); + } + while (x.signum() > 0) { + if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x); + if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y); + if (x.compareTo(y) >= 0) { + x.subTo(y, x); + x.rShiftTo(1, x); + } + else { + y.subTo(x, y); + y.rShiftTo(1, y); + } + } + if (g > 0) y.lShiftTo(g, y); + return y; +} + +//(protected) this % n, n < 2^26 +function bnpModInt(n) { + if (n <= 0) return 0; + var d = this.DV % n, r = (this.s < 0) ? n - 1 : 0; + if (this.t > 0) + if (d === 0) r = this[0] % n; + else for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n; + return r; +} + +//(public) 1/this % m (HAC 14.61) +function bnModInverse(m) { + var ac = m.isEven(); + if ((this.isEven() && ac) || m.signum() === 0) return BigInteger.ZERO; + var u = m.clone(), v = this.clone(); + var a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1); + while (u.signum() != 0) { + while (u.isEven()) { + u.rShiftTo(1, u); + if (ac) { + if (!a.isEven() || !b.isEven()) { + a.addTo(this, a); + b.subTo(m, b); + } + a.rShiftTo(1, a); + } + else if (!b.isEven()) b.subTo(m, b); + b.rShiftTo(1, b); + } + while (v.isEven()) { + v.rShiftTo(1, v); + if (ac) { + if (!c.isEven() || !d.isEven()) { + c.addTo(this, c); + d.subTo(m, d); + } + c.rShiftTo(1, c); + } + else if (!d.isEven()) d.subTo(m, d); + d.rShiftTo(1, d); + } + if (u.compareTo(v) >= 0) { + u.subTo(v, u); + if (ac) a.subTo(c, a); + b.subTo(d, b); + } + else { + v.subTo(u, v); + if (ac) c.subTo(a, c); + d.subTo(b, d); + } + } + if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO; + if (d.compareTo(m) >= 0) return d.subtract(m); + if (d.signum() < 0) d.addTo(m, d); else return d; + if (d.signum() < 0) return d.add(m); else return d; +} + +var lowprimes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997]; +var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]; + +//(public) test primality with certainty >= 1-.5^t +function bnIsProbablePrime(t) { + var i, x = this.abs(); + if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) { + for (i = 0; i < lowprimes.length; ++i) + if (x[0] == lowprimes[i]) return true; + return false; + } + if (x.isEven()) return false; + i = 1; + while (i < lowprimes.length) { + var m = lowprimes[i], j = i + 1; + while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]; + m = x.modInt(m); + while (i < j) if (m % lowprimes[i++] === 0) return false; + } + return x.millerRabin(t); +} + +//(protected) true if probably prime (HAC 4.24, Miller-Rabin) +function bnpMillerRabin(t) { + var n1 = this.subtract(BigInteger.ONE); + var k = n1.getLowestSetBit(); + if (k <= 0) return false; + var r = n1.shiftRight(k); + t = (t + 1) >> 1; + if (t > lowprimes.length) t = lowprimes.length; + var a = nbi(); + for (var i = 0; i < t; ++i) { + //Pick bases at random, instead of starting at 2 + a.fromInt(lowprimes[Math.floor(Math.random() * lowprimes.length)]); + var y = a.modPow(r, this); + if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) { + var j = 1; + while (j++ < k && y.compareTo(n1) != 0) { + y = y.modPowInt(2, this); + if (y.compareTo(BigInteger.ONE) === 0) return false; + } + if (y.compareTo(n1) != 0) return false; + } + } + return true; +} + +// protected +BigInteger.prototype.copyTo = bnpCopyTo; +BigInteger.prototype.fromInt = bnpFromInt; +BigInteger.prototype.fromString = bnpFromString; +BigInteger.prototype.fromByteArray = bnpFromByteArray; +BigInteger.prototype.fromBuffer = bnpFromBuffer; +BigInteger.prototype.clamp = bnpClamp; +BigInteger.prototype.dlShiftTo = bnpDLShiftTo; +BigInteger.prototype.drShiftTo = bnpDRShiftTo; +BigInteger.prototype.lShiftTo = bnpLShiftTo; +BigInteger.prototype.rShiftTo = bnpRShiftTo; +BigInteger.prototype.subTo = bnpSubTo; +BigInteger.prototype.multiplyTo = bnpMultiplyTo; +BigInteger.prototype.squareTo = bnpSquareTo; +BigInteger.prototype.divRemTo = bnpDivRemTo; +BigInteger.prototype.invDigit = bnpInvDigit; +BigInteger.prototype.isEven = bnpIsEven; +BigInteger.prototype.exp = bnpExp; + +BigInteger.prototype.chunkSize = bnpChunkSize; +BigInteger.prototype.toRadix = bnpToRadix; +BigInteger.prototype.fromRadix = bnpFromRadix; +BigInteger.prototype.fromNumber = bnpFromNumber; +BigInteger.prototype.bitwiseTo = bnpBitwiseTo; +BigInteger.prototype.changeBit = bnpChangeBit; +BigInteger.prototype.addTo = bnpAddTo; +BigInteger.prototype.dMultiply = bnpDMultiply; +BigInteger.prototype.dAddOffset = bnpDAddOffset; +BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo; +BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo; +BigInteger.prototype.modInt = bnpModInt; +BigInteger.prototype.millerRabin = bnpMillerRabin; + + +// public +BigInteger.prototype.toString = bnToString; +BigInteger.prototype.negate = bnNegate; +BigInteger.prototype.abs = bnAbs; +BigInteger.prototype.compareTo = bnCompareTo; +BigInteger.prototype.bitLength = bnBitLength; +BigInteger.prototype.mod = bnMod; +BigInteger.prototype.modPowInt = bnModPowInt; + +BigInteger.prototype.clone = bnClone; +BigInteger.prototype.intValue = bnIntValue; +BigInteger.prototype.byteValue = bnByteValue; +BigInteger.prototype.shortValue = bnShortValue; +BigInteger.prototype.signum = bnSigNum; +BigInteger.prototype.toByteArray = bnToByteArray; +BigInteger.prototype.toBuffer = bnToBuffer; +BigInteger.prototype.equals = bnEquals; +BigInteger.prototype.min = bnMin; +BigInteger.prototype.max = bnMax; +BigInteger.prototype.and = bnAnd; +BigInteger.prototype.or = bnOr; +BigInteger.prototype.xor = bnXor; +BigInteger.prototype.andNot = bnAndNot; +BigInteger.prototype.not = bnNot; +BigInteger.prototype.shiftLeft = bnShiftLeft; +BigInteger.prototype.shiftRight = bnShiftRight; +BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit; +BigInteger.prototype.bitCount = bnBitCount; +BigInteger.prototype.testBit = bnTestBit; +BigInteger.prototype.setBit = bnSetBit; +BigInteger.prototype.clearBit = bnClearBit; +BigInteger.prototype.flipBit = bnFlipBit; +BigInteger.prototype.add = bnAdd; +BigInteger.prototype.subtract = bnSubtract; +BigInteger.prototype.multiply = bnMultiply; +BigInteger.prototype.divide = bnDivide; +BigInteger.prototype.remainder = bnRemainder; +BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder; +BigInteger.prototype.modPow = bnModPow; +BigInteger.prototype.modInverse = bnModInverse; +BigInteger.prototype.pow = bnPow; +BigInteger.prototype.gcd = bnGCD; +BigInteger.prototype.isProbablePrime = bnIsProbablePrime; +BigInteger.int2char = int2char; + +// "constants" +BigInteger.ZERO = nbv(0); +BigInteger.ONE = nbv(1); + +// JSBN-specific extension +BigInteger.prototype.square = bnSquare; + +//BigInteger interfaces not implemented in jsbn: + +//BigInteger(int signum, byte[] magnitude) +//double doubleValue() +//float floatValue() +//int hashCode() +//long longValue() +//static BigInteger valueOf(long val) + +module.exports = BigInteger; \ No newline at end of file diff --git a/node_modules/node-rsa/src/libs/rsa.js b/node_modules/node-rsa/src/libs/rsa.js new file mode 100644 index 00000000..6f47b9dd --- /dev/null +++ b/node_modules/node-rsa/src/libs/rsa.js @@ -0,0 +1,316 @@ +/* + * RSA Encryption / Decryption with PKCS1 v2 Padding. + * + * Copyright (c) 2003-2005 Tom Wu + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL, + * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER + * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF + * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT + * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * In addition, the following condition applies: + * + * All redistributions must retain an intact copy of this copyright notice + * and disclaimer. + */ + +/* + * Node.js adaptation + * long message support implementation + * signing/verifying + * + * 2014 rzcoder + */ + +var _ = require('../utils')._; +var crypt = require('crypto'); +var BigInteger = require('./jsbn.js'); +var utils = require('../utils.js'); +var schemes = require('../schemes/schemes.js'); +var encryptEngines = require('../encryptEngines/encryptEngines.js'); + +exports.BigInteger = BigInteger; +module.exports.Key = (function () { + /** + * RSA key constructor + * + * n - modulus + * e - publicExponent + * d - privateExponent + * p - prime1 + * q - prime2 + * dmp1 - exponent1 -- d mod (p1) + * dmq1 - exponent2 -- d mod (q-1) + * coeff - coefficient -- (inverse of q) mod p + */ + function RSAKey() { + this.n = null; + this.e = 0; + this.d = null; + this.p = null; + this.q = null; + this.dmp1 = null; + this.dmq1 = null; + this.coeff = null; + } + + RSAKey.prototype.setOptions = function (options) { + var signingSchemeProvider = schemes[options.signingScheme]; + var encryptionSchemeProvider = schemes[options.encryptionScheme]; + + if (signingSchemeProvider === encryptionSchemeProvider) { + this.signingScheme = this.encryptionScheme = encryptionSchemeProvider.makeScheme(this, options); + } else { + this.encryptionScheme = encryptionSchemeProvider.makeScheme(this, options); + this.signingScheme = signingSchemeProvider.makeScheme(this, options); + } + + this.encryptEngine = encryptEngines.getEngine(this, options); + }; + + /** + * Generate a new random private key B bits long, using public expt E + * @param B + * @param E + */ + RSAKey.prototype.generate = function (B, E) { + var qs = B >> 1; + this.e = parseInt(E, 16); + var ee = new BigInteger(E, 16); + while (true) { + while (true) { + this.p = new BigInteger(B - qs, 1); + if (this.p.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) === 0 && this.p.isProbablePrime(10)) + break; + } + while (true) { + this.q = new BigInteger(qs, 1); + if (this.q.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) === 0 && this.q.isProbablePrime(10)) + break; + } + if (this.p.compareTo(this.q) <= 0) { + var t = this.p; + this.p = this.q; + this.q = t; + } + var p1 = this.p.subtract(BigInteger.ONE); + var q1 = this.q.subtract(BigInteger.ONE); + var phi = p1.multiply(q1); + if (phi.gcd(ee).compareTo(BigInteger.ONE) === 0) { + this.n = this.p.multiply(this.q); + if (this.n.bitLength() < B) { + continue; + } + this.d = ee.modInverse(phi); + this.dmp1 = this.d.mod(p1); + this.dmq1 = this.d.mod(q1); + this.coeff = this.q.modInverse(this.p); + break; + } + } + this.$$recalculateCache(); + }; + + /** + * Set the private key fields N, e, d and CRT params from buffers + * + * @param N + * @param E + * @param D + * @param P + * @param Q + * @param DP + * @param DQ + * @param C + */ + RSAKey.prototype.setPrivate = function (N, E, D, P, Q, DP, DQ, C) { + if (N && E && D && N.length > 0 && (_.isNumber(E) || E.length > 0) && D.length > 0) { + this.n = new BigInteger(N); + this.e = _.isNumber(E) ? E : utils.get32IntFromBuffer(E, 0); + this.d = new BigInteger(D); + + if (P && Q && DP && DQ && C) { + this.p = new BigInteger(P); + this.q = new BigInteger(Q); + this.dmp1 = new BigInteger(DP); + this.dmq1 = new BigInteger(DQ); + this.coeff = new BigInteger(C); + } else { + // TODO: re-calculate any missing CRT params + } + this.$$recalculateCache(); + } else { + throw Error("Invalid RSA private key"); + } + }; + + /** + * Set the public key fields N and e from hex strings + * @param N + * @param E + */ + RSAKey.prototype.setPublic = function (N, E) { + if (N && E && N.length > 0 && (_.isNumber(E) || E.length > 0)) { + this.n = new BigInteger(N); + this.e = _.isNumber(E) ? E : utils.get32IntFromBuffer(E, 0); + this.$$recalculateCache(); + } else { + throw Error("Invalid RSA public key"); + } + }; + + /** + * private + * Perform raw private operation on "x": return x^d (mod n) + * + * @param x + * @returns {*} + */ + RSAKey.prototype.$doPrivate = function (x) { + if (this.p || this.q) { + return x.modPow(this.d, this.n); + } + + // TODO: re-calculate any missing CRT params + var xp = x.mod(this.p).modPow(this.dmp1, this.p); + var xq = x.mod(this.q).modPow(this.dmq1, this.q); + + while (xp.compareTo(xq) < 0) { + xp = xp.add(this.p); + } + return xp.subtract(xq).multiply(this.coeff).mod(this.p).multiply(this.q).add(xq); + }; + + /** + * private + * Perform raw public operation on "x": return x^e (mod n) + * + * @param x + * @returns {*} + */ + RSAKey.prototype.$doPublic = function (x) { + return x.modPowInt(this.e, this.n); + }; + + /** + * Return the PKCS#1 RSA encryption of buffer + * @param buffer {Buffer} + * @returns {Buffer} + */ + RSAKey.prototype.encrypt = function (buffer, usePrivate) { + var buffers = []; + var results = []; + var bufferSize = buffer.length; + var buffersCount = Math.ceil(bufferSize / this.maxMessageLength) || 1; // total buffers count for encrypt + var dividedSize = Math.ceil(bufferSize / buffersCount || 1); // each buffer size + + if (buffersCount == 1) { + buffers.push(buffer); + } else { + for (var bufNum = 0; bufNum < buffersCount; bufNum++) { + buffers.push(buffer.slice(bufNum * dividedSize, (bufNum + 1) * dividedSize)); + } + } + + for (var i = 0; i < buffers.length; i++) { + results.push(this.encryptEngine.encrypt(buffers[i], usePrivate)); + } + + return Buffer.concat(results); + }; + + /** + * Return the PKCS#1 RSA decryption of buffer + * @param buffer {Buffer} + * @returns {Buffer} + */ + RSAKey.prototype.decrypt = function (buffer, usePublic) { + if (buffer.length % this.encryptedDataLength > 0) { + throw Error('Incorrect data or key'); + } + + var result = []; + var offset = 0; + var length = 0; + var buffersCount = buffer.length / this.encryptedDataLength; + + for (var i = 0; i < buffersCount; i++) { + offset = i * this.encryptedDataLength; + length = offset + this.encryptedDataLength; + result.push(this.encryptEngine.decrypt(buffer.slice(offset, Math.min(length, buffer.length)), usePublic)); + } + + return Buffer.concat(result); + }; + + RSAKey.prototype.sign = function (buffer) { + return this.signingScheme.sign.apply(this.signingScheme, arguments); + }; + + RSAKey.prototype.verify = function (buffer, signature, signature_encoding) { + return this.signingScheme.verify.apply(this.signingScheme, arguments); + }; + + /** + * Check if key pair contains private key + */ + RSAKey.prototype.isPrivate = function () { + return this.n && this.e && this.d || false; + }; + + /** + * Check if key pair contains public key + * @param strict {boolean} - public key only, return false if have private exponent + */ + RSAKey.prototype.isPublic = function (strict) { + return this.n && this.e && !(strict && this.d) || false; + }; + + Object.defineProperty(RSAKey.prototype, 'keySize', { + get: function () { + return this.cache.keyBitLength; + } + }); + + Object.defineProperty(RSAKey.prototype, 'encryptedDataLength', { + get: function () { + return this.cache.keyByteLength; + } + }); + + Object.defineProperty(RSAKey.prototype, 'maxMessageLength', { + get: function () { + return this.encryptionScheme.maxMessageLength(); + } + }); + + /** + * Caching key data + */ + RSAKey.prototype.$$recalculateCache = function () { + this.cache = this.cache || {}; + // Bit & byte length + this.cache.keyBitLength = this.n.bitLength(); + this.cache.keyByteLength = (this.cache.keyBitLength + 6) >> 3; + }; + + return RSAKey; +})(); + diff --git a/node_modules/node-rsa/src/schemes/oaep.js b/node_modules/node-rsa/src/schemes/oaep.js new file mode 100644 index 00000000..30ef0c1e --- /dev/null +++ b/node_modules/node-rsa/src/schemes/oaep.js @@ -0,0 +1,179 @@ +/** + * PKCS_OAEP signature scheme + */ + +var BigInteger = require('../libs/jsbn'); +var crypt = require('crypto'); + +module.exports = { + isEncryption: true, + isSignature: false +}; + +module.exports.digestLength = { + md4: 16, + md5: 16, + ripemd160: 20, + rmd160: 20, + sha1: 20, + sha224: 28, + sha256: 32, + sha384: 48, + sha512: 64 +}; + +var DEFAULT_HASH_FUNCTION = 'sha1'; + +/* + * OAEP Mask Generation Function 1 + * Generates a buffer full of pseudorandom bytes given seed and maskLength. + * Giving the same seed, maskLength, and hashFunction will result in the same exact byte values in the buffer. + * + * https://tools.ietf.org/html/rfc3447#appendix-B.2.1 + * + * Parameters: + * seed [Buffer] The pseudo random seed for this function + * maskLength [int] The length of the output + * hashFunction [String] The hashing function to use. Will accept any valid crypto hash. Default "sha1" + * Supports "sha1" and "sha256". + * To add another algorythm the algorythem must be accepted by crypto.createHash, and then the length of the output of the hash function (the digest) must be added to the digestLength object below. + * Most RSA implementations will be expecting sha1 + */ +module.exports.eme_oaep_mgf1 = function (seed, maskLength, hashFunction) { + hashFunction = hashFunction || DEFAULT_HASH_FUNCTION; + var hLen = module.exports.digestLength[hashFunction]; + var count = Math.ceil(maskLength / hLen); + var T = Buffer.alloc(hLen * count); + var c = Buffer.alloc(4); + for (var i = 0; i < count; ++i) { + var hash = crypt.createHash(hashFunction); + hash.update(seed); + c.writeUInt32BE(i, 0); + hash.update(c); + hash.digest().copy(T, i * hLen); + } + return T.slice(0, maskLength); +}; + +module.exports.makeScheme = function (key, options) { + function Scheme(key, options) { + this.key = key; + this.options = options; + } + + Scheme.prototype.maxMessageLength = function () { + return this.key.encryptedDataLength - 2 * module.exports.digestLength[this.options.encryptionSchemeOptions.hash || DEFAULT_HASH_FUNCTION] - 2; + }; + + /** + * Pad input + * alg: PKCS1_OAEP + * + * https://tools.ietf.org/html/rfc3447#section-7.1.1 + */ + Scheme.prototype.encPad = function (buffer) { + var hash = this.options.encryptionSchemeOptions.hash || DEFAULT_HASH_FUNCTION; + var mgf = this.options.encryptionSchemeOptions.mgf || module.exports.eme_oaep_mgf1; + var label = this.options.encryptionSchemeOptions.label || Buffer.alloc(0); + var emLen = this.key.encryptedDataLength; + + var hLen = module.exports.digestLength[hash]; + + // Make sure we can put message into an encoded message of emLen bytes + if (buffer.length > emLen - 2 * hLen - 2) { + throw new Error("Message is too long to encode into an encoded message with a length of " + emLen + " bytes, increase" + + "emLen to fix this error (minimum value for given parameters and options: " + (emLen - 2 * hLen - 2) + ")"); + } + + var lHash = crypt.createHash(hash); + lHash.update(label); + lHash = lHash.digest(); + + var PS = Buffer.alloc(emLen - buffer.length - 2 * hLen - 1); // Padding "String" + PS.fill(0); // Fill the buffer with octets of 0 + PS[PS.length - 1] = 1; + + var DB = Buffer.concat([lHash, PS, buffer]); + var seed = crypt.randomBytes(hLen); + + // mask = dbMask + var mask = mgf(seed, DB.length, hash); + // XOR DB and dbMask together. + for (var i = 0; i < DB.length; i++) { + DB[i] ^= mask[i]; + } + // DB = maskedDB + + // mask = seedMask + mask = mgf(DB, hLen, hash); + // XOR seed and seedMask together. + for (i = 0; i < seed.length; i++) { + seed[i] ^= mask[i]; + } + // seed = maskedSeed + + var em = Buffer.alloc(1 + seed.length + DB.length); + em[0] = 0; + seed.copy(em, 1); + DB.copy(em, 1 + seed.length); + + return em; + }; + + /** + * Unpad input + * alg: PKCS1_OAEP + * + * Note: This method works within the buffer given and modifies the values. It also returns a slice of the EM as the return Message. + * If the implementation requires that the EM parameter be unmodified then the implementation should pass in a clone of the EM buffer. + * + * https://tools.ietf.org/html/rfc3447#section-7.1.2 + */ + Scheme.prototype.encUnPad = function (buffer) { + var hash = this.options.encryptionSchemeOptions.hash || DEFAULT_HASH_FUNCTION; + var mgf = this.options.encryptionSchemeOptions.mgf || module.exports.eme_oaep_mgf1; + var label = this.options.encryptionSchemeOptions.label || Buffer.alloc(0); + + var hLen = module.exports.digestLength[hash]; + + // Check to see if buffer is a properly encoded OAEP message + if (buffer.length < 2 * hLen + 2) { + throw new Error("Error decoding message, the supplied message is not long enough to be a valid OAEP encoded message"); + } + + var seed = buffer.slice(1, hLen + 1); // seed = maskedSeed + var DB = buffer.slice(1 + hLen); // DB = maskedDB + + var mask = mgf(DB, hLen, hash); // seedMask + // XOR maskedSeed and seedMask together to get the original seed. + for (var i = 0; i < seed.length; i++) { + seed[i] ^= mask[i]; + } + + mask = mgf(seed, DB.length, hash); // dbMask + // XOR DB and dbMask together to get the original data block. + for (i = 0; i < DB.length; i++) { + DB[i] ^= mask[i]; + } + + var lHash = crypt.createHash(hash); + lHash.update(label); + lHash = lHash.digest(); + + var lHashEM = DB.slice(0, hLen); + if (lHashEM.toString("hex") != lHash.toString("hex")) { + throw new Error("Error decoding message, the lHash calculated from the label provided and the lHash in the encrypted data do not match."); + } + + // Filter out padding + i = hLen; + while (DB[i++] === 0 && i < DB.length); + if (DB[i - 1] != 1) { + throw new Error("Error decoding message, there is no padding message separator byte"); + } + + return DB.slice(i); // Message + }; + + return new Scheme(key, options); +}; diff --git a/node_modules/node-rsa/src/schemes/pkcs1.js b/node_modules/node-rsa/src/schemes/pkcs1.js new file mode 100644 index 00000000..1835c7e4 --- /dev/null +++ b/node_modules/node-rsa/src/schemes/pkcs1.js @@ -0,0 +1,238 @@ +/** + * PKCS1 padding and signature scheme + */ + +var BigInteger = require('../libs/jsbn'); +var crypt = require('crypto'); +var constants = require('constants'); +var SIGN_INFO_HEAD = { + md2: Buffer.from('3020300c06082a864886f70d020205000410', 'hex'), + md5: Buffer.from('3020300c06082a864886f70d020505000410', 'hex'), + sha1: Buffer.from('3021300906052b0e03021a05000414', 'hex'), + sha224: Buffer.from('302d300d06096086480165030402040500041c', 'hex'), + sha256: Buffer.from('3031300d060960864801650304020105000420', 'hex'), + sha384: Buffer.from('3041300d060960864801650304020205000430', 'hex'), + sha512: Buffer.from('3051300d060960864801650304020305000440', 'hex'), + ripemd160: Buffer.from('3021300906052b2403020105000414', 'hex'), + rmd160: Buffer.from('3021300906052b2403020105000414', 'hex') +}; + +var SIGN_ALG_TO_HASH_ALIASES = { + 'ripemd160': 'rmd160' +}; + +var DEFAULT_HASH_FUNCTION = 'sha256'; + +module.exports = { + isEncryption: true, + isSignature: true +}; + +module.exports.makeScheme = function (key, options) { + function Scheme(key, options) { + this.key = key; + this.options = options; + } + + Scheme.prototype.maxMessageLength = function () { + if (this.options.encryptionSchemeOptions && this.options.encryptionSchemeOptions.padding == constants.RSA_NO_PADDING) { + return this.key.encryptedDataLength; + } + return this.key.encryptedDataLength - 11; + }; + + /** + * Pad input Buffer to encryptedDataLength bytes, and return Buffer.from + * alg: PKCS#1 + * @param buffer + * @returns {Buffer} + */ + Scheme.prototype.encPad = function (buffer, options) { + options = options || {}; + var filled; + if (buffer.length > this.key.maxMessageLength) { + throw new Error("Message too long for RSA (n=" + this.key.encryptedDataLength + ", l=" + buffer.length + ")"); + } + if (this.options.encryptionSchemeOptions && this.options.encryptionSchemeOptions.padding == constants.RSA_NO_PADDING) { + //RSA_NO_PADDING treated like JAVA left pad with zero character + filled = Buffer.alloc(this.key.maxMessageLength - buffer.length); + filled.fill(0); + return Buffer.concat([filled, buffer]); + } + + /* Type 1: zeros padding for private key encrypt */ + if (options.type === 1) { + filled = Buffer.alloc(this.key.encryptedDataLength - buffer.length - 1); + filled.fill(0xff, 0, filled.length - 1); + filled[0] = 1; + filled[filled.length - 1] = 0; + + return Buffer.concat([filled, buffer]); + } else { + /* random padding for public key encrypt */ + filled = Buffer.alloc(this.key.encryptedDataLength - buffer.length); + filled[0] = 0; + filled[1] = 2; + var rand = crypt.randomBytes(filled.length - 3); + for (var i = 0; i < rand.length; i++) { + var r = rand[i]; + while (r === 0) { // non-zero only + r = crypt.randomBytes(1)[0]; + } + filled[i + 2] = r; + } + filled[filled.length - 1] = 0; + return Buffer.concat([filled, buffer]); + } + }; + + /** + * Unpad input Buffer and, if valid, return the Buffer object + * alg: PKCS#1 (type 2, random) + * @param buffer + * @returns {Buffer} + */ + Scheme.prototype.encUnPad = function (buffer, options) { + options = options || {}; + var i = 0; + + if (this.options.encryptionSchemeOptions && this.options.encryptionSchemeOptions.padding == constants.RSA_NO_PADDING) { + //RSA_NO_PADDING treated like JAVA left pad with zero character + var unPad; + if (typeof buffer.lastIndexOf == "function") { //patch for old node version + unPad = buffer.slice(buffer.lastIndexOf('\0') + 1, buffer.length); + } else { + unPad = buffer.slice(String.prototype.lastIndexOf.call(buffer, '\0') + 1, buffer.length); + } + return unPad; + } + + if (buffer.length < 4) { + return null; + } + + /* Type 1: zeros padding for private key decrypt */ + if (options.type === 1) { + if (buffer[0] !== 0 && buffer[1] !== 1) { + return null; + } + i = 3; + while (buffer[i] !== 0) { + if (buffer[i] != 0xFF || ++i >= buffer.length) { + return null; + } + } + } else { + /* random padding for public key decrypt */ + if (buffer[0] !== 0 && buffer[1] !== 2) { + return null; + } + i = 3; + while (buffer[i] !== 0) { + if (++i >= buffer.length) { + return null; + } + } + } + return buffer.slice(i + 1, buffer.length); + }; + + Scheme.prototype.sign = function (buffer) { + var hashAlgorithm = this.options.signingSchemeOptions.hash || DEFAULT_HASH_FUNCTION; + if (this.options.environment === 'browser') { + hashAlgorithm = SIGN_ALG_TO_HASH_ALIASES[hashAlgorithm] || hashAlgorithm; + + var hasher = crypt.createHash(hashAlgorithm); + hasher.update(buffer); + var hash = this.pkcs1pad(hasher.digest(), hashAlgorithm); + var res = this.key.$doPrivate(new BigInteger(hash)).toBuffer(this.key.encryptedDataLength); + + return res; + } else { + var signer = crypt.createSign('RSA-' + hashAlgorithm.toUpperCase()); + signer.update(buffer); + return signer.sign(this.options.rsaUtils.exportKey('private')); + } + }; + + Scheme.prototype.verify = function (buffer, signature, signature_encoding) { + if (this.options.encryptionSchemeOptions && this.options.encryptionSchemeOptions.padding == constants.RSA_NO_PADDING) { + //RSA_NO_PADDING has no verify data + return false; + } + var hashAlgorithm = this.options.signingSchemeOptions.hash || DEFAULT_HASH_FUNCTION; + if (this.options.environment === 'browser') { + hashAlgorithm = SIGN_ALG_TO_HASH_ALIASES[hashAlgorithm] || hashAlgorithm; + + if (signature_encoding) { + signature = Buffer.from(signature, signature_encoding); + } + + var hasher = crypt.createHash(hashAlgorithm); + hasher.update(buffer); + var hash = this.pkcs1pad(hasher.digest(), hashAlgorithm); + var m = this.key.$doPublic(new BigInteger(signature)); + + return m.toBuffer().toString('hex') == hash.toString('hex'); + } else { + var verifier = crypt.createVerify('RSA-' + hashAlgorithm.toUpperCase()); + verifier.update(buffer); + return verifier.verify(this.options.rsaUtils.exportKey('public'), signature, signature_encoding); + } + }; + + /** + * PKCS#1 zero pad input buffer to max data length + * @param hashBuf + * @param hashAlgorithm + * @returns {*} + */ + Scheme.prototype.pkcs0pad = function (buffer) { + var filled = Buffer.alloc(this.key.maxMessageLength - buffer.length); + filled.fill(0); + return Buffer.concat([filled, buffer]); + }; + + Scheme.prototype.pkcs0unpad = function (buffer) { + var unPad; + if (typeof buffer.lastIndexOf == "function") { //patch for old node version + unPad = buffer.slice(buffer.lastIndexOf('\0') + 1, buffer.length); + } else { + unPad = buffer.slice(String.prototype.lastIndexOf.call(buffer, '\0') + 1, buffer.length); + } + + return unPad; + }; + + /** + * PKCS#1 pad input buffer to max data length + * @param hashBuf + * @param hashAlgorithm + * @returns {*} + */ + Scheme.prototype.pkcs1pad = function (hashBuf, hashAlgorithm) { + var digest = SIGN_INFO_HEAD[hashAlgorithm]; + if (!digest) { + throw Error('Unsupported hash algorithm'); + } + + var data = Buffer.concat([digest, hashBuf]); + + if (data.length + 10 > this.key.encryptedDataLength) { + throw Error('Key is too short for signing algorithm (' + hashAlgorithm + ')'); + } + + var filled = Buffer.alloc(this.key.encryptedDataLength - data.length - 1); + filled.fill(0xff, 0, filled.length - 1); + filled[0] = 1; + filled[filled.length - 1] = 0; + + var res = Buffer.concat([filled, data]); + + return res; + }; + + return new Scheme(key, options); +}; + + diff --git a/node_modules/node-rsa/src/schemes/pss.js b/node_modules/node-rsa/src/schemes/pss.js new file mode 100644 index 00000000..c6e037f6 --- /dev/null +++ b/node_modules/node-rsa/src/schemes/pss.js @@ -0,0 +1,183 @@ +/** + * PSS signature scheme + */ + +var BigInteger = require('../libs/jsbn'); +var crypt = require('crypto'); + +module.exports = { + isEncryption: false, + isSignature: true +}; + +var DEFAULT_HASH_FUNCTION = 'sha1'; +var DEFAULT_SALT_LENGTH = 20; + +module.exports.makeScheme = function (key, options) { + var OAEP = require('./schemes').pkcs1_oaep; + + /** + * @param key + * @param options + * options [Object] An object that contains the following keys that specify certain options for encoding. + * └>signingSchemeOptions + * ├>hash [String] Hash function to use when encoding and generating masks. Must be a string accepted by node's crypto.createHash function. (default = "sha1") + * ├>mgf [function] The mask generation function to use when encoding. (default = mgf1SHA1) + * └>sLen [uint] The length of the salt to generate. (default = 20) + * @constructor + */ + function Scheme(key, options) { + this.key = key; + this.options = options; + } + + Scheme.prototype.sign = function (buffer) { + var mHash = crypt.createHash(this.options.signingSchemeOptions.hash || DEFAULT_HASH_FUNCTION); + mHash.update(buffer); + + var encoded = this.emsa_pss_encode(mHash.digest(), this.key.keySize - 1); + return this.key.$doPrivate(new BigInteger(encoded)).toBuffer(this.key.encryptedDataLength); + }; + + Scheme.prototype.verify = function (buffer, signature, signature_encoding) { + if (signature_encoding) { + signature = Buffer.from(signature, signature_encoding); + } + signature = new BigInteger(signature); + + var emLen = Math.ceil((this.key.keySize - 1) / 8); + var m = this.key.$doPublic(signature).toBuffer(emLen); + + var mHash = crypt.createHash(this.options.signingSchemeOptions.hash || DEFAULT_HASH_FUNCTION); + mHash.update(buffer); + + return this.emsa_pss_verify(mHash.digest(), m, this.key.keySize - 1); + }; + + /* + * https://tools.ietf.org/html/rfc3447#section-9.1.1 + * + * mHash [Buffer] Hashed message to encode + * emBits [uint] Maximum length of output in bits. Must be at least 8hLen + 8sLen + 9 (hLen = Hash digest length in bytes | sLen = length of salt in bytes) + * @returns {Buffer} The encoded message + */ + Scheme.prototype.emsa_pss_encode = function (mHash, emBits) { + var hash = this.options.signingSchemeOptions.hash || DEFAULT_HASH_FUNCTION; + var mgf = this.options.signingSchemeOptions.mgf || OAEP.eme_oaep_mgf1; + var sLen = this.options.signingSchemeOptions.saltLength || DEFAULT_SALT_LENGTH; + + var hLen = OAEP.digestLength[hash]; + var emLen = Math.ceil(emBits / 8); + + if (emLen < hLen + sLen + 2) { + throw new Error("Output length passed to emBits(" + emBits + ") is too small for the options " + + "specified(" + hash + ", " + sLen + "). To fix this issue increase the value of emBits. (minimum size: " + + (8 * hLen + 8 * sLen + 9) + ")" + ); + } + + var salt = crypt.randomBytes(sLen); + + var Mapostrophe = Buffer.alloc(8 + hLen + sLen); + Mapostrophe.fill(0, 0, 8); + mHash.copy(Mapostrophe, 8); + salt.copy(Mapostrophe, 8 + mHash.length); + + var H = crypt.createHash(hash); + H.update(Mapostrophe); + H = H.digest(); + + var PS = Buffer.alloc(emLen - salt.length - hLen - 2); + PS.fill(0); + + var DB = Buffer.alloc(PS.length + 1 + salt.length); + PS.copy(DB); + DB[PS.length] = 0x01; + salt.copy(DB, PS.length + 1); + + var dbMask = mgf(H, DB.length, hash); + + // XOR DB and dbMask together + var maskedDB = Buffer.alloc(DB.length); + for (var i = 0; i < dbMask.length; i++) { + maskedDB[i] = DB[i] ^ dbMask[i]; + } + + var bits = 8 * emLen - emBits; + var mask = 255 ^ (255 >> 8 - bits << 8 - bits); + maskedDB[0] = maskedDB[0] & mask; + + var EM = Buffer.alloc(maskedDB.length + H.length + 1); + maskedDB.copy(EM, 0); + H.copy(EM, maskedDB.length); + EM[EM.length - 1] = 0xbc; + + return EM; + }; + + /* + * https://tools.ietf.org/html/rfc3447#section-9.1.2 + * + * mHash [Buffer] Hashed message + * EM [Buffer] Signature + * emBits [uint] Length of EM in bits. Must be at least 8hLen + 8sLen + 9 to be a valid signature. (hLen = Hash digest length in bytes | sLen = length of salt in bytes) + * @returns {Boolean} True if signature(EM) matches message(M) + */ + Scheme.prototype.emsa_pss_verify = function (mHash, EM, emBits) { + var hash = this.options.signingSchemeOptions.hash || DEFAULT_HASH_FUNCTION; + var mgf = this.options.signingSchemeOptions.mgf || OAEP.eme_oaep_mgf1; + var sLen = this.options.signingSchemeOptions.saltLength || DEFAULT_SALT_LENGTH; + + var hLen = OAEP.digestLength[hash]; + var emLen = Math.ceil(emBits / 8); + + if (emLen < hLen + sLen + 2 || EM[EM.length - 1] != 0xbc) { + return false; + } + + var DB = Buffer.alloc(emLen - hLen - 1); + EM.copy(DB, 0, 0, emLen - hLen - 1); + + var mask = 0; + for (var i = 0, bits = 8 * emLen - emBits; i < bits; i++) { + mask |= 1 << (7 - i); + } + + if ((DB[0] & mask) !== 0) { + return false; + } + + var H = EM.slice(emLen - hLen - 1, emLen - 1); + var dbMask = mgf(H, DB.length, hash); + + // Unmask DB + for (i = 0; i < DB.length; i++) { + DB[i] ^= dbMask[i]; + } + + bits = 8 * emLen - emBits; + mask = 255 ^ (255 >> 8 - bits << 8 - bits); + DB[0] = DB[0] & mask; + + // Filter out padding + for (i = 0; DB[i] === 0 && i < DB.length; i++); + if (DB[i] != 1) { + return false; + } + + var salt = DB.slice(DB.length - sLen); + + var Mapostrophe = Buffer.alloc(8 + hLen + sLen); + Mapostrophe.fill(0, 0, 8); + mHash.copy(Mapostrophe, 8); + salt.copy(Mapostrophe, 8 + mHash.length); + + var Hapostrophe = crypt.createHash(hash); + Hapostrophe.update(Mapostrophe); + Hapostrophe = Hapostrophe.digest(); + + return H.toString("hex") === Hapostrophe.toString("hex"); + }; + + return new Scheme(key, options); +}; diff --git a/node_modules/node-rsa/src/schemes/schemes.js b/node_modules/node-rsa/src/schemes/schemes.js new file mode 100644 index 00000000..3eb82612 --- /dev/null +++ b/node_modules/node-rsa/src/schemes/schemes.js @@ -0,0 +1,23 @@ +module.exports = { + pkcs1: require('./pkcs1'), + pkcs1_oaep: require('./oaep'), + pss: require('./pss'), + + /** + * Check if scheme has padding methods + * @param scheme {string} + * @returns {Boolean} + */ + isEncryption: function (scheme) { + return module.exports[scheme] && module.exports[scheme].isEncryption; + }, + + /** + * Check if scheme has sign/verify methods + * @param scheme {string} + * @returns {Boolean} + */ + isSignature: function (scheme) { + return module.exports[scheme] && module.exports[scheme].isSignature; + } +}; \ No newline at end of file diff --git a/node_modules/node-rsa/src/utils.js b/node_modules/node-rsa/src/utils.js new file mode 100644 index 00000000..2ed6313e --- /dev/null +++ b/node_modules/node-rsa/src/utils.js @@ -0,0 +1,108 @@ +/* + * Utils functions + * + */ + +var crypt = require('crypto'); + +/** + * Break string str each maxLen symbols + * @param str + * @param maxLen + * @returns {string} + */ +module.exports.linebrk = function (str, maxLen) { + var res = ''; + var i = 0; + while (i + maxLen < str.length) { + res += str.substring(i, i + maxLen) + "\n"; + i += maxLen; + } + return res + str.substring(i, str.length); +}; + +module.exports.detectEnvironment = function () { + if (typeof(window) !== 'undefined' && window && !(process && process.title === 'node')) { + return 'browser'; + } + + return 'node'; +}; + +/** + * Trying get a 32-bit unsigned integer from the partial buffer + * @param buffer + * @param offset + * @returns {Number} + */ +module.exports.get32IntFromBuffer = function (buffer, offset) { + offset = offset || 0; + var size = 0; + if ((size = buffer.length - offset) > 0) { + if (size >= 4) { + return buffer.readUInt32BE(offset); + } else { + var res = 0; + for (var i = offset + size, d = 0; i > offset; i--, d += 2) { + res += buffer[i - 1] * Math.pow(16, d); + } + return res; + } + } else { + return NaN; + } +}; + +module.exports._ = { + isObject: function (value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); + }, + + isString: function (value) { + return typeof value == 'string' || value instanceof String; + }, + + isNumber: function (value) { + return typeof value == 'number' || !isNaN(parseFloat(value)) && isFinite(value); + }, + + /** + * Returns copy of `obj` without `removeProp` field. + * @param obj + * @param removeProp + * @returns Object + */ + omit: function (obj, removeProp) { + var newObj = {}; + for (var prop in obj) { + if (!obj.hasOwnProperty(prop) || prop === removeProp) { + continue; + } + newObj[prop] = obj[prop]; + } + + return newObj; + } +}; + +/** + * Strips everything around the opening and closing lines, including the lines + * themselves. + */ +module.exports.trimSurroundingText = function (data, opening, closing) { + var trimStartIndex = 0; + var trimEndIndex = data.length; + + var openingBoundaryIndex = data.indexOf(opening); + if (openingBoundaryIndex >= 0) { + trimStartIndex = openingBoundaryIndex + opening.length; + } + + var closingBoundaryIndex = data.indexOf(closing, openingBoundaryIndex); + if (closingBoundaryIndex >= 0) { + trimEndIndex = closingBoundaryIndex; + } + + return data.substring(trimStartIndex, trimEndIndex); +} \ No newline at end of file diff --git a/node_modules/npm-run-path/index.js b/node_modules/npm-run-path/index.js new file mode 100644 index 00000000..56f31e47 --- /dev/null +++ b/node_modules/npm-run-path/index.js @@ -0,0 +1,39 @@ +'use strict'; +const path = require('path'); +const pathKey = require('path-key'); + +module.exports = opts => { + opts = Object.assign({ + cwd: process.cwd(), + path: process.env[pathKey()] + }, opts); + + let prev; + let pth = path.resolve(opts.cwd); + const ret = []; + + while (prev !== pth) { + ret.push(path.join(pth, 'node_modules/.bin')); + prev = pth; + pth = path.resolve(pth, '..'); + } + + // ensure the running `node` binary is used + ret.push(path.dirname(process.execPath)); + + return ret.concat(opts.path).join(path.delimiter); +}; + +module.exports.env = opts => { + opts = Object.assign({ + env: process.env + }, opts); + + const env = Object.assign({}, opts.env); + const path = pathKey({env}); + + opts.path = env[path]; + env[path] = module.exports(opts); + + return env; +}; diff --git a/node_modules/npm-run-path/license b/node_modules/npm-run-path/license new file mode 100644 index 00000000..654d0bfe --- /dev/null +++ b/node_modules/npm-run-path/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/npm-run-path/package.json b/node_modules/npm-run-path/package.json new file mode 100644 index 00000000..5435dadc --- /dev/null +++ b/node_modules/npm-run-path/package.json @@ -0,0 +1,77 @@ +{ + "_from": "npm-run-path@^2.0.0", + "_id": "npm-run-path@2.0.2", + "_inBundle": false, + "_integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "_location": "/npm-run-path", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "npm-run-path@^2.0.0", + "name": "npm-run-path", + "escapedName": "npm-run-path", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/execa" + ], + "_resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "_shasum": "35a9232dfa35d7067b4cb2ddf2357b1871536c5f", + "_spec": "npm-run-path@^2.0.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/execa", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/npm-run-path/issues" + }, + "bundleDependencies": false, + "dependencies": { + "path-key": "^2.0.0" + }, + "deprecated": false, + "description": "Get your PATH prepended with locally installed binaries", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "engines": { + "node": ">=4" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/npm-run-path#readme", + "keywords": [ + "npm", + "run", + "path", + "package", + "bin", + "binary", + "binaries", + "script", + "cli", + "command-line", + "execute", + "executable" + ], + "license": "MIT", + "name": "npm-run-path", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/npm-run-path.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "2.0.2", + "xo": { + "esnext": true + } +} diff --git a/node_modules/npm-run-path/readme.md b/node_modules/npm-run-path/readme.md new file mode 100644 index 00000000..4ff4722a --- /dev/null +++ b/node_modules/npm-run-path/readme.md @@ -0,0 +1,81 @@ +# npm-run-path [![Build Status](https://travis-ci.org/sindresorhus/npm-run-path.svg?branch=master)](https://travis-ci.org/sindresorhus/npm-run-path) + +> Get your [PATH](https://en.wikipedia.org/wiki/PATH_(variable)) prepended with locally installed binaries + +In [npm run scripts](https://docs.npmjs.com/cli/run-script) you can execute locally installed binaries by name. This enables the same outside npm. + + +## Install + +``` +$ npm install --save npm-run-path +``` + + +## Usage + +```js +const childProcess = require('child_process'); +const npmRunPath = require('npm-run-path'); + +console.log(process.env.PATH); +//=> '/usr/local/bin' + +console.log(npmRunPath()); +//=> '/Users/sindresorhus/dev/foo/node_modules/.bin:/Users/sindresorhus/dev/node_modules/.bin:/Users/sindresorhus/node_modules/.bin:/Users/node_modules/.bin:/node_modules/.bin:/usr/local/bin' + +// `foo` is a locally installed binary +childProcess.execFileSync('foo', { + env: npmRunPath.env() +}); +``` + + +## API + +### npmRunPath([options]) + +#### options + +##### cwd + +Type: `string`
+Default: `process.cwd()` + +Working directory. + +##### path + +Type: `string`
+Default: [`PATH`](https://github.com/sindresorhus/path-key) + +PATH to be appended.
+Set it to an empty string to exclude the default PATH. + +### npmRunPath.env([options]) + +#### options + +##### cwd + +Type: `string`
+Default: `process.cwd()` + +Working directory. + +##### env + +Type: `Object` + +Accepts an object of environment variables, like `process.env`, and modifies the PATH using the correct [PATH key](https://github.com/sindresorhus/path-key). Use this if you're modifying the PATH for use in the `child_process` options. + + +## Related + +- [npm-run-path-cli](https://github.com/sindresorhus/npm-run-path-cli) - CLI for this module +- [execa](https://github.com/sindresorhus/execa) - Execute a locally installed binary + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/once/LICENSE b/node_modules/once/LICENSE new file mode 100644 index 00000000..19129e31 --- /dev/null +++ b/node_modules/once/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/once/README.md b/node_modules/once/README.md new file mode 100644 index 00000000..1f1ffca9 --- /dev/null +++ b/node_modules/once/README.md @@ -0,0 +1,79 @@ +# once + +Only call a function once. + +## usage + +```javascript +var once = require('once') + +function load (file, cb) { + cb = once(cb) + loader.load('file') + loader.once('load', cb) + loader.once('error', cb) +} +``` + +Or add to the Function.prototype in a responsible way: + +```javascript +// only has to be done once +require('once').proto() + +function load (file, cb) { + cb = cb.once() + loader.load('file') + loader.once('load', cb) + loader.once('error', cb) +} +``` + +Ironically, the prototype feature makes this module twice as +complicated as necessary. + +To check whether you function has been called, use `fn.called`. Once the +function is called for the first time the return value of the original +function is saved in `fn.value` and subsequent calls will continue to +return this value. + +```javascript +var once = require('once') + +function load (cb) { + cb = once(cb) + var stream = createStream() + stream.once('data', cb) + stream.once('end', function () { + if (!cb.called) cb(new Error('not found')) + }) +} +``` + +## `once.strict(func)` + +Throw an error if the function is called twice. + +Some functions are expected to be called only once. Using `once` for them would +potentially hide logical errors. + +In the example below, the `greet` function has to call the callback only once: + +```javascript +function greet (name, cb) { + // return is missing from the if statement + // when no name is passed, the callback is called twice + if (!name) cb('Hello anonymous') + cb('Hello ' + name) +} + +function log (msg) { + console.log(msg) +} + +// this will print 'Hello anonymous' but the logical error will be missed +greet(null, once(msg)) + +// once.strict will print 'Hello anonymous' and throw an error when the callback will be called the second time +greet(null, once.strict(msg)) +``` diff --git a/node_modules/once/once.js b/node_modules/once/once.js new file mode 100644 index 00000000..23540673 --- /dev/null +++ b/node_modules/once/once.js @@ -0,0 +1,42 @@ +var wrappy = require('wrappy') +module.exports = wrappy(once) +module.exports.strict = wrappy(onceStrict) + +once.proto = once(function () { + Object.defineProperty(Function.prototype, 'once', { + value: function () { + return once(this) + }, + configurable: true + }) + + Object.defineProperty(Function.prototype, 'onceStrict', { + value: function () { + return onceStrict(this) + }, + configurable: true + }) +}) + +function once (fn) { + var f = function () { + if (f.called) return f.value + f.called = true + return f.value = fn.apply(this, arguments) + } + f.called = false + return f +} + +function onceStrict (fn) { + var f = function () { + if (f.called) + throw new Error(f.onceError) + f.called = true + return f.value = fn.apply(this, arguments) + } + var name = fn.name || 'Function wrapped with `once`' + f.onceError = name + " shouldn't be called more than once" + f.called = false + return f +} diff --git a/node_modules/once/package.json b/node_modules/once/package.json new file mode 100644 index 00000000..d9fca20f --- /dev/null +++ b/node_modules/once/package.json @@ -0,0 +1,69 @@ +{ + "_from": "once@^1.3.1", + "_id": "once@1.4.0", + "_inBundle": false, + "_integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "_location": "/once", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "once@^1.3.1", + "name": "once", + "escapedName": "once", + "rawSpec": "^1.3.1", + "saveSpec": null, + "fetchSpec": "^1.3.1" + }, + "_requiredBy": [ + "/end-of-stream", + "/glob", + "/inflight", + "/pump" + ], + "_resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "_shasum": "583b1aa775961d4b113ac17d9c50baef9dd76bd1", + "_spec": "once@^1.3.1", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/pump", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/isaacs/once/issues" + }, + "bundleDependencies": false, + "dependencies": { + "wrappy": "1" + }, + "deprecated": false, + "description": "Run a function exactly one time", + "devDependencies": { + "tap": "^7.0.1" + }, + "directories": { + "test": "test" + }, + "files": [ + "once.js" + ], + "homepage": "https://github.com/isaacs/once#readme", + "keywords": [ + "once", + "function", + "one", + "single" + ], + "license": "ISC", + "main": "once.js", + "name": "once", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/once.git" + }, + "scripts": { + "test": "tap test/*.js" + }, + "version": "1.4.0" +} diff --git a/node_modules/os-locale/index.js b/node_modules/os-locale/index.js new file mode 100644 index 00000000..8c73c99f --- /dev/null +++ b/node_modules/os-locale/index.js @@ -0,0 +1,114 @@ +'use strict'; +const execa = require('execa'); +const lcid = require('lcid'); +const mem = require('mem'); + +const defaultOptions = {spawn: true}; +const defaultLocale = 'en_US'; + +function getEnvLocale(env = process.env) { + return env.LC_ALL || env.LC_MESSAGES || env.LANG || env.LANGUAGE; +} + +function parseLocale(string) { + const env = string.split('\n').reduce((env, def) => { + const [key, value] = def.split('='); + env[key] = value.replace(/^"|"$/g, ''); + return env; + }, {}); + + return getEnvLocale(env); +} + +function getLocale(string) { + return (string && string.replace(/[.:].*/, '')); +} + +function getLocales() { + return execa.stdout('locale', ['-a']); +} + +function getLocalesSync() { + return execa.sync('locale', ['-a']).stdout; +} + +function getSupportedLocale(locale, locales = '') { + return locales.includes(locale) ? locale : defaultLocale; +} + +function getAppleLocale() { + return Promise.all([ + execa.stdout('defaults', ['read', '-globalDomain', 'AppleLocale']), + getLocales() + ]).then(results => getSupportedLocale(results[0], results[1])); +} + +function getAppleLocaleSync() { + return getSupportedLocale( + execa.sync('defaults', ['read', '-globalDomain', 'AppleLocale']).stdout, + getLocalesSync() + ); +} + +function getUnixLocale() { + if (process.platform === 'darwin') { + return getAppleLocale(); + } + + return execa.stdout('locale') + .then(stdout => getLocale(parseLocale(stdout))); +} + +function getUnixLocaleSync() { + if (process.platform === 'darwin') { + return getAppleLocaleSync(); + } + + return getLocale(parseLocale(execa.sync('locale').stdout)); +} + +function getWinLocale() { + return execa.stdout('wmic', ['os', 'get', 'locale']) + .then(stdout => { + const lcidCode = parseInt(stdout.replace('Locale', ''), 16); + return lcid.from(lcidCode); + }); +} + +function getWinLocaleSync() { + const {stdout} = execa.sync('wmic', ['os', 'get', 'locale']); + const lcidCode = parseInt(stdout.replace('Locale', ''), 16); + return lcid.from(lcidCode); +} + +module.exports = mem((options = defaultOptions) => { + const envLocale = getEnvLocale(); + + let thenable; + if (envLocale || options.spawn === false) { + thenable = Promise.resolve(getLocale(envLocale)); + } else if (process.platform === 'win32') { + thenable = getWinLocale(); + } else { + thenable = getUnixLocale(); + } + + return thenable + .then(locale => locale || defaultLocale) + .catch(() => defaultLocale); +}); + +module.exports.sync = mem((options = defaultOptions) => { + const envLocale = getEnvLocale(); + + let res; + if (envLocale || options.spawn === false) { + res = getLocale(envLocale); + } else { + try { + res = process.platform === 'win32' ? getWinLocaleSync() : getUnixLocaleSync(); + } catch (_) {} + } + + return res || defaultLocale; +}); diff --git a/node_modules/os-locale/license b/node_modules/os-locale/license new file mode 100644 index 00000000..e7af2f77 --- /dev/null +++ b/node_modules/os-locale/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/os-locale/package.json b/node_modules/os-locale/package.json new file mode 100644 index 00000000..c97701b9 --- /dev/null +++ b/node_modules/os-locale/package.json @@ -0,0 +1,77 @@ +{ + "_from": "os-locale@^3.1.0", + "_id": "os-locale@3.1.0", + "_inBundle": false, + "_integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "_location": "/os-locale", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "os-locale@^3.1.0", + "name": "os-locale", + "escapedName": "os-locale", + "rawSpec": "^3.1.0", + "saveSpec": null, + "fetchSpec": "^3.1.0" + }, + "_requiredBy": [ + "/strong-globalize" + ], + "_resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "_shasum": "a802a6ee17f24c10483ab9935719cef4ed16bf1a", + "_spec": "os-locale@^3.1.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/strong-globalize", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/os-locale/issues" + }, + "bundleDependencies": false, + "dependencies": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + }, + "deprecated": false, + "description": "Get the system locale", + "devDependencies": { + "ava": "^1.0.1", + "import-fresh": "^3.0.0", + "xo": "^0.23.0" + }, + "engines": { + "node": ">=6" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/os-locale#readme", + "keywords": [ + "locale", + "lang", + "language", + "system", + "os", + "string", + "str", + "user", + "country", + "id", + "identifier", + "region" + ], + "license": "MIT", + "name": "os-locale", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/os-locale.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "3.1.0" +} diff --git a/node_modules/os-locale/readme.md b/node_modules/os-locale/readme.md new file mode 100644 index 00000000..8f9c280e --- /dev/null +++ b/node_modules/os-locale/readme.md @@ -0,0 +1,71 @@ +# os-locale [![Build Status](https://travis-ci.org/sindresorhus/os-locale.svg?branch=master)](https://travis-ci.org/sindresorhus/os-locale) + +> Get the system [locale](https://en.wikipedia.org/wiki/Locale_(computer_software)) + +Useful for localizing your module or app. + +POSIX systems: The returned locale refers to the [`LC_MESSAGE`](http://www.gnu.org/software/libc/manual/html_node/Locale-Categories.html#Locale-Categories) category, suitable for selecting the language used in the user interface for message translation. + +--- + +
+ + Get professional support for 'os-locale' with a Tidelift subscription + +
+ + Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies. +
+
+ +--- + +## Install + +``` +$ npm install os-locale +``` + + +## Usage + +```js +const osLocale = require('os-locale'); + +(async () => { + console.log(await osLocale()); + //=> 'en_US' +})(); +``` + + +## API + +### osLocale([options]) + +Returns a `Promise` for the locale. + +### osLocale.sync([options]) + +Returns the locale. + +#### options + +Type: `Object` + +##### spawn + +Type: `boolean`
+Default: `true` + +Set to `false` to avoid spawning subprocesses and instead only resolve the locale from environment variables. + + +## Security + +To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure. + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/p-defer/index.js b/node_modules/p-defer/index.js new file mode 100644 index 00000000..eaef75e4 --- /dev/null +++ b/node_modules/p-defer/index.js @@ -0,0 +1,11 @@ +'use strict'; +module.exports = () => { + const ret = {}; + + ret.promise = new Promise((resolve, reject) => { + ret.resolve = resolve; + ret.reject = reject; + }); + + return ret; +}; diff --git a/node_modules/p-defer/license b/node_modules/p-defer/license new file mode 100644 index 00000000..654d0bfe --- /dev/null +++ b/node_modules/p-defer/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/p-defer/package.json b/node_modules/p-defer/package.json new file mode 100644 index 00000000..e9ebbe2b --- /dev/null +++ b/node_modules/p-defer/package.json @@ -0,0 +1,73 @@ +{ + "_from": "p-defer@^1.0.0", + "_id": "p-defer@1.0.0", + "_inBundle": false, + "_integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "_location": "/p-defer", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "p-defer@^1.0.0", + "name": "p-defer", + "escapedName": "p-defer", + "rawSpec": "^1.0.0", + "saveSpec": null, + "fetchSpec": "^1.0.0" + }, + "_requiredBy": [ + "/map-age-cleaner" + ], + "_resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "_shasum": "9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c", + "_spec": "p-defer@^1.0.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/map-age-cleaner", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/p-defer/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Create a deferred promise", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "engines": { + "node": ">=4" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/p-defer#readme", + "keywords": [ + "promise", + "defer", + "deferred", + "resolve", + "reject", + "lazy", + "later", + "async", + "await", + "promises", + "bluebird" + ], + "license": "MIT", + "name": "p-defer", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/p-defer.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "1.0.0", + "xo": { + "esnext": true + } +} diff --git a/node_modules/p-defer/readme.md b/node_modules/p-defer/readme.md new file mode 100644 index 00000000..b94f1371 --- /dev/null +++ b/node_modules/p-defer/readme.md @@ -0,0 +1,47 @@ +# p-defer [![Build Status](https://travis-ci.org/sindresorhus/p-defer.svg?branch=master)](https://travis-ci.org/sindresorhus/p-defer) + +> Create a deferred promise + +[**Don't use this unless you know what you're doing!**](https://github.com/petkaantonov/bluebird/wiki/Promise-anti-patterns#the-deferred-anti-pattern) Prefer the `Promise` constructor. + + +## Install + +``` +$ npm install --save p-defer +``` + + +## Usage + +```js +const pDefer = require('p-defer'); + +function delay(ms) { + const deferred = pDefer(); + setTimeout(deferred.resolve, ms, '🦄'); + return deferred.promise; +} + +delay(100).then(console.log); +//=> '🦄' +``` + +*The above is just an example. Use [`delay`](https://github.com/sindresorhus/delay) if you need to delay a promise.* + + +## API + +### pDefer() + +Returns an `Object` with a `promise` property and functions to `resolve()` and `reject()`. + + +## Related + +- [More…](https://github.com/sindresorhus/promise-fun) + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/p-finally/index.js b/node_modules/p-finally/index.js new file mode 100644 index 00000000..52b7b49c --- /dev/null +++ b/node_modules/p-finally/index.js @@ -0,0 +1,15 @@ +'use strict'; +module.exports = (promise, onFinally) => { + onFinally = onFinally || (() => {}); + + return promise.then( + val => new Promise(resolve => { + resolve(onFinally()); + }).then(() => val), + err => new Promise(resolve => { + resolve(onFinally()); + }).then(() => { + throw err; + }) + ); +}; diff --git a/node_modules/p-finally/license b/node_modules/p-finally/license new file mode 100644 index 00000000..654d0bfe --- /dev/null +++ b/node_modules/p-finally/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/p-finally/package.json b/node_modules/p-finally/package.json new file mode 100644 index 00000000..dfed1e1c --- /dev/null +++ b/node_modules/p-finally/package.json @@ -0,0 +1,74 @@ +{ + "_from": "p-finally@^1.0.0", + "_id": "p-finally@1.0.0", + "_inBundle": false, + "_integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "_location": "/p-finally", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "p-finally@^1.0.0", + "name": "p-finally", + "escapedName": "p-finally", + "rawSpec": "^1.0.0", + "saveSpec": null, + "fetchSpec": "^1.0.0" + }, + "_requiredBy": [ + "/execa" + ], + "_resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "_shasum": "3fbcfb15b899a44123b34b6dcc18b724336a2cae", + "_spec": "p-finally@^1.0.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/execa", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/p-finally/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "`Promise#finally()` ponyfill - Invoked when the promise is settled regardless of outcome", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "engines": { + "node": ">=4" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/p-finally#readme", + "keywords": [ + "promise", + "finally", + "handler", + "function", + "async", + "await", + "promises", + "settled", + "ponyfill", + "polyfill", + "shim", + "bluebird" + ], + "license": "MIT", + "name": "p-finally", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/p-finally.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "1.0.0", + "xo": { + "esnext": true + } +} diff --git a/node_modules/p-finally/readme.md b/node_modules/p-finally/readme.md new file mode 100644 index 00000000..09ef3641 --- /dev/null +++ b/node_modules/p-finally/readme.md @@ -0,0 +1,47 @@ +# p-finally [![Build Status](https://travis-ci.org/sindresorhus/p-finally.svg?branch=master)](https://travis-ci.org/sindresorhus/p-finally) + +> [`Promise#finally()`](https://github.com/tc39/proposal-promise-finally) [ponyfill](https://ponyfill.com) - Invoked when the promise is settled regardless of outcome + +Useful for cleanup. + + +## Install + +``` +$ npm install --save p-finally +``` + + +## Usage + +```js +const pFinally = require('p-finally'); + +const dir = createTempDir(); + +pFinally(write(dir), () => cleanup(dir)); +``` + + +## API + +### pFinally(promise, [onFinally]) + +Returns a `Promise`. + +#### onFinally + +Type: `Function` + +Note: Throwing or returning a rejected promise will reject `promise` with the rejection reason. + + +## Related + +- [p-try](https://github.com/sindresorhus/p-try) - `Promise#try()` ponyfill - Starts a promise chain +- [More…](https://github.com/sindresorhus/promise-fun) + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/p-is-promise/index.d.ts b/node_modules/p-is-promise/index.d.ts new file mode 100644 index 00000000..662d9e0c --- /dev/null +++ b/node_modules/p-is-promise/index.d.ts @@ -0,0 +1,23 @@ +declare const pIsPromise: { + /** + Check if `input` is a ES2015 promise. + + @param input - Value to be checked. + + @example + ``` + import isPromise = require('p-is-promise'); + + isPromise(Promise.resolve('🦄')); + //=> true + ``` + */ + (input: unknown): input is Promise; + + // TODO: Remove this for the next major release, refactor the whole definition to: + // declare function pIsPromise(input: unknown): input is Promise; + // export = pIsPromise; + default: typeof pIsPromise; +}; + +export = pIsPromise; diff --git a/node_modules/p-is-promise/index.js b/node_modules/p-is-promise/index.js new file mode 100644 index 00000000..389d38fc --- /dev/null +++ b/node_modules/p-is-promise/index.js @@ -0,0 +1,15 @@ +'use strict'; + +const isPromise = input => ( + input instanceof Promise || + ( + input !== null && + typeof input === 'object' && + typeof input.then === 'function' && + typeof input.catch === 'function' + ) +); + +module.exports = isPromise; +// TODO: Remove this for the next major release +module.exports.default = isPromise; diff --git a/node_modules/p-is-promise/license b/node_modules/p-is-promise/license new file mode 100644 index 00000000..e7af2f77 --- /dev/null +++ b/node_modules/p-is-promise/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/p-is-promise/package.json b/node_modules/p-is-promise/package.json new file mode 100644 index 00000000..c03666bf --- /dev/null +++ b/node_modules/p-is-promise/package.json @@ -0,0 +1,74 @@ +{ + "_from": "p-is-promise@^2.0.0", + "_id": "p-is-promise@2.1.0", + "_inBundle": false, + "_integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "_location": "/p-is-promise", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "p-is-promise@^2.0.0", + "name": "p-is-promise", + "escapedName": "p-is-promise", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/mem" + ], + "_resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "_shasum": "918cebaea248a62cf7ffab8e3bca8c5f882fc42e", + "_spec": "p-is-promise@^2.0.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/mem", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/p-is-promise/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Check if something is a promise", + "devDependencies": { + "ava": "^1.4.1", + "bluebird": "^3.5.4", + "tsd": "^0.7.2", + "xo": "^0.24.0" + }, + "engines": { + "node": ">=6" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "homepage": "https://github.com/sindresorhus/p-is-promise#readme", + "keywords": [ + "promise", + "is", + "detect", + "check", + "kind", + "type", + "thenable", + "es2015", + "async", + "await", + "promises", + "bluebird" + ], + "license": "MIT", + "name": "p-is-promise", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/p-is-promise.git" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "version": "2.1.0" +} diff --git a/node_modules/p-is-promise/readme.md b/node_modules/p-is-promise/readme.md new file mode 100644 index 00000000..0e0e4817 --- /dev/null +++ b/node_modules/p-is-promise/readme.md @@ -0,0 +1,43 @@ +# p-is-promise [![Build Status](https://travis-ci.org/sindresorhus/p-is-promise.svg?branch=master)](https://travis-ci.org/sindresorhus/p-is-promise) + +> Check if something is a promise + +Why not [`is-promise`](https://github.com/then/is-promise)? That module [checks for a thenable](https://github.com/then/is-promise/issues/6), not an ES2015 promise. This one is stricter. + +You most likely don't need this. Just pass your value to `Promise.resolve()` and let it handle it. + +Can be useful if you need to create a fast path for a synchronous operation. + + +## Install + +``` +$ npm install p-is-promise +``` + + +## Usage + +```js +const pIsPromise = require('p-is-promise'); +const Bluebird = require('bluebird'); + +pIsPromise(Promise.resolve('🦄')); +//=> true + +pIsPromise(Bluebird.resolve('🦄')); +//=> true + +pIsPromise('🦄'); +//=> false +``` + + +## Related + +- [More…](https://github.com/sindresorhus/promise-fun) + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/path-is-absolute/index.js b/node_modules/path-is-absolute/index.js new file mode 100644 index 00000000..22aa6c35 --- /dev/null +++ b/node_modules/path-is-absolute/index.js @@ -0,0 +1,20 @@ +'use strict'; + +function posix(path) { + return path.charAt(0) === '/'; +} + +function win32(path) { + // https://github.com/nodejs/node/blob/b3fcc245fb25539909ef1d5eaa01dbf92e168633/lib/path.js#L56 + var splitDeviceRe = /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/; + var result = splitDeviceRe.exec(path); + var device = result[1] || ''; + var isUnc = Boolean(device && device.charAt(1) !== ':'); + + // UNC paths are always absolute + return Boolean(result[2] || isUnc); +} + +module.exports = process.platform === 'win32' ? win32 : posix; +module.exports.posix = posix; +module.exports.win32 = win32; diff --git a/node_modules/path-is-absolute/license b/node_modules/path-is-absolute/license new file mode 100644 index 00000000..654d0bfe --- /dev/null +++ b/node_modules/path-is-absolute/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/path-is-absolute/package.json b/node_modules/path-is-absolute/package.json new file mode 100644 index 00000000..6f355794 --- /dev/null +++ b/node_modules/path-is-absolute/package.json @@ -0,0 +1,75 @@ +{ + "_from": "path-is-absolute@^1.0.0", + "_id": "path-is-absolute@1.0.1", + "_inBundle": false, + "_integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "_location": "/path-is-absolute", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "path-is-absolute@^1.0.0", + "name": "path-is-absolute", + "escapedName": "path-is-absolute", + "rawSpec": "^1.0.0", + "saveSpec": null, + "fetchSpec": "^1.0.0" + }, + "_requiredBy": [ + "/glob" + ], + "_resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "_shasum": "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f", + "_spec": "path-is-absolute@^1.0.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/glob", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/path-is-absolute/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Node.js 0.12 path.isAbsolute() ponyfill", + "devDependencies": { + "xo": "^0.16.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/path-is-absolute#readme", + "keywords": [ + "path", + "paths", + "file", + "dir", + "absolute", + "isabsolute", + "is-absolute", + "built-in", + "util", + "utils", + "core", + "ponyfill", + "polyfill", + "shim", + "is", + "detect", + "check" + ], + "license": "MIT", + "name": "path-is-absolute", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/path-is-absolute.git" + }, + "scripts": { + "test": "xo && node test.js" + }, + "version": "1.0.1" +} diff --git a/node_modules/path-is-absolute/readme.md b/node_modules/path-is-absolute/readme.md new file mode 100644 index 00000000..8dbdf5fc --- /dev/null +++ b/node_modules/path-is-absolute/readme.md @@ -0,0 +1,59 @@ +# path-is-absolute [![Build Status](https://travis-ci.org/sindresorhus/path-is-absolute.svg?branch=master)](https://travis-ci.org/sindresorhus/path-is-absolute) + +> Node.js 0.12 [`path.isAbsolute()`](http://nodejs.org/api/path.html#path_path_isabsolute_path) [ponyfill](https://ponyfill.com) + + +## Install + +``` +$ npm install --save path-is-absolute +``` + + +## Usage + +```js +const pathIsAbsolute = require('path-is-absolute'); + +// Running on Linux +pathIsAbsolute('/home/foo'); +//=> true +pathIsAbsolute('C:/Users/foo'); +//=> false + +// Running on Windows +pathIsAbsolute('C:/Users/foo'); +//=> true +pathIsAbsolute('/home/foo'); +//=> false + +// Running on any OS +pathIsAbsolute.posix('/home/foo'); +//=> true +pathIsAbsolute.posix('C:/Users/foo'); +//=> false +pathIsAbsolute.win32('C:/Users/foo'); +//=> true +pathIsAbsolute.win32('/home/foo'); +//=> false +``` + + +## API + +See the [`path.isAbsolute()` docs](http://nodejs.org/api/path.html#path_path_isabsolute_path). + +### pathIsAbsolute(path) + +### pathIsAbsolute.posix(path) + +POSIX specific version. + +### pathIsAbsolute.win32(path) + +Windows specific version. + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/path-key/index.js b/node_modules/path-key/index.js new file mode 100644 index 00000000..62c8250a --- /dev/null +++ b/node_modules/path-key/index.js @@ -0,0 +1,13 @@ +'use strict'; +module.exports = opts => { + opts = opts || {}; + + const env = opts.env || process.env; + const platform = opts.platform || process.platform; + + if (platform !== 'win32') { + return 'PATH'; + } + + return Object.keys(env).find(x => x.toUpperCase() === 'PATH') || 'Path'; +}; diff --git a/node_modules/path-key/license b/node_modules/path-key/license new file mode 100644 index 00000000..654d0bfe --- /dev/null +++ b/node_modules/path-key/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/path-key/package.json b/node_modules/path-key/package.json new file mode 100644 index 00000000..d6a8a4e5 --- /dev/null +++ b/node_modules/path-key/package.json @@ -0,0 +1,72 @@ +{ + "_from": "path-key@^2.0.1", + "_id": "path-key@2.0.1", + "_inBundle": false, + "_integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "_location": "/path-key", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "path-key@^2.0.1", + "name": "path-key", + "escapedName": "path-key", + "rawSpec": "^2.0.1", + "saveSpec": null, + "fetchSpec": "^2.0.1" + }, + "_requiredBy": [ + "/cross-spawn", + "/npm-run-path" + ], + "_resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "_shasum": "411cadb574c5a140d3a4b1910d40d80cc9f40b40", + "_spec": "path-key@^2.0.1", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/cross-spawn", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/path-key/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Get the PATH environment variable key cross-platform", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "engines": { + "node": ">=4" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/path-key#readme", + "keywords": [ + "path", + "key", + "environment", + "env", + "variable", + "var", + "get", + "cross-platform", + "windows" + ], + "license": "MIT", + "name": "path-key", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/path-key.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "2.0.1", + "xo": { + "esnext": true + } +} diff --git a/node_modules/path-key/readme.md b/node_modules/path-key/readme.md new file mode 100644 index 00000000..cb5710aa --- /dev/null +++ b/node_modules/path-key/readme.md @@ -0,0 +1,51 @@ +# path-key [![Build Status](https://travis-ci.org/sindresorhus/path-key.svg?branch=master)](https://travis-ci.org/sindresorhus/path-key) + +> Get the [PATH](https://en.wikipedia.org/wiki/PATH_(variable)) environment variable key cross-platform + +It's usually `PATH`, but on Windows it can be any casing like `Path`... + + +## Install + +``` +$ npm install --save path-key +``` + + +## Usage + +```js +const pathKey = require('path-key'); + +const key = pathKey(); +//=> 'PATH' + +const PATH = process.env[key]; +//=> '/usr/local/bin:/usr/bin:/bin' +``` + + +## API + +### pathKey([options]) + +#### options + +##### env + +Type: `Object`
+Default: [`process.env`](https://nodejs.org/api/process.html#process_process_env) + +Use a custom environment variables object. + +#### platform + +Type: `string`
+Default: [`process.platform`](https://nodejs.org/api/process.html#process_process_platform) + +Get the PATH key for a specific platform. + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/pump/.travis.yml b/node_modules/pump/.travis.yml new file mode 100644 index 00000000..17f94330 --- /dev/null +++ b/node_modules/pump/.travis.yml @@ -0,0 +1,5 @@ +language: node_js +node_js: + - "0.10" + +script: "npm test" diff --git a/node_modules/pump/LICENSE b/node_modules/pump/LICENSE new file mode 100644 index 00000000..757562ec --- /dev/null +++ b/node_modules/pump/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Mathias Buus + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/pump/README.md b/node_modules/pump/README.md new file mode 100644 index 00000000..4c81471a --- /dev/null +++ b/node_modules/pump/README.md @@ -0,0 +1,65 @@ +# pump + +pump is a small node module that pipes streams together and destroys all of them if one of them closes. + +``` +npm install pump +``` + +[![build status](http://img.shields.io/travis/mafintosh/pump.svg?style=flat)](http://travis-ci.org/mafintosh/pump) + +## What problem does it solve? + +When using standard `source.pipe(dest)` source will _not_ be destroyed if dest emits close or an error. +You are also not able to provide a callback to tell when then pipe has finished. + +pump does these two things for you + +## Usage + +Simply pass the streams you want to pipe together to pump and add an optional callback + +``` js +var pump = require('pump') +var fs = require('fs') + +var source = fs.createReadStream('/dev/random') +var dest = fs.createWriteStream('/dev/null') + +pump(source, dest, function(err) { + console.log('pipe finished', err) +}) + +setTimeout(function() { + dest.destroy() // when dest is closed pump will destroy source +}, 1000) +``` + +You can use pump to pipe more than two streams together as well + +``` js +var transform = someTransformStream() + +pump(source, transform, anotherTransform, dest, function(err) { + console.log('pipe finished', err) +}) +``` + +If `source`, `transform`, `anotherTransform` or `dest` closes all of them will be destroyed. + +Similarly to `stream.pipe()`, `pump()` returns the last stream passed in, so you can do: + +``` +return pump(s1, s2) // returns s2 +``` + +If you want to return a stream that combines *both* s1 and s2 to a single stream use +[pumpify](https://github.com/mafintosh/pumpify) instead. + +## License + +MIT + +## Related + +`pump` is part of the [mississippi stream utility collection](https://github.com/maxogden/mississippi) which includes more useful stream modules similar to this one. diff --git a/node_modules/pump/index.js b/node_modules/pump/index.js new file mode 100644 index 00000000..c15059f1 --- /dev/null +++ b/node_modules/pump/index.js @@ -0,0 +1,82 @@ +var once = require('once') +var eos = require('end-of-stream') +var fs = require('fs') // we only need fs to get the ReadStream and WriteStream prototypes + +var noop = function () {} +var ancient = /^v?\.0/.test(process.version) + +var isFn = function (fn) { + return typeof fn === 'function' +} + +var isFS = function (stream) { + if (!ancient) return false // newer node version do not need to care about fs is a special way + if (!fs) return false // browser + return (stream instanceof (fs.ReadStream || noop) || stream instanceof (fs.WriteStream || noop)) && isFn(stream.close) +} + +var isRequest = function (stream) { + return stream.setHeader && isFn(stream.abort) +} + +var destroyer = function (stream, reading, writing, callback) { + callback = once(callback) + + var closed = false + stream.on('close', function () { + closed = true + }) + + eos(stream, {readable: reading, writable: writing}, function (err) { + if (err) return callback(err) + closed = true + callback() + }) + + var destroyed = false + return function (err) { + if (closed) return + if (destroyed) return + destroyed = true + + if (isFS(stream)) return stream.close(noop) // use close for fs streams to avoid fd leaks + if (isRequest(stream)) return stream.abort() // request.destroy just do .end - .abort is what we want + + if (isFn(stream.destroy)) return stream.destroy() + + callback(err || new Error('stream was destroyed')) + } +} + +var call = function (fn) { + fn() +} + +var pipe = function (from, to) { + return from.pipe(to) +} + +var pump = function () { + var streams = Array.prototype.slice.call(arguments) + var callback = isFn(streams[streams.length - 1] || noop) && streams.pop() || noop + + if (Array.isArray(streams[0])) streams = streams[0] + if (streams.length < 2) throw new Error('pump requires two streams per minimum') + + var error + var destroys = streams.map(function (stream, i) { + var reading = i < streams.length - 1 + var writing = i > 0 + return destroyer(stream, reading, writing, function (err) { + if (!error) error = err + if (err) destroys.forEach(call) + if (reading) return + destroys.forEach(call) + callback(error) + }) + }) + + return streams.reduce(pipe) +} + +module.exports = pump diff --git a/node_modules/pump/package.json b/node_modules/pump/package.json new file mode 100644 index 00000000..7e84702c --- /dev/null +++ b/node_modules/pump/package.json @@ -0,0 +1,59 @@ +{ + "_from": "pump@^3.0.0", + "_id": "pump@3.0.0", + "_inBundle": false, + "_integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "_location": "/pump", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "pump@^3.0.0", + "name": "pump", + "escapedName": "pump", + "rawSpec": "^3.0.0", + "saveSpec": null, + "fetchSpec": "^3.0.0" + }, + "_requiredBy": [ + "/get-stream" + ], + "_resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "_shasum": "b4a2116815bde2f4e1ea602354e8c75565107a64", + "_spec": "pump@^3.0.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/get-stream", + "author": { + "name": "Mathias Buus Madsen", + "email": "mathiasbuus@gmail.com" + }, + "browser": { + "fs": false + }, + "bugs": { + "url": "https://github.com/mafintosh/pump/issues" + }, + "bundleDependencies": false, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + }, + "deprecated": false, + "description": "pipe streams together and close all of them if one of them closes", + "homepage": "https://github.com/mafintosh/pump#readme", + "keywords": [ + "streams", + "pipe", + "destroy", + "callback" + ], + "license": "MIT", + "name": "pump", + "repository": { + "type": "git", + "url": "git://github.com/mafintosh/pump.git" + }, + "scripts": { + "test": "node test-browser.js && node test-node.js" + }, + "version": "3.0.0" +} diff --git a/node_modules/pump/test-browser.js b/node_modules/pump/test-browser.js new file mode 100644 index 00000000..9a06c8a4 --- /dev/null +++ b/node_modules/pump/test-browser.js @@ -0,0 +1,66 @@ +var stream = require('stream') +var pump = require('./index') + +var rs = new stream.Readable() +var ws = new stream.Writable() + +rs._read = function (size) { + this.push(Buffer(size).fill('abc')) +} + +ws._write = function (chunk, encoding, cb) { + setTimeout(function () { + cb() + }, 100) +} + +var toHex = function () { + var reverse = new (require('stream').Transform)() + + reverse._transform = function (chunk, enc, callback) { + reverse.push(chunk.toString('hex')) + callback() + } + + return reverse +} + +var wsClosed = false +var rsClosed = false +var callbackCalled = false + +var check = function () { + if (wsClosed && rsClosed && callbackCalled) { + console.log('test-browser.js passes') + clearTimeout(timeout) + } +} + +ws.on('finish', function () { + wsClosed = true + check() +}) + +rs.on('end', function () { + rsClosed = true + check() +}) + +var res = pump(rs, toHex(), toHex(), toHex(), ws, function () { + callbackCalled = true + check() +}) + +if (res !== ws) { + throw new Error('should return last stream') +} + +setTimeout(function () { + rs.push(null) + rs.emit('close') +}, 1000) + +var timeout = setTimeout(function () { + check() + throw new Error('timeout') +}, 5000) diff --git a/node_modules/pump/test-node.js b/node_modules/pump/test-node.js new file mode 100644 index 00000000..561251a0 --- /dev/null +++ b/node_modules/pump/test-node.js @@ -0,0 +1,53 @@ +var pump = require('./index') + +var rs = require('fs').createReadStream('/dev/random') +var ws = require('fs').createWriteStream('/dev/null') + +var toHex = function () { + var reverse = new (require('stream').Transform)() + + reverse._transform = function (chunk, enc, callback) { + reverse.push(chunk.toString('hex')) + callback() + } + + return reverse +} + +var wsClosed = false +var rsClosed = false +var callbackCalled = false + +var check = function () { + if (wsClosed && rsClosed && callbackCalled) { + console.log('test-node.js passes') + clearTimeout(timeout) + } +} + +ws.on('close', function () { + wsClosed = true + check() +}) + +rs.on('close', function () { + rsClosed = true + check() +}) + +var res = pump(rs, toHex(), toHex(), toHex(), ws, function () { + callbackCalled = true + check() +}) + +if (res !== ws) { + throw new Error('should return last stream') +} + +setTimeout(function () { + rs.destroy() +}, 1000) + +var timeout = setTimeout(function () { + throw new Error('timeout') +}, 5000) diff --git a/node_modules/request/node_modules/forever-agent/package.json b/node_modules/request/node_modules/forever-agent/package.json deleted file mode 100644 index 7b00b134..00000000 --- a/node_modules/request/node_modules/forever-agent/package.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "author": { - "name": "Mikeal Rogers", - "email": "mikeal.rogers@gmail.com", - "url": "http://www.futurealoof.com" - }, - "name": "forever-agent", - "description": "HTTP Agent that keeps socket connections alive between keep-alive requests. Formerly part of mikeal/request, now a standalone module.", - "version": "0.6.1", - "license": "Apache-2.0", - "repository": { - "url": "https://github.com/mikeal/forever-agent" - }, - "main": "index.js", - "dependencies": {}, - "devDependencies": {}, - "optionalDependencies": {}, - "engines": { - "node": "*" - }, - "readme": "forever-agent\n=============\n\nHTTP Agent that keeps socket connections alive between keep-alive requests. Formerly part of mikeal/request, now a standalone module.\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/mikeal/forever-agent/issues" - }, - "homepage": "https://github.com/mikeal/forever-agent", - "_id": "forever-agent@0.6.1", - "_from": "forever-agent@~0.6.1" -} diff --git a/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/has-ansi/node_modules/ansi-regex/index.js b/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/has-ansi/node_modules/ansi-regex/index.js deleted file mode 100644 index 4906755b..00000000 --- a/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/has-ansi/node_modules/ansi-regex/index.js +++ /dev/null @@ -1,4 +0,0 @@ -'use strict'; -module.exports = function () { - return /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g; -}; diff --git a/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/has-ansi/node_modules/ansi-regex/package.json b/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/has-ansi/node_modules/ansi-regex/package.json deleted file mode 100644 index d8a758e9..00000000 --- a/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/has-ansi/node_modules/ansi-regex/package.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "name": "ansi-regex", - "version": "2.0.0", - "description": "Regular expression for matching ANSI escape codes", - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/sindresorhus/ansi-regex" - }, - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "maintainers": [ - { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - { - "name": "Joshua Appelman", - "email": "jappelman@xebia.com", - "url": "jbnicolai.com" - } - ], - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha test/test.js", - "view-supported": "node test/viewCodes.js" - }, - "files": [ - "index.js" - ], - "keywords": [ - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "command-line", - "text", - "regex", - "regexp", - "re", - "match", - "test", - "find", - "pattern" - ], - "devDependencies": { - "mocha": "*" - }, - "readme": "# ansi-regex [![Build Status](https://travis-ci.org/sindresorhus/ansi-regex.svg?branch=master)](https://travis-ci.org/sindresorhus/ansi-regex)\n\n> Regular expression for matching [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code)\n\n\n## Install\n\n```\n$ npm install --save ansi-regex\n```\n\n\n## Usage\n\n```js\nvar ansiRegex = require('ansi-regex');\n\nansiRegex().test('\\u001b[4mcake\\u001b[0m');\n//=> true\n\nansiRegex().test('cake');\n//=> false\n\n'\\u001b[4mcake\\u001b[0m'.match(ansiRegex());\n//=> ['\\u001b[4m', '\\u001b[0m']\n```\n\n\n## License\n\nMIT © [Sindre Sorhus](http://sindresorhus.com)\n", - "readmeFilename": "readme.md", - "bugs": { - "url": "https://github.com/sindresorhus/ansi-regex/issues" - }, - "homepage": "https://github.com/sindresorhus/ansi-regex", - "_id": "ansi-regex@2.0.0", - "_from": "ansi-regex@^2.0.0" -} diff --git a/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/has-ansi/node_modules/ansi-regex/readme.md b/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/has-ansi/node_modules/ansi-regex/readme.md deleted file mode 100644 index 1a4894ec..00000000 --- a/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/has-ansi/node_modules/ansi-regex/readme.md +++ /dev/null @@ -1,31 +0,0 @@ -# ansi-regex [![Build Status](https://travis-ci.org/sindresorhus/ansi-regex.svg?branch=master)](https://travis-ci.org/sindresorhus/ansi-regex) - -> Regular expression for matching [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code) - - -## Install - -``` -$ npm install --save ansi-regex -``` - - -## Usage - -```js -var ansiRegex = require('ansi-regex'); - -ansiRegex().test('\u001b[4mcake\u001b[0m'); -//=> true - -ansiRegex().test('cake'); -//=> false - -'\u001b[4mcake\u001b[0m'.match(ansiRegex()); -//=> ['\u001b[4m', '\u001b[0m'] -``` - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/strip-ansi/node_modules/ansi-regex/package.json b/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/strip-ansi/node_modules/ansi-regex/package.json deleted file mode 100644 index d8a758e9..00000000 --- a/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/strip-ansi/node_modules/ansi-regex/package.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "name": "ansi-regex", - "version": "2.0.0", - "description": "Regular expression for matching ANSI escape codes", - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/sindresorhus/ansi-regex" - }, - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "maintainers": [ - { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - { - "name": "Joshua Appelman", - "email": "jappelman@xebia.com", - "url": "jbnicolai.com" - } - ], - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha test/test.js", - "view-supported": "node test/viewCodes.js" - }, - "files": [ - "index.js" - ], - "keywords": [ - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "string", - "tty", - "escape", - "formatting", - "rgb", - "256", - "shell", - "xterm", - "command-line", - "text", - "regex", - "regexp", - "re", - "match", - "test", - "find", - "pattern" - ], - "devDependencies": { - "mocha": "*" - }, - "readme": "# ansi-regex [![Build Status](https://travis-ci.org/sindresorhus/ansi-regex.svg?branch=master)](https://travis-ci.org/sindresorhus/ansi-regex)\n\n> Regular expression for matching [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code)\n\n\n## Install\n\n```\n$ npm install --save ansi-regex\n```\n\n\n## Usage\n\n```js\nvar ansiRegex = require('ansi-regex');\n\nansiRegex().test('\\u001b[4mcake\\u001b[0m');\n//=> true\n\nansiRegex().test('cake');\n//=> false\n\n'\\u001b[4mcake\\u001b[0m'.match(ansiRegex());\n//=> ['\\u001b[4m', '\\u001b[0m']\n```\n\n\n## License\n\nMIT © [Sindre Sorhus](http://sindresorhus.com)\n", - "readmeFilename": "readme.md", - "bugs": { - "url": "https://github.com/sindresorhus/ansi-regex/issues" - }, - "homepage": "https://github.com/sindresorhus/ansi-regex", - "_id": "ansi-regex@2.0.0", - "_from": "ansi-regex@^2.0.0" -} diff --git a/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/strip-ansi/node_modules/ansi-regex/readme.md b/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/strip-ansi/node_modules/ansi-regex/readme.md deleted file mode 100644 index 1a4894ec..00000000 --- a/node_modules/request/node_modules/har-validator/node_modules/chalk/node_modules/strip-ansi/node_modules/ansi-regex/readme.md +++ /dev/null @@ -1,31 +0,0 @@ -# ansi-regex [![Build Status](https://travis-ci.org/sindresorhus/ansi-regex.svg?branch=master)](https://travis-ci.org/sindresorhus/ansi-regex) - -> Regular expression for matching [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code) - - -## Install - -``` -$ npm install --save ansi-regex -``` - - -## Usage - -```js -var ansiRegex = require('ansi-regex'); - -ansiRegex().test('\u001b[4mcake\u001b[0m'); -//=> true - -ansiRegex().test('cake'); -//=> false - -'\u001b[4mcake\u001b[0m'.match(ansiRegex()); -//=> ['\u001b[4m', '\u001b[0m'] -``` - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/safer-buffer/LICENSE b/node_modules/safer-buffer/LICENSE new file mode 100644 index 00000000..4fe9e6f1 --- /dev/null +++ b/node_modules/safer-buffer/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 Nikita Skovoroda + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/safer-buffer/Porting-Buffer.md b/node_modules/safer-buffer/Porting-Buffer.md new file mode 100644 index 00000000..68d86bab --- /dev/null +++ b/node_modules/safer-buffer/Porting-Buffer.md @@ -0,0 +1,268 @@ +# Porting to the Buffer.from/Buffer.alloc API + + +## Overview + +- [Variant 1: Drop support for Node.js ≤ 4.4.x and 5.0.0 — 5.9.x.](#variant-1) (*recommended*) +- [Variant 2: Use a polyfill](#variant-2) +- [Variant 3: manual detection, with safeguards](#variant-3) + +### Finding problematic bits of code using grep + +Just run `grep -nrE '[^a-zA-Z](Slow)?Buffer\s*\(' --exclude-dir node_modules`. + +It will find all the potentially unsafe places in your own code (with some considerably unlikely +exceptions). + +### Finding problematic bits of code using Node.js 8 + +If you’re using Node.js ≥ 8.0.0 (which is recommended), Node.js exposes multiple options that help with finding the relevant pieces of code: + +- `--trace-warnings` will make Node.js show a stack trace for this warning and other warnings that are printed by Node.js. +- `--trace-deprecation` does the same thing, but only for deprecation warnings. +- `--pending-deprecation` will show more types of deprecation warnings. In particular, it will show the `Buffer()` deprecation warning, even on Node.js 8. + +You can set these flags using an environment variable: + +```console +$ export NODE_OPTIONS='--trace-warnings --pending-deprecation' +$ cat example.js +'use strict'; +const foo = new Buffer('foo'); +$ node example.js +(node:7147) [DEP0005] DeprecationWarning: The Buffer() and new Buffer() constructors are not recommended for use due to security and usability concerns. Please use the new Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() construction methods instead. + at showFlaggedDeprecation (buffer.js:127:13) + at new Buffer (buffer.js:148:3) + at Object. (/path/to/example.js:2:13) + [... more stack trace lines ...] +``` + +### Finding problematic bits of code using linters + +Eslint rules [no-buffer-constructor](https://eslint.org/docs/rules/no-buffer-constructor) +or +[node/no-deprecated-api](https://github.com/mysticatea/eslint-plugin-node/blob/master/docs/rules/no-deprecated-api.md) +also find calls to deprecated `Buffer()` API. Those rules are included in some pre-sets. + +There is a drawback, though, that it doesn't always +[work correctly](https://github.com/chalker/safer-buffer#why-not-safe-buffer) when `Buffer` is +overriden e.g. with a polyfill, so recommended is a combination of this and some other method +described above. + + +## Variant 1: Drop support for Node.js ≤ 4.4.x and 5.0.0 — 5.9.x. + +This is the recommended solution nowadays that would imply only minimal overhead. + +The Node.js 5.x release line has been unsupported since July 2016, and the Node.js 4.x release line reaches its End of Life in April 2018 (→ [Schedule](https://github.com/nodejs/Release#release-schedule)). This means that these versions of Node.js will *not* receive any updates, even in case of security issues, so using these release lines should be avoided, if at all possible. + +What you would do in this case is to convert all `new Buffer()` or `Buffer()` calls to use `Buffer.alloc()` or `Buffer.from()`, in the following way: + +- For `new Buffer(number)`, replace it with `Buffer.alloc(number)`. +- For `new Buffer(string)` (or `new Buffer(string, encoding)`), replace it with `Buffer.from(string)` (or `Buffer.from(string, encoding)`). +- For all other combinations of arguments (these are much rarer), also replace `new Buffer(...arguments)` with `Buffer.from(...arguments)`. + +Note that `Buffer.alloc()` is also _faster_ on the current Node.js versions than +`new Buffer(size).fill(0)`, which is what you would otherwise need to ensure zero-filling. + +Enabling eslint rule [no-buffer-constructor](https://eslint.org/docs/rules/no-buffer-constructor) +or +[node/no-deprecated-api](https://github.com/mysticatea/eslint-plugin-node/blob/master/docs/rules/no-deprecated-api.md) +is recommended to avoid accidential unsafe Buffer API usage. + +There is also a [JSCodeshift codemod](https://github.com/joyeecheung/node-dep-codemod#dep005) +for automatically migrating Buffer constructors to `Buffer.alloc()` or `Buffer.from()`. +Note that it currently only works with cases where the arguments are literals or where the +constructor is invoked with two arguments. + +_If you currently support those older Node.js versions and dropping them would be a semver-major change +for you, or if you support older branches of your packages, consider using [Variant 2](#variant-2) +or [Variant 3](#variant-3) on older branches, so people using those older branches will also receive +the fix. That way, you will eradicate potential issues caused by unguarded Buffer API usage and +your users will not observe a runtime deprecation warning when running your code on Node.js 10._ + + +## Variant 2: Use a polyfill + +Utilize [safer-buffer](https://www.npmjs.com/package/safer-buffer) as a polyfill to support older +Node.js versions. + +You would take exacly the same steps as in [Variant 1](#variant-1), but with a polyfill +`const Buffer = require('safer-buffer').Buffer` in all files where you use the new `Buffer` api. + +Make sure that you do not use old `new Buffer` API — in any files where the line above is added, +using old `new Buffer()` API will _throw_. It will be easy to notice that in CI, though. + +Alternatively, you could use [buffer-from](https://www.npmjs.com/package/buffer-from) and/or +[buffer-alloc](https://www.npmjs.com/package/buffer-alloc) [ponyfills](https://ponyfill.com/) — +those are great, the only downsides being 4 deps in the tree and slightly more code changes to +migrate off them (as you would be using e.g. `Buffer.from` under a different name). If you need only +`Buffer.from` polyfilled — `buffer-from` alone which comes with no extra dependencies. + +_Alternatively, you could use [safe-buffer](https://www.npmjs.com/package/safe-buffer) — it also +provides a polyfill, but takes a different approach which has +[it's drawbacks](https://github.com/chalker/safer-buffer#why-not-safe-buffer). It will allow you +to also use the older `new Buffer()` API in your code, though — but that's arguably a benefit, as +it is problematic, can cause issues in your code, and will start emitting runtime deprecation +warnings starting with Node.js 10._ + +Note that in either case, it is important that you also remove all calls to the old Buffer +API manually — just throwing in `safe-buffer` doesn't fix the problem by itself, it just provides +a polyfill for the new API. I have seen people doing that mistake. + +Enabling eslint rule [no-buffer-constructor](https://eslint.org/docs/rules/no-buffer-constructor) +or +[node/no-deprecated-api](https://github.com/mysticatea/eslint-plugin-node/blob/master/docs/rules/no-deprecated-api.md) +is recommended. + +_Don't forget to drop the polyfill usage once you drop support for Node.js < 4.5.0._ + + +## Variant 3 — manual detection, with safeguards + +This is useful if you create Buffer instances in only a few places (e.g. one), or you have your own +wrapper around them. + +### Buffer(0) + +This special case for creating empty buffers can be safely replaced with `Buffer.concat([])`, which +returns the same result all the way down to Node.js 0.8.x. + +### Buffer(notNumber) + +Before: + +```js +var buf = new Buffer(notNumber, encoding); +``` + +After: + +```js +var buf; +if (Buffer.from && Buffer.from !== Uint8Array.from) { + buf = Buffer.from(notNumber, encoding); +} else { + if (typeof notNumber === 'number') + throw new Error('The "size" argument must be of type number.'); + buf = new Buffer(notNumber, encoding); +} +``` + +`encoding` is optional. + +Note that the `typeof notNumber` before `new Buffer` is required (for cases when `notNumber` argument is not +hard-coded) and _is not caused by the deprecation of Buffer constructor_ — it's exactly _why_ the +Buffer constructor is deprecated. Ecosystem packages lacking this type-check caused numereous +security issues — situations when unsanitized user input could end up in the `Buffer(arg)` create +problems ranging from DoS to leaking sensitive information to the attacker from the process memory. + +When `notNumber` argument is hardcoded (e.g. literal `"abc"` or `[0,1,2]`), the `typeof` check can +be omitted. + +Also note that using TypeScript does not fix this problem for you — when libs written in +`TypeScript` are used from JS, or when user input ends up there — it behaves exactly as pure JS, as +all type checks are translation-time only and are not present in the actual JS code which TS +compiles to. + +### Buffer(number) + +For Node.js 0.10.x (and below) support: + +```js +var buf; +if (Buffer.alloc) { + buf = Buffer.alloc(number); +} else { + buf = new Buffer(number); + buf.fill(0); +} +``` + +Otherwise (Node.js ≥ 0.12.x): + +```js +const buf = Buffer.alloc ? Buffer.alloc(number) : new Buffer(number).fill(0); +``` + +## Regarding Buffer.allocUnsafe + +Be extra cautious when using `Buffer.allocUnsafe`: + * Don't use it if you don't have a good reason to + * e.g. you probably won't ever see a performance difference for small buffers, in fact, those + might be even faster with `Buffer.alloc()`, + * if your code is not in the hot code path — you also probably won't notice a difference, + * keep in mind that zero-filling minimizes the potential risks. + * If you use it, make sure that you never return the buffer in a partially-filled state, + * if you are writing to it sequentially — always truncate it to the actuall written length + +Errors in handling buffers allocated with `Buffer.allocUnsafe` could result in various issues, +ranged from undefined behaviour of your code to sensitive data (user input, passwords, certs) +leaking to the remote attacker. + +_Note that the same applies to `new Buffer` usage without zero-filling, depending on the Node.js +version (and lacking type checks also adds DoS to the list of potential problems)._ + + +## FAQ + + +### What is wrong with the `Buffer` constructor? + +The `Buffer` constructor could be used to create a buffer in many different ways: + +- `new Buffer(42)` creates a `Buffer` of 42 bytes. Before Node.js 8, this buffer contained + *arbitrary memory* for performance reasons, which could include anything ranging from + program source code to passwords and encryption keys. +- `new Buffer('abc')` creates a `Buffer` that contains the UTF-8-encoded version of + the string `'abc'`. A second argument could specify another encoding: For example, + `new Buffer(string, 'base64')` could be used to convert a Base64 string into the original + sequence of bytes that it represents. +- There are several other combinations of arguments. + +This meant that, in code like `var buffer = new Buffer(foo);`, *it is not possible to tell +what exactly the contents of the generated buffer are* without knowing the type of `foo`. + +Sometimes, the value of `foo` comes from an external source. For example, this function +could be exposed as a service on a web server, converting a UTF-8 string into its Base64 form: + +``` +function stringToBase64(req, res) { + // The request body should have the format of `{ string: 'foobar' }` + const rawBytes = new Buffer(req.body.string) + const encoded = rawBytes.toString('base64') + res.end({ encoded: encoded }) +} +``` + +Note that this code does *not* validate the type of `req.body.string`: + +- `req.body.string` is expected to be a string. If this is the case, all goes well. +- `req.body.string` is controlled by the client that sends the request. +- If `req.body.string` is the *number* `50`, the `rawBytes` would be 50 bytes: + - Before Node.js 8, the content would be uninitialized + - After Node.js 8, the content would be `50` bytes with the value `0` + +Because of the missing type check, an attacker could intentionally send a number +as part of the request. Using this, they can either: + +- Read uninitialized memory. This **will** leak passwords, encryption keys and other + kinds of sensitive information. (Information leak) +- Force the program to allocate a large amount of memory. For example, when specifying + `500000000` as the input value, each request will allocate 500MB of memory. + This can be used to either exhaust the memory available of a program completely + and make it crash, or slow it down significantly. (Denial of Service) + +Both of these scenarios are considered serious security issues in a real-world +web server context. + +when using `Buffer.from(req.body.string)` instead, passing a number will always +throw an exception instead, giving a controlled behaviour that can always be +handled by the program. + + +### The `Buffer()` constructor has been deprecated for a while. Is this really an issue? + +Surveys of code in the `npm` ecosystem have shown that the `Buffer()` constructor is still +widely used. This includes new code, and overall usage of such code has actually been +*increasing*. diff --git a/node_modules/safer-buffer/Readme.md b/node_modules/safer-buffer/Readme.md new file mode 100644 index 00000000..14b08229 --- /dev/null +++ b/node_modules/safer-buffer/Readme.md @@ -0,0 +1,156 @@ +# safer-buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![javascript style guide][standard-image]][standard-url] [![Security Responsible Disclosure][secuirty-image]][secuirty-url] + +[travis-image]: https://travis-ci.org/ChALkeR/safer-buffer.svg?branch=master +[travis-url]: https://travis-ci.org/ChALkeR/safer-buffer +[npm-image]: https://img.shields.io/npm/v/safer-buffer.svg +[npm-url]: https://npmjs.org/package/safer-buffer +[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg +[standard-url]: https://standardjs.com +[secuirty-image]: https://img.shields.io/badge/Security-Responsible%20Disclosure-green.svg +[secuirty-url]: https://github.com/nodejs/security-wg/blob/master/processes/responsible_disclosure_template.md + +Modern Buffer API polyfill without footguns, working on Node.js from 0.8 to current. + +## How to use? + +First, port all `Buffer()` and `new Buffer()` calls to `Buffer.alloc()` and `Buffer.from()` API. + +Then, to achieve compatibility with outdated Node.js versions (`<4.5.0` and 5.x `<5.9.0`), use +`const Buffer = require('safer-buffer').Buffer` in all files where you make calls to the new +Buffer API. _Use `var` instead of `const` if you need that for your Node.js version range support._ + +Also, see the +[porting Buffer](https://github.com/ChALkeR/safer-buffer/blob/master/Porting-Buffer.md) guide. + +## Do I need it? + +Hopefully, not — dropping support for outdated Node.js versions should be fine nowdays, and that +is the recommended path forward. You _do_ need to port to the `Buffer.alloc()` and `Buffer.from()` +though. + +See the [porting guide](https://github.com/ChALkeR/safer-buffer/blob/master/Porting-Buffer.md) +for a better description. + +## Why not [safe-buffer](https://npmjs.com/safe-buffer)? + +_In short: while `safe-buffer` serves as a polyfill for the new API, it allows old API usage and +itself contains footguns._ + +`safe-buffer` could be used safely to get the new API while still keeping support for older +Node.js versions (like this module), but while analyzing ecosystem usage of the old Buffer API +I found out that `safe-buffer` is itself causing problems in some cases. + +For example, consider the following snippet: + +```console +$ cat example.unsafe.js +console.log(Buffer(20)) +$ ./node-v6.13.0-linux-x64/bin/node example.unsafe.js + +$ standard example.unsafe.js +standard: Use JavaScript Standard Style (https://standardjs.com) + /home/chalker/repo/safer-buffer/example.unsafe.js:2:13: 'Buffer()' was deprecated since v6. Use 'Buffer.alloc()' or 'Buffer.from()' (use 'https://www.npmjs.com/package/safe-buffer' for '<4.5.0') instead. +``` + +This is allocates and writes to console an uninitialized chunk of memory. +[standard](https://www.npmjs.com/package/standard) linter (among others) catch that and warn people +to avoid using unsafe API. + +Let's now throw in `safe-buffer`! + +```console +$ cat example.safe-buffer.js +const Buffer = require('safe-buffer').Buffer +console.log(Buffer(20)) +$ standard example.safe-buffer.js +$ ./node-v6.13.0-linux-x64/bin/node example.safe-buffer.js + +``` + +See the problem? Adding in `safe-buffer` _magically removes the lint warning_, but the behavior +remains identiсal to what we had before, and when launched on Node.js 6.x LTS — this dumps out +chunks of uninitialized memory. +_And this code will still emit runtime warnings on Node.js 10.x and above._ + +That was done by design. I first considered changing `safe-buffer`, prohibiting old API usage or +emitting warnings on it, but that significantly diverges from `safe-buffer` design. After some +discussion, it was decided to move my approach into a separate package, and _this is that separate +package_. + +This footgun is not imaginary — I observed top-downloaded packages doing that kind of thing, +«fixing» the lint warning by blindly including `safe-buffer` without any actual changes. + +Also in some cases, even if the API _was_ migrated to use of safe Buffer API — a random pull request +can bring unsafe Buffer API usage back to the codebase by adding new calls — and that could go +unnoticed even if you have a linter prohibiting that (becase of the reason stated above), and even +pass CI. _I also observed that being done in popular packages._ + +Some examples: + * [webdriverio](https://github.com/webdriverio/webdriverio/commit/05cbd3167c12e4930f09ef7cf93b127ba4effae4#diff-124380949022817b90b622871837d56cR31) + (a module with 548 759 downloads/month), + * [websocket-stream](https://github.com/maxogden/websocket-stream/commit/c9312bd24d08271687d76da0fe3c83493871cf61) + (218 288 d/m, fix in [maxogden/websocket-stream#142](https://github.com/maxogden/websocket-stream/pull/142)), + * [node-serialport](https://github.com/node-serialport/node-serialport/commit/e8d9d2b16c664224920ce1c895199b1ce2def48c) + (113 138 d/m, fix in [node-serialport/node-serialport#1510](https://github.com/node-serialport/node-serialport/pull/1510)), + * [karma](https://github.com/karma-runner/karma/commit/3d94b8cf18c695104ca195334dc75ff054c74eec) + (3 973 193 d/m, fix in [karma-runner/karma#2947](https://github.com/karma-runner/karma/pull/2947)), + * [spdy-transport](https://github.com/spdy-http2/spdy-transport/commit/5375ac33f4a62a4f65bcfc2827447d42a5dbe8b1) + (5 970 727 d/m, fix in [spdy-http2/spdy-transport#53](https://github.com/spdy-http2/spdy-transport/pull/53)). + * And there are a lot more over the ecosystem. + +I filed a PR at +[mysticatea/eslint-plugin-node#110](https://github.com/mysticatea/eslint-plugin-node/pull/110) to +partially fix that (for cases when that lint rule is used), but it is a semver-major change for +linter rules and presets, so it would take significant time for that to reach actual setups. +_It also hasn't been released yet (2018-03-20)._ + +Also, `safer-buffer` discourages the usage of `.allocUnsafe()`, which is often done by a mistake. +It still supports it with an explicit concern barier, by placing it under +`require('safer-buffer/dangereous')`. + +## But isn't throwing bad? + +Not really. It's an error that could be noticed and fixed early, instead of causing havoc later like +unguarded `new Buffer()` calls that end up receiving user input can do. + +This package affects only the files where `var Buffer = require('safer-buffer').Buffer` was done, so +it is really simple to keep track of things and make sure that you don't mix old API usage with that. +Also, CI should hint anything that you might have missed. + +New commits, if tested, won't land new usage of unsafe Buffer API this way. +_Node.js 10.x also deals with that by printing a runtime depecation warning._ + +### Would it affect third-party modules? + +No, unless you explicitly do an awful thing like monkey-patching or overriding the built-in `Buffer`. +Don't do that. + +### But I don't want throwing… + +That is also fine! + +Also, it could be better in some cases when you don't comprehensive enough test coverage. + +In that case — just don't override `Buffer` and use +`var SaferBuffer = require('safer-buffer').Buffer` instead. + +That way, everything using `Buffer` natively would still work, but there would be two drawbacks: + +* `Buffer.from`/`Buffer.alloc` won't be polyfilled — use `SaferBuffer.from` and + `SaferBuffer.alloc` instead. +* You are still open to accidentally using the insecure deprecated API — use a linter to catch that. + +Note that using a linter to catch accidential `Buffer` constructor usage in this case is strongly +recommended. `Buffer` is not overriden in this usecase, so linters won't get confused. + +## «Without footguns»? + +Well, it is still possible to do _some_ things with `Buffer` API, e.g. accessing `.buffer` property +on older versions and duping things from there. You shouldn't do that in your code, probabably. + +The intention is to remove the most significant footguns that affect lots of packages in the +ecosystem, and to do it in the proper way. + +Also, this package doesn't protect against security issues affecting some Node.js versions, so for +usage in your own production code, it is still recommended to update to a Node.js version +[supported by upstream](https://github.com/nodejs/release#release-schedule). diff --git a/node_modules/safer-buffer/dangerous.js b/node_modules/safer-buffer/dangerous.js new file mode 100644 index 00000000..ca41fdc5 --- /dev/null +++ b/node_modules/safer-buffer/dangerous.js @@ -0,0 +1,58 @@ +/* eslint-disable node/no-deprecated-api */ + +'use strict' + +var buffer = require('buffer') +var Buffer = buffer.Buffer +var safer = require('./safer.js') +var Safer = safer.Buffer + +var dangerous = {} + +var key + +for (key in safer) { + if (!safer.hasOwnProperty(key)) continue + dangerous[key] = safer[key] +} + +var Dangereous = dangerous.Buffer = {} + +// Copy Safer API +for (key in Safer) { + if (!Safer.hasOwnProperty(key)) continue + Dangereous[key] = Safer[key] +} + +// Copy those missing unsafe methods, if they are present +for (key in Buffer) { + if (!Buffer.hasOwnProperty(key)) continue + if (Dangereous.hasOwnProperty(key)) continue + Dangereous[key] = Buffer[key] +} + +if (!Dangereous.allocUnsafe) { + Dangereous.allocUnsafe = function (size) { + if (typeof size !== 'number') { + throw new TypeError('The "size" argument must be of type number. Received type ' + typeof size) + } + if (size < 0 || size >= 2 * (1 << 30)) { + throw new RangeError('The value "' + size + '" is invalid for option "size"') + } + return Buffer(size) + } +} + +if (!Dangereous.allocUnsafeSlow) { + Dangereous.allocUnsafeSlow = function (size) { + if (typeof size !== 'number') { + throw new TypeError('The "size" argument must be of type number. Received type ' + typeof size) + } + if (size < 0 || size >= 2 * (1 << 30)) { + throw new RangeError('The value "' + size + '" is invalid for option "size"') + } + return buffer.SlowBuffer(size) + } +} + +module.exports = dangerous diff --git a/node_modules/safer-buffer/package.json b/node_modules/safer-buffer/package.json new file mode 100644 index 00000000..0a0aec42 --- /dev/null +++ b/node_modules/safer-buffer/package.json @@ -0,0 +1,60 @@ +{ + "_from": "safer-buffer@~2.1.0", + "_id": "safer-buffer@2.1.2", + "_inBundle": false, + "_integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "_location": "/safer-buffer", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "safer-buffer@~2.1.0", + "name": "safer-buffer", + "escapedName": "safer-buffer", + "rawSpec": "~2.1.0", + "saveSpec": null, + "fetchSpec": "~2.1.0" + }, + "_requiredBy": [ + "/asn1" + ], + "_resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "_shasum": "44fa161b0187b9549dd84bb91802f9bd8385cd6a", + "_spec": "safer-buffer@~2.1.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/asn1", + "author": { + "name": "Nikita Skovoroda", + "email": "chalkerx@gmail.com", + "url": "https://github.com/ChALkeR" + }, + "bugs": { + "url": "https://github.com/ChALkeR/safer-buffer/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Modern Buffer API polyfill without footguns", + "devDependencies": { + "standard": "^11.0.1", + "tape": "^4.9.0" + }, + "files": [ + "Porting-Buffer.md", + "Readme.md", + "tests.js", + "dangerous.js", + "safer.js" + ], + "homepage": "https://github.com/ChALkeR/safer-buffer#readme", + "license": "MIT", + "main": "safer.js", + "name": "safer-buffer", + "repository": { + "type": "git", + "url": "git+https://github.com/ChALkeR/safer-buffer.git" + }, + "scripts": { + "browserify-test": "browserify --external tape tests.js > browserify-tests.js && tape browserify-tests.js", + "test": "standard && tape tests.js" + }, + "version": "2.1.2" +} diff --git a/node_modules/safer-buffer/safer.js b/node_modules/safer-buffer/safer.js new file mode 100644 index 00000000..37c7e1aa --- /dev/null +++ b/node_modules/safer-buffer/safer.js @@ -0,0 +1,77 @@ +/* eslint-disable node/no-deprecated-api */ + +'use strict' + +var buffer = require('buffer') +var Buffer = buffer.Buffer + +var safer = {} + +var key + +for (key in buffer) { + if (!buffer.hasOwnProperty(key)) continue + if (key === 'SlowBuffer' || key === 'Buffer') continue + safer[key] = buffer[key] +} + +var Safer = safer.Buffer = {} +for (key in Buffer) { + if (!Buffer.hasOwnProperty(key)) continue + if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue + Safer[key] = Buffer[key] +} + +safer.Buffer.prototype = Buffer.prototype + +if (!Safer.from || Safer.from === Uint8Array.from) { + Safer.from = function (value, encodingOrOffset, length) { + if (typeof value === 'number') { + throw new TypeError('The "value" argument must not be of type number. Received type ' + typeof value) + } + if (value && typeof value.length === 'undefined') { + throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value) + } + return Buffer(value, encodingOrOffset, length) + } +} + +if (!Safer.alloc) { + Safer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('The "size" argument must be of type number. Received type ' + typeof size) + } + if (size < 0 || size >= 2 * (1 << 30)) { + throw new RangeError('The value "' + size + '" is invalid for option "size"') + } + var buf = Buffer(size) + if (!fill || fill.length === 0) { + buf.fill(0) + } else if (typeof encoding === 'string') { + buf.fill(fill, encoding) + } else { + buf.fill(fill) + } + return buf + } +} + +if (!safer.kStringMaxLength) { + try { + safer.kStringMaxLength = process.binding('buffer').kStringMaxLength + } catch (e) { + // we can't determine kStringMaxLength in environments where process.binding + // is unsupported, so let's not set it + } +} + +if (!safer.constants) { + safer.constants = { + MAX_LENGTH: safer.kMaxLength + } + if (safer.kStringMaxLength) { + safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength + } +} + +module.exports = safer diff --git a/node_modules/safer-buffer/tests.js b/node_modules/safer-buffer/tests.js new file mode 100644 index 00000000..7ed2777c --- /dev/null +++ b/node_modules/safer-buffer/tests.js @@ -0,0 +1,406 @@ +/* eslint-disable node/no-deprecated-api */ + +'use strict' + +var test = require('tape') + +var buffer = require('buffer') + +var index = require('./') +var safer = require('./safer') +var dangerous = require('./dangerous') + +/* Inheritance tests */ + +test('Default is Safer', function (t) { + t.equal(index, safer) + t.notEqual(safer, dangerous) + t.notEqual(index, dangerous) + t.end() +}) + +test('Is not a function', function (t) { + [index, safer, dangerous].forEach(function (impl) { + t.equal(typeof impl, 'object') + t.equal(typeof impl.Buffer, 'object') + }); + [buffer].forEach(function (impl) { + t.equal(typeof impl, 'object') + t.equal(typeof impl.Buffer, 'function') + }) + t.end() +}) + +test('Constructor throws', function (t) { + [index, safer, dangerous].forEach(function (impl) { + t.throws(function () { impl.Buffer() }) + t.throws(function () { impl.Buffer(0) }) + t.throws(function () { impl.Buffer('a') }) + t.throws(function () { impl.Buffer('a', 'utf-8') }) + t.throws(function () { return new impl.Buffer() }) + t.throws(function () { return new impl.Buffer(0) }) + t.throws(function () { return new impl.Buffer('a') }) + t.throws(function () { return new impl.Buffer('a', 'utf-8') }) + }) + t.end() +}) + +test('Safe methods exist', function (t) { + [index, safer, dangerous].forEach(function (impl) { + t.equal(typeof impl.Buffer.alloc, 'function', 'alloc') + t.equal(typeof impl.Buffer.from, 'function', 'from') + }) + t.end() +}) + +test('Unsafe methods exist only in Dangerous', function (t) { + [index, safer].forEach(function (impl) { + t.equal(typeof impl.Buffer.allocUnsafe, 'undefined') + t.equal(typeof impl.Buffer.allocUnsafeSlow, 'undefined') + }); + [dangerous].forEach(function (impl) { + t.equal(typeof impl.Buffer.allocUnsafe, 'function') + t.equal(typeof impl.Buffer.allocUnsafeSlow, 'function') + }) + t.end() +}) + +test('Generic methods/properties are defined and equal', function (t) { + ['poolSize', 'isBuffer', 'concat', 'byteLength'].forEach(function (method) { + [index, safer, dangerous].forEach(function (impl) { + t.equal(impl.Buffer[method], buffer.Buffer[method], method) + t.notEqual(typeof impl.Buffer[method], 'undefined', method) + }) + }) + t.end() +}) + +test('Built-in buffer static methods/properties are inherited', function (t) { + Object.keys(buffer).forEach(function (method) { + if (method === 'SlowBuffer' || method === 'Buffer') return; + [index, safer, dangerous].forEach(function (impl) { + t.equal(impl[method], buffer[method], method) + t.notEqual(typeof impl[method], 'undefined', method) + }) + }) + t.end() +}) + +test('Built-in Buffer static methods/properties are inherited', function (t) { + Object.keys(buffer.Buffer).forEach(function (method) { + if (method === 'allocUnsafe' || method === 'allocUnsafeSlow') return; + [index, safer, dangerous].forEach(function (impl) { + t.equal(impl.Buffer[method], buffer.Buffer[method], method) + t.notEqual(typeof impl.Buffer[method], 'undefined', method) + }) + }) + t.end() +}) + +test('.prototype property of Buffer is inherited', function (t) { + [index, safer, dangerous].forEach(function (impl) { + t.equal(impl.Buffer.prototype, buffer.Buffer.prototype, 'prototype') + t.notEqual(typeof impl.Buffer.prototype, 'undefined', 'prototype') + }) + t.end() +}) + +test('All Safer methods are present in Dangerous', function (t) { + Object.keys(safer).forEach(function (method) { + if (method === 'Buffer') return; + [index, safer, dangerous].forEach(function (impl) { + t.equal(impl[method], safer[method], method) + if (method !== 'kStringMaxLength') { + t.notEqual(typeof impl[method], 'undefined', method) + } + }) + }) + Object.keys(safer.Buffer).forEach(function (method) { + [index, safer, dangerous].forEach(function (impl) { + t.equal(impl.Buffer[method], safer.Buffer[method], method) + t.notEqual(typeof impl.Buffer[method], 'undefined', method) + }) + }) + t.end() +}) + +test('Safe methods from Dangerous methods are present in Safer', function (t) { + Object.keys(dangerous).forEach(function (method) { + if (method === 'Buffer') return; + [index, safer, dangerous].forEach(function (impl) { + t.equal(impl[method], dangerous[method], method) + if (method !== 'kStringMaxLength') { + t.notEqual(typeof impl[method], 'undefined', method) + } + }) + }) + Object.keys(dangerous.Buffer).forEach(function (method) { + if (method === 'allocUnsafe' || method === 'allocUnsafeSlow') return; + [index, safer, dangerous].forEach(function (impl) { + t.equal(impl.Buffer[method], dangerous.Buffer[method], method) + t.notEqual(typeof impl.Buffer[method], 'undefined', method) + }) + }) + t.end() +}) + +/* Behaviour tests */ + +test('Methods return Buffers', function (t) { + [index, safer, dangerous].forEach(function (impl) { + t.ok(buffer.Buffer.isBuffer(impl.Buffer.alloc(0))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.alloc(0, 10))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.alloc(0, 'a'))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.alloc(10))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.alloc(10, 'x'))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.alloc(9, 'ab'))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.from(''))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.from('string'))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.from('string', 'utf-8'))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.from('b25ldHdvdGhyZWU=', 'base64'))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.from([0, 42, 3]))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.from(new Uint8Array([0, 42, 3])))) + t.ok(buffer.Buffer.isBuffer(impl.Buffer.from([]))) + }); + ['allocUnsafe', 'allocUnsafeSlow'].forEach(function (method) { + t.ok(buffer.Buffer.isBuffer(dangerous.Buffer[method](0))) + t.ok(buffer.Buffer.isBuffer(dangerous.Buffer[method](10))) + }) + t.end() +}) + +test('Constructor is buffer.Buffer', function (t) { + [index, safer, dangerous].forEach(function (impl) { + t.equal(impl.Buffer.alloc(0).constructor, buffer.Buffer) + t.equal(impl.Buffer.alloc(0, 10).constructor, buffer.Buffer) + t.equal(impl.Buffer.alloc(0, 'a').constructor, buffer.Buffer) + t.equal(impl.Buffer.alloc(10).constructor, buffer.Buffer) + t.equal(impl.Buffer.alloc(10, 'x').constructor, buffer.Buffer) + t.equal(impl.Buffer.alloc(9, 'ab').constructor, buffer.Buffer) + t.equal(impl.Buffer.from('').constructor, buffer.Buffer) + t.equal(impl.Buffer.from('string').constructor, buffer.Buffer) + t.equal(impl.Buffer.from('string', 'utf-8').constructor, buffer.Buffer) + t.equal(impl.Buffer.from('b25ldHdvdGhyZWU=', 'base64').constructor, buffer.Buffer) + t.equal(impl.Buffer.from([0, 42, 3]).constructor, buffer.Buffer) + t.equal(impl.Buffer.from(new Uint8Array([0, 42, 3])).constructor, buffer.Buffer) + t.equal(impl.Buffer.from([]).constructor, buffer.Buffer) + }); + [0, 10, 100].forEach(function (arg) { + t.equal(dangerous.Buffer.allocUnsafe(arg).constructor, buffer.Buffer) + t.equal(dangerous.Buffer.allocUnsafeSlow(arg).constructor, buffer.SlowBuffer(0).constructor) + }) + t.end() +}) + +test('Invalid calls throw', function (t) { + [index, safer, dangerous].forEach(function (impl) { + t.throws(function () { impl.Buffer.from(0) }) + t.throws(function () { impl.Buffer.from(10) }) + t.throws(function () { impl.Buffer.from(10, 'utf-8') }) + t.throws(function () { impl.Buffer.from('string', 'invalid encoding') }) + t.throws(function () { impl.Buffer.from(-10) }) + t.throws(function () { impl.Buffer.from(1e90) }) + t.throws(function () { impl.Buffer.from(Infinity) }) + t.throws(function () { impl.Buffer.from(-Infinity) }) + t.throws(function () { impl.Buffer.from(NaN) }) + t.throws(function () { impl.Buffer.from(null) }) + t.throws(function () { impl.Buffer.from(undefined) }) + t.throws(function () { impl.Buffer.from() }) + t.throws(function () { impl.Buffer.from({}) }) + t.throws(function () { impl.Buffer.alloc('') }) + t.throws(function () { impl.Buffer.alloc('string') }) + t.throws(function () { impl.Buffer.alloc('string', 'utf-8') }) + t.throws(function () { impl.Buffer.alloc('b25ldHdvdGhyZWU=', 'base64') }) + t.throws(function () { impl.Buffer.alloc(-10) }) + t.throws(function () { impl.Buffer.alloc(1e90) }) + t.throws(function () { impl.Buffer.alloc(2 * (1 << 30)) }) + t.throws(function () { impl.Buffer.alloc(Infinity) }) + t.throws(function () { impl.Buffer.alloc(-Infinity) }) + t.throws(function () { impl.Buffer.alloc(null) }) + t.throws(function () { impl.Buffer.alloc(undefined) }) + t.throws(function () { impl.Buffer.alloc() }) + t.throws(function () { impl.Buffer.alloc([]) }) + t.throws(function () { impl.Buffer.alloc([0, 42, 3]) }) + t.throws(function () { impl.Buffer.alloc({}) }) + }); + ['allocUnsafe', 'allocUnsafeSlow'].forEach(function (method) { + t.throws(function () { dangerous.Buffer[method]('') }) + t.throws(function () { dangerous.Buffer[method]('string') }) + t.throws(function () { dangerous.Buffer[method]('string', 'utf-8') }) + t.throws(function () { dangerous.Buffer[method](2 * (1 << 30)) }) + t.throws(function () { dangerous.Buffer[method](Infinity) }) + if (dangerous.Buffer[method] === buffer.Buffer.allocUnsafe) { + t.skip('Skipping, older impl of allocUnsafe coerced negative sizes to 0') + } else { + t.throws(function () { dangerous.Buffer[method](-10) }) + t.throws(function () { dangerous.Buffer[method](-1e90) }) + t.throws(function () { dangerous.Buffer[method](-Infinity) }) + } + t.throws(function () { dangerous.Buffer[method](null) }) + t.throws(function () { dangerous.Buffer[method](undefined) }) + t.throws(function () { dangerous.Buffer[method]() }) + t.throws(function () { dangerous.Buffer[method]([]) }) + t.throws(function () { dangerous.Buffer[method]([0, 42, 3]) }) + t.throws(function () { dangerous.Buffer[method]({}) }) + }) + t.end() +}) + +test('Buffers have appropriate lengths', function (t) { + [index, safer, dangerous].forEach(function (impl) { + t.equal(impl.Buffer.alloc(0).length, 0) + t.equal(impl.Buffer.alloc(10).length, 10) + t.equal(impl.Buffer.from('').length, 0) + t.equal(impl.Buffer.from('string').length, 6) + t.equal(impl.Buffer.from('string', 'utf-8').length, 6) + t.equal(impl.Buffer.from('b25ldHdvdGhyZWU=', 'base64').length, 11) + t.equal(impl.Buffer.from([0, 42, 3]).length, 3) + t.equal(impl.Buffer.from(new Uint8Array([0, 42, 3])).length, 3) + t.equal(impl.Buffer.from([]).length, 0) + }); + ['allocUnsafe', 'allocUnsafeSlow'].forEach(function (method) { + t.equal(dangerous.Buffer[method](0).length, 0) + t.equal(dangerous.Buffer[method](10).length, 10) + }) + t.end() +}) + +test('Buffers have appropriate lengths (2)', function (t) { + t.equal(index.Buffer.alloc, safer.Buffer.alloc) + t.equal(index.Buffer.alloc, dangerous.Buffer.alloc) + var ok = true; + [ safer.Buffer.alloc, + dangerous.Buffer.allocUnsafe, + dangerous.Buffer.allocUnsafeSlow + ].forEach(function (method) { + for (var i = 0; i < 1e2; i++) { + var length = Math.round(Math.random() * 1e5) + var buf = method(length) + if (!buffer.Buffer.isBuffer(buf)) ok = false + if (buf.length !== length) ok = false + } + }) + t.ok(ok) + t.end() +}) + +test('.alloc(size) is zero-filled and has correct length', function (t) { + t.equal(index.Buffer.alloc, safer.Buffer.alloc) + t.equal(index.Buffer.alloc, dangerous.Buffer.alloc) + var ok = true + for (var i = 0; i < 1e2; i++) { + var length = Math.round(Math.random() * 2e6) + var buf = index.Buffer.alloc(length) + if (!buffer.Buffer.isBuffer(buf)) ok = false + if (buf.length !== length) ok = false + var j + for (j = 0; j < length; j++) { + if (buf[j] !== 0) ok = false + } + buf.fill(1) + for (j = 0; j < length; j++) { + if (buf[j] !== 1) ok = false + } + } + t.ok(ok) + t.end() +}) + +test('.allocUnsafe / .allocUnsafeSlow are fillable and have correct lengths', function (t) { + ['allocUnsafe', 'allocUnsafeSlow'].forEach(function (method) { + var ok = true + for (var i = 0; i < 1e2; i++) { + var length = Math.round(Math.random() * 2e6) + var buf = dangerous.Buffer[method](length) + if (!buffer.Buffer.isBuffer(buf)) ok = false + if (buf.length !== length) ok = false + buf.fill(0, 0, length) + var j + for (j = 0; j < length; j++) { + if (buf[j] !== 0) ok = false + } + buf.fill(1, 0, length) + for (j = 0; j < length; j++) { + if (buf[j] !== 1) ok = false + } + } + t.ok(ok, method) + }) + t.end() +}) + +test('.alloc(size, fill) is `fill`-filled', function (t) { + t.equal(index.Buffer.alloc, safer.Buffer.alloc) + t.equal(index.Buffer.alloc, dangerous.Buffer.alloc) + var ok = true + for (var i = 0; i < 1e2; i++) { + var length = Math.round(Math.random() * 2e6) + var fill = Math.round(Math.random() * 255) + var buf = index.Buffer.alloc(length, fill) + if (!buffer.Buffer.isBuffer(buf)) ok = false + if (buf.length !== length) ok = false + for (var j = 0; j < length; j++) { + if (buf[j] !== fill) ok = false + } + } + t.ok(ok) + t.end() +}) + +test('.alloc(size, fill) is `fill`-filled', function (t) { + t.equal(index.Buffer.alloc, safer.Buffer.alloc) + t.equal(index.Buffer.alloc, dangerous.Buffer.alloc) + var ok = true + for (var i = 0; i < 1e2; i++) { + var length = Math.round(Math.random() * 2e6) + var fill = Math.round(Math.random() * 255) + var buf = index.Buffer.alloc(length, fill) + if (!buffer.Buffer.isBuffer(buf)) ok = false + if (buf.length !== length) ok = false + for (var j = 0; j < length; j++) { + if (buf[j] !== fill) ok = false + } + } + t.ok(ok) + t.deepEqual(index.Buffer.alloc(9, 'a'), index.Buffer.alloc(9, 97)) + t.notDeepEqual(index.Buffer.alloc(9, 'a'), index.Buffer.alloc(9, 98)) + + var tmp = new buffer.Buffer(2) + tmp.fill('ok') + if (tmp[1] === tmp[0]) { + // Outdated Node.js + t.deepEqual(index.Buffer.alloc(5, 'ok'), index.Buffer.from('ooooo')) + } else { + t.deepEqual(index.Buffer.alloc(5, 'ok'), index.Buffer.from('okoko')) + } + t.notDeepEqual(index.Buffer.alloc(5, 'ok'), index.Buffer.from('kokok')) + + t.end() +}) + +test('safer.Buffer.from returns results same as Buffer constructor', function (t) { + [index, safer, dangerous].forEach(function (impl) { + t.deepEqual(impl.Buffer.from(''), new buffer.Buffer('')) + t.deepEqual(impl.Buffer.from('string'), new buffer.Buffer('string')) + t.deepEqual(impl.Buffer.from('string', 'utf-8'), new buffer.Buffer('string', 'utf-8')) + t.deepEqual(impl.Buffer.from('b25ldHdvdGhyZWU=', 'base64'), new buffer.Buffer('b25ldHdvdGhyZWU=', 'base64')) + t.deepEqual(impl.Buffer.from([0, 42, 3]), new buffer.Buffer([0, 42, 3])) + t.deepEqual(impl.Buffer.from(new Uint8Array([0, 42, 3])), new buffer.Buffer(new Uint8Array([0, 42, 3]))) + t.deepEqual(impl.Buffer.from([]), new buffer.Buffer([])) + }) + t.end() +}) + +test('safer.Buffer.from returns consistent results', function (t) { + [index, safer, dangerous].forEach(function (impl) { + t.deepEqual(impl.Buffer.from(''), impl.Buffer.alloc(0)) + t.deepEqual(impl.Buffer.from([]), impl.Buffer.alloc(0)) + t.deepEqual(impl.Buffer.from(new Uint8Array([])), impl.Buffer.alloc(0)) + t.deepEqual(impl.Buffer.from('string', 'utf-8'), impl.Buffer.from('string')) + t.deepEqual(impl.Buffer.from('string'), impl.Buffer.from([115, 116, 114, 105, 110, 103])) + t.deepEqual(impl.Buffer.from('string'), impl.Buffer.from(impl.Buffer.from('string'))) + t.deepEqual(impl.Buffer.from('b25ldHdvdGhyZWU=', 'base64'), impl.Buffer.from('onetwothree')) + t.notDeepEqual(impl.Buffer.from('b25ldHdvdGhyZWU='), impl.Buffer.from('onetwothree')) + }) + t.end() +}) diff --git a/node_modules/sax/LICENSE b/node_modules/sax/LICENSE new file mode 100644 index 00000000..ccffa082 --- /dev/null +++ b/node_modules/sax/LICENSE @@ -0,0 +1,41 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +==== + +`String.fromCodePoint` by Mathias Bynens used according to terms of MIT +License, as follows: + + Copyright Mathias Bynens + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/sax/README.md b/node_modules/sax/README.md new file mode 100644 index 00000000..afcd3f3d --- /dev/null +++ b/node_modules/sax/README.md @@ -0,0 +1,225 @@ +# sax js + +A sax-style parser for XML and HTML. + +Designed with [node](http://nodejs.org/) in mind, but should work fine in +the browser or other CommonJS implementations. + +## What This Is + +* A very simple tool to parse through an XML string. +* A stepping stone to a streaming HTML parser. +* A handy way to deal with RSS and other mostly-ok-but-kinda-broken XML + docs. + +## What This Is (probably) Not + +* An HTML Parser - That's a fine goal, but this isn't it. It's just + XML. +* A DOM Builder - You can use it to build an object model out of XML, + but it doesn't do that out of the box. +* XSLT - No DOM = no querying. +* 100% Compliant with (some other SAX implementation) - Most SAX + implementations are in Java and do a lot more than this does. +* An XML Validator - It does a little validation when in strict mode, but + not much. +* A Schema-Aware XSD Thing - Schemas are an exercise in fetishistic + masochism. +* A DTD-aware Thing - Fetching DTDs is a much bigger job. + +## Regarding `Hello, world!').close(); + +// stream usage +// takes the same options as the parser +var saxStream = require("sax").createStream(strict, options) +saxStream.on("error", function (e) { + // unhandled errors will throw, since this is a proper node + // event emitter. + console.error("error!", e) + // clear the error + this._parser.error = null + this._parser.resume() +}) +saxStream.on("opentag", function (node) { + // same object as above +}) +// pipe is supported, and it's readable/writable +// same chunks coming in also go out. +fs.createReadStream("file.xml") + .pipe(saxStream) + .pipe(fs.createWriteStream("file-copy.xml")) +``` + + +## Arguments + +Pass the following arguments to the parser function. All are optional. + +`strict` - Boolean. Whether or not to be a jerk. Default: `false`. + +`opt` - Object bag of settings regarding string formatting. All default to `false`. + +Settings supported: + +* `trim` - Boolean. Whether or not to trim text and comment nodes. +* `normalize` - Boolean. If true, then turn any whitespace into a single + space. +* `lowercase` - Boolean. If true, then lowercase tag names and attribute names + in loose mode, rather than uppercasing them. +* `xmlns` - Boolean. If true, then namespaces are supported. +* `position` - Boolean. If false, then don't track line/col/position. +* `strictEntities` - Boolean. If true, only parse [predefined XML + entities](http://www.w3.org/TR/REC-xml/#sec-predefined-ent) + (`&`, `'`, `>`, `<`, and `"`) + +## Methods + +`write` - Write bytes onto the stream. You don't have to do this all at +once. You can keep writing as much as you want. + +`close` - Close the stream. Once closed, no more data may be written until +it is done processing the buffer, which is signaled by the `end` event. + +`resume` - To gracefully handle errors, assign a listener to the `error` +event. Then, when the error is taken care of, you can call `resume` to +continue parsing. Otherwise, the parser will not continue while in an error +state. + +## Members + +At all times, the parser object will have the following members: + +`line`, `column`, `position` - Indications of the position in the XML +document where the parser currently is looking. + +`startTagPosition` - Indicates the position where the current tag starts. + +`closed` - Boolean indicating whether or not the parser can be written to. +If it's `true`, then wait for the `ready` event to write again. + +`strict` - Boolean indicating whether or not the parser is a jerk. + +`opt` - Any options passed into the constructor. + +`tag` - The current tag being dealt with. + +And a bunch of other stuff that you probably shouldn't touch. + +## Events + +All events emit with a single argument. To listen to an event, assign a +function to `on`. Functions get executed in the this-context of +the parser object. The list of supported events are also in the exported +`EVENTS` array. + +When using the stream interface, assign handlers using the EventEmitter +`on` function in the normal fashion. + +`error` - Indication that something bad happened. The error will be hanging +out on `parser.error`, and must be deleted before parsing can continue. By +listening to this event, you can keep an eye on that kind of stuff. Note: +this happens *much* more in strict mode. Argument: instance of `Error`. + +`text` - Text node. Argument: string of text. + +`doctype` - The ``. Argument: +object with `name` and `body` members. Attributes are not parsed, as +processing instructions have implementation dependent semantics. + +`sgmldeclaration` - Random SGML declarations. Stuff like `` +would trigger this kind of event. This is a weird thing to support, so it +might go away at some point. SAX isn't intended to be used to parse SGML, +after all. + +`opentagstart` - Emitted immediately when the tag name is available, +but before any attributes are encountered. Argument: object with a +`name` field and an empty `attributes` set. Note that this is the +same object that will later be emitted in the `opentag` event. + +`opentag` - An opening tag. Argument: object with `name` and `attributes`. +In non-strict mode, tag names are uppercased, unless the `lowercase` +option is set. If the `xmlns` option is set, then it will contain +namespace binding information on the `ns` member, and will have a +`local`, `prefix`, and `uri` member. + +`closetag` - A closing tag. In loose mode, tags are auto-closed if their +parent closes. In strict mode, well-formedness is enforced. Note that +self-closing tags will have `closeTag` emitted immediately after `openTag`. +Argument: tag name. + +`attribute` - An attribute node. Argument: object with `name` and `value`. +In non-strict mode, attribute names are uppercased, unless the `lowercase` +option is set. If the `xmlns` option is set, it will also contains namespace +information. + +`comment` - A comment node. Argument: the string of the comment. + +`opencdata` - The opening tag of a ``) of a `` tags trigger a `"script"` +event, and their contents are not checked for special xml characters. +If you pass `noscript: true`, then this behavior is suppressed. + +## Reporting Problems + +It's best to write a failing test if you find an issue. I will always +accept pull requests with failing tests if they demonstrate intended +behavior, but it is very hard to figure out what issue you're describing +without a test. Writing a test is also the best way for you yourself +to figure out if you really understand the issue you think you have with +sax-js. diff --git a/node_modules/sax/lib/sax.js b/node_modules/sax/lib/sax.js new file mode 100644 index 00000000..795d607e --- /dev/null +++ b/node_modules/sax/lib/sax.js @@ -0,0 +1,1565 @@ +;(function (sax) { // wrapper for non-node envs + sax.parser = function (strict, opt) { return new SAXParser(strict, opt) } + sax.SAXParser = SAXParser + sax.SAXStream = SAXStream + sax.createStream = createStream + + // When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns. + // When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)), + // since that's the earliest that a buffer overrun could occur. This way, checks are + // as rare as required, but as often as necessary to ensure never crossing this bound. + // Furthermore, buffers are only tested at most once per write(), so passing a very + // large string into write() might have undesirable effects, but this is manageable by + // the caller, so it is assumed to be safe. Thus, a call to write() may, in the extreme + // edge case, result in creating at most one complete copy of the string passed in. + // Set to Infinity to have unlimited buffers. + sax.MAX_BUFFER_LENGTH = 64 * 1024 + + var buffers = [ + 'comment', 'sgmlDecl', 'textNode', 'tagName', 'doctype', + 'procInstName', 'procInstBody', 'entity', 'attribName', + 'attribValue', 'cdata', 'script' + ] + + sax.EVENTS = [ + 'text', + 'processinginstruction', + 'sgmldeclaration', + 'doctype', + 'comment', + 'opentagstart', + 'attribute', + 'opentag', + 'closetag', + 'opencdata', + 'cdata', + 'closecdata', + 'error', + 'end', + 'ready', + 'script', + 'opennamespace', + 'closenamespace' + ] + + function SAXParser (strict, opt) { + if (!(this instanceof SAXParser)) { + return new SAXParser(strict, opt) + } + + var parser = this + clearBuffers(parser) + parser.q = parser.c = '' + parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH + parser.opt = opt || {} + parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags + parser.looseCase = parser.opt.lowercase ? 'toLowerCase' : 'toUpperCase' + parser.tags = [] + parser.closed = parser.closedRoot = parser.sawRoot = false + parser.tag = parser.error = null + parser.strict = !!strict + parser.noscript = !!(strict || parser.opt.noscript) + parser.state = S.BEGIN + parser.strictEntities = parser.opt.strictEntities + parser.ENTITIES = parser.strictEntities ? Object.create(sax.XML_ENTITIES) : Object.create(sax.ENTITIES) + parser.attribList = [] + + // namespaces form a prototype chain. + // it always points at the current tag, + // which protos to its parent tag. + if (parser.opt.xmlns) { + parser.ns = Object.create(rootNS) + } + + // mostly just for error reporting + parser.trackPosition = parser.opt.position !== false + if (parser.trackPosition) { + parser.position = parser.line = parser.column = 0 + } + emit(parser, 'onready') + } + + if (!Object.create) { + Object.create = function (o) { + function F () {} + F.prototype = o + var newf = new F() + return newf + } + } + + if (!Object.keys) { + Object.keys = function (o) { + var a = [] + for (var i in o) if (o.hasOwnProperty(i)) a.push(i) + return a + } + } + + function checkBufferLength (parser) { + var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10) + var maxActual = 0 + for (var i = 0, l = buffers.length; i < l; i++) { + var len = parser[buffers[i]].length + if (len > maxAllowed) { + // Text/cdata nodes can get big, and since they're buffered, + // we can get here under normal conditions. + // Avoid issues by emitting the text node now, + // so at least it won't get any bigger. + switch (buffers[i]) { + case 'textNode': + closeText(parser) + break + + case 'cdata': + emitNode(parser, 'oncdata', parser.cdata) + parser.cdata = '' + break + + case 'script': + emitNode(parser, 'onscript', parser.script) + parser.script = '' + break + + default: + error(parser, 'Max buffer length exceeded: ' + buffers[i]) + } + } + maxActual = Math.max(maxActual, len) + } + // schedule the next check for the earliest possible buffer overrun. + var m = sax.MAX_BUFFER_LENGTH - maxActual + parser.bufferCheckPosition = m + parser.position + } + + function clearBuffers (parser) { + for (var i = 0, l = buffers.length; i < l; i++) { + parser[buffers[i]] = '' + } + } + + function flushBuffers (parser) { + closeText(parser) + if (parser.cdata !== '') { + emitNode(parser, 'oncdata', parser.cdata) + parser.cdata = '' + } + if (parser.script !== '') { + emitNode(parser, 'onscript', parser.script) + parser.script = '' + } + } + + SAXParser.prototype = { + end: function () { end(this) }, + write: write, + resume: function () { this.error = null; return this }, + close: function () { return this.write(null) }, + flush: function () { flushBuffers(this) } + } + + var Stream + try { + Stream = require('stream').Stream + } catch (ex) { + Stream = function () {} + } + + var streamWraps = sax.EVENTS.filter(function (ev) { + return ev !== 'error' && ev !== 'end' + }) + + function createStream (strict, opt) { + return new SAXStream(strict, opt) + } + + function SAXStream (strict, opt) { + if (!(this instanceof SAXStream)) { + return new SAXStream(strict, opt) + } + + Stream.apply(this) + + this._parser = new SAXParser(strict, opt) + this.writable = true + this.readable = true + + var me = this + + this._parser.onend = function () { + me.emit('end') + } + + this._parser.onerror = function (er) { + me.emit('error', er) + + // if didn't throw, then means error was handled. + // go ahead and clear error, so we can write again. + me._parser.error = null + } + + this._decoder = null + + streamWraps.forEach(function (ev) { + Object.defineProperty(me, 'on' + ev, { + get: function () { + return me._parser['on' + ev] + }, + set: function (h) { + if (!h) { + me.removeAllListeners(ev) + me._parser['on' + ev] = h + return h + } + me.on(ev, h) + }, + enumerable: true, + configurable: false + }) + }) + } + + SAXStream.prototype = Object.create(Stream.prototype, { + constructor: { + value: SAXStream + } + }) + + SAXStream.prototype.write = function (data) { + if (typeof Buffer === 'function' && + typeof Buffer.isBuffer === 'function' && + Buffer.isBuffer(data)) { + if (!this._decoder) { + var SD = require('string_decoder').StringDecoder + this._decoder = new SD('utf8') + } + data = this._decoder.write(data) + } + + this._parser.write(data.toString()) + this.emit('data', data) + return true + } + + SAXStream.prototype.end = function (chunk) { + if (chunk && chunk.length) { + this.write(chunk) + } + this._parser.end() + return true + } + + SAXStream.prototype.on = function (ev, handler) { + var me = this + if (!me._parser['on' + ev] && streamWraps.indexOf(ev) !== -1) { + me._parser['on' + ev] = function () { + var args = arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments) + args.splice(0, 0, ev) + me.emit.apply(me, args) + } + } + + return Stream.prototype.on.call(me, ev, handler) + } + + // this really needs to be replaced with character classes. + // XML allows all manner of ridiculous numbers and digits. + var CDATA = '[CDATA[' + var DOCTYPE = 'DOCTYPE' + var XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace' + var XMLNS_NAMESPACE = 'http://www.w3.org/2000/xmlns/' + var rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE } + + // http://www.w3.org/TR/REC-xml/#NT-NameStartChar + // This implementation works on strings, a single character at a time + // as such, it cannot ever support astral-plane characters (10000-EFFFF) + // without a significant breaking change to either this parser, or the + // JavaScript language. Implementation of an emoji-capable xml parser + // is left as an exercise for the reader. + var nameStart = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/ + + var nameBody = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/ + + var entityStart = /[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/ + var entityBody = /[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/ + + function isWhitespace (c) { + return c === ' ' || c === '\n' || c === '\r' || c === '\t' + } + + function isQuote (c) { + return c === '"' || c === '\'' + } + + function isAttribEnd (c) { + return c === '>' || isWhitespace(c) + } + + function isMatch (regex, c) { + return regex.test(c) + } + + function notMatch (regex, c) { + return !isMatch(regex, c) + } + + var S = 0 + sax.STATE = { + BEGIN: S++, // leading byte order mark or whitespace + BEGIN_WHITESPACE: S++, // leading whitespace + TEXT: S++, // general stuff + TEXT_ENTITY: S++, // & and such. + OPEN_WAKA: S++, // < + SGML_DECL: S++, // + SCRIPT: S++, // +``` + +> You may also install `selectn` via [Bower], [Duo], or [jspm]. + +###### npm stats + +[![npm](https://img.shields.io/npm/v/selectn.svg)](https://www.npmjs.org/package/selectn) [![NPM downloads](http://img.shields.io/npm/dm/selectn.svg)](https://www.npmjs.org/package/selectn) [![David](https://img.shields.io/david/wilmoore/selectn.js.svg)](https://david-dm.org/wilmoore/selectn.js) + +###### browser support +> The following browsers are continuously tested; however, `selectn` is also supported and known to work on even older browsers not listed below: + +[![Sauce Test Status](https://badges.herokuapp.com/sauce/wilmoore-selectn)](https://saucelabs.com/u/wilmoore-selectn) + +## Overview + +###### allows you to refactor this: + + person && person.info && person.info.name && person.info.name.full + +###### into: + + selectn('info.name.full', person) + +###### or refactor this: + + contacts.map(function (contact) { + return contact && contact.addresses && contact.addresses[0] + }) + +###### into: + + contacts.map(selectn('addresses[0]'))) + +## Demo + +[![npm](https://cloudup.com/c1SCaPFONFn+)](https://www.npmjs.org/package/selectn) + +## Features + + - Mitigates boilerplate guards like `if (obj && obj.a && obj.a.b && obj.a.b.c) { return obj.a.b.c; }`. + - Mitigates **TypeError** `Cannot read property '...' of undefined`. + - Supports multiple levels of array nesting (i.e. `group[0].section.a.seat[3]`). + - Supports dashed key access (i.e. `stats.temperature-today`). + - If value at path is a function, the value returned is the return value of invoking the function. + - [Partial application is automatic][Un-bind your JS with curry] when you omit the second argument (i.e. `selectn` is curried). + - Property accessor generated by `selectn` can be passed to higher-order functions like [map] or [filter]. + - Compatible with [modern and legacy browsers][browsers], Node/CommonJS, and AMD. + - Haskell style [parameter order] allows for [pointfree style programming][Un-bind your JS with curry]. + +## Non-Features + + - No [eval][] or [Function][] (see: [`eval`][note] in disguise). + - No [typeof][] since, [typeof][] is not a real solution to this problem but can _appear_ to be due to the way the global scope is _implied_. + +## Usage example(s) + +#### property accessor as predicate +> Avoid annoying __Cannot read property '...' of undefined__ `TypeError` without writing boilerplate anonymous functions or guards. + +```js +var selectn = require('selectn') +var language = [ + { strings: { en: { name: 'english' } }}, + { strings: { es: { name: 'spanish' } }}, + { strings: { km: { name: 'khmer' } }}, + { strings: { es: { name: 'spanish' } }}, + { nodatas: {}} +] + +var spanish = selectn('strings.es') +//=> [Function] + +language.filter(spanish).length +//=> 2 +``` + +#### point-free property accessor +> Access deeply nested properties (including dashed properties) using point-free style. + +```js +var selectn = require('selectn') +var data = { + client: { + message: { 'message-id': 'd50afb80-a6be-11e2-9e96-0800200c9a66' } + } +} + +var getId = selectn('client.message.message-id') +//=> [Function] + +Promise.resolve(data).then(getId) +//=> 'd50afb80-a6be-11e2-9e96-0800200c9a66' +``` + +#### property accessor for functor +> Avoid wrapping property accessors in anonymous functions. + +```js +var selectn = require('selectn') +var contacts = [ + { addresses: [ '123 Main St, Broomfield, CO 80020', '123 Main St, Denver, CO 80202' ] }, + { addresses: [ '123 Main St, Kirkland, IL 60146' ] }, + { phones: [] }, +] + +var primaryAddress = selectn('addresses[0]') +//=> [Function] + +contacts.map(primaryAddress) +//=> [ '123 Main St, Broomfield, CO 80020', '123 Main St, Kirkland, IL 60146', undefined ] +``` + +#### support for keys containing `.` +> Pass an array as path instead of a string. + +```js +var selectn = require('selectn') +var data = { + client: { + 'message.id': 'd50afb80-a6be-11e2-9e96-0800200c9a66' + } +} + +selectn(['client', 'message.id'], data) +//=> 'd50afb80-a6be-11e2-9e96-0800200c9a66' +``` + +#### value at path is a function +> Avoid `var fn = data.may.be.a.fn; if (typeof fn === 'function') fn()`. + +```js +var selectn = require('selectn') +function hi () { return 'hi' } +var data = { may: { be: { a: { fn: hi } } } } + +selectn('may.be.a.fn', data) +//=> 'hi' +``` + +## API (partial application) + +### `selectn(String|Array)` + +###### arguments + + * `path (String|Array)` Dot/bracket-notation string path or array. + +###### returns + + - `(Function)` Unary function accepting the object to access. + +## API (full application) + +### `selectn(String|Array, Object)` + +###### arguments + + * `path (String|Array)` Dot/bracket-notation string path or array. + * `object (String|Array)` Object to access. + +###### returns + + - `(*|undefined)` Value at path if path exists or `undefined` if path does not exist. + +## Other Languages + +`selectn` has inspired ports to other languages: + +|Language|Project| +|---|---| +|Python|[selectn](https://pypi.python.org/pypi/selectn)| + +## Related + +Other JS packages whose friendly API is driven by `selectn`: + +- [array-groupby] +- [array.filter] +- [arraymap] +- [orderby-time] +- [regexp-id] +- [sum.js] + +## Inspiration + +JS packages that have inpsired `selectn`: + +- [reach] +- [to-function] + +## Alternatives + +Alternative packages you might like instead of `selectn`: + +- [_.get] +- [dref] +- [path-lookup] +- [pathval] +- [reach] +- [to-function] + +## Licenses + +[![LICENSE](http://img.shields.io/npm/l/selectn.svg)](license) + + +[_.get]: https://www.npmjs.com/package/lodash.get +[Bower]: http://bower.io +[Duo]: http://duojs.org +[Function]: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function +[Property accessors]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors +[Sauce Test Status]: https://saucelabs.com/browser-matrix/selectn.svg +[Un-bind your JS with curry]: https://medium.com/@wilmoore/un-bind-your-js-with-curry-a8657a4138cb#.6dswguc2q +[array-groupby]: https://www.npmjs.com/package/array-groupby +[array.filter]: https://www.npmjs.com/package/array.filter +[arraymap]: https://www.npmjs.com/package/arraymap +[browsers]: https://saucelabs.com/u/selectn +[dref]: https://github.com/crcn/dref.js +[eval]: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/eval +[filter]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter +[jspm]: http://jspm.io +[map]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map +[note]: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Member_Operators#Note_on_eval +[orderby-time]: https://www.npmjs.com/package/orderby-time +[parameter order]: https://wiki.haskell.org/Parameter_order +[path-lookup]: https://github.com/yields/path-lookup +[pathval]: https://www.npmjs.com/package/pathval +[reach]: https://github.com/spumko/hoek#reachobj-chain +[regexp-id]: https://www.npmjs.com/package/regexp-id +[sum.js]: https://www.npmjs.com/package/sum.js +[to-function]: https://github.com/component/to-function +[typeof]: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/typeof diff --git a/node_modules/selectn/selectn.js b/node_modules/selectn/selectn.js new file mode 100644 index 00000000..22ee95d2 --- /dev/null +++ b/node_modules/selectn/selectn.js @@ -0,0 +1,1081 @@ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.selectn=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 1 + ? fn.call(self, arguments[0], arguments[1]) + : fn.bind(self, arguments[0]) + } + + out.uncurry = function uncurry () { + return fn + } + + return out +} + +},{}],6:[function(require,module,exports){ +'use strict'; + +/*! + * exports. + */ + +module.exports = brackets2dots; + +/*! + * regexp patterns. + */ + +var REPLACE_BRACKETS = /\[([^\[\]]+)\]/g; +var LFT_RT_TRIM_DOTS = /^[.]*|[.]*$/g; + +/** + * Convert string with bracket notation to dot property notation. + * + * ### Examples: + * + * brackets2dots('group[0].section.a.seat[3]') + * //=> 'group.0.section.a.seat.3' + * + * brackets2dots('[0].section.a.seat[3]') + * //=> '0.section.a.seat.3' + * + * brackets2dots('people[*].age') + * //=> 'people.*.age' + * + * @param {String} string + * original string + * + * @return {String} + * dot/bracket-notation string + */ + +function brackets2dots(string) { + return ({}).toString.call(string) == '[object String]' + ? string.replace(REPLACE_BRACKETS, '.$1').replace(LFT_RT_TRIM_DOTS, '') + : '' +} + +},{}],7:[function(require,module,exports){ +'use strict' + +/*! + * imports. + */ + +if (!Function.prototype.bind) Function.bind = require('fast-bind') + +/*! + * exports. + */ + +module.exports = curry2 + +/** + * Curry a binary function. + * + * @param {Function} fn + * Binary function to curry. + * + * @param {Object} [self] + * Function `this` context. + * + * @return {Function|*} + * If partially applied, return unary function, otherwise, return result of full application. + */ + +function curry2 (fn, self) { + var out = function () { + if (arguments.length === 0) return out + + return arguments.length > 1 + ? fn.apply(self, arguments) + : fn.bind(self, arguments[0]) + } + + out.uncurry = function uncurry () { + return fn + } + + return out +} + +},{"fast-bind":11}],8:[function(require,module,exports){ + +/** + * This is the web browser implementation of `debug()`. + * + * Expose `debug()` as the module. + */ + +exports = module.exports = require('./debug'); +exports.log = log; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; +exports.storage = 'undefined' != typeof chrome + && 'undefined' != typeof chrome.storage + ? chrome.storage.local + : localstorage(); + +/** + * Colors. + */ + +exports.colors = [ + 'lightseagreen', + 'forestgreen', + 'goldenrod', + 'dodgerblue', + 'darkorchid', + 'crimson' +]; + +/** + * Currently only WebKit-based Web Inspectors, Firefox >= v31, + * and the Firebug extension (any Firefox version) are known + * to support "%c" CSS customizations. + * + * TODO: add a `localStorage` variable to explicitly enable/disable colors + */ + +function useColors() { + // is webkit? http://stackoverflow.com/a/16459606/376773 + return ('WebkitAppearance' in document.documentElement.style) || + // is firebug? http://stackoverflow.com/a/398120/376773 + (window.console && (console.firebug || (console.exception && console.table))) || + // is firefox >= v31? + // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages + (navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31); +} + +/** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ + +exports.formatters.j = function(v) { + return JSON.stringify(v); +}; + + +/** + * Colorize log arguments if enabled. + * + * @api public + */ + +function formatArgs() { + var args = arguments; + var useColors = this.useColors; + + args[0] = (useColors ? '%c' : '') + + this.namespace + + (useColors ? ' %c' : ' ') + + args[0] + + (useColors ? '%c ' : ' ') + + '+' + exports.humanize(this.diff); + + if (!useColors) return args; + + var c = 'color: ' + this.color; + args = [args[0], c, 'color: inherit'].concat(Array.prototype.slice.call(args, 1)); + + // the final "%c" is somewhat tricky, because there could be other + // arguments passed either before or after the %c, so we need to + // figure out the correct index to insert the CSS into + var index = 0; + var lastC = 0; + args[0].replace(/%[a-z%]/g, function(match) { + if ('%%' === match) return; + index++; + if ('%c' === match) { + // we only are interested in the *last* %c + // (the user may have provided their own) + lastC = index; + } + }); + + args.splice(lastC, 0, c); + return args; +} + +/** + * Invokes `console.log()` when available. + * No-op when `console.log` is not a "function". + * + * @api public + */ + +function log() { + // this hackery is required for IE8/9, where + // the `console.log` function doesn't have 'apply' + return 'object' === typeof console + && console.log + && Function.prototype.apply.call(console.log, console, arguments); +} + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + +function save(namespaces) { + try { + if (null == namespaces) { + exports.storage.removeItem('debug'); + } else { + exports.storage.debug = namespaces; + } + } catch(e) {} +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + +function load() { + var r; + try { + r = exports.storage.debug; + } catch(e) {} + return r; +} + +/** + * Enable namespaces listed in `localStorage.debug` initially. + */ + +exports.enable(load()); + +/** + * Localstorage attempts to return the localstorage. + * + * This is necessary because safari throws + * when a user disables cookies/localstorage + * and you attempt to access it. + * + * @return {LocalStorage} + * @api private + */ + +function localstorage(){ + try { + return window.localStorage; + } catch (e) {} +} + +},{"./debug":9}],9:[function(require,module,exports){ + +/** + * This is the common logic for both the Node.js and web browser + * implementations of `debug()`. + * + * Expose `debug()` as the module. + */ + +exports = module.exports = debug; +exports.coerce = coerce; +exports.disable = disable; +exports.enable = enable; +exports.enabled = enabled; +exports.humanize = require('ms'); + +/** + * The currently active debug mode names, and names to skip. + */ + +exports.names = []; +exports.skips = []; + +/** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lowercased letter, i.e. "n". + */ + +exports.formatters = {}; + +/** + * Previously assigned color. + */ + +var prevColor = 0; + +/** + * Previous log timestamp. + */ + +var prevTime; + +/** + * Select a color. + * + * @return {Number} + * @api private + */ + +function selectColor() { + return exports.colors[prevColor++ % exports.colors.length]; +} + +/** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @return {Function} + * @api public + */ + +function debug(namespace) { + + // define the `disabled` version + function disabled() { + } + disabled.enabled = false; + + // define the `enabled` version + function enabled() { + + var self = enabled; + + // set `diff` timestamp + var curr = +new Date(); + var ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; + + // add the `color` if not set + if (null == self.useColors) self.useColors = exports.useColors(); + if (null == self.color && self.useColors) self.color = selectColor(); + + var args = Array.prototype.slice.call(arguments); + + args[0] = exports.coerce(args[0]); + + if ('string' !== typeof args[0]) { + // anything else let's inspect with %o + args = ['%o'].concat(args); + } + + // apply any `formatters` transformations + var index = 0; + args[0] = args[0].replace(/%([a-z%])/g, function(match, format) { + // if we encounter an escaped % then don't increase the array index + if (match === '%%') return match; + index++; + var formatter = exports.formatters[format]; + if ('function' === typeof formatter) { + var val = args[index]; + match = formatter.call(self, val); + + // now we need to remove `args[index]` since it's inlined in the `format` + args.splice(index, 1); + index--; + } + return match; + }); + + if ('function' === typeof exports.formatArgs) { + args = exports.formatArgs.apply(self, args); + } + var logFn = enabled.log || exports.log || console.log.bind(console); + logFn.apply(self, args); + } + enabled.enabled = true; + + var fn = exports.enabled(namespace) ? enabled : disabled; + + fn.namespace = namespace; + + return fn; +} + +/** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + +function enable(namespaces) { + exports.save(namespaces); + + var split = (namespaces || '').split(/[\s,]+/); + var len = split.length; + + for (var i = 0; i < len; i++) { + if (!split[i]) continue; // ignore empty strings + namespaces = split[i].replace(/\*/g, '.*?'); + if (namespaces[0] === '-') { + exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); + } else { + exports.names.push(new RegExp('^' + namespaces + '$')); + } + } +} + +/** + * Disable debug output. + * + * @api public + */ + +function disable() { + exports.enable(''); +} + +/** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + +function enabled(name) { + var i, len; + for (i = 0, len = exports.skips.length; i < len; i++) { + if (exports.skips[i].test(name)) { + return false; + } + } + for (i = 0, len = exports.names.length; i < len; i++) { + if (exports.names[i].test(name)) { + return true; + } + } + return false; +} + +/** + * Coerce `val`. + * + * @param {Mixed} val + * @return {Mixed} + * @api private + */ + +function coerce(val) { + if (val instanceof Error) return val.stack || val.message; + return val; +} + +},{"ms":12}],10:[function(require,module,exports){ +'use strict' + +/*! + * imports. + */ + +var dotted = require('arraymap')(todots) +var compact = require('array.filter')(String) +var toString = Object.prototype.toString + +/*! + * exports. + */ + +module.exports = dotsplit + +/** + * Transform dot-delimited strings to array of strings. + * + * @param {String} string + * Dot-delimited string. + * + * @return {Array} + * Array of strings. + */ + +function dotsplit (string) { + return dotted(normalize(string)) +} + +/** + * Normalize string by: + * + * (1) Dropping falsey values (empty, null, etc.) + * (2) Replacing escapes with a placeholder. + * (3) Splitting string on `.` delimiter. + * (4) Dropping empty values from resulting array. + * + * @param {String} string + * Dot-delimited string. + * + * @return {Array} + * Array of strings. + */ + +function normalize (string) { + return compact( + (toString.call(string) === '[object String]' ? string : '') + .replace(/\\\./g, '\uffff') + .split('.') + ) +} + +/** + * Change placeholder to dots. + * + * @param {String} string + * Dot-delimited string with placeholders. + * + * @return {String} + * Dot-delimited string without placeholders. + */ + +function todots (string) { + return string.replace(/\uffff/g, '.') +} + +},{"array.filter":2,"arraymap":4}],11:[function(require,module,exports){ +'use strict'; +module.exports = function(boundThis) { + var f = this + , ret + + if (arguments.length < 2) + ret = function() { + if (this instanceof ret) { + var ret_ = f.apply(this, arguments) + return Object(ret_) === ret_ + ? ret_ + : this + } + else + return f.apply(boundThis, arguments) + } + else { + var boundArgs = new Array(arguments.length - 1) + for (var i = 1; i < arguments.length; i++) + boundArgs[i - 1] = arguments[i] + + ret = function() { + var boundLen = boundArgs.length + , args = new Array(boundLen + arguments.length) + , i + for (i = 0; i < boundLen; i++) + args[i] = boundArgs[i] + for (i = 0; i < arguments.length; i++) + args[boundLen + i] = arguments[i] + + if (this instanceof ret) { + var ret_ = f.apply(this, args) + return Object(ret_) === ret_ + ? ret_ + : this + } + else + return f.apply(boundThis, args) + } + } + + ret.prototype = f.prototype + return ret +} + +},{}],12:[function(require,module,exports){ +/** + * Helpers. + */ + +var s = 1000; +var m = s * 60; +var h = m * 60; +var d = h * 24; +var y = d * 365.25; + +/** + * Parse or format the given `val`. + * + * Options: + * + * - `long` verbose formatting [false] + * + * @param {String|Number} val + * @param {Object} options + * @return {String|Number} + * @api public + */ + +module.exports = function(val, options){ + options = options || {}; + if ('string' == typeof val) return parse(val); + return options.long + ? long(val) + : short(val); +}; + +/** + * Parse the given `str` and return milliseconds. + * + * @param {String} str + * @return {Number} + * @api private + */ + +function parse(str) { + str = '' + str; + if (str.length > 10000) return; + var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str); + if (!match) return; + var n = parseFloat(match[1]); + var type = (match[2] || 'ms').toLowerCase(); + switch (type) { + case 'years': + case 'year': + case 'yrs': + case 'yr': + case 'y': + return n * y; + case 'days': + case 'day': + case 'd': + return n * d; + case 'hours': + case 'hour': + case 'hrs': + case 'hr': + case 'h': + return n * h; + case 'minutes': + case 'minute': + case 'mins': + case 'min': + case 'm': + return n * m; + case 'seconds': + case 'second': + case 'secs': + case 'sec': + case 's': + return n * s; + case 'milliseconds': + case 'millisecond': + case 'msecs': + case 'msec': + case 'ms': + return n; + } +} + +/** + * Short format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function short(ms) { + if (ms >= d) return Math.round(ms / d) + 'd'; + if (ms >= h) return Math.round(ms / h) + 'h'; + if (ms >= m) return Math.round(ms / m) + 'm'; + if (ms >= s) return Math.round(ms / s) + 's'; + return ms + 'ms'; +} + +/** + * Long format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function long(ms) { + return plural(ms, d, 'day') + || plural(ms, h, 'hour') + || plural(ms, m, 'minute') + || plural(ms, s, 'second') + || ms + ' ms'; +} + +/** + * Pluralization helper. + */ + +function plural(ms, n, name) { + if (ms < n) return; + if (ms < n * 1.5) return Math.floor(ms / n) + ' ' + name; + return Math.ceil(ms / n) + ' ' + name + 's'; +} + +},{}],13:[function(require,module,exports){ +/*! + * exports. + */ + +module.exports = selectn; + +/** + * Select n-levels deep into an object given a dot/bracket-notation query. + * If partially applied, returns a function accepting the second argument. + * + * ### Examples: + * + * selectn('name.first', contact); + * + * selectn('addresses[0].street', contact); + * + * contacts.map(selectn('name.first')); + * + * @param {String | Array} query + * dot/bracket-notation query string or array of properties + * + * @param {Object} object + * object to access + * + * @return {Function} + * accessor function that accepts an object to be queried + */ + +function selectn(query) { + var parts; + + if (Array.isArray(query)) { + parts = query; + } + else { + // normalize query to `.property` access (i.e. `a.b[0]` becomes `a.b.0`) + query = query.replace(/\[(\d+)\]/g, '.$1'); + parts = query.split('.'); + } + + /** + * Accessor function that accepts an object to be queried + * + * @private + * + * @param {Object} object + * object to access + * + * @return {Mixed} + * value at given reference or undefined if it does not exist + */ + + function accessor(object) { + var ref = (object != null) ? object : (1, eval)('this'); + var len = parts.length; + var idx = 0; + + // iteratively save each segment's reference + for (; idx < len; idx += 1) { + if (ref != null) ref = ref[parts[idx]]; + } + + return ref; + } + + // curry accessor function allowing partial application + return arguments.length > 1 + ? accessor(arguments[1]) + : accessor; +} + +},{}]},{},[1])(1) +}); \ No newline at end of file diff --git a/node_modules/selectn/selectn.min.js b/node_modules/selectn/selectn.min.js new file mode 100644 index 00000000..9f22a160 --- /dev/null +++ b/node_modules/selectn/selectn.min.js @@ -0,0 +1 @@ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.selectn=e()}}(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o1?fn.call(self,arguments[0],arguments[1]):fn.bind(self,arguments[0])};out.uncurry=function uncurry(){return fn};return out}},{}],6:[function(require,module,exports){"use strict";module.exports=brackets2dots;var REPLACE_BRACKETS=/\[([^\[\]]+)\]/g;var LFT_RT_TRIM_DOTS=/^[.]*|[.]*$/g;function brackets2dots(string){return{}.toString.call(string)=="[object String]"?string.replace(REPLACE_BRACKETS,".$1").replace(LFT_RT_TRIM_DOTS,""):""}},{}],7:[function(require,module,exports){"use strict";if(!Function.prototype.bind)Function.bind=require("fast-bind");module.exports=curry2;function curry2(fn,self){var out=function(){if(arguments.length===0)return out;return arguments.length>1?fn.apply(self,arguments):fn.bind(self,arguments[0])};out.uncurry=function uncurry(){return fn};return out}},{"fast-bind":11}],8:[function(require,module,exports){exports=module.exports=require("./debug");exports.log=log;exports.formatArgs=formatArgs;exports.save=save;exports.load=load;exports.useColors=useColors;exports.storage="undefined"!=typeof chrome&&"undefined"!=typeof chrome.storage?chrome.storage.local:localstorage();exports.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"];function useColors(){return"WebkitAppearance"in document.documentElement.style||window.console&&(console.firebug||console.exception&&console.table)||navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31}exports.formatters.j=function(v){return JSON.stringify(v)};function formatArgs(){var args=arguments;var useColors=this.useColors;args[0]=(useColors?"%c":"")+this.namespace+(useColors?" %c":" ")+args[0]+(useColors?"%c ":" ")+"+"+exports.humanize(this.diff);if(!useColors)return args;var c="color: "+this.color;args=[args[0],c,"color: inherit"].concat(Array.prototype.slice.call(args,1));var index=0;var lastC=0;args[0].replace(/%[a-z%]/g,function(match){if("%%"===match)return;index++;if("%c"===match){lastC=index}});args.splice(lastC,0,c);return args}function log(){return"object"===typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function save(namespaces){try{if(null==namespaces){exports.storage.removeItem("debug")}else{exports.storage.debug=namespaces}}catch(e){}}function load(){var r;try{r=exports.storage.debug}catch(e){}return r}exports.enable(load());function localstorage(){try{return window.localStorage}catch(e){}}},{"./debug":9}],9:[function(require,module,exports){exports=module.exports=debug;exports.coerce=coerce;exports.disable=disable;exports.enable=enable;exports.enabled=enabled;exports.humanize=require("ms");exports.names=[];exports.skips=[];exports.formatters={};var prevColor=0;var prevTime;function selectColor(){return exports.colors[prevColor++%exports.colors.length]}function debug(namespace){function disabled(){}disabled.enabled=false;function enabled(){var self=enabled;var curr=+new Date;var ms=curr-(prevTime||curr);self.diff=ms;self.prev=prevTime;self.curr=curr;prevTime=curr;if(null==self.useColors)self.useColors=exports.useColors();if(null==self.color&&self.useColors)self.color=selectColor();var args=Array.prototype.slice.call(arguments);args[0]=exports.coerce(args[0]);if("string"!==typeof args[0]){args=["%o"].concat(args)}var index=0;args[0]=args[0].replace(/%([a-z%])/g,function(match,format){if(match==="%%")return match;index++;var formatter=exports.formatters[format];if("function"===typeof formatter){var val=args[index];match=formatter.call(self,val);args.splice(index,1);index--}return match});if("function"===typeof exports.formatArgs){args=exports.formatArgs.apply(self,args)}var logFn=enabled.log||exports.log||console.log.bind(console);logFn.apply(self,args)}enabled.enabled=true;var fn=exports.enabled(namespace)?enabled:disabled;fn.namespace=namespace;return fn}function enable(namespaces){exports.save(namespaces);var split=(namespaces||"").split(/[\s,]+/);var len=split.length;for(var i=0;i1e4)return;var match=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str);if(!match)return;var n=parseFloat(match[1]);var type=(match[2]||"ms").toLowerCase();switch(type){case"years":case"year":case"yrs":case"yr":case"y":return n*y;case"days":case"day":case"d":return n*d;case"hours":case"hour":case"hrs":case"hr":case"h":return n*h;case"minutes":case"minute":case"mins":case"min":case"m":return n*m;case"seconds":case"second":case"secs":case"sec":case"s":return n*s;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return n}}function short(ms){if(ms>=d)return Math.round(ms/d)+"d";if(ms>=h)return Math.round(ms/h)+"h";if(ms>=m)return Math.round(ms/m)+"m";if(ms>=s)return Math.round(ms/s)+"s";return ms+"ms"}function long(ms){return plural(ms,d,"day")||plural(ms,h,"hour")||plural(ms,m,"minute")||plural(ms,s,"second")||ms+" ms"}function plural(ms,n,name){if(ms1?accessor(arguments[1]):accessor}},{}]},{},[1])(1)}); diff --git a/node_modules/semver/CHANGELOG.md b/node_modules/semver/CHANGELOG.md new file mode 100644 index 00000000..66304fdd --- /dev/null +++ b/node_modules/semver/CHANGELOG.md @@ -0,0 +1,39 @@ +# changes log + +## 5.7 + +* Add `minVersion` method + +## 5.6 + +* Move boolean `loose` param to an options object, with + backwards-compatibility protection. +* Add ability to opt out of special prerelease version handling with + the `includePrerelease` option flag. + +## 5.5 + +* Add version coercion capabilities + +## 5.4 + +* Add intersection checking + +## 5.3 + +* Add `minSatisfying` method + +## 5.2 + +* Add `prerelease(v)` that returns prerelease components + +## 5.1 + +* Add Backus-Naur for ranges +* Remove excessively cute inspection methods + +## 5.0 + +* Remove AMD/Browserified build artifacts +* Fix ltr and gtr when using the `*` range +* Fix for range `*` with a prerelease identifier diff --git a/node_modules/semver/LICENSE b/node_modules/semver/LICENSE new file mode 100644 index 00000000..19129e31 --- /dev/null +++ b/node_modules/semver/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/semver/README.md b/node_modules/semver/README.md new file mode 100644 index 00000000..e5ccecec --- /dev/null +++ b/node_modules/semver/README.md @@ -0,0 +1,411 @@ +semver(1) -- The semantic versioner for npm +=========================================== + +## Install + +```bash +npm install --save semver +```` + +## Usage + +As a node module: + +```js +const semver = require('semver') + +semver.valid('1.2.3') // '1.2.3' +semver.valid('a.b.c') // null +semver.clean(' =v1.2.3 ') // '1.2.3' +semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true +semver.gt('1.2.3', '9.8.7') // false +semver.lt('1.2.3', '9.8.7') // true +semver.minVersion('>=1.0.0') // '1.0.0' +semver.valid(semver.coerce('v2')) // '2.0.0' +semver.valid(semver.coerce('42.6.7.9.3-alpha')) // '42.6.7' +``` + +As a command-line utility: + +``` +$ semver -h + +A JavaScript implementation of the https://semver.org/ specification +Copyright Isaac Z. Schlueter + +Usage: semver [options] [ [...]] +Prints valid versions sorted by SemVer precedence + +Options: +-r --range + Print versions that match the specified range. + +-i --increment [] + Increment a version by the specified level. Level can + be one of: major, minor, patch, premajor, preminor, + prepatch, or prerelease. Default level is 'patch'. + Only one version may be specified. + +--preid + Identifier to be used to prefix premajor, preminor, + prepatch or prerelease version increments. + +-l --loose + Interpret versions and ranges loosely + +-p --include-prerelease + Always include prerelease versions in range matching + +-c --coerce + Coerce a string into SemVer if possible + (does not imply --loose) + +Program exits successfully if any valid version satisfies +all supplied ranges, and prints all satisfying versions. + +If no satisfying versions are found, then exits failure. + +Versions are printed in ascending order, so supplying +multiple versions to the utility will just sort them. +``` + +## Versions + +A "version" is described by the `v2.0.0` specification found at +. + +A leading `"="` or `"v"` character is stripped off and ignored. + +## Ranges + +A `version range` is a set of `comparators` which specify versions +that satisfy the range. + +A `comparator` is composed of an `operator` and a `version`. The set +of primitive `operators` is: + +* `<` Less than +* `<=` Less than or equal to +* `>` Greater than +* `>=` Greater than or equal to +* `=` Equal. If no operator is specified, then equality is assumed, + so this operator is optional, but MAY be included. + +For example, the comparator `>=1.2.7` would match the versions +`1.2.7`, `1.2.8`, `2.5.3`, and `1.3.9`, but not the versions `1.2.6` +or `1.1.0`. + +Comparators can be joined by whitespace to form a `comparator set`, +which is satisfied by the **intersection** of all of the comparators +it includes. + +A range is composed of one or more comparator sets, joined by `||`. A +version matches a range if and only if every comparator in at least +one of the `||`-separated comparator sets is satisfied by the version. + +For example, the range `>=1.2.7 <1.3.0` would match the versions +`1.2.7`, `1.2.8`, and `1.2.99`, but not the versions `1.2.6`, `1.3.0`, +or `1.1.0`. + +The range `1.2.7 || >=1.2.9 <2.0.0` would match the versions `1.2.7`, +`1.2.9`, and `1.4.6`, but not the versions `1.2.8` or `2.0.0`. + +### Prerelease Tags + +If a version has a prerelease tag (for example, `1.2.3-alpha.3`) then +it will only be allowed to satisfy comparator sets if at least one +comparator with the same `[major, minor, patch]` tuple also has a +prerelease tag. + +For example, the range `>1.2.3-alpha.3` would be allowed to match the +version `1.2.3-alpha.7`, but it would *not* be satisfied by +`3.4.5-alpha.9`, even though `3.4.5-alpha.9` is technically "greater +than" `1.2.3-alpha.3` according to the SemVer sort rules. The version +range only accepts prerelease tags on the `1.2.3` version. The +version `3.4.5` *would* satisfy the range, because it does not have a +prerelease flag, and `3.4.5` is greater than `1.2.3-alpha.7`. + +The purpose for this behavior is twofold. First, prerelease versions +frequently are updated very quickly, and contain many breaking changes +that are (by the author's design) not yet fit for public consumption. +Therefore, by default, they are excluded from range matching +semantics. + +Second, a user who has opted into using a prerelease version has +clearly indicated the intent to use *that specific* set of +alpha/beta/rc versions. By including a prerelease tag in the range, +the user is indicating that they are aware of the risk. However, it +is still not appropriate to assume that they have opted into taking a +similar risk on the *next* set of prerelease versions. + +Note that this behavior can be suppressed (treating all prerelease +versions as if they were normal versions, for the purpose of range +matching) by setting the `includePrerelease` flag on the options +object to any +[functions](https://github.com/npm/node-semver#functions) that do +range matching. + +#### Prerelease Identifiers + +The method `.inc` takes an additional `identifier` string argument that +will append the value of the string as a prerelease identifier: + +```javascript +semver.inc('1.2.3', 'prerelease', 'beta') +// '1.2.4-beta.0' +``` + +command-line example: + +```bash +$ semver 1.2.3 -i prerelease --preid beta +1.2.4-beta.0 +``` + +Which then can be used to increment further: + +```bash +$ semver 1.2.4-beta.0 -i prerelease +1.2.4-beta.1 +``` + +### Advanced Range Syntax + +Advanced range syntax desugars to primitive comparators in +deterministic ways. + +Advanced ranges may be combined in the same way as primitive +comparators using white space or `||`. + +#### Hyphen Ranges `X.Y.Z - A.B.C` + +Specifies an inclusive set. + +* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4` + +If a partial version is provided as the first version in the inclusive +range, then the missing pieces are replaced with zeroes. + +* `1.2 - 2.3.4` := `>=1.2.0 <=2.3.4` + +If a partial version is provided as the second version in the +inclusive range, then all versions that start with the supplied parts +of the tuple are accepted, but nothing that would be greater than the +provided tuple parts. + +* `1.2.3 - 2.3` := `>=1.2.3 <2.4.0` +* `1.2.3 - 2` := `>=1.2.3 <3.0.0` + +#### X-Ranges `1.2.x` `1.X` `1.2.*` `*` + +Any of `X`, `x`, or `*` may be used to "stand in" for one of the +numeric values in the `[major, minor, patch]` tuple. + +* `*` := `>=0.0.0` (Any version satisfies) +* `1.x` := `>=1.0.0 <2.0.0` (Matching major version) +* `1.2.x` := `>=1.2.0 <1.3.0` (Matching major and minor versions) + +A partial version range is treated as an X-Range, so the special +character is in fact optional. + +* `""` (empty string) := `*` := `>=0.0.0` +* `1` := `1.x.x` := `>=1.0.0 <2.0.0` +* `1.2` := `1.2.x` := `>=1.2.0 <1.3.0` + +#### Tilde Ranges `~1.2.3` `~1.2` `~1` + +Allows patch-level changes if a minor version is specified on the +comparator. Allows minor-level changes if not. + +* `~1.2.3` := `>=1.2.3 <1.(2+1).0` := `>=1.2.3 <1.3.0` +* `~1.2` := `>=1.2.0 <1.(2+1).0` := `>=1.2.0 <1.3.0` (Same as `1.2.x`) +* `~1` := `>=1.0.0 <(1+1).0.0` := `>=1.0.0 <2.0.0` (Same as `1.x`) +* `~0.2.3` := `>=0.2.3 <0.(2+1).0` := `>=0.2.3 <0.3.0` +* `~0.2` := `>=0.2.0 <0.(2+1).0` := `>=0.2.0 <0.3.0` (Same as `0.2.x`) +* `~0` := `>=0.0.0 <(0+1).0.0` := `>=0.0.0 <1.0.0` (Same as `0.x`) +* `~1.2.3-beta.2` := `>=1.2.3-beta.2 <1.3.0` Note that prereleases in + the `1.2.3` version will be allowed, if they are greater than or + equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but + `1.2.4-beta.2` would not, because it is a prerelease of a + different `[major, minor, patch]` tuple. + +#### Caret Ranges `^1.2.3` `^0.2.5` `^0.0.4` + +Allows changes that do not modify the left-most non-zero digit in the +`[major, minor, patch]` tuple. In other words, this allows patch and +minor updates for versions `1.0.0` and above, patch updates for +versions `0.X >=0.1.0`, and *no* updates for versions `0.0.X`. + +Many authors treat a `0.x` version as if the `x` were the major +"breaking-change" indicator. + +Caret ranges are ideal when an author may make breaking changes +between `0.2.4` and `0.3.0` releases, which is a common practice. +However, it presumes that there will *not* be breaking changes between +`0.2.4` and `0.2.5`. It allows for changes that are presumed to be +additive (but non-breaking), according to commonly observed practices. + +* `^1.2.3` := `>=1.2.3 <2.0.0` +* `^0.2.3` := `>=0.2.3 <0.3.0` +* `^0.0.3` := `>=0.0.3 <0.0.4` +* `^1.2.3-beta.2` := `>=1.2.3-beta.2 <2.0.0` Note that prereleases in + the `1.2.3` version will be allowed, if they are greater than or + equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but + `1.2.4-beta.2` would not, because it is a prerelease of a + different `[major, minor, patch]` tuple. +* `^0.0.3-beta` := `>=0.0.3-beta <0.0.4` Note that prereleases in the + `0.0.3` version *only* will be allowed, if they are greater than or + equal to `beta`. So, `0.0.3-pr.2` would be allowed. + +When parsing caret ranges, a missing `patch` value desugars to the +number `0`, but will allow flexibility within that value, even if the +major and minor versions are both `0`. + +* `^1.2.x` := `>=1.2.0 <2.0.0` +* `^0.0.x` := `>=0.0.0 <0.1.0` +* `^0.0` := `>=0.0.0 <0.1.0` + +A missing `minor` and `patch` values will desugar to zero, but also +allow flexibility within those values, even if the major version is +zero. + +* `^1.x` := `>=1.0.0 <2.0.0` +* `^0.x` := `>=0.0.0 <1.0.0` + +### Range Grammar + +Putting all this together, here is a Backus-Naur grammar for ranges, +for the benefit of parser authors: + +```bnf +range-set ::= range ( logical-or range ) * +logical-or ::= ( ' ' ) * '||' ( ' ' ) * +range ::= hyphen | simple ( ' ' simple ) * | '' +hyphen ::= partial ' - ' partial +simple ::= primitive | partial | tilde | caret +primitive ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial +partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? +xr ::= 'x' | 'X' | '*' | nr +nr ::= '0' | ['1'-'9'] ( ['0'-'9'] ) * +tilde ::= '~' partial +caret ::= '^' partial +qualifier ::= ( '-' pre )? ( '+' build )? +pre ::= parts +build ::= parts +parts ::= part ( '.' part ) * +part ::= nr | [-0-9A-Za-z]+ +``` + +## Functions + +All methods and classes take a final `options` object argument. All +options in this object are `false` by default. The options supported +are: + +- `loose` Be more forgiving about not-quite-valid semver strings. + (Any resulting output will always be 100% strict compliant, of + course.) For backwards compatibility reasons, if the `options` + argument is a boolean value instead of an object, it is interpreted + to be the `loose` param. +- `includePrerelease` Set to suppress the [default + behavior](https://github.com/npm/node-semver#prerelease-tags) of + excluding prerelease tagged versions from ranges unless they are + explicitly opted into. + +Strict-mode Comparators and Ranges will be strict about the SemVer +strings that they parse. + +* `valid(v)`: Return the parsed version, or null if it's not valid. +* `inc(v, release)`: Return the version incremented by the release + type (`major`, `premajor`, `minor`, `preminor`, `patch`, + `prepatch`, or `prerelease`), or null if it's not valid + * `premajor` in one call will bump the version up to the next major + version and down to a prerelease of that major version. + `preminor`, and `prepatch` work the same way. + * If called from a non-prerelease version, the `prerelease` will work the + same as `prepatch`. It increments the patch version, then makes a + prerelease. If the input version is already a prerelease it simply + increments it. +* `prerelease(v)`: Returns an array of prerelease components, or null + if none exist. Example: `prerelease('1.2.3-alpha.1') -> ['alpha', 1]` +* `major(v)`: Return the major version number. +* `minor(v)`: Return the minor version number. +* `patch(v)`: Return the patch version number. +* `intersects(r1, r2, loose)`: Return true if the two supplied ranges + or comparators intersect. +* `parse(v)`: Attempt to parse a string as a semantic version, returning either + a `SemVer` object or `null`. + +### Comparison + +* `gt(v1, v2)`: `v1 > v2` +* `gte(v1, v2)`: `v1 >= v2` +* `lt(v1, v2)`: `v1 < v2` +* `lte(v1, v2)`: `v1 <= v2` +* `eq(v1, v2)`: `v1 == v2` This is true if they're logically equivalent, + even if they're not the exact same string. You already know how to + compare strings. +* `neq(v1, v2)`: `v1 != v2` The opposite of `eq`. +* `cmp(v1, comparator, v2)`: Pass in a comparison string, and it'll call + the corresponding function above. `"==="` and `"!=="` do simple + string comparison, but are included for completeness. Throws if an + invalid comparison string is provided. +* `compare(v1, v2)`: Return `0` if `v1 == v2`, or `1` if `v1` is greater, or `-1` if + `v2` is greater. Sorts in ascending order if passed to `Array.sort()`. +* `rcompare(v1, v2)`: The reverse of compare. Sorts an array of versions + in descending order when passed to `Array.sort()`. +* `diff(v1, v2)`: Returns difference between two versions by the release type + (`major`, `premajor`, `minor`, `preminor`, `patch`, `prepatch`, or `prerelease`), + or null if the versions are the same. + +### Comparators + +* `intersects(comparator)`: Return true if the comparators intersect + +### Ranges + +* `validRange(range)`: Return the valid range or null if it's not valid +* `satisfies(version, range)`: Return true if the version satisfies the + range. +* `maxSatisfying(versions, range)`: Return the highest version in the list + that satisfies the range, or `null` if none of them do. +* `minSatisfying(versions, range)`: Return the lowest version in the list + that satisfies the range, or `null` if none of them do. +* `minVersion(range)`: Return the lowest version that can possibly match + the given range. +* `gtr(version, range)`: Return `true` if version is greater than all the + versions possible in the range. +* `ltr(version, range)`: Return `true` if version is less than all the + versions possible in the range. +* `outside(version, range, hilo)`: Return true if the version is outside + the bounds of the range in either the high or low direction. The + `hilo` argument must be either the string `'>'` or `'<'`. (This is + the function called by `gtr` and `ltr`.) +* `intersects(range)`: Return true if any of the ranges comparators intersect + +Note that, since ranges may be non-contiguous, a version might not be +greater than a range, less than a range, *or* satisfy a range! For +example, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9` +until `2.0.0`, so the version `1.2.10` would not be greater than the +range (because `2.0.1` satisfies, which is higher), nor less than the +range (since `1.2.8` satisfies, which is lower), and it also does not +satisfy the range. + +If you want to know if a version satisfies or does not satisfy a +range, use the `satisfies(version, range)` function. + +### Coercion + +* `coerce(version)`: Coerces a string to semver if possible + +This aims to provide a very forgiving translation of a non-semver +string to semver. It looks for the first digit in a string, and +consumes all remaining characters which satisfy at least a partial semver +(e.g., `1`, `1.2`, `1.2.3`) up to the max permitted length (256 characters). +Longer versions are simply truncated (`4.6.3.9.2-alpha2` becomes `4.6.3`). +All surrounding text is simply ignored (`v3.4 replaces v3.3.1` becomes `3.4.0`). +Only text which lacks digits will fail coercion (`version one` is not valid). +The maximum length for any semver component considered for coercion is 16 characters; +longer components will be ignored (`10000000000000000.4.7.4` becomes `4.7.4`). +The maximum value for any semver component is `Integer.MAX_SAFE_INTEGER || (2**53 - 1)`; +higher value components are invalid (`9999999999999999.4.7.4` is likely invalid). diff --git a/node_modules/semver/bin/semver b/node_modules/semver/bin/semver new file mode 100755 index 00000000..801e77f1 --- /dev/null +++ b/node_modules/semver/bin/semver @@ -0,0 +1,160 @@ +#!/usr/bin/env node +// Standalone semver comparison program. +// Exits successfully and prints matching version(s) if +// any supplied version is valid and passes all tests. + +var argv = process.argv.slice(2) + +var versions = [] + +var range = [] + +var inc = null + +var version = require('../package.json').version + +var loose = false + +var includePrerelease = false + +var coerce = false + +var identifier + +var semver = require('../semver') + +var reverse = false + +var options = {} + +main() + +function main () { + if (!argv.length) return help() + while (argv.length) { + var a = argv.shift() + var indexOfEqualSign = a.indexOf('=') + if (indexOfEqualSign !== -1) { + a = a.slice(0, indexOfEqualSign) + argv.unshift(a.slice(indexOfEqualSign + 1)) + } + switch (a) { + case '-rv': case '-rev': case '--rev': case '--reverse': + reverse = true + break + case '-l': case '--loose': + loose = true + break + case '-p': case '--include-prerelease': + includePrerelease = true + break + case '-v': case '--version': + versions.push(argv.shift()) + break + case '-i': case '--inc': case '--increment': + switch (argv[0]) { + case 'major': case 'minor': case 'patch': case 'prerelease': + case 'premajor': case 'preminor': case 'prepatch': + inc = argv.shift() + break + default: + inc = 'patch' + break + } + break + case '--preid': + identifier = argv.shift() + break + case '-r': case '--range': + range.push(argv.shift()) + break + case '-c': case '--coerce': + coerce = true + break + case '-h': case '--help': case '-?': + return help() + default: + versions.push(a) + break + } + } + + var options = { loose: loose, includePrerelease: includePrerelease } + + versions = versions.map(function (v) { + return coerce ? (semver.coerce(v) || { version: v }).version : v + }).filter(function (v) { + return semver.valid(v) + }) + if (!versions.length) return fail() + if (inc && (versions.length !== 1 || range.length)) { return failInc() } + + for (var i = 0, l = range.length; i < l; i++) { + versions = versions.filter(function (v) { + return semver.satisfies(v, range[i], options) + }) + if (!versions.length) return fail() + } + return success(versions) +} + +function failInc () { + console.error('--inc can only be used on a single version with no range') + fail() +} + +function fail () { process.exit(1) } + +function success () { + var compare = reverse ? 'rcompare' : 'compare' + versions.sort(function (a, b) { + return semver[compare](a, b, options) + }).map(function (v) { + return semver.clean(v, options) + }).map(function (v) { + return inc ? semver.inc(v, inc, options, identifier) : v + }).forEach(function (v, i, _) { console.log(v) }) +} + +function help () { + console.log(['SemVer ' + version, + '', + 'A JavaScript implementation of the https://semver.org/ specification', + 'Copyright Isaac Z. Schlueter', + '', + 'Usage: semver [options] [ [...]]', + 'Prints valid versions sorted by SemVer precedence', + '', + 'Options:', + '-r --range ', + ' Print versions that match the specified range.', + '', + '-i --increment []', + ' Increment a version by the specified level. Level can', + ' be one of: major, minor, patch, premajor, preminor,', + " prepatch, or prerelease. Default level is 'patch'.", + ' Only one version may be specified.', + '', + '--preid ', + ' Identifier to be used to prefix premajor, preminor,', + ' prepatch or prerelease version increments.', + '', + '-l --loose', + ' Interpret versions and ranges loosely', + '', + '-p --include-prerelease', + ' Always include prerelease versions in range matching', + '', + '-c --coerce', + ' Coerce a string into SemVer if possible', + ' (does not imply --loose)', + '', + 'Program exits successfully if any valid version satisfies', + 'all supplied ranges, and prints all satisfying versions.', + '', + 'If no satisfying versions are found, then exits failure.', + '', + 'Versions are printed in ascending order, so supplying', + 'multiple versions to the utility will just sort them.' + ].join('\n')) +} diff --git a/node_modules/semver/package.json b/node_modules/semver/package.json new file mode 100644 index 00000000..e1437cdb --- /dev/null +++ b/node_modules/semver/package.json @@ -0,0 +1,60 @@ +{ + "_from": "semver@^5.5.0", + "_id": "semver@5.7.0", + "_inBundle": false, + "_integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "_location": "/semver", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "semver@^5.5.0", + "name": "semver", + "escapedName": "semver", + "rawSpec": "^5.5.0", + "saveSpec": null, + "fetchSpec": "^5.5.0" + }, + "_requiredBy": [ + "/cross-spawn" + ], + "_resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "_shasum": "790a7cf6fea5459bac96110b29b60412dc8ff96b", + "_spec": "semver@^5.5.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/cross-spawn", + "bin": { + "semver": "./bin/semver" + }, + "bugs": { + "url": "https://github.com/npm/node-semver/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "The semantic version parser used by npm.", + "devDependencies": { + "tap": "^13.0.0-rc.18" + }, + "files": [ + "bin", + "range.bnf", + "semver.js" + ], + "homepage": "https://github.com/npm/node-semver#readme", + "license": "ISC", + "main": "semver.js", + "name": "semver", + "repository": { + "type": "git", + "url": "git+https://github.com/npm/node-semver.git" + }, + "scripts": { + "postpublish": "git push origin --all; git push origin --tags", + "postversion": "npm publish", + "preversion": "npm test", + "test": "tap" + }, + "tap": { + "check-coverage": true + }, + "version": "5.7.0" +} diff --git a/node_modules/semver/range.bnf b/node_modules/semver/range.bnf new file mode 100644 index 00000000..d4c6ae0d --- /dev/null +++ b/node_modules/semver/range.bnf @@ -0,0 +1,16 @@ +range-set ::= range ( logical-or range ) * +logical-or ::= ( ' ' ) * '||' ( ' ' ) * +range ::= hyphen | simple ( ' ' simple ) * | '' +hyphen ::= partial ' - ' partial +simple ::= primitive | partial | tilde | caret +primitive ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial +partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? +xr ::= 'x' | 'X' | '*' | nr +nr ::= '0' | [1-9] ( [0-9] ) * +tilde ::= '~' partial +caret ::= '^' partial +qualifier ::= ( '-' pre )? ( '+' build )? +pre ::= parts +build ::= parts +parts ::= part ( '.' part ) * +part ::= nr | [-0-9A-Za-z]+ diff --git a/node_modules/semver/semver.js b/node_modules/semver/semver.js new file mode 100644 index 00000000..d315d5d6 --- /dev/null +++ b/node_modules/semver/semver.js @@ -0,0 +1,1483 @@ +exports = module.exports = SemVer + +var debug +/* istanbul ignore next */ +if (typeof process === 'object' && + process.env && + process.env.NODE_DEBUG && + /\bsemver\b/i.test(process.env.NODE_DEBUG)) { + debug = function () { + var args = Array.prototype.slice.call(arguments, 0) + args.unshift('SEMVER') + console.log.apply(console, args) + } +} else { + debug = function () {} +} + +// Note: this is the semver.org version of the spec that it implements +// Not necessarily the package version of this code. +exports.SEMVER_SPEC_VERSION = '2.0.0' + +var MAX_LENGTH = 256 +var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || + /* istanbul ignore next */ 9007199254740991 + +// Max safe segment length for coercion. +var MAX_SAFE_COMPONENT_LENGTH = 16 + +// The actual regexps go on exports.re +var re = exports.re = [] +var src = exports.src = [] +var R = 0 + +// The following Regular Expressions can be used for tokenizing, +// validating, and parsing SemVer version strings. + +// ## Numeric Identifier +// A single `0`, or a non-zero digit followed by zero or more digits. + +var NUMERICIDENTIFIER = R++ +src[NUMERICIDENTIFIER] = '0|[1-9]\\d*' +var NUMERICIDENTIFIERLOOSE = R++ +src[NUMERICIDENTIFIERLOOSE] = '[0-9]+' + +// ## Non-numeric Identifier +// Zero or more digits, followed by a letter or hyphen, and then zero or +// more letters, digits, or hyphens. + +var NONNUMERICIDENTIFIER = R++ +src[NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*' + +// ## Main Version +// Three dot-separated numeric identifiers. + +var MAINVERSION = R++ +src[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\.' + + '(' + src[NUMERICIDENTIFIER] + ')\\.' + + '(' + src[NUMERICIDENTIFIER] + ')' + +var MAINVERSIONLOOSE = R++ +src[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' + + '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' + + '(' + src[NUMERICIDENTIFIERLOOSE] + ')' + +// ## Pre-release Version Identifier +// A numeric identifier, or a non-numeric identifier. + +var PRERELEASEIDENTIFIER = R++ +src[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] + + '|' + src[NONNUMERICIDENTIFIER] + ')' + +var PRERELEASEIDENTIFIERLOOSE = R++ +src[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] + + '|' + src[NONNUMERICIDENTIFIER] + ')' + +// ## Pre-release Version +// Hyphen, followed by one or more dot-separated pre-release version +// identifiers. + +var PRERELEASE = R++ +src[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] + + '(?:\\.' + src[PRERELEASEIDENTIFIER] + ')*))' + +var PRERELEASELOOSE = R++ +src[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] + + '(?:\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))' + +// ## Build Metadata Identifier +// Any combination of digits, letters, or hyphens. + +var BUILDIDENTIFIER = R++ +src[BUILDIDENTIFIER] = '[0-9A-Za-z-]+' + +// ## Build Metadata +// Plus sign, followed by one or more period-separated build metadata +// identifiers. + +var BUILD = R++ +src[BUILD] = '(?:\\+(' + src[BUILDIDENTIFIER] + + '(?:\\.' + src[BUILDIDENTIFIER] + ')*))' + +// ## Full Version String +// A main version, followed optionally by a pre-release version and +// build metadata. + +// Note that the only major, minor, patch, and pre-release sections of +// the version string are capturing groups. The build metadata is not a +// capturing group, because it should not ever be used in version +// comparison. + +var FULL = R++ +var FULLPLAIN = 'v?' + src[MAINVERSION] + + src[PRERELEASE] + '?' + + src[BUILD] + '?' + +src[FULL] = '^' + FULLPLAIN + '$' + +// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. +// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty +// common in the npm registry. +var LOOSEPLAIN = '[v=\\s]*' + src[MAINVERSIONLOOSE] + + src[PRERELEASELOOSE] + '?' + + src[BUILD] + '?' + +var LOOSE = R++ +src[LOOSE] = '^' + LOOSEPLAIN + '$' + +var GTLT = R++ +src[GTLT] = '((?:<|>)?=?)' + +// Something like "2.*" or "1.2.x". +// Note that "x.x" is a valid xRange identifer, meaning "any version" +// Only the first item is strictly required. +var XRANGEIDENTIFIERLOOSE = R++ +src[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\*' +var XRANGEIDENTIFIER = R++ +src[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\*' + +var XRANGEPLAIN = R++ +src[XRANGEPLAIN] = '[v=\\s]*(' + src[XRANGEIDENTIFIER] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' + + '(?:' + src[PRERELEASE] + ')?' + + src[BUILD] + '?' + + ')?)?' + +var XRANGEPLAINLOOSE = R++ +src[XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' + + '(?:' + src[PRERELEASELOOSE] + ')?' + + src[BUILD] + '?' + + ')?)?' + +var XRANGE = R++ +src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$' +var XRANGELOOSE = R++ +src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$' + +// Coercion. +// Extract anything that could conceivably be a part of a valid semver +var COERCE = R++ +src[COERCE] = '(?:^|[^\\d])' + + '(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' + + '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + + '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + + '(?:$|[^\\d])' + +// Tilde ranges. +// Meaning is "reasonably at or greater than" +var LONETILDE = R++ +src[LONETILDE] = '(?:~>?)' + +var TILDETRIM = R++ +src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+' +re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g') +var tildeTrimReplace = '$1~' + +var TILDE = R++ +src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$' +var TILDELOOSE = R++ +src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$' + +// Caret ranges. +// Meaning is "at least and backwards compatible with" +var LONECARET = R++ +src[LONECARET] = '(?:\\^)' + +var CARETTRIM = R++ +src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+' +re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g') +var caretTrimReplace = '$1^' + +var CARET = R++ +src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$' +var CARETLOOSE = R++ +src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$' + +// A simple gt/lt/eq thing, or just "" to indicate "any version" +var COMPARATORLOOSE = R++ +src[COMPARATORLOOSE] = '^' + src[GTLT] + '\\s*(' + LOOSEPLAIN + ')$|^$' +var COMPARATOR = R++ +src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$' + +// An expression to strip any whitespace between the gtlt and the thing +// it modifies, so that `> 1.2.3` ==> `>1.2.3` +var COMPARATORTRIM = R++ +src[COMPARATORTRIM] = '(\\s*)' + src[GTLT] + + '\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')' + +// this one has to use the /g flag +re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g') +var comparatorTrimReplace = '$1$2$3' + +// Something like `1.2.3 - 1.2.4` +// Note that these all use the loose form, because they'll be +// checked against either the strict or loose comparator form +// later. +var HYPHENRANGE = R++ +src[HYPHENRANGE] = '^\\s*(' + src[XRANGEPLAIN] + ')' + + '\\s+-\\s+' + + '(' + src[XRANGEPLAIN] + ')' + + '\\s*$' + +var HYPHENRANGELOOSE = R++ +src[HYPHENRANGELOOSE] = '^\\s*(' + src[XRANGEPLAINLOOSE] + ')' + + '\\s+-\\s+' + + '(' + src[XRANGEPLAINLOOSE] + ')' + + '\\s*$' + +// Star ranges basically just allow anything at all. +var STAR = R++ +src[STAR] = '(<|>)?=?\\s*\\*' + +// Compile to actual regexp objects. +// All are flag-free, unless they were created above with a flag. +for (var i = 0; i < R; i++) { + debug(i, src[i]) + if (!re[i]) { + re[i] = new RegExp(src[i]) + } +} + +exports.parse = parse +function parse (version, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + if (version instanceof SemVer) { + return version + } + + if (typeof version !== 'string') { + return null + } + + if (version.length > MAX_LENGTH) { + return null + } + + var r = options.loose ? re[LOOSE] : re[FULL] + if (!r.test(version)) { + return null + } + + try { + return new SemVer(version, options) + } catch (er) { + return null + } +} + +exports.valid = valid +function valid (version, options) { + var v = parse(version, options) + return v ? v.version : null +} + +exports.clean = clean +function clean (version, options) { + var s = parse(version.trim().replace(/^[=v]+/, ''), options) + return s ? s.version : null +} + +exports.SemVer = SemVer + +function SemVer (version, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + if (version instanceof SemVer) { + if (version.loose === options.loose) { + return version + } else { + version = version.version + } + } else if (typeof version !== 'string') { + throw new TypeError('Invalid Version: ' + version) + } + + if (version.length > MAX_LENGTH) { + throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters') + } + + if (!(this instanceof SemVer)) { + return new SemVer(version, options) + } + + debug('SemVer', version, options) + this.options = options + this.loose = !!options.loose + + var m = version.trim().match(options.loose ? re[LOOSE] : re[FULL]) + + if (!m) { + throw new TypeError('Invalid Version: ' + version) + } + + this.raw = version + + // these are actually numbers + this.major = +m[1] + this.minor = +m[2] + this.patch = +m[3] + + if (this.major > MAX_SAFE_INTEGER || this.major < 0) { + throw new TypeError('Invalid major version') + } + + if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { + throw new TypeError('Invalid minor version') + } + + if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { + throw new TypeError('Invalid patch version') + } + + // numberify any prerelease numeric ids + if (!m[4]) { + this.prerelease = [] + } else { + this.prerelease = m[4].split('.').map(function (id) { + if (/^[0-9]+$/.test(id)) { + var num = +id + if (num >= 0 && num < MAX_SAFE_INTEGER) { + return num + } + } + return id + }) + } + + this.build = m[5] ? m[5].split('.') : [] + this.format() +} + +SemVer.prototype.format = function () { + this.version = this.major + '.' + this.minor + '.' + this.patch + if (this.prerelease.length) { + this.version += '-' + this.prerelease.join('.') + } + return this.version +} + +SemVer.prototype.toString = function () { + return this.version +} + +SemVer.prototype.compare = function (other) { + debug('SemVer.compare', this.version, this.options, other) + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + return this.compareMain(other) || this.comparePre(other) +} + +SemVer.prototype.compareMain = function (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + return compareIdentifiers(this.major, other.major) || + compareIdentifiers(this.minor, other.minor) || + compareIdentifiers(this.patch, other.patch) +} + +SemVer.prototype.comparePre = function (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + // NOT having a prerelease is > having one + if (this.prerelease.length && !other.prerelease.length) { + return -1 + } else if (!this.prerelease.length && other.prerelease.length) { + return 1 + } else if (!this.prerelease.length && !other.prerelease.length) { + return 0 + } + + var i = 0 + do { + var a = this.prerelease[i] + var b = other.prerelease[i] + debug('prerelease compare', i, a, b) + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) + } + } while (++i) +} + +// preminor will bump the version up to the next minor release, and immediately +// down to pre-release. premajor and prepatch work the same way. +SemVer.prototype.inc = function (release, identifier) { + switch (release) { + case 'premajor': + this.prerelease.length = 0 + this.patch = 0 + this.minor = 0 + this.major++ + this.inc('pre', identifier) + break + case 'preminor': + this.prerelease.length = 0 + this.patch = 0 + this.minor++ + this.inc('pre', identifier) + break + case 'prepatch': + // If this is already a prerelease, it will bump to the next version + // drop any prereleases that might already exist, since they are not + // relevant at this point. + this.prerelease.length = 0 + this.inc('patch', identifier) + this.inc('pre', identifier) + break + // If the input is a non-prerelease version, this acts the same as + // prepatch. + case 'prerelease': + if (this.prerelease.length === 0) { + this.inc('patch', identifier) + } + this.inc('pre', identifier) + break + + case 'major': + // If this is a pre-major version, bump up to the same major version. + // Otherwise increment major. + // 1.0.0-5 bumps to 1.0.0 + // 1.1.0 bumps to 2.0.0 + if (this.minor !== 0 || + this.patch !== 0 || + this.prerelease.length === 0) { + this.major++ + } + this.minor = 0 + this.patch = 0 + this.prerelease = [] + break + case 'minor': + // If this is a pre-minor version, bump up to the same minor version. + // Otherwise increment minor. + // 1.2.0-5 bumps to 1.2.0 + // 1.2.1 bumps to 1.3.0 + if (this.patch !== 0 || this.prerelease.length === 0) { + this.minor++ + } + this.patch = 0 + this.prerelease = [] + break + case 'patch': + // If this is not a pre-release version, it will increment the patch. + // If it is a pre-release it will bump up to the same patch version. + // 1.2.0-5 patches to 1.2.0 + // 1.2.0 patches to 1.2.1 + if (this.prerelease.length === 0) { + this.patch++ + } + this.prerelease = [] + break + // This probably shouldn't be used publicly. + // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction. + case 'pre': + if (this.prerelease.length === 0) { + this.prerelease = [0] + } else { + var i = this.prerelease.length + while (--i >= 0) { + if (typeof this.prerelease[i] === 'number') { + this.prerelease[i]++ + i = -2 + } + } + if (i === -1) { + // didn't increment anything + this.prerelease.push(0) + } + } + if (identifier) { + // 1.2.0-beta.1 bumps to 1.2.0-beta.2, + // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 + if (this.prerelease[0] === identifier) { + if (isNaN(this.prerelease[1])) { + this.prerelease = [identifier, 0] + } + } else { + this.prerelease = [identifier, 0] + } + } + break + + default: + throw new Error('invalid increment argument: ' + release) + } + this.format() + this.raw = this.version + return this +} + +exports.inc = inc +function inc (version, release, loose, identifier) { + if (typeof (loose) === 'string') { + identifier = loose + loose = undefined + } + + try { + return new SemVer(version, loose).inc(release, identifier).version + } catch (er) { + return null + } +} + +exports.diff = diff +function diff (version1, version2) { + if (eq(version1, version2)) { + return null + } else { + var v1 = parse(version1) + var v2 = parse(version2) + var prefix = '' + if (v1.prerelease.length || v2.prerelease.length) { + prefix = 'pre' + var defaultResult = 'prerelease' + } + for (var key in v1) { + if (key === 'major' || key === 'minor' || key === 'patch') { + if (v1[key] !== v2[key]) { + return prefix + key + } + } + } + return defaultResult // may be undefined + } +} + +exports.compareIdentifiers = compareIdentifiers + +var numeric = /^[0-9]+$/ +function compareIdentifiers (a, b) { + var anum = numeric.test(a) + var bnum = numeric.test(b) + + if (anum && bnum) { + a = +a + b = +b + } + + return a === b ? 0 + : (anum && !bnum) ? -1 + : (bnum && !anum) ? 1 + : a < b ? -1 + : 1 +} + +exports.rcompareIdentifiers = rcompareIdentifiers +function rcompareIdentifiers (a, b) { + return compareIdentifiers(b, a) +} + +exports.major = major +function major (a, loose) { + return new SemVer(a, loose).major +} + +exports.minor = minor +function minor (a, loose) { + return new SemVer(a, loose).minor +} + +exports.patch = patch +function patch (a, loose) { + return new SemVer(a, loose).patch +} + +exports.compare = compare +function compare (a, b, loose) { + return new SemVer(a, loose).compare(new SemVer(b, loose)) +} + +exports.compareLoose = compareLoose +function compareLoose (a, b) { + return compare(a, b, true) +} + +exports.rcompare = rcompare +function rcompare (a, b, loose) { + return compare(b, a, loose) +} + +exports.sort = sort +function sort (list, loose) { + return list.sort(function (a, b) { + return exports.compare(a, b, loose) + }) +} + +exports.rsort = rsort +function rsort (list, loose) { + return list.sort(function (a, b) { + return exports.rcompare(a, b, loose) + }) +} + +exports.gt = gt +function gt (a, b, loose) { + return compare(a, b, loose) > 0 +} + +exports.lt = lt +function lt (a, b, loose) { + return compare(a, b, loose) < 0 +} + +exports.eq = eq +function eq (a, b, loose) { + return compare(a, b, loose) === 0 +} + +exports.neq = neq +function neq (a, b, loose) { + return compare(a, b, loose) !== 0 +} + +exports.gte = gte +function gte (a, b, loose) { + return compare(a, b, loose) >= 0 +} + +exports.lte = lte +function lte (a, b, loose) { + return compare(a, b, loose) <= 0 +} + +exports.cmp = cmp +function cmp (a, op, b, loose) { + switch (op) { + case '===': + if (typeof a === 'object') + a = a.version + if (typeof b === 'object') + b = b.version + return a === b + + case '!==': + if (typeof a === 'object') + a = a.version + if (typeof b === 'object') + b = b.version + return a !== b + + case '': + case '=': + case '==': + return eq(a, b, loose) + + case '!=': + return neq(a, b, loose) + + case '>': + return gt(a, b, loose) + + case '>=': + return gte(a, b, loose) + + case '<': + return lt(a, b, loose) + + case '<=': + return lte(a, b, loose) + + default: + throw new TypeError('Invalid operator: ' + op) + } +} + +exports.Comparator = Comparator +function Comparator (comp, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + if (comp instanceof Comparator) { + if (comp.loose === !!options.loose) { + return comp + } else { + comp = comp.value + } + } + + if (!(this instanceof Comparator)) { + return new Comparator(comp, options) + } + + debug('comparator', comp, options) + this.options = options + this.loose = !!options.loose + this.parse(comp) + + if (this.semver === ANY) { + this.value = '' + } else { + this.value = this.operator + this.semver.version + } + + debug('comp', this) +} + +var ANY = {} +Comparator.prototype.parse = function (comp) { + var r = this.options.loose ? re[COMPARATORLOOSE] : re[COMPARATOR] + var m = comp.match(r) + + if (!m) { + throw new TypeError('Invalid comparator: ' + comp) + } + + this.operator = m[1] + if (this.operator === '=') { + this.operator = '' + } + + // if it literally is just '>' or '' then allow anything. + if (!m[2]) { + this.semver = ANY + } else { + this.semver = new SemVer(m[2], this.options.loose) + } +} + +Comparator.prototype.toString = function () { + return this.value +} + +Comparator.prototype.test = function (version) { + debug('Comparator.test', version, this.options.loose) + + if (this.semver === ANY) { + return true + } + + if (typeof version === 'string') { + version = new SemVer(version, this.options) + } + + return cmp(version, this.operator, this.semver, this.options) +} + +Comparator.prototype.intersects = function (comp, options) { + if (!(comp instanceof Comparator)) { + throw new TypeError('a Comparator is required') + } + + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + var rangeTmp + + if (this.operator === '') { + rangeTmp = new Range(comp.value, options) + return satisfies(this.value, rangeTmp, options) + } else if (comp.operator === '') { + rangeTmp = new Range(this.value, options) + return satisfies(comp.semver, rangeTmp, options) + } + + var sameDirectionIncreasing = + (this.operator === '>=' || this.operator === '>') && + (comp.operator === '>=' || comp.operator === '>') + var sameDirectionDecreasing = + (this.operator === '<=' || this.operator === '<') && + (comp.operator === '<=' || comp.operator === '<') + var sameSemVer = this.semver.version === comp.semver.version + var differentDirectionsInclusive = + (this.operator === '>=' || this.operator === '<=') && + (comp.operator === '>=' || comp.operator === '<=') + var oppositeDirectionsLessThan = + cmp(this.semver, '<', comp.semver, options) && + ((this.operator === '>=' || this.operator === '>') && + (comp.operator === '<=' || comp.operator === '<')) + var oppositeDirectionsGreaterThan = + cmp(this.semver, '>', comp.semver, options) && + ((this.operator === '<=' || this.operator === '<') && + (comp.operator === '>=' || comp.operator === '>')) + + return sameDirectionIncreasing || sameDirectionDecreasing || + (sameSemVer && differentDirectionsInclusive) || + oppositeDirectionsLessThan || oppositeDirectionsGreaterThan +} + +exports.Range = Range +function Range (range, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + if (range instanceof Range) { + if (range.loose === !!options.loose && + range.includePrerelease === !!options.includePrerelease) { + return range + } else { + return new Range(range.raw, options) + } + } + + if (range instanceof Comparator) { + return new Range(range.value, options) + } + + if (!(this instanceof Range)) { + return new Range(range, options) + } + + this.options = options + this.loose = !!options.loose + this.includePrerelease = !!options.includePrerelease + + // First, split based on boolean or || + this.raw = range + this.set = range.split(/\s*\|\|\s*/).map(function (range) { + return this.parseRange(range.trim()) + }, this).filter(function (c) { + // throw out any that are not relevant for whatever reason + return c.length + }) + + if (!this.set.length) { + throw new TypeError('Invalid SemVer Range: ' + range) + } + + this.format() +} + +Range.prototype.format = function () { + this.range = this.set.map(function (comps) { + return comps.join(' ').trim() + }).join('||').trim() + return this.range +} + +Range.prototype.toString = function () { + return this.range +} + +Range.prototype.parseRange = function (range) { + var loose = this.options.loose + range = range.trim() + // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` + var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE] + range = range.replace(hr, hyphenReplace) + debug('hyphen replace', range) + // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` + range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace) + debug('comparator trim', range, re[COMPARATORTRIM]) + + // `~ 1.2.3` => `~1.2.3` + range = range.replace(re[TILDETRIM], tildeTrimReplace) + + // `^ 1.2.3` => `^1.2.3` + range = range.replace(re[CARETTRIM], caretTrimReplace) + + // normalize spaces + range = range.split(/\s+/).join(' ') + + // At this point, the range is completely trimmed and + // ready to be split into comparators. + + var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR] + var set = range.split(' ').map(function (comp) { + return parseComparator(comp, this.options) + }, this).join(' ').split(/\s+/) + if (this.options.loose) { + // in loose mode, throw out any that are not valid comparators + set = set.filter(function (comp) { + return !!comp.match(compRe) + }) + } + set = set.map(function (comp) { + return new Comparator(comp, this.options) + }, this) + + return set +} + +Range.prototype.intersects = function (range, options) { + if (!(range instanceof Range)) { + throw new TypeError('a Range is required') + } + + return this.set.some(function (thisComparators) { + return thisComparators.every(function (thisComparator) { + return range.set.some(function (rangeComparators) { + return rangeComparators.every(function (rangeComparator) { + return thisComparator.intersects(rangeComparator, options) + }) + }) + }) + }) +} + +// Mostly just for testing and legacy API reasons +exports.toComparators = toComparators +function toComparators (range, options) { + return new Range(range, options).set.map(function (comp) { + return comp.map(function (c) { + return c.value + }).join(' ').trim().split(' ') + }) +} + +// comprised of xranges, tildes, stars, and gtlt's at this point. +// already replaced the hyphen ranges +// turn into a set of JUST comparators. +function parseComparator (comp, options) { + debug('comp', comp, options) + comp = replaceCarets(comp, options) + debug('caret', comp) + comp = replaceTildes(comp, options) + debug('tildes', comp) + comp = replaceXRanges(comp, options) + debug('xrange', comp) + comp = replaceStars(comp, options) + debug('stars', comp) + return comp +} + +function isX (id) { + return !id || id.toLowerCase() === 'x' || id === '*' +} + +// ~, ~> --> * (any, kinda silly) +// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0 +// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0 +// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0 +// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0 +// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0 +function replaceTildes (comp, options) { + return comp.trim().split(/\s+/).map(function (comp) { + return replaceTilde(comp, options) + }).join(' ') +} + +function replaceTilde (comp, options) { + var r = options.loose ? re[TILDELOOSE] : re[TILDE] + return comp.replace(r, function (_, M, m, p, pr) { + debug('tilde', comp, _, M, m, p, pr) + var ret + + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' + } else if (isX(p)) { + // ~1.2 == >=1.2.0 <1.3.0 + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' + } else if (pr) { + debug('replaceTilde pr', pr) + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + M + '.' + (+m + 1) + '.0' + } else { + // ~1.2.3 == >=1.2.3 <1.3.0 + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + (+m + 1) + '.0' + } + + debug('tilde return', ret) + return ret + }) +} + +// ^ --> * (any, kinda silly) +// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0 +// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0 +// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0 +// ^1.2.3 --> >=1.2.3 <2.0.0 +// ^1.2.0 --> >=1.2.0 <2.0.0 +function replaceCarets (comp, options) { + return comp.trim().split(/\s+/).map(function (comp) { + return replaceCaret(comp, options) + }).join(' ') +} + +function replaceCaret (comp, options) { + debug('caret', comp, options) + var r = options.loose ? re[CARETLOOSE] : re[CARET] + return comp.replace(r, function (_, M, m, p, pr) { + debug('caret', comp, _, M, m, p, pr) + var ret + + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' + } else if (isX(p)) { + if (M === '0') { + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' + } else { + ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0' + } + } else if (pr) { + debug('replaceCaret pr', pr) + if (M === '0') { + if (m === '0') { + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + M + '.' + m + '.' + (+p + 1) + } else { + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + M + '.' + (+m + 1) + '.0' + } + } else { + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + (+M + 1) + '.0.0' + } + } else { + debug('no pr') + if (M === '0') { + if (m === '0') { + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + m + '.' + (+p + 1) + } else { + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + (+m + 1) + '.0' + } + } else { + ret = '>=' + M + '.' + m + '.' + p + + ' <' + (+M + 1) + '.0.0' + } + } + + debug('caret return', ret) + return ret + }) +} + +function replaceXRanges (comp, options) { + debug('replaceXRanges', comp, options) + return comp.split(/\s+/).map(function (comp) { + return replaceXRange(comp, options) + }).join(' ') +} + +function replaceXRange (comp, options) { + comp = comp.trim() + var r = options.loose ? re[XRANGELOOSE] : re[XRANGE] + return comp.replace(r, function (ret, gtlt, M, m, p, pr) { + debug('xRange', comp, ret, gtlt, M, m, p, pr) + var xM = isX(M) + var xm = xM || isX(m) + var xp = xm || isX(p) + var anyX = xp + + if (gtlt === '=' && anyX) { + gtlt = '' + } + + if (xM) { + if (gtlt === '>' || gtlt === '<') { + // nothing is allowed + ret = '<0.0.0' + } else { + // nothing is forbidden + ret = '*' + } + } else if (gtlt && anyX) { + // we know patch is an x, because we have any x at all. + // replace X with 0 + if (xm) { + m = 0 + } + p = 0 + + if (gtlt === '>') { + // >1 => >=2.0.0 + // >1.2 => >=1.3.0 + // >1.2.3 => >= 1.2.4 + gtlt = '>=' + if (xm) { + M = +M + 1 + m = 0 + p = 0 + } else { + m = +m + 1 + p = 0 + } + } else if (gtlt === '<=') { + // <=0.7.x is actually <0.8.0, since any 0.7.x should + // pass. Similarly, <=7.x is actually <8.0.0, etc. + gtlt = '<' + if (xm) { + M = +M + 1 + } else { + m = +m + 1 + } + } + + ret = gtlt + M + '.' + m + '.' + p + } else if (xm) { + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' + } else if (xp) { + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' + } + + debug('xRange return', ret) + + return ret + }) +} + +// Because * is AND-ed with everything else in the comparator, +// and '' means "any version", just remove the *s entirely. +function replaceStars (comp, options) { + debug('replaceStars', comp, options) + // Looseness is ignored here. star is always as loose as it gets! + return comp.trim().replace(re[STAR], '') +} + +// This function is passed to string.replace(re[HYPHENRANGE]) +// M, m, patch, prerelease, build +// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 +// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do +// 1.2 - 3.4 => >=1.2.0 <3.5.0 +function hyphenReplace ($0, + from, fM, fm, fp, fpr, fb, + to, tM, tm, tp, tpr, tb) { + if (isX(fM)) { + from = '' + } else if (isX(fm)) { + from = '>=' + fM + '.0.0' + } else if (isX(fp)) { + from = '>=' + fM + '.' + fm + '.0' + } else { + from = '>=' + from + } + + if (isX(tM)) { + to = '' + } else if (isX(tm)) { + to = '<' + (+tM + 1) + '.0.0' + } else if (isX(tp)) { + to = '<' + tM + '.' + (+tm + 1) + '.0' + } else if (tpr) { + to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr + } else { + to = '<=' + to + } + + return (from + ' ' + to).trim() +} + +// if ANY of the sets match ALL of its comparators, then pass +Range.prototype.test = function (version) { + if (!version) { + return false + } + + if (typeof version === 'string') { + version = new SemVer(version, this.options) + } + + for (var i = 0; i < this.set.length; i++) { + if (testSet(this.set[i], version, this.options)) { + return true + } + } + return false +} + +function testSet (set, version, options) { + for (var i = 0; i < set.length; i++) { + if (!set[i].test(version)) { + return false + } + } + + if (version.prerelease.length && !options.includePrerelease) { + // Find the set of versions that are allowed to have prereleases + // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 + // That should allow `1.2.3-pr.2` to pass. + // However, `1.2.4-alpha.notready` should NOT be allowed, + // even though it's within the range set by the comparators. + for (i = 0; i < set.length; i++) { + debug(set[i].semver) + if (set[i].semver === ANY) { + continue + } + + if (set[i].semver.prerelease.length > 0) { + var allowed = set[i].semver + if (allowed.major === version.major && + allowed.minor === version.minor && + allowed.patch === version.patch) { + return true + } + } + } + + // Version has a -pre, but it's not one of the ones we like. + return false + } + + return true +} + +exports.satisfies = satisfies +function satisfies (version, range, options) { + try { + range = new Range(range, options) + } catch (er) { + return false + } + return range.test(version) +} + +exports.maxSatisfying = maxSatisfying +function maxSatisfying (versions, range, options) { + var max = null + var maxSV = null + try { + var rangeObj = new Range(range, options) + } catch (er) { + return null + } + versions.forEach(function (v) { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!max || maxSV.compare(v) === -1) { + // compare(max, v, true) + max = v + maxSV = new SemVer(max, options) + } + } + }) + return max +} + +exports.minSatisfying = minSatisfying +function minSatisfying (versions, range, options) { + var min = null + var minSV = null + try { + var rangeObj = new Range(range, options) + } catch (er) { + return null + } + versions.forEach(function (v) { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!min || minSV.compare(v) === 1) { + // compare(min, v, true) + min = v + minSV = new SemVer(min, options) + } + } + }) + return min +} + +exports.minVersion = minVersion +function minVersion (range, loose) { + range = new Range(range, loose) + + var minver = new SemVer('0.0.0') + if (range.test(minver)) { + return minver + } + + minver = new SemVer('0.0.0-0') + if (range.test(minver)) { + return minver + } + + minver = null + for (var i = 0; i < range.set.length; ++i) { + var comparators = range.set[i] + + comparators.forEach(function (comparator) { + // Clone to avoid manipulating the comparator's semver object. + var compver = new SemVer(comparator.semver.version) + switch (comparator.operator) { + case '>': + if (compver.prerelease.length === 0) { + compver.patch++ + } else { + compver.prerelease.push(0) + } + compver.raw = compver.format() + /* fallthrough */ + case '': + case '>=': + if (!minver || gt(minver, compver)) { + minver = compver + } + break + case '<': + case '<=': + /* Ignore maximum versions */ + break + /* istanbul ignore next */ + default: + throw new Error('Unexpected operation: ' + comparator.operator) + } + }) + } + + if (minver && range.test(minver)) { + return minver + } + + return null +} + +exports.validRange = validRange +function validRange (range, options) { + try { + // Return '*' instead of '' so that truthiness works. + // This will throw if it's invalid anyway + return new Range(range, options).range || '*' + } catch (er) { + return null + } +} + +// Determine if version is less than all the versions possible in the range +exports.ltr = ltr +function ltr (version, range, options) { + return outside(version, range, '<', options) +} + +// Determine if version is greater than all the versions possible in the range. +exports.gtr = gtr +function gtr (version, range, options) { + return outside(version, range, '>', options) +} + +exports.outside = outside +function outside (version, range, hilo, options) { + version = new SemVer(version, options) + range = new Range(range, options) + + var gtfn, ltefn, ltfn, comp, ecomp + switch (hilo) { + case '>': + gtfn = gt + ltefn = lte + ltfn = lt + comp = '>' + ecomp = '>=' + break + case '<': + gtfn = lt + ltefn = gte + ltfn = gt + comp = '<' + ecomp = '<=' + break + default: + throw new TypeError('Must provide a hilo val of "<" or ">"') + } + + // If it satisifes the range it is not outside + if (satisfies(version, range, options)) { + return false + } + + // From now on, variable terms are as if we're in "gtr" mode. + // but note that everything is flipped for the "ltr" function. + + for (var i = 0; i < range.set.length; ++i) { + var comparators = range.set[i] + + var high = null + var low = null + + comparators.forEach(function (comparator) { + if (comparator.semver === ANY) { + comparator = new Comparator('>=0.0.0') + } + high = high || comparator + low = low || comparator + if (gtfn(comparator.semver, high.semver, options)) { + high = comparator + } else if (ltfn(comparator.semver, low.semver, options)) { + low = comparator + } + }) + + // If the edge version comparator has a operator then our version + // isn't outside it + if (high.operator === comp || high.operator === ecomp) { + return false + } + + // If the lowest version comparator has an operator and our version + // is less than it then it isn't higher than the range + if ((!low.operator || low.operator === comp) && + ltefn(version, low.semver)) { + return false + } else if (low.operator === ecomp && ltfn(version, low.semver)) { + return false + } + } + return true +} + +exports.prerelease = prerelease +function prerelease (version, options) { + var parsed = parse(version, options) + return (parsed && parsed.prerelease.length) ? parsed.prerelease : null +} + +exports.intersects = intersects +function intersects (r1, r2, options) { + r1 = new Range(r1, options) + r2 = new Range(r2, options) + return r1.intersects(r2) +} + +exports.coerce = coerce +function coerce (version) { + if (version instanceof SemVer) { + return version + } + + if (typeof version !== 'string') { + return null + } + + var match = version.match(re[COERCE]) + + if (match == null) { + return null + } + + return parse(match[1] + + '.' + (match[2] || '0') + + '.' + (match[3] || '0')) +} diff --git a/node_modules/shebang-command/index.js b/node_modules/shebang-command/index.js new file mode 100644 index 00000000..2de70b07 --- /dev/null +++ b/node_modules/shebang-command/index.js @@ -0,0 +1,19 @@ +'use strict'; +var shebangRegex = require('shebang-regex'); + +module.exports = function (str) { + var match = str.match(shebangRegex); + + if (!match) { + return null; + } + + var arr = match[0].replace(/#! ?/, '').split(' '); + var bin = arr[0].split('/').pop(); + var arg = arr[1]; + + return (bin === 'env' ? + arg : + bin + (arg ? ' ' + arg : '') + ); +}; diff --git a/node_modules/shebang-command/license b/node_modules/shebang-command/license new file mode 100644 index 00000000..0f8cf79c --- /dev/null +++ b/node_modules/shebang-command/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Kevin Martensson (github.com/kevva) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/shebang-command/package.json b/node_modules/shebang-command/package.json new file mode 100644 index 00000000..a5d25b18 --- /dev/null +++ b/node_modules/shebang-command/package.json @@ -0,0 +1,71 @@ +{ + "_from": "shebang-command@^1.2.0", + "_id": "shebang-command@1.2.0", + "_inBundle": false, + "_integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "_location": "/shebang-command", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "shebang-command@^1.2.0", + "name": "shebang-command", + "escapedName": "shebang-command", + "rawSpec": "^1.2.0", + "saveSpec": null, + "fetchSpec": "^1.2.0" + }, + "_requiredBy": [ + "/cross-spawn" + ], + "_resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "_shasum": "44aac65b695b03398968c39f363fee5deafdf1ea", + "_spec": "shebang-command@^1.2.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/cross-spawn", + "author": { + "name": "Kevin Martensson", + "email": "kevinmartensson@gmail.com", + "url": "github.com/kevva" + }, + "bugs": { + "url": "https://github.com/kevva/shebang-command/issues" + }, + "bundleDependencies": false, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "deprecated": false, + "description": "Get the command from a shebang", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/kevva/shebang-command#readme", + "keywords": [ + "cmd", + "command", + "parse", + "shebang" + ], + "license": "MIT", + "name": "shebang-command", + "repository": { + "type": "git", + "url": "git+https://github.com/kevva/shebang-command.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "1.2.0", + "xo": { + "ignores": [ + "test.js" + ] + } +} diff --git a/node_modules/shebang-command/readme.md b/node_modules/shebang-command/readme.md new file mode 100644 index 00000000..16b0be4d --- /dev/null +++ b/node_modules/shebang-command/readme.md @@ -0,0 +1,39 @@ +# shebang-command [![Build Status](https://travis-ci.org/kevva/shebang-command.svg?branch=master)](https://travis-ci.org/kevva/shebang-command) + +> Get the command from a shebang + + +## Install + +``` +$ npm install --save shebang-command +``` + + +## Usage + +```js +const shebangCommand = require('shebang-command'); + +shebangCommand('#!/usr/bin/env node'); +//=> 'node' + +shebangCommand('#!/bin/bash'); +//=> 'bash' +``` + + +## API + +### shebangCommand(string) + +#### string + +Type: `string` + +String containing a shebang. + + +## License + +MIT © [Kevin Martensson](http://github.com/kevva) diff --git a/node_modules/shebang-regex/index.js b/node_modules/shebang-regex/index.js new file mode 100644 index 00000000..d052d2e0 --- /dev/null +++ b/node_modules/shebang-regex/index.js @@ -0,0 +1,2 @@ +'use strict'; +module.exports = /^#!.*/; diff --git a/node_modules/shebang-regex/license b/node_modules/shebang-regex/license new file mode 100644 index 00000000..654d0bfe --- /dev/null +++ b/node_modules/shebang-regex/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/shebang-regex/package.json b/node_modules/shebang-regex/package.json new file mode 100644 index 00000000..5615f474 --- /dev/null +++ b/node_modules/shebang-regex/package.json @@ -0,0 +1,64 @@ +{ + "_from": "shebang-regex@^1.0.0", + "_id": "shebang-regex@1.0.0", + "_inBundle": false, + "_integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "_location": "/shebang-regex", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "shebang-regex@^1.0.0", + "name": "shebang-regex", + "escapedName": "shebang-regex", + "rawSpec": "^1.0.0", + "saveSpec": null, + "fetchSpec": "^1.0.0" + }, + "_requiredBy": [ + "/shebang-command" + ], + "_resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "_shasum": "da42f49740c0b42db2ca9728571cb190c98efea3", + "_spec": "shebang-regex@^1.0.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/shebang-command", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/shebang-regex/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Regular expression for matching a shebang", + "devDependencies": { + "ava": "0.0.4" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/shebang-regex#readme", + "keywords": [ + "re", + "regex", + "regexp", + "shebang", + "match", + "test" + ], + "license": "MIT", + "name": "shebang-regex", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/shebang-regex.git" + }, + "scripts": { + "test": "node test.js" + }, + "version": "1.0.0" +} diff --git a/node_modules/shebang-regex/readme.md b/node_modules/shebang-regex/readme.md new file mode 100644 index 00000000..ef75e51b --- /dev/null +++ b/node_modules/shebang-regex/readme.md @@ -0,0 +1,29 @@ +# shebang-regex [![Build Status](https://travis-ci.org/sindresorhus/shebang-regex.svg?branch=master)](https://travis-ci.org/sindresorhus/shebang-regex) + +> Regular expression for matching a [shebang](https://en.wikipedia.org/wiki/Shebang_(Unix)) + + +## Install + +``` +$ npm install --save shebang-regex +``` + + +## Usage + +```js +var shebangRegex = require('shebang-regex'); +var str = '#!/usr/bin/env node\nconsole.log("unicorns");'; + +shebangRegex.test(str); +//=> true + +shebangRegex.exec(str)[0]; +//=> '#!/usr/bin/env node' +``` + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/signal-exit/CHANGELOG.md b/node_modules/signal-exit/CHANGELOG.md new file mode 100644 index 00000000..e2f70d22 --- /dev/null +++ b/node_modules/signal-exit/CHANGELOG.md @@ -0,0 +1,27 @@ +# Change Log + +All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + + +## [3.0.1](https://github.com/tapjs/signal-exit/compare/v3.0.0...v3.0.1) (2016-09-08) + + +### Bug Fixes + +* do not listen on SIGBUS, SIGFPE, SIGSEGV and SIGILL ([#40](https://github.com/tapjs/signal-exit/issues/40)) ([5b105fb](https://github.com/tapjs/signal-exit/commit/5b105fb)) + + + + +# [3.0.0](https://github.com/tapjs/signal-exit/compare/v2.1.2...v3.0.0) (2016-06-13) + + +### Bug Fixes + +* get our test suite running on Windows ([#23](https://github.com/tapjs/signal-exit/issues/23)) ([6f3eda8](https://github.com/tapjs/signal-exit/commit/6f3eda8)) +* hooking SIGPROF was interfering with profilers see [#21](https://github.com/tapjs/signal-exit/issues/21) ([#24](https://github.com/tapjs/signal-exit/issues/24)) ([1248a4c](https://github.com/tapjs/signal-exit/commit/1248a4c)) + + +### BREAKING CHANGES + +* signal-exit no longer wires into SIGPROF diff --git a/node_modules/signal-exit/LICENSE.txt b/node_modules/signal-exit/LICENSE.txt new file mode 100644 index 00000000..eead04a1 --- /dev/null +++ b/node_modules/signal-exit/LICENSE.txt @@ -0,0 +1,16 @@ +The ISC License + +Copyright (c) 2015, Contributors + +Permission to use, copy, modify, and/or distribute this software +for any purpose with or without fee is hereby granted, provided +that the above copyright notice and this permission notice +appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE +LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES +OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/signal-exit/README.md b/node_modules/signal-exit/README.md new file mode 100644 index 00000000..8ebccabe --- /dev/null +++ b/node_modules/signal-exit/README.md @@ -0,0 +1,40 @@ +# signal-exit + +[![Build Status](https://travis-ci.org/tapjs/signal-exit.png)](https://travis-ci.org/tapjs/signal-exit) +[![Coverage](https://coveralls.io/repos/tapjs/signal-exit/badge.svg?branch=master)](https://coveralls.io/r/tapjs/signal-exit?branch=master) +[![NPM version](https://img.shields.io/npm/v/signal-exit.svg)](https://www.npmjs.com/package/signal-exit) +[![Windows Tests](https://img.shields.io/appveyor/ci/bcoe/signal-exit/master.svg?label=Windows%20Tests)](https://ci.appveyor.com/project/bcoe/signal-exit) +[![Standard Version](https://img.shields.io/badge/release-standard%20version-brightgreen.svg)](https://github.com/conventional-changelog/standard-version) + +When you want to fire an event no matter how a process exits: + +* reaching the end of execution. +* explicitly having `process.exit(code)` called. +* having `process.kill(pid, sig)` called. +* receiving a fatal signal from outside the process + +Use `signal-exit`. + +```js +var onExit = require('signal-exit') + +onExit(function (code, signal) { + console.log('process exited!') +}) +``` + +## API + +`var remove = onExit(function (code, signal) {}, options)` + +The return value of the function is a function that will remove the +handler. + +Note that the function *only* fires for signals if the signal would +cause the proces to exit. That is, there are no other listeners, and +it is a fatal signal. + +## Options + +* `alwaysLast`: Run this handler after any other signal or exit + handlers. This causes `process.emit` to be monkeypatched. diff --git a/node_modules/signal-exit/index.js b/node_modules/signal-exit/index.js new file mode 100644 index 00000000..337f691e --- /dev/null +++ b/node_modules/signal-exit/index.js @@ -0,0 +1,157 @@ +// Note: since nyc uses this module to output coverage, any lines +// that are in the direct sync flow of nyc's outputCoverage are +// ignored, since we can never get coverage for them. +var assert = require('assert') +var signals = require('./signals.js') + +var EE = require('events') +/* istanbul ignore if */ +if (typeof EE !== 'function') { + EE = EE.EventEmitter +} + +var emitter +if (process.__signal_exit_emitter__) { + emitter = process.__signal_exit_emitter__ +} else { + emitter = process.__signal_exit_emitter__ = new EE() + emitter.count = 0 + emitter.emitted = {} +} + +// Because this emitter is a global, we have to check to see if a +// previous version of this library failed to enable infinite listeners. +// I know what you're about to say. But literally everything about +// signal-exit is a compromise with evil. Get used to it. +if (!emitter.infinite) { + emitter.setMaxListeners(Infinity) + emitter.infinite = true +} + +module.exports = function (cb, opts) { + assert.equal(typeof cb, 'function', 'a callback must be provided for exit handler') + + if (loaded === false) { + load() + } + + var ev = 'exit' + if (opts && opts.alwaysLast) { + ev = 'afterexit' + } + + var remove = function () { + emitter.removeListener(ev, cb) + if (emitter.listeners('exit').length === 0 && + emitter.listeners('afterexit').length === 0) { + unload() + } + } + emitter.on(ev, cb) + + return remove +} + +module.exports.unload = unload +function unload () { + if (!loaded) { + return + } + loaded = false + + signals.forEach(function (sig) { + try { + process.removeListener(sig, sigListeners[sig]) + } catch (er) {} + }) + process.emit = originalProcessEmit + process.reallyExit = originalProcessReallyExit + emitter.count -= 1 +} + +function emit (event, code, signal) { + if (emitter.emitted[event]) { + return + } + emitter.emitted[event] = true + emitter.emit(event, code, signal) +} + +// { : , ... } +var sigListeners = {} +signals.forEach(function (sig) { + sigListeners[sig] = function listener () { + // If there are no other listeners, an exit is coming! + // Simplest way: remove us and then re-send the signal. + // We know that this will kill the process, so we can + // safely emit now. + var listeners = process.listeners(sig) + if (listeners.length === emitter.count) { + unload() + emit('exit', null, sig) + /* istanbul ignore next */ + emit('afterexit', null, sig) + /* istanbul ignore next */ + process.kill(process.pid, sig) + } + } +}) + +module.exports.signals = function () { + return signals +} + +module.exports.load = load + +var loaded = false + +function load () { + if (loaded) { + return + } + loaded = true + + // This is the number of onSignalExit's that are in play. + // It's important so that we can count the correct number of + // listeners on signals, and don't wait for the other one to + // handle it instead of us. + emitter.count += 1 + + signals = signals.filter(function (sig) { + try { + process.on(sig, sigListeners[sig]) + return true + } catch (er) { + return false + } + }) + + process.emit = processEmit + process.reallyExit = processReallyExit +} + +var originalProcessReallyExit = process.reallyExit +function processReallyExit (code) { + process.exitCode = code || 0 + emit('exit', process.exitCode, null) + /* istanbul ignore next */ + emit('afterexit', process.exitCode, null) + /* istanbul ignore next */ + originalProcessReallyExit.call(process, process.exitCode) +} + +var originalProcessEmit = process.emit +function processEmit (ev, arg) { + if (ev === 'exit') { + if (arg !== undefined) { + process.exitCode = arg + } + var ret = originalProcessEmit.apply(this, arguments) + emit('exit', process.exitCode, null) + /* istanbul ignore next */ + emit('afterexit', process.exitCode, null) + return ret + } else { + return originalProcessEmit.apply(this, arguments) + } +} diff --git a/node_modules/signal-exit/package.json b/node_modules/signal-exit/package.json new file mode 100644 index 00000000..b3b6e888 --- /dev/null +++ b/node_modules/signal-exit/package.json @@ -0,0 +1,66 @@ +{ + "_from": "signal-exit@^3.0.0", + "_id": "signal-exit@3.0.2", + "_inBundle": false, + "_integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "_location": "/signal-exit", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "signal-exit@^3.0.0", + "name": "signal-exit", + "escapedName": "signal-exit", + "rawSpec": "^3.0.0", + "saveSpec": null, + "fetchSpec": "^3.0.0" + }, + "_requiredBy": [ + "/execa" + ], + "_resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "_shasum": "b5fdc08f1287ea1178628e415e25132b73646c6d", + "_spec": "signal-exit@^3.0.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/execa", + "author": { + "name": "Ben Coe", + "email": "ben@npmjs.com" + }, + "bugs": { + "url": "https://github.com/tapjs/signal-exit/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "when you want to fire an event no matter how a process exits.", + "devDependencies": { + "chai": "^3.5.0", + "coveralls": "^2.11.10", + "nyc": "^8.1.0", + "standard": "^7.1.2", + "standard-version": "^2.3.0", + "tap": "^8.0.1" + }, + "files": [ + "index.js", + "signals.js" + ], + "homepage": "https://github.com/tapjs/signal-exit", + "keywords": [ + "signal", + "exit" + ], + "license": "ISC", + "main": "index.js", + "name": "signal-exit", + "repository": { + "type": "git", + "url": "git+https://github.com/tapjs/signal-exit.git" + }, + "scripts": { + "coverage": "nyc report --reporter=text-lcov | coveralls", + "pretest": "standard", + "release": "standard-version", + "test": "tap --timeout=240 ./test/*.js --cov" + }, + "version": "3.0.2" +} diff --git a/node_modules/signal-exit/signals.js b/node_modules/signal-exit/signals.js new file mode 100644 index 00000000..3bd67a8a --- /dev/null +++ b/node_modules/signal-exit/signals.js @@ -0,0 +1,53 @@ +// This is not the set of all possible signals. +// +// It IS, however, the set of all signals that trigger +// an exit on either Linux or BSD systems. Linux is a +// superset of the signal names supported on BSD, and +// the unknown signals just fail to register, so we can +// catch that easily enough. +// +// Don't bother with SIGKILL. It's uncatchable, which +// means that we can't fire any callbacks anyway. +// +// If a user does happen to register a handler on a non- +// fatal signal like SIGWINCH or something, and then +// exit, it'll end up firing `process.emit('exit')`, so +// the handler will be fired anyway. +// +// SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised +// artificially, inherently leave the process in a +// state from which it is not safe to try and enter JS +// listeners. +module.exports = [ + 'SIGABRT', + 'SIGALRM', + 'SIGHUP', + 'SIGINT', + 'SIGTERM' +] + +if (process.platform !== 'win32') { + module.exports.push( + 'SIGVTALRM', + 'SIGXCPU', + 'SIGXFSZ', + 'SIGUSR2', + 'SIGTRAP', + 'SIGSYS', + 'SIGQUIT', + 'SIGIOT' + // should detect profiler and enable/disable accordingly. + // see #21 + // 'SIGPROF' + ) +} + +if (process.platform === 'linux') { + module.exports.push( + 'SIGIO', + 'SIGPOLL', + 'SIGPWR', + 'SIGSTKFLT', + 'SIGUNUSED' + ) +} diff --git a/node_modules/sprintf-js/.npmignore b/node_modules/sprintf-js/.npmignore new file mode 100644 index 00000000..096746c1 --- /dev/null +++ b/node_modules/sprintf-js/.npmignore @@ -0,0 +1 @@ +/node_modules/ \ No newline at end of file diff --git a/node_modules/sprintf-js/LICENSE b/node_modules/sprintf-js/LICENSE new file mode 100644 index 00000000..663ac52e --- /dev/null +++ b/node_modules/sprintf-js/LICENSE @@ -0,0 +1,24 @@ +Copyright (c) 2007-2014, Alexandru Marasteanu +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +* Neither the name of this software nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/sprintf-js/README.md b/node_modules/sprintf-js/README.md new file mode 100644 index 00000000..83863561 --- /dev/null +++ b/node_modules/sprintf-js/README.md @@ -0,0 +1,88 @@ +# sprintf.js +**sprintf.js** is a complete open source JavaScript sprintf implementation for the *browser* and *node.js*. + +Its prototype is simple: + + string sprintf(string format , [mixed arg1 [, mixed arg2 [ ,...]]]) + +The placeholders in the format string are marked by `%` and are followed by one or more of these elements, in this order: + +* An optional number followed by a `$` sign that selects which argument index to use for the value. If not specified, arguments will be placed in the same order as the placeholders in the input string. +* An optional `+` sign that forces to preceed the result with a plus or minus sign on numeric values. By default, only the `-` sign is used on negative numbers. +* An optional padding specifier that says what character to use for padding (if specified). Possible values are `0` or any other character precedeed by a `'` (single quote). The default is to pad with *spaces*. +* An optional `-` sign, that causes sprintf to left-align the result of this placeholder. The default is to right-align the result. +* An optional number, that says how many characters the result should have. If the value to be returned is shorter than this number, the result will be padded. When used with the `j` (JSON) type specifier, the padding length specifies the tab size used for indentation. +* An optional precision modifier, consisting of a `.` (dot) followed by a number, that says how many digits should be displayed for floating point numbers. When used with the `g` type specifier, it specifies the number of significant digits. When used on a string, it causes the result to be truncated. +* A type specifier that can be any of: + * `%` — yields a literal `%` character + * `b` — yields an integer as a binary number + * `c` — yields an integer as the character with that ASCII value + * `d` or `i` — yields an integer as a signed decimal number + * `e` — yields a float using scientific notation + * `u` — yields an integer as an unsigned decimal number + * `f` — yields a float as is; see notes on precision above + * `g` — yields a float as is; see notes on precision above + * `o` — yields an integer as an octal number + * `s` — yields a string as is + * `x` — yields an integer as a hexadecimal number (lower-case) + * `X` — yields an integer as a hexadecimal number (upper-case) + * `j` — yields a JavaScript object or array as a JSON encoded string + +## JavaScript `vsprintf` +`vsprintf` is the same as `sprintf` except that it accepts an array of arguments, rather than a variable number of arguments: + + vsprintf("The first 4 letters of the english alphabet are: %s, %s, %s and %s", ["a", "b", "c", "d"]) + +## Argument swapping +You can also swap the arguments. That is, the order of the placeholders doesn't have to match the order of the arguments. You can do that by simply indicating in the format string which arguments the placeholders refer to: + + sprintf("%2$s %3$s a %1$s", "cracker", "Polly", "wants") +And, of course, you can repeat the placeholders without having to increase the number of arguments. + +## Named arguments +Format strings may contain replacement fields rather than positional placeholders. Instead of referring to a certain argument, you can now refer to a certain key within an object. Replacement fields are surrounded by rounded parentheses - `(` and `)` - and begin with a keyword that refers to a key: + + var user = { + name: "Dolly" + } + sprintf("Hello %(name)s", user) // Hello Dolly +Keywords in replacement fields can be optionally followed by any number of keywords or indexes: + + var users = [ + {name: "Dolly"}, + {name: "Molly"}, + {name: "Polly"} + ] + sprintf("Hello %(users[0].name)s, %(users[1].name)s and %(users[2].name)s", {users: users}) // Hello Dolly, Molly and Polly +Note: mixing positional and named placeholders is not (yet) supported + +## Computed values +You can pass in a function as a dynamic value and it will be invoked (with no arguments) in order to compute the value on-the-fly. + + sprintf("Current timestamp: %d", Date.now) // Current timestamp: 1398005382890 + sprintf("Current date and time: %s", function() { return new Date().toString() }) + +# AngularJS +You can now use `sprintf` and `vsprintf` (also aliased as `fmt` and `vfmt` respectively) in your AngularJS projects. See `demo/`. + +# Installation + +## Via Bower + + bower install sprintf + +## Or as a node.js module + + npm install sprintf-js + +### Usage + + var sprintf = require("sprintf-js").sprintf, + vsprintf = require("sprintf-js").vsprintf + + sprintf("%2$s %3$s a %1$s", "cracker", "Polly", "wants") + vsprintf("The first 4 letters of the english alphabet are: %s, %s, %s and %s", ["a", "b", "c", "d"]) + +# License + +**sprintf.js** is licensed under the terms of the 3-clause BSD license. diff --git a/node_modules/sprintf-js/bower.json b/node_modules/sprintf-js/bower.json new file mode 100644 index 00000000..d90a7598 --- /dev/null +++ b/node_modules/sprintf-js/bower.json @@ -0,0 +1,14 @@ +{ + "name": "sprintf", + "description": "JavaScript sprintf implementation", + "version": "1.0.3", + "main": "src/sprintf.js", + "license": "BSD-3-Clause-Clear", + "keywords": ["sprintf", "string", "formatting"], + "authors": ["Alexandru Marasteanu (http://alexei.ro/)"], + "homepage": "https://github.com/alexei/sprintf.js", + "repository": { + "type": "git", + "url": "git://github.com/alexei/sprintf.js.git" + } +} diff --git a/node_modules/sprintf-js/demo/angular.html b/node_modules/sprintf-js/demo/angular.html new file mode 100644 index 00000000..3559efd7 --- /dev/null +++ b/node_modules/sprintf-js/demo/angular.html @@ -0,0 +1,20 @@ + + + + + + + + +
{{ "%+010d"|sprintf:-123 }}
+
{{ "%+010d"|vsprintf:[-123] }}
+
{{ "%+010d"|fmt:-123 }}
+
{{ "%+010d"|vfmt:[-123] }}
+
{{ "I've got %2$d apples and %1$d oranges."|fmt:4:2 }}
+
{{ "I've got %(apples)d apples and %(oranges)d oranges."|fmt:{apples: 2, oranges: 4} }}
+ + + + diff --git a/node_modules/sprintf-js/dist/angular-sprintf.min.js b/node_modules/sprintf-js/dist/angular-sprintf.min.js new file mode 100644 index 00000000..dbaf744d --- /dev/null +++ b/node_modules/sprintf-js/dist/angular-sprintf.min.js @@ -0,0 +1,4 @@ +/*! sprintf-js | Alexandru Marasteanu (http://alexei.ro/) | BSD-3-Clause */ + +angular.module("sprintf",[]).filter("sprintf",function(){return function(){return sprintf.apply(null,arguments)}}).filter("fmt",["$filter",function(a){return a("sprintf")}]).filter("vsprintf",function(){return function(a,b){return vsprintf(a,b)}}).filter("vfmt",["$filter",function(a){return a("vsprintf")}]); +//# sourceMappingURL=angular-sprintf.min.map \ No newline at end of file diff --git a/node_modules/sprintf-js/dist/angular-sprintf.min.js.map b/node_modules/sprintf-js/dist/angular-sprintf.min.js.map new file mode 100644 index 00000000..055964c6 --- /dev/null +++ b/node_modules/sprintf-js/dist/angular-sprintf.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"angular-sprintf.min.js","sources":["../src/angular-sprintf.js"],"names":["angular","module","filter","sprintf","apply","arguments","$filter","format","argv","vsprintf"],"mappings":";;AAAAA,QACIC,OAAO,cACPC,OAAO,UAAW,WACd,MAAO,YACH,MAAOC,SAAQC,MAAM,KAAMC,cAGnCH,OAAO,OAAQ,UAAW,SAASI,GAC/B,MAAOA,GAAQ,cAEnBJ,OAAO,WAAY,WACf,MAAO,UAASK,EAAQC,GACpB,MAAOC,UAASF,EAAQC,MAGhCN,OAAO,QAAS,UAAW,SAASI,GAChC,MAAOA,GAAQ"} \ No newline at end of file diff --git a/node_modules/sprintf-js/dist/angular-sprintf.min.map b/node_modules/sprintf-js/dist/angular-sprintf.min.map new file mode 100644 index 00000000..055964c6 --- /dev/null +++ b/node_modules/sprintf-js/dist/angular-sprintf.min.map @@ -0,0 +1 @@ +{"version":3,"file":"angular-sprintf.min.js","sources":["../src/angular-sprintf.js"],"names":["angular","module","filter","sprintf","apply","arguments","$filter","format","argv","vsprintf"],"mappings":";;AAAAA,QACIC,OAAO,cACPC,OAAO,UAAW,WACd,MAAO,YACH,MAAOC,SAAQC,MAAM,KAAMC,cAGnCH,OAAO,OAAQ,UAAW,SAASI,GAC/B,MAAOA,GAAQ,cAEnBJ,OAAO,WAAY,WACf,MAAO,UAASK,EAAQC,GACpB,MAAOC,UAASF,EAAQC,MAGhCN,OAAO,QAAS,UAAW,SAASI,GAChC,MAAOA,GAAQ"} \ No newline at end of file diff --git a/node_modules/sprintf-js/dist/sprintf.min.js b/node_modules/sprintf-js/dist/sprintf.min.js new file mode 100644 index 00000000..dc61e51a --- /dev/null +++ b/node_modules/sprintf-js/dist/sprintf.min.js @@ -0,0 +1,4 @@ +/*! sprintf-js | Alexandru Marasteanu (http://alexei.ro/) | BSD-3-Clause */ + +!function(a){function b(){var a=arguments[0],c=b.cache;return c[a]&&c.hasOwnProperty(a)||(c[a]=b.parse(a)),b.format.call(null,c[a],arguments)}function c(a){return Object.prototype.toString.call(a).slice(8,-1).toLowerCase()}function d(a,b){return Array(b+1).join(a)}var e={not_string:/[^s]/,number:/[diefg]/,json:/[j]/,not_json:/[^j]/,text:/^[^\x25]+/,modulo:/^\x25{2}/,placeholder:/^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijosuxX])/,key:/^([a-z_][a-z_\d]*)/i,key_access:/^\.([a-z_][a-z_\d]*)/i,index_access:/^\[(\d+)\]/,sign:/^[\+\-]/};b.format=function(a,f){var g,h,i,j,k,l,m,n=1,o=a.length,p="",q=[],r=!0,s="";for(h=0;o>h;h++)if(p=c(a[h]),"string"===p)q[q.length]=a[h];else if("array"===p){if(j=a[h],j[2])for(g=f[n],i=0;i=0),j[8]){case"b":g=g.toString(2);break;case"c":g=String.fromCharCode(g);break;case"d":case"i":g=parseInt(g,10);break;case"j":g=JSON.stringify(g,null,j[6]?parseInt(j[6]):0);break;case"e":g=j[7]?g.toExponential(j[7]):g.toExponential();break;case"f":g=j[7]?parseFloat(g).toFixed(j[7]):parseFloat(g);break;case"g":g=j[7]?parseFloat(g).toPrecision(j[7]):parseFloat(g);break;case"o":g=g.toString(8);break;case"s":g=(g=String(g))&&j[7]?g.substring(0,j[7]):g;break;case"u":g>>>=0;break;case"x":g=g.toString(16);break;case"X":g=g.toString(16).toUpperCase()}e.json.test(j[8])?q[q.length]=g:(!e.number.test(j[8])||r&&!j[3]?s="":(s=r?"+":"-",g=g.toString().replace(e.sign,"")),l=j[4]?"0"===j[4]?"0":j[4].charAt(1):" ",m=j[6]-(s+g).length,k=j[6]&&m>0?d(l,m):"",q[q.length]=j[5]?s+g+k:"0"===l?s+k+g:k+s+g)}return q.join("")},b.cache={},b.parse=function(a){for(var b=a,c=[],d=[],f=0;b;){if(null!==(c=e.text.exec(b)))d[d.length]=c[0];else if(null!==(c=e.modulo.exec(b)))d[d.length]="%";else{if(null===(c=e.placeholder.exec(b)))throw new SyntaxError("[sprintf] unexpected placeholder");if(c[2]){f|=1;var g=[],h=c[2],i=[];if(null===(i=e.key.exec(h)))throw new SyntaxError("[sprintf] failed to parse named argument key");for(g[g.length]=i[1];""!==(h=h.substring(i[0].length));)if(null!==(i=e.key_access.exec(h)))g[g.length]=i[1];else{if(null===(i=e.index_access.exec(h)))throw new SyntaxError("[sprintf] failed to parse named argument key");g[g.length]=i[1]}c[2]=g}else f|=2;if(3===f)throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported");d[d.length]=c}b=b.substring(c[0].length)}return d};var f=function(a,c,d){return d=(c||[]).slice(0),d.splice(0,0,a),b.apply(null,d)};"undefined"!=typeof exports?(exports.sprintf=b,exports.vsprintf=f):(a.sprintf=b,a.vsprintf=f,"function"==typeof define&&define.amd&&define(function(){return{sprintf:b,vsprintf:f}}))}("undefined"==typeof window?this:window); +//# sourceMappingURL=sprintf.min.map \ No newline at end of file diff --git a/node_modules/sprintf-js/dist/sprintf.min.js.map b/node_modules/sprintf-js/dist/sprintf.min.js.map new file mode 100644 index 00000000..369dbafa --- /dev/null +++ b/node_modules/sprintf-js/dist/sprintf.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sprintf.min.js","sources":["../src/sprintf.js"],"names":["window","sprintf","key","arguments","cache","hasOwnProperty","parse","format","call","get_type","variable","Object","prototype","toString","slice","toLowerCase","str_repeat","input","multiplier","Array","join","re","not_string","number","json","not_json","text","modulo","placeholder","key_access","index_access","sign","parse_tree","argv","arg","i","k","match","pad","pad_character","pad_length","cursor","tree_length","length","node_type","output","is_positive","Error","test","isNaN","TypeError","String","fromCharCode","parseInt","JSON","stringify","toExponential","parseFloat","toFixed","substring","toUpperCase","replace","charAt","fmt","_fmt","arg_names","exec","SyntaxError","field_list","replacement_field","field_match","vsprintf","_argv","splice","apply","exports","define","amd","this"],"mappings":";;CAAA,SAAUA,GAeN,QAASC,KACL,GAAIC,GAAMC,UAAU,GAAIC,EAAQH,EAAQG,KAIxC,OAHMA,GAAMF,IAAQE,EAAMC,eAAeH,KACrCE,EAAMF,GAAOD,EAAQK,MAAMJ,IAExBD,EAAQM,OAAOC,KAAK,KAAMJ,EAAMF,GAAMC,WA4JjD,QAASM,GAASC,GACd,MAAOC,QAAOC,UAAUC,SAASL,KAAKE,GAAUI,MAAM,EAAG,IAAIC,cAGjE,QAASC,GAAWC,EAAOC,GACvB,MAAOC,OAAMD,EAAa,GAAGE,KAAKH,GApLtC,GAAII,IACAC,WAAY,OACZC,OAAQ,SACRC,KAAM,MACNC,SAAU,OACVC,KAAM,YACNC,OAAQ,WACRC,YAAa,yFACb1B,IAAK,sBACL2B,WAAY,wBACZC,aAAc,aACdC,KAAM,UAWV9B,GAAQM,OAAS,SAASyB,EAAYC,GAClC,GAAiEC,GAAkBC,EAAGC,EAAGC,EAAOC,EAAKC,EAAeC,EAAhHC,EAAS,EAAGC,EAAcV,EAAWW,OAAQC,EAAY,GAASC,KAA0DC,GAAc,EAAMf,EAAO,EAC3J,KAAKI,EAAI,EAAOO,EAAJP,EAAiBA,IAEzB,GADAS,EAAYnC,EAASuB,EAAWG,IACd,WAAdS,EACAC,EAAOA,EAAOF,QAAUX,EAAWG,OAElC,IAAkB,UAAdS,EAAuB,CAE5B,GADAP,EAAQL,EAAWG,GACfE,EAAM,GAEN,IADAH,EAAMD,EAAKQ,GACNL,EAAI,EAAGA,EAAIC,EAAM,GAAGM,OAAQP,IAAK,CAClC,IAAKF,EAAI7B,eAAegC,EAAM,GAAGD,IAC7B,KAAM,IAAIW,OAAM9C,EAAQ,yCAA0CoC,EAAM,GAAGD,IAE/EF,GAAMA,EAAIG,EAAM,GAAGD,QAIvBF,GADKG,EAAM,GACLJ,EAAKI,EAAM,IAGXJ,EAAKQ,IAOf,IAJqB,YAAjBhC,EAASyB,KACTA,EAAMA,KAGNb,EAAGC,WAAW0B,KAAKX,EAAM,KAAOhB,EAAGI,SAASuB,KAAKX,EAAM,KAAyB,UAAjB5B,EAASyB,IAAoBe,MAAMf,GAClG,KAAM,IAAIgB,WAAUjD,EAAQ,0CAA2CQ,EAASyB,IAOpF,QAJIb,EAAGE,OAAOyB,KAAKX,EAAM,MACrBS,EAAcZ,GAAO,GAGjBG,EAAM,IACV,IAAK,IACDH,EAAMA,EAAIrB,SAAS,EACvB,MACA,KAAK,IACDqB,EAAMiB,OAAOC,aAAalB,EAC9B,MACA,KAAK,IACL,IAAK,IACDA,EAAMmB,SAASnB,EAAK,GACxB,MACA,KAAK,IACDA,EAAMoB,KAAKC,UAAUrB,EAAK,KAAMG,EAAM,GAAKgB,SAAShB,EAAM,IAAM,EACpE,MACA,KAAK,IACDH,EAAMG,EAAM,GAAKH,EAAIsB,cAAcnB,EAAM,IAAMH,EAAIsB,eACvD,MACA,KAAK,IACDtB,EAAMG,EAAM,GAAKoB,WAAWvB,GAAKwB,QAAQrB,EAAM,IAAMoB,WAAWvB,EACpE,MACA,KAAK,IACDA,EAAMA,EAAIrB,SAAS,EACvB,MACA,KAAK,IACDqB,GAAQA,EAAMiB,OAAOjB,KAASG,EAAM,GAAKH,EAAIyB,UAAU,EAAGtB,EAAM,IAAMH,CAC1E,MACA,KAAK,IACDA,KAAc,CAClB,MACA,KAAK,IACDA,EAAMA,EAAIrB,SAAS,GACvB,MACA,KAAK,IACDqB,EAAMA,EAAIrB,SAAS,IAAI+C,cAG3BvC,EAAGG,KAAKwB,KAAKX,EAAM,IACnBQ,EAAOA,EAAOF,QAAUT,IAGpBb,EAAGE,OAAOyB,KAAKX,EAAM,KAASS,IAAeT,EAAM,GAKnDN,EAAO,IAJPA,EAAOe,EAAc,IAAM,IAC3BZ,EAAMA,EAAIrB,WAAWgD,QAAQxC,EAAGU,KAAM,KAK1CQ,EAAgBF,EAAM,GAAkB,MAAbA,EAAM,GAAa,IAAMA,EAAM,GAAGyB,OAAO,GAAK,IACzEtB,EAAaH,EAAM,IAAMN,EAAOG,GAAKS,OACrCL,EAAMD,EAAM,IAAMG,EAAa,EAAIxB,EAAWuB,EAAeC,GAAoB,GACjFK,EAAOA,EAAOF,QAAUN,EAAM,GAAKN,EAAOG,EAAMI,EAAyB,MAAlBC,EAAwBR,EAAOO,EAAMJ,EAAMI,EAAMP,EAAOG,GAI3H,MAAOW,GAAOzB,KAAK,KAGvBnB,EAAQG,SAERH,EAAQK,MAAQ,SAASyD,GAErB,IADA,GAAIC,GAAOD,EAAK1B,KAAYL,KAAiBiC,EAAY,EAClDD,GAAM,CACT,GAAqC,QAAhC3B,EAAQhB,EAAGK,KAAKwC,KAAKF,IACtBhC,EAAWA,EAAWW,QAAUN,EAAM,OAErC,IAAuC,QAAlCA,EAAQhB,EAAGM,OAAOuC,KAAKF,IAC7BhC,EAAWA,EAAWW,QAAU,QAE/B,CAAA,GAA4C,QAAvCN,EAAQhB,EAAGO,YAAYsC,KAAKF,IAgClC,KAAM,IAAIG,aAAY,mCA/BtB,IAAI9B,EAAM,GAAI,CACV4B,GAAa,CACb,IAAIG,MAAiBC,EAAoBhC,EAAM,GAAIiC,IACnD,IAAuD,QAAlDA,EAAcjD,EAAGnB,IAAIgE,KAAKG,IAe3B,KAAM,IAAIF,aAAY,+CAbtB,KADAC,EAAWA,EAAWzB,QAAU2B,EAAY,GACwC,MAA5ED,EAAoBA,EAAkBV,UAAUW,EAAY,GAAG3B,UACnE,GAA8D,QAAzD2B,EAAcjD,EAAGQ,WAAWqC,KAAKG,IAClCD,EAAWA,EAAWzB,QAAU2B,EAAY,OAE3C,CAAA,GAAgE,QAA3DA,EAAcjD,EAAGS,aAAaoC,KAAKG,IAIzC,KAAM,IAAIF,aAAY,+CAHtBC,GAAWA,EAAWzB,QAAU2B,EAAY,GAUxDjC,EAAM,GAAK+B,MAGXH,IAAa,CAEjB,IAAkB,IAAdA,EACA,KAAM,IAAIlB,OAAM,4EAEpBf,GAAWA,EAAWW,QAAUN,EAKpC2B,EAAOA,EAAKL,UAAUtB,EAAM,GAAGM,QAEnC,MAAOX,GAGX,IAAIuC,GAAW,SAASR,EAAK9B,EAAMuC,GAG/B,MAFAA,IAASvC,OAAYnB,MAAM,GAC3B0D,EAAMC,OAAO,EAAG,EAAGV,GACZ9D,EAAQyE,MAAM,KAAMF,GAiBR,oBAAZG,UACPA,QAAQ1E,QAAUA,EAClB0E,QAAQJ,SAAWA,IAGnBvE,EAAOC,QAAUA,EACjBD,EAAOuE,SAAWA,EAEI,kBAAXK,SAAyBA,OAAOC,KACvCD,OAAO,WACH,OACI3E,QAASA,EACTsE,SAAUA,OAKT,mBAAXvE,QAAyB8E,KAAO9E"} \ No newline at end of file diff --git a/node_modules/sprintf-js/dist/sprintf.min.map b/node_modules/sprintf-js/dist/sprintf.min.map new file mode 100644 index 00000000..ee011aaa --- /dev/null +++ b/node_modules/sprintf-js/dist/sprintf.min.map @@ -0,0 +1 @@ +{"version":3,"file":"sprintf.min.js","sources":["../src/sprintf.js"],"names":["window","sprintf","key","arguments","cache","hasOwnProperty","parse","format","call","get_type","variable","Object","prototype","toString","slice","toLowerCase","str_repeat","input","multiplier","Array","join","re","not_string","number","json","not_json","text","modulo","placeholder","key_access","index_access","sign","parse_tree","argv","arg","i","k","match","pad","pad_character","pad_length","cursor","tree_length","length","node_type","output","is_positive","Error","test","isNaN","TypeError","String","fromCharCode","parseInt","JSON","stringify","toExponential","parseFloat","toFixed","toPrecision","substring","toUpperCase","replace","charAt","fmt","_fmt","arg_names","exec","SyntaxError","field_list","replacement_field","field_match","vsprintf","_argv","splice","apply","exports","define","amd","this"],"mappings":";;CAAA,SAAUA,GAeN,QAASC,KACL,GAAIC,GAAMC,UAAU,GAAIC,EAAQH,EAAQG,KAIxC,OAHMA,GAAMF,IAAQE,EAAMC,eAAeH,KACrCE,EAAMF,GAAOD,EAAQK,MAAMJ,IAExBD,EAAQM,OAAOC,KAAK,KAAMJ,EAAMF,GAAMC,WA+JjD,QAASM,GAASC,GACd,MAAOC,QAAOC,UAAUC,SAASL,KAAKE,GAAUI,MAAM,EAAG,IAAIC,cAGjE,QAASC,GAAWC,EAAOC,GACvB,MAAOC,OAAMD,EAAa,GAAGE,KAAKH,GAvLtC,GAAII,IACAC,WAAY,OACZC,OAAQ,UACRC,KAAM,MACNC,SAAU,OACVC,KAAM,YACNC,OAAQ,WACRC,YAAa,yFACb1B,IAAK,sBACL2B,WAAY,wBACZC,aAAc,aACdC,KAAM,UAWV9B,GAAQM,OAAS,SAASyB,EAAYC,GAClC,GAAiEC,GAAkBC,EAAGC,EAAGC,EAAOC,EAAKC,EAAeC,EAAhHC,EAAS,EAAGC,EAAcV,EAAWW,OAAQC,EAAY,GAASC,KAA0DC,GAAc,EAAMf,EAAO,EAC3J,KAAKI,EAAI,EAAOO,EAAJP,EAAiBA,IAEzB,GADAS,EAAYnC,EAASuB,EAAWG,IACd,WAAdS,EACAC,EAAOA,EAAOF,QAAUX,EAAWG,OAElC,IAAkB,UAAdS,EAAuB,CAE5B,GADAP,EAAQL,EAAWG,GACfE,EAAM,GAEN,IADAH,EAAMD,EAAKQ,GACNL,EAAI,EAAGA,EAAIC,EAAM,GAAGM,OAAQP,IAAK,CAClC,IAAKF,EAAI7B,eAAegC,EAAM,GAAGD,IAC7B,KAAM,IAAIW,OAAM9C,EAAQ,yCAA0CoC,EAAM,GAAGD,IAE/EF,GAAMA,EAAIG,EAAM,GAAGD,QAIvBF,GADKG,EAAM,GACLJ,EAAKI,EAAM,IAGXJ,EAAKQ,IAOf,IAJqB,YAAjBhC,EAASyB,KACTA,EAAMA,KAGNb,EAAGC,WAAW0B,KAAKX,EAAM,KAAOhB,EAAGI,SAASuB,KAAKX,EAAM,KAAyB,UAAjB5B,EAASyB,IAAoBe,MAAMf,GAClG,KAAM,IAAIgB,WAAUjD,EAAQ,0CAA2CQ,EAASyB,IAOpF,QAJIb,EAAGE,OAAOyB,KAAKX,EAAM,MACrBS,EAAcZ,GAAO,GAGjBG,EAAM,IACV,IAAK,IACDH,EAAMA,EAAIrB,SAAS,EACvB,MACA,KAAK,IACDqB,EAAMiB,OAAOC,aAAalB,EAC9B,MACA,KAAK,IACL,IAAK,IACDA,EAAMmB,SAASnB,EAAK,GACxB,MACA,KAAK,IACDA,EAAMoB,KAAKC,UAAUrB,EAAK,KAAMG,EAAM,GAAKgB,SAAShB,EAAM,IAAM,EACpE,MACA,KAAK,IACDH,EAAMG,EAAM,GAAKH,EAAIsB,cAAcnB,EAAM,IAAMH,EAAIsB,eACvD,MACA,KAAK,IACDtB,EAAMG,EAAM,GAAKoB,WAAWvB,GAAKwB,QAAQrB,EAAM,IAAMoB,WAAWvB,EACpE,MACA,KAAK,IACDA,EAAMG,EAAM,GAAKoB,WAAWvB,GAAKyB,YAAYtB,EAAM,IAAMoB,WAAWvB,EACxE,MACA,KAAK,IACDA,EAAMA,EAAIrB,SAAS,EACvB,MACA,KAAK,IACDqB,GAAQA,EAAMiB,OAAOjB,KAASG,EAAM,GAAKH,EAAI0B,UAAU,EAAGvB,EAAM,IAAMH,CAC1E,MACA,KAAK,IACDA,KAAc,CAClB,MACA,KAAK,IACDA,EAAMA,EAAIrB,SAAS,GACvB,MACA,KAAK,IACDqB,EAAMA,EAAIrB,SAAS,IAAIgD,cAG3BxC,EAAGG,KAAKwB,KAAKX,EAAM,IACnBQ,EAAOA,EAAOF,QAAUT,IAGpBb,EAAGE,OAAOyB,KAAKX,EAAM,KAASS,IAAeT,EAAM,GAKnDN,EAAO,IAJPA,EAAOe,EAAc,IAAM,IAC3BZ,EAAMA,EAAIrB,WAAWiD,QAAQzC,EAAGU,KAAM,KAK1CQ,EAAgBF,EAAM,GAAkB,MAAbA,EAAM,GAAa,IAAMA,EAAM,GAAG0B,OAAO,GAAK,IACzEvB,EAAaH,EAAM,IAAMN,EAAOG,GAAKS,OACrCL,EAAMD,EAAM,IAAMG,EAAa,EAAIxB,EAAWuB,EAAeC,GAAoB,GACjFK,EAAOA,EAAOF,QAAUN,EAAM,GAAKN,EAAOG,EAAMI,EAAyB,MAAlBC,EAAwBR,EAAOO,EAAMJ,EAAMI,EAAMP,EAAOG,GAI3H,MAAOW,GAAOzB,KAAK,KAGvBnB,EAAQG,SAERH,EAAQK,MAAQ,SAAS0D,GAErB,IADA,GAAIC,GAAOD,EAAK3B,KAAYL,KAAiBkC,EAAY,EAClDD,GAAM,CACT,GAAqC,QAAhC5B,EAAQhB,EAAGK,KAAKyC,KAAKF,IACtBjC,EAAWA,EAAWW,QAAUN,EAAM,OAErC,IAAuC,QAAlCA,EAAQhB,EAAGM,OAAOwC,KAAKF,IAC7BjC,EAAWA,EAAWW,QAAU,QAE/B,CAAA,GAA4C,QAAvCN,EAAQhB,EAAGO,YAAYuC,KAAKF,IAgClC,KAAM,IAAIG,aAAY,mCA/BtB,IAAI/B,EAAM,GAAI,CACV6B,GAAa,CACb,IAAIG,MAAiBC,EAAoBjC,EAAM,GAAIkC,IACnD,IAAuD,QAAlDA,EAAclD,EAAGnB,IAAIiE,KAAKG,IAe3B,KAAM,IAAIF,aAAY,+CAbtB,KADAC,EAAWA,EAAW1B,QAAU4B,EAAY,GACwC,MAA5ED,EAAoBA,EAAkBV,UAAUW,EAAY,GAAG5B,UACnE,GAA8D,QAAzD4B,EAAclD,EAAGQ,WAAWsC,KAAKG,IAClCD,EAAWA,EAAW1B,QAAU4B,EAAY,OAE3C,CAAA,GAAgE,QAA3DA,EAAclD,EAAGS,aAAaqC,KAAKG,IAIzC,KAAM,IAAIF,aAAY,+CAHtBC,GAAWA,EAAW1B,QAAU4B,EAAY,GAUxDlC,EAAM,GAAKgC,MAGXH,IAAa,CAEjB,IAAkB,IAAdA,EACA,KAAM,IAAInB,OAAM,4EAEpBf,GAAWA,EAAWW,QAAUN,EAKpC4B,EAAOA,EAAKL,UAAUvB,EAAM,GAAGM,QAEnC,MAAOX,GAGX,IAAIwC,GAAW,SAASR,EAAK/B,EAAMwC,GAG/B,MAFAA,IAASxC,OAAYnB,MAAM,GAC3B2D,EAAMC,OAAO,EAAG,EAAGV,GACZ/D,EAAQ0E,MAAM,KAAMF,GAiBR,oBAAZG,UACPA,QAAQ3E,QAAUA,EAClB2E,QAAQJ,SAAWA,IAGnBxE,EAAOC,QAAUA,EACjBD,EAAOwE,SAAWA,EAEI,kBAAXK,SAAyBA,OAAOC,KACvCD,OAAO,WACH,OACI5E,QAASA,EACTuE,SAAUA,OAKT,mBAAXxE,QAAyB+E,KAAO/E"} \ No newline at end of file diff --git a/node_modules/sprintf-js/gruntfile.js b/node_modules/sprintf-js/gruntfile.js new file mode 100644 index 00000000..246e1c3b --- /dev/null +++ b/node_modules/sprintf-js/gruntfile.js @@ -0,0 +1,36 @@ +module.exports = function(grunt) { + grunt.initConfig({ + pkg: grunt.file.readJSON("package.json"), + + uglify: { + options: { + banner: "/*! <%= pkg.name %> | <%= pkg.author %> | <%= pkg.license %> */\n", + sourceMap: true + }, + build: { + files: [ + { + src: "src/sprintf.js", + dest: "dist/sprintf.min.js" + }, + { + src: "src/angular-sprintf.js", + dest: "dist/angular-sprintf.min.js" + } + ] + } + }, + + watch: { + js: { + files: "src/*.js", + tasks: ["uglify"] + } + } + }) + + grunt.loadNpmTasks("grunt-contrib-uglify") + grunt.loadNpmTasks("grunt-contrib-watch") + + grunt.registerTask("default", ["uglify", "watch"]) +} diff --git a/node_modules/sprintf-js/package.json b/node_modules/sprintf-js/package.json new file mode 100644 index 00000000..9076b311 --- /dev/null +++ b/node_modules/sprintf-js/package.json @@ -0,0 +1,54 @@ +{ + "_from": "sprintf-js@~1.0.2", + "_id": "sprintf-js@1.0.3", + "_inBundle": false, + "_integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "_location": "/sprintf-js", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "sprintf-js@~1.0.2", + "name": "sprintf-js", + "escapedName": "sprintf-js", + "rawSpec": "~1.0.2", + "saveSpec": null, + "fetchSpec": "~1.0.2" + }, + "_requiredBy": [ + "/argparse" + ], + "_resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "_shasum": "04e6926f662895354f3dd015203633b857297e2c", + "_spec": "sprintf-js@~1.0.2", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/argparse", + "author": { + "name": "Alexandru Marasteanu", + "email": "hello@alexei.ro", + "url": "http://alexei.ro/" + }, + "bugs": { + "url": "https://github.com/alexei/sprintf.js/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "JavaScript sprintf implementation", + "devDependencies": { + "grunt": "*", + "grunt-contrib-uglify": "*", + "grunt-contrib-watch": "*", + "mocha": "*" + }, + "homepage": "https://github.com/alexei/sprintf.js#readme", + "license": "BSD-3-Clause", + "main": "src/sprintf.js", + "name": "sprintf-js", + "repository": { + "type": "git", + "url": "git+https://github.com/alexei/sprintf.js.git" + }, + "scripts": { + "test": "mocha test/test.js" + }, + "version": "1.0.3" +} diff --git a/node_modules/sprintf-js/src/angular-sprintf.js b/node_modules/sprintf-js/src/angular-sprintf.js new file mode 100644 index 00000000..9c69123b --- /dev/null +++ b/node_modules/sprintf-js/src/angular-sprintf.js @@ -0,0 +1,18 @@ +angular. + module("sprintf", []). + filter("sprintf", function() { + return function() { + return sprintf.apply(null, arguments) + } + }). + filter("fmt", ["$filter", function($filter) { + return $filter("sprintf") + }]). + filter("vsprintf", function() { + return function(format, argv) { + return vsprintf(format, argv) + } + }). + filter("vfmt", ["$filter", function($filter) { + return $filter("vsprintf") + }]) diff --git a/node_modules/sprintf-js/src/sprintf.js b/node_modules/sprintf-js/src/sprintf.js new file mode 100644 index 00000000..c0fc7c08 --- /dev/null +++ b/node_modules/sprintf-js/src/sprintf.js @@ -0,0 +1,208 @@ +(function(window) { + var re = { + not_string: /[^s]/, + number: /[diefg]/, + json: /[j]/, + not_json: /[^j]/, + text: /^[^\x25]+/, + modulo: /^\x25{2}/, + placeholder: /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijosuxX])/, + key: /^([a-z_][a-z_\d]*)/i, + key_access: /^\.([a-z_][a-z_\d]*)/i, + index_access: /^\[(\d+)\]/, + sign: /^[\+\-]/ + } + + function sprintf() { + var key = arguments[0], cache = sprintf.cache + if (!(cache[key] && cache.hasOwnProperty(key))) { + cache[key] = sprintf.parse(key) + } + return sprintf.format.call(null, cache[key], arguments) + } + + sprintf.format = function(parse_tree, argv) { + var cursor = 1, tree_length = parse_tree.length, node_type = "", arg, output = [], i, k, match, pad, pad_character, pad_length, is_positive = true, sign = "" + for (i = 0; i < tree_length; i++) { + node_type = get_type(parse_tree[i]) + if (node_type === "string") { + output[output.length] = parse_tree[i] + } + else if (node_type === "array") { + match = parse_tree[i] // convenience purposes only + if (match[2]) { // keyword argument + arg = argv[cursor] + for (k = 0; k < match[2].length; k++) { + if (!arg.hasOwnProperty(match[2][k])) { + throw new Error(sprintf("[sprintf] property '%s' does not exist", match[2][k])) + } + arg = arg[match[2][k]] + } + } + else if (match[1]) { // positional argument (explicit) + arg = argv[match[1]] + } + else { // positional argument (implicit) + arg = argv[cursor++] + } + + if (get_type(arg) == "function") { + arg = arg() + } + + if (re.not_string.test(match[8]) && re.not_json.test(match[8]) && (get_type(arg) != "number" && isNaN(arg))) { + throw new TypeError(sprintf("[sprintf] expecting number but found %s", get_type(arg))) + } + + if (re.number.test(match[8])) { + is_positive = arg >= 0 + } + + switch (match[8]) { + case "b": + arg = arg.toString(2) + break + case "c": + arg = String.fromCharCode(arg) + break + case "d": + case "i": + arg = parseInt(arg, 10) + break + case "j": + arg = JSON.stringify(arg, null, match[6] ? parseInt(match[6]) : 0) + break + case "e": + arg = match[7] ? arg.toExponential(match[7]) : arg.toExponential() + break + case "f": + arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg) + break + case "g": + arg = match[7] ? parseFloat(arg).toPrecision(match[7]) : parseFloat(arg) + break + case "o": + arg = arg.toString(8) + break + case "s": + arg = ((arg = String(arg)) && match[7] ? arg.substring(0, match[7]) : arg) + break + case "u": + arg = arg >>> 0 + break + case "x": + arg = arg.toString(16) + break + case "X": + arg = arg.toString(16).toUpperCase() + break + } + if (re.json.test(match[8])) { + output[output.length] = arg + } + else { + if (re.number.test(match[8]) && (!is_positive || match[3])) { + sign = is_positive ? "+" : "-" + arg = arg.toString().replace(re.sign, "") + } + else { + sign = "" + } + pad_character = match[4] ? match[4] === "0" ? "0" : match[4].charAt(1) : " " + pad_length = match[6] - (sign + arg).length + pad = match[6] ? (pad_length > 0 ? str_repeat(pad_character, pad_length) : "") : "" + output[output.length] = match[5] ? sign + arg + pad : (pad_character === "0" ? sign + pad + arg : pad + sign + arg) + } + } + } + return output.join("") + } + + sprintf.cache = {} + + sprintf.parse = function(fmt) { + var _fmt = fmt, match = [], parse_tree = [], arg_names = 0 + while (_fmt) { + if ((match = re.text.exec(_fmt)) !== null) { + parse_tree[parse_tree.length] = match[0] + } + else if ((match = re.modulo.exec(_fmt)) !== null) { + parse_tree[parse_tree.length] = "%" + } + else if ((match = re.placeholder.exec(_fmt)) !== null) { + if (match[2]) { + arg_names |= 1 + var field_list = [], replacement_field = match[2], field_match = [] + if ((field_match = re.key.exec(replacement_field)) !== null) { + field_list[field_list.length] = field_match[1] + while ((replacement_field = replacement_field.substring(field_match[0].length)) !== "") { + if ((field_match = re.key_access.exec(replacement_field)) !== null) { + field_list[field_list.length] = field_match[1] + } + else if ((field_match = re.index_access.exec(replacement_field)) !== null) { + field_list[field_list.length] = field_match[1] + } + else { + throw new SyntaxError("[sprintf] failed to parse named argument key") + } + } + } + else { + throw new SyntaxError("[sprintf] failed to parse named argument key") + } + match[2] = field_list + } + else { + arg_names |= 2 + } + if (arg_names === 3) { + throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported") + } + parse_tree[parse_tree.length] = match + } + else { + throw new SyntaxError("[sprintf] unexpected placeholder") + } + _fmt = _fmt.substring(match[0].length) + } + return parse_tree + } + + var vsprintf = function(fmt, argv, _argv) { + _argv = (argv || []).slice(0) + _argv.splice(0, 0, fmt) + return sprintf.apply(null, _argv) + } + + /** + * helpers + */ + function get_type(variable) { + return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase() + } + + function str_repeat(input, multiplier) { + return Array(multiplier + 1).join(input) + } + + /** + * export to either browser or node.js + */ + if (typeof exports !== "undefined") { + exports.sprintf = sprintf + exports.vsprintf = vsprintf + } + else { + window.sprintf = sprintf + window.vsprintf = vsprintf + + if (typeof define === "function" && define.amd) { + define(function() { + return { + sprintf: sprintf, + vsprintf: vsprintf + } + }) + } + } +})(typeof window === "undefined" ? this : window); diff --git a/node_modules/sprintf-js/test/test.js b/node_modules/sprintf-js/test/test.js new file mode 100644 index 00000000..6f57b253 --- /dev/null +++ b/node_modules/sprintf-js/test/test.js @@ -0,0 +1,82 @@ +var assert = require("assert"), + sprintfjs = require("../src/sprintf.js"), + sprintf = sprintfjs.sprintf, + vsprintf = sprintfjs.vsprintf + +describe("sprintfjs", function() { + var pi = 3.141592653589793 + + it("should return formated strings for simple placeholders", function() { + assert.equal("%", sprintf("%%")) + assert.equal("10", sprintf("%b", 2)) + assert.equal("A", sprintf("%c", 65)) + assert.equal("2", sprintf("%d", 2)) + assert.equal("2", sprintf("%i", 2)) + assert.equal("2", sprintf("%d", "2")) + assert.equal("2", sprintf("%i", "2")) + assert.equal('{"foo":"bar"}', sprintf("%j", {foo: "bar"})) + assert.equal('["foo","bar"]', sprintf("%j", ["foo", "bar"])) + assert.equal("2e+0", sprintf("%e", 2)) + assert.equal("2", sprintf("%u", 2)) + assert.equal("4294967294", sprintf("%u", -2)) + assert.equal("2.2", sprintf("%f", 2.2)) + assert.equal("3.141592653589793", sprintf("%g", pi)) + assert.equal("10", sprintf("%o", 8)) + assert.equal("%s", sprintf("%s", "%s")) + assert.equal("ff", sprintf("%x", 255)) + assert.equal("FF", sprintf("%X", 255)) + assert.equal("Polly wants a cracker", sprintf("%2$s %3$s a %1$s", "cracker", "Polly", "wants")) + assert.equal("Hello world!", sprintf("Hello %(who)s!", {"who": "world"})) + }) + + it("should return formated strings for complex placeholders", function() { + // sign + assert.equal("2", sprintf("%d", 2)) + assert.equal("-2", sprintf("%d", -2)) + assert.equal("+2", sprintf("%+d", 2)) + assert.equal("-2", sprintf("%+d", -2)) + assert.equal("2", sprintf("%i", 2)) + assert.equal("-2", sprintf("%i", -2)) + assert.equal("+2", sprintf("%+i", 2)) + assert.equal("-2", sprintf("%+i", -2)) + assert.equal("2.2", sprintf("%f", 2.2)) + assert.equal("-2.2", sprintf("%f", -2.2)) + assert.equal("+2.2", sprintf("%+f", 2.2)) + assert.equal("-2.2", sprintf("%+f", -2.2)) + assert.equal("-2.3", sprintf("%+.1f", -2.34)) + assert.equal("-0.0", sprintf("%+.1f", -0.01)) + assert.equal("3.14159", sprintf("%.6g", pi)) + assert.equal("3.14", sprintf("%.3g", pi)) + assert.equal("3", sprintf("%.1g", pi)) + assert.equal("-000000123", sprintf("%+010d", -123)) + assert.equal("______-123", sprintf("%+'_10d", -123)) + assert.equal("-234.34 123.2", sprintf("%f %f", -234.34, 123.2)) + + // padding + assert.equal("-0002", sprintf("%05d", -2)) + assert.equal("-0002", sprintf("%05i", -2)) + assert.equal(" <", sprintf("%5s", "<")) + assert.equal("0000<", sprintf("%05s", "<")) + assert.equal("____<", sprintf("%'_5s", "<")) + assert.equal("> ", sprintf("%-5s", ">")) + assert.equal(">0000", sprintf("%0-5s", ">")) + assert.equal(">____", sprintf("%'_-5s", ">")) + assert.equal("xxxxxx", sprintf("%5s", "xxxxxx")) + assert.equal("1234", sprintf("%02u", 1234)) + assert.equal(" -10.235", sprintf("%8.3f", -10.23456)) + assert.equal("-12.34 xxx", sprintf("%f %s", -12.34, "xxx")) + assert.equal('{\n "foo": "bar"\n}', sprintf("%2j", {foo: "bar"})) + assert.equal('[\n "foo",\n "bar"\n]', sprintf("%2j", ["foo", "bar"])) + + // precision + assert.equal("2.3", sprintf("%.1f", 2.345)) + assert.equal("xxxxx", sprintf("%5.5s", "xxxxxx")) + assert.equal(" x", sprintf("%5.1s", "xxxxxx")) + + }) + + it("should return formated strings for callbacks", function() { + assert.equal("foobar", sprintf("%s", function() { return "foobar" })) + assert.equal(Date.now(), sprintf("%s", Date.now)) // should pass... + }) +}) diff --git a/node_modules/stable/README.md b/node_modules/stable/README.md new file mode 100644 index 00000000..deffe99b --- /dev/null +++ b/node_modules/stable/README.md @@ -0,0 +1,85 @@ +## Stable + +A stable array sort, because `Array#sort()` is not guaranteed stable. + +MIT licensed. + +[![Node.js CI](https://secure.travis-ci.org/Two-Screen/stable.png)](http://travis-ci.org/Two-Screen/stable) + +[![Browser CI](http://ci.testling.com/Two-Screen/stable.png)](http://ci.testling.com/Two-Screen/stable) + +#### From npm + +Install with: + +```sh +npm install stable +``` + +Then use it in Node.js or some other CommonJS environment as: + +```js +const stable = require('stable') +``` + +#### From the browser + +Include [`stable.js`] or the minified version [`stable.min.js`] +in your page, then call `stable()`. + + [`stable.js`]: https://raw.github.com/Two-Screen/stable/master/stable.js + [`stable.min.js`]: https://raw.github.com/Two-Screen/stable/master/stable.min.js + +#### Usage + +The default sort is, as with `Array#sort`, lexicographical: + +```js +stable(['foo', 'bar', 'baz']) // => ['bar', 'baz', 'foo'] +stable([10, 1, 5]) // => [1, 10, 5] +``` + +Unlike `Array#sort`, the default sort is **NOT** in-place. To do an in-place +sort, use `stable.inplace`, which otherwise works the same: + +```js +const arr = [10, 1, 5] +stable(arr) === arr // => false +stable.inplace(arr) === arr // => true +``` + +A comparator function can be specified: + +```js +// Regular sort() compatible comparator, that returns a number. +// This demonstrates the default behavior. +const lexCmp = (a, b) => String(a).localeCompare(b) +stable(['foo', 'bar', 'baz'], lexCmp) // => ['bar', 'baz', 'foo'] + +// Boolean comparator. Sorts `b` before `a` if true. +// This demonstrates a simple way to sort numerically. +const greaterThan = (a, b) => a > b +stable([10, 1, 5], greaterThan) // => [1, 5, 10] +``` + +#### License + +Copyright (C) 2018 Angry Bytes and contributors. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/stable/index.d.ts b/node_modules/stable/index.d.ts new file mode 100644 index 00000000..08cb3350 --- /dev/null +++ b/node_modules/stable/index.d.ts @@ -0,0 +1,9 @@ +export as namespace stable; +export = stable; + +type Comparator = ((a : T, b : T)=>boolean) | ((a: T, b : T)=>number); + +declare function stable(array : T[], comparator? : Comparator) : T[]; +declare namespace stable { + export function inplace(array: T[], comparator? : Comparator) : T[]; +} diff --git a/node_modules/stable/package.json b/node_modules/stable/package.json new file mode 100644 index 00000000..e896bd6a --- /dev/null +++ b/node_modules/stable/package.json @@ -0,0 +1,101 @@ +{ + "_from": "stable@^0.1.6", + "_id": "stable@0.1.8", + "_inBundle": false, + "_integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "_location": "/stable", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "stable@^0.1.6", + "name": "stable", + "escapedName": "stable", + "rawSpec": "^0.1.6", + "saveSpec": null, + "fetchSpec": "^0.1.6" + }, + "_requiredBy": [ + "/accept-language" + ], + "_resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "_shasum": "836eb3c8382fe2936feaf544631017ce7d47a3cf", + "_spec": "stable@^0.1.6", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/accept-language", + "author": { + "name": "Angry Bytes", + "email": "info@angrybytes.com" + }, + "bugs": { + "url": "https://github.com/Two-Screen/stable/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Domenic Denicola", + "email": "domenic@domenicdenicola.com" + }, + { + "name": "Mattias Buelens", + "email": "mattias@buelens.com" + }, + { + "name": "Stéphan Kochen", + "email": "stephan@angrybytes.com" + }, + { + "name": "Yaffle" + } + ], + "deprecated": false, + "description": "A stable array sort for JavaScript", + "devDependencies": { + "rollup": "^0.57.1", + "standard": "^11.0.1", + "tape": "^4.6.3", + "uglify-js": "^3.3.21" + }, + "files": [ + "stable.js", + "stable.min.js", + "index.d.ts" + ], + "homepage": "https://github.com/Two-Screen/stable#readme", + "keywords": [ + "stable", + "array", + "sort" + ], + "license": "MIT", + "main": "./stable.js", + "name": "stable", + "repository": { + "type": "git", + "url": "git+https://github.com/Two-Screen/stable.git" + }, + "scripts": { + "build": "rollup -c", + "minify": "uglifyjs --comments \"/^!/\" -c -m -o ./stable.min.js ./stable.js", + "prepare": "npm run build && npm run minify", + "test": "standard src/ && node ./src/test.js" + }, + "testling": { + "files": "./src/test.js", + "browsers": [ + "ie6", + "ie7", + "ie8", + "ie9", + "ie10", + "firefox/25", + "chrome/31", + "safari/6.0", + "opera/12.0", + "opera/17.0", + "iphone/6.0", + "android-browser/4.2" + ] + }, + "types": "./index.d.ts", + "version": "0.1.8" +} diff --git a/node_modules/stable/stable.js b/node_modules/stable/stable.js new file mode 100644 index 00000000..c9bf9e3e --- /dev/null +++ b/node_modules/stable/stable.js @@ -0,0 +1,109 @@ +//! stable.js 0.1.8, https://github.com/Two-Screen/stable +//! © 2018 Angry Bytes and contributors. MIT licensed. + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.stable = factory()); +}(this, (function () { 'use strict'; + + // A stable array sort, because `Array#sort()` is not guaranteed stable. + // This is an implementation of merge sort, without recursion. + + var stable = function (arr, comp) { + return exec(arr.slice(), comp) + }; + + stable.inplace = function (arr, comp) { + var result = exec(arr, comp); + + // This simply copies back if the result isn't in the original array, + // which happens on an odd number of passes. + if (result !== arr) { + pass(result, null, arr.length, arr); + } + + return arr + }; + + // Execute the sort using the input array and a second buffer as work space. + // Returns one of those two, containing the final result. + function exec(arr, comp) { + if (typeof(comp) !== 'function') { + comp = function (a, b) { + return String(a).localeCompare(b) + }; + } + + // Short-circuit when there's nothing to sort. + var len = arr.length; + if (len <= 1) { + return arr + } + + // Rather than dividing input, simply iterate chunks of 1, 2, 4, 8, etc. + // Chunks are the size of the left or right hand in merge sort. + // Stop when the left-hand covers all of the array. + var buffer = new Array(len); + for (var chk = 1; chk < len; chk *= 2) { + pass(arr, comp, chk, buffer); + + var tmp = arr; + arr = buffer; + buffer = tmp; + } + + return arr + } + + // Run a single pass with the given chunk size. + var pass = function (arr, comp, chk, result) { + var len = arr.length; + var i = 0; + // Step size / double chunk size. + var dbl = chk * 2; + // Bounds of the left and right chunks. + var l, r, e; + // Iterators over the left and right chunk. + var li, ri; + + // Iterate over pairs of chunks. + for (l = 0; l < len; l += dbl) { + r = l + chk; + e = r + chk; + if (r > len) r = len; + if (e > len) e = len; + + // Iterate both chunks in parallel. + li = l; + ri = r; + while (true) { + // Compare the chunks. + if (li < r && ri < e) { + // This works for a regular `sort()` compatible comparator, + // but also for a simple comparator like: `a > b` + if (comp(arr[li], arr[ri]) <= 0) { + result[i++] = arr[li++]; + } + else { + result[i++] = arr[ri++]; + } + } + // Nothing to compare, just flush what's left. + else if (li < r) { + result[i++] = arr[li++]; + } + else if (ri < e) { + result[i++] = arr[ri++]; + } + // Both iterators are at the chunk ends. + else { + break + } + } + } + }; + + return stable; + +}))); diff --git a/node_modules/stable/stable.min.js b/node_modules/stable/stable.min.js new file mode 100644 index 00000000..43ab5c41 --- /dev/null +++ b/node_modules/stable/stable.min.js @@ -0,0 +1,3 @@ +//! stable.js 0.1.8, https://github.com/Two-Screen/stable +//! © 2018 Angry Bytes and contributors. MIT licensed. +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):e.stable=n()}(this,function(){"use strict";var e=function(e,n){return t(e.slice(),n)};function t(e,n){"function"!=typeof n&&(n=function(e,n){return String(e).localeCompare(n)});var r=e.length;if(r<=1)return e;for(var t=new Array(r),f=1;f (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/strip-eof/package.json b/node_modules/strip-eof/package.json new file mode 100644 index 00000000..906f0758 --- /dev/null +++ b/node_modules/strip-eof/package.json @@ -0,0 +1,71 @@ +{ + "_from": "strip-eof@^1.0.0", + "_id": "strip-eof@1.0.0", + "_inBundle": false, + "_integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "_location": "/strip-eof", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "strip-eof@^1.0.0", + "name": "strip-eof", + "escapedName": "strip-eof", + "rawSpec": "^1.0.0", + "saveSpec": null, + "fetchSpec": "^1.0.0" + }, + "_requiredBy": [ + "/execa" + ], + "_resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "_shasum": "bb43ff5598a6eb05d89b59fcd129c983313606bf", + "_spec": "strip-eof@^1.0.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/execa", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/strip-eof/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Strip the End-Of-File (EOF) character from a string/buffer", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/strip-eof#readme", + "keywords": [ + "strip", + "trim", + "remove", + "delete", + "eof", + "end", + "file", + "newline", + "linebreak", + "character", + "string", + "buffer" + ], + "license": "MIT", + "name": "strip-eof", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/strip-eof.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "1.0.0" +} diff --git a/node_modules/strip-eof/readme.md b/node_modules/strip-eof/readme.md new file mode 100644 index 00000000..45ffe043 --- /dev/null +++ b/node_modules/strip-eof/readme.md @@ -0,0 +1,28 @@ +# strip-eof [![Build Status](https://travis-ci.org/sindresorhus/strip-eof.svg?branch=master)](https://travis-ci.org/sindresorhus/strip-eof) + +> Strip the [End-Of-File](https://en.wikipedia.org/wiki/End-of-file) (EOF) character from a string/buffer + + +## Install + +``` +$ npm install --save strip-eof +``` + + +## Usage + +```js +const stripEof = require('strip-eof'); + +stripEof('foo\nbar\n\n'); +//=> 'foo\nbar\n' + +stripEof(new Buffer('foo\nbar\n\n')).toString(); +//=> 'foo\nbar\n' +``` + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/strong-globalize/CHANGELOG.md b/node_modules/strong-globalize/CHANGELOG.md new file mode 100644 index 00000000..055c73d3 --- /dev/null +++ b/node_modules/strong-globalize/CHANGELOG.md @@ -0,0 +1,39 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [4.1.3](https://github.com/strongloop/strong-globalize/compare/strong-globalize@4.1.2...strong-globalize@4.1.3) (2019-03-22) + +**Note:** Version bump only for package strong-globalize + + + + + + +## [4.1.1](https://github.com/strongloop/strong-globalize/compare/v4.1.0...v4.1.1) (2018-06-07) + + + + +**Note:** Version bump only for package strong-globalize + + +# [4.1.0](https://github.com/strongloop/strong-globalize/compare/v4.0.2...v4.1.0) (2018-05-30) + + +### Features + +* add support for Node.js 6.x ([2880c38](https://github.com/strongloop/strong-globalize/commit/2880c38)) + + + + + +# [4.0.0](https://github.com/strongloop/strong-globalize/compare/v3.3.0...v4.0.0) (2018-05-24) + + + + +**Note:** Version bump only for package strong-globalize diff --git a/node_modules/strong-globalize/LICENSE b/node_modules/strong-globalize/LICENSE new file mode 100644 index 00000000..9b03a3cc --- /dev/null +++ b/node_modules/strong-globalize/LICENSE @@ -0,0 +1,210 @@ +Copyright (c) IBM Corp. 2015,2018. All Rights Reserved. +Node module: strong-globalize +This project is licensed under the Artistic License 2.0, full text below. + +-------- + +The Artistic License 2.0 + +Copyright (c) 2000-2006, The Perl Foundation. + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. + +Preamble + +This license establishes the terms under which a given free software +Package may be copied, modified, distributed, and/or redistributed. +The intent is that the Copyright Holder maintains some artistic +control over the development of that Package while still keeping the +Package available as open source and free software. + +You are always permitted to make arrangements wholly outside of this +license directly with the Copyright Holder of a given Package. If the +terms of this license do not permit the full use that you propose to +make of the Package, you should contact the Copyright Holder and seek +a different licensing arrangement. + +Definitions + + "Copyright Holder" means the individual(s) or organization(s) + named in the copyright notice for the entire Package. + + "Contributor" means any party that has contributed code or other + material to the Package, in accordance with the Copyright Holder's + procedures. + + "You" and "your" means any person who would like to copy, + distribute, or modify the Package. + + "Package" means the collection of files distributed by the + Copyright Holder, and derivatives of that collection and/or of + those files. A given Package may consist of either the Standard + Version, or a Modified Version. + + "Distribute" means providing a copy of the Package or making it + accessible to anyone else, or in the case of a company or + organization, to others outside of your company or organization. + + "Distributor Fee" means any fee that you charge for Distributing + this Package or providing support for this Package to another + party. It does not mean licensing fees. + + "Standard Version" refers to the Package if it has not been + modified, or has been modified only in ways explicitly requested + by the Copyright Holder. + + "Modified Version" means the Package, if it has been changed, and + such changes were not explicitly requested by the Copyright + Holder. + + "Original License" means this Artistic License as Distributed with + the Standard Version of the Package, in its current version or as + it may be modified by The Perl Foundation in the future. + + "Source" form means the source code, documentation source, and + configuration files for the Package. + + "Compiled" form means the compiled bytecode, object code, binary, + or any other form resulting from mechanical transformation or + translation of the Source form. + + +Permission for Use and Modification Without Distribution + +(1) You are permitted to use the Standard Version and create and use +Modified Versions for any purpose without restriction, provided that +you do not Distribute the Modified Version. + + +Permissions for Redistribution of the Standard Version + +(2) You may Distribute verbatim copies of the Source form of the +Standard Version of this Package in any medium without restriction, +either gratis or for a Distributor Fee, provided that you duplicate +all of the original copyright notices and associated disclaimers. At +your discretion, such verbatim copies may or may not include a +Compiled form of the Package. + +(3) You may apply any bug fixes, portability changes, and other +modifications made available from the Copyright Holder. The resulting +Package will still be considered the Standard Version, and as such +will be subject to the Original License. + + +Distribution of Modified Versions of the Package as Source + +(4) You may Distribute your Modified Version as Source (either gratis +or for a Distributor Fee, and with or without a Compiled form of the +Modified Version) provided that you clearly document how it differs +from the Standard Version, including, but not limited to, documenting +any non-standard features, executables, or modules, and provided that +you do at least ONE of the following: + + (a) make the Modified Version available to the Copyright Holder + of the Standard Version, under the Original License, so that the + Copyright Holder may include your modifications in the Standard + Version. + + (b) ensure that installation of your Modified Version does not + prevent the user installing or running the Standard Version. In + addition, the Modified Version must bear a name that is different + from the name of the Standard Version. + + (c) allow anyone who receives a copy of the Modified Version to + make the Source form of the Modified Version available to others + under + + (i) the Original License or + + (ii) a license that permits the licensee to freely copy, + modify and redistribute the Modified Version using the same + licensing terms that apply to the copy that the licensee + received, and requires that the Source form of the Modified + Version, and of any works derived from it, be made freely + available in that license fees are prohibited but Distributor + Fees are allowed. + + +Distribution of Compiled Forms of the Standard Version +or Modified Versions without the Source + +(5) You may Distribute Compiled forms of the Standard Version without +the Source, provided that you include complete instructions on how to +get the Source of the Standard Version. Such instructions must be +valid at the time of your distribution. If these instructions, at any +time while you are carrying out such distribution, become invalid, you +must provide new instructions on demand or cease further distribution. +If you provide valid instructions or cease distribution within thirty +days after you become aware that the instructions are invalid, then +you do not forfeit any of your rights under this license. + +(6) You may Distribute a Modified Version in Compiled form without +the Source, provided that you comply with Section 4 with respect to +the Source of the Modified Version. + + +Aggregating or Linking the Package + +(7) You may aggregate the Package (either the Standard Version or +Modified Version) with other packages and Distribute the resulting +aggregation provided that you do not charge a licensing fee for the +Package. Distributor Fees are permitted, and licensing fees for other +components in the aggregation are permitted. The terms of this license +apply to the use and Distribution of the Standard or Modified Versions +as included in the aggregation. + +(8) You are permitted to link Modified and Standard Versions with +other works, to embed the Package in a larger work of your own, or to +build stand-alone binary or bytecode versions of applications that +include the Package, and Distribute the result without restriction, +provided the result does not expose a direct interface to the Package. + + +Items That are Not Considered Part of a Modified Version + +(9) Works (including, but not limited to, modules and scripts) that +merely extend or make use of the Package, do not, by themselves, cause +the Package to be a Modified Version. In addition, such works are not +considered parts of the Package itself, and are not subject to the +terms of this license. + + +General Provisions + +(10) Any use, modification, and distribution of the Standard or +Modified Versions is governed by this Artistic License. By using, +modifying or distributing the Package, you accept this license. Do not +use, modify, or distribute the Package, if you do not accept this +license. + +(11) If your Modified Version has been derived from a Modified +Version made by someone other than you, you are nevertheless required +to ensure that your Modified Version complies with the requirements of +this license. + +(12) This license does not grant you the right to use any trademark, +service mark, tradename, or logo of the Copyright Holder. + +(13) This license includes the non-exclusive, worldwide, +free-of-charge patent license to make, have made, use, offer to sell, +sell, import and otherwise transfer the Package with respect to any +patent claims licensable by the Copyright Holder that are necessarily +infringed by the Package. If you institute patent litigation +(including a cross-claim or counterclaim) against any party alleging +that the Package constitutes direct or contributory patent +infringement, then this Artistic License to you shall terminate on the +date that such litigation is filed. + +(14) Disclaimer of Warranty: +THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS +IS' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES. THE IMPLIED +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR +NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY YOUR LOCAL +LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT HOLDER OR CONTRIBUTOR WILL +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +-------- diff --git a/node_modules/strong-globalize/README.md b/node_modules/strong-globalize/README.md new file mode 100644 index 00000000..65153033 --- /dev/null +++ b/node_modules/strong-globalize/README.md @@ -0,0 +1,827 @@ +# strong-globalize + +This module is the runtime library for globalization. + +## Table of contents + +* [Architecture](#architecture) +* [Autonomous Message Loading](#autonomous-message-loading) +* [Language Config Customization](#language-config-customization) +* [Runtime Language Switching](#runtime-language-switching) +* [Pseudo Localization Support](#pseudo-localization-support) +* [Deep String Resource Extraction](#deep-string-resource-extraction) +* [HTML Template Globalization](#html-template-globalization) +* [JSON YAML File Globalization](#json-yaml-file-globalization) +* [Persistent Logging](#persistent-logging) +* [Demo](#demo) +* [Sample Code](#sample-code) +* [Other Resources](#other-resources) +* [CLI - extract, lint, and translate](#cli---extract-lint-and-translate) +* [API - Set system defaults](#api---set-system-defaults) + * [SG.SetDefaultLanguage](#sgsetdefaultlanguagelang) + * [SG.SetRootDir](#sgsetrootdirrootpath) + * [SG.SetHtmlRegex](#sgsethtmlregexregex-regexhead-regextail) + * [SG.SetPersistentLogging](#sgsetpersistentlogginglogcallback-disableconsole) + * [g.setLanguage](#gsetlanguagelang) + * [g.getLanguage](#ggetlanguage) +* [API - Formatters](#api---formatters) + * [g.formatMessage](#gformatmessagepath-variables) + * [g.t](#gtpath-variables) + * [g.m](#gmpath-variables) + * [g.formatCurrency](#gformatcurrencyvalue-currencysymbol-options) + * [g.c](#gcvalue-currencysymbol-options) + * [g.formatDate](#gformatdatevalue-options) + * [g.d](#gdvalue-options) + * [g.formatNumber](#gformatnumbervalue-options) + * [g.n](#gnvalue-options) +* [API - Wrappers](#api---wrappers) + * [g.Error](#gerrorpath-capital-error) + * [g.format](#gformatpath-) + * [g.f](#gfpath-) + * [g.ewrite](#gewritepath-) + * [g.owrite](#gowritepath-) + * [g.write](#gwritepath-) +* [API - RFC 5424 Syslog Message Severities](#wrappers-for-rfc-5424-syslog-message-severities) + * [g.emergency](#gemergencypath-) + * [g.alert](#galertpath-) + * [g.critical](#gcriticalpath-) + * [g.error](#gerrorpath-small-error) + * [g.warning](#gwarningpath-) + * [g.notice](#gnoticepath-) + * [g.informational](#ginformationalpath-) + * [g.debug](#gdebugpath-) +* [API - Node.js Console](#wrappers-for-nodejs-console) + * [g.warn](#ghelppath-) + * [g.info](#gdebugpath-) + * [g.log](#gdatapath-) +* [API - Misc Logging Levels](#wrappers-for-misc-logging-levels) + * [g.help](#ghelppath-) + * [g.debug](#gdebugpath-) + * [g.data](#gdatapath-) + * [g.prompt](#gpromptpath-) + * [g.verbose](#gverbosepath-) + * [g.input](#ginputpath-) + * [g.silly](#gsillypath-) +* [Usage Examples](#usage-examples) + * [use g.f for util.format](#use-gf-for-utilformat) + * [use g.write for process.stdout.write](#use-gwrite-for-processstdoutwrite) + * [place holders](#place-holders) + * [double curly braces not to translate](#double-curly-braces-not-to-translate) + * [help txt files](#help-txt-files) + * [help txt files and msg keys](#help-txt-files-and-msg-keys) + * [manually add message strings](#manually-add-message-strings) + +## Architecture + +`strong-globalize` is built on top of two foundation layers: [Unicode CLDR](http://cldr.unicode.org/index/cldr-spec/json) and [jquery/globalize](https://github.com/jquery/globalize). The Unicode CLDR provides key building blocks for software to support the world's languages, with the largest and most extensive standard repository of locale data available. jquery/globalize is a JavaScript library for internationalization and localization that leverages the Unicode CLDR JSON data. The library works both for the browser and as a Node.js module. + +`strong-globalize` is a JavaScript library for internationalization and localization (globalization in one word) of a Node.js package. `strong-globalize` provides these features: +- [shorthands and wrappers](#api---formatters) for the format functions supported by Node.js console, jquery/globalize, and util.format, +- [automatic extraction](#cli---extract-lint-and-translate) of the strings from JS code and [HTML templates](#globalize-html-templates) and auto-creation of resource JSON, +- [machine translation](#cli---extract-lint-and-translate) of the resource JSON using [IBM Globalization Pipeline on Bluemix](#liblocal-credentialsjson), +- in [Node.js runtime](#api---set-system-defaults), loads not only the CLDR data sets but the localized string resources of your module as well as all the statically and dynamically dependent modules. +- [function hook for logging](#persistent-logging) localized user messages so that the client can log what is shown to the end user along with the original English message. + +As shown in the [Demo section](#demo), the code written with `strong-globalize` is simpler, better structured, and easier to read than the original code written as an English-only product; and more importantly, you get all the features at no extra effort. + +With `strong-globalize`, there will be no more 'English product first and worry about localization later'; there will be only one globalized codebase from day one. If you choose, you can still ship it with a few language resources (or English only) initially and incrementally add, remove, or update the resources and ship anytime as you go. + +- node.js versions: 8, 10 +- cldr version: 32.0.1 +- out-of-box languages - 31: de, en, es, fr, it, ja, ko, pt, ru, zh-Hans, zh-Hant', + ar', 'bn', 'cs', 'el', 'fi', 'hi', 'id', 'lt', 'nb', 'nl', 'pl', 'ro', 'sl', 'sv', + 'ta', 'te', 'th', 'tr', 'uk', 'vi' + + +You can customize (add/remove) any languages supported by the Unicode CLDR in your `strong-globalize` installation. + +### About test + +The line test coverage with and without core part of translation tests are currently `90%` and `80%` respectively. + +With the out-of-box setting, `npm test` runs all tests but the core translation tests because it requires connection to the machine translation service. To enable the machine translation, please set the environment variables described in [this section](#liblocal-credentialsjson). + +With custom setting such as customized language configuration, some tests may fail. You can edit target messages in the failing test modules to suit your custom setting. To do so, set DEBUG global variable of test/slt-test-helper.js and run the test, identify the actual error messages, then copy and paste the actual error messages to the failing test modules. + +## Autonomous message loading + +All packages are created equal. `Autonomous Message Loading` is the core concept of `strong-globalize` designed for globalization of modular and highly distributed Nodejs applications. Two key terminologies are `root directory` and `master root directory`: + +`root directory` or simply `rootDir`: the package's current working directory where `intl` directory resides. + +`master root directory`: the root directory of the package that called `SG.SetRootDir` first. Any package in the application can be the `master root directory`. It's determined solely by the loading order and once the master is chosen, it does not change in the application's life. Usually, the `master root directory` is the `root directory` of the package at the root of the application's dependency tree. `slt-globalize -d` must run under the `master root directory` so that all the string resources in the application are extracted and stored under the `master root directory's intl/en`. + +Once all the string resource files are [deep-extracted](#deep-string-resource-extraction) and translated at the top level package, the original string resources in the dependencies should not be loaded. To disable loading the string resources in the dependencies, set `autonomousMsgLoading` to `none` in the `SetRootDir` call of the top level package. Since 'none' is the default, simply `SG.SetRootDir(rootDir)` does it. + +In development phase, with regular extraction mode, `{autonomousMsgLoading: 'all'}` must be set so that string resource included in each dependent package will be used. + +Third option is to set specific package names of which the string resources get loaded. One use case of the third option is that you have several dependent packages which you know are properly translated and the translation can be used as-is. For all the other packages, message strings will be deep-extracted and translated. + +```js +const SG = require('strong-globalize'); +SG.SetRootDir(__dirname, {autonomousMsgLoading: 'none'}); // same as SG.SetRootDir(__dirname); +const g = new SG({language: 'en'}); + +// use formatters and wrappers API + +g.log('Welcome!'); +``` + +For example, the following does not work as intended because the package sub calls `SG.SetRootDir` first: + +```js +// main/index.js -- my root package +const SG = require('strong-globalize'); +const request = require('request'); +const sub = require('sub'); + +SG.SetRootDir(__dirname); +const g = new SG(); + +... +``` +```js +// sub/index.js -- my sub package +const SG = require('strong-globalize'); +const request = require('request'); + +SG.SetRootDir(__dirname); +const g = new SG(); + +... + +``` + +The 'MUST' coding practice is to call `SG.SetRootDir` in the very first line of the main module in each package: + +```js +// main/index.js -- my root package +const SG = require('strong-globalize'); +SG.SetRootDir(__dirname); +const request = require('request'); +const sub = require('sub'); + +const g = new SG(); + +... +``` +```js +// sub/index.js -- my sub package +const SG = require('strong-globalize'); +SG.SetRootDir(__dirname); +const request = require('request'); + +const g = new SG(); + +... + +``` + +More concise coding is as follows: + +```js +// main/index.js -- my root package +const g = require('strong-globalize')(__dirname); +const request = require('request'); +const sub = require('sub'); + +... +``` +```js +// sub/index.js -- my sub package +const g = require('strong-globalize')(); +const request = require('request'); + +... + +``` +## Language config customization + +Out of box, one CLDR file is included in `strong-globalize/cldr` directory. CLDR stands for Common Locale Data Repository. In the installation of `strong-globalize` for your production deployment, you can replace the out-of-box CLDR file entirely, or add extra CLDR data to the `cldr` directory. There are approximately 450 locales (language/culture variations) defined in the Unicode CLDR. Among them, there are 40+ variations of French and 100+ variations of English. + +`strong-globalize` provides a utility tool under util directory. The tool assembles only the languages you need to support in your `strong-globalize` installation. For example, the out-of-box gz file for the 11 languages is 135KB. See README of the utility under util directory. + +In runtime, `strong-globalize` dynamically loads to memory just the CLDR data required for the specific language by `setLanguage()`. First, it examines all the `gz` files under cldr directory in alphabetical order, then searches for the language. If the language is defined in two or more CLDR files, duplicate objects will be overwritten in the examination order. + +### Message string resource + +English string resource files must exist under `intl/en` directory. Translated string resource files are stored on each language sub-directory under `intl` If a message is not found in the translated resource files, the corresponding English message is displayed. + +CLDR data has no dependencies on string resources. For example, you can load 100 language CLDR data and no translated string resources but the English string resource. However, if there is a translated non-English string resource exists for language xx under `intl/xx` the CLDR data for `xx` must be loaded. `xx` is one of the languages defined in the CLDR file(s). + +## Runtime language switching + +There are two primary types of Node.js packages `strong-globalize` is targeting: +- Command line interface utility (short life; static language setting) such as [`slt-globalize` itself](#cli---extract-lint-and-translate), +- Web applications such as LoopBack apps (long life; dynamic language switching to respect browser language set in HTTP `Accept-Language` header. See `negotiator' on npmjs.com). + +### Common part +```js +const SG = require('strong-globalize'); +SG.SetRootDir(__dirname); +const g = new SG(); // use the default +``` +### Static language setting in CLI utility +```js +// the common part comes here. + +// then, use formatters and wrappers API always in the same language +g.log('Welcome!'); +``` +### Dynamic language switching in Web application + +Setting language to `strong-globalize` instance is pretty cheap. CLDR data set and translated messages are preloaded at the initial use. +```js +// the common part comes here. + +// set language first, then, use formatters and wrappers API +// See 'negotiator' on Npmjs.com for 'getAcceptLanguage()' +g.setLanguage(getAcceptLanguage()); // once per session + +g.log('Welcome!'); +``` + +## Pseudo localization support + +`strong-globalize` has a feature similar to traditional `pseudo localization.` + +First, Machine Translation with `slt-globalize -t` can be used like the traditional `pseudo localization.` See [the CLI - extract, lint, and translate section](#cli---extract-lint-and-translate) for details of `slt-globalize -t` command. + +Second, in runtime, set the environment variable `STRONG_GLOBALIZE_PSEUDO_LOC_PREAMBLE` and `strong-globalize` adds the string in front of every message processed by the message formatter. If you already have translated message files (by machine or human) and set the language, the string is added to every message in that language. + +Third, `strong-globalize` reserves the language code `zz` as pseudo-language. `slt-globalize -e` generates `intl/zz/messages.json` and `intl/zz/messages_inverted.json` which show the location of each message extracted from JS files. + +Note that `strong-globalize` does not use `intl/zz/*.json` in runtime. They are reference only. They are useful to detect globalization bugs usually called `hard-coded` strings. For example, intl/en/messages.json shows "Shipping cost is {0}." string is properly globalized and extracted to intl/en/messages.json with the auto-generated message key as "77decb50aa6360f0dc9c8ded9086b94e". intl/zz/messages.json shows the string is located at line#31 of `index.js` as the argument of function call `g.log`. intl/zz/messages_inverted.json shows that at the line#20 of `index.js` there is a string "%s Hello %s" as the first argument of `util.format` which looks like a globalization bug. + +Also note that `slt-globalize -e` extracts the first argument of every function call if it's a literal string or concatenation of literal strings. Literal strings in other arguments of function calls are NOT extracted. + +`intl/en/messages.json`: + +``` +{ + "77decb50aa6360f0dc9c8ded9086b94e": "Shipping cost is {0}.", + "b5d4af08bf61e58d375923977290d67b": "Listening on {0} by {1}." +} +``` +`intl/zz/messages.json`: +``` +{ + "77decb50aa6360f0dc9c8ded9086b94e": [ + "g.log:index.js:31" + ], + "b5d4af08bf61e58d375923977290d67b": [ + "g.log:index.js:29" + ], + "%s Hello %s": [ + "util.format:index.js:20" + ], + "http://localhost:": [ + "request:index.js:35" + ] +} +``` +and, `intl/zz/messages_inverted.json`: +``` +{ + "index.js": { + "20": [ + "util.format('%s Hello %s', ... )" + ], + "29": [ + "g.log('b5d4af08bf61e58d375923977290d67b')" + ], + "31": [ + "g.log('77decb50aa6360f0dc9c8ded9086b94e')" + ], + "35": [ + "request('http://localhost:')" + ] + } +} +``` + +## Persistent logging + +`strong-globalize` provides 'persistent logging' by passing all the localized messages as well as the original English messages to client-supplied callback function. + +### `SG.SetPersistentLogging(logCallback, disableConsole)` +`logCallback` is called when a user message is sent to `stdout` or `stderr` to show to the user. Two arguments passed to `logCallback` are: `level (string)` and `msg (object)` which has three properties: `message (UTF8 string)` which is the localized message shown to the user, `orig (UTF8 string)` the corresponding original English message with placeholder(s), and `vars (an array of argument(s) for the placeholder(s))`. + +```js +{ + language: 'ja', + message: 'ホスト:localhostのポート:8123へ送っています。', + orig: 'Sending to host: %s, port: %d ...', + vars: ['localhost', 8123], +} +``` + +`disableConsole` (default: `false`) is a boolean to specify whether to send the messsage to `stdout` or `stderr`. `disableConsole` should be set to `true` in case the client controls the user communication. For example, if the client uses `winston` file transport for logging, the client code would look like this: + +Client: +```js +const SG = require('strong-globalize'); +SG.SetRootDir(__dirname); +SG.SetDefaultLanguage(); +const g = new SG(); // strong-globalize handle +const w = require('winston'); // winston handle +initWinston(w); +// let strong-globalize to show it to the user +const disableConsole = false; +SG.SetPersistentLogging(w.log, disableConsole); + +function initWinston(w) { + const options = { + filename: __dirname + '/system.log', + maxsize: 1000000, + maxFiles: 10, + zippedArchive: true, + }; + w.add(w.transports.File, options); + // let strong-globalize to show it to the user + w.remove(w.transports.Console); +} +``` + +### Persistent logging demo `gmain/index.js` + +```js +const express = require('express'); +const request = require('request'); +const app = express(); +const SG = require('strong-globalize'); +SG.SetRootDir(__dirname); +const gsub = require('gsub'); +const w = require('winston'); // winston handle + +const g = new SG(); // strong-globalize handle +initWinston(w); // see the Client initialization +const disableConsole = false; +SG.SetPersistentLogging(w.log, disableConsole); + +app.get('/', function(req, res) { + const helloMessage = g.f('%s Hello World', g.d(new Date())); + w.info(helloMessage); // write only to the log file with 'info' level + res.end(helloMessage); +}); + +const port = process.env.PORT || 8123; +app.listen(port, function() { + g.log('Listening on %s by %s.', port, gsub.getUserName()); +}); + +setInterval(function(){ + g.owrite('Sending request to %s ...', port); + request('http://localhost:' + port, + function(error, response, body) {console.log(body);}); +},1000); + +g.info(gsub.getHelpText()); // write to both console and the log file with 'info' level +``` + +Note: +`w.info(helloMessage)` directly calls the winston API `info` and write `helpMessage` to the log file. +`g.info(gsub.getHelpText())` writes the localized help text to both console and the log file with `info` level. The other `strong-globalize` API calls, i.e., `g.log` and `g.owrite` also write the localized message to both console and the log file with `info` level. + +## Other resources + +- https://github.com/Setogit/sg-example-001-date-currency + + A complete strong-globalized application with machine-translated messages. In addition to message formatting, date and currency formatting examples are included. You can install and quickly see how the strong-globalized (or SG'ed in short) app works. Just install and `node index.js` + +- https://github.com/Setogit/sg-example-002-glob-pipeline + + Detailed 15-step instruction with 15 screen-shots to set up IBM Globalization Pipeline on Bluemix + + +## API - Set system defaults + +`const SG = require('strong-globalize);` + +### `SG.SetRootDir(rootPath, options)` +- `rootPath` : {`string`} App's root directory full path. Every client must set its root directory where `package.json` and `intl` directory exist. All resources under this directory including dependent modules are loaded in runtime. `SetRootDir` must be called once and only once usually in the main js module. +- `options` : {autonomousMsgLoading: ['`none`' | '`all`' | -- load string resources at the master rootDir and the specified packages if the master package depends on them. + +### `SG.SetDefaultLanguage(lang)` +- `lang` : {`string`} (optional) Language ID such as de, en, es, fr, it, ja, ko, pt, ru, zh-Hans, and zh-Hant. If omitted, `strong-globalize` tries to use the OS language, then falls back to 'en' It must be called at least once. By default, it's called in SetRootDir, so it can be omitted completely. Can be called multiple times. + +`strong-globalize` uses the language code in a form of a combination of ISO 639-1 language code and ISO 15924 script code such as `zh-Hans` for Chinese - Han (Simplified variant). + +### `SG.SetHtmlRegex(regex, regexHead, regexTail)` +- `regex` : {`RegExp`} to extract the whole string out of the HTML text +- `regexHead` : {`RegExp`} to trim the head portion from the extracted string +- `regexTail` : {`RegExp`} to trim the tail portion from the extracted string + +Most clients do not need to setHtmlRegex. See [the Globalize HTML Templates section](#globalize-html-templates) for details. + +### `g.setLanguage(lang)` +- `lang` : {`string`} (optional) Language ID such as de, en, es, fr, it, ja, ko, pt, ru, zh-Hans, and zh-Hant. If omitted, `strong-globalize` tries to use the OS language, then falls back to 'en' It must be called at least once. Can be called multiple times. + +### `g.getLanguage()` +- returns {`string`} Language ID such as de, en, es, fr, it, ja, ko, pt, ru, zh-Hans, and zh-Hant. + + +## API - Formatters + +`const g = new SG({language: 'en'});` + +### `g.formatMessage(path, variables)` +- `path {string}` The message key +- `variables {object}` (optional, default: null) List of placeholder key and content value pair + +### `g.t(path, variables)` +alias of `formatMessage` + +### `g.m(path, variables)` +alias of `formatMessage` + +### `g.formatCurrency(value, currencySymbol, options)` +- `value {number}` integer or float +- `currencySymbol {string}` ISO 4217 three-letter currency code such as `'USD'` for US Dollars +- `options {object}` (optional) jquery/globalize option format. If omitted, StrongLoop default is used. + +### `g.c(value, currencySymbol, options)` +alias of `formatCurrency` + +### `g.formatDate(value, options)` +- `value {Date object}` Date +- `options {object}` (optional) jquery/globalize option format. If omitted, StrongLoop default is used. + +### `g.d(value, options)` +alias of `formatDate` + +### `g.formatNumber(value, options)` +- `value {number}` integer or float +- `options {object}` (optional) jquery/globalize option format. If omitted, StrongLoop default is used. + +### `g.n(value, options)` +alias of `formatNumber` + +## API - Wrappers + +%s place holders are supported. Intended to directly globalize strings embedded in the first parameter of Error, console.error, console.log, etc. and util.format by simply replacing console or util with require('strong-globalize'). 'path' is the literal string. 'path' cannot be a variable. If a variable is used as `path` the off-line extraction won't be able to extract because string data assigned to a variable is known only in runtime. + +### `g.Error(path, ...)`(capital Error) +returns Error with a formatted message. + +### `g.format(path, ...)` +returns the result message from `formatMessage`. intended to replace util.format. + +### `g.f(path, ...)` +alias of `format` + +### `g.ewrite(path, ...)` +passes the result message from `formatMessage` to `process.stderr.write`, and log to file with `error` level if persistent logging is set. + +### `g.owrite(path, ...)` +passes the result message from `formatMessage` to `process.stdout.write`, and log to file with `info` level if persistent logging is set. + +### `g.write(path, ...)` +alias of `owrite` + +### Wrappers for RFC 5424 Syslog Message Severities + +#### `g.emergency(path, ...)` +passes the result message from `formatMessage` to `console.error`, and log to file with `emergency` level if persistent logging is set. + +#### `g.alert(path, ...)` +passes the result message from `formatMessage` to `console.error`, and log to file with `alert` level if persistent logging is set. + +#### `g.critical(path, ...)` +passes the result message from `formatMessage` to `console.error`, and log to file with `critical` level if persistent logging is set. + +#### `g.error(path, ...)`(small error) +passes the result message from `formatMessage` to `console.error`, and log to file with `error` level if persistent logging is set. + +#### `g.warning(path, ...)` +passes the result message from `formatMessage` to `console.error`, and log to file with `warning` level if persistent logging is set. + +#### `g.notice(path, ...)` +passes the result message from `formatMessage` to `console.log`, and log to file with `notice` level if persistent logging is set. + +#### `g.informational(path, ...)` +passes the result message from `formatMessage` to `console.log`, and log to file with `informational` level if persistent logging is set. + +#### `g.debug(path, ...)` +passes the result message from `formatMessage` to `console.log`, and log to file with `debug` level if persistent logging is set. + +### Wrappers for Node.js Console + +#### `g.warn(path, ...)` +passes the result message from `formatMessage` to `console.error`, and log to file with `warn` level if persistent logging is set. + +#### `g.info(path, ...)` +passes the result message from `formatMessage` to `console.log`, and log to file with `info` level if persistent logging is set. + +#### `g.log(path, ...)` +passes the result message from `formatMessage` to `console.log`, and log to file with `log` level if persistent logging is set. + +### Wrappers for Misc Logging Levels + +#### `g.help(path, ...)` +passes the result message from `formatMessage` to `console.log`, and log to file with `help` level if persistent logging is set. + +#### `g.data(path, ...)` +passes the result message from `formatMessage` to `console.log`, and log to file with `data` level if persistent logging is set. + +#### `g.prompt(path, ...)` +passes the result message from `formatMessage` to `console.log`, and log to file with `prompt` level if persistent logging is set. + +#### `g.verbose(path, ...)` +passes the result message from `formatMessage` to `console.log`, and log to file with `verbose` level if persistent logging is set. + +#### `g.input(path, ...)` +passes the result message from `formatMessage` to `console.log`, and log to file with `input` level if persistent logging is set. + +#### `g.silly(path, ...)` +passes the result message from `formatMessage` to `console.log`, and log to file with `silly` level if persistent logging is set. + +## Usage examples + +Rule of thumb for auto-extraction with `slt-globalize -e`: +- String literals defined as the first argument (`path`) of the APIs is extracted. +- String literals concatenated with '+' in the first argument are extracted as a single message. + +### use g.f for util.format + +before: +```js +Error(util.format('Directory %s does not exist', workingDir)); +``` +after: +```js +Error(g.f('Directory %s does not exist', workingDir)); +``` +or +```js +g.Error('Directory %s does not exist', workingDir); +``` + +### use g.write for process.stdout.write + +before globalization: +```js +// don't concatenate string. word order varies from language to language. +process.stdout.write('Directory ' + workingDir + ' does not exist...'); +``` +wrong globalization: (don't concatenate words; word order varies from language to language) +```js +process.stdout.write(g.t('Directory ') + workingDir + g.t(' does not exist...')); +``` +right globalization: +```js +g.write('Directory %s does not exist...', workingDir); +``` + +### place holders +You can use place holders and parameters in one of these four ways if you'd like: + +before globalization: +```js +util.format('Deploy %s to %s failed: %s', what, url, err); +``` +right globalization (4 ways) +```js +// 1 (recommended; simply replace `util` with `g`) +g.f('Deploy %s to %s failed: %s', what, url, err); +// 2 +g.f('Deploy {0} to {1} failed: {2}', [what, url, err]); +// 3 +g.f('Deploy {0} to {1} failed: {2}', {0: what, 1: url, 2: err}); +// 4 +g.f('Deploy {what} to {url} failed: {err}', {what: what, url: url, err: err}); +``` +When you put placeholders in help txt and msg messages, named or ordered placeholders should be used. Named placeholder is something like `{userName}`. Ordered placeholder is `{0}`, `{1}`, `{2}`, etc. which should be zero-base. + +Curly brace characters are reserved by `strong-globalize`. In case curly brace characters are used in literal strings, escape them. For example, `{User}` is a placeholder and '\x7bUser\x7d' is an escaped literal string rendered as '{User}' + +### double curly braces not to translate +Use double curly braces {{ }} as "don't translate" indicator. + +before globalization: +```js +console.error('Invalid usage (near option \'%s\'), try `%s --help`.', option, cmd); +``` +right globalization: +```js +g.error('Invalid usage (near option \'%s\'), try {{`%s --help`}}.', option, cmd); +``` + +### help txt files + +before globalization: +```js +const help = fs.readFileSync(require.resolve('./help.txt'), 'utf-8'); +```` +right globalization: +```js +const help = g.t('help.txt'); // or g.f('help.txt'); +``` +and store help.txt file under intl/en. + +### help txt files and msg keys + +They must be uniquely named because they are used as-is in runtime message database where the messages come from other modules will be merged. In case there are duplicate *.txt or msg*, it could be overwritten by other module(s) with the same name whichever is loaded later. Best practice is to use your package name as part of the name. For example, `msgMyPackage_ErrorMessage`. + +The rule of thumb is `strong-globalize` extracts messages from JS and HTML template files and creates the `messages.json` file (or appends extracted messages to the `messages.json` if it exists), but does not edit the help txt files, msg messages, or JS/HTML files provided by the client. + +Note that `strong-globalize` supports multiple txt and multiple json files under `intl/--/` directory. + +### manually add message strings +`slt-globalize -e` command extracts message strings from your source JS files and HTML templates. In case translation is needed for strings which are not in the source files, you can manually add them to the resource JSON files. To manually add message strings to the resource file, use a key that begins with `msg` such as msgPortNumber. Those keys are kept intact in auto-extraction and the value text will be properly translated. + +## Demo + +To quickly switch the locale, change the OS's system locale or set `STRONGLOOP_GLOBALIZE_APP_LANGUAGE` environment variable to one of the supported languages such as `ja` for Japanese or `de` for German. + +For example, on OSX: + +```js +cd gmain +LANG=ja node index.js +``` + +### `gsub/index.js` + +before: + +```js +const fs = require('fs'); +const util = require('util'); + +exports.getHelpText = getHelpText; +exports.getUserName = getUserName; + +function getUserName() { + const userName = util.format('user: %s', process.env.USER); + return userName; +} + +function getHelpText() { + const helpText = fs.readFileSync(require.resolve('./gsub.txt'), 'utf-8'); + return helpText; +} +``` +after: +- `const g = require('strong-globalize')();` +- replace `util` with `g` +- replace `readFile *.txt` with simply `g.t` and move `./gsub.txt` to `./intl/en/gsub.txt` +- then, run `slt-globalize -e` to extract and `slt-globalize -t` to machine translate the string resource. + +```js +const g = require('strong-globalize')(); + +exports.getHelpText = getHelpText; +exports.getUserName = getUserName; + +function getUserName() { + const userName = g.f('user: %s', process.env.USER); + return userName; +} + +function getHelpText() { + return g.t('gsub.txt'); +} +``` + +### `gmain/index.js` + +before: + +```js +const express = require('express'); +const request = require('request'); +const app = express(); +const util = require('util'); +const gsub = require('gsub'); + +app.get('/', function(req, res) { + const helloMessage = util.format('%s Hello World', new Date()); + res.end(helloMessage); +}); + +const port = process.env.PORT || 8123; +app.listen(port, function() { + console.log('Listening on %s by %s.', port, gsub.getUserName()); +}); + +setInterval(function(){ + process.stdout.write('Sending request to ' + port + '...'); + request('http://localhost:' + port, + function(error, response, body) {console.log(body);}); +},1000); + +console.log(gsub.getHelpText()); +``` +after: +- `const SG = require('strong-globalize');` +- `SG.SetRootDir( ... );` +- `const g = new SG();` +- replace `util` with `g` +- replace `console` with `g` +- replace `process.stdout` with `g` +- wrap `new Date()` with `g.d()` +- then, run `slt-globalize -e` to extract and `slt-globalize -t` to machine translate the string resource. + +```js +const SG = require('strong-globalize'); +SG.SetRootDir(__dirname); + +const express = require('express'); +const request = require('request'); +const app = express(); +const gsub = require('gsub'); + +const g = new SG(); + +app.get('/', function(req, res) { + const helloMessage = g.f('%s Hello World', g.d(new Date())); + res.end(helloMessage); +}); + +const port = process.env.PORT || 8123; +app.listen(port, function() { + g.log('Listening on %s by %s.', port, gsub.getUserName()); +}); + +setInterval(function(){ + g.owrite('Sending request to %s ...', port); + request('http://localhost:' + port, + function(error, response, body) {console.log(body);}); +},1000); + +console.log(gsub.getHelpText()); +``` + +## Sample code + +Sample code is included under `examples` directory. Let's browse the code and quickly study the standard coding pattern of `strong-globalize`. + + +``` +examples +├── gmain +│   ├── index.js +│   ├── intl +│   │   ├── en +│   │   │   └── messages.json +│   │   └── zz +│   │   ├── messages.json +│   │   └── messages_inverted.json +│   └── package.json +└── gsub + ├── index.js + ├── intl + │   ├── en + │   │   ├── help.txt + │   │   └── messages.json + │   └── zz + │   ├── messages.json + │   └── messages_inverted.json + ├── lib + │   └── util.js + └── package.json +``` + + +### First argument + +`strong-globalize` extracts literal strings passed as the first argument of the `strong-globalize` functions. In globalizing existing modules, most code changes you are going to make will be to make sure all literal strings are in that form. Usually, you do not need to globalize debug text. + +### Three types of modules + +From `strong-globalize` point of view, the role of every JS file is one of the three types: + +a. `master main` -- `SetRootDir(__dirname)` is declared right after `require('strong-globalize')` which is placed at the very first line of the main JS module of the root package in the application. See `examples/gmain/index.js`. `SG.SetDefaultLanguage();` is optional if the `lang` parameter is omitted or 'en' (English) is used as the default language. + +b. `main` -- The main JS module of all the other packages in the application must call `SetRootDir(__dirname)` in the first line of the main JS module of all the other (non-root) packages. See examples/gsub/index.js. + +c. `sub` -- All the other JS modules that call the `strong-globalize` function require `strong-globalize` as `const g = require('strong-globalize')();` See examples/gsub/lib/util.js` In case you need multiple `strong-globalize` instances, do the following: + +```js +const SG = require('strong-globalize'); +const gFrench = new SG('fr'); +const gSpanish = new SG('es'); +// parallel use +gFrench.log('text in French'); +gSpanish.log('text in Spanish'); +gFrench.log('second text in French'); +``` + +You can also re-use one instance multiple times as follows: +```js +const g = require('strong-globalize')(); +g.setLanguage('fr'); +g.log('text in French'); +g.setLanguage('es'); +g.log('text in Spanish'); +g.setLanguage('fr'); +g.log('second text in French'); +``` + +## License + +Artistic License 2.0 diff --git a/node_modules/strong-globalize/benchmark/data/loopback-sample-messages.json b/node_modules/strong-globalize/benchmark/data/loopback-sample-messages.json new file mode 100644 index 00000000..622c94ac --- /dev/null +++ b/node_modules/strong-globalize/benchmark/data/loopback-sample-messages.json @@ -0,0 +1,1942 @@ +[ +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["Login a user with username/email and password."], +["Related objects to include in the response. See the description of return value for more details."], +["The response body contains properties of the {{AccessToken}} created on login.\nDepending on the value of `include` parameter, the body may contain additional properties:\n\n - `user` - `U+007BUserU+007D` - Data of the currently logged in user. {{(`include=user`)}}\n\n"], +["The method name must be a {{string}}"], +["Logout a user with access token."], +["Do not supply this argument, it is automatically extracted from request headers."], +["The method name must be a {{string}}"], +["Confirm a user registration with email verification token."], +["The method name must be a {{string}}"], +["Reset password for a user with email."], +["The method name must be a {{string}}"], +["Must provide a valid email"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["%s config must be a valid JSON object","app"], +["%s config must be a valid JSON object","model"], +["%s config must be a valid JSON object","data source"], +["cannot require directory contents without directory name"], +["cannot require directory contents without directory name"], +["{{app.host}} must be a {{string}}"], +["{{app.port}} must be a {{string}} or {{number}}"], +["{{app.restBasePath}} is required"], +["{{app.restApiRoot}} must be a {{string}}"], +["{{app.restApiRoot}} must start with \"/\""], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["Login a user with username/email and password."], +["Related objects to include in the response. See the description of return value for more details."], +["The response body contains properties of the {{AccessToken}} created on login.\nDepending on the value of `include` parameter, the body may contain additional properties:\n\n - `user` - `U+007BUserU+007D` - Data of the currently logged in user. {{(`include=user`)}}\n\n"], +["The method name must be a {{string}}"], +["Logout a user with access token."], +["Do not supply this argument, it is automatically extracted from request headers."], +["The method name must be a {{string}}"], +["Confirm a user registration with email verification token."], +["The method name must be a {{string}}"], +["Reset password for a user with email."], +["The method name must be a {{string}}"], +["Must provide a valid email"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["Login a user with username/email and password."], +["Related objects to include in the response. See the description of return value for more details."], +["The response body contains properties of the {{AccessToken}} created on login.\nDepending on the value of `include` parameter, the body may contain additional properties:\n\n - `user` - `U+007BUserU+007D` - Data of the currently logged in user. {{(`include=user`)}}\n\n"], +["The method name must be a {{string}}"], +["Logout a user with access token."], +["Do not supply this argument, it is automatically extracted from request headers."], +["The method name must be a {{string}}"], +["Confirm a user registration with email verification token."], +["The method name must be a {{string}}"], +["Reset password for a user with email."], +["The method name must be a {{string}}"], +["Must provide a valid email"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Cannot configure %s: {{config.dataSource}} must be an instance of {{DataSource}}","ACL"], +["Cannot configure %s: {{config.dataSource}} must be an instance of {{DataSource}}","RoleMapping"], +["Cannot configure %s: {{config.dataSource}} must be an instance of {{DataSource}}","Role"], +["Cannot configure %s: {{config.dataSource}} must be an instance of {{DataSource}}","user"], +["must provide a valid {{SharedClass}}"], +["Cannot configure %s: {{config.dataSource}} must be an instance of {{DataSource}}","accessToken"], +["must provide a valid {{SharedClass}}"], +["Cannot configure %s: {{config.dataSource}} must be an instance of {{DataSource}}","bank"], +["must provide a valid {{SharedClass}}"], +["Cannot configure %s: {{config.dataSource}} must be an instance of {{DataSource}}","account"], +["must provide a valid {{SharedClass}}"], +["Cannot configure %s: {{config.dataSource}} must be an instance of {{DataSource}}","transaction"], +["must provide a valid {{SharedClass}}"], +["Cannot configure %s: {{config.dataSource}} must be an instance of {{DataSource}}","alert"], +["must provide a valid {{SharedClass}}"], +["Cannot configure %s: {{config.dataSource}} must be an instance of {{DataSource}}","email"], +["{{instructions.middleware.phases}} must be an {{array}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["%s config must be a valid JSON object","app"], +["%s config must be a valid JSON object","model"], +["%s config must be a valid JSON object","data source"], +["cannot require directory contents without directory name"], +["cannot require directory contents without directory name"], +["{{app.host}} must be a {{string}}"], +["{{app.port}} must be a {{string}} or {{number}}"], +["{{app.restBasePath}} is required"], +["{{app.restApiRoot}} must be a {{string}}"], +["{{app.restApiRoot}} must start with \"/\""], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["Login a user with username/email and password."], +["Related objects to include in the response. See the description of return value for more details."], +["The response body contains properties of the {{AccessToken}} created on login.\nDepending on the value of `include` parameter, the body may contain additional properties:\n\n - `user` - `U+007BUserU+007D` - Data of the currently logged in user. {{(`include=user`)}}\n\n"], +["The method name must be a {{string}}"], +["Logout a user with access token."], +["Do not supply this argument, it is automatically extracted from request headers."], +["The method name must be a {{string}}"], +["Confirm a user registration with email verification token."], +["The method name must be a {{string}}"], +["Reset password for a user with email."], +["The method name must be a {{string}}"], +["Must provide a valid email"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["Login a user with username/email and password."], +["Related objects to include in the response. See the description of return value for more details."], +["The response body contains properties of the {{AccessToken}} created on login.\nDepending on the value of `include` parameter, the body may contain additional properties:\n\n - `user` - `U+007BUserU+007D` - Data of the currently logged in user. {{(`include=user`)}}\n\n"], +["The method name must be a {{string}}"], +["Logout a user with access token."], +["Do not supply this argument, it is automatically extracted from request headers."], +["The method name must be a {{string}}"], +["Confirm a user registration with email verification token."], +["The method name must be a {{string}}"], +["Reset password for a user with email."], +["The method name must be a {{string}}"], +["Must provide a valid email"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Cannot configure %s: {{config.dataSource}} must be an instance of {{DataSource}}","ACL"], +["Cannot configure %s: {{config.dataSource}} must be an instance of {{DataSource}}","RoleMapping"], +["Cannot configure %s: {{config.dataSource}} must be an instance of {{DataSource}}","Role"], +["Cannot configure %s: {{config.dataSource}} must be an instance of {{DataSource}}","user"], +["must provide a valid {{SharedClass}}"], +["Cannot configure %s: {{config.dataSource}} must be an instance of {{DataSource}}","accessToken"], +["must provide a valid {{SharedClass}}"], +["Cannot configure %s: {{config.dataSource}} must be an instance of {{DataSource}}","widget"], +["must provide a valid {{SharedClass}}"], +["Cannot configure %s: {{config.dataSource}} must be an instance of {{DataSource}}","store"], +["must provide a valid {{SharedClass}}"], +["Cannot configure %s: {{config.dataSource}} must be an instance of {{DataSource}}","physician"], +["must provide a valid {{SharedClass}}"], +["Cannot configure %s: {{config.dataSource}} must be an instance of {{DataSource}}","patient"], +["must provide a valid {{SharedClass}}"], +["Cannot configure %s: {{config.dataSource}} must be an instance of {{DataSource}}","appointment"], +["must provide a valid {{SharedClass}}"], +["Cannot configure %s: {{config.dataSource}} must be an instance of {{DataSource}}","customer"], +["must provide a valid {{SharedClass}}"], +["Cannot configure %s: {{config.dataSource}} must be an instance of {{DataSource}}","profile"], +["must provide a valid {{SharedClass}}"], +["Cannot configure %s: {{config.dataSource}} must be an instance of {{DataSource}}","email"], +["{{instructions.middleware.phases}} must be an {{array}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["%s config must be a valid JSON object","app"], +["%s config must be a valid JSON object","model"], +["%s config must be a valid JSON object","data source"], +["cannot require directory contents without directory name"], +["cannot require directory contents without directory name"], +["{{app.host}} must be a {{string}}"], +["{{app.port}} must be a {{string}} or {{number}}"], +["{{app.restBasePath}} is required"], +["{{app.restApiRoot}} must be a {{string}}"], +["{{app.restApiRoot}} must start with \"/\""], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["Login a user with username/email and password."], +["Related objects to include in the response. See the description of return value for more details."], +["The response body contains properties of the {{AccessToken}} created on login.\nDepending on the value of `include` parameter, the body may contain additional properties:\n\n - `user` - `U+007BUserU+007D` - Data of the currently logged in user. {{(`include=user`)}}\n\n"], +["The method name must be a {{string}}"], +["Logout a user with access token."], +["Do not supply this argument, it is automatically extracted from request headers."], +["The method name must be a {{string}}"], +["Confirm a user registration with email verification token."], +["The method name must be a {{string}}"], +["Reset password for a user with email."], +["The method name must be a {{string}}"], +["Must provide a valid email"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["Login a user with username/email and password."], +["Related objects to include in the response. See the description of return value for more details."], +["The response body contains properties of the {{AccessToken}} created on login.\nDepending on the value of `include` parameter, the body may contain additional properties:\n\n - `user` - `U+007BUserU+007D` - Data of the currently logged in user. {{(`include=user`)}}\n\n"], +["The method name must be a {{string}}"], +["Logout a user with access token."], +["Do not supply this argument, it is automatically extracted from request headers."], +["The method name must be a {{string}}"], +["Confirm a user registration with email verification token."], +["The method name must be a {{string}}"], +["Reset password for a user with email."], +["The method name must be a {{string}}"], +["Must provide a valid email"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["The method name must be a {{string}}"], +["must include a {{remoteNamespace}} when creating a {{SharedClass}}"], +["Create a new instance of the model and persist it into the data source."], +["The method name must be a {{string}}"], +["Update an existing model instance or insert a new one into the data source."], +["The method name must be a {{string}}"], +["Check whether a model instance exists in the data source."], +["The method name must be a {{string}}"], +["Find a model instance by {{id}} from the data source."], +["Filter defining fields and include"], +["The method name must be a {{string}}"], +["Find all instances of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Find first instance of the model matched by filter from the data source."], +["The method name must be a {{string}}"], +["Delete all matching records."], +["The method name must be a {{string}}"], +["Update instances of the model matched by {{where}} from the data source."], +["Criteria to match model instances"], +["An object of model property name/value pairs"], +["The number of instances updated"], +["The method name must be a {{string}}"], +["Delete a model instance by {{id}} from the data source."], +["The method name must be a {{string}}"], +["Count instances of the model matched by where from the data source."], +["The method name must be a {{string}}"], +["Update attributes for a model instance and persist it into the data source."], +["The method name must be a {{string}}"], +["Create a change stream."], +["The method name must be a {{string}}"], +["Cannot configure %s: {{config.dataSource}} must be an instance of {{DataSource}}","Email"], +["Cannot configure %s: {{config.dataSource}} must be an instance of {{DataSource}}","User"], +["must provide a valid {{SharedClass}}"], +["Cannot configure %s: {{config.dataSource}} must be an instance of {{DataSource}}","AccessToken"], +["Cannot configure %s: {{config.dataSource}} must be an instance of {{DataSource}}","ACL"], +["Cannot configure %s: {{config.dataSource}} must be an instance of {{DataSource}}","RoleMapping"], +["Cannot configure %s: {{config.dataSource}} must be an instance of {{DataSource}}","Role"], +["Cannot configure %s: {{config.dataSource}} must be an instance of {{DataSource}}","myUser"], +["must provide a valid {{SharedClass}}"], +["Cannot configure %s: {{config.dataSource}} must be an instance of {{DataSource}}","blog"], +["must provide a valid {{SharedClass}}"], +["Cannot configure %s: {{config.dataSource}} must be an instance of {{DataSource}}","Post"], +["must provide a valid {{SharedClass}}"], +["{{instructions.middleware.phases}} must be an {{array}}"], +["%s is deprecated. See %s for more details.","loopback.getCurrentContext()","https://docs.strongloop.com/display/APIC/Using%20current%20context"], +["%s middleware is deprecated. See %s for more details.","loopback#context","https://docs.strongloop.com/display/APIC/Using%20current%20context"], +["Foreign key for %s","accessTokens"], +["Find a related item by id for %s.","accessTokens"], +["The method name must be a {{string}}"], +["Foreign key for %s","accessTokens"], +["Delete a related item by id for %s.","accessTokens"], +["The method name must be a {{string}}"], +["Foreign key for %s","accessTokens"], +["Update a related item by id for %s.","accessTokens"], +["The method name must be a {{string}}"], +["Foreign key for %s","transactions"], +["Find a related item by id for %s.","transactions"], +["The method name must be a {{string}}"], +["Foreign key for %s","transactions"], +["Delete a related item by id for %s.","transactions"], +["The method name must be a {{string}}"], +["Foreign key for %s","transactions"], +["Update a related item by id for %s.","transactions"], +["The method name must be a {{string}}"], +["Queries %s of %s.","accessTokens","user"], +["The method name must be a {{string}}"], +["Creates a new instance in %s of this model.","accessTokens"], +["The method name must be a {{string}}"], +["Deletes all %s of this model.","accessTokens"], +["The method name must be a {{string}}"], +["Criteria to match model instances"], +["Counts %s of %s.","accessTokens","user"], +["The method name must be a {{string}}"], +["Queries %s of %s.","transactions","user"], +["The method name must be a {{string}}"], +["Creates a new instance in %s of this model.","transactions"], +["The method name must be a {{string}}"], +["Deletes all %s of this model.","transactions"], +["The method name must be a {{string}}"], +["Criteria to match model instances"], +["Counts %s of %s.","transactions","user"], +["The method name must be a {{string}}"], +["Foreign key for %s","users"], +["Find a related item by id for %s.","users"], +["The method name must be a {{string}}"], +["Foreign key for %s","users"], +["Delete a related item by id for %s.","users"], +["The method name must be a {{string}}"], +["Foreign key for %s","users"], +["Update a related item by id for %s.","users"], +["The method name must be a {{string}}"], +["Foreign key for %s","accounts"], +["Find a related item by id for %s.","accounts"], +["The method name must be a {{string}}"], +["Foreign key for %s","accounts"], +["Delete a related item by id for %s.","accounts"], +["The method name must be a {{string}}"], +["Foreign key for %s","accounts"], +["Update a related item by id for %s.","accounts"], +["The method name must be a {{string}}"], +["Queries %s of %s.","users","bank"], +["The method name must be a {{string}}"], +["Creates a new instance in %s of this model.","users"], +["The method name must be a {{string}}"], +["Deletes all %s of this model.","users"], +["The method name must be a {{string}}"], +["Criteria to match model instances"], +["Counts %s of %s.","users","bank"], +["The method name must be a {{string}}"], +["Queries %s of %s.","accounts","bank"], +["The method name must be a {{string}}"], +["Creates a new instance in %s of this model.","accounts"], +["The method name must be a {{string}}"], +["Deletes all %s of this model.","accounts"], +["The method name must be a {{string}}"], +["Criteria to match model instances"], +["Counts %s of %s.","accounts","bank"], +["The method name must be a {{string}}"], +["Fetches belongsTo relation %s.","user"], +["The method name must be a {{string}}"], +["Foreign key for %s","transactions"], +["Find a related item by id for %s.","transactions"], +["The method name must be a {{string}}"], +["Foreign key for %s","transactions"], +["Delete a related item by id for %s.","transactions"], +["The method name must be a {{string}}"], +["Foreign key for %s","transactions"], +["Update a related item by id for %s.","transactions"], +["The method name must be a {{string}}"], +["Queries %s of %s.","transactions","account"], +["The method name must be a {{string}}"], +["Creates a new instance in %s of this model.","transactions"], +["The method name must be a {{string}}"], +["Deletes all %s of this model.","transactions"], +["The method name must be a {{string}}"], +["Criteria to match model instances"], +["Counts %s of %s.","transactions","account"], +["The method name must be a {{string}}"], +["Access Denied"], +["could not find %s with id %s","user",null], +["Authorization Required"], +["%s is deprecated. See %s for more details.","loopback.getCurrentContext()","https://docs.strongloop.com/display/APIC/Using%20current%20context"], +["Access Denied"], +["could not find %s with id %s","user",null], +["Authorization Required"], +["login failed"], +["%s is deprecated. See %s for more details.","loopback.getCurrentContext()","https://docs.strongloop.com/display/APIC/Using%20current%20context"], +["Access Denied"], +["could not find %s with id %s","user",null], +["Authorization Required"], +["%s is deprecated. See %s for more details.","loopback.getCurrentContext()","https://docs.strongloop.com/display/APIC/Using%20current%20context"], +["Access Denied"], +["could not find %s with id %s","user","5"], +["Authorization Required"], +["%s is deprecated. See %s for more details.","loopback.getCurrentContext()","https://docs.strongloop.com/display/APIC/Using%20current%20context"], +["Access Denied"], +["could not find %s with id %s","user","6"], +["Authorization Required"], +["login failed"], +["%s is deprecated. See %s for more details.","loopback.getCurrentContext()","https://docs.strongloop.com/display/APIC/Using%20current%20context"], +["Access Denied"], +["could not find %s with id %s","user","7"], +["Authorization Required"], +["%s is deprecated. See %s for more details.","loopback.getCurrentContext()","https://docs.strongloop.com/display/APIC/Using%20current%20context"], +["login failed"], +["%s is deprecated. See %s for more details.","loopback.getCurrentContext()","https://docs.strongloop.com/display/APIC/Using%20current%20context"], +["login failed"], +["%s is deprecated. See %s for more details.","loopback.getCurrentContext()","https://docs.strongloop.com/display/APIC/Using%20current%20context"], +["%s is deprecated. See %s for more details.","loopback.getCurrentContext()","https://docs.strongloop.com/display/APIC/Using%20current%20context"], +["{{Shared class}} \"%s\" has no method handling %s %s","user","DELETE","/"], +["%s is deprecated. See %s for more details.","loopback.getCurrentContext()","https://docs.strongloop.com/display/APIC/Using%20current%20context"], +["Access Denied"], +["could not find %s with id %s","user",17], +["Authorization Required"], +["%s is deprecated. See %s for more details.","loopback.getCurrentContext()","https://docs.strongloop.com/display/APIC/Using%20current%20context"], +["Access Denied"], +["could not find %s with id %s","user",18], +["Authorization Required"], +["login failed"], +["%s is deprecated. See %s for more details.","loopback.getCurrentContext()","https://docs.strongloop.com/display/APIC/Using%20current%20context"], +["Access Denied"], +["could not find %s with id %s","user",19], +["Authorization Required"], +["%s is deprecated. See %s for more details.","loopback.getCurrentContext()","https://docs.strongloop.com/display/APIC/Using%20current%20context"], +["Access Denied"], +["could not find %s with id %s","user",21], +["Authorization Required"], +["%s is deprecated. See %s for more details.","loopback.getCurrentContext()","https://docs.strongloop.com/display/APIC/Using%20current%20context"], +["Access Denied"], +["could not find %s with id %s","user",22], +["Authorization Required"], +["login failed"], +["%s is deprecated. See %s for more details.","loopback.getCurrentContext()","https://docs.strongloop.com/display/APIC/Using%20current%20context"], +["Access Denied"], +["could not find %s with id %s","user",23], +["Authorization Required"], +["login failed"], +["%s is deprecated. See %s for more details.","loopback.getCurrentContext()","https://docs.strongloop.com/display/APIC/Using%20current%20context"], +["login failed"], +["%s is deprecated. See %s for more details.","loopback.getCurrentContext()","https://docs.strongloop.com/display/APIC/Using%20current%20context"] +] diff --git a/node_modules/strong-globalize/benchmark/format.js b/node_modules/strong-globalize/benchmark/format.js new file mode 100644 index 00000000..6751b93a --- /dev/null +++ b/node_modules/strong-globalize/benchmark/format.js @@ -0,0 +1,61 @@ +'use strict'; + +var f = require('util').format; +const SG = require('../lib/index'); +var g = new SG(); +var helper = require('../lib/helper'); +var md5 = require('md5'); + +// The data was gathered by running (some) unit-tests of LoopBack +var data = require('./data/loopback-sample-messages.json'); +var size = data.length; + +console.log('BASELINE'); +var baseline = measure(function format(args) { f.apply(this, args); }); +console.log(' %s calls of "util.format()" took %sms', size, baseline); + +console.log('CASE 1 - no messages are loaded'); +var duration = measure(localize); +console.log(' %s calls of "g.f()" took %sms', size, duration); + +var ratio = Math.ceil(duration / baseline); +console.log(' g.f() is %sx slower than util.format', ratio); + +console.log('CASE 2 - all messages are loaded'); +SG.SetDefaultLanguage(); +loadMessagesFromData(); +duration = measure(localize); +console.log(' %s calls of "g.f()" took %sms', size, duration); + +ratio = Math.ceil(duration / baseline); +console.log(' g.f() is %sx slower than util.format', ratio); + +// --- HELPERS --- // + +function measure(fn) { + var start = process.hrtime(); + for (var run = 0; run < 5; run++) { + data.forEach(function(args) { + fn(args); + }); + } + var delta = process.hrtime(start); + return delta[0] * 1e3 + delta[1] / 1e6; +} + +function localize(args) { + g.f.apply(g, args); +} + +function loadMessagesFromData() { + var messages = {}; + data.forEach(function(value) { + var msg = value[0]; + var key = md5(msg); + if (messages[key]) return; + if (helper.percent(msg)) + msg = helper.mapPercent(msg); + messages[key] = msg; + }); + SG.STRONGLOOP_GLB.loadMessages({en: messages}); +} diff --git a/node_modules/strong-globalize/browser.js b/node_modules/strong-globalize/browser.js new file mode 100644 index 00000000..59314dbe --- /dev/null +++ b/node_modules/strong-globalize/browser.js @@ -0,0 +1,31 @@ +// Copyright IBM Corp. 2015,2018. All Rights Reserved. +// Node module: strong-globalize +// This file is licensed under the Artistic License 2.0. +// License text available at https://opensource.org/licenses/Artistic-2.0 + +'use strict'; + +const StrongGlobalize = require('./lib/browser'); + +const util = require('util'); + +/** + * A facade constructor for `StrongGlobalize`. It allows both + * `const g = new SG(...)` and `const g = SG(...)` for backward compatibility. + * + * @param {*} args Constructor arguments for `StrongGlobalize` + */ +function SG(...args) { + if (!(this instanceof SG)) { + return new SG(...args); + } + return new StrongGlobalize(...args); +} + +Object.setPrototypeOf(SG, StrongGlobalize); +util.inherits(SG, StrongGlobalize); + +// Expose the original `StrongGlobalize` class +SG.StrongGlobalize = StrongGlobalize; + +module.exports = SG; diff --git a/node_modules/strong-globalize/cldr/cldr_32.0.1.json b/node_modules/strong-globalize/cldr/cldr_32.0.1.json new file mode 100644 index 00000000..bf3fa061 --- /dev/null +++ b/node_modules/strong-globalize/cldr/cldr_32.0.1.json @@ -0,0 +1 @@ +{"main":{"en":{"identity":{"version":{"_number":"$Revision: 13744 $","_cldrVersion":"32"},"language":"en"},"dates":{"calendars":{"gregorian":{"months":{"format":{"abbreviated":{"1":"Jan","2":"Feb","3":"Mar","4":"Apr","5":"May","6":"Jun","7":"Jul","8":"Aug","9":"Sep","10":"Oct","11":"Nov","12":"Dec"},"narrow":{"1":"J","2":"F","3":"M","4":"A","5":"M","6":"J","7":"J","8":"A","9":"S","10":"O","11":"N","12":"D"},"wide":{"1":"January","2":"February","3":"March","4":"April","5":"May","6":"June","7":"July","8":"August","9":"September","10":"October","11":"November","12":"December"}},"stand-alone":{"abbreviated":{"1":"Jan","2":"Feb","3":"Mar","4":"Apr","5":"May","6":"Jun","7":"Jul","8":"Aug","9":"Sep","10":"Oct","11":"Nov","12":"Dec"},"narrow":{"1":"J","2":"F","3":"M","4":"A","5":"M","6":"J","7":"J","8":"A","9":"S","10":"O","11":"N","12":"D"},"wide":{"1":"January","2":"February","3":"March","4":"April","5":"May","6":"June","7":"July","8":"August","9":"September","10":"October","11":"November","12":"December"}}},"days":{"format":{"abbreviated":{"sun":"Sun","mon":"Mon","tue":"Tue","wed":"Wed","thu":"Thu","fri":"Fri","sat":"Sat"},"narrow":{"sun":"S","mon":"M","tue":"T","wed":"W","thu":"T","fri":"F","sat":"S"},"short":{"sun":"Su","mon":"Mo","tue":"Tu","wed":"We","thu":"Th","fri":"Fr","sat":"Sa"},"wide":{"sun":"Sunday","mon":"Monday","tue":"Tuesday","wed":"Wednesday","thu":"Thursday","fri":"Friday","sat":"Saturday"}},"stand-alone":{"abbreviated":{"sun":"Sun","mon":"Mon","tue":"Tue","wed":"Wed","thu":"Thu","fri":"Fri","sat":"Sat"},"narrow":{"sun":"S","mon":"M","tue":"T","wed":"W","thu":"T","fri":"F","sat":"S"},"short":{"sun":"Su","mon":"Mo","tue":"Tu","wed":"We","thu":"Th","fri":"Fr","sat":"Sa"},"wide":{"sun":"Sunday","mon":"Monday","tue":"Tuesday","wed":"Wednesday","thu":"Thursday","fri":"Friday","sat":"Saturday"}}},"quarters":{"format":{"abbreviated":{"1":"Q1","2":"Q2","3":"Q3","4":"Q4"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"1st quarter","2":"2nd quarter","3":"3rd quarter","4":"4th quarter"}},"stand-alone":{"abbreviated":{"1":"Q1","2":"Q2","3":"Q3","4":"Q4"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"1st quarter","2":"2nd quarter","3":"3rd quarter","4":"4th quarter"}}},"dayPeriods":{"format":{"abbreviated":{"midnight":"midnight","am":"AM","am-alt-variant":"am","noon":"noon","pm":"PM","pm-alt-variant":"pm","morning1":"in the morning","afternoon1":"in the afternoon","evening1":"in the evening","night1":"at night"},"narrow":{"midnight":"mi","am":"a","am-alt-variant":"am","noon":"n","pm":"p","pm-alt-variant":"pm","morning1":"in the morning","afternoon1":"in the afternoon","evening1":"in the evening","night1":"at night"},"wide":{"midnight":"midnight","am":"AM","am-alt-variant":"am","noon":"noon","pm":"PM","pm-alt-variant":"pm","morning1":"in the morning","afternoon1":"in the afternoon","evening1":"in the evening","night1":"at night"}},"stand-alone":{"abbreviated":{"midnight":"midnight","am":"AM","am-alt-variant":"am","noon":"noon","pm":"PM","pm-alt-variant":"pm","morning1":"morning","afternoon1":"afternoon","evening1":"evening","night1":"night"},"narrow":{"midnight":"midnight","am":"AM","am-alt-variant":"am","noon":"noon","pm":"PM","pm-alt-variant":"pm","morning1":"morning","afternoon1":"afternoon","evening1":"evening","night1":"night"},"wide":{"midnight":"midnight","am":"AM","am-alt-variant":"am","noon":"noon","pm":"PM","pm-alt-variant":"pm","morning1":"morning","afternoon1":"afternoon","evening1":"evening","night1":"night"}}},"eras":{"eraNames":{"0":"Before Christ","1":"Anno Domini","0-alt-variant":"Before Common Era","1-alt-variant":"Common Era"},"eraAbbr":{"0":"BC","1":"AD","0-alt-variant":"BCE","1-alt-variant":"CE"},"eraNarrow":{"0":"B","1":"A","0-alt-variant":"BCE","1-alt-variant":"CE"}},"dateFormats":{"full":"EEEE, MMMM d, y","long":"MMMM d, y","medium":"MMM d, y","short":"M/d/yy"},"timeFormats":{"full":"h:mm:ss a zzzz","long":"h:mm:ss a z","medium":"h:mm:ss a","short":"h:mm a"},"dateTimeFormats":{"full":"{1} 'at' {0}","long":"{1} 'at' {0}","medium":"{1}, {0}","short":"{1}, {0}","availableFormats":{"Bh":"h B","Bhm":"h:mm B","Bhms":"h:mm:ss B","d":"d","E":"ccc","EBhm":"E h:mm B","EBhms":"E h:mm:ss B","Ed":"d E","Ehm":"E h:mm a","EHm":"E HH:mm","Ehms":"E h:mm:ss a","EHms":"E HH:mm:ss","Gy":"y G","GyMMM":"MMM y G","GyMMMd":"MMM d, y G","GyMMMEd":"E, MMM d, y G","h":"h a","H":"HH","hm":"h:mm a","Hm":"HH:mm","hms":"h:mm:ss a","Hms":"HH:mm:ss","hmsv":"h:mm:ss a v","Hmsv":"HH:mm:ss v","hmv":"h:mm a v","Hmv":"HH:mm v","M":"L","Md":"M/d","MEd":"E, M/d","MMM":"LLL","MMMd":"MMM d","MMMEd":"E, MMM d","MMMMd":"MMMM d","MMMMW-count-one":"'week' W 'of' MMMM","MMMMW-count-other":"'week' W 'of' MMMM","ms":"mm:ss","y":"y","yM":"M/y","yMd":"M/d/y","yMEd":"E, M/d/y","yMMM":"MMM y","yMMMd":"MMM d, y","yMMMEd":"E, MMM d, y","yMMMM":"MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","yw-count-one":"'week' w 'of' Y","yw-count-other":"'week' w 'of' Y"},"appendItems":{"Day":"{0} ({2}: {1})","Day-Of-Week":"{0} {1}","Era":"{0} {1}","Hour":"{0} ({2}: {1})","Minute":"{0} ({2}: {1})","Month":"{0} ({2}: {1})","Quarter":"{0} ({2}: {1})","Second":"{0} ({2}: {1})","Timezone":"{0} {1}","Week":"{0} ({2}: {1})","Year":"{0} {1}"},"intervalFormats":{"intervalFormatFallback":"{0} – {1}","d":{"d":"d – d"},"h":{"a":"h a – h a","h":"h – h a"},"H":{"H":"HH – HH"},"hm":{"a":"h:mm a – h:mm a","h":"h:mm – h:mm a","m":"h:mm – h:mm a"},"Hm":{"H":"HH:mm – HH:mm","m":"HH:mm – HH:mm"},"hmv":{"a":"h:mm a – h:mm a v","h":"h:mm – h:mm a v","m":"h:mm – h:mm a v"},"Hmv":{"H":"HH:mm – HH:mm v","m":"HH:mm – HH:mm v"},"hv":{"a":"h a – h a v","h":"h – h a v"},"Hv":{"H":"HH – HH v"},"M":{"M":"M – M"},"Md":{"d":"M/d – M/d","M":"M/d – M/d"},"MEd":{"d":"E, M/d – E, M/d","M":"E, M/d – E, M/d"},"MMM":{"M":"MMM – MMM"},"MMMd":{"d":"MMM d – d","M":"MMM d – MMM d"},"MMMEd":{"d":"E, MMM d – E, MMM d","M":"E, MMM d – E, MMM d"},"y":{"y":"y – y"},"yM":{"M":"M/y – M/y","y":"M/y – M/y"},"yMd":{"d":"M/d/y – M/d/y","M":"M/d/y – M/d/y","y":"M/d/y – M/d/y"},"yMEd":{"d":"E, M/d/y – E, M/d/y","M":"E, M/d/y – E, M/d/y","y":"E, M/d/y – E, M/d/y"},"yMMM":{"M":"MMM – MMM y","y":"MMM y – MMM y"},"yMMMd":{"d":"MMM d – d, y","M":"MMM d – MMM d, y","y":"MMM d, y – MMM d, y"},"yMMMEd":{"d":"E, MMM d – E, MMM d, y","M":"E, MMM d – E, MMM d, y","y":"E, MMM d, y – E, MMM d, y"},"yMMMM":{"M":"MMMM – MMMM y","y":"MMMM y – MMMM y"}}}}},"fields":{"era":{"displayName":"era"},"era-short":{"displayName":"era"},"era-narrow":{"displayName":"era"},"year":{"displayName":"year","relative-type--1":"last year","relative-type-0":"this year","relative-type-1":"next year","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} year","relativeTimePattern-count-other":"in {0} years"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} year ago","relativeTimePattern-count-other":"{0} years ago"}},"year-short":{"displayName":"yr.","relative-type--1":"last yr.","relative-type-0":"this yr.","relative-type-1":"next yr.","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} yr.","relativeTimePattern-count-other":"in {0} yr."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} yr. ago","relativeTimePattern-count-other":"{0} yr. ago"}},"year-narrow":{"displayName":"yr.","relative-type--1":"last yr.","relative-type-0":"this yr.","relative-type-1":"next yr.","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} yr.","relativeTimePattern-count-other":"in {0} yr."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} yr. ago","relativeTimePattern-count-other":"{0} yr. ago"}},"quarter":{"displayName":"quarter","relative-type--1":"last quarter","relative-type-0":"this quarter","relative-type-1":"next quarter","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} quarter","relativeTimePattern-count-other":"in {0} quarters"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} quarter ago","relativeTimePattern-count-other":"{0} quarters ago"}},"quarter-short":{"displayName":"qtr.","relative-type--1":"last qtr.","relative-type-0":"this qtr.","relative-type-1":"next qtr.","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} qtr.","relativeTimePattern-count-other":"in {0} qtrs."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} qtr. ago","relativeTimePattern-count-other":"{0} qtrs. ago"}},"quarter-narrow":{"displayName":"qtr.","relative-type--1":"last qtr.","relative-type-0":"this qtr.","relative-type-1":"next qtr.","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} qtr.","relativeTimePattern-count-other":"in {0} qtrs."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} qtr. ago","relativeTimePattern-count-other":"{0} qtrs. ago"}},"month":{"displayName":"month","relative-type--1":"last month","relative-type-0":"this month","relative-type-1":"next month","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} month","relativeTimePattern-count-other":"in {0} months"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} month ago","relativeTimePattern-count-other":"{0} months ago"}},"month-short":{"displayName":"mo.","relative-type--1":"last mo.","relative-type-0":"this mo.","relative-type-1":"next mo.","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} mo.","relativeTimePattern-count-other":"in {0} mo."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} mo. ago","relativeTimePattern-count-other":"{0} mo. ago"}},"month-narrow":{"displayName":"mo.","relative-type--1":"last mo.","relative-type-0":"this mo.","relative-type-1":"next mo.","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} mo.","relativeTimePattern-count-other":"in {0} mo."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} mo. ago","relativeTimePattern-count-other":"{0} mo. ago"}},"week":{"displayName":"week","relative-type--1":"last week","relative-type-0":"this week","relative-type-1":"next week","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} week","relativeTimePattern-count-other":"in {0} weeks"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} week ago","relativeTimePattern-count-other":"{0} weeks ago"},"relativePeriod":"the week of {0}"},"week-short":{"displayName":"wk.","relative-type--1":"last wk.","relative-type-0":"this wk.","relative-type-1":"next wk.","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} wk.","relativeTimePattern-count-other":"in {0} wk."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} wk. ago","relativeTimePattern-count-other":"{0} wk. ago"},"relativePeriod":"the week of {0}"},"week-narrow":{"displayName":"wk.","relative-type--1":"last wk.","relative-type-0":"this wk.","relative-type-1":"next wk.","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} wk.","relativeTimePattern-count-other":"in {0} wk."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} wk. ago","relativeTimePattern-count-other":"{0} wk. ago"},"relativePeriod":"the week of {0}"},"weekOfMonth":{"displayName":"week of month"},"weekOfMonth-short":{"displayName":"wk. of mo."},"weekOfMonth-narrow":{"displayName":"wk. of mo."},"day":{"displayName":"day","relative-type--1":"yesterday","relative-type-0":"today","relative-type-1":"tomorrow","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} day","relativeTimePattern-count-other":"in {0} days"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} day ago","relativeTimePattern-count-other":"{0} days ago"}},"day-short":{"displayName":"day","relative-type--1":"yesterday","relative-type-0":"today","relative-type-1":"tomorrow","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} day","relativeTimePattern-count-other":"in {0} days"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} day ago","relativeTimePattern-count-other":"{0} days ago"}},"day-narrow":{"displayName":"day","relative-type--1":"yesterday","relative-type-0":"today","relative-type-1":"tomorrow","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} day","relativeTimePattern-count-other":"in {0} days"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} day ago","relativeTimePattern-count-other":"{0} days ago"}},"dayOfYear":{"displayName":"day of year"},"dayOfYear-short":{"displayName":"day of yr."},"dayOfYear-narrow":{"displayName":"day of yr."},"weekday":{"displayName":"day of the week"},"weekday-short":{"displayName":"day of wk."},"weekday-narrow":{"displayName":"day of wk."},"weekdayOfMonth":{"displayName":"weekday of the month"},"weekdayOfMonth-short":{"displayName":"wkday. of mo."},"weekdayOfMonth-narrow":{"displayName":"wkday. of mo."},"sun":{"relative-type--1":"last Sunday","relative-type-0":"this Sunday","relative-type-1":"next Sunday","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Sunday","relativeTimePattern-count-other":"in {0} Sundays"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} Sunday ago","relativeTimePattern-count-other":"{0} Sundays ago"}},"sun-short":{"relative-type--1":"last Sun.","relative-type-0":"this Sun.","relative-type-1":"next Sun.","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Sun.","relativeTimePattern-count-other":"in {0} Sun."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} Sun. ago","relativeTimePattern-count-other":"{0} Sun. ago"}},"sun-narrow":{"relative-type--1":"last Su","relative-type-0":"this Su","relative-type-1":"next Su","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Su","relativeTimePattern-count-other":"in {0} Su"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} Su ago","relativeTimePattern-count-other":"{0} Su ago"}},"mon":{"relative-type--1":"last Monday","relative-type-0":"this Monday","relative-type-1":"next Monday","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Monday","relativeTimePattern-count-other":"in {0} Mondays"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} Monday ago","relativeTimePattern-count-other":"{0} Mondays ago"}},"mon-short":{"relative-type--1":"last Mon.","relative-type-0":"this Mon.","relative-type-1":"next Mon.","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Mon.","relativeTimePattern-count-other":"in {0} Mon."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} Mon. ago","relativeTimePattern-count-other":"{0} Mon. ago"}},"mon-narrow":{"relative-type--1":"last M","relative-type-0":"this M","relative-type-1":"next M","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} M","relativeTimePattern-count-other":"in {0} M"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} M ago","relativeTimePattern-count-other":"{0} M ago"}},"tue":{"relative-type--1":"last Tuesday","relative-type-0":"this Tuesday","relative-type-1":"next Tuesday","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Tuesday","relativeTimePattern-count-other":"in {0} Tuesdays"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} Tuesday ago","relativeTimePattern-count-other":"{0} Tuesdays ago"}},"tue-short":{"relative-type--1":"last Tue.","relative-type-0":"this Tue.","relative-type-1":"next Tue.","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Tue.","relativeTimePattern-count-other":"in {0} Tue."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} Tue. ago","relativeTimePattern-count-other":"{0} Tue. ago"}},"tue-narrow":{"relative-type--1":"last Tu","relative-type-0":"this Tu","relative-type-1":"next Tu","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Tu","relativeTimePattern-count-other":"in {0} Tu"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} Tu ago","relativeTimePattern-count-other":"{0} Tu ago"}},"wed":{"relative-type--1":"last Wednesday","relative-type-0":"this Wednesday","relative-type-1":"next Wednesday","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Wednesday","relativeTimePattern-count-other":"in {0} Wednesdays"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} Wednesday ago","relativeTimePattern-count-other":"{0} Wednesdays ago"}},"wed-short":{"relative-type--1":"last Wed.","relative-type-0":"this Wed.","relative-type-1":"next Wed.","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Wed.","relativeTimePattern-count-other":"in {0} Wed."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} Wed. ago","relativeTimePattern-count-other":"{0} Wed. ago"}},"wed-narrow":{"relative-type--1":"last W","relative-type-0":"this W","relative-type-1":"next W","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} W","relativeTimePattern-count-other":"in {0} W"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} W ago","relativeTimePattern-count-other":"{0} W ago"}},"thu":{"relative-type--1":"last Thursday","relative-type-0":"this Thursday","relative-type-1":"next Thursday","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Thursday","relativeTimePattern-count-other":"in {0} Thursdays"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} Thursday ago","relativeTimePattern-count-other":"{0} Thursdays ago"}},"thu-short":{"relative-type--1":"last Thu.","relative-type-0":"this Thu.","relative-type-1":"next Thu.","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Thu.","relativeTimePattern-count-other":"in {0} Thu."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} Thu. ago","relativeTimePattern-count-other":"{0} Thu. ago"}},"thu-narrow":{"relative-type--1":"last Th","relative-type-0":"this Th","relative-type-1":"next Th","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Th","relativeTimePattern-count-other":"in {0} Th"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} Th ago","relativeTimePattern-count-other":"{0} Th ago"}},"fri":{"relative-type--1":"last Friday","relative-type-0":"this Friday","relative-type-1":"next Friday","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Friday","relativeTimePattern-count-other":"in {0} Fridays"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} Friday ago","relativeTimePattern-count-other":"{0} Fridays ago"}},"fri-short":{"relative-type--1":"last Fri.","relative-type-0":"this Fri.","relative-type-1":"next Fri.","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Fri.","relativeTimePattern-count-other":"in {0} Fri."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} Fri. ago","relativeTimePattern-count-other":"{0} Fri. ago"}},"fri-narrow":{"relative-type--1":"last F","relative-type-0":"this F","relative-type-1":"next F","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} F","relativeTimePattern-count-other":"in {0} F"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} F ago","relativeTimePattern-count-other":"{0} F ago"}},"sat":{"relative-type--1":"last Saturday","relative-type-0":"this Saturday","relative-type-1":"next Saturday","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Saturday","relativeTimePattern-count-other":"in {0} Saturdays"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} Saturday ago","relativeTimePattern-count-other":"{0} Saturdays ago"}},"sat-short":{"relative-type--1":"last Sat.","relative-type-0":"this Sat.","relative-type-1":"next Sat.","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Sat.","relativeTimePattern-count-other":"in {0} Sat."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} Sat. ago","relativeTimePattern-count-other":"{0} Sat. ago"}},"sat-narrow":{"relative-type--1":"last Sa","relative-type-0":"this Sa","relative-type-1":"next Sa","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Sa","relativeTimePattern-count-other":"in {0} Sa"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} Sa ago","relativeTimePattern-count-other":"{0} Sa ago"}},"dayperiod-short":{"displayName":"AM/PM","displayName-alt-variant":"am/pm"},"dayperiod":{"displayName":"AM/PM","displayName-alt-variant":"am/pm"},"dayperiod-narrow":{"displayName":"AM/PM","displayName-alt-variant":"am/pm"},"hour":{"displayName":"hour","relative-type-0":"this hour","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} hour","relativeTimePattern-count-other":"in {0} hours"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} hour ago","relativeTimePattern-count-other":"{0} hours ago"}},"hour-short":{"displayName":"hr.","relative-type-0":"this hour","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} hr.","relativeTimePattern-count-other":"in {0} hr."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} hr. ago","relativeTimePattern-count-other":"{0} hr. ago"}},"hour-narrow":{"displayName":"hr.","relative-type-0":"this hour","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} hr.","relativeTimePattern-count-other":"in {0} hr."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} hr. ago","relativeTimePattern-count-other":"{0} hr. ago"}},"minute":{"displayName":"minute","relative-type-0":"this minute","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} minute","relativeTimePattern-count-other":"in {0} minutes"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} minute ago","relativeTimePattern-count-other":"{0} minutes ago"}},"minute-short":{"displayName":"min.","relative-type-0":"this minute","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} min.","relativeTimePattern-count-other":"in {0} min."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} min. ago","relativeTimePattern-count-other":"{0} min. ago"}},"minute-narrow":{"displayName":"min.","relative-type-0":"this minute","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} min.","relativeTimePattern-count-other":"in {0} min."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} min. ago","relativeTimePattern-count-other":"{0} min. ago"}},"second":{"displayName":"second","relative-type-0":"now","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} second","relativeTimePattern-count-other":"in {0} seconds"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} second ago","relativeTimePattern-count-other":"{0} seconds ago"}},"second-short":{"displayName":"sec.","relative-type-0":"now","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} sec.","relativeTimePattern-count-other":"in {0} sec."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} sec. ago","relativeTimePattern-count-other":"{0} sec. ago"}},"second-narrow":{"displayName":"sec.","relative-type-0":"now","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} sec.","relativeTimePattern-count-other":"in {0} sec."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} sec. ago","relativeTimePattern-count-other":"{0} sec. ago"}},"zone":{"displayName":"time zone"},"zone-short":{"displayName":"zone"},"zone-narrow":{"displayName":"zone"}}},"numbers":{"currencies":{"ADP":{"displayName":"Andorran Peseta","displayName-count-one":"Andorran peseta","displayName-count-other":"Andorran pesetas","symbol":"ADP"},"AED":{"displayName":"United Arab Emirates Dirham","displayName-count-one":"UAE dirham","displayName-count-other":"UAE dirhams","symbol":"AED"},"AFA":{"displayName":"Afghan Afghani (1927–2002)","displayName-count-one":"Afghan afghani (1927–2002)","displayName-count-other":"Afghan afghanis (1927–2002)","symbol":"AFA"},"AFN":{"displayName":"Afghan Afghani","displayName-count-one":"Afghan Afghani","displayName-count-other":"Afghan Afghanis","symbol":"AFN"},"ALK":{"displayName":"Albanian Lek (1946–1965)","displayName-count-one":"Albanian lek (1946–1965)","displayName-count-other":"Albanian lekë (1946–1965)","symbol":"ALK"},"ALL":{"displayName":"Albanian Lek","displayName-count-one":"Albanian lek","displayName-count-other":"Albanian lekë","symbol":"ALL"},"AMD":{"displayName":"Armenian Dram","displayName-count-one":"Armenian dram","displayName-count-other":"Armenian drams","symbol":"AMD"},"ANG":{"displayName":"Netherlands Antillean Guilder","displayName-count-one":"Netherlands Antillean guilder","displayName-count-other":"Netherlands Antillean guilders","symbol":"ANG"},"AOA":{"displayName":"Angolan Kwanza","displayName-count-one":"Angolan kwanza","displayName-count-other":"Angolan kwanzas","symbol":"AOA","symbol-alt-narrow":"Kz"},"AOK":{"displayName":"Angolan Kwanza (1977–1991)","displayName-count-one":"Angolan kwanza (1977–1991)","displayName-count-other":"Angolan kwanzas (1977–1991)","symbol":"AOK"},"AON":{"displayName":"Angolan New Kwanza (1990–2000)","displayName-count-one":"Angolan new kwanza (1990–2000)","displayName-count-other":"Angolan new kwanzas (1990–2000)","symbol":"AON"},"AOR":{"displayName":"Angolan Readjusted Kwanza (1995–1999)","displayName-count-one":"Angolan readjusted kwanza (1995–1999)","displayName-count-other":"Angolan readjusted kwanzas (1995–1999)","symbol":"AOR"},"ARA":{"displayName":"Argentine Austral","displayName-count-one":"Argentine austral","displayName-count-other":"Argentine australs","symbol":"ARA"},"ARL":{"displayName":"Argentine Peso Ley (1970–1983)","displayName-count-one":"Argentine peso ley (1970–1983)","displayName-count-other":"Argentine pesos ley (1970–1983)","symbol":"ARL"},"ARM":{"displayName":"Argentine Peso (1881–1970)","displayName-count-one":"Argentine peso (1881–1970)","displayName-count-other":"Argentine pesos (1881–1970)","symbol":"ARM"},"ARP":{"displayName":"Argentine Peso (1983–1985)","displayName-count-one":"Argentine peso (1983–1985)","displayName-count-other":"Argentine pesos (1983–1985)","symbol":"ARP"},"ARS":{"displayName":"Argentine Peso","displayName-count-one":"Argentine peso","displayName-count-other":"Argentine pesos","symbol":"ARS","symbol-alt-narrow":"$"},"ATS":{"displayName":"Austrian Schilling","displayName-count-one":"Austrian schilling","displayName-count-other":"Austrian schillings","symbol":"ATS"},"AUD":{"displayName":"Australian Dollar","displayName-count-one":"Australian dollar","displayName-count-other":"Australian dollars","symbol":"A$","symbol-alt-narrow":"$"},"AWG":{"displayName":"Aruban Florin","displayName-count-one":"Aruban florin","displayName-count-other":"Aruban florin","symbol":"AWG"},"AZM":{"displayName":"Azerbaijani Manat (1993–2006)","displayName-count-one":"Azerbaijani manat (1993–2006)","displayName-count-other":"Azerbaijani manats (1993–2006)","symbol":"AZM"},"AZN":{"displayName":"Azerbaijani Manat","displayName-count-one":"Azerbaijani manat","displayName-count-other":"Azerbaijani manats","symbol":"AZN"},"BAD":{"displayName":"Bosnia-Herzegovina Dinar (1992–1994)","displayName-count-one":"Bosnia-Herzegovina dinar (1992–1994)","displayName-count-other":"Bosnia-Herzegovina dinars (1992–1994)","symbol":"BAD"},"BAM":{"displayName":"Bosnia-Herzegovina Convertible Mark","displayName-count-one":"Bosnia-Herzegovina convertible mark","displayName-count-other":"Bosnia-Herzegovina convertible marks","symbol":"BAM","symbol-alt-narrow":"KM"},"BAN":{"displayName":"Bosnia-Herzegovina New Dinar (1994–1997)","displayName-count-one":"Bosnia-Herzegovina new dinar (1994–1997)","displayName-count-other":"Bosnia-Herzegovina new dinars (1994–1997)","symbol":"BAN"},"BBD":{"displayName":"Barbadian Dollar","displayName-count-one":"Barbadian dollar","displayName-count-other":"Barbadian dollars","symbol":"BBD","symbol-alt-narrow":"$"},"BDT":{"displayName":"Bangladeshi Taka","displayName-count-one":"Bangladeshi taka","displayName-count-other":"Bangladeshi takas","symbol":"BDT","symbol-alt-narrow":"৳"},"BEC":{"displayName":"Belgian Franc (convertible)","displayName-count-one":"Belgian franc (convertible)","displayName-count-other":"Belgian francs (convertible)","symbol":"BEC"},"BEF":{"displayName":"Belgian Franc","displayName-count-one":"Belgian franc","displayName-count-other":"Belgian francs","symbol":"BEF"},"BEL":{"displayName":"Belgian Franc (financial)","displayName-count-one":"Belgian franc (financial)","displayName-count-other":"Belgian francs (financial)","symbol":"BEL"},"BGL":{"displayName":"Bulgarian Hard Lev","displayName-count-one":"Bulgarian hard lev","displayName-count-other":"Bulgarian hard leva","symbol":"BGL"},"BGM":{"displayName":"Bulgarian Socialist Lev","displayName-count-one":"Bulgarian socialist lev","displayName-count-other":"Bulgarian socialist leva","symbol":"BGM"},"BGN":{"displayName":"Bulgarian Lev","displayName-count-one":"Bulgarian lev","displayName-count-other":"Bulgarian leva","symbol":"BGN"},"BGO":{"displayName":"Bulgarian Lev (1879–1952)","displayName-count-one":"Bulgarian lev (1879–1952)","displayName-count-other":"Bulgarian leva (1879–1952)","symbol":"BGO"},"BHD":{"displayName":"Bahraini Dinar","displayName-count-one":"Bahraini dinar","displayName-count-other":"Bahraini dinars","symbol":"BHD"},"BIF":{"displayName":"Burundian Franc","displayName-count-one":"Burundian franc","displayName-count-other":"Burundian francs","symbol":"BIF"},"BMD":{"displayName":"Bermudan Dollar","displayName-count-one":"Bermudan dollar","displayName-count-other":"Bermudan dollars","symbol":"BMD","symbol-alt-narrow":"$"},"BND":{"displayName":"Brunei Dollar","displayName-count-one":"Brunei dollar","displayName-count-other":"Brunei dollars","symbol":"BND","symbol-alt-narrow":"$"},"BOB":{"displayName":"Bolivian Boliviano","displayName-count-one":"Bolivian boliviano","displayName-count-other":"Bolivian bolivianos","symbol":"BOB","symbol-alt-narrow":"Bs"},"BOL":{"displayName":"Bolivian Boliviano (1863–1963)","displayName-count-one":"Bolivian boliviano (1863–1963)","displayName-count-other":"Bolivian bolivianos (1863–1963)","symbol":"BOL"},"BOP":{"displayName":"Bolivian Peso","displayName-count-one":"Bolivian peso","displayName-count-other":"Bolivian pesos","symbol":"BOP"},"BOV":{"displayName":"Bolivian Mvdol","displayName-count-one":"Bolivian mvdol","displayName-count-other":"Bolivian mvdols","symbol":"BOV"},"BRB":{"displayName":"Brazilian New Cruzeiro (1967–1986)","displayName-count-one":"Brazilian new cruzeiro (1967–1986)","displayName-count-other":"Brazilian new cruzeiros (1967–1986)","symbol":"BRB"},"BRC":{"displayName":"Brazilian Cruzado (1986–1989)","displayName-count-one":"Brazilian cruzado (1986–1989)","displayName-count-other":"Brazilian cruzados (1986–1989)","symbol":"BRC"},"BRE":{"displayName":"Brazilian Cruzeiro (1990–1993)","displayName-count-one":"Brazilian cruzeiro (1990–1993)","displayName-count-other":"Brazilian cruzeiros (1990–1993)","symbol":"BRE"},"BRL":{"displayName":"Brazilian Real","displayName-count-one":"Brazilian real","displayName-count-other":"Brazilian reals","symbol":"R$","symbol-alt-narrow":"R$"},"BRN":{"displayName":"Brazilian New Cruzado (1989–1990)","displayName-count-one":"Brazilian new cruzado (1989–1990)","displayName-count-other":"Brazilian new cruzados (1989–1990)","symbol":"BRN"},"BRR":{"displayName":"Brazilian Cruzeiro (1993–1994)","displayName-count-one":"Brazilian cruzeiro (1993–1994)","displayName-count-other":"Brazilian cruzeiros (1993–1994)","symbol":"BRR"},"BRZ":{"displayName":"Brazilian Cruzeiro (1942–1967)","displayName-count-one":"Brazilian cruzeiro (1942–1967)","displayName-count-other":"Brazilian cruzeiros (1942–1967)","symbol":"BRZ"},"BSD":{"displayName":"Bahamian Dollar","displayName-count-one":"Bahamian dollar","displayName-count-other":"Bahamian dollars","symbol":"BSD","symbol-alt-narrow":"$"},"BTN":{"displayName":"Bhutanese Ngultrum","displayName-count-one":"Bhutanese ngultrum","displayName-count-other":"Bhutanese ngultrums","symbol":"BTN"},"BUK":{"displayName":"Burmese Kyat","displayName-count-one":"Burmese kyat","displayName-count-other":"Burmese kyats","symbol":"BUK"},"BWP":{"displayName":"Botswanan Pula","displayName-count-one":"Botswanan pula","displayName-count-other":"Botswanan pulas","symbol":"BWP","symbol-alt-narrow":"P"},"BYB":{"displayName":"Belarusian Ruble (1994–1999)","displayName-count-one":"Belarusian ruble (1994–1999)","displayName-count-other":"Belarusian rubles (1994–1999)","symbol":"BYB"},"BYN":{"displayName":"Belarusian Ruble","displayName-count-one":"Belarusian ruble","displayName-count-other":"Belarusian rubles","symbol":"BYN","symbol-alt-narrow":"р."},"BYR":{"displayName":"Belarusian Ruble (2000–2016)","displayName-count-one":"Belarusian ruble (2000–2016)","displayName-count-other":"Belarusian rubles (2000–2016)","symbol":"BYR"},"BZD":{"displayName":"Belize Dollar","displayName-count-one":"Belize dollar","displayName-count-other":"Belize dollars","symbol":"BZD","symbol-alt-narrow":"$"},"CAD":{"displayName":"Canadian Dollar","displayName-count-one":"Canadian dollar","displayName-count-other":"Canadian dollars","symbol":"CA$","symbol-alt-narrow":"$"},"CDF":{"displayName":"Congolese Franc","displayName-count-one":"Congolese franc","displayName-count-other":"Congolese francs","symbol":"CDF"},"CHE":{"displayName":"WIR Euro","displayName-count-one":"WIR euro","displayName-count-other":"WIR euros","symbol":"CHE"},"CHF":{"displayName":"Swiss Franc","displayName-count-one":"Swiss franc","displayName-count-other":"Swiss francs","symbol":"CHF"},"CHW":{"displayName":"WIR Franc","displayName-count-one":"WIR franc","displayName-count-other":"WIR francs","symbol":"CHW"},"CLE":{"displayName":"Chilean Escudo","displayName-count-one":"Chilean escudo","displayName-count-other":"Chilean escudos","symbol":"CLE"},"CLF":{"displayName":"Chilean Unit of Account (UF)","displayName-count-one":"Chilean unit of account (UF)","displayName-count-other":"Chilean units of account (UF)","symbol":"CLF"},"CLP":{"displayName":"Chilean Peso","displayName-count-one":"Chilean peso","displayName-count-other":"Chilean pesos","symbol":"CLP","symbol-alt-narrow":"$"},"CNH":{"displayName":"Chinese Yuan (offshore)","displayName-count-one":"Chinese yuan (offshore)","displayName-count-other":"Chinese yuan (offshore)","symbol":"CNH"},"CNX":{"displayName":"Chinese People’s Bank Dollar","displayName-count-one":"Chinese People’s Bank dollar","displayName-count-other":"Chinese People’s Bank dollars","symbol":"CNX"},"CNY":{"displayName":"Chinese Yuan","displayName-count-one":"Chinese yuan","displayName-count-other":"Chinese yuan","symbol":"CN¥","symbol-alt-narrow":"¥"},"COP":{"displayName":"Colombian Peso","displayName-count-one":"Colombian peso","displayName-count-other":"Colombian pesos","symbol":"COP","symbol-alt-narrow":"$"},"COU":{"displayName":"Colombian Real Value Unit","displayName-count-one":"Colombian real value unit","displayName-count-other":"Colombian real value units","symbol":"COU"},"CRC":{"displayName":"Costa Rican Colón","displayName-count-one":"Costa Rican colón","displayName-count-other":"Costa Rican colóns","symbol":"CRC","symbol-alt-narrow":"₡"},"CSD":{"displayName":"Serbian Dinar (2002–2006)","displayName-count-one":"Serbian dinar (2002–2006)","displayName-count-other":"Serbian dinars (2002–2006)","symbol":"CSD"},"CSK":{"displayName":"Czechoslovak Hard Koruna","displayName-count-one":"Czechoslovak hard koruna","displayName-count-other":"Czechoslovak hard korunas","symbol":"CSK"},"CUC":{"displayName":"Cuban Convertible Peso","displayName-count-one":"Cuban convertible peso","displayName-count-other":"Cuban convertible pesos","symbol":"CUC","symbol-alt-narrow":"$"},"CUP":{"displayName":"Cuban Peso","displayName-count-one":"Cuban peso","displayName-count-other":"Cuban pesos","symbol":"CUP","symbol-alt-narrow":"$"},"CVE":{"displayName":"Cape Verdean Escudo","displayName-count-one":"Cape Verdean escudo","displayName-count-other":"Cape Verdean escudos","symbol":"CVE"},"CYP":{"displayName":"Cypriot Pound","displayName-count-one":"Cypriot pound","displayName-count-other":"Cypriot pounds","symbol":"CYP"},"CZK":{"displayName":"Czech Koruna","displayName-count-one":"Czech koruna","displayName-count-other":"Czech korunas","symbol":"CZK","symbol-alt-narrow":"Kč"},"DDM":{"displayName":"East German Mark","displayName-count-one":"East German mark","displayName-count-other":"East German marks","symbol":"DDM"},"DEM":{"displayName":"German Mark","displayName-count-one":"German mark","displayName-count-other":"German marks","symbol":"DEM"},"DJF":{"displayName":"Djiboutian Franc","displayName-count-one":"Djiboutian franc","displayName-count-other":"Djiboutian francs","symbol":"DJF"},"DKK":{"displayName":"Danish Krone","displayName-count-one":"Danish krone","displayName-count-other":"Danish kroner","symbol":"DKK","symbol-alt-narrow":"kr"},"DOP":{"displayName":"Dominican Peso","displayName-count-one":"Dominican peso","displayName-count-other":"Dominican pesos","symbol":"DOP","symbol-alt-narrow":"$"},"DZD":{"displayName":"Algerian Dinar","displayName-count-one":"Algerian dinar","displayName-count-other":"Algerian dinars","symbol":"DZD"},"ECS":{"displayName":"Ecuadorian Sucre","displayName-count-one":"Ecuadorian sucre","displayName-count-other":"Ecuadorian sucres","symbol":"ECS"},"ECV":{"displayName":"Ecuadorian Unit of Constant Value","displayName-count-one":"Ecuadorian unit of constant value","displayName-count-other":"Ecuadorian units of constant value","symbol":"ECV"},"EEK":{"displayName":"Estonian Kroon","displayName-count-one":"Estonian kroon","displayName-count-other":"Estonian kroons","symbol":"EEK"},"EGP":{"displayName":"Egyptian Pound","displayName-count-one":"Egyptian pound","displayName-count-other":"Egyptian pounds","symbol":"EGP","symbol-alt-narrow":"E£"},"ERN":{"displayName":"Eritrean Nakfa","displayName-count-one":"Eritrean nakfa","displayName-count-other":"Eritrean nakfas","symbol":"ERN"},"ESA":{"displayName":"Spanish Peseta (A account)","displayName-count-one":"Spanish peseta (A account)","displayName-count-other":"Spanish pesetas (A account)","symbol":"ESA"},"ESB":{"displayName":"Spanish Peseta (convertible account)","displayName-count-one":"Spanish peseta (convertible account)","displayName-count-other":"Spanish pesetas (convertible account)","symbol":"ESB"},"ESP":{"displayName":"Spanish Peseta","displayName-count-one":"Spanish peseta","displayName-count-other":"Spanish pesetas","symbol":"ESP","symbol-alt-narrow":"₧"},"ETB":{"displayName":"Ethiopian Birr","displayName-count-one":"Ethiopian birr","displayName-count-other":"Ethiopian birrs","symbol":"ETB"},"EUR":{"displayName":"Euro","displayName-count-one":"euro","displayName-count-other":"euros","symbol":"€","symbol-alt-narrow":"€"},"FIM":{"displayName":"Finnish Markka","displayName-count-one":"Finnish markka","displayName-count-other":"Finnish markkas","symbol":"FIM"},"FJD":{"displayName":"Fijian Dollar","displayName-count-one":"Fijian dollar","displayName-count-other":"Fijian dollars","symbol":"FJD","symbol-alt-narrow":"$"},"FKP":{"displayName":"Falkland Islands Pound","displayName-count-one":"Falkland Islands pound","displayName-count-other":"Falkland Islands pounds","symbol":"FKP","symbol-alt-narrow":"£"},"FRF":{"displayName":"French Franc","displayName-count-one":"French franc","displayName-count-other":"French francs","symbol":"FRF"},"GBP":{"displayName":"British Pound","displayName-count-one":"British pound","displayName-count-other":"British pounds","symbol":"£","symbol-alt-narrow":"£"},"GEK":{"displayName":"Georgian Kupon Larit","displayName-count-one":"Georgian kupon larit","displayName-count-other":"Georgian kupon larits","symbol":"GEK"},"GEL":{"displayName":"Georgian Lari","displayName-count-one":"Georgian lari","displayName-count-other":"Georgian laris","symbol":"GEL","symbol-alt-narrow":"₾"},"GHC":{"displayName":"Ghanaian Cedi (1979–2007)","displayName-count-one":"Ghanaian cedi (1979–2007)","displayName-count-other":"Ghanaian cedis (1979–2007)","symbol":"GHC"},"GHS":{"displayName":"Ghanaian Cedi","displayName-count-one":"Ghanaian cedi","displayName-count-other":"Ghanaian cedis","symbol":"GHS"},"GIP":{"displayName":"Gibraltar Pound","displayName-count-one":"Gibraltar pound","displayName-count-other":"Gibraltar pounds","symbol":"GIP","symbol-alt-narrow":"£"},"GMD":{"displayName":"Gambian Dalasi","displayName-count-one":"Gambian dalasi","displayName-count-other":"Gambian dalasis","symbol":"GMD"},"GNF":{"displayName":"Guinean Franc","displayName-count-one":"Guinean franc","displayName-count-other":"Guinean francs","symbol":"GNF","symbol-alt-narrow":"FG"},"GNS":{"displayName":"Guinean Syli","displayName-count-one":"Guinean syli","displayName-count-other":"Guinean sylis","symbol":"GNS"},"GQE":{"displayName":"Equatorial Guinean Ekwele","displayName-count-one":"Equatorial Guinean ekwele","displayName-count-other":"Equatorial Guinean ekwele","symbol":"GQE"},"GRD":{"displayName":"Greek Drachma","displayName-count-one":"Greek drachma","displayName-count-other":"Greek drachmas","symbol":"GRD"},"GTQ":{"displayName":"Guatemalan Quetzal","displayName-count-one":"Guatemalan quetzal","displayName-count-other":"Guatemalan quetzals","symbol":"GTQ","symbol-alt-narrow":"Q"},"GWE":{"displayName":"Portuguese Guinea Escudo","displayName-count-one":"Portuguese Guinea escudo","displayName-count-other":"Portuguese Guinea escudos","symbol":"GWE"},"GWP":{"displayName":"Guinea-Bissau Peso","displayName-count-one":"Guinea-Bissau peso","displayName-count-other":"Guinea-Bissau pesos","symbol":"GWP"},"GYD":{"displayName":"Guyanaese Dollar","displayName-count-one":"Guyanaese dollar","displayName-count-other":"Guyanaese dollars","symbol":"GYD","symbol-alt-narrow":"$"},"HKD":{"displayName":"Hong Kong Dollar","displayName-count-one":"Hong Kong dollar","displayName-count-other":"Hong Kong dollars","symbol":"HK$","symbol-alt-narrow":"$"},"HNL":{"displayName":"Honduran Lempira","displayName-count-one":"Honduran lempira","displayName-count-other":"Honduran lempiras","symbol":"HNL","symbol-alt-narrow":"L"},"HRD":{"displayName":"Croatian Dinar","displayName-count-one":"Croatian dinar","displayName-count-other":"Croatian dinars","symbol":"HRD"},"HRK":{"displayName":"Croatian Kuna","displayName-count-one":"Croatian kuna","displayName-count-other":"Croatian kunas","symbol":"HRK","symbol-alt-narrow":"kn"},"HTG":{"displayName":"Haitian Gourde","displayName-count-one":"Haitian gourde","displayName-count-other":"Haitian gourdes","symbol":"HTG"},"HUF":{"displayName":"Hungarian Forint","displayName-count-one":"Hungarian forint","displayName-count-other":"Hungarian forints","symbol":"HUF","symbol-alt-narrow":"Ft"},"IDR":{"displayName":"Indonesian Rupiah","displayName-count-one":"Indonesian rupiah","displayName-count-other":"Indonesian rupiahs","symbol":"IDR","symbol-alt-narrow":"Rp"},"IEP":{"displayName":"Irish Pound","displayName-count-one":"Irish pound","displayName-count-other":"Irish pounds","symbol":"IEP"},"ILP":{"displayName":"Israeli Pound","displayName-count-one":"Israeli pound","displayName-count-other":"Israeli pounds","symbol":"ILP"},"ILR":{"displayName":"Israeli Shekel (1980–1985)","displayName-count-one":"Israeli shekel (1980–1985)","displayName-count-other":"Israeli shekels (1980–1985)","symbol":"ILR"},"ILS":{"displayName":"Israeli New Shekel","displayName-count-one":"Israeli new shekel","displayName-count-other":"Israeli new shekels","symbol":"₪","symbol-alt-narrow":"₪"},"INR":{"displayName":"Indian Rupee","displayName-count-one":"Indian rupee","displayName-count-other":"Indian rupees","symbol":"₹","symbol-alt-narrow":"₹"},"IQD":{"displayName":"Iraqi Dinar","displayName-count-one":"Iraqi dinar","displayName-count-other":"Iraqi dinars","symbol":"IQD"},"IRR":{"displayName":"Iranian Rial","displayName-count-one":"Iranian rial","displayName-count-other":"Iranian rials","symbol":"IRR"},"ISJ":{"displayName":"Icelandic Króna (1918–1981)","displayName-count-one":"Icelandic króna (1918–1981)","displayName-count-other":"Icelandic krónur (1918–1981)","symbol":"ISJ"},"ISK":{"displayName":"Icelandic Króna","displayName-count-one":"Icelandic króna","displayName-count-other":"Icelandic krónur","symbol":"ISK","symbol-alt-narrow":"kr"},"ITL":{"displayName":"Italian Lira","displayName-count-one":"Italian lira","displayName-count-other":"Italian liras","symbol":"ITL"},"JMD":{"displayName":"Jamaican Dollar","displayName-count-one":"Jamaican dollar","displayName-count-other":"Jamaican dollars","symbol":"JMD","symbol-alt-narrow":"$"},"JOD":{"displayName":"Jordanian Dinar","displayName-count-one":"Jordanian dinar","displayName-count-other":"Jordanian dinars","symbol":"JOD"},"JPY":{"displayName":"Japanese Yen","displayName-count-one":"Japanese yen","displayName-count-other":"Japanese yen","symbol":"¥","symbol-alt-narrow":"¥"},"KES":{"displayName":"Kenyan Shilling","displayName-count-one":"Kenyan shilling","displayName-count-other":"Kenyan shillings","symbol":"KES"},"KGS":{"displayName":"Kyrgystani Som","displayName-count-one":"Kyrgystani som","displayName-count-other":"Kyrgystani soms","symbol":"KGS"},"KHR":{"displayName":"Cambodian Riel","displayName-count-one":"Cambodian riel","displayName-count-other":"Cambodian riels","symbol":"KHR","symbol-alt-narrow":"៛"},"KMF":{"displayName":"Comorian Franc","displayName-count-one":"Comorian franc","displayName-count-other":"Comorian francs","symbol":"KMF","symbol-alt-narrow":"CF"},"KPW":{"displayName":"North Korean Won","displayName-count-one":"North Korean won","displayName-count-other":"North Korean won","symbol":"KPW","symbol-alt-narrow":"₩"},"KRH":{"displayName":"South Korean Hwan (1953–1962)","displayName-count-one":"South Korean hwan (1953–1962)","displayName-count-other":"South Korean hwan (1953–1962)","symbol":"KRH"},"KRO":{"displayName":"South Korean Won (1945–1953)","displayName-count-one":"South Korean won (1945–1953)","displayName-count-other":"South Korean won (1945–1953)","symbol":"KRO"},"KRW":{"displayName":"South Korean Won","displayName-count-one":"South Korean won","displayName-count-other":"South Korean won","symbol":"₩","symbol-alt-narrow":"₩"},"KWD":{"displayName":"Kuwaiti Dinar","displayName-count-one":"Kuwaiti dinar","displayName-count-other":"Kuwaiti dinars","symbol":"KWD"},"KYD":{"displayName":"Cayman Islands Dollar","displayName-count-one":"Cayman Islands dollar","displayName-count-other":"Cayman Islands dollars","symbol":"KYD","symbol-alt-narrow":"$"},"KZT":{"displayName":"Kazakhstani Tenge","displayName-count-one":"Kazakhstani tenge","displayName-count-other":"Kazakhstani tenges","symbol":"KZT","symbol-alt-narrow":"₸"},"LAK":{"displayName":"Laotian Kip","displayName-count-one":"Laotian kip","displayName-count-other":"Laotian kips","symbol":"LAK","symbol-alt-narrow":"₭"},"LBP":{"displayName":"Lebanese Pound","displayName-count-one":"Lebanese pound","displayName-count-other":"Lebanese pounds","symbol":"LBP","symbol-alt-narrow":"L£"},"LKR":{"displayName":"Sri Lankan Rupee","displayName-count-one":"Sri Lankan rupee","displayName-count-other":"Sri Lankan rupees","symbol":"LKR","symbol-alt-narrow":"Rs"},"LRD":{"displayName":"Liberian Dollar","displayName-count-one":"Liberian dollar","displayName-count-other":"Liberian dollars","symbol":"LRD","symbol-alt-narrow":"$"},"LSL":{"displayName":"Lesotho Loti","displayName-count-one":"Lesotho loti","displayName-count-other":"Lesotho lotis","symbol":"LSL"},"LTL":{"displayName":"Lithuanian Litas","displayName-count-one":"Lithuanian litas","displayName-count-other":"Lithuanian litai","symbol":"LTL","symbol-alt-narrow":"Lt"},"LTT":{"displayName":"Lithuanian Talonas","displayName-count-one":"Lithuanian talonas","displayName-count-other":"Lithuanian talonases","symbol":"LTT"},"LUC":{"displayName":"Luxembourgian Convertible Franc","displayName-count-one":"Luxembourgian convertible franc","displayName-count-other":"Luxembourgian convertible francs","symbol":"LUC"},"LUF":{"displayName":"Luxembourgian Franc","displayName-count-one":"Luxembourgian franc","displayName-count-other":"Luxembourgian francs","symbol":"LUF"},"LUL":{"displayName":"Luxembourg Financial Franc","displayName-count-one":"Luxembourg financial franc","displayName-count-other":"Luxembourg financial francs","symbol":"LUL"},"LVL":{"displayName":"Latvian Lats","displayName-count-one":"Latvian lats","displayName-count-other":"Latvian lati","symbol":"LVL","symbol-alt-narrow":"Ls"},"LVR":{"displayName":"Latvian Ruble","displayName-count-one":"Latvian ruble","displayName-count-other":"Latvian rubles","symbol":"LVR"},"LYD":{"displayName":"Libyan Dinar","displayName-count-one":"Libyan dinar","displayName-count-other":"Libyan dinars","symbol":"LYD"},"MAD":{"displayName":"Moroccan Dirham","displayName-count-one":"Moroccan dirham","displayName-count-other":"Moroccan dirhams","symbol":"MAD"},"MAF":{"displayName":"Moroccan Franc","displayName-count-one":"Moroccan franc","displayName-count-other":"Moroccan francs","symbol":"MAF"},"MCF":{"displayName":"Monegasque Franc","displayName-count-one":"Monegasque franc","displayName-count-other":"Monegasque francs","symbol":"MCF"},"MDC":{"displayName":"Moldovan Cupon","displayName-count-one":"Moldovan cupon","displayName-count-other":"Moldovan cupon","symbol":"MDC"},"MDL":{"displayName":"Moldovan Leu","displayName-count-one":"Moldovan leu","displayName-count-other":"Moldovan lei","symbol":"MDL"},"MGA":{"displayName":"Malagasy Ariary","displayName-count-one":"Malagasy ariary","displayName-count-other":"Malagasy ariaries","symbol":"MGA","symbol-alt-narrow":"Ar"},"MGF":{"displayName":"Malagasy Franc","displayName-count-one":"Malagasy franc","displayName-count-other":"Malagasy francs","symbol":"MGF"},"MKD":{"displayName":"Macedonian Denar","displayName-count-one":"Macedonian denar","displayName-count-other":"Macedonian denari","symbol":"MKD"},"MKN":{"displayName":"Macedonian Denar (1992–1993)","displayName-count-one":"Macedonian denar (1992–1993)","displayName-count-other":"Macedonian denari (1992–1993)","symbol":"MKN"},"MLF":{"displayName":"Malian Franc","displayName-count-one":"Malian franc","displayName-count-other":"Malian francs","symbol":"MLF"},"MMK":{"displayName":"Myanmar Kyat","displayName-count-one":"Myanmar kyat","displayName-count-other":"Myanmar kyats","symbol":"MMK","symbol-alt-narrow":"K"},"MNT":{"displayName":"Mongolian Tugrik","displayName-count-one":"Mongolian tugrik","displayName-count-other":"Mongolian tugriks","symbol":"MNT","symbol-alt-narrow":"₮"},"MOP":{"displayName":"Macanese Pataca","displayName-count-one":"Macanese pataca","displayName-count-other":"Macanese patacas","symbol":"MOP"},"MRO":{"displayName":"Mauritanian Ouguiya","displayName-count-one":"Mauritanian ouguiya","displayName-count-other":"Mauritanian ouguiyas","symbol":"MRO"},"MTL":{"displayName":"Maltese Lira","displayName-count-one":"Maltese lira","displayName-count-other":"Maltese lira","symbol":"MTL"},"MTP":{"displayName":"Maltese Pound","displayName-count-one":"Maltese pound","displayName-count-other":"Maltese pounds","symbol":"MTP"},"MUR":{"displayName":"Mauritian Rupee","displayName-count-one":"Mauritian rupee","displayName-count-other":"Mauritian rupees","symbol":"MUR","symbol-alt-narrow":"Rs"},"MVP":{"displayName":"Maldivian Rupee (1947–1981)","displayName-count-one":"Maldivian rupee (1947–1981)","displayName-count-other":"Maldivian rupees (1947–1981)","symbol":"MVP"},"MVR":{"displayName":"Maldivian Rufiyaa","displayName-count-one":"Maldivian rufiyaa","displayName-count-other":"Maldivian rufiyaas","symbol":"MVR"},"MWK":{"displayName":"Malawian Kwacha","displayName-count-one":"Malawian kwacha","displayName-count-other":"Malawian kwachas","symbol":"MWK"},"MXN":{"displayName":"Mexican Peso","displayName-count-one":"Mexican peso","displayName-count-other":"Mexican pesos","symbol":"MX$","symbol-alt-narrow":"$"},"MXP":{"displayName":"Mexican Silver Peso (1861–1992)","displayName-count-one":"Mexican silver peso (1861–1992)","displayName-count-other":"Mexican silver pesos (1861–1992)","symbol":"MXP"},"MXV":{"displayName":"Mexican Investment Unit","displayName-count-one":"Mexican investment unit","displayName-count-other":"Mexican investment units","symbol":"MXV"},"MYR":{"displayName":"Malaysian Ringgit","displayName-count-one":"Malaysian ringgit","displayName-count-other":"Malaysian ringgits","symbol":"MYR","symbol-alt-narrow":"RM"},"MZE":{"displayName":"Mozambican Escudo","displayName-count-one":"Mozambican escudo","displayName-count-other":"Mozambican escudos","symbol":"MZE"},"MZM":{"displayName":"Mozambican Metical (1980–2006)","displayName-count-one":"Mozambican metical (1980–2006)","displayName-count-other":"Mozambican meticals (1980–2006)","symbol":"MZM"},"MZN":{"displayName":"Mozambican Metical","displayName-count-one":"Mozambican metical","displayName-count-other":"Mozambican meticals","symbol":"MZN"},"NAD":{"displayName":"Namibian Dollar","displayName-count-one":"Namibian dollar","displayName-count-other":"Namibian dollars","symbol":"NAD","symbol-alt-narrow":"$"},"NGN":{"displayName":"Nigerian Naira","displayName-count-one":"Nigerian naira","displayName-count-other":"Nigerian nairas","symbol":"NGN","symbol-alt-narrow":"₦"},"NIC":{"displayName":"Nicaraguan Córdoba (1988–1991)","displayName-count-one":"Nicaraguan córdoba (1988–1991)","displayName-count-other":"Nicaraguan córdobas (1988–1991)","symbol":"NIC"},"NIO":{"displayName":"Nicaraguan Córdoba","displayName-count-one":"Nicaraguan córdoba","displayName-count-other":"Nicaraguan córdobas","symbol":"NIO","symbol-alt-narrow":"C$"},"NLG":{"displayName":"Dutch Guilder","displayName-count-one":"Dutch guilder","displayName-count-other":"Dutch guilders","symbol":"NLG"},"NOK":{"displayName":"Norwegian Krone","displayName-count-one":"Norwegian krone","displayName-count-other":"Norwegian kroner","symbol":"NOK","symbol-alt-narrow":"kr"},"NPR":{"displayName":"Nepalese Rupee","displayName-count-one":"Nepalese rupee","displayName-count-other":"Nepalese rupees","symbol":"NPR","symbol-alt-narrow":"Rs"},"NZD":{"displayName":"New Zealand Dollar","displayName-count-one":"New Zealand dollar","displayName-count-other":"New Zealand dollars","symbol":"NZ$","symbol-alt-narrow":"$"},"OMR":{"displayName":"Omani Rial","displayName-count-one":"Omani rial","displayName-count-other":"Omani rials","symbol":"OMR"},"PAB":{"displayName":"Panamanian Balboa","displayName-count-one":"Panamanian balboa","displayName-count-other":"Panamanian balboas","symbol":"PAB"},"PEI":{"displayName":"Peruvian Inti","displayName-count-one":"Peruvian inti","displayName-count-other":"Peruvian intis","symbol":"PEI"},"PEN":{"displayName":"Peruvian Sol","displayName-count-one":"Peruvian sol","displayName-count-other":"Peruvian soles","symbol":"PEN"},"PES":{"displayName":"Peruvian Sol (1863–1965)","displayName-count-one":"Peruvian sol (1863–1965)","displayName-count-other":"Peruvian soles (1863–1965)","symbol":"PES"},"PGK":{"displayName":"Papua New Guinean Kina","displayName-count-one":"Papua New Guinean kina","displayName-count-other":"Papua New Guinean kina","symbol":"PGK"},"PHP":{"displayName":"Philippine Piso","displayName-count-one":"Philippine piso","displayName-count-other":"Philippine pisos","symbol":"PHP","symbol-alt-narrow":"₱"},"PKR":{"displayName":"Pakistani Rupee","displayName-count-one":"Pakistani rupee","displayName-count-other":"Pakistani rupees","symbol":"PKR","symbol-alt-narrow":"Rs"},"PLN":{"displayName":"Polish Zloty","displayName-count-one":"Polish zloty","displayName-count-other":"Polish zlotys","symbol":"PLN","symbol-alt-narrow":"zł"},"PLZ":{"displayName":"Polish Zloty (1950–1995)","displayName-count-one":"Polish zloty (PLZ)","displayName-count-other":"Polish zlotys (PLZ)","symbol":"PLZ"},"PTE":{"displayName":"Portuguese Escudo","displayName-count-one":"Portuguese escudo","displayName-count-other":"Portuguese escudos","symbol":"PTE"},"PYG":{"displayName":"Paraguayan Guarani","displayName-count-one":"Paraguayan guarani","displayName-count-other":"Paraguayan guaranis","symbol":"PYG","symbol-alt-narrow":"₲"},"QAR":{"displayName":"Qatari Rial","displayName-count-one":"Qatari rial","displayName-count-other":"Qatari rials","symbol":"QAR"},"RHD":{"displayName":"Rhodesian Dollar","displayName-count-one":"Rhodesian dollar","displayName-count-other":"Rhodesian dollars","symbol":"RHD"},"ROL":{"displayName":"Romanian Leu (1952–2006)","displayName-count-one":"Romanian leu (1952–2006)","displayName-count-other":"Romanian Lei (1952–2006)","symbol":"ROL"},"RON":{"displayName":"Romanian Leu","displayName-count-one":"Romanian leu","displayName-count-other":"Romanian lei","symbol":"RON","symbol-alt-narrow":"lei"},"RSD":{"displayName":"Serbian Dinar","displayName-count-one":"Serbian dinar","displayName-count-other":"Serbian dinars","symbol":"RSD"},"RUB":{"displayName":"Russian Ruble","displayName-count-one":"Russian ruble","displayName-count-other":"Russian rubles","symbol":"RUB","symbol-alt-narrow":"₽"},"RUR":{"displayName":"Russian Ruble (1991–1998)","displayName-count-one":"Russian ruble (1991–1998)","displayName-count-other":"Russian rubles (1991–1998)","symbol":"RUR","symbol-alt-narrow":"р."},"RWF":{"displayName":"Rwandan Franc","displayName-count-one":"Rwandan franc","displayName-count-other":"Rwandan francs","symbol":"RWF","symbol-alt-narrow":"RF"},"SAR":{"displayName":"Saudi Riyal","displayName-count-one":"Saudi riyal","displayName-count-other":"Saudi riyals","symbol":"SAR"},"SBD":{"displayName":"Solomon Islands Dollar","displayName-count-one":"Solomon Islands dollar","displayName-count-other":"Solomon Islands dollars","symbol":"SBD","symbol-alt-narrow":"$"},"SCR":{"displayName":"Seychellois Rupee","displayName-count-one":"Seychellois rupee","displayName-count-other":"Seychellois rupees","symbol":"SCR"},"SDD":{"displayName":"Sudanese Dinar (1992–2007)","displayName-count-one":"Sudanese dinar (1992–2007)","displayName-count-other":"Sudanese dinars (1992–2007)","symbol":"SDD"},"SDG":{"displayName":"Sudanese Pound","displayName-count-one":"Sudanese pound","displayName-count-other":"Sudanese pounds","symbol":"SDG"},"SDP":{"displayName":"Sudanese Pound (1957–1998)","displayName-count-one":"Sudanese pound (1957–1998)","displayName-count-other":"Sudanese pounds (1957–1998)","symbol":"SDP"},"SEK":{"displayName":"Swedish Krona","displayName-count-one":"Swedish krona","displayName-count-other":"Swedish kronor","symbol":"SEK","symbol-alt-narrow":"kr"},"SGD":{"displayName":"Singapore Dollar","displayName-count-one":"Singapore dollar","displayName-count-other":"Singapore dollars","symbol":"SGD","symbol-alt-narrow":"$"},"SHP":{"displayName":"St. Helena Pound","displayName-count-one":"St. Helena pound","displayName-count-other":"St. Helena pounds","symbol":"SHP","symbol-alt-narrow":"£"},"SIT":{"displayName":"Slovenian Tolar","displayName-count-one":"Slovenian tolar","displayName-count-other":"Slovenian tolars","symbol":"SIT"},"SKK":{"displayName":"Slovak Koruna","displayName-count-one":"Slovak koruna","displayName-count-other":"Slovak korunas","symbol":"SKK"},"SLL":{"displayName":"Sierra Leonean Leone","displayName-count-one":"Sierra Leonean leone","displayName-count-other":"Sierra Leonean leones","symbol":"SLL"},"SOS":{"displayName":"Somali Shilling","displayName-count-one":"Somali shilling","displayName-count-other":"Somali shillings","symbol":"SOS"},"SRD":{"displayName":"Surinamese Dollar","displayName-count-one":"Surinamese dollar","displayName-count-other":"Surinamese dollars","symbol":"SRD","symbol-alt-narrow":"$"},"SRG":{"displayName":"Surinamese Guilder","displayName-count-one":"Surinamese guilder","displayName-count-other":"Surinamese guilders","symbol":"SRG"},"SSP":{"displayName":"South Sudanese Pound","displayName-count-one":"South Sudanese pound","displayName-count-other":"South Sudanese pounds","symbol":"SSP","symbol-alt-narrow":"£"},"STD":{"displayName":"São Tomé & Príncipe Dobra","displayName-count-one":"São Tomé & Príncipe dobra","displayName-count-other":"São Tomé & Príncipe dobras","symbol":"STD","symbol-alt-narrow":"Db"},"STN":{"displayName":"São Tomé & Príncipe Dobra (2018)","displayName-count-one":"São Tomé & Príncipe dobra (2018)","displayName-count-other":"São Tomé & Príncipe dobras (2018)","symbol":"STN"},"SUR":{"displayName":"Soviet Rouble","displayName-count-one":"Soviet rouble","displayName-count-other":"Soviet roubles","symbol":"SUR"},"SVC":{"displayName":"Salvadoran Colón","displayName-count-one":"Salvadoran colón","displayName-count-other":"Salvadoran colones","symbol":"SVC"},"SYP":{"displayName":"Syrian Pound","displayName-count-one":"Syrian pound","displayName-count-other":"Syrian pounds","symbol":"SYP","symbol-alt-narrow":"£"},"SZL":{"displayName":"Swazi Lilangeni","displayName-count-one":"Swazi lilangeni","displayName-count-other":"Swazi emalangeni","symbol":"SZL"},"THB":{"displayName":"Thai Baht","displayName-count-one":"Thai baht","displayName-count-other":"Thai baht","symbol":"THB","symbol-alt-narrow":"฿"},"TJR":{"displayName":"Tajikistani Ruble","displayName-count-one":"Tajikistani ruble","displayName-count-other":"Tajikistani rubles","symbol":"TJR"},"TJS":{"displayName":"Tajikistani Somoni","displayName-count-one":"Tajikistani somoni","displayName-count-other":"Tajikistani somonis","symbol":"TJS"},"TMM":{"displayName":"Turkmenistani Manat (1993–2009)","displayName-count-one":"Turkmenistani manat (1993–2009)","displayName-count-other":"Turkmenistani manat (1993–2009)","symbol":"TMM"},"TMT":{"displayName":"Turkmenistani Manat","displayName-count-one":"Turkmenistani manat","displayName-count-other":"Turkmenistani manat","symbol":"TMT"},"TND":{"displayName":"Tunisian Dinar","displayName-count-one":"Tunisian dinar","displayName-count-other":"Tunisian dinars","symbol":"TND"},"TOP":{"displayName":"Tongan Paʻanga","displayName-count-one":"Tongan paʻanga","displayName-count-other":"Tongan paʻanga","symbol":"TOP","symbol-alt-narrow":"T$"},"TPE":{"displayName":"Timorese Escudo","displayName-count-one":"Timorese escudo","displayName-count-other":"Timorese escudos","symbol":"TPE"},"TRL":{"displayName":"Turkish Lira (1922–2005)","displayName-count-one":"Turkish lira (1922–2005)","displayName-count-other":"Turkish Lira (1922–2005)","symbol":"TRL"},"TRY":{"displayName":"Turkish Lira","displayName-count-one":"Turkish lira","displayName-count-other":"Turkish Lira","symbol":"TRY","symbol-alt-narrow":"₺","symbol-alt-variant":"TL"},"TTD":{"displayName":"Trinidad & Tobago Dollar","displayName-count-one":"Trinidad & Tobago dollar","displayName-count-other":"Trinidad & Tobago dollars","symbol":"TTD","symbol-alt-narrow":"$"},"TWD":{"displayName":"New Taiwan Dollar","displayName-count-one":"New Taiwan dollar","displayName-count-other":"New Taiwan dollars","symbol":"NT$","symbol-alt-narrow":"$"},"TZS":{"displayName":"Tanzanian Shilling","displayName-count-one":"Tanzanian shilling","displayName-count-other":"Tanzanian shillings","symbol":"TZS"},"UAH":{"displayName":"Ukrainian Hryvnia","displayName-count-one":"Ukrainian hryvnia","displayName-count-other":"Ukrainian hryvnias","symbol":"UAH","symbol-alt-narrow":"₴"},"UAK":{"displayName":"Ukrainian Karbovanets","displayName-count-one":"Ukrainian karbovanets","displayName-count-other":"Ukrainian karbovantsiv","symbol":"UAK"},"UGS":{"displayName":"Ugandan Shilling (1966–1987)","displayName-count-one":"Ugandan shilling (1966–1987)","displayName-count-other":"Ugandan shillings (1966–1987)","symbol":"UGS"},"UGX":{"displayName":"Ugandan Shilling","displayName-count-one":"Ugandan shilling","displayName-count-other":"Ugandan shillings","symbol":"UGX"},"USD":{"displayName":"US Dollar","displayName-count-one":"US dollar","displayName-count-other":"US dollars","symbol":"$","symbol-alt-narrow":"$"},"USN":{"displayName":"US Dollar (Next day)","displayName-count-one":"US dollar (next day)","displayName-count-other":"US dollars (next day)","symbol":"USN"},"USS":{"displayName":"US Dollar (Same day)","displayName-count-one":"US dollar (same day)","displayName-count-other":"US dollars (same day)","symbol":"USS"},"UYI":{"displayName":"Uruguayan Peso (Indexed Units)","displayName-count-one":"Uruguayan peso (indexed units)","displayName-count-other":"Uruguayan pesos (indexed units)","symbol":"UYI"},"UYP":{"displayName":"Uruguayan Peso (1975–1993)","displayName-count-one":"Uruguayan peso (1975–1993)","displayName-count-other":"Uruguayan pesos (1975–1993)","symbol":"UYP"},"UYU":{"displayName":"Uruguayan Peso","displayName-count-one":"Uruguayan peso","displayName-count-other":"Uruguayan pesos","symbol":"UYU","symbol-alt-narrow":"$"},"UZS":{"displayName":"Uzbekistani Som","displayName-count-one":"Uzbekistani som","displayName-count-other":"Uzbekistani som","symbol":"UZS"},"VEB":{"displayName":"Venezuelan Bolívar (1871–2008)","displayName-count-one":"Venezuelan bolívar (1871–2008)","displayName-count-other":"Venezuelan bolívars (1871–2008)","symbol":"VEB"},"VEF":{"displayName":"Venezuelan Bolívar","displayName-count-one":"Venezuelan bolívar","displayName-count-other":"Venezuelan bolívars","symbol":"VEF","symbol-alt-narrow":"Bs"},"VND":{"displayName":"Vietnamese Dong","displayName-count-one":"Vietnamese dong","displayName-count-other":"Vietnamese dong","symbol":"₫","symbol-alt-narrow":"₫"},"VNN":{"displayName":"Vietnamese Dong (1978–1985)","displayName-count-one":"Vietnamese dong (1978–1985)","displayName-count-other":"Vietnamese dong (1978–1985)","symbol":"VNN"},"VUV":{"displayName":"Vanuatu Vatu","displayName-count-one":"Vanuatu vatu","displayName-count-other":"Vanuatu vatus","symbol":"VUV"},"WST":{"displayName":"Samoan Tala","displayName-count-one":"Samoan tala","displayName-count-other":"Samoan tala","symbol":"WST"},"XAF":{"displayName":"Central African CFA Franc","displayName-count-one":"Central African CFA franc","displayName-count-other":"Central African CFA francs","symbol":"FCFA"},"XAG":{"displayName":"Silver","displayName-count-one":"troy ounce of silver","displayName-count-other":"troy ounces of silver","symbol":"XAG"},"XAU":{"displayName":"Gold","displayName-count-one":"troy ounce of gold","displayName-count-other":"troy ounces of gold","symbol":"XAU"},"XBA":{"displayName":"European Composite Unit","displayName-count-one":"European composite unit","displayName-count-other":"European composite units","symbol":"XBA"},"XBB":{"displayName":"European Monetary Unit","displayName-count-one":"European monetary unit","displayName-count-other":"European monetary units","symbol":"XBB"},"XBC":{"displayName":"European Unit of Account (XBC)","displayName-count-one":"European unit of account (XBC)","displayName-count-other":"European units of account (XBC)","symbol":"XBC"},"XBD":{"displayName":"European Unit of Account (XBD)","displayName-count-one":"European unit of account (XBD)","displayName-count-other":"European units of account (XBD)","symbol":"XBD"},"XCD":{"displayName":"East Caribbean Dollar","displayName-count-one":"East Caribbean dollar","displayName-count-other":"East Caribbean dollars","symbol":"EC$","symbol-alt-narrow":"$"},"XDR":{"displayName":"Special Drawing Rights","displayName-count-one":"special drawing rights","displayName-count-other":"special drawing rights","symbol":"XDR"},"XEU":{"displayName":"European Currency Unit","displayName-count-one":"European currency unit","displayName-count-other":"European currency units","symbol":"XEU"},"XFO":{"displayName":"French Gold Franc","displayName-count-one":"French gold franc","displayName-count-other":"French gold francs","symbol":"XFO"},"XFU":{"displayName":"French UIC-Franc","displayName-count-one":"French UIC-franc","displayName-count-other":"French UIC-francs","symbol":"XFU"},"XOF":{"displayName":"West African CFA Franc","displayName-count-one":"West African CFA franc","displayName-count-other":"West African CFA francs","symbol":"CFA"},"XPD":{"displayName":"Palladium","displayName-count-one":"troy ounce of palladium","displayName-count-other":"troy ounces of palladium","symbol":"XPD"},"XPF":{"displayName":"CFP Franc","displayName-count-one":"CFP franc","displayName-count-other":"CFP francs","symbol":"CFPF"},"XPT":{"displayName":"Platinum","displayName-count-one":"troy ounce of platinum","displayName-count-other":"troy ounces of platinum","symbol":"XPT"},"XRE":{"displayName":"RINET Funds","displayName-count-one":"RINET Funds unit","displayName-count-other":"RINET Funds units","symbol":"XRE"},"XSU":{"displayName":"Sucre","displayName-count-one":"Sucre","displayName-count-other":"Sucres","symbol":"XSU"},"XTS":{"displayName":"Testing Currency Code","displayName-count-one":"Testing Currency unit","displayName-count-other":"Testing Currency units","symbol":"XTS"},"XUA":{"displayName":"ADB Unit of Account","displayName-count-one":"ADB unit of account","displayName-count-other":"ADB units of account","symbol":"XUA"},"XXX":{"displayName":"Unknown Currency","displayName-count-one":"(unknown unit of currency)","displayName-count-other":"(unknown currency)","symbol":"XXX"},"YDD":{"displayName":"Yemeni Dinar","displayName-count-one":"Yemeni dinar","displayName-count-other":"Yemeni dinars","symbol":"YDD"},"YER":{"displayName":"Yemeni Rial","displayName-count-one":"Yemeni rial","displayName-count-other":"Yemeni rials","symbol":"YER"},"YUD":{"displayName":"Yugoslavian Hard Dinar (1966–1990)","displayName-count-one":"Yugoslavian hard dinar (1966–1990)","displayName-count-other":"Yugoslavian hard dinars (1966–1990)","symbol":"YUD"},"YUM":{"displayName":"Yugoslavian New Dinar (1994–2002)","displayName-count-one":"Yugoslavian new dinar (1994–2002)","displayName-count-other":"Yugoslavian new dinars (1994–2002)","symbol":"YUM"},"YUN":{"displayName":"Yugoslavian Convertible Dinar (1990–1992)","displayName-count-one":"Yugoslavian convertible dinar (1990–1992)","displayName-count-other":"Yugoslavian convertible dinars (1990–1992)","symbol":"YUN"},"YUR":{"displayName":"Yugoslavian Reformed Dinar (1992–1993)","displayName-count-one":"Yugoslavian reformed dinar (1992–1993)","displayName-count-other":"Yugoslavian reformed dinars (1992–1993)","symbol":"YUR"},"ZAL":{"displayName":"South African Rand (financial)","displayName-count-one":"South African rand (financial)","displayName-count-other":"South African rands (financial)","symbol":"ZAL"},"ZAR":{"displayName":"South African Rand","displayName-count-one":"South African rand","displayName-count-other":"South African rand","symbol":"ZAR","symbol-alt-narrow":"R"},"ZMK":{"displayName":"Zambian Kwacha (1968–2012)","displayName-count-one":"Zambian kwacha (1968–2012)","displayName-count-other":"Zambian kwachas (1968–2012)","symbol":"ZMK"},"ZMW":{"displayName":"Zambian Kwacha","displayName-count-one":"Zambian kwacha","displayName-count-other":"Zambian kwachas","symbol":"ZMW","symbol-alt-narrow":"ZK"},"ZRN":{"displayName":"Zairean New Zaire (1993–1998)","displayName-count-one":"Zairean new zaire (1993–1998)","displayName-count-other":"Zairean new zaires (1993–1998)","symbol":"ZRN"},"ZRZ":{"displayName":"Zairean Zaire (1971–1993)","displayName-count-one":"Zairean zaire (1971–1993)","displayName-count-other":"Zairean zaires (1971–1993)","symbol":"ZRZ"},"ZWD":{"displayName":"Zimbabwean Dollar (1980–2008)","displayName-count-one":"Zimbabwean dollar (1980–2008)","displayName-count-other":"Zimbabwean dollars (1980–2008)","symbol":"ZWD"},"ZWL":{"displayName":"Zimbabwean Dollar (2009)","displayName-count-one":"Zimbabwean dollar (2009)","displayName-count-other":"Zimbabwean dollars (2009)","symbol":"ZWL"},"ZWR":{"displayName":"Zimbabwean Dollar (2008)","displayName-count-one":"Zimbabwean dollar (2008)","displayName-count-other":"Zimbabwean dollars (2008)","symbol":"ZWR"}},"defaultNumberingSystem":"latn","otherNumberingSystems":{"native":"latn"},"minimumGroupingDigits":"1","symbols-numberSystem-latn":{"decimal":".","group":",","list":";","percentSign":"%","plusSign":"+","minusSign":"-","exponential":"E","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"NaN","timeSeparator":":"},"decimalFormats-numberSystem-latn":{"standard":"#,##0.###","long":{"decimalFormat":{"1000-count-one":"0 thousand","1000-count-other":"0 thousand","10000-count-one":"00 thousand","10000-count-other":"00 thousand","100000-count-one":"000 thousand","100000-count-other":"000 thousand","1000000-count-one":"0 million","1000000-count-other":"0 million","10000000-count-one":"00 million","10000000-count-other":"00 million","100000000-count-one":"000 million","100000000-count-other":"000 million","1000000000-count-one":"0 billion","1000000000-count-other":"0 billion","10000000000-count-one":"00 billion","10000000000-count-other":"00 billion","100000000000-count-one":"000 billion","100000000000-count-other":"000 billion","1000000000000-count-one":"0 trillion","1000000000000-count-other":"0 trillion","10000000000000-count-one":"00 trillion","10000000000000-count-other":"00 trillion","100000000000000-count-one":"000 trillion","100000000000000-count-other":"000 trillion"}},"short":{"decimalFormat":{"1000-count-one":"0K","1000-count-other":"0K","10000-count-one":"00K","10000-count-other":"00K","100000-count-one":"000K","100000-count-other":"000K","1000000-count-one":"0M","1000000-count-other":"0M","10000000-count-one":"00M","10000000-count-other":"00M","100000000-count-one":"000M","100000000-count-other":"000M","1000000000-count-one":"0B","1000000000-count-other":"0B","10000000000-count-one":"00B","10000000000-count-other":"00B","100000000000-count-one":"000B","100000000000-count-other":"000B","1000000000000-count-one":"0T","1000000000000-count-other":"0T","10000000000000-count-one":"00T","10000000000000-count-other":"00T","100000000000000-count-one":"000T","100000000000000-count-other":"000T"}}},"scientificFormats-numberSystem-latn":{"standard":"#E0"},"percentFormats-numberSystem-latn":{"standard":"#,##0%"},"currencyFormats-numberSystem-latn":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"¤#,##0.00","accounting":"¤#,##0.00;(¤#,##0.00)","short":{"standard":{"1000-count-one":"¤0K","1000-count-other":"¤0K","10000-count-one":"¤00K","10000-count-other":"¤00K","100000-count-one":"¤000K","100000-count-other":"¤000K","1000000-count-one":"¤0M","1000000-count-other":"¤0M","10000000-count-one":"¤00M","10000000-count-other":"¤00M","100000000-count-one":"¤000M","100000000-count-other":"¤000M","1000000000-count-one":"¤0B","1000000000-count-other":"¤0B","10000000000-count-one":"¤00B","10000000000-count-other":"¤00B","100000000000-count-one":"¤000B","100000000000-count-other":"¤000B","1000000000000-count-one":"¤0T","1000000000000-count-other":"¤0T","10000000000000-count-one":"¤00T","10000000000000-count-other":"¤00T","100000000000000-count-one":"¤000T","100000000000000-count-other":"¤000T"}},"unitPattern-count-one":"{0} {1}","unitPattern-count-other":"{0} {1}"},"miscPatterns-numberSystem-latn":{"atLeast":"{0}+","range":"{0}–{1}"},"minimalPairs":{"pluralMinimalPairs-count-one":"{0} day","pluralMinimalPairs-count-other":"{0} days","few":"Take the {0}rd right.","one":"Take the {0}st right.","other":"Take the {0}th right.","two":"Take the {0}nd right."}}},"de":{"identity":{"version":{"_number":"$Revision: 13711 $","_cldrVersion":"32"},"language":"de"},"dates":{"calendars":{"gregorian":{"months":{"format":{"abbreviated":{"1":"Jan.","2":"Feb.","3":"März","4":"Apr.","5":"Mai","6":"Juni","7":"Juli","8":"Aug.","9":"Sep.","10":"Okt.","11":"Nov.","12":"Dez."},"narrow":{"1":"J","2":"F","3":"M","4":"A","5":"M","6":"J","7":"J","8":"A","9":"S","10":"O","11":"N","12":"D"},"wide":{"1":"Januar","2":"Februar","3":"März","4":"April","5":"Mai","6":"Juni","7":"Juli","8":"August","9":"September","10":"Oktober","11":"November","12":"Dezember"}},"stand-alone":{"abbreviated":{"1":"Jan","2":"Feb","3":"Mär","4":"Apr","5":"Mai","6":"Jun","7":"Jul","8":"Aug","9":"Sep","10":"Okt","11":"Nov","12":"Dez"},"narrow":{"1":"J","2":"F","3":"M","4":"A","5":"M","6":"J","7":"J","8":"A","9":"S","10":"O","11":"N","12":"D"},"wide":{"1":"Januar","2":"Februar","3":"März","4":"April","5":"Mai","6":"Juni","7":"Juli","8":"August","9":"September","10":"Oktober","11":"November","12":"Dezember"}}},"days":{"format":{"abbreviated":{"sun":"So.","mon":"Mo.","tue":"Di.","wed":"Mi.","thu":"Do.","fri":"Fr.","sat":"Sa."},"narrow":{"sun":"S","mon":"M","tue":"D","wed":"M","thu":"D","fri":"F","sat":"S"},"short":{"sun":"So.","mon":"Mo.","tue":"Di.","wed":"Mi.","thu":"Do.","fri":"Fr.","sat":"Sa."},"wide":{"sun":"Sonntag","mon":"Montag","tue":"Dienstag","wed":"Mittwoch","thu":"Donnerstag","fri":"Freitag","sat":"Samstag"}},"stand-alone":{"abbreviated":{"sun":"So","mon":"Mo","tue":"Di","wed":"Mi","thu":"Do","fri":"Fr","sat":"Sa"},"narrow":{"sun":"S","mon":"M","tue":"D","wed":"M","thu":"D","fri":"F","sat":"S"},"short":{"sun":"So.","mon":"Mo.","tue":"Di.","wed":"Mi.","thu":"Do.","fri":"Fr.","sat":"Sa."},"wide":{"sun":"Sonntag","mon":"Montag","tue":"Dienstag","wed":"Mittwoch","thu":"Donnerstag","fri":"Freitag","sat":"Samstag"}}},"quarters":{"format":{"abbreviated":{"1":"Q1","2":"Q2","3":"Q3","4":"Q4"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"1. Quartal","2":"2. Quartal","3":"3. Quartal","4":"4. Quartal"}},"stand-alone":{"abbreviated":{"1":"Q1","2":"Q2","3":"Q3","4":"Q4"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"1. Quartal","2":"2. Quartal","3":"3. Quartal","4":"4. Quartal"}}},"dayPeriods":{"format":{"abbreviated":{"midnight":"Mitternacht","am":"AM","pm":"PM","morning1":"morgens","morning2":"vormittags","afternoon1":"mittags","afternoon2":"nachmittags","evening1":"abends","night1":"nachts"},"narrow":{"midnight":"Mitternacht","am":"vm.","pm":"nm.","morning1":"morgens","morning2":"vormittags","afternoon1":"mittags","afternoon2":"nachmittags","evening1":"abends","night1":"nachts"},"wide":{"midnight":"Mitternacht","am":"AM","pm":"PM","morning1":"morgens","morning2":"vormittags","afternoon1":"mittags","afternoon2":"nachmittags","evening1":"abends","night1":"nachts"}},"stand-alone":{"abbreviated":{"midnight":"Mitternacht","am":"vorm.","pm":"nachm.","morning1":"Morgen","morning2":"Vormittag","afternoon1":"Mittag","afternoon2":"Nachmittag","evening1":"Abend","night1":"Nacht"},"narrow":{"midnight":"Mitternacht","am":"vorm.","pm":"nachm.","morning1":"Morgen","morning2":"Vormittag","afternoon1":"Mittag","afternoon2":"Nachmittag","evening1":"Abend","night1":"Nacht"},"wide":{"midnight":"Mitternacht","am":"vorm.","pm":"nachm.","morning1":"Morgen","morning2":"Vormittag","afternoon1":"Mittag","afternoon2":"Nachmittag","evening1":"Abend","night1":"Nacht"}}},"eras":{"eraNames":{"0":"v. Chr.","1":"n. Chr.","0-alt-variant":"vor unserer Zeitrechnung","1-alt-variant":"unserer Zeitrechnung"},"eraAbbr":{"0":"v. Chr.","1":"n. Chr.","0-alt-variant":"v. u. Z.","1-alt-variant":"u. Z."},"eraNarrow":{"0":"v. Chr.","1":"n. Chr.","0-alt-variant":"v. u. Z.","1-alt-variant":"u. Z."}},"dateFormats":{"full":"EEEE, d. MMMM y","long":"d. MMMM y","medium":"dd.MM.y","short":"dd.MM.yy"},"timeFormats":{"full":"HH:mm:ss zzzz","long":"HH:mm:ss z","medium":"HH:mm:ss","short":"HH:mm"},"dateTimeFormats":{"full":"{1} 'um' {0}","long":"{1} 'um' {0}","medium":"{1}, {0}","short":"{1}, {0}","availableFormats":{"Bh":"h B","Bhm":"h:mm B","Bhms":"h:mm:ss B","d":"d","E":"ccc","EBhm":"E h:mm B","EBhms":"E h:mm:ss B","Ed":"E, d.","Ehm":"E h:mm a","EHm":"E, HH:mm","Ehms":"E, h:mm:ss a","EHms":"E, HH:mm:ss","Gy":"y G","GyMMM":"MMM y G","GyMMMd":"d. MMM y G","GyMMMEd":"E, d. MMM y G","h":"h 'Uhr' a","H":"HH 'Uhr'","hm":"h:mm a","Hm":"HH:mm","hms":"h:mm:ss a","Hms":"HH:mm:ss","hmsv":"h:mm:ss a v","Hmsv":"HH:mm:ss v","hmv":"h:mm a v","Hmv":"HH:mm v","M":"L","Md":"d.M.","MEd":"E, d.M.","MMd":"d.MM.","MMdd":"dd.MM.","MMM":"LLL","MMMd":"d. MMM","MMMEd":"E, d. MMM","MMMMd":"d. MMMM","MMMMEd":"E, d. MMMM","MMMMW-count-one":"'Woche' W 'im' MMM","MMMMW-count-other":"'Woche' W 'im' MMM","ms":"mm:ss","y":"y","yM":"M.y","yMd":"d.M.y","yMEd":"E, d.M.y","yMM":"MM.y","yMMdd":"dd.MM.y","yMMM":"MMM y","yMMMd":"d. MMM y","yMMMEd":"E, d. MMM y","yMMMM":"MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","yw-count-one":"'Woche' w 'des' 'Jahres' Y","yw-count-other":"'Woche' w 'des' 'Jahres' Y"},"appendItems":{"Day":"{0} ({2}: {1})","Day-Of-Week":"{0} {1}","Era":"{1} {0}","Hour":"{0} ({2}: {1})","Minute":"{0} ({2}: {1})","Month":"{0} ({2}: {1})","Quarter":"{0} ({2}: {1})","Second":"{0} ({2}: {1})","Timezone":"{0} {1}","Week":"{0} ({2}: {1})","Year":"{1} {0}"},"intervalFormats":{"intervalFormatFallback":"{0} – {1}","d":{"d":"d.–d."},"h":{"a":"h 'Uhr' a – h 'Uhr' a","h":"h – h 'Uhr' a"},"H":{"H":"HH–HH 'Uhr'"},"hm":{"a":"h:mm a – h:mm a","h":"h:mm–h:mm a","m":"h:mm–h:mm a"},"Hm":{"H":"HH:mm–HH:mm 'Uhr'","m":"HH:mm–HH:mm 'Uhr'"},"hmv":{"a":"h:mm a – h:mm a v","h":"h:mm–h:mm a v","m":"h:mm–h:mm a v"},"Hmv":{"H":"HH:mm–HH:mm 'Uhr' v","m":"HH:mm–HH:mm 'Uhr' v"},"hv":{"a":"h a – h a v","h":"h–h a v"},"Hv":{"H":"HH–HH 'Uhr' v"},"M":{"M":"M.–M."},"Md":{"d":"dd.MM. – dd.MM.","M":"dd.MM. – dd.MM."},"MEd":{"d":"E, dd.MM. – E, dd.MM.","M":"E, dd.MM. – E, dd.MM."},"MMM":{"M":"MMM–MMM"},"MMMd":{"d":"d.–d. MMM","M":"d. MMM – d. MMM"},"MMMEd":{"d":"E, d. – E, d. MMM","M":"E, d. MMM – E, d. MMM"},"MMMM":{"M":"LLLL–LLLL"},"y":{"y":"y–y"},"yM":{"M":"MM.y – MM.y","y":"MM.y – MM.y"},"yMd":{"d":"dd.MM.y – dd.MM.y","M":"dd.MM.y – dd.MM.y","y":"dd.MM.y – dd.MM.y"},"yMEd":{"d":"E, dd.MM.y – E, dd.MM.y","M":"E, dd.MM.y – E, dd.MM.y","y":"E, dd.MM.y – E, dd.MM.y"},"yMMM":{"M":"MMM–MMM y","y":"MMM y – MMM y"},"yMMMd":{"d":"d.–d. MMM y","M":"d. MMM – d. MMM y","y":"d. MMM y – d. MMM y"},"yMMMEd":{"d":"E, d. – E, d. MMM y","M":"E, d. MMM – E, d. MMM y","y":"E, d. MMM y – E, d. MMM y"},"yMMMM":{"M":"MMMM–MMMM y","y":"MMMM y – MMMM y"}}}}},"fields":{"era":{"displayName":"Epoche"},"era-short":{"displayName":"Epoche"},"era-narrow":{"displayName":"E"},"year":{"displayName":"Jahr","relative-type--1":"letztes Jahr","relative-type-0":"dieses Jahr","relative-type-1":"nächstes Jahr","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Jahr","relativeTimePattern-count-other":"in {0} Jahren"},"relativeTime-type-past":{"relativeTimePattern-count-one":"vor {0} Jahr","relativeTimePattern-count-other":"vor {0} Jahren"}},"year-short":{"displayName":"Jahr","relative-type--1":"letztes Jahr","relative-type-0":"dieses Jahr","relative-type-1":"nächstes Jahr","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Jahr","relativeTimePattern-count-other":"in {0} Jahren"},"relativeTime-type-past":{"relativeTimePattern-count-one":"vor {0} Jahr","relativeTimePattern-count-other":"vor {0} Jahren"}},"year-narrow":{"displayName":"J","relative-type--1":"letztes Jahr","relative-type-0":"dieses Jahr","relative-type-1":"nächstes Jahr","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Jahr","relativeTimePattern-count-other":"in {0} Jahren"},"relativeTime-type-past":{"relativeTimePattern-count-one":"vor {0} Jahr","relativeTimePattern-count-other":"vor {0} Jahren"}},"quarter":{"displayName":"Quartal","relative-type--1":"letztes Quartal","relative-type-0":"dieses Quartal","relative-type-1":"nächstes Quartal","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Quartal","relativeTimePattern-count-other":"in {0} Quartalen"},"relativeTime-type-past":{"relativeTimePattern-count-one":"vor {0} Quartal","relativeTimePattern-count-other":"vor {0} Quartalen"}},"quarter-short":{"displayName":"Quart.","relative-type--1":"letztes Quartal","relative-type-0":"dieses Quartal","relative-type-1":"nächstes Quartal","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Quart.","relativeTimePattern-count-other":"in {0} Quart."},"relativeTime-type-past":{"relativeTimePattern-count-one":"vor {0} Quart.","relativeTimePattern-count-other":"vor {0} Quart."}},"quarter-narrow":{"displayName":"Q","relative-type--1":"letztes Quartal","relative-type-0":"dieses Quartal","relative-type-1":"nächstes Quartal","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Q","relativeTimePattern-count-other":"in {0} Q"},"relativeTime-type-past":{"relativeTimePattern-count-one":"vor {0} Q","relativeTimePattern-count-other":"vor {0} Q"}},"month":{"displayName":"Monat","relative-type--1":"letzten Monat","relative-type-0":"diesen Monat","relative-type-1":"nächsten Monat","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Monat","relativeTimePattern-count-other":"in {0} Monaten"},"relativeTime-type-past":{"relativeTimePattern-count-one":"vor {0} Monat","relativeTimePattern-count-other":"vor {0} Monaten"}},"month-short":{"displayName":"Monat","relative-type--1":"letzten Monat","relative-type-0":"diesen Monat","relative-type-1":"nächsten Monat","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Monat","relativeTimePattern-count-other":"in {0} Monaten"},"relativeTime-type-past":{"relativeTimePattern-count-one":"vor {0} Monat","relativeTimePattern-count-other":"vor {0} Monaten"}},"month-narrow":{"displayName":"M","relative-type--1":"letzten Monat","relative-type-0":"diesen Monat","relative-type-1":"nächsten Monat","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Monat","relativeTimePattern-count-other":"in {0} Monaten"},"relativeTime-type-past":{"relativeTimePattern-count-one":"vor {0} Monat","relativeTimePattern-count-other":"vor {0} Monaten"}},"week":{"displayName":"Woche","relative-type--1":"letzte Woche","relative-type-0":"diese Woche","relative-type-1":"nächste Woche","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Woche","relativeTimePattern-count-other":"in {0} Wochen"},"relativeTime-type-past":{"relativeTimePattern-count-one":"vor {0} Woche","relativeTimePattern-count-other":"vor {0} Wochen"},"relativePeriod":"die Woche vom {0}"},"week-short":{"displayName":"Woche","relative-type--1":"letzte Woche","relative-type-0":"diese Woche","relative-type-1":"nächste Woche","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Woche","relativeTimePattern-count-other":"in {0} Wochen"},"relativeTime-type-past":{"relativeTimePattern-count-one":"vor {0} Woche","relativeTimePattern-count-other":"vor {0} Wochen"},"relativePeriod":"die Woche vom {0}"},"week-narrow":{"displayName":"W","relative-type--1":"letzte Woche","relative-type-0":"diese Woche","relative-type-1":"nächste Woche","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Wo.","relativeTimePattern-count-other":"in {0} Wo."},"relativeTime-type-past":{"relativeTimePattern-count-one":"vor {0} Wo.","relativeTimePattern-count-other":"vor {0} Wo."},"relativePeriod":"die Woche vom {0}"},"weekOfMonth":{"displayName":"Woche des Monats"},"weekOfMonth-short":{"displayName":"W/M"},"weekOfMonth-narrow":{"displayName":"Wo. des Monats"},"day":{"displayName":"Tag","relative-type--2":"vorgestern","relative-type--1":"gestern","relative-type-0":"heute","relative-type-1":"morgen","relative-type-2":"übermorgen","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Tag","relativeTimePattern-count-other":"in {0} Tagen"},"relativeTime-type-past":{"relativeTimePattern-count-one":"vor {0} Tag","relativeTimePattern-count-other":"vor {0} Tagen"}},"day-short":{"displayName":"Tag","relative-type--2":"vorgestern","relative-type--1":"gestern","relative-type-0":"heute","relative-type-1":"morgen","relative-type-2":"übermorgen","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Tag","relativeTimePattern-count-other":"in {0} Tagen"},"relativeTime-type-past":{"relativeTimePattern-count-one":"vor {0} Tag","relativeTimePattern-count-other":"vor {0} Tagen"}},"day-narrow":{"displayName":"Tag","relative-type--2":"vorgestern","relative-type--1":"gestern","relative-type-0":"heute","relative-type-1":"morgen","relative-type-2":"übermorgen","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Tag","relativeTimePattern-count-other":"in {0} Tagen"},"relativeTime-type-past":{"relativeTimePattern-count-one":"vor {0} Tag","relativeTimePattern-count-other":"vor {0} Tagen"}},"dayOfYear":{"displayName":"Tag des Jahres"},"dayOfYear-short":{"displayName":"Tag des Jahres"},"dayOfYear-narrow":{"displayName":"T/J"},"weekday":{"displayName":"Wochentag"},"weekday-short":{"displayName":"Wochentag"},"weekday-narrow":{"displayName":"Wochent."},"weekdayOfMonth":{"displayName":"Wochentag"},"weekdayOfMonth-short":{"displayName":"Wochentag"},"weekdayOfMonth-narrow":{"displayName":"WT"},"sun":{"relative-type--1":"letzten Sonntag","relative-type-0":"diesen Sonntag","relative-type-1":"nächsten Sonntag","relativeTime-type-future":{"relativeTimePattern-count-one":"Sonntag in {0} Woche","relativeTimePattern-count-other":"Sonntag in {0} Wochen"},"relativeTime-type-past":{"relativeTimePattern-count-one":"Sonntag vor {0} Woche","relativeTimePattern-count-other":"Sonntag vor {0} Wochen"}},"sun-short":{"relative-type--1":"letzten So.","relative-type-0":"diesen So.","relative-type-1":"nächsten So.","relativeTime-type-future":{"relativeTimePattern-count-one":"So. in {0} Woche","relativeTimePattern-count-other":"So. in {0} Wochen"},"relativeTime-type-past":{"relativeTimePattern-count-one":"So. vor {0} Woche","relativeTimePattern-count-other":"So. vor {0} Wochen"}},"sun-narrow":{"relative-type--1":"letzten So.","relative-type-0":"diesen So.","relative-type-1":"nächsten So.","relativeTime-type-future":{"relativeTimePattern-count-one":"So. in {0} W.","relativeTimePattern-count-other":"So. in {0} W."},"relativeTime-type-past":{"relativeTimePattern-count-one":"So. vor {0} W.","relativeTimePattern-count-other":"So. vor {0} W."}},"mon":{"relative-type--1":"letzten Montag","relative-type-0":"diesen Montag","relative-type-1":"nächsten Montag","relativeTime-type-future":{"relativeTimePattern-count-one":"Montag in {0} Woche","relativeTimePattern-count-other":"Montag in {0} Wochen"},"relativeTime-type-past":{"relativeTimePattern-count-one":"Montag vor {0} Woche","relativeTimePattern-count-other":"Montag vor {0} Wochen"}},"mon-short":{"relative-type--1":"letzten Mo.","relative-type-0":"diesen Mo.","relative-type-1":"nächsten Mo.","relativeTime-type-future":{"relativeTimePattern-count-one":"Mo. in {0} Woche","relativeTimePattern-count-other":"Mo. in {0} Wochen"},"relativeTime-type-past":{"relativeTimePattern-count-one":"Mo. vor {0} Woche","relativeTimePattern-count-other":"Mo. vor {0} Wochen"}},"mon-narrow":{"relative-type--1":"letzten Mo.","relative-type-0":"diesen Mo.","relative-type-1":"nächsten Mo.","relativeTime-type-future":{"relativeTimePattern-count-one":"Mo. in {0} W.","relativeTimePattern-count-other":"Mo. in {0} W."},"relativeTime-type-past":{"relativeTimePattern-count-one":"Mo. vor {0} W.","relativeTimePattern-count-other":"Mo. vor {0} W."}},"tue":{"relative-type--1":"letzten Dienstag","relative-type-0":"diesen Dienstag","relative-type-1":"nächsten Dienstag","relativeTime-type-future":{"relativeTimePattern-count-one":"Dienstag in {0} Woche","relativeTimePattern-count-other":"Dienstag in {0} Wochen"},"relativeTime-type-past":{"relativeTimePattern-count-one":"Dienstag vor {0} Woche","relativeTimePattern-count-other":"Dienstag vor {0} Wochen"}},"tue-short":{"relative-type--1":"letzten Di.","relative-type-0":"diesen Di.","relative-type-1":"nächsten Di.","relativeTime-type-future":{"relativeTimePattern-count-one":"Di. in {0} Woche","relativeTimePattern-count-other":"Di. in {0} Wochen"},"relativeTime-type-past":{"relativeTimePattern-count-one":"Di. vor {0} Woche","relativeTimePattern-count-other":"Di. vor {0} Wochen"}},"tue-narrow":{"relative-type--1":"letzten Di.","relative-type-0":"diesen Di.","relative-type-1":"nächsten Di.","relativeTime-type-future":{"relativeTimePattern-count-one":"Di. in {0} W.","relativeTimePattern-count-other":"Di. in {0} W."},"relativeTime-type-past":{"relativeTimePattern-count-one":"Di. vor {0} W.","relativeTimePattern-count-other":"Di. vor {0} W."}},"wed":{"relative-type--1":"letzten Mittwoch","relative-type-0":"diesen Mittwoch","relative-type-1":"nächsten Mittwoch","relativeTime-type-future":{"relativeTimePattern-count-one":"Mittwoch in {0} Woche","relativeTimePattern-count-other":"Mittwoch in {0} Wochen"},"relativeTime-type-past":{"relativeTimePattern-count-one":"Mittwoch vor {0} Woche","relativeTimePattern-count-other":"Mittwoch vor {0} Wochen"}},"wed-short":{"relative-type--1":"letzten Mi.","relative-type-0":"diesen Mi.","relative-type-1":"nächsten Mi.","relativeTime-type-future":{"relativeTimePattern-count-one":"Mi. in {0} Woche","relativeTimePattern-count-other":"Mi. in {0} Wochen"},"relativeTime-type-past":{"relativeTimePattern-count-one":"Mi. vor {0} Woche","relativeTimePattern-count-other":"Mi. vor {0} Wochen"}},"wed-narrow":{"relative-type--1":"letzten Mi.","relative-type-0":"diesen Mi.","relative-type-1":"nächsten Mi.","relativeTime-type-future":{"relativeTimePattern-count-one":"Mi. in {0} W.","relativeTimePattern-count-other":"Mi. in {0} W."},"relativeTime-type-past":{"relativeTimePattern-count-one":"Mi. vor {0} W.","relativeTimePattern-count-other":"Mi. vor {0} W."}},"thu":{"relative-type--1":"letzten Donnerstag","relative-type-0":"diesen Donnerstag","relative-type-1":"nächsten Donnerstag","relativeTime-type-future":{"relativeTimePattern-count-one":"Donnerstag in {0} Woche","relativeTimePattern-count-other":"Donnerstag in {0} Wochen"},"relativeTime-type-past":{"relativeTimePattern-count-one":"Donnerstag vor {0} Woche","relativeTimePattern-count-other":"Donnerstag vor {0} Wochen"}},"thu-short":{"relative-type--1":"letzten Do.","relative-type-0":"diesen Do.","relative-type-1":"nächsten Do.","relativeTime-type-future":{"relativeTimePattern-count-one":"Do. in {0} Woche","relativeTimePattern-count-other":"Do. in {0} Wochen"},"relativeTime-type-past":{"relativeTimePattern-count-one":"Do. vor {0} Woche","relativeTimePattern-count-other":"Do. vor {0} Wochen"}},"thu-narrow":{"relative-type--1":"letzten Do.","relative-type-0":"diesen Do.","relative-type-1":"nächsten Do.","relativeTime-type-future":{"relativeTimePattern-count-one":"Do. in {0} W.","relativeTimePattern-count-other":"Do. in {0} W."},"relativeTime-type-past":{"relativeTimePattern-count-one":"Do. vor {0} W.","relativeTimePattern-count-other":"Do. vor {0} W."}},"fri":{"relative-type--1":"letzten Freitag","relative-type-0":"diesen Freitag","relative-type-1":"nächsten Freitag","relativeTime-type-future":{"relativeTimePattern-count-one":"Freitag in {0} Woche","relativeTimePattern-count-other":"Freitag in {0} Wochen"},"relativeTime-type-past":{"relativeTimePattern-count-one":"Freitag vor {0} Woche","relativeTimePattern-count-other":"Freitag vor {0} Wochen"}},"fri-short":{"relative-type--1":"letzten Fr.","relative-type-0":"diesen Fr.","relative-type-1":"nächsten Fr.","relativeTime-type-future":{"relativeTimePattern-count-one":"Fr. in {0} Woche","relativeTimePattern-count-other":"Fr. in {0} Wochen"},"relativeTime-type-past":{"relativeTimePattern-count-one":"Fr. vor {0} Woche","relativeTimePattern-count-other":"Fr. vor {0} Wochen"}},"fri-narrow":{"relative-type--1":"letzten Fr.","relative-type-0":"diesen Fr.","relative-type-1":"nächsten Fr.","relativeTime-type-future":{"relativeTimePattern-count-one":"Fr. in {0} W.","relativeTimePattern-count-other":"Fr. in {0} W."},"relativeTime-type-past":{"relativeTimePattern-count-one":"Fr. vor {0} W.","relativeTimePattern-count-other":"Fr. vor {0} W."}},"sat":{"relative-type--1":"letzten Samstag","relative-type-0":"diesen Samstag","relative-type-1":"nächsten Samstag","relativeTime-type-future":{"relativeTimePattern-count-one":"Samstag in {0} Woche","relativeTimePattern-count-other":"Samstag in {0} Wochen"},"relativeTime-type-past":{"relativeTimePattern-count-one":"Samstag vor {0} Woche","relativeTimePattern-count-other":"Samstag vor {0} Wochen"}},"sat-short":{"relative-type--1":"letzten Sa.","relative-type-0":"diesen Sa.","relative-type-1":"nächsten Sa.","relativeTime-type-future":{"relativeTimePattern-count-one":"Sa. in {0} Woche","relativeTimePattern-count-other":"Sa. in {0} Wochen"},"relativeTime-type-past":{"relativeTimePattern-count-one":"Sa. vor {0} Woche","relativeTimePattern-count-other":"Sa. vor {0} Wochen"}},"sat-narrow":{"relative-type--1":"letzten Sa.","relative-type-0":"diesen Sa.","relative-type-1":"nächsten Sa.","relativeTime-type-future":{"relativeTimePattern-count-one":"Sa. in {0} W.","relativeTimePattern-count-other":"Sa. in {0} W."},"relativeTime-type-past":{"relativeTimePattern-count-one":"Sa. vor {0} W.","relativeTimePattern-count-other":"Sa. vor {0} W."}},"dayperiod-short":{"displayName":"Tageshälfte"},"dayperiod":{"displayName":"Tageshälfte"},"dayperiod-narrow":{"displayName":"Tagesh."},"hour":{"displayName":"Stunde","relative-type-0":"in dieser Stunde","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Stunde","relativeTimePattern-count-other":"in {0} Stunden"},"relativeTime-type-past":{"relativeTimePattern-count-one":"vor {0} Stunde","relativeTimePattern-count-other":"vor {0} Stunden"}},"hour-short":{"displayName":"Std.","relative-type-0":"in dieser Stunde","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Std.","relativeTimePattern-count-other":"in {0} Std."},"relativeTime-type-past":{"relativeTimePattern-count-one":"vor {0} Std.","relativeTimePattern-count-other":"vor {0} Std."}},"hour-narrow":{"displayName":"Std.","relative-type-0":"in dieser Stunde","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Std.","relativeTimePattern-count-other":"in {0} Std."},"relativeTime-type-past":{"relativeTimePattern-count-one":"vor {0} Std.","relativeTimePattern-count-other":"vor {0} Std."}},"minute":{"displayName":"Minute","relative-type-0":"in dieser Minute","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Minute","relativeTimePattern-count-other":"in {0} Minuten"},"relativeTime-type-past":{"relativeTimePattern-count-one":"vor {0} Minute","relativeTimePattern-count-other":"vor {0} Minuten"}},"minute-short":{"displayName":"Min.","relative-type-0":"in dieser Minute","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Min.","relativeTimePattern-count-other":"in {0} Min."},"relativeTime-type-past":{"relativeTimePattern-count-one":"vor {0} Min.","relativeTimePattern-count-other":"vor {0} Min."}},"minute-narrow":{"displayName":"Min.","relative-type-0":"in dieser Minute","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} m","relativeTimePattern-count-other":"in {0} m"},"relativeTime-type-past":{"relativeTimePattern-count-one":"vor {0} m","relativeTimePattern-count-other":"vor {0} m"}},"second":{"displayName":"Sekunde","relative-type-0":"jetzt","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Sekunde","relativeTimePattern-count-other":"in {0} Sekunden"},"relativeTime-type-past":{"relativeTimePattern-count-one":"vor {0} Sekunde","relativeTimePattern-count-other":"vor {0} Sekunden"}},"second-short":{"displayName":"Sek.","relative-type-0":"jetzt","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} Sek.","relativeTimePattern-count-other":"in {0} Sek."},"relativeTime-type-past":{"relativeTimePattern-count-one":"vor {0} Sek.","relativeTimePattern-count-other":"vor {0} Sek."}},"second-narrow":{"displayName":"Sek.","relative-type-0":"jetzt","relativeTime-type-future":{"relativeTimePattern-count-one":"in {0} s","relativeTimePattern-count-other":"in {0} s"},"relativeTime-type-past":{"relativeTimePattern-count-one":"vor {0} s","relativeTimePattern-count-other":"vor {0} s"}},"zone":{"displayName":"Zeitzone"},"zone-short":{"displayName":"Zeitzone"},"zone-narrow":{"displayName":"Zeitz."}}},"numbers":{"currencies":{"ADP":{"displayName":"Andorranische Pesete","displayName-count-one":"Andorranische Pesete","displayName-count-other":"Andorranische Peseten","symbol":"ADP"},"AED":{"displayName":"VAE-Dirham","displayName-count-one":"VAE-Dirham","displayName-count-other":"VAE-Dirham","symbol":"AED"},"AFA":{"displayName":"Afghanische Afghani (1927–2002)","displayName-count-one":"Afghanische Afghani (1927–2002)","displayName-count-other":"Afghanische Afghani (1927–2002)","symbol":"AFA"},"AFN":{"displayName":"Afghanischer Afghani","displayName-count-one":"Afghanischer Afghani","displayName-count-other":"Afghanische Afghani","symbol":"AFN"},"ALK":{"displayName":"Albanischer Lek (1946–1965)","displayName-count-one":"Albanischer Lek (1946–1965)","displayName-count-other":"Albanische Lek (1946–1965)","symbol":"ALK"},"ALL":{"displayName":"Albanischer Lek","displayName-count-one":"Albanischer Lek","displayName-count-other":"Albanische Lek","symbol":"ALL"},"AMD":{"displayName":"Armenischer Dram","displayName-count-one":"Armenischer Dram","displayName-count-other":"Armenische Dram","symbol":"AMD"},"ANG":{"displayName":"Niederländische-Antillen-Gulden","displayName-count-one":"Niederländische-Antillen-Gulden","displayName-count-other":"Niederländische-Antillen-Gulden","symbol":"ANG"},"AOA":{"displayName":"Angolanischer Kwanza","displayName-count-one":"Angolanischer Kwanza","displayName-count-other":"Angolanische Kwanza","symbol":"AOA","symbol-alt-narrow":"Kz"},"AOK":{"displayName":"Angolanischer Kwanza (1977–1990)","displayName-count-one":"Angolanischer Kwanza (1977–1990)","displayName-count-other":"Angolanische Kwanza (1977–1990)","symbol":"AOK"},"AON":{"displayName":"Angolanischer Neuer Kwanza (1990–2000)","displayName-count-one":"Angolanischer Neuer Kwanza (1990–2000)","displayName-count-other":"Angolanische Neue Kwanza (1990–2000)","symbol":"AON"},"AOR":{"displayName":"Angolanischer Kwanza Reajustado (1995–1999)","displayName-count-one":"Angolanischer Kwanza Reajustado (1995–1999)","displayName-count-other":"Angolanische Kwanza Reajustado (1995–1999)","symbol":"AOR"},"ARA":{"displayName":"Argentinischer Austral","displayName-count-one":"Argentinischer Austral","displayName-count-other":"Argentinische Austral","symbol":"ARA"},"ARL":{"displayName":"Argentinischer Peso Ley (1970–1983)","displayName-count-one":"Argentinischer Peso Ley (1970–1983)","displayName-count-other":"Argentinische Pesos Ley (1970–1983)","symbol":"ARL"},"ARM":{"displayName":"Argentinischer Peso (1881–1970)","displayName-count-one":"Argentinischer Peso (1881–1970)","displayName-count-other":"Argentinische Pesos (1881–1970)","symbol":"ARM"},"ARP":{"displayName":"Argentinischer Peso (1983–1985)","displayName-count-one":"Argentinischer Peso (1983–1985)","displayName-count-other":"Argentinische Peso (1983–1985)","symbol":"ARP"},"ARS":{"displayName":"Argentinischer Peso","displayName-count-one":"Argentinischer Peso","displayName-count-other":"Argentinische Pesos","symbol":"ARS","symbol-alt-narrow":"$"},"ATS":{"displayName":"Österreichischer Schilling","displayName-count-one":"Österreichischer Schilling","displayName-count-other":"Österreichische Schilling","symbol":"öS"},"AUD":{"displayName":"Australischer Dollar","displayName-count-one":"Australischer Dollar","displayName-count-other":"Australische Dollar","symbol":"AU$","symbol-alt-narrow":"$"},"AWG":{"displayName":"Aruba-Florin","displayName-count-one":"Aruba-Florin","displayName-count-other":"Aruba-Florin","symbol":"AWG"},"AZM":{"displayName":"Aserbaidschan-Manat (1993–2006)","displayName-count-one":"Aserbaidschan-Manat (1993–2006)","displayName-count-other":"Aserbaidschan-Manat (1993–2006)","symbol":"AZM"},"AZN":{"displayName":"Aserbaidschan-Manat","displayName-count-one":"Aserbaidschan-Manat","displayName-count-other":"Aserbaidschan-Manat","symbol":"AZN"},"BAD":{"displayName":"Bosnien und Herzegowina Dinar (1992–1994)","displayName-count-one":"Bosnien und Herzegowina Dinar (1992–1994)","displayName-count-other":"Bosnien und Herzegowina Dinar (1992–1994)","symbol":"BAD"},"BAM":{"displayName":"Bosnien und Herzegowina Konvertierbare Mark","displayName-count-one":"Bosnien und Herzegowina Konvertierbare Mark","displayName-count-other":"Bosnien und Herzegowina Konvertierbare Mark","symbol":"BAM","symbol-alt-narrow":"KM"},"BAN":{"displayName":"Bosnien und Herzegowina Neuer Dinar (1994–1997)","displayName-count-one":"Bosnien und Herzegowina Neuer Dinar (1994–1997)","displayName-count-other":"Bosnien und Herzegowina Neue Dinar (1994–1997)","symbol":"BAN"},"BBD":{"displayName":"Barbados-Dollar","displayName-count-one":"Barbados-Dollar","displayName-count-other":"Barbados-Dollar","symbol":"BBD","symbol-alt-narrow":"$"},"BDT":{"displayName":"Bangladesch-Taka","displayName-count-one":"Bangladesch-Taka","displayName-count-other":"Bangladesch-Taka","symbol":"BDT","symbol-alt-narrow":"৳"},"BEC":{"displayName":"Belgischer Franc (konvertibel)","displayName-count-one":"Belgischer Franc (konvertibel)","displayName-count-other":"Belgische Franc (konvertibel)","symbol":"BEC"},"BEF":{"displayName":"Belgischer Franc","displayName-count-one":"Belgischer Franc","displayName-count-other":"Belgische Franc","symbol":"BEF"},"BEL":{"displayName":"Belgischer Finanz-Franc","displayName-count-one":"Belgischer Finanz-Franc","displayName-count-other":"Belgische Finanz-Franc","symbol":"BEL"},"BGL":{"displayName":"Bulgarische Lew (1962–1999)","displayName-count-one":"Bulgarische Lew (1962–1999)","displayName-count-other":"Bulgarische Lew (1962–1999)","symbol":"BGL"},"BGM":{"displayName":"Bulgarischer Lew (1952–1962)","displayName-count-one":"Bulgarischer Lew (1952–1962)","displayName-count-other":"Bulgarische Lew (1952–1962)","symbol":"BGK"},"BGN":{"displayName":"Bulgarischer Lew","displayName-count-one":"Bulgarischer Lew","displayName-count-other":"Bulgarische Lew","symbol":"BGN"},"BGO":{"displayName":"Bulgarischer Lew (1879–1952)","displayName-count-one":"Bulgarischer Lew (1879–1952)","displayName-count-other":"Bulgarische Lew (1879–1952)","symbol":"BGJ"},"BHD":{"displayName":"Bahrain-Dinar","displayName-count-one":"Bahrain-Dinar","displayName-count-other":"Bahrain-Dinar","symbol":"BHD"},"BIF":{"displayName":"Burundi-Franc","displayName-count-one":"Burundi-Franc","displayName-count-other":"Burundi-Francs","symbol":"BIF"},"BMD":{"displayName":"Bermuda-Dollar","displayName-count-one":"Bermuda-Dollar","displayName-count-other":"Bermuda-Dollar","symbol":"BMD","symbol-alt-narrow":"$"},"BND":{"displayName":"Brunei-Dollar","displayName-count-one":"Brunei-Dollar","displayName-count-other":"Brunei-Dollar","symbol":"BND","symbol-alt-narrow":"$"},"BOB":{"displayName":"Bolivianischer Boliviano","displayName-count-one":"Bolivianischer Boliviano","displayName-count-other":"Bolivianische Bolivianos","symbol":"BOB","symbol-alt-narrow":"Bs"},"BOL":{"displayName":"Bolivianischer Boliviano (1863–1963)","displayName-count-one":"Bolivianischer Boliviano (1863–1963)","displayName-count-other":"Bolivianische Bolivianos (1863–1963)","symbol":"BOL"},"BOP":{"displayName":"Bolivianischer Peso","displayName-count-one":"Bolivianischer Peso","displayName-count-other":"Bolivianische Peso","symbol":"BOP"},"BOV":{"displayName":"Boliviansiche Mvdol","displayName-count-one":"Boliviansiche Mvdol","displayName-count-other":"Bolivianische Mvdol","symbol":"BOV"},"BRB":{"displayName":"Brasilianischer Cruzeiro Novo (1967–1986)","displayName-count-one":"Brasilianischer Cruzeiro Novo (1967–1986)","displayName-count-other":"Brasilianische Cruzeiro Novo (1967–1986)","symbol":"BRB"},"BRC":{"displayName":"Brasilianischer Cruzado (1986–1989)","displayName-count-one":"Brasilianischer Cruzado (1986–1989)","displayName-count-other":"Brasilianische Cruzado (1986–1989)","symbol":"BRC"},"BRE":{"displayName":"Brasilianischer Cruzeiro (1990–1993)","displayName-count-one":"Brasilianischer Cruzeiro (1990–1993)","displayName-count-other":"Brasilianische Cruzeiro (1990–1993)","symbol":"BRE"},"BRL":{"displayName":"Brasilianischer Real","displayName-count-one":"Brasilianischer Real","displayName-count-other":"Brasilianische Real","symbol":"R$","symbol-alt-narrow":"R$"},"BRN":{"displayName":"Brasilianischer Cruzado Novo (1989–1990)","displayName-count-one":"Brasilianischer Cruzado Novo (1989–1990)","displayName-count-other":"Brasilianische Cruzado Novo (1989–1990)","symbol":"BRN"},"BRR":{"displayName":"Brasilianischer Cruzeiro (1993–1994)","displayName-count-one":"Brasilianischer Cruzeiro (1993–1994)","displayName-count-other":"Brasilianische Cruzeiro (1993–1994)","symbol":"BRR"},"BRZ":{"displayName":"Brasilianischer Cruzeiro (1942–1967)","displayName-count-one":"Brasilianischer Cruzeiro (1942–1967)","displayName-count-other":"Brasilianischer Cruzeiro (1942–1967)","symbol":"BRZ"},"BSD":{"displayName":"Bahamas-Dollar","displayName-count-one":"Bahamas-Dollar","displayName-count-other":"Bahamas-Dollar","symbol":"BSD","symbol-alt-narrow":"$"},"BTN":{"displayName":"Bhutan-Ngultrum","displayName-count-one":"Bhutan-Ngultrum","displayName-count-other":"Bhutan-Ngultrum","symbol":"BTN"},"BUK":{"displayName":"Birmanischer Kyat","displayName-count-one":"Birmanischer Kyat","displayName-count-other":"Birmanische Kyat","symbol":"BUK"},"BWP":{"displayName":"Botswanischer Pula","displayName-count-one":"Botswanischer Pula","displayName-count-other":"Botswanische Pula","symbol":"BWP","symbol-alt-narrow":"P"},"BYB":{"displayName":"Belarus-Rubel (1994–1999)","displayName-count-one":"Belarus-Rubel (1994–1999)","displayName-count-other":"Belarus-Rubel (1994–1999)","symbol":"BYB"},"BYN":{"displayName":"Weißrussischer Rubel","displayName-count-one":"Weißrussischer Rubel","displayName-count-other":"Weißrussische Rubel","symbol":"BYN","symbol-alt-narrow":"р."},"BYR":{"displayName":"Weißrussischer Rubel (2000–2016)","displayName-count-one":"Weißrussischer Rubel (2000–2016)","displayName-count-other":"Weißrussische Rubel (2000–2016)","symbol":"BYR"},"BZD":{"displayName":"Belize-Dollar","displayName-count-one":"Belize-Dollar","displayName-count-other":"Belize-Dollar","symbol":"BZD","symbol-alt-narrow":"$"},"CAD":{"displayName":"Kanadischer Dollar","displayName-count-one":"Kanadischer Dollar","displayName-count-other":"Kanadische Dollar","symbol":"CA$","symbol-alt-narrow":"$"},"CDF":{"displayName":"Kongo-Franc","displayName-count-one":"Kongo-Franc","displayName-count-other":"Kongo-Francs","symbol":"CDF"},"CHE":{"displayName":"WIR-Euro","displayName-count-one":"WIR-Euro","displayName-count-other":"WIR-Euro","symbol":"CHE"},"CHF":{"displayName":"Schweizer Franken","displayName-count-one":"Schweizer Franken","displayName-count-other":"Schweizer Franken","symbol":"CHF"},"CHW":{"displayName":"WIR Franken","displayName-count-one":"WIR Franken","displayName-count-other":"WIR Franken","symbol":"CHW"},"CLE":{"displayName":"Chilenischer Escudo","displayName-count-one":"Chilenischer Escudo","displayName-count-other":"Chilenische Escudo","symbol":"CLE"},"CLF":{"displayName":"Chilenische Unidades de Fomento","displayName-count-one":"Chilenische Unidades de Fomento","displayName-count-other":"Chilenische Unidades de Fomento","symbol":"CLF"},"CLP":{"displayName":"Chilenischer Peso","displayName-count-one":"Chilenischer Peso","displayName-count-other":"Chilenische Pesos","symbol":"CLP","symbol-alt-narrow":"$"},"CNH":{"displayName":"Renminbi Yuan (Off–Shore)","displayName-count-one":"Renminbi Yuan (Off–Shore)","displayName-count-other":"Renminbi Yuan (Off–Shore)","symbol":"CNH"},"CNX":{"displayName":"Dollar der Chinesischen Volksbank","displayName-count-one":"Dollar der Chinesischen Volksbank","displayName-count-other":"Dollar der Chinesischen Volksbank","symbol":"CNX"},"CNY":{"displayName":"Renminbi Yuan","displayName-count-one":"Chinesischer Yuan","displayName-count-other":"Renminbi Yuan","symbol":"CN¥","symbol-alt-narrow":"¥"},"COP":{"displayName":"Kolumbianischer Peso","displayName-count-one":"Kolumbianischer Peso","displayName-count-other":"Kolumbianische Pesos","symbol":"COP","symbol-alt-narrow":"$"},"COU":{"displayName":"Kolumbianische Unidades de valor real","displayName-count-one":"Kolumbianische Unidad de valor real","displayName-count-other":"Kolumbianische Unidades de valor real","symbol":"COU"},"CRC":{"displayName":"Costa-Rica-Colón","displayName-count-one":"Costa-Rica-Colón","displayName-count-other":"Costa-Rica-Colón","symbol":"CRC","symbol-alt-narrow":"₡"},"CSD":{"displayName":"Serbischer Dinar (2002–2006)","displayName-count-one":"Serbischer Dinar (2002–2006)","displayName-count-other":"Serbische Dinar (2002–2006)","symbol":"CSD"},"CSK":{"displayName":"Tschechoslowakische Krone","displayName-count-one":"Tschechoslowakische Kronen","displayName-count-other":"Tschechoslowakische Kronen","symbol":"CSK"},"CUC":{"displayName":"Kubanischer Peso (konvertibel)","displayName-count-one":"Kubanischer Peso (konvertibel)","displayName-count-other":"Kubanische Pesos (konvertibel)","symbol":"CUC","symbol-alt-narrow":"Cub$"},"CUP":{"displayName":"Kubanischer Peso","displayName-count-one":"Kubanischer Peso","displayName-count-other":"Kubanische Pesos","symbol":"CUP","symbol-alt-narrow":"$"},"CVE":{"displayName":"Cabo-Verde-Escudo","displayName-count-one":"Cabo-Verde-Escudo","displayName-count-other":"Cabo-Verde-Escudos","symbol":"CVE"},"CYP":{"displayName":"Zypern-Pfund","displayName-count-one":"Zypern Pfund","displayName-count-other":"Zypern Pfund","symbol":"CYP"},"CZK":{"displayName":"Tschechische Krone","displayName-count-one":"Tschechische Krone","displayName-count-other":"Tschechische Kronen","symbol":"CZK","symbol-alt-narrow":"Kč"},"DDM":{"displayName":"Mark der DDR","displayName-count-one":"Mark der DDR","displayName-count-other":"Mark der DDR","symbol":"DDM"},"DEM":{"displayName":"Deutsche Mark","displayName-count-one":"Deutsche Mark","displayName-count-other":"Deutsche Mark","symbol":"DM"},"DJF":{"displayName":"Dschibuti-Franc","displayName-count-one":"Dschibuti-Franc","displayName-count-other":"Dschibuti-Franc","symbol":"DJF"},"DKK":{"displayName":"Dänische Krone","displayName-count-one":"Dänische Krone","displayName-count-other":"Dänische Kronen","symbol":"DKK","symbol-alt-narrow":"kr"},"DOP":{"displayName":"Dominikanischer Peso","displayName-count-one":"Dominikanischer Peso","displayName-count-other":"Dominikanische Pesos","symbol":"DOP","symbol-alt-narrow":"$"},"DZD":{"displayName":"Algerischer Dinar","displayName-count-one":"Algerischer Dinar","displayName-count-other":"Algerische Dinar","symbol":"DZD"},"ECS":{"displayName":"Ecuadorianischer Sucre","displayName-count-one":"Ecuadorianischer Sucre","displayName-count-other":"Ecuadorianische Sucre","symbol":"ECS"},"ECV":{"displayName":"Verrechnungseinheit für Ecuador","displayName-count-one":"Verrechnungseinheiten für Ecuador","displayName-count-other":"Verrechnungseinheiten für Ecuador","symbol":"ECV"},"EEK":{"displayName":"Estnische Krone","displayName-count-one":"Estnische Krone","displayName-count-other":"Estnische Kronen","symbol":"EEK"},"EGP":{"displayName":"Ägyptisches Pfund","displayName-count-one":"Ägyptisches Pfund","displayName-count-other":"Ägyptische Pfund","symbol":"EGP","symbol-alt-narrow":"E£"},"ERN":{"displayName":"Eritreischer Nakfa","displayName-count-one":"Eritreischer Nakfa","displayName-count-other":"Eritreische Nakfa","symbol":"ERN"},"ESA":{"displayName":"Spanische Peseta (A–Konten)","displayName-count-one":"Spanische Peseta (A–Konten)","displayName-count-other":"Spanische Peseten (A–Konten)","symbol":"ESA"},"ESB":{"displayName":"Spanische Peseta (konvertibel)","displayName-count-one":"Spanische Peseta (konvertibel)","displayName-count-other":"Spanische Peseten (konvertibel)","symbol":"ESB"},"ESP":{"displayName":"Spanische Peseta","displayName-count-one":"Spanische Peseta","displayName-count-other":"Spanische Peseten","symbol":"ESP","symbol-alt-narrow":"₧"},"ETB":{"displayName":"Äthiopischer Birr","displayName-count-one":"Äthiopischer Birr","displayName-count-other":"Äthiopische Birr","symbol":"ETB"},"EUR":{"displayName":"Euro","displayName-count-one":"Euro","displayName-count-other":"Euro","symbol":"€","symbol-alt-narrow":"€"},"FIM":{"displayName":"Finnische Mark","displayName-count-one":"Finnische Mark","displayName-count-other":"Finnische Mark","symbol":"FIM"},"FJD":{"displayName":"Fidschi-Dollar","displayName-count-one":"Fidschi-Dollar","displayName-count-other":"Fidschi-Dollar","symbol":"FJD","symbol-alt-narrow":"$"},"FKP":{"displayName":"Falkland-Pfund","displayName-count-one":"Falkland-Pfund","displayName-count-other":"Falkland-Pfund","symbol":"FKP","symbol-alt-narrow":"Fl£"},"FRF":{"displayName":"Französischer Franc","displayName-count-one":"Französischer Franc","displayName-count-other":"Französische Franc","symbol":"FRF"},"GBP":{"displayName":"Britisches Pfund","displayName-count-one":"Britisches Pfund","displayName-count-other":"Britische Pfund","symbol":"£","symbol-alt-narrow":"£"},"GEK":{"displayName":"Georgischer Kupon Larit","displayName-count-one":"Georgischer Kupon Larit","displayName-count-other":"Georgische Kupon Larit","symbol":"GEK"},"GEL":{"displayName":"Georgischer Lari","displayName-count-one":"Georgischer Lari","displayName-count-other":"Georgische Lari","symbol":"GEL","symbol-alt-narrow":"₾","symbol-alt-variant":"₾"},"GHC":{"displayName":"Ghanaischer Cedi (1979–2007)","displayName-count-one":"Ghanaischer Cedi (1979–2007)","displayName-count-other":"Ghanaische Cedi (1979–2007)","symbol":"GHC"},"GHS":{"displayName":"Ghanaischer Cedi","displayName-count-one":"Ghanaischer Cedi","displayName-count-other":"Ghanaische Cedi","symbol":"GHS"},"GIP":{"displayName":"Gibraltar-Pfund","displayName-count-one":"Gibraltar-Pfund","displayName-count-other":"Gibraltar-Pfund","symbol":"GIP","symbol-alt-narrow":"£"},"GMD":{"displayName":"Gambia-Dalasi","displayName-count-one":"Gambia-Dalasi","displayName-count-other":"Gambia-Dalasi","symbol":"GMD"},"GNF":{"displayName":"Guinea-Franc","displayName-count-one":"Guinea-Franc","displayName-count-other":"Guinea-Franc","symbol":"GNF","symbol-alt-narrow":"F.G."},"GNS":{"displayName":"Guineischer Syli","displayName-count-one":"Guineischer Syli","displayName-count-other":"Guineische Syli","symbol":"GNS"},"GQE":{"displayName":"Äquatorialguinea-Ekwele","displayName-count-one":"Äquatorialguinea-Ekwele","displayName-count-other":"Äquatorialguinea-Ekwele","symbol":"GQE"},"GRD":{"displayName":"Griechische Drachme","displayName-count-one":"Griechische Drachme","displayName-count-other":"Griechische Drachmen","symbol":"GRD"},"GTQ":{"displayName":"Guatemaltekischer Quetzal","displayName-count-one":"Guatemaltekischer Quetzal","displayName-count-other":"Guatemaltekische Quetzales","symbol":"GTQ","symbol-alt-narrow":"Q"},"GWE":{"displayName":"Portugiesisch Guinea Escudo","displayName-count-one":"Portugiesisch Guinea Escudo","displayName-count-other":"Portugiesisch Guinea Escudo","symbol":"GWE"},"GWP":{"displayName":"Guinea-Bissau Peso","displayName-count-one":"Guinea-Bissau Peso","displayName-count-other":"Guinea-Bissau Pesos","symbol":"GWP"},"GYD":{"displayName":"Guyana-Dollar","displayName-count-one":"Guyana-Dollar","displayName-count-other":"Guyana-Dollar","symbol":"GYD","symbol-alt-narrow":"$"},"HKD":{"displayName":"Hongkong-Dollar","displayName-count-one":"Hongkong-Dollar","displayName-count-other":"Hongkong-Dollar","symbol":"HK$","symbol-alt-narrow":"$"},"HNL":{"displayName":"Honduras-Lempira","displayName-count-one":"Honduras-Lempira","displayName-count-other":"Honduras-Lempira","symbol":"HNL","symbol-alt-narrow":"L"},"HRD":{"displayName":"Kroatischer Dinar","displayName-count-one":"Kroatischer Dinar","displayName-count-other":"Kroatische Dinar","symbol":"HRD"},"HRK":{"displayName":"Kroatischer Kuna","displayName-count-one":"Kroatischer Kuna","displayName-count-other":"Kroatische Kuna","symbol":"HRK","symbol-alt-narrow":"kn"},"HTG":{"displayName":"Haitianische Gourde","displayName-count-one":"Haitianische Gourde","displayName-count-other":"Haitianische Gourdes","symbol":"HTG"},"HUF":{"displayName":"Ungarischer Forint","displayName-count-one":"Ungarischer Forint","displayName-count-other":"Ungarische Forint","symbol":"HUF","symbol-alt-narrow":"Ft"},"IDR":{"displayName":"Indonesische Rupiah","displayName-count-one":"Indonesische Rupiah","displayName-count-other":"Indonesische Rupiah","symbol":"IDR","symbol-alt-narrow":"Rp"},"IEP":{"displayName":"Irisches Pfund","displayName-count-one":"Irisches Pfund","displayName-count-other":"Irische Pfund","symbol":"IEP"},"ILP":{"displayName":"Israelisches Pfund","displayName-count-one":"Israelisches Pfund","displayName-count-other":"Israelische Pfund","symbol":"ILP"},"ILR":{"displayName":"Israelischer Schekel (1980–1985)","displayName-count-one":"Israelischer Schekel (1980–1985)","displayName-count-other":"Israelische Schekel (1980–1985)","symbol":"ILR"},"ILS":{"displayName":"Israelischer Neuer Schekel","displayName-count-one":"Israelischer Neuer Schekel","displayName-count-other":"Israelische Neue Schekel","symbol":"₪","symbol-alt-narrow":"₪"},"INR":{"displayName":"Indische Rupie","displayName-count-one":"Indische Rupie","displayName-count-other":"Indische Rupien","symbol":"₹","symbol-alt-narrow":"₹"},"IQD":{"displayName":"Irakischer Dinar","displayName-count-one":"Irakischer Dinar","displayName-count-other":"Irakische Dinar","symbol":"IQD"},"IRR":{"displayName":"Iranischer Rial","displayName-count-one":"Iranischer Rial","displayName-count-other":"Iranische Rial","symbol":"IRR"},"ISJ":{"displayName":"Isländische Krone (1918–1981)","displayName-count-one":"Isländische Krone (1918–1981)","displayName-count-other":"Isländische Kronen (1918–1981)","symbol":"ISJ"},"ISK":{"displayName":"Isländische Krone","displayName-count-one":"Isländische Krone","displayName-count-other":"Isländische Kronen","symbol":"ISK","symbol-alt-narrow":"kr"},"ITL":{"displayName":"Italienische Lira","displayName-count-one":"Italienische Lira","displayName-count-other":"Italienische Lire","symbol":"ITL"},"JMD":{"displayName":"Jamaika-Dollar","displayName-count-one":"Jamaika-Dollar","displayName-count-other":"Jamaika-Dollar","symbol":"JMD","symbol-alt-narrow":"$"},"JOD":{"displayName":"Jordanischer Dinar","displayName-count-one":"Jordanischer Dinar","displayName-count-other":"Jordanische Dinar","symbol":"JOD"},"JPY":{"displayName":"Japanischer Yen","displayName-count-one":"Japanischer Yen","displayName-count-other":"Japanische Yen","symbol":"¥","symbol-alt-narrow":"¥"},"KES":{"displayName":"Kenia-Schilling","displayName-count-one":"Kenia-Schilling","displayName-count-other":"Kenia-Schilling","symbol":"KES"},"KGS":{"displayName":"Kirgisischer Som","displayName-count-one":"Kirgisischer Som","displayName-count-other":"Kirgisische Som","symbol":"KGS"},"KHR":{"displayName":"Kambodschanischer Riel","displayName-count-one":"Kambodschanischer Riel","displayName-count-other":"Kambodschanische Riel","symbol":"KHR","symbol-alt-narrow":"៛"},"KMF":{"displayName":"Komoren-Franc","displayName-count-one":"Komoren-Franc","displayName-count-other":"Komoren-Francs","symbol":"KMF","symbol-alt-narrow":"FC"},"KPW":{"displayName":"Nordkoreanischer Won","displayName-count-one":"Nordkoreanischer Won","displayName-count-other":"Nordkoreanische Won","symbol":"KPW","symbol-alt-narrow":"₩"},"KRH":{"displayName":"Südkoreanischer Hwan (1953–1962)","displayName-count-one":"Südkoreanischer Hwan (1953–1962)","displayName-count-other":"Südkoreanischer Hwan (1953–1962)","symbol":"KRH"},"KRO":{"displayName":"Südkoreanischer Won (1945–1953)","displayName-count-one":"Südkoreanischer Won (1945–1953)","displayName-count-other":"Südkoreanischer Won (1945–1953)","symbol":"KRO"},"KRW":{"displayName":"Südkoreanischer Won","displayName-count-one":"Südkoreanischer Won","displayName-count-other":"Südkoreanische Won","symbol":"₩","symbol-alt-narrow":"₩"},"KWD":{"displayName":"Kuwait-Dinar","displayName-count-one":"Kuwait-Dinar","displayName-count-other":"Kuwait-Dinar","symbol":"KWD"},"KYD":{"displayName":"Kaiman-Dollar","displayName-count-one":"Kaiman-Dollar","displayName-count-other":"Kaiman-Dollar","symbol":"KYD","symbol-alt-narrow":"$"},"KZT":{"displayName":"Kasachischer Tenge","displayName-count-one":"Kasachischer Tenge","displayName-count-other":"Kasachische Tenge","symbol":"KZT","symbol-alt-narrow":"₸"},"LAK":{"displayName":"Laotischer Kip","displayName-count-one":"Laotischer Kip","displayName-count-other":"Laotische Kip","symbol":"LAK","symbol-alt-narrow":"₭"},"LBP":{"displayName":"Libanesisches Pfund","displayName-count-one":"Libanesisches Pfund","displayName-count-other":"Libanesische Pfund","symbol":"LBP","symbol-alt-narrow":"L£"},"LKR":{"displayName":"Sri-Lanka-Rupie","displayName-count-one":"Sri-Lanka-Rupie","displayName-count-other":"Sri-Lanka-Rupien","symbol":"LKR","symbol-alt-narrow":"Rs"},"LRD":{"displayName":"Liberianischer Dollar","displayName-count-one":"Liberianischer Dollar","displayName-count-other":"Liberianische Dollar","symbol":"LRD","symbol-alt-narrow":"$"},"LSL":{"displayName":"Loti","displayName-count-one":"Loti","displayName-count-other":"Loti","symbol":"LSL"},"LTL":{"displayName":"Litauischer Litas","displayName-count-one":"Litauischer Litas","displayName-count-other":"Litauische Litas","symbol":"LTL","symbol-alt-narrow":"Lt"},"LTT":{"displayName":"Litauischer Talonas","displayName-count-one":"Litauische Talonas","displayName-count-other":"Litauische Talonas","symbol":"LTT"},"LUC":{"displayName":"Luxemburgischer Franc (konvertibel)","displayName-count-one":"Luxemburgische Franc (konvertibel)","displayName-count-other":"Luxemburgische Franc (konvertibel)","symbol":"LUC"},"LUF":{"displayName":"Luxemburgischer Franc","displayName-count-one":"Luxemburgische Franc","displayName-count-other":"Luxemburgische Franc","symbol":"LUF"},"LUL":{"displayName":"Luxemburgischer Finanz-Franc","displayName-count-one":"Luxemburgische Finanz-Franc","displayName-count-other":"Luxemburgische Finanz-Franc","symbol":"LUL"},"LVL":{"displayName":"Lettischer Lats","displayName-count-one":"Lettischer Lats","displayName-count-other":"Lettische Lats","symbol":"LVL","symbol-alt-narrow":"Ls"},"LVR":{"displayName":"Lettischer Rubel","displayName-count-one":"Lettische Rubel","displayName-count-other":"Lettische Rubel","symbol":"LVR"},"LYD":{"displayName":"Libyscher Dinar","displayName-count-one":"Libyscher Dinar","displayName-count-other":"Libysche Dinar","symbol":"LYD"},"MAD":{"displayName":"Marokkanischer Dirham","displayName-count-one":"Marokkanischer Dirham","displayName-count-other":"Marokkanische Dirham","symbol":"MAD"},"MAF":{"displayName":"Marokkanischer Franc","displayName-count-one":"Marokkanische Franc","displayName-count-other":"Marokkanische Franc","symbol":"MAF"},"MCF":{"displayName":"Monegassischer Franc","displayName-count-one":"Monegassischer Franc","displayName-count-other":"Monegassische Franc","symbol":"MCF"},"MDC":{"displayName":"Moldau-Cupon","displayName-count-one":"Moldau-Cupon","displayName-count-other":"Moldau-Cupon","symbol":"MDC"},"MDL":{"displayName":"Moldau-Leu","displayName-count-one":"Moldau-Leu","displayName-count-other":"Moldau-Leu","symbol":"MDL"},"MGA":{"displayName":"Madagaskar-Ariary","displayName-count-one":"Madagaskar-Ariary","displayName-count-other":"Madagaskar-Ariary","symbol":"MGA","symbol-alt-narrow":"Ar"},"MGF":{"displayName":"Madagaskar-Franc","displayName-count-one":"Madagaskar-Franc","displayName-count-other":"Madagaskar-Franc","symbol":"MGF"},"MKD":{"displayName":"Mazedonischer Denar","displayName-count-one":"Mazedonischer Denar","displayName-count-other":"Mazedonische Denari","symbol":"MKD"},"MKN":{"displayName":"Mazedonischer Denar (1992–1993)","displayName-count-one":"Mazedonischer Denar (1992–1993)","displayName-count-other":"Mazedonische Denar (1992–1993)","symbol":"MKN"},"MLF":{"displayName":"Malischer Franc","displayName-count-one":"Malische Franc","displayName-count-other":"Malische Franc","symbol":"MLF"},"MMK":{"displayName":"Myanmarischer Kyat","displayName-count-one":"Myanmarischer Kyat","displayName-count-other":"Myanmarische Kyat","symbol":"MMK","symbol-alt-narrow":"K"},"MNT":{"displayName":"Mongolischer Tögrög","displayName-count-one":"Mongolischer Tögrög","displayName-count-other":"Mongolische Tögrög","symbol":"MNT","symbol-alt-narrow":"₮"},"MOP":{"displayName":"Macao-Pataca","displayName-count-one":"Macao-Pataca","displayName-count-other":"Macao-Pataca","symbol":"MOP"},"MRO":{"displayName":"Mauretanischer Ouguiya","displayName-count-one":"Mauretanischer Ouguiya","displayName-count-other":"Mauretanische Ouguiya","symbol":"MRO"},"MTL":{"displayName":"Maltesische Lira","displayName-count-one":"Maltesische Lira","displayName-count-other":"Maltesische Lira","symbol":"MTL"},"MTP":{"displayName":"Maltesisches Pfund","displayName-count-one":"Maltesische Pfund","displayName-count-other":"Maltesische Pfund","symbol":"MTP"},"MUR":{"displayName":"Mauritius-Rupie","displayName-count-one":"Mauritius-Rupie","displayName-count-other":"Mauritius-Rupien","symbol":"MUR","symbol-alt-narrow":"Rs"},"MVP":{"displayName":"Malediven-Rupie (alt)","displayName-count-one":"Malediven-Rupie (alt)","displayName-count-other":"Malediven-Rupien (alt)","symbol":"MVP"},"MVR":{"displayName":"Malediven-Rufiyaa","displayName-count-one":"Malediven-Rufiyaa","displayName-count-other":"Malediven-Rupien","symbol":"MVR"},"MWK":{"displayName":"Malawi-Kwacha","displayName-count-one":"Malawi-Kwacha","displayName-count-other":"Malawi-Kwacha","symbol":"MWK"},"MXN":{"displayName":"Mexikanischer Peso","displayName-count-one":"Mexikanischer Peso","displayName-count-other":"Mexikanische Pesos","symbol":"MX$","symbol-alt-narrow":"$"},"MXP":{"displayName":"Mexikanischer Silber-Peso (1861–1992)","displayName-count-one":"Mexikanische Silber-Peso (1861–1992)","displayName-count-other":"Mexikanische Silber-Pesos (1861–1992)","symbol":"MXP"},"MXV":{"displayName":"Mexicanischer Unidad de Inversion (UDI)","displayName-count-one":"Mexicanischer Unidad de Inversion (UDI)","displayName-count-other":"Mexikanische Unidad de Inversion (UDI)","symbol":"MXV"},"MYR":{"displayName":"Malaysischer Ringgit","displayName-count-one":"Malaysischer Ringgit","displayName-count-other":"Malaysische Ringgit","symbol":"MYR","symbol-alt-narrow":"RM"},"MZE":{"displayName":"Mosambikanischer Escudo","displayName-count-one":"Mozambikanische Escudo","displayName-count-other":"Mozambikanische Escudo","symbol":"MZE"},"MZM":{"displayName":"Mosambikanischer Metical (1980–2006)","displayName-count-one":"Mosambikanischer Metical (1980–2006)","displayName-count-other":"Mosambikanische Meticais (1980–2006)","symbol":"MZM"},"MZN":{"displayName":"Mosambikanischer Metical","displayName-count-one":"Mosambikanischer Metical","displayName-count-other":"Mosambikanische Meticais","symbol":"MZN"},"NAD":{"displayName":"Namibia-Dollar","displayName-count-one":"Namibia-Dollar","displayName-count-other":"Namibia-Dollar","symbol":"NAD","symbol-alt-narrow":"$"},"NGN":{"displayName":"Nigerianischer Naira","displayName-count-one":"Nigerianischer Naira","displayName-count-other":"Nigerianische Naira","symbol":"NGN","symbol-alt-narrow":"₦"},"NIC":{"displayName":"Nicaraguanischer Córdoba (1988–1991)","displayName-count-one":"Nicaraguanischer Córdoba (1988–1991)","displayName-count-other":"Nicaraguanische Córdoba (1988–1991)","symbol":"NIC"},"NIO":{"displayName":"Nicaragua-Córdoba","displayName-count-one":"Nicaragua-Córdoba","displayName-count-other":"Nicaragua-Córdobas","symbol":"NIO","symbol-alt-narrow":"C$"},"NLG":{"displayName":"Niederländischer Gulden","displayName-count-one":"Niederländischer Gulden","displayName-count-other":"Niederländische Gulden","symbol":"NLG"},"NOK":{"displayName":"Norwegische Krone","displayName-count-one":"Norwegische Krone","displayName-count-other":"Norwegische Kronen","symbol":"NOK","symbol-alt-narrow":"kr"},"NPR":{"displayName":"Nepalesische Rupie","displayName-count-one":"Nepalesische Rupie","displayName-count-other":"Nepalesische Rupien","symbol":"NPR","symbol-alt-narrow":"Rs"},"NZD":{"displayName":"Neuseeland-Dollar","displayName-count-one":"Neuseeland-Dollar","displayName-count-other":"Neuseeland-Dollar","symbol":"NZ$","symbol-alt-narrow":"$"},"OMR":{"displayName":"Omanischer Rial","displayName-count-one":"Omanischer Rial","displayName-count-other":"Omanische Rials","symbol":"OMR"},"PAB":{"displayName":"Panamaischer Balboa","displayName-count-one":"Panamaischer Balboa","displayName-count-other":"Panamaische Balboas","symbol":"PAB"},"PEI":{"displayName":"Peruanischer Inti","displayName-count-one":"Peruanische Inti","displayName-count-other":"Peruanische Inti","symbol":"PEI"},"PEN":{"displayName":"Peruanischer Sol","displayName-count-one":"Peruanischer Sol","displayName-count-other":"Peruanische Sol","symbol":"PEN"},"PES":{"displayName":"Peruanischer Sol (1863–1965)","displayName-count-one":"Peruanischer Sol (1863–1965)","displayName-count-other":"Peruanische Sol (1863–1965)","symbol":"PES"},"PGK":{"displayName":"Papua-Neuguineischer Kina","displayName-count-one":"Papua-Neuguineischer Kina","displayName-count-other":"Papua-Neuguineische Kina","symbol":"PGK"},"PHP":{"displayName":"Philippinischer Peso","displayName-count-one":"Philippinischer Peso","displayName-count-other":"Philippinische Pesos","symbol":"PHP","symbol-alt-narrow":"₱"},"PKR":{"displayName":"Pakistanische Rupie","displayName-count-one":"Pakistanische Rupie","displayName-count-other":"Pakistanische Rupien","symbol":"PKR","symbol-alt-narrow":"Rs"},"PLN":{"displayName":"Polnischer Złoty","displayName-count-one":"Polnischer Złoty","displayName-count-other":"Polnische Złoty","symbol":"PLN","symbol-alt-narrow":"zł"},"PLZ":{"displayName":"Polnischer Zloty (1950–1995)","displayName-count-one":"Polnischer Zloty (1950–1995)","displayName-count-other":"Polnische Zloty (1950–1995)","symbol":"PLZ"},"PTE":{"displayName":"Portugiesischer Escudo","displayName-count-one":"Portugiesische Escudo","displayName-count-other":"Portugiesische Escudo","symbol":"PTE"},"PYG":{"displayName":"Paraguayischer Guaraní","displayName-count-one":"Paraguayischer Guaraní","displayName-count-other":"Paraguayische Guaraníes","symbol":"PYG","symbol-alt-narrow":"₲"},"QAR":{"displayName":"Katar-Riyal","displayName-count-one":"Katar-Riyal","displayName-count-other":"Katar-Riyal","symbol":"QAR"},"RHD":{"displayName":"Rhodesischer Dollar","displayName-count-one":"Rhodesische Dollar","displayName-count-other":"Rhodesische Dollar","symbol":"RHD"},"ROL":{"displayName":"Rumänischer Leu (1952–2006)","displayName-count-one":"Rumänischer Leu (1952–2006)","displayName-count-other":"Rumänische Leu (1952–2006)","symbol":"ROL"},"RON":{"displayName":"Rumänischer Leu","displayName-count-one":"Rumänischer Leu","displayName-count-other":"Rumänische Leu","symbol":"RON","symbol-alt-narrow":"L"},"RSD":{"displayName":"Serbischer Dinar","displayName-count-one":"Serbischer Dinar","displayName-count-other":"Serbische Dinaren","symbol":"RSD"},"RUB":{"displayName":"Russischer Rubel","displayName-count-one":"Russischer Rubel","displayName-count-other":"Russische Rubel","symbol":"RUB","symbol-alt-narrow":"₽"},"RUR":{"displayName":"Russischer Rubel (1991–1998)","displayName-count-one":"Russischer Rubel (1991–1998)","displayName-count-other":"Russische Rubel (1991–1998)","symbol":"RUR","symbol-alt-narrow":"р."},"RWF":{"displayName":"Ruanda-Franc","displayName-count-one":"Ruanda-Franc","displayName-count-other":"Ruanda-Francs","symbol":"RWF","symbol-alt-narrow":"F.Rw"},"SAR":{"displayName":"Saudi-Rial","displayName-count-one":"Saudi-Rial","displayName-count-other":"Saudi-Rial","symbol":"SAR"},"SBD":{"displayName":"Salomonen-Dollar","displayName-count-one":"Salomonen-Dollar","displayName-count-other":"Salomonen-Dollar","symbol":"SBD","symbol-alt-narrow":"$"},"SCR":{"displayName":"Seychellen-Rupie","displayName-count-one":"Seychellen-Rupie","displayName-count-other":"Seychellen-Rupien","symbol":"SCR"},"SDD":{"displayName":"Sudanesischer Dinar (1992–2007)","displayName-count-one":"Sudanesischer Dinar (1992–2007)","displayName-count-other":"Sudanesische Dinar (1992–2007)","symbol":"SDD"},"SDG":{"displayName":"Sudanesisches Pfund","displayName-count-one":"Sudanesisches Pfund","displayName-count-other":"Sudanesische Pfund","symbol":"SDG"},"SDP":{"displayName":"Sudanesisches Pfund (1957–1998)","displayName-count-one":"Sudanesisches Pfund (1957–1998)","displayName-count-other":"Sudanesische Pfund (1957–1998)","symbol":"SDP"},"SEK":{"displayName":"Schwedische Krone","displayName-count-one":"Schwedische Krone","displayName-count-other":"Schwedische Kronen","symbol":"SEK","symbol-alt-narrow":"kr"},"SGD":{"displayName":"Singapur-Dollar","displayName-count-one":"Singapur-Dollar","displayName-count-other":"Singapur-Dollar","symbol":"SGD","symbol-alt-narrow":"$"},"SHP":{"displayName":"St. Helena-Pfund","displayName-count-one":"St. Helena-Pfund","displayName-count-other":"St. Helena-Pfund","symbol":"SHP","symbol-alt-narrow":"£"},"SIT":{"displayName":"Slowenischer Tolar","displayName-count-one":"Slowenischer Tolar","displayName-count-other":"Slowenische Tolar","symbol":"SIT"},"SKK":{"displayName":"Slowakische Krone","displayName-count-one":"Slowakische Kronen","displayName-count-other":"Slowakische Kronen","symbol":"SKK"},"SLL":{"displayName":"Sierra-leonischer Leone","displayName-count-one":"Sierra-leonischer Leone","displayName-count-other":"Sierra-leonische Leones","symbol":"SLL"},"SOS":{"displayName":"Somalia-Schilling","displayName-count-one":"Somalia-Schilling","displayName-count-other":"Somalia-Schilling","symbol":"SOS"},"SRD":{"displayName":"Suriname-Dollar","displayName-count-one":"Suriname-Dollar","displayName-count-other":"Suriname-Dollar","symbol":"SRD","symbol-alt-narrow":"$"},"SRG":{"displayName":"Suriname Gulden","displayName-count-one":"Suriname-Gulden","displayName-count-other":"Suriname-Gulden","symbol":"SRG"},"SSP":{"displayName":"Südsudanesisches Pfund","displayName-count-one":"Südsudanesisches Pfund","displayName-count-other":"Südsudanesische Pfund","symbol":"SSP","symbol-alt-narrow":"£"},"STD":{"displayName":"São-toméischer Dobra","displayName-count-one":"São-toméischer Dobra","displayName-count-other":"São-toméische Dobra","symbol":"STD","symbol-alt-narrow":"Db"},"STN":{"displayName":"STN","symbol":"STN"},"SUR":{"displayName":"Sowjetischer Rubel","displayName-count-one":"Sowjetische Rubel","displayName-count-other":"Sowjetische Rubel","symbol":"SUR"},"SVC":{"displayName":"El Salvador Colon","displayName-count-one":"El Salvador-Colon","displayName-count-other":"El Salvador-Colon","symbol":"SVC"},"SYP":{"displayName":"Syrisches Pfund","displayName-count-one":"Syrisches Pfund","displayName-count-other":"Syrische Pfund","symbol":"SYP","symbol-alt-narrow":"SYP"},"SZL":{"displayName":"Swasiländischer Lilangeni","displayName-count-one":"Swasiländischer Lilangeni","displayName-count-other":"Swasiländische Emalangeni","symbol":"SZL"},"THB":{"displayName":"Thailändischer Baht","displayName-count-one":"Thailändischer Baht","displayName-count-other":"Thailändische Baht","symbol":"฿","symbol-alt-narrow":"฿"},"TJR":{"displayName":"Tadschikistan Rubel","displayName-count-one":"Tadschikistan-Rubel","displayName-count-other":"Tadschikistan-Rubel","symbol":"TJR"},"TJS":{"displayName":"Tadschikistan-Somoni","displayName-count-one":"Tadschikistan-Somoni","displayName-count-other":"Tadschikistan-Somoni","symbol":"TJS"},"TMM":{"displayName":"Turkmenistan-Manat (1993–2009)","displayName-count-one":"Turkmenistan-Manat (1993–2009)","displayName-count-other":"Turkmenistan-Manat (1993–2009)","symbol":"TMM"},"TMT":{"displayName":"Turkmenistan-Manat","displayName-count-one":"Turkmenistan-Manat","displayName-count-other":"Turkmenistan-Manat","symbol":"TMT"},"TND":{"displayName":"Tunesischer Dinar","displayName-count-one":"Tunesischer Dinar","displayName-count-other":"Tunesische Dinar","symbol":"TND"},"TOP":{"displayName":"Tongaischer Paʻanga","displayName-count-one":"Tongaischer Paʻanga","displayName-count-other":"Tongaische Paʻanga","symbol":"TOP","symbol-alt-narrow":"T$"},"TPE":{"displayName":"Timor-Escudo","displayName-count-one":"Timor-Escudo","displayName-count-other":"Timor-Escudo","symbol":"TPE"},"TRL":{"displayName":"Türkische Lira (1922–2005)","displayName-count-one":"Türkische Lira (1922–2005)","displayName-count-other":"Türkische Lira (1922–2005)","symbol":"TRL"},"TRY":{"displayName":"Türkische Lira","displayName-count-one":"Türkische Lira","displayName-count-other":"Türkische Lira","symbol":"TRY","symbol-alt-narrow":"₺","symbol-alt-variant":"TL"},"TTD":{"displayName":"Trinidad und Tobago-Dollar","displayName-count-one":"Trinidad und Tobago-Dollar","displayName-count-other":"Trinidad und Tobago-Dollar","symbol":"TTD","symbol-alt-narrow":"$"},"TWD":{"displayName":"Neuer Taiwan-Dollar","displayName-count-one":"Neuer Taiwan-Dollar","displayName-count-other":"Neue Taiwan-Dollar","symbol":"NT$","symbol-alt-narrow":"NT$"},"TZS":{"displayName":"Tansania-Schilling","displayName-count-one":"Tansania-Schilling","displayName-count-other":"Tansania-Schilling","symbol":"TZS"},"UAH":{"displayName":"Ukrainische Hrywnja","displayName-count-one":"Ukrainische Hrywnja","displayName-count-other":"Ukrainische Hrywen","symbol":"UAH","symbol-alt-narrow":"₴"},"UAK":{"displayName":"Ukrainischer Karbovanetz","displayName-count-one":"Ukrainische Karbovanetz","displayName-count-other":"Ukrainische Karbovanetz","symbol":"UAK"},"UGS":{"displayName":"Uganda-Schilling (1966–1987)","displayName-count-one":"Uganda-Schilling (1966–1987)","displayName-count-other":"Uganda-Schilling (1966–1987)","symbol":"UGS"},"UGX":{"displayName":"Uganda-Schilling","displayName-count-one":"Uganda-Schilling","displayName-count-other":"Uganda-Schilling","symbol":"UGX"},"USD":{"displayName":"US-Dollar","displayName-count-one":"US-Dollar","displayName-count-other":"US-Dollar","symbol":"$","symbol-alt-narrow":"$"},"USN":{"displayName":"US Dollar (Nächster Tag)","displayName-count-one":"US-Dollar (Nächster Tag)","displayName-count-other":"US-Dollar (Nächster Tag)","symbol":"USN"},"USS":{"displayName":"US Dollar (Gleicher Tag)","displayName-count-one":"US-Dollar (Gleicher Tag)","displayName-count-other":"US-Dollar (Gleicher Tag)","symbol":"USS"},"UYI":{"displayName":"Uruguayischer Peso (Indexierte Rechnungseinheiten)","displayName-count-one":"Uruguayischer Peso (Indexierte Rechnungseinheiten)","displayName-count-other":"Uruguayische Pesos (Indexierte Rechnungseinheiten)","symbol":"UYI"},"UYP":{"displayName":"Uruguayischer Peso (1975–1993)","displayName-count-one":"Uruguayischer Peso (1975–1993)","displayName-count-other":"Uruguayische Pesos (1975–1993)","symbol":"UYP"},"UYU":{"displayName":"Uruguayischer Peso","displayName-count-one":"Uruguayischer Peso","displayName-count-other":"Uruguayische Pesos","symbol":"UYU","symbol-alt-narrow":"$"},"UZS":{"displayName":"Usbekistan-Sum","displayName-count-one":"Usbekistan-Sum","displayName-count-other":"Usbekistan-Sum","symbol":"UZS"},"VEB":{"displayName":"Venezolanischer Bolívar (1871–2008)","displayName-count-one":"Venezolanischer Bolívar (1871–2008)","displayName-count-other":"Venezolanische Bolívares (1871–2008)","symbol":"VEB"},"VEF":{"displayName":"Venezolanischer Bolívar","displayName-count-one":"Venezolanischer Bolívar","displayName-count-other":"Venezolanische Bolívares","symbol":"VEF","symbol-alt-narrow":"Bs"},"VND":{"displayName":"Vietnamesischer Dong","displayName-count-one":"Vietnamesischer Dong","displayName-count-other":"Vietnamesische Dong","symbol":"₫","symbol-alt-narrow":"₫"},"VNN":{"displayName":"Vietnamesischer Dong(1978–1985)","displayName-count-one":"Vietnamesischer Dong(1978–1985)","displayName-count-other":"Vietnamesische Dong(1978–1985)","symbol":"VNN"},"VUV":{"displayName":"Vanuatu-Vatu","displayName-count-one":"Vanuatu-Vatu","displayName-count-other":"Vanuatu-Vatu","symbol":"VUV"},"WST":{"displayName":"Samoanischer Tala","displayName-count-one":"Samoanischer Tala","displayName-count-other":"Samoanische Tala","symbol":"WST"},"XAF":{"displayName":"CFA-Franc (BEAC)","displayName-count-one":"CFA-Franc (BEAC)","displayName-count-other":"CFA-Franc (BEAC)","symbol":"FCFA"},"XAG":{"displayName":"Unze Silber","displayName-count-one":"Unze Silber","displayName-count-other":"Unzen Silber","symbol":"XAG"},"XAU":{"displayName":"Unze Gold","displayName-count-one":"Unze Gold","displayName-count-other":"Unzen Gold","symbol":"XAU"},"XBA":{"displayName":"Europäische Rechnungseinheit","displayName-count-one":"Europäische Rechnungseinheiten","displayName-count-other":"Europäische Rechnungseinheiten","symbol":"XBA"},"XBB":{"displayName":"Europäische Währungseinheit (XBB)","displayName-count-one":"Europäische Währungseinheiten (XBB)","displayName-count-other":"Europäische Währungseinheiten (XBB)","symbol":"XBB"},"XBC":{"displayName":"Europäische Rechnungseinheit (XBC)","displayName-count-one":"Europäische Rechnungseinheiten (XBC)","displayName-count-other":"Europäische Rechnungseinheiten (XBC)","symbol":"XBC"},"XBD":{"displayName":"Europäische Rechnungseinheit (XBD)","displayName-count-one":"Europäische Rechnungseinheiten (XBD)","displayName-count-other":"Europäische Rechnungseinheiten (XBD)","symbol":"XBD"},"XCD":{"displayName":"Ostkaribischer Dollar","displayName-count-one":"Ostkaribischer Dollar","displayName-count-other":"Ostkaribische Dollar","symbol":"EC$","symbol-alt-narrow":"$"},"XDR":{"displayName":"Sonderziehungsrechte","displayName-count-one":"Sonderziehungsrechte","displayName-count-other":"Sonderziehungsrechte","symbol":"XDR"},"XEU":{"displayName":"Europäische Währungseinheit (XEU)","displayName-count-one":"Europäische Währungseinheiten (XEU)","displayName-count-other":"Europäische Währungseinheiten (XEU)","symbol":"XEU"},"XFO":{"displayName":"Französischer Gold-Franc","displayName-count-one":"Französische Gold-Franc","displayName-count-other":"Französische Gold-Franc","symbol":"XFO"},"XFU":{"displayName":"Französischer UIC-Franc","displayName-count-one":"Französische UIC-Franc","displayName-count-other":"Französische UIC-Franc","symbol":"XFU"},"XOF":{"displayName":"CFA-Franc (BCEAO)","displayName-count-one":"CFA-Franc (BCEAO)","displayName-count-other":"CFA-Francs (BCEAO)","symbol":"CFA"},"XPD":{"displayName":"Unze Palladium","displayName-count-one":"Unze Palladium","displayName-count-other":"Unzen Palladium","symbol":"XPD"},"XPF":{"displayName":"CFP-Franc","displayName-count-one":"CFP-Franc","displayName-count-other":"CFP-Franc","symbol":"CFPF"},"XPT":{"displayName":"Unze Platin","displayName-count-one":"Unze Platin","displayName-count-other":"Unzen Platin","symbol":"XPT"},"XRE":{"displayName":"RINET Funds","displayName-count-one":"RINET Funds","displayName-count-other":"RINET Funds","symbol":"XRE"},"XSU":{"displayName":"SUCRE","displayName-count-one":"SUCRE","displayName-count-other":"SUCRE","symbol":"XSU"},"XTS":{"displayName":"Testwährung","displayName-count-one":"Testwährung","displayName-count-other":"Testwährung","symbol":"XTS"},"XUA":{"displayName":"Rechnungseinheit der AfEB","displayName-count-one":"Rechnungseinheit der AfEB","displayName-count-other":"Rechnungseinheiten der AfEB","symbol":"XUA"},"XXX":{"displayName":"Unbekannte Währung","displayName-count-one":"(unbekannte Währung)","displayName-count-other":"(unbekannte Währung)","symbol":"XXX"},"YDD":{"displayName":"Jemen-Dinar","displayName-count-one":"Jemen-Dinar","displayName-count-other":"Jemen-Dinar","symbol":"YDD"},"YER":{"displayName":"Jemen-Rial","displayName-count-one":"Jemen-Rial","displayName-count-other":"Jemen-Rial","symbol":"YER"},"YUD":{"displayName":"Jugoslawischer Dinar (1966–1990)","displayName-count-one":"Jugoslawischer Dinar (1966–1990)","displayName-count-other":"Jugoslawische Dinar (1966–1990)","symbol":"YUD"},"YUM":{"displayName":"Jugoslawischer Neuer Dinar (1994–2002)","displayName-count-one":"Jugoslawischer Neuer Dinar (1994–2002)","displayName-count-other":"Jugoslawische Neue Dinar (1994–2002)","symbol":"YUM"},"YUN":{"displayName":"Jugoslawischer Dinar (konvertibel)","displayName-count-one":"Jugoslawische Dinar (konvertibel)","displayName-count-other":"Jugoslawische Dinar (konvertibel)","symbol":"YUN"},"YUR":{"displayName":"Jugoslawischer reformierter Dinar (1992–1993)","displayName-count-one":"Jugoslawischer reformierter Dinar (1992–1993)","displayName-count-other":"Jugoslawische reformierte Dinar (1992–1993)","symbol":"YUR"},"ZAL":{"displayName":"Südafrikanischer Rand (Finanz)","displayName-count-one":"Südafrikanischer Rand (Finanz)","displayName-count-other":"Südafrikanischer Rand (Finanz)","symbol":"ZAL"},"ZAR":{"displayName":"Südafrikanischer Rand","displayName-count-one":"Südafrikanischer Rand","displayName-count-other":"Südafrikanische Rand","symbol":"ZAR","symbol-alt-narrow":"R"},"ZMK":{"displayName":"Kwacha (1968–2012)","displayName-count-one":"Kwacha (1968–2012)","displayName-count-other":"Kwacha (1968–2012)","symbol":"ZMK"},"ZMW":{"displayName":"Kwacha","displayName-count-one":"Kwacha","displayName-count-other":"Kwacha","symbol":"ZMW","symbol-alt-narrow":"K"},"ZRN":{"displayName":"Zaire-Neuer Zaïre (1993–1998)","displayName-count-one":"Zaire-Neuer Zaïre (1993–1998)","displayName-count-other":"Zaire-Neue Zaïre (1993–1998)","symbol":"ZRN"},"ZRZ":{"displayName":"Zaire-Zaïre (1971–1993)","displayName-count-one":"Zaire-Zaïre (1971–1993)","displayName-count-other":"Zaire-Zaïre (1971–1993)","symbol":"ZRZ"},"ZWD":{"displayName":"Simbabwe-Dollar (1980–2008)","displayName-count-one":"Simbabwe-Dollar (1980–2008)","displayName-count-other":"Simbabwe-Dollar (1980–2008)","symbol":"ZWD"},"ZWL":{"displayName":"Simbabwe-Dollar (2009)","displayName-count-one":"Simbabwe-Dollar (2009)","displayName-count-other":"Simbabwe-Dollar (2009)","symbol":"ZWL"},"ZWR":{"displayName":"Simbabwe-Dollar (2008)","displayName-count-one":"Simbabwe-Dollar (2008)","displayName-count-other":"Simbabwe-Dollar (2008)","symbol":"ZWR"}},"defaultNumberingSystem":"latn","otherNumberingSystems":{"native":"latn"},"minimumGroupingDigits":"1","symbols-numberSystem-latn":{"decimal":",","group":".","list":";","percentSign":"%","plusSign":"+","minusSign":"-","exponential":"E","superscriptingExponent":"·","perMille":"‰","infinity":"∞","nan":"NaN","timeSeparator":":"},"decimalFormats-numberSystem-latn":{"standard":"#,##0.###","long":{"decimalFormat":{"1000-count-one":"0 Tausend","1000-count-other":"0 Tausend","10000-count-one":"00 Tausend","10000-count-other":"00 Tausend","100000-count-one":"000 Tausend","100000-count-other":"000 Tausend","1000000-count-one":"0 Million","1000000-count-other":"0 Millionen","10000000-count-one":"00 Millionen","10000000-count-other":"00 Millionen","100000000-count-one":"000 Millionen","100000000-count-other":"000 Millionen","1000000000-count-one":"0 Milliarde","1000000000-count-other":"0 Milliarden","10000000000-count-one":"00 Milliarden","10000000000-count-other":"00 Milliarden","100000000000-count-one":"000 Milliarden","100000000000-count-other":"000 Milliarden","1000000000000-count-one":"0 Billion","1000000000000-count-other":"0 Billionen","10000000000000-count-one":"00 Billionen","10000000000000-count-other":"00 Billionen","100000000000000-count-one":"000 Billionen","100000000000000-count-other":"000 Billionen"}},"short":{"decimalFormat":{"1000-count-one":"0 Tsd'.'","1000-count-other":"0 Tsd'.'","10000-count-one":"00 Tsd'.'","10000-count-other":"00 Tsd'.'","100000-count-one":"000 Tsd'.'","100000-count-other":"000 Tsd'.'","1000000-count-one":"0 Mio'.'","1000000-count-other":"0 Mio'.'","10000000-count-one":"00 Mio'.'","10000000-count-other":"00 Mio'.'","100000000-count-one":"000 Mio'.'","100000000-count-other":"000 Mio'.'","1000000000-count-one":"0 Mrd'.'","1000000000-count-other":"0 Mrd'.'","10000000000-count-one":"00 Mrd'.'","10000000000-count-other":"00 Mrd'.'","100000000000-count-one":"000 Mrd'.'","100000000000-count-other":"000 Mrd'.'","1000000000000-count-one":"0 Bio'.'","1000000000000-count-other":"0 Bio'.'","10000000000000-count-one":"00 Bio'.'","10000000000000-count-other":"00 Bio'.'","100000000000000-count-one":"000 Bio'.'","100000000000000-count-other":"000 Bio'.'"}}},"scientificFormats-numberSystem-latn":{"standard":"#E0"},"percentFormats-numberSystem-latn":{"standard":"#,##0 %"},"currencyFormats-numberSystem-latn":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"#,##0.00 ¤","accounting":"#,##0.00 ¤","short":{"standard":{"1000-count-one":"0 Tsd'.' ¤","1000-count-other":"0 Tsd'.' ¤","10000-count-one":"00 Tsd'.' ¤","10000-count-other":"00 Tsd'.' ¤","100000-count-one":"000 Tsd'.' ¤","100000-count-other":"000 Tsd'.' ¤","1000000-count-one":"0 Mio'.' ¤","1000000-count-other":"0 Mio'.' ¤","10000000-count-one":"00 Mio'.' ¤","10000000-count-other":"00 Mio'.' ¤","100000000-count-one":"000 Mio'.' ¤","100000000-count-other":"000 Mio'.' ¤","1000000000-count-one":"0 Mrd'.' ¤","1000000000-count-other":"0 Mrd'.' ¤","10000000000-count-one":"00 Mrd'.' ¤","10000000000-count-other":"00 Mrd'.' ¤","100000000000-count-one":"000 Mrd'.' ¤","100000000000-count-other":"000 Mrd'.' ¤","1000000000000-count-one":"0 Bio'.' ¤","1000000000000-count-other":"0 Bio'.' ¤","10000000000000-count-one":"00 Bio'.' ¤","10000000000000-count-other":"00 Bio'.' ¤","100000000000000-count-one":"000 Bio'.' ¤","100000000000000-count-other":"000 Bio'.' ¤"}},"unitPattern-count-one":"{0} {1}","unitPattern-count-other":"{0} {1}"},"miscPatterns-numberSystem-latn":{"atLeast":"{0}+","range":"{0}–{1}"},"minimalPairs":{"pluralMinimalPairs-count-one":"{0} Tag","pluralMinimalPairs-count-other":"{0} Tage","other":"{0}. Abzweigung nach rechts nehmen"}}},"es":{"identity":{"version":{"_number":"$Revision: 13722 $","_cldrVersion":"32"},"language":"es"},"dates":{"calendars":{"gregorian":{"months":{"format":{"abbreviated":{"1":"ene.","2":"feb.","3":"mar.","4":"abr.","5":"may.","6":"jun.","7":"jul.","8":"ago.","9":"sept.","10":"oct.","11":"nov.","12":"dic."},"narrow":{"1":"E","2":"F","3":"M","4":"A","5":"M","6":"J","7":"J","8":"A","9":"S","10":"O","11":"N","12":"D"},"wide":{"1":"enero","2":"febrero","3":"marzo","4":"abril","5":"mayo","6":"junio","7":"julio","8":"agosto","9":"septiembre","10":"octubre","11":"noviembre","12":"diciembre"}},"stand-alone":{"abbreviated":{"1":"ene.","2":"feb.","3":"mar.","4":"abr.","5":"may.","6":"jun.","7":"jul.","8":"ago.","9":"sept.","10":"oct.","11":"nov.","12":"dic."},"narrow":{"1":"E","2":"F","3":"M","4":"A","5":"M","6":"J","7":"J","8":"A","9":"S","10":"O","11":"N","12":"D"},"wide":{"1":"enero","2":"febrero","3":"marzo","4":"abril","5":"mayo","6":"junio","7":"julio","8":"agosto","9":"septiembre","10":"octubre","11":"noviembre","12":"diciembre"}}},"days":{"format":{"abbreviated":{"sun":"dom.","mon":"lun.","tue":"mar.","wed":"mié.","thu":"jue.","fri":"vie.","sat":"sáb."},"narrow":{"sun":"D","mon":"L","tue":"M","wed":"X","thu":"J","fri":"V","sat":"S"},"short":{"sun":"DO","mon":"LU","tue":"MA","wed":"MI","thu":"JU","fri":"VI","sat":"SA"},"wide":{"sun":"domingo","mon":"lunes","tue":"martes","wed":"miércoles","thu":"jueves","fri":"viernes","sat":"sábado"}},"stand-alone":{"abbreviated":{"sun":"dom.","mon":"lun.","tue":"mar.","wed":"mié.","thu":"jue.","fri":"vie.","sat":"sáb."},"narrow":{"sun":"D","mon":"L","tue":"M","wed":"X","thu":"J","fri":"V","sat":"S"},"short":{"sun":"DO","mon":"LU","tue":"MA","wed":"MI","thu":"JU","fri":"VI","sat":"SA"},"wide":{"sun":"domingo","mon":"lunes","tue":"martes","wed":"miércoles","thu":"jueves","fri":"viernes","sat":"sábado"}}},"quarters":{"format":{"abbreviated":{"1":"T1","2":"T2","3":"T3","4":"T4"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"1.er trimestre","2":"2.º trimestre","3":"3.er trimestre","4":"4.º trimestre"}},"stand-alone":{"abbreviated":{"1":"T1","2":"T2","3":"T3","4":"T4"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"1.er trimestre","2":"2.º trimestre","3":"3.er trimestre","4":"4.º trimestre"}}},"dayPeriods":{"format":{"abbreviated":{"am":"a. m.","noon":"del mediodía","pm":"p. m.","morning1":"de la madrugada","morning2":"de la mañana","evening1":"de la tarde","night1":"de la noche"},"narrow":{"am":"a. m.","noon":"del mediodía","pm":"p. m.","morning1":"de la madrugada","morning2":"de la mañana","evening1":"de la tarde","night1":"de la noche"},"wide":{"am":"a. m.","noon":"del mediodía","pm":"p. m.","morning1":"de la madrugada","morning2":"de la mañana","evening1":"de la tarde","night1":"de la noche"}},"stand-alone":{"abbreviated":{"am":"a. m.","noon":"mediodía","pm":"p. m.","morning1":"madrugada","morning2":"mañana","evening1":"tarde","night1":"noche"},"narrow":{"am":"a. m.","noon":"mediodía","pm":"p. m.","morning1":"madrugada","morning2":"mañana","evening1":"tarde","night1":"noche"},"wide":{"am":"a. m.","noon":"mediodía","pm":"p. m.","morning1":"madrugada","morning2":"mañana","evening1":"tarde","night1":"noche"}}},"eras":{"eraNames":{"0":"antes de Cristo","1":"después de Cristo","0-alt-variant":"antes de la era común","1-alt-variant":"era común"},"eraAbbr":{"0":"a. C.","1":"d. C.","0-alt-variant":"a. e. c.","1-alt-variant":"e. c."},"eraNarrow":{"0":"a. C.","1":"d. C.","0-alt-variant":"a. e. c.","1-alt-variant":"e. c."}},"dateFormats":{"full":"EEEE, d 'de' MMMM 'de' y","long":"d 'de' MMMM 'de' y","medium":"d MMM y","short":"d/M/yy"},"timeFormats":{"full":"H:mm:ss (zzzz)","long":"H:mm:ss z","medium":"H:mm:ss","short":"H:mm"},"dateTimeFormats":{"full":"{1}, {0}","long":"{1}, {0}","medium":"{1} {0}","short":"{1} {0}","availableFormats":{"Bh":"h B","Bhm":"h:mm B","Bhms":"h:mm:ss B","d":"d","E":"ccc","EBhm":"E h:mm B","EBhms":"E h:mm:ss B","Ed":"E d","Ehm":"E, h:mm a","EHm":"E, H:mm","Ehms":"E, h:mm:ss a","EHms":"E, H:mm:ss","Gy":"y G","GyMMM":"MMM y G","GyMMMd":"d MMM y G","GyMMMEd":"E, d MMM y G","GyMMMM":"MMMM 'de' y G","GyMMMMd":"d 'de' MMMM 'de' y G","GyMMMMEd":"E, d 'de' MMMM 'de' y G","h":"h a","H":"H","hm":"h:mm a","Hm":"H:mm","hms":"h:mm:ss a","Hms":"H:mm:ss","hmsv":"h:mm:ss a v","Hmsv":"H:mm:ss v","hmsvvvv":"h:mm:ss a (vvvv)","Hmsvvvv":"H:mm:ss (vvvv)","hmv":"h:mm a v","Hmv":"H:mm v","M":"L","Md":"d/M","MEd":"E, d/M","MMd":"d/M","MMdd":"d/M","MMM":"LLL","MMMd":"d MMM","MMMEd":"E, d MMM","MMMMd":"d 'de' MMMM","MMMMEd":"E, d 'de' MMMM","MMMMW-count-one":"'semana' W 'de' MMM","MMMMW-count-other":"'semana' W 'de' MMM","ms":"mm:ss","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"EEE, d/M/y","yMM":"M/y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"EEE, d MMM y","yMMMM":"MMMM 'de' y","yMMMMd":"d 'de' MMMM 'de' y","yMMMMEd":"EEE, d 'de' MMMM 'de' y","yQQQ":"QQQ y","yQQQQ":"QQQQ 'de' y","yw-count-one":"'semana' w 'de' Y","yw-count-other":"'semana' w 'de' Y"},"appendItems":{"Day":"{0} ({2}: {1})","Day-Of-Week":"{0} {1}","Era":"{1} {0}","Hour":"{0} ({2}: {1})","Minute":"{0} ({2}: {1})","Month":"{0} ({2}: {1})","Quarter":"{0} ({2}: {1})","Second":"{0} ({2}: {1})","Timezone":"{0} {1}","Week":"{0} ({2}: {1})","Year":"{1} {0}"},"intervalFormats":{"intervalFormatFallback":"{0}–{1}","d":{"d":"d–d"},"h":{"a":"h a – h a","h":"h–h a"},"H":{"H":"H–H"},"hm":{"a":"h:mm a – h:mm a","h":"h:mm – h:mm a","m":"h:mm – h:mm a"},"Hm":{"H":"H:mm–H:mm","m":"H:mm–H:mm"},"hmv":{"a":"h:mm a – h:mm a v","h":"h:mm–h:mm a v","m":"h:mm–h:mm a v"},"Hmv":{"H":"H:mm–H:mm v","m":"H:mm–H:mm v"},"hv":{"a":"h a – h a v","h":"h–h a v"},"Hv":{"H":"H–H v"},"M":{"M":"M–M"},"Md":{"d":"d/M–d/M","M":"d/M–d/M"},"MEd":{"d":"E, d/M – E, d/M","M":"E, d/M – E, d/M"},"MMM":{"M":"MMM–MMM"},"MMMd":{"d":"d–d MMM","M":"d MMM – d MMM"},"MMMEd":{"d":"E, d MMM – E, d MMM","M":"E, d MMM – E, d MMM"},"MMMMd":{"d":"d–d 'de' MMMM","M":"d 'de' MMMM–d 'de' MMMM"},"MMMMEd":{"d":"E, d 'de' MMMM–E, d 'de' MMMM","M":"E, d 'de' MMMM–E, d 'de' MMMM"},"y":{"y":"y–y"},"yM":{"M":"M/y–M/y","y":"M/y–M/y"},"yMd":{"d":"d/M/y–d/M/y","M":"d/M/y–d/M/y","y":"d/M/y–d/M/y"},"yMEd":{"d":"E, d/M/y – E, d/M/y","M":"E, d/M/y – E, d/M/y","y":"E, d/M/y – E, d/M/y"},"yMMM":{"M":"MMM–MMM y","y":"MMM y – MMM y"},"yMMMd":{"d":"d–d MMM y","M":"d MMM – d MMM y","y":"d MMM y – d MMM y"},"yMMMEd":{"d":"E, d MMM – E, d MMM y","M":"E, d MMM – E, d MMM y","y":"E, d MMM y – E, d MMM y"},"yMMMM":{"M":"MMMM–MMMM 'de' y","y":"MMMM 'de' y – MMMM 'de' y"},"yMMMMd":{"d":"d–d 'de' MMMM 'de' y","M":"d 'de' MMMM–d 'de' MMMM 'de' y","y":"d 'de' MMMM 'de' y–d 'de' MMMM 'de' y"},"yMMMMEd":{"d":"E, d 'de' MMMM–E, d 'de' MMMM 'de' y","M":"E, d 'de' MMMM–E, d 'de' MMMM 'de' y","y":"E, d 'de' MMMM 'de' y–E, d 'de' MMMM 'de' y"}}}}},"fields":{"era":{"displayName":"era"},"era-short":{"displayName":"era"},"era-narrow":{"displayName":"era"},"year":{"displayName":"año","relative-type--1":"el año pasado","relative-type-0":"este año","relative-type-1":"el próximo año","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} año","relativeTimePattern-count-other":"dentro de {0} años"},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} año","relativeTimePattern-count-other":"hace {0} años"}},"year-short":{"displayName":"a","relative-type--1":"el año pasado","relative-type-0":"este año","relative-type-1":"el próximo año","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} a","relativeTimePattern-count-other":"dentro de {0} a"},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} a","relativeTimePattern-count-other":"hace {0} a"}},"year-narrow":{"displayName":"a","relative-type--1":"el año pasado","relative-type-0":"este año","relative-type-1":"el próximo año","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} a","relativeTimePattern-count-other":"dentro de {0} a"},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} a","relativeTimePattern-count-other":"hace {0} a"}},"quarter":{"displayName":"trimestre","relative-type--1":"el trimestre pasado","relative-type-0":"este trimestre","relative-type-1":"el próximo trimestre","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} trimestre","relativeTimePattern-count-other":"dentro de {0} trimestres"},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} trimestre","relativeTimePattern-count-other":"hace {0} trimestres"}},"quarter-short":{"displayName":"trim.","relative-type--1":"el trimestre pasado","relative-type-0":"este trimestre","relative-type-1":"el próximo trimestre","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} trim.","relativeTimePattern-count-other":"dentro de {0} trim."},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} trim.","relativeTimePattern-count-other":"hace {0} trim."}},"quarter-narrow":{"displayName":"trim.","relative-type--1":"el trimestre pasado","relative-type-0":"este trimestre","relative-type-1":"el próximo trimestre","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} trim.","relativeTimePattern-count-other":"dentro de {0} trim."},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} trim.","relativeTimePattern-count-other":"hace {0} trim."}},"month":{"displayName":"mes","relative-type--1":"el mes pasado","relative-type-0":"este mes","relative-type-1":"el próximo mes","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} mes","relativeTimePattern-count-other":"dentro de {0} meses"},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} mes","relativeTimePattern-count-other":"hace {0} meses"}},"month-short":{"displayName":"m","relative-type--1":"el mes pasado","relative-type-0":"este mes","relative-type-1":"el próximo mes","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} m","relativeTimePattern-count-other":"dentro de {0} m"},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} m","relativeTimePattern-count-other":"hace {0} m"}},"month-narrow":{"displayName":"m","relative-type--1":"el mes pasado","relative-type-0":"este mes","relative-type-1":"el próximo mes","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} m","relativeTimePattern-count-other":"dentro de {0} m"},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} m","relativeTimePattern-count-other":"hace {0} m"}},"week":{"displayName":"semana","relative-type--1":"la semana pasada","relative-type-0":"esta semana","relative-type-1":"la próxima semana","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} semana","relativeTimePattern-count-other":"dentro de {0} semanas"},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} semana","relativeTimePattern-count-other":"hace {0} semanas"},"relativePeriod":"la semana del {0}"},"week-short":{"displayName":"sem.","relative-type--1":"la semana pasada","relative-type-0":"esta semana","relative-type-1":"la próxima semana","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} sem.","relativeTimePattern-count-other":"dentro de {0} sem."},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} sem.","relativeTimePattern-count-other":"hace {0} sem."},"relativePeriod":"la sem. del {0}"},"week-narrow":{"displayName":"sem.","relative-type--1":"la semana pasada","relative-type-0":"esta semana","relative-type-1":"la próxima semana","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} sem.","relativeTimePattern-count-other":"dentro de {0} sem."},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} sem.","relativeTimePattern-count-other":"hace {0} sem."},"relativePeriod":"la sem. del {0}"},"weekOfMonth":{"displayName":"semana del mes"},"weekOfMonth-short":{"displayName":"sem. de mes"},"weekOfMonth-narrow":{"displayName":"sem. de mes"},"day":{"displayName":"día","relative-type--2":"anteayer","relative-type--1":"ayer","relative-type-0":"hoy","relative-type-1":"mañana","relative-type-2":"pasado mañana","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} día","relativeTimePattern-count-other":"dentro de {0} días"},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} día","relativeTimePattern-count-other":"hace {0} días"}},"day-short":{"displayName":"d","relative-type--2":"anteayer","relative-type--1":"ayer","relative-type-0":"hoy","relative-type-1":"mañana","relative-type-2":"pasado mañana","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} día","relativeTimePattern-count-other":"dentro de {0} días"},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} día","relativeTimePattern-count-other":"hace {0} días"}},"day-narrow":{"displayName":"d","relative-type--2":"anteayer","relative-type--1":"ayer","relative-type-0":"hoy","relative-type-1":"mañana","relative-type-2":"pasado mañana","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} día","relativeTimePattern-count-other":"dentro de {0} días"},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} día","relativeTimePattern-count-other":"hace {0} días"}},"dayOfYear":{"displayName":"día del año"},"dayOfYear-short":{"displayName":"día del a"},"dayOfYear-narrow":{"displayName":"día del a"},"weekday":{"displayName":"día de la semana"},"weekday-short":{"displayName":"día de sem."},"weekday-narrow":{"displayName":"día de sem."},"weekdayOfMonth":{"displayName":"día de la semana del mes"},"weekdayOfMonth-short":{"displayName":"día de sem. de mes"},"weekdayOfMonth-narrow":{"displayName":"día de sem. de mes"},"sun":{"relative-type--1":"el domingo pasado","relative-type-0":"este domingo","relative-type-1":"el próximo domingo","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} domingo","relativeTimePattern-count-other":"dentro de {0} domingos"},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} domingo","relativeTimePattern-count-other":"hace {0} domingos"}},"sun-short":{"relative-type--1":"el dom. pasado","relative-type-0":"este dom.","relative-type-1":"el próximo dom.","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} dom.","relativeTimePattern-count-other":"dentro de {0} dom."},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} dom.","relativeTimePattern-count-other":"hace {0} dom."}},"sun-narrow":{"relative-type--1":"el DO pasado","relative-type-0":"este DO","relative-type-1":"el próximo DO","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} DO","relativeTimePattern-count-other":"dentro de {0} DO"},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} DO","relativeTimePattern-count-other":"hace {0} DO"}},"mon":{"relative-type--1":"el lunes pasado","relative-type-0":"este lunes","relative-type-1":"el próximo lunes","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} lunes","relativeTimePattern-count-other":"dentro de {0} lunes"},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} lunes","relativeTimePattern-count-other":"hace {0} lunes"}},"mon-short":{"relative-type--1":"el lun. pasado","relative-type-0":"este lun.","relative-type-1":"el próximo lun.","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} lun.","relativeTimePattern-count-other":"dentro de {0} lun."},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} lun.","relativeTimePattern-count-other":"hace {0} lun."}},"mon-narrow":{"relative-type--1":"el LU pasado","relative-type-0":"este LU","relative-type-1":"el próximo LU","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} LU","relativeTimePattern-count-other":"dentro de {0} LU"},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} LU","relativeTimePattern-count-other":"hace {0} LU"}},"tue":{"relative-type--1":"el martes pasado","relative-type-0":"este martes","relative-type-1":"el próximo martes","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} martes","relativeTimePattern-count-other":"dentro de {0} martes"},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} martes","relativeTimePattern-count-other":"hace {0} martes"}},"tue-short":{"relative-type--1":"el mar. pasado","relative-type-0":"este mar.","relative-type-1":"el próximo mar.","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} mar.","relativeTimePattern-count-other":"dentro de {0} mar."},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} mar.","relativeTimePattern-count-other":"hace {0} mar."}},"tue-narrow":{"relative-type--1":"el MA pasado","relative-type-0":"este MA","relative-type-1":"el próximo MA","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} MA","relativeTimePattern-count-other":"dentro de {0} MA"},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} MA","relativeTimePattern-count-other":"hace {0} MA"}},"wed":{"relative-type--1":"el miércoles pasado","relative-type-0":"este miércoles","relative-type-1":"el próximo miércoles","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} miércoles","relativeTimePattern-count-other":"dentro de {0} miércoles"},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} miércoles","relativeTimePattern-count-other":"hace {0} miércoles"}},"wed-short":{"relative-type--1":"el mié. pasado","relative-type-0":"este mié.","relative-type-1":"el próximo mié.","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} mié.","relativeTimePattern-count-other":"dentro de {0} mié."},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} mié.","relativeTimePattern-count-other":"hace {0} mié."}},"wed-narrow":{"relative-type--1":"el MI pasado","relative-type-0":"este MI","relative-type-1":"el próximo MI","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} MI","relativeTimePattern-count-other":"dentro de {0} MI"},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} MI","relativeTimePattern-count-other":"hace {0} MI"}},"thu":{"relative-type--1":"el jueves pasado","relative-type-0":"este jueves","relative-type-1":"el próximo jueves","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} jueves","relativeTimePattern-count-other":"dentro de {0} jueves"},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} jueves","relativeTimePattern-count-other":"hace {0} jueves"}},"thu-short":{"relative-type--1":"el jue. pasado","relative-type-0":"este jue.","relative-type-1":"el próximo jue.","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} jue.","relativeTimePattern-count-other":"dentro de {0} jue."},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} jue.","relativeTimePattern-count-other":"hace {0} jue."}},"thu-narrow":{"relative-type--1":"el JU pasado","relative-type-0":"este JU","relative-type-1":"el próximo JU","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} JU","relativeTimePattern-count-other":"dentro de {0} JU"},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} JU","relativeTimePattern-count-other":"hace {0} JU"}},"fri":{"relative-type--1":"el viernes pasado","relative-type-0":"este viernes","relative-type-1":"el próximo viernes","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} viernes","relativeTimePattern-count-other":"dentro de {0} viernes"},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} viernes","relativeTimePattern-count-other":"hace {0} viernes"}},"fri-short":{"relative-type--1":"el vie. pasado","relative-type-0":"este vie.","relative-type-1":"el próximo vie.","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} vie.","relativeTimePattern-count-other":"dentro de {0} vie."},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} vie.","relativeTimePattern-count-other":"hace {0} vie."}},"fri-narrow":{"relative-type--1":"el VI pasado","relative-type-0":"este VI","relative-type-1":"el próximo VI","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} VI","relativeTimePattern-count-other":"dentro de {0} VI"},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} VI","relativeTimePattern-count-other":"hace {0} VI"}},"sat":{"relative-type--1":"el sábado pasado","relative-type-0":"este sábado","relative-type-1":"el próximo sábado","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} sábado","relativeTimePattern-count-other":"dentro de {0} sábados"},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} sábado","relativeTimePattern-count-other":"hace {0} sábados"}},"sat-short":{"relative-type--1":"el sáb. pasado","relative-type-0":"este sáb.","relative-type-1":"el próximo sáb.","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} sáb.","relativeTimePattern-count-other":"dentro de {0} sáb."},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} sáb.","relativeTimePattern-count-other":"hace {0} sáb."}},"sat-narrow":{"relative-type--1":"el SA pasado","relative-type-0":"este SA","relative-type-1":"el próximo SA","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} SA","relativeTimePattern-count-other":"dentro de {0} SA"},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} SA","relativeTimePattern-count-other":"hace {0} SA"}},"dayperiod-short":{"displayName":"a. m./p. m."},"dayperiod":{"displayName":"a. m./p. m."},"dayperiod-narrow":{"displayName":"a. m./p. m."},"hour":{"displayName":"hora","relative-type-0":"esta hora","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} hora","relativeTimePattern-count-other":"dentro de {0} horas"},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} hora","relativeTimePattern-count-other":"hace {0} horas"}},"hour-short":{"displayName":"h","relative-type-0":"esta hora","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} h","relativeTimePattern-count-other":"dentro de {0} h"},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} h","relativeTimePattern-count-other":"hace {0} h"}},"hour-narrow":{"displayName":"h","relative-type-0":"esta hora","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} h","relativeTimePattern-count-other":"dentro de {0} h"},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} h","relativeTimePattern-count-other":"hace {0} h"}},"minute":{"displayName":"minuto","relative-type-0":"este minuto","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} minuto","relativeTimePattern-count-other":"dentro de {0} minutos"},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} minuto","relativeTimePattern-count-other":"hace {0} minutos"}},"minute-short":{"displayName":"min","relative-type-0":"este minuto","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} min","relativeTimePattern-count-other":"dentro de {0} min"},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} min","relativeTimePattern-count-other":"hace {0} min"}},"minute-narrow":{"displayName":"min","relative-type-0":"este minuto","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} min","relativeTimePattern-count-other":"dentro de {0} min"},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} min","relativeTimePattern-count-other":"hace {0} min"}},"second":{"displayName":"segundo","relative-type-0":"ahora","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} segundo","relativeTimePattern-count-other":"dentro de {0} segundos"},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} segundo","relativeTimePattern-count-other":"hace {0} segundos"}},"second-short":{"displayName":"s","relative-type-0":"ahora","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} s","relativeTimePattern-count-other":"dentro de {0} s"},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} s","relativeTimePattern-count-other":"hace {0} s"}},"second-narrow":{"displayName":"s","relative-type-0":"ahora","relativeTime-type-future":{"relativeTimePattern-count-one":"dentro de {0} s","relativeTimePattern-count-other":"dentro de {0} s"},"relativeTime-type-past":{"relativeTimePattern-count-one":"hace {0} s","relativeTimePattern-count-other":"hace {0} s"}},"zone":{"displayName":"zona horaria"},"zone-short":{"displayName":"zona"},"zone-narrow":{"displayName":"zona"}}},"numbers":{"currencies":{"ADP":{"displayName":"peseta andorrana","displayName-count-one":"peseta andorrana","displayName-count-other":"pesetas andorranas","symbol":"ADP"},"AED":{"displayName":"dírham de los Emiratos Árabes Unidos","displayName-count-one":"dírham de los Emiratos Árabes Unidos","displayName-count-other":"dírhams de los Emiratos Árabes Unidos","symbol":"AED"},"AFA":{"displayName":"afgani (1927–2002)","symbol":"AFA"},"AFN":{"displayName":"afgani","displayName-count-one":"afgani","displayName-count-other":"afganis","symbol":"AFN"},"ALK":{"displayName":"ALK","symbol":"ALK"},"ALL":{"displayName":"lek","displayName-count-one":"lek","displayName-count-other":"lekes","symbol":"ALL"},"AMD":{"displayName":"dram","displayName-count-one":"dram","displayName-count-other":"drams","symbol":"AMD"},"ANG":{"displayName":"florín de las Antillas Neerlandesas","displayName-count-one":"florín de las Antillas Neerlandesas","displayName-count-other":"florines de las Antillas Neerlandesas","symbol":"ANG"},"AOA":{"displayName":"kuanza","displayName-count-one":"kuanza","displayName-count-other":"kuanzas","symbol":"AOA","symbol-alt-narrow":"Kz"},"AOK":{"displayName":"kwanza angoleño (1977–1990)","symbol":"AOK"},"AON":{"displayName":"nuevo kwanza angoleño (1990–2000)","symbol":"AON"},"AOR":{"displayName":"kwanza reajustado angoleño (1995–1999)","symbol":"AOR"},"ARA":{"displayName":"austral argentino","displayName-count-one":"austral argentino","displayName-count-other":"australes argentinos","symbol":"ARA"},"ARL":{"displayName":"ARL","symbol":"ARL"},"ARM":{"displayName":"ARM","symbol":"ARM"},"ARP":{"displayName":"peso argentino (1983–1985)","displayName-count-one":"peso argentino (ARP)","displayName-count-other":"pesos argentinos (ARP)","symbol":"ARP"},"ARS":{"displayName":"peso argentino","displayName-count-one":"peso argentino","displayName-count-other":"pesos argentinos","symbol":"ARS","symbol-alt-narrow":"$"},"ATS":{"displayName":"chelín austriaco","displayName-count-one":"chelín austriaco","displayName-count-other":"chelines austriacos","symbol":"ATS"},"AUD":{"displayName":"dólar australiano","displayName-count-one":"dólar australiano","displayName-count-other":"dólares australianos","symbol":"AUD","symbol-alt-narrow":"$"},"AWG":{"displayName":"florín arubeño","displayName-count-one":"florín arubeño","displayName-count-other":"florines arubeños","symbol":"AWG"},"AZM":{"displayName":"manat azerí (1993–2006)","symbol":"AZM"},"AZN":{"displayName":"manat azerbaiyano","displayName-count-one":"manat azerbaiyano","displayName-count-other":"manat azerbaiyanos","symbol":"AZN"},"BAD":{"displayName":"dinar bosnio","displayName-count-one":"dinar bosnio","displayName-count-other":"dinares bosnios","symbol":"BAD"},"BAM":{"displayName":"marco convertible de Bosnia y Herzegovina","displayName-count-one":"marco convertible de Bosnia y Herzegovina","displayName-count-other":"marcos convertibles de Bosnia y Herzegovina","symbol":"BAM","symbol-alt-narrow":"KM"},"BAN":{"displayName":"BAN","symbol":"BAN"},"BBD":{"displayName":"dólar barbadense","displayName-count-one":"dólar barbadense","displayName-count-other":"dólares barbadenses","symbol":"BBD","symbol-alt-narrow":"$"},"BDT":{"displayName":"taka","displayName-count-one":"taka","displayName-count-other":"takas","symbol":"BDT","symbol-alt-narrow":"৳"},"BEC":{"displayName":"franco belga (convertible)","displayName-count-one":"franco belga (convertible)","displayName-count-other":"francos belgas (convertibles)","symbol":"BEC"},"BEF":{"displayName":"franco belga","displayName-count-one":"franco belga","displayName-count-other":"francos belgas","symbol":"BEF"},"BEL":{"displayName":"franco belga (financiero)","displayName-count-one":"franco belga (financiero)","displayName-count-other":"francos belgas (financieros)","symbol":"BEL"},"BGL":{"displayName":"lev fuerte búlgaro","displayName-count-one":"lev fuerte búlgaro","displayName-count-other":"leva fuertes búlgaros","symbol":"BGL"},"BGM":{"displayName":"BGM","symbol":"BGM"},"BGN":{"displayName":"lev búlgaro","displayName-count-one":"lev búlgaro","displayName-count-other":"levas búlgaras","symbol":"BGN"},"BGO":{"displayName":"BGO","symbol":"BGO"},"BHD":{"displayName":"dinar bahreiní","displayName-count-one":"dinar bahreiní","displayName-count-other":"dinares bahreiníes","symbol":"BHD"},"BIF":{"displayName":"franco burundés","displayName-count-one":"franco burundés","displayName-count-other":"francos burundeses","symbol":"BIF"},"BMD":{"displayName":"dólar de Bermudas","displayName-count-one":"dólar de Bermudas","displayName-count-other":"dólares de Bermudas","symbol":"BMD","symbol-alt-narrow":"$"},"BND":{"displayName":"dólar bruneano","displayName-count-one":"dólar bruneano","displayName-count-other":"dólares bruneanos","symbol":"BND","symbol-alt-narrow":"$"},"BOB":{"displayName":"boliviano","displayName-count-one":"boliviano","displayName-count-other":"bolivianos","symbol":"BOB","symbol-alt-narrow":"Bs"},"BOL":{"displayName":"BOL","symbol":"BOL"},"BOP":{"displayName":"peso boliviano","displayName-count-one":"peso boliviano","displayName-count-other":"pesos bolivianos","symbol":"BOP"},"BOV":{"displayName":"MVDOL boliviano","displayName-count-one":"MVDOL boliviano","displayName-count-other":"MVDOL bolivianos","symbol":"BOV"},"BRB":{"displayName":"nuevo cruceiro brasileño (1967–1986)","displayName-count-one":"nuevo cruzado brasileño (BRB)","displayName-count-other":"nuevos cruzados brasileños (BRB)","symbol":"BRB"},"BRC":{"displayName":"cruzado brasileño","displayName-count-one":"cruzado brasileño","displayName-count-other":"cruzados brasileños","symbol":"BRC"},"BRE":{"displayName":"cruceiro brasileño (1990–1993)","displayName-count-one":"cruceiro brasileño (BRE)","displayName-count-other":"cruceiros brasileños (BRE)","symbol":"BRE"},"BRL":{"displayName":"real brasileño","displayName-count-one":"real brasileño","displayName-count-other":"reales brasileños","symbol":"BRL","symbol-alt-narrow":"R$"},"BRN":{"displayName":"nuevo cruzado brasileño","displayName-count-one":"nuevo cruzado brasileño","displayName-count-other":"nuevos cruzados brasileños","symbol":"BRN"},"BRR":{"displayName":"cruceiro brasileño","displayName-count-one":"cruceiro brasileño","displayName-count-other":"cruceiros brasileños","symbol":"BRR"},"BRZ":{"displayName":"BRZ","symbol":"BRZ"},"BSD":{"displayName":"dólar bahameño","displayName-count-one":"dólar bahameño","displayName-count-other":"dólares bahameños","symbol":"BSD","symbol-alt-narrow":"$"},"BTN":{"displayName":"gultrum","displayName-count-one":"gultrum","displayName-count-other":"gultrums","symbol":"BTN"},"BUK":{"displayName":"kyat birmano","displayName-count-one":"kyat birmano","displayName-count-other":"kyat birmanos","symbol":"BUK"},"BWP":{"displayName":"pula","displayName-count-one":"pula","displayName-count-other":"pulas","symbol":"BWP","symbol-alt-narrow":"P"},"BYB":{"displayName":"nuevo rublo bielorruso (1994–1999)","displayName-count-one":"nuevo rublo bielorruso","displayName-count-other":"nuevos rublos bielorrusos","symbol":"BYB"},"BYN":{"displayName":"rublo bielorruso","displayName-count-one":"rublo bielorruso","displayName-count-other":"rublos bielorrusos","symbol":"BYN","symbol-alt-narrow":"р."},"BYR":{"displayName":"rublo bielorruso (2000–2016)","displayName-count-one":"rublo bielorruso (2000–2016)","displayName-count-other":"rublos bielorrusos (2000–2016)","symbol":"BYR"},"BZD":{"displayName":"dólar beliceño","displayName-count-one":"dólar beliceño","displayName-count-other":"dólares beliceños","symbol":"BZD","symbol-alt-narrow":"$"},"CAD":{"displayName":"dólar canadiense","displayName-count-one":"dólar canadiense","displayName-count-other":"dólares canadienses","symbol":"CA$","symbol-alt-narrow":"$"},"CDF":{"displayName":"franco congoleño","displayName-count-one":"franco congoleño","displayName-count-other":"francos congoleños","symbol":"CDF"},"CHE":{"displayName":"euro WIR","displayName-count-one":"euro WIR","displayName-count-other":"euros WIR","symbol":"CHE"},"CHF":{"displayName":"franco suizo","displayName-count-one":"franco suizo","displayName-count-other":"francos suizos","symbol":"CHF"},"CHW":{"displayName":"franco WIR","displayName-count-one":"franco WIR","displayName-count-other":"francos WIR","symbol":"CHW"},"CLE":{"displayName":"CLE","symbol":"CLE"},"CLF":{"displayName":"unidad de fomento chilena","displayName-count-one":"unidad de fomento chilena","displayName-count-other":"unidades de fomento chilenas","symbol":"CLF"},"CLP":{"displayName":"peso chileno","displayName-count-one":"peso chileno","displayName-count-other":"pesos chilenos","symbol":"CLP","symbol-alt-narrow":"$"},"CNH":{"displayName":"yuan chino (extracontinental)","displayName-count-one":"yuan chino (extracontinental)","displayName-count-other":"yuan chino (extracontinental)","symbol":"CNH"},"CNX":{"displayName":"CNX","symbol":"CNX"},"CNY":{"displayName":"yuan","displayName-count-one":"yuan","displayName-count-other":"yuanes","symbol":"CNY","symbol-alt-narrow":"¥"},"COP":{"displayName":"peso colombiano","displayName-count-one":"peso colombiano","displayName-count-other":"pesos colombianos","symbol":"COP","symbol-alt-narrow":"$"},"COU":{"displayName":"unidad de valor real colombiana","displayName-count-one":"unidad de valor real","displayName-count-other":"unidades de valor reales","symbol":"COU"},"CRC":{"displayName":"colón costarricense","displayName-count-one":"colón costarricense","displayName-count-other":"colones costarricenses","symbol":"CRC","symbol-alt-narrow":"₡"},"CSD":{"displayName":"antiguo dinar serbio","displayName-count-one":"antiguo dinar serbio","displayName-count-other":"antiguos dinares serbios","symbol":"CSD"},"CSK":{"displayName":"corona fuerte checoslovaca","displayName-count-one":"corona fuerte checoslovaca","displayName-count-other":"coronas fuertes checoslovacas","symbol":"CSK"},"CUC":{"displayName":"peso cubano convertible","displayName-count-one":"peso cubano convertible","displayName-count-other":"pesos cubanos convertibles","symbol":"CUC","symbol-alt-narrow":"$"},"CUP":{"displayName":"peso cubano","displayName-count-one":"peso cubano","displayName-count-other":"pesos cubanos","symbol":"CUP","symbol-alt-narrow":"$"},"CVE":{"displayName":"escudo de Cabo Verde","displayName-count-one":"escudo de Cabo Verde","displayName-count-other":"escudos de Cabo Verde","symbol":"CVE"},"CYP":{"displayName":"libra chipriota","displayName-count-one":"libra chipriota","displayName-count-other":"libras chipriotas","symbol":"CYP"},"CZK":{"displayName":"corona checa","displayName-count-one":"corona checa","displayName-count-other":"coronas checas","symbol":"CZK","symbol-alt-narrow":"Kč"},"DDM":{"displayName":"ostmark de Alemania del Este","displayName-count-one":"marco de la República Democrática Alemana","displayName-count-other":"marcos de la República Democrática Alemana","symbol":"DDM"},"DEM":{"displayName":"marco alemán","displayName-count-one":"marco alemán","displayName-count-other":"marcos alemanes","symbol":"DEM"},"DJF":{"displayName":"franco yibutiano","displayName-count-one":"franco yibutiano","displayName-count-other":"francos yibutianos","symbol":"DJF"},"DKK":{"displayName":"corona danesa","displayName-count-one":"corona danesa","displayName-count-other":"coronas danesas","symbol":"DKK","symbol-alt-narrow":"kr"},"DOP":{"displayName":"peso dominicano","displayName-count-one":"peso dominicano","displayName-count-other":"pesos dominicanos","symbol":"DOP","symbol-alt-narrow":"$"},"DZD":{"displayName":"dinar argelino","displayName-count-one":"dinar argelino","displayName-count-other":"dinares argelinos","symbol":"DZD"},"ECS":{"displayName":"sucre ecuatoriano","displayName-count-one":"sucre ecuatoriano","displayName-count-other":"sucres ecuatorianos","symbol":"ECS"},"ECV":{"displayName":"unidad de valor constante (UVC) ecuatoriana","displayName-count-one":"unidad de valor constante (UVC) ecuatoriana","displayName-count-other":"unidades de valor constante (UVC) ecuatorianas","symbol":"ECV"},"EEK":{"displayName":"corona estonia","displayName-count-one":"corona estonia","displayName-count-other":"coronas estonias","symbol":"EEK"},"EGP":{"displayName":"libra egipcia","displayName-count-one":"libra egipcia","displayName-count-other":"libras egipcias","symbol":"EGP","symbol-alt-narrow":"EGP"},"ERN":{"displayName":"nakfa","displayName-count-one":"nakfa","displayName-count-other":"nakfas","symbol":"ERN"},"ESA":{"displayName":"peseta española (cuenta A)","displayName-count-one":"peseta española (cuenta A)","displayName-count-other":"pesetas españolas (cuenta A)","symbol":"ESA"},"ESB":{"displayName":"peseta española (cuenta convertible)","displayName-count-one":"peseta española (cuenta convertible)","displayName-count-other":"pesetas españolas (cuenta convertible)","symbol":"ESB"},"ESP":{"displayName":"peseta española","displayName-count-one":"peseta española","displayName-count-other":"pesetas españolas","symbol":"₧","symbol-alt-narrow":"₧"},"ETB":{"displayName":"bir","displayName-count-one":"bir","displayName-count-other":"bires","symbol":"ETB"},"EUR":{"displayName":"euro","displayName-count-one":"euro","displayName-count-other":"euros","symbol":"€","symbol-alt-narrow":"€"},"FIM":{"displayName":"marco finlandés","displayName-count-one":"marco finlandés","displayName-count-other":"marcos finlandeses","symbol":"FIM"},"FJD":{"displayName":"dólar fiyiano","displayName-count-one":"dólar fiyiano","displayName-count-other":"dólares fiyianos","symbol":"FJD","symbol-alt-narrow":"$"},"FKP":{"displayName":"libra malvinense","displayName-count-one":"libra malvinense","displayName-count-other":"libras malvinenses","symbol":"FKP","symbol-alt-narrow":"£"},"FRF":{"displayName":"franco francés","displayName-count-one":"franco francés","displayName-count-other":"francos franceses","symbol":"FRF"},"GBP":{"displayName":"libra esterlina","displayName-count-one":"libra esterlina","displayName-count-other":"libras esterlinas","symbol":"GBP","symbol-alt-narrow":"£"},"GEK":{"displayName":"kupon larit georgiano","symbol":"GEK"},"GEL":{"displayName":"lari","displayName-count-one":"lari","displayName-count-other":"laris","symbol":"GEL","symbol-alt-narrow":"₾","symbol-alt-variant":"₾"},"GHC":{"displayName":"cedi ghanés (1979–2007)","symbol":"GHC"},"GHS":{"displayName":"cedi","displayName-count-one":"cedi","displayName-count-other":"cedis","symbol":"GHS"},"GIP":{"displayName":"libra gibraltareña","displayName-count-one":"libra gibraltareña","displayName-count-other":"libras gibraltareñas","symbol":"GIP","symbol-alt-narrow":"£"},"GMD":{"displayName":"dalasi","displayName-count-one":"dalasi","displayName-count-other":"dalasis","symbol":"GMD"},"GNF":{"displayName":"franco guineano","displayName-count-one":"franco guineano","displayName-count-other":"francos guineanos","symbol":"GNF","symbol-alt-narrow":"FG"},"GNS":{"displayName":"syli guineano","symbol":"GNS"},"GQE":{"displayName":"ekuele de Guinea Ecuatorial","displayName-count-one":"ekuele de Guinea Ecuatorial","displayName-count-other":"ekueles de Guinea Ecuatorial","symbol":"GQE"},"GRD":{"displayName":"dracma griego","displayName-count-one":"dracma griego","displayName-count-other":"dracmas griegos","symbol":"GRD"},"GTQ":{"displayName":"quetzal guatemalteco","displayName-count-one":"quetzal guatemalteco","displayName-count-other":"quetzales guatemaltecos","symbol":"GTQ","symbol-alt-narrow":"Q"},"GWE":{"displayName":"escudo de Guinea Portuguesa","symbol":"GWE"},"GWP":{"displayName":"peso de Guinea-Bissáu","symbol":"GWP"},"GYD":{"displayName":"dólar guyanés","displayName-count-one":"dólar guyanés","displayName-count-other":"dólares guyaneses","symbol":"GYD","symbol-alt-narrow":"$"},"HKD":{"displayName":"dólar hongkonés","displayName-count-one":"dólar hongkonés","displayName-count-other":"dólares hongkoneses","symbol":"HKD","symbol-alt-narrow":"$"},"HNL":{"displayName":"lempira hondureño","displayName-count-one":"lempira hondureño","displayName-count-other":"lempiras hondureños","symbol":"HNL","symbol-alt-narrow":"L"},"HRD":{"displayName":"dinar croata","displayName-count-one":"dinar croata","displayName-count-other":"dinares croatas","symbol":"HRD"},"HRK":{"displayName":"kuna","displayName-count-one":"kuna","displayName-count-other":"kunas","symbol":"HRK","symbol-alt-narrow":"kn"},"HTG":{"displayName":"gourde haitiano","displayName-count-one":"gourde haitiano","displayName-count-other":"gourdes haitianos","symbol":"HTG"},"HUF":{"displayName":"forinto húngaro","displayName-count-one":"forinto húngaro","displayName-count-other":"forintos húngaros","symbol":"HUF","symbol-alt-narrow":"Ft"},"IDR":{"displayName":"rupia indonesia","displayName-count-one":"rupia indonesia","displayName-count-other":"rupias indonesias","symbol":"IDR","symbol-alt-narrow":"Rp"},"IEP":{"displayName":"libra irlandesa","displayName-count-one":"libra irlandesa","displayName-count-other":"libras irlandesas","symbol":"IEP"},"ILP":{"displayName":"libra israelí","displayName-count-one":"libra israelí","displayName-count-other":"libras israelíes","symbol":"ILP"},"ILR":{"displayName":"ILR","symbol":"ILR"},"ILS":{"displayName":"nuevo séquel israelí","displayName-count-one":"nuevo séquel israelí","displayName-count-other":"nuevos séqueles israelíes","symbol":"ILS","symbol-alt-narrow":"₪"},"INR":{"displayName":"rupia india","displayName-count-one":"rupia india","displayName-count-other":"rupias indias","symbol":"INR","symbol-alt-narrow":"₹"},"IQD":{"displayName":"dinar iraquí","displayName-count-one":"dinar iraquí","displayName-count-other":"dinares iraquíes","symbol":"IQD"},"IRR":{"displayName":"rial iraní","displayName-count-one":"rial iraní","displayName-count-other":"riales iraníes","symbol":"IRR"},"ISJ":{"displayName":"ISJ","symbol":"ISJ"},"ISK":{"displayName":"corona islandesa","displayName-count-one":"corona islandesa","displayName-count-other":"coronas islandesas","symbol":"ISK","symbol-alt-narrow":"kr"},"ITL":{"displayName":"lira italiana","displayName-count-one":"lira italiana","displayName-count-other":"liras italianas","symbol":"ITL"},"JMD":{"displayName":"dólar jamaicano","displayName-count-one":"dólar jamaicano","displayName-count-other":"dólares jamaicanos","symbol":"JMD","symbol-alt-narrow":"$"},"JOD":{"displayName":"dinar jordano","displayName-count-one":"dinar jordano","displayName-count-other":"dinares jordanos","symbol":"JOD"},"JPY":{"displayName":"yen","displayName-count-one":"yen","displayName-count-other":"yenes","symbol":"JPY","symbol-alt-narrow":"¥"},"KES":{"displayName":"chelín keniano","displayName-count-one":"chelín keniano","displayName-count-other":"chelines kenianos","symbol":"KES"},"KGS":{"displayName":"som","displayName-count-one":"som","displayName-count-other":"soms","symbol":"KGS"},"KHR":{"displayName":"riel","displayName-count-one":"riel","displayName-count-other":"rieles","symbol":"KHR","symbol-alt-narrow":"៛"},"KMF":{"displayName":"franco comorense","displayName-count-one":"franco comorense","displayName-count-other":"francos comorenses","symbol":"KMF","symbol-alt-narrow":"CF"},"KPW":{"displayName":"won norcoreano","displayName-count-one":"won norcoreano","displayName-count-other":"wons norcoreanos","symbol":"KPW","symbol-alt-narrow":"₩"},"KRH":{"displayName":"KRH","symbol":"KRH"},"KRO":{"displayName":"KRO","symbol":"KRO"},"KRW":{"displayName":"won surcoreano","displayName-count-one":"won surcoreano","displayName-count-other":"wons surcoreanos","symbol":"KRW","symbol-alt-narrow":"₩"},"KWD":{"displayName":"dinar kuwaití","displayName-count-one":"dinar kuwaití","displayName-count-other":"dinares kuwaitíes","symbol":"KWD"},"KYD":{"displayName":"dólar de las Islas Caimán","displayName-count-one":"dólar de las Islas Caimán","displayName-count-other":"dólares de las Islas Caimán","symbol":"KYD","symbol-alt-narrow":"$"},"KZT":{"displayName":"tenge kazako","displayName-count-one":"tenge kazako","displayName-count-other":"tenges kazakos","symbol":"KZT","symbol-alt-narrow":"₸"},"LAK":{"displayName":"kip","displayName-count-one":"kip","displayName-count-other":"kips","symbol":"LAK","symbol-alt-narrow":"₭"},"LBP":{"displayName":"libra libanesa","displayName-count-one":"libra libanesa","displayName-count-other":"libras libanesas","symbol":"LBP","symbol-alt-narrow":"L£"},"LKR":{"displayName":"rupia esrilanquesa","displayName-count-one":"rupia esrilanquesa","displayName-count-other":"rupias esrilanquesas","symbol":"LKR","symbol-alt-narrow":"Rs"},"LRD":{"displayName":"dólar liberiano","displayName-count-one":"dólar liberiano","displayName-count-other":"dólares liberianos","symbol":"LRD","symbol-alt-narrow":"$"},"LSL":{"displayName":"loti lesothense","symbol":"LSL"},"LTL":{"displayName":"litas lituano","displayName-count-one":"litas lituana","displayName-count-other":"litas lituanas","symbol":"LTL","symbol-alt-narrow":"Lt"},"LTT":{"displayName":"talonas lituano","displayName-count-one":"talonas lituana","displayName-count-other":"talonas lituanas","symbol":"LTT"},"LUC":{"displayName":"franco convertible luxemburgués","displayName-count-one":"franco convertible luxemburgués","displayName-count-other":"francos convertibles luxemburgueses","symbol":"LUC"},"LUF":{"displayName":"franco luxemburgués","displayName-count-one":"franco luxemburgués","displayName-count-other":"francos luxemburgueses","symbol":"LUF"},"LUL":{"displayName":"franco financiero luxemburgués","displayName-count-one":"franco financiero luxemburgués","displayName-count-other":"francos financieros luxemburgueses","symbol":"LUL"},"LVL":{"displayName":"lats letón","displayName-count-one":"lats letón","displayName-count-other":"lats letónes","symbol":"LVL","symbol-alt-narrow":"Ls"},"LVR":{"displayName":"rublo letón","displayName-count-one":"rublo letón","displayName-count-other":"rublos letones","symbol":"LVR"},"LYD":{"displayName":"dinar libio","displayName-count-one":"dinar libio","displayName-count-other":"dinares libios","symbol":"LYD"},"MAD":{"displayName":"dírham marroquí","displayName-count-one":"dírham marroquí","displayName-count-other":"dírhams marroquíes","symbol":"MAD"},"MAF":{"displayName":"franco marroquí","displayName-count-one":"franco marroquí","displayName-count-other":"francos marroquíes","symbol":"MAF"},"MCF":{"displayName":"MCF","symbol":"MCF"},"MDC":{"displayName":"MDC","symbol":"MDC"},"MDL":{"displayName":"leu moldavo","displayName-count-one":"leu moldavo","displayName-count-other":"lei moldavos","symbol":"MDL"},"MGA":{"displayName":"ariari","displayName-count-one":"ariari","displayName-count-other":"ariaris","symbol":"MGA","symbol-alt-narrow":"Ar"},"MGF":{"displayName":"franco malgache","symbol":"MGF"},"MKD":{"displayName":"dinar macedonio","displayName-count-one":"dinar macedonio","displayName-count-other":"dinares macedonios","symbol":"MKD"},"MKN":{"displayName":"MKN","symbol":"MKN"},"MLF":{"displayName":"franco malí","symbol":"MLF"},"MMK":{"displayName":"kiat","displayName-count-one":"kiat","displayName-count-other":"kiats","symbol":"MMK","symbol-alt-narrow":"K"},"MNT":{"displayName":"tugrik","displayName-count-one":"tugrik","displayName-count-other":"tugriks","symbol":"MNT","symbol-alt-narrow":"₮"},"MOP":{"displayName":"pataca de Macao","displayName-count-one":"pataca de Macao","displayName-count-other":"patacas de Macao","symbol":"MOP"},"MRO":{"displayName":"uguiya","displayName-count-one":"uguiya","displayName-count-other":"uguiyas","symbol":"MRO"},"MTL":{"displayName":"lira maltesa","displayName-count-one":"lira maltesa","displayName-count-other":"liras maltesas","symbol":"MTL"},"MTP":{"displayName":"libra maltesa","displayName-count-one":"libra maltesa","displayName-count-other":"libras maltesas","symbol":"MTP"},"MUR":{"displayName":"rupia mauriciana","displayName-count-one":"rupia mauriciana","displayName-count-other":"rupias mauricianas","symbol":"MUR","symbol-alt-narrow":"Rs"},"MVP":{"displayName":"MVP","symbol":"MVP"},"MVR":{"displayName":"rufiya","displayName-count-one":"rufiya","displayName-count-other":"rufiyas","symbol":"MVR"},"MWK":{"displayName":"kwacha malauí","displayName-count-one":"kwacha malauí","displayName-count-other":"kwachas malauís","symbol":"MWK"},"MXN":{"displayName":"peso mexicano","displayName-count-one":"peso mexicano","displayName-count-other":"pesos mexicanos","symbol":"MXN","symbol-alt-narrow":"$"},"MXP":{"displayName":"peso de plata mexicano (1861–1992)","displayName-count-one":"peso de plata mexicano (MXP)","displayName-count-other":"pesos de plata mexicanos (MXP)","symbol":"MXP"},"MXV":{"displayName":"unidad de inversión (UDI) mexicana","displayName-count-one":"unidad de inversión (UDI) mexicana","displayName-count-other":"unidades de inversión (UDI) mexicanas","symbol":"MXV"},"MYR":{"displayName":"ringit","displayName-count-one":"ringit","displayName-count-other":"ringits","symbol":"MYR","symbol-alt-narrow":"RM"},"MZE":{"displayName":"escudo mozambiqueño","displayName-count-one":"escudo mozambiqueño","displayName-count-other":"escudos mozambiqueños","symbol":"MZE"},"MZM":{"displayName":"antiguo metical mozambiqueño","symbol":"MZM"},"MZN":{"displayName":"metical","displayName-count-one":"metical","displayName-count-other":"meticales","symbol":"MZN"},"NAD":{"displayName":"dólar namibio","displayName-count-one":"dólar namibio","displayName-count-other":"dólares namibios","symbol":"NAD","symbol-alt-narrow":"$"},"NGN":{"displayName":"naira","displayName-count-one":"naira","displayName-count-other":"nairas","symbol":"NGN","symbol-alt-narrow":"₦"},"NIC":{"displayName":"córdoba nicaragüense (1988–1991)","displayName-count-one":"córdoba nicaragüense (1988–1991)","displayName-count-other":"córdobas nicaragüenses (1988–1991)","symbol":"NIC"},"NIO":{"displayName":"córdoba nicaragüense","displayName-count-one":"córdoba nicaragüense","displayName-count-other":"córdobas nicaragüenses","symbol":"NIO","symbol-alt-narrow":"C$"},"NLG":{"displayName":"florín neerlandés","displayName-count-one":"florín neerlandés","displayName-count-other":"florines neerlandeses","symbol":"NLG"},"NOK":{"displayName":"corona noruega","displayName-count-one":"corona noruega","displayName-count-other":"coronas noruegas","symbol":"NOK","symbol-alt-narrow":"kr"},"NPR":{"displayName":"rupia nepalí","displayName-count-one":"rupia nepalí","displayName-count-other":"rupias nepalíes","symbol":"NPR","symbol-alt-narrow":"Rs"},"NZD":{"displayName":"dólar neozelandés","displayName-count-one":"dólar neozelandés","displayName-count-other":"dólares neozelandeses","symbol":"NZD","symbol-alt-narrow":"$"},"OMR":{"displayName":"rial omaní","displayName-count-one":"rial omaní","displayName-count-other":"riales omaníes","symbol":"OMR"},"PAB":{"displayName":"balboa panameño","displayName-count-one":"balboa panameño","displayName-count-other":"balboas panameños","symbol":"PAB"},"PEI":{"displayName":"inti peruano","displayName-count-one":"inti peruano","displayName-count-other":"intis peruanos","symbol":"PEI"},"PEN":{"displayName":"sol peruano","displayName-count-one":"sol peruano","displayName-count-other":"soles peruanos","symbol":"PEN"},"PES":{"displayName":"sol peruano (1863–1965)","displayName-count-one":"sol peruano (1863–1965)","displayName-count-other":"soles peruanos (1863–1965)","symbol":"PES"},"PGK":{"displayName":"kina","displayName-count-one":"kina","displayName-count-other":"kinas","symbol":"PGK"},"PHP":{"displayName":"peso filipino","displayName-count-one":"peso filipino","displayName-count-other":"pesos filipinos","symbol":"PHP","symbol-alt-narrow":"₱"},"PKR":{"displayName":"rupia pakistaní","displayName-count-one":"rupia pakistaní","displayName-count-other":"rupias pakistaníes","symbol":"PKR","symbol-alt-narrow":"Rs"},"PLN":{"displayName":"esloti","displayName-count-one":"esloti","displayName-count-other":"eslotis","symbol":"PLN","symbol-alt-narrow":"zł"},"PLZ":{"displayName":"zloty polaco (1950–1995)","displayName-count-one":"zloty polaco (PLZ)","displayName-count-other":"zlotys polacos (PLZ)","symbol":"PLZ"},"PTE":{"displayName":"escudo portugués","displayName-count-one":"escudo portugués","displayName-count-other":"escudos portugueses","symbol":"PTE"},"PYG":{"displayName":"guaraní paraguayo","displayName-count-one":"guaraní paraguayo","displayName-count-other":"guaraníes paraguayos","symbol":"PYG","symbol-alt-narrow":"₲"},"QAR":{"displayName":"rial catarí","displayName-count-one":"rial catarí","displayName-count-other":"riales cataríes","symbol":"QAR"},"RHD":{"displayName":"dólar rodesiano","symbol":"RHD"},"ROL":{"displayName":"antiguo leu rumano","displayName-count-one":"antiguo leu rumano","displayName-count-other":"antiguos lei rumanos","symbol":"ROL"},"RON":{"displayName":"leu rumano","displayName-count-one":"leu rumano","displayName-count-other":"lei rumanos","symbol":"RON","symbol-alt-narrow":"L"},"RSD":{"displayName":"dinar serbio","displayName-count-one":"dinar serbio","displayName-count-other":"dinares serbios","symbol":"RSD"},"RUB":{"displayName":"rublo ruso","displayName-count-one":"rublo ruso","displayName-count-other":"rublos rusos","symbol":"RUB","symbol-alt-narrow":"₽"},"RUR":{"displayName":"rublo ruso (1991–1998)","displayName-count-one":"rublo ruso (RUR)","displayName-count-other":"rublos rusos (RUR)","symbol":"RUR","symbol-alt-narrow":"р."},"RWF":{"displayName":"franco ruandés","displayName-count-one":"franco ruandés","displayName-count-other":"francos ruandeses","symbol":"RWF","symbol-alt-narrow":"RF"},"SAR":{"displayName":"rial saudí","displayName-count-one":"rial saudí","displayName-count-other":"riales saudíes","symbol":"SAR"},"SBD":{"displayName":"dólar salomonense","displayName-count-one":"dólar salomonense","displayName-count-other":"dólares salomonenses","symbol":"SBD","symbol-alt-narrow":"$"},"SCR":{"displayName":"rupia seychellense","displayName-count-one":"rupia seychellense","displayName-count-other":"rupias seychellenses","symbol":"SCR"},"SDD":{"displayName":"dinar sudanés","displayName-count-one":"dinar sudanés","displayName-count-other":"dinares sudaneses","symbol":"SDD"},"SDG":{"displayName":"libra sudanesa","displayName-count-one":"libra sudanesa","displayName-count-other":"libras sudanesas","symbol":"SDG"},"SDP":{"displayName":"libra sudanesa antigua","displayName-count-one":"libra sudanesa antigua","displayName-count-other":"libras sudanesas antiguas","symbol":"SDP"},"SEK":{"displayName":"corona sueca","displayName-count-one":"corona sueca","displayName-count-other":"coronas suecas","symbol":"SEK","symbol-alt-narrow":"kr"},"SGD":{"displayName":"dólar singapurense","displayName-count-one":"dólar singapurense","displayName-count-other":"dólares singapurenses","symbol":"SGD","symbol-alt-narrow":"$"},"SHP":{"displayName":"libra de Santa Elena","displayName-count-one":"libra de Santa Elena","displayName-count-other":"libras de Santa Elena","symbol":"SHP","symbol-alt-narrow":"£"},"SIT":{"displayName":"tólar esloveno","displayName-count-one":"tólar esloveno","displayName-count-other":"tólares eslovenos","symbol":"SIT"},"SKK":{"displayName":"corona eslovaca","displayName-count-one":"corona eslovaca","displayName-count-other":"coronas eslovacas","symbol":"SKK"},"SLL":{"displayName":"leona","displayName-count-one":"leona","displayName-count-other":"leonas","symbol":"SLL"},"SOS":{"displayName":"chelín somalí","displayName-count-one":"chelín somalí","displayName-count-other":"chelines somalíes","symbol":"SOS"},"SRD":{"displayName":"dólar surinamés","displayName-count-one":"dólar surinamés","displayName-count-other":"dólares surinameses","symbol":"SRD","symbol-alt-narrow":"$"},"SRG":{"displayName":"florín surinamés","symbol":"SRG"},"SSP":{"displayName":"libra sursudanesa","displayName-count-one":"libra sursudanesa","displayName-count-other":"libras sursudanesas","symbol":"SSP","symbol-alt-narrow":"£"},"STD":{"displayName":"dobra","displayName-count-one":"dobra","displayName-count-other":"dobras","symbol":"STD","symbol-alt-narrow":"Db"},"STN":{"displayName":"STN","symbol":"STN"},"SUR":{"displayName":"rublo soviético","displayName-count-one":"rublo soviético","displayName-count-other":"rublos soviéticos","symbol":"SUR"},"SVC":{"displayName":"colón salvadoreño","displayName-count-one":"colón salvadoreño","displayName-count-other":"colones salvadoreños","symbol":"SVC"},"SYP":{"displayName":"libra siria","displayName-count-one":"libra siria","displayName-count-other":"libras sirias","symbol":"SYP","symbol-alt-narrow":"£"},"SZL":{"displayName":"lilangeni","displayName-count-one":"lilangeni","displayName-count-other":"lilangenis","symbol":"SZL"},"THB":{"displayName":"bat","displayName-count-one":"bat","displayName-count-other":"bats","symbol":"฿","symbol-alt-narrow":"฿"},"TJR":{"displayName":"rublo tayiko","symbol":"TJR"},"TJS":{"displayName":"somoni tayiko","displayName-count-one":"somoni tayiko","displayName-count-other":"somonis tayikos","symbol":"TJS"},"TMM":{"displayName":"manat turcomano (1993–2009)","displayName-count-one":"manat turcomano (1993–2009)","displayName-count-other":"manats turcomanos (1993–2009)","symbol":"TMM"},"TMT":{"displayName":"manat turcomano","displayName-count-one":"manat turcomano","displayName-count-other":"manat turcomanos","symbol":"TMT"},"TND":{"displayName":"dinar tunecino","displayName-count-one":"dinar tunecino","displayName-count-other":"dinares tunecinos","symbol":"TND"},"TOP":{"displayName":"paanga","displayName-count-one":"paanga","displayName-count-other":"paangas","symbol":"TOP","symbol-alt-narrow":"T$"},"TPE":{"displayName":"escudo timorense","symbol":"TPE"},"TRL":{"displayName":"lira turca (1922–2005)","displayName-count-one":"lira turca (1922–2005)","displayName-count-other":"liras turcas (1922–2005)","symbol":"TRL"},"TRY":{"displayName":"lira turca","displayName-count-one":"lira turca","displayName-count-other":"liras turcas","symbol":"TRY","symbol-alt-narrow":"₺","symbol-alt-variant":"TL"},"TTD":{"displayName":"dólar de Trinidad y Tobago","displayName-count-one":"dólar de Trinidad y Tobago","displayName-count-other":"dólares de Trinidad y Tobago","symbol":"TTD","symbol-alt-narrow":"$"},"TWD":{"displayName":"nuevo dólar taiwanés","displayName-count-one":"nuevo dólar taiwanés","displayName-count-other":"nuevos dólares taiwaneses","symbol":"TWD","symbol-alt-narrow":"NT$"},"TZS":{"displayName":"chelín tanzano","displayName-count-one":"chelín tanzano","displayName-count-other":"chelines tanzanos","symbol":"TZS"},"UAH":{"displayName":"grivna","displayName-count-one":"grivna","displayName-count-other":"grivnas","symbol":"UAH","symbol-alt-narrow":"₴"},"UAK":{"displayName":"karbovanet ucraniano","displayName-count-one":"karbovanet ucraniano","displayName-count-other":"karbovanets ucranianos","symbol":"UAK"},"UGS":{"displayName":"chelín ugandés (1966–1987)","symbol":"UGS"},"UGX":{"displayName":"chelín ugandés","displayName-count-one":"chelín ugandés","displayName-count-other":"chelines ugandeses","symbol":"UGX"},"USD":{"displayName":"dólar estadounidense","displayName-count-one":"dólar estadounidense","displayName-count-other":"dólares estadounidenses","symbol":"US$","symbol-alt-narrow":"$"},"USN":{"displayName":"dólar estadounidense (día siguiente)","displayName-count-one":"dólar estadounidense (día siguiente)","displayName-count-other":"dólares estadounidenses (día siguiente)","symbol":"USN"},"USS":{"displayName":"dólar estadounidense (mismo día)","displayName-count-one":"dólar estadounidense (mismo día)","displayName-count-other":"dólares estadounidenses (mismo día)","symbol":"USS"},"UYI":{"displayName":"peso uruguayo en unidades indexadas","displayName-count-one":"peso uruguayo en unidades indexadas","displayName-count-other":"pesos uruguayos en unidades indexadas","symbol":"UYI"},"UYP":{"displayName":"peso uruguayo (1975–1993)","displayName-count-one":"peso uruguayo (UYP)","displayName-count-other":"pesos uruguayos (UYP)","symbol":"UYP"},"UYU":{"displayName":"peso uruguayo","displayName-count-one":"peso uruguayo","displayName-count-other":"pesos uruguayos","symbol":"UYU","symbol-alt-narrow":"$"},"UZS":{"displayName":"sum","displayName-count-one":"sum","displayName-count-other":"sums","symbol":"UZS"},"VEB":{"displayName":"bolívar venezolano (1871–2008)","displayName-count-one":"bolívar venezolano (1871–2008)","displayName-count-other":"bolívares venezolanos (1871–2008)","symbol":"VEB"},"VEF":{"displayName":"bolívar venezolano","displayName-count-one":"bolívar venezolano","displayName-count-other":"bolívares venezolanos","symbol":"VEF","symbol-alt-narrow":"Bs"},"VND":{"displayName":"dong","displayName-count-one":"dong","displayName-count-other":"dongs","symbol":"₫","symbol-alt-narrow":"₫"},"VNN":{"displayName":"VNN","symbol":"VNN"},"VUV":{"displayName":"vatu","displayName-count-one":"vatu","displayName-count-other":"vatus","symbol":"VUV"},"WST":{"displayName":"tala","displayName-count-one":"tala","displayName-count-other":"talas","symbol":"WST"},"XAF":{"displayName":"franco CFA de África Central","displayName-count-one":"franco CFA de África Central","displayName-count-other":"francos CFA de África Central","symbol":"XAF"},"XAG":{"displayName":"plata","displayName-count-one":"plata","displayName-count-other":"plata","symbol":"XAG"},"XAU":{"displayName":"oro","displayName-count-one":"oro","displayName-count-other":"oro","symbol":"XAU"},"XBA":{"displayName":"unidad compuesta europea","displayName-count-one":"unidad compuesta europea","displayName-count-other":"unidades compuestas europeas","symbol":"XBA"},"XBB":{"displayName":"unidad monetaria europea","displayName-count-one":"unidad monetaria europea","displayName-count-other":"unidades monetarias europeas","symbol":"XBB"},"XBC":{"displayName":"unidad de cuenta europea (XBC)","displayName-count-one":"unidad de cuenta europea (XBC)","displayName-count-other":"unidades de cuenta europeas (XBC)","symbol":"XBC"},"XBD":{"displayName":"unidad de cuenta europea (XBD)","displayName-count-one":"unidad de cuenta europea (XBD)","displayName-count-other":"unidades de cuenta europeas (XBD)","symbol":"XBD"},"XCD":{"displayName":"dólar del Caribe Oriental","displayName-count-one":"dólar del Caribe Oriental","displayName-count-other":"dólares del Caribe Oriental","symbol":"XCD","symbol-alt-narrow":"$"},"XDR":{"displayName":"derechos especiales de giro","symbol":"XDR"},"XEU":{"displayName":"unidad de moneda europea","displayName-count-one":"unidad de moneda europea","displayName-count-other":"unidades de moneda europeas","symbol":"XEU"},"XFO":{"displayName":"franco oro francés","displayName-count-one":"franco oro francés","displayName-count-other":"francos oro franceses","symbol":"XFO"},"XFU":{"displayName":"franco UIC francés","displayName-count-one":"franco UIC francés","displayName-count-other":"francos UIC franceses","symbol":"XFU"},"XOF":{"displayName":"franco CFA de África Occidental","displayName-count-one":"franco CFA de África Occidental","displayName-count-other":"francos CFA de África Occidental","symbol":"XOF"},"XPD":{"displayName":"paladio","displayName-count-one":"paladio","displayName-count-other":"paladio","symbol":"XPD"},"XPF":{"displayName":"franco CFP","displayName-count-one":"franco CFP","displayName-count-other":"francos CFP","symbol":"CFPF"},"XPT":{"displayName":"platino","displayName-count-one":"platino","displayName-count-other":"platino","symbol":"XPT"},"XRE":{"displayName":"fondos RINET","symbol":"XRE"},"XSU":{"displayName":"XSU","symbol":"XSU"},"XTS":{"displayName":"código reservado para pruebas","symbol":"XTS"},"XUA":{"displayName":"XUA","symbol":"XUA"},"XXX":{"displayName":"moneda desconocida","displayName-count-one":"(moneda desconocida)","displayName-count-other":"(moneda desconocida)","symbol":"XXX"},"YDD":{"displayName":"dinar yemení","symbol":"YDD"},"YER":{"displayName":"rial yemení","displayName-count-one":"rial yemení","displayName-count-other":"riales yemeníes","symbol":"YER"},"YUD":{"displayName":"dinar fuerte yugoslavo","symbol":"YUD"},"YUM":{"displayName":"super dinar yugoslavo","symbol":"YUM"},"YUN":{"displayName":"dinar convertible yugoslavo","displayName-count-one":"dinar convertible yugoslavo","displayName-count-other":"dinares convertibles yugoslavos","symbol":"YUN"},"YUR":{"displayName":"YUR","symbol":"YUR"},"ZAL":{"displayName":"rand sudafricano (financiero)","symbol":"ZAL"},"ZAR":{"displayName":"rand","displayName-count-one":"rand","displayName-count-other":"rands","symbol":"ZAR","symbol-alt-narrow":"R"},"ZMK":{"displayName":"kwacha zambiano (1968–2012)","displayName-count-one":"kwacha zambiano (1968–2012)","displayName-count-other":"kwachas zambianos (1968–2012)","symbol":"ZMK"},"ZMW":{"displayName":"kwacha zambiano","displayName-count-one":"kwacha zambiano","displayName-count-other":"kwachas zambianos","symbol":"ZMW","symbol-alt-narrow":"ZK"},"ZRN":{"displayName":"nuevo zaire zaireño","symbol":"ZRN"},"ZRZ":{"displayName":"zaire zaireño","symbol":"ZRZ"},"ZWD":{"displayName":"dólar de Zimbabue","symbol":"ZWD"},"ZWL":{"displayName":"dólar zimbabuense","symbol":"ZWL"},"ZWR":{"displayName":"ZWR","symbol":"ZWR"}},"defaultNumberingSystem":"latn","otherNumberingSystems":{"native":"latn"},"minimumGroupingDigits":"2","symbols-numberSystem-latn":{"decimal":",","group":".","list":";","percentSign":"%","plusSign":"+","minusSign":"-","exponential":"E","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"NaN","timeSeparator":":"},"decimalFormats-numberSystem-latn":{"standard":"#,##0.###","long":{"decimalFormat":{"1000-count-one":"0 mil","1000-count-other":"0 mil","10000-count-one":"00 mil","10000-count-other":"00 mil","100000-count-one":"000 mil","100000-count-other":"000 mil","1000000-count-one":"0 millón","1000000-count-other":"0 millones","10000000-count-one":"00 millones","10000000-count-other":"00 millones","100000000-count-one":"000 millones","100000000-count-other":"000 millones","1000000000-count-one":"0 mil millones","1000000000-count-other":"0 mil millones","10000000000-count-one":"00 mil millones","10000000000-count-other":"00 mil millones","100000000000-count-one":"000 mil millones","100000000000-count-other":"000 mil millones","1000000000000-count-one":"0 billón","1000000000000-count-other":"0 billones","10000000000000-count-one":"00 billones","10000000000000-count-other":"00 billones","100000000000000-count-one":"000 billones","100000000000000-count-other":"000 billones"}},"short":{"decimalFormat":{"1000-count-one":"0 mil","1000-count-other":"0 mil","10000-count-one":"00 mil","10000-count-other":"00 mil","100000-count-one":"000 mil","100000-count-other":"000 mil","1000000-count-one":"0 M","1000000-count-other":"0 M","10000000-count-one":"00 M","10000000-count-other":"00 M","100000000-count-one":"000 M","100000000-count-other":"000 M","1000000000-count-one":"0000 M","1000000000-count-other":"0000 M","10000000000-count-one":"00 mil M","10000000000-count-other":"00 mil M","100000000000-count-one":"000 mil M","100000000000-count-other":"000 mil M","1000000000000-count-one":"0 B","1000000000000-count-other":"0 B","10000000000000-count-one":"00 B","10000000000000-count-other":"00 B","100000000000000-count-one":"000 B","100000000000000-count-other":"000 B"}}},"scientificFormats-numberSystem-latn":{"standard":"#E0"},"percentFormats-numberSystem-latn":{"standard":"#,##0 %"},"currencyFormats-numberSystem-latn":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"#,##0.00 ¤","accounting":"#,##0.00 ¤","short":{"standard":{"1000-count-one":"0 mil ¤","1000-count-other":"0 mil ¤","10000-count-one":"00 mil ¤","10000-count-other":"00 mil ¤","100000-count-one":"000 mil ¤","100000-count-other":"000 mil ¤","1000000-count-one":"0 M¤","1000000-count-other":"0 M¤","10000000-count-one":"00 M¤","10000000-count-other":"00 M¤","100000000-count-one":"000 M¤","100000000-count-other":"000 M¤","1000000000-count-one":"0000 M¤","1000000000-count-other":"0000 M¤","10000000000-count-one":"00 mil M¤","10000000000-count-other":"00 mil M¤","100000000000-count-one":"000 mil M¤","100000000000-count-other":"000 mil M¤","1000000000000-count-one":"0 B¤","1000000000000-count-other":"0 B¤","10000000000000-count-one":"00 B¤","10000000000000-count-other":"00 B¤","100000000000000-count-one":"000 B¤","100000000000000-count-other":"000 B¤"}},"unitPattern-count-one":"{0} {1}","unitPattern-count-other":"{0} {1}"},"miscPatterns-numberSystem-latn":{"atLeast":"Más de {0}","range":"{0}-{1}"},"minimalPairs":{"pluralMinimalPairs-count-one":"{0} día","pluralMinimalPairs-count-other":"{0} días","other":"Toma la {0}.ª a la derecha."}}},"fr":{"identity":{"version":{"_number":"$Revision: 13701 $","_cldrVersion":"32"},"language":"fr"},"dates":{"calendars":{"gregorian":{"months":{"format":{"abbreviated":{"1":"janv.","2":"févr.","3":"mars","4":"avr.","5":"mai","6":"juin","7":"juil.","8":"août","9":"sept.","10":"oct.","11":"nov.","12":"déc."},"narrow":{"1":"J","2":"F","3":"M","4":"A","5":"M","6":"J","7":"J","8":"A","9":"S","10":"O","11":"N","12":"D"},"wide":{"1":"janvier","2":"février","3":"mars","4":"avril","5":"mai","6":"juin","7":"juillet","8":"août","9":"septembre","10":"octobre","11":"novembre","12":"décembre"}},"stand-alone":{"abbreviated":{"1":"janv.","2":"févr.","3":"mars","4":"avr.","5":"mai","6":"juin","7":"juil.","8":"août","9":"sept.","10":"oct.","11":"nov.","12":"déc."},"narrow":{"1":"J","2":"F","3":"M","4":"A","5":"M","6":"J","7":"J","8":"A","9":"S","10":"O","11":"N","12":"D"},"wide":{"1":"janvier","2":"février","3":"mars","4":"avril","5":"mai","6":"juin","7":"juillet","8":"août","9":"septembre","10":"octobre","11":"novembre","12":"décembre"}}},"days":{"format":{"abbreviated":{"sun":"dim.","mon":"lun.","tue":"mar.","wed":"mer.","thu":"jeu.","fri":"ven.","sat":"sam."},"narrow":{"sun":"D","mon":"L","tue":"M","wed":"M","thu":"J","fri":"V","sat":"S"},"short":{"sun":"di","mon":"lu","tue":"ma","wed":"me","thu":"je","fri":"ve","sat":"sa"},"wide":{"sun":"dimanche","mon":"lundi","tue":"mardi","wed":"mercredi","thu":"jeudi","fri":"vendredi","sat":"samedi"}},"stand-alone":{"abbreviated":{"sun":"dim.","mon":"lun.","tue":"mar.","wed":"mer.","thu":"jeu.","fri":"ven.","sat":"sam."},"narrow":{"sun":"D","mon":"L","tue":"M","wed":"M","thu":"J","fri":"V","sat":"S"},"short":{"sun":"di","mon":"lu","tue":"ma","wed":"me","thu":"je","fri":"ve","sat":"sa"},"wide":{"sun":"dimanche","mon":"lundi","tue":"mardi","wed":"mercredi","thu":"jeudi","fri":"vendredi","sat":"samedi"}}},"quarters":{"format":{"abbreviated":{"1":"T1","2":"T2","3":"T3","4":"T4"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"1er trimestre","2":"2e trimestre","3":"3e trimestre","4":"4e trimestre"}},"stand-alone":{"abbreviated":{"1":"T1","2":"T2","3":"T3","4":"T4"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"1er trimestre","2":"2e trimestre","3":"3e trimestre","4":"4e trimestre"}}},"dayPeriods":{"format":{"abbreviated":{"midnight":"minuit","am":"AM","noon":"midi","pm":"PM","morning1":"mat.","afternoon1":"ap.m.","evening1":"soir","night1":"nuit"},"narrow":{"midnight":"minuit","am":"AM","noon":"midi","pm":"PM","morning1":"mat.","afternoon1":"ap.m.","evening1":"soir","night1":"nuit"},"wide":{"midnight":"minuit","am":"AM","noon":"midi","pm":"PM","morning1":"du matin","afternoon1":"de l’après-midi","evening1":"du soir","night1":"du matin"}},"stand-alone":{"abbreviated":{"midnight":"minuit","am":"AM","noon":"midi","pm":"PM","morning1":"mat.","afternoon1":"ap.m.","evening1":"soir","night1":"nuit"},"narrow":{"midnight":"minuit","am":"AM","noon":"midi","pm":"PM","morning1":"mat.","afternoon1":"ap.m.","evening1":"soir","night1":"nuit"},"wide":{"midnight":"minuit","am":"AM","noon":"midi","pm":"PM","morning1":"matin","afternoon1":"après-midi","evening1":"soir","night1":"nuit"}}},"eras":{"eraNames":{"0":"avant Jésus-Christ","1":"après Jésus-Christ","0-alt-variant":"avant l’ère commune","1-alt-variant":"de l’ère commune"},"eraAbbr":{"0":"av. J.-C.","1":"ap. J.-C.","0-alt-variant":"AEC","1-alt-variant":"EC"},"eraNarrow":{"0":"av. J.-C.","1":"ap. J.-C.","0-alt-variant":"AEC","1-alt-variant":"EC"}},"dateFormats":{"full":"EEEE d MMMM y","long":"d MMMM y","medium":"d MMM y","short":"dd/MM/y"},"timeFormats":{"full":"HH:mm:ss zzzz","long":"HH:mm:ss z","medium":"HH:mm:ss","short":"HH:mm"},"dateTimeFormats":{"full":"{1} 'à' {0}","long":"{1} 'à' {0}","medium":"{1} 'à' {0}","short":"{1} {0}","availableFormats":{"Bh":"h B","Bhm":"h:mm B","Bhms":"h:mm:ss B","d":"d","E":"E","EBhm":"E h:mm B","EBhms":"E h:mm:ss B","Ed":"E d","Ehm":"E h:mm a","EHm":"E HH:mm","Ehms":"E h:mm:ss a","EHms":"E HH:mm:ss","Gy":"y G","GyMMM":"MMM y G","GyMMMd":"d MMM y G","GyMMMEd":"E d MMM y G","h":"h a","H":"HH 'h'","hm":"h:mm a","Hm":"HH:mm","hms":"h:mm:ss a","Hms":"HH:mm:ss","hmsv":"h:mm:ss a v","Hmsv":"HH:mm:ss v","hmv":"h:mm a v","Hmv":"HH:mm v","M":"L","Md":"dd/MM","MEd":"E dd/MM","MMM":"LLL","MMMd":"d MMM","MMMEd":"E d MMM","MMMMd":"d MMMM","MMMMW-count-one":"'semaine' W (MMMM)","MMMMW-count-other":"'semaine' W (MMMM)","ms":"mm:ss","y":"y","yM":"MM/y","yMd":"dd/MM/y","yMEd":"E dd/MM/y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"E d MMM y","yMMMM":"MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","yw-count-one":"'semaine' w 'de' Y","yw-count-other":"'semaine' w 'de' Y"},"appendItems":{"Day":"{0} ({2}: {1})","Day-Of-Week":"{0} {1}","Era":"{1} {0}","Hour":"{0} ({2}: {1})","Minute":"{0} ({2}: {1})","Month":"{0} ({2}: {1})","Quarter":"{0} ({2}: {1})","Second":"{0} ({2}: {1})","Timezone":"{0} {1}","Week":"{0} ({2}: {1})","Year":"{1} {0}"},"intervalFormats":{"intervalFormatFallback":"{0} – {1}","d":{"d":"d–d"},"h":{"a":"h a – h a","h":"h – h a"},"H":{"H":"HH – HH"},"hm":{"a":"h:mm a – h:mm a","h":"h:mm – h:mm a","m":"h:mm – h:mm a"},"Hm":{"H":"HH:mm – HH:mm","m":"HH:mm – HH:mm"},"hmv":{"a":"h:mm a – h:mm a v","h":"h:mm – h:mm a v","m":"h:mm – h:mm a v"},"Hmv":{"H":"HH:mm – HH:mm v","m":"HH:mm – HH:mm v"},"hv":{"a":"h a – h a v","h":"h – h a v"},"Hv":{"H":"HH – HH v"},"M":{"M":"M–M"},"Md":{"d":"dd/MM – dd/MM","M":"dd/MM – dd/MM"},"MEd":{"d":"E dd/MM – E dd/MM","M":"E dd/MM – E dd/MM"},"MMM":{"M":"MMM–MMM"},"MMMd":{"d":"d–d MMM","M":"d MMM – d MMM"},"MMMEd":{"d":"E d – E d MMM","M":"E d MMM – E d MMM"},"y":{"y":"y–y"},"yM":{"M":"MM/y – MM/y","y":"MM/y – MM/y"},"yMd":{"d":"dd/MM/y – dd/MM/y","M":"dd/MM/y – dd/MM/y","y":"dd/MM/y – dd/MM/y"},"yMEd":{"d":"E dd/MM/y – E dd/MM/y","M":"E dd/MM/y – E dd/MM/y","y":"E dd/MM/y – E dd/MM/y"},"yMMM":{"M":"MMM–MMM y","y":"MMM y – MMM y"},"yMMMd":{"d":"d–d MMM y","M":"d MMM – d MMM y","y":"d MMM y – d MMM y"},"yMMMEd":{"d":"E d – E d MMM y","M":"E d MMM – E d MMM y","y":"E d MMM y – E d MMM y"},"yMMMM":{"M":"MMMM – MMMM y","y":"MMMM y – MMMM y"}}}}},"fields":{"era":{"displayName":"ère"},"era-short":{"displayName":"ère"},"era-narrow":{"displayName":"ère"},"year":{"displayName":"année","relative-type--1":"l’année dernière","relative-type-0":"cette année","relative-type-1":"l’année prochaine","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} an","relativeTimePattern-count-other":"dans {0} ans"},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} an","relativeTimePattern-count-other":"il y a {0} ans"}},"year-short":{"displayName":"an","relative-type--1":"l’année dernière","relative-type-0":"cette année","relative-type-1":"l’année prochaine","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} a","relativeTimePattern-count-other":"dans {0} a"},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} a","relativeTimePattern-count-other":"il y a {0} a"}},"year-narrow":{"displayName":"a","relative-type--1":"l’année dernière","relative-type-0":"cette année","relative-type-1":"l’année prochaine","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} a","relativeTimePattern-count-other":"+{0} a"},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} a","relativeTimePattern-count-other":"-{0} a"}},"quarter":{"displayName":"trimestre","relative-type--1":"le trimestre dernier","relative-type-0":"ce trimestre","relative-type-1":"le trimestre prochain","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} trimestre","relativeTimePattern-count-other":"dans {0} trimestres"},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} trimestre","relativeTimePattern-count-other":"il y a {0} trimestres"}},"quarter-short":{"displayName":"trim.","relative-type--1":"le trimestre dernier","relative-type-0":"ce trimestre","relative-type-1":"le trimestre prochain","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} trim.","relativeTimePattern-count-other":"dans {0} trim."},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} trim.","relativeTimePattern-count-other":"il y a {0} trim."}},"quarter-narrow":{"displayName":"trim.","relative-type--1":"le trimestre dernier","relative-type-0":"ce trimestre","relative-type-1":"le trimestre prochain","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} trim.","relativeTimePattern-count-other":"+{0} trim."},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} trim.","relativeTimePattern-count-other":"-{0} trim."}},"month":{"displayName":"mois","relative-type--1":"le mois dernier","relative-type-0":"ce mois-ci","relative-type-1":"le mois prochain","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} mois","relativeTimePattern-count-other":"dans {0} mois"},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} mois","relativeTimePattern-count-other":"il y a {0} mois"}},"month-short":{"displayName":"m.","relative-type--1":"le mois dernier","relative-type-0":"ce mois-ci","relative-type-1":"le mois prochain","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} m.","relativeTimePattern-count-other":"dans {0} m."},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} m.","relativeTimePattern-count-other":"il y a {0} m."}},"month-narrow":{"displayName":"m.","relative-type--1":"le mois dernier","relative-type-0":"ce mois-ci","relative-type-1":"le mois prochain","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} m.","relativeTimePattern-count-other":"+{0} m."},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} m.","relativeTimePattern-count-other":"-{0} m."}},"week":{"displayName":"semaine","relative-type--1":"la semaine dernière","relative-type-0":"cette semaine","relative-type-1":"la semaine prochaine","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} semaine","relativeTimePattern-count-other":"dans {0} semaines"},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} semaine","relativeTimePattern-count-other":"il y a {0} semaines"},"relativePeriod":"la semaine du {0}"},"week-short":{"displayName":"sem.","relative-type--1":"la semaine dernière","relative-type-0":"cette semaine","relative-type-1":"la semaine prochaine","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} sem.","relativeTimePattern-count-other":"dans {0} sem."},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} sem.","relativeTimePattern-count-other":"il y a {0} sem."},"relativePeriod":"sem. du {0}"},"week-narrow":{"displayName":"sem.","relative-type--1":"la semaine dernière","relative-type-0":"cette semaine","relative-type-1":"la semaine prochaine","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} sem.","relativeTimePattern-count-other":"+{0} sem."},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} sem.","relativeTimePattern-count-other":"-{0} sem."},"relativePeriod":"sem. du {0}"},"weekOfMonth":{"displayName":"semaine (mois)"},"weekOfMonth-short":{"displayName":"sem. (m.)"},"weekOfMonth-narrow":{"displayName":"sem. (m.)"},"day":{"displayName":"jour","relative-type--2":"avant-hier","relative-type--1":"hier","relative-type-0":"aujourd’hui","relative-type-1":"demain","relative-type-2":"après-demain","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} jour","relativeTimePattern-count-other":"dans {0} jours"},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} jour","relativeTimePattern-count-other":"il y a {0} jours"}},"day-short":{"displayName":"j","relative-type--2":"avant-hier","relative-type--1":"hier","relative-type-0":"aujourd’hui","relative-type-1":"demain","relative-type-2":"après-demain","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} j","relativeTimePattern-count-other":"dans {0} j"},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} j","relativeTimePattern-count-other":"il y a {0} j"}},"day-narrow":{"displayName":"j","relative-type--2":"avant-hier","relative-type--1":"hier","relative-type-0":"aujourd’hui","relative-type-1":"demain","relative-type-2":"après-demain","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} j","relativeTimePattern-count-other":"+{0} j"},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} j","relativeTimePattern-count-other":"-{0} j"}},"dayOfYear":{"displayName":"jour (année)"},"dayOfYear-short":{"displayName":"j (an)"},"dayOfYear-narrow":{"displayName":"j (an)"},"weekday":{"displayName":"jour de la semaine"},"weekday-short":{"displayName":"j (sem.)"},"weekday-narrow":{"displayName":"j (sem.)"},"weekdayOfMonth":{"displayName":"jour (mois)"},"weekdayOfMonth-short":{"displayName":"jour (mois)"},"weekdayOfMonth-narrow":{"displayName":"jour (mois)"},"sun":{"relative-type--1":"dimanche dernier","relative-type-0":"ce dimanche","relative-type-1":"dimanche prochain","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} dimanche","relativeTimePattern-count-other":"dans {0} dimanches"},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} dimanche","relativeTimePattern-count-other":"il y a {0} dimanches"}},"sun-short":{"relative-type--1":"dim. dernier","relative-type-0":"ce dim.","relative-type-1":"dim. prochain","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} dim.","relativeTimePattern-count-other":"dans {0} dim."},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} dim.","relativeTimePattern-count-other":"il y a {0} dim."}},"sun-narrow":{"relative-type--1":"dim. dernier","relative-type-0":"ce dim.","relative-type-1":"dim. prochain","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} dim.","relativeTimePattern-count-other":"dans {0} dim."},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} dim.","relativeTimePattern-count-other":"il y a {0} dim."}},"mon":{"relative-type--1":"lundi dernier","relative-type-0":"ce lundi","relative-type-1":"lundi prochain","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} lundi","relativeTimePattern-count-other":"dans {0} lundis"},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} lundi","relativeTimePattern-count-other":"il y a {0} lundis"}},"mon-short":{"relative-type--1":"lun. dernier","relative-type-0":"ce lun.","relative-type-1":"lun. prochain","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} lun.","relativeTimePattern-count-other":"dans {0} lun."},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} lun.","relativeTimePattern-count-other":"il y a {0} lun."}},"mon-narrow":{"relative-type--1":"lun. dernier","relative-type-0":"ce lun.","relative-type-1":"lun. prochain","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} lun.","relativeTimePattern-count-other":"dans {0} lun."},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} lun.","relativeTimePattern-count-other":"il y a {0} lun."}},"tue":{"relative-type--1":"mardi dernier","relative-type-0":"ce mardi","relative-type-1":"mardi prochain","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} mardi","relativeTimePattern-count-other":"dans {0} mardis"},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} mardi","relativeTimePattern-count-other":"il y a {0} mardis"}},"tue-short":{"relative-type--1":"mar. dernier","relative-type-0":"ce mar.","relative-type-1":"mar. prochain","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} mar.","relativeTimePattern-count-other":"dans {0} mar."},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} mar.","relativeTimePattern-count-other":"il y a {0} mar."}},"tue-narrow":{"relative-type--1":"mar. dernier","relative-type-0":"ce mar.","relative-type-1":"mar. prochain","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} mar.","relativeTimePattern-count-other":"dans {0} mar."},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} mar.","relativeTimePattern-count-other":"il y a {0} mar."}},"wed":{"relative-type--1":"mercredi dernier","relative-type-0":"ce mercredi","relative-type-1":"mercredi prochain","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} mercredi","relativeTimePattern-count-other":"dans {0} mercredis"},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} mercredi","relativeTimePattern-count-other":"il y a {0} mercredis"}},"wed-short":{"relative-type--1":"mer. dernier","relative-type-0":"ce mer.","relative-type-1":"mer. prochain","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} mer.","relativeTimePattern-count-other":"dans {0} mer."},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} mer.","relativeTimePattern-count-other":"il y a {0} mer."}},"wed-narrow":{"relative-type--1":"mer. dernier","relative-type-0":"ce mer.","relative-type-1":"mer. prochain","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} mer.","relativeTimePattern-count-other":"dans {0} mer."},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} mer.","relativeTimePattern-count-other":"il y a {0} mer."}},"thu":{"relative-type--1":"jeudi dernier","relative-type-0":"ce jeudi","relative-type-1":"jeudi prochain","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} jeudi","relativeTimePattern-count-other":"dans {0} jeudis"},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} jeudi","relativeTimePattern-count-other":"il y a {0} jeudis"}},"thu-short":{"relative-type--1":"jeu. dernier","relative-type-0":"ce jeu.","relative-type-1":"jeu. prochain","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} jeu.","relativeTimePattern-count-other":"dans {0} jeu."},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} jeu.","relativeTimePattern-count-other":"il y a {0} jeu."}},"thu-narrow":{"relative-type--1":"jeu. dernier","relative-type-0":"ce jeu.","relative-type-1":"jeu. prochain","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} jeu.","relativeTimePattern-count-other":"dans {0} jeu."},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} jeu.","relativeTimePattern-count-other":"il y a {0} jeu."}},"fri":{"relative-type--1":"vendredi dernier","relative-type-0":"ce vendredi","relative-type-1":"vendredi prochain","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} vendredi","relativeTimePattern-count-other":"dans {0} vendredis"},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} vendredi","relativeTimePattern-count-other":"il y a {0} vendredis"}},"fri-short":{"relative-type--1":"ven. dernier","relative-type-0":"ce ven.","relative-type-1":"ven. prochain","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} ven.","relativeTimePattern-count-other":"dans {0} ven."},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} ven.","relativeTimePattern-count-other":"il y a {0} ven."}},"fri-narrow":{"relative-type--1":"ven. dernier","relative-type-0":"ce ven.","relative-type-1":"ven. prochain","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} ven.","relativeTimePattern-count-other":"dans {0} ven."},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} ven.","relativeTimePattern-count-other":"il y a {0} ven."}},"sat":{"relative-type--1":"samedi dernier","relative-type-0":"ce samedi","relative-type-1":"samedi prochain","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} samedi","relativeTimePattern-count-other":"dans {0} samedis"},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} samedi","relativeTimePattern-count-other":"il y a {0} samedis"}},"sat-short":{"relative-type--1":"sam. dernier","relative-type-0":"ce sam.","relative-type-1":"sam. prochain","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} sam.","relativeTimePattern-count-other":"dans {0} sam."},"relativeTime-type-past":{"relativeTimePattern-count-one":"dans {0} sam.","relativeTimePattern-count-other":"dans {0} sam."}},"sat-narrow":{"relative-type--1":"sam. dernier","relative-type-0":"ce sam.","relative-type-1":"sam. prochain","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} sam.","relativeTimePattern-count-other":"dans {0} sam."},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} sam.","relativeTimePattern-count-other":"il y a {0} sam."}},"dayperiod-short":{"displayName":"cadran"},"dayperiod":{"displayName":"cadran"},"dayperiod-narrow":{"displayName":"cadran"},"hour":{"displayName":"heure","relative-type-0":"cette heure-ci","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} heure","relativeTimePattern-count-other":"dans {0} heures"},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} heure","relativeTimePattern-count-other":"il y a {0} heures"}},"hour-short":{"displayName":"h","relative-type-0":"cette heure-ci","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} h","relativeTimePattern-count-other":"dans {0} h"},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} h","relativeTimePattern-count-other":"il y a {0} h"}},"hour-narrow":{"displayName":"h","relative-type-0":"cette heure-ci","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} h","relativeTimePattern-count-other":"+{0} h"},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} h","relativeTimePattern-count-other":"-{0} h"}},"minute":{"displayName":"minute","relative-type-0":"cette minute-ci","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} minute","relativeTimePattern-count-other":"dans {0} minutes"},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} minute","relativeTimePattern-count-other":"il y a {0} minutes"}},"minute-short":{"displayName":"min","relative-type-0":"cette minute-ci","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} min","relativeTimePattern-count-other":"dans {0} min"},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} min","relativeTimePattern-count-other":"il y a {0} min"}},"minute-narrow":{"displayName":"min","relative-type-0":"cette minute-ci","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} min","relativeTimePattern-count-other":"+{0} min"},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} min","relativeTimePattern-count-other":"-{0} min"}},"second":{"displayName":"seconde","relative-type-0":"maintenant","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} seconde","relativeTimePattern-count-other":"dans {0} secondes"},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} seconde","relativeTimePattern-count-other":"il y a {0} secondes"}},"second-short":{"displayName":"s","relative-type-0":"maintenant","relativeTime-type-future":{"relativeTimePattern-count-one":"dans {0} s","relativeTimePattern-count-other":"dans {0} s"},"relativeTime-type-past":{"relativeTimePattern-count-one":"il y a {0} s","relativeTimePattern-count-other":"il y a {0} s"}},"second-narrow":{"displayName":"s","relative-type-0":"maintenant","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} s","relativeTimePattern-count-other":"+{0} s"},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} s","relativeTimePattern-count-other":"-{0} s"}},"zone":{"displayName":"fuseau horaire"},"zone-short":{"displayName":"fuseau horaire"},"zone-narrow":{"displayName":"fuseau horaire"}}},"numbers":{"currencies":{"ADP":{"displayName":"peseta andorrane","displayName-count-one":"peseta andorrane","displayName-count-other":"pesetas andorranes","symbol":"ADP"},"AED":{"displayName":"dirham des Émirats arabes unis","displayName-count-one":"dirham des Émirats arabes unis","displayName-count-other":"dirhams des Émirats arabes unis","symbol":"AED"},"AFA":{"displayName":"afghani (1927–2002)","displayName-count-one":"afghani (1927–2002)","displayName-count-other":"afghanis (1927–2002)","symbol":"AFA"},"AFN":{"displayName":"afghani afghan","displayName-count-one":"afghani afghan","displayName-count-other":"afghanis afghan","symbol":"AFN"},"ALK":{"displayName":"lek albanais (1947–1961)","displayName-count-one":"lek albanais (1947–1961)","displayName-count-other":"leks albanais (1947–1961)","symbol":"ALK"},"ALL":{"displayName":"lek albanais","displayName-count-one":"lek albanais","displayName-count-other":"leks albanais","symbol":"ALL"},"AMD":{"displayName":"dram arménien","displayName-count-one":"dram arménien","displayName-count-other":"drams arméniens","symbol":"AMD"},"ANG":{"displayName":"florin antillais","displayName-count-one":"florin antillais","displayName-count-other":"florins antillais","symbol":"ANG"},"AOA":{"displayName":"kwanza angolais","displayName-count-one":"kwanza angolais","displayName-count-other":"kwanzas angolais","symbol":"AOA","symbol-alt-narrow":"Kz"},"AOK":{"displayName":"kwanza angolais (1977–1990)","displayName-count-one":"kwanza angolais (1977–1990)","displayName-count-other":"kwanzas angolais (1977–1990)","symbol":"AOK"},"AON":{"displayName":"nouveau kwanza angolais (1990–2000)","displayName-count-one":"nouveau kwanza angolais (1990–2000)","displayName-count-other":"nouveaux kwanzas angolais (1990–2000)","symbol":"AON"},"AOR":{"displayName":"kwanza angolais réajusté (1995–1999)","displayName-count-one":"kwanza angolais réajusté (1995–1999)","displayName-count-other":"kwanzas angolais réajustés (1995–1999)","symbol":"AOR"},"ARA":{"displayName":"austral argentin","displayName-count-one":"austral argentin","displayName-count-other":"australs argentins","symbol":"ARA"},"ARL":{"displayName":"ARL","symbol":"ARL"},"ARM":{"displayName":"ARM","symbol":"ARM"},"ARP":{"displayName":"peso argentin (1983–1985)","displayName-count-one":"peso argentin (1983–1985)","displayName-count-other":"pesos argentins (1983–1985)","symbol":"ARP"},"ARS":{"displayName":"peso argentin","displayName-count-one":"peso argentin","displayName-count-other":"pesos argentins","symbol":"$AR","symbol-alt-narrow":"$"},"ATS":{"displayName":"schilling autrichien","displayName-count-one":"schilling autrichien","displayName-count-other":"schillings autrichiens","symbol":"ATS"},"AUD":{"displayName":"dollar australien","displayName-count-one":"dollar australien","displayName-count-other":"dollars australiens","symbol":"$AU","symbol-alt-narrow":"$"},"AWG":{"displayName":"florin arubais","displayName-count-one":"florin arubais","displayName-count-other":"florins arubais","symbol":"AWG"},"AZM":{"displayName":"manat azéri (1993–2006)","displayName-count-one":"manat azéri (1993–2006)","displayName-count-other":"manats azéris (1993–2006)","symbol":"AZM"},"AZN":{"displayName":"manat azéri","displayName-count-one":"manat azéri","displayName-count-other":"manats azéris","symbol":"AZN"},"BAD":{"displayName":"dinar bosniaque","displayName-count-one":"dinar bosniaque","displayName-count-other":"dinars bosniaques","symbol":"BAD"},"BAM":{"displayName":"mark convertible bosniaque","displayName-count-one":"mark convertible bosniaque","displayName-count-other":"marks convertibles bosniaques","symbol":"BAM","symbol-alt-narrow":"KM"},"BAN":{"displayName":"BAN","symbol":"BAN"},"BBD":{"displayName":"dollar barbadien","displayName-count-one":"dollar barbadien","displayName-count-other":"dollars barbadiens","symbol":"BBD","symbol-alt-narrow":"$"},"BDT":{"displayName":"taka bangladeshi","displayName-count-one":"taka bangladeshi","displayName-count-other":"takas bangladeshis","symbol":"BDT","symbol-alt-narrow":"৳"},"BEC":{"displayName":"franc belge (convertible)","displayName-count-one":"franc belge (convertible)","displayName-count-other":"francs belges (convertibles)","symbol":"BEC"},"BEF":{"displayName":"franc belge","displayName-count-one":"franc belge","displayName-count-other":"francs belges","symbol":"FB"},"BEL":{"displayName":"franc belge (financier)","displayName-count-one":"franc belge (financier)","displayName-count-other":"francs belges (financiers)","symbol":"BEL"},"BGL":{"displayName":"lev bulgare (1962–1999)","displayName-count-one":"lev bulgare (1962–1999)","displayName-count-other":"levs bulgares (1962–1999)","symbol":"BGL"},"BGM":{"displayName":"BGM","symbol":"BGM"},"BGN":{"displayName":"lev bulgare","displayName-count-one":"lev bulgare","displayName-count-other":"levs bulgares","symbol":"BGN"},"BGO":{"displayName":"BGO","symbol":"BGO"},"BHD":{"displayName":"dinar bahreïni","displayName-count-one":"dinar bahreïni","displayName-count-other":"dinars bahreïnis","symbol":"BHD"},"BIF":{"displayName":"franc burundais","displayName-count-one":"franc burundais","displayName-count-other":"francs burundais","symbol":"BIF"},"BMD":{"displayName":"dollar bermudien","displayName-count-one":"dollar bermudien","displayName-count-other":"dollars bermudiens","symbol":"$BM","symbol-alt-narrow":"$"},"BND":{"displayName":"dollar brunéien","displayName-count-one":"dollar brunéien","displayName-count-other":"dollars brunéiens","symbol":"$BN","symbol-alt-narrow":"$"},"BOB":{"displayName":"boliviano bolivien","displayName-count-one":"boliviano bolivien","displayName-count-other":"bolivianos boliviens","symbol":"BOB","symbol-alt-narrow":"Bs"},"BOL":{"displayName":"BOL","symbol":"BOL"},"BOP":{"displayName":"peso bolivien","displayName-count-one":"peso bolivien","displayName-count-other":"pesos boliviens","symbol":"BOP"},"BOV":{"displayName":"mvdol bolivien","displayName-count-one":"mvdol bolivien","displayName-count-other":"mvdols boliviens","symbol":"BOV"},"BRB":{"displayName":"nouveau cruzeiro brésilien (1967–1986)","displayName-count-one":"nouveau cruzeiro brésilien (1967–1986)","displayName-count-other":"nouveaux cruzeiros brésiliens (1967–1986)","symbol":"BRB"},"BRC":{"displayName":"cruzado brésilien (1986–1989)","displayName-count-one":"cruzado brésilien (1986–1989)","displayName-count-other":"cruzados brésiliens (1986–1989)","symbol":"BRC"},"BRE":{"displayName":"cruzeiro brésilien (1990–1993)","displayName-count-one":"cruzeiro brésilien (1990–1993)","displayName-count-other":"cruzeiros brésiliens (1990–1993)","symbol":"BRE"},"BRL":{"displayName":"réal brésilien","displayName-count-one":"réal brésilien","displayName-count-other":"réals brésiliens","symbol":"R$","symbol-alt-narrow":"R$"},"BRN":{"displayName":"nouveau cruzado","displayName-count-one":"nouveau cruzado brésilien (1989–1990)","displayName-count-other":"nouveaux cruzados brésiliens (1989–1990)","symbol":"BRN"},"BRR":{"displayName":"cruzeiro","displayName-count-one":"cruzeiro réal brésilien (1993–1994)","displayName-count-other":"cruzeiros réals brésiliens (1993–1994)","symbol":"BRR"},"BRZ":{"displayName":"BRZ","symbol":"BRZ"},"BSD":{"displayName":"dollar bahaméen","displayName-count-one":"dollar bahaméen","displayName-count-other":"dollars bahaméens","symbol":"$BS","symbol-alt-narrow":"$"},"BTN":{"displayName":"ngultrum bouthanais","displayName-count-one":"ngultrum bouthanais","displayName-count-other":"ngultrums bouthanais","symbol":"BTN"},"BUK":{"displayName":"kyat birman","displayName-count-one":"kyat birman","displayName-count-other":"kyats birmans","symbol":"BUK"},"BWP":{"displayName":"pula botswanais","displayName-count-one":"pula botswanais","displayName-count-other":"pulas botswanais","symbol":"BWP","symbol-alt-narrow":"P"},"BYB":{"displayName":"nouveau rouble biélorusse (1994–1999)","displayName-count-one":"nouveau rouble biélorusse (1994–1999)","displayName-count-other":"nouveaux roubles biélorusses (1994–1999)","symbol":"BYB"},"BYN":{"displayName":"rouble biélorusse","displayName-count-one":"rouble biélorusse","displayName-count-other":"roubles biélorusses","symbol":"BYN","symbol-alt-narrow":"р."},"BYR":{"displayName":"rouble biélorusse (2000–2016)","displayName-count-one":"rouble biélorusse (2000–2016)","displayName-count-other":"roubles biélorusses (2000–2016)","symbol":"BYR"},"BZD":{"displayName":"dollar bélizéen","displayName-count-one":"dollar bélizéen","displayName-count-other":"dollars bélizéens","symbol":"$BZ","symbol-alt-narrow":"$"},"CAD":{"displayName":"dollar canadien","displayName-count-one":"dollar canadien","displayName-count-other":"dollars canadiens","symbol":"$CA","symbol-alt-narrow":"$"},"CDF":{"displayName":"franc congolais","displayName-count-one":"franc congolais","displayName-count-other":"francs congolais","symbol":"CDF"},"CHE":{"displayName":"euro WIR","displayName-count-one":"euro WIR","displayName-count-other":"euros WIR","symbol":"CHE"},"CHF":{"displayName":"franc suisse","displayName-count-one":"franc suisse","displayName-count-other":"francs suisses","symbol":"CHF"},"CHW":{"displayName":"franc WIR","displayName-count-one":"franc WIR","displayName-count-other":"francs WIR","symbol":"CHW"},"CLE":{"displayName":"CLE","symbol":"CLE"},"CLF":{"displayName":"unité d’investissement chilienne","displayName-count-one":"unité d’investissement chilienne","displayName-count-other":"unités d’investissement chiliennes","symbol":"CLF"},"CLP":{"displayName":"peso chilien","displayName-count-one":"peso chilien","displayName-count-other":"pesos chiliens","symbol":"$CL","symbol-alt-narrow":"$"},"CNH":{"displayName":"yuan chinois (zone extracôtière)","displayName-count-one":"yuan chinois (zone extracôtière)","displayName-count-other":"yuans chinois (zone extracôtière)","symbol":"CNH"},"CNX":{"displayName":"CNX","symbol":"CNX"},"CNY":{"displayName":"yuan renminbi chinois","displayName-count-one":"yuan renminbi chinois","displayName-count-other":"yuans renminbi chinois","symbol":"CNY","symbol-alt-narrow":"¥"},"COP":{"displayName":"peso colombien","displayName-count-one":"peso colombien","displayName-count-other":"pesos colombiens","symbol":"$CO","symbol-alt-narrow":"$"},"COU":{"displayName":"unité de valeur réelle colombienne","displayName-count-one":"unité de valeur réelle colombienne","displayName-count-other":"unités de valeur réelle colombiennes","symbol":"COU"},"CRC":{"displayName":"colón costaricain","displayName-count-one":"colón costaricain","displayName-count-other":"colóns costaricains","symbol":"CRC","symbol-alt-narrow":"₡"},"CSD":{"displayName":"dinar serbo-monténégrin","displayName-count-one":"dinar serbo-monténégrin","displayName-count-other":"dinars serbo-monténégrins","symbol":"CSD"},"CSK":{"displayName":"couronne forte tchécoslovaque","displayName-count-one":"couronne forte tchécoslovaque","displayName-count-other":"couronnes fortes tchécoslovaques","symbol":"CSK"},"CUC":{"displayName":"peso cubain convertible","displayName-count-one":"peso cubain convertible","displayName-count-other":"pesos cubains convertibles","symbol":"CUC","symbol-alt-narrow":"$"},"CUP":{"displayName":"peso cubain","displayName-count-one":"peso cubain","displayName-count-other":"pesos cubains","symbol":"CUP","symbol-alt-narrow":"$"},"CVE":{"displayName":"escudo capverdien","displayName-count-one":"escudo capverdien","displayName-count-other":"escudos capverdiens","symbol":"CVE"},"CYP":{"displayName":"livre chypriote","displayName-count-one":"livre chypriote","displayName-count-other":"livres chypriotes","symbol":"£CY"},"CZK":{"displayName":"couronne tchèque","displayName-count-one":"couronne tchèque","displayName-count-other":"couronnes tchèques","symbol":"CZK","symbol-alt-narrow":"Kč"},"DDM":{"displayName":"mark est-allemand","displayName-count-one":"mark est-allemand","displayName-count-other":"marks est-allemands","symbol":"DDM"},"DEM":{"displayName":"mark allemand","displayName-count-one":"mark allemand","displayName-count-other":"marks allemands","symbol":"DEM"},"DJF":{"displayName":"franc djiboutien","displayName-count-one":"franc djiboutien","displayName-count-other":"francs djiboutiens","symbol":"DJF"},"DKK":{"displayName":"couronne danoise","displayName-count-one":"couronne danoise","displayName-count-other":"couronnes danoises","symbol":"DKK","symbol-alt-narrow":"kr"},"DOP":{"displayName":"peso dominicain","displayName-count-one":"peso dominicain","displayName-count-other":"pesos dominicains","symbol":"DOP","symbol-alt-narrow":"$"},"DZD":{"displayName":"dinar algérien","displayName-count-one":"dinar algérien","displayName-count-other":"dinars algériens","symbol":"DZD"},"ECS":{"displayName":"sucre équatorien","displayName-count-one":"sucre équatorien","displayName-count-other":"sucres équatoriens","symbol":"ECS"},"ECV":{"displayName":"unité de valeur constante équatoriale (UVC)","displayName-count-one":"unité de valeur constante équatorienne (UVC)","displayName-count-other":"unités de valeur constante équatoriennes (UVC)","symbol":"ECV"},"EEK":{"displayName":"couronne estonienne","displayName-count-one":"couronne estonienne","displayName-count-other":"couronnes estoniennes","symbol":"EEK"},"EGP":{"displayName":"livre égyptienne","displayName-count-one":"livre égyptienne","displayName-count-other":"livres égyptiennes","symbol":"EGP","symbol-alt-narrow":"£E"},"ERN":{"displayName":"nafka érythréen","displayName-count-one":"nafka érythréen","displayName-count-other":"nafkas érythréens","symbol":"ERN"},"ESA":{"displayName":"peseta espagnole (compte A)","displayName-count-one":"peseta espagnole (compte A)","displayName-count-other":"pesetas espagnoles (compte A)","symbol":"ESA"},"ESB":{"displayName":"peseta espagnole (compte convertible)","displayName-count-one":"peseta espagnole (compte convertible)","displayName-count-other":"pesetas espagnoles (compte convertible)","symbol":"ESB"},"ESP":{"displayName":"peseta espagnole","displayName-count-one":"peseta espagnole","displayName-count-other":"pesetas espagnoles","symbol":"ESP","symbol-alt-narrow":"₧"},"ETB":{"displayName":"birr éthiopien","displayName-count-one":"birr éthiopien","displayName-count-other":"birrs éthiopiens","symbol":"ETB"},"EUR":{"displayName":"euro","displayName-count-one":"euro","displayName-count-other":"euros","symbol":"€","symbol-alt-narrow":"€"},"FIM":{"displayName":"mark finlandais","displayName-count-one":"mark finlandais","displayName-count-other":"marks finlandais","symbol":"FIM"},"FJD":{"displayName":"dollar fidjien","displayName-count-one":"dollar fidjien","displayName-count-other":"dollars fidjiens","symbol":"$FJ","symbol-alt-narrow":"$"},"FKP":{"displayName":"livre des îles Malouines","displayName-count-one":"livre des îles Malouines","displayName-count-other":"livres des îles Malouines","symbol":"£FK","symbol-alt-narrow":"£"},"FRF":{"displayName":"franc français","displayName-count-one":"franc français","displayName-count-other":"francs français","symbol":"F"},"GBP":{"displayName":"livre sterling","displayName-count-one":"livre sterling","displayName-count-other":"livres sterling","symbol":"£GB","symbol-alt-narrow":"£"},"GEK":{"displayName":"coupon de lari géorgien","displayName-count-one":"coupon de lari géorgien","displayName-count-other":"coupons de lari géorgiens","symbol":"GEK"},"GEL":{"displayName":"lari géorgien","displayName-count-one":"lari géorgien","displayName-count-other":"lari géorgiens","symbol":"GEL","symbol-alt-narrow":"₾","symbol-alt-variant":"₾"},"GHC":{"displayName":"cédi","displayName-count-one":"cédi ghanéen (1967–2007)","displayName-count-other":"cédis ghanéens (1967–2007)","symbol":"GHC"},"GHS":{"displayName":"cédi ghanéen","displayName-count-one":"cédi ghanéen","displayName-count-other":"cédis ghanéens","symbol":"GHS"},"GIP":{"displayName":"livre de Gibraltar","displayName-count-one":"livre de Gibraltar","displayName-count-other":"livres de Gibraltar","symbol":"£GI","symbol-alt-narrow":"£"},"GMD":{"displayName":"dalasi gambien","displayName-count-one":"dalasi gambien","displayName-count-other":"dalasis gambiens","symbol":"GMD"},"GNF":{"displayName":"franc guinéen","displayName-count-one":"franc guinéen","displayName-count-other":"francs guinéens","symbol":"GNF","symbol-alt-narrow":"FG"},"GNS":{"displayName":"syli guinéen","displayName-count-one":"syli guinéen","displayName-count-other":"sylis guinéens","symbol":"GNS"},"GQE":{"displayName":"ekwélé équatoguinéen","displayName-count-one":"ekwélé équatoguinéen","displayName-count-other":"ekwélés équatoguinéens","symbol":"GQE"},"GRD":{"displayName":"drachme grecque","displayName-count-one":"drachme grecque","displayName-count-other":"drachmes grecques","symbol":"GRD"},"GTQ":{"displayName":"quetzal guatémaltèque","displayName-count-one":"quetzal guatémaltèque","displayName-count-other":"quetzals guatémaltèques","symbol":"GTQ","symbol-alt-narrow":"Q"},"GWE":{"displayName":"escudo de Guinée portugaise","displayName-count-one":"escudo de Guinée portugaise","displayName-count-other":"escudos de Guinée portugaise","symbol":"GWE"},"GWP":{"displayName":"peso bissau-guinéen","displayName-count-one":"peso bissau-guinéen","displayName-count-other":"pesos bissau-guinéens","symbol":"GWP"},"GYD":{"displayName":"dollar du Guyana","displayName-count-one":"dollar du Guyana","displayName-count-other":"dollars du Guyana","symbol":"GYD","symbol-alt-narrow":"$"},"HKD":{"displayName":"dollar de Hong Kong","displayName-count-one":"dollar de Hong Kong","displayName-count-other":"dollars de Hong Kong","symbol":"HKD","symbol-alt-narrow":"$"},"HNL":{"displayName":"lempira hondurien","displayName-count-one":"lempira hondurien","displayName-count-other":"lempiras honduriens","symbol":"HNL","symbol-alt-narrow":"L"},"HRD":{"displayName":"dinar croate","displayName-count-one":"dinar croate","displayName-count-other":"dinars croates","symbol":"HRD"},"HRK":{"displayName":"kuna croate","displayName-count-one":"kuna croate","displayName-count-other":"kunas croates","symbol":"HRK","symbol-alt-narrow":"kn"},"HTG":{"displayName":"gourde haïtienne","displayName-count-one":"gourde haïtienne","displayName-count-other":"gourdes haïtiennes","symbol":"HTG"},"HUF":{"displayName":"forint hongrois","displayName-count-one":"forint hongrois","displayName-count-other":"forints hongrois","symbol":"HUF","symbol-alt-narrow":"Ft"},"IDR":{"displayName":"roupie indonésienne","displayName-count-one":"roupie indonésienne","displayName-count-other":"roupies indonésiennes","symbol":"IDR","symbol-alt-narrow":"Rp"},"IEP":{"displayName":"livre irlandaise","displayName-count-one":"livre irlandaise","displayName-count-other":"livres irlandaises","symbol":"£IE"},"ILP":{"displayName":"livre israélienne","displayName-count-one":"livre israélienne","displayName-count-other":"livres israéliennes","symbol":"£IL"},"ILR":{"displayName":"ILR","symbol":"ILR"},"ILS":{"displayName":"nouveau shekel israélien","displayName-count-one":"nouveau shekel israélien","displayName-count-other":"nouveaux shekels israéliens","symbol":"₪","symbol-alt-narrow":"₪"},"INR":{"displayName":"roupie indienne","displayName-count-one":"roupie indienne","displayName-count-other":"roupies indiennes","symbol":"₹","symbol-alt-narrow":"₹"},"IQD":{"displayName":"dinar irakien","displayName-count-one":"dinar irakien","displayName-count-other":"dinars irakiens","symbol":"IQD"},"IRR":{"displayName":"riyal iranien","displayName-count-one":"riyal iranien","displayName-count-other":"riyals iraniens","symbol":"IRR"},"ISJ":{"displayName":"ISJ","symbol":"ISJ"},"ISK":{"displayName":"couronne islandaise","displayName-count-one":"couronne islandaise","displayName-count-other":"couronnes islandaises","symbol":"ISK","symbol-alt-narrow":"kr"},"ITL":{"displayName":"lire italienne","displayName-count-one":"lire italienne","displayName-count-other":"lires italiennes","symbol":"₤IT"},"JMD":{"displayName":"dollar jamaïcain","displayName-count-one":"dollar jamaïcain","displayName-count-other":"dollars jamaïcains","symbol":"JMD","symbol-alt-narrow":"$"},"JOD":{"displayName":"dinar jordanien","displayName-count-one":"dinar jordanien","displayName-count-other":"dinars jordaniens","symbol":"JOD"},"JPY":{"displayName":"yen japonais","displayName-count-one":"yen japonais","displayName-count-other":"yens japonais","symbol":"JPY","symbol-alt-narrow":"¥"},"KES":{"displayName":"shilling kényan","displayName-count-one":"shilling kényan","displayName-count-other":"shillings kényans","symbol":"KES"},"KGS":{"displayName":"som kirghize","displayName-count-one":"som kirghize","displayName-count-other":"soms kirghizes","symbol":"KGS"},"KHR":{"displayName":"riel cambodgien","displayName-count-one":"riel cambodgien","displayName-count-other":"riels cambodgiens","symbol":"KHR","symbol-alt-narrow":"៛"},"KMF":{"displayName":"franc comorien","displayName-count-one":"franc comorien","displayName-count-other":"francs comoriens","symbol":"KMF","symbol-alt-narrow":"FC"},"KPW":{"displayName":"won nord-coréen","displayName-count-one":"won nord-coréen","displayName-count-other":"wons nord-coréens","symbol":"KPW","symbol-alt-narrow":"₩"},"KRH":{"displayName":"KRH","symbol":"KRH"},"KRO":{"displayName":"KRO","symbol":"KRO"},"KRW":{"displayName":"won sud-coréen","displayName-count-one":"won sud-coréen","displayName-count-other":"wons sud-coréens","symbol":"₩","symbol-alt-narrow":"₩"},"KWD":{"displayName":"dinar koweïtien","displayName-count-one":"dinar koweïtien","displayName-count-other":"dinar koweïtiens","symbol":"KWD"},"KYD":{"displayName":"dollar des îles Caïmans","displayName-count-one":"dollar des îles Caïmans","displayName-count-other":"dollars des îles Caïmans","symbol":"KYD","symbol-alt-narrow":"$"},"KZT":{"displayName":"tenge kazakh","displayName-count-one":"tenge kazakh","displayName-count-other":"tenges kazakhs","symbol":"KZT","symbol-alt-narrow":"₸"},"LAK":{"displayName":"kip loatien","displayName-count-one":"kip loatien","displayName-count-other":"kips loatiens","symbol":"LAK","symbol-alt-narrow":"₭"},"LBP":{"displayName":"livre libanaise","displayName-count-one":"livre libanaise","displayName-count-other":"livres libanaises","symbol":"£LB","symbol-alt-narrow":"£L"},"LKR":{"displayName":"roupie srilankaise","displayName-count-one":"roupie srilankaise","displayName-count-other":"roupies srilankaises","symbol":"LKR","symbol-alt-narrow":"Rs"},"LRD":{"displayName":"dollar libérien","displayName-count-one":"dollar libérien","displayName-count-other":"dollars libériens","symbol":"LRD","symbol-alt-narrow":"$"},"LSL":{"displayName":"loti lesothan","displayName-count-one":"loti lesothan","displayName-count-other":"maloti lesothans","symbol":"LSL"},"LTL":{"displayName":"litas lituanien","displayName-count-one":"litas lituanien","displayName-count-other":"litas lituaniens","symbol":"LTL","symbol-alt-narrow":"Lt"},"LTT":{"displayName":"talonas lituanien","displayName-count-one":"talonas lituanien","displayName-count-other":"talonas lituaniens","symbol":"LTT"},"LUC":{"displayName":"franc convertible luxembourgeois","displayName-count-one":"franc convertible luxembourgeois","displayName-count-other":"francs convertibles luxembourgeois","symbol":"LUC"},"LUF":{"displayName":"franc luxembourgeois","displayName-count-one":"franc luxembourgeois","displayName-count-other":"francs luxembourgeois","symbol":"LUF"},"LUL":{"displayName":"franc financier luxembourgeois","displayName-count-one":"franc financier luxembourgeois","displayName-count-other":"francs financiers luxembourgeois","symbol":"LUL"},"LVL":{"displayName":"lats letton","displayName-count-one":"lats letton","displayName-count-other":"lats lettons","symbol":"LVL","symbol-alt-narrow":"Ls"},"LVR":{"displayName":"rouble letton","displayName-count-one":"rouble letton","displayName-count-other":"roubles lettons","symbol":"LVR"},"LYD":{"displayName":"dinar libyen","displayName-count-one":"dinar libyen","displayName-count-other":"dinars libyens","symbol":"LYD"},"MAD":{"displayName":"dirham marocain","displayName-count-one":"dirham marocain","displayName-count-other":"dirhams marocains","symbol":"MAD"},"MAF":{"displayName":"franc marocain","displayName-count-one":"franc marocain","displayName-count-other":"francs marocains","symbol":"MAF"},"MCF":{"displayName":"MCF","symbol":"MCF"},"MDC":{"displayName":"MDC","symbol":"MDC"},"MDL":{"displayName":"leu moldave","displayName-count-one":"leu moldave","displayName-count-other":"leus moldaves","symbol":"MDL"},"MGA":{"displayName":"ariary malgache","displayName-count-one":"ariary malgache","displayName-count-other":"ariarys malgaches","symbol":"MGA","symbol-alt-narrow":"Ar"},"MGF":{"displayName":"franc malgache","displayName-count-one":"franc malgache","displayName-count-other":"francs malgaches","symbol":"MGF"},"MKD":{"displayName":"denar macédonien","displayName-count-one":"denar macédonien","displayName-count-other":"denars macédoniens","symbol":"MKD"},"MKN":{"displayName":"MKN","symbol":"MKN"},"MLF":{"displayName":"franc malien","displayName-count-one":"franc malien","displayName-count-other":"francs maliens","symbol":"MLF"},"MMK":{"displayName":"kyat myanmarais","displayName-count-one":"kyat myanmarais","displayName-count-other":"kyats myanmarais","symbol":"MMK","symbol-alt-narrow":"K"},"MNT":{"displayName":"tugrik mongol","displayName-count-one":"tugrik mongol","displayName-count-other":"tugriks mongols","symbol":"MNT","symbol-alt-narrow":"₮"},"MOP":{"displayName":"pataca macanaise","displayName-count-one":"pataca macanaise","displayName-count-other":"patacas macanaises","symbol":"MOP"},"MRO":{"displayName":"ouguiya mauritanien","displayName-count-one":"ouguiya mauritanien","displayName-count-other":"ouguiyas mauritaniens","symbol":"MRO"},"MTL":{"displayName":"lire maltaise","displayName-count-one":"lire maltaise","displayName-count-other":"lires maltaises","symbol":"MTL"},"MTP":{"displayName":"livre maltaise","displayName-count-one":"livre maltaise","displayName-count-other":"livres maltaises","symbol":"£MT"},"MUR":{"displayName":"roupie mauricienne","displayName-count-one":"roupie mauricienne","displayName-count-other":"roupies mauriciennes","symbol":"MUR","symbol-alt-narrow":"Rs"},"MVP":{"displayName":"MVP","symbol":"MVP"},"MVR":{"displayName":"rufiyaa maldivien","displayName-count-one":"rufiyaa maldivienne","displayName-count-other":"rufiyaas maldiviennes","symbol":"MVR"},"MWK":{"displayName":"kwacha malawite","displayName-count-one":"kwacha malawite","displayName-count-other":"kwachas malawites","symbol":"MWK"},"MXN":{"displayName":"peso mexicain","displayName-count-one":"peso mexicain","displayName-count-other":"pesos mexicains","symbol":"$MX","symbol-alt-narrow":"$"},"MXP":{"displayName":"peso d’argent mexicain (1861–1992)","displayName-count-one":"peso d’argent mexicain (1861–1992)","displayName-count-other":"pesos d’argent mexicains (1861–1992)","symbol":"MXP"},"MXV":{"displayName":"unité de conversion mexicaine (UDI)","displayName-count-one":"unité de conversion mexicaine (UDI)","displayName-count-other":"unités de conversion mexicaines (UDI)","symbol":"MXV"},"MYR":{"displayName":"ringgit malais","displayName-count-one":"ringgit malais","displayName-count-other":"ringgits malais","symbol":"MYR","symbol-alt-narrow":"RM"},"MZE":{"displayName":"escudo mozambicain","displayName-count-one":"escudo mozambicain","displayName-count-other":"escudos mozambicains","symbol":"MZE"},"MZM":{"displayName":"métical","displayName-count-one":"metical mozambicain (1980–2006)","displayName-count-other":"meticais mozambicains (1980–2006)","symbol":"MZM"},"MZN":{"displayName":"metical mozambicain","displayName-count-one":"metical mozambicain","displayName-count-other":"meticais mozambicains","symbol":"MZN"},"NAD":{"displayName":"dollar namibien","displayName-count-one":"dollar namibien","displayName-count-other":"dollars namibiens","symbol":"$NA","symbol-alt-narrow":"$"},"NGN":{"displayName":"naira nigérian","displayName-count-one":"naira nigérian","displayName-count-other":"nairas nigérians","symbol":"NGN","symbol-alt-narrow":"₦"},"NIC":{"displayName":"cordoba","displayName-count-one":"córdoba nicaraguayen (1912–1988)","displayName-count-other":"córdobas nicaraguayens (1912–1988)","symbol":"NIC"},"NIO":{"displayName":"córdoba oro nicaraguayen","displayName-count-one":"córdoba oro nicaraguayen","displayName-count-other":"córdobas oro nicaraguayens","symbol":"NIO","symbol-alt-narrow":"$C"},"NLG":{"displayName":"florin néerlandais","displayName-count-one":"florin néerlandais","displayName-count-other":"florins néerlandais","symbol":"NLG"},"NOK":{"displayName":"couronne norvégienne","displayName-count-one":"couronne norvégienne","displayName-count-other":"couronnes norvégiennes","symbol":"NOK","symbol-alt-narrow":"kr"},"NPR":{"displayName":"roupie népalaise","displayName-count-one":"roupie népalaise","displayName-count-other":"roupies népalaises","symbol":"NPR","symbol-alt-narrow":"Rs"},"NZD":{"displayName":"dollar néo-zélandais","displayName-count-one":"dollar néo-zélandais","displayName-count-other":"dollars néo-zélandais","symbol":"$NZ","symbol-alt-narrow":"$"},"OMR":{"displayName":"riyal omanais","displayName-count-one":"riyal omanais","displayName-count-other":"riyals omanis","symbol":"OMR"},"PAB":{"displayName":"balboa panaméen","displayName-count-one":"balboa panaméen","displayName-count-other":"balboas panaméens","symbol":"PAB"},"PEI":{"displayName":"inti péruvien","displayName-count-one":"inti péruvien","displayName-count-other":"intis péruviens","symbol":"PEI"},"PEN":{"displayName":"sol péruvien","displayName-count-one":"sol péruvien","displayName-count-other":"sols péruviens","symbol":"PEN"},"PES":{"displayName":"sol péruvien (1863–1985)","displayName-count-one":"sol péruvien (1863–1985)","displayName-count-other":"sols péruviens (1863–1985)","symbol":"PES"},"PGK":{"displayName":"kina papouan-néo-guinéen","displayName-count-one":"kina papouan-néo-guinéen","displayName-count-other":"kinas papouan-néo-guinéens","symbol":"PGK"},"PHP":{"displayName":"peso philippin","displayName-count-one":"peso philippin","displayName-count-other":"pesos philippins","symbol":"PHP","symbol-alt-narrow":"₱"},"PKR":{"displayName":"roupie pakistanaise","displayName-count-one":"roupie pakistanaise","displayName-count-other":"roupies pakistanaises","symbol":"PKR","symbol-alt-narrow":"Rs"},"PLN":{"displayName":"zloty polonais","displayName-count-one":"zloty polonais","displayName-count-other":"zlotys polonais","symbol":"PLN","symbol-alt-narrow":"zł"},"PLZ":{"displayName":"zloty (1950–1995)","displayName-count-one":"zloty polonais (1950–1995)","displayName-count-other":"zlotys polonais (1950–1995)","symbol":"PLZ"},"PTE":{"displayName":"escudo portugais","displayName-count-one":"escudo portugais","displayName-count-other":"escudos portugais","symbol":"PTE"},"PYG":{"displayName":"guaraní paraguayen","displayName-count-one":"guaraní paraguayen","displayName-count-other":"guaranís paraguayens","symbol":"PYG","symbol-alt-narrow":"₲"},"QAR":{"displayName":"riyal qatari","displayName-count-one":"riyal qatari","displayName-count-other":"riyals qataris","symbol":"QAR"},"RHD":{"displayName":"dollar rhodésien","displayName-count-one":"dollar rhodésien","displayName-count-other":"dollars rhodésiens","symbol":"$RH"},"ROL":{"displayName":"ancien leu roumain","displayName-count-one":"leu roumain (1952–2005)","displayName-count-other":"lei roumains (1952–2005)","symbol":"ROL"},"RON":{"displayName":"leu roumain","displayName-count-one":"leu roumain","displayName-count-other":"lei roumains","symbol":"RON","symbol-alt-narrow":"L"},"RSD":{"displayName":"dinar serbe","displayName-count-one":"dinar serbe","displayName-count-other":"dinars serbes","symbol":"RSD"},"RUB":{"displayName":"rouble russe","displayName-count-one":"rouble russe","displayName-count-other":"roubles russes","symbol":"RUB","symbol-alt-narrow":"₽"},"RUR":{"displayName":"rouble russe (1991–1998)","displayName-count-one":"rouble russe (1991–1998)","displayName-count-other":"roubles russes (1991–1998)","symbol":"RUR","symbol-alt-narrow":"р."},"RWF":{"displayName":"franc rwandais","displayName-count-one":"franc rwandais","displayName-count-other":"francs rwandais","symbol":"RWF","symbol-alt-narrow":"FR"},"SAR":{"displayName":"riyal saoudien","displayName-count-one":"riyal saoudien","displayName-count-other":"riyals saoudiens","symbol":"SAR"},"SBD":{"displayName":"dollar des îles Salomon","displayName-count-one":"dollar des îles Salomon","displayName-count-other":"dollars des îles Salomon","symbol":"$SB","symbol-alt-narrow":"$"},"SCR":{"displayName":"roupie des Seychelles","displayName-count-one":"roupie des Seychelles","displayName-count-other":"roupies des Seychelles","symbol":"SCR"},"SDD":{"displayName":"dinar soudanais","displayName-count-one":"dinar soudanais (1992–2007)","displayName-count-other":"dinars soudanais (1992–2007)","symbol":"SDD"},"SDG":{"displayName":"livre soudanaise","displayName-count-one":"livre soudanaise","displayName-count-other":"livres soudanaises","symbol":"SDG"},"SDP":{"displayName":"livre soudanaise (1956–2007)","displayName-count-one":"livre soudanaise (1956–2007)","displayName-count-other":"livres soudanaises (1956–2007)","symbol":"SDP"},"SEK":{"displayName":"couronne suédoise","displayName-count-one":"couronne suédoise","displayName-count-other":"couronnes suédoises","symbol":"SEK","symbol-alt-narrow":"kr"},"SGD":{"displayName":"dollar de Singapour","displayName-count-one":"dollar de Singapour","displayName-count-other":"dollars de Singapour","symbol":"$SG","symbol-alt-narrow":"$"},"SHP":{"displayName":"livre de Sainte-Hélène","displayName-count-one":"livre de Sainte-Hélène","displayName-count-other":"livres de Sainte-Hélène","symbol":"SHP","symbol-alt-narrow":"£"},"SIT":{"displayName":"tolar slovène","displayName-count-one":"tolar slovène","displayName-count-other":"tolars slovènes","symbol":"SIT"},"SKK":{"displayName":"couronne slovaque","displayName-count-one":"couronne slovaque","displayName-count-other":"couronnes slovaques","symbol":"SKK"},"SLL":{"displayName":"leone sierra-léonais","displayName-count-one":"leone sierra-léonais","displayName-count-other":"leones sierra-léonais","symbol":"SLL"},"SOS":{"displayName":"shilling somalien","displayName-count-one":"shilling somalien","displayName-count-other":"shillings somaliens","symbol":"SOS"},"SRD":{"displayName":"dollar surinamais","displayName-count-one":"dollar surinamais","displayName-count-other":"dollars surinamais","symbol":"$SR","symbol-alt-narrow":"$"},"SRG":{"displayName":"florin surinamais","displayName-count-one":"florin surinamais","displayName-count-other":"florins surinamais","symbol":"SRG"},"SSP":{"displayName":"livre sud-soudanaise","displayName-count-one":"livre sud-soudanaise","displayName-count-other":"livres sud-soudanaises","symbol":"SSP","symbol-alt-narrow":"£"},"STD":{"displayName":"dobra santoméen","displayName-count-one":"dobra santoméen","displayName-count-other":"dobras santoméens","symbol":"STD","symbol-alt-narrow":"Db"},"STN":{"displayName":"STN","symbol":"STN"},"SUR":{"displayName":"rouble soviétique","displayName-count-one":"rouble soviétique","displayName-count-other":"roubles soviétiques","symbol":"SUR"},"SVC":{"displayName":"colón salvadorien","displayName-count-one":"colón salvadorien","displayName-count-other":"colóns salvadoriens","symbol":"SVC"},"SYP":{"displayName":"livre syrienne","displayName-count-one":"livre syrienne","displayName-count-other":"livres syriennes","symbol":"SYP","symbol-alt-narrow":"£"},"SZL":{"displayName":"lilangeni swazi","displayName-count-one":"lilangeni swazi","displayName-count-other":"lilangenis swazis","symbol":"SZL"},"THB":{"displayName":"baht thaïlandais","displayName-count-one":"baht thaïlandais","displayName-count-other":"bahts thaïlandais","symbol":"THB","symbol-alt-narrow":"฿"},"TJR":{"displayName":"rouble tadjik","displayName-count-one":"rouble tadjik","displayName-count-other":"roubles tadjiks","symbol":"TJR"},"TJS":{"displayName":"somoni tadjik","displayName-count-one":"somoni tadjik","displayName-count-other":"somonis tadjiks","symbol":"TJS"},"TMM":{"displayName":"manat turkmène","displayName-count-one":"manat turkmène","displayName-count-other":"manats turkmènes","symbol":"TMM"},"TMT":{"displayName":"nouveau manat turkmène","displayName-count-one":"nouveau manat turkmène","displayName-count-other":"nouveaux manats turkmènes","symbol":"TMT"},"TND":{"displayName":"dinar tunisien","displayName-count-one":"dinar tunisien","displayName-count-other":"dinars tunisiens","symbol":"TND"},"TOP":{"displayName":"pa’anga tongan","displayName-count-one":"pa’anga tongan","displayName-count-other":"pa’angas tongans","symbol":"TOP","symbol-alt-narrow":"T$"},"TPE":{"displayName":"escudo timorais","displayName-count-one":"escudo timorais","displayName-count-other":"escudos timorais","symbol":"TPE"},"TRL":{"displayName":"livre turque (1844–2005)","displayName-count-one":"livre turque (1844–2005)","displayName-count-other":"livres turques (1844–2005)","symbol":"TRL"},"TRY":{"displayName":"livre turque","displayName-count-one":"livre turque","displayName-count-other":"livres turques","symbol":"TRY","symbol-alt-narrow":"₺","symbol-alt-variant":"LT"},"TTD":{"displayName":"dollar trinidadien","displayName-count-one":"dollar de Trinité-et-Tobago","displayName-count-other":"dollars de Trinité-et-Tobago","symbol":"$TT","symbol-alt-narrow":"$"},"TWD":{"displayName":"nouveau dollar taïwanais","displayName-count-one":"nouveau dollar taïwanais","displayName-count-other":"nouveaux dollars taïwanais","symbol":"TWD","symbol-alt-narrow":"NT$"},"TZS":{"displayName":"shilling tanzanien","displayName-count-one":"shilling tanzanien","displayName-count-other":"shillings tanzaniens","symbol":"TZS"},"UAH":{"displayName":"hryvnia ukrainienne","displayName-count-one":"hryvnia ukrainienne","displayName-count-other":"hryvnias ukrainiennes","symbol":"UAH","symbol-alt-narrow":"₴"},"UAK":{"displayName":"karbovanetz","displayName-count-one":"karbovanets ukrainien (1992–1996)","displayName-count-other":"karbovanets ukrainiens (1992–1996)","symbol":"UAK"},"UGS":{"displayName":"shilling ougandais (1966–1987)","displayName-count-one":"shilling ougandais (1966–1987)","displayName-count-other":"shillings ougandais (1966–1987)","symbol":"UGS"},"UGX":{"displayName":"shilling ougandais","displayName-count-one":"shilling ougandais","displayName-count-other":"shillings ougandais","symbol":"UGX"},"USD":{"displayName":"dollar des États-Unis","displayName-count-one":"dollar des États-Unis","displayName-count-other":"dollars des États-Unis","symbol":"$US","symbol-alt-narrow":"$"},"USN":{"displayName":"dollar des Etats-Unis (jour suivant)","displayName-count-one":"dollar des États-Unis (jour suivant)","displayName-count-other":"dollars des États-Unis (jour suivant)","symbol":"USN"},"USS":{"displayName":"dollar des Etats-Unis (jour même)","displayName-count-one":"dollar des États-Unis (jour même)","displayName-count-other":"dollars des États-Unis (jour même)","symbol":"USS"},"UYI":{"displayName":"peso uruguayen (unités indexées)","displayName-count-one":"peso uruguayen (unités indexées)","displayName-count-other":"pesos uruguayen (unités indexées)","symbol":"UYI"},"UYP":{"displayName":"peso uruguayen (1975–1993)","displayName-count-one":"peso uruguayen (1975–1993)","displayName-count-other":"pesos uruguayens (1975–1993)","symbol":"UYP"},"UYU":{"displayName":"peso uruguayen","displayName-count-one":"peso uruguayen","displayName-count-other":"pesos uruguayens","symbol":"$UY","symbol-alt-narrow":"$"},"UZS":{"displayName":"sum ouzbek","displayName-count-one":"sum ouzbek","displayName-count-other":"sums ouzbeks","symbol":"UZS"},"VEB":{"displayName":"bolivar vénézuélien (1871–2008)","displayName-count-one":"bolivar vénézuélien (1871–2008)","displayName-count-other":"bolivar vénézuélien (1871–2008)","symbol":"VEB"},"VEF":{"displayName":"bolivar vénézuélien","displayName-count-one":"bolivar vénézuélien","displayName-count-other":"bolivars vénézuéliens","symbol":"VEF","symbol-alt-narrow":"Bs"},"VND":{"displayName":"dông vietnamien","displayName-count-one":"dông vietnamien","displayName-count-other":"dôngs vietnamiens","symbol":"₫","symbol-alt-narrow":"₫"},"VNN":{"displayName":"VNN","symbol":"VNN"},"VUV":{"displayName":"vatu vanuatuan","displayName-count-one":"vatu vanuatuan","displayName-count-other":"vatus vanuatuans","symbol":"VUV"},"WST":{"displayName":"tala samoan","displayName-count-one":"tala samoan","displayName-count-other":"talas samoans","symbol":"WS$"},"XAF":{"displayName":"franc CFA (BEAC)","displayName-count-one":"franc CFA (BEAC)","displayName-count-other":"francs CFA (BEAC)","symbol":"FCFA"},"XAG":{"displayName":"argent","displayName-count-one":"once troy d’argent","displayName-count-other":"onces troy d’argent","symbol":"XAG"},"XAU":{"displayName":"or","displayName-count-one":"once troy d’or","displayName-count-other":"onces troy d’or","symbol":"XAU"},"XBA":{"displayName":"unité européenne composée","displayName-count-one":"unité composée européenne (EURCO)","displayName-count-other":"unités composées européennes (EURCO)","symbol":"XBA"},"XBB":{"displayName":"unité monétaire européenne","displayName-count-one":"unité monétaire européenne (UME–6)","displayName-count-other":"unités monétaires européennes (UME–6)","symbol":"XBB"},"XBC":{"displayName":"unité de compte européenne (XBC)","displayName-count-one":"unité de compte 9 européenne (UEC–9)","displayName-count-other":"unités de compte 9 européennes (UEC–9)","symbol":"XBC"},"XBD":{"displayName":"unité de compte européenne (XBD)","displayName-count-one":"unité de compte 17 européenne (UEC–17)","displayName-count-other":"unités de compte 17 européennes (UEC–17)","symbol":"XBD"},"XCD":{"displayName":"dollar des Caraïbes orientales","displayName-count-one":"dollar des Caraïbes orientales","displayName-count-other":"dollars des Caraïbes orientales","symbol":"XCD","symbol-alt-narrow":"$"},"XDR":{"displayName":"droit de tirage spécial","displayName-count-one":"droit de tirage spécial","displayName-count-other":"droits de tirage spéciaux","symbol":"XDR"},"XEU":{"displayName":"unité de compte européenne (ECU)","symbol":"XEU"},"XFO":{"displayName":"franc or","displayName-count-one":"franc or","displayName-count-other":"francs or","symbol":"XFO"},"XFU":{"displayName":"franc UIC","displayName-count-one":"franc UIC","displayName-count-other":"francs UIC","symbol":"XFU"},"XOF":{"displayName":"franc CFA (BCEAO)","displayName-count-one":"franc CFA (BCEAO)","displayName-count-other":"francs CFA (BCEAO)","symbol":"CFA"},"XPD":{"displayName":"palladium","displayName-count-one":"once troy de palladium","displayName-count-other":"onces troy de palladium","symbol":"XPD"},"XPF":{"displayName":"franc CFP","displayName-count-one":"franc CFP","displayName-count-other":"francs CFP","symbol":"FCFP"},"XPT":{"displayName":"platine","displayName-count-one":"once troy de platine","displayName-count-other":"onces troy de platine","symbol":"XPT"},"XRE":{"displayName":"type de fonds RINET","displayName-count-one":"unité de fonds RINET","displayName-count-other":"unités de fonds RINET","symbol":"XRE"},"XSU":{"displayName":"XSU","symbol":"XSU"},"XTS":{"displayName":"(devise de test)","displayName-count-one":"(devise de test)","displayName-count-other":"(devises de test)","symbol":"XTS"},"XUA":{"displayName":"XUA","symbol":"XUA"},"XXX":{"displayName":"devise inconnue ou non valide","displayName-count-one":"devise inconnue","displayName-count-other":"devises inconnues","symbol":"XXX"},"YDD":{"displayName":"dinar du Yémen","displayName-count-one":"dinar nord-yéménite","displayName-count-other":"dinars nord-yéménites","symbol":"YDD"},"YER":{"displayName":"riyal yéménite","displayName-count-one":"riyal yéménite","displayName-count-other":"riyals yéménites","symbol":"YER"},"YUD":{"displayName":"nouveau dinar yougoslave","displayName-count-one":"dinar fort yougoslave (1966–1989)","displayName-count-other":"dinars forts yougoslaves (1966–1989)","symbol":"YUD"},"YUM":{"displayName":"dinar yougoslave Noviy","displayName-count-one":"nouveau dinar yougoslave (1994–2003)","displayName-count-other":"nouveaux dinars yougoslaves (1994–2003)","symbol":"YUM"},"YUN":{"displayName":"dinar yougoslave convertible","displayName-count-one":"dinar convertible yougoslave (1990–1992)","displayName-count-other":"dinars convertibles yougoslaves (1990–1992)","symbol":"YUN"},"YUR":{"displayName":"YUR","symbol":"YUR"},"ZAL":{"displayName":"rand sud-africain (financier)","displayName-count-one":"rand sud-africain (financier)","displayName-count-other":"rands sud-africains (financiers)","symbol":"ZAL"},"ZAR":{"displayName":"rand sud-africain","displayName-count-one":"rand sud-africain","displayName-count-other":"rands sud-africains","symbol":"ZAR","symbol-alt-narrow":"R"},"ZMK":{"displayName":"kwacha zambien (1968–2012)","displayName-count-one":"kwacha zambien (1968–2012)","displayName-count-other":"kwachas zambiens (1968–2012)","symbol":"ZMK"},"ZMW":{"displayName":"kwacha zambien","displayName-count-one":"kwacha zambien","displayName-count-other":"kwachas zambiens","symbol":"ZMW","symbol-alt-narrow":"Kw"},"ZRN":{"displayName":"nouveau zaïre zaïrien","displayName-count-one":"nouveau zaïre zaïrien","displayName-count-other":"nouveaux zaïres zaïriens","symbol":"ZRN"},"ZRZ":{"displayName":"zaïre zaïrois","displayName-count-one":"zaïre zaïrois","displayName-count-other":"zaïres zaïrois","symbol":"ZRZ"},"ZWD":{"displayName":"dollar zimbabwéen","displayName-count-one":"dollar zimbabwéen","displayName-count-other":"dollars zimbabwéens","symbol":"ZWD"},"ZWL":{"displayName":"dollar zimbabwéen (2009)","displayName-count-one":"dollar zimbabwéen (2009)","displayName-count-other":"dollars zimbabwéens (2009)","symbol":"ZWL"},"ZWR":{"displayName":"dollar zimbabwéen (2008)","displayName-count-one":"dollar zimbabwéen (2008)","displayName-count-other":"dollars zimbabwéens (2008)","symbol":"ZWR"}},"defaultNumberingSystem":"latn","otherNumberingSystems":{"native":"latn"},"minimumGroupingDigits":"1","symbols-numberSystem-latn":{"decimal":",","group":" ","list":";","percentSign":"%","plusSign":"+","minusSign":"-","exponential":"E","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"NaN","timeSeparator":":"},"decimalFormats-numberSystem-latn":{"standard":"#,##0.###","long":{"decimalFormat":{"1000-count-one":"0 millier","1000-count-other":"0 mille","10000-count-one":"00 mille","10000-count-other":"00 mille","100000-count-one":"000 mille","100000-count-other":"000 mille","1000000-count-one":"0 million","1000000-count-other":"0 millions","10000000-count-one":"00 million","10000000-count-other":"00 millions","100000000-count-one":"000 million","100000000-count-other":"000 millions","1000000000-count-one":"0 milliard","1000000000-count-other":"0 milliards","10000000000-count-one":"00 milliard","10000000000-count-other":"00 milliards","100000000000-count-one":"000 milliard","100000000000-count-other":"000 milliards","1000000000000-count-one":"0 billion","1000000000000-count-other":"0 billions","10000000000000-count-one":"00 billion","10000000000000-count-other":"00 billions","100000000000000-count-one":"000 billion","100000000000000-count-other":"000 billions"}},"short":{"decimalFormat":{"1000-count-one":"0 k","1000-count-other":"0 k","10000-count-one":"00 k","10000-count-other":"00 k","100000-count-one":"000 k","100000-count-other":"000 k","1000000-count-one":"0 M","1000000-count-other":"0 M","10000000-count-one":"00 M","10000000-count-other":"00 M","100000000-count-one":"000 M","100000000-count-other":"000 M","1000000000-count-one":"0 Md","1000000000-count-other":"0 Md","10000000000-count-one":"00 Md","10000000000-count-other":"00 Md","100000000000-count-one":"000 Md","100000000000-count-other":"000 Md","1000000000000-count-one":"0 Bn","1000000000000-count-other":"0 Bn","10000000000000-count-one":"00 Bn","10000000000000-count-other":"00 Bn","100000000000000-count-one":"000 Bn","100000000000000-count-other":"000 Bn"}}},"scientificFormats-numberSystem-latn":{"standard":"#E0"},"percentFormats-numberSystem-latn":{"standard":"#,##0 %"},"currencyFormats-numberSystem-latn":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"#,##0.00 ¤","accounting":"#,##0.00 ¤;(#,##0.00 ¤)","short":{"standard":{"1000-count-one":"0 k ¤","1000-count-other":"0 k ¤","10000-count-one":"00 k ¤","10000-count-other":"00 k ¤","100000-count-one":"000 k ¤","100000-count-other":"000 k ¤","1000000-count-one":"0 M ¤","1000000-count-other":"0 M ¤","10000000-count-one":"00 M ¤","10000000-count-other":"00 M ¤","100000000-count-one":"000 M ¤","100000000-count-other":"000 M ¤","1000000000-count-one":"0 Md ¤","1000000000-count-other":"0 Md ¤","10000000000-count-one":"00 Md ¤","10000000000-count-other":"00 Md ¤","100000000000-count-one":"000 Md ¤","100000000000-count-other":"000 Md ¤","1000000000000-count-one":"0 Bn ¤","1000000000000-count-other":"0 Bn ¤","10000000000000-count-one":"00 Bn ¤","10000000000000-count-other":"00 Bn ¤","100000000000000-count-one":"000 Bn ¤","100000000000000-count-other":"000 Bn ¤"}},"unitPattern-count-one":"{0} {1}","unitPattern-count-other":"{0} {1}"},"miscPatterns-numberSystem-latn":{"atLeast":"⩾{0}","range":"{0}–{1}"},"minimalPairs":{"pluralMinimalPairs-count-one":"{0} jour","pluralMinimalPairs-count-other":"{0} jours","one":"Prenez la {0}re à droite.","other":"Prenez la {0}e à droite."}}},"it":{"identity":{"version":{"_number":"$Revision: 13701 $","_cldrVersion":"32"},"language":"it"},"dates":{"calendars":{"gregorian":{"months":{"format":{"abbreviated":{"1":"gen","2":"feb","3":"mar","4":"apr","5":"mag","6":"giu","7":"lug","8":"ago","9":"set","10":"ott","11":"nov","12":"dic"},"narrow":{"1":"G","2":"F","3":"M","4":"A","5":"M","6":"G","7":"L","8":"A","9":"S","10":"O","11":"N","12":"D"},"wide":{"1":"gennaio","2":"febbraio","3":"marzo","4":"aprile","5":"maggio","6":"giugno","7":"luglio","8":"agosto","9":"settembre","10":"ottobre","11":"novembre","12":"dicembre"}},"stand-alone":{"abbreviated":{"1":"gen","2":"feb","3":"mar","4":"apr","5":"mag","6":"giu","7":"lug","8":"ago","9":"set","10":"ott","11":"nov","12":"dic"},"narrow":{"1":"G","2":"F","3":"M","4":"A","5":"M","6":"G","7":"L","8":"A","9":"S","10":"O","11":"N","12":"D"},"wide":{"1":"gennaio","2":"febbraio","3":"marzo","4":"aprile","5":"maggio","6":"giugno","7":"luglio","8":"agosto","9":"settembre","10":"ottobre","11":"novembre","12":"dicembre"}}},"days":{"format":{"abbreviated":{"sun":"dom","mon":"lun","tue":"mar","wed":"mer","thu":"gio","fri":"ven","sat":"sab"},"narrow":{"sun":"D","mon":"L","tue":"M","wed":"M","thu":"G","fri":"V","sat":"S"},"short":{"sun":"dom","mon":"lun","tue":"mar","wed":"mer","thu":"gio","fri":"ven","sat":"sab"},"wide":{"sun":"domenica","mon":"lunedì","tue":"martedì","wed":"mercoledì","thu":"giovedì","fri":"venerdì","sat":"sabato"}},"stand-alone":{"abbreviated":{"sun":"dom","mon":"lun","tue":"mar","wed":"mer","thu":"gio","fri":"ven","sat":"sab"},"narrow":{"sun":"D","mon":"L","tue":"M","wed":"M","thu":"G","fri":"V","sat":"S"},"short":{"sun":"dom","mon":"lun","tue":"mar","wed":"mer","thu":"gio","fri":"ven","sat":"sab"},"wide":{"sun":"domenica","mon":"lunedì","tue":"martedì","wed":"mercoledì","thu":"giovedì","fri":"venerdì","sat":"sabato"}}},"quarters":{"format":{"abbreviated":{"1":"T1","2":"T2","3":"T3","4":"T4"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"1º trimestre","2":"2º trimestre","3":"3º trimestre","4":"4º trimestre"}},"stand-alone":{"abbreviated":{"1":"T1","2":"T2","3":"T3","4":"T4"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"1º trimestre","2":"2º trimestre","3":"3º trimestre","4":"4º trimestre"}}},"dayPeriods":{"format":{"abbreviated":{"midnight":"mezzanotte","am":"AM","noon":"mezzogiorno","pm":"PM","morning1":"di mattina","afternoon1":"del pomeriggio","evening1":"di sera","night1":"di notte"},"narrow":{"midnight":"mezzanotte","am":"m.","noon":"mezzogiorno","pm":"p.","morning1":"di mattina","afternoon1":"del pomeriggio","evening1":"di sera","night1":"di notte"},"wide":{"midnight":"mezzanotte","am":"AM","noon":"mezzogiorno","pm":"PM","morning1":"di mattina","afternoon1":"del pomeriggio","evening1":"di sera","night1":"di notte"}},"stand-alone":{"abbreviated":{"midnight":"mezzanotte","am":"AM","noon":"mezzogiorno","pm":"PM","morning1":"mattina","afternoon1":"pomeriggio","evening1":"sera","night1":"notte"},"narrow":{"midnight":"mezzanotte","am":"m.","noon":"mezzogiorno","pm":"p.","morning1":"mattina","afternoon1":"pomeriggio","evening1":"sera","night1":"notte"},"wide":{"midnight":"mezzanotte","am":"AM","noon":"mezzogiorno","pm":"PM","morning1":"mattina","afternoon1":"pomeriggio","evening1":"sera","night1":"notte"}}},"eras":{"eraNames":{"0":"avanti Cristo","1":"dopo Cristo","0-alt-variant":"avanti Era Volgare","1-alt-variant":"Era Volgare"},"eraAbbr":{"0":"a.C.","1":"d.C.","0-alt-variant":"a.E.V.","1-alt-variant":"E.V."},"eraNarrow":{"0":"aC","1":"dC","0-alt-variant":"BCE","1-alt-variant":"CE"}},"dateFormats":{"full":"EEEE d MMMM y","long":"d MMMM y","medium":"d MMM y","short":"dd/MM/yy"},"timeFormats":{"full":"HH:mm:ss zzzz","long":"HH:mm:ss z","medium":"HH:mm:ss","short":"HH:mm"},"dateTimeFormats":{"full":"{1} {0}","long":"{1} {0}","medium":"{1}, {0}","short":"{1}, {0}","availableFormats":{"Bh":"h B","Bhm":"h:mm B","Bhms":"h:mm:ss B","d":"d","E":"ccc","EBhm":"E h:mm B","EBhms":"E h:mm:ss B","Ed":"E d","Ehm":"E h:mm a","EHm":"E HH:mm","Ehms":"E h:mm:ss a","EHms":"E HH:mm:ss","Gy":"y G","GyMMM":"MMM y G","GyMMMd":"d MMM y G","GyMMMEd":"E d MMM y G","h":"h a","H":"HH","hm":"h:mm a","Hm":"HH:mm","hms":"h:mm:ss a","Hms":"HH:mm:ss","hmsv":"h:mm:ss a v","Hmsv":"HH:mm:ss v","hmv":"h:mm a v","Hmv":"HH:mm v","M":"L","Md":"d/M","MEd":"E d/M","MMM":"LLL","MMMd":"d MMM","MMMEd":"E d MMM","MMMMd":"d MMMM","MMMMW-count-one":"'settimana' W 'di' MMM","MMMMW-count-other":"'settimana' W 'di' MMM","ms":"mm:ss","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"E d/M/y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"E d MMM y","yMMMM":"MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","yw-count-one":"'settimana' w 'del' Y","yw-count-other":"'settimana' w 'del' Y"},"appendItems":{"Day":"{0} ({2}: {1})","Day-Of-Week":"{0} {1}","Era":"{1} {0}","Hour":"{0} ({2}: {1})","Minute":"{0} ({2}: {1})","Month":"{0} ({2}: {1})","Quarter":"{0} ({2}: {1})","Second":"{0} ({2}: {1})","Timezone":"{0} {1}","Week":"{0} ({2}: {1})","Year":"{1} {0}"},"intervalFormats":{"intervalFormatFallback":"{0} - {1}","d":{"d":"d–d"},"h":{"a":"h a – h a","h":"h–h a"},"H":{"H":"HH–HH"},"hm":{"a":"h:mm a – h:mm a","h":"h:mm–h:mm a","m":"h:mm–h:mm a"},"Hm":{"H":"HH:mm–HH:mm","m":"HH:mm–HH:mm"},"hmv":{"a":"h:mm a – h:mm a v","h":"h:mm–h:mm a v","m":"h:mm–h:mm a v"},"Hmv":{"H":"HH:mm–HH:mm v","m":"HH:mm–HH:mm v"},"hv":{"a":"h a – h a v","h":"h–h a v"},"Hv":{"H":"HH–HH v"},"M":{"M":"M–M"},"Md":{"d":"dd/MM – dd/MM","M":"dd/MM – dd/MM"},"MEd":{"d":"E dd/MM – E dd/MM","M":"E dd/MM – E dd/MM"},"MMM":{"M":"MMM–MMM"},"MMMd":{"d":"dd–dd MMM","M":"dd MMM – dd MMM"},"MMMEd":{"d":"E dd – E dd MMM","M":"E dd MMM – E dd MMM"},"y":{"y":"y–y"},"yM":{"M":"MM/y – MM/y","y":"MM/y – MM/y"},"yMd":{"d":"dd/MM/y – dd/MM/y","M":"dd/MM/y – dd/MM/y","y":"dd/MM/y – dd/MM/y"},"yMEd":{"d":"E dd/MM/y – E dd/MM/y","M":"E dd/MM/y – E dd/MM/y","y":"E dd/MM/y – E dd/MM/y"},"yMMM":{"M":"MMM–MMM y","y":"MMM y – MMM y"},"yMMMd":{"d":"dd–dd MMM y","M":"dd MMM – dd MMM y","y":"dd MMM y – dd MMM y"},"yMMMEd":{"d":"E d – E d MMM y","M":"E d MMM – E d MMM y","y":"E d MMM y – E d MMM y"},"yMMMM":{"M":"MMMM–MMMM y","y":"MMMM y – MMMM y"}}}}},"fields":{"era":{"displayName":"era"},"era-short":{"displayName":"era"},"era-narrow":{"displayName":"era"},"year":{"displayName":"anno","relative-type--1":"anno scorso","relative-type-0":"quest’anno","relative-type-1":"anno prossimo","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} anno","relativeTimePattern-count-other":"tra {0} anni"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} anno fa","relativeTimePattern-count-other":"{0} anni fa"}},"year-short":{"displayName":"anno","relative-type--1":"anno scorso","relative-type-0":"quest’anno","relative-type-1":"anno prossimo","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} anno","relativeTimePattern-count-other":"tra {0} anni"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} anno fa","relativeTimePattern-count-other":"{0} anni fa"}},"year-narrow":{"displayName":"anno","relative-type--1":"anno scorso","relative-type-0":"quest’anno","relative-type-1":"anno prossimo","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} anno","relativeTimePattern-count-other":"tra {0} anni"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} anno fa","relativeTimePattern-count-other":"{0} anni fa"}},"quarter":{"displayName":"trimestre","relative-type--1":"trimestre scorso","relative-type-0":"questo trimestre","relative-type-1":"trimestre prossimo","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} trimestre","relativeTimePattern-count-other":"tra {0} trimestri"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} trimestre fa","relativeTimePattern-count-other":"{0} trimestri fa"}},"quarter-short":{"displayName":"trim.","relative-type--1":"trimestre scorso","relative-type-0":"questo trimestre","relative-type-1":"trimestre prossimo","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} trim.","relativeTimePattern-count-other":"tra {0} trim."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} trim. fa","relativeTimePattern-count-other":"{0} trim. fa"}},"quarter-narrow":{"displayName":"trim.","relative-type--1":"trimestre scorso","relative-type-0":"questo trimestre","relative-type-1":"trimestre prossimo","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} trim.","relativeTimePattern-count-other":"tra {0} trim."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} trim. fa","relativeTimePattern-count-other":"{0} trim. fa"}},"month":{"displayName":"mese","relative-type--1":"mese scorso","relative-type-0":"questo mese","relative-type-1":"mese prossimo","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} mese","relativeTimePattern-count-other":"tra {0} mesi"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} mese fa","relativeTimePattern-count-other":"{0} mesi fa"}},"month-short":{"displayName":"mese","relative-type--1":"mese scorso","relative-type-0":"questo mese","relative-type-1":"mese prossimo","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} mese","relativeTimePattern-count-other":"tra {0} mesi"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} mese fa","relativeTimePattern-count-other":"{0} mesi fa"}},"month-narrow":{"displayName":"mese","relative-type--1":"mese scorso","relative-type-0":"questo mese","relative-type-1":"mese prossimo","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} mese","relativeTimePattern-count-other":"tra {0} mesi"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} mese fa","relativeTimePattern-count-other":"{0} mesi fa"}},"week":{"displayName":"settimana","relative-type--1":"settimana scorsa","relative-type-0":"questa settimana","relative-type-1":"settimana prossima","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} settimana","relativeTimePattern-count-other":"tra {0} settimane"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} settimana fa","relativeTimePattern-count-other":"{0} settimane fa"},"relativePeriod":"la settimana del {0}"},"week-short":{"displayName":"sett.","relative-type--1":"settimana scorsa","relative-type-0":"questa settimana","relative-type-1":"settimana prossima","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} sett.","relativeTimePattern-count-other":"tra {0} sett."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} sett. fa","relativeTimePattern-count-other":"{0} sett. fa"},"relativePeriod":"la settimana del {0}"},"week-narrow":{"displayName":"sett.","relative-type--1":"settimana scorsa","relative-type-0":"questa settimana","relative-type-1":"settimana prossima","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} sett.","relativeTimePattern-count-other":"tra {0} sett."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} sett. fa","relativeTimePattern-count-other":"{0} sett. fa"},"relativePeriod":"la settimana del {0}"},"weekOfMonth":{"displayName":"settimana del mese"},"weekOfMonth-short":{"displayName":"sett. mese"},"weekOfMonth-narrow":{"displayName":"sett. mese"},"day":{"displayName":"giorno","relative-type--2":"l’altro ieri","relative-type--1":"ieri","relative-type-0":"oggi","relative-type-1":"domani","relative-type-2":"dopodomani","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} giorno","relativeTimePattern-count-other":"tra {0} giorni"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} giorno fa","relativeTimePattern-count-other":"{0} giorni fa"}},"day-short":{"displayName":"g","relative-type--2":"l’altro ieri","relative-type--1":"ieri","relative-type-0":"oggi","relative-type-1":"domani","relative-type-2":"dopodomani","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} g","relativeTimePattern-count-other":"tra {0} gg"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} g fa","relativeTimePattern-count-other":"{0} gg fa"}},"day-narrow":{"displayName":"g","relative-type--2":"l’altro ieri","relative-type--1":"ieri","relative-type-0":"oggi","relative-type-1":"domani","relative-type-2":"dopodomani","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} g","relativeTimePattern-count-other":"tra {0} gg"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} g fa","relativeTimePattern-count-other":"{0} gg fa"}},"dayOfYear":{"displayName":"giorno dell’anno"},"dayOfYear-short":{"displayName":"giorno anno"},"dayOfYear-narrow":{"displayName":"giorno anno"},"weekday":{"displayName":"giorno della settimana"},"weekday-short":{"displayName":"giorno settimana"},"weekday-narrow":{"displayName":"giorno sett."},"weekdayOfMonth":{"displayName":"giorno del mese"},"weekdayOfMonth-short":{"displayName":"giorno mese"},"weekdayOfMonth-narrow":{"displayName":"giorno mese"},"sun":{"relative-type--1":"domenica scorsa","relative-type-0":"questa domenica","relative-type-1":"domenica prossima","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} domenica","relativeTimePattern-count-other":"tra {0} domeniche"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} domenica fa","relativeTimePattern-count-other":"{0} domeniche fa"}},"sun-short":{"relative-type--1":"dom. scorsa","relative-type-0":"questa dom.","relative-type-1":"dom. prossima","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} dom.","relativeTimePattern-count-other":"tra {0} dom."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} dom. fa","relativeTimePattern-count-other":"{0} dom. fa"}},"sun-narrow":{"relative-type--1":"dom. scorsa","relative-type-0":"questa dom.","relative-type-1":"dom. prossima","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} dom.","relativeTimePattern-count-other":"tra {0} dom."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} dom. fa","relativeTimePattern-count-other":"{0} dom. fa"}},"mon":{"relative-type--1":"lunedì scorso","relative-type-0":"questo lunedì","relative-type-1":"lunedì prossimo","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} lunedì","relativeTimePattern-count-other":"tra {0} lunedì"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} lunedì fa","relativeTimePattern-count-other":"{0} lunedì fa"}},"mon-short":{"relative-type--1":"lun. scorso","relative-type-0":"questo lun.","relative-type-1":"lun. prossimo","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} lun.","relativeTimePattern-count-other":"tra {0} lun."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} lun. fa","relativeTimePattern-count-other":"{0} lun. fa"}},"mon-narrow":{"relative-type--1":"lun. scorso","relative-type-0":"questo lun.","relative-type-1":"lun. prossimo","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} lun.","relativeTimePattern-count-other":"tra {0} lun."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} lun. fa","relativeTimePattern-count-other":"{0} lun. fa"}},"tue":{"relative-type--1":"martedì scorso","relative-type-0":"questo martedì","relative-type-1":"martedì prossimo","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} martedì","relativeTimePattern-count-other":"tra {0} martedì"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} martedì fa","relativeTimePattern-count-other":"{0} martedì fa"}},"tue-short":{"relative-type--1":"mar. scorso","relative-type-0":"questo mar.","relative-type-1":"mar. prossimo","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} mar.","relativeTimePattern-count-other":"tra {0} mar."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} mar. fa","relativeTimePattern-count-other":"{0} mar. fa"}},"tue-narrow":{"relative-type--1":"mar. scorso","relative-type-0":"questo mar.","relative-type-1":"mar. prossimo","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} mar.","relativeTimePattern-count-other":"tra {0} mar."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} mar. fa","relativeTimePattern-count-other":"{0} mar. fa"}},"wed":{"relative-type--1":"mercoledì scorso","relative-type-0":"questo mercoledì","relative-type-1":"mercoledì prossimo","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} mercoledì","relativeTimePattern-count-other":"tra {0} mercoledì"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} mercoledì fa","relativeTimePattern-count-other":"{0} mercoledì fa"}},"wed-short":{"relative-type--1":"mer. scorso","relative-type-0":"questo mer.","relative-type-1":"mer. prossimo","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} mer.","relativeTimePattern-count-other":"tra {0} mer."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} mer. fa","relativeTimePattern-count-other":"{0} mer. fa"}},"wed-narrow":{"relative-type--1":"mer. scorso","relative-type-0":"questo mer.","relative-type-1":"mer. prossimo","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} mer.","relativeTimePattern-count-other":"tra {0} mer."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} mer. fa","relativeTimePattern-count-other":"{0} mer. fa"}},"thu":{"relative-type--1":"giovedì scorso","relative-type-0":"questo giovedì","relative-type-1":"giovedì prossimo","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} giovedì","relativeTimePattern-count-other":"tra {0} giovedì"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} giovedì fa","relativeTimePattern-count-other":"{0} giovedì fa"}},"thu-short":{"relative-type--1":"gio. scorso","relative-type-0":"questo gio.","relative-type-1":"gio. prossimo","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} gio.","relativeTimePattern-count-other":"tra {0} gio."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} gio. fa","relativeTimePattern-count-other":"{0} gio. fa"}},"thu-narrow":{"relative-type--1":"gio. scorso","relative-type-0":"questo gio.","relative-type-1":"gio. prossimo","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} gio.","relativeTimePattern-count-other":"tra {0} gio."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} gio. fa","relativeTimePattern-count-other":"{0} gio. fa"}},"fri":{"relative-type--1":"venerdì scorso","relative-type-0":"questo venerdì","relative-type-1":"venerdì prossimo","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} venerdì","relativeTimePattern-count-other":"tra {0} venerdì"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} venerdì fa","relativeTimePattern-count-other":"{0} venerdì fa"}},"fri-short":{"relative-type--1":"ven. scorso","relative-type-0":"questo ven.","relative-type-1":"ven. prossimo","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} ven.","relativeTimePattern-count-other":"tra {0} ven."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ven. fa","relativeTimePattern-count-other":"{0} ven. fa"}},"fri-narrow":{"relative-type--1":"ven. scorso","relative-type-0":"questo ven.","relative-type-1":"ven. prossimo","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} ven.","relativeTimePattern-count-other":"tra {0} ven."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ven. fa","relativeTimePattern-count-other":"{0} ven. fa"}},"sat":{"relative-type--1":"sabato scorso","relative-type-0":"questo sabato","relative-type-1":"sabato prossimo","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} sabato","relativeTimePattern-count-other":"tra {0} sabati"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} sabato fa","relativeTimePattern-count-other":"{0} sabati fa"}},"sat-short":{"relative-type--1":"sab. scorso","relative-type-0":"questo sab.","relative-type-1":"sab. prossimo","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} sab.","relativeTimePattern-count-other":"tra {0} sab."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} sab. fa","relativeTimePattern-count-other":"{0} sab. fa"}},"sat-narrow":{"relative-type--1":"sab. scorso","relative-type-0":"questo sab.","relative-type-1":"sab. prossimo","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} sab.","relativeTimePattern-count-other":"tra {0} sab."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} sab. fa","relativeTimePattern-count-other":"{0} sab. fa"}},"dayperiod-short":{"displayName":"AM/PM"},"dayperiod":{"displayName":"AM/PM"},"dayperiod-narrow":{"displayName":"AM/PM"},"hour":{"displayName":"ora","relative-type-0":"quest’ora","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} ora","relativeTimePattern-count-other":"tra {0} ore"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ora fa","relativeTimePattern-count-other":"{0} ore fa"}},"hour-short":{"displayName":"h.","relative-type-0":"quest’ora","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} h","relativeTimePattern-count-other":"tra {0} h"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} h fa","relativeTimePattern-count-other":"{0} h fa"}},"hour-narrow":{"displayName":"h","relative-type-0":"quest’ora","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} h","relativeTimePattern-count-other":"tra {0} h"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} h fa","relativeTimePattern-count-other":"{0} h fa"}},"minute":{"displayName":"minuto","relative-type-0":"questo minuto","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} minuto","relativeTimePattern-count-other":"tra {0} minuti"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} minuto fa","relativeTimePattern-count-other":"{0} minuti fa"}},"minute-short":{"displayName":"min","relative-type-0":"questo minuto","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} min","relativeTimePattern-count-other":"tra {0} min"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} min fa","relativeTimePattern-count-other":"{0} min fa"}},"minute-narrow":{"displayName":"min","relative-type-0":"questo minuto","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} min","relativeTimePattern-count-other":"tra {0} min"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} min fa","relativeTimePattern-count-other":"{0} min fa"}},"second":{"displayName":"secondo","relative-type-0":"ora","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} secondo","relativeTimePattern-count-other":"tra {0} secondi"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} secondo fa","relativeTimePattern-count-other":"{0} secondi fa"}},"second-short":{"displayName":"s","relative-type-0":"ora","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} s","relativeTimePattern-count-other":"tra {0} sec."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} s fa","relativeTimePattern-count-other":"{0} sec. fa"}},"second-narrow":{"displayName":"s","relative-type-0":"ora","relativeTime-type-future":{"relativeTimePattern-count-one":"tra {0} s","relativeTimePattern-count-other":"tra {0} s"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} s fa","relativeTimePattern-count-other":"{0} s fa"}},"zone":{"displayName":"fuso orario"},"zone-short":{"displayName":"fuso"},"zone-narrow":{"displayName":"fuso"}}},"numbers":{"currencies":{"ADP":{"displayName":"peseta andorrana","symbol":"ADP"},"AED":{"displayName":"dirham degli Emirati Arabi Uniti","displayName-count-one":"dirham degli EAU","displayName-count-other":"dirham degli EAU","symbol":"AED"},"AFA":{"displayName":"afgani (1927–2002)","symbol":"AFA"},"AFN":{"displayName":"afghani","displayName-count-one":"afghani","displayName-count-other":"afghani","symbol":"AFN"},"ALK":{"displayName":"ALK","symbol":"ALK"},"ALL":{"displayName":"lek albanese","displayName-count-one":"lek albanese","displayName-count-other":"lekë albanesi","symbol":"ALL"},"AMD":{"displayName":"dram armeno","displayName-count-one":"dram armeno","displayName-count-other":"dram armeni","symbol":"AMD"},"ANG":{"displayName":"fiorino delle Antille olandesi","displayName-count-one":"fiorino delle Antille olandesi","displayName-count-other":"fiorino delle Antille olandesi","symbol":"ANG"},"AOA":{"displayName":"kwanza angolano","displayName-count-one":"kwanza angolano","displayName-count-other":"kwanzas angolani","symbol":"AOA","symbol-alt-narrow":"Kz"},"AOK":{"displayName":"kwanza angolano (1977–1990)","symbol":"AOK"},"AON":{"displayName":"nuovo kwanza angolano (1990–2000)","symbol":"AON"},"AOR":{"displayName":"kwanza reajustado angolano (1995–1999)","symbol":"AOR"},"ARA":{"displayName":"austral argentino","symbol":"ARA"},"ARL":{"displayName":"ARL","symbol":"ARL"},"ARM":{"displayName":"ARM","symbol":"ARM"},"ARP":{"displayName":"peso argentino (vecchio Cod.)","symbol":"ARP"},"ARS":{"displayName":"peso argentino","displayName-count-one":"peso argentino","displayName-count-other":"pesos argentini","symbol":"ARS","symbol-alt-narrow":"$"},"ATS":{"displayName":"scellino austriaco","symbol":"ATS"},"AUD":{"displayName":"dollaro australiano","displayName-count-one":"dollaro australiano","displayName-count-other":"dollari australiani","symbol":"A$","symbol-alt-narrow":"$"},"AWG":{"displayName":"fiorino di Aruba","displayName-count-one":"fiorino di Aruba","displayName-count-other":"fiorini di Aruba","symbol":"AWG"},"AZM":{"displayName":"manat azero (1993–2006)","symbol":"AZM"},"AZN":{"displayName":"manat azero","displayName-count-one":"manat azero","displayName-count-other":"manat azeri","symbol":"AZN"},"BAD":{"displayName":"dinar Bosnia-Herzegovina","symbol":"BAD"},"BAM":{"displayName":"marco convertibile della Bosnia-Herzegovina","displayName-count-one":"marco convertibile della Bosnia-Herzegovina","displayName-count-other":"marchi convertibili della Bosnia-Herzegovina","symbol":"BAM","symbol-alt-narrow":"KM"},"BAN":{"displayName":"BAN","symbol":"BAN"},"BBD":{"displayName":"dollaro di Barbados","displayName-count-one":"dollaro di Barbados","displayName-count-other":"dollari di Barbados","symbol":"BBD","symbol-alt-narrow":"$"},"BDT":{"displayName":"taka bangladese","displayName-count-one":"taka bengalese","displayName-count-other":"taka bengalesi","symbol":"BDT","symbol-alt-narrow":"৳"},"BEC":{"displayName":"franco belga (convertibile)","symbol":"BEC"},"BEF":{"displayName":"franco belga","symbol":"BEF"},"BEL":{"displayName":"franco belga (finanziario)","symbol":"BEL"},"BGL":{"displayName":"lev bulgaro (1962–1999)","displayName-count-one":"lev bulgaro (1962–1999)","displayName-count-other":"leva bulgari (1962–1999)","symbol":"BGL"},"BGM":{"displayName":"BGM","symbol":"BGM"},"BGN":{"displayName":"lev bulgaro","displayName-count-one":"lev bulgaro","displayName-count-other":"leva bulgari","symbol":"BGN"},"BGO":{"displayName":"BGO","symbol":"BGO"},"BHD":{"displayName":"dinaro del Bahrein","displayName-count-one":"dinaro del Bahrein","displayName-count-other":"dinari del Bahrein","symbol":"BHD"},"BIF":{"displayName":"franco del Burundi","displayName-count-one":"franco del Burundi","displayName-count-other":"franchi del Burundi","symbol":"BIF"},"BMD":{"displayName":"dollaro delle Bermuda","displayName-count-one":"dollaro delle Bermuda","displayName-count-other":"dollari delle Bermuda","symbol":"BMD","symbol-alt-narrow":"$"},"BND":{"displayName":"dollaro del Brunei","displayName-count-one":"dollaro del Brunei","displayName-count-other":"dollari del Brunei","symbol":"BND","symbol-alt-narrow":"$"},"BOB":{"displayName":"boliviano","displayName-count-one":"boliviano","displayName-count-other":"boliviani","symbol":"BOB","symbol-alt-narrow":"Bs"},"BOL":{"displayName":"BOL","symbol":"BOL"},"BOP":{"displayName":"peso boliviano","symbol":"BOP"},"BOV":{"displayName":"mvdol boliviano","symbol":"BOV"},"BRB":{"displayName":"cruzeiro novo brasiliano (1967–1986)","symbol":"BRB"},"BRC":{"displayName":"cruzado brasiliano","symbol":"BRC"},"BRE":{"displayName":"cruzeiro brasiliano (1990–1993)","symbol":"BRE"},"BRL":{"displayName":"real brasiliano","displayName-count-one":"real brasiliano","displayName-count-other":"real brasiliani","symbol":"BRL","symbol-alt-narrow":"R$"},"BRN":{"displayName":"cruzado novo brasiliano","symbol":"BRN"},"BRR":{"displayName":"cruzeiro brasiliano","symbol":"BRR"},"BRZ":{"displayName":"BRZ","symbol":"BRZ"},"BSD":{"displayName":"dollaro delle Bahamas","displayName-count-one":"dollaro delle Bahamas","displayName-count-other":"dollari delle Bahamas","symbol":"BSD","symbol-alt-narrow":"$"},"BTN":{"displayName":"ngultrum bhutanese","displayName-count-one":"ngultrum bhutanese","displayName-count-other":"ngultrum bhutanesi","symbol":"BTN"},"BUK":{"displayName":"kyat birmano","symbol":"BUK"},"BWP":{"displayName":"pula del Botswana","displayName-count-one":"pula del Botswana","displayName-count-other":"pula del Botswana","symbol":"BWP","symbol-alt-narrow":"P"},"BYB":{"displayName":"nuovo rublo bielorusso (1994–1999)","symbol":"BYB"},"BYN":{"displayName":"rublo bielorusso","displayName-count-one":"rublo bielorusso","displayName-count-other":"rubli bielorussi","symbol":"BYN","symbol-alt-narrow":"Br"},"BYR":{"displayName":"rublo bielorusso (2000–2016)","displayName-count-one":"rublo bielorusso (2000–2016)","displayName-count-other":"rubli bielorussi (2000–2016)","symbol":"BYR"},"BZD":{"displayName":"dollaro del Belize","displayName-count-one":"dollaro del Belize","displayName-count-other":"dollari del Belize","symbol":"BZD","symbol-alt-narrow":"$"},"CAD":{"displayName":"dollaro canadese","displayName-count-one":"dollaro canadese","displayName-count-other":"dollari canadesi","symbol":"CA$","symbol-alt-narrow":"$"},"CDF":{"displayName":"franco congolese","displayName-count-one":"franco congolese","displayName-count-other":"franchi congolesi","symbol":"CDF"},"CHE":{"displayName":"CHE","symbol":"CHE"},"CHF":{"displayName":"franco svizzero","displayName-count-one":"franco svizzero","displayName-count-other":"franchi svizzeri","symbol":"CHF"},"CHW":{"displayName":"CHW","symbol":"CHW"},"CLE":{"displayName":"CLE","symbol":"CLE"},"CLF":{"displayName":"unidades de fomento chilene","symbol":"CLF"},"CLP":{"displayName":"peso cileno","displayName-count-one":"peso cileno","displayName-count-other":"pesos cileni","symbol":"CLP","symbol-alt-narrow":"$"},"CNH":{"displayName":"CNH","displayName-count-one":"CNH","displayName-count-other":"CNH","symbol":"CNH"},"CNX":{"displayName":"CNX","symbol":"CNX"},"CNY":{"displayName":"renminbi cinese","displayName-count-one":"renmimbi cinese","displayName-count-other":"renmimbi cinesi","symbol":"CN¥","symbol-alt-narrow":"¥"},"COP":{"displayName":"peso colombiano","displayName-count-one":"peso colombiano","displayName-count-other":"pesos colombiani","symbol":"COP","symbol-alt-narrow":"$"},"COU":{"displayName":"COU","symbol":"COU"},"CRC":{"displayName":"colón costaricano","displayName-count-one":"colón costaricano","displayName-count-other":"colón costaricani","symbol":"CRC","symbol-alt-narrow":"₡"},"CSD":{"displayName":"antico dinaro serbo","symbol":"CSD"},"CSK":{"displayName":"corona forte cecoslovacca","symbol":"CSK"},"CUC":{"displayName":"peso cubano convertibile","displayName-count-one":"peso cubano convertibile","displayName-count-other":"pesos cubani convertibili","symbol":"CUC","symbol-alt-narrow":"$"},"CUP":{"displayName":"peso cubano","displayName-count-one":"peso cubano","displayName-count-other":"pesos cubani","symbol":"CUP","symbol-alt-narrow":"$"},"CVE":{"displayName":"escudo capoverdiano","displayName-count-one":"escudo capoverdiano","displayName-count-other":"escudos capoverdiani","symbol":"CVE"},"CYP":{"displayName":"sterlina cipriota","symbol":"CYP"},"CZK":{"displayName":"corona ceca","displayName-count-one":"corona ceca","displayName-count-other":"corone ceche","symbol":"CZK","symbol-alt-narrow":"Kč"},"DDM":{"displayName":"ostmark della Germania Orientale","symbol":"DDM"},"DEM":{"displayName":"marco tedesco","symbol":"DEM"},"DJF":{"displayName":"franco di Gibuti","displayName-count-one":"franco di Gibuti","displayName-count-other":"franchi di Gibuti","symbol":"DJF"},"DKK":{"displayName":"corona danese","displayName-count-one":"corona danese","displayName-count-other":"corone danesi","symbol":"DKK","symbol-alt-narrow":"kr"},"DOP":{"displayName":"peso dominicano","displayName-count-one":"peso dominicano","displayName-count-other":"pesos dominicani","symbol":"DOP","symbol-alt-narrow":"$"},"DZD":{"displayName":"dinaro algerino","displayName-count-one":"dinaro algerino","displayName-count-other":"dinari algerini","symbol":"DZD"},"ECS":{"displayName":"sucre dell’Ecuador","symbol":"ECS"},"ECV":{"displayName":"unidad de valor constante (UVC) dell’Ecuador","symbol":"ECV"},"EEK":{"displayName":"corona dell’Estonia","symbol":"EEK"},"EGP":{"displayName":"sterlina egiziana","displayName-count-one":"sterlina egiziana","displayName-count-other":"sterline egiziane","symbol":"EGP","symbol-alt-narrow":"£E"},"ERN":{"displayName":"nakfa eritreo","displayName-count-one":"nakfa eritreo","displayName-count-other":"nakfa eritrei","symbol":"ERN"},"ESA":{"displayName":"peseta spagnola account","symbol":"ESA"},"ESB":{"displayName":"peseta spagnola account convertibile","symbol":"ESB"},"ESP":{"displayName":"peseta spagnola","symbol":"ESP","symbol-alt-narrow":"₧"},"ETB":{"displayName":"birr etiope","displayName-count-one":"birr etiope","displayName-count-other":"birr etiopi","symbol":"ETB"},"EUR":{"displayName":"euro","displayName-count-one":"euro","displayName-count-other":"euro","symbol":"€","symbol-alt-narrow":"€"},"FIM":{"displayName":"markka finlandese","symbol":"FIM"},"FJD":{"displayName":"dollaro delle Figi","displayName-count-one":"dollaro delle Figi","displayName-count-other":"dollari delle Figi","symbol":"FJD","symbol-alt-narrow":"$"},"FKP":{"displayName":"sterlina delle Falkland","displayName-count-one":"sterlina delle Falkland","displayName-count-other":"sterline delle Falkland","symbol":"FKP","symbol-alt-narrow":"£"},"FRF":{"displayName":"franco francese","symbol":"FRF"},"GBP":{"displayName":"sterlina britannica","displayName-count-one":"sterlina britannica","displayName-count-other":"sterline britanniche","symbol":"£","symbol-alt-narrow":"£"},"GEK":{"displayName":"kupon larit georgiano","symbol":"GEK"},"GEL":{"displayName":"lari georgiano","displayName-count-one":"lari georgiano","displayName-count-other":"lari georgiani","symbol":"GEL","symbol-alt-narrow":"₾","symbol-alt-variant":"ლ"},"GHC":{"displayName":"cedi del Ghana","symbol":"GHC"},"GHS":{"displayName":"cedi ghanese","displayName-count-one":"cedi ghanese","displayName-count-other":"cedi ghanesi","symbol":"GHS"},"GIP":{"displayName":"sterlina di Gibilterra","displayName-count-one":"sterlina di Gibilterra","displayName-count-other":"sterline di Gibilterra","symbol":"GIP","symbol-alt-narrow":"£"},"GMD":{"displayName":"dalasi gambiano","displayName-count-one":"dalasi gambiano","displayName-count-other":"dalasi gambiani","symbol":"GMD"},"GNF":{"displayName":"franco della Guinea","displayName-count-one":"franco della Guinea","displayName-count-other":"franchi della Guinea","symbol":"GNF","symbol-alt-narrow":"FG"},"GNS":{"displayName":"syli della Guinea","symbol":"GNS"},"GQE":{"displayName":"ekwele della Guinea Equatoriale","symbol":"GQE"},"GRD":{"displayName":"dracma greca","symbol":"GRD"},"GTQ":{"displayName":"quetzal guatemalteco","displayName-count-one":"quetzal guatemalteco","displayName-count-other":"quetzal guatemaltechi","symbol":"GTQ","symbol-alt-narrow":"Q"},"GWE":{"displayName":"escudo della Guinea portoghese","symbol":"GWE"},"GWP":{"displayName":"peso della Guinea-Bissau","symbol":"GWP"},"GYD":{"displayName":"dollaro della Guyana","displayName-count-one":"dollaro della Guyana","displayName-count-other":"dollari della Guyana","symbol":"GYD","symbol-alt-narrow":"$"},"HKD":{"displayName":"dollaro di Hong Kong","displayName-count-one":"dollaro di Hong Kong","displayName-count-other":"dollari di Hong Kong","symbol":"HKD","symbol-alt-narrow":"$"},"HNL":{"displayName":"lempira honduregna","displayName-count-one":"lempira honduregna","displayName-count-other":"lempire honduregne","symbol":"HNL","symbol-alt-narrow":"L"},"HRD":{"displayName":"dinaro croato","symbol":"HRD"},"HRK":{"displayName":"kuna croata","displayName-count-one":"kuna croata","displayName-count-other":"kune croate","symbol":"HRK","symbol-alt-narrow":"kn"},"HTG":{"displayName":"gourde haitiano","displayName-count-one":"gourde haitiano","displayName-count-other":"gourde haitiani","symbol":"HTG"},"HUF":{"displayName":"fiorino ungherese","displayName-count-one":"fiorino ungherese","displayName-count-other":"fiorini ungheresi","symbol":"HUF","symbol-alt-narrow":"Ft"},"IDR":{"displayName":"rupia indonesiana","displayName-count-one":"rupia indonesiana","displayName-count-other":"rupie indonesiane","symbol":"IDR","symbol-alt-narrow":"Rp"},"IEP":{"displayName":"sterlina irlandese","symbol":"IEP"},"ILP":{"displayName":"sterlina israeliana","symbol":"ILP"},"ILR":{"displayName":"ILR","symbol":"ILR"},"ILS":{"displayName":"nuovo siclo israeliano","displayName-count-one":"nuovo siclo israeliano","displayName-count-other":"nuovi sicli israeliani","symbol":"₪","symbol-alt-narrow":"₪"},"INR":{"displayName":"rupia indiana","displayName-count-one":"rupia indiana","displayName-count-other":"rupie indiane","symbol":"₹","symbol-alt-narrow":"₹"},"IQD":{"displayName":"dinaro iracheno","displayName-count-one":"dinaro iracheno","displayName-count-other":"dinari iracheni","symbol":"IQD"},"IRR":{"displayName":"rial iraniano","displayName-count-one":"rial iraniano","displayName-count-other":"rial iraniani","symbol":"IRR"},"ISJ":{"displayName":"ISJ","symbol":"ISJ"},"ISK":{"displayName":"corona islandese","displayName-count-one":"corona islandese","displayName-count-other":"corone islandesi","symbol":"ISK","symbol-alt-narrow":"kr"},"ITL":{"pattern":"¤ #,##0.00","displayName":"lira italiana","symbol":"ITL","decimal":",","group":"."},"JMD":{"displayName":"dollaro giamaicano","displayName-count-one":"dollaro giamaicano","displayName-count-other":"dollari giamaicani","symbol":"JMD","symbol-alt-narrow":"$"},"JOD":{"displayName":"dinaro giordano","displayName-count-one":"dinaro giordano","displayName-count-other":"dinari giordani","symbol":"JOD"},"JPY":{"displayName":"yen giapponese","displayName-count-one":"yen giapponese","displayName-count-other":"yen giapponesi","symbol":"JPY","symbol-alt-narrow":"¥"},"KES":{"displayName":"scellino keniota","displayName-count-one":"scellino keniota","displayName-count-other":"scellini keniota","symbol":"KES"},"KGS":{"displayName":"som kirghiso","displayName-count-one":"som kirghiso","displayName-count-other":"som kirghisi","symbol":"KGS"},"KHR":{"displayName":"riel cambogiano","displayName-count-one":"riel cambogiano","displayName-count-other":"riel cambogiani","symbol":"KHR","symbol-alt-narrow":"៛"},"KMF":{"displayName":"franco comoriano","displayName-count-one":"franco comoriano","displayName-count-other":"franchi comoriani","symbol":"KMF","symbol-alt-narrow":"CF"},"KPW":{"displayName":"won nordcoreano","displayName-count-one":"won nordcoreano","displayName-count-other":"won nordcoreani","symbol":"KPW","symbol-alt-narrow":"₩"},"KRH":{"displayName":"KRH","symbol":"KRH"},"KRO":{"displayName":"KRO","symbol":"KRO"},"KRW":{"displayName":"won sudcoreano","displayName-count-one":"won sudcoreano","displayName-count-other":"won sudcoreani","symbol":"KRW","symbol-alt-narrow":"₩"},"KWD":{"displayName":"dinaro kuwaitiano","displayName-count-one":"dinaro kuwaitiano","displayName-count-other":"dinari kuwaitiani","symbol":"KWD"},"KYD":{"displayName":"dollaro delle Isole Cayman","displayName-count-one":"dollaro delle Isole Cayman","displayName-count-other":"dollari delle Isole Cayman","symbol":"KYD","symbol-alt-narrow":"$"},"KZT":{"displayName":"tenge kazako","displayName-count-one":"tenge kazako","displayName-count-other":"tenge kazaki","symbol":"KZT","symbol-alt-narrow":"₸"},"LAK":{"displayName":"kip laotiano","displayName-count-one":"kip laotiano","displayName-count-other":"kip laotiani","symbol":"LAK","symbol-alt-narrow":"₭"},"LBP":{"displayName":"lira libanese","displayName-count-one":"lira libanese","displayName-count-other":"lire libanesi","symbol":"LBP","symbol-alt-narrow":"L£"},"LKR":{"displayName":"rupia di Sri Lanka","displayName-count-one":"rupia di Sri Lanka","displayName-count-other":"rupie di Sri Lanka","symbol":"LKR","symbol-alt-narrow":"Rs"},"LRD":{"displayName":"dollaro liberiano","displayName-count-one":"dollaro liberiano","displayName-count-other":"dollari liberiani","symbol":"LRD","symbol-alt-narrow":"$"},"LSL":{"displayName":"loti del Lesotho","symbol":"LSL"},"LTL":{"displayName":"litas lituano","displayName-count-one":"litas lituano","displayName-count-other":"litas lituani","symbol":"LTL","symbol-alt-narrow":"Lt"},"LTT":{"displayName":"talonas lituani","symbol":"LTT"},"LUC":{"displayName":"franco convertibile del Lussemburgo","symbol":"LUC"},"LUF":{"displayName":"franco del Lussemburgo","symbol":"LUF"},"LUL":{"displayName":"franco finanziario del Lussemburgo","symbol":"LUL"},"LVL":{"displayName":"lats lettone","displayName-count-one":"lats lettone","displayName-count-other":"lati lettoni","symbol":"LVL","symbol-alt-narrow":"Ls"},"LVR":{"displayName":"rublo lettone","symbol":"LVR"},"LYD":{"displayName":"dinaro libico","displayName-count-one":"dinaro libico","displayName-count-other":"dinari libici","symbol":"LYD"},"MAD":{"displayName":"dirham marocchino","displayName-count-one":"dirham marocchino","displayName-count-other":"dirham marocchini","symbol":"MAD"},"MAF":{"displayName":"franco marocchino","symbol":"MAF"},"MCF":{"displayName":"MCF","symbol":"MCF"},"MDC":{"displayName":"MDC","symbol":"MDC"},"MDL":{"displayName":"leu moldavo","displayName-count-one":"leu moldavo","displayName-count-other":"lei moldavi","symbol":"MDL"},"MGA":{"displayName":"ariary malgascio","displayName-count-one":"ariary malgascio","displayName-count-other":"ariary malgasci","symbol":"MGA","symbol-alt-narrow":"Ar"},"MGF":{"displayName":"franco malgascio","symbol":"MGF"},"MKD":{"displayName":"denar macedone","displayName-count-one":"dinaro macedone","displayName-count-other":"dinari macedoni","symbol":"MKD"},"MKN":{"displayName":"MKN","symbol":"MKN"},"MLF":{"displayName":"franco di Mali","symbol":"MLF"},"MMK":{"displayName":"kyat di Myanmar","displayName-count-one":"kyat di Myanmar","displayName-count-other":"kyat di Myanmar","symbol":"MMK","symbol-alt-narrow":"K"},"MNT":{"displayName":"tugrik mongolo","displayName-count-one":"tugrik mongolo","displayName-count-other":"tugrik mongoli","symbol":"MNT","symbol-alt-narrow":"₮"},"MOP":{"displayName":"pataca di Macao","displayName-count-one":"pataca di Macao","displayName-count-other":"patacas di Macao","symbol":"MOP"},"MRO":{"displayName":"ouguiya della Mauritania","displayName-count-one":"ouguiya della Mauritania","displayName-count-other":"ouguiya della Mauritania","symbol":"MRO"},"MTL":{"displayName":"lira maltese","symbol":"MTL"},"MTP":{"displayName":"sterlina maltese","symbol":"MTP"},"MUR":{"displayName":"rupia mauriziana","displayName-count-one":"rupia mauriziana","displayName-count-other":"rupie mauriziane","symbol":"MUR","symbol-alt-narrow":"Rs"},"MVP":{"displayName":"MVP","symbol":"MVP"},"MVR":{"displayName":"rufiyaa delle Maldive","displayName-count-one":"rufiyaa delle Maldive","displayName-count-other":"rufiyaa delle Maldive","symbol":"MVR"},"MWK":{"displayName":"kwacha malawiano","displayName-count-one":"kwacha malawiano","displayName-count-other":"kwacha malawiani","symbol":"MWK"},"MXN":{"displayName":"peso messicano","displayName-count-one":"peso messicano","displayName-count-other":"pesos messicani","symbol":"MXN","symbol-alt-narrow":"$"},"MXP":{"displayName":"peso messicano d’argento (1861–1992)","symbol":"MXP"},"MXV":{"displayName":"unidad de inversion (UDI) messicana","symbol":"MXV"},"MYR":{"displayName":"ringgit malese","displayName-count-one":"ringgit malese","displayName-count-other":"ringgit malesi","symbol":"MYR","symbol-alt-narrow":"RM"},"MZE":{"displayName":"escudo del Mozambico","symbol":"MZE"},"MZM":{"displayName":"MZM","symbol":"MZM"},"MZN":{"displayName":"metical mozambicano","displayName-count-one":"metical mozambicano","displayName-count-other":"metical mozambicani","symbol":"MZN"},"NAD":{"displayName":"dollaro namibiano","displayName-count-one":"dollaro namibiano","displayName-count-other":"dollari namibiani","symbol":"NAD","symbol-alt-narrow":"$"},"NGN":{"displayName":"naira nigeriana","displayName-count-one":"naira nigeriana","displayName-count-other":"naire nigeriane","symbol":"NGN","symbol-alt-narrow":"₦"},"NIC":{"displayName":"cordoba nicaraguense","displayName-count-one":"cordoba nicaraguense","displayName-count-other":"cordoba nicaraguense","symbol":"NIC"},"NIO":{"displayName":"córdoba nicaraguense","displayName-count-one":"córdoba nicaraguense","displayName-count-other":"córdoba nicaraguensi","symbol":"NIO","symbol-alt-narrow":"C$"},"NLG":{"displayName":"fiorino olandese","symbol":"NLG"},"NOK":{"displayName":"corona norvegese","displayName-count-one":"corona norvegese","displayName-count-other":"corone norvegesi","symbol":"NOK","symbol-alt-narrow":"NKr"},"NPR":{"displayName":"rupia nepalese","displayName-count-one":"rupia nepalese","displayName-count-other":"rupie nepalesi","symbol":"NPR","symbol-alt-narrow":"Rs"},"NZD":{"displayName":"dollaro neozelandese","displayName-count-one":"dollaro neozelandese","displayName-count-other":"dollari neozelandesi","symbol":"NZ$","symbol-alt-narrow":"$"},"OMR":{"displayName":"rial omanita","displayName-count-one":"rial omanita","displayName-count-other":"rial omaniti","symbol":"OMR"},"PAB":{"displayName":"balboa panamense","displayName-count-one":"balboa panamense","displayName-count-other":"balboa panamensi","symbol":"PAB"},"PEI":{"displayName":"inti peruviano","symbol":"PEI"},"PEN":{"displayName":"sol peruviano","displayName-count-one":"sol peruviano","displayName-count-other":"sol peruviani","symbol":"PEN"},"PES":{"displayName":"sol peruviano (1863–1965)","symbol":"PES"},"PGK":{"displayName":"kina papuana","displayName-count-one":"kina papuana","displayName-count-other":"kina papuane","symbol":"PGK"},"PHP":{"displayName":"peso filippino","displayName-count-one":"peso filippino","displayName-count-other":"pesos filippini","symbol":"PHP","symbol-alt-narrow":"₱"},"PKR":{"displayName":"rupia pakistana","displayName-count-one":"rupia pakistana","displayName-count-other":"rupie pakistane","symbol":"PKR","symbol-alt-narrow":"Rs"},"PLN":{"displayName":"złoty polacco","displayName-count-one":"złoty polacco","displayName-count-other":"złoty polacchi","symbol":"PLN","symbol-alt-narrow":"zł"},"PLZ":{"displayName":"złoty Polacco (1950–1995)","displayName-count-one":"złoty polacco (1950–1995)","displayName-count-other":"złoty polacchi (1950–1995)","symbol":"PLZ"},"PTE":{"displayName":"escudo portoghese","symbol":"PTE"},"PYG":{"displayName":"guaraní paraguayano","displayName-count-one":"guaraní paraguayano","displayName-count-other":"guaraní paraguayani","symbol":"PYG","symbol-alt-narrow":"₲"},"QAR":{"displayName":"rial qatariano","displayName-count-one":"rial qatariano","displayName-count-other":"rial qatariani","symbol":"QAR"},"RHD":{"displayName":"dollaro della Rhodesia","symbol":"RHD"},"ROL":{"displayName":"leu della Romania","symbol":"ROL"},"RON":{"displayName":"leu rumeno","displayName-count-one":"leu rumeno","displayName-count-other":"lei rumeni","symbol":"RON","symbol-alt-narrow":"lei"},"RSD":{"displayName":"dinaro serbo","displayName-count-one":"dinaro serbo","displayName-count-other":"dinara serbi","symbol":"RSD"},"RUB":{"displayName":"rublo russo","displayName-count-one":"rublo russo","displayName-count-other":"rubli russi","symbol":"RUB","symbol-alt-narrow":"₽"},"RUR":{"displayName":"rublo della CSI","symbol":"RUR","symbol-alt-narrow":"р."},"RWF":{"displayName":"franco ruandese","displayName-count-one":"franco ruandese","displayName-count-other":"franchi ruandesi","symbol":"RWF","symbol-alt-narrow":"RF"},"SAR":{"displayName":"riyal saudita","displayName-count-one":"riyal saudita","displayName-count-other":"riyal sauditi","symbol":"SAR"},"SBD":{"displayName":"dollaro delle Isole Salomone","displayName-count-one":"dollaro delle Isole Salomone","displayName-count-other":"dollari delle Isole Salomone","symbol":"SBD","symbol-alt-narrow":"$"},"SCR":{"displayName":"rupia delle Seychelles","displayName-count-one":"rupia delle Seychelles","displayName-count-other":"rupie delle Seychelles","symbol":"SCR"},"SDD":{"displayName":"dinaro sudanese","symbol":"SDD"},"SDG":{"displayName":"sterlina sudanese","displayName-count-one":"sterlina sudanese","displayName-count-other":"sterline sudanesi","symbol":"SDG"},"SDP":{"displayName":"SDP","symbol":"SDP"},"SEK":{"displayName":"corona svedese","displayName-count-one":"corona svedese","displayName-count-other":"corone svedesi","symbol":"SEK","symbol-alt-narrow":"kr"},"SGD":{"displayName":"dollaro di Singapore","displayName-count-one":"dollaro di Singapore","displayName-count-other":"dollari di Singapore","symbol":"SGD","symbol-alt-narrow":"$"},"SHP":{"displayName":"sterlina di Sant’Elena","displayName-count-one":"sterlina di Sant’Elena","displayName-count-other":"sterline di Sant’Elena","symbol":"SHP","symbol-alt-narrow":"£"},"SIT":{"displayName":"tallero sloveno","symbol":"SIT"},"SKK":{"displayName":"corona slovacca","symbol":"SKK"},"SLL":{"displayName":"leone della Sierra Leone","displayName-count-one":"leone della Sierra Leone","displayName-count-other":"leoni della Sierra Leone","symbol":"SLL"},"SOS":{"displayName":"scellino somalo","displayName-count-one":"scellino somalo","displayName-count-other":"scellini somali","symbol":"SOS"},"SRD":{"displayName":"dollaro del Suriname","displayName-count-one":"dollaro del Suriname","displayName-count-other":"dollari del Suriname","symbol":"SRD","symbol-alt-narrow":"$"},"SRG":{"displayName":"fiorino del Suriname","symbol":"SRG"},"SSP":{"displayName":"sterlina sud-sudanese","displayName-count-one":"sterlina sud-sudanese","displayName-count-other":"sterline sud-sudanesi","symbol":"SSP","symbol-alt-narrow":"£"},"STD":{"displayName":"dobra di Sao Tomé e Principe","displayName-count-one":"dobra di Sao Tomé e Principe","displayName-count-other":"dobra di Sao Tomé e Principe","symbol":"STD","symbol-alt-narrow":"Db"},"STN":{"displayName":"STN","symbol":"STN"},"SUR":{"displayName":"rublo sovietico","symbol":"SUR"},"SVC":{"displayName":"colón salvadoregno","symbol":"SVC"},"SYP":{"displayName":"lira siriana","displayName-count-one":"lira siriana","displayName-count-other":"lire siriane","symbol":"SYP","symbol-alt-narrow":"£"},"SZL":{"displayName":"lilangeni dello Swaziland","displayName-count-one":"lilangeni dello Swaziland","displayName-count-other":"lilangeni dello Swaziland","symbol":"SZL"},"THB":{"displayName":"baht thailandese","displayName-count-one":"baht thailandese","displayName-count-other":"baht thailandesi","symbol":"฿","symbol-alt-narrow":"฿"},"TJR":{"displayName":"rublo del Tajikistan","symbol":"TJR"},"TJS":{"displayName":"somoni tagiko","displayName-count-one":"somoni tagiko","displayName-count-other":"somoni tagiki","symbol":"TJS"},"TMM":{"displayName":"manat turkmeno (1993–2009)","symbol":"TMM"},"TMT":{"displayName":"manat turkmeno","displayName-count-one":"manat turkmeno","displayName-count-other":"manat turkmeni","symbol":"TMT"},"TND":{"displayName":"dinaro tunisino","displayName-count-one":"dinaro tunisino","displayName-count-other":"dinari tunisini","symbol":"TND"},"TOP":{"displayName":"paʻanga tongano","displayName-count-one":"paʻanga tongano","displayName-count-other":"paʻanga tongani","symbol":"TOP","symbol-alt-narrow":"T$"},"TPE":{"displayName":"escudo di Timor","symbol":"TPE"},"TRL":{"displayName":"lira turca (1922–2005)","displayName-count-one":"lira turca (1922–2005)","displayName-count-other":"lire turche (1922–2005)","symbol":"TRL"},"TRY":{"displayName":"lira turca","displayName-count-one":"lira turca","displayName-count-other":"lire turche","symbol":"TRY","symbol-alt-narrow":"₺","symbol-alt-variant":"TL"},"TTD":{"displayName":"dollaro di Trinidad e Tobago","displayName-count-one":"dollaro di Trinidad e Tobago","displayName-count-other":"dollari di Trinidad e Tobago","symbol":"TTD","symbol-alt-narrow":"$"},"TWD":{"displayName":"nuovo dollaro taiwanese","displayName-count-one":"nuovo dollaro taiwanese","displayName-count-other":"nuovi dollari taiwanesi","symbol":"TWD","symbol-alt-narrow":"NT$"},"TZS":{"displayName":"scellino della Tanzania","displayName-count-one":"scellino della Tanzania","displayName-count-other":"scellini della Tanzania","symbol":"TZS"},"UAH":{"displayName":"grivnia ucraina","displayName-count-one":"grivnia ucraina","displayName-count-other":"grivnie ucraine","symbol":"UAH","symbol-alt-narrow":"₴"},"UAK":{"displayName":"karbovanetz ucraino","symbol":"UAK"},"UGS":{"displayName":"scellino ugandese (1966–1987)","symbol":"UGS"},"UGX":{"displayName":"scellino ugandese","displayName-count-one":"scellino ugandese","displayName-count-other":"scellini ugandesi","symbol":"UGX"},"USD":{"displayName":"dollaro statunitense","displayName-count-one":"dollaro statunitense","displayName-count-other":"dollari statunitensi","symbol":"USD","symbol-alt-narrow":"$"},"USN":{"displayName":"dollaro statunitense (next day)","symbol":"USN"},"USS":{"displayName":"dollaro statunitense (same day)","symbol":"USS"},"UYI":{"displayName":"peso uruguaiano in unità indicizzate","symbol":"UYI"},"UYP":{"displayName":"peso uruguaiano (1975–1993)","symbol":"UYP"},"UYU":{"displayName":"peso uruguayano","displayName-count-one":"peso uruguayano","displayName-count-other":"pesos uruguayani","symbol":"UYU","symbol-alt-narrow":"$"},"UZS":{"displayName":"sum uzbeco","displayName-count-one":"sum uzbeco","displayName-count-other":"sum uzbechi","symbol":"UZS"},"VEB":{"displayName":"bolivar venezuelano (1871–2008)","displayName-count-one":"bolivar venezuelano (1871–2008)","displayName-count-other":"bolivares venezuelani (1871–2008)","symbol":"VEB"},"VEF":{"displayName":"bolívar venezuelano","displayName-count-one":"bolívar venezuelano","displayName-count-other":"bolívares venezuelani","symbol":"VEF","symbol-alt-narrow":"Bs"},"VND":{"displayName":"dong vietnamita","displayName-count-one":"dong vietnamita","displayName-count-other":"dong vietnamiti","symbol":"₫","symbol-alt-narrow":"₫"},"VNN":{"displayName":"VNN","symbol":"VNN"},"VUV":{"displayName":"vatu di Vanuatu","displayName-count-one":"vatu di Vanuatu","displayName-count-other":"vatu di Vanuatu","symbol":"VUV"},"WST":{"displayName":"tala samoano","displayName-count-one":"tala samoano","displayName-count-other":"tala samoani","symbol":"WST"},"XAF":{"displayName":"franco CFA BEAC","displayName-count-one":"franco CFA BEAC","displayName-count-other":"franchi CFA BEAC","symbol":"FCFA"},"XAG":{"displayName":"argento","symbol":"XAG"},"XAU":{"displayName":"oro","symbol":"XAU"},"XBA":{"displayName":"unità composita europea","symbol":"XBA"},"XBB":{"displayName":"unità monetaria europea","symbol":"XBB"},"XBC":{"displayName":"unità di acconto europea (XBC)","symbol":"XBC"},"XBD":{"displayName":"unità di acconto europea (XBD)","symbol":"XBD"},"XCD":{"displayName":"dollaro dei Caraibi orientali","displayName-count-one":"dollaro dei Caraibi orientali","displayName-count-other":"dollari dei Caraibi orientali","symbol":"EC$","symbol-alt-narrow":"$"},"XDR":{"displayName":"diritti speciali di incasso","symbol":"XDR"},"XEU":{"displayName":"XEU","symbol":"XEU"},"XFO":{"displayName":"franco oro francese","symbol":"XFO"},"XFU":{"displayName":"franco UIC francese","symbol":"XFU"},"XOF":{"displayName":"franco CFA BCEAO","displayName-count-one":"franco CFA BCEAO","displayName-count-other":"franchi CFA BCEAO","symbol":"CFA"},"XPD":{"displayName":"palladio","symbol":"XPD"},"XPF":{"displayName":"franco CFP","displayName-count-one":"franco CFP","displayName-count-other":"franchi CFP","symbol":"CFPF"},"XPT":{"displayName":"platino","symbol":"XPT"},"XRE":{"displayName":"fondi RINET","symbol":"XRE"},"XSU":{"displayName":"XSU","symbol":"XSU"},"XTS":{"displayName":"codice di verifica della valuta","symbol":"XTS"},"XUA":{"displayName":"XUA","symbol":"XUA"},"XXX":{"displayName":"valuta sconosciuta","displayName-count-one":"(valuta sconosciuta)","displayName-count-other":"(valute sconosciute)","symbol":"XXX"},"YDD":{"displayName":"dinaro dello Yemen","symbol":"YDD"},"YER":{"displayName":"riyal yemenita","displayName-count-one":"rial yemenita","displayName-count-other":"rial yemeniti","symbol":"YER"},"YUD":{"displayName":"dinaro forte yugoslavo","symbol":"YUD"},"YUM":{"displayName":"dinaro noviy yugoslavo","symbol":"YUM"},"YUN":{"displayName":"dinaro convertibile yugoslavo","symbol":"YUN"},"YUR":{"displayName":"YUR","symbol":"YUR"},"ZAL":{"displayName":"rand sudafricano (finanziario)","symbol":"ZAL"},"ZAR":{"displayName":"rand sudafricano","displayName-count-one":"rand sudafricano","displayName-count-other":"rand sudafricani","symbol":"ZAR","symbol-alt-narrow":"R"},"ZMK":{"displayName":"kwacha dello Zambia (1968–2012)","displayName-count-one":"kwacha zambiano (1968–2012)","displayName-count-other":"kwacha zambiani (1968–2012)","symbol":"ZMK"},"ZMW":{"displayName":"kwacha dello Zambia","displayName-count-one":"kwacha zambiano","displayName-count-other":"kwacha zambiani","symbol":"ZMW","symbol-alt-narrow":"ZK"},"ZRN":{"displayName":"nuovo zaire dello Zaire","symbol":"ZRN"},"ZRZ":{"displayName":"zaire dello Zaire","symbol":"ZRZ"},"ZWD":{"displayName":"dollaro dello Zimbabwe","symbol":"ZWD"},"ZWL":{"displayName":"dollaro zimbabwiano (2009)","symbol":"ZWL"},"ZWR":{"displayName":"ZWR","symbol":"ZWR"}},"defaultNumberingSystem":"latn","otherNumberingSystems":{"native":"latn"},"minimumGroupingDigits":"1","symbols-numberSystem-latn":{"decimal":",","group":".","list":";","percentSign":"%","plusSign":"+","minusSign":"-","exponential":"E","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"NaN","timeSeparator":":"},"decimalFormats-numberSystem-latn":{"standard":"#,##0.###","long":{"decimalFormat":{"1000-count-one":"0 mille","1000-count-other":"0 mila","10000-count-one":"00 mila","10000-count-other":"00 mila","100000-count-one":"000 mila","100000-count-other":"000 mila","1000000-count-one":"0 milione","1000000-count-other":"0 milioni","10000000-count-one":"00 milioni","10000000-count-other":"00 milioni","100000000-count-one":"000 milioni","100000000-count-other":"000 milioni","1000000000-count-one":"0 miliardo","1000000000-count-other":"0 miliardi","10000000000-count-one":"00 miliardi","10000000000-count-other":"00 miliardi","100000000000-count-one":"000 miliardi","100000000000-count-other":"000 miliardi","1000000000000-count-one":"0 mille miliardi","1000000000000-count-other":"0 mila miliardi","10000000000000-count-one":"00 mila miliardi","10000000000000-count-other":"00 mila miliardi","100000000000000-count-one":"000 mila miliardi","100000000000000-count-other":"000 mila miliardi"}},"short":{"decimalFormat":{"1000-count-one":"0","1000-count-other":"0","10000-count-one":"0","10000-count-other":"0","100000-count-one":"0","100000-count-other":"0","1000000-count-one":"0 Mln","1000000-count-other":"0 Mln","10000000-count-one":"00 Mln","10000000-count-other":"00 Mln","100000000-count-one":"000 Mln","100000000-count-other":"000 Mln","1000000000-count-one":"0 Mld","1000000000-count-other":"0 Mld","10000000000-count-one":"00 Mld","10000000000-count-other":"00 Mld","100000000000-count-one":"000 Mld","100000000000-count-other":"000 Mld","1000000000000-count-one":"0 Bln","1000000000000-count-other":"0 Bln","10000000000000-count-one":"00 Bln","10000000000000-count-other":"00 Bln","100000000000000-count-one":"000 Bln","100000000000000-count-other":"000 Bln"}}},"scientificFormats-numberSystem-latn":{"standard":"#E0"},"percentFormats-numberSystem-latn":{"standard":"#,##0%"},"currencyFormats-numberSystem-latn":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"#,##0.00 ¤","accounting":"#,##0.00 ¤","short":{"standard":{"1000-count-one":"0","1000-count-other":"0","10000-count-one":"0","10000-count-other":"0","100000-count-one":"0","100000-count-other":"0","1000000-count-one":"0 Mio ¤","1000000-count-other":"0 Mio ¤","10000000-count-one":"00 Mio ¤","10000000-count-other":"00 Mio ¤","100000000-count-one":"000 Mio ¤","100000000-count-other":"000 Mio ¤","1000000000-count-one":"0 Mrd ¤","1000000000-count-other":"0 Mrd ¤","10000000000-count-one":"00 Mrd ¤","10000000000-count-other":"00 Mrd ¤","100000000000-count-one":"000 Mrd ¤","100000000000-count-other":"000 Mrd ¤","1000000000000-count-one":"0 Bln ¤","1000000000000-count-other":"0 Bln ¤","10000000000000-count-one":"00 Bln ¤","10000000000000-count-other":"00 Bln ¤","100000000000000-count-one":"000 Bln ¤","100000000000000-count-other":"000 Bln ¤"}},"unitPattern-count-one":"{0} {1}","unitPattern-count-other":"{0} {1}"},"miscPatterns-numberSystem-latn":{"atLeast":"⩾{0}","range":"{0}-{1}"},"minimalPairs":{"pluralMinimalPairs-count-one":"{0} giorno","pluralMinimalPairs-count-other":"{0} giorni","many":"Prendi l’{0}° a destra.","other":"Prendi la {0}° a destra."}}},"pt":{"identity":{"version":{"_number":"$Revision: 13701 $","_cldrVersion":"32"},"language":"pt"},"dates":{"calendars":{"gregorian":{"months":{"format":{"abbreviated":{"1":"jan","2":"fev","3":"mar","4":"abr","5":"mai","6":"jun","7":"jul","8":"ago","9":"set","10":"out","11":"nov","12":"dez"},"narrow":{"1":"J","2":"F","3":"M","4":"A","5":"M","6":"J","7":"J","8":"A","9":"S","10":"O","11":"N","12":"D"},"wide":{"1":"janeiro","2":"fevereiro","3":"março","4":"abril","5":"maio","6":"junho","7":"julho","8":"agosto","9":"setembro","10":"outubro","11":"novembro","12":"dezembro"}},"stand-alone":{"abbreviated":{"1":"jan","2":"fev","3":"mar","4":"abr","5":"mai","6":"jun","7":"jul","8":"ago","9":"set","10":"out","11":"nov","12":"dez"},"narrow":{"1":"J","2":"F","3":"M","4":"A","5":"M","6":"J","7":"J","8":"A","9":"S","10":"O","11":"N","12":"D"},"wide":{"1":"janeiro","2":"fevereiro","3":"março","4":"abril","5":"maio","6":"junho","7":"julho","8":"agosto","9":"setembro","10":"outubro","11":"novembro","12":"dezembro"}}},"days":{"format":{"abbreviated":{"sun":"dom","mon":"seg","tue":"ter","wed":"qua","thu":"qui","fri":"sex","sat":"sáb"},"narrow":{"sun":"D","mon":"S","tue":"T","wed":"Q","thu":"Q","fri":"S","sat":"S"},"short":{"sun":"dom","mon":"seg","tue":"ter","wed":"qua","thu":"qui","fri":"sex","sat":"sáb"},"wide":{"sun":"domingo","mon":"segunda-feira","tue":"terça-feira","wed":"quarta-feira","thu":"quinta-feira","fri":"sexta-feira","sat":"sábado"}},"stand-alone":{"abbreviated":{"sun":"dom","mon":"seg","tue":"ter","wed":"qua","thu":"qui","fri":"sex","sat":"sáb"},"narrow":{"sun":"D","mon":"S","tue":"T","wed":"Q","thu":"Q","fri":"S","sat":"S"},"short":{"sun":"dom","mon":"seg","tue":"ter","wed":"qua","thu":"qui","fri":"sex","sat":"sáb"},"wide":{"sun":"domingo","mon":"segunda-feira","tue":"terça-feira","wed":"quarta-feira","thu":"quinta-feira","fri":"sexta-feira","sat":"sábado"}}},"quarters":{"format":{"abbreviated":{"1":"T1","2":"T2","3":"T3","4":"T4"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"1º trimestre","2":"2º trimestre","3":"3º trimestre","4":"4º trimestre"}},"stand-alone":{"abbreviated":{"1":"T1","2":"T2","3":"T3","4":"T4"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"1º trimestre","2":"2º trimestre","3":"3º trimestre","4":"4º trimestre"}}},"dayPeriods":{"format":{"abbreviated":{"midnight":"meia-noite","am":"AM","noon":"meio-dia","pm":"PM","morning1":"da manhã","afternoon1":"da tarde","evening1":"da noite","night1":"da madrugada"},"narrow":{"midnight":"meia-noite","am":"AM","noon":"meio-dia","pm":"PM","morning1":"da manhã","afternoon1":"da tarde","evening1":"da noite","night1":"da madrugada"},"wide":{"midnight":"meia-noite","am":"AM","noon":"meio-dia","pm":"PM","morning1":"da manhã","afternoon1":"da tarde","evening1":"da noite","night1":"da madrugada"}},"stand-alone":{"abbreviated":{"midnight":"meia-noite","am":"AM","noon":"meio-dia","pm":"PM","morning1":"manhã","afternoon1":"tarde","evening1":"noite","night1":"madrugada"},"narrow":{"midnight":"meia-noite","am":"AM","noon":"meio-dia","pm":"PM","morning1":"manhã","afternoon1":"tarde","evening1":"noite","night1":"madrugada"},"wide":{"midnight":"meia-noite","am":"AM","noon":"meio-dia","pm":"PM","morning1":"manhã","afternoon1":"tarde","evening1":"noite","night1":"madrugada"}}},"eras":{"eraNames":{"0":"antes de Cristo","1":"depois de Cristo","0-alt-variant":"antes da Era Comum","1-alt-variant":"Era Comum"},"eraAbbr":{"0":"a.C.","1":"d.C.","0-alt-variant":"AEC","1-alt-variant":"EC"},"eraNarrow":{"0":"a.C.","1":"d.C.","0-alt-variant":"AEC","1-alt-variant":"EC"}},"dateFormats":{"full":"EEEE, d 'de' MMMM 'de' y","long":"d 'de' MMMM 'de' y","medium":"d 'de' MMM 'de' y","short":"dd/MM/y"},"timeFormats":{"full":"HH:mm:ss zzzz","long":"HH:mm:ss z","medium":"HH:mm:ss","short":"HH:mm"},"dateTimeFormats":{"full":"{1} {0}","long":"{1} {0}","medium":"{1} {0}","short":"{1} {0}","availableFormats":{"Bh":"h B","Bhm":"h:mm B","Bhms":"h:mm:ss B","d":"d","E":"ccc","EBhm":"E h:mm B","EBhms":"E h:mm:ss B","Ed":"E, d","Ehm":"E, h:mm a","EHm":"E, HH:mm","Ehms":"E, h:mm:ss a","EHms":"E, HH:mm:ss","Gy":"y G","GyMMM":"MMM 'de' y G","GyMMMd":"d 'de' MMM 'de' y G","GyMMMEd":"E, d 'de' MMM 'de' y G","h":"h a","H":"HH","hm":"h:mm a","Hm":"HH:mm","hms":"h:mm:ss a","Hms":"HH:mm:ss","hmsv":"h:mm:ss a v","Hmsv":"HH:mm:ss v","hmv":"h:mm a v","Hmv":"HH:mm v","M":"L","Md":"d/M","MEd":"E, dd/MM","MMdd":"dd/MM","MMM":"LLL","MMMd":"d 'de' MMM","MMMEd":"E, d 'de' MMM","MMMMd":"d 'de' MMMM","MMMMEd":"E, d 'de' MMMM","MMMMW-count-one":"W'ª' 'semana' 'de' MMMM","MMMMW-count-other":"W'ª' 'semana' 'de' MMMM","ms":"mm:ss","y":"y","yM":"MM/y","yMd":"dd/MM/y","yMEd":"E, dd/MM/y","yMM":"MM/y","yMMM":"MMM 'de' y","yMMMd":"d 'de' MMM 'de' y","yMMMEd":"E, d 'de' MMM 'de' y","yMMMM":"MMMM 'de' y","yMMMMd":"d 'de' MMMM 'de' y","yMMMMEd":"E, d 'de' MMMM 'de' y","yQQQ":"QQQ 'de' y","yQQQQ":"QQQQ 'de' y","yw-count-one":"w'ª' 'semana' 'de' Y","yw-count-other":"w'ª' 'semana' 'de' Y"},"appendItems":{"Day":"{0} ({2}: {1})","Day-Of-Week":"{0} {1}","Era":"{1} {0}","Hour":"{0} ({2}: {1})","Minute":"{0} ({2}: {1})","Month":"{0} ({2}: {1})","Quarter":"{0} ({2}: {1})","Second":"{0} ({2}: {1})","Timezone":"{0} {1}","Week":"{0} ({2}: {1})","Year":"{1} {0}"},"intervalFormats":{"intervalFormatFallback":"{0} - {1}","d":{"d":"d – d"},"h":{"a":"h a – h a","h":"h – h a"},"H":{"H":"HH'h' - HH'h'"},"hm":{"a":"h:mm a – h:mm a","h":"h:mm – h:mm a","m":"h:mm – h:mm a"},"Hm":{"H":"HH:mm – HH:mm","m":"HH:mm – HH:mm"},"hmv":{"a":"h:mm a – h:mm a v","h":"h:mm – h:mm a v","m":"h:mm – h:mm a v"},"Hmv":{"H":"HH:mm – HH:mm v","m":"HH:mm – HH:mm v"},"hv":{"a":"h a – h a v","h":"h – h a v"},"Hv":{"H":"HH – HH v"},"M":{"M":"M – M"},"Md":{"d":"dd/MM – dd/MM","M":"dd/MM – dd/MM"},"MEd":{"d":"E, dd/MM – E, dd/MM","M":"E, dd/MM – E, dd/MM"},"MMM":{"M":"MMM – MMM"},"MMMd":{"d":"d – d 'de' MMM","M":"d 'de' MMM – d 'de' MMM"},"MMMEd":{"d":"E, d – E, d 'de' MMM","M":"E, d 'de' MMM – E, d 'de' MMM"},"y":{"y":"y – y"},"yM":{"M":"MM/y – MM/y","y":"MM/y – MM/y"},"yMd":{"d":"dd/MM/y – dd/MM/y","M":"dd/MM/y – dd/MM/y","y":"dd/MM/y – dd/MM/y"},"yMEd":{"d":"E, dd/MM/y – E, dd/MM/y","M":"E, dd/MM/y – E, dd/MM/y","y":"E, dd/MM/y – E, dd/MM/y"},"yMMM":{"M":"MMM – MMM 'de' y","y":"MMM 'de' y – MMM 'de' y"},"yMMMd":{"d":"d – d 'de' MMM 'de' y","M":"d 'de' MMM – d 'de' MMM 'de' y","y":"d 'de' MMM 'de' y – d 'de' MMM 'de' y"},"yMMMEd":{"d":"E, d – E, d 'de' MMM 'de' y","M":"E, d 'de' MMM – E, d 'de' MMM 'de' y","y":"E, d 'de' MMM 'de' y – E, d 'de' MMM 'de' y"},"yMMMM":{"M":"MMMM – MMMM 'de' y","y":"MMMM 'de' y – MMMM 'de' y"}}}}},"fields":{"era":{"displayName":"era"},"era-short":{"displayName":"era"},"era-narrow":{"displayName":"era"},"year":{"displayName":"ano","relative-type--1":"ano passado","relative-type-0":"este ano","relative-type-1":"próximo ano","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} ano","relativeTimePattern-count-other":"em {0} anos"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ano atrás","relativeTimePattern-count-other":"{0} anos atrás"}},"year-short":{"displayName":"ano","relative-type--1":"ano passado","relative-type-0":"este ano","relative-type-1":"próximo ano","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} ano","relativeTimePattern-count-other":"em {0} anos"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ano atrás","relativeTimePattern-count-other":"{0} anos atrás"}},"year-narrow":{"displayName":"ano","relative-type--1":"ano passado","relative-type-0":"este ano","relative-type-1":"próximo ano","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} ano","relativeTimePattern-count-other":"em {0} anos"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ano atrás","relativeTimePattern-count-other":"{0} anos atrás"}},"quarter":{"displayName":"trimestre","relative-type--1":"último trimestre","relative-type-0":"este trimestre","relative-type-1":"próximo trimestre","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} trimestre","relativeTimePattern-count-other":"em {0} trimestres"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} trimestre atrás","relativeTimePattern-count-other":"{0} trimestres atrás"}},"quarter-short":{"displayName":"trim.","relative-type--1":"último trimestre","relative-type-0":"este trimestre","relative-type-1":"próximo trimestre","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} trim.","relativeTimePattern-count-other":"em {0} trim."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} trim. atrás","relativeTimePattern-count-other":"{0} trim. atrás"}},"quarter-narrow":{"displayName":"trim.","relative-type--1":"último trimestre","relative-type-0":"este trimestre","relative-type-1":"próximo trimestre","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} trim.","relativeTimePattern-count-other":"em {0} trim."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} trim. atrás","relativeTimePattern-count-other":"{0} trim. atrás"}},"month":{"displayName":"mês","relative-type--1":"mês passado","relative-type-0":"este mês","relative-type-1":"próximo mês","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} mês","relativeTimePattern-count-other":"em {0} meses"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} mês atrás","relativeTimePattern-count-other":"{0} meses atrás"}},"month-short":{"displayName":"mês","relative-type--1":"mês passado","relative-type-0":"este mês","relative-type-1":"próximo mês","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} mês","relativeTimePattern-count-other":"em {0} meses"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} mês atrás","relativeTimePattern-count-other":"{0} meses atrás"}},"month-narrow":{"displayName":"mês","relative-type--1":"mês passado","relative-type-0":"este mês","relative-type-1":"próximo mês","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} mês","relativeTimePattern-count-other":"em {0} meses"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} mês atrás","relativeTimePattern-count-other":"{0} meses atrás"}},"week":{"displayName":"semana","relative-type--1":"semana passada","relative-type-0":"esta semana","relative-type-1":"próxima semana","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} semana","relativeTimePattern-count-other":"em {0} semanas"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} semana atrás","relativeTimePattern-count-other":"{0} semanas atrás"},"relativePeriod":"a semana de {0}"},"week-short":{"displayName":"sem.","relative-type--1":"semana passada","relative-type-0":"esta semana","relative-type-1":"próxima semana","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} sem.","relativeTimePattern-count-other":"em {0} sem."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} sem. atrás","relativeTimePattern-count-other":"{0} sem. atrás"},"relativePeriod":"a semana de {0}"},"week-narrow":{"displayName":"sem.","relative-type--1":"semana passada","relative-type-0":"esta semana","relative-type-1":"próxima semana","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} sem.","relativeTimePattern-count-other":"em {0} sem."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} sem. atrás","relativeTimePattern-count-other":"{0} sem. atrás"},"relativePeriod":"a semana de {0}"},"weekOfMonth":{"displayName":"semana do mês"},"weekOfMonth-short":{"displayName":"sem. do mês"},"weekOfMonth-narrow":{"displayName":"sem. do mês"},"day":{"displayName":"dia","relative-type--2":"anteontem","relative-type--1":"ontem","relative-type-0":"hoje","relative-type-1":"amanhã","relative-type-2":"depois de amanhã","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} dia","relativeTimePattern-count-other":"em {0} dias"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} dia atrás","relativeTimePattern-count-other":"{0} dias atrás"}},"day-short":{"displayName":"dia","relative-type--2":"anteontem","relative-type--1":"ontem","relative-type-0":"hoje","relative-type-1":"amanhã","relative-type-2":"depois de amanhã","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} dia","relativeTimePattern-count-other":"em {0} dias"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} dia atrás","relativeTimePattern-count-other":"{0} dias atrás"}},"day-narrow":{"displayName":"dia","relative-type--2":"anteontem","relative-type--1":"ontem","relative-type-0":"hoje","relative-type-1":"amanhã","relative-type-2":"depois de amanhã","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} dia","relativeTimePattern-count-other":"em {0} dias"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} dia atrás","relativeTimePattern-count-other":"{0} dias atrás"}},"dayOfYear":{"displayName":"dia do ano"},"dayOfYear-short":{"displayName":"dia do ano"},"dayOfYear-narrow":{"displayName":"dia do ano"},"weekday":{"displayName":"dia da semana"},"weekday-short":{"displayName":"dia da sem."},"weekday-narrow":{"displayName":"dia da sem."},"weekdayOfMonth":{"displayName":"dia da semana do mês"},"weekdayOfMonth-short":{"displayName":"dia da sem. do mês"},"weekdayOfMonth-narrow":{"displayName":"dia da sem. do mês"},"sun":{"relative-type--1":"domingo passado","relative-type-0":"este domingo","relative-type-1":"próximo domingo","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} domingo","relativeTimePattern-count-other":"em {0} domingos"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} domingo atrás","relativeTimePattern-count-other":"{0} domingos atrás"}},"sun-short":{"relative-type--1":"dom. passado","relative-type-0":"este dom.","relative-type-1":"próximo dom.","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} dom.","relativeTimePattern-count-other":"em {0} dom."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} dom. atrás","relativeTimePattern-count-other":"{0} dom. atrás"}},"sun-narrow":{"relative-type--1":"dom. passado","relative-type-0":"este dom.","relative-type-1":"próximo dom.","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} dom.","relativeTimePattern-count-other":"em {0} dom."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} dom. atrás","relativeTimePattern-count-other":"{0} dom. atrás"}},"mon":{"relative-type--1":"segunda-feira passada","relative-type-0":"esta segunda-feira","relative-type-1":"próxima segunda-feira","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} segunda-feira","relativeTimePattern-count-other":"em {0} segundas-feiras"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} segunda-feira atrás","relativeTimePattern-count-other":"{{0} segundas-feiras atrás"}},"mon-short":{"relative-type--1":"seg. passada","relative-type-0":"esta seg.","relative-type-1":"próxima seg.","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} seg.","relativeTimePattern-count-other":"em {0} seg."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} seg. atrás","relativeTimePattern-count-other":"{0} seg. atrás"}},"mon-narrow":{"relative-type--1":"seg. passada","relative-type-0":"esta seg.","relative-type-1":"próxima seg.","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} seg.","relativeTimePattern-count-other":"em {0} seg."},"relativeTime-type-past":{"relativeTimePattern-count-one":"há {0} segundas-feiras","relativeTimePattern-count-other":"há {0} segundas-feiras"}},"tue":{"relative-type--1":"terça-feira passada","relative-type-0":"esta terça-feira","relative-type-1":"próxima terça-feira","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} terça-feira","relativeTimePattern-count-other":"em {0} terças-feiras"},"relativeTime-type-past":{"relativeTimePattern-count-one":"há {0} terça-feira","relativeTimePattern-count-other":"há {0} terças-feiras"}},"tue-short":{"relative-type--1":"ter. passada","relative-type-0":"esta ter.","relative-type-1":"próxima ter.","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} terças-feiras","relativeTimePattern-count-other":"em {0} terças-feiras"},"relativeTime-type-past":{"relativeTimePattern-count-one":"há {0} terças-feiras","relativeTimePattern-count-other":"há {0} terças-feiras"}},"tue-narrow":{"relative-type--1":"ter. passada","relative-type-0":"esta ter.","relative-type-1":"próxima ter.","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} terças-feiras","relativeTimePattern-count-other":"em {0} terças-feiras"},"relativeTime-type-past":{"relativeTimePattern-count-one":"há {0} terças-feiras","relativeTimePattern-count-other":"há {0} terças-feiras"}},"wed":{"relative-type--1":"quarta-feira passada","relative-type-0":"esta quarta-feira","relative-type-1":"próxima quarta-feira","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} quartas-feiras","relativeTimePattern-count-other":"em {0} quartas-feiras"},"relativeTime-type-past":{"relativeTimePattern-count-one":"há {0} quartas-feiras","relativeTimePattern-count-other":"há {0} quartas-feiras"}},"wed-short":{"relative-type--1":"qua. passada","relative-type-0":"esta qua.","relative-type-1":"próxima qua.","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} quartas-feiras","relativeTimePattern-count-other":"em {0} quartas-feiras"},"relativeTime-type-past":{"relativeTimePattern-count-one":"há {0} quartas-feiras","relativeTimePattern-count-other":"há {0} quartas-feiras"}},"wed-narrow":{"relative-type--1":"qua. passada","relative-type-0":"esta qua.","relative-type-1":"próxima qua.","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} quartas-feiras","relativeTimePattern-count-other":"em {0} quartas-feiras"},"relativeTime-type-past":{"relativeTimePattern-count-one":"há {0} quartas-feiras","relativeTimePattern-count-other":"há {0} quartas-feiras"}},"thu":{"relative-type--1":"quinta-feira passada","relative-type-0":"esta quinta-feira","relative-type-1":"próxima quinta-feira","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} quintas-feiras","relativeTimePattern-count-other":"em {0} quintas-feiras"},"relativeTime-type-past":{"relativeTimePattern-count-one":"há {0} quintas-feiras","relativeTimePattern-count-other":"há {0} quintas-feiras"}},"thu-short":{"relative-type--1":"qui. passada","relative-type-0":"esta qui.","relative-type-1":"próx. qui","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} quintas-feiras","relativeTimePattern-count-other":"em {0} quintas-feiras"},"relativeTime-type-past":{"relativeTimePattern-count-one":"há {0} quintas-feiras","relativeTimePattern-count-other":"há {0} quintas-feiras"}},"thu-narrow":{"relative-type--1":"qui. passada","relative-type-0":"esta qui.","relative-type-1":"próx. qui","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} quintas-feiras","relativeTimePattern-count-other":"em {0} quintas-feiras"},"relativeTime-type-past":{"relativeTimePattern-count-one":"há {0} quintas-feiras","relativeTimePattern-count-other":"há {0} quintas-feiras"}},"fri":{"relative-type--1":"sexta-feira passada","relative-type-0":"esta sexta-feira","relative-type-1":"próxima sexta-feira","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} sextas-feiras","relativeTimePattern-count-other":"em {0} sextas-feiras"},"relativeTime-type-past":{"relativeTimePattern-count-one":"há {0} sextas-feiras","relativeTimePattern-count-other":"há {0} sextas-feiras"}},"fri-short":{"relative-type--1":"sex. passada","relative-type-0":"esta sex.","relative-type-1":"próxima sex.","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} sextas-feiras","relativeTimePattern-count-other":"em {0} sextas-feiras"},"relativeTime-type-past":{"relativeTimePattern-count-one":"há {0} sextas-feiras","relativeTimePattern-count-other":"há {0} sextas-feiras"}},"fri-narrow":{"relative-type--1":"sex. passada","relative-type-0":"esta sex.","relative-type-1":"próxima sex.","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} sextas-feiras","relativeTimePattern-count-other":"em {0} sextas-feiras"},"relativeTime-type-past":{"relativeTimePattern-count-one":"há {0} sextas-feiras","relativeTimePattern-count-other":"há {0} sextas-feiras"}},"sat":{"relative-type--1":"sábado passado","relative-type-0":"este sábado","relative-type-1":"próximo sábado","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} sábado","relativeTimePattern-count-other":"em {0} sábados"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} sábado atrás","relativeTimePattern-count-other":"{0} sábados atrás"}},"sat-short":{"relative-type--1":"sáb. passado","relative-type-0":"este sáb.","relative-type-1":"próximo sáb.","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} sáb.","relativeTimePattern-count-other":"em {0} sáb."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} sáb. atrás","relativeTimePattern-count-other":"{0} sáb. atrás"}},"sat-narrow":{"relative-type--1":"sáb. passado","relative-type-0":"este sáb.","relative-type-1":"próximo sáb.","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} sáb.","relativeTimePattern-count-other":"em {0} sáb."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} sáb. atrás","relativeTimePattern-count-other":"{0} sáb. atrás"}},"dayperiod-short":{"displayName":"AM/PM"},"dayperiod":{"displayName":"AM/PM"},"dayperiod-narrow":{"displayName":"AM/PM"},"hour":{"displayName":"hora","relative-type-0":"esta hora","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} hora","relativeTimePattern-count-other":"em {0} horas"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} hora atrás","relativeTimePattern-count-other":"{0} horas atrás"}},"hour-short":{"displayName":"h","relative-type-0":"esta hora","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} h","relativeTimePattern-count-other":"em {0} h"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} h atrás","relativeTimePattern-count-other":"{0} h atrás"}},"hour-narrow":{"displayName":"h","relative-type-0":"esta hora","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} h","relativeTimePattern-count-other":"em {0} h"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} h atrás","relativeTimePattern-count-other":"{0} h atrás"}},"minute":{"displayName":"minuto","relative-type-0":"este minuto","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} minuto","relativeTimePattern-count-other":"em {0} minutos"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} minuto atrás","relativeTimePattern-count-other":"{0} minutos atrás"}},"minute-short":{"displayName":"min.","relative-type-0":"este minuto","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} min.","relativeTimePattern-count-other":"em {0} min."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} min. atrás","relativeTimePattern-count-other":"{0} min. atrás"}},"minute-narrow":{"displayName":"min.","relative-type-0":"este minuto","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} min.","relativeTimePattern-count-other":"em {0} min."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} min. atrás","relativeTimePattern-count-other":"{0} min. atrás"}},"second":{"displayName":"segundo","relative-type-0":"agora","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} segundo","relativeTimePattern-count-other":"em {0} segundos"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} segundo atrás","relativeTimePattern-count-other":"{0} segundos atrás"}},"second-short":{"displayName":"seg.","relative-type-0":"agora","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} seg.","relativeTimePattern-count-other":"em {0} seg."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} seg. atrás","relativeTimePattern-count-other":"{0} seg. atrás"}},"second-narrow":{"displayName":"seg.","relative-type-0":"agora","relativeTime-type-future":{"relativeTimePattern-count-one":"em {0} seg.","relativeTimePattern-count-other":"em {0} seg."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} seg. atrás","relativeTimePattern-count-other":"{0} seg. atrás"}},"zone":{"displayName":"fuso horário"},"zone-short":{"displayName":"fuso"},"zone-narrow":{"displayName":"fuso"}}},"numbers":{"currencies":{"ADP":{"displayName":"Peseta de Andorra","displayName-count-one":"Peseta de Andorra","displayName-count-other":"Pesetas de Andorra","symbol":"ADP"},"AED":{"displayName":"Dirrã dos Emirados Árabes Unidos","displayName-count-one":"Dirrã dos Emirados Árabes Unidos","displayName-count-other":"Dirrãs dos Emirados Árabes Unidos","symbol":"AED"},"AFA":{"displayName":"Afegane (1927–2002)","displayName-count-one":"Afegane do Afeganistão (AFA)","displayName-count-other":"Afeganes do Afeganistão (AFA)","symbol":"AFA"},"AFN":{"displayName":"Afegane afegão","displayName-count-one":"Afegane afegão","displayName-count-other":"Afeganes afegãos","symbol":"AFN"},"ALK":{"displayName":"Lek Albanês (1946–1965)","displayName-count-one":"Lek Albanês (1946–1965)","displayName-count-other":"Leks Albaneses (1946–1965)","symbol":"ALK"},"ALL":{"displayName":"Lek albanês","displayName-count-one":"Lek albanês","displayName-count-other":"Leks albaneses","symbol":"ALL"},"AMD":{"displayName":"Dram armênio","displayName-count-one":"Dram armênio","displayName-count-other":"Drams armênios","symbol":"AMD"},"ANG":{"displayName":"Florim das Antilhas Holandesas","displayName-count-one":"Florim das Antilhas Holandesas","displayName-count-other":"Florins das Antilhas Holandesas","symbol":"ANG"},"AOA":{"displayName":"Kwanza angolano","displayName-count-one":"Kwanza angolano","displayName-count-other":"Kwanzas angolanos","symbol":"AOA","symbol-alt-narrow":"Kz"},"AOK":{"displayName":"Cuanza angolano (1977–1990)","displayName-count-one":"Kwanza angolano (AOK)","displayName-count-other":"Kwanzas angolanos (AOK)","symbol":"AOK"},"AON":{"displayName":"Novo cuanza angolano (1990–2000)","displayName-count-one":"Novo kwanza angolano (AON)","displayName-count-other":"Novos kwanzas angolanos (AON)","symbol":"AON"},"AOR":{"displayName":"Cuanza angolano reajustado (1995–1999)","displayName-count-one":"Kwanza angolano reajustado (AOR)","displayName-count-other":"Kwanzas angolanos reajustados (AOR)","symbol":"AOR"},"ARA":{"displayName":"Austral argentino","displayName-count-one":"Austral argentino","displayName-count-other":"Austrais argentinos","symbol":"ARA"},"ARL":{"displayName":"Peso lei argentino (1970–1983)","displayName-count-one":"Peso lei argentino (1970–1983)","displayName-count-other":"Pesos lei argentinos (1970–1983)","symbol":"ARL"},"ARM":{"displayName":"Peso argentino (1881–1970)","displayName-count-one":"Peso argentino (1881–1970)","displayName-count-other":"Pesos argentinos (1881–1970)","symbol":"ARM"},"ARP":{"displayName":"Peso argentino (1983–1985)","displayName-count-one":"Peso argentino (1983–1985)","displayName-count-other":"Pesos argentinos (1983–1985)","symbol":"ARP"},"ARS":{"displayName":"Peso argentino","displayName-count-one":"Peso argentino","displayName-count-other":"Pesos argentinos","symbol":"ARS","symbol-alt-narrow":"$"},"ATS":{"displayName":"Xelim austríaco","displayName-count-one":"Schilling australiano","displayName-count-other":"Schillings australianos","symbol":"ATS"},"AUD":{"displayName":"Dólar australiano","displayName-count-one":"Dólar australiano","displayName-count-other":"Dólares australianos","symbol":"AU$","symbol-alt-narrow":"$"},"AWG":{"displayName":"Florim arubano","displayName-count-one":"Florim arubano","displayName-count-other":"Florins arubanos","symbol":"AWG"},"AZM":{"displayName":"Manat azerbaijano (1993–2006)","displayName-count-one":"Manat do Azeibaijão (1993–2006)","displayName-count-other":"Manats do Azeibaijão (1993–2006)","symbol":"AZM"},"AZN":{"displayName":"Manat azeri","displayName-count-one":"Manat azeri","displayName-count-other":"Manats azeris","symbol":"AZN"},"BAD":{"displayName":"Dinar da Bósnia-Herzegovina (1992–1994)","displayName-count-one":"Dinar da Bósnia Herzegovina","displayName-count-other":"Dinares da Bósnia Herzegovina","symbol":"BAD"},"BAM":{"displayName":"Marco conversível da Bósnia e Herzegovina","displayName-count-one":"Marco conversível da Bósnia e Herzegovina","displayName-count-other":"Marcos conversíveis da Bósnia e Herzegovina","symbol":"BAM","symbol-alt-narrow":"KM"},"BAN":{"displayName":"Novo dinar da Bósnia-Herzegovina (1994–1997)","displayName-count-one":"Novo dinar da Bósnia-Herzegovina","displayName-count-other":"Novos dinares da Bósnia-Herzegovina","symbol":"BAN"},"BBD":{"displayName":"Dólar barbadense","displayName-count-one":"Dólar barbadense","displayName-count-other":"Dólares barbadenses","symbol":"BBD","symbol-alt-narrow":"$"},"BDT":{"displayName":"Taka bengalesa","displayName-count-one":"Taka bengalesa","displayName-count-other":"Takas bengalesas","symbol":"BDT","symbol-alt-narrow":"৳"},"BEC":{"displayName":"Franco belga (conversível)","displayName-count-one":"Franco belga (conversível)","displayName-count-other":"Francos belgas (conversíveis)","symbol":"BEC"},"BEF":{"displayName":"Franco belga","displayName-count-one":"Franco belga","displayName-count-other":"Francos belgas","symbol":"BEF"},"BEL":{"displayName":"Franco belga (financeiro)","displayName-count-one":"Franco belga (financeiro)","displayName-count-other":"Francos belgas (financeiros)","symbol":"BEL"},"BGL":{"displayName":"Lev forte búlgaro","displayName-count-one":"Lev forte búlgaro","displayName-count-other":"Levs fortes búlgaros","symbol":"BGL"},"BGM":{"displayName":"Lev socialista búlgaro","displayName-count-one":"Lev socialista búlgaro","displayName-count-other":"Levs socialistas búlgaros","symbol":"BGM"},"BGN":{"displayName":"Lev búlgaro","displayName-count-one":"Lev búlgaro","displayName-count-other":"Levs búlgaros","symbol":"BGN"},"BGO":{"displayName":"Lev búlgaro (1879–1952)","displayName-count-one":"Lev búlgaro (1879–1952)","displayName-count-other":"Levs búlgaros (1879–1952)","symbol":"BGO"},"BHD":{"displayName":"Dinar bareinita","displayName-count-one":"Dinar bareinita","displayName-count-other":"Dinares bareinitas","symbol":"BHD"},"BIF":{"displayName":"Franco burundiano","displayName-count-one":"Franco burundiano","displayName-count-other":"Francos burundianos","symbol":"BIF"},"BMD":{"displayName":"Dólar bermudense","displayName-count-one":"Dólar bermudense","displayName-count-other":"Dólares bermudenses","symbol":"BMD","symbol-alt-narrow":"$"},"BND":{"displayName":"Dólar bruneano","displayName-count-one":"Dólar bruneano","displayName-count-other":"Dólares bruneanos","symbol":"BND","symbol-alt-narrow":"$"},"BOB":{"displayName":"Boliviano","displayName-count-one":"Boliviano","displayName-count-other":"Bolivianos","symbol":"BOB","symbol-alt-narrow":"Bs"},"BOL":{"displayName":"Boliviano (1863–1963)","displayName-count-one":"Boliviano (1863–1963)","displayName-count-other":"Bolivianos (1863–1963)","symbol":"BOL"},"BOP":{"displayName":"Peso boliviano","displayName-count-one":"Peso boliviano","displayName-count-other":"Pesos bolivianos","symbol":"BOP"},"BOV":{"displayName":"Mvdol boliviano","displayName-count-one":"Mvdol boliviano","displayName-count-other":"Mvdols bolivianos","symbol":"BOV"},"BRB":{"displayName":"Cruzeiro novo brasileiro (1967–1986)","displayName-count-one":"Cruzeiro novo brasileiro (BRB)","displayName-count-other":"Cruzeiros novos brasileiros (BRB)","symbol":"BRB"},"BRC":{"displayName":"Cruzado brasileiro (1986–1989)","displayName-count-one":"Cruzado brasileiro","displayName-count-other":"Cruzados brasileiros","symbol":"BRC"},"BRE":{"displayName":"Cruzeiro brasileiro (1990–1993)","displayName-count-one":"Cruzeiro brasileiro (BRE)","displayName-count-other":"Cruzeiros brasileiros (BRE)","symbol":"BRE"},"BRL":{"displayName":"Real brasileiro","displayName-count-one":"Real brasileiro","displayName-count-other":"Reais brasileiros","symbol":"R$","symbol-alt-narrow":"R$"},"BRN":{"displayName":"Cruzado novo brasileiro (1989–1990)","displayName-count-one":"Cruzado novo brasileiro","displayName-count-other":"Cruzados novos brasileiros","symbol":"BRN"},"BRR":{"displayName":"Cruzeiro brasileiro (1993–1994)","displayName-count-one":"Cruzeiro brasileiro","displayName-count-other":"Cruzeiros brasileiros","symbol":"BRR"},"BRZ":{"displayName":"Cruzeiro brasileiro (1942–1967)","displayName-count-one":"Cruzeiro brasileiro antigo","displayName-count-other":"Cruzeiros brasileiros antigos","symbol":"BRZ"},"BSD":{"displayName":"Dólar bahamense","displayName-count-one":"Dólar bahamense","displayName-count-other":"Dólares bahamenses","symbol":"BSD","symbol-alt-narrow":"$"},"BTN":{"displayName":"Ngultrum butanês","displayName-count-one":"Ngultrum butanês","displayName-count-other":"Ngultruns butaneses","symbol":"BTN"},"BUK":{"displayName":"Kyat birmanês","displayName-count-one":"Kyat burmês","displayName-count-other":"Kyats burmeses","symbol":"BUK"},"BWP":{"displayName":"Pula botsuanesa","displayName-count-one":"Pula botsuanesa","displayName-count-other":"Pulas botsuanesas","symbol":"BWP","symbol-alt-narrow":"P"},"BYB":{"displayName":"Rublo novo bielo-russo (1994–1999)","displayName-count-one":"Novo rublo bielorusso (BYB)","displayName-count-other":"Novos rublos bielorussos (BYB)","symbol":"BYB"},"BYN":{"displayName":"Rublo bielorrusso","displayName-count-one":"Rublo bielorrusso","displayName-count-other":"Rublos bielorrussos","symbol":"BYN","symbol-alt-narrow":"р."},"BYR":{"displayName":"Rublo bielorrusso (2000–2016)","displayName-count-one":"Rublo bielorrusso (2000–2016)","displayName-count-other":"Rublos bielorrussos (2000–2016)","symbol":"BYR"},"BZD":{"displayName":"Dólar belizenho","displayName-count-one":"Dólar belizenho","displayName-count-other":"Dólares belizenhos","symbol":"BZD","symbol-alt-narrow":"$"},"CAD":{"displayName":"Dólar canadense","displayName-count-one":"Dólar canadense","displayName-count-other":"Dólares canadenses","symbol":"CA$","symbol-alt-narrow":"$"},"CDF":{"displayName":"Franco congolês","displayName-count-one":"Franco congolês","displayName-count-other":"Francos congoleses","symbol":"CDF"},"CHE":{"displayName":"Euro WIR","displayName-count-one":"Euro WIR","displayName-count-other":"Euros WIR","symbol":"CHE"},"CHF":{"displayName":"Franco suíço","displayName-count-one":"Franco suíço","displayName-count-other":"Francos suíços","symbol":"CHF"},"CHW":{"displayName":"Franco WIR","displayName-count-one":"Franco WIR","displayName-count-other":"Francos WIR","symbol":"CHW"},"CLE":{"displayName":"Escudo chileno","displayName-count-one":"Escudo chileno","displayName-count-other":"Escudos chilenos","symbol":"CLE"},"CLF":{"displayName":"Unidades de Fomento chilenas","displayName-count-one":"Unidade de fomento chilena","displayName-count-other":"Unidades de fomento chilenas","symbol":"CLF"},"CLP":{"displayName":"Peso chileno","displayName-count-one":"Peso chileno","displayName-count-other":"Pesos chilenos","symbol":"CLP","symbol-alt-narrow":"$"},"CNH":{"displayName":"Yuan (offshore)","displayName-count-one":"Yuan (offshore)","displayName-count-other":"Yuans (offshore)","symbol":"CNH"},"CNX":{"displayName":"Dólar do Banco Popular da China","displayName-count-one":"Dólar do Banco Popular da China","displayName-count-other":"Dólares do Banco Popular da China","symbol":"CNX"},"CNY":{"displayName":"Yuan chinês","displayName-count-one":"Yuan chinês","displayName-count-other":"Yuans chineses","symbol":"CN¥","symbol-alt-narrow":"¥"},"COP":{"displayName":"Peso colombiano","displayName-count-one":"Peso colombiano","displayName-count-other":"Pesos colombianos","symbol":"COP","symbol-alt-narrow":"$"},"COU":{"displayName":"Unidade de Valor Real","displayName-count-one":"Unidade de valor real","displayName-count-other":"Unidades de valor real","symbol":"COU"},"CRC":{"displayName":"Colón costarriquenho","displayName-count-one":"Colón costarriquenho","displayName-count-other":"Colóns costarriquenhos","symbol":"CRC","symbol-alt-narrow":"₡"},"CSD":{"displayName":"Dinar sérvio (2002–2006)","displayName-count-one":"Dinar antigo da Sérvia","displayName-count-other":"Dinares antigos da Sérvia","symbol":"CSD"},"CSK":{"displayName":"Coroa Forte checoslovaca","displayName-count-one":"Coroa forte tchecoslovaca","displayName-count-other":"Coroas fortes tchecoslovacas","symbol":"CSK"},"CUC":{"displayName":"Peso cubano conversível","displayName-count-one":"Peso cubano conversível","displayName-count-other":"Pesos cubanos conversíveis","symbol":"CUC","symbol-alt-narrow":"$"},"CUP":{"displayName":"Peso cubano","displayName-count-one":"Peso cubano","displayName-count-other":"Pesos cubanos","symbol":"CUP","symbol-alt-narrow":"$"},"CVE":{"displayName":"Escudo cabo-verdiano","displayName-count-one":"Escudo cabo-verdiano","displayName-count-other":"Escudos cabo-verdianos","symbol":"CVE"},"CYP":{"displayName":"Libra cipriota","displayName-count-one":"Libra cipriota","displayName-count-other":"Libras cipriotas","symbol":"CYP"},"CZK":{"displayName":"Coroa tcheca","displayName-count-one":"Coroa tcheca","displayName-count-other":"Coroas tchecas","symbol":"CZK","symbol-alt-narrow":"Kč"},"DDM":{"displayName":"Ostmark da Alemanha Oriental","displayName-count-one":"Marco da Alemanha Oriental","displayName-count-other":"Marcos da Alemanha Oriental","symbol":"DDM"},"DEM":{"displayName":"Marco alemão","displayName-count-one":"Marco alemão","displayName-count-other":"Marcos alemães","symbol":"DEM"},"DJF":{"displayName":"Franco djiboutiano","displayName-count-one":"Franco djiboutiano","displayName-count-other":"Francos djiboutianos","symbol":"DJF"},"DKK":{"displayName":"Coroa dinamarquesa","displayName-count-one":"Coroa dinamarquesa","displayName-count-other":"Coroas dinamarquesas","symbol":"DKK","symbol-alt-narrow":"kr"},"DOP":{"displayName":"Peso dominicano","displayName-count-one":"Peso dominicano","displayName-count-other":"Pesos dominicanos","symbol":"DOP","symbol-alt-narrow":"$"},"DZD":{"displayName":"Dinar argelino","displayName-count-one":"Dinar argelino","displayName-count-other":"Dinares argelinos","symbol":"DZD"},"ECS":{"displayName":"Sucre equatoriano","displayName-count-one":"Sucre equatoriano","displayName-count-other":"Sucres equatorianos","symbol":"ECS"},"ECV":{"displayName":"Unidade de Valor Constante (UVC) do Equador","displayName-count-one":"Unidade de valor constante equatoriana (UVC)","displayName-count-other":"Unidades de valor constante equatorianas (UVC)","symbol":"ECV"},"EEK":{"displayName":"Coroa estoniana","displayName-count-one":"Coroa estoniana","displayName-count-other":"Coroas estonianas","symbol":"EEK"},"EGP":{"displayName":"Libra egípcia","displayName-count-one":"Libra egípcia","displayName-count-other":"Libras egípcias","symbol":"EGP","symbol-alt-narrow":"E£"},"ERN":{"displayName":"Nakfa da Eritreia","displayName-count-one":"Nakfa da Eritreia","displayName-count-other":"Nakfas da Eritreia","symbol":"ERN"},"ESA":{"displayName":"Peseta espanhola (conta A)","displayName-count-one":"Peseta espanhola (conta A)","displayName-count-other":"Pesetas espanholas (conta A)","symbol":"ESA"},"ESB":{"displayName":"Peseta espanhola (conta conversível)","displayName-count-one":"Peseta espanhola (conta conversível)","displayName-count-other":"Pesetas espanholas (conta conversível)","symbol":"ESB"},"ESP":{"displayName":"Peseta espanhola","displayName-count-one":"Peseta espanhola","displayName-count-other":"Pesetas espanholas","symbol":"ESP","symbol-alt-narrow":"₧"},"ETB":{"displayName":"Birr etíope","displayName-count-one":"Birr etíope","displayName-count-other":"Birrs etíopes","symbol":"ETB"},"EUR":{"displayName":"Euro","displayName-count-one":"Euro","displayName-count-other":"Euros","symbol":"€","symbol-alt-narrow":"€"},"FIM":{"displayName":"Marca finlandesa","displayName-count-one":"Marco finlandês","displayName-count-other":"Marcos finlandeses","symbol":"FIM"},"FJD":{"displayName":"Dólar fijiano","displayName-count-one":"Dólar fijiano","displayName-count-other":"Dólares fijianos","symbol":"FJD","symbol-alt-narrow":"$"},"FKP":{"displayName":"Libra malvinense","displayName-count-one":"Libra malvinense","displayName-count-other":"Libras malvinenses","symbol":"FKP","symbol-alt-narrow":"£"},"FRF":{"displayName":"Franco francês","displayName-count-one":"Franco francês","displayName-count-other":"Francos franceses","symbol":"FRF"},"GBP":{"displayName":"Libra esterlina","displayName-count-one":"Libra esterlina","displayName-count-other":"Libras esterlinas","symbol":"£","symbol-alt-narrow":"£"},"GEK":{"displayName":"Cupom Lari georgiano","displayName-count-one":"Kupon larit da Geórgia","displayName-count-other":"Kupon larits da Geórgia","symbol":"GEK"},"GEL":{"displayName":"Lari georgiano","displayName-count-one":"Lari georgiano","displayName-count-other":"Laris georgianos","symbol":"GEL","symbol-alt-narrow":"₾","symbol-alt-variant":"₾"},"GHC":{"displayName":"Cedi de Gana (1979–2007)","displayName-count-one":"Cedi de Gana (1979–2007)","displayName-count-other":"Cedis de Gana (1979–2007)","symbol":"GHC"},"GHS":{"displayName":"Cedi ganês","displayName-count-one":"Cedi ganês","displayName-count-other":"Cedis ganeses","symbol":"GHS"},"GIP":{"displayName":"Libra de Gibraltar","displayName-count-one":"Libra de Gibraltar","displayName-count-other":"Libras de Gibraltar","symbol":"GIP","symbol-alt-narrow":"£"},"GMD":{"displayName":"Dalasi gambiano","displayName-count-one":"Dalasi gambiano","displayName-count-other":"Dalasis gambianos","symbol":"GMD"},"GNF":{"displayName":"Franco guineano","displayName-count-one":"Franco guineano","displayName-count-other":"Francos guineanos","symbol":"GNF","symbol-alt-narrow":"FG"},"GNS":{"displayName":"Syli da Guiné","displayName-count-one":"Syli guineano","displayName-count-other":"Sylis guineanos","symbol":"GNS"},"GQE":{"displayName":"Ekwele da Guiné Equatorial","displayName-count-one":"Ekwele da Guiné Equatorial","displayName-count-other":"Ekweles da Guiné Equatorial","symbol":"GQE"},"GRD":{"displayName":"Dracma grego","displayName-count-one":"Dracma grego","displayName-count-other":"Dracmas gregos","symbol":"GRD"},"GTQ":{"displayName":"Quetzal guatemalteco","displayName-count-one":"Quetzal guatemalteco","displayName-count-other":"Quetzais guatemaltecos","symbol":"GTQ","symbol-alt-narrow":"Q"},"GWE":{"displayName":"Escudo da Guiné Portuguesa","displayName-count-one":"Escudo da Guiné Portuguesa","displayName-count-other":"Escudos da Guinéa Portuguesa","symbol":"GWE"},"GWP":{"displayName":"Peso da Guiné-Bissau","displayName-count-one":"Peso de Guiné-Bissau","displayName-count-other":"Pesos de Guiné-Bissau","symbol":"GWP"},"GYD":{"displayName":"Dólar guianense","displayName-count-one":"Dólar guianense","displayName-count-other":"Dólares guianenses","symbol":"GYD","symbol-alt-narrow":"$"},"HKD":{"displayName":"Dólar de Hong Kong","displayName-count-one":"Dólar de Hong Kong","displayName-count-other":"Dólares de Hong Kong","symbol":"HK$","symbol-alt-narrow":"$"},"HNL":{"displayName":"Lempira hondurenha","displayName-count-one":"Lempira hondurenha","displayName-count-other":"Lempiras hondurenhas","symbol":"HNL","symbol-alt-narrow":"L"},"HRD":{"displayName":"Dinar croata","displayName-count-one":"Dinar croata","displayName-count-other":"Dinares croatas","symbol":"HRD"},"HRK":{"displayName":"Kuna croata","displayName-count-one":"Kuna croata","displayName-count-other":"Kunas croatas","symbol":"HRK","symbol-alt-narrow":"kn"},"HTG":{"displayName":"Gourde haitiano","displayName-count-one":"Gourde haitiano","displayName-count-other":"Gourdes haitianos","symbol":"HTG"},"HUF":{"displayName":"Florim húngaro","displayName-count-one":"Florim húngaro","displayName-count-other":"Florins húngaros","symbol":"HUF","symbol-alt-narrow":"Ft"},"IDR":{"displayName":"Rupia indonésia","displayName-count-one":"Rupia indonésia","displayName-count-other":"Rupias indonésias","symbol":"IDR","symbol-alt-narrow":"Rp"},"IEP":{"displayName":"Libra irlandesa","displayName-count-one":"Libra irlandesa","displayName-count-other":"Libras irlandesas","symbol":"IEP"},"ILP":{"displayName":"Libra israelita","displayName-count-one":"Libra israelita","displayName-count-other":"Libras israelitas","symbol":"ILP"},"ILR":{"displayName":"Sheqel antigo israelita","displayName-count-one":"Sheqel antigo israelita","displayName-count-other":"Sheqels antigos israelitas","symbol":"ILR"},"ILS":{"displayName":"Sheqel novo israelita","displayName-count-one":"Sheqel novo israelita","displayName-count-other":"Sheqels novos israelita","symbol":"₪","symbol-alt-narrow":"₪"},"INR":{"displayName":"Rupia indiana","displayName-count-one":"Rupia indiana","displayName-count-other":"Rupias indianas","symbol":"₹","symbol-alt-narrow":"₹"},"IQD":{"displayName":"Dinar iraquiano","displayName-count-one":"Dinar iraquiano","displayName-count-other":"Dinares iraquianos","symbol":"IQD"},"IRR":{"displayName":"Rial iraniano","displayName-count-one":"Rial iraniano","displayName-count-other":"Riales iranianos","symbol":"IRR"},"ISJ":{"displayName":"Coroa antiga islandesa","displayName-count-one":"Coroa antiga islandesa","displayName-count-other":"Coroas antigas islandesas","symbol":"ISJ"},"ISK":{"displayName":"Coroa islandesa","displayName-count-one":"Coroa islandesa","displayName-count-other":"Coroas islandesas","symbol":"ISK","symbol-alt-narrow":"kr"},"ITL":{"displayName":"Lira italiana","displayName-count-one":"Lira italiana","displayName-count-other":"Liras italianas","symbol":"ITL"},"JMD":{"displayName":"Dólar jamaicano","displayName-count-one":"Dólar jamaicano","displayName-count-other":"Dólares jamaicanos","symbol":"JMD","symbol-alt-narrow":"$"},"JOD":{"displayName":"Dinar jordaniano","displayName-count-one":"Dinar jordaniano","displayName-count-other":"Dinares jordanianos","symbol":"JOD"},"JPY":{"displayName":"Iene japonês","displayName-count-one":"Iene japonês","displayName-count-other":"Ienes japoneses","symbol":"JP¥","symbol-alt-narrow":"¥"},"KES":{"displayName":"Xelim queniano","displayName-count-one":"Xelim queniano","displayName-count-other":"Xelins quenianos","symbol":"KES"},"KGS":{"displayName":"Som quirguiz","displayName-count-one":"Som quirguiz","displayName-count-other":"Sons quirguizes","symbol":"KGS"},"KHR":{"displayName":"Riel cambojano","displayName-count-one":"Riel cambojano","displayName-count-other":"Rieles cambojanos","symbol":"KHR","symbol-alt-narrow":"៛"},"KMF":{"displayName":"Franco comoriano","displayName-count-one":"Franco comoriano","displayName-count-other":"Francos comorianos","symbol":"KMF","symbol-alt-narrow":"CF"},"KPW":{"displayName":"Won norte-coreano","displayName-count-one":"Won norte-coreano","displayName-count-other":"Wons norte-coreanos","symbol":"KPW","symbol-alt-narrow":"₩"},"KRH":{"displayName":"Hwan da Coreia do Sul (1953–1962)","displayName-count-one":"Hwan da Coreia do Sul","displayName-count-other":"Hwans da Coreia do Sul","symbol":"KRH"},"KRO":{"displayName":"Won da Coreia do Sul (1945–1953)","displayName-count-one":"Won antigo da Coreia do Sul","displayName-count-other":"Wons antigos da Coreia do Sul","symbol":"KRO"},"KRW":{"displayName":"Won sul-coreano","displayName-count-one":"Won sul-coreano","displayName-count-other":"Wons sul-coreanos","symbol":"₩","symbol-alt-narrow":"₩"},"KWD":{"displayName":"Dinar kuwaitiano","displayName-count-one":"Dinar kuwaitiano","displayName-count-other":"Dinares kuwaitianos","symbol":"KWD"},"KYD":{"displayName":"Dólar das Ilhas Cayman","displayName-count-one":"Dólar das Ilhas Cayman","displayName-count-other":"Dólares das Ilhas Cayman","symbol":"KYD","symbol-alt-narrow":"$"},"KZT":{"displayName":"Tenge cazaque","displayName-count-one":"Tenge cazaque","displayName-count-other":"Tenges cazaques","symbol":"KZT","symbol-alt-narrow":"₸"},"LAK":{"displayName":"Kip laosiano","displayName-count-one":"Kip laosiano","displayName-count-other":"Kips laosianos","symbol":"LAK","symbol-alt-narrow":"₭"},"LBP":{"displayName":"Libra libanesa","displayName-count-one":"Libra libanesa","displayName-count-other":"Libras libanesas","symbol":"LBP","symbol-alt-narrow":"L£"},"LKR":{"displayName":"Rupia ceilandesa","displayName-count-one":"Rupia ceilandesa","displayName-count-other":"Rupias ceilandesas","symbol":"LKR","symbol-alt-narrow":"Rs"},"LRD":{"displayName":"Dólar liberiano","displayName-count-one":"Dólar liberiano","displayName-count-other":"Dólares liberianos","symbol":"LRD","symbol-alt-narrow":"$"},"LSL":{"displayName":"Loti do Lesoto","displayName-count-one":"Loti do Lesoto","displayName-count-other":"Lotis do Lesoto","symbol":"LSL"},"LTL":{"displayName":"Litas lituano","displayName-count-one":"Litas lituano","displayName-count-other":"Litai lituanos","symbol":"LTL","symbol-alt-narrow":"Lt"},"LTT":{"displayName":"Talonas lituano","displayName-count-one":"Talonas lituanas","displayName-count-other":"Talonases lituanas","symbol":"LTT"},"LUC":{"displayName":"Franco conversível de Luxemburgo","displayName-count-one":"Franco conversível de Luxemburgo","displayName-count-other":"Francos conversíveis de Luxemburgo","symbol":"LUC"},"LUF":{"displayName":"Franco luxemburguês","displayName-count-one":"Franco de Luxemburgo","displayName-count-other":"Francos de Luxemburgo","symbol":"LUF"},"LUL":{"displayName":"Franco financeiro de Luxemburgo","displayName-count-one":"Franco financeiro de Luxemburgo","displayName-count-other":"Francos financeiros de Luxemburgo","symbol":"LUL"},"LVL":{"displayName":"Lats letão","displayName-count-one":"Lats letão","displayName-count-other":"Lati letões","symbol":"LVL","symbol-alt-narrow":"Ls"},"LVR":{"displayName":"Rublo letão","displayName-count-one":"Rublo da Letônia","displayName-count-other":"Rublos da Letônia","symbol":"LVR"},"LYD":{"displayName":"Dinar líbio","displayName-count-one":"Dinar líbio","displayName-count-other":"Dinares líbios","symbol":"LYD"},"MAD":{"displayName":"Dirham marroquino","displayName-count-one":"Dirham marroquino","displayName-count-other":"Dirhams marroquinos","symbol":"MAD"},"MAF":{"displayName":"Franco marroquino","displayName-count-one":"Franco marroquino","displayName-count-other":"Francos marroquinos","symbol":"MAF"},"MCF":{"displayName":"Franco monegasco","displayName-count-one":"Franco monegasco","displayName-count-other":"Francos monegascos","symbol":"MCF"},"MDC":{"displayName":"Cupon moldávio","displayName-count-one":"Cupon moldávio","displayName-count-other":"Cupon moldávio","symbol":"MDC"},"MDL":{"displayName":"Leu moldávio","displayName-count-one":"Leu moldávio","displayName-count-other":"Leus moldávios","symbol":"MDL"},"MGA":{"displayName":"Ariary malgaxe","displayName-count-one":"Ariary malgaxe","displayName-count-other":"Ariarys malgaxes","symbol":"MGA","symbol-alt-narrow":"Ar"},"MGF":{"displayName":"Franco de Madagascar","displayName-count-one":"Franco de Madagascar","displayName-count-other":"Francos de Madagascar","symbol":"MGF"},"MKD":{"displayName":"Dinar macedônio","displayName-count-one":"Dinar macedônio","displayName-count-other":"Dinares macedônios","symbol":"MKD"},"MKN":{"displayName":"Dinar macedônio (1992–1993)","displayName-count-one":"Dinar macedônio (1992–1993)","displayName-count-other":"Dinares macedônios (1992–1993)","symbol":"MKN"},"MLF":{"displayName":"Franco de Mali","displayName-count-one":"Franco de Mali","displayName-count-other":"Francos de Mali","symbol":"MLF"},"MMK":{"displayName":"Kyat mianmarense","displayName-count-one":"Kyat mianmarense","displayName-count-other":"Kyats mianmarenses","symbol":"MMK","symbol-alt-narrow":"K"},"MNT":{"displayName":"Tugrik mongol","displayName-count-one":"Tugrik mongol","displayName-count-other":"Tugriks mongóis","symbol":"MNT","symbol-alt-narrow":"₮"},"MOP":{"displayName":"Pataca macaense","displayName-count-one":"Pataca macaense","displayName-count-other":"Patacas macaenses","symbol":"MOP"},"MRO":{"displayName":"Ouguiya mauritana","displayName-count-one":"Ouguiya mauritana","displayName-count-other":"Ouguiyas mauritanas","symbol":"MRO"},"MTL":{"displayName":"Lira maltesa","displayName-count-one":"Lira Maltesa","displayName-count-other":"Liras maltesas","symbol":"MTL"},"MTP":{"displayName":"Libra maltesa","displayName-count-one":"Libra maltesa","displayName-count-other":"Libras maltesas","symbol":"MTP"},"MUR":{"displayName":"Rupia mauriciana","displayName-count-one":"Rupia mauriciana","displayName-count-other":"Rupias mauricianas","symbol":"MUR","symbol-alt-narrow":"Rs"},"MVP":{"displayName":"MVP","symbol":"MVP"},"MVR":{"displayName":"Rupia maldiva","displayName-count-one":"Rupia maldiva","displayName-count-other":"Rupias maldivas","symbol":"MVR"},"MWK":{"displayName":"Kwacha malauiana","displayName-count-one":"Kwacha malauiana","displayName-count-other":"Kwachas malauianas","symbol":"MWK"},"MXN":{"displayName":"Peso mexicano","displayName-count-one":"Peso mexicano","displayName-count-other":"Pesos mexicanos","symbol":"MX$","symbol-alt-narrow":"$"},"MXP":{"displayName":"Peso Prata mexicano (1861–1992)","displayName-count-one":"Peso de prata mexicano (1861–1992)","displayName-count-other":"Pesos de prata mexicanos (1861–1992)","symbol":"MXP"},"MXV":{"displayName":"Unidade Mexicana de Investimento (UDI)","displayName-count-one":"Unidade de investimento mexicana (UDI)","displayName-count-other":"Unidades de investimento mexicanas (UDI)","symbol":"MXV"},"MYR":{"displayName":"Ringgit malaio","displayName-count-one":"Ringgit malaio","displayName-count-other":"Ringgits malaios","symbol":"MYR","symbol-alt-narrow":"RM"},"MZE":{"displayName":"Escudo de Moçambique","displayName-count-one":"Escudo de Moçambique","displayName-count-other":"Escudos de Moçambique","symbol":"MZE"},"MZM":{"displayName":"Metical de Moçambique (1980–2006)","displayName-count-one":"Metical antigo de Moçambique","displayName-count-other":"Meticales antigos de Moçambique","symbol":"MZM"},"MZN":{"displayName":"Metical moçambicano","displayName-count-one":"Metical moçambicano","displayName-count-other":"Meticais moçambicanos","symbol":"MZN"},"NAD":{"displayName":"Dólar namibiano","displayName-count-one":"Dólar namibiano","displayName-count-other":"Dólares namibianos","symbol":"NAD","symbol-alt-narrow":"$"},"NGN":{"displayName":"Naira nigeriana","displayName-count-one":"Naira nigeriana","displayName-count-other":"Nairas nigerianas","symbol":"NGN","symbol-alt-narrow":"₦"},"NIC":{"displayName":"Córdoba nicaraguense (1988–1991)","displayName-count-one":"Córdoba nicaraguense (1988–1991)","displayName-count-other":"Córdobas nicaraguense (1988–1991)","symbol":"NIC"},"NIO":{"displayName":"Córdoba nicaraguense","displayName-count-one":"Córdoba nicaraguense","displayName-count-other":"Córdobas nicaraguenses","symbol":"NIO","symbol-alt-narrow":"C$"},"NLG":{"displayName":"Florim holandês","displayName-count-one":"Florim holandês","displayName-count-other":"Florins holandeses","symbol":"NLG"},"NOK":{"displayName":"Coroa norueguesa","displayName-count-one":"Coroa norueguesa","displayName-count-other":"Coroas norueguesas","symbol":"NOK","symbol-alt-narrow":"kr"},"NPR":{"displayName":"Rupia nepalesa","displayName-count-one":"Rupia nepalesa","displayName-count-other":"Rupias nepalesas","symbol":"NPR","symbol-alt-narrow":"Rs"},"NZD":{"displayName":"Dólar neozelandês","displayName-count-one":"Dólar neozelandês","displayName-count-other":"Dólares neozelandeses","symbol":"NZ$","symbol-alt-narrow":"$"},"OMR":{"displayName":"Rial omanense","displayName-count-one":"Rial omanense","displayName-count-other":"Riales omanenses","symbol":"OMR"},"PAB":{"displayName":"Balboa panamenho","displayName-count-one":"Balboa panamenho","displayName-count-other":"Balboas panamenhos","symbol":"PAB"},"PEI":{"displayName":"Inti peruano","displayName-count-one":"Inti peruano","displayName-count-other":"Intis peruanos","symbol":"PEI"},"PEN":{"displayName":"Sol peruano","displayName-count-one":"Sol peruano","displayName-count-other":"Sóis peruanos","symbol":"PEN"},"PES":{"displayName":"Sol peruano (1863–1965)","displayName-count-one":"Sol peruano (1863–1965)","displayName-count-other":"Sóis peruanos (1863–1965)","symbol":"PES"},"PGK":{"displayName":"Kina papuásia","displayName-count-one":"Kina papuásia","displayName-count-other":"Kinas papuásias","symbol":"PGK"},"PHP":{"displayName":"Peso filipino","displayName-count-one":"Peso filipino","displayName-count-other":"Pesos filipinos","symbol":"PHP","symbol-alt-narrow":"₱"},"PKR":{"displayName":"Rupia paquistanesa","displayName-count-one":"Rupia paquistanesa","displayName-count-other":"Rupias paquistanesas","symbol":"PKR","symbol-alt-narrow":"Rs"},"PLN":{"displayName":"Zloti polonês","displayName-count-one":"Zloti polonês","displayName-count-other":"Zlotis poloneses","symbol":"PLN","symbol-alt-narrow":"zł"},"PLZ":{"displayName":"Zloti polonês (1950–1995)","displayName-count-one":"Zloti polonês (1950–1995)","displayName-count-other":"Zlotis poloneses (1950–1995)","symbol":"PLZ"},"PTE":{"displayName":"Escudo português","displayName-count-one":"Escudo português","displayName-count-other":"Escudos portugueses","symbol":"Esc."},"PYG":{"displayName":"Guarani paraguaio","displayName-count-one":"Guarani paraguaio","displayName-count-other":"Guaranis paraguaios","symbol":"PYG","symbol-alt-narrow":"₲"},"QAR":{"displayName":"Rial catariano","displayName-count-one":"Rial catariano","displayName-count-other":"Riales catarianos","symbol":"QAR"},"RHD":{"displayName":"Dólar rodesiano","displayName-count-one":"Dólar da Rodésia","displayName-count-other":"Dólares da Rodésia","symbol":"RHD"},"ROL":{"displayName":"Leu romeno (1952–2006)","displayName-count-one":"Leu antigo da Romênia","displayName-count-other":"Leus antigos da Romênia","symbol":"ROL"},"RON":{"displayName":"Leu romeno","displayName-count-one":"Leu romeno","displayName-count-other":"Leus romenos","symbol":"RON","symbol-alt-narrow":"L"},"RSD":{"displayName":"Dinar sérvio","displayName-count-one":"Dinar sérvio","displayName-count-other":"Dinares sérvios","symbol":"RSD"},"RUB":{"displayName":"Rublo russo","displayName-count-one":"Rublo russo","displayName-count-other":"Rublos russos","symbol":"RUB","symbol-alt-narrow":"₽"},"RUR":{"displayName":"Rublo russo (1991–1998)","displayName-count-one":"Rublo russo (1991–1998)","displayName-count-other":"Rublos russos (1991–1998)","symbol":"RUR","symbol-alt-narrow":"р."},"RWF":{"displayName":"Franco ruandês","displayName-count-one":"Franco ruandês","displayName-count-other":"Francos ruandeses","symbol":"RWF","symbol-alt-narrow":"RF"},"SAR":{"displayName":"Riyal saudita","displayName-count-one":"Riyal saudita","displayName-count-other":"Riyales sauditas","symbol":"SAR"},"SBD":{"displayName":"Dólar das Ilhas Salomão","displayName-count-one":"Dólar das Ilhas Salomão","displayName-count-other":"Dólares das Ilhas Salomão","symbol":"SBD","symbol-alt-narrow":"$"},"SCR":{"displayName":"Rupia seichelense","displayName-count-one":"Rupia seichelense","displayName-count-other":"Rupias seichelenses","symbol":"SCR"},"SDD":{"displayName":"Dinar sudanês (1992–2007)","displayName-count-one":"Dinar antigo do Sudão","displayName-count-other":"Dinares antigos do Sudão","symbol":"SDD"},"SDG":{"displayName":"Libra sudanesa","displayName-count-one":"Libra sudanesa","displayName-count-other":"Libras sudanesas","symbol":"SDG"},"SDP":{"displayName":"Libra sudanesa (1957–1998)","displayName-count-one":"Libra antiga sudanesa","displayName-count-other":"Libras antigas sudanesas","symbol":"SDP"},"SEK":{"displayName":"Coroa sueca","displayName-count-one":"Coroa sueca","displayName-count-other":"Coroas suecas","symbol":"SEK","symbol-alt-narrow":"kr"},"SGD":{"displayName":"Dólar singapuriano","displayName-count-one":"Dólar singapuriano","displayName-count-other":"Dólares singapurianos","symbol":"SGD","symbol-alt-narrow":"$"},"SHP":{"displayName":"Libra de Santa Helena","displayName-count-one":"Libra de Santa Helena","displayName-count-other":"Libras de Santa Helena","symbol":"SHP","symbol-alt-narrow":"£"},"SIT":{"displayName":"Tolar Bons esloveno","displayName-count-one":"Tolar da Eslovênia","displayName-count-other":"Tolares da Eslovênia","symbol":"SIT"},"SKK":{"displayName":"Coroa eslovaca","displayName-count-one":"Coroa eslovaca","displayName-count-other":"Coroas eslovacas","symbol":"SKK"},"SLL":{"displayName":"Leone de Serra Leoa","displayName-count-one":"Leone de Serra Leoa","displayName-count-other":"Leones de Serra Leoa","symbol":"SLL"},"SOS":{"displayName":"Xelim somaliano","displayName-count-one":"Xelim somaliano","displayName-count-other":"Xelins somalianos","symbol":"SOS"},"SRD":{"displayName":"Dólar surinamês","displayName-count-one":"Dólar surinamês","displayName-count-other":"Dólares surinameses","symbol":"SRD","symbol-alt-narrow":"$"},"SRG":{"displayName":"Florim do Suriname","displayName-count-one":"Florim do Suriname","displayName-count-other":"Florins do Suriname","symbol":"SRG"},"SSP":{"displayName":"Libra sul-sudanesa","displayName-count-one":"Libra sul-sudanesa","displayName-count-other":"Libras sul-sudanesas","symbol":"SSP","symbol-alt-narrow":"£"},"STD":{"displayName":"Dobra de São Tomé e Príncipe","displayName-count-one":"Dobra de São Tomé e Príncipe","displayName-count-other":"Dobras de São Tomé e Príncipe","symbol":"STD","symbol-alt-narrow":"Db"},"STN":{"displayName":"STN","symbol":"STN"},"SUR":{"displayName":"Rublo soviético","displayName-count-one":"Rublo soviético","displayName-count-other":"Rublos soviéticos","symbol":"SUR"},"SVC":{"displayName":"Colom salvadorenho","displayName-count-one":"Colon de El Salvador","displayName-count-other":"Colons de El Salvador","symbol":"SVC"},"SYP":{"displayName":"Libra síria","displayName-count-one":"Libra síria","displayName-count-other":"Libras sírias","symbol":"SYP","symbol-alt-narrow":"£"},"SZL":{"displayName":"Lilangeni suazi","displayName-count-one":"Lilangeni suazi","displayName-count-other":"Lilangenis suazis","symbol":"SZL"},"THB":{"displayName":"Baht tailandês","displayName-count-one":"Baht tailandês","displayName-count-other":"Bahts tailandeses","symbol":"฿","symbol-alt-narrow":"฿"},"TJR":{"displayName":"Rublo do Tadjiquistão","displayName-count-one":"Rublo do Tajaquistão","displayName-count-other":"Rublos do Tajaquistão","symbol":"TJR"},"TJS":{"displayName":"Somoni tadjique","displayName-count-one":"Somoni tadjique","displayName-count-other":"Somonis tadjiques","symbol":"TJS"},"TMM":{"displayName":"Manat do Turcomenistão (1993–2009)","displayName-count-one":"Manat do Turcomenistão (1993–2009)","displayName-count-other":"Manats do Turcomenistão (1993–2009)","symbol":"TMM"},"TMT":{"displayName":"Manat turcomeno","displayName-count-one":"Manat turcomeno","displayName-count-other":"Manats turcomenos","symbol":"TMT"},"TND":{"displayName":"Dinar tunisiano","displayName-count-one":"Dinar tunisiano","displayName-count-other":"Dinares tunisianos","symbol":"TND"},"TOP":{"displayName":"Paʻanga tonganesa","displayName-count-one":"Paʻanga tonganesa","displayName-count-other":"Paʻangas tonganesas","symbol":"TOP","symbol-alt-narrow":"T$"},"TPE":{"displayName":"Escudo timorense","displayName-count-one":"Escudo do Timor","displayName-count-other":"Escudos do Timor","symbol":"TPE"},"TRL":{"displayName":"Lira turca (1922–2005)","displayName-count-one":"Lira turca antiga","displayName-count-other":"Liras turcas antigas","symbol":"TRL"},"TRY":{"displayName":"Lira turca","displayName-count-one":"Lira turca","displayName-count-other":"Liras turcas","symbol":"TRY","symbol-alt-narrow":"₺","symbol-alt-variant":"TL"},"TTD":{"displayName":"Dólar de Trinidad e Tobago","displayName-count-one":"Dólar de Trinidad e Tobago","displayName-count-other":"Dólares de Trinidad e Tobago","symbol":"TTD","symbol-alt-narrow":"$"},"TWD":{"displayName":"Novo dólar taiwanês","displayName-count-one":"Novo dólar taiwanês","displayName-count-other":"Novos dólares taiwaneses","symbol":"NT$","symbol-alt-narrow":"NT$"},"TZS":{"displayName":"Xelim tanzaniano","displayName-count-one":"Xelim tanzaniano","displayName-count-other":"Xelins tanzanianos","symbol":"TZS"},"UAH":{"displayName":"Hryvnia ucraniano","displayName-count-one":"Hryvnia ucraniano","displayName-count-other":"Hryvnias ucranianos","symbol":"UAH","symbol-alt-narrow":"₴"},"UAK":{"displayName":"Karbovanetz ucraniano","displayName-count-one":"Karbovanetz da Ucrânia","displayName-count-other":"Karbovanetzs da Ucrânia","symbol":"UAK"},"UGS":{"displayName":"Xelim ugandense (1966–1987)","displayName-count-one":"Shilling de Uganda (1966–1987)","displayName-count-other":"Shillings de Uganda (1966–1987)","symbol":"UGS"},"UGX":{"displayName":"Xelim ugandense","displayName-count-one":"Xelim ugandense","displayName-count-other":"Xelins ugandenses","symbol":"UGX"},"USD":{"displayName":"Dólar americano","displayName-count-one":"Dólar americano","displayName-count-other":"Dólares americanos","symbol":"US$","symbol-alt-narrow":"$"},"USN":{"displayName":"Dólar norte-americano (Dia seguinte)","displayName-count-one":"Dólar americano (dia seguinte)","displayName-count-other":"Dólares americanos (dia seguinte)","symbol":"USN"},"USS":{"displayName":"Dólar norte-americano (Mesmo dia)","displayName-count-one":"Dólar americano (mesmo dia)","displayName-count-other":"Dólares americanos (mesmo dia)","symbol":"USS"},"UYI":{"displayName":"Peso uruguaio en unidades indexadas","displayName-count-one":"Peso uruguaio em unidades indexadas","displayName-count-other":"Pesos uruguaios em unidades indexadas","symbol":"UYI"},"UYP":{"displayName":"Peso uruguaio (1975–1993)","displayName-count-one":"Peso uruguaio (1975–1993)","displayName-count-other":"Pesos uruguaios (1975–1993)","symbol":"UYP"},"UYU":{"displayName":"Peso uruguaio","displayName-count-one":"Peso uruguaio","displayName-count-other":"Pesos uruguaios","symbol":"UYU","symbol-alt-narrow":"$"},"UZS":{"displayName":"Som uzbeque","displayName-count-one":"Som uzbeque","displayName-count-other":"Sons uzbeques","symbol":"UZS"},"VEB":{"displayName":"Bolívar venezuelano (1871–2008)","displayName-count-one":"Bolívar venezuelano (1871–2008)","displayName-count-other":"Bolívares venezuelanos (1871–2008)","symbol":"VEB"},"VEF":{"displayName":"Bolívar venezuelano","displayName-count-one":"Bolívar venezuelano","displayName-count-other":"Bolívares venezuelanos","symbol":"VEF","symbol-alt-narrow":"Bs"},"VND":{"displayName":"Dong vietnamita","displayName-count-one":"Dong vietnamita","displayName-count-other":"Dongs vietnamitas","symbol":"₫","symbol-alt-narrow":"₫"},"VNN":{"displayName":"Dong vietnamita (1978–1985)","displayName-count-one":"Dong vietnamita (1978–1985)","displayName-count-other":"Dong vietnamita (1978–1985)","symbol":"VNN"},"VUV":{"displayName":"Vatu vanuatuense","displayName-count-one":"Vatu vanuatuense","displayName-count-other":"Vatus vanuatuenses","symbol":"VUV"},"WST":{"displayName":"Tala samoano","displayName-count-one":"Tala samoano","displayName-count-other":"Talas samoanos","symbol":"WST"},"XAF":{"displayName":"Franco CFA de BEAC","displayName-count-one":"Franco CFA de BEAC","displayName-count-other":"Francos CFA de BEAC","symbol":"FCFA"},"XAG":{"displayName":"Prata","displayName-count-one":"Prata","displayName-count-other":"Pratas","symbol":"XAG"},"XAU":{"displayName":"Ouro","displayName-count-one":"Ouro","displayName-count-other":"Ouros","symbol":"XAU"},"XBA":{"displayName":"Unidade Composta Europeia","displayName-count-one":"Unidade de composição europeia","displayName-count-other":"Unidades de composição europeias","symbol":"XBA"},"XBB":{"displayName":"Unidade Monetária Europeia","displayName-count-one":"Unidade monetária europeia","displayName-count-other":"Unidades monetárias europeias","symbol":"XBB"},"XBC":{"displayName":"Unidade de Conta Europeia (XBC)","displayName-count-one":"Unidade europeia de conta (XBC)","displayName-count-other":"Unidades europeias de conta (XBC)","symbol":"XBC"},"XBD":{"displayName":"Unidade de Conta Europeia (XBD)","displayName-count-one":"Unidade europeia de conta (XBD)","displayName-count-other":"Unidades europeias de conta (XBD)","symbol":"XBD"},"XCD":{"displayName":"Dólar do Caribe Oriental","displayName-count-one":"Dólar do Caribe Oriental","displayName-count-other":"Dólares do Caribe Oriental","symbol":"EC$","symbol-alt-narrow":"$"},"XDR":{"displayName":"Direitos Especiais de Giro","displayName-count-one":"Direitos de desenho especiais","displayName-count-other":"Direitos de desenho especiais","symbol":"XDR"},"XEU":{"displayName":"Unidade de Moeda Europeia","displayName-count-one":"Unidade de moeda europeia","displayName-count-other":"Unidades de moedas europeias","symbol":"XEU"},"XFO":{"displayName":"Franco-ouro francês","displayName-count-one":"Franco de ouro francês","displayName-count-other":"Francos de ouro franceses","symbol":"XFO"},"XFU":{"displayName":"Franco UIC francês","displayName-count-one":"Franco UIC francês","displayName-count-other":"Francos UIC franceses","symbol":"XFU"},"XOF":{"displayName":"Franco CFA de BCEAO","displayName-count-one":"Franco CFA de BCEAO","displayName-count-other":"Francos CFA de BCEAO","symbol":"CFA"},"XPD":{"displayName":"Paládio","displayName-count-one":"Paládio","displayName-count-other":"Paládios","symbol":"XPD"},"XPF":{"displayName":"Franco CFP","displayName-count-one":"Franco CFP","displayName-count-other":"Francos CFP","symbol":"CFPF"},"XPT":{"displayName":"Platina","displayName-count-one":"Platina","displayName-count-other":"Platinas","symbol":"XPT"},"XRE":{"displayName":"Fundos RINET","displayName-count-one":"Fundos RINET","displayName-count-other":"Fundos RINET","symbol":"XRE"},"XSU":{"displayName":"XSU","symbol":"XSU"},"XTS":{"displayName":"Código de Moeda de Teste","displayName-count-one":"Código de moeda de teste","displayName-count-other":"Códigos de moeda de teste","symbol":"XTS"},"XUA":{"displayName":"XUA","symbol":"XUA"},"XXX":{"displayName":"Moeda desconhecida","displayName-count-one":"(moeda desconhecida)","displayName-count-other":"(moedas desconhecidas)","symbol":"XXX"},"YDD":{"displayName":"Dinar iemenita","displayName-count-one":"Dinar do Iêmen","displayName-count-other":"Dinares do Iêmen","symbol":"YDD"},"YER":{"displayName":"Rial iemenita","displayName-count-one":"Rial iemenita","displayName-count-other":"Riales iemenitas","symbol":"YER"},"YUD":{"displayName":"Dinar forte iugoslavo (1966–1990)","displayName-count-one":"Dinar forte iugoslavo","displayName-count-other":"Dinares fortes iugoslavos","symbol":"YUD"},"YUM":{"displayName":"Dinar noviy iugoslavo (1994–2002)","displayName-count-one":"Dinar noviy da Iugoslávia","displayName-count-other":"Dinares noviy da Iugoslávia","symbol":"YUM"},"YUN":{"displayName":"Dinar conversível iugoslavo (1990–1992)","displayName-count-one":"Dinar conversível da Iugoslávia","displayName-count-other":"Dinares conversíveis da Iugoslávia","symbol":"YUN"},"YUR":{"displayName":"Dinar reformado iugoslavo (1992–1993)","displayName-count-one":"Dinar iugoslavo reformado","displayName-count-other":"Dinares iugoslavos reformados","symbol":"YUR"},"ZAL":{"displayName":"Rand sul-africano (financeiro)","displayName-count-one":"Rand da África do Sul (financeiro)","displayName-count-other":"Rands da África do Sul (financeiro)","symbol":"ZAL"},"ZAR":{"displayName":"Rand sul-africano","displayName-count-one":"Rand sul-africano","displayName-count-other":"Rands sul-africanos","symbol":"ZAR","symbol-alt-narrow":"R"},"ZMK":{"displayName":"Cuacha zambiano (1968–2012)","displayName-count-one":"Kwacha da Zâmbia (1968–2012)","displayName-count-other":"Kwachas da Zâmbia (1968–2012)","symbol":"ZMK"},"ZMW":{"displayName":"Kwacha zambiano","displayName-count-one":"Kwacha zambiano","displayName-count-other":"Kwachas zambianos","symbol":"ZMW","symbol-alt-narrow":"ZK"},"ZRN":{"displayName":"Zaire Novo zairense (1993–1998)","displayName-count-one":"Novo zaire do Zaire","displayName-count-other":"Novos zaires do Zaire","symbol":"ZRN"},"ZRZ":{"displayName":"Zaire zairense (1971–1993)","displayName-count-one":"Zaire do Zaire","displayName-count-other":"Zaires do Zaire","symbol":"ZRZ"},"ZWD":{"displayName":"Dólar do Zimbábue (1980–2008)","displayName-count-one":"Dólar do Zimbábue","displayName-count-other":"Dólares do Zimbábue","symbol":"ZWD"},"ZWL":{"displayName":"Dólar do Zimbábue (2009)","displayName-count-one":"Dólar do Zimbábue (2009)","displayName-count-other":"Dólares do Zimbábue (2009)","symbol":"ZWL"},"ZWR":{"displayName":"Dólar do Zimbábue (2008)","displayName-count-one":"Dólar do Zimbábue (2008)","displayName-count-other":"Dólares do Zimbábue (2008)","symbol":"ZWR"}},"defaultNumberingSystem":"latn","otherNumberingSystems":{"native":"latn"},"minimumGroupingDigits":"1","symbols-numberSystem-latn":{"decimal":",","group":".","list":";","percentSign":"%","plusSign":"+","minusSign":"-","exponential":"E","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"NaN","timeSeparator":":"},"decimalFormats-numberSystem-latn":{"standard":"#,##0.###","long":{"decimalFormat":{"1000-count-one":"0 mil","1000-count-other":"0 mil","10000-count-one":"00 mil","10000-count-other":"00 mil","100000-count-one":"000 mil","100000-count-other":"000 mil","1000000-count-one":"0 milhão","1000000-count-other":"0 milhões","10000000-count-one":"00 milhão","10000000-count-other":"00 milhões","100000000-count-one":"000 milhão","100000000-count-other":"000 milhões","1000000000-count-one":"0 bilhão","1000000000-count-other":"0 bilhões","10000000000-count-one":"00 bilhão","10000000000-count-other":"00 bilhões","100000000000-count-one":"000 bilhão","100000000000-count-other":"000 bilhões","1000000000000-count-one":"0 trilhão","1000000000000-count-other":"0 trilhões","10000000000000-count-one":"00 trilhão","10000000000000-count-other":"00 trilhões","100000000000000-count-one":"000 trilhão","100000000000000-count-other":"000 trilhões"}},"short":{"decimalFormat":{"1000-count-one":"0 mil","1000-count-other":"0 mil","10000-count-one":"00 mil","10000-count-other":"00 mil","100000-count-one":"000 mil","100000-count-other":"000 mil","1000000-count-one":"0 mi","1000000-count-other":"0 mi","10000000-count-one":"00 mi","10000000-count-other":"00 mi","100000000-count-one":"000 mi","100000000-count-other":"000 mi","1000000000-count-one":"0 bi","1000000000-count-other":"0 bi","10000000000-count-one":"00 bi","10000000000-count-other":"00 bi","100000000000-count-one":"000 bi","100000000000-count-other":"000 bi","1000000000000-count-one":"0 tri","1000000000000-count-other":"0 tri","10000000000000-count-one":"00 tri","10000000000000-count-other":"00 tri","100000000000000-count-one":"000 tri","100000000000000-count-other":"000 tri"}}},"scientificFormats-numberSystem-latn":{"standard":"#E0"},"percentFormats-numberSystem-latn":{"standard":"#,##0%"},"currencyFormats-numberSystem-latn":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"¤ #,##0.00","accounting":"¤ #,##0.00","short":{"standard":{"1000-count-one":"¤0 mil","1000-count-other":"¤0 mil","10000-count-one":"¤00 mil","10000-count-other":"¤00 mil","100000-count-one":"¤000 mil","100000-count-other":"¤000 mil","1000000-count-one":"¤0 mi","1000000-count-other":"¤0 mi","10000000-count-one":"¤00 mi","10000000-count-other":"¤00 mi","100000000-count-one":"¤000 mi","100000000-count-other":"¤000 mi","1000000000-count-one":"¤0 bi","1000000000-count-other":"¤0 bi","10000000000-count-one":"¤00 bi","10000000000-count-other":"¤00 bi","100000000000-count-one":"¤000 bi","100000000000-count-other":"¤000 bi","1000000000000-count-one":"¤0 tri","1000000000000-count-other":"¤0 tri","10000000000000-count-one":"¤00 tri","10000000000000-count-other":"¤00 tri","100000000000000-count-one":"¤000 tri","100000000000000-count-other":"¤000 tri"}},"unitPattern-count-one":"{0} {1}","unitPattern-count-other":"{0} {1}"},"miscPatterns-numberSystem-latn":{"atLeast":"+{0}","range":"{0}–{1}"},"minimalPairs":{"pluralMinimalPairs-count-one":"{0} ponto","pluralMinimalPairs-count-other":"{0} pontos","other":"{0}º livro"}}},"ru":{"identity":{"version":{"_number":"$Revision: 13758 $","_cldrVersion":"32"},"language":"ru"},"dates":{"calendars":{"gregorian":{"months":{"format":{"abbreviated":{"1":"янв.","2":"февр.","3":"мар.","4":"апр.","5":"мая","6":"июн.","7":"июл.","8":"авг.","9":"сент.","10":"окт.","11":"нояб.","12":"дек."},"narrow":{"1":"Я","2":"Ф","3":"М","4":"А","5":"М","6":"И","7":"И","8":"А","9":"С","10":"О","11":"Н","12":"Д"},"wide":{"1":"января","2":"февраля","3":"марта","4":"апреля","5":"мая","6":"июня","7":"июля","8":"августа","9":"сентября","10":"октября","11":"ноября","12":"декабря"}},"stand-alone":{"abbreviated":{"1":"янв.","2":"февр.","3":"март","4":"апр.","5":"май","6":"июнь","7":"июль","8":"авг.","9":"сент.","10":"окт.","11":"нояб.","12":"дек."},"narrow":{"1":"Я","2":"Ф","3":"М","4":"А","5":"М","6":"И","7":"И","8":"А","9":"С","10":"О","11":"Н","12":"Д"},"wide":{"1":"январь","2":"февраль","3":"март","4":"апрель","5":"май","6":"июнь","7":"июль","8":"август","9":"сентябрь","10":"октябрь","11":"ноябрь","12":"декабрь"}}},"days":{"format":{"abbreviated":{"sun":"вс","mon":"пн","tue":"вт","wed":"ср","thu":"чт","fri":"пт","sat":"сб"},"narrow":{"sun":"вс","mon":"пн","tue":"вт","wed":"ср","thu":"чт","fri":"пт","sat":"сб"},"short":{"sun":"вс","mon":"пн","tue":"вт","wed":"ср","thu":"чт","fri":"пт","sat":"сб"},"wide":{"sun":"воскресенье","mon":"понедельник","tue":"вторник","wed":"среда","thu":"четверг","fri":"пятница","sat":"суббота"}},"stand-alone":{"abbreviated":{"sun":"вс","mon":"пн","tue":"вт","wed":"ср","thu":"чт","fri":"пт","sat":"сб"},"narrow":{"sun":"В","mon":"П","tue":"В","wed":"С","thu":"Ч","fri":"П","sat":"С"},"short":{"sun":"вс","mon":"пн","tue":"вт","wed":"ср","thu":"чт","fri":"пт","sat":"сб"},"wide":{"sun":"воскресенье","mon":"понедельник","tue":"вторник","wed":"среда","thu":"четверг","fri":"пятница","sat":"суббота"}}},"quarters":{"format":{"abbreviated":{"1":"1-й кв.","2":"2-й кв.","3":"3-й кв.","4":"4-й кв."},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"1-й квартал","2":"2-й квартал","3":"3-й квартал","4":"4-й квартал"}},"stand-alone":{"abbreviated":{"1":"1-й кв.","2":"2-й кв.","3":"3-й кв.","4":"4-й кв."},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"1-й квартал","2":"2-й квартал","3":"3-й квартал","4":"4-й квартал"}}},"dayPeriods":{"format":{"abbreviated":{"midnight":"полн.","am":"AM","noon":"полд.","pm":"PM","morning1":"утра","afternoon1":"дня","evening1":"вечера","night1":"ночи"},"narrow":{"midnight":"полн.","am":"AM","noon":"полд.","pm":"PM","morning1":"утра","afternoon1":"дня","evening1":"веч.","night1":"ночи"},"wide":{"midnight":"полночь","am":"AM","noon":"полдень","pm":"PM","morning1":"утра","afternoon1":"дня","evening1":"вечера","night1":"ночи"}},"stand-alone":{"abbreviated":{"midnight":"полн.","am":"AM","noon":"полд.","pm":"PM","morning1":"утро","afternoon1":"день","evening1":"веч.","night1":"ночь"},"narrow":{"midnight":"полн.","am":"AM","noon":"полд.","pm":"PM","morning1":"утро","afternoon1":"день","evening1":"веч.","night1":"ночь"},"wide":{"midnight":"полночь","am":"AM","noon":"полдень","pm":"PM","morning1":"утро","afternoon1":"день","evening1":"вечер","night1":"ночь"}}},"eras":{"eraNames":{"0":"до Рождества Христова","1":"от Рождества Христова","0-alt-variant":"до нашей эры","1-alt-variant":"нашей эры"},"eraAbbr":{"0":"до н. э.","1":"н. э.","0-alt-variant":"BCE","1-alt-variant":"CE"},"eraNarrow":{"0":"до н.э.","1":"н.э.","0-alt-variant":"BCE","1-alt-variant":"CE"}},"dateFormats":{"full":"EEEE, d MMMM y 'г'.","long":"d MMMM y 'г'.","medium":"d MMM y 'г'.","short":"dd.MM.y"},"timeFormats":{"full":"H:mm:ss zzzz","long":"H:mm:ss z","medium":"H:mm:ss","short":"H:mm"},"dateTimeFormats":{"full":"{1}, {0}","long":"{1}, {0}","medium":"{1}, {0}","short":"{1}, {0}","availableFormats":{"Bh":"h B","Bhm":"h:mm B","Bhms":"h:mm:ss B","d":"d","E":"ccc","EBhm":"ccc, h:mm B","EBhms":"ccc, h:mm:ss B","Ed":"ccc, d","Ehm":"E h:mm a","EHm":"E HH:mm","Ehms":"E h:mm:ss a","EHms":"E HH:mm:ss","Gy":"y 'г'. G","GyMMM":"LLL y G","GyMMMd":"d MMM y 'г'. G","GyMMMEd":"E, d MMM y 'г'. G","h":"h a","H":"H","hm":"h:mm a","Hm":"H:mm","hms":"h:mm:ss a","Hms":"H:mm:ss","hmsv":"h:mm:ss a v","Hmsv":"H:mm:ss v","hmv":"h:mm a v","Hmv":"H:mm v","M":"L","Md":"dd.MM","MEd":"E, dd.MM","MMdd":"dd.MM","MMM":"LLL","MMMd":"d MMM","MMMEd":"ccc, d MMM","MMMMd":"d MMMM","MMMMW-count-one":"W-'я' 'неделя' MMMM","MMMMW-count-few":"W-'я' 'неделя' MMMM","MMMMW-count-many":"W-'я' 'неделя' MMMM","MMMMW-count-other":"W-'я' 'неделя' MMMM","ms":"mm:ss","y":"y","yM":"MM.y","yMd":"dd.MM.y","yMEd":"ccc, dd.MM.y 'г'.","yMM":"MM.y","yMMM":"LLL y 'г'.","yMMMd":"d MMM y 'г'.","yMMMEd":"E, d MMM y 'г'.","yMMMM":"LLLL y 'г'.","yQQQ":"QQQ y 'г'.","yQQQQ":"QQQQ y 'г'.","yw-count-one":"w-'я' 'неделя' Y 'г'.","yw-count-few":"w-'я' 'неделя' Y 'г'.","yw-count-many":"w-'я' 'неделя' Y 'г'.","yw-count-other":"w-'я' 'неделя' Y 'г'."},"appendItems":{"Day":"{0} ({2}: {1})","Day-Of-Week":"{0} {1}","Era":"{1} {0}","Hour":"{0} ({2}: {1})","Minute":"{0} ({2}: {1})","Month":"{0} ({2}: {1})","Quarter":"{0} ({2}: {1})","Second":"{0} ({2}: {1})","Timezone":"{0} {1}","Week":"{0} ({2}: {1})","Year":"{1} {0}"},"intervalFormats":{"intervalFormatFallback":"{0} – {1}","d":{"d":"d–d"},"h":{"a":"h a – h a","h":"h–h a"},"H":{"H":"H–H"},"hm":{"a":"h:mm a – h:mm a","h":"h:mm–h:mm a","m":"h:mm–h:mm a"},"Hm":{"H":"H:mm–H:mm","m":"H:mm–H:mm"},"hmv":{"a":"h:mm a – h:mm a v","h":"h:mm–h:mm a v","m":"h:mm–h:mm a v"},"Hmv":{"H":"H:mm–H:mm v","m":"H:mm–H:mm v"},"hv":{"a":"h a – h a v","h":"h–h a v"},"Hv":{"H":"H–H v"},"M":{"M":"M–M"},"Md":{"d":"dd.MM – dd.MM","M":"dd.MM – dd.MM"},"MEd":{"d":"E, dd.MM – E, dd.MM","M":"E, dd.MM – E, dd.MM"},"MMM":{"M":"LLL – LLL"},"MMMd":{"d":"d–d MMM","M":"d MMM – d MMM"},"MMMEd":{"d":"E, d MMM – E, d MMM","M":"E, d MMM – E, d MMM"},"MMMM":{"M":"LLLL – LLLL"},"y":{"y":"y–y"},"yM":{"M":"MM.y – MM.y","y":"MM.y – MM.y"},"yMd":{"d":"dd.MM.y – dd.MM.y","M":"dd.MM.y – dd.MM.y","y":"dd.MM.y – dd.MM.y"},"yMEd":{"d":"ccc, dd.MM.y – ccc, dd.MM.y","M":"ccc, dd.MM.y – ccc, dd.MM.y","y":"ccc, dd.MM.y – ccc, dd.MM.y"},"yMMM":{"M":"LLL – LLL y 'г'.","y":"LLL y 'г'. – LLL y 'г'."},"yMMMd":{"d":"d–d MMM y 'г'.","M":"d MMM – d MMM y 'г'.","y":"d MMM y 'г'. – d MMM y 'г'."},"yMMMEd":{"d":"ccc, d – ccc, d MMM y 'г'.","M":"ccc, d MMM – ccc, d MMM y 'г'.","y":"ccc, d MMM y 'г'. – ccc, d MMM y 'г'."},"yMMMM":{"M":"LLLL – LLLL y 'г'.","y":"LLLL y 'г'. – LLLL y 'г'."}}}}},"fields":{"era":{"displayName":"эра"},"era-short":{"displayName":"эра"},"era-narrow":{"displayName":"эра"},"year":{"displayName":"год","relative-type--1":"в прошлом году","relative-type-0":"в этом году","relative-type-1":"в следующем году","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} год","relativeTimePattern-count-few":"через {0} года","relativeTimePattern-count-many":"через {0} лет","relativeTimePattern-count-other":"через {0} года"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} год назад","relativeTimePattern-count-few":"{0} года назад","relativeTimePattern-count-many":"{0} лет назад","relativeTimePattern-count-other":"{0} года назад"}},"year-short":{"displayName":"г.","relative-type--1":"в прошлом г.","relative-type-0":"в этом г.","relative-type-1":"в след. г.","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} г.","relativeTimePattern-count-few":"через {0} г.","relativeTimePattern-count-many":"через {0} л.","relativeTimePattern-count-other":"через {0} г."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} г. назад","relativeTimePattern-count-few":"{0} г. назад","relativeTimePattern-count-many":"{0} л. назад","relativeTimePattern-count-other":"{0} г. назад"}},"year-narrow":{"displayName":"г.","relative-type--1":"в пр. г.","relative-type-0":"в эт. г.","relative-type-1":"в сл. г.","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} г.","relativeTimePattern-count-few":"+{0} г.","relativeTimePattern-count-many":"+{0} л.","relativeTimePattern-count-other":"+{0} г."},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} г.","relativeTimePattern-count-few":"-{0} г.","relativeTimePattern-count-many":"-{0} л.","relativeTimePattern-count-other":"-{0} г."}},"quarter":{"displayName":"квартал","relative-type--1":"в прошлом квартале","relative-type-0":"в текущем квартале","relative-type-1":"в следующем квартале","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} квартал","relativeTimePattern-count-few":"через {0} квартала","relativeTimePattern-count-many":"через {0} кварталов","relativeTimePattern-count-other":"через {0} квартала"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} квартал назад","relativeTimePattern-count-few":"{0} квартала назад","relativeTimePattern-count-many":"{0} кварталов назад","relativeTimePattern-count-other":"{0} квартала назад"}},"quarter-short":{"displayName":"кв.","relative-type--1":"последний кв.","relative-type-0":"текущий кв.","relative-type-1":"следующий кв.","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} кв.","relativeTimePattern-count-few":"через {0} кв.","relativeTimePattern-count-many":"через {0} кв.","relativeTimePattern-count-other":"через {0} кв."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} кв. назад","relativeTimePattern-count-few":"{0} кв. назад","relativeTimePattern-count-many":"{0} кв. назад","relativeTimePattern-count-other":"{0} кв. назад"}},"quarter-narrow":{"displayName":"кв.","relative-type--1":"посл. кв.","relative-type-0":"тек. кв.","relative-type-1":"след. кв.","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} кв.","relativeTimePattern-count-few":"+{0} кв.","relativeTimePattern-count-many":"+{0} кв.","relativeTimePattern-count-other":"+{0} кв."},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} кв.","relativeTimePattern-count-few":"-{0} кв.","relativeTimePattern-count-many":"-{0} кв.","relativeTimePattern-count-other":"-{0} кв."}},"month":{"displayName":"месяц","relative-type--1":"в прошлом месяце","relative-type-0":"в этом месяце","relative-type-1":"в следующем месяце","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} месяц","relativeTimePattern-count-few":"через {0} месяца","relativeTimePattern-count-many":"через {0} месяцев","relativeTimePattern-count-other":"через {0} месяца"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} месяц назад","relativeTimePattern-count-few":"{0} месяца назад","relativeTimePattern-count-many":"{0} месяцев назад","relativeTimePattern-count-other":"{0} месяца назад"}},"month-short":{"displayName":"мес.","relative-type--1":"в прошлом мес.","relative-type-0":"в этом мес.","relative-type-1":"в следующем мес.","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} мес.","relativeTimePattern-count-few":"через {0} мес.","relativeTimePattern-count-many":"через {0} мес.","relativeTimePattern-count-other":"через {0} мес."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} мес. назад","relativeTimePattern-count-few":"{0} мес. назад","relativeTimePattern-count-many":"{0} мес. назад","relativeTimePattern-count-other":"{0} мес. назад"}},"month-narrow":{"displayName":"мес.","relative-type--1":"в пр. мес.","relative-type-0":"в эт. мес.","relative-type-1":"в след. мес.","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} мес.","relativeTimePattern-count-few":"+{0} мес.","relativeTimePattern-count-many":"+{0} мес.","relativeTimePattern-count-other":"+{0} мес."},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} мес.","relativeTimePattern-count-few":"-{0} мес.","relativeTimePattern-count-many":"-{0} мес.","relativeTimePattern-count-other":"-{0} мес."}},"week":{"displayName":"неделя","relative-type--1":"на прошлой неделе","relative-type-0":"на этой неделе","relative-type-1":"на следующей неделе","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} неделю","relativeTimePattern-count-few":"через {0} недели","relativeTimePattern-count-many":"через {0} недель","relativeTimePattern-count-other":"через {0} недели"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} неделю назад","relativeTimePattern-count-few":"{0} недели назад","relativeTimePattern-count-many":"{0} недель назад","relativeTimePattern-count-other":"{0} недели назад"},"relativePeriod":"на неделе {0}"},"week-short":{"displayName":"нед.","relative-type--1":"на прошлой нед.","relative-type-0":"на этой нед.","relative-type-1":"на следующей нед.","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} нед.","relativeTimePattern-count-few":"через {0} нед.","relativeTimePattern-count-many":"через {0} нед.","relativeTimePattern-count-other":"через {0} нед."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} нед. назад","relativeTimePattern-count-few":"{0} нед. назад","relativeTimePattern-count-many":"{0} нед. назад","relativeTimePattern-count-other":"{0} нед. назад"},"relativePeriod":"на нед. {0}"},"week-narrow":{"displayName":"нед.","relative-type--1":"на пр. нед.","relative-type-0":"на эт. нед.","relative-type-1":"на след. неделе","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} нед.","relativeTimePattern-count-few":"+{0} нед.","relativeTimePattern-count-many":"+{0} нед.","relativeTimePattern-count-other":"+{0} нед."},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} нед.","relativeTimePattern-count-few":"-{0} нед.","relativeTimePattern-count-many":"-{0} нед.","relativeTimePattern-count-other":"-{0} нед."},"relativePeriod":"на нед. {0}"},"weekOfMonth":{"displayName":"неделя месяца"},"weekOfMonth-short":{"displayName":"нед. месяца"},"weekOfMonth-narrow":{"displayName":"нед. мес."},"day":{"displayName":"день","relative-type--2":"позавчера","relative-type--1":"вчера","relative-type-0":"сегодня","relative-type-1":"завтра","relative-type-2":"послезавтра","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} день","relativeTimePattern-count-few":"через {0} дня","relativeTimePattern-count-many":"через {0} дней","relativeTimePattern-count-other":"через {0} дня"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} день назад","relativeTimePattern-count-few":"{0} дня назад","relativeTimePattern-count-many":"{0} дней назад","relativeTimePattern-count-other":"{0} дня назад"}},"day-short":{"displayName":"дн.","relative-type--2":"позавчера","relative-type--1":"вчера","relative-type-0":"сегодня","relative-type-1":"завтра","relative-type-2":"послезавтра","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} дн.","relativeTimePattern-count-few":"через {0} дн.","relativeTimePattern-count-many":"через {0} дн.","relativeTimePattern-count-other":"через {0} дн."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} дн. назад","relativeTimePattern-count-few":"{0} дн. назад","relativeTimePattern-count-many":"{0} дн. назад","relativeTimePattern-count-other":"{0} дн. назад"}},"day-narrow":{"displayName":"дн.","relative-type--2":"позавчера","relative-type--1":"вчера","relative-type-0":"сегодня","relative-type-1":"завтра","relative-type-2":"послезавтра","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} дн.","relativeTimePattern-count-few":"+{0} дн.","relativeTimePattern-count-many":"+{0} дн.","relativeTimePattern-count-other":"+{0} дн."},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} дн.","relativeTimePattern-count-few":"-{0} дн.","relativeTimePattern-count-many":"-{0} дн.","relativeTimePattern-count-other":"-{0} дн."}},"dayOfYear":{"displayName":"день года"},"dayOfYear-short":{"displayName":"дн. года"},"dayOfYear-narrow":{"displayName":"дн. года"},"weekday":{"displayName":"день недели"},"weekday-short":{"displayName":"дн. недели"},"weekday-narrow":{"displayName":"дн. нед."},"weekdayOfMonth":{"displayName":"день недели в месяце"},"weekdayOfMonth-short":{"displayName":"дн. нед. в месяце"},"weekdayOfMonth-narrow":{"displayName":"дн. нед. в мес."},"sun":{"relative-type--1":"в прошлое воскресенье","relative-type-0":"в это воскресенье","relative-type-1":"в следующее воскресенье","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} воскресенье","relativeTimePattern-count-few":"через {0} воскресенья","relativeTimePattern-count-many":"через {0} воскресений","relativeTimePattern-count-other":"через {0} воскресенья"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} воскресенье назад","relativeTimePattern-count-few":"{0} воскресенья назад","relativeTimePattern-count-many":"{0} воскресений назад","relativeTimePattern-count-other":"{0} воскресенья назад"}},"sun-short":{"relative-type--1":"в прош. вс.","relative-type-0":"в это вс.","relative-type-1":"в след. вс.","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} вс.","relativeTimePattern-count-few":"через {0} вс.","relativeTimePattern-count-many":"через {0} вс.","relativeTimePattern-count-other":"через {0} вс."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} вс. назад","relativeTimePattern-count-few":"{0} вс. назад","relativeTimePattern-count-many":"{0} вс. назад","relativeTimePattern-count-other":"{0} вс. назад"}},"sun-narrow":{"relative-type--1":"в прош. вс.","relative-type-0":"в это вс.","relative-type-1":"в след. вс.","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} вс.","relativeTimePattern-count-few":"+{0} вс.","relativeTimePattern-count-many":"+{0} вс.","relativeTimePattern-count-other":"+{0} вс."},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} вс.","relativeTimePattern-count-few":"-{0} вс.","relativeTimePattern-count-many":"-{0} вс.","relativeTimePattern-count-other":"-{0} вс."}},"mon":{"relative-type--1":"в прошлый понедельник","relative-type-0":"в этот понедельник","relative-type-1":"в следующий понедельник","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} понедельник","relativeTimePattern-count-few":"через {0} понедельника","relativeTimePattern-count-many":"через {0} понедельников","relativeTimePattern-count-other":"через {0} понедельника"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} понедельник назад","relativeTimePattern-count-few":"{0} понедельника назад","relativeTimePattern-count-many":"{0} понедельников назад","relativeTimePattern-count-other":"{0} понедельника назад"}},"mon-short":{"relative-type--1":"в прош. пн.","relative-type-0":"в этот пн.","relative-type-1":"в след. пн.","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} пн.","relativeTimePattern-count-few":"через {0} пн.","relativeTimePattern-count-many":"через {0} пн.","relativeTimePattern-count-other":"через {0} пн."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} пн. назад","relativeTimePattern-count-few":"{0} пн. назад","relativeTimePattern-count-many":"{0} пн. назад","relativeTimePattern-count-other":"{0} пн. назад"}},"mon-narrow":{"relative-type--1":"в прош. пн.","relative-type-0":"в этот пн.","relative-type-1":"в след. пн.","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} пн.","relativeTimePattern-count-few":"+{0} пн.","relativeTimePattern-count-many":"+{0} пн.","relativeTimePattern-count-other":"+{0} пн."},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} пн.","relativeTimePattern-count-few":"-{0} пн.","relativeTimePattern-count-many":"-{0} пн.","relativeTimePattern-count-other":"-{0} пн."}},"tue":{"relative-type--1":"в прошлый вторник","relative-type-0":"в этот вторник","relative-type-1":"в следующий вторник","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} вторник","relativeTimePattern-count-few":"через {0} вторника","relativeTimePattern-count-many":"через {0} вторников","relativeTimePattern-count-other":"через {0} вторника"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} вторник назад","relativeTimePattern-count-few":"{0} вторника назад","relativeTimePattern-count-many":"{0} вторников назад","relativeTimePattern-count-other":"{0} вторника назад"}},"tue-short":{"relative-type--1":"в прош. вт.","relative-type-0":"в этот вт.","relative-type-1":"в след. вт.","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} вт.","relativeTimePattern-count-few":"через {0} вт.","relativeTimePattern-count-many":"через {0} вт.","relativeTimePattern-count-other":"через {0} вт."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} вт. назад","relativeTimePattern-count-few":"{0} вт. назад","relativeTimePattern-count-many":"{0} вт. назад","relativeTimePattern-count-other":"{0} вт. назад"}},"tue-narrow":{"relative-type--1":"в прош. вт.","relative-type-0":"в этот вт.","relative-type-1":"в след. вт.","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} вт.","relativeTimePattern-count-few":"+{0} вт.","relativeTimePattern-count-many":"+{0} вт.","relativeTimePattern-count-other":"+{0} вт."},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} вт.","relativeTimePattern-count-few":"-{0} вт.","relativeTimePattern-count-many":"-{0} вт.","relativeTimePattern-count-other":"-{0} вт."}},"wed":{"relative-type--1":"в прошлую среду","relative-type-0":"в эту среду","relative-type-1":"в следующую среду","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} среду","relativeTimePattern-count-few":"через {0} среды","relativeTimePattern-count-many":"через {0} сред","relativeTimePattern-count-other":"через {0} среды"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} среду назад","relativeTimePattern-count-few":"{0} среды назад","relativeTimePattern-count-many":"{0} сред назад","relativeTimePattern-count-other":"{0} среды назад"}},"wed-short":{"relative-type--1":"в прош. ср.","relative-type-0":"в эту ср.","relative-type-1":"в след. ср.","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} ср.","relativeTimePattern-count-few":"через {0} ср.","relativeTimePattern-count-many":"через {0} ср.","relativeTimePattern-count-other":"через {0} ср."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ср. назад","relativeTimePattern-count-few":"{0} ср. назад","relativeTimePattern-count-many":"{0} ср. назад","relativeTimePattern-count-other":"{0} ср. назад"}},"wed-narrow":{"relative-type--1":"в прош. ср.","relative-type-0":"в эту ср.","relative-type-1":"в след. ср.","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} ср.","relativeTimePattern-count-few":"+{0} ср.","relativeTimePattern-count-many":"+{0} ср.","relativeTimePattern-count-other":"+{0} ср."},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} ср.","relativeTimePattern-count-few":"-{0} ср.","relativeTimePattern-count-many":"-{0} ср.","relativeTimePattern-count-other":"-{0} ср."}},"thu":{"relative-type--1":"в прошлый четверг","relative-type-0":"в этот четверг","relative-type-1":"в следующий четверг","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} четверг","relativeTimePattern-count-few":"через {0} четверга","relativeTimePattern-count-many":"через {0} четвергов","relativeTimePattern-count-other":"через {0} четверга"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} четверг назад","relativeTimePattern-count-few":"{0} четверга назад","relativeTimePattern-count-many":"{0} четвергов назад","relativeTimePattern-count-other":"{0} четверга назад"}},"thu-short":{"relative-type--1":"в прош. чт.","relative-type-0":"в этот чт.","relative-type-1":"в след. чт.","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} чт.","relativeTimePattern-count-few":"через {0} чт.","relativeTimePattern-count-many":"через {0} чт.","relativeTimePattern-count-other":"через {0} чт."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} чт. назад","relativeTimePattern-count-few":"{0} чт. назад","relativeTimePattern-count-many":"{0} чт. назад","relativeTimePattern-count-other":"{0} чт. назад"}},"thu-narrow":{"relative-type--1":"в прош. чт.","relative-type-0":"в этот чт.","relative-type-1":"в след. чт.","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} чт.","relativeTimePattern-count-few":"+{0} чт.","relativeTimePattern-count-many":"+{0} чт.","relativeTimePattern-count-other":"+{0} чт."},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} чт.","relativeTimePattern-count-few":"-{0} чт.","relativeTimePattern-count-many":"-{0} чт.","relativeTimePattern-count-other":"-{0} чт."}},"fri":{"relative-type--1":"в прошлую пятницу","relative-type-0":"в эту пятницу","relative-type-1":"в следующую пятницу","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} пятницу","relativeTimePattern-count-few":"через {0} пятницы","relativeTimePattern-count-many":"через {0} пятниц","relativeTimePattern-count-other":"через {0} пятницы"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} пятницу назад","relativeTimePattern-count-few":"{0} пятницы назад","relativeTimePattern-count-many":"{0} пятниц назад","relativeTimePattern-count-other":"{0} пятницы назад"}},"fri-short":{"relative-type--1":"в прош. пт.","relative-type-0":"в эту пт.","relative-type-1":"в след. пт.","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} пт.","relativeTimePattern-count-few":"через {0} пт.","relativeTimePattern-count-many":"через {0} пт.","relativeTimePattern-count-other":"через {0} пт."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} пт. назад","relativeTimePattern-count-few":"{0} пт. назад","relativeTimePattern-count-many":"{0} пт. назад","relativeTimePattern-count-other":"{0} пт. назад"}},"fri-narrow":{"relative-type--1":"в прош. пт.","relative-type-0":"в эту пт.","relative-type-1":"в след. пт.","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} пт.","relativeTimePattern-count-few":"+{0} пт.","relativeTimePattern-count-many":"+{0} пт.","relativeTimePattern-count-other":"+{0} пт."},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} пт.","relativeTimePattern-count-few":"-{0} пт.","relativeTimePattern-count-many":"-{0} пт.","relativeTimePattern-count-other":"-{0} пт."}},"sat":{"relative-type--1":"в прошлую субботу","relative-type-0":"в эту субботу","relative-type-1":"в следующую субботу","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} субботу","relativeTimePattern-count-few":"через {0} субботы","relativeTimePattern-count-many":"через {0} суббот","relativeTimePattern-count-other":"через {0} субботы"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} субботу назад","relativeTimePattern-count-few":"{0} субботы назад","relativeTimePattern-count-many":"{0} суббот назад","relativeTimePattern-count-other":"{0} субботы назад"}},"sat-short":{"relative-type--1":"в прош. сб.","relative-type-0":"в эту сб.","relative-type-1":"в след. сб.","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} сб.","relativeTimePattern-count-few":"через {0} сб.","relativeTimePattern-count-many":"через {0} сб.","relativeTimePattern-count-other":"через {0} сб."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} сб. назад","relativeTimePattern-count-few":"{0} сб. назад","relativeTimePattern-count-many":"{0} сб. назад","relativeTimePattern-count-other":"{0} сб. назад"}},"sat-narrow":{"relative-type--1":"в прош. сб.","relative-type-0":"в эту сб.","relative-type-1":"в след. сб.","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} сб.","relativeTimePattern-count-few":"+{0} сб.","relativeTimePattern-count-many":"+{0} сб.","relativeTimePattern-count-other":"+{0} сб."},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} сб.","relativeTimePattern-count-few":"-{0} сб.","relativeTimePattern-count-many":"-{0} сб.","relativeTimePattern-count-other":"-{0} сб."}},"dayperiod-short":{"displayName":"AM/PM"},"dayperiod":{"displayName":"AM/PM"},"dayperiod-narrow":{"displayName":"AM/PM"},"hour":{"displayName":"час","relative-type-0":"в этот час","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} час","relativeTimePattern-count-few":"через {0} часа","relativeTimePattern-count-many":"через {0} часов","relativeTimePattern-count-other":"через {0} часа"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} час назад","relativeTimePattern-count-few":"{0} часа назад","relativeTimePattern-count-many":"{0} часов назад","relativeTimePattern-count-other":"{0} часа назад"}},"hour-short":{"displayName":"ч","relative-type-0":"в этот час","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} ч.","relativeTimePattern-count-few":"через {0} ч.","relativeTimePattern-count-many":"через {0} ч.","relativeTimePattern-count-other":"через {0} ч."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ч. назад","relativeTimePattern-count-few":"{0} ч. назад","relativeTimePattern-count-many":"{0} ч. назад","relativeTimePattern-count-other":"{0} ч. назад"}},"hour-narrow":{"displayName":"ч","relative-type-0":"в этот час","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} ч.","relativeTimePattern-count-few":"+{0} ч.","relativeTimePattern-count-many":"+{0} ч.","relativeTimePattern-count-other":"+{0} ч."},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} ч.","relativeTimePattern-count-few":"-{0} ч.","relativeTimePattern-count-many":"-{0} ч.","relativeTimePattern-count-other":"-{0} ч."}},"minute":{"displayName":"минута","relative-type-0":"в эту минуту","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} минуту","relativeTimePattern-count-few":"через {0} минуты","relativeTimePattern-count-many":"через {0} минут","relativeTimePattern-count-other":"через {0} минуты"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} минуту назад","relativeTimePattern-count-few":"{0} минуты назад","relativeTimePattern-count-many":"{0} минут назад","relativeTimePattern-count-other":"{0} минуты назад"}},"minute-short":{"displayName":"мин.","relative-type-0":"в эту минуту","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} мин.","relativeTimePattern-count-few":"через {0} мин.","relativeTimePattern-count-many":"через {0} мин.","relativeTimePattern-count-other":"через {0} мин."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} мин. назад","relativeTimePattern-count-few":"{0} мин. назад","relativeTimePattern-count-many":"{0} мин. назад","relativeTimePattern-count-other":"{0} мин. назад"}},"minute-narrow":{"displayName":"мин","relative-type-0":"в эту минуту","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} мин.","relativeTimePattern-count-few":"+{0} мин.","relativeTimePattern-count-many":"+{0} мин.","relativeTimePattern-count-other":"+{0} мин."},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} мин.","relativeTimePattern-count-few":"-{0} мин.","relativeTimePattern-count-many":"-{0} мин.","relativeTimePattern-count-other":"-{0} мин."}},"second":{"displayName":"секунда","relative-type-0":"сейчас","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} секунду","relativeTimePattern-count-few":"через {0} секунды","relativeTimePattern-count-many":"через {0} секунд","relativeTimePattern-count-other":"через {0} секунды"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} секунду назад","relativeTimePattern-count-few":"{0} секунды назад","relativeTimePattern-count-many":"{0} секунд назад","relativeTimePattern-count-other":"{0} секунды назад"}},"second-short":{"displayName":"сек.","relative-type-0":"сейчас","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} сек.","relativeTimePattern-count-few":"через {0} сек.","relativeTimePattern-count-many":"через {0} сек.","relativeTimePattern-count-other":"через {0} сек."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} сек. назад","relativeTimePattern-count-few":"{0} сек. назад","relativeTimePattern-count-many":"{0} сек. назад","relativeTimePattern-count-other":"{0} сек. назад"}},"second-narrow":{"displayName":"с","relative-type-0":"сейчас","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} с","relativeTimePattern-count-few":"+{0} с","relativeTimePattern-count-many":"+{0} с","relativeTimePattern-count-other":"+{0} с"},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} с","relativeTimePattern-count-few":"-{0} с","relativeTimePattern-count-many":"-{0} с","relativeTimePattern-count-other":"-{0} с"}},"zone":{"displayName":"часовой пояс"},"zone-short":{"displayName":"час. пояс"},"zone-narrow":{"displayName":"час. пояс"}}},"numbers":{"currencies":{"ADP":{"displayName":"Андоррская песета","displayName-count-one":"андоррская песета","displayName-count-few":"андоррские песеты","displayName-count-many":"андоррских песет","displayName-count-other":"андоррских песет","symbol":"ADP"},"AED":{"displayName":"дирхам ОАЭ","displayName-count-one":"дирхам ОАЭ","displayName-count-few":"дирхама ОАЭ","displayName-count-many":"дирхамов ОАЭ","displayName-count-other":"дирхама ОАЭ","symbol":"AED"},"AFA":{"displayName":"Афгани (1927–2002)","symbol":"AFA"},"AFN":{"displayName":"афгани","displayName-count-one":"афгани","displayName-count-few":"афгани","displayName-count-many":"афгани","displayName-count-other":"афгани","symbol":"AFN"},"ALK":{"displayName":"ALK","symbol":"ALK"},"ALL":{"displayName":"албанский лек","displayName-count-one":"албанский лек","displayName-count-few":"албанских лека","displayName-count-many":"албанских леков","displayName-count-other":"албанского лека","symbol":"ALL"},"AMD":{"displayName":"армянский драм","displayName-count-one":"армянский драм","displayName-count-few":"армянских драма","displayName-count-many":"армянских драмов","displayName-count-other":"армянского драма","symbol":"AMD"},"ANG":{"displayName":"нидерландский антильский гульден","displayName-count-one":"нидерландский антильский гульден","displayName-count-few":"нидерландских антильских гульдена","displayName-count-many":"нидерландских антильских гульденов","displayName-count-other":"нидерландского антильского гульдена","symbol":"ANG"},"AOA":{"displayName":"ангольская кванза","displayName-count-one":"ангольская кванза","displayName-count-few":"ангольские кванзы","displayName-count-many":"ангольских кванз","displayName-count-other":"ангольской кванзы","symbol":"AOA","symbol-alt-narrow":"Kz"},"AOK":{"displayName":"Ангольская кванза (1977–1990)","displayName-count-one":"ангольских кванз (1977–1991)","displayName-count-few":"ангольские кванзы (1977–1991)","displayName-count-many":"ангольских кванз (1977–1991)","displayName-count-other":"ангольских кванз (1977–1991)","symbol":"AOK"},"AON":{"displayName":"Ангольская новая кванза (1990–2000)","symbol":"AON"},"AOR":{"displayName":"Ангольская кванза реюстадо (1995–1999)","displayName-count-one":"ангольских кванз реюстадо (1995–1999)","displayName-count-few":"ангольские кванзы реюстадо (1995–1999)","displayName-count-many":"ангольских кванз реюстадо (1995–1999)","displayName-count-other":"ангольских кванз реюстадо (1995–1999)","symbol":"AOR"},"ARA":{"displayName":"Аргентинский аустрал","symbol":"ARA"},"ARL":{"displayName":"ARL","symbol":"ARL"},"ARM":{"displayName":"ARM","symbol":"ARM"},"ARP":{"displayName":"Аргентинское песо (1983–1985)","symbol":"ARP"},"ARS":{"displayName":"аргентинское песо","displayName-count-one":"аргентинское песо","displayName-count-few":"аргентинских песо","displayName-count-many":"аргентинских песо","displayName-count-other":"аргентинского песо","symbol":"ARS","symbol-alt-narrow":"$"},"ATS":{"displayName":"Австрийский шиллинг","symbol":"ATS"},"AUD":{"displayName":"австралийский доллар","displayName-count-one":"австралийский доллар","displayName-count-few":"австралийских доллара","displayName-count-many":"австралийских долларов","displayName-count-other":"австралийского доллара","symbol":"A$","symbol-alt-narrow":"$"},"AWG":{"displayName":"арубанский флорин","displayName-count-one":"арубанский флорин","displayName-count-few":"арубанских флорина","displayName-count-many":"арубанских флоринов","displayName-count-other":"арубанского флорина","symbol":"AWG"},"AZM":{"displayName":"Старый азербайджанский манат","symbol":"AZM"},"AZN":{"displayName":"азербайджанский манат","displayName-count-one":"азербайджанский манат","displayName-count-few":"азербайджанских маната","displayName-count-many":"азербайджанских манатов","displayName-count-other":"азербайджанского маната","symbol":"AZN"},"BAD":{"displayName":"Динар Боснии и Герцеговины","symbol":"BAD"},"BAM":{"displayName":"конвертируемая марка Боснии и Герцеговины","displayName-count-one":"конвертируемая марка Боснии и Герцеговины","displayName-count-few":"конвертируемые марки Боснии и Герцеговины","displayName-count-many":"конвертируемых марок Боснии и Герцеговины","displayName-count-other":"конвертируемой марки Боснии и Герцеговины","symbol":"BAM","symbol-alt-narrow":"KM"},"BAN":{"displayName":"BAN","symbol":"BAN"},"BBD":{"displayName":"барбадосский доллар","displayName-count-one":"барбадосский доллар","displayName-count-few":"барбадосских доллара","displayName-count-many":"барбадосских долларов","displayName-count-other":"барбадосского доллара","symbol":"BBD","symbol-alt-narrow":"$"},"BDT":{"displayName":"бангладешская така","displayName-count-one":"бангладешская така","displayName-count-few":"бангладешские таки","displayName-count-many":"бангладешских так","displayName-count-other":"бангладешской таки","symbol":"BDT","symbol-alt-narrow":"৳"},"BEC":{"displayName":"Бельгийский франк (конвертируемый)","symbol":"BEC"},"BEF":{"displayName":"Бельгийский франк","symbol":"BEF"},"BEL":{"displayName":"Бельгийский франк (финансовый)","symbol":"BEL"},"BGL":{"displayName":"Лев","symbol":"BGL"},"BGM":{"displayName":"BGM","symbol":"BGM"},"BGN":{"displayName":"болгарский лев","displayName-count-one":"болгарский лев","displayName-count-few":"болгарских лева","displayName-count-many":"болгарских левов","displayName-count-other":"болгарского лева","symbol":"BGN"},"BGO":{"displayName":"BGO","symbol":"BGO"},"BHD":{"displayName":"бахрейнский динар","displayName-count-one":"бахрейнский динар","displayName-count-few":"бахрейнских динара","displayName-count-many":"бахрейнских динаров","displayName-count-other":"бахрейнского динара","symbol":"BHD"},"BIF":{"displayName":"бурундийский франк","displayName-count-one":"бурундийский франк","displayName-count-few":"бурундийских франка","displayName-count-many":"бурундийских франков","displayName-count-other":"бурундийского франка","symbol":"BIF"},"BMD":{"displayName":"бермудский доллар","displayName-count-one":"бермудский доллар","displayName-count-few":"бермудских доллара","displayName-count-many":"бермудских долларов","displayName-count-other":"бермудского доллара","symbol":"BMD","symbol-alt-narrow":"$"},"BND":{"displayName":"брунейский доллар","displayName-count-one":"брунейский доллар","displayName-count-few":"брунейских доллара","displayName-count-many":"брунейских долларов","displayName-count-other":"брунейского доллара","symbol":"BND","symbol-alt-narrow":"$"},"BOB":{"displayName":"боливийский боливиано","displayName-count-one":"боливийский боливиано","displayName-count-few":"боливийских боливиано","displayName-count-many":"боливийских боливиано","displayName-count-other":"боливийского боливиано","symbol":"BOB","symbol-alt-narrow":"Bs"},"BOL":{"displayName":"BOL","symbol":"BOL"},"BOP":{"displayName":"Боливийское песо","symbol":"BOP"},"BOV":{"displayName":"Боливийский мвдол","symbol":"BOV"},"BRB":{"displayName":"Бразильский новый крузейро (1967–1986)","symbol":"BRB"},"BRC":{"displayName":"Бразильское крузадо","symbol":"BRC"},"BRE":{"displayName":"Бразильский крузейро (1990–1993)","symbol":"BRE"},"BRL":{"displayName":"бразильский реал","displayName-count-one":"бразильский реал","displayName-count-few":"бразильских реала","displayName-count-many":"бразильских реалов","displayName-count-other":"бразильского реала","symbol":"R$","symbol-alt-narrow":"R$"},"BRN":{"displayName":"Бразильское новое крузадо","symbol":"BRN"},"BRR":{"displayName":"Бразильский крузейро","symbol":"BRR"},"BRZ":{"displayName":"BRZ","symbol":"BRZ"},"BSD":{"displayName":"багамский доллар","displayName-count-one":"багамский доллар","displayName-count-few":"багамских доллара","displayName-count-many":"багамских долларов","displayName-count-other":"багамского доллара","symbol":"BSD","symbol-alt-narrow":"$"},"BTN":{"displayName":"бутанский нгултрум","displayName-count-one":"бутанский нгултрум","displayName-count-few":"бутанских нгултрума","displayName-count-many":"бутанских нгултрумов","displayName-count-other":"бутанского нгултрума","symbol":"BTN"},"BUK":{"displayName":"Джа","symbol":"BUK"},"BWP":{"displayName":"ботсванская пула","displayName-count-one":"ботсванская пула","displayName-count-few":"ботсванские пулы","displayName-count-many":"ботсванских пул","displayName-count-other":"ботсванской пулы","symbol":"BWP","symbol-alt-narrow":"P"},"BYB":{"displayName":"Белорусский рубль (1994–1999)","symbol":"BYB"},"BYN":{"displayName":"белорусский рубль","displayName-count-one":"белорусский рубль","displayName-count-few":"белорусских рубля","displayName-count-many":"белорусских рублей","displayName-count-other":"белорусского рубля","symbol":"BYN","symbol-alt-narrow":"р."},"BYR":{"displayName":"Белорусский рубль (2000–2016)","displayName-count-one":"белорусский рубль (2000–2016)","displayName-count-few":"белорусских рубля (2000–2016)","displayName-count-many":"белорусских рублей (2000–2016)","displayName-count-other":"белорусского рубля (2000–2016)","symbol":"BYR"},"BZD":{"displayName":"белизский доллар","displayName-count-one":"белизский доллар","displayName-count-few":"белизских доллара","displayName-count-many":"белизских долларов","displayName-count-other":"белизского доллара","symbol":"BZD","symbol-alt-narrow":"$"},"CAD":{"displayName":"канадский доллар","displayName-count-one":"канадский доллар","displayName-count-few":"канадских доллара","displayName-count-many":"канадских долларов","displayName-count-other":"канадского доллара","symbol":"CA$","symbol-alt-narrow":"$"},"CDF":{"displayName":"конголезский франк","displayName-count-one":"конголезский франк","displayName-count-few":"конголезских франка","displayName-count-many":"конголезских франков","displayName-count-other":"конголезского франка","symbol":"CDF"},"CHE":{"displayName":"WIR евро","symbol":"CHE"},"CHF":{"displayName":"швейцарский франк","displayName-count-one":"швейцарский франк","displayName-count-few":"швейцарских франка","displayName-count-many":"швейцарских франков","displayName-count-other":"швейцарского франка","symbol":"CHF"},"CHW":{"displayName":"WIR франк","symbol":"CHW"},"CLE":{"displayName":"CLE","symbol":"CLE"},"CLF":{"displayName":"Условная расчетная единица Чили","symbol":"CLF"},"CLP":{"displayName":"чилийское песо","displayName-count-one":"чилийское песо","displayName-count-few":"чилийских песо","displayName-count-many":"чилийских песо","displayName-count-other":"чилийского песо","symbol":"CLP","symbol-alt-narrow":"$"},"CNH":{"displayName":"китайский офшорный юань","displayName-count-one":"китайский офшорный юань","displayName-count-few":"китайских офшорных юаня","displayName-count-many":"китайских офшорных юаней","displayName-count-other":"китайского офшорного юаня","symbol":"CNH"},"CNX":{"displayName":"CNX","symbol":"CNX"},"CNY":{"displayName":"китайский юань","displayName-count-one":"китайский юань","displayName-count-few":"китайских юаня","displayName-count-many":"китайских юаней","displayName-count-other":"китайского юаня","symbol":"CN¥","symbol-alt-narrow":"¥"},"COP":{"displayName":"колумбийское песо","displayName-count-one":"колумбийское песо","displayName-count-few":"колумбийских песо","displayName-count-many":"колумбийских песо","displayName-count-other":"колумбийского песо","symbol":"COP","symbol-alt-narrow":"$"},"COU":{"displayName":"Единица реальной стоимости Колумбии","symbol":"COU"},"CRC":{"displayName":"костариканский колон","displayName-count-one":"костариканский колон","displayName-count-few":"костариканских колона","displayName-count-many":"костариканских колонов","displayName-count-other":"костариканского колона","symbol":"CRC","symbol-alt-narrow":"₡"},"CSD":{"displayName":"Старый Сербский динар","symbol":"CSD"},"CSK":{"displayName":"Чехословацкая твердая крона","symbol":"CSK"},"CUC":{"displayName":"кубинское конвертируемое песо","displayName-count-one":"кубинское конвертируемое песо","displayName-count-few":"кубинских конвертируемых песо","displayName-count-many":"кубинских конвертируемых песо","displayName-count-other":"кубинского конвертируемого песо","symbol":"CUC","symbol-alt-narrow":"$"},"CUP":{"displayName":"кубинское песо","displayName-count-one":"кубинское песо","displayName-count-few":"кубинских песо","displayName-count-many":"кубинских песо","displayName-count-other":"кубинского песо","symbol":"CUP","symbol-alt-narrow":"$"},"CVE":{"displayName":"эскудо Кабо-Верде","displayName-count-one":"эскудо Кабо-Верде","displayName-count-few":"эскудо Кабо-Верде","displayName-count-many":"эскудо Кабо-Верде","displayName-count-other":"эскудо Кабо-Верде","symbol":"CVE"},"CYP":{"displayName":"Кипрский фунт","symbol":"CYP"},"CZK":{"displayName":"чешская крона","displayName-count-one":"чешская крона","displayName-count-few":"чешские кроны","displayName-count-many":"чешских крон","displayName-count-other":"чешской кроны","symbol":"CZK","symbol-alt-narrow":"Kč"},"DDM":{"displayName":"Восточногерманская марка","symbol":"DDM"},"DEM":{"displayName":"Немецкая марка","symbol":"DEM"},"DJF":{"displayName":"франк Джибути","displayName-count-one":"франк Джибути","displayName-count-few":"франка Джибути","displayName-count-many":"франков Джибути","displayName-count-other":"франка Джибути","symbol":"DJF"},"DKK":{"displayName":"датская крона","displayName-count-one":"датская крона","displayName-count-few":"датские кроны","displayName-count-many":"датских крон","displayName-count-other":"датской кроны","symbol":"DKK","symbol-alt-narrow":"kr"},"DOP":{"displayName":"доминиканское песо","displayName-count-one":"доминиканское песо","displayName-count-few":"доминиканских песо","displayName-count-many":"доминиканских песо","displayName-count-other":"доминиканского песо","symbol":"DOP","symbol-alt-narrow":"$"},"DZD":{"displayName":"алжирский динар","displayName-count-one":"алжирский динар","displayName-count-few":"алжирских динара","displayName-count-many":"алжирских динаров","displayName-count-other":"алжирского динара","symbol":"DZD"},"ECS":{"displayName":"Эквадорский сукре","symbol":"ECS"},"ECV":{"displayName":"Постоянная единица стоимости Эквадора","symbol":"ECV"},"EEK":{"displayName":"Эстонская крона","symbol":"EEK"},"EGP":{"displayName":"египетский фунт","displayName-count-one":"египетский фунт","displayName-count-few":"египетских фунта","displayName-count-many":"египетских фунтов","displayName-count-other":"египетского фунта","symbol":"EGP","symbol-alt-narrow":"E£"},"ERN":{"displayName":"эритрейская накфа","displayName-count-one":"эритрейская накфа","displayName-count-few":"эритрейские накфы","displayName-count-many":"эритрейских накф","displayName-count-other":"эритрейской накфы","symbol":"ERN"},"ESA":{"displayName":"Испанская песета (А)","symbol":"ESA"},"ESB":{"displayName":"Испанская песета (конвертируемая)","symbol":"ESB"},"ESP":{"displayName":"Испанская песета","symbol":"ESP","symbol-alt-narrow":"₧"},"ETB":{"displayName":"эфиопский быр","displayName-count-one":"эфиопский быр","displayName-count-few":"эфиопских быра","displayName-count-many":"эфиопских быров","displayName-count-other":"эфиопского быра","symbol":"ETB"},"EUR":{"displayName":"евро","displayName-count-one":"евро","displayName-count-few":"евро","displayName-count-many":"евро","displayName-count-other":"евро","symbol":"€","symbol-alt-narrow":"€"},"FIM":{"displayName":"Финская марка","symbol":"FIM"},"FJD":{"displayName":"доллар Фиджи","displayName-count-one":"доллар Фиджи","displayName-count-few":"доллара Фиджи","displayName-count-many":"долларов Фиджи","displayName-count-other":"доллара Фиджи","symbol":"FJD","symbol-alt-narrow":"$"},"FKP":{"displayName":"фунт Фолклендских островов","displayName-count-one":"фунт Фолклендских островов","displayName-count-few":"фунта Фолклендских островов","displayName-count-many":"фунтов Фолклендских островов","displayName-count-other":"фунта Фолклендских островов","symbol":"FKP","symbol-alt-narrow":"£"},"FRF":{"displayName":"Французский франк","symbol":"FRF"},"GBP":{"displayName":"британский фунт стерлингов","displayName-count-one":"британский фунт стерлингов","displayName-count-few":"британских фунта стерлингов","displayName-count-many":"британских фунтов стерлингов","displayName-count-other":"британского фунта стерлингов","symbol":"£","symbol-alt-narrow":"£"},"GEK":{"displayName":"Грузинский купон","symbol":"GEK"},"GEL":{"displayName":"грузинский лари","displayName-count-one":"грузинский лари","displayName-count-few":"грузинских лари","displayName-count-many":"грузинских лари","displayName-count-other":"грузинского лари","symbol":"GEL","symbol-alt-narrow":"ლ","symbol-alt-variant":"₾"},"GHC":{"displayName":"Ганский седи (1979–2007)","symbol":"GHC"},"GHS":{"displayName":"ганский седи","displayName-count-one":"ганский седи","displayName-count-few":"ганских седи","displayName-count-many":"ганских седи","displayName-count-other":"ганского седи","symbol":"GHS"},"GIP":{"displayName":"гибралтарский фунт","displayName-count-one":"гибралтарский фунт","displayName-count-few":"гибралтарских фунта","displayName-count-many":"гибралтарских фунтов","displayName-count-other":"гибралтарского фунта","symbol":"GIP","symbol-alt-narrow":"£"},"GMD":{"displayName":"гамбийский даласи","displayName-count-one":"гамбийский даласи","displayName-count-few":"гамбийских даласи","displayName-count-many":"гамбийских даласи","displayName-count-other":"гамбийского даласи","symbol":"GMD"},"GNF":{"displayName":"гвинейский франк","displayName-count-one":"гвинейский франк","displayName-count-few":"гвинейских франка","displayName-count-many":"гвинейских франков","displayName-count-other":"гвинейского франка","symbol":"GNF","symbol-alt-narrow":"FG"},"GNS":{"displayName":"Гвинейская сили","symbol":"GNS"},"GQE":{"displayName":"Эквеле экваториальной Гвинеи","symbol":"GQE"},"GRD":{"displayName":"Греческая драхма","symbol":"GRD"},"GTQ":{"displayName":"гватемальский кетсаль","displayName-count-one":"гватемальский кетсаль","displayName-count-few":"гватемальских кетсаля","displayName-count-many":"гватемальских кетсалей","displayName-count-other":"гватемальского кетсаля","symbol":"GTQ","symbol-alt-narrow":"Q"},"GWE":{"displayName":"Эскудо Португальской Гвинеи","symbol":"GWE"},"GWP":{"displayName":"Песо Гвинеи-Бисау","symbol":"GWP"},"GYD":{"displayName":"гайанский доллар","displayName-count-one":"гайанский доллар","displayName-count-few":"гайанских доллара","displayName-count-many":"гайанских долларов","displayName-count-other":"гайанского доллара","symbol":"GYD","symbol-alt-narrow":"$"},"HKD":{"displayName":"гонконгский доллар","displayName-count-one":"гонконгский доллар","displayName-count-few":"гонконгских доллара","displayName-count-many":"гонконгских долларов","displayName-count-other":"гонконгского доллара","symbol":"HK$","symbol-alt-narrow":"$"},"HNL":{"displayName":"гондурасская лемпира","displayName-count-one":"гондурасская лемпира","displayName-count-few":"гондурасские лемпиры","displayName-count-many":"гондурасских лемпир","displayName-count-other":"гондурасской лемпиры","symbol":"HNL","symbol-alt-narrow":"L"},"HRD":{"displayName":"Хорватский динар","symbol":"HRD"},"HRK":{"displayName":"хорватская куна","displayName-count-one":"хорватская куна","displayName-count-few":"хорватские куны","displayName-count-many":"хорватских кун","displayName-count-other":"хорватской куны","symbol":"HRK","symbol-alt-narrow":"kn"},"HTG":{"displayName":"гаитянский гурд","displayName-count-one":"гаитянский гурд","displayName-count-few":"гаитянских гурда","displayName-count-many":"гаитянских гурдов","displayName-count-other":"гаитянского гурда","symbol":"HTG"},"HUF":{"displayName":"венгерский форинт","displayName-count-one":"венгерский форинт","displayName-count-few":"венгерских форинта","displayName-count-many":"венгерских форинтов","displayName-count-other":"венгерского форинта","symbol":"HUF","symbol-alt-narrow":"Ft"},"IDR":{"displayName":"индонезийская рупия","displayName-count-one":"индонезийская рупия","displayName-count-few":"индонезийские рупии","displayName-count-many":"индонезийских рупий","displayName-count-other":"индонезийской рупии","symbol":"IDR","symbol-alt-narrow":"Rp"},"IEP":{"displayName":"Ирландский фунт","symbol":"IEP"},"ILP":{"displayName":"Израильский фунт","symbol":"ILP"},"ILR":{"displayName":"ILR","symbol":"ILR"},"ILS":{"displayName":"новый израильский шекель","displayName-count-one":"новый израильский шекель","displayName-count-few":"новых израильских шекеля","displayName-count-many":"новых израильских шекелей","displayName-count-other":"нового израильского шекеля","symbol":"₪","symbol-alt-narrow":"₪"},"INR":{"displayName":"индийская рупия","displayName-count-one":"индийская рупия","displayName-count-few":"индийские рупии","displayName-count-many":"индийских рупий","displayName-count-other":"индийской рупии","symbol":"₹","symbol-alt-narrow":"₹"},"IQD":{"displayName":"иракский динар","displayName-count-one":"иракский динар","displayName-count-few":"иракских динара","displayName-count-many":"иракских динаров","displayName-count-other":"иракского динара","symbol":"IQD"},"IRR":{"displayName":"иранский риал","displayName-count-one":"иранский риал","displayName-count-few":"иранских риала","displayName-count-many":"иранских риалов","displayName-count-other":"иранского риала","symbol":"IRR"},"ISJ":{"displayName":"ISJ","symbol":"ISJ"},"ISK":{"displayName":"исландская крона","displayName-count-one":"исландская крона","displayName-count-few":"исландские кроны","displayName-count-many":"исландских крон","displayName-count-other":"исландской кроны","symbol":"ISK","symbol-alt-narrow":"kr"},"ITL":{"displayName":"Итальянская лира","symbol":"ITL"},"JMD":{"displayName":"ямайский доллар","displayName-count-one":"ямайский доллар","displayName-count-few":"ямайских доллара","displayName-count-many":"ямайских долларов","displayName-count-other":"ямайского доллара","symbol":"JMD","symbol-alt-narrow":"$"},"JOD":{"displayName":"иорданский динар","displayName-count-one":"иорданский динар","displayName-count-few":"иорданских динара","displayName-count-many":"иорданских динаров","displayName-count-other":"иорданского динара","symbol":"JOD"},"JPY":{"displayName":"японская иена","displayName-count-one":"японская иена","displayName-count-few":"японские иены","displayName-count-many":"японских иен","displayName-count-other":"японской иены","symbol":"¥","symbol-alt-narrow":"¥"},"KES":{"displayName":"кенийский шиллинг","displayName-count-one":"кенийский шиллинг","displayName-count-few":"кенийских шиллинга","displayName-count-many":"кенийских шиллингов","displayName-count-other":"кенийского шиллинга","symbol":"KES"},"KGS":{"displayName":"киргизский сом","displayName-count-one":"киргизский сом","displayName-count-few":"киргизских сома","displayName-count-many":"киргизских сомов","displayName-count-other":"киргизского сома","symbol":"KGS"},"KHR":{"displayName":"камбоджийский риель","displayName-count-one":"камбоджийский риель","displayName-count-few":"камбоджийских риеля","displayName-count-many":"камбоджийских риелей","displayName-count-other":"камбоджийского риеля","symbol":"KHR","symbol-alt-narrow":"៛"},"KMF":{"displayName":"франк Коморских островов","displayName-count-one":"франк Коморских островов","displayName-count-few":"франка Коморских островов","displayName-count-many":"франков Коморских островов","displayName-count-other":"франка Коморских островов","symbol":"KMF","symbol-alt-narrow":"CF"},"KPW":{"displayName":"северокорейская вона","displayName-count-one":"северокорейская вона","displayName-count-few":"северокорейские воны","displayName-count-many":"северокорейских вон","displayName-count-other":"северокорейской воны","symbol":"KPW","symbol-alt-narrow":"₩"},"KRH":{"displayName":"KRH","symbol":"KRH"},"KRO":{"displayName":"KRO","symbol":"KRO"},"KRW":{"displayName":"южнокорейская вона","displayName-count-one":"южнокорейская вона","displayName-count-few":"южнокорейские воны","displayName-count-many":"южнокорейских вон","displayName-count-other":"южнокорейской воны","symbol":"₩","symbol-alt-narrow":"₩"},"KWD":{"displayName":"кувейтский динар","displayName-count-one":"кувейтский динар","displayName-count-few":"кувейтских динара","displayName-count-many":"кувейтских динаров","displayName-count-other":"кувейтского динара","symbol":"KWD"},"KYD":{"displayName":"доллар Каймановых островов","displayName-count-one":"доллар Каймановых островов","displayName-count-few":"доллара Каймановых островов","displayName-count-many":"долларов Каймановых островов","displayName-count-other":"доллара Каймановых островов","symbol":"KYD","symbol-alt-narrow":"$"},"KZT":{"displayName":"казахский тенге","displayName-count-one":"казахский тенге","displayName-count-few":"казахских тенге","displayName-count-many":"казахских тенге","displayName-count-other":"казахского тенге","symbol":"KZT","symbol-alt-narrow":"₸"},"LAK":{"displayName":"лаосский кип","displayName-count-one":"лаосский кип","displayName-count-few":"лаосских кипа","displayName-count-many":"лаосских кипов","displayName-count-other":"лаосского кипа","symbol":"LAK","symbol-alt-narrow":"₭"},"LBP":{"displayName":"ливанский фунт","displayName-count-one":"ливанский фунт","displayName-count-few":"ливанских фунта","displayName-count-many":"ливанских фунтов","displayName-count-other":"ливанского фунта","symbol":"LBP","symbol-alt-narrow":"L£"},"LKR":{"displayName":"шри-ланкийская рупия","displayName-count-one":"шри-ланкийская рупия","displayName-count-few":"шри-ланкийские рупии","displayName-count-many":"шри-ланкийских рупий","displayName-count-other":"шри-ланкийской рупии","symbol":"LKR","symbol-alt-narrow":"Rs"},"LRD":{"displayName":"либерийский доллар","displayName-count-one":"либерийский доллар","displayName-count-few":"либерийских доллара","displayName-count-many":"либерийских долларов","displayName-count-other":"либерийского доллара","symbol":"LRD","symbol-alt-narrow":"$"},"LSL":{"displayName":"Лоти","symbol":"LSL"},"LTL":{"displayName":"Литовский лит","displayName-count-one":"литовский лит","displayName-count-few":"литовских лита","displayName-count-many":"литовских литов","displayName-count-other":"литовского лита","symbol":"LTL","symbol-alt-narrow":"Lt"},"LTT":{"displayName":"Литовский талон","symbol":"LTT"},"LUC":{"displayName":"Конвертируемый франк Люксембурга","symbol":"LUC"},"LUF":{"displayName":"Люксембургский франк","symbol":"LUF"},"LUL":{"displayName":"Финансовый франк Люксембурга","symbol":"LUL"},"LVL":{"displayName":"Латвийский лат","displayName-count-one":"латвийский лат","displayName-count-few":"латвийских лата","displayName-count-many":"латвийских латов","displayName-count-other":"латвийского лата","symbol":"LVL","symbol-alt-narrow":"Ls"},"LVR":{"displayName":"Латвийский рубль","symbol":"LVR"},"LYD":{"displayName":"ливийский динар","displayName-count-one":"ливийский динар","displayName-count-few":"ливийских динара","displayName-count-many":"ливийских динаров","displayName-count-other":"ливийского динара","symbol":"LYD"},"MAD":{"displayName":"марокканский дирхам","displayName-count-one":"марокканский дирхам","displayName-count-few":"марокканских дирхама","displayName-count-many":"марокканских дирхамов","displayName-count-other":"марокканского дирхама","symbol":"MAD"},"MAF":{"displayName":"Марокканский франк","symbol":"MAF"},"MCF":{"displayName":"MCF","symbol":"MCF"},"MDC":{"displayName":"MDC","symbol":"MDC"},"MDL":{"displayName":"молдавский лей","displayName-count-one":"молдавский лей","displayName-count-few":"молдавских лея","displayName-count-many":"молдавских леев","displayName-count-other":"молдавского лея","symbol":"MDL"},"MGA":{"displayName":"малагасийский ариари","displayName-count-one":"малагасийский ариари","displayName-count-few":"малагасийских ариари","displayName-count-many":"малагасийских ариари","displayName-count-other":"малагасийского ариари","symbol":"MGA","symbol-alt-narrow":"Ar"},"MGF":{"displayName":"Малагасийский франк","symbol":"MGF"},"MKD":{"displayName":"македонский денар","displayName-count-one":"македонский денар","displayName-count-few":"македонских денара","displayName-count-many":"македонских денаров","displayName-count-other":"македонского денара","symbol":"MKD"},"MKN":{"displayName":"MKN","symbol":"MKN"},"MLF":{"displayName":"Малийский франк","symbol":"MLF"},"MMK":{"displayName":"мьянманский кьят","displayName-count-one":"мьянманский кьят","displayName-count-few":"мьянманских кьята","displayName-count-many":"мьянманских кьятов","displayName-count-other":"мьянманского кьята","symbol":"MMK","symbol-alt-narrow":"K"},"MNT":{"displayName":"монгольский тугрик","displayName-count-one":"монгольский тугрик","displayName-count-few":"монгольских тугрика","displayName-count-many":"монгольских тугриков","displayName-count-other":"монгольского тугрика","symbol":"MNT","symbol-alt-narrow":"₮"},"MOP":{"displayName":"патака Макао","displayName-count-one":"патака Макао","displayName-count-few":"патаки Макао","displayName-count-many":"патак Макао","displayName-count-other":"патаки Макао","symbol":"MOP"},"MRO":{"displayName":"мавританская угия","displayName-count-one":"мавританская угия","displayName-count-few":"мавританские угии","displayName-count-many":"мавританских угий","displayName-count-other":"мавританской угии","symbol":"MRO"},"MTL":{"displayName":"Мальтийская лира","symbol":"MTL"},"MTP":{"displayName":"Мальтийский фунт","symbol":"MTP"},"MUR":{"displayName":"маврикийская рупия","displayName-count-one":"маврикийская рупия","displayName-count-few":"маврикийские рупии","displayName-count-many":"маврикийских рупий","displayName-count-other":"маврикийской рупии","symbol":"MUR","symbol-alt-narrow":"Rs"},"MVP":{"displayName":"MVP","symbol":"MVP"},"MVR":{"displayName":"мальдивская руфия","displayName-count-one":"мальдивская руфия","displayName-count-few":"мальдивские руфии","displayName-count-many":"мальдивских руфий","displayName-count-other":"мальдивской руфии","symbol":"MVR"},"MWK":{"displayName":"малавийская квача","displayName-count-one":"малавийская квача","displayName-count-few":"малавийские квачи","displayName-count-many":"малавийских квач","displayName-count-other":"малавийской квачи","symbol":"MWK"},"MXN":{"displayName":"мексиканское песо","displayName-count-one":"мексиканское песо","displayName-count-few":"мексиканских песо","displayName-count-many":"мексиканских песо","displayName-count-other":"мексиканского песо","symbol":"MX$","symbol-alt-narrow":"$"},"MXP":{"displayName":"Мексиканское серебряное песо (1861–1992)","symbol":"MXP"},"MXV":{"displayName":"Мексиканская пересчетная единица (UDI)","symbol":"MXV"},"MYR":{"displayName":"малайзийский ринггит","displayName-count-one":"малайзийский ринггит","displayName-count-few":"малайзийских ринггита","displayName-count-many":"малайзийских ринггитов","displayName-count-other":"малайзийского ринггита","symbol":"MYR","symbol-alt-narrow":"RM"},"MZE":{"displayName":"Мозамбикское эскудо","symbol":"MZE"},"MZM":{"displayName":"Старый мозамбикский метикал","symbol":"MZM"},"MZN":{"displayName":"мозамбикский метикал","displayName-count-one":"мозамбикский метикал","displayName-count-few":"мозамбикских метикала","displayName-count-many":"мозамбикских метикалов","displayName-count-other":"мозамбикского метикала","symbol":"MZN"},"NAD":{"displayName":"доллар Намибии","displayName-count-one":"доллар Намибии","displayName-count-few":"доллара Намибии","displayName-count-many":"долларов Намибии","displayName-count-other":"доллара Намибии","symbol":"NAD","symbol-alt-narrow":"$"},"NGN":{"displayName":"нигерийская найра","displayName-count-one":"нигерийская найра","displayName-count-few":"нигерийские найры","displayName-count-many":"нигерийских найр","displayName-count-other":"нигерийской найры","symbol":"NGN","symbol-alt-narrow":"₦"},"NIC":{"displayName":"Никарагуанская кордоба (1988–1991)","symbol":"NIC"},"NIO":{"displayName":"никарагуанская кордоба","displayName-count-one":"никарагуанская кордоба","displayName-count-few":"никарагуанские кордобы","displayName-count-many":"никарагуанских кордоб","displayName-count-other":"никарагуанской кордобы","symbol":"NIO","symbol-alt-narrow":"C$"},"NLG":{"displayName":"Нидерландский гульден","symbol":"NLG"},"NOK":{"displayName":"норвежская крона","displayName-count-one":"норвежская крона","displayName-count-few":"норвежские кроны","displayName-count-many":"норвежских крон","displayName-count-other":"норвежской кроны","symbol":"NOK","symbol-alt-narrow":"kr"},"NPR":{"displayName":"непальская рупия","displayName-count-one":"непальская рупия","displayName-count-few":"непальские рупии","displayName-count-many":"непальских рупий","displayName-count-other":"непальской рупии","symbol":"NPR","symbol-alt-narrow":"Rs"},"NZD":{"displayName":"новозеландский доллар","displayName-count-one":"новозеландский доллар","displayName-count-few":"новозеландских доллара","displayName-count-many":"новозеландских долларов","displayName-count-other":"новозеландского доллара","symbol":"NZ$","symbol-alt-narrow":"$"},"OMR":{"displayName":"оманский риал","displayName-count-one":"оманский риал","displayName-count-few":"оманских риала","displayName-count-many":"оманских риалов","displayName-count-other":"оманского риала","symbol":"OMR"},"PAB":{"displayName":"панамский бальбоа","displayName-count-one":"панамский бальбоа","displayName-count-few":"панамских бальбоа","displayName-count-many":"панамских бальбоа","displayName-count-other":"панамского бальбоа","symbol":"PAB"},"PEI":{"displayName":"Перуанское инти","symbol":"PEI"},"PEN":{"displayName":"перуанский соль","displayName-count-one":"перуанский соль","displayName-count-few":"перуанских соля","displayName-count-many":"перуанских солей","displayName-count-other":"перуанского соля","symbol":"PEN"},"PES":{"displayName":"Перуанский соль (1863–1965)","displayName-count-one":"перуанский соль (1863–1965)","displayName-count-few":"перуанских соля (1863–1965)","displayName-count-many":"перуанских солей (1863–1965)","displayName-count-other":"перуанского соля (1863–1965)","symbol":"PES"},"PGK":{"displayName":"кина Папуа – Новой Гвинеи","displayName-count-one":"кина Папуа – Новой Гвинеи","displayName-count-few":"кины Папуа – Новой Гвинеи","displayName-count-many":"кин Папуа – Новой Гвинеи","displayName-count-other":"кины Папуа – Новой Гвинеи","symbol":"PGK"},"PHP":{"displayName":"филиппинское песо","displayName-count-one":"филиппинское песо","displayName-count-few":"филиппинских песо","displayName-count-many":"филиппинских песо","displayName-count-other":"филиппинского песо","symbol":"PHP","symbol-alt-narrow":"₱"},"PKR":{"displayName":"пакистанская рупия","displayName-count-one":"пакистанская рупия","displayName-count-few":"пакистанские рупии","displayName-count-many":"пакистанских рупий","displayName-count-other":"пакистанской рупии","symbol":"PKR","symbol-alt-narrow":"Rs"},"PLN":{"displayName":"польский злотый","displayName-count-one":"польский злотый","displayName-count-few":"польских злотых","displayName-count-many":"польских злотых","displayName-count-other":"польского злотого","symbol":"PLN","symbol-alt-narrow":"zł"},"PLZ":{"displayName":"Злотый","symbol":"PLZ"},"PTE":{"displayName":"Португальское эскудо","symbol":"PTE"},"PYG":{"displayName":"парагвайский гуарани","displayName-count-one":"парагвайский гуарани","displayName-count-few":"парагвайских гуарани","displayName-count-many":"парагвайских гуарани","displayName-count-other":"парагвайского гуарани","symbol":"PYG","symbol-alt-narrow":"₲"},"QAR":{"displayName":"катарский риал","displayName-count-one":"катарский риал","displayName-count-few":"катарских риала","displayName-count-many":"катарских риалов","displayName-count-other":"катарского риала","symbol":"QAR"},"RHD":{"displayName":"Родезийский доллар","symbol":"RHD"},"ROL":{"displayName":"Старый Румынский лей","symbol":"ROL"},"RON":{"displayName":"румынский лей","displayName-count-one":"румынский лей","displayName-count-few":"румынских лея","displayName-count-many":"румынских леев","displayName-count-other":"румынского лея","symbol":"RON","symbol-alt-narrow":"L"},"RSD":{"displayName":"сербский динар","displayName-count-one":"сербский динар","displayName-count-few":"сербских динара","displayName-count-many":"сербских динаров","displayName-count-other":"сербского динара","symbol":"RSD"},"RUB":{"displayName":"российский рубль","displayName-count-one":"российский рубль","displayName-count-few":"российских рубля","displayName-count-many":"российских рублей","displayName-count-other":"российского рубля","symbol":"₽","symbol-alt-narrow":"₽"},"RUR":{"displayName":"Российский рубль (1991–1998)","symbol":"р.","symbol-alt-narrow":"р."},"RWF":{"displayName":"франк Руанды","displayName-count-one":"франк Руанды","displayName-count-few":"франка Руанды","displayName-count-many":"франков Руанды","displayName-count-other":"франка Руанды","symbol":"RWF","symbol-alt-narrow":"RF"},"SAR":{"displayName":"саудовский риял","displayName-count-one":"саудовский риял","displayName-count-few":"саудовских рияла","displayName-count-many":"саудовских риялов","displayName-count-other":"саудовского рияла","symbol":"SAR"},"SBD":{"displayName":"доллар Соломоновых островов","displayName-count-one":"доллар Соломоновых островов","displayName-count-few":"доллара Соломоновых островов","displayName-count-many":"долларов Соломоновых островов","displayName-count-other":"доллара Соломоновых островов","symbol":"SBD","symbol-alt-narrow":"$"},"SCR":{"displayName":"сейшельская рупия","displayName-count-one":"сейшельская рупия","displayName-count-few":"сейшельские рупии","displayName-count-many":"сейшельских рупий","displayName-count-other":"сейшельской рупии","symbol":"SCR"},"SDD":{"displayName":"Суданский динар","symbol":"SDD"},"SDG":{"displayName":"суданский фунт","displayName-count-one":"суданский фунт","displayName-count-few":"суданских фунта","displayName-count-many":"суданских фунтов","displayName-count-other":"суданского фунта","symbol":"SDG"},"SDP":{"displayName":"Старый суданский фунт","symbol":"SDP"},"SEK":{"displayName":"шведская крона","displayName-count-one":"шведская крона","displayName-count-few":"шведские кроны","displayName-count-many":"шведских крон","displayName-count-other":"шведской кроны","symbol":"SEK","symbol-alt-narrow":"kr"},"SGD":{"displayName":"сингапурский доллар","displayName-count-one":"сингапурский доллар","displayName-count-few":"сингапурских доллара","displayName-count-many":"сингапурских долларов","displayName-count-other":"сингапурского доллара","symbol":"SGD","symbol-alt-narrow":"$"},"SHP":{"displayName":"фунт острова Святой Елены","displayName-count-one":"фунт острова Святой Елены","displayName-count-few":"фунта острова Святой Елены","displayName-count-many":"фунтов острова Святой Елены","displayName-count-other":"фунта острова Святой Елены","symbol":"SHP","symbol-alt-narrow":"£"},"SIT":{"displayName":"Словенский толар","symbol":"SIT"},"SKK":{"displayName":"Словацкая крона","symbol":"SKK"},"SLL":{"displayName":"леоне","displayName-count-one":"леоне","displayName-count-few":"леоне","displayName-count-many":"леоне","displayName-count-other":"леоне","symbol":"SLL"},"SOS":{"displayName":"сомалийский шиллинг","displayName-count-one":"сомалийский шиллинг","displayName-count-few":"сомалийских шиллинга","displayName-count-many":"сомалийских шиллингов","displayName-count-other":"сомалийского шиллинга","symbol":"SOS"},"SRD":{"displayName":"суринамский доллар","displayName-count-one":"суринамский доллар","displayName-count-few":"суринамских доллара","displayName-count-many":"суринамских долларов","displayName-count-other":"суринамского доллара","symbol":"SRD","symbol-alt-narrow":"$"},"SRG":{"displayName":"Суринамский гульден","symbol":"SRG"},"SSP":{"displayName":"южносуданский фунт","displayName-count-one":"южносуданский фунт","displayName-count-few":"южносуданских фунта","displayName-count-many":"южносуданских фунтов","displayName-count-other":"южносуданского фунта","symbol":"SSP","symbol-alt-narrow":"£"},"STD":{"displayName":"добра Сан-Томе и Принсипи","displayName-count-one":"добра Сан-Томе и Принсипи","displayName-count-few":"добры Сан-Томе и Принсипи","displayName-count-many":"добр Сан-Томе и Принсипи","displayName-count-other":"добры Сан-Томе и Принсипи","symbol":"STD","symbol-alt-narrow":"Db"},"STN":{"displayName":"STN","symbol":"STN"},"SUR":{"displayName":"Рубль СССР","symbol":"SUR"},"SVC":{"displayName":"Сальвадорский колон","symbol":"SVC"},"SYP":{"displayName":"сирийский фунт","displayName-count-one":"сирийский фунт","displayName-count-few":"сирийских фунта","displayName-count-many":"сирийских фунтов","displayName-count-other":"сирийского фунта","symbol":"SYP","symbol-alt-narrow":"£"},"SZL":{"displayName":"свазилендский лилангени","displayName-count-one":"свазилендский лилангени","displayName-count-few":"свазилендских лилангени","displayName-count-many":"свазилендских лилангени","displayName-count-other":"свазилендского лилангени","symbol":"SZL"},"THB":{"displayName":"таиландский бат","displayName-count-one":"таиландский бат","displayName-count-few":"таиландских бата","displayName-count-many":"таиландских батов","displayName-count-other":"таиландского бата","symbol":"฿","symbol-alt-narrow":"฿"},"TJR":{"displayName":"Таджикский рубль","symbol":"TJR"},"TJS":{"displayName":"таджикский сомони","displayName-count-one":"таджикский сомони","displayName-count-few":"таджикских сомони","displayName-count-many":"таджикских сомони","displayName-count-other":"таджикского сомони","symbol":"TJS"},"TMM":{"displayName":"Туркменский манат","symbol":"TMM"},"TMT":{"displayName":"новый туркменский манат","displayName-count-one":"новый туркменский манат","displayName-count-few":"новых туркменских маната","displayName-count-many":"новых туркменских манатов","displayName-count-other":"нового туркменского маната","symbol":"ТМТ"},"TND":{"displayName":"тунисский динар","displayName-count-one":"тунисский динар","displayName-count-few":"тунисских динара","displayName-count-many":"тунисских динаров","displayName-count-other":"тунисского динара","symbol":"TND"},"TOP":{"displayName":"тонганская паанга","displayName-count-one":"тонганская паанга","displayName-count-few":"тонганские паанги","displayName-count-many":"тонганских паанг","displayName-count-other":"тонганской паанги","symbol":"TOP","symbol-alt-narrow":"T$"},"TPE":{"displayName":"Тиморское эскудо","symbol":"TPE"},"TRL":{"displayName":"Турецкая лира (1922–2005)","displayName-count-one":"турецкая лира (1922–2005)","displayName-count-few":"турецкие лиры (1922–2005)","displayName-count-many":"турецких лир (1922–2005)","displayName-count-other":"турецкой лиры (1922–2005)","symbol":"TRL"},"TRY":{"displayName":"турецкая лира","displayName-count-one":"турецкая лира","displayName-count-few":"турецкие лиры","displayName-count-many":"турецких лир","displayName-count-other":"турецкой лиры","symbol":"TRY","symbol-alt-narrow":"₺","symbol-alt-variant":"TL"},"TTD":{"displayName":"доллар Тринидада и Тобаго","displayName-count-one":"доллар Тринидада и Тобаго","displayName-count-few":"доллара Тринидада и Тобаго","displayName-count-many":"долларов Тринидада и Тобаго","displayName-count-other":"доллара Тринидада и Тобаго","symbol":"TTD","symbol-alt-narrow":"$"},"TWD":{"displayName":"новый тайваньский доллар","displayName-count-one":"новый тайваньский доллар","displayName-count-few":"новых тайваньских доллара","displayName-count-many":"новых тайваньских долларов","displayName-count-other":"нового тайваньского доллара","symbol":"NT$","symbol-alt-narrow":"NT$"},"TZS":{"displayName":"танзанийский шиллинг","displayName-count-one":"танзанийский шиллинг","displayName-count-few":"танзанийских шиллинга","displayName-count-many":"танзанийских шиллингов","displayName-count-other":"танзанийского шиллинга","symbol":"TZS"},"UAH":{"displayName":"украинская гривна","displayName-count-one":"украинская гривна","displayName-count-few":"украинские гривны","displayName-count-many":"украинских гривен","displayName-count-other":"украинской гривны","symbol":"₴","symbol-alt-narrow":"₴","symbol-alt-variant":"грн."},"UAK":{"displayName":"Карбованец (украинский)","symbol":"UAK"},"UGS":{"displayName":"Старый угандийский шиллинг","symbol":"UGS"},"UGX":{"displayName":"угандийский шиллинг","displayName-count-one":"угандийский шиллинг","displayName-count-few":"угандийских шиллинга","displayName-count-many":"угандийских шиллингов","displayName-count-other":"угандийского шиллинга","symbol":"UGX"},"USD":{"displayName":"доллар США","displayName-count-one":"доллар США","displayName-count-few":"доллара США","displayName-count-many":"долларов США","displayName-count-other":"доллара США","symbol":"$","symbol-alt-narrow":"$"},"USN":{"displayName":"Доллар США следующего дня","symbol":"USN"},"USS":{"displayName":"Доллар США текущего дня","symbol":"USS"},"UYI":{"displayName":"Уругвайский песо (индекс инфляции)","symbol":"UYI"},"UYP":{"displayName":"Уругвайское старое песо (1975–1993)","symbol":"UYP"},"UYU":{"displayName":"уругвайское песо","displayName-count-one":"уругвайское песо","displayName-count-few":"уругвайских песо","displayName-count-many":"уругвайских песо","displayName-count-other":"уругвайского песо","symbol":"UYU","symbol-alt-narrow":"$"},"UZS":{"displayName":"узбекский сум","displayName-count-one":"узбекский сум","displayName-count-few":"узбекских сума","displayName-count-many":"узбекских сумов","displayName-count-other":"узбекского сума","symbol":"UZS"},"VEB":{"displayName":"Венесуэльский боливар (1871–2008)","symbol":"VEB"},"VEF":{"displayName":"венесуэльский боливар","displayName-count-one":"венесуэльский боливар","displayName-count-few":"венесуэльских боливара","displayName-count-many":"венесуэльских боливаров","displayName-count-other":"венесуэльского боливара","symbol":"VEF","symbol-alt-narrow":"Bs"},"VND":{"displayName":"вьетнамский донг","displayName-count-one":"вьетнамский донг","displayName-count-few":"вьетнамских донга","displayName-count-many":"вьетнамских донгов","displayName-count-other":"вьетнамского донга","symbol":"₫","symbol-alt-narrow":"₫"},"VNN":{"displayName":"VNN","symbol":"VNN"},"VUV":{"displayName":"вату Вануату","displayName-count-one":"вату Вануату","displayName-count-few":"вату Вануату","displayName-count-many":"вату Вануату","displayName-count-other":"вату Вануату","symbol":"VUV"},"WST":{"displayName":"самоанская тала","displayName-count-one":"самоанская тала","displayName-count-few":"самоанские талы","displayName-count-many":"самоанских тал","displayName-count-other":"самоанской талы","symbol":"WST"},"XAF":{"displayName":"франк КФА BEAC","displayName-count-one":"франк КФА ВЕАС","displayName-count-few":"франка КФА ВЕАС","displayName-count-many":"франков КФА ВЕАС","displayName-count-other":"франка КФА ВЕАС","symbol":"FCFA"},"XAG":{"displayName":"Серебро","symbol":"XAG"},"XAU":{"displayName":"Золото","symbol":"XAU"},"XBA":{"displayName":"Европейская составная единица","symbol":"XBA"},"XBB":{"displayName":"Европейская денежная единица","symbol":"XBB"},"XBC":{"displayName":"расчетная единица европейского валютного соглашения (XBC)","symbol":"XBC"},"XBD":{"displayName":"расчетная единица европейского валютного соглашения (XBD)","symbol":"XBD"},"XCD":{"displayName":"восточно-карибский доллар","displayName-count-one":"восточно-карибский доллар","displayName-count-few":"восточно-карибских доллара","displayName-count-many":"восточно-карибских долларов","displayName-count-other":"восточно-карибского доллара","symbol":"EC$","symbol-alt-narrow":"$"},"XDR":{"displayName":"СДР (специальные права заимствования)","symbol":"XDR"},"XEU":{"displayName":"ЭКЮ (единица европейской валюты)","symbol":"XEU"},"XFO":{"displayName":"Французский золотой франк","symbol":"XFO"},"XFU":{"displayName":"Французский UIC-франк","symbol":"XFU"},"XOF":{"displayName":"франк КФА ВСЕАО","displayName-count-one":"франк КФА ВСЕАО","displayName-count-few":"франка КФА ВСЕАО","displayName-count-many":"франков КФА ВСЕАО","displayName-count-other":"франка КФА ВСЕАО","symbol":"CFA"},"XPD":{"displayName":"Палладий","symbol":"XPD"},"XPF":{"displayName":"французский тихоокеанский франк","displayName-count-one":"французский тихоокеанский франк","displayName-count-few":"французских тихоокеанских франка","displayName-count-many":"французских тихоокеанских франков","displayName-count-other":"французского тихоокеанского франка","symbol":"CFPF"},"XPT":{"displayName":"Платина","symbol":"XPT"},"XRE":{"displayName":"единица RINET-фондов","symbol":"XRE"},"XSU":{"displayName":"XSU","symbol":"XSU"},"XTS":{"displayName":"тестовый валютный код","symbol":"XTS"},"XUA":{"displayName":"XUA","symbol":"XUA"},"XXX":{"displayName":"неизвестная валюта","displayName-count-one":"единица неизвестной валюты","displayName-count-few":"единицы неизвестной валюты","displayName-count-many":"единиц неизвестной валюты","displayName-count-other":"единицы неизвестной валюты","symbol":"XXXX"},"YDD":{"displayName":"Йеменский динар","symbol":"YDD"},"YER":{"displayName":"йеменский риал","displayName-count-one":"йеменский риал","displayName-count-few":"йеменских риала","displayName-count-many":"йеменских риалов","displayName-count-other":"йеменского риала","symbol":"YER"},"YUD":{"displayName":"Югославский твердый динар","symbol":"YUD"},"YUM":{"displayName":"Югославский новый динар","symbol":"YUM"},"YUN":{"displayName":"Югославский динар","symbol":"YUN"},"YUR":{"displayName":"YUR","symbol":"YUR"},"ZAL":{"displayName":"Южноафриканский рэнд (финансовый)","symbol":"ZAL"},"ZAR":{"displayName":"южноафриканский рэнд","displayName-count-one":"южноафриканский рэнд","displayName-count-few":"южноафриканских рэнда","displayName-count-many":"южноафриканских рэндов","displayName-count-other":"южноафриканского рэнда","symbol":"ZAR","symbol-alt-narrow":"R"},"ZMK":{"displayName":"Квача (замбийская) (1968–2012)","displayName-count-one":"замбийская квача (1968–2012)","displayName-count-few":"замбийские квачи (1968–2012)","displayName-count-many":"замбийских квач (1968–2012)","displayName-count-other":"замбийской квачи (1968–2012)","symbol":"ZMK"},"ZMW":{"displayName":"замбийская квача","displayName-count-one":"замбийская квача","displayName-count-few":"замбийские квачи","displayName-count-many":"замбийских квач","displayName-count-other":"замбийской квачи","symbol":"ZMW","symbol-alt-narrow":"ZK"},"ZRN":{"displayName":"Новый заир","symbol":"ZRN"},"ZRZ":{"displayName":"Заир","symbol":"ZRZ"},"ZWD":{"displayName":"Доллар Зимбабве","symbol":"ZWD"},"ZWL":{"displayName":"Доллар Зимбабве (2009)","symbol":"ZWL"},"ZWR":{"displayName":"ZWR","symbol":"ZWR"}},"defaultNumberingSystem":"latn","otherNumberingSystems":{"native":"latn"},"minimumGroupingDigits":"1","symbols-numberSystem-latn":{"decimal":",","group":" ","list":";","percentSign":"%","plusSign":"+","minusSign":"-","exponential":"E","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"не число","timeSeparator":":"},"decimalFormats-numberSystem-latn":{"standard":"#,##0.###","long":{"decimalFormat":{"1000-count-one":"0 тысяча","1000-count-few":"0 тысячи","1000-count-many":"0 тысяч","1000-count-other":"0 тысячи","10000-count-one":"00 тысяча","10000-count-few":"00 тысячи","10000-count-many":"00 тысяч","10000-count-other":"00 тысячи","100000-count-one":"000 тысяча","100000-count-few":"000 тысячи","100000-count-many":"000 тысяч","100000-count-other":"000 тысячи","1000000-count-one":"0 миллион","1000000-count-few":"0 миллиона","1000000-count-many":"0 миллионов","1000000-count-other":"0 миллиона","10000000-count-one":"00 миллион","10000000-count-few":"00 миллиона","10000000-count-many":"00 миллионов","10000000-count-other":"00 миллиона","100000000-count-one":"000 миллион","100000000-count-few":"000 миллиона","100000000-count-many":"000 миллионов","100000000-count-other":"000 миллиона","1000000000-count-one":"0 миллиард","1000000000-count-few":"0 миллиарда","1000000000-count-many":"0 миллиардов","1000000000-count-other":"0 миллиарда","10000000000-count-one":"00 миллиард","10000000000-count-few":"00 миллиарда","10000000000-count-many":"00 миллиардов","10000000000-count-other":"00 миллиарда","100000000000-count-one":"000 миллиард","100000000000-count-few":"000 миллиарда","100000000000-count-many":"000 миллиардов","100000000000-count-other":"000 миллиарда","1000000000000-count-one":"0 триллион","1000000000000-count-few":"0 триллиона","1000000000000-count-many":"0 триллионов","1000000000000-count-other":"0 триллиона","10000000000000-count-one":"00 триллион","10000000000000-count-few":"00 триллиона","10000000000000-count-many":"00 триллионов","10000000000000-count-other":"00 триллиона","100000000000000-count-one":"000 триллион","100000000000000-count-few":"000 триллиона","100000000000000-count-many":"000 триллионов","100000000000000-count-other":"000 триллиона"}},"short":{"decimalFormat":{"1000-count-one":"0 тыс'.'","1000-count-few":"0 тыс'.'","1000-count-many":"0 тыс'.'","1000-count-other":"0 тыс'.'","10000-count-one":"00 тыс'.'","10000-count-few":"00 тыс'.'","10000-count-many":"00 тыс'.'","10000-count-other":"00 тыс'.'","100000-count-one":"000 тыс'.'","100000-count-few":"000 тыс'.'","100000-count-many":"000 тыс'.'","100000-count-other":"000 тыс'.'","1000000-count-one":"0 млн","1000000-count-few":"0 млн","1000000-count-many":"0 млн","1000000-count-other":"0 млн","10000000-count-one":"00 млн","10000000-count-few":"00 млн","10000000-count-many":"00 млн","10000000-count-other":"00 млн","100000000-count-one":"000 млн","100000000-count-few":"000 млн","100000000-count-many":"000 млн","100000000-count-other":"000 млн","1000000000-count-one":"0 млрд","1000000000-count-few":"0 млрд","1000000000-count-many":"0 млрд","1000000000-count-other":"0 млрд","10000000000-count-one":"00 млрд","10000000000-count-few":"00 млрд","10000000000-count-many":"00 млрд","10000000000-count-other":"00 млрд","100000000000-count-one":"000 млрд","100000000000-count-few":"000 млрд","100000000000-count-many":"000 млрд","100000000000-count-other":"000 млрд","1000000000000-count-one":"0 трлн","1000000000000-count-few":"0 трлн","1000000000000-count-many":"0 трлн","1000000000000-count-other":"0 трлн","10000000000000-count-one":"00 трлн","10000000000000-count-few":"00 трлн","10000000000000-count-many":"00 трлн","10000000000000-count-other":"00 трлн","100000000000000-count-one":"000 трлн","100000000000000-count-few":"000 трлн","100000000000000-count-many":"000 трлн","100000000000000-count-other":"000 трлн"}}},"scientificFormats-numberSystem-latn":{"standard":"#E0"},"percentFormats-numberSystem-latn":{"standard":"#,##0 %"},"currencyFormats-numberSystem-latn":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"#,##0.00 ¤","accounting":"#,##0.00 ¤","short":{"standard":{"1000-count-one":"0 тыс'.' ¤","1000-count-few":"0 тыс'.' ¤","1000-count-many":"0 тыс'.' ¤","1000-count-other":"0 тыс'.' ¤","10000-count-one":"00 тыс'.' ¤","10000-count-few":"00 тыс'.' ¤","10000-count-many":"00 тыс'.' ¤","10000-count-other":"00 тыс'.' ¤","100000-count-one":"000 тыс'.' ¤","100000-count-few":"000 тыс'.' ¤","100000-count-many":"000 тыс'.' ¤","100000-count-other":"000 тыс'.' ¤","1000000-count-one":"0 млн ¤","1000000-count-few":"0 млн ¤","1000000-count-many":"0 млн ¤","1000000-count-other":"0 млн ¤","10000000-count-one":"00 млн ¤","10000000-count-few":"00 млн ¤","10000000-count-many":"00 млн ¤","10000000-count-other":"00 млн ¤","100000000-count-one":"000 млн ¤","100000000-count-few":"000 млн ¤","100000000-count-many":"000 млн ¤","100000000-count-other":"000 млн ¤","1000000000-count-one":"0 млрд ¤","1000000000-count-few":"0 млрд ¤","1000000000-count-many":"0 млрд ¤","1000000000-count-other":"0 млрд ¤","10000000000-count-one":"00 млрд ¤","10000000000-count-few":"00 млрд ¤","10000000000-count-many":"00 млрд ¤","10000000000-count-other":"00 млрд ¤","100000000000-count-one":"000 млрд ¤","100000000000-count-few":"000 млрд ¤","100000000000-count-many":"000 млрд ¤","100000000000-count-other":"000 млрд ¤","1000000000000-count-one":"0 трлн ¤","1000000000000-count-few":"0 трлн ¤","1000000000000-count-many":"0 трлн ¤","1000000000000-count-other":"0 трлн ¤","10000000000000-count-one":"00 трлн ¤","10000000000000-count-few":"00 трлн ¤","10000000000000-count-many":"00 трлн ¤","10000000000000-count-other":"00 трлн ¤","100000000000000-count-one":"000 трлн ¤","100000000000000-count-few":"000 трлн ¤","100000000000000-count-many":"000 трлн ¤","100000000000000-count-other":"000 трлн ¤"}},"unitPattern-count-one":"{0} {1}","unitPattern-count-few":"{0} {1}","unitPattern-count-many":"{0} {1}","unitPattern-count-other":"{0} {1}"},"miscPatterns-numberSystem-latn":{"atLeast":"⩾{0}","range":"{0}–{1}"},"minimalPairs":{"pluralMinimalPairs-count-one":"из {0} книги за {0} день","pluralMinimalPairs-count-few":"из {0} книг за {0} дня","pluralMinimalPairs-count-many":"из {0} книг за {0} дней","pluralMinimalPairs-count-other":"из {0} книги за {0} дня","other":"Сверните направо на {0}-м перекрестке."}}},"ja":{"identity":{"version":{"_number":"$Revision: 13701 $","_cldrVersion":"32"},"language":"ja"},"dates":{"calendars":{"gregorian":{"months":{"format":{"abbreviated":{"1":"1月","2":"2月","3":"3月","4":"4月","5":"5月","6":"6月","7":"7月","8":"8月","9":"9月","10":"10月","11":"11月","12":"12月"},"narrow":{"1":"1","2":"2","3":"3","4":"4","5":"5","6":"6","7":"7","8":"8","9":"9","10":"10","11":"11","12":"12"},"wide":{"1":"1月","2":"2月","3":"3月","4":"4月","5":"5月","6":"6月","7":"7月","8":"8月","9":"9月","10":"10月","11":"11月","12":"12月"}},"stand-alone":{"abbreviated":{"1":"1月","2":"2月","3":"3月","4":"4月","5":"5月","6":"6月","7":"7月","8":"8月","9":"9月","10":"10月","11":"11月","12":"12月"},"narrow":{"1":"1","2":"2","3":"3","4":"4","5":"5","6":"6","7":"7","8":"8","9":"9","10":"10","11":"11","12":"12"},"wide":{"1":"1月","2":"2月","3":"3月","4":"4月","5":"5月","6":"6月","7":"7月","8":"8月","9":"9月","10":"10月","11":"11月","12":"12月"}}},"days":{"format":{"abbreviated":{"sun":"日","mon":"月","tue":"火","wed":"水","thu":"木","fri":"金","sat":"土"},"narrow":{"sun":"日","mon":"月","tue":"火","wed":"水","thu":"木","fri":"金","sat":"土"},"short":{"sun":"日","mon":"月","tue":"火","wed":"水","thu":"木","fri":"金","sat":"土"},"wide":{"sun":"日曜日","mon":"月曜日","tue":"火曜日","wed":"水曜日","thu":"木曜日","fri":"金曜日","sat":"土曜日"}},"stand-alone":{"abbreviated":{"sun":"日","mon":"月","tue":"火","wed":"水","thu":"木","fri":"金","sat":"土"},"narrow":{"sun":"日","mon":"月","tue":"火","wed":"水","thu":"木","fri":"金","sat":"土"},"short":{"sun":"日","mon":"月","tue":"火","wed":"水","thu":"木","fri":"金","sat":"土"},"wide":{"sun":"日曜日","mon":"月曜日","tue":"火曜日","wed":"水曜日","thu":"木曜日","fri":"金曜日","sat":"土曜日"}}},"quarters":{"format":{"abbreviated":{"1":"Q1","2":"Q2","3":"Q3","4":"Q4"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"第1四半期","2":"第2四半期","3":"第3四半期","4":"第4四半期"}},"stand-alone":{"abbreviated":{"1":"Q1","2":"Q2","3":"Q3","4":"Q4"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"第1四半期","2":"第2四半期","3":"第3四半期","4":"第4四半期"}}},"dayPeriods":{"format":{"abbreviated":{"midnight":"真夜中","am":"午前","noon":"正午","pm":"午後","morning1":"朝","afternoon1":"昼","evening1":"夕方","night1":"夜","night2":"夜中"},"narrow":{"midnight":"真夜中","am":"午前","noon":"正午","pm":"午後","morning1":"朝","afternoon1":"昼","evening1":"夕方","night1":"夜","night2":"夜中"},"wide":{"midnight":"真夜中","am":"午前","noon":"正午","pm":"午後","morning1":"朝","afternoon1":"昼","evening1":"夕方","night1":"夜","night2":"夜中"}},"stand-alone":{"abbreviated":{"midnight":"真夜中","am":"午前","noon":"正午","pm":"午後","morning1":"朝","afternoon1":"昼","evening1":"夕方","night1":"夜","night2":"夜中"},"narrow":{"midnight":"真夜中","am":"午前","noon":"正午","pm":"午後","morning1":"朝","afternoon1":"昼","evening1":"夕方","night1":"夜","night2":"夜中"},"wide":{"midnight":"真夜中","am":"午前","noon":"正午","pm":"午後","morning1":"朝","afternoon1":"昼","evening1":"夕方","night1":"夜","night2":"夜中"}}},"eras":{"eraNames":{"0":"紀元前","1":"西暦","0-alt-variant":"西暦紀元前","1-alt-variant":"西暦紀元"},"eraAbbr":{"0":"紀元前","1":"西暦","0-alt-variant":"西暦紀元前","1-alt-variant":"西暦紀元"},"eraNarrow":{"0":"BC","1":"AD","0-alt-variant":"BCE","1-alt-variant":"CE"}},"dateFormats":{"full":"y年M月d日EEEE","long":"y年M月d日","medium":"y/MM/dd","short":"y/MM/dd"},"timeFormats":{"full":"H時mm分ss秒 zzzz","long":"H:mm:ss z","medium":"H:mm:ss","short":"H:mm"},"dateTimeFormats":{"full":"{1} {0}","long":"{1} {0}","medium":"{1} {0}","short":"{1} {0}","availableFormats":{"Bh":"BK時","Bhm":"BK:mm","Bhms":"BK:mm:ss","d":"d日","E":"ccc","EBhm":"BK:mm (E)","EBhms":"BK:mm:ss (E)","Ed":"d日(E)","EEEEd":"d日EEEE","Ehm":"aK:mm (E)","EHm":"H:mm (E)","Ehms":"aK:mm:ss (E)","EHms":"H:mm:ss (E)","Gy":"Gy年","GyMMM":"Gy年M月","GyMMMd":"Gy年M月d日","GyMMMEd":"Gy年M月d日(E)","GyMMMEEEEd":"Gy年M月d日EEEE","h":"aK時","H":"H時","hm":"aK:mm","Hm":"H:mm","hms":"aK:mm:ss","Hms":"H:mm:ss","hmsv":"aK:mm:ss v","Hmsv":"H:mm:ss v","hmv":"aK:mm v","Hmv":"H:mm v","M":"M月","Md":"M/d","MEd":"M/d(E)","MEEEEd":"M/dEEEE","MMM":"M月","MMMd":"M月d日","MMMEd":"M月d日(E)","MMMEEEEd":"M月d日EEEE","MMMMd":"M月d日","MMMMW-count-other":"M月第W週","ms":"mm:ss","y":"y年","yM":"y/M","yMd":"y/M/d","yMEd":"y/M/d(E)","yMEEEEd":"y/M/dEEEE","yMM":"y/MM","yMMM":"y年M月","yMMMd":"y年M月d日","yMMMEd":"y年M月d日(E)","yMMMEEEEd":"y年M月d日EEEE","yMMMM":"y年M月","yQQQ":"y/QQQ","yQQQQ":"y年QQQQ","yw-count-other":"Y年第w週"},"appendItems":{"Day":"{0} ({2}: {1})","Day-Of-Week":"{0} {1}","Era":"{1} {0}","Hour":"{0} ({2}: {1})","Minute":"{0} ({2}: {1})","Month":"{0} ({2}: {1})","Quarter":"{0} ({2}: {1})","Second":"{0} ({2}: {1})","Timezone":"{0} {1}","Week":"{0} ({2}: {1})","Year":"{1} {0}"},"intervalFormats":{"intervalFormatFallback":"{0}~{1}","d":{"d":"d日~d日"},"h":{"a":"aK時~aK時","h":"aK時~K時"},"H":{"H":"H時~H時"},"hm":{"a":"aK時mm分~aK時mm分","h":"aK時mm分~K時mm分","m":"aK時mm分~K時mm分"},"Hm":{"H":"H時mm分~H時mm分","m":"H時mm分~H時mm分"},"hmv":{"a":"aK時mm分~aK時mm分(v)","h":"aK時mm分~K時mm分(v)","m":"aK時mm分~K時mm分(v)"},"Hmv":{"H":"H時mm分~H時mm分(v)","m":"H時mm分~H時mm分(v)"},"hv":{"a":"aK時~aK時(v)","h":"aK時~K時(v)"},"Hv":{"H":"H時~H時(v)"},"M":{"M":"M月~M月"},"Md":{"d":"MM/dd~MM/dd","M":"MM/dd~MM/dd"},"MEd":{"d":"MM/dd(E)~MM/dd(E)","M":"MM/dd(E)~MM/dd(E)"},"MMM":{"M":"M月~M月"},"MMMd":{"d":"M月d日~d日","M":"M月d日~M月d日"},"MMMEd":{"d":"M月d日(E)~d日(E)","M":"M月d日(E)~M月d日(E)"},"MMMM":{"M":"M月~M月"},"y":{"y":"y年~y年"},"yM":{"M":"y/MM~y/MM","y":"y/MM~y/MM"},"yMd":{"d":"y/MM/dd~y/MM/dd","M":"y/MM/dd~y/MM/dd","y":"y/MM/dd~y/MM/dd"},"yMEd":{"d":"y/MM/dd(E)~y/MM/dd(E)","M":"y/MM/dd(E)~y/MM/dd(E)","y":"y/MM/dd(E)~y/MM/dd(E)"},"yMMM":{"M":"y年M月~M月","y":"y年M月~y年M月"},"yMMMd":{"d":"y年M月d日~d日","M":"y年M月d日~M月d日","y":"y年M月d日~y年M月d日"},"yMMMEd":{"d":"y年M月d日(E)~d日(E)","M":"y年M月d日(E)~M月d日(E)","y":"y年M月d日(E)~y年M月d日(E)"},"yMMMM":{"M":"y年M月~M月","y":"y年M月~y年M月"}}}}},"fields":{"era":{"displayName":"時代"},"era-short":{"displayName":"時代"},"era-narrow":{"displayName":"時代"},"year":{"displayName":"年","relative-type--1":"昨年","relative-type-0":"今年","relative-type-1":"翌年","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 年後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 年前"}},"year-short":{"displayName":"年","relative-type--1":"昨年","relative-type-0":"今年","relative-type-1":"翌年","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 年後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 年前"}},"year-narrow":{"displayName":"年","relative-type--1":"昨年","relative-type-0":"今年","relative-type-1":"翌年","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}年後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}年前"}},"quarter":{"displayName":"四半期","relative-type--1":"前四半期","relative-type-0":"今四半期","relative-type-1":"翌四半期","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 四半期後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 四半期前"}},"quarter-short":{"displayName":"四半期","relative-type--1":"前四半期","relative-type-0":"今四半期","relative-type-1":"翌四半期","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 四半期後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 四半期前"}},"quarter-narrow":{"displayName":"四半期","relative-type--1":"前四半期","relative-type-0":"今四半期","relative-type-1":"翌四半期","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}四半期後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}四半期前"}},"month":{"displayName":"月","relative-type--1":"先月","relative-type-0":"今月","relative-type-1":"翌月","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} か月後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} か月前"}},"month-short":{"displayName":"月","relative-type--1":"先月","relative-type-0":"今月","relative-type-1":"翌月","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} か月後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} か月前"}},"month-narrow":{"displayName":"月","relative-type--1":"先月","relative-type-0":"今月","relative-type-1":"翌月","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}か月後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}か月前"}},"week":{"displayName":"週","relative-type--1":"先週","relative-type-0":"今週","relative-type-1":"翌週","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 週間後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 週間前"},"relativePeriod":"{0} 日の週"},"week-short":{"displayName":"週","relative-type--1":"先週","relative-type-0":"今週","relative-type-1":"翌週","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 週間後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 週間前"},"relativePeriod":"{0} 日の週"},"week-narrow":{"displayName":"週","relative-type--1":"先週","relative-type-0":"今週","relative-type-1":"翌週","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}週間後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}週間前"},"relativePeriod":"{0}日の週"},"weekOfMonth":{"displayName":"月の週番号"},"weekOfMonth-short":{"displayName":"月の週番号"},"weekOfMonth-narrow":{"displayName":"月の週番号"},"day":{"displayName":"日","relative-type--2":"一昨日","relative-type--1":"昨日","relative-type-0":"今日","relative-type-1":"明日","relative-type-2":"明後日","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 日後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 日前"}},"day-short":{"displayName":"日","relative-type--2":"一昨日","relative-type--1":"昨日","relative-type-0":"今日","relative-type-1":"明日","relative-type-2":"明後日","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 日後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 日前"}},"day-narrow":{"displayName":"日","relative-type--2":"一昨日","relative-type--1":"昨日","relative-type-0":"今日","relative-type-1":"明日","relative-type-2":"明後日","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}日後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}日前"}},"dayOfYear":{"displayName":"年の通日"},"dayOfYear-short":{"displayName":"年の通日"},"dayOfYear-narrow":{"displayName":"通日"},"weekday":{"displayName":"曜日"},"weekday-short":{"displayName":"曜日"},"weekday-narrow":{"displayName":"曜日"},"weekdayOfMonth":{"displayName":"月の曜日番号"},"weekdayOfMonth-short":{"displayName":"月の曜日番号"},"weekdayOfMonth-narrow":{"displayName":"月の曜日番号"},"sun":{"relative-type--1":"先週の日曜日","relative-type-0":"今週の日曜日","relative-type-1":"来週の日曜日","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個後の日曜日"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個前の日曜日"}},"sun-short":{"relative-type--1":"先週の日曜","relative-type-0":"今週の日曜","relative-type-1":"来週の日曜","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個後の日曜"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個前の日曜"}},"sun-narrow":{"relative-type--1":"先週の日曜","relative-type-0":"今週の日曜","relative-type-1":"来週の日曜","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}個後の日曜"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}個前の日曜"}},"mon":{"relative-type--1":"先週の月曜日","relative-type-0":"今週の月曜日","relative-type-1":"来週の月曜日","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個後の月曜日"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個前の月曜日"}},"mon-short":{"relative-type--1":"先週の月曜","relative-type-0":"今週の月曜","relative-type-1":"来週の月曜","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個後の月曜"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個前の月曜"}},"mon-narrow":{"relative-type--1":"先週の月曜","relative-type-0":"今週の月曜","relative-type-1":"来週の月曜","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}個後の月曜"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}個前の月曜"}},"tue":{"relative-type--1":"先週の火曜日","relative-type-0":"今週の火曜日","relative-type-1":"来週の火曜日","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個後の火曜日"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個前の火曜日"}},"tue-short":{"relative-type--1":"先週の火曜","relative-type-0":"今週の火曜","relative-type-1":"来週の火曜","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個後の火曜"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個前の火曜"}},"tue-narrow":{"relative-type--1":"先週の火曜","relative-type-0":"今週の火曜","relative-type-1":"来週の火曜","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}個後の火曜"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}個前の火曜"}},"wed":{"relative-type--1":"先週の水曜日","relative-type-0":"今週の水曜日","relative-type-1":"来週の水曜日","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個後の水曜日"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個前の水曜日"}},"wed-short":{"relative-type--1":"先週の水曜","relative-type-0":"今週の水曜","relative-type-1":"来週の水曜","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個後の水曜"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個前の水曜"}},"wed-narrow":{"relative-type--1":"先週の水曜","relative-type-0":"今週の水曜","relative-type-1":"来週の水曜","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}個後の水曜"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}個前の水曜"}},"thu":{"relative-type--1":"先週の木曜日","relative-type-0":"今週の木曜日","relative-type-1":"来週の木曜日","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個後の木曜日"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個前の木曜日"}},"thu-short":{"relative-type--1":"先週の木曜","relative-type-0":"今週の木曜","relative-type-1":"来週の木曜","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個後の木曜"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個前の木曜"}},"thu-narrow":{"relative-type--1":"先週の木曜","relative-type-0":"今週の木曜","relative-type-1":"来週の木曜","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}個後の木曜"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}個前の木曜"}},"fri":{"relative-type--1":"先週の金曜日","relative-type-0":"今週の金曜日","relative-type-1":"来週の金曜日","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個後の金曜日"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個前の金曜日"}},"fri-short":{"relative-type--1":"先週の金曜","relative-type-0":"今週の金曜","relative-type-1":"来週の金曜","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個後の金曜"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個前の金曜"}},"fri-narrow":{"relative-type--1":"先週の金曜","relative-type-0":"今週の金曜","relative-type-1":"来週の金曜","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}個後の金曜"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}個前の金曜"}},"sat":{"relative-type--1":"先週の土曜日","relative-type-0":"今週の土曜日","relative-type-1":"来週の土曜日","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個後の土曜日"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個前の土曜日"}},"sat-short":{"relative-type--1":"先週の土曜","relative-type-0":"今週の土曜","relative-type-1":"来週の土曜","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個後の土曜"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個前の土曜"}},"sat-narrow":{"relative-type--1":"先週の土曜","relative-type-0":"今週の土曜","relative-type-1":"来週の土曜","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}個後の土曜"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}個前の土曜"}},"dayperiod-short":{"displayName":"午前/午後"},"dayperiod":{"displayName":"午前/午後"},"dayperiod-narrow":{"displayName":"午前/午後"},"hour":{"displayName":"時","relative-type-0":"1 時間以内","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 時間後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 時間前"}},"hour-short":{"displayName":"時","relative-type-0":"1 時間以内","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 時間後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 時間前"}},"hour-narrow":{"displayName":"時","relative-type-0":"1 時間以内","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}時間後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}時間前"}},"minute":{"displayName":"分","relative-type-0":"1 分以内","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 分後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 分前"}},"minute-short":{"displayName":"分","relative-type-0":"1 分以内","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 分後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 分前"}},"minute-narrow":{"displayName":"分","relative-type-0":"1 分以内","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}分後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}分前"}},"second":{"displayName":"秒","relative-type-0":"今","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 秒後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 秒前"}},"second-short":{"displayName":"秒","relative-type-0":"今","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 秒後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 秒前"}},"second-narrow":{"displayName":"秒","relative-type-0":"今","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}秒後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}秒前"}},"zone":{"displayName":"タイムゾーン"},"zone-short":{"displayName":"タイムゾーン"},"zone-narrow":{"displayName":"タイムゾーン"}}},"numbers":{"currencies":{"ADP":{"displayName":"アンドラ ペセタ","displayName-count-other":"アンドラ ペセタ","symbol":"ADP"},"AED":{"displayName":"アラブ首長国連邦ディルハム","displayName-count-other":"UAE ディルハム","symbol":"AED"},"AFA":{"displayName":"アフガニスタン アフガニー (1927–2002)","displayName-count-other":"アフガニスタン アフガニー (1927–2002)","symbol":"AFA"},"AFN":{"displayName":"アフガニスタン アフガニー","displayName-count-other":"アフガニスタン アフガニー","symbol":"AFN"},"ALK":{"displayName":"アルバニア レク (1946–1965)","displayName-count-other":"アルバニア レク (1946–1965)","symbol":"ALK"},"ALL":{"displayName":"アルバニア レク","displayName-count-other":"アルバニア レク","symbol":"ALL"},"AMD":{"displayName":"アルメニア ドラム","displayName-count-other":"アルメニア ドラム","symbol":"AMD"},"ANG":{"displayName":"オランダ領アンティル ギルダー","displayName-count-other":"オランダ領アンティル ギルダー","symbol":"ANG"},"AOA":{"displayName":"アンゴラ クワンザ","displayName-count-other":"アンゴラ クワンザ","symbol":"AOA","symbol-alt-narrow":"Kz"},"AOK":{"displayName":"アンゴラ クワンザ (1977–1991)","displayName-count-other":"アンゴラ クワンザ (1977–1991)","symbol":"AOK"},"AON":{"displayName":"アンゴラ 新クワンザ (1990–2000)","displayName-count-other":"アンゴラ 新クワンザ (1990–2000)","symbol":"AON"},"AOR":{"displayName":"アンゴラ 旧クワンザ (1995–1999)","displayName-count-other":"アンゴラ 旧クワンザ (1995–1999)","symbol":"AOR"},"ARA":{"displayName":"アルゼンチン アゥストラール","displayName-count-other":"アルゼンチン アゥストラール","symbol":"ARA"},"ARL":{"displayName":"アルゼンチン・ペソ・レイ(1970–1983)","displayName-count-other":"アルゼンチン・ペソ・レイ(1970–1983)","symbol":"ARL"},"ARM":{"displayName":"アルゼンチン・ペソ(1881–1970)","displayName-count-other":"アルゼンチン・ペソ(1881–1970)","symbol":"ARM"},"ARP":{"displayName":"アルゼンチン ペソ (1983–1985)","displayName-count-other":"アルゼンチン ペソ (1983–1985)","symbol":"ARP"},"ARS":{"displayName":"アルゼンチン ペソ","displayName-count-other":"アルゼンチン ペソ","symbol":"ARS","symbol-alt-narrow":"$"},"ATS":{"displayName":"オーストリア シリング","displayName-count-other":"オーストリア シリング","symbol":"ATS"},"AUD":{"displayName":"オーストラリア ドル","displayName-count-other":"オーストラリア ドル","symbol":"A$","symbol-alt-narrow":"$"},"AWG":{"displayName":"アルバ ギルダー","displayName-count-other":"アルバ ギルダー","symbol":"AWG"},"AZM":{"displayName":"アゼルバイジャン マナト (1993–2006)","displayName-count-other":"アゼルバイジャン マナト (1993–2006)","symbol":"AZM"},"AZN":{"displayName":"アゼルバイジャン マナト","displayName-count-other":"アゼルバイジャン マナト","symbol":"AZN"},"BAD":{"displayName":"ボスニア・ヘルツェゴビナ ディナール (1992–1994)","displayName-count-other":"ボスニア・ヘルツェゴビナ ディナール (1992–1994)","symbol":"BAD"},"BAM":{"displayName":"ボスニア・ヘルツェゴビナ 兌換マルク (BAM)","displayName-count-other":"ボスニア・ヘルツェゴビナ 兌換マルク (BAM)","symbol":"BAM","symbol-alt-narrow":"KM"},"BAN":{"displayName":"ボスニア・ヘルツェゴビナ 新ディナール(1994–1997)","displayName-count-other":"ボスニア・ヘルツェゴビナ 新ディナール(1994–1997)","symbol":"BAN"},"BBD":{"displayName":"バルバドス ドル","displayName-count-other":"バルバドス ドル","symbol":"BBD","symbol-alt-narrow":"$"},"BDT":{"displayName":"バングラデシュ タカ","displayName-count-other":"バングラデシュ タカ","symbol":"BDT","symbol-alt-narrow":"৳"},"BEC":{"displayName":"ベルギー フラン (BEC)","displayName-count-other":"ベルギー フラン (BEC)","symbol":"BEC"},"BEF":{"displayName":"ベルギー フラン","displayName-count-other":"ベルギー フラン","symbol":"BEF"},"BEL":{"displayName":"ベルギー フラン (BEL)","displayName-count-other":"ベルギー フラン (BEL)","symbol":"BEL"},"BGL":{"displayName":"ブルガリア レフ","displayName-count-other":"ブルガリア レフ","symbol":"BGL"},"BGM":{"displayName":"ブルガリア社会主義 レフ","displayName-count-other":"ブルガリア社会主義 レフ","symbol":"BGM"},"BGN":{"displayName":"ブルガリア 新レフ","displayName-count-other":"ブルガリア 新レフ","symbol":"BGN"},"BGO":{"displayName":"ブルガリア レフ(1879–1952)","displayName-count-other":"ブルガリア レフ(1879–1952)","symbol":"BGO"},"BHD":{"displayName":"バーレーン ディナール","displayName-count-other":"バーレーン ディナール","symbol":"BHD"},"BIF":{"displayName":"ブルンジ フラン","displayName-count-other":"ブルンジ フラン","symbol":"BIF"},"BMD":{"displayName":"バミューダ ドル","displayName-count-other":"バミューダ ドル","symbol":"BMD","symbol-alt-narrow":"$"},"BND":{"displayName":"ブルネイ ドル","displayName-count-other":"ブルネイ ドル","symbol":"BND","symbol-alt-narrow":"$"},"BOB":{"displayName":"ボリビア ボリビアーノ","displayName-count-other":"ボリビア ボリビアーノ","symbol":"BOB","symbol-alt-narrow":"Bs"},"BOL":{"displayName":"ボリビア ボリビアーノ (1863–1963)","displayName-count-other":"ボリビア ボリビアーノ (1863–1963)","symbol":"BOL"},"BOP":{"displayName":"ボリビア ペソ","displayName-count-other":"ボリビア ペソ","symbol":"BOP"},"BOV":{"displayName":"ボリビア (Mvdol)","displayName-count-other":"ボリビア (Mvdol)","symbol":"BOV"},"BRB":{"displayName":"ブラジル 新クルゼイロ (1967–1986)","displayName-count-other":"ブラジル 新クルゼイロ (1967–1986)","symbol":"BRB"},"BRC":{"displayName":"ブラジル クルザード (1986–1989)","displayName-count-other":"ブラジル クルザード (1986–1989)","symbol":"BRC"},"BRE":{"displayName":"ブラジル クルゼイロ (1990–1993)","displayName-count-other":"ブラジル クルゼイロ (1990–1993)","symbol":"BRE"},"BRL":{"displayName":"ブラジル レアル","displayName-count-other":"ブラジル レアル","symbol":"R$","symbol-alt-narrow":"R$"},"BRN":{"displayName":"ブラジル 新クルザード (1989–1990)","displayName-count-other":"ブラジル 新クルザード (1989–1990)","symbol":"BRN"},"BRR":{"displayName":"ブラジル クルゼイロ (1993–1994)","displayName-count-other":"ブラジル クルゼイロ (1993–1994)","symbol":"BRR"},"BRZ":{"displayName":"ブラジル クルゼイロ(1942–1967)","displayName-count-other":"ブラジル クルゼイロ(1942–1967)","symbol":"BRZ"},"BSD":{"displayName":"バハマ ドル","displayName-count-other":"バハマ ドル","symbol":"BSD","symbol-alt-narrow":"$"},"BTN":{"displayName":"ブータン ニュルタム","displayName-count-other":"ブータン ニュルタム","symbol":"BTN"},"BUK":{"displayName":"ビルマ チャット","displayName-count-other":"ビルマ チャット","symbol":"BUK"},"BWP":{"displayName":"ボツワナ プラ","displayName-count-other":"ボツワナ プラ","symbol":"BWP","symbol-alt-narrow":"P"},"BYB":{"displayName":"ベラルーシ 新ルーブル (1994–1999)","displayName-count-other":"ベラルーシ 新ルーブル (1994–1999)","symbol":"BYB"},"BYN":{"displayName":"ベラルーシ ルーブル","displayName-count-other":"ベラルーシ ルーブル","symbol":"BYN","symbol-alt-narrow":"р."},"BYR":{"displayName":"ベラルーシ ルーブル (2000–2016)","displayName-count-other":"ベラルーシ ルーブル (2000–2016)","symbol":"BYR"},"BZD":{"displayName":"ベリーズ ドル","displayName-count-other":"ベリーズ ドル","symbol":"BZD","symbol-alt-narrow":"$"},"CAD":{"displayName":"カナダ ドル","displayName-count-other":"カナダ ドル","symbol":"CA$","symbol-alt-narrow":"$"},"CDF":{"displayName":"コンゴ フラン","displayName-count-other":"コンゴ フラン","symbol":"CDF"},"CHE":{"displayName":"ユーロ (WIR)","displayName-count-other":"ユーロ (WIR)","symbol":"CHE"},"CHF":{"displayName":"スイス フラン","displayName-count-other":"スイス フラン","symbol":"CHF"},"CHW":{"displayName":"フラン (WIR)","displayName-count-other":"フラン (WIR)","symbol":"CHW"},"CLE":{"displayName":"チリ エスクード","displayName-count-other":"チリ エスクード","symbol":"CLE"},"CLF":{"displayName":"チリ ウニダ・デ・フォメント (UF)","displayName-count-other":"チリ ウニダ・デ・フォメント (UF)","symbol":"CLF"},"CLP":{"displayName":"チリ ペソ","displayName-count-other":"チリ ペソ","symbol":"CLP","symbol-alt-narrow":"$"},"CNH":{"displayName":"中国人民元(オフショア)","displayName-count-other":"中国人民元(オフショア)","symbol":"CNH"},"CNX":{"displayName":"中国人民銀行ドル","displayName-count-other":"中国人民銀行ドル","symbol":"CNX"},"CNY":{"displayName":"中国人民元","displayName-count-other":"中国人民元","symbol":"元","symbol-alt-narrow":"¥"},"COP":{"displayName":"コロンビア ペソ","displayName-count-other":"コロンビア ペソ","symbol":"COP","symbol-alt-narrow":"$"},"COU":{"displayName":"コロンビア レアル (UVR)","displayName-count-other":"コロンビア レアル (UVR)","symbol":"COU"},"CRC":{"displayName":"コスタリカ コロン","displayName-count-other":"コスタリカ コロン","symbol":"CRC","symbol-alt-narrow":"₡"},"CSD":{"displayName":"セルビア ディナール (2002–2006)","displayName-count-other":"セルビア ディナール (2002–2006)","symbol":"CSD"},"CSK":{"displayName":"チェコスロバキア コルナ","displayName-count-other":"チェコスロバキア コルナ","symbol":"CSK"},"CUC":{"displayName":"キューバ 兌換ペソ","displayName-count-other":"キューバ 兌換ペソ","symbol":"CUC","symbol-alt-narrow":"$"},"CUP":{"displayName":"キューバ ペソ","displayName-count-other":"キューバ ペソ","symbol":"CUP","symbol-alt-narrow":"$"},"CVE":{"displayName":"カーボベルデ エスクード","displayName-count-other":"カーボベルデ エスクード","symbol":"CVE"},"CYP":{"displayName":"キプロス ポンド","displayName-count-other":"キプロス ポンド","symbol":"CYP"},"CZK":{"displayName":"チェコ コルナ","displayName-count-other":"チェコ コルナ","symbol":"CZK","symbol-alt-narrow":"Kč"},"DDM":{"displayName":"東ドイツ マルク","displayName-count-other":"東ドイツ マルク","symbol":"DDM"},"DEM":{"displayName":"ドイツ マルク","displayName-count-other":"ドイツ マルク","symbol":"DEM"},"DJF":{"displayName":"ジブチ フラン","displayName-count-other":"ジブチ フラン","symbol":"DJF"},"DKK":{"displayName":"デンマーク クローネ","displayName-count-other":"デンマーク クローネ","symbol":"DKK","symbol-alt-narrow":"kr"},"DOP":{"displayName":"ドミニカ ペソ","displayName-count-other":"ドミニカ ペソ","symbol":"DOP","symbol-alt-narrow":"$"},"DZD":{"displayName":"アルジェリア ディナール","displayName-count-other":"アルジェリア ディナール","symbol":"DZD"},"ECS":{"displayName":"エクアドル スクレ","displayName-count-other":"エクアドル スクレ","symbol":"ECS"},"ECV":{"displayName":"エクアドル (UVC)","displayName-count-other":"エクアドル (UVC)","symbol":"ECV"},"EEK":{"displayName":"エストニア クルーン","displayName-count-other":"エストニア クルーン","symbol":"EEK"},"EGP":{"displayName":"エジプト ポンド","displayName-count-other":"エジプト ポンド","symbol":"EGP","symbol-alt-narrow":"E£"},"ERN":{"displayName":"エリトリア ナクファ","displayName-count-other":"エリトリア ナクファ","symbol":"ERN"},"ESA":{"displayName":"スペインペセタ(勘定A)","displayName-count-other":"スペインペセタ(勘定A)","symbol":"ESA"},"ESB":{"displayName":"スペイン 兌換ペセタ","displayName-count-other":"スペイン 兌換ペセタ","symbol":"ESB"},"ESP":{"displayName":"スペイン ペセタ","displayName-count-other":"スペイン ペセタ","symbol":"ESP","symbol-alt-narrow":"₧"},"ETB":{"displayName":"エチオピア ブル","displayName-count-other":"エチオピア ブル","symbol":"ETB"},"EUR":{"displayName":"ユーロ","displayName-count-other":"ユーロ","symbol":"€","symbol-alt-narrow":"€"},"FIM":{"displayName":"フィンランド マルカ","displayName-count-other":"フィンランド マルカ","symbol":"FIM"},"FJD":{"displayName":"フィジー ドル","displayName-count-other":"フィジー ドル","symbol":"FJD","symbol-alt-narrow":"$"},"FKP":{"displayName":"フォークランド(マルビナス)諸島 ポンド","displayName-count-other":"フォークランド(マルビナス)諸島 ポンド","symbol":"FKP","symbol-alt-narrow":"£"},"FRF":{"displayName":"フランス フラン","displayName-count-other":"フランス フラン","symbol":"FRF"},"GBP":{"displayName":"英国ポンド","displayName-count-other":"英国ポンド","symbol":"£","symbol-alt-narrow":"£"},"GEK":{"displayName":"ジョージア クーポン ラリ","displayName-count-other":"ジョージア クーポン ラリ","symbol":"GEK"},"GEL":{"displayName":"ジョージア ラリ","displayName-count-other":"ジョージア ラリ","symbol":"GEL","symbol-alt-narrow":"₾","symbol-alt-variant":"₾"},"GHC":{"displayName":"ガーナ セディ (1979–2007)","displayName-count-other":"ガーナ セディ (1979–2007)","symbol":"GHC"},"GHS":{"displayName":"ガーナ セディ","displayName-count-other":"ガーナ セディ","symbol":"GHS"},"GIP":{"displayName":"ジブラルタル ポンド","displayName-count-other":"ジブラルタル ポンド","symbol":"GIP","symbol-alt-narrow":"£"},"GMD":{"displayName":"ガンビア ダラシ","displayName-count-other":"ガンビア ダラシ","symbol":"GMD"},"GNF":{"displayName":"ギニア フラン","displayName-count-other":"ギニア フラン","symbol":"GNF","symbol-alt-narrow":"FG"},"GNS":{"displayName":"ギニア シリー","displayName-count-other":"ギニア シリー","symbol":"GNS"},"GQE":{"displayName":"赤道ギニア エクウェレ","displayName-count-other":"赤道ギニア エクウェレ","symbol":"GQE"},"GRD":{"displayName":"ギリシャ ドラクマ","displayName-count-other":"ギリシャ ドラクマ","symbol":"GRD"},"GTQ":{"displayName":"グアテマラ ケツァル","displayName-count-other":"グアテマラ ケツァル","symbol":"GTQ","symbol-alt-narrow":"Q"},"GWE":{"displayName":"ポルトガル領ギニア エスクード","displayName-count-other":"ポルトガル領ギニア エスクード","symbol":"GWE"},"GWP":{"displayName":"ギニアビサウ ペソ","displayName-count-other":"ギニアビサウ ペソ","symbol":"GWP"},"GYD":{"displayName":"ガイアナ ドル","displayName-count-other":"ガイアナ ドル","symbol":"GYD","symbol-alt-narrow":"$"},"HKD":{"displayName":"香港ドル","displayName-count-other":"香港ドル","symbol":"HK$","symbol-alt-narrow":"$"},"HNL":{"displayName":"ホンジュラス レンピラ","displayName-count-other":"ホンジュラス レンピラ","symbol":"HNL","symbol-alt-narrow":"L"},"HRD":{"displayName":"クロアチア ディナール","displayName-count-other":"クロアチア ディナール","symbol":"HRD"},"HRK":{"displayName":"クロアチア クーナ","displayName-count-other":"クロアチア クーナ","symbol":"HRK","symbol-alt-narrow":"kn"},"HTG":{"displayName":"ハイチ グールド","displayName-count-other":"ハイチ グールド","symbol":"HTG"},"HUF":{"displayName":"ハンガリー フォリント","displayName-count-other":"ハンガリー フォリント","symbol":"HUF","symbol-alt-narrow":"Ft"},"IDR":{"displayName":"インドネシア ルピア","displayName-count-other":"インドネシア ルピア","symbol":"IDR","symbol-alt-narrow":"Rp"},"IEP":{"displayName":"アイリッシュ ポンド","displayName-count-other":"アイリッシュ ポンド","symbol":"IEP"},"ILP":{"displayName":"イスラエル ポンド","displayName-count-other":"イスラエル ポンド","symbol":"ILP"},"ILR":{"displayName":"イスラエル シェケル (1980–1985)","displayName-count-other":"イスラエル シェケル (1980–1985)","symbol":"ILR"},"ILS":{"displayName":"イスラエル新シェケル","displayName-count-other":"イスラエル新シェケル","symbol":"₪","symbol-alt-narrow":"₪"},"INR":{"displayName":"インド ルピー","displayName-count-other":"インド ルピー","symbol":"₹","symbol-alt-narrow":"₹"},"IQD":{"displayName":"イラク ディナール","displayName-count-other":"イラク ディナール","symbol":"IQD"},"IRR":{"displayName":"イラン リアル","displayName-count-other":"イラン リアル","symbol":"IRR"},"ISJ":{"displayName":"アイスランド クローナ (1918–1981)","displayName-count-other":"アイスランド クローナ (1918–1981)","symbol":"ISJ"},"ISK":{"displayName":"アイスランド クローナ","displayName-count-other":"アイスランド クローナ","symbol":"ISK","symbol-alt-narrow":"kr"},"ITL":{"displayName":"イタリア リラ","displayName-count-other":"イタリア リラ","symbol":"ITL"},"JMD":{"displayName":"ジャマイカ ドル","displayName-count-other":"ジャマイカ ドル","symbol":"JMD","symbol-alt-narrow":"$"},"JOD":{"displayName":"ヨルダン ディナール","displayName-count-other":"ヨルダン ディナール","symbol":"JOD"},"JPY":{"displayName":"日本円","displayName-count-other":"円","symbol":"¥","symbol-alt-narrow":"¥"},"KES":{"displayName":"ケニア シリング","displayName-count-other":"ケニア シリング","symbol":"KES"},"KGS":{"displayName":"キルギス ソム","displayName-count-other":"キルギス ソム","symbol":"KGS"},"KHR":{"displayName":"カンボジア リエル","displayName-count-other":"カンボジア リエル","symbol":"KHR","symbol-alt-narrow":"៛"},"KMF":{"displayName":"コモロ フラン","displayName-count-other":"コモロ フラン","symbol":"KMF","symbol-alt-narrow":"CF"},"KPW":{"displayName":"北朝鮮ウォン","displayName-count-other":"北朝鮮ウォン","symbol":"KPW","symbol-alt-narrow":"₩"},"KRH":{"displayName":"韓国 ファン(1953–1962)","displayName-count-other":"韓国 ファン(1953–1962)","symbol":"KRH"},"KRO":{"displayName":"韓国 ウォン(1945–1953)","displayName-count-other":"韓国 ウォン(1945–1953)","symbol":"KRO"},"KRW":{"displayName":"韓国ウォン","displayName-count-other":"韓国ウォン","symbol":"₩","symbol-alt-narrow":"₩"},"KWD":{"displayName":"クウェート ディナール","displayName-count-other":"クウェート ディナール","symbol":"KWD"},"KYD":{"displayName":"ケイマン諸島 ドル","displayName-count-other":"ケイマン諸島 ドル","symbol":"KYD","symbol-alt-narrow":"$"},"KZT":{"displayName":"カザフスタン テンゲ","displayName-count-other":"カザフスタン テンゲ","symbol":"KZT","symbol-alt-narrow":"₸"},"LAK":{"displayName":"ラオス キープ","displayName-count-other":"ラオス キープ","symbol":"LAK","symbol-alt-narrow":"₭"},"LBP":{"displayName":"レバノン ポンド","displayName-count-other":"レバノン ポンド","symbol":"LBP","symbol-alt-narrow":"L£"},"LKR":{"displayName":"スリランカ ルピー","displayName-count-other":"スリランカ ルピー","symbol":"LKR","symbol-alt-narrow":"Rs"},"LRD":{"displayName":"リベリア ドル","displayName-count-other":"リベリア ドル","symbol":"LRD","symbol-alt-narrow":"$"},"LSL":{"displayName":"レソト ロティ","displayName-count-other":"レソト ロティ","symbol":"LSL"},"LTL":{"displayName":"リトアニア リタス","displayName-count-other":"リトアニア リタス","symbol":"LTL","symbol-alt-narrow":"Lt"},"LTT":{"displayName":"リトアニア タロナ","displayName-count-other":"リトアニア タロナ","symbol":"LTT"},"LUC":{"displayName":"ルクセンブルク 兌換フラン","displayName-count-other":"ルクセンブルク 兌換フラン","symbol":"LUC"},"LUF":{"displayName":"ルクセンブルグ フラン","displayName-count-other":"ルクセンブルグ フラン","symbol":"LUF"},"LUL":{"displayName":"ルクセンブルク 金融フラン","displayName-count-other":"ルクセンブルク 金融フラン","symbol":"LUL"},"LVL":{"displayName":"ラトビア ラッツ","displayName-count-other":"ラトビア ラッツ","symbol":"LVL","symbol-alt-narrow":"Ls"},"LVR":{"displayName":"ラトビア ルーブル","displayName-count-other":"ラトビア ルーブル","symbol":"LVR"},"LYD":{"displayName":"リビア ディナール","displayName-count-other":"リビア ディナール","symbol":"LYD"},"MAD":{"displayName":"モロッコ ディルハム","displayName-count-other":"モロッコ ディルハム","symbol":"MAD"},"MAF":{"displayName":"モロッコ フラン","displayName-count-other":"モロッコ フラン","symbol":"MAF"},"MCF":{"displayName":"モネガスク フラン","displayName-count-other":"モネガスク フラン","symbol":"MCF"},"MDC":{"displayName":"モルドバ クーポン","displayName-count-other":"モルドバ クーポン","symbol":"MDC"},"MDL":{"displayName":"モルドバ レイ","displayName-count-other":"モルドバ レイ","symbol":"MDL"},"MGA":{"displayName":"マダガスカル アリアリ","displayName-count-other":"マダガスカル アリアリ","symbol":"MGA","symbol-alt-narrow":"Ar"},"MGF":{"displayName":"マラガシ フラン","displayName-count-other":"マラガシ フラン","symbol":"MGF"},"MKD":{"displayName":"マケドニア デナル","displayName-count-other":"マケドニア デナル","symbol":"MKD"},"MKN":{"displayName":"マケドニア ディナール(1992–1993)","displayName-count-other":"マケドニア ディナール(1992–1993)","symbol":"MKN"},"MLF":{"displayName":"マリ フラン","displayName-count-other":"マリ フラン","symbol":"MLF"},"MMK":{"displayName":"ミャンマー チャット","displayName-count-other":"ミャンマー チャット","symbol":"MMK","symbol-alt-narrow":"K"},"MNT":{"displayName":"モンゴル トグログ","displayName-count-other":"モンゴル トグログ","symbol":"MNT","symbol-alt-narrow":"₮"},"MOP":{"displayName":"マカオ パタカ","displayName-count-other":"マカオ パタカ","symbol":"MOP"},"MRO":{"displayName":"モーリタニア ウギア","displayName-count-other":"モーリタニア ウギア","symbol":"MRO"},"MTL":{"displayName":"マルタ リラ","displayName-count-other":"マルタ リラ","symbol":"MTL"},"MTP":{"displayName":"マルタ ポンド","displayName-count-other":"マルタ ポンド","symbol":"MTP"},"MUR":{"displayName":"モーリシャス ルピー","displayName-count-other":"モーリシャス ルピー","symbol":"MUR","symbol-alt-narrow":"Rs"},"MVP":{"displayName":"モルディブ諸島 ルピー","displayName-count-other":"モルディブ諸島 ルピー","symbol":"MVP"},"MVR":{"displayName":"モルディブ ルフィア","displayName-count-other":"モルディブ ルフィア","symbol":"MVR"},"MWK":{"displayName":"マラウィ クワチャ","displayName-count-other":"マラウィ クワチャ","symbol":"MWK"},"MXN":{"displayName":"メキシコ ペソ","displayName-count-other":"メキシコ ペソ","symbol":"MX$","symbol-alt-narrow":"$"},"MXP":{"displayName":"メキシコ ペソ (1861–1992)","displayName-count-other":"メキシコ ペソ (1861–1992)","symbol":"MXP"},"MXV":{"displayName":"メキシコ (UDI)","displayName-count-other":"メキシコ (UDI)","symbol":"MXV"},"MYR":{"displayName":"マレーシア リンギット","displayName-count-other":"マレーシア リンギット","symbol":"MYR","symbol-alt-narrow":"RM"},"MZE":{"displayName":"モザンピーク エスクード","displayName-count-other":"モザンピーク エスクード","symbol":"MZE"},"MZM":{"displayName":"モザンビーク メティカル (1980–2006)","displayName-count-other":"モザンビーク メティカル (1980–2006)","symbol":"MZM"},"MZN":{"displayName":"モザンビーク メティカル","displayName-count-other":"モザンビーク メティカル","symbol":"MZN"},"NAD":{"displayName":"ナミビア ドル","displayName-count-other":"ナミビア ドル","symbol":"NAD","symbol-alt-narrow":"$"},"NGN":{"displayName":"ナイジェリア ナイラ","displayName-count-other":"ナイジェリア ナイラ","symbol":"NGN","symbol-alt-narrow":"₦"},"NIC":{"displayName":"ニカラグア コルドバ (1988–1991)","displayName-count-other":"ニカラグア コルドバ (1988–1991)","symbol":"NIC"},"NIO":{"displayName":"ニカラグア コルドバ オロ","displayName-count-other":"ニカラグア コルドバ オロ","symbol":"NIO","symbol-alt-narrow":"C$"},"NLG":{"displayName":"オランダ ギルダー","displayName-count-other":"オランダ ギルダー","symbol":"NLG"},"NOK":{"displayName":"ノルウェー クローネ","displayName-count-other":"ノルウェー クローネ","symbol":"NOK","symbol-alt-narrow":"kr"},"NPR":{"displayName":"ネパール ルピー","displayName-count-other":"ネパール ルピー","symbol":"NPR","symbol-alt-narrow":"Rs"},"NZD":{"displayName":"ニュージーランド ドル","displayName-count-other":"ニュージーランド ドル","symbol":"NZ$","symbol-alt-narrow":"$"},"OMR":{"displayName":"オマーン リアル","displayName-count-other":"オマーン リアル","symbol":"OMR"},"PAB":{"displayName":"パナマ バルボア","displayName-count-other":"パナマ バルボア","symbol":"PAB"},"PEI":{"displayName":"ペルー インティ","displayName-count-other":"ペルー インティ","symbol":"PEI"},"PEN":{"displayName":"ペルー ソル","displayName-count-other":"ペルー ソル","symbol":"PEN"},"PES":{"displayName":"ペルー ソル (1863–1965)","displayName-count-other":"ペルー ソル (1863–1965)","symbol":"PES"},"PGK":{"displayName":"パプアニューギニア キナ","displayName-count-other":"パプアニューギニア キナ","symbol":"PGK"},"PHP":{"displayName":"フィリピン ペソ","displayName-count-other":"フィリピン ペソ","symbol":"PHP","symbol-alt-narrow":"₱"},"PKR":{"displayName":"パキスタン ルピー","displayName-count-other":"パキスタン ルピー","symbol":"PKR","symbol-alt-narrow":"Rs"},"PLN":{"displayName":"ポーランド ズウォティ","displayName-count-other":"ポーランド ズウォティ","symbol":"PLN","symbol-alt-narrow":"zł"},"PLZ":{"displayName":"ポーランド ズウォティ (1950–1995)","displayName-count-other":"ポーランド ズウォティ (1950–1995)","symbol":"PLZ"},"PTE":{"displayName":"ポルトガル エスクード","displayName-count-other":"ポルトガル エスクード","symbol":"PTE"},"PYG":{"displayName":"パラグアイ グアラニ","displayName-count-other":"パラグアイ グアラニ","symbol":"PYG","symbol-alt-narrow":"₲"},"QAR":{"displayName":"カタール リアル","displayName-count-other":"カタール リアル","symbol":"QAR"},"RHD":{"displayName":"ローデシア ドル","displayName-count-other":"ローデシア ドル","symbol":"RHD"},"ROL":{"displayName":"ルーマニア レイ (1952–2006)","displayName-count-other":"ルーマニア レイ (1952–2006)","symbol":"ROL"},"RON":{"displayName":"ルーマニア レイ","displayName-count-other":"ルーマニア レイ","symbol":"RON","symbol-alt-narrow":"レイ"},"RSD":{"displayName":"ディナール (セルビア)","displayName-count-other":"ディナール (セルビア)","symbol":"RSD"},"RUB":{"displayName":"ロシア ルーブル","displayName-count-other":"ロシア ルーブル","symbol":"RUB","symbol-alt-narrow":"₽"},"RUR":{"displayName":"ロシア ルーブル (1991–1998)","displayName-count-other":"ロシア ルーブル (1991–1998)","symbol":"RUR","symbol-alt-narrow":"р."},"RWF":{"displayName":"ルワンダ フラン","displayName-count-other":"ルワンダ フラン","symbol":"RWF","symbol-alt-narrow":"RF"},"SAR":{"displayName":"サウジ リヤル","displayName-count-other":"サウジ リヤル","symbol":"SAR"},"SBD":{"displayName":"ソロモン諸島 ドル","displayName-count-other":"ソロモン諸島 ドル","symbol":"SBD","symbol-alt-narrow":"$"},"SCR":{"displayName":"セーシェル ルピー","displayName-count-other":"セーシェル ルピー","symbol":"SCR"},"SDD":{"displayName":"スーダン ディナール (1992–2007)","displayName-count-other":"スーダン ディナール (1992–2007)","symbol":"SDD"},"SDG":{"displayName":"スーダン ポンド","displayName-count-other":"スーダン ポンド","symbol":"SDG"},"SDP":{"displayName":"スーダン ポンド (1957–1998)","displayName-count-other":"スーダン ポンド (1957–1998)","symbol":"SDP"},"SEK":{"displayName":"スウェーデン クローナ","displayName-count-other":"スウェーデン クローナ","symbol":"SEK","symbol-alt-narrow":"kr"},"SGD":{"displayName":"シンガポール ドル","displayName-count-other":"シンガポール ドル","symbol":"SGD","symbol-alt-narrow":"$"},"SHP":{"displayName":"セントヘレナ ポンド","displayName-count-other":"セントヘレナ ポンド","symbol":"SHP","symbol-alt-narrow":"£"},"SIT":{"displayName":"スロベニア トラール","displayName-count-other":"スロベニア トラール","symbol":"SIT"},"SKK":{"displayName":"スロバキア コルナ","displayName-count-other":"スロバキア コルナ","symbol":"SKK"},"SLL":{"displayName":"シエラレオネ レオン","displayName-count-other":"シエラレオネ レオン","symbol":"SLL"},"SOS":{"displayName":"ソマリア シリング","displayName-count-other":"ソマリア シリング","symbol":"SOS"},"SRD":{"displayName":"スリナム ドル","displayName-count-other":"スリナム ドル","symbol":"SRD","symbol-alt-narrow":"$"},"SRG":{"displayName":"スリナム ギルダー","displayName-count-other":"スリナム ギルダー","symbol":"SRG"},"SSP":{"displayName":"南スーダン ポンド","displayName-count-other":"南スーダン ポンド","symbol":"SSP","symbol-alt-narrow":"£"},"STD":{"displayName":"サントメ・プリンシペ ドブラ","displayName-count-other":"サントメ・プリンシペ ドブラ","symbol":"STD","symbol-alt-narrow":"Db"},"STN":{"displayName":"STN","symbol":"STN"},"SUR":{"displayName":"ソ連 ルーブル","displayName-count-other":"ソ連 ルーブル","symbol":"SUR"},"SVC":{"displayName":"エルサルバドル コロン","displayName-count-other":"エルサルバドル コロン","symbol":"SVC"},"SYP":{"displayName":"シリア ポンド","displayName-count-other":"シリア ポンド","symbol":"SYP","symbol-alt-narrow":"£"},"SZL":{"displayName":"スワジランド リランゲニ","displayName-count-other":"スワジランド リランゲニ","symbol":"SZL"},"THB":{"displayName":"タイ バーツ","displayName-count-other":"タイ バーツ","symbol":"THB","symbol-alt-narrow":"฿"},"TJR":{"displayName":"タジキスタン ルーブル","displayName-count-other":"タジキスタン ルーブル","symbol":"TJR"},"TJS":{"displayName":"タジキスタン ソモニ","displayName-count-other":"タジキスタン ソモニ","symbol":"TJS"},"TMM":{"displayName":"トルクメニスタン マナト (1993–2009)","displayName-count-other":"トルクメニスタン マナト (1993–2009)","symbol":"TMM"},"TMT":{"displayName":"トルクメニスタン マナト","displayName-count-other":"トルクメニスタン マナト","symbol":"TMT"},"TND":{"displayName":"チュニジア ディナール","displayName-count-other":"チュニジア ディナール","symbol":"TND"},"TOP":{"displayName":"トンガ パ・アンガ","displayName-count-other":"トンガ パ・アンガ","symbol":"TOP","symbol-alt-narrow":"T$"},"TPE":{"displayName":"ティモール エスクード","displayName-count-other":"ティモール エスクード","symbol":"TPE"},"TRL":{"displayName":"トルコ リラ (1922–2005)","displayName-count-other":"トルコ リラ (1922–2005)","symbol":"TRL"},"TRY":{"displayName":"新トルコリラ","displayName-count-other":"新トルコリラ","symbol":"TRY","symbol-alt-narrow":"₺","symbol-alt-variant":"TL"},"TTD":{"displayName":"トリニダード・トバゴ ドル","displayName-count-other":"トリニダード・トバゴ ドル","symbol":"TTD","symbol-alt-narrow":"$"},"TWD":{"displayName":"新台湾ドル","displayName-count-other":"新台湾ドル","symbol":"NT$","symbol-alt-narrow":"$"},"TZS":{"displayName":"タンザニア シリング","displayName-count-other":"タンザニア シリング","symbol":"TZS"},"UAH":{"displayName":"ウクライナ グリブナ","displayName-count-other":"ウクライナ グリブナ","symbol":"UAH","symbol-alt-narrow":"₴"},"UAK":{"displayName":"ウクライナ カルボバネツ","displayName-count-other":"ウクライナ カルボバネツ","symbol":"UAK"},"UGS":{"displayName":"ウガンダ シリング (1966–1987)","displayName-count-other":"ウガンダ シリング (1966–1987)","symbol":"UGS"},"UGX":{"displayName":"ウガンダ シリング","displayName-count-other":"ウガンダ シリング","symbol":"UGX"},"USD":{"displayName":"米ドル","displayName-count-other":"米ドル","symbol":"$","symbol-alt-narrow":"$"},"USN":{"displayName":"米ドル (翌日)","displayName-count-other":"米ドル (翌日)","symbol":"USN"},"USS":{"displayName":"米ドル (当日)","displayName-count-other":"米ドル (当日)","symbol":"USS"},"UYI":{"displayName":"ウルグアイ ペソエン","displayName-count-other":"ウルグアイ ペソエン","symbol":"UYI"},"UYP":{"displayName":"ウルグアイ ペソ (1975–1993)","displayName-count-other":"ウルグアイ ペソ (1975–1993)","symbol":"UYP"},"UYU":{"displayName":"ウルグアイ ペソ","displayName-count-other":"ウルグアイ ペソ","symbol":"UYU","symbol-alt-narrow":"$"},"UZS":{"displayName":"ウズベキスタン スム","displayName-count-other":"ウズベキスタン スム","symbol":"UZS"},"VEB":{"displayName":"ベネズエラ ボリバル (1871–2008)","displayName-count-other":"ベネズエラ ボリバル (1871–2008)","symbol":"VEB"},"VEF":{"displayName":"ベネズエラ ボリバル","displayName-count-other":"ベネズエラ ボリバル","symbol":"VEF","symbol-alt-narrow":"Bs"},"VND":{"displayName":"ベトナム ドン","displayName-count-other":"ベトナム ドン","symbol":"₫","symbol-alt-narrow":"₫"},"VNN":{"displayName":"ベトナム ドン(1978–1985)","displayName-count-other":"ベトナム ドン(1978–1985)","symbol":"VNN"},"VUV":{"displayName":"バヌアツ バツ","displayName-count-other":"バヌアツ バツ","symbol":"VUV"},"WST":{"displayName":"サモア タラ","displayName-count-other":"サモア タラ","symbol":"WST"},"XAF":{"displayName":"中央アフリカ CFA フラン","displayName-count-other":"中央アフリカ CFA フラン","symbol":"FCFA"},"XAG":{"displayName":"銀","displayName-count-other":"銀","symbol":"XAG"},"XAU":{"displayName":"金","displayName-count-other":"金","symbol":"XAU"},"XBA":{"displayName":"ヨーロッパ混合単位 (EURCO)","displayName-count-other":"ヨーロッパ混合単位 (EURCO)","symbol":"XBA"},"XBB":{"displayName":"ヨーロッパ通貨単位 (EMU–6)","displayName-count-other":"ヨーロッパ通貨単位 (EMU–6)","symbol":"XBB"},"XBC":{"displayName":"ヨーロッパ勘定単位 (EUA–9)","displayName-count-other":"ヨーロッパ勘定単位 (EUA–9)","symbol":"XBC"},"XBD":{"displayName":"ヨーロッパ勘定単位 (EUA–17)","displayName-count-other":"ヨーロッパ勘定単位 (EUA–17)","symbol":"XBD"},"XCD":{"displayName":"東カリブ ドル","displayName-count-other":"東カリブ ドル","symbol":"EC$","symbol-alt-narrow":"$"},"XDR":{"displayName":"特別引き出し権","displayName-count-other":"特別引き出し権","symbol":"XDR"},"XEU":{"displayName":"ヨーロッパ通貨単位","displayName-count-other":"ヨーロッパ通貨単位","symbol":"XEU"},"XFO":{"displayName":"フランス金フラン","displayName-count-other":"フランス金フラン","symbol":"XFO"},"XFU":{"displayName":"フランス フラン (UIC)","displayName-count-other":"フランス フラン (UIC)","symbol":"XFU"},"XOF":{"displayName":"西アフリカ CFA フラン","displayName-count-other":"西アフリカ CFA フラン","symbol":"CFA"},"XPD":{"displayName":"パラジウム","displayName-count-other":"パラジウム","symbol":"XPD"},"XPF":{"displayName":"CFP フラン","displayName-count-other":"CFP フラン","symbol":"CFPF"},"XPT":{"displayName":"プラチナ","displayName-count-other":"プラチナ","symbol":"XPT"},"XRE":{"displayName":"RINET基金","displayName-count-other":"RINET基金","symbol":"XRE"},"XSU":{"displayName":"スクレ","displayName-count-other":"スクレ","symbol":"XSU"},"XTS":{"displayName":"テスト用通貨コード","displayName-count-other":"テスト用通貨コード","symbol":"XTS"},"XUA":{"displayName":"UA (アフリカ開発銀行)","displayName-count-other":"UA (アフリカ開発銀行)","symbol":"XUA"},"XXX":{"displayName":"不明または無効な通貨","displayName-count-other":"不明または無効な通貨","symbol":"XXX"},"YDD":{"displayName":"イエメン ディナール","displayName-count-other":"イエメン ディナール","symbol":"YDD"},"YER":{"displayName":"イエメン リアル","displayName-count-other":"イエメン リアル","symbol":"YER"},"YUD":{"displayName":"ユーゴスラビア ハード・ディナール (1966–1990)","displayName-count-other":"ユーゴスラビア ハード・ディナール (1966–1990)","symbol":"YUD"},"YUM":{"displayName":"ユーゴスラビア ノビ・ディナール (1994–2002)","displayName-count-other":"ユーゴスラビア ノビ・ディナール (1994–2002)","symbol":"YUM"},"YUN":{"displayName":"ユーゴスラビア 兌換ディナール (1990–1992)","displayName-count-other":"ユーゴスラビア 兌換ディナール (1990–1992)","symbol":"YUN"},"YUR":{"displayName":"ユーゴスラビア 改革ディナール(1992–1993)","displayName-count-other":"ユーゴスラビア 改革ディナール(1992–1993)","symbol":"YUR"},"ZAL":{"displayName":"南アフリカ ランド (ZAL)","displayName-count-other":"南アフリカ ランド (ZAL)","symbol":"ZAL"},"ZAR":{"displayName":"南アフリカ ランド","displayName-count-other":"南アフリカ ランド","symbol":"ZAR","symbol-alt-narrow":"R"},"ZMK":{"displayName":"ザンビア クワチャ (1968–2012)","displayName-count-other":"ザンビア クワチャ (1968–2012)","symbol":"ZMK"},"ZMW":{"displayName":"ザンビア クワチャ","displayName-count-other":"ザンビア クワチャ","symbol":"ZMW","symbol-alt-narrow":"ZK"},"ZRN":{"displayName":"ザイール 新ザイール (1993–1998)","displayName-count-other":"ザイール 新ザイール (1993–1998)","symbol":"ZRN"},"ZRZ":{"displayName":"ザイール ザイール (1971–1993)","displayName-count-other":"ザイール ザイール (1971–1993)","symbol":"ZRZ"},"ZWD":{"displayName":"ジンバブエ ドル (1980–2008)","displayName-count-other":"ジンバブエ ドル (1980–2008)","symbol":"ZWD"},"ZWL":{"displayName":"ジンバブエ ドル (2009)","displayName-count-other":"ジンバブエ ドル (2009)","symbol":"ZWL"},"ZWR":{"displayName":"シンバブエ ドル(2008)","displayName-count-other":"シンバブエ ドル(2008)","symbol":"ZWR"}},"defaultNumberingSystem":"latn","otherNumberingSystems":{"native":"latn","traditional":"jpan","finance":"jpanfin"},"minimumGroupingDigits":"1","symbols-numberSystem-latn":{"decimal":".","group":",","list":";","percentSign":"%","plusSign":"+","minusSign":"-","exponential":"E","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"NaN","timeSeparator":":"},"decimalFormats-numberSystem-latn":{"standard":"#,##0.###","long":{"decimalFormat":{"1000-count-other":"0","10000-count-other":"0万","100000-count-other":"00万","1000000-count-other":"000万","10000000-count-other":"0000万","100000000-count-other":"0億","1000000000-count-other":"00億","10000000000-count-other":"000億","100000000000-count-other":"0000億","1000000000000-count-other":"0兆","10000000000000-count-other":"00兆","100000000000000-count-other":"000兆"}},"short":{"decimalFormat":{"1000-count-other":"0","10000-count-other":"0万","100000-count-other":"00万","1000000-count-other":"000万","10000000-count-other":"0000万","100000000-count-other":"0億","1000000000-count-other":"00億","10000000000-count-other":"000億","100000000000-count-other":"0000億","1000000000000-count-other":"0兆","10000000000000-count-other":"00兆","100000000000000-count-other":"000兆"}}},"scientificFormats-numberSystem-latn":{"standard":"#E0"},"percentFormats-numberSystem-latn":{"standard":"#,##0%"},"currencyFormats-numberSystem-latn":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"¤#,##0.00","accounting":"¤#,##0.00;(¤#,##0.00)","short":{"standard":{"1000-count-other":"0","10000-count-other":"¤0万","100000-count-other":"¤00万","1000000-count-other":"¤000万","10000000-count-other":"¤0000万","100000000-count-other":"¤0億","1000000000-count-other":"¤00億","10000000000-count-other":"¤000億","100000000000-count-other":"¤0000億","1000000000000-count-other":"¤0兆","10000000000000-count-other":"¤00兆","100000000000000-count-other":"¤000兆"}},"unitPattern-count-other":"{0}{1}"},"miscPatterns-numberSystem-latn":{"atLeast":"{0} 以上","range":"{0}~{1}"},"minimalPairs":{"pluralMinimalPairs-count-other":"{0}日","other":"{0} 番目の角を右折します。"}}},"ko":{"identity":{"version":{"_number":"$Revision: 13705 $","_cldrVersion":"32"},"language":"ko"},"dates":{"calendars":{"gregorian":{"months":{"format":{"abbreviated":{"1":"1월","2":"2월","3":"3월","4":"4월","5":"5월","6":"6월","7":"7월","8":"8월","9":"9월","10":"10월","11":"11월","12":"12월"},"narrow":{"1":"1월","2":"2월","3":"3월","4":"4월","5":"5월","6":"6월","7":"7월","8":"8월","9":"9월","10":"10월","11":"11월","12":"12월"},"wide":{"1":"1월","2":"2월","3":"3월","4":"4월","5":"5월","6":"6월","7":"7월","8":"8월","9":"9월","10":"10월","11":"11월","12":"12월"}},"stand-alone":{"abbreviated":{"1":"1월","2":"2월","3":"3월","4":"4월","5":"5월","6":"6월","7":"7월","8":"8월","9":"9월","10":"10월","11":"11월","12":"12월"},"narrow":{"1":"1월","2":"2월","3":"3월","4":"4월","5":"5월","6":"6월","7":"7월","8":"8월","9":"9월","10":"10월","11":"11월","12":"12월"},"wide":{"1":"1월","2":"2월","3":"3월","4":"4월","5":"5월","6":"6월","7":"7월","8":"8월","9":"9월","10":"10월","11":"11월","12":"12월"}}},"days":{"format":{"abbreviated":{"sun":"일","mon":"월","tue":"화","wed":"수","thu":"목","fri":"금","sat":"토"},"narrow":{"sun":"일","mon":"월","tue":"화","wed":"수","thu":"목","fri":"금","sat":"토"},"short":{"sun":"일","mon":"월","tue":"화","wed":"수","thu":"목","fri":"금","sat":"토"},"wide":{"sun":"일요일","mon":"월요일","tue":"화요일","wed":"수요일","thu":"목요일","fri":"금요일","sat":"토요일"}},"stand-alone":{"abbreviated":{"sun":"일","mon":"월","tue":"화","wed":"수","thu":"목","fri":"금","sat":"토"},"narrow":{"sun":"일","mon":"월","tue":"화","wed":"수","thu":"목","fri":"금","sat":"토"},"short":{"sun":"일","mon":"월","tue":"화","wed":"수","thu":"목","fri":"금","sat":"토"},"wide":{"sun":"일요일","mon":"월요일","tue":"화요일","wed":"수요일","thu":"목요일","fri":"금요일","sat":"토요일"}}},"quarters":{"format":{"abbreviated":{"1":"1분기","2":"2분기","3":"3분기","4":"4분기"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"제 1/4분기","2":"제 2/4분기","3":"제 3/4분기","4":"제 4/4분기"}},"stand-alone":{"abbreviated":{"1":"1분기","2":"2분기","3":"3분기","4":"4분기"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"제 1/4분기","2":"제 2/4분기","3":"제 3/4분기","4":"제 4/4분기"}}},"dayPeriods":{"format":{"abbreviated":{"midnight":"자정","am":"AM","noon":"정오","pm":"PM","morning1":"새벽","morning2":"오전","afternoon1":"오후","evening1":"저녁","night1":"밤"},"narrow":{"midnight":"자정","am":"AM","noon":"정오","pm":"PM","morning1":"새벽","morning2":"오전","afternoon1":"오후","evening1":"저녁","night1":"밤"},"wide":{"midnight":"자정","am":"오전","noon":"정오","pm":"오후","morning1":"새벽","morning2":"오전","afternoon1":"오후","evening1":"저녁","night1":"밤"}},"stand-alone":{"abbreviated":{"midnight":"자정","am":"AM","noon":"정오","pm":"PM","morning1":"새벽","morning2":"오전","afternoon1":"오후","evening1":"저녁","night1":"밤"},"narrow":{"midnight":"자정","am":"AM","noon":"정오","pm":"PM","morning1":"새벽","morning2":"오전","afternoon1":"오후","evening1":"저녁","night1":"밤"},"wide":{"midnight":"자정","am":"오전","noon":"정오","pm":"오후","morning1":"새벽","morning2":"오전","afternoon1":"오후","evening1":"저녁","night1":"밤"}}},"eras":{"eraNames":{"0":"기원전","1":"서기","0-alt-variant":"BCE","1-alt-variant":"CE"},"eraAbbr":{"0":"BC","1":"AD","0-alt-variant":"BCE","1-alt-variant":"CE"},"eraNarrow":{"0":"BC","1":"AD","0-alt-variant":"BCE","1-alt-variant":"CE"}},"dateFormats":{"full":"y년 M월 d일 EEEE","long":"y년 M월 d일","medium":"y. M. d.","short":"yy. M. d."},"timeFormats":{"full":"a h시 m분 s초 zzzz","long":"a h시 m분 s초 z","medium":"a h:mm:ss","short":"a h:mm"},"dateTimeFormats":{"full":"{1} {0}","long":"{1} {0}","medium":"{1} {0}","short":"{1} {0}","availableFormats":{"Bh":"B h시","Bhm":"B h:mm","Bhms":"B h:mm:ss","d":"d일","E":"ccc","EBhm":"(E) B h:mm","EBhms":"(E) B h:mm:ss","Ed":"d일 (E)","EEEEd":"d일 EEEE","Ehm":"(E) a h:mm","EHm":"(E) HH:mm","Ehms":"(E) a h:mm:ss","EHms":"(E) HH:mm:ss","Gy":"G y년","GyMMM":"G y년 MMM","GyMMMd":"G y년 MMM d일","GyMMMEd":"G y년 MMM d일 (E)","GyMMMEEEEd":"G y년 MMM d일 EEEE","h":"a h시","H":"H시","HHmmss":"HH:mm:ss","hm":"a h:mm","Hm":"HH:mm","hms":"a h:mm:ss","Hms":"H시 m분 s초","hmsv":"a h:mm:ss v","Hmsv":"H시 m분 s초 v","hmv":"a h:mm v","Hmv":"HH:mm v","M":"M월","Md":"M. d.","MEd":"M. d. (E)","MEEEEd":"M. d. EEEE","MMM":"LLL","MMMd":"MMM d일","MMMEd":"MMM d일 (E)","MMMEEEEd":"MMM d일 EEEE","MMMMd":"MMMM d일","MMMMW-count-other":"MMM W번째 주","mmss":"mm:ss","ms":"mm:ss","y":"y년","yM":"y. M.","yMd":"y. M. d.","yMEd":"y. M. d. (E)","yMEEEEd":"y. M. d. EEEE","yMM":"y. M.","yMMM":"y년 MMM","yMMMd":"y년 MMM d일","yMMMEd":"y년 MMM d일 (E)","yMMMEEEEd":"y년 MMM d일 EEEE","yMMMM":"y년 MMMM","yQQQ":"y년 QQQ","yQQQQ":"y년 QQQQ","yw-count-other":"Y년 w번째 주"},"appendItems":{"Day":"{0} ({2}: {1})","Day-Of-Week":"{0} {1}","Era":"{1} {0}","Hour":"{0} ({2}: {1})","Minute":"{0} ({2}: {1})","Month":"{0} ({2}: {1})","Quarter":"{0} ({2}: {1})","Second":"{0} ({2}: {1})","Timezone":"{0} {1}","Week":"{0} ({2}: {1})","Year":"{1} {0}"},"intervalFormats":{"intervalFormatFallback":"{0} ~ {1}","d":{"d":"d일~d일"},"h":{"a":"a h시 ~ a h시","h":"a h시 ~ h시"},"H":{"H":"H ~ H시"},"hm":{"a":"a h:mm ~ a h:mm","h":"a h:mm~h:mm","m":"a h:mm~h:mm"},"Hm":{"H":"HH:mm ~ HH:mm","m":"HH:mm ~ HH:mm"},"hmv":{"a":"a h:mm ~ a h:mm v","h":"a h:mm~h:mm v","m":"a h:mm~h:mm v"},"Hmv":{"H":"HH:mm ~ HH:mm v","m":"HH:mm ~ HH:mm v"},"hv":{"a":"a h시 ~ a h시(v)","h":"a h시 ~ h시(v)"},"Hv":{"H":"HH ~ HH시 v"},"M":{"M":"M월~M월"},"Md":{"d":"M. d ~ M. d","M":"M. d ~ M. d"},"MEd":{"d":"M. d (E) ~ M. d (E)","M":"M. d (E) ~ M. d (E)"},"MMM":{"M":"MMM~MMM"},"MMMd":{"d":"MMM d일~d일","M":"M월 d일 ~ M월 d일"},"MMMEd":{"d":"M월 d일 (E) ~ d일 (E)","M":"M월 d일 (E) ~ M월 d일 (E)"},"MMMM":{"M":"LLLL–LLLL"},"y":{"y":"y년 ~ y년"},"yM":{"M":"y. M ~ y. M","y":"y. M ~ y. M"},"yMd":{"d":"y. M. d. ~ y. M. d.","M":"y. M. d. ~ y. M. d.","y":"y. M. d. ~ y. M. d."},"yMEd":{"d":"y. M. d. (E) ~ y. M. d. (E)","M":"y. M. d. (E) ~ y. M. d. (E)","y":"y. M. d. (E) ~ y. M. d. (E)"},"yMMM":{"M":"y년 M월~M월","y":"y년 M월 ~ y년 M월"},"yMMMd":{"d":"y년 M월 d일~d일","M":"y년 M월 d일 ~ M월 d일","y":"y년 M월 d일 ~ y년 M월 d일"},"yMMMEd":{"d":"y년 M월 d일 (E) ~ d일 (E)","M":"y년 M월 d일 (E) ~ M월 d일 (E)","y":"y년 M월 d일 (E) ~ y년 M월 d일 (E)"},"yMMMEEEEd":{"d":"y년 M월 d일 EEEE ~ d일 EEEE","M":"y년 M월 d일 EEEE ~ M월 d일 EEEE","y":"y년 M월 d일 EEEE ~ y년 M월 d일 EEEE"},"yMMMM":{"M":"y년 MMMM ~ MMMM","y":"y년 MMMM ~ y년 MMMM"}}}}},"fields":{"era":{"displayName":"연호"},"era-short":{"displayName":"연호"},"era-narrow":{"displayName":"연호"},"year":{"displayName":"년","relative-type--1":"작년","relative-type-0":"올해","relative-type-1":"내년","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}년 후"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}년 전"}},"year-short":{"displayName":"년","relative-type--1":"작년","relative-type-0":"올해","relative-type-1":"내년","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}년 후"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}년 전"}},"year-narrow":{"displayName":"년","relative-type--1":"작년","relative-type-0":"올해","relative-type-1":"내년","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}년 후"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}년 전"}},"quarter":{"displayName":"분기","relative-type--1":"지난 분기","relative-type-0":"이번 분기","relative-type-1":"다음 분기","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}분기 후"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}분기 전"}},"quarter-short":{"displayName":"분기","relative-type--1":"지난 분기","relative-type-0":"이번 분기","relative-type-1":"다음 분기","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}분기 후"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}분기 전"}},"quarter-narrow":{"displayName":"분기","relative-type--1":"지난 분기","relative-type-0":"이번 분기","relative-type-1":"다음 분기","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}분기 후"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}분기 전"}},"month":{"displayName":"월","relative-type--1":"지난달","relative-type-0":"이번 달","relative-type-1":"다음 달","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}개월 후"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}개월 전"}},"month-short":{"displayName":"월","relative-type--1":"지난달","relative-type-0":"이번 달","relative-type-1":"다음 달","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}개월 후"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}개월 전"}},"month-narrow":{"displayName":"월","relative-type--1":"지난달","relative-type-0":"이번 달","relative-type-1":"다음 달","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}개월 후"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}개월 전"}},"week":{"displayName":"주","relative-type--1":"지난주","relative-type-0":"이번 주","relative-type-1":"다음 주","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}주 후"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}주 전"},"relativePeriod":"{0}번째 주"},"week-short":{"displayName":"주","relative-type--1":"지난주","relative-type-0":"이번 주","relative-type-1":"다음 주","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}주 후"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}주 전"},"relativePeriod":"{0}번째 주"},"week-narrow":{"displayName":"주","relative-type--1":"지난주","relative-type-0":"이번 주","relative-type-1":"다음 주","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}주 후"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}주 전"},"relativePeriod":"{0}번째 주"},"weekOfMonth":{"displayName":"월의 주"},"weekOfMonth-short":{"displayName":"월의 주"},"weekOfMonth-narrow":{"displayName":"월의 주"},"day":{"displayName":"일","relative-type--2":"그저께","relative-type--1":"어제","relative-type-0":"오늘","relative-type-1":"내일","relative-type-2":"모레","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}일 후"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}일 전"}},"day-short":{"displayName":"일","relative-type--2":"그저께","relative-type--1":"어제","relative-type-0":"오늘","relative-type-1":"내일","relative-type-2":"모레","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}일 후"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}일 전"}},"day-narrow":{"displayName":"일","relative-type--2":"그저께","relative-type--1":"어제","relative-type-0":"오늘","relative-type-1":"내일","relative-type-2":"모레","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}일 후"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}일 전"}},"dayOfYear":{"displayName":"년의 일"},"dayOfYear-short":{"displayName":"년의 일"},"dayOfYear-narrow":{"displayName":"년의 일"},"weekday":{"displayName":"요일"},"weekday-short":{"displayName":"요일"},"weekday-narrow":{"displayName":"요일"},"weekdayOfMonth":{"displayName":"월의 평일"},"weekdayOfMonth-short":{"displayName":"월의 평일"},"weekdayOfMonth-narrow":{"displayName":"월의 평일"},"sun":{"relative-type--1":"지난 일요일","relative-type-0":"이번 일요일","relative-type-1":"다음 일요일","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}주 후 일요일"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}주 전 일요일"}},"sun-short":{"relative-type--1":"지난 일요일","relative-type-0":"이번 일요일","relative-type-1":"다음 일요일","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}주 후 일요일"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}주 전 일요일"}},"sun-narrow":{"relative-type--1":"지난 일요일","relative-type-0":"이번 일요일","relative-type-1":"다음 일요일","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}주 후 일요일"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}주 전 일요일"}},"mon":{"relative-type--1":"지난 월요일","relative-type-0":"이번 월요일","relative-type-1":"다음 월요일","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}주 후 월요일"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}주 전 월요일"}},"mon-short":{"relative-type--1":"지난 월요일","relative-type-0":"이번 월요일","relative-type-1":"다음 월요일","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}주 후 월요일"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}주 전 월요일"}},"mon-narrow":{"relative-type--1":"지난 월요일","relative-type-0":"이번 월요일","relative-type-1":"다음 월요일","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}주 후 월요일"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}주 전 월요일"}},"tue":{"relative-type--1":"지난 화요일","relative-type-0":"이번 화요일","relative-type-1":"다음 화요일","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}주 후 화요일"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}주 전 화요일"}},"tue-short":{"relative-type--1":"지난 화요일","relative-type-0":"이번 화요일","relative-type-1":"다음 화요일","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}주 후 화요일"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}주 전 화요일"}},"tue-narrow":{"relative-type--1":"지난 화요일","relative-type-0":"이번 화요일","relative-type-1":"다음 화요일","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}주 후 화요일"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}주 전 화요일"}},"wed":{"relative-type--1":"지난 수요일","relative-type-0":"이번 수요일","relative-type-1":"다음 수요일","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}주 후 수요일"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}주 전 수요일"}},"wed-short":{"relative-type--1":"지난 수요일","relative-type-0":"이번 수요일","relative-type-1":"다음 수요일","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}주 후 수요일"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}주 전 수요일"}},"wed-narrow":{"relative-type--1":"지난 수요일","relative-type-0":"이번 수요일","relative-type-1":"다음 수요일","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}주 후 수요일"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}주 전 수요일"}},"thu":{"relative-type--1":"지난 목요일","relative-type-0":"이번 목요일","relative-type-1":"다음 목요일","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}주 후 목요일"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}주 전 목요일"}},"thu-short":{"relative-type--1":"지난 목요일","relative-type-0":"이번 목요일","relative-type-1":"다음 목요일","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}주 후 목요일"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}주 전 목요일"}},"thu-narrow":{"relative-type--1":"지난 목요일","relative-type-0":"이번 목요일","relative-type-1":"다음 목요일","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}주 후 목요일"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}주 전 목요일"}},"fri":{"relative-type--1":"지난 금요일","relative-type-0":"이번 금요일","relative-type-1":"다음 금요일","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}주 후 금요일"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}주 전 금요일"}},"fri-short":{"relative-type--1":"지난 금요일","relative-type-0":"이번 금요일","relative-type-1":"다음 금요일","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}주 후 금요일"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}주 전 금요일"}},"fri-narrow":{"relative-type--1":"지난 금요일","relative-type-0":"이번 금요일","relative-type-1":"다음 금요일","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}주 후 금요일"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}주 전 금요일"}},"sat":{"relative-type--1":"지난 토요일","relative-type-0":"이번 토요일","relative-type-1":"다음 토요일","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}주 후 토요일"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}주 전 토요일"}},"sat-short":{"relative-type--1":"지난 토요일","relative-type-0":"이번 토요일","relative-type-1":"다음 토요일","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}주 후 토요일"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}주 전 토요일"}},"sat-narrow":{"relative-type--1":"지난 토요일","relative-type-0":"이번 토요일","relative-type-1":"다음 토요일","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}주 후 토요일"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}주 전 토요일"}},"dayperiod-short":{"displayName":"오전/오후"},"dayperiod":{"displayName":"오전/오후"},"dayperiod-narrow":{"displayName":"오전/오후"},"hour":{"displayName":"시","relative-type-0":"현재 시간","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}시간 후"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}시간 전"}},"hour-short":{"displayName":"시","relative-type-0":"현재 시간","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}시간 후"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}시간 전"}},"hour-narrow":{"displayName":"시","relative-type-0":"현재 시간","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}시간 후"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}시간 전"}},"minute":{"displayName":"분","relative-type-0":"현재 분","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}분 후"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}분 전"}},"minute-short":{"displayName":"분","relative-type-0":"현재 분","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}분 후"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}분 전"}},"minute-narrow":{"displayName":"분","relative-type-0":"현재 분","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}분 후"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}분 전"}},"second":{"displayName":"초","relative-type-0":"지금","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}초 후"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}초 전"}},"second-short":{"displayName":"초","relative-type-0":"지금","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}초 후"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}초 전"}},"second-narrow":{"displayName":"초","relative-type-0":"지금","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}초 후"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}초 전"}},"zone":{"displayName":"시간대"},"zone-short":{"displayName":"시간대"},"zone-narrow":{"displayName":"시간대"}}},"numbers":{"currencies":{"ADP":{"displayName":"안도라 페세타","symbol":"ADP"},"AED":{"displayName":"아랍에미리트 디르함","displayName-count-other":"아랍에미리트 디르함","symbol":"AED"},"AFA":{"displayName":"아프가니 (1927–2002)","symbol":"AFA"},"AFN":{"displayName":"아프가니스탄 아프가니","displayName-count-other":"아프가니스탄 아프가니","symbol":"AFN"},"ALK":{"displayName":"ALK","symbol":"ALK"},"ALL":{"displayName":"알바니아 레크","displayName-count-other":"알바니아 레크","symbol":"ALL"},"AMD":{"displayName":"아르메니아 드람","displayName-count-other":"아르메니아 드람","symbol":"AMD"},"ANG":{"displayName":"네덜란드령 안틸레스 길더","displayName-count-other":"네덜란드령 안틸레스 길더","symbol":"ANG"},"AOA":{"displayName":"앙골라 콴자","displayName-count-other":"앙골라 콴자","symbol":"AOA","symbol-alt-narrow":"Kz"},"AOK":{"displayName":"앙골라 콴자 (1977–1990)","symbol":"AOK"},"AON":{"displayName":"앙골라 신콴자 (1990–2000)","symbol":"AON"},"AOR":{"displayName":"앙골라 재조정 콴자 (1995–1999)","symbol":"AOR"},"ARA":{"displayName":"아르헨티나 오스트랄","symbol":"ARA"},"ARL":{"displayName":"아르헨티나 페소 레이 (1970–1983)","symbol":"ARL"},"ARM":{"displayName":"아르헨티나 페소 (18810–1970)","symbol":"ARM"},"ARP":{"displayName":"아르헨티나 페소 (1983–1985)","symbol":"ARP"},"ARS":{"displayName":"아르헨티나 페소","displayName-count-other":"아르헨티나 페소","symbol":"ARS","symbol-alt-narrow":"$"},"ATS":{"displayName":"호주 실링","symbol":"ATS"},"AUD":{"displayName":"호주 달러","displayName-count-other":"호주 달러","symbol":"AU$","symbol-alt-narrow":"$"},"AWG":{"displayName":"아루바 플로린","displayName-count-other":"아루바 플로린","symbol":"AWG"},"AZM":{"displayName":"아제르바이젠 마나트(1993–2006)","symbol":"AZM"},"AZN":{"displayName":"아제르바이잔 마나트","displayName-count-other":"아제르바이잔 마나트","symbol":"AZN"},"BAD":{"displayName":"보스니아-헤르체고비나 디나르","symbol":"BAD"},"BAM":{"displayName":"보스니아-헤르체고비나 태환 마르크","displayName-count-other":"보스니아-헤르체고비나 태환 마르크","symbol":"BAM","symbol-alt-narrow":"KM"},"BAN":{"displayName":"보스니아-헤르체고비나 신디나르 (1994–1997)","symbol":"BAN"},"BBD":{"displayName":"바베이도스 달러","displayName-count-other":"바베이도스 달러","symbol":"BBD","symbol-alt-narrow":"$"},"BDT":{"displayName":"방글라데시 타카","displayName-count-other":"방글라데시 타카","symbol":"BDT","symbol-alt-narrow":"৳"},"BEC":{"displayName":"벨기에 프랑 (태환)","symbol":"BEC"},"BEF":{"displayName":"벨기에 프랑","symbol":"BEF"},"BEL":{"displayName":"벨기에 프랑 (금융)","symbol":"BEL"},"BGL":{"displayName":"불가리아 동전 렛","symbol":"BGL"},"BGM":{"displayName":"불가리아 사회주의자 렛","symbol":"BGM"},"BGN":{"displayName":"불가리아 레프","displayName-count-other":"불가리아 레프","symbol":"BGN"},"BGO":{"displayName":"불가리아 렛 (1879–1952)","symbol":"BGO"},"BHD":{"displayName":"바레인 디나르","displayName-count-other":"바레인 디나르","symbol":"BHD"},"BIF":{"displayName":"부룬디 프랑","displayName-count-other":"부룬디 프랑","symbol":"BIF"},"BMD":{"displayName":"버뮤다 달러","displayName-count-other":"버뮤다 달러","symbol":"BMD","symbol-alt-narrow":"$"},"BND":{"displayName":"부루나이 달러","displayName-count-other":"부루나이 달러","symbol":"BND","symbol-alt-narrow":"$"},"BOB":{"displayName":"볼리비아노","displayName-count-other":"볼리비아노","symbol":"BOB","symbol-alt-narrow":"Bs"},"BOL":{"displayName":"볼리비아 볼리비아노 (1863–1963)","symbol":"BOL"},"BOP":{"displayName":"볼리비아노 페소","symbol":"BOP"},"BOV":{"displayName":"볼리비아노 Mvdol(기금)","symbol":"BOV"},"BRB":{"displayName":"볼리비아노 크루제이루 노보 (1967–1986)","symbol":"BRB"},"BRC":{"displayName":"브라질 크루자두","symbol":"BRC"},"BRE":{"displayName":"브라질 크루제이루 (1990–1993)","symbol":"BRE"},"BRL":{"displayName":"브라질 레알","displayName-count-other":"브라질 헤알","symbol":"R$","symbol-alt-narrow":"R$"},"BRN":{"displayName":"브라질 크루자두 노보","symbol":"BRN"},"BRR":{"displayName":"브라질 크루제이루","symbol":"BRR"},"BRZ":{"displayName":"브라질 크루제이루 (1942–1967)","symbol":"BRZ"},"BSD":{"displayName":"바하마 달러","displayName-count-other":"바하마 달러","symbol":"BSD","symbol-alt-narrow":"$"},"BTN":{"displayName":"부탄 눌투눔","displayName-count-other":"부탄 눌투눔","symbol":"BTN"},"BUK":{"displayName":"버마 차트","symbol":"BUK"},"BWP":{"displayName":"보츠와나 폴라","displayName-count-other":"보츠와나 폴라","symbol":"BWP","symbol-alt-narrow":"P"},"BYB":{"displayName":"벨라루스 신권 루블 (1994–1999)","symbol":"BYB"},"BYN":{"displayName":"벨라루스 루블","displayName-count-other":"벨라루스 루블","symbol":"BYN","symbol-alt-narrow":"р."},"BYR":{"displayName":"벨라루스 루블 (2000–2016)","displayName-count-other":"벨라루스 루블 (2000–2016)","symbol":"BYR"},"BZD":{"displayName":"벨리즈 달러","displayName-count-other":"벨리즈 달러","symbol":"BZD","symbol-alt-narrow":"$"},"CAD":{"displayName":"캐나다 달러","displayName-count-other":"캐나다 달러","symbol":"CA$","symbol-alt-narrow":"$"},"CDF":{"displayName":"콩고 프랑 콩골라스","displayName-count-other":"콩고 프랑 콩골라스","symbol":"CDF"},"CHE":{"displayName":"유로 (WIR)","symbol":"CHE"},"CHF":{"displayName":"스위스 프랑","displayName-count-other":"스위스 프랑","symbol":"CHF"},"CHW":{"displayName":"프랑 (WIR)","symbol":"CHW"},"CLE":{"displayName":"칠레 에스쿠도","symbol":"CLE"},"CLF":{"displayName":"칠레 (UF)","symbol":"CLF"},"CLP":{"displayName":"칠레 페소","displayName-count-other":"칠레 페소","symbol":"CLP","symbol-alt-narrow":"$"},"CNH":{"displayName":"중국 위안화(역외)","displayName-count-other":"중국 위안화(역외)","symbol":"CNH"},"CNX":{"displayName":"CNX","symbol":"CNX"},"CNY":{"displayName":"중국 위안화","displayName-count-other":"중국 위안화","symbol":"CN¥","symbol-alt-narrow":"¥"},"COP":{"displayName":"콜롬비아 페소","displayName-count-other":"콜롬비아 페소","symbol":"COP","symbol-alt-narrow":"$"},"COU":{"displayName":"콜롬비아 실가 단위","symbol":"COU"},"CRC":{"displayName":"코스타리카 콜론","displayName-count-other":"코스타리카 콜론","symbol":"CRC","symbol-alt-narrow":"₡"},"CSD":{"displayName":"고 세르비아 디나르","symbol":"CSD"},"CSK":{"displayName":"체코슬로바키아 동전 코루나","symbol":"CSK"},"CUC":{"displayName":"쿠바 태환 페소","displayName-count-other":"쿠바 태환 페소","symbol":"CUC","symbol-alt-narrow":"$"},"CUP":{"displayName":"쿠바 페소","displayName-count-other":"쿠바 페소","symbol":"CUP","symbol-alt-narrow":"$"},"CVE":{"displayName":"카보베르데 에스쿠도","displayName-count-other":"카보베르데 에스쿠도","symbol":"CVE"},"CYP":{"displayName":"싸이프러스 파운드","symbol":"CYP"},"CZK":{"displayName":"체코 공화국 코루나","displayName-count-other":"체코 공화국 코루나","symbol":"CZK","symbol-alt-narrow":"Kč"},"DDM":{"displayName":"동독 오스트마르크","symbol":"DDM"},"DEM":{"displayName":"독일 마르크","symbol":"DEM"},"DJF":{"displayName":"지부티 프랑","displayName-count-other":"지부티 프랑","symbol":"DJF"},"DKK":{"displayName":"덴마크 크로네","displayName-count-other":"덴마크 크로네","symbol":"DKK","symbol-alt-narrow":"kr"},"DOP":{"displayName":"도미니카 페소","displayName-count-other":"도미니카 페소","symbol":"DOP","symbol-alt-narrow":"$"},"DZD":{"displayName":"알제리 디나르","displayName-count-other":"알제리 디나르","symbol":"DZD"},"ECS":{"displayName":"에쿠아도르 수크레","symbol":"ECS"},"ECV":{"displayName":"에콰도르 (UVC)","symbol":"ECV"},"EEK":{"displayName":"에스토니아 크룬","symbol":"EEK"},"EGP":{"displayName":"이집트 파운드","displayName-count-other":"이집트 파운드","symbol":"EGP","symbol-alt-narrow":"E£"},"ERN":{"displayName":"에리트리아 나크파","displayName-count-other":"에리트리아 나크파","symbol":"ERN"},"ESA":{"displayName":"스페인 페세타(예금)","symbol":"ESA"},"ESB":{"displayName":"스페인 페세타(변환 예금)","symbol":"ESB"},"ESP":{"displayName":"스페인 페세타","symbol":"ESP","symbol-alt-narrow":"₧"},"ETB":{"displayName":"에티오피아 비르","displayName-count-other":"에티오피아 비르","symbol":"ETB"},"EUR":{"displayName":"유로","displayName-count-other":"유로","symbol":"€","symbol-alt-narrow":"€"},"FIM":{"displayName":"핀란드 마르카","symbol":"FIM"},"FJD":{"displayName":"피지 달러","displayName-count-other":"피지 달러","symbol":"FJD","symbol-alt-narrow":"$"},"FKP":{"displayName":"포클랜드제도 파운드","displayName-count-other":"포클랜드제도 파운드","symbol":"FKP","symbol-alt-narrow":"£"},"FRF":{"displayName":"프랑스 프랑","symbol":"FRF"},"GBP":{"displayName":"파운드","displayName-count-other":"영국령 파운드 스털링","symbol":"£","symbol-alt-narrow":"£"},"GEK":{"displayName":"그루지야 지폐 라리트","symbol":"GEK"},"GEL":{"displayName":"조지아 라리","displayName-count-other":"조지아 라리","symbol":"GEL","symbol-alt-narrow":"₾","symbol-alt-variant":"₾"},"GHC":{"displayName":"가나 시디 (1979–2007)","symbol":"GHC"},"GHS":{"displayName":"가나 시디","displayName-count-other":"가나 시디","symbol":"GHS"},"GIP":{"displayName":"지브롤터 파운드","displayName-count-other":"지브롤터 파운드","symbol":"GIP","symbol-alt-narrow":"£"},"GMD":{"displayName":"감비아 달라시","displayName-count-other":"감비아 달라시","symbol":"GMD"},"GNF":{"displayName":"기니 프랑","displayName-count-other":"기니 프랑","symbol":"GNF","symbol-alt-narrow":"FG"},"GNS":{"displayName":"기니 시리","symbol":"GNS"},"GQE":{"displayName":"적도 기니 에쿨 (Ekwele)","symbol":"GQE"},"GRD":{"displayName":"그리스 드라크마","symbol":"GRD"},"GTQ":{"displayName":"과테말라 케트살","displayName-count-other":"과테말라 케트살","symbol":"GTQ","symbol-alt-narrow":"Q"},"GWE":{"displayName":"포르투갈령 기니 에스쿠도","symbol":"GWE"},"GWP":{"displayName":"기네비쏘 페소","symbol":"GWP"},"GYD":{"displayName":"가이아나 달러","displayName-count-other":"가이아나 달러","symbol":"GYD","symbol-alt-narrow":"$"},"HKD":{"displayName":"홍콩 달러","displayName-count-other":"홍콩 달러","symbol":"HK$","symbol-alt-narrow":"$"},"HNL":{"displayName":"온두라스 렘피라","displayName-count-other":"온두라스 렘피라","symbol":"HNL","symbol-alt-narrow":"L"},"HRD":{"displayName":"크로아티아 디나르","symbol":"HRD"},"HRK":{"displayName":"크로아티아 쿠나","displayName-count-other":"크로아티아 쿠나","symbol":"HRK","symbol-alt-narrow":"kn"},"HTG":{"displayName":"하이티 구르드","displayName-count-other":"하이티 구르드","symbol":"HTG"},"HUF":{"displayName":"헝가리 포린트","displayName-count-other":"헝가리 포린트","symbol":"HUF","symbol-alt-narrow":"Ft"},"IDR":{"displayName":"인도네시아 루피아","displayName-count-other":"인도네시아 루피아","symbol":"IDR","symbol-alt-narrow":"Rp"},"IEP":{"displayName":"아일랜드 파운드","symbol":"IEP"},"ILP":{"displayName":"이스라엘 파운드","symbol":"ILP"},"ILR":{"displayName":"ILR","symbol":"ILR"},"ILS":{"displayName":"이스라엘 신권 세켈","displayName-count-other":"이스라엘 신권 세켈","symbol":"₪","symbol-alt-narrow":"₪"},"INR":{"displayName":"인도 루피","displayName-count-other":"인도 루피","symbol":"₹","symbol-alt-narrow":"₹"},"IQD":{"displayName":"이라크 디나르","displayName-count-other":"이라크 디나르","symbol":"IQD"},"IRR":{"displayName":"이란 리얄","displayName-count-other":"이란 리얄","symbol":"IRR"},"ISJ":{"displayName":"ISJ","symbol":"ISJ"},"ISK":{"displayName":"아이슬란드 크로나","displayName-count-other":"아이슬란드 크로나","symbol":"ISK","symbol-alt-narrow":"kr"},"ITL":{"displayName":"이탈리아 리라","symbol":"ITL"},"JMD":{"displayName":"자메이카 달러","displayName-count-other":"자메이카 달러","symbol":"JMD","symbol-alt-narrow":"$"},"JOD":{"displayName":"요르단 디나르","displayName-count-other":"요르단 디나르","symbol":"JOD"},"JPY":{"displayName":"일본 엔화","displayName-count-other":"일본 엔화","symbol":"JP¥","symbol-alt-narrow":"¥"},"KES":{"displayName":"케냐 실링","displayName-count-other":"케냐 실링","symbol":"KES"},"KGS":{"displayName":"키르기스스탄 솜","displayName-count-other":"키르기스스탄 솜","symbol":"KGS"},"KHR":{"displayName":"캄보디아 리얄","displayName-count-other":"캄보디아 리얄","symbol":"KHR","symbol-alt-narrow":"៛"},"KMF":{"displayName":"코모르 프랑","displayName-count-other":"코모르 프랑","symbol":"KMF","symbol-alt-narrow":"CF"},"KPW":{"displayName":"조선 민주주의 인민 공화국 원","displayName-count-other":"조선 민주주의 인민 공화국 원","symbol":"KPW","symbol-alt-narrow":"₩"},"KRH":{"displayName":"대한민국 환 (1953–1962)","symbol":"KRH"},"KRO":{"displayName":"KRO","symbol":"KRO"},"KRW":{"displayName":"대한민국 원","displayName-count-other":"대한민국 원","symbol":"₩","symbol-alt-narrow":"₩"},"KWD":{"displayName":"쿠웨이트 디나르","displayName-count-other":"쿠웨이트 디나르","symbol":"KWD"},"KYD":{"displayName":"케이맨 제도 달러","displayName-count-other":"케이맨 제도 달러","symbol":"KYD","symbol-alt-narrow":"$"},"KZT":{"displayName":"카자흐스탄 텐게","displayName-count-other":"카자흐스탄 텐게","symbol":"KZT","symbol-alt-narrow":"₸"},"LAK":{"displayName":"라오스 키프","displayName-count-other":"라오스 키프","symbol":"LAK","symbol-alt-narrow":"₭"},"LBP":{"displayName":"레바논 파운드","displayName-count-other":"레바논 파운드","symbol":"LBP","symbol-alt-narrow":"L£"},"LKR":{"displayName":"스리랑카 루피","displayName-count-other":"스리랑카 루피","symbol":"LKR","symbol-alt-narrow":"Rs"},"LRD":{"displayName":"라이베리아 달러","displayName-count-other":"라이베리아 달러","symbol":"LRD","symbol-alt-narrow":"$"},"LSL":{"displayName":"레소토 로티","symbol":"LSL"},"LTL":{"displayName":"리투아니아 리타","displayName-count-other":"리투아니아 리타","symbol":"LTL","symbol-alt-narrow":"Lt"},"LTT":{"displayName":"룩셈부르크 타로나","symbol":"LTT"},"LUC":{"displayName":"룩셈부르크 변환 프랑","symbol":"LUC"},"LUF":{"displayName":"룩셈부르크 프랑","symbol":"LUF"},"LUL":{"displayName":"룩셈부르크 재정 프랑","symbol":"LUL"},"LVL":{"displayName":"라트비아 라트","displayName-count-other":"라트비아 라트","symbol":"LVL","symbol-alt-narrow":"Ls"},"LVR":{"displayName":"라트비아 루블","symbol":"LVR"},"LYD":{"displayName":"리비아 디나르","displayName-count-other":"리비아 디나르","symbol":"LYD"},"MAD":{"displayName":"모로코 디렘","displayName-count-other":"모로코 디렘","symbol":"MAD"},"MAF":{"displayName":"모로코 프랑","symbol":"MAF"},"MCF":{"displayName":"모나코 프랑","symbol":"MCF"},"MDC":{"displayName":"몰도바 쿠폰","symbol":"MDC"},"MDL":{"displayName":"몰도바 레이","displayName-count-other":"몰도바 레이","symbol":"MDL"},"MGA":{"displayName":"마다가스카르 아리아리","displayName-count-other":"마다가스카르 아리아리","symbol":"MGA","symbol-alt-narrow":"Ar"},"MGF":{"displayName":"마다가스카르 프랑","symbol":"MGF"},"MKD":{"displayName":"마케도니아 디나르","displayName-count-other":"마케도니아 디나르","symbol":"MKD"},"MKN":{"displayName":"MKN","symbol":"MKN"},"MLF":{"displayName":"말리 프랑","symbol":"MLF"},"MMK":{"displayName":"미얀마 키얏","displayName-count-other":"미얀마 키얏","symbol":"MMK","symbol-alt-narrow":"K"},"MNT":{"displayName":"몽골 투그릭","displayName-count-other":"몽골 투그릭","symbol":"MNT","symbol-alt-narrow":"₮"},"MOP":{"displayName":"마카오 파타카","displayName-count-other":"마카오 파타카","symbol":"MOP"},"MRO":{"displayName":"모리타니 우기야","displayName-count-other":"모리타니 우기야","symbol":"MRO"},"MTL":{"displayName":"몰타 리라","symbol":"MTL"},"MTP":{"displayName":"몰타 파운드","symbol":"MTP"},"MUR":{"displayName":"모리셔스 루피","displayName-count-other":"모리셔스 루피","symbol":"MUR","symbol-alt-narrow":"Rs"},"MVP":{"displayName":"MVP","symbol":"MVP"},"MVR":{"displayName":"몰디브 제도 루피아","displayName-count-other":"몰디브 제도 루피아","symbol":"MVR"},"MWK":{"displayName":"말라위 콰쳐","displayName-count-other":"말라위 콰쳐","symbol":"MWK"},"MXN":{"displayName":"멕시코 페소","displayName-count-other":"멕시코 페소","symbol":"MX$","symbol-alt-narrow":"$"},"MXP":{"displayName":"멕시코 실버 페소 (1861–1992)","symbol":"MXP"},"MXV":{"displayName":"멕시코 (UDI)","symbol":"MXV"},"MYR":{"displayName":"말레이시아 링깃","displayName-count-other":"말레이시아 링깃","symbol":"MYR","symbol-alt-narrow":"RM"},"MZE":{"displayName":"모잠비크 에스쿠도","symbol":"MZE"},"MZM":{"displayName":"고 모잠비크 메티칼","symbol":"MZM"},"MZN":{"displayName":"모잠비크 메티칼","displayName-count-other":"모잠비크 메티칼","symbol":"MZN"},"NAD":{"displayName":"나미비아 달러","displayName-count-other":"나미비아 달러","symbol":"NAD","symbol-alt-narrow":"$"},"NGN":{"displayName":"니제르 나이라","displayName-count-other":"니제르 나이라","symbol":"NGN","symbol-alt-narrow":"₦"},"NIC":{"displayName":"니카라과 코르도바","symbol":"NIC"},"NIO":{"displayName":"니카라과 코르도바 오로","displayName-count-other":"니카라과 코르도바 오로","symbol":"NIO","symbol-alt-narrow":"C$"},"NLG":{"displayName":"네델란드 길더","symbol":"NLG"},"NOK":{"displayName":"노르웨이 크로네","displayName-count-other":"노르웨이 크로네","symbol":"NOK","symbol-alt-narrow":"kr"},"NPR":{"displayName":"네팔 루피","displayName-count-other":"네팔 루피","symbol":"NPR","symbol-alt-narrow":"Rs"},"NZD":{"displayName":"뉴질랜드 달러","displayName-count-other":"뉴질랜드 달러","symbol":"NZ$","symbol-alt-narrow":"$"},"OMR":{"displayName":"오만 리얄","displayName-count-other":"오만 리얄","symbol":"OMR"},"PAB":{"displayName":"파나마 발보아","displayName-count-other":"파나마 발보아","symbol":"PAB"},"PEI":{"displayName":"페루 인티","symbol":"PEI"},"PEN":{"displayName":"페루 솔","displayName-count-other":"페루 솔","symbol":"PEN"},"PES":{"displayName":"페루 솔 (1863–1965)","symbol":"PES"},"PGK":{"displayName":"파푸아뉴기니 키나","displayName-count-other":"파푸아뉴기니 키나","symbol":"PGK"},"PHP":{"displayName":"필리핀 페소","displayName-count-other":"필리핀 페소","symbol":"PHP","symbol-alt-narrow":"₱"},"PKR":{"displayName":"파키스탄 루피","displayName-count-other":"파키스탄 루피","symbol":"PKR","symbol-alt-narrow":"Rs"},"PLN":{"displayName":"폴란드 즐로티","displayName-count-other":"폴란드 즐로티","symbol":"PLN","symbol-alt-narrow":"zł"},"PLZ":{"displayName":"폴란드 즐로티 (1950–1995)","symbol":"PLZ"},"PTE":{"displayName":"포르투갈 에스쿠도","symbol":"PTE"},"PYG":{"displayName":"파라과이 과라니","displayName-count-other":"파라과이 과라니","symbol":"PYG","symbol-alt-narrow":"₲"},"QAR":{"displayName":"카타르 리얄","displayName-count-other":"카타르 리얄","symbol":"QAR"},"RHD":{"displayName":"로디지아 달러","symbol":"RHD"},"ROL":{"displayName":"루마니아 레이","symbol":"ROL"},"RON":{"displayName":"루마니아 레우","displayName-count-other":"루마니아 레우","symbol":"RON","symbol-alt-narrow":"L"},"RSD":{"displayName":"세르비아 디나르","displayName-count-other":"세르비아 디나르","symbol":"RSD"},"RUB":{"displayName":"러시아 루블","displayName-count-other":"러시아 루블","symbol":"RUB","symbol-alt-narrow":"₽"},"RUR":{"displayName":"러시아 루블 (1991–1998)","symbol":"RUR","symbol-alt-narrow":"р."},"RWF":{"displayName":"르완다 프랑","displayName-count-other":"르완다 프랑","symbol":"RWF","symbol-alt-narrow":"RF"},"SAR":{"displayName":"사우디아라비아 리얄","displayName-count-other":"사우디아라비아 리얄","symbol":"SAR"},"SBD":{"displayName":"솔로몬 제도 달러","displayName-count-other":"솔로몬 제도 달러","symbol":"SBD","symbol-alt-narrow":"$"},"SCR":{"displayName":"세이셸 루피","displayName-count-other":"세이셸 루피","symbol":"SCR"},"SDD":{"displayName":"수단 디나르","symbol":"SDD"},"SDG":{"displayName":"수단 파운드","displayName-count-other":"수단 파운드","symbol":"SDG"},"SDP":{"displayName":"고 수단 파운드","symbol":"SDP"},"SEK":{"displayName":"스웨덴 크로나","displayName-count-other":"스웨덴 크로나","symbol":"SEK","symbol-alt-narrow":"kr"},"SGD":{"displayName":"싱가폴 달러","displayName-count-other":"싱가폴 달러","symbol":"SGD","symbol-alt-narrow":"$"},"SHP":{"displayName":"세인트헬레나 파운드","displayName-count-other":"세인트헬레나 파운드","symbol":"SHP","symbol-alt-narrow":"£"},"SIT":{"displayName":"슬로베니아 톨라르","symbol":"SIT"},"SKK":{"displayName":"슬로바키아 코루나","symbol":"SKK"},"SLL":{"displayName":"시에라리온 리온","displayName-count-other":"시에라리온 리온","symbol":"SLL"},"SOS":{"displayName":"소말리아 실링","displayName-count-other":"소말리아 실링","symbol":"SOS"},"SRD":{"displayName":"수리남 달러","displayName-count-other":"수리남 달러","symbol":"SRD","symbol-alt-narrow":"$"},"SRG":{"displayName":"수리남 길더","symbol":"SRG"},"SSP":{"displayName":"남수단 파운드","displayName-count-other":"남수단 파운드","symbol":"SSP","symbol-alt-narrow":"£"},"STD":{"displayName":"상투메 프린시페 도브라","displayName-count-other":"상투메 프린시페 도브라","symbol":"STD","symbol-alt-narrow":"Db"},"STN":{"displayName":"STN","symbol":"STN"},"SUR":{"displayName":"소련 루블","symbol":"SUR"},"SVC":{"displayName":"엘살바도르 콜론","symbol":"SVC"},"SYP":{"displayName":"시리아 파운드","displayName-count-other":"시리아 파운드","symbol":"SYP","symbol-alt-narrow":"£"},"SZL":{"displayName":"스와질란드 릴랑게니","displayName-count-other":"스와질란드 릴랑게니","symbol":"SZL"},"THB":{"displayName":"태국 바트","displayName-count-other":"태국 바트","symbol":"THB","symbol-alt-narrow":"฿"},"TJR":{"displayName":"타지키스탄 루블","symbol":"TJR"},"TJS":{"displayName":"타지키스탄 소모니","displayName-count-other":"타지키스탄 소모니","symbol":"TJS"},"TMM":{"displayName":"투르크메니스탄 마나트 (1993–2009)","symbol":"TMM"},"TMT":{"displayName":"투르크메니스탄 마나트","displayName-count-other":"투르크메니스탄 마나트","symbol":"TMT"},"TND":{"displayName":"튀니지 디나르","displayName-count-other":"튀니지 디나르","symbol":"TND"},"TOP":{"displayName":"통가 파앙가","displayName-count-other":"통가 파앙가","symbol":"TOP","symbol-alt-narrow":"T$"},"TPE":{"displayName":"티모르 에스쿠도","symbol":"TPE"},"TRL":{"displayName":"터키 리라","symbol":"TRL"},"TRY":{"displayName":"신 터키 리라","displayName-count-other":"신 터키 리라","symbol":"TRY","symbol-alt-narrow":"₺","symbol-alt-variant":"TL"},"TTD":{"displayName":"트리니다드 토바고 달러","displayName-count-other":"트리니다드 토바고 달러","symbol":"TTD","symbol-alt-narrow":"$"},"TWD":{"displayName":"신 타이완 달러","displayName-count-other":"신 타이완 달러","symbol":"NT$","symbol-alt-narrow":"NT$"},"TZS":{"displayName":"탄자니아 실링","displayName-count-other":"탄자니아 실링","symbol":"TZS"},"UAH":{"displayName":"우크라이나 그리브나","displayName-count-other":"우크라이나 그리브나","symbol":"UAH","symbol-alt-narrow":"₴"},"UAK":{"displayName":"우크라이나 카보바네츠","symbol":"UAK"},"UGS":{"displayName":"우간다 실링 (1966–1987)","symbol":"UGS"},"UGX":{"displayName":"우간다 실링","displayName-count-other":"우간다 실링","symbol":"UGX"},"USD":{"displayName":"미국 달러","displayName-count-other":"미국 달러","symbol":"US$","symbol-alt-narrow":"$"},"USN":{"displayName":"미국 달러(다음날)","symbol":"USN"},"USS":{"displayName":"미국 달러(당일)","symbol":"USS"},"UYI":{"displayName":"우루과이 페소 (UI)","symbol":"UYI"},"UYP":{"displayName":"우루과이 페소 (1975–1993)","symbol":"UYP"},"UYU":{"displayName":"우루과이 페소 우루과요","displayName-count-other":"우루과이 페소 우루과요","symbol":"UYU","symbol-alt-narrow":"$"},"UZS":{"displayName":"우즈베키스탄 숨","displayName-count-other":"우즈베키스탄 숨","symbol":"UZS"},"VEB":{"displayName":"베네주엘라 볼리바르 (1871–2008)","symbol":"VEB"},"VEF":{"displayName":"베네수엘라 볼리바르","displayName-count-other":"베네수엘라 볼리바르","symbol":"VEF","symbol-alt-narrow":"Bs"},"VND":{"displayName":"베트남 동","displayName-count-other":"베트남 동","symbol":"₫","symbol-alt-narrow":"₫"},"VNN":{"displayName":"베트남 동 (1978–1985)","symbol":"VNN"},"VUV":{"displayName":"바누아투 바투","displayName-count-other":"바누아투 바투","symbol":"VUV"},"WST":{"displayName":"서 사모아 탈라","displayName-count-other":"서 사모아 탈라","symbol":"WST"},"XAF":{"displayName":"중앙아프리카 CFA 프랑","displayName-count-other":"중앙아프리카 CFA 프랑","symbol":"FCFA"},"XAG":{"displayName":"은화","symbol":"XAG"},"XAU":{"displayName":"금","symbol":"XAU"},"XBA":{"displayName":"유르코 (유럽 회계 단위)","symbol":"XBA"},"XBB":{"displayName":"유럽 통화 동맹","symbol":"XBB"},"XBC":{"displayName":"유럽 계산 단위 (XBC)","symbol":"XBC"},"XBD":{"displayName":"유럽 계산 단위 (XBD)","symbol":"XBD"},"XCD":{"displayName":"동카리브 달러","displayName-count-other":"동카리브 달러","symbol":"EC$","symbol-alt-narrow":"$"},"XDR":{"displayName":"특별인출권","symbol":"XDR"},"XEU":{"displayName":"유럽 환율 단위","symbol":"XEU"},"XFO":{"displayName":"프랑스 프랑 (Gold)","symbol":"XFO"},"XFU":{"displayName":"프랑스 프랑 (UIC)","symbol":"XFU"},"XOF":{"displayName":"서아프리카 CFA 프랑","displayName-count-other":"서아프리카 CFA 프랑","symbol":"CFA"},"XPD":{"displayName":"팔라듐","symbol":"XPD"},"XPF":{"displayName":"CFP 프랑","displayName-count-other":"CFP 프랑","symbol":"CFPF"},"XPT":{"displayName":"백금","symbol":"XPT"},"XRE":{"displayName":"RINET 기금","symbol":"XRE"},"XSU":{"displayName":"XSU","symbol":"XSU"},"XTS":{"displayName":"테스트 통화 코드","symbol":"XTS"},"XUA":{"displayName":"XUA","symbol":"XUA"},"XXX":{"displayName":"알 수 없는 통화 단위","displayName-count-other":"(알 수 없는 통화 단위)","symbol":"XXX"},"YDD":{"displayName":"예멘 디나르","symbol":"YDD"},"YER":{"displayName":"예멘 리알","displayName-count-other":"예멘 리알","symbol":"YER"},"YUD":{"displayName":"유고슬라비아 동전 디나르","symbol":"YUD"},"YUM":{"displayName":"유고슬라비아 노비 디나르","symbol":"YUM"},"YUN":{"displayName":"유고슬라비아 전환 디나르","symbol":"YUN"},"YUR":{"displayName":"YUR","symbol":"YUR"},"ZAL":{"displayName":"남아프리카 랜드 (금융)","symbol":"ZAL"},"ZAR":{"displayName":"남아프리카 랜드","displayName-count-other":"남아프리카 랜드","symbol":"ZAR","symbol-alt-narrow":"R"},"ZMK":{"displayName":"쟘비아 콰쳐 (1968–2012)","symbol":"ZMK"},"ZMW":{"displayName":"잠비아 콰쳐","displayName-count-other":"잠비아 콰쳐","symbol":"ZMW","symbol-alt-narrow":"ZK"},"ZRN":{"displayName":"자이르 신권 자이르","symbol":"ZRN"},"ZRZ":{"displayName":"자이르 자이르","symbol":"ZRZ"},"ZWD":{"displayName":"짐바브웨 달러","symbol":"ZWD"},"ZWL":{"displayName":"짐바브웨 달러 (2009)","symbol":"ZWL"},"ZWR":{"displayName":"짐바브웨 달러 (2008)","symbol":"ZWR"}},"defaultNumberingSystem":"latn","otherNumberingSystems":{"native":"latn"},"minimumGroupingDigits":"1","symbols-numberSystem-latn":{"decimal":".","group":",","list":";","percentSign":"%","plusSign":"+","minusSign":"-","exponential":"E","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"NaN","timeSeparator":":"},"decimalFormats-numberSystem-latn":{"standard":"#,##0.###","long":{"decimalFormat":{"1000-count-other":"0천","10000-count-other":"0만","100000-count-other":"00만","1000000-count-other":"000만","10000000-count-other":"0000만","100000000-count-other":"0억","1000000000-count-other":"00억","10000000000-count-other":"000억","100000000000-count-other":"0000억","1000000000000-count-other":"0조","10000000000000-count-other":"00조","100000000000000-count-other":"000조"}},"short":{"decimalFormat":{"1000-count-other":"0천","10000-count-other":"0만","100000-count-other":"00만","1000000-count-other":"000만","10000000-count-other":"0000만","100000000-count-other":"0억","1000000000-count-other":"00억","10000000000-count-other":"000억","100000000000-count-other":"0000억","1000000000000-count-other":"0조","10000000000000-count-other":"00조","100000000000000-count-other":"000조"}}},"scientificFormats-numberSystem-latn":{"standard":"#E0"},"percentFormats-numberSystem-latn":{"standard":"#,##0%"},"currencyFormats-numberSystem-latn":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"¤#,##0.00","accounting":"¤#,##0.00;(¤#,##0.00)","short":{"standard":{"1000-count-other":"¤0천","10000-count-other":"¤0만","100000-count-other":"¤00만","1000000-count-other":"¤000만","10000000-count-other":"¤0000만","100000000-count-other":"¤0억","1000000000-count-other":"¤00억","10000000000-count-other":"¤000억","100000000000-count-other":"¤0000억","1000000000000-count-other":"¤0조","10000000000000-count-other":"¤00조","100000000000000-count-other":"¤000조"}},"unitPattern-count-other":"{0} {1}"},"miscPatterns-numberSystem-latn":{"atLeast":"{0}+","range":"{0}~{1}"},"minimalPairs":{"pluralMinimalPairs-count-other":"{0}일","other":"{0}번째 길목에서 우회전하세요."}}},"zh-Hans":{"identity":{"version":{"_number":"$Revision: 13133 $","_cldrVersion":"32"},"language":"zh","script":"Hans"},"dates":{"calendars":{"gregorian":{"months":{"format":{"abbreviated":{"1":"1月","2":"2月","3":"3月","4":"4月","5":"5月","6":"6月","7":"7月","8":"8月","9":"9月","10":"10月","11":"11月","12":"12月"},"narrow":{"1":"1","2":"2","3":"3","4":"4","5":"5","6":"6","7":"7","8":"8","9":"9","10":"10","11":"11","12":"12"},"wide":{"1":"一月","2":"二月","3":"三月","4":"四月","5":"五月","6":"六月","7":"七月","8":"八月","9":"九月","10":"十月","11":"十一月","12":"十二月"}},"stand-alone":{"abbreviated":{"1":"1月","2":"2月","3":"3月","4":"4月","5":"5月","6":"6月","7":"7月","8":"8月","9":"9月","10":"10月","11":"11月","12":"12月"},"narrow":{"1":"1","2":"2","3":"3","4":"4","5":"5","6":"6","7":"7","8":"8","9":"9","10":"10","11":"11","12":"12"},"wide":{"1":"一月","2":"二月","3":"三月","4":"四月","5":"五月","6":"六月","7":"七月","8":"八月","9":"九月","10":"十月","11":"十一月","12":"十二月"}}},"days":{"format":{"abbreviated":{"sun":"周日","mon":"周一","tue":"周二","wed":"周三","thu":"周四","fri":"周五","sat":"周六"},"narrow":{"sun":"日","mon":"一","tue":"二","wed":"三","thu":"四","fri":"五","sat":"六"},"short":{"sun":"周日","mon":"周一","tue":"周二","wed":"周三","thu":"周四","fri":"周五","sat":"周六"},"wide":{"sun":"星期日","mon":"星期一","tue":"星期二","wed":"星期三","thu":"星期四","fri":"星期五","sat":"星期六"}},"stand-alone":{"abbreviated":{"sun":"周日","mon":"周一","tue":"周二","wed":"周三","thu":"周四","fri":"周五","sat":"周六"},"narrow":{"sun":"日","mon":"一","tue":"二","wed":"三","thu":"四","fri":"五","sat":"六"},"short":{"sun":"周日","mon":"周一","tue":"周二","wed":"周三","thu":"周四","fri":"周五","sat":"周六"},"wide":{"sun":"星期日","mon":"星期一","tue":"星期二","wed":"星期三","thu":"星期四","fri":"星期五","sat":"星期六"}}},"quarters":{"format":{"abbreviated":{"1":"1季度","2":"2季度","3":"3季度","4":"4季度"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"第一季度","2":"第二季度","3":"第三季度","4":"第四季度"}},"stand-alone":{"abbreviated":{"1":"1季度","2":"2季度","3":"3季度","4":"4季度"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"第一季度","2":"第二季度","3":"第三季度","4":"第四季度"}}},"dayPeriods":{"format":{"abbreviated":{"midnight":"午夜","am":"上午","pm":"下午","morning1":"早上","morning2":"上午","afternoon1":"中午","afternoon2":"下午","evening1":"晚上","night1":"凌晨"},"narrow":{"midnight":"午夜","am":"上午","pm":"下午","morning1":"早上","morning2":"上午","afternoon1":"中午","afternoon2":"下午","evening1":"晚上","night1":"凌晨"},"wide":{"midnight":"午夜","am":"上午","pm":"下午","morning1":"清晨","morning2":"上午","afternoon1":"中午","afternoon2":"下午","evening1":"晚上","night1":"凌晨"}},"stand-alone":{"abbreviated":{"midnight":"午夜","am":"上午","pm":"下午","morning1":"早上","morning2":"上午","afternoon1":"中午","afternoon2":"下午","evening1":"晚上","night1":"凌晨"},"narrow":{"midnight":"午夜","am":"上午","pm":"下午","morning1":"早上","morning2":"上午","afternoon1":"中午","afternoon2":"下午","evening1":"晚上","night1":"凌晨"},"wide":{"midnight":"午夜","am":"上午","pm":"下午","morning1":"早上","morning2":"上午","afternoon1":"中午","afternoon2":"下午","evening1":"晚上","night1":"凌晨"}}},"eras":{"eraNames":{"0":"公元前","1":"公元","0-alt-variant":"BCE","1-alt-variant":"CE"},"eraAbbr":{"0":"公元前","1":"公元","0-alt-variant":"BCE","1-alt-variant":"CE"},"eraNarrow":{"0":"公元前","1":"公元","0-alt-variant":"BCE","1-alt-variant":"CE"}},"dateFormats":{"full":"y年M月d日EEEE","long":"y年M月d日","medium":"y年M月d日","short":"y/M/d"},"timeFormats":{"full":"zzzz ah:mm:ss","long":"z ah:mm:ss","medium":"ah:mm:ss","short":"ah:mm"},"dateTimeFormats":{"full":"{1} {0}","long":"{1} {0}","medium":"{1} {0}","short":"{1} {0}","availableFormats":{"Bh":"Bh时","Bhm":"Bh:mm","Bhms":"Bh:mm:ss","d":"d日","E":"ccc","EBhm":"EBh:mm","EBhms":"EBh:mm:ss","Ed":"d日E","Ehm":"Eah:mm","EHm":"EHH:mm","Ehms":"Eah:mm:ss","EHms":"EHH:mm:ss","Gy":"Gy年","GyMMM":"Gy年M月","GyMMMd":"Gy年M月d日","GyMMMEd":"Gy年M月d日E","h":"ah时","H":"H时","hm":"ah:mm","Hm":"HH:mm","hms":"ah:mm:ss","Hms":"HH:mm:ss","hmsv":"v ah:mm:ss","Hmsv":"v HH:mm:ss","hmv":"v ah:mm","Hmv":"v HH:mm","M":"M月","Md":"M/d","MEd":"M/dE","MMdd":"MM/dd","MMM":"LLL","MMMd":"M月d日","MMMEd":"M月d日E","MMMMd":"M月d日","MMMMW-count-other":"MMM第W周","ms":"mm:ss","y":"y年","yM":"y年M月","yMd":"y/M/d","yMEd":"y/M/dE","yMM":"y年M月","yMMM":"y年M月","yMMMd":"y年M月d日","yMMMEd":"y年M月d日E","yMMMM":"y年M月","yQQQ":"y年第Q季度","yQQQQ":"y年第Q季度","yw-count-other":"Y年第w周"},"appendItems":{"Day":"{0} ({2}: {1})","Day-Of-Week":"{0} {1}","Era":"{1} {0}","Hour":"{0} ({2}: {1})","Minute":"{0} ({2}: {1})","Month":"{0} ({2}: {1})","Quarter":"{0} ({2}: {1})","Second":"{0} ({2}: {1})","Timezone":"{1}{0}","Week":"{0} ({2}: {1})","Year":"{1} {0}"},"intervalFormats":{"intervalFormatFallback":"{0} – {1}","d":{"d":"d–d日"},"h":{"a":"ah时至ah时","h":"ah时至h时"},"H":{"H":"HH–HH"},"hm":{"a":"ah:mm至ah:mm","h":"ah:mm至h:mm","m":"ah:mm至h:mm"},"Hm":{"H":"HH:mm–HH:mm","m":"HH:mm–HH:mm"},"hmv":{"a":"vah:mm至ah:mm","h":"vah:mm至h:mm","m":"vah:mm至h:mm"},"Hmv":{"H":"v HH:mm–HH:mm","m":"v HH:mm–HH:mm"},"hv":{"a":"vah时至ah时","h":"vah时至h时"},"Hv":{"H":"v HH–HH"},"M":{"M":"M–M月"},"Md":{"d":"M/d – M/d","M":"M/d – M/d"},"MEd":{"d":"M/dE至M/dE","M":"M/dE至M/dE"},"MMM":{"M":"MMM – MMM"},"MMMd":{"d":"M月d日至d日","M":"M月d日至M月d日"},"MMMEd":{"d":"M月d日E至d日E","M":"M月d日E至M月d日E"},"y":{"y":"y–y年"},"yM":{"M":"y年M月至M月","y":"y年M月至y年M月"},"yMd":{"d":"y/M/d – y/M/d","M":"y/M/d – y/M/d","y":"y/M/d – y/M/d"},"yMEd":{"d":"y/M/dE至y/M/dE","M":"y/M/dE至y/M/dE","y":"y/M/dE至y/M/dE"},"yMMM":{"M":"y年M月至M月","y":"y年M月至y年M月"},"yMMMd":{"d":"y年M月d日至d日","M":"y年M月d日至M月d日","y":"y年M月d日至y年M月d日"},"yMMMEd":{"d":"y年M月d日E至d日E","M":"y年M月d日E至M月d日E","y":"y年M月d日E至y年M月d日E"},"yMMMM":{"M":"y年M月至M月","y":"y年M月至y年M月"}}}}},"fields":{"era":{"displayName":"纪元"},"era-short":{"displayName":"纪元"},"era-narrow":{"displayName":"纪元"},"year":{"displayName":"年","relative-type--1":"去年","relative-type-0":"今年","relative-type-1":"明年","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}年后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}年前"}},"year-short":{"displayName":"年","relative-type--1":"去年","relative-type-0":"今年","relative-type-1":"明年","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}年后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}年前"}},"year-narrow":{"displayName":"年","relative-type--1":"去年","relative-type-0":"今年","relative-type-1":"明年","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}年后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}年前"}},"quarter":{"displayName":"季度","relative-type--1":"上季度","relative-type-0":"本季度","relative-type-1":"下季度","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}个季度后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}个季度前"}},"quarter-short":{"displayName":"季","relative-type--1":"上季度","relative-type-0":"本季度","relative-type-1":"下季度","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}个季度后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}个季度前"}},"quarter-narrow":{"displayName":"季","relative-type--1":"上季度","relative-type-0":"本季度","relative-type-1":"下季度","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}个季度后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}个季度前"}},"month":{"displayName":"月","relative-type--1":"上个月","relative-type-0":"本月","relative-type-1":"下个月","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}个月后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}个月前"}},"month-short":{"displayName":"月","relative-type--1":"上个月","relative-type-0":"本月","relative-type-1":"下个月","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}个月后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}个月前"}},"month-narrow":{"displayName":"月","relative-type--1":"上个月","relative-type-0":"本月","relative-type-1":"下个月","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}个月后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}个月前"}},"week":{"displayName":"周","relative-type--1":"上周","relative-type-0":"本周","relative-type-1":"下周","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}周后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}周前"},"relativePeriod":"{0}这周"},"week-short":{"displayName":"周","relative-type--1":"上周","relative-type-0":"本周","relative-type-1":"下周","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}周后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}周前"},"relativePeriod":"{0}这周"},"week-narrow":{"displayName":"周","relative-type--1":"上周","relative-type-0":"本周","relative-type-1":"下周","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}周后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}周前"},"relativePeriod":"{0}这周"},"weekOfMonth":{"displayName":"月中周"},"weekOfMonth-short":{"displayName":"月中周"},"weekOfMonth-narrow":{"displayName":"月中周"},"day":{"displayName":"日","relative-type--2":"前天","relative-type--1":"昨天","relative-type-0":"今天","relative-type-1":"明天","relative-type-2":"后天","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}天后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}天前"}},"day-short":{"displayName":"日","relative-type--2":"前天","relative-type--1":"昨天","relative-type-0":"今天","relative-type-1":"明天","relative-type-2":"后天","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}天后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}天前"}},"day-narrow":{"displayName":"日","relative-type--2":"前天","relative-type--1":"昨天","relative-type-0":"今天","relative-type-1":"明天","relative-type-2":"后天","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}天后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}天前"}},"dayOfYear":{"displayName":"年中日"},"dayOfYear-short":{"displayName":"年中日"},"dayOfYear-narrow":{"displayName":"年中日"},"weekday":{"displayName":"工作日"},"weekday-short":{"displayName":"工作日"},"weekday-narrow":{"displayName":"工作日"},"weekdayOfMonth":{"displayName":"月中日"},"weekdayOfMonth-short":{"displayName":"月中日"},"weekdayOfMonth-narrow":{"displayName":"月中日"},"sun":{"relative-type--1":"上周日","relative-type-0":"本周日","relative-type-1":"下周日","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}个周日后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}个周日前"}},"sun-short":{"relative-type--1":"上周日","relative-type-0":"本周日","relative-type-1":"下周日","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}个周日后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}个周日前"}},"sun-narrow":{"relative-type--1":"上周日","relative-type-0":"本周日","relative-type-1":"下周日","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}个周日后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}个周日前"}},"mon":{"relative-type--1":"上周一","relative-type-0":"本周一","relative-type-1":"下周一","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}个周一后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}个周一前"}},"mon-short":{"relative-type--1":"上周一","relative-type-0":"本周一","relative-type-1":"下周一","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}个周一后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}个周一前"}},"mon-narrow":{"relative-type--1":"上周一","relative-type-0":"本周一","relative-type-1":"下周一","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}个周一后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}个周一前"}},"tue":{"relative-type--1":"上周二","relative-type-0":"本周二","relative-type-1":"下周二","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}个周二后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}个周二前"}},"tue-short":{"relative-type--1":"上周二","relative-type-0":"本周二","relative-type-1":"下周二","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}个周二后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}个周二前"}},"tue-narrow":{"relative-type--1":"上周二","relative-type-0":"本周二","relative-type-1":"下周二","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}个周二后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}个周二前"}},"wed":{"relative-type--1":"上周三","relative-type-0":"本周三","relative-type-1":"下周三","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}个周三后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}个周三前"}},"wed-short":{"relative-type--1":"上周三","relative-type-0":"本周三","relative-type-1":"下周三","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}个周三后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}个周三前"}},"wed-narrow":{"relative-type--1":"上周三","relative-type-0":"本周三","relative-type-1":"下周三","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}个周三后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}个周三前"}},"thu":{"relative-type--1":"上周四","relative-type-0":"本周四","relative-type-1":"下周四","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}个周四后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}个周四前"}},"thu-short":{"relative-type--1":"上周四","relative-type-0":"本周四","relative-type-1":"下周四","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}个周四后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}个周四前"}},"thu-narrow":{"relative-type--1":"上周四","relative-type-0":"本周四","relative-type-1":"下周四","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}个周四后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}个周四前"}},"fri":{"relative-type--1":"上周五","relative-type-0":"本周五","relative-type-1":"下周五","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}个周五后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}个周五前"}},"fri-short":{"relative-type--1":"上周五","relative-type-0":"本周五","relative-type-1":"下周五","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}个周五后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}个周五前"}},"fri-narrow":{"relative-type--1":"上周五","relative-type-0":"本周五","relative-type-1":"下周五","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}个周五后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}个周五前"}},"sat":{"relative-type--1":"上周六","relative-type-0":"本周六","relative-type-1":"下周六","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}个周六后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}个周六前"}},"sat-short":{"relative-type--1":"上周六","relative-type-0":"本周六","relative-type-1":"下周六","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}个周六后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}个周六前"}},"sat-narrow":{"relative-type--1":"上周六","relative-type-0":"本周六","relative-type-1":"下周六","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}个周六后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}个周六前"}},"dayperiod-short":{"displayName":"上午/下午"},"dayperiod":{"displayName":"上午/下午"},"dayperiod-narrow":{"displayName":"上午/下午"},"hour":{"displayName":"小时","relative-type-0":"这一时间 / 此时","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}小时后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}小时前"}},"hour-short":{"displayName":"小时","relative-type-0":"这一时间 / 此时","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}小时后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}小时前"}},"hour-narrow":{"displayName":"小时","relative-type-0":"这一时间 / 此时","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}小时后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}小时前"}},"minute":{"displayName":"分钟","relative-type-0":"此刻","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}分钟后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}分钟前"}},"minute-short":{"displayName":"分","relative-type-0":"此刻","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}分钟后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}分钟前"}},"minute-narrow":{"displayName":"分","relative-type-0":"此刻","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}分钟后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}分钟前"}},"second":{"displayName":"秒","relative-type-0":"现在","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}秒钟后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}秒钟前"}},"second-short":{"displayName":"秒","relative-type-0":"现在","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}秒后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}秒前"}},"second-narrow":{"displayName":"秒","relative-type-0":"现在","relativeTime-type-future":{"relativeTimePattern-count-other":"{0}秒后"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0}秒前"}},"zone":{"displayName":"时区"},"zone-short":{"displayName":"时区"},"zone-narrow":{"displayName":"时区"}}},"numbers":{"currencies":{"ADP":{"displayName":"安道尔比塞塔","displayName-count-other":"安道尔比塞塔","symbol":"ADP"},"AED":{"displayName":"阿联酋迪拉姆","displayName-count-other":"阿联酋迪拉姆","symbol":"AED"},"AFA":{"displayName":"阿富汗尼 (1927–2002)","symbol":"AFA"},"AFN":{"displayName":"阿富汗尼","displayName-count-other":"阿富汗尼","symbol":"AFN"},"ALK":{"displayName":"阿尔巴尼亚列克(1946–1965)","displayName-count-other":"阿尔巴尼亚列克(1946–1965)","symbol":"ALK"},"ALL":{"displayName":"阿尔巴尼亚列克","displayName-count-other":"阿尔巴尼亚列克","symbol":"ALL"},"AMD":{"displayName":"亚美尼亚德拉姆","displayName-count-other":"亚美尼亚德拉姆","symbol":"AMD"},"ANG":{"displayName":"荷属安的列斯盾","displayName-count-other":"荷属安的列斯盾","symbol":"ANG"},"AOA":{"displayName":"安哥拉宽扎","displayName-count-other":"安哥拉宽扎","symbol":"AOA","symbol-alt-narrow":"Kz"},"AOK":{"displayName":"安哥拉宽扎 (1977–1990)","displayName-count-other":"安哥拉宽扎 (1977–1990)","symbol":"AOK"},"AON":{"displayName":"安哥拉新宽扎 (1990–2000)","displayName-count-other":"安哥拉新宽扎 (1990–2000)","symbol":"AON"},"AOR":{"displayName":"安哥拉重新调整宽扎 (1995–1999)","displayName-count-other":"安哥拉重新调整宽扎 (1995–1999)","symbol":"AOR"},"ARA":{"displayName":"阿根廷奥斯特拉尔","displayName-count-other":"阿根廷奥斯特拉尔","symbol":"ARA"},"ARL":{"displayName":"阿根廷法定比索 (1970–1983)","displayName-count-other":"阿根廷法定比索 (1970–1983)","symbol":"ARL"},"ARM":{"displayName":"阿根廷比索 (1881–1970)","displayName-count-other":"阿根廷比索 (1881–1970)","symbol":"ARM"},"ARP":{"displayName":"阿根廷比索 (1983–1985)","displayName-count-other":"阿根廷比索 (1983–1985)","symbol":"ARP"},"ARS":{"displayName":"阿根廷比索","displayName-count-other":"阿根廷比索","symbol":"ARS","symbol-alt-narrow":"$"},"ATS":{"displayName":"奥地利先令","displayName-count-other":"奥地利先令","symbol":"ATS"},"AUD":{"displayName":"澳大利亚元","displayName-count-other":"澳大利亚元","symbol":"AU$","symbol-alt-narrow":"$"},"AWG":{"displayName":"阿鲁巴弗罗林","displayName-count-other":"阿鲁巴弗罗林","symbol":"AWG"},"AZM":{"displayName":"阿塞拜疆马纳特 (1993–2006)","displayName-count-other":"阿塞拜疆马纳特 (1993–2006)","symbol":"AZM"},"AZN":{"displayName":"阿塞拜疆马纳特","displayName-count-other":"阿塞拜疆马纳特","symbol":"AZN"},"BAD":{"displayName":"波士尼亚-赫塞哥维纳第纳尔 (1992–1994)","displayName-count-other":"波士尼亚-赫塞哥维纳第纳尔 (1992–1994)","symbol":"BAD"},"BAM":{"displayName":"波斯尼亚-黑塞哥维那可兑换马克","displayName-count-other":"波斯尼亚-黑塞哥维那可兑换马克","symbol":"BAM","symbol-alt-narrow":"KM"},"BAN":{"displayName":"波士尼亚-赫塞哥维纳新第纳尔 (1994–1997)","displayName-count-other":"波士尼亚-赫塞哥维纳新第纳尔 (1994–1997)","symbol":"BAN"},"BBD":{"displayName":"巴巴多斯元","displayName-count-other":"巴巴多斯元","symbol":"BBD","symbol-alt-narrow":"$"},"BDT":{"displayName":"孟加拉塔卡","displayName-count-other":"孟加拉塔卡","symbol":"BDT","symbol-alt-narrow":"৳"},"BEC":{"displayName":"比利时法郎(可兑换)","displayName-count-other":"比利时法郎(可兑换)","symbol":"BEC"},"BEF":{"displayName":"比利时法郎","displayName-count-other":"比利时法郎","symbol":"BEF"},"BEL":{"displayName":"比利时法郎(金融)","displayName-count-other":"比利时法郎(金融)","symbol":"BEL"},"BGL":{"displayName":"保加利亚硬列弗","displayName-count-other":"保加利亚硬列弗","symbol":"BGL"},"BGM":{"displayName":"保加利亚社会党列弗","displayName-count-other":"保加利亚社会党列弗","symbol":"BGM"},"BGN":{"displayName":"保加利亚列弗","displayName-count-other":"保加利亚新列弗","symbol":"BGN"},"BGO":{"displayName":"保加利亚列弗 (1879–1952)","displayName-count-other":"保加利亚列弗 (1879–1952)","symbol":"BGO"},"BHD":{"displayName":"巴林第纳尔","displayName-count-other":"巴林第纳尔","symbol":"BHD"},"BIF":{"displayName":"布隆迪法郎","displayName-count-other":"布隆迪法郎","symbol":"BIF"},"BMD":{"displayName":"百慕大元","displayName-count-other":"百慕大元","symbol":"BMD","symbol-alt-narrow":"$"},"BND":{"displayName":"文莱元","displayName-count-other":"文莱元","symbol":"BND","symbol-alt-narrow":"$"},"BOB":{"displayName":"玻利维亚诺","displayName-count-other":"玻利维亚诺","symbol":"BOB","symbol-alt-narrow":"Bs"},"BOL":{"displayName":"玻利维亚诺 (1863–1963)","displayName-count-other":"玻利维亚诺 (1863–1963)","symbol":"BOL"},"BOP":{"displayName":"玻利维亚比索","displayName-count-other":"玻利维亚比索","symbol":"BOP"},"BOV":{"displayName":"玻利维亚 Mvdol(资金)","displayName-count-other":"玻利维亚 Mvdol(资金)","symbol":"BOV"},"BRB":{"displayName":"巴西新克鲁赛罗 (1967–1986)","displayName-count-other":"巴西新克鲁赛罗 (1967–1986)","symbol":"BRB"},"BRC":{"displayName":"巴西克鲁扎多 (1986–1989)","displayName-count-other":"巴西克鲁扎多 (1986–1989)","symbol":"BRC"},"BRE":{"displayName":"巴西克鲁塞罗 (1990–1993)","displayName-count-other":"巴西克鲁塞罗 (1990–1993)","symbol":"BRE"},"BRL":{"displayName":"巴西雷亚尔","displayName-count-other":"巴西雷亚尔","symbol":"R$","symbol-alt-narrow":"R$"},"BRN":{"displayName":"巴西新克鲁扎多 (1989–1990)","displayName-count-other":"巴西新克鲁扎多 (1989–1990)","symbol":"BRN"},"BRR":{"displayName":"巴西克鲁塞罗 (1993–1994)","displayName-count-other":"巴西克鲁塞罗 (1993–1994)","symbol":"BRR"},"BRZ":{"displayName":"巴西克鲁塞罗 (1942–1967)","displayName-count-other":"巴西克鲁塞罗 (1942–1967)","symbol":"BRZ"},"BSD":{"displayName":"巴哈马元","displayName-count-other":"巴哈马元","symbol":"BSD","symbol-alt-narrow":"$"},"BTN":{"displayName":"不丹努尔特鲁姆","displayName-count-other":"不丹努尔特鲁姆","symbol":"BTN"},"BUK":{"displayName":"缅元","symbol":"BUK"},"BWP":{"displayName":"博茨瓦纳普拉","displayName-count-other":"博茨瓦纳普拉","symbol":"BWP","symbol-alt-narrow":"P"},"BYB":{"displayName":"白俄罗斯新卢布 (1994–1999)","displayName-count-other":"白俄罗斯新卢布 (1994–1999)","symbol":"BYB"},"BYN":{"displayName":"白俄罗斯卢布","displayName-count-other":"白俄罗斯卢布","symbol":"BYN","symbol-alt-narrow":"р."},"BYR":{"displayName":"白俄罗斯卢布 (2000–2016)","displayName-count-other":"白俄罗斯卢布 (2000–2016)","symbol":"BYR"},"BZD":{"displayName":"伯利兹元","displayName-count-other":"伯利兹元","symbol":"BZD","symbol-alt-narrow":"$"},"CAD":{"displayName":"加拿大元","displayName-count-other":"加拿大元","symbol":"CA$","symbol-alt-narrow":"$"},"CDF":{"displayName":"刚果法郎","displayName-count-other":"刚果法郎","symbol":"CDF"},"CHE":{"displayName":"欧元 (WIR)","displayName-count-other":"欧元 (WIR)","symbol":"CHE"},"CHF":{"displayName":"瑞士法郎","displayName-count-other":"瑞士法郎","symbol":"CHF"},"CHW":{"displayName":"法郎 (WIR)","displayName-count-other":"法郎 (WIR)","symbol":"CHW"},"CLE":{"displayName":"智利埃斯库多","displayName-count-other":"智利埃斯库多","symbol":"CLE"},"CLF":{"displayName":"智利(资金)","displayName-count-other":"智利(资金)","symbol":"CLF"},"CLP":{"displayName":"智利比索","displayName-count-other":"智利比索","symbol":"CLP","symbol-alt-narrow":"$"},"CNH":{"displayName":"人民币(离岸)","displayName-count-other":"人民币(离岸)","symbol":"CNH"},"CNX":{"displayName":"CNX","symbol":"CNX"},"CNY":{"displayName":"人民币","displayName-count-other":"人民币","symbol":"¥","symbol-alt-narrow":"¥"},"COP":{"displayName":"哥伦比亚比索","displayName-count-other":"哥伦比亚比索","symbol":"COP","symbol-alt-narrow":"$"},"COU":{"displayName":"哥伦比亚币","displayName-count-other":"哥伦比亚币","symbol":"COU"},"CRC":{"displayName":"哥斯达黎加科朗","displayName-count-other":"哥斯达黎加科朗","symbol":"CRC","symbol-alt-narrow":"₡"},"CSD":{"displayName":"旧塞尔维亚第纳尔","displayName-count-other":"旧塞尔维亚第纳尔","symbol":"CSD"},"CSK":{"displayName":"捷克硬克朗","displayName-count-other":"捷克硬克朗","symbol":"CSK"},"CUC":{"displayName":"古巴可兑换比索","displayName-count-other":"古巴可兑换比索","symbol":"CUC","symbol-alt-narrow":"$"},"CUP":{"displayName":"古巴比索","displayName-count-other":"古巴比索","symbol":"CUP","symbol-alt-narrow":"$"},"CVE":{"displayName":"佛得角埃斯库多","displayName-count-other":"佛得角埃斯库多","symbol":"CVE"},"CYP":{"displayName":"塞浦路斯镑","displayName-count-other":"塞浦路斯镑","symbol":"CYP"},"CZK":{"displayName":"捷克克朗","displayName-count-other":"捷克克朗","symbol":"CZK","symbol-alt-narrow":"Kč"},"DDM":{"displayName":"东德奥斯特马克","displayName-count-other":"东德奥斯特马克","symbol":"DDM"},"DEM":{"displayName":"德国马克","displayName-count-other":"德国马克","symbol":"DEM"},"DJF":{"displayName":"吉布提法郎","displayName-count-other":"吉布提法郎","symbol":"DJF"},"DKK":{"displayName":"丹麦克朗","displayName-count-other":"丹麦克朗","symbol":"DKK","symbol-alt-narrow":"kr"},"DOP":{"displayName":"多米尼加比索","displayName-count-other":"多米尼加比索","symbol":"DOP","symbol-alt-narrow":"$"},"DZD":{"displayName":"阿尔及利亚第纳尔","displayName-count-other":"阿尔及利亚第纳尔","symbol":"DZD"},"ECS":{"displayName":"厄瓜多尔苏克雷","displayName-count-other":"厄瓜多尔苏克雷","symbol":"ECS"},"ECV":{"displayName":"厄瓜多尔 (UVC)","displayName-count-other":"厄瓜多尔 (UVC)","symbol":"ECV"},"EEK":{"displayName":"爱沙尼亚克朗","displayName-count-other":"爱沙尼亚克朗","symbol":"EEK"},"EGP":{"displayName":"埃及镑","displayName-count-other":"埃及镑","symbol":"EGP","symbol-alt-narrow":"E£"},"ERN":{"displayName":"厄立特里亚纳克法","displayName-count-other":"厄立特里亚纳克法","symbol":"ERN"},"ESA":{"displayName":"西班牙比塞塔(帐户 A)","displayName-count-other":"西班牙比塞塔(帐户 A)","symbol":"ESA"},"ESB":{"displayName":"西班牙比塞塔(兑换帐户)","displayName-count-other":"西班牙比塞塔(兑换帐户)","symbol":"ESB"},"ESP":{"displayName":"西班牙比塞塔","displayName-count-other":"西班牙比塞塔","symbol":"ESP","symbol-alt-narrow":"₧"},"ETB":{"displayName":"埃塞俄比亚比尔","displayName-count-other":"埃塞俄比亚比尔","symbol":"ETB"},"EUR":{"displayName":"欧元","displayName-count-other":"欧元","symbol":"€","symbol-alt-narrow":"€"},"FIM":{"displayName":"芬兰马克","displayName-count-other":"芬兰马克","symbol":"FIM"},"FJD":{"displayName":"斐济元","displayName-count-other":"斐济元","symbol":"FJD","symbol-alt-narrow":"$"},"FKP":{"displayName":"福克兰群岛镑","displayName-count-other":"福克兰群岛镑","symbol":"FKP","symbol-alt-narrow":"£"},"FRF":{"displayName":"法国法郎","displayName-count-other":"法国法郎","symbol":"FRF"},"GBP":{"displayName":"英镑","displayName-count-other":"英镑","symbol":"£","symbol-alt-narrow":"£"},"GEK":{"displayName":"乔治亚库蓬拉瑞特","displayName-count-other":"乔治亚库蓬拉瑞特","symbol":"GEK"},"GEL":{"displayName":"格鲁吉亚拉里","displayName-count-other":"格鲁吉亚拉里","symbol":"GEL","symbol-alt-narrow":"₾","symbol-alt-variant":"₾"},"GHC":{"displayName":"加纳塞第","displayName-count-other":"加纳塞第","symbol":"GHC"},"GHS":{"displayName":"加纳塞地","displayName-count-other":"加纳塞地","symbol":"GHS"},"GIP":{"displayName":"直布罗陀镑","displayName-count-other":"直布罗陀镑","symbol":"GIP","symbol-alt-narrow":"£"},"GMD":{"displayName":"冈比亚达拉西","displayName-count-other":"冈比亚达拉西","symbol":"GMD"},"GNF":{"displayName":"几内亚法郎","displayName-count-other":"几内亚法郎","symbol":"GNF","symbol-alt-narrow":"FG"},"GNS":{"displayName":"几内亚西里","displayName-count-other":"几内亚西里","symbol":"GNS"},"GQE":{"displayName":"赤道几内亚埃奎勒","displayName-count-other":"赤道几内亚埃奎勒","symbol":"GQE"},"GRD":{"displayName":"希腊德拉克马","displayName-count-other":"希腊德拉克马","symbol":"GRD"},"GTQ":{"displayName":"危地马拉格查尔","displayName-count-other":"危地马拉格查尔","symbol":"GTQ","symbol-alt-narrow":"Q"},"GWE":{"displayName":"葡萄牙几内亚埃斯库多","displayName-count-other":"葡萄牙几内亚埃斯库多","symbol":"GWE"},"GWP":{"displayName":"几内亚比绍比索","displayName-count-other":"几内亚比绍比索","symbol":"GWP"},"GYD":{"displayName":"圭亚那元","displayName-count-other":"圭亚那元","symbol":"GYD","symbol-alt-narrow":"$"},"HKD":{"displayName":"港元","displayName-count-other":"港元","symbol":"HK$","symbol-alt-narrow":"$"},"HNL":{"displayName":"洪都拉斯伦皮拉","displayName-count-other":"洪都拉斯伦皮拉","symbol":"HNL","symbol-alt-narrow":"L"},"HRD":{"displayName":"克罗地亚第纳尔","displayName-count-other":"克罗地亚第纳尔","symbol":"HRD"},"HRK":{"displayName":"克罗地亚库纳","displayName-count-other":"克罗地亚库纳","symbol":"HRK","symbol-alt-narrow":"kn"},"HTG":{"displayName":"海地古德","displayName-count-other":"海地古德","symbol":"HTG"},"HUF":{"displayName":"匈牙利福林","displayName-count-other":"匈牙利福林","symbol":"HUF","symbol-alt-narrow":"Ft"},"IDR":{"displayName":"印度尼西亚盾","displayName-count-other":"印度尼西亚盾","symbol":"IDR","symbol-alt-narrow":"Rp"},"IEP":{"displayName":"爱尔兰镑","displayName-count-other":"爱尔兰镑","symbol":"IEP"},"ILP":{"displayName":"以色列镑","displayName-count-other":"以色列镑","symbol":"ILP"},"ILR":{"displayName":"以色列谢克尔(1980–1985)","displayName-count-other":"以色列谢克尔(1980–1985)","symbol":"ILS"},"ILS":{"displayName":"以色列新谢克尔","displayName-count-other":"以色列新谢克尔","symbol":"₪","symbol-alt-narrow":"₪"},"INR":{"displayName":"印度卢比","displayName-count-other":"印度卢比","symbol":"₹","symbol-alt-narrow":"₹"},"IQD":{"displayName":"伊拉克第纳尔","displayName-count-other":"伊拉克第纳尔","symbol":"IQD"},"IRR":{"displayName":"伊朗里亚尔","displayName-count-other":"伊朗里亚尔","symbol":"IRR"},"ISJ":{"displayName":"冰岛克朗(1918–1981)","displayName-count-other":"冰岛克朗(1918–1981)","symbol":"ISJ"},"ISK":{"displayName":"冰岛克朗","displayName-count-other":"冰岛克朗","symbol":"ISK","symbol-alt-narrow":"kr"},"ITL":{"displayName":"意大利里拉","displayName-count-other":"意大利里拉","symbol":"ITL"},"JMD":{"displayName":"牙买加元","displayName-count-other":"牙买加元","symbol":"JMD","symbol-alt-narrow":"$"},"JOD":{"displayName":"约旦第纳尔","displayName-count-other":"约旦第纳尔","symbol":"JOD"},"JPY":{"displayName":"日元","displayName-count-other":"日元","symbol":"JP¥","symbol-alt-narrow":"¥"},"KES":{"displayName":"肯尼亚先令","displayName-count-other":"肯尼亚先令","symbol":"KES"},"KGS":{"displayName":"吉尔吉斯斯坦索姆","displayName-count-other":"吉尔吉斯斯坦索姆","symbol":"KGS"},"KHR":{"displayName":"柬埔寨瑞尔","displayName-count-other":"柬埔寨瑞尔","symbol":"KHR","symbol-alt-narrow":"៛"},"KMF":{"displayName":"科摩罗法郎","displayName-count-other":"科摩罗法郎","symbol":"KMF","symbol-alt-narrow":"CF"},"KPW":{"displayName":"朝鲜元","displayName-count-other":"朝鲜元","symbol":"KPW","symbol-alt-narrow":"₩"},"KRH":{"displayName":"韩元 (1953–1962)","symbol":"KRH"},"KRO":{"displayName":"韩元 (1945–1953)","symbol":"KRO"},"KRW":{"displayName":"韩元","displayName-count-other":"韩元","symbol":"₩","symbol-alt-narrow":"₩"},"KWD":{"displayName":"科威特第纳尔","displayName-count-other":"科威特第纳尔","symbol":"KWD"},"KYD":{"displayName":"开曼元","displayName-count-other":"开曼元","symbol":"KYD","symbol-alt-narrow":"$"},"KZT":{"displayName":"哈萨克斯坦坚戈","displayName-count-other":"哈萨克斯坦坚戈","symbol":"KZT","symbol-alt-narrow":"₸"},"LAK":{"displayName":"老挝基普","displayName-count-other":"老挝基普","symbol":"LAK","symbol-alt-narrow":"₭"},"LBP":{"displayName":"黎巴嫩镑","displayName-count-other":"黎巴嫩镑","symbol":"LBP","symbol-alt-narrow":"L£"},"LKR":{"displayName":"斯里兰卡卢比","displayName-count-other":"斯里兰卡卢比","symbol":"LKR","symbol-alt-narrow":"Rs"},"LRD":{"displayName":"利比里亚元","displayName-count-other":"利比里亚元","symbol":"LRD","symbol-alt-narrow":"$"},"LSL":{"displayName":"莱索托洛蒂","displayName-count-other":"莱索托洛蒂","symbol":"LSL"},"LTL":{"displayName":"立陶宛立特","displayName-count-other":"立陶宛立特","symbol":"LTL","symbol-alt-narrow":"Lt"},"LTT":{"displayName":"立陶宛塔咯呐司","displayName-count-other":"立陶宛塔咯呐司","symbol":"LTT"},"LUC":{"displayName":"卢森堡可兑换法郎","displayName-count-other":"卢森堡可兑换法郎","symbol":"LUC"},"LUF":{"displayName":"卢森堡法郎","displayName-count-other":"卢森堡法郎","symbol":"LUF"},"LUL":{"displayName":"卢森堡金融法郎","displayName-count-other":"卢森堡金融法郎","symbol":"LUL"},"LVL":{"displayName":"拉脱维亚拉特","displayName-count-other":"拉脱维亚拉特","symbol":"LVL","symbol-alt-narrow":"Ls"},"LVR":{"displayName":"拉脱维亚卢布","displayName-count-other":"拉脱维亚卢布","symbol":"LVR"},"LYD":{"displayName":"利比亚第纳尔","displayName-count-other":"利比亚第纳尔","symbol":"LYD"},"MAD":{"displayName":"摩洛哥迪拉姆","displayName-count-other":"摩洛哥迪拉姆","symbol":"MAD"},"MAF":{"displayName":"摩洛哥法郎","displayName-count-other":"摩洛哥法郎","symbol":"MAF"},"MCF":{"displayName":"摩纳哥法郎","displayName-count-other":"摩纳哥法郎","symbol":"MCF"},"MDC":{"displayName":"摩尔多瓦库邦","displayName-count-other":"摩尔多瓦库邦","symbol":"MDC"},"MDL":{"displayName":"摩尔多瓦列伊","displayName-count-other":"摩尔多瓦列伊","symbol":"MDL"},"MGA":{"displayName":"马达加斯加阿里亚里","displayName-count-other":"马达加斯加阿里亚里","symbol":"MGA","symbol-alt-narrow":"Ar"},"MGF":{"displayName":"马达加斯加法郎","displayName-count-other":"马达加斯加法郎","symbol":"MGF"},"MKD":{"displayName":"马其顿第纳尔","displayName-count-other":"马其顿第纳尔","symbol":"MKD"},"MKN":{"displayName":"马其顿第纳尔 (1992–1993)","displayName-count-other":"马其顿第纳尔 (1992–1993)","symbol":"MKN"},"MLF":{"displayName":"马里法郎","displayName-count-other":"马里法郎","symbol":"MLF"},"MMK":{"displayName":"缅甸元","displayName-count-other":"缅甸元","symbol":"MMK","symbol-alt-narrow":"K"},"MNT":{"displayName":"蒙古图格里克","displayName-count-other":"蒙古图格里克","symbol":"MNT","symbol-alt-narrow":"₮"},"MOP":{"displayName":"澳门币","displayName-count-other":"澳门元","symbol":"MOP"},"MRO":{"displayName":"毛里塔尼亚乌吉亚","displayName-count-other":"毛里塔尼亚乌吉亚","symbol":"MRO"},"MTL":{"displayName":"马耳他里拉","displayName-count-other":"马耳他里拉","symbol":"MTL"},"MTP":{"displayName":"马耳他镑","displayName-count-other":"马耳他镑","symbol":"MTP"},"MUR":{"displayName":"毛里求斯卢比","displayName-count-other":"毛里求斯卢比","symbol":"MUR","symbol-alt-narrow":"Rs"},"MVP":{"displayName":"马尔代夫卢比(1947–1981)","displayName-count-other":"马尔代夫卢比(1947–1981)","symbol":"MVP"},"MVR":{"displayName":"马尔代夫卢菲亚","displayName-count-other":"马尔代夫卢菲亚","symbol":"MVR"},"MWK":{"displayName":"马拉维克瓦查","displayName-count-other":"马拉维克瓦查","symbol":"MWK"},"MXN":{"displayName":"墨西哥比索","displayName-count-other":"墨西哥比索","symbol":"MX$","symbol-alt-narrow":"$"},"MXP":{"displayName":"墨西哥银比索 (1861–1992)","displayName-count-other":"墨西哥银比索 (1861–1992)","symbol":"MXP"},"MXV":{"displayName":"墨西哥(资金)","displayName-count-other":"墨西哥(资金)","symbol":"MXV"},"MYR":{"displayName":"马来西亚林吉特","displayName-count-other":"马来西亚林吉特","symbol":"MYR","symbol-alt-narrow":"RM"},"MZE":{"displayName":"莫桑比克埃斯库多","displayName-count-other":"莫桑比克埃斯库多","symbol":"MZE"},"MZM":{"displayName":"旧莫桑比克美提卡","displayName-count-other":"旧莫桑比克美提卡","symbol":"MZM"},"MZN":{"displayName":"莫桑比克美提卡","displayName-count-other":"莫桑比克美提卡","symbol":"MZN"},"NAD":{"displayName":"纳米比亚元","displayName-count-other":"纳米比亚元","symbol":"NAD","symbol-alt-narrow":"$"},"NGN":{"displayName":"尼日利亚奈拉","displayName-count-other":"尼日利亚奈拉","symbol":"NGN","symbol-alt-narrow":"₦"},"NIC":{"displayName":"尼加拉瓜科多巴 (1988–1991)","displayName-count-other":"尼加拉瓜科多巴 (1988–1991)","symbol":"NIC"},"NIO":{"displayName":"尼加拉瓜科多巴","displayName-count-other":"尼加拉瓜金科多巴","symbol":"NIO","symbol-alt-narrow":"C$"},"NLG":{"displayName":"荷兰盾","displayName-count-other":"荷兰盾","symbol":"NLG"},"NOK":{"displayName":"挪威克朗","displayName-count-other":"挪威克朗","symbol":"NOK","symbol-alt-narrow":"kr"},"NPR":{"displayName":"尼泊尔卢比","displayName-count-other":"尼泊尔卢比","symbol":"NPR","symbol-alt-narrow":"Rs"},"NZD":{"displayName":"新西兰元","displayName-count-other":"新西兰元","symbol":"NZ$","symbol-alt-narrow":"$"},"OMR":{"displayName":"阿曼里亚尔","displayName-count-other":"阿曼里亚尔","symbol":"OMR"},"PAB":{"displayName":"巴拿马巴波亚","displayName-count-other":"巴拿马巴波亚","symbol":"PAB"},"PEI":{"displayName":"秘鲁印第","displayName-count-other":"秘鲁印第","symbol":"PEI"},"PEN":{"displayName":"秘鲁索尔","displayName-count-other":"秘鲁索尔","symbol":"PEN"},"PES":{"displayName":"秘鲁索尔 (1863–1965)","displayName-count-other":"秘鲁索尔 (1863–1965)","symbol":"PES"},"PGK":{"displayName":"巴布亚新几内亚基那","displayName-count-other":"巴布亚新几内亚基那","symbol":"PGK"},"PHP":{"displayName":"菲律宾比索","displayName-count-other":"菲律宾比索","symbol":"PHP","symbol-alt-narrow":"₱"},"PKR":{"displayName":"巴基斯坦卢比","displayName-count-other":"巴基斯坦卢比","symbol":"PKR","symbol-alt-narrow":"Rs"},"PLN":{"displayName":"波兰兹罗提","displayName-count-other":"波兰兹罗提","symbol":"PLN","symbol-alt-narrow":"zł"},"PLZ":{"displayName":"波兰兹罗提 (1950–1995)","displayName-count-other":"波兰兹罗提 (1950–1995)","symbol":"PLZ"},"PTE":{"displayName":"葡萄牙埃斯库多","displayName-count-other":"葡萄牙埃斯库多","symbol":"PTE"},"PYG":{"displayName":"巴拉圭瓜拉尼","displayName-count-other":"巴拉圭瓜拉尼","symbol":"PYG","symbol-alt-narrow":"₲"},"QAR":{"displayName":"卡塔尔里亚尔","displayName-count-other":"卡塔尔里亚尔","symbol":"QAR"},"RHD":{"displayName":"罗得西亚元","displayName-count-other":"罗得西亚元","symbol":"RHD"},"ROL":{"displayName":"旧罗马尼亚列伊","displayName-count-other":"旧罗马尼亚列伊","symbol":"ROL"},"RON":{"displayName":"罗马尼亚列伊","displayName-count-other":"罗马尼亚列伊","symbol":"RON","symbol-alt-narrow":"lei"},"RSD":{"displayName":"塞尔维亚第纳尔","displayName-count-other":"塞尔维亚第纳尔","symbol":"RSD"},"RUB":{"displayName":"俄罗斯卢布","displayName-count-other":"俄罗斯卢布","symbol":"RUB","symbol-alt-narrow":"₽"},"RUR":{"displayName":"俄国卢布 (1991–1998)","displayName-count-other":"俄国卢布 (1991–1998)","symbol":"RUR","symbol-alt-narrow":"р."},"RWF":{"displayName":"卢旺达法郎","displayName-count-other":"卢旺达法郎","symbol":"RWF","symbol-alt-narrow":"RF"},"SAR":{"displayName":"沙特里亚尔","displayName-count-other":"沙特里亚尔","symbol":"SAR"},"SBD":{"displayName":"所罗门群岛元","displayName-count-other":"所罗门群岛元","symbol":"SBD","symbol-alt-narrow":"$"},"SCR":{"displayName":"塞舌尔卢比","displayName-count-other":"塞舌尔卢比","symbol":"SCR"},"SDD":{"displayName":"苏丹第纳尔 (1992–2007)","displayName-count-other":"苏丹第纳尔 (1992–2007)","symbol":"SDD"},"SDG":{"displayName":"苏丹镑","displayName-count-other":"苏丹镑","symbol":"SDG"},"SDP":{"displayName":"旧苏丹镑","displayName-count-other":"旧苏丹镑","symbol":"SDP"},"SEK":{"displayName":"瑞典克朗","displayName-count-other":"瑞典克朗","symbol":"SEK","symbol-alt-narrow":"kr"},"SGD":{"displayName":"新加坡元","displayName-count-other":"新加坡元","symbol":"SGD","symbol-alt-narrow":"$"},"SHP":{"displayName":"圣赫勒拿群岛磅","displayName-count-other":"圣赫勒拿群岛磅","symbol":"SHP","symbol-alt-narrow":"£"},"SIT":{"displayName":"斯洛文尼亚托拉尔","displayName-count-other":"斯洛文尼亚托拉尔","symbol":"SIT"},"SKK":{"displayName":"斯洛伐克克朗","displayName-count-other":"斯洛伐克克朗","symbol":"SKK"},"SLL":{"displayName":"塞拉利昂利昂","displayName-count-other":"塞拉利昂利昂","symbol":"SLL"},"SOS":{"displayName":"索马里先令","displayName-count-other":"索马里先令","symbol":"SOS"},"SRD":{"displayName":"苏里南元","displayName-count-other":"苏里南元","symbol":"SRD","symbol-alt-narrow":"$"},"SRG":{"displayName":"苏里南盾","displayName-count-other":"苏里南盾","symbol":"SRG"},"SSP":{"displayName":"南苏丹镑","displayName-count-other":"南苏丹镑","symbol":"SSP","symbol-alt-narrow":"£"},"STD":{"displayName":"圣多美和普林西比多布拉","displayName-count-other":"圣多美和普林西比多布拉","symbol":"STD","symbol-alt-narrow":"Db"},"STN":{"displayName":"STN","symbol":"STN"},"SUR":{"displayName":"苏联卢布","displayName-count-other":"苏联卢布","symbol":"SUR"},"SVC":{"displayName":"萨尔瓦多科朗","displayName-count-other":"萨尔瓦多科朗","symbol":"SVC"},"SYP":{"displayName":"叙利亚镑","displayName-count-other":"叙利亚镑","symbol":"SYP","symbol-alt-narrow":"£"},"SZL":{"displayName":"斯威士兰里兰吉尼","displayName-count-other":"斯威士兰里兰吉尼","symbol":"SZL"},"THB":{"displayName":"泰铢","displayName-count-other":"泰铢","symbol":"THB","symbol-alt-narrow":"฿"},"TJR":{"displayName":"塔吉克斯坦卢布","displayName-count-other":"塔吉克斯坦卢布","symbol":"TJR"},"TJS":{"displayName":"塔吉克斯坦索莫尼","displayName-count-other":"塔吉克斯坦索莫尼","symbol":"TJS"},"TMM":{"displayName":"土库曼斯坦马纳特 (1993–2009)","displayName-count-other":"土库曼斯坦马纳特 (1993–2009)","symbol":"TMM"},"TMT":{"displayName":"土库曼斯坦马纳特","displayName-count-other":"土库曼斯坦马纳特","symbol":"TMT"},"TND":{"displayName":"突尼斯第纳尔","displayName-count-other":"突尼斯第纳尔","symbol":"TND"},"TOP":{"displayName":"汤加潘加","displayName-count-other":"汤加潘加","symbol":"TOP","symbol-alt-narrow":"T$"},"TPE":{"displayName":"帝汶埃斯库多","symbol":"TPE"},"TRL":{"displayName":"土耳其里拉 (1922–2005)","displayName-count-other":"土耳其里拉 (1922–2005)","symbol":"TRL"},"TRY":{"displayName":"土耳其里拉","displayName-count-other":"土耳其里拉","symbol":"TRY","symbol-alt-narrow":"₺","symbol-alt-variant":"TL"},"TTD":{"displayName":"特立尼达和多巴哥元","displayName-count-other":"特立尼达和多巴哥元","symbol":"TTD","symbol-alt-narrow":"$"},"TWD":{"displayName":"新台币","displayName-count-other":"新台币","symbol":"NT$","symbol-alt-narrow":"NT$"},"TZS":{"displayName":"坦桑尼亚先令","displayName-count-other":"坦桑尼亚先令","symbol":"TZS"},"UAH":{"displayName":"乌克兰格里夫纳","displayName-count-other":"乌克兰格里夫纳","symbol":"UAH","symbol-alt-narrow":"₴"},"UAK":{"displayName":"乌克兰币","displayName-count-other":"乌克兰币","symbol":"UAK"},"UGS":{"displayName":"乌干达先令 (1966–1987)","displayName-count-other":"乌干达先令 (1966–1987)","symbol":"UGS"},"UGX":{"displayName":"乌干达先令","displayName-count-other":"乌干达先令","symbol":"UGX"},"USD":{"displayName":"美元","displayName-count-other":"美元","symbol":"US$","symbol-alt-narrow":"$"},"USN":{"displayName":"美元(次日)","displayName-count-other":"美元(次日)","symbol":"USN"},"USS":{"displayName":"美元(当日)","displayName-count-other":"美元(当日)","symbol":"USS"},"UYI":{"displayName":"乌拉圭比索(索引单位)","displayName-count-other":"乌拉圭比索(索引单位)","symbol":"UYI"},"UYP":{"displayName":"乌拉圭比索 (1975–1993)","displayName-count-other":"乌拉圭比索 (1975–1993)","symbol":"UYP"},"UYU":{"displayName":"乌拉圭比索","displayName-count-other":"乌拉圭比索","symbol":"UYU","symbol-alt-narrow":"$"},"UZS":{"displayName":"乌兹别克斯坦苏姆","displayName-count-other":"乌兹别克斯坦苏姆","symbol":"UZS"},"VEB":{"displayName":"委内瑞拉玻利瓦尔 (1871–2008)","displayName-count-other":"委内瑞拉玻利瓦尔 (1871–2008)","symbol":"VEB"},"VEF":{"displayName":"委内瑞拉玻利瓦尔","displayName-count-other":"委内瑞拉玻利瓦尔","symbol":"VEF","symbol-alt-narrow":"Bs"},"VND":{"displayName":"越南盾","displayName-count-other":"越南盾","symbol":"₫","symbol-alt-narrow":"₫"},"VNN":{"displayName":"越南盾 (1978–1985)","symbol":"VNN"},"VUV":{"displayName":"瓦努阿图瓦图","displayName-count-other":"瓦努阿图瓦图","symbol":"VUV"},"WST":{"displayName":"萨摩亚塔拉","displayName-count-other":"萨摩亚塔拉","symbol":"WST"},"XAF":{"displayName":"中非法郎","displayName-count-other":"中非法郎","symbol":"FCFA"},"XAG":{"displayName":"银","symbol":"XAG"},"XAU":{"displayName":"黄金","symbol":"XAU"},"XBA":{"displayName":"欧洲复合单位","symbol":"XBA"},"XBB":{"displayName":"欧洲货币联盟","symbol":"XBB"},"XBC":{"displayName":"欧洲计算单位 (XBC)","symbol":"XBC"},"XBD":{"displayName":"欧洲计算单位 (XBD)","symbol":"XBD"},"XCD":{"displayName":"东加勒比元","displayName-count-other":"东加勒比元","symbol":"EC$","symbol-alt-narrow":"$"},"XDR":{"displayName":"特别提款权","symbol":"XDR"},"XEU":{"displayName":"欧洲货币单位","displayName-count-other":"欧洲货币单位","symbol":"XEU"},"XFO":{"displayName":"法国金法郎","symbol":"XFO"},"XFU":{"displayName":"法国法郎 (UIC)","symbol":"XFU"},"XOF":{"displayName":"西非法郎","displayName-count-other":"西非法郎","symbol":"CFA"},"XPD":{"displayName":"钯","symbol":"XPD"},"XPF":{"displayName":"太平洋法郎","displayName-count-other":"太平洋法郎","symbol":"CFPF"},"XPT":{"displayName":"铂","symbol":"XPT"},"XRE":{"displayName":"RINET 基金","symbol":"XRE"},"XSU":{"displayName":"XSU","symbol":"XSU"},"XTS":{"displayName":"测试货币代码","symbol":"XTS"},"XUA":{"displayName":"XUA","symbol":"XUA"},"XXX":{"displayName":"未知货币","displayName-count-other":"(未知货币)","symbol":"XXX"},"YDD":{"displayName":"也门第纳尔","displayName-count-other":"也门第纳尔","symbol":"YDD"},"YER":{"displayName":"也门里亚尔","displayName-count-other":"也门里亚尔","symbol":"YER"},"YUD":{"displayName":"南斯拉夫硬第纳尔 (1966–1990)","displayName-count-other":"南斯拉夫硬第纳尔 (1966–1990)","symbol":"YUD"},"YUM":{"displayName":"南斯拉夫新第纳尔 (1994–2002)","displayName-count-other":"南斯拉夫新第纳尔 (1994–2002)","symbol":"YUM"},"YUN":{"displayName":"南斯拉夫可兑换第纳尔 (1990–1992)","displayName-count-other":"南斯拉夫可兑换第纳尔 (1990–1992)","symbol":"YUN"},"YUR":{"displayName":"南斯拉夫改良第纳尔 (1992–1993)","displayName-count-other":"南斯拉夫改良第纳尔 (1992–1993)","symbol":"YUR"},"ZAL":{"displayName":"南非兰特 (金融)","displayName-count-other":"南非兰特 (金融)","symbol":"ZAL"},"ZAR":{"displayName":"南非兰特","displayName-count-other":"南非兰特","symbol":"ZAR","symbol-alt-narrow":"R"},"ZMK":{"displayName":"赞比亚克瓦查 (1968–2012)","displayName-count-other":"赞比亚克瓦查 (1968–2012)","symbol":"ZMK"},"ZMW":{"displayName":"赞比亚克瓦查","displayName-count-other":"赞比亚克瓦查","symbol":"ZMW","symbol-alt-narrow":"ZK"},"ZRN":{"displayName":"新扎伊尔 (1993–1998)","displayName-count-other":"新扎伊尔 (1993–1998)","symbol":"ZRN"},"ZRZ":{"displayName":"扎伊尔 (1971–1993)","displayName-count-other":"扎伊尔 (1971–1993)","symbol":"ZRZ"},"ZWD":{"displayName":"津巴布韦元 (1980–2008)","displayName-count-other":"津巴布韦元 (1980–2008)","symbol":"ZWD"},"ZWL":{"displayName":"津巴布韦元 (2009)","displayName-count-other":"津巴布韦元 (2009)","symbol":"ZWL"},"ZWR":{"displayName":"津巴布韦元 (2008)","displayName-count-other":"津巴布韦元 (2008)","symbol":"ZWR"}},"defaultNumberingSystem":"latn","otherNumberingSystems":{"native":"hanidec","traditional":"hans","finance":"hansfin"},"minimumGroupingDigits":"1","symbols-numberSystem-hanidec":{"decimal":".","group":",","list":";","percentSign":"%","plusSign":"+","minusSign":"-","exponential":"E","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"NaN","timeSeparator":":"},"symbols-numberSystem-latn":{"decimal":".","group":",","list":";","percentSign":"%","plusSign":"+","minusSign":"-","exponential":"E","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"NaN","timeSeparator":":"},"decimalFormats-numberSystem-hanidec":{"standard":"#,##0.###","long":{"decimalFormat":{"1000-count-other":"0","10000-count-other":"0万","100000-count-other":"00万","1000000-count-other":"000万","10000000-count-other":"0000万","100000000-count-other":"0亿","1000000000-count-other":"00亿","10000000000-count-other":"000亿","100000000000-count-other":"0000亿","1000000000000-count-other":"0兆","10000000000000-count-other":"00兆","100000000000000-count-other":"000兆"}},"short":{"decimalFormat":{"1000-count-other":"0","10000-count-other":"0万","100000-count-other":"00万","1000000-count-other":"000万","10000000-count-other":"0000万","100000000-count-other":"0亿","1000000000-count-other":"00亿","10000000000-count-other":"000亿","100000000000-count-other":"0000亿","1000000000000-count-other":"0兆","10000000000000-count-other":"00兆","100000000000000-count-other":"000兆"}}},"decimalFormats-numberSystem-latn":{"standard":"#,##0.###","long":{"decimalFormat":{"1000-count-other":"0","10000-count-other":"0万","100000-count-other":"00万","1000000-count-other":"000万","10000000-count-other":"0000万","100000000-count-other":"0亿","1000000000-count-other":"00亿","10000000000-count-other":"000亿","100000000000-count-other":"0000亿","1000000000000-count-other":"0兆","10000000000000-count-other":"00兆","100000000000000-count-other":"000兆"}},"short":{"decimalFormat":{"1000-count-other":"0","10000-count-other":"0万","100000-count-other":"00万","1000000-count-other":"000万","10000000-count-other":"0000万","100000000-count-other":"0亿","1000000000-count-other":"00亿","10000000000-count-other":"000亿","100000000000-count-other":"0000亿","1000000000000-count-other":"0兆","10000000000000-count-other":"00兆","100000000000000-count-other":"000兆"}}},"scientificFormats-numberSystem-hanidec":{"standard":"#E0"},"scientificFormats-numberSystem-latn":{"standard":"#E0"},"percentFormats-numberSystem-hanidec":{"standard":"#,##0%"},"percentFormats-numberSystem-latn":{"standard":"#,##0%"},"currencyFormats-numberSystem-hanidec":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"¤#,##0.00","accounting":"¤#,##0.00;(¤#,##0.00)","short":{"standard":{"1000-count-other":"0","10000-count-other":"¤0万","100000-count-other":"¤00万","1000000-count-other":"¤000万","10000000-count-other":"¤0000万","100000000-count-other":"¤0亿","1000000000-count-other":"¤00亿","10000000000-count-other":"¤000亿","100000000000-count-other":"¤0000亿","1000000000000-count-other":"¤0兆","10000000000000-count-other":"¤00兆","100000000000000-count-other":"¤000兆"}},"unitPattern-count-other":"{0}{1}"},"currencyFormats-numberSystem-latn":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"¤#,##0.00","accounting":"¤#,##0.00;(¤#,##0.00)","short":{"standard":{"1000-count-other":"0","10000-count-other":"¤0万","100000-count-other":"¤00万","1000000-count-other":"¤000万","10000000-count-other":"¤0000万","100000000-count-other":"¤0亿","1000000000-count-other":"¤00亿","10000000000-count-other":"¤000亿","100000000000-count-other":"¤0000亿","1000000000000-count-other":"¤0兆","10000000000000-count-other":"¤00兆","100000000000000-count-other":"¤000兆"}},"unitPattern-count-other":"{0}{1}"},"miscPatterns-numberSystem-hanidec":{"atLeast":"{0}+","range":"{0}-{1}"},"miscPatterns-numberSystem-latn":{"atLeast":"{0}+","range":"{0}-{1}"},"minimalPairs":{"pluralMinimalPairs-count-other":"{0} 天","other":"在第 {0} 个路口右转。"}}},"zh-Hant":{"identity":{"version":{"_number":"$Revision: 13705 $","_cldrVersion":"32"},"language":"zh","script":"Hant"},"dates":{"calendars":{"gregorian":{"months":{"format":{"abbreviated":{"1":"1月","2":"2月","3":"3月","4":"4月","5":"5月","6":"6月","7":"7月","8":"8月","9":"9月","10":"10月","11":"11月","12":"12月"},"narrow":{"1":"1","2":"2","3":"3","4":"4","5":"5","6":"6","7":"7","8":"8","9":"9","10":"10","11":"11","12":"12"},"wide":{"1":"1月","2":"2月","3":"3月","4":"4月","5":"5月","6":"6月","7":"7月","8":"8月","9":"9月","10":"10月","11":"11月","12":"12月"}},"stand-alone":{"abbreviated":{"1":"1月","2":"2月","3":"3月","4":"4月","5":"5月","6":"6月","7":"7月","8":"8月","9":"9月","10":"10月","11":"11月","12":"12月"},"narrow":{"1":"1","2":"2","3":"3","4":"4","5":"5","6":"6","7":"7","8":"8","9":"9","10":"10","11":"11","12":"12"},"wide":{"1":"1月","2":"2月","3":"3月","4":"4月","5":"5月","6":"6月","7":"7月","8":"8月","9":"9月","10":"10月","11":"11月","12":"12月"}}},"days":{"format":{"abbreviated":{"sun":"週日","mon":"週一","tue":"週二","wed":"週三","thu":"週四","fri":"週五","sat":"週六"},"narrow":{"sun":"日","mon":"一","tue":"二","wed":"三","thu":"四","fri":"五","sat":"六"},"short":{"sun":"日","mon":"一","tue":"二","wed":"三","thu":"四","fri":"五","sat":"六"},"wide":{"sun":"星期日","mon":"星期一","tue":"星期二","wed":"星期三","thu":"星期四","fri":"星期五","sat":"星期六"}},"stand-alone":{"abbreviated":{"sun":"週日","mon":"週一","tue":"週二","wed":"週三","thu":"週四","fri":"週五","sat":"週六"},"narrow":{"sun":"日","mon":"一","tue":"二","wed":"三","thu":"四","fri":"五","sat":"六"},"short":{"sun":"日","mon":"一","tue":"二","wed":"三","thu":"四","fri":"五","sat":"六"},"wide":{"sun":"星期日","mon":"星期一","tue":"星期二","wed":"星期三","thu":"星期四","fri":"星期五","sat":"星期六"}}},"quarters":{"format":{"abbreviated":{"1":"第1季","2":"第2季","3":"第3季","4":"第4季"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"第1季","2":"第2季","3":"第3季","4":"第4季"}},"stand-alone":{"abbreviated":{"1":"第1季","2":"第2季","3":"第3季","4":"第4季"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"第1季","2":"第2季","3":"第3季","4":"第4季"}}},"dayPeriods":{"format":{"abbreviated":{"midnight":"午夜","am":"上午","pm":"下午","morning1":"清晨","morning2":"上午","afternoon1":"中午","afternoon2":"下午","evening1":"晚上","night1":"凌晨"},"narrow":{"midnight":"午夜","am":"上午","pm":"下午","morning1":"清晨","morning2":"上午","afternoon1":"中午","afternoon2":"下午","evening1":"晚上","night1":"凌晨"},"wide":{"midnight":"午夜","am":"上午","pm":"下午","morning1":"清晨","morning2":"上午","afternoon1":"中午","afternoon2":"下午","evening1":"晚上","night1":"凌晨"}},"stand-alone":{"abbreviated":{"midnight":"午夜","am":"上午","pm":"下午","morning1":"清晨","morning2":"上午","afternoon1":"中午","afternoon2":"下午","evening1":"晚上","night1":"凌晨"},"narrow":{"midnight":"午夜","am":"上午","pm":"下午","morning1":"清晨","morning2":"上午","afternoon1":"中午","afternoon2":"下午","evening1":"晚上","night1":"凌晨"},"wide":{"midnight":"午夜","am":"上午","pm":"下午","morning1":"清晨","morning2":"上午","afternoon1":"中午","afternoon2":"下午","evening1":"晚上","night1":"凌晨"}}},"eras":{"eraNames":{"0":"西元前","1":"西元","0-alt-variant":"公元前","1-alt-variant":"公元"},"eraAbbr":{"0":"西元前","1":"西元","0-alt-variant":"公元前","1-alt-variant":"公元"},"eraNarrow":{"0":"西元前","1":"西元","0-alt-variant":"公元前","1-alt-variant":"公元"}},"dateFormats":{"full":"y年M月d日 EEEE","long":"y年M月d日","medium":"y年M月d日","short":"y/M/d"},"timeFormats":{"full":"ah:mm:ss [zzzz]","long":"ah:mm:ss [z]","medium":"ah:mm:ss","short":"ah:mm"},"dateTimeFormats":{"full":"{1} {0}","long":"{1} {0}","medium":"{1} {0}","short":"{1} {0}","availableFormats":{"Bh":"Bh時","Bhm":"Bh:mm","Bhms":"Bh:mm:ss","d":"d日","E":"ccc","EBhm":"E Bh:mm","EBhms":"E Bh:mm:ss","Ed":"d E","Ehm":"E ah:mm","EHm":"E HH:mm","Ehms":"E ah:mm:ss","EHms":"E HH:mm:ss","Gy":"Gy年","GyMMM":"Gy年M月","GyMMMd":"Gy年M月d日","GyMMMEd":"Gy年M月d日 E","h":"ah時","H":"H時","hm":"ah:mm","Hm":"HH:mm","hms":"ah:mm:ss","Hms":"HH:mm:ss","hmsv":"ah:mm:ss [v]","Hmsv":"HH:mm:ss [v]","hmv":"ah:mm [v]","Hmv":"HH:mm [v]","M":"M月","Md":"M/d","MEd":"M/d(E)","MMdd":"MM/dd","MMM":"LLL","MMMd":"M月d日","MMMEd":"M月d日 E","MMMMd":"M月d日","MMMMW-count-other":"MMM的第W週","ms":"mm:ss","y":"y年","yM":"y/M","yMd":"y/M/d","yMEd":"y/M/d(E)","yMM":"y/MM","yMMM":"y年M月","yMMMd":"y年M月d日","yMMMEd":"y年M月d日 E","yMMMM":"y年M月","yQQQ":"y年QQQ","yQQQQ":"y年QQQQ","yw-count-other":"Y年的第w週"},"appendItems":{"Day":"{0} ({2}: {1})","Day-Of-Week":"{0} {1}","Era":"{1} {0}","Hour":"{0} ({2}: {1})","Minute":"{0} ({2}: {1})","Month":"{0} ({2}: {1})","Quarter":"{0} ({2}: {1})","Second":"{0} ({2}: {1})","Timezone":"{0} {1}","Week":"{0} ({2}: {1})","Year":"{1} {0}"},"intervalFormats":{"intervalFormatFallback":"{0} – {1}","d":{"d":"d日至d日"},"h":{"a":"ah時至ah時","h":"ah時至h時"},"H":{"H":"HH – HH"},"hm":{"a":"ah:mm至ah:mm","h":"ah:mm至h:mm","m":"ah:mm至h:mm"},"Hm":{"H":"HH:mm – HH:mm","m":"HH:mm – HH:mm"},"hmv":{"a":"ah:mm至ah:mm [v]","h":"ah:mm至h:mm [v]","m":"ah:mm至h:mm [v]"},"Hmv":{"H":"HH:mm – HH:mm [v]","m":"HH:mm – HH:mm [v]"},"hv":{"a":"ah時至ah時 [v]","h":"ah時至h時 [v]"},"Hv":{"H":"HH – HH [v]"},"M":{"M":"M月至M月"},"Md":{"d":"M/d至M/d","M":"M/d至M/d"},"MEd":{"d":"M/dE至M/dE","M":"M/dE至M/dE"},"MMM":{"M":"LLL至LLL"},"MMMd":{"d":"M月d日至d日","M":"M月d日至M月d日"},"MMMEd":{"d":"M月d日E至d日E","M":"M月d日E至M月d日E"},"MMMM":{"M":"LLLL至LLLL"},"y":{"y":"y至y"},"yM":{"M":"y/M至y/M","y":"y/M至y/M"},"yMd":{"d":"y/M/d至y/M/d","M":"y/M/d至y/M/d","y":"y/M/d至y/M/d"},"yMEd":{"d":"y/M/dE至y/M/dE","M":"y/M/dE至y/M/dE","y":"y/M/dE至y/M/dE"},"yMMM":{"M":"y年M月至M月","y":"y年M月至y年M月"},"yMMMd":{"d":"y年M月d日至d日","M":"y年M月d日至M月d日","y":"y年M月d日至y年M月d日"},"yMMMEd":{"d":"y年M月d日E至M月d日E","M":"y年M月d日E至M月d日E","y":"y年M月d日E至y年M月d日E"},"yMMMM":{"M":"y年M月至M月","y":"y年M月至y年M月"}}}}},"fields":{"era":{"displayName":"年代"},"era-short":{"displayName":"年代"},"era-narrow":{"displayName":"年代"},"year":{"displayName":"年","relative-type--1":"去年","relative-type-0":"今年","relative-type-1":"明年","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 年後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 年前"}},"year-short":{"displayName":"年","relative-type--1":"去年","relative-type-0":"今年","relative-type-1":"明年","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 年後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 年前"}},"year-narrow":{"displayName":"年","relative-type--1":"去年","relative-type-0":"今年","relative-type-1":"明年","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 年後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 年前"}},"quarter":{"displayName":"季","relative-type--1":"上一季","relative-type-0":"這一季","relative-type-1":"下一季","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 季後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 季前"}},"quarter-short":{"displayName":"季","relative-type--1":"上一季","relative-type-0":"這一季","relative-type-1":"下一季","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 季後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 季前"}},"quarter-narrow":{"displayName":"季","relative-type--1":"上一季","relative-type-0":"這一季","relative-type-1":"下一季","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 季後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 季前"}},"month":{"displayName":"月","relative-type--1":"上個月","relative-type-0":"本月","relative-type-1":"下個月","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個月後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個月前"}},"month-short":{"displayName":"月","relative-type--1":"上個月","relative-type-0":"本月","relative-type-1":"下個月","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個月後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個月前"}},"month-narrow":{"displayName":"月","relative-type--1":"上個月","relative-type-0":"本月","relative-type-1":"下個月","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個月後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個月前"}},"week":{"displayName":"週","relative-type--1":"上週","relative-type-0":"本週","relative-type-1":"下週","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 週後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 週前"},"relativePeriod":"{0} 當週"},"week-short":{"displayName":"週","relative-type--1":"上週","relative-type-0":"本週","relative-type-1":"下週","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 週後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 週前"},"relativePeriod":"{0} 當週"},"week-narrow":{"displayName":"週","relative-type--1":"上週","relative-type-0":"本週","relative-type-1":"下週","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 週後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 週前"},"relativePeriod":"{0} 當週"},"weekOfMonth":{"displayName":"週"},"weekOfMonth-short":{"displayName":"週"},"weekOfMonth-narrow":{"displayName":"週"},"day":{"displayName":"日","relative-type--2":"前天","relative-type--1":"昨天","relative-type-0":"今天","relative-type-1":"明天","relative-type-2":"後天","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 天後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 天前"}},"day-short":{"displayName":"日","relative-type--2":"前天","relative-type--1":"昨天","relative-type-0":"今天","relative-type-1":"明天","relative-type-2":"後天","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 天後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 天前"}},"day-narrow":{"displayName":"日","relative-type--2":"前天","relative-type--1":"昨天","relative-type-0":"今天","relative-type-1":"明天","relative-type-2":"後天","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 天後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 天前"}},"dayOfYear":{"displayName":"年天"},"dayOfYear-short":{"displayName":"年天"},"dayOfYear-narrow":{"displayName":"年天"},"weekday":{"displayName":"週天"},"weekday-short":{"displayName":"週天"},"weekday-narrow":{"displayName":"週天"},"weekdayOfMonth":{"displayName":"每月平日"},"weekdayOfMonth-short":{"displayName":"每月平日"},"weekdayOfMonth-narrow":{"displayName":"每月平日"},"sun":{"relative-type--1":"上週日","relative-type-0":"本週日","relative-type-1":"下週日","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個週日後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個週日前"}},"sun-short":{"relative-type--1":"上週日","relative-type-0":"本週日","relative-type-1":"下週日","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個週日後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個週日前"}},"sun-narrow":{"relative-type--1":"上週日","relative-type-0":"本週日","relative-type-1":"下週日","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個週日後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個週日前"}},"mon":{"relative-type--1":"上週一","relative-type-0":"本週一","relative-type-1":"下週一","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個週一後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個週一前"}},"mon-short":{"relative-type--1":"上週一","relative-type-0":"本週一","relative-type-1":"下週一","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個週一後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個週一前"}},"mon-narrow":{"relative-type--1":"上週一","relative-type-0":"本週一","relative-type-1":"下週一","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個週一後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個週一前"}},"tue":{"relative-type--1":"上週二","relative-type-0":"本週二","relative-type-1":"下週二","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個週二後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個週二前"}},"tue-short":{"relative-type--1":"上週二","relative-type-0":"本週二","relative-type-1":"下週二","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個週二後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個週二前"}},"tue-narrow":{"relative-type--1":"上週二","relative-type-0":"本週二","relative-type-1":"下週二","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個週二後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個週二前"}},"wed":{"relative-type--1":"上週三","relative-type-0":"本週三","relative-type-1":"下週三","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個週三後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個週三前"}},"wed-short":{"relative-type--1":"上週三","relative-type-0":"本週三","relative-type-1":"下週三","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個週三後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個週三前"}},"wed-narrow":{"relative-type--1":"上週三","relative-type-0":"本週三","relative-type-1":"下週三","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個週三後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個週三前"}},"thu":{"relative-type--1":"上週四","relative-type-0":"本週四","relative-type-1":"下週四","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個週四後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個週四前"}},"thu-short":{"relative-type--1":"上週四","relative-type-0":"本週四","relative-type-1":"下週四","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個週四後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個週四前"}},"thu-narrow":{"relative-type--1":"上週四","relative-type-0":"本週四","relative-type-1":"下週四","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個週四後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個週四前"}},"fri":{"relative-type--1":"上週五","relative-type-0":"本週五","relative-type-1":"下週五","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個週五後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個週五前"}},"fri-short":{"relative-type--1":"上週五","relative-type-0":"本週五","relative-type-1":"下週五","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個週五後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個週五前"}},"fri-narrow":{"relative-type--1":"上週五","relative-type-0":"本週五","relative-type-1":"下週五","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個週五後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個週五前"}},"sat":{"relative-type--1":"上週六","relative-type-0":"本週六","relative-type-1":"下週六","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個週六後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個週六前"}},"sat-short":{"relative-type--1":"上週六","relative-type-0":"本週六","relative-type-1":"下週六","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個週六後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個週六前"}},"sat-narrow":{"relative-type--1":"上週六","relative-type-0":"本週六","relative-type-1":"下週六","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 個週六後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 個週六前"}},"dayperiod-short":{"displayName":"上午/下午"},"dayperiod":{"displayName":"上午/下午"},"dayperiod-narrow":{"displayName":"上午/下午"},"hour":{"displayName":"小時","relative-type-0":"這一小時","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 小時後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 小時前"}},"hour-short":{"displayName":"小時","relative-type-0":"這一小時","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 小時後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 小時前"}},"hour-narrow":{"displayName":"小時","relative-type-0":"這一小時","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 小時後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 小時前"}},"minute":{"displayName":"分鐘","relative-type-0":"這一分鐘","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 分鐘後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 分鐘前"}},"minute-short":{"displayName":"分鐘","relative-type-0":"這一分鐘","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 分鐘後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 分鐘前"}},"minute-narrow":{"displayName":"分鐘","relative-type-0":"這一分鐘","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 分鐘後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 分鐘前"}},"second":{"displayName":"秒","relative-type-0":"現在","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 秒後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 秒前"}},"second-short":{"displayName":"秒","relative-type-0":"現在","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 秒後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 秒前"}},"second-narrow":{"displayName":"秒","relative-type-0":"現在","relativeTime-type-future":{"relativeTimePattern-count-other":"{0} 秒後"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} 秒前"}},"zone":{"displayName":"時區"},"zone-short":{"displayName":"時區"},"zone-narrow":{"displayName":"時區"}}},"numbers":{"currencies":{"ADP":{"displayName":"安道爾陪士特","displayName-count-other":"安道爾陪士特","symbol":"ADP"},"AED":{"displayName":"阿拉伯聯合大公國迪爾汗","displayName-count-other":"阿拉伯聯合大公國迪爾汗","symbol":"AED"},"AFA":{"displayName":"阿富汗尼 (1927–2002)","displayName-count-other":"阿富汗尼 (1927–2002)","symbol":"AFA"},"AFN":{"displayName":"阿富汗尼","displayName-count-other":"阿富汗尼","symbol":"AFN"},"ALK":{"displayName":"阿爾巴尼亞列克 (1946–1965)","displayName-count-other":"阿爾巴尼亞列克 (1946–1965)","symbol":"ALK"},"ALL":{"displayName":"阿爾巴尼亞列克","displayName-count-other":"阿爾巴尼亞列克","symbol":"ALL"},"AMD":{"displayName":"亞美尼亞德拉姆","displayName-count-other":"亞美尼亞德拉姆","symbol":"AMD"},"ANG":{"displayName":"荷屬安地列斯盾","displayName-count-other":"荷屬安地列斯盾","symbol":"ANG"},"AOA":{"displayName":"安哥拉寬扎","displayName-count-other":"安哥拉寬扎","symbol":"AOA","symbol-alt-narrow":"Kz"},"AOK":{"displayName":"安哥拉寬扎 (1977–1990)","displayName-count-other":"安哥拉寬扎 (1977–1990)","symbol":"AOK"},"AON":{"displayName":"安哥拉新寬扎 (1990–2000)","displayName-count-other":"安哥拉新寬扎 (1990–2000)","symbol":"AON"},"AOR":{"displayName":"安哥拉新調寬扎 (1995–1999)","displayName-count-other":"安哥拉新調寬扎 (1995–1999)","symbol":"AOR"},"ARA":{"displayName":"阿根廷奧斯特納爾","displayName-count-other":"阿根廷奧斯特納爾","symbol":"ARA"},"ARL":{"displayName":"阿根廷披索 (1970–1983)","displayName-count-other":"阿根廷披索 (1970–1983)","symbol":"ARL"},"ARM":{"displayName":"阿根廷披索 (1881–1970)","displayName-count-other":"阿根廷披索 (1881–1970)","symbol":"ARM"},"ARP":{"displayName":"阿根廷披索 (1983–1985)","displayName-count-other":"阿根廷披索 (1983–1985)","symbol":"ARP"},"ARS":{"displayName":"阿根廷披索","displayName-count-other":"阿根廷披索","symbol":"ARS","symbol-alt-narrow":"$"},"ATS":{"displayName":"奧地利先令","displayName-count-other":"奧地利先令","symbol":"ATS"},"AUD":{"displayName":"澳幣","displayName-count-other":"澳幣","symbol":"AU$","symbol-alt-narrow":"$"},"AWG":{"displayName":"阿路巴盾","displayName-count-other":"阿路巴盾","symbol":"AWG"},"AZM":{"displayName":"亞塞拜然馬納特 (1993–2006)","displayName-count-other":"亞塞拜然馬納特 (1993–2006)","symbol":"AZM"},"AZN":{"displayName":"亞塞拜然馬納特","displayName-count-other":"亞塞拜然馬納特","symbol":"AZN"},"BAD":{"displayName":"波士尼亞-赫塞哥維納第納爾","displayName-count-other":"波士尼亞-赫塞哥維納第納爾","symbol":"BAD"},"BAM":{"displayName":"波士尼亞-赫塞哥維納可轉換馬克","displayName-count-other":"波士尼亞-赫塞哥維納可轉換馬克","symbol":"BAM","symbol-alt-narrow":"KM"},"BAN":{"displayName":"波士尼亞-赫塞哥維納新第納爾","displayName-count-other":"波士尼亞-赫塞哥維納新第納爾","symbol":"BAN"},"BBD":{"displayName":"巴貝多元","displayName-count-other":"巴貝多元","symbol":"BBD","symbol-alt-narrow":"$"},"BDT":{"displayName":"孟加拉塔卡","displayName-count-other":"孟加拉塔卡","symbol":"BDT","symbol-alt-narrow":"৳"},"BEC":{"displayName":"比利時法郎(可轉換)","displayName-count-other":"比利時法郎(可轉換)","symbol":"BEC"},"BEF":{"displayName":"比利時法郎","displayName-count-other":"比利時法郎","symbol":"BEF"},"BEL":{"displayName":"比利時法郎(金融)","displayName-count-other":"比利時法郎(金融)","symbol":"BEL"},"BGL":{"displayName":"保加利亞硬列弗","displayName-count-other":"保加利亞硬列弗","symbol":"BGL"},"BGM":{"displayName":"保加利亞社會黨列弗","displayName-count-other":"保加利亞社會黨列弗","symbol":"BGM"},"BGN":{"displayName":"保加利亞新列弗","displayName-count-other":"保加利亞新列弗","symbol":"BGN"},"BGO":{"displayName":"保加利亞列弗 (1879–1952)","displayName-count-other":"保加利亞列弗 (1879–1952)","symbol":"BGO"},"BHD":{"displayName":"巴林第納爾","displayName-count-other":"巴林第納爾","symbol":"BHD"},"BIF":{"displayName":"蒲隆地法郎","displayName-count-other":"蒲隆地法郎","symbol":"BIF"},"BMD":{"displayName":"百慕達幣","displayName-count-other":"百慕達幣","symbol":"BMD","symbol-alt-narrow":"$"},"BND":{"displayName":"汶萊元","displayName-count-other":"汶萊元","symbol":"BND","symbol-alt-narrow":"$"},"BOB":{"displayName":"玻利維亞諾","displayName-count-other":"玻利維亞諾","symbol":"BOB","symbol-alt-narrow":"Bs"},"BOL":{"displayName":"玻利維亞玻利維亞諾 (1863–1963)","displayName-count-other":"玻利維亞玻利維亞諾 (1863–1963)","symbol":"BOL"},"BOP":{"displayName":"玻利維亞披索","displayName-count-other":"玻利維亞披索","symbol":"BOP"},"BOV":{"displayName":"玻利維亞幕多","displayName-count-other":"玻利維亞幕多","symbol":"BOV"},"BRB":{"displayName":"巴西克魯薩多農瓦 (1967–1986)","displayName-count-other":"巴西克魯薩多農瓦 (1967–1986)","symbol":"BRB"},"BRC":{"displayName":"巴西克魯賽羅 (1986–1989)","displayName-count-other":"巴西克魯賽羅 (1986–1989)","symbol":"BRC"},"BRE":{"displayName":"巴西克魯賽羅 (1990–1993)","displayName-count-other":"巴西克魯賽羅 (1990–1993)","symbol":"BRE"},"BRL":{"displayName":"巴西里拉","displayName-count-other":"巴西里拉","symbol":"R$","symbol-alt-narrow":"R$"},"BRN":{"displayName":"巴西克如爾達農瓦","displayName-count-other":"巴西克如爾達農瓦","symbol":"BRN"},"BRR":{"displayName":"巴西克魯賽羅 (1993–1994)","displayName-count-other":"巴西克魯賽羅 (1993–1994)","symbol":"BRR"},"BRZ":{"displayName":"巴西克魯賽羅 (1942 –1967)","displayName-count-other":"巴西克魯賽羅 (1942 –1967)","symbol":"BRZ"},"BSD":{"displayName":"巴哈馬元","displayName-count-other":"巴哈馬元","symbol":"BSD","symbol-alt-narrow":"$"},"BTN":{"displayName":"不丹那特倫","displayName-count-other":"不丹那特倫","symbol":"BTN"},"BUK":{"displayName":"緬甸基雅特","displayName-count-other":"緬甸基雅特","symbol":"BUK"},"BWP":{"displayName":"波札那普拉","displayName-count-other":"波札那普拉","symbol":"BWP","symbol-alt-narrow":"P"},"BYB":{"displayName":"白俄羅斯新盧布 (1994–1999)","displayName-count-other":"白俄羅斯新盧布 (1994–1999)","symbol":"BYB"},"BYN":{"displayName":"白俄羅斯盧布","displayName-count-other":"白俄羅斯盧布","symbol":"BYN","symbol-alt-narrow":"р."},"BYR":{"displayName":"白俄羅斯盧布 (2000–2016)","displayName-count-other":"白俄羅斯盧布 (2000–2016)","symbol":"BYR"},"BZD":{"displayName":"貝里斯元","displayName-count-other":"貝里斯元","symbol":"BZD","symbol-alt-narrow":"$"},"CAD":{"displayName":"加幣","displayName-count-other":"加幣","symbol":"CA$","symbol-alt-narrow":"$"},"CDF":{"displayName":"剛果法郎","displayName-count-other":"剛果法郎","symbol":"CDF"},"CHE":{"displayName":"歐元 (WIR)","displayName-count-other":"歐元 (WIR)","symbol":"CHE"},"CHF":{"displayName":"瑞士法郎","displayName-count-other":"瑞士法郎","symbol":"CHF"},"CHW":{"displayName":"法郎 (WIR)","displayName-count-other":"法郎 (WIR)","symbol":"CHW"},"CLE":{"displayName":"智利埃斯庫多","displayName-count-other":"智利埃斯庫多","symbol":"CLE"},"CLF":{"displayName":"卡林油達佛曼跎","displayName-count-other":"卡林油達佛曼跎","symbol":"CLF"},"CLP":{"displayName":"智利披索","displayName-count-other":"智利披索","symbol":"CLP","symbol-alt-narrow":"$"},"CNH":{"displayName":"人民幣(離岸)","symbol":"CNH"},"CNX":{"displayName":"CNX","symbol":"CNX"},"CNY":{"displayName":"人民幣","displayName-count-other":"人民幣","symbol":"CN¥","symbol-alt-narrow":"¥"},"COP":{"displayName":"哥倫比亞披索","displayName-count-other":"哥倫比亞披索","symbol":"COP","symbol-alt-narrow":"$"},"COU":{"displayName":"哥倫比亞幣 (COU)","displayName-count-other":"哥倫比亞幣 (COU)","symbol":"COU"},"CRC":{"displayName":"哥斯大黎加科朗","displayName-count-other":"哥斯大黎加科朗","symbol":"CRC","symbol-alt-narrow":"₡"},"CSD":{"displayName":"舊塞爾維亞第納爾","displayName-count-other":"舊塞爾維亞第納爾","symbol":"CSD"},"CSK":{"displayName":"捷克斯洛伐克硬克朗","displayName-count-other":"捷克斯洛伐克硬克朗","symbol":"CSK"},"CUC":{"displayName":"古巴可轉換披索","displayName-count-other":"古巴可轉換披索","symbol":"CUC","symbol-alt-narrow":"$"},"CUP":{"displayName":"古巴披索","displayName-count-other":"古巴披索","symbol":"CUP","symbol-alt-narrow":"$"},"CVE":{"displayName":"維德角埃斯庫多","displayName-count-other":"維德角埃斯庫多","symbol":"CVE"},"CYP":{"displayName":"賽普勒斯鎊","displayName-count-other":"賽普勒斯鎊","symbol":"CYP"},"CZK":{"displayName":"捷克克朗","displayName-count-other":"捷克克朗","symbol":"CZK","symbol-alt-narrow":"Kč"},"DDM":{"displayName":"東德奧斯特馬克","displayName-count-other":"東德奧斯特馬克","symbol":"DDM"},"DEM":{"displayName":"德國馬克","displayName-count-other":"德國馬克","symbol":"DEM"},"DJF":{"displayName":"吉布地法郎","displayName-count-other":"吉布地法郎","symbol":"DJF"},"DKK":{"displayName":"丹麥克朗","displayName-count-other":"丹麥克朗","symbol":"DKK","symbol-alt-narrow":"kr"},"DOP":{"displayName":"多明尼加披索","displayName-count-other":"多明尼加披索","symbol":"DOP","symbol-alt-narrow":"$"},"DZD":{"displayName":"阿爾及利亞第納爾","displayName-count-other":"阿爾及利亞第納爾","symbol":"DZD"},"ECS":{"displayName":"厄瓜多蘇克雷","displayName-count-other":"厄瓜多蘇克雷","symbol":"ECS"},"ECV":{"displayName":"厄瓜多爾由里達瓦康斯坦 (UVC)","displayName-count-other":"厄瓜多爾由里達瓦康斯坦 (UVC)","symbol":"ECV"},"EEK":{"displayName":"愛沙尼亞克朗","displayName-count-other":"愛沙尼亞克朗","symbol":"EEK"},"EGP":{"displayName":"埃及鎊","displayName-count-other":"埃及鎊","symbol":"EGP","symbol-alt-narrow":"E£"},"ERN":{"displayName":"厄立特里亞納克法","displayName-count-other":"厄立特里亞納克法","symbol":"ERN"},"ESA":{"displayName":"西班牙比塞塔(會計單位)","displayName-count-other":"西班牙比塞塔(會計單位)","symbol":"ESA"},"ESB":{"displayName":"西班牙比塞塔(可轉換會計單位)","displayName-count-other":"西班牙比塞塔(可轉換會計單位)","symbol":"ESB"},"ESP":{"displayName":"西班牙陪士特","displayName-count-other":"西班牙陪士特","symbol":"ESP","symbol-alt-narrow":"₧"},"ETB":{"displayName":"衣索比亞比爾","displayName-count-other":"衣索比亞比爾","symbol":"ETB"},"EUR":{"displayName":"歐元","displayName-count-other":"歐元","symbol":"€","symbol-alt-narrow":"€"},"FIM":{"displayName":"芬蘭馬克","displayName-count-other":"芬蘭馬克","symbol":"FIM"},"FJD":{"displayName":"斐濟元","displayName-count-other":"斐濟元","symbol":"FJD","symbol-alt-narrow":"$"},"FKP":{"displayName":"福克蘭群島鎊","displayName-count-other":"福克蘭群島鎊","symbol":"FKP","symbol-alt-narrow":"£"},"FRF":{"displayName":"法國法郎","displayName-count-other":"法國法郎","symbol":"FRF"},"GBP":{"displayName":"英鎊","displayName-count-other":"英鎊","symbol":"£","symbol-alt-narrow":"£"},"GEK":{"displayName":"喬治亞庫旁拉里","displayName-count-other":"喬治亞庫旁拉里","symbol":"GEK"},"GEL":{"displayName":"喬治亞拉里","displayName-count-other":"喬治亞拉里","symbol":"GEL","symbol-alt-narrow":"₾","symbol-alt-variant":"₾"},"GHC":{"displayName":"迦納賽地 (1979–2007)","displayName-count-other":"迦納賽地 (1979–2007)","symbol":"GHC"},"GHS":{"displayName":"迦納塞地","displayName-count-other":"迦納塞地","symbol":"GHS"},"GIP":{"displayName":"直布羅陀鎊","displayName-count-other":"直布羅陀鎊","symbol":"GIP","symbol-alt-narrow":"£"},"GMD":{"displayName":"甘比亞達拉西","displayName-count-other":"甘比亞達拉西","symbol":"GMD"},"GNF":{"displayName":"幾內亞法郎","displayName-count-other":"幾內亞法郎","symbol":"GNF","symbol-alt-narrow":"FG"},"GNS":{"displayName":"幾內亞西里","displayName-count-other":"幾內亞西里","symbol":"GNS"},"GQE":{"displayName":"赤道幾內亞埃奎勒","displayName-count-other":"赤道幾內亞埃奎勒","symbol":"GQE"},"GRD":{"displayName":"希臘德拉克馬","displayName-count-other":"希臘德拉克馬","symbol":"GRD"},"GTQ":{"displayName":"瓜地馬拉格查爾","displayName-count-other":"瓜地馬拉格查爾","symbol":"GTQ","symbol-alt-narrow":"Q"},"GWE":{"displayName":"葡屬幾內亞埃斯庫多","displayName-count-other":"葡屬幾內亞埃斯庫多","symbol":"GWE"},"GWP":{"displayName":"幾內亞比索披索","displayName-count-other":"幾內亞比索披索","symbol":"GWP"},"GYD":{"displayName":"圭亞那元","displayName-count-other":"圭亞那元","symbol":"GYD","symbol-alt-narrow":"$"},"HKD":{"displayName":"港幣","displayName-count-other":"港幣","symbol":"HK$","symbol-alt-narrow":"$"},"HNL":{"displayName":"洪都拉斯倫皮拉","displayName-count-other":"洪都拉斯倫皮拉","symbol":"HNL","symbol-alt-narrow":"L"},"HRD":{"displayName":"克羅埃西亞第納爾","displayName-count-other":"克羅埃西亞第納爾","symbol":"HRD"},"HRK":{"displayName":"克羅埃西亞庫納","displayName-count-other":"克羅埃西亞庫納","symbol":"HRK","symbol-alt-narrow":"kn"},"HTG":{"displayName":"海地古德","displayName-count-other":"海地古德","symbol":"HTG"},"HUF":{"displayName":"匈牙利福林","displayName-count-other":"匈牙利福林","symbol":"HUF","symbol-alt-narrow":"Ft"},"IDR":{"displayName":"印尼盾","displayName-count-other":"印尼盾","symbol":"IDR","symbol-alt-narrow":"Rp"},"IEP":{"displayName":"愛爾蘭鎊","displayName-count-other":"愛爾蘭鎊","symbol":"IEP"},"ILP":{"displayName":"以色列鎊","displayName-count-other":"以色列鎊","symbol":"ILP"},"ILR":{"displayName":"以色列謝克爾 (1980–1985)","displayName-count-other":"以色列謝克爾 (1980–1985)","symbol":"ILR"},"ILS":{"displayName":"以色列新謝克爾","displayName-count-other":"以色列新謝克爾","symbol":"₪","symbol-alt-narrow":"₪"},"INR":{"displayName":"印度盧比","displayName-count-other":"印度盧比","symbol":"₹","symbol-alt-narrow":"₹"},"IQD":{"displayName":"伊拉克第納爾","displayName-count-other":"伊拉克第納爾","symbol":"IQD"},"IRR":{"displayName":"伊朗里亞爾","displayName-count-other":"伊朗里亞爾","symbol":"IRR"},"ISJ":{"displayName":"冰島克朗 (1918–1981)","displayName-count-other":"冰島克朗 (1918–1981)","symbol":"ISJ"},"ISK":{"displayName":"冰島克朗","displayName-count-other":"冰島克朗","symbol":"ISK","symbol-alt-narrow":"kr"},"ITL":{"displayName":"義大利里拉","displayName-count-other":"義大利里拉","symbol":"ITL"},"JMD":{"displayName":"牙買加元","displayName-count-other":"牙買加元","symbol":"JMD","symbol-alt-narrow":"$"},"JOD":{"displayName":"約旦第納爾","displayName-count-other":"約旦第納爾","symbol":"JOD"},"JPY":{"displayName":"日圓","displayName-count-other":"日圓","symbol":"¥","symbol-alt-narrow":"¥"},"KES":{"displayName":"肯尼亞先令","displayName-count-other":"肯尼亞先令","symbol":"KES"},"KGS":{"displayName":"吉爾吉斯索姆","displayName-count-other":"吉爾吉斯索姆","symbol":"KGS"},"KHR":{"displayName":"柬埔寨瑞爾","displayName-count-other":"柬埔寨瑞爾","symbol":"KHR","symbol-alt-narrow":"៛"},"KMF":{"displayName":"科摩羅法郎","displayName-count-other":"科摩羅法郎","symbol":"KMF","symbol-alt-narrow":"CF"},"KPW":{"displayName":"北韓元","displayName-count-other":"北韓元","symbol":"KPW","symbol-alt-narrow":"₩"},"KRH":{"displayName":"南韓圜","displayName-count-other":"南韓圜","symbol":"KRH"},"KRO":{"displayName":"南韓圓","displayName-count-other":"南韓圓","symbol":"KRO"},"KRW":{"displayName":"韓元","displayName-count-other":"韓元","symbol":"₩","symbol-alt-narrow":"₩"},"KWD":{"displayName":"科威特第納爾","displayName-count-other":"科威特第納爾","symbol":"KWD"},"KYD":{"displayName":"開曼群島元","displayName-count-other":"開曼群島元","symbol":"KYD","symbol-alt-narrow":"$"},"KZT":{"displayName":"哈薩克堅戈","displayName-count-other":"哈薩克堅戈","symbol":"KZT","symbol-alt-narrow":"₸"},"LAK":{"displayName":"寮國基普","displayName-count-other":"寮國基普","symbol":"LAK","symbol-alt-narrow":"₭"},"LBP":{"displayName":"黎巴嫩鎊","displayName-count-other":"黎巴嫩鎊","symbol":"LBP","symbol-alt-narrow":"L£"},"LKR":{"displayName":"斯里蘭卡盧比","displayName-count-other":"斯里蘭卡盧比","symbol":"LKR","symbol-alt-narrow":"Rs"},"LRD":{"displayName":"賴比瑞亞元","displayName-count-other":"賴比瑞亞元","symbol":"LRD","symbol-alt-narrow":"$"},"LSL":{"displayName":"賴索托洛蒂","displayName-count-other":"賴索托洛蒂","symbol":"LSL"},"LTL":{"displayName":"立陶宛立特","displayName-count-other":"立陶宛立特","symbol":"LTL","symbol-alt-narrow":"Lt"},"LTT":{"displayName":"立陶宛特羅","displayName-count-other":"立陶宛特羅","symbol":"LTT"},"LUC":{"displayName":"盧森堡可兌換法郎","displayName-count-other":"盧森堡可兌換法郎","symbol":"LUC"},"LUF":{"displayName":"盧森堡法郎","displayName-count-other":"盧森堡法郎","symbol":"LUF"},"LUL":{"displayName":"盧森堡金融法郎","displayName-count-other":"盧森堡金融法郎","symbol":"LUL"},"LVL":{"displayName":"拉脫維亞拉特銀幣","displayName-count-other":"拉脫維亞拉特銀幣","symbol":"LVL","symbol-alt-narrow":"Ls"},"LVR":{"displayName":"拉脫維亞盧布","displayName-count-other":"拉脫維亞盧布","symbol":"LVR"},"LYD":{"displayName":"利比亞第納爾","displayName-count-other":"利比亞第納爾","symbol":"LYD"},"MAD":{"displayName":"摩洛哥迪拉姆","displayName-count-other":"摩洛哥迪拉姆","symbol":"MAD"},"MAF":{"displayName":"摩洛哥法郎","displayName-count-other":"摩洛哥法郎","symbol":"MAF"},"MCF":{"displayName":"摩納哥法郎","displayName-count-other":"摩納哥法郎","symbol":"MCF"},"MDC":{"displayName":"摩爾多瓦券","displayName-count-other":"摩爾多瓦券","symbol":"MDC"},"MDL":{"displayName":"摩杜雲列伊","displayName-count-other":"摩杜雲列伊","symbol":"MDL"},"MGA":{"displayName":"馬達加斯加阿里亞里","displayName-count-other":"馬達加斯加阿里亞里","symbol":"MGA","symbol-alt-narrow":"Ar"},"MGF":{"displayName":"馬達加斯加法郎","displayName-count-other":"馬達加斯加法郎","symbol":"MGF"},"MKD":{"displayName":"馬其頓第納爾","displayName-count-other":"馬其頓第納爾","symbol":"MKD"},"MKN":{"displayName":"馬其頓第納爾 (1992–1993)","displayName-count-other":"馬其頓第納爾 (1992–1993)","symbol":"MKN"},"MLF":{"displayName":"馬里法郎","displayName-count-other":"馬里法郎","symbol":"MLF"},"MMK":{"displayName":"緬甸元","displayName-count-other":"緬甸元","symbol":"MMK","symbol-alt-narrow":"K"},"MNT":{"displayName":"蒙古圖格里克","displayName-count-other":"蒙古圖格里克","symbol":"MNT","symbol-alt-narrow":"₮"},"MOP":{"displayName":"澳門元","displayName-count-other":"澳門元","symbol":"MOP"},"MRO":{"displayName":"茅利塔尼亞烏吉亞","displayName-count-other":"茅利塔尼亞烏吉亞","symbol":"MRO"},"MTL":{"displayName":"馬爾他里拉","displayName-count-other":"馬爾他里拉","symbol":"MTL"},"MTP":{"displayName":"馬爾他鎊","displayName-count-other":"馬爾他鎊","symbol":"MTP"},"MUR":{"displayName":"模里西斯盧比","displayName-count-other":"模里西斯盧比","symbol":"MUR","symbol-alt-narrow":"Rs"},"MVP":{"displayName":"馬爾地夫盧比","displayName-count-other":"馬爾地夫盧比","symbol":"MVP"},"MVR":{"displayName":"馬爾地夫盧非亞","displayName-count-other":"馬爾地夫盧非亞","symbol":"MVR"},"MWK":{"displayName":"馬拉維克瓦查","displayName-count-other":"馬拉維克瓦查","symbol":"MWK"},"MXN":{"displayName":"墨西哥披索","displayName-count-other":"墨西哥披索","symbol":"MX$","symbol-alt-narrow":"$"},"MXP":{"displayName":"墨西哥銀披索 (1861–1992)","displayName-count-other":"墨西哥銀披索 (1861–1992)","symbol":"MXP"},"MXV":{"displayName":"墨西哥轉換單位 (UDI)","displayName-count-other":"墨西哥轉換單位 (UDI)","symbol":"MXV"},"MYR":{"displayName":"馬來西亞令吉","displayName-count-other":"馬來西亞令吉","symbol":"MYR","symbol-alt-narrow":"RM"},"MZE":{"displayName":"莫三比克埃斯庫多","displayName-count-other":"莫三比克埃斯庫多","symbol":"MZE"},"MZM":{"displayName":"莫三比克梅蒂卡爾 (1980–2006)","displayName-count-other":"莫三比克梅蒂卡爾 (1980–2006)","symbol":"MZM"},"MZN":{"displayName":"莫三比克梅蒂卡爾","displayName-count-other":"莫三比克梅蒂卡爾","symbol":"MZN"},"NAD":{"displayName":"納米比亞元","displayName-count-other":"納米比亞元","symbol":"NAD","symbol-alt-narrow":"$"},"NGN":{"displayName":"奈及利亞奈拉","displayName-count-other":"奈及利亞奈拉","symbol":"NGN","symbol-alt-narrow":"₦"},"NIC":{"displayName":"尼加拉瓜科多巴","displayName-count-other":"尼加拉瓜科多巴","symbol":"NIC"},"NIO":{"displayName":"尼加拉瓜金科多巴","displayName-count-other":"尼加拉瓜金科多巴","symbol":"NIO","symbol-alt-narrow":"C$"},"NLG":{"displayName":"荷蘭盾","displayName-count-other":"荷蘭盾","symbol":"NLG"},"NOK":{"displayName":"挪威克朗","displayName-count-other":"挪威克朗","symbol":"NOK","symbol-alt-narrow":"kr"},"NPR":{"displayName":"尼泊爾盧比","displayName-count-other":"尼泊爾盧比","symbol":"NPR","symbol-alt-narrow":"Rs"},"NZD":{"displayName":"紐西蘭幣","displayName-count-other":"紐西蘭幣","symbol":"NZ$","symbol-alt-narrow":"$"},"OMR":{"displayName":"阿曼里亞爾","displayName-count-other":"阿曼里亞爾","symbol":"OMR"},"PAB":{"displayName":"巴拿馬巴波亞","displayName-count-other":"巴拿馬巴波亞","symbol":"PAB"},"PEI":{"displayName":"祕魯因蒂","displayName-count-other":"祕魯因蒂","symbol":"PEI"},"PEN":{"displayName":"秘魯太陽幣","displayName-count-other":"秘魯太陽幣","symbol":"PEN"},"PES":{"displayName":"秘魯太陽幣 (1863–1965)","displayName-count-other":"秘魯太陽幣 (1863–1965)","symbol":"PES"},"PGK":{"displayName":"巴布亞紐幾內亞基那","displayName-count-other":"巴布亞紐幾內亞基那","symbol":"PGK"},"PHP":{"displayName":"菲律賓披索","displayName-count-other":"菲律賓披索","symbol":"PHP","symbol-alt-narrow":"₱"},"PKR":{"displayName":"巴基斯坦盧比","displayName-count-other":"巴基斯坦盧比","symbol":"PKR","symbol-alt-narrow":"Rs"},"PLN":{"displayName":"波蘭茲羅提","displayName-count-other":"波蘭茲羅提","symbol":"PLN","symbol-alt-narrow":"zł"},"PLZ":{"displayName":"波蘭茲羅提 (1950–1995)","displayName-count-other":"波蘭茲羅提 (1950–1995)","symbol":"PLZ"},"PTE":{"displayName":"葡萄牙埃斯庫多","displayName-count-other":"葡萄牙埃斯庫多","symbol":"PTE"},"PYG":{"displayName":"巴拉圭瓜拉尼","displayName-count-other":"巴拉圭瓜拉尼","symbol":"PYG","symbol-alt-narrow":"₲"},"QAR":{"displayName":"卡達里亞爾","displayName-count-other":"卡達里亞爾","symbol":"QAR"},"RHD":{"displayName":"羅德西亞元","displayName-count-other":"羅德西亞元","symbol":"RHD"},"ROL":{"displayName":"舊羅馬尼亞列伊","displayName-count-other":"舊羅馬尼亞列伊","symbol":"ROL"},"RON":{"displayName":"羅馬尼亞列伊","displayName-count-other":"羅馬尼亞列伊","symbol":"RON","symbol-alt-narrow":"L"},"RSD":{"displayName":"塞爾維亞戴納","displayName-count-other":"塞爾維亞戴納","symbol":"RSD"},"RUB":{"displayName":"俄羅斯盧布","displayName-count-other":"俄羅斯盧布","symbol":"RUB","symbol-alt-narrow":"₽"},"RUR":{"displayName":"俄羅斯盧布 (1991–1998)","displayName-count-other":"俄羅斯盧布 (1991–1998)","symbol":"RUR","symbol-alt-narrow":"р."},"RWF":{"displayName":"盧安達法郎","displayName-count-other":"盧安達法郎","symbol":"RWF","symbol-alt-narrow":"RF"},"SAR":{"displayName":"沙烏地里亞爾","displayName-count-other":"沙烏地里亞爾","symbol":"SAR"},"SBD":{"displayName":"索羅門群島元","displayName-count-other":"索羅門群島元","symbol":"SBD","symbol-alt-narrow":"$"},"SCR":{"displayName":"塞席爾盧比","displayName-count-other":"塞席爾盧比","symbol":"SCR"},"SDD":{"displayName":"蘇丹第納爾","displayName-count-other":"蘇丹第納爾","symbol":"SDD"},"SDG":{"displayName":"蘇丹鎊","displayName-count-other":"蘇丹鎊","symbol":"SDG"},"SDP":{"displayName":"舊蘇丹鎊","displayName-count-other":"舊蘇丹鎊","symbol":"SDP"},"SEK":{"displayName":"瑞典克朗","displayName-count-other":"瑞典克朗","symbol":"SEK","symbol-alt-narrow":"kr"},"SGD":{"displayName":"新加坡幣","displayName-count-other":"新加坡幣","symbol":"SGD","symbol-alt-narrow":"$"},"SHP":{"displayName":"聖赫勒拿鎊","displayName-count-other":"聖赫勒拿鎊","symbol":"SHP","symbol-alt-narrow":"£"},"SIT":{"displayName":"斯洛維尼亞托勒","displayName-count-other":"斯洛維尼亞托勒","symbol":"SIT"},"SKK":{"displayName":"斯洛伐克克朗","displayName-count-other":"斯洛伐克克朗","symbol":"SKK"},"SLL":{"displayName":"獅子山利昂","displayName-count-other":"獅子山利昂","symbol":"SLL"},"SOS":{"displayName":"索馬利亞先令","displayName-count-other":"索馬利亞先令","symbol":"SOS"},"SRD":{"displayName":"蘇利南元","displayName-count-other":"蘇利南元","symbol":"SRD","symbol-alt-narrow":"$"},"SRG":{"displayName":"蘇利南基爾","displayName-count-other":"蘇利南基爾","symbol":"SRG"},"SSP":{"displayName":"南蘇丹鎊","displayName-count-other":"南蘇丹鎊","symbol":"SSP","symbol-alt-narrow":"£"},"STD":{"displayName":"聖多美島和普林西比島多布拉","displayName-count-other":"聖多美島和普林西比島多布拉","symbol":"STD","symbol-alt-narrow":"Db"},"STN":{"displayName":"STN","symbol":"STN"},"SUR":{"displayName":"蘇聯盧布","displayName-count-other":"蘇聯盧布","symbol":"SUR"},"SVC":{"displayName":"薩爾瓦多科郎","displayName-count-other":"薩爾瓦多科郎","symbol":"SVC"},"SYP":{"displayName":"敘利亞鎊","displayName-count-other":"敘利亞鎊","symbol":"SYP","symbol-alt-narrow":"£"},"SZL":{"displayName":"史瓦濟蘭里朗吉尼","displayName-count-other":"史瓦濟蘭里朗吉尼","symbol":"SZL"},"THB":{"displayName":"泰銖","displayName-count-other":"泰銖","symbol":"THB","symbol-alt-narrow":"฿"},"TJR":{"displayName":"塔吉克盧布","displayName-count-other":"塔吉克盧布","symbol":"TJR"},"TJS":{"displayName":"塔吉克索莫尼","displayName-count-other":"塔吉克索莫尼","symbol":"TJS"},"TMM":{"displayName":"土庫曼馬納特 (1993–2009)","displayName-count-other":"土庫曼馬納特 (1993–2009)","symbol":"TMM"},"TMT":{"displayName":"土庫曼馬納特","displayName-count-other":"土庫曼馬納特","symbol":"TMT"},"TND":{"displayName":"突尼西亞第納爾","displayName-count-other":"突尼西亞第納爾","symbol":"TND"},"TOP":{"displayName":"東加潘加","displayName-count-other":"東加潘加","symbol":"TOP","symbol-alt-narrow":"T$"},"TPE":{"displayName":"帝汶埃斯庫多","displayName-count-other":"帝汶埃斯庫多","symbol":"TPE"},"TRL":{"displayName":"土耳其里拉","displayName-count-other":"土耳其里拉","symbol":"TRL"},"TRY":{"displayName":"新土耳其里拉","displayName-count-other":"新土耳其里拉","symbol":"TRY","symbol-alt-narrow":"₺","symbol-alt-variant":"TL"},"TTD":{"displayName":"千里達及托巴哥元","displayName-count-other":"千里達及托巴哥元","symbol":"TTD","symbol-alt-narrow":"$"},"TWD":{"displayName":"新台幣","displayName-count-other":"新台幣","symbol":"$","symbol-alt-narrow":"$"},"TZS":{"displayName":"坦尚尼亞先令","displayName-count-other":"坦尚尼亞先令","symbol":"TZS"},"UAH":{"displayName":"烏克蘭格里夫納","displayName-count-other":"烏克蘭格里夫納","symbol":"UAH","symbol-alt-narrow":"₴"},"UAK":{"displayName":"烏克蘭卡本瓦那茲","displayName-count-other":"烏克蘭卡本瓦那茲","symbol":"UAK"},"UGS":{"displayName":"烏干達先令 (1966–1987)","displayName-count-other":"烏干達先令 (1966–1987)","symbol":"UGS"},"UGX":{"displayName":"烏干達先令","displayName-count-other":"烏干達先令","symbol":"UGX"},"USD":{"displayName":"美元","displayName-count-other":"美元","symbol":"US$","symbol-alt-narrow":"$"},"USN":{"displayName":"美元(次日)","displayName-count-other":"美元(次日)","symbol":"USN"},"USS":{"displayName":"美元(當日)","displayName-count-other":"美元(當日)","symbol":"USS"},"UYI":{"displayName":"烏拉圭披索(指數單位)","displayName-count-other":"烏拉圭披索(指數單位)","symbol":"UYI"},"UYP":{"displayName":"烏拉圭披索 (1975–1993)","displayName-count-other":"烏拉圭披索 (1975–1993)","symbol":"UYP"},"UYU":{"displayName":"烏拉圭披索","displayName-count-other":"烏拉圭披索","symbol":"UYU","symbol-alt-narrow":"$"},"UZS":{"displayName":"烏茲別克索姆","displayName-count-other":"烏茲別克索姆","symbol":"UZS"},"VEB":{"displayName":"委內瑞拉玻利瓦 (1871–2008)","displayName-count-other":"委內瑞拉玻利瓦 (1871–2008)","symbol":"VEB"},"VEF":{"displayName":"委內瑞拉玻利瓦","displayName-count-other":"委內瑞拉玻利瓦","symbol":"VEF","symbol-alt-narrow":"Bs"},"VND":{"displayName":"越南盾","displayName-count-other":"越南盾","symbol":"₫","symbol-alt-narrow":"₫"},"VNN":{"displayName":"越南盾 (1978–1985)","displayName-count-other":"越南盾 (1978–1985)","symbol":"VNN"},"VUV":{"displayName":"萬那杜瓦圖","displayName-count-other":"萬那杜瓦圖","symbol":"VUV"},"WST":{"displayName":"西薩摩亞塔拉","displayName-count-other":"西薩摩亞塔拉","symbol":"WST"},"XAF":{"displayName":"法郎 (CFA–BEAC)","displayName-count-other":"法郎 (CFA–BEAC)","symbol":"FCFA"},"XAG":{"displayName":"白銀","displayName-count-other":"白銀","symbol":"XAG"},"XAU":{"displayName":"黃金","displayName-count-other":"黃金","symbol":"XAU"},"XBA":{"displayName":"歐洲綜合單位","displayName-count-other":"歐洲綜合單位","symbol":"XBA"},"XBB":{"displayName":"歐洲貨幣單位 (XBB)","displayName-count-other":"歐洲貨幣單位 (XBB)","symbol":"XBB"},"XBC":{"displayName":"歐洲會計單位 (XBC)","displayName-count-other":"歐洲會計單位 (XBC)","symbol":"XBC"},"XBD":{"displayName":"歐洲會計單位 (XBD)","displayName-count-other":"歐洲會計單位 (XBD)","symbol":"XBD"},"XCD":{"displayName":"格瑞那達元","displayName-count-other":"格瑞那達元","symbol":"EC$","symbol-alt-narrow":"$"},"XDR":{"displayName":"特殊提款權","displayName-count-other":"特殊提款權","symbol":"XDR"},"XEU":{"displayName":"歐洲貨幣單位 (XEU)","displayName-count-other":"歐洲貨幣單位 (XEU)","symbol":"XEU"},"XFO":{"displayName":"法國金法郎","displayName-count-other":"法國金法郎","symbol":"XFO"},"XFU":{"displayName":"法國法郎 (UIC)","displayName-count-other":"法國法郎 (UIC)","symbol":"XFU"},"XOF":{"displayName":"法郎 (CFA–BCEAO)","displayName-count-other":"法郎 (CFA–BCEAO)","symbol":"CFA"},"XPD":{"displayName":"帕拉狄昂","displayName-count-other":"帕拉狄昂","symbol":"XPD"},"XPF":{"displayName":"法郎 (CFP)","displayName-count-other":"法郎 (CFP)","symbol":"CFPF"},"XPT":{"displayName":"白金","displayName-count-other":"白金","symbol":"XPT"},"XRE":{"displayName":"RINET 基金","displayName-count-other":"RINET 基金","symbol":"XRE"},"XSU":{"displayName":"蘇克雷貨幣","displayName-count-other":"蘇克雷貨幣","symbol":"XSU"},"XTS":{"displayName":"測試用貨幣代碼","displayName-count-other":"測試用貨幣代碼","symbol":"XTS"},"XUA":{"displayName":"亞洲開發銀行計價單位","displayName-count-other":"亞洲開發銀行計價單位","symbol":"XUA"},"XXX":{"displayName":"未知貨幣","displayName-count-other":"(未知貨幣)","symbol":"XXX"},"YDD":{"displayName":"葉門第納爾","displayName-count-other":"葉門第納爾","symbol":"YDD"},"YER":{"displayName":"葉門里亞爾","displayName-count-other":"葉門里亞爾","symbol":"YER"},"YUD":{"displayName":"南斯拉夫第納爾硬幣","displayName-count-other":"南斯拉夫第納爾硬幣","symbol":"YUD"},"YUM":{"displayName":"南斯拉夫挪威亞第納爾","displayName-count-other":"南斯拉夫挪威亞第納爾","symbol":"YUM"},"YUN":{"displayName":"南斯拉夫可轉換第納爾","displayName-count-other":"南斯拉夫可轉換第納爾","symbol":"YUN"},"YUR":{"displayName":"南斯拉夫改革第納爾 (1992–1993)","displayName-count-other":"南斯拉夫改革第納爾 (1992–1993)","symbol":"YUR"},"ZAL":{"displayName":"南非蘭特(金融)","displayName-count-other":"南非蘭特(金融)","symbol":"ZAL"},"ZAR":{"displayName":"南非蘭特","displayName-count-other":"南非蘭特","symbol":"ZAR","symbol-alt-narrow":"R"},"ZMK":{"displayName":"尚比亞克瓦查 (1968–2012)","displayName-count-other":"尚比亞克瓦查 (1968–2012)","symbol":"ZMK"},"ZMW":{"displayName":"尚比亞克瓦查","displayName-count-other":"尚比亞克瓦查","symbol":"ZMW","symbol-alt-narrow":"ZK"},"ZRN":{"displayName":"薩伊新扎伊爾","displayName-count-other":"薩伊新扎伊爾","symbol":"ZRN"},"ZRZ":{"displayName":"薩伊扎伊爾","displayName-count-other":"薩伊扎伊爾","symbol":"ZRZ"},"ZWD":{"displayName":"辛巴威元 (1980–2008)","displayName-count-other":"辛巴威元 (1980–2008)","symbol":"ZWD"},"ZWL":{"displayName":"辛巴威元 (2009)","displayName-count-other":"辛巴威元 (2009)","symbol":"ZWL"},"ZWR":{"displayName":"辛巴威元 (2008)","displayName-count-other":"辛巴威元 (2008)","symbol":"ZWR"}},"defaultNumberingSystem":"latn","otherNumberingSystems":{"native":"hanidec","traditional":"hant","finance":"hantfin"},"minimumGroupingDigits":"1","symbols-numberSystem-hanidec":{"decimal":".","group":",","list":";","percentSign":"%","plusSign":"+","minusSign":"-","exponential":"E","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"非數值","timeSeparator":":"},"symbols-numberSystem-latn":{"decimal":".","group":",","list":";","percentSign":"%","plusSign":"+","minusSign":"-","exponential":"E","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"非數值","timeSeparator":":"},"decimalFormats-numberSystem-hanidec":{"standard":"#,##0.###","long":{"decimalFormat":{"1000-count-other":"0","10000-count-other":"0萬","100000-count-other":"00萬","1000000-count-other":"000萬","10000000-count-other":"0000萬","100000000-count-other":"0億","1000000000-count-other":"00億","10000000000-count-other":"000億","100000000000-count-other":"0000億","1000000000000-count-other":"0兆","10000000000000-count-other":"00兆","100000000000000-count-other":"000兆"}},"short":{"decimalFormat":{"1000-count-other":"0","10000-count-other":"0萬","100000-count-other":"00萬","1000000-count-other":"000萬","10000000-count-other":"0000萬","100000000-count-other":"0億","1000000000-count-other":"00億","10000000000-count-other":"000億","100000000000-count-other":"0000億","1000000000000-count-other":"0兆","10000000000000-count-other":"00兆","100000000000000-count-other":"000兆"}}},"decimalFormats-numberSystem-latn":{"standard":"#,##0.###","long":{"decimalFormat":{"1000-count-other":"0","10000-count-other":"0萬","100000-count-other":"00萬","1000000-count-other":"000萬","10000000-count-other":"0000萬","100000000-count-other":"0億","1000000000-count-other":"00億","10000000000-count-other":"000億","100000000000-count-other":"0000億","1000000000000-count-other":"0兆","10000000000000-count-other":"00兆","100000000000000-count-other":"000兆"}},"short":{"decimalFormat":{"1000-count-other":"0","10000-count-other":"0萬","100000-count-other":"00萬","1000000-count-other":"000萬","10000000-count-other":"0000萬","100000000-count-other":"0億","1000000000-count-other":"00億","10000000000-count-other":"000億","100000000000-count-other":"0000億","1000000000000-count-other":"0兆","10000000000000-count-other":"00兆","100000000000000-count-other":"000兆"}}},"scientificFormats-numberSystem-hanidec":{"standard":"#E0"},"scientificFormats-numberSystem-latn":{"standard":"#E0"},"percentFormats-numberSystem-hanidec":{"standard":"#,##0%"},"percentFormats-numberSystem-latn":{"standard":"#,##0%"},"currencyFormats-numberSystem-hanidec":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"¤#,##0.00","accounting":"¤#,##0.00;(¤#,##0.00)","short":{"standard":{"1000-count-other":"0","10000-count-other":"¤0萬","100000-count-other":"¤00萬","1000000-count-other":"¤000萬","10000000-count-other":"¤0000萬","100000000-count-other":"¤0億","1000000000-count-other":"¤00億","10000000000-count-other":"¤000億","100000000000-count-other":"¤0000億","1000000000000-count-other":"¤0兆","10000000000000-count-other":"¤00兆","100000000000000-count-other":"¤000兆"}},"unitPattern-count-other":"{0} {1}"},"currencyFormats-numberSystem-latn":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"¤#,##0.00","accounting":"¤#,##0.00;(¤#,##0.00)","short":{"standard":{"1000-count-other":"0","10000-count-other":"¤0萬","100000-count-other":"¤00萬","1000000-count-other":"¤000萬","10000000-count-other":"¤0000萬","100000000-count-other":"¤0億","1000000000-count-other":"¤00億","10000000000-count-other":"¤000億","100000000000-count-other":"¤0000億","1000000000000-count-other":"¤0兆","10000000000000-count-other":"¤00兆","100000000000000-count-other":"¤000兆"}},"unitPattern-count-other":"{0} {1}"},"miscPatterns-numberSystem-hanidec":{"atLeast":"{0}+","range":"{0}-{1}"},"miscPatterns-numberSystem-latn":{"atLeast":"{0}+","range":"{0}-{1}"},"minimalPairs":{"pluralMinimalPairs-count-other":"{0} 日","other":"在第 {0} 個路口右轉。"}}},"ar":{"identity":{"version":{"_number":"$Revision: 13686 $","_cldrVersion":"32"},"language":"ar"},"dates":{"calendars":{"gregorian":{"months":{"format":{"abbreviated":{"1":"يناير","2":"فبراير","3":"مارس","4":"أبريل","5":"مايو","6":"يونيو","7":"يوليو","8":"أغسطس","9":"سبتمبر","10":"أكتوبر","11":"نوفمبر","12":"ديسمبر"},"narrow":{"1":"ي","2":"ف","3":"م","4":"أ","5":"و","6":"ن","7":"ل","8":"غ","9":"س","10":"ك","11":"ب","12":"د"},"wide":{"1":"يناير","2":"فبراير","3":"مارس","4":"أبريل","5":"مايو","6":"يونيو","7":"يوليو","8":"أغسطس","9":"سبتمبر","10":"أكتوبر","11":"نوفمبر","12":"ديسمبر"}},"stand-alone":{"abbreviated":{"1":"يناير","2":"فبراير","3":"مارس","4":"أبريل","5":"مايو","6":"يونيو","7":"يوليو","8":"أغسطس","9":"سبتمبر","10":"أكتوبر","11":"نوفمبر","12":"ديسمبر"},"narrow":{"1":"ي","2":"ف","3":"م","4":"أ","5":"و","6":"ن","7":"ل","8":"غ","9":"س","10":"ك","11":"ب","12":"د"},"wide":{"1":"يناير","2":"فبراير","3":"مارس","4":"أبريل","5":"مايو","6":"يونيو","7":"يوليو","8":"أغسطس","9":"سبتمبر","10":"أكتوبر","11":"نوفمبر","12":"ديسمبر"}}},"days":{"format":{"abbreviated":{"sun":"الأحد","mon":"الاثنين","tue":"الثلاثاء","wed":"الأربعاء","thu":"الخميس","fri":"الجمعة","sat":"السبت"},"narrow":{"sun":"ح","mon":"ن","tue":"ث","wed":"ر","thu":"خ","fri":"ج","sat":"س"},"short":{"sun":"أحد","mon":"إثنين","tue":"ثلاثاء","wed":"أربعاء","thu":"خميس","fri":"جمعة","sat":"سبت"},"wide":{"sun":"الأحد","mon":"الاثنين","tue":"الثلاثاء","wed":"الأربعاء","thu":"الخميس","fri":"الجمعة","sat":"السبت"}},"stand-alone":{"abbreviated":{"sun":"الأحد","mon":"الاثنين","tue":"الثلاثاء","wed":"الأربعاء","thu":"الخميس","fri":"الجمعة","sat":"السبت"},"narrow":{"sun":"ح","mon":"ن","tue":"ث","wed":"ر","thu":"خ","fri":"ج","sat":"س"},"short":{"sun":"أحد","mon":"إثنين","tue":"ثلاثاء","wed":"أربعاء","thu":"خميس","fri":"جمعة","sat":"سبت"},"wide":{"sun":"الأحد","mon":"الاثنين","tue":"الثلاثاء","wed":"الأربعاء","thu":"الخميس","fri":"الجمعة","sat":"السبت"}}},"quarters":{"format":{"abbreviated":{"1":"الربع الأول","2":"الربع الثاني","3":"الربع الثالث","4":"الربع الرابع"},"narrow":{"1":"١","2":"٢","3":"٣","4":"٤"},"wide":{"1":"الربع الأول","2":"الربع الثاني","3":"الربع الثالث","4":"الربع الرابع"}},"stand-alone":{"abbreviated":{"1":"الربع الأول","2":"الربع الثاني","3":"الربع الثالث","4":"الربع الرابع"},"narrow":{"1":"١","2":"٢","3":"٣","4":"٤"},"wide":{"1":"الربع الأول","2":"الربع الثاني","3":"الربع الثالث","4":"الربع الرابع"}}},"dayPeriods":{"format":{"abbreviated":{"am":"ص","pm":"م","morning1":"فجرًا","morning2":"ص","afternoon1":"ظهرًا","afternoon2":"بعد الظهر","evening1":"مساءً","night1":"منتصف الليل","night2":"ليلاً"},"narrow":{"am":"ص","pm":"م","morning1":"فجرًا","morning2":"صباحًا","afternoon1":"ظهرًا","afternoon2":"بعد الظهر","evening1":"مساءً","night1":"منتصف الليل","night2":"ليلاً"},"wide":{"am":"ص","pm":"م","morning1":"فجرًا","morning2":"صباحًا","afternoon1":"ظهرًا","afternoon2":"بعد الظهر","evening1":"مساءً","night1":"منتصف الليل","night2":"ليلاً"}},"stand-alone":{"abbreviated":{"am":"ص","pm":"م","morning1":"فجرًا","morning2":"ص","afternoon1":"ظهرًا","afternoon2":"بعد الظهر","evening1":"مساءً","night1":"منتصف الليل","night2":"ليلاً"},"narrow":{"am":"ص","pm":"م","morning1":"فجرًا","morning2":"صباحًا","afternoon1":"ظهرًا","afternoon2":"بعد الظهر","evening1":"مساءً","night1":"منتصف الليل","night2":"ليلاً"},"wide":{"am":"صباحًا","pm":"مساءً","morning1":"فجرًا","morning2":"صباحًا","afternoon1":"ظهرًا","afternoon2":"بعد الظهر","evening1":"مساءً","night1":"منتصف الليل","night2":"ليلاً"}}},"eras":{"eraNames":{"0":"قبل الميلاد","1":"ميلادي","0-alt-variant":"قبل الحقبة الحالية","1-alt-variant":"بعد الميلاد"},"eraAbbr":{"0":"ق.م","1":"م","0-alt-variant":"ق. م","1-alt-variant":"ب.م"},"eraNarrow":{"0":"ق.م","1":"م","0-alt-variant":"ق. م","1-alt-variant":"ب.م"}},"dateFormats":{"full":"EEEE، d MMMM y","long":"d MMMM y","medium":"dd‏/MM‏/y","short":"d‏/M‏/y"},"timeFormats":{"full":"h:mm:ss a zzzz","long":"h:mm:ss a z","medium":"h:mm:ss a","short":"h:mm a"},"dateTimeFormats":{"full":"{1} {0}","long":"{1} {0}","medium":"{1} {0}","short":"{1} {0}","availableFormats":{"Bh":"h B","Bhm":"h:mm B","Bhms":"h:mm:ss B","d":"d","E":"ccc","EBhm":"E h:mm B","EBhms":"E h:mm:ss B","Ed":"E، d","Ehm":"E h:mm a","EHm":"E HH:mm","Ehms":"E h:mm:ss a","EHms":"E HH:mm:ss","Gy":"y G","GyMMM":"MMM y G","GyMMMd":"d MMM y G","GyMMMEd":"E، d MMM y G","h":"h a","H":"HH","hm":"h:mm a","Hm":"HH:mm","hms":"h:mm:ss a","Hms":"HH:mm:ss","hmsv":"h:mm:ss a v","Hmsv":"HH:mm:ss v","hmv":"h:mm a v","Hmv":"HH:mm v","M":"L","Md":"d/‏M","MEd":"E، d/M","MMdd":"dd‏/MM","MMM":"LLL","MMMd":"d MMM","MMMEd":"E، d MMM","MMMMd":"d MMMM","MMMMEd":"E، d MMMM","MMMMW-count-zero":"الأسبوع W من MMM","MMMMW-count-one":"الأسبوع W من MMM","MMMMW-count-two":"الأسبوع W من MMM","MMMMW-count-few":"الأسبوع W من MMM","MMMMW-count-many":"الأسبوع W من MMM","MMMMW-count-other":"الأسبوع W من MMM","ms":"mm:ss","y":"y","yM":"M‏/y","yMd":"d‏/M‏/y","yMEd":"E، d/‏M/‏y","yMM":"MM‏/y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"E، d MMM y","yMMMM":"MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","yw-count-zero":"الأسبوع w من سنة Y","yw-count-one":"الأسبوع w من سنة Y","yw-count-two":"الأسبوع w من سنة Y","yw-count-few":"الأسبوع w من سنة Y","yw-count-many":"الأسبوع w من سنة Y","yw-count-other":"الأسبوع w من سنة Y"},"appendItems":{"Day":"{0} ({2}: {1})","Day-Of-Week":"{0} {1}","Era":"{1} {0}","Hour":"{0} ({2}: {1})","Minute":"{0} ({2}: {1})","Month":"{0} ({2}: {1})","Quarter":"{0} ({2}: {1})","Second":"{0} ({2}: {1})","Timezone":"{0} {1}","Week":"{0} ({2}: {1})","Year":"{1} {0}"},"intervalFormats":{"intervalFormatFallback":"{0} – {1}","d":{"d":"d–d"},"h":{"a":"h a – h a","h":"h–h a"},"H":{"H":"HH–HH"},"hm":{"a":"h:mm a – h:mm a","h":"h:mm–h:mm a","m":"h:mm–h:mm a"},"Hm":{"H":"HH:mm–HH:mm","m":"HH:mm–HH:mm"},"hmv":{"a":"h:mm a – h:mm a v","h":"h:mm–h:mm a v","m":"h:mm–h:mm a v"},"Hmv":{"H":"HH:mm–HH:mm v","m":"HH:mm–HH:mm v"},"hv":{"a":"h a – h a v","h":"h–h a v"},"Hv":{"H":"HH–HH v"},"M":{"M":"M–M"},"Md":{"d":"M/d – M/d","M":"M/d – M/d"},"MEd":{"d":"E، d/‏M –‏ E، d/‏M","M":"E، d/‏M – E، d/‏M"},"MMM":{"M":"MMM–MMM"},"MMMd":{"d":"d–d MMM","M":"d MMM – d MMM"},"MMMEd":{"d":"E، d – E، d MMM","M":"E، d MMM – E، d MMM"},"MMMM":{"M":"LLLL–LLLL"},"y":{"y":"y–y"},"yM":{"M":"M‏/y – M‏/y","y":"M‏/y – M‏/y"},"yMd":{"d":"d‏/M‏/y – d‏/M‏/y","M":"d‏/M‏/y – d‏/M‏/y","y":"d‏/M‏/y – d‏/M‏/y"},"yMEd":{"d":"E، dd‏/MM‏/y – E، dd‏/MM‏/y","M":"E، d‏/M‏/y – E، d‏/M‏/y","y":"E، d‏/M‏/y – E، d‏/M‏/y"},"yMMM":{"M":"MMM – MMM، y","y":"MMM، y – MMM، y"},"yMMMd":{"d":"d–d MMM، y","M":"d MMM – d MMM، y","y":"d MMM، y – d MMM، y"},"yMMMEd":{"d":"E، d – E، d MMM، y","M":"E، d MMM – E، d MMM، y","y":"E، d MMM، y – E، d MMM، y"},"yMMMM":{"M":"MMMM – MMMM، y","y":"MMMM، y – MMMM، y"}}}}},"fields":{"era":{"displayName":"العصر"},"era-short":{"displayName":"العصر"},"era-narrow":{"displayName":"العصر"},"year":{"displayName":"السنة","relative-type--1":"السنة الماضية","relative-type-0":"السنة الحالية","relative-type-1":"السنة القادمة","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} سنة","relativeTimePattern-count-one":"خلال سنة واحدة","relativeTimePattern-count-two":"خلال سنتين","relativeTimePattern-count-few":"خلال {0} سنوات","relativeTimePattern-count-many":"خلال {0} سنة","relativeTimePattern-count-other":"خلال {0} سنة"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} سنة","relativeTimePattern-count-one":"قبل سنة واحدة","relativeTimePattern-count-two":"قبل سنتين","relativeTimePattern-count-few":"قبل {0} سنوات","relativeTimePattern-count-many":"قبل {0} سنة","relativeTimePattern-count-other":"قبل {0} سنة"}},"year-short":{"displayName":"السنة","relative-type--1":"السنة الماضية","relative-type-0":"السنة الحالية","relative-type-1":"السنة القادمة","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} سنة","relativeTimePattern-count-one":"خلال سنة واحدة","relativeTimePattern-count-two":"خلال سنتين","relativeTimePattern-count-few":"خلال {0} سنوات","relativeTimePattern-count-many":"خلال {0} سنة","relativeTimePattern-count-other":"خلال {0} سنة"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} سنة","relativeTimePattern-count-one":"قبل سنة واحدة","relativeTimePattern-count-two":"قبل سنتين","relativeTimePattern-count-few":"قبل {0} سنوات","relativeTimePattern-count-many":"قبل {0} سنة","relativeTimePattern-count-other":"قبل {0} سنة"}},"year-narrow":{"displayName":"السنة","relative-type--1":"السنة الماضية","relative-type-0":"السنة الحالية","relative-type-1":"السنة القادمة","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} سنة","relativeTimePattern-count-one":"خلال سنة واحدة","relativeTimePattern-count-two":"خلال سنتين","relativeTimePattern-count-few":"خلال {0} سنوات","relativeTimePattern-count-many":"خلال {0} سنة","relativeTimePattern-count-other":"خلال {0} سنة"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} سنة","relativeTimePattern-count-one":"قبل سنة واحدة","relativeTimePattern-count-two":"قبل سنتين","relativeTimePattern-count-few":"قبل {0} سنوات","relativeTimePattern-count-many":"قبل {0} سنة","relativeTimePattern-count-other":"قبل {0} سنة"}},"quarter":{"displayName":"ربع السنة","relative-type--1":"الربع الأخير","relative-type-0":"هذا الربع","relative-type-1":"الربع القادم","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} ربع سنة","relativeTimePattern-count-one":"خلال ربع سنة واحد","relativeTimePattern-count-two":"خلال ربعي سنة","relativeTimePattern-count-few":"خلال {0} أرباع سنة","relativeTimePattern-count-many":"خلال {0} ربع سنة","relativeTimePattern-count-other":"خلال {0} ربع سنة"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} ربع سنة","relativeTimePattern-count-one":"قبل ربع سنة واحد","relativeTimePattern-count-two":"قبل ربعي سنة","relativeTimePattern-count-few":"قبل {0} أرباع سنة","relativeTimePattern-count-many":"قبل {0} ربع سنة","relativeTimePattern-count-other":"قبل {0} ربع سنة"}},"quarter-short":{"displayName":"ربع السنة","relative-type--1":"الربع الأخير","relative-type-0":"هذا الربع","relative-type-1":"الربع القادم","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} ربع سنة","relativeTimePattern-count-one":"خلال ربع سنة واحد","relativeTimePattern-count-two":"خلال ربعي سنة","relativeTimePattern-count-few":"خلال {0} أرباع سنة","relativeTimePattern-count-many":"خلال {0} ربع سنة","relativeTimePattern-count-other":"خلال {0} ربع سنة"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} ربع سنة","relativeTimePattern-count-one":"قبل ربع سنة واحد","relativeTimePattern-count-two":"قبل ربعي سنة","relativeTimePattern-count-few":"قبل {0} أرباع سنة","relativeTimePattern-count-many":"قبل {0} ربع سنة","relativeTimePattern-count-other":"قبل {0} ربع سنة"}},"quarter-narrow":{"displayName":"ربع السنة","relative-type--1":"الربع الأخير","relative-type-0":"هذا الربع","relative-type-1":"الربع القادم","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} ربع سنة","relativeTimePattern-count-one":"خلال ربع سنة واحد","relativeTimePattern-count-two":"خلال ربعي سنة","relativeTimePattern-count-few":"خلال {0} أرباع سنة","relativeTimePattern-count-many":"خلال {0} ربع سنة","relativeTimePattern-count-other":"خلال {0} ربع سنة"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} ربع سنة","relativeTimePattern-count-one":"قبل ربع سنة واحد","relativeTimePattern-count-two":"قبل ربعي سنة","relativeTimePattern-count-few":"قبل {0} أرباع سنة","relativeTimePattern-count-many":"قبل {0} ربع سنة","relativeTimePattern-count-other":"قبل {0} ربع سنة"}},"month":{"displayName":"الشهر","relative-type--1":"الشهر الماضي","relative-type-0":"هذا الشهر","relative-type-1":"الشهر القادم","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} شهر","relativeTimePattern-count-one":"خلال شهر واحد","relativeTimePattern-count-two":"خلال شهرين","relativeTimePattern-count-few":"خلال {0} أشهر","relativeTimePattern-count-many":"خلال {0} شهرًا","relativeTimePattern-count-other":"خلال {0} شهر"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} شهر","relativeTimePattern-count-one":"قبل شهر واحد","relativeTimePattern-count-two":"قبل شهرين","relativeTimePattern-count-few":"قبل {0} أشهر","relativeTimePattern-count-many":"قبل {0} شهرًا","relativeTimePattern-count-other":"قبل {0} شهر"}},"month-short":{"displayName":"الشهر","relative-type--1":"الشهر الماضي","relative-type-0":"هذا الشهر","relative-type-1":"الشهر القادم","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} شهر","relativeTimePattern-count-one":"خلال شهر واحد","relativeTimePattern-count-two":"خلال شهرين","relativeTimePattern-count-few":"خلال {0} أشهر","relativeTimePattern-count-many":"خلال {0} شهرًا","relativeTimePattern-count-other":"خلال {0} شهر"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} شهر","relativeTimePattern-count-one":"قبل شهر واحد","relativeTimePattern-count-two":"قبل شهرين","relativeTimePattern-count-few":"خلال {0} أشهر","relativeTimePattern-count-many":"قبل {0} شهرًا","relativeTimePattern-count-other":"قبل {0} شهر"}},"month-narrow":{"displayName":"الشهر","relative-type--1":"الشهر الماضي","relative-type-0":"هذا الشهر","relative-type-1":"الشهر القادم","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} شهر","relativeTimePattern-count-one":"خلال شهر واحد","relativeTimePattern-count-two":"خلال شهرين","relativeTimePattern-count-few":"خلال {0} أشهر","relativeTimePattern-count-many":"خلال {0} شهرًا","relativeTimePattern-count-other":"خلال {0} شهر"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} شهر","relativeTimePattern-count-one":"قبل شهر واحد","relativeTimePattern-count-two":"قبل شهرين","relativeTimePattern-count-few":"قبل {0} أشهر","relativeTimePattern-count-many":"قبل {0} شهرًا","relativeTimePattern-count-other":"قبل {0} شهر"}},"week":{"displayName":"الأسبوع","relative-type--1":"الأسبوع الماضي","relative-type-0":"هذا الأسبوع","relative-type-1":"الأسبوع القادم","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} أسبوع","relativeTimePattern-count-one":"خلال أسبوع واحد","relativeTimePattern-count-two":"خلال أسبوعين","relativeTimePattern-count-few":"خلال {0} أسابيع","relativeTimePattern-count-many":"خلال {0} أسبوعًا","relativeTimePattern-count-other":"خلال {0} أسبوع"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} أسبوع","relativeTimePattern-count-one":"قبل أسبوع واحد","relativeTimePattern-count-two":"قبل أسبوعين","relativeTimePattern-count-few":"قبل {0} أسابيع","relativeTimePattern-count-many":"قبل {0} أسبوعًا","relativeTimePattern-count-other":"قبل {0} أسبوع"},"relativePeriod":"أسبوع {0}"},"week-short":{"displayName":"الأسبوع","relative-type--1":"الأسبوع الماضي","relative-type-0":"هذا الأسبوع","relative-type-1":"الأسبوع القادم","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} أسبوع","relativeTimePattern-count-one":"خلال أسبوع واحد","relativeTimePattern-count-two":"خلال {0} أسبوعين","relativeTimePattern-count-few":"خلال {0} أسابيع","relativeTimePattern-count-many":"خلال {0} أسبوعًا","relativeTimePattern-count-other":"خلال {0} أسبوع"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} أسبوع","relativeTimePattern-count-one":"قبل أسبوع واحد","relativeTimePattern-count-two":"قبل أسبوعين","relativeTimePattern-count-few":"قبل {0} أسابيع","relativeTimePattern-count-many":"قبل {0} أسبوعًا","relativeTimePattern-count-other":"قبل {0} أسبوع"},"relativePeriod":"أسبوع {0}"},"week-narrow":{"displayName":"الأسبوع","relative-type--1":"الأسبوع الماضي","relative-type-0":"هذا الأسبوع","relative-type-1":"الأسبوع القادم","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} أسبوع","relativeTimePattern-count-one":"خلال أسبوع واحد","relativeTimePattern-count-two":"خلال أسبوعين","relativeTimePattern-count-few":"خلال {0} أسابيع","relativeTimePattern-count-many":"خلال {0} أسبوعًا","relativeTimePattern-count-other":"خلال {0} أسبوع"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} أسبوع","relativeTimePattern-count-one":"قبل أسبوع واحد","relativeTimePattern-count-two":"قبل أسبوعين","relativeTimePattern-count-few":"قبل {0} أسابيع","relativeTimePattern-count-many":"قبل {0} أسبوعًا","relativeTimePattern-count-other":"قبل {0} أسبوع"},"relativePeriod":"أسبوع {0}"},"weekOfMonth":{"displayName":"الأسبوع من الشهر"},"weekOfMonth-short":{"displayName":"أسبوع من شهر"},"weekOfMonth-narrow":{"displayName":"أسبوع/شهر"},"day":{"displayName":"يوم","relative-type--2":"أول أمس","relative-type--1":"أمس","relative-type-0":"اليوم","relative-type-1":"غدًا","relative-type-2":"بعد الغد","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} يوم","relativeTimePattern-count-one":"خلال يوم واحد","relativeTimePattern-count-two":"خلال يومين","relativeTimePattern-count-few":"خلال {0} أيام","relativeTimePattern-count-many":"خلال {0} يومًا","relativeTimePattern-count-other":"خلال {0} يوم"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} يوم","relativeTimePattern-count-one":"قبل يوم واحد","relativeTimePattern-count-two":"قبل يومين","relativeTimePattern-count-few":"قبل {0} أيام","relativeTimePattern-count-many":"قبل {0} يومًا","relativeTimePattern-count-other":"قبل {0} يوم"}},"day-short":{"displayName":"يوم","relative-type--2":"أول أمس","relative-type--1":"أمس","relative-type-0":"اليوم","relative-type-1":"غدًا","relative-type-2":"بعد الغد","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} يوم","relativeTimePattern-count-one":"خلال يوم واحد","relativeTimePattern-count-two":"خلال يومين","relativeTimePattern-count-few":"خلال {0} أيام","relativeTimePattern-count-many":"خلال {0} يومًا","relativeTimePattern-count-other":"خلال {0} يوم"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} يوم","relativeTimePattern-count-one":"قبل يوم واحد","relativeTimePattern-count-two":"قبل يومين","relativeTimePattern-count-few":"قبل {0} أيام","relativeTimePattern-count-many":"قبل {0} يومًا","relativeTimePattern-count-other":"قبل {0} يوم"}},"day-narrow":{"displayName":"يوم","relative-type--2":"أول أمس","relative-type--1":"أمس","relative-type-0":"اليوم","relative-type-1":"غدًا","relative-type-2":"بعد الغد","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} يوم","relativeTimePattern-count-one":"خلال يوم واحد","relativeTimePattern-count-two":"خلال يومين","relativeTimePattern-count-few":"خلال {0} أيام","relativeTimePattern-count-many":"خلال {0} يومًا","relativeTimePattern-count-other":"خلال {0} يوم"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} يوم","relativeTimePattern-count-one":"قبل يوم واحد","relativeTimePattern-count-two":"قبل يومين","relativeTimePattern-count-few":"قبل {0} أيام","relativeTimePattern-count-many":"قبل {0} يومًا","relativeTimePattern-count-other":"قبل {0} يوم"}},"dayOfYear":{"displayName":"يوم من السنة"},"dayOfYear-short":{"displayName":"يوم من سنة"},"dayOfYear-narrow":{"displayName":"يوم/سنة"},"weekday":{"displayName":"اليوم"},"weekday-short":{"displayName":"اليوم"},"weekday-narrow":{"displayName":"اليوم"},"weekdayOfMonth":{"displayName":"يوم عمل من الشهر"},"weekdayOfMonth-short":{"displayName":"يوم عمل من شهر"},"weekdayOfMonth-narrow":{"displayName":"يوم عمل/شهر"},"sun":{"relative-type--1":"الأحد الماضي","relative-type-0":"الأحد الحالي","relative-type-1":"الأحد القادم","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} أحد","relativeTimePattern-count-one":"الأحد القادم","relativeTimePattern-count-two":"الأحد بعد القادم","relativeTimePattern-count-few":"خلال {0} أحد","relativeTimePattern-count-many":"خلال {0} أحد","relativeTimePattern-count-other":"خلال {0} أحد"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} أحد","relativeTimePattern-count-one":"الأحد الماضي","relativeTimePattern-count-two":"الأحد قبل الماضي","relativeTimePattern-count-few":"قبل {0} أحد","relativeTimePattern-count-many":"قبل {0} أحد","relativeTimePattern-count-other":"قبل {0} أحد"}},"sun-short":{"relative-type--1":"الأحد الماضي","relative-type-0":"الأحد الحالي","relative-type-1":"الأحد القادم","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} أحد","relativeTimePattern-count-one":"أحد قادم","relativeTimePattern-count-two":"أحد بعد القادم","relativeTimePattern-count-few":"خلال {0} أحد","relativeTimePattern-count-many":"خلال {0} أحد","relativeTimePattern-count-other":"خلال {0} أحد"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} أحد","relativeTimePattern-count-one":"أحد ماضي","relativeTimePattern-count-two":"أحد قبل الماضي","relativeTimePattern-count-few":"قبل {0} أحد","relativeTimePattern-count-many":"قبل {0} أحد","relativeTimePattern-count-other":"قبل {0} أحد"}},"sun-narrow":{"relative-type--1":"الأحد الماضي","relative-type-0":"الأحد الحالي","relative-type-1":"الأحد القادم","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} أحد","relativeTimePattern-count-one":"أحد قادم","relativeTimePattern-count-two":"أحد بعد القادم","relativeTimePattern-count-few":"خلال {0} أحد","relativeTimePattern-count-many":"خلال {0} أحد","relativeTimePattern-count-other":"خلال {0} أحد"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} أحد","relativeTimePattern-count-one":"أحد ماضي","relativeTimePattern-count-two":"أحد قبل الماضي","relativeTimePattern-count-few":"قبل {0} أحد","relativeTimePattern-count-many":"قبل {0} أحد","relativeTimePattern-count-other":"قبل {0} أحد"}},"mon":{"relative-type--1":"الإثنين الماضي","relative-type-0":"الإثنين الحالي","relative-type-1":"الإثنين القادم","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} إثنين","relativeTimePattern-count-one":"الإثنين القادم","relativeTimePattern-count-two":"الإثنين بعد القادم","relativeTimePattern-count-few":"خلال {0} أيام إثنين","relativeTimePattern-count-many":"خلال {0} يوم إثنين","relativeTimePattern-count-other":"خلال {0} يوم إثنين"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} إثنين","relativeTimePattern-count-one":"الإثنين الماضي","relativeTimePattern-count-two":"الإثنين قبل الماضي","relativeTimePattern-count-few":"قبل {0} أيام إثنين","relativeTimePattern-count-many":"قبل {0} يوم إثنين","relativeTimePattern-count-other":"قبل {0} يوم إثنين"}},"mon-short":{"relative-type--1":"الإثنين الماضي","relative-type-0":"الإثنين الحالي","relative-type-1":"الإثنين القادم","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} إثنين","relativeTimePattern-count-one":"الإثنين القادم","relativeTimePattern-count-two":"الإثنين بعد القادم","relativeTimePattern-count-few":"خلال {0} إثنين","relativeTimePattern-count-many":"خلال {0} إثنين","relativeTimePattern-count-other":"خلال {0} إثنين"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} إثنين","relativeTimePattern-count-one":"الإثنين الماضي","relativeTimePattern-count-two":"الإثنين قبل الماضي","relativeTimePattern-count-few":"قبل {0} إثنين","relativeTimePattern-count-many":"قبل {0} إثنين","relativeTimePattern-count-other":"قبل {0} إثنين"}},"mon-narrow":{"relative-type--1":"الإثنين الماضي","relative-type-0":"الإثنين الحالي","relative-type-1":"الإثنين القادم","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} إثنين","relativeTimePattern-count-one":"إثنين قادم","relativeTimePattern-count-two":"الإثنين بعد القادم","relativeTimePattern-count-few":"خلال {0} إثنين","relativeTimePattern-count-many":"خلال {0} إثنين","relativeTimePattern-count-other":"خلال {0} إثنين"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} إثنين","relativeTimePattern-count-one":"إثنين ماضي","relativeTimePattern-count-two":"إثنين قبل الماضي","relativeTimePattern-count-few":"قبل {0} إثنين","relativeTimePattern-count-many":"قبل {0} إثنين","relativeTimePattern-count-other":"قبل {0} إثنين"}},"tue":{"relative-type--1":"الثلاثاء الماضي","relative-type-0":"الثلاثاء الحالي","relative-type-1":"الثلاثاء القادم","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} يوم ثلاثاء","relativeTimePattern-count-one":"الثلاثاء القادم","relativeTimePattern-count-two":"الثلاثاء بعد القادم","relativeTimePattern-count-few":"خلال {0} أيام ثلاثاء","relativeTimePattern-count-many":"خلال {0} يوم ثلاثاء","relativeTimePattern-count-other":"خلال {0} يوم ثلاثاء"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} يوم ثلاثاء","relativeTimePattern-count-one":"الثلاثاء الماضي","relativeTimePattern-count-two":"الثلاثاء قبل الماضي","relativeTimePattern-count-few":"قبل {0} أيام ثلاثاء","relativeTimePattern-count-many":"قبل {0} يوم ثلاثاء","relativeTimePattern-count-other":"قبل {0} يوم ثلاثاء"}},"tue-short":{"relative-type--1":"الثلاثاء الماضي","relative-type-0":"الثلاثاء الحالي","relative-type-1":"الثلاثاء القادم","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} ثلاثاء","relativeTimePattern-count-one":"ثلاثاء قادم","relativeTimePattern-count-two":"ثلاثاء بعد القادم","relativeTimePattern-count-few":"خلال {0} ثلاثاء","relativeTimePattern-count-many":"خلال {0} ثلاثاء","relativeTimePattern-count-other":"خلال {0} ثلاثاء"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} ثلاثاء","relativeTimePattern-count-one":"ثلاثاء ماضي","relativeTimePattern-count-two":"ثلاثاء قبل الماضي","relativeTimePattern-count-few":"قبل {0} ثلاثاء","relativeTimePattern-count-many":"قبل {0} ثلاثاء","relativeTimePattern-count-other":"قبل {0} ثلاثاء"}},"tue-narrow":{"relative-type--1":"الثلاثاء الماضي","relative-type-0":"الثلاثاء الحالي","relative-type-1":"الثلاثاء القادم","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} ثلاثاء","relativeTimePattern-count-one":"ثلاثاء قادم","relativeTimePattern-count-two":"ثلاثاء بعد القادم","relativeTimePattern-count-few":"خلال {0} ثلاثاء","relativeTimePattern-count-many":"خلال {0} ثلاثاء","relativeTimePattern-count-other":"خلال {0} ثلاثاء"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} ثلاثاء","relativeTimePattern-count-one":"ثلاثاء ماضي","relativeTimePattern-count-two":"ثلاثاء قبل الماضي","relativeTimePattern-count-few":"قبل {0} ثلاثاء","relativeTimePattern-count-many":"قبل {0} ثلاثاء","relativeTimePattern-count-other":"قبل {0} ثلاثاء"}},"wed":{"relative-type--1":"الأربعاء الماضي","relative-type-0":"الأربعاء الحالي","relative-type-1":"الأربعاء القادم","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} يوم أربعاء","relativeTimePattern-count-one":"الأربعاء القادم","relativeTimePattern-count-two":"الأربعاء بعد القادم","relativeTimePattern-count-few":"خلال {0} أيام أربعاء","relativeTimePattern-count-many":"خلال {0} يوم أربعاء","relativeTimePattern-count-other":"خلال {0} يوم أربعاء"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} يوم أربعاء","relativeTimePattern-count-one":"الأربعاء الماضي","relativeTimePattern-count-two":"الأربعاء قبل الماضي","relativeTimePattern-count-few":"قبل {0} أيام أربعاء","relativeTimePattern-count-many":"قبل {0} يوم أربعاء","relativeTimePattern-count-other":"قبل {0} يوم أربعاء"}},"wed-short":{"relative-type--1":"الأربعاء الماضي","relative-type-0":"الأربعاء الحالي","relative-type-1":"الأربعاء القادم","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} أربعاء","relativeTimePattern-count-one":"خلال {0} أربعاء","relativeTimePattern-count-two":"خلال {0} أربعاء","relativeTimePattern-count-few":"خلال {0} أربعاء","relativeTimePattern-count-many":"خلال {0} أربعاء","relativeTimePattern-count-other":"خلال {0} أربعاء"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} أربعاء","relativeTimePattern-count-one":"أربعاء ماضي","relativeTimePattern-count-two":"أربعاء قبل الماضي","relativeTimePattern-count-few":"قبل {0} أربعاء","relativeTimePattern-count-many":"قبل {0} أربعاء","relativeTimePattern-count-other":"قبل {0} أربعاء"}},"wed-narrow":{"relative-type--1":"الأربعاء الماضي","relative-type-0":"الأربعاء الحالي","relative-type-1":"الأربعاء القادم","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} أربعاء","relativeTimePattern-count-one":"أربعاء قادم","relativeTimePattern-count-two":"أربعاء بعد القادم","relativeTimePattern-count-few":"خلال {0} أربعاء","relativeTimePattern-count-many":"خلال {0} أربعاء","relativeTimePattern-count-other":"خلال {0} أربعاء"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} أربعاء","relativeTimePattern-count-one":"أربعاء ماضي","relativeTimePattern-count-two":"أربعاء قبل الماضي","relativeTimePattern-count-few":"قبل {0} أربعاء","relativeTimePattern-count-many":"قبل {0} أربعاء","relativeTimePattern-count-other":"قبل {0} أربعاء"}},"thu":{"relative-type--1":"الخميس الماضي","relative-type-0":"الخميس الحالي","relative-type-1":"الخميس القادم","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} يوم خميس","relativeTimePattern-count-one":"الخميس القادم","relativeTimePattern-count-two":"الخميس بعد القادم","relativeTimePattern-count-few":"خلال {0} أيام خميس","relativeTimePattern-count-many":"خلال {0} يوم خميس","relativeTimePattern-count-other":"خلال {0} يوم خميس"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} يوم خميس","relativeTimePattern-count-one":"الخميس الماضي","relativeTimePattern-count-two":"الخميس قبل الماضي","relativeTimePattern-count-few":"قبل {0} أيام خميس","relativeTimePattern-count-many":"قبل {0} يوم خميس","relativeTimePattern-count-other":"قبل {0} يوم خميس"}},"thu-short":{"relative-type--1":"الخميس الماضي","relative-type-0":"الخميس الحالي","relative-type-1":"الخميس القادم","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} خميس","relativeTimePattern-count-one":"الخميس القادم","relativeTimePattern-count-two":"الخميس بعد القادم","relativeTimePattern-count-few":"خلال {0} خميس","relativeTimePattern-count-many":"خلال {0} خميس","relativeTimePattern-count-other":"خلال {0} خميس"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} خميس","relativeTimePattern-count-one":"خميس ماضي","relativeTimePattern-count-two":"خميس قبل الماضي","relativeTimePattern-count-few":"قبل {0} خميس","relativeTimePattern-count-many":"قبل {0} خميس","relativeTimePattern-count-other":"قبل {0} خميس"}},"thu-narrow":{"relative-type--1":"الخميس الماضي","relative-type-0":"الخميس الحالي","relative-type-1":"الخميس القادم","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} خميس","relativeTimePattern-count-one":"خلال {0} يوم خميس","relativeTimePattern-count-two":"الخميس بعد القادم","relativeTimePattern-count-few":"خلال {0} خميس","relativeTimePattern-count-many":"خلال {0} خميس","relativeTimePattern-count-other":"خلال {0} خميس"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} خميس","relativeTimePattern-count-one":"خميس ماضي","relativeTimePattern-count-two":"خميس قبل الماضي","relativeTimePattern-count-few":"قبل {0} خميس","relativeTimePattern-count-many":"قبل {0} خميس","relativeTimePattern-count-other":"قبل {0} خميس"}},"fri":{"relative-type--1":"الجمعة الماضي","relative-type-0":"الجمعة الحالي","relative-type-1":"الجمعة القادم","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} يوم جمعة","relativeTimePattern-count-one":"الجمعة القادم","relativeTimePattern-count-two":"الجمعة بعد القادم","relativeTimePattern-count-few":"خلال {0} أيام جمعة","relativeTimePattern-count-many":"خلال {0} يوم جمعة","relativeTimePattern-count-other":"خلال {0} يوم جمعة"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} يوم جمعة","relativeTimePattern-count-one":"الجمعة الماضي","relativeTimePattern-count-two":"الجمعة قبل الماضي","relativeTimePattern-count-few":"قبل {0} أيام جمعة","relativeTimePattern-count-many":"قبل {0} يوم جمعة","relativeTimePattern-count-other":"قبل {0} يوم جمعة"}},"fri-short":{"relative-type--1":"الجمعة الماضي","relative-type-0":"الجمعة الحالي","relative-type-1":"الجمعة القادم","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} جمعة","relativeTimePattern-count-one":"جمعة قادم","relativeTimePattern-count-two":"جمعة بعد القادم","relativeTimePattern-count-few":"خلال {0} جمعة","relativeTimePattern-count-many":"خلال {0} جمعة","relativeTimePattern-count-other":"خلال {0} جمعة"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} جمعة","relativeTimePattern-count-one":"جمعة ماضي","relativeTimePattern-count-two":"جمعة قبل الماضي","relativeTimePattern-count-few":"قبل {0} جمعة","relativeTimePattern-count-many":"قبل {0} جمعة","relativeTimePattern-count-other":"قبل {0} جمعة"}},"fri-narrow":{"relative-type--1":"الجمعة الماضي","relative-type-0":"الجمعة الحالي","relative-type-1":"الجمعة القادم","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} جمعة","relativeTimePattern-count-one":"جمعة قادم","relativeTimePattern-count-two":"جمعة بعد القادم","relativeTimePattern-count-few":"خلال {0} جمعة","relativeTimePattern-count-many":"خلال {0} جمعة","relativeTimePattern-count-other":"خلال {0} جمعة"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} جمعة","relativeTimePattern-count-one":"جمعة ماضي","relativeTimePattern-count-two":"جمعة قبل الماضي","relativeTimePattern-count-few":"قبل {0} جمعة","relativeTimePattern-count-many":"قبل {0} جمعة","relativeTimePattern-count-other":"قبل {0} جمعة"}},"sat":{"relative-type--1":"السبت الماضي","relative-type-0":"السبت الحالي","relative-type-1":"السبت القادم","relativeTime-type-future":{"relativeTimePattern-count-zero":"السبت القادم","relativeTimePattern-count-one":"السبت القادم","relativeTimePattern-count-two":"السبت بعد القادم","relativeTimePattern-count-few":"السبت بعد {0} أسابيع","relativeTimePattern-count-many":"خلال {0} يوم سبت","relativeTimePattern-count-other":"بعد {0} يوم سبت"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} يوم سبت","relativeTimePattern-count-one":"السبت الماضي","relativeTimePattern-count-two":"السبت قبل الماضي","relativeTimePattern-count-few":"قبل {0} يوم سبت","relativeTimePattern-count-many":"قبل {0} يوم سبت","relativeTimePattern-count-other":"قبل {0} يوم سبت"}},"sat-short":{"relative-type--1":"السبت الماضي","relative-type-0":"السبت الحالي","relative-type-1":"السبت القادم","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} سبت","relativeTimePattern-count-one":"سبت قادم","relativeTimePattern-count-two":"سبت بعد القادم","relativeTimePattern-count-few":"خلال {0} سبت","relativeTimePattern-count-many":"خلال {0} سبت","relativeTimePattern-count-other":"خلال {0} سبت"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} سبت","relativeTimePattern-count-one":"سبت ماضي","relativeTimePattern-count-two":"سبت قبل الماضي","relativeTimePattern-count-few":"قبل {0} سبت","relativeTimePattern-count-many":"قبل {0} سبت","relativeTimePattern-count-other":"قبل {0} سبت"}},"sat-narrow":{"relative-type--1":"السبت الماضي","relative-type-0":"السبت الحالي","relative-type-1":"السبت القادم","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} سبت","relativeTimePattern-count-one":"سبت قادم","relativeTimePattern-count-two":"سبت بعد القادم","relativeTimePattern-count-few":"خلال {0} سبت","relativeTimePattern-count-many":"خلال {0} سبت","relativeTimePattern-count-other":"خلال {0} سبت"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} سبت","relativeTimePattern-count-one":"سبت ماضي","relativeTimePattern-count-two":"سبت قبل الماضي","relativeTimePattern-count-few":"قبل {0} سبت","relativeTimePattern-count-many":"قبل {0} سبت","relativeTimePattern-count-other":"قبل {0} سبت"}},"dayperiod-short":{"displayName":"ص/م"},"dayperiod":{"displayName":"ص/م"},"dayperiod-narrow":{"displayName":"ص/م"},"hour":{"displayName":"الساعات","relative-type-0":"الساعة الحالية","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} ساعة","relativeTimePattern-count-one":"خلال ساعة واحدة","relativeTimePattern-count-two":"خلال ساعتين","relativeTimePattern-count-few":"خلال {0} ساعات","relativeTimePattern-count-many":"خلال {0} ساعة","relativeTimePattern-count-other":"خلال {0} ساعة"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} ساعة","relativeTimePattern-count-one":"قبل ساعة واحدة","relativeTimePattern-count-two":"قبل ساعتين","relativeTimePattern-count-few":"قبل {0} ساعات","relativeTimePattern-count-many":"قبل {0} ساعة","relativeTimePattern-count-other":"قبل {0} ساعة"}},"hour-short":{"displayName":"الساعات","relative-type-0":"الساعة الحالية","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} ساعة","relativeTimePattern-count-one":"خلال ساعة واحدة","relativeTimePattern-count-two":"خلال ساعتين","relativeTimePattern-count-few":"خلال {0} ساعات","relativeTimePattern-count-many":"خلال {0} ساعة","relativeTimePattern-count-other":"خلال {0} ساعة"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} ساعة","relativeTimePattern-count-one":"قبل ساعة واحدة","relativeTimePattern-count-two":"قبل ساعتين","relativeTimePattern-count-few":"قبل {0} ساعات","relativeTimePattern-count-many":"قبل {0} ساعة","relativeTimePattern-count-other":"قبل {0} ساعة"}},"hour-narrow":{"displayName":"الساعات","relative-type-0":"الساعة الحالية","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} ساعة","relativeTimePattern-count-one":"خلال ساعة واحدة","relativeTimePattern-count-two":"خلال ساعتين","relativeTimePattern-count-few":"خلال {0} ساعات","relativeTimePattern-count-many":"خلال {0} ساعة","relativeTimePattern-count-other":"خلال {0} ساعة"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} ساعة","relativeTimePattern-count-one":"قبل ساعة واحدة","relativeTimePattern-count-two":"قبل ساعتين","relativeTimePattern-count-few":"قبل {0} ساعات","relativeTimePattern-count-many":"قبل {0} ساعة","relativeTimePattern-count-other":"قبل {0} ساعة"}},"minute":{"displayName":"الدقائق","relative-type-0":"هذه الدقيقة","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} دقيقة","relativeTimePattern-count-one":"خلال دقيقة واحدة","relativeTimePattern-count-two":"خلال دقيقتين","relativeTimePattern-count-few":"خلال {0} دقائق","relativeTimePattern-count-many":"خلال {0} دقيقة","relativeTimePattern-count-other":"خلال {0} دقيقة"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} دقيقة","relativeTimePattern-count-one":"قبل دقيقة واحدة","relativeTimePattern-count-two":"قبل دقيقتين","relativeTimePattern-count-few":"قبل {0} دقائق","relativeTimePattern-count-many":"قبل {0} دقيقة","relativeTimePattern-count-other":"قبل {0} دقيقة"}},"minute-short":{"displayName":"الدقائق","relative-type-0":"هذه الدقيقة","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} دقيقة","relativeTimePattern-count-one":"خلال دقيقة واحدة","relativeTimePattern-count-two":"خلال دقيقتين","relativeTimePattern-count-few":"خلال {0} دقائق","relativeTimePattern-count-many":"خلال {0} دقيقة","relativeTimePattern-count-other":"خلال {0} دقيقة"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} دقيقة","relativeTimePattern-count-one":"قبل دقيقة واحدة","relativeTimePattern-count-two":"قبل دقيقتين","relativeTimePattern-count-few":"قبل {0} دقائق","relativeTimePattern-count-many":"قبل {0} دقيقة","relativeTimePattern-count-other":"قبل {0} دقيقة"}},"minute-narrow":{"displayName":"الدقائق","relative-type-0":"هذه الدقيقة","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} دقيقة","relativeTimePattern-count-one":"خلال دقيقة واحدة","relativeTimePattern-count-two":"خلال دقيقتين","relativeTimePattern-count-few":"خلال {0} دقائق","relativeTimePattern-count-many":"خلال {0} دقيقة","relativeTimePattern-count-other":"خلال {0} دقيقة"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} دقيقة","relativeTimePattern-count-one":"قبل دقيقة واحدة","relativeTimePattern-count-two":"قبل دقيقتين","relativeTimePattern-count-few":"قبل {0} دقائق","relativeTimePattern-count-many":"قبل {0} دقيقة","relativeTimePattern-count-other":"قبل {0} دقيقة"}},"second":{"displayName":"الثواني","relative-type-0":"الآن","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} ثانية","relativeTimePattern-count-one":"خلال ثانية واحدة","relativeTimePattern-count-two":"خلال ثانيتين","relativeTimePattern-count-few":"خلال {0} ثوانٍ","relativeTimePattern-count-many":"خلال {0} ثانية","relativeTimePattern-count-other":"خلال {0} ثانية"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} ثانية","relativeTimePattern-count-one":"قبل ثانية واحدة","relativeTimePattern-count-two":"قبل ثانيتين","relativeTimePattern-count-few":"قبل {0} ثوانِ","relativeTimePattern-count-many":"قبل {0} ثانية","relativeTimePattern-count-other":"قبل {0} ثانية"}},"second-short":{"displayName":"الثواني","relative-type-0":"الآن","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} ثانية","relativeTimePattern-count-one":"خلال ثانية واحدة","relativeTimePattern-count-two":"خلال ثانيتين","relativeTimePattern-count-few":"خلال {0} ثوانٍ","relativeTimePattern-count-many":"خلال {0} ثانية","relativeTimePattern-count-other":"خلال {0} ثانية"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} ثانية","relativeTimePattern-count-one":"قبل ثانية واحدة","relativeTimePattern-count-two":"قبل ثانيتين","relativeTimePattern-count-few":"قبل {0} ثوانٍ","relativeTimePattern-count-many":"قبل {0} ثانية","relativeTimePattern-count-other":"قبل {0} ثانية"}},"second-narrow":{"displayName":"الثواني","relative-type-0":"الآن","relativeTime-type-future":{"relativeTimePattern-count-zero":"خلال {0} ثانية","relativeTimePattern-count-one":"خلال ثانية واحدة","relativeTimePattern-count-two":"خلال ثانيتين","relativeTimePattern-count-few":"خلال {0} ثوانٍ","relativeTimePattern-count-many":"خلال {0} ثانية","relativeTimePattern-count-other":"خلال {0} ثانية"},"relativeTime-type-past":{"relativeTimePattern-count-zero":"قبل {0} ثانية","relativeTimePattern-count-one":"قبل ثانية واحدة","relativeTimePattern-count-two":"قبل ثانيتين","relativeTimePattern-count-few":"قبل {0} ثوانٍ","relativeTimePattern-count-many":"قبل {0} ثانية","relativeTimePattern-count-other":"قبل {0} ثانية"}},"zone":{"displayName":"التوقيت"},"zone-short":{"displayName":"توقيت"},"zone-narrow":{"displayName":"توقيت"}}},"numbers":{"currencies":{"ADP":{"displayName":"بيستا أندوري","symbol":"ADP"},"AED":{"displayName":"درهم إماراتي","displayName-count-zero":"درهم إماراتي","displayName-count-one":"درهم إماراتي","displayName-count-two":"درهم إماراتي","displayName-count-few":"درهم إماراتي","displayName-count-many":"درهم إماراتي","displayName-count-other":"درهم إماراتي","symbol":"د.إ.‏"},"AFA":{"displayName":"أفغاني - 1927-2002","symbol":"AFA"},"AFN":{"displayName":"أفغاني","displayName-count-zero":"أفغاني أفغانستاني","displayName-count-one":"أفغاني أفغانستاني","displayName-count-two":"أفغاني أفغانستاني","displayName-count-few":"أفغاني أفغانستاني","displayName-count-many":"أفغاني أفغانستاني","displayName-count-other":"أفغاني أفغانستاني","symbol":"AFN"},"ALK":{"displayName":"ALK","symbol":"ALK"},"ALL":{"displayName":"ليك ألباني","displayName-count-zero":"ليك ألباني","displayName-count-one":"ليك ألباني","displayName-count-two":"ليك ألباني","displayName-count-few":"ليك ألباني","displayName-count-many":"ليك ألباني","displayName-count-other":"ليك ألباني","symbol":"ALL"},"AMD":{"displayName":"درام أرميني","displayName-count-zero":"درام أرميني","displayName-count-one":"درام أرميني","displayName-count-two":"درام أرميني","displayName-count-few":"درام أرميني","displayName-count-many":"درام أرميني","displayName-count-other":"درام أرميني","symbol":"AMD"},"ANG":{"displayName":"غيلدر أنتيلي هولندي","displayName-count-zero":"غيلدر أنتيلي هولندي","displayName-count-one":"غيلدر أنتيلي هولندي","displayName-count-two":"غيلدر أنتيلي هولندي","displayName-count-few":"غيلدر أنتيلي هولندي","displayName-count-many":"غيلدر أنتيلي هولندي","displayName-count-other":"غيلدر أنتيلي هولندي","symbol":"ANG"},"AOA":{"displayName":"كوانزا أنغولي","displayName-count-zero":"كوانزا أنغولي","displayName-count-one":"كوانزا أنغولي","displayName-count-two":"كوانزا أنغولي","displayName-count-few":"كوانزا أنغولي","displayName-count-many":"كوانزا أنغولي","displayName-count-other":"كوانزا أنغولي","symbol":"AOA","symbol-alt-narrow":"Kz"},"AOK":{"displayName":"كوانزا أنجولي - 1977-1990","symbol":"AOK"},"AON":{"displayName":"كوانزا أنجولي جديدة - 1990-2000","symbol":"AON"},"AOR":{"displayName":"كوانزا أنجولي معدلة - 1995 - 1999","symbol":"AOR"},"ARA":{"displayName":"استرال أرجنتيني","symbol":"ARA"},"ARL":{"displayName":"ARL","symbol":"ARL"},"ARM":{"displayName":"ARM","symbol":"ARM"},"ARP":{"displayName":"بيزو أرجنتيني - 1983-1985","symbol":"ARP"},"ARS":{"displayName":"بيزو أرجنتيني","displayName-count-zero":"بيزو أرجنتيني","displayName-count-one":"بيزو أرجنتيني","displayName-count-two":"بيزو أرجنتيني","displayName-count-few":"بيزو أرجنتيني","displayName-count-many":"بيزو أرجنتيني","displayName-count-other":"بيزو أرجنتيني","symbol":"ARS","symbol-alt-narrow":"AR$"},"ATS":{"displayName":"شلن نمساوي","symbol":"ATS"},"AUD":{"displayName":"دولار أسترالي","displayName-count-zero":"دولار أسترالي","displayName-count-one":"دولار أسترالي","displayName-count-two":"دولار أسترالي","displayName-count-few":"دولار أسترالي","displayName-count-many":"دولار أسترالي","displayName-count-other":"دولار أسترالي","symbol":"AU$","symbol-alt-narrow":"AU$"},"AWG":{"displayName":"فلورن أروبي","displayName-count-zero":"فلورن أروبي","displayName-count-one":"فلورن أروبي","displayName-count-two":"فلورن أروبي","displayName-count-few":"فلورن أروبي","displayName-count-many":"فلورن أروبي","displayName-count-other":"فلورن أروبي","symbol":"AWG"},"AZM":{"displayName":"مانات أذريبجاني","symbol":"AZM"},"AZN":{"displayName":"مانات أذربيجان","displayName-count-zero":"مانت أذربيجاني","displayName-count-one":"مانت أذربيجاني","displayName-count-two":"مانت أذربيجاني","displayName-count-few":"مانت أذربيجاني","displayName-count-many":"مانت أذربيجاني","displayName-count-other":"مانت أذربيجاني","symbol":"AZN"},"BAD":{"displayName":"دينار البوسنة والهرسك","symbol":"BAD"},"BAM":{"displayName":"مارك البوسنة والهرسك قابل للتحويل","displayName-count-zero":"مارك البوسنة والهرسك قابل للتحويل","displayName-count-one":"مارك البوسنة والهرسك قابل للتحويل","displayName-count-two":"مارك البوسنة والهرسك قابل للتحويل","displayName-count-few":"مارك البوسنة والهرسك قابل للتحويل","displayName-count-many":"مارك البوسنة والهرسك قابل للتحويل","displayName-count-other":"مارك البوسنة والهرسك قابل للتحويل","symbol":"BAM","symbol-alt-narrow":"KM"},"BAN":{"displayName":"BAN","symbol":"BAN"},"BBD":{"displayName":"دولار بربادوسي","displayName-count-zero":"دولار بربادوسي","displayName-count-one":"دولار بربادوسي","displayName-count-two":"دولار بربادوسي","displayName-count-few":"دولار بربادوسي","displayName-count-many":"دولار بربادوسي","displayName-count-other":"دولار بربادوسي","symbol":"BBD","symbol-alt-narrow":"BB$"},"BDT":{"displayName":"تاكا بنغلاديشي","displayName-count-zero":"تاكا بنغلاديشي","displayName-count-one":"تاكا بنغلاديشي","displayName-count-two":"تاكا بنغلاديشي","displayName-count-few":"تاكا بنغلاديشي","displayName-count-many":"تاكا بنغلاديشي","displayName-count-other":"تاكا بنغلاديشي","symbol":"BDT","symbol-alt-narrow":"৳"},"BEC":{"displayName":"فرنك بلجيكي قابل للتحويل","symbol":"BEC"},"BEF":{"displayName":"فرنك بلجيكي","symbol":"BEF"},"BEL":{"displayName":"فرنك بلجيكي مالي","symbol":"BEL"},"BGL":{"displayName":"BGL","symbol":"BGL"},"BGM":{"displayName":"BGM","symbol":"BGM"},"BGN":{"displayName":"ليف بلغاري","displayName-count-zero":"ليف بلغاري","displayName-count-one":"ليف بلغاري","displayName-count-two":"ليف بلغاري","displayName-count-few":"ليف بلغاري","displayName-count-many":"ليف بلغاري","displayName-count-other":"ليف بلغاري","symbol":"BGN"},"BGO":{"displayName":"BGO","symbol":"BGO"},"BHD":{"displayName":"دينار بحريني","displayName-count-zero":"دينار بحريني","displayName-count-one":"دينار بحريني","displayName-count-two":"دينار بحريني","displayName-count-few":"دينار بحريني","displayName-count-many":"دينار بحريني","displayName-count-other":"دينار بحريني","symbol":"د.ب.‏"},"BIF":{"displayName":"فرنك بروندي","displayName-count-zero":"فرنك بروندي","displayName-count-one":"فرنك بروندي","displayName-count-two":"فرنك بروندي","displayName-count-few":"فرنك بروندي","displayName-count-many":"فرنك بروندي","displayName-count-other":"فرنك بروندي","symbol":"BIF"},"BMD":{"displayName":"دولار برمودي","displayName-count-zero":"دولار برمودي","displayName-count-one":"دولار برمودي","displayName-count-two":"دولار برمودي","displayName-count-few":"دولار برمودي","displayName-count-many":"دولار برمودي","displayName-count-other":"دولار برمودي","symbol":"BMD","symbol-alt-narrow":"BM$"},"BND":{"displayName":"دولار بروناي","displayName-count-zero":"دولار بروناي","displayName-count-one":"دولار بروناي","displayName-count-two":"دولار بروناي","displayName-count-few":"دولار بروناي","displayName-count-many":"دولار بروناي","displayName-count-other":"دولار بروناي","symbol":"BND","symbol-alt-narrow":"BN$"},"BOB":{"displayName":"بوليفيانو بوليفي","displayName-count-zero":"بوليفيانو بوليفي","displayName-count-one":"بوليفيانو بوليفي","displayName-count-two":"بوليفيانو بوليفي","displayName-count-few":"بوليفيانو بوليفي","displayName-count-many":"بوليفيانو بوليفي","displayName-count-other":"بوليفيانو بوليفي","symbol":"BOB","symbol-alt-narrow":"Bs"},"BOL":{"displayName":"BOL","symbol":"BOL"},"BOP":{"displayName":"بيزو بوليفي","symbol":"BOP"},"BOV":{"displayName":"مفدول بوليفي","symbol":"BOV"},"BRB":{"displayName":"نوفو كروزايرو برازيلي - 1967-1986","symbol":"BRB"},"BRC":{"displayName":"كروزادو برازيلي","symbol":"BRC"},"BRE":{"displayName":"كروزايرو برازيلي - 1990-1993","symbol":"BRE"},"BRL":{"displayName":"ريال برازيلي","displayName-count-zero":"ريال برازيلي","displayName-count-one":"ريال برازيلي","displayName-count-two":"ريال برازيلي","displayName-count-few":"ريال برازيلي","displayName-count-many":"ريال برازيلي","displayName-count-other":"ريال برازيلي","symbol":"R$","symbol-alt-narrow":"R$"},"BRN":{"displayName":"BRN","symbol":"BRN"},"BRR":{"displayName":"BRR","symbol":"BRR"},"BRZ":{"displayName":"BRZ","symbol":"BRZ"},"BSD":{"displayName":"دولار باهامي","displayName-count-zero":"دولار باهامي","displayName-count-one":"دولار باهامي","displayName-count-two":"دولار باهامي","displayName-count-few":"دولار باهامي","displayName-count-many":"دولار باهامي","displayName-count-other":"دولار باهامي","symbol":"BSD","symbol-alt-narrow":"BS$"},"BTN":{"displayName":"نولتوم بوتاني","displayName-count-zero":"نولتوم بوتاني","displayName-count-one":"نولتوم بوتاني","displayName-count-two":"نولتوم بوتاني","displayName-count-few":"نولتوم بوتاني","displayName-count-many":"نولتوم بوتاني","displayName-count-other":"نولتوم بوتاني","symbol":"BTN"},"BUK":{"displayName":"كيات بورمي","symbol":"BUK"},"BWP":{"displayName":"بولا بتسواني","displayName-count-zero":"بولا بتسواني","displayName-count-one":"بولا بتسواني","displayName-count-two":"بولا بتسواني","displayName-count-few":"بولا بتسواني","displayName-count-many":"بولا بتسواني","displayName-count-other":"بولا بتسواني","symbol":"BWP","symbol-alt-narrow":"P"},"BYB":{"displayName":"روبل بيلاروسي جديد - 1994-1999","symbol":"BYB"},"BYN":{"displayName":"روبل بيلاروسي","displayName-count-zero":"روبل بيلاروسي","displayName-count-one":"روبل بيلاروسي","displayName-count-two":"روبل بيلاروسي","displayName-count-few":"روبل بيلاروسي","displayName-count-many":"روبل بيلاروسي","displayName-count-other":"روبل بيلاروسي","symbol":"BYN","symbol-alt-narrow":"р."},"BYR":{"displayName":"روبل بيلاروسي (٢٠٠٠–٢٠١٦)","displayName-count-zero":"روبل بيلاروسي (٢٠٠٠–٢٠١٦)","displayName-count-one":"روبل بيلاروسي (٢٠٠٠–٢٠١٦)","displayName-count-two":"روبل بيلاروسي (٢٠٠٠–٢٠١٦)","displayName-count-few":"روبل بيلاروسي (٢٠٠٠–٢٠١٦)","displayName-count-many":"روبل بيلاروسي (٢٠٠٠–٢٠١٦)","displayName-count-other":"روبل بيلاروسي (٢٠٠٠–٢٠١٦)","symbol":"BYR"},"BZD":{"displayName":"دولار بليزي","displayName-count-zero":"دولار بليزي","displayName-count-one":"دولار بليزي","displayName-count-two":"دولاران بليزيان","displayName-count-few":"دولار بليزي","displayName-count-many":"دولار بليزي","displayName-count-other":"دولار بليزي","symbol":"BZD","symbol-alt-narrow":"BZ$"},"CAD":{"displayName":"دولار كندي","displayName-count-zero":"دولار كندي","displayName-count-one":"دولار كندي","displayName-count-two":"دولار كندي","displayName-count-few":"دولار كندي","displayName-count-many":"دولار كندي","displayName-count-other":"دولار كندي","symbol":"CA$","symbol-alt-narrow":"CA$"},"CDF":{"displayName":"فرنك كونغولي","displayName-count-zero":"فرنك كونغولي","displayName-count-one":"فرنك كونغولي","displayName-count-two":"فرنك كونغولي","displayName-count-few":"فرنك كونغولي","displayName-count-many":"فرنك كونغولي","displayName-count-other":"فرنك كونغولي","symbol":"CDF"},"CHE":{"displayName":"CHE","symbol":"CHE"},"CHF":{"displayName":"فرنك سويسري","displayName-count-zero":"فرنك سويسري","displayName-count-one":"فرنك سويسري","displayName-count-two":"فرنك سويسري","displayName-count-few":"فرنك سويسري","displayName-count-many":"فرنك سويسري","displayName-count-other":"فرنك سويسري","symbol":"CHF"},"CHW":{"displayName":"CHW","symbol":"CHW"},"CLE":{"displayName":"CLE","symbol":"CLE"},"CLF":{"displayName":"CLF","symbol":"CLF"},"CLP":{"displayName":"بيزو تشيلي","displayName-count-zero":"بيزو تشيلي","displayName-count-one":"بيزو تشيلي","displayName-count-two":"بيزو تشيلي","displayName-count-few":"بيزو تشيلي","displayName-count-many":"بيزو تشيلي","displayName-count-other":"بيزو تشيلي","symbol":"CLP","symbol-alt-narrow":"CL$"},"CNH":{"displayName":"يوان صيني (في الخارج)","displayName-count-zero":"يوان صيني (في الخارج)","displayName-count-one":"يوان صيني (في الخارج)","displayName-count-two":"يوان صيني (في الخارج)","displayName-count-few":"يوان صيني (في الخارج)","displayName-count-many":"يوان صيني (في الخارج)","displayName-count-other":"يوان صيني (في الخارج)","symbol":"CNH"},"CNX":{"displayName":"CNX","symbol":"CNX"},"CNY":{"displayName":"يوان صيني","displayName-count-zero":"يوان صيني","displayName-count-one":"يوان صيني","displayName-count-two":"يوان صيني","displayName-count-few":"يوان صيني","displayName-count-many":"يوان صيني","displayName-count-other":"يوان صيني","symbol":"CN¥","symbol-alt-narrow":"CN¥"},"COP":{"displayName":"بيزو كولومبي","displayName-count-zero":"بيزو كولومبي","displayName-count-one":"بيزو كولومبي","displayName-count-two":"بيزو كولومبي","displayName-count-few":"بيزو كولومبي","displayName-count-many":"بيزو كولومبي","displayName-count-other":"بيزو كولومبي","symbol":"COP","symbol-alt-narrow":"CO$"},"COU":{"displayName":"COU","symbol":"COU"},"CRC":{"displayName":"كولن كوستاريكي","displayName-count-zero":"كولن كوستاريكي","displayName-count-one":"كولن كوستاريكي","displayName-count-two":"كولن كوستاريكي","displayName-count-few":"كولن كوستاريكي","displayName-count-many":"كولن كوستاريكي","displayName-count-other":"كولن كوستاريكي","symbol":"CRC","symbol-alt-narrow":"₡"},"CSD":{"displayName":"دينار صربي قديم","symbol":"CSD"},"CSK":{"displayName":"كرونة تشيكوسلوفاكيا","symbol":"CSK"},"CUC":{"displayName":"بيزو كوبي قابل للتحويل","displayName-count-zero":"بيزو كوبي قابل للتحويل","displayName-count-one":"بيزو كوبي قابل للتحويل","displayName-count-two":"بيزو كوبي قابل للتحويل","displayName-count-few":"بيزو كوبي قابل للتحويل","displayName-count-many":"بيزو كوبي قابل للتحويل","displayName-count-other":"بيزو كوبي قابل للتحويل","symbol":"CUC","symbol-alt-narrow":"$"},"CUP":{"displayName":"بيزو كوبي","displayName-count-zero":"بيزو كوبي","displayName-count-one":"بيزو كوبي","displayName-count-two":"بيزو كوبي","displayName-count-few":"بيزو كوبي","displayName-count-many":"بيزو كوبي","displayName-count-other":"بيزو كوبي","symbol":"CUP","symbol-alt-narrow":"CU$"},"CVE":{"displayName":"اسكودو الرأس الخضراء","displayName-count-zero":"اسكودو الرأس الخضراء","displayName-count-one":"اسكودو الرأس الخضراء","displayName-count-two":"اسكودو الرأس الخضراء","displayName-count-few":"اسكودو الرأس الخضراء","displayName-count-many":"اسكودو الرأس الخضراء","displayName-count-other":"اسكودو الرأس الخضراء","symbol":"CVE"},"CYP":{"displayName":"جنيه قبرصي","symbol":"CYP"},"CZK":{"displayName":"كرونة تشيكية","displayName-count-zero":"كرونة تشيكية","displayName-count-one":"كرونة تشيكية","displayName-count-two":"كرونة تشيكية","displayName-count-few":"كرونة تشيكية","displayName-count-many":"كرونة تشيكية","displayName-count-other":"كرونة تشيكية","symbol":"CZK","symbol-alt-narrow":"Kč"},"DDM":{"displayName":"أوستمارك ألماني شرقي","symbol":"DDM"},"DEM":{"displayName":"مارك ألماني","symbol":"DEM"},"DJF":{"displayName":"فرنك جيبوتي","displayName-count-zero":"فرنك جيبوتي","displayName-count-one":"فرنك جيبوتي","displayName-count-two":"فرنك جيبوتي","displayName-count-few":"فرنك جيبوتي","displayName-count-many":"فرنك جيبوتي","displayName-count-other":"فرنك جيبوتي","symbol":"DJF"},"DKK":{"displayName":"كرونة دنماركية","displayName-count-zero":"كرونة دنماركية","displayName-count-one":"كرونة دنماركية","displayName-count-two":"كرونة دنماركية","displayName-count-few":"كرونة دنماركية","displayName-count-many":"كرونة دنماركية","displayName-count-other":"كرونة دنماركية","symbol":"DKK","symbol-alt-narrow":"kr"},"DOP":{"displayName":"بيزو الدومنيكان","displayName-count-zero":"بيزو الدومنيكان","displayName-count-one":"بيزو الدومنيكان","displayName-count-two":"بيزو الدومنيكان","displayName-count-few":"بيزو الدومنيكان","displayName-count-many":"بيزو الدومنيكان","displayName-count-other":"بيزو الدومنيكان","symbol":"DOP","symbol-alt-narrow":"DO$"},"DZD":{"displayName":"دينار جزائري","displayName-count-zero":"دينار جزائري","displayName-count-one":"دينار جزائري","displayName-count-two":"ديناران جزائريان","displayName-count-few":"دينارات جزائرية","displayName-count-many":"دينارًا جزائريًا","displayName-count-other":"دينار جزائري","symbol":"د.ج.‏"},"ECS":{"displayName":"ECS","symbol":"ECS"},"ECV":{"displayName":"ECV","symbol":"ECV"},"EEK":{"displayName":"كرونة استونية","symbol":"EEK"},"EGP":{"displayName":"جنيه مصري","displayName-count-zero":"جنيه مصري","displayName-count-one":"جنيه مصري","displayName-count-two":"جنيهان مصريان","displayName-count-few":"جنيهات مصرية","displayName-count-many":"جنيهًا مصريًا","displayName-count-other":"جنيه مصري","symbol":"ج.م.‏","symbol-alt-narrow":"E£"},"ERN":{"displayName":"ناكفا أريتري","displayName-count-zero":"ناكفا أريتري","displayName-count-one":"ناكفا أريتري","displayName-count-two":"ناكفا أريتري","displayName-count-few":"ناكفا أريتري","displayName-count-many":"ناكفا أريتري","displayName-count-other":"ناكفا أريتري","symbol":"ERN"},"ESA":{"displayName":"ESA","symbol":"ESA"},"ESB":{"displayName":"ESB","symbol":"ESB"},"ESP":{"displayName":"بيزيتا إسباني","symbol":"ESP","symbol-alt-narrow":"₧"},"ETB":{"displayName":"بير أثيوبي","displayName-count-zero":"بير أثيوبي","displayName-count-one":"بير أثيوبي","displayName-count-two":"بير أثيوبي","displayName-count-few":"بير أثيوبي","displayName-count-many":"بير أثيوبي","displayName-count-other":"بير أثيوبي","symbol":"ETB"},"EUR":{"displayName":"يورو","displayName-count-zero":"يورو","displayName-count-one":"يورو","displayName-count-two":"يورو","displayName-count-few":"يورو","displayName-count-many":"يورو","displayName-count-other":"يورو","symbol":"€","symbol-alt-narrow":"€"},"FIM":{"displayName":"ماركا فنلندي","symbol":"FIM"},"FJD":{"displayName":"دولار فيجي","displayName-count-zero":"دولار فيجي","displayName-count-one":"دولار فيجي","displayName-count-two":"دولار فيجي","displayName-count-few":"دولار فيجي","displayName-count-many":"دولار فيجي","displayName-count-other":"دولار فيجي","symbol":"FJD","symbol-alt-narrow":"FJ$"},"FKP":{"displayName":"جنيه جزر فوكلاند","displayName-count-zero":"جنيه جزر فوكلاند","displayName-count-one":"جنيه جزر فوكلاند","displayName-count-two":"جنيه جزر فوكلاند","displayName-count-few":"جنيه جزر فوكلاند","displayName-count-many":"جنيه جزر فوكلاند","displayName-count-other":"جنيه جزر فوكلاند","symbol":"FKP","symbol-alt-narrow":"£"},"FRF":{"displayName":"فرنك فرنسي","symbol":"FRF"},"GBP":{"displayName":"جنيه إسترليني","displayName-count-zero":"جنيه إسترليني","displayName-count-one":"جنيه إسترليني","displayName-count-two":"جنيه إسترليني","displayName-count-few":"جنيه إسترليني","displayName-count-many":"جنيه إسترليني","displayName-count-other":"جنيه إسترليني","symbol":"£","symbol-alt-narrow":"UK£"},"GEK":{"displayName":"GEK","symbol":"GEK"},"GEL":{"displayName":"لارى جورجي","displayName-count-zero":"لاري جورجي","displayName-count-one":"لاري جورجي","displayName-count-two":"لاري جورجي","displayName-count-few":"لاري جورجي","displayName-count-many":"لاري جورجي","displayName-count-other":"لاري جورجي","symbol":"GEL","symbol-alt-narrow":"₾","symbol-alt-variant":"₾"},"GHC":{"displayName":"سيدي غاني","symbol":"GHC"},"GHS":{"displayName":"سيدي غانا","displayName-count-zero":"سيدي غانا","displayName-count-one":"سيدي غانا","displayName-count-two":"سيدي غانا","displayName-count-few":"سيدي غانا","displayName-count-many":"سيدي غانا","displayName-count-other":"سيدي غانا","symbol":"GHS"},"GIP":{"displayName":"جنيه جبل طارق","displayName-count-zero":"جنيه جبل طارق","displayName-count-one":"جنيه جبل طارق","displayName-count-two":"جنيه جبل طارق","displayName-count-few":"جنيه جبل طارق","displayName-count-many":"جنيه جبل طارق","displayName-count-other":"جنيه جبل طارق","symbol":"GIP","symbol-alt-narrow":"£"},"GMD":{"displayName":"دلاسي غامبي","displayName-count-zero":"دلاسي غامبي","displayName-count-one":"دلاسي غامبي","displayName-count-two":"دلاسي غامبي","displayName-count-few":"دلاسي غامبي","displayName-count-many":"دلاسي غامبي","displayName-count-other":"دلاسي غامبي","symbol":"GMD"},"GNF":{"displayName":"فرنك غينيا","displayName-count-zero":"فرنك غينيا","displayName-count-one":"فرنك غينيا","displayName-count-two":"فرنك غينيا","displayName-count-few":"فرنك غينيا","displayName-count-many":"فرنك غينيا","displayName-count-other":"فرنك غينيا","symbol":"GNF","symbol-alt-narrow":"FG"},"GNS":{"displayName":"سيلي غينيا","symbol":"GNS"},"GQE":{"displayName":"اكويل جونينا غينيا الاستوائيّة","symbol":"GQE"},"GRD":{"displayName":"دراخما يوناني","symbol":"GRD"},"GTQ":{"displayName":"كوتزال غواتيمالا","displayName-count-zero":"كوتزال غواتيمالا","displayName-count-one":"كوتزال غواتيمالا","displayName-count-two":"كوتزال غواتيمالا","displayName-count-few":"كوتزال غواتيمالا","displayName-count-many":"كوتزال غواتيمالا","displayName-count-other":"كوتزال غواتيمالا","symbol":"GTQ","symbol-alt-narrow":"Q"},"GWE":{"displayName":"اسكود برتغالي غينيا","symbol":"GWE"},"GWP":{"displayName":"بيزو غينيا بيساو","symbol":"GWP"},"GYD":{"displayName":"دولار غيانا","displayName-count-zero":"دولار غيانا","displayName-count-one":"دولار غيانا","displayName-count-two":"دولار غيانا","displayName-count-few":"دولار غيانا","displayName-count-many":"دولار غيانا","displayName-count-other":"دولار غيانا","symbol":"GYD","symbol-alt-narrow":"GY$"},"HKD":{"displayName":"دولار هونغ كونغ","displayName-count-zero":"دولار هونغ كونغ","displayName-count-one":"دولار هونغ كونغ","displayName-count-two":"دولار هونغ كونغ","displayName-count-few":"دولار هونغ كونغ","displayName-count-many":"دولار هونغ كونغ","displayName-count-other":"دولار هونغ كونغ","symbol":"HK$","symbol-alt-narrow":"HK$"},"HNL":{"displayName":"ليمبيرا هنداروس","displayName-count-zero":"ليمبيرا هندوراس","displayName-count-one":"ليمبيرا هندوراس","displayName-count-two":"ليمبيرا هندوراس","displayName-count-few":"ليمبيرا هندوراس","displayName-count-many":"ليمبيرا هندوراس","displayName-count-other":"ليمبيرا هندوراس","symbol":"HNL","symbol-alt-narrow":"L"},"HRD":{"displayName":"دينار كرواتي","symbol":"HRD"},"HRK":{"displayName":"كونا كرواتي","displayName-count-zero":"كونا كرواتي","displayName-count-one":"كونا كرواتي","displayName-count-two":"كونا كرواتي","displayName-count-few":"كونا كرواتي","displayName-count-many":"كونا كرواتي","displayName-count-other":"كونا كرواتي","symbol":"HRK","symbol-alt-narrow":"kn"},"HTG":{"displayName":"جوردى هايتي","displayName-count-zero":"جوردى هايتي","displayName-count-one":"جوردى هايتي","displayName-count-two":"جوردى هايتي","displayName-count-few":"جوردى هايتي","displayName-count-many":"جوردى هايتي","displayName-count-other":"جوردى هايتي","symbol":"HTG"},"HUF":{"displayName":"فورينت هنغاري","displayName-count-zero":"فورينت هنغاري","displayName-count-one":"فورينت هنغاري","displayName-count-two":"فورينت هنغاري","displayName-count-few":"فورينت هنغاري","displayName-count-many":"فورينت هنغاري","displayName-count-other":"فورينت هنغاري","symbol":"HUF","symbol-alt-narrow":"Ft"},"IDR":{"displayName":"روبية إندونيسية","displayName-count-zero":"روبية إندونيسية","displayName-count-one":"روبية إندونيسية","displayName-count-two":"روبية إندونيسية","displayName-count-few":"روبية إندونيسية","displayName-count-many":"روبية إندونيسية","displayName-count-other":"روبية إندونيسية","symbol":"IDR","symbol-alt-narrow":"Rp"},"IEP":{"displayName":"جنيه إيرلندي","symbol":"IEP"},"ILP":{"displayName":"جنيه إسرائيلي","symbol":"ILP"},"ILR":{"displayName":"ILR","symbol":"ILR"},"ILS":{"displayName":"شيكل إسرائيلي جديد","displayName-count-zero":"شيكل إسرائيلي جديد","displayName-count-one":"شيكل إسرائيلي جديد","displayName-count-two":"شيكل إسرائيلي جديد","displayName-count-few":"شيكل إسرائيلي جديد","displayName-count-many":"شيكل إسرائيلي جديد","displayName-count-other":"شيكل إسرائيلي جديد","symbol":"₪","symbol-alt-narrow":"₪"},"INR":{"displayName":"روبية هندي","displayName-count-zero":"روبية هندي","displayName-count-one":"روبية هندي","displayName-count-two":"روبية هندي","displayName-count-few":"روبية هندي","displayName-count-many":"روبية هندي","displayName-count-other":"روبية هندي","symbol":"₹","symbol-alt-narrow":"₹"},"IQD":{"displayName":"دينار عراقي","displayName-count-zero":"دينار عراقي","displayName-count-one":"دينار عراقي","displayName-count-two":"دينار عراقي","displayName-count-few":"دينار عراقي","displayName-count-many":"دينار عراقي","displayName-count-other":"دينار عراقي","symbol":"د.ع.‏"},"IRR":{"displayName":"ريال إيراني","displayName-count-zero":"ريال إيراني","displayName-count-one":"ريال إيراني","displayName-count-two":"ريال إيراني","displayName-count-few":"ريال إيراني","displayName-count-many":"ريال إيراني","displayName-count-other":"ريال إيراني","symbol":"ر.إ."},"ISJ":{"displayName":"ISJ","symbol":"ISJ"},"ISK":{"displayName":"كرونة أيسلندية","displayName-count-zero":"كرونة أيسلندية","displayName-count-one":"كرونة أيسلندية","displayName-count-two":"كرونة أيسلندية","displayName-count-few":"كرونة أيسلندية","displayName-count-many":"كرونة أيسلندية","displayName-count-other":"كرونة أيسلندية","symbol":"ISK","symbol-alt-narrow":"kr"},"ITL":{"displayName":"ليرة إيطالية","symbol":"ITL"},"JMD":{"displayName":"دولار جامايكي","displayName-count-zero":"دولار جامايكي","displayName-count-one":"دولار جامايكي","displayName-count-two":"دولار جامايكي","displayName-count-few":"دولار جامايكي","displayName-count-many":"دولار جامايكي","displayName-count-other":"دولار جامايكي","symbol":"JMD","symbol-alt-narrow":"JM$"},"JOD":{"displayName":"دينار أردني","displayName-count-zero":"دينار أردني","displayName-count-one":"دينار أردني","displayName-count-two":"دينار أردني","displayName-count-few":"دينار أردني","displayName-count-many":"دينار أردني","displayName-count-other":"دينار أردني","symbol":"د.أ.‏"},"JPY":{"displayName":"ين ياباني","displayName-count-zero":"ين ياباني","displayName-count-one":"ين ياباني","displayName-count-two":"ين ياباني","displayName-count-few":"ين ياباني","displayName-count-many":"ين ياباني","displayName-count-other":"ين ياباني","symbol":"JP¥","symbol-alt-narrow":"JP¥"},"KES":{"displayName":"شلن كينيي","displayName-count-zero":"شلن كينيي","displayName-count-one":"شلن كينيي","displayName-count-two":"شلن كينيي","displayName-count-few":"شلن كينيي","displayName-count-many":"شلن كينيي","displayName-count-other":"شلن كينيي","symbol":"KES"},"KGS":{"displayName":"سوم قيرغستاني","displayName-count-zero":"سوم قيرغستاني","displayName-count-one":"سوم قيرغستاني","displayName-count-two":"سوم قيرغستاني","displayName-count-few":"سوم قيرغستاني","displayName-count-many":"سوم قيرغستاني","displayName-count-other":"سوم قيرغستاني","symbol":"KGS"},"KHR":{"displayName":"رييال كمبودي","displayName-count-zero":"رييال كمبودي","displayName-count-one":"رييال كمبودي","displayName-count-two":"رييال كمبودي","displayName-count-few":"رييال كمبودي","displayName-count-many":"رييال كمبودي","displayName-count-other":"رييال كمبودي","symbol":"KHR","symbol-alt-narrow":"៛"},"KMF":{"displayName":"فرنك جزر القمر","displayName-count-zero":"فرنك جزر القمر","displayName-count-one":"فرنك جزر القمر","displayName-count-two":"فرنك جزر القمر","displayName-count-few":"فرنك جزر القمر","displayName-count-many":"فرنك جزر القمر","displayName-count-other":"فرنك جزر القمر","symbol":"KMF","symbol-alt-narrow":"CF"},"KPW":{"displayName":"وون كوريا الشمالية","displayName-count-zero":"وون كوريا الشمالية","displayName-count-one":"وون كوريا الشمالية","displayName-count-two":"وون كوريا الشمالية","displayName-count-few":"وون كوريا الشمالية","displayName-count-many":"وون كوريا الشمالية","displayName-count-other":"وون كوريا الشمالية","symbol":"KPW","symbol-alt-narrow":"₩"},"KRH":{"displayName":"KRH","symbol":"KRH"},"KRO":{"displayName":"KRO","symbol":"KRO"},"KRW":{"displayName":"وون كوريا الجنوبية","displayName-count-zero":"وون كوريا الجنوبية","displayName-count-one":"وون كوريا الجنوبية","displayName-count-two":"وون كوريا الجنوبية","displayName-count-few":"وون كوريا الجنوبية","displayName-count-many":"وون كوريا الجنوبية","displayName-count-other":"وون كوريا الجنوبية","symbol":"₩","symbol-alt-narrow":"₩"},"KWD":{"displayName":"دينار كويتي","displayName-count-zero":"دينار كويتي","displayName-count-one":"دينار كويتي","displayName-count-two":"دينار كويتي","displayName-count-few":"دينار كويتي","displayName-count-many":"دينار كويتي","displayName-count-other":"دينار كويتي","symbol":"د.ك.‏"},"KYD":{"displayName":"دولار جزر كيمن","displayName-count-zero":"دولار جزر كيمن","displayName-count-one":"دولار جزر كيمن","displayName-count-two":"دولار جزر كيمن","displayName-count-few":"دولار جزر كيمن","displayName-count-many":"دولار جزر كيمن","displayName-count-other":"دولار جزر كيمن","symbol":"KYD","symbol-alt-narrow":"KY$"},"KZT":{"displayName":"تينغ كازاخستاني","displayName-count-zero":"تينغ كازاخستاني","displayName-count-one":"تينغ كازاخستاني","displayName-count-two":"تينغ كازاخستاني","displayName-count-few":"تينغ كازاخستاني","displayName-count-many":"تينغ كازاخستاني","displayName-count-other":"تينغ كازاخستاني","symbol":"KZT","symbol-alt-narrow":"₸"},"LAK":{"displayName":"كيب لاوسي","displayName-count-zero":"كيب لاوسي","displayName-count-one":"كيب لاوسي","displayName-count-two":"كيب لاوسي","displayName-count-few":"كيب لاوسي","displayName-count-many":"كيب لاوسي","displayName-count-other":"كيب لاوسي","symbol":"LAK","symbol-alt-narrow":"₭"},"LBP":{"displayName":"جنيه لبناني","displayName-count-zero":"جنيه لبناني","displayName-count-one":"جنيه لبناني","displayName-count-two":"جنيه لبناني","displayName-count-few":"جنيه لبناني","displayName-count-many":"جنيه لبناني","displayName-count-other":"جنيه لبناني","symbol":"ل.ل.‏","symbol-alt-narrow":"L£"},"LKR":{"displayName":"روبية سريلانكية","displayName-count-zero":"روبية سريلانكية","displayName-count-one":"روبية سريلانكية","displayName-count-two":"روبية سريلانكية","displayName-count-few":"روبية سريلانكية","displayName-count-many":"روبية سريلانكية","displayName-count-other":"روبية سريلانكية","symbol":"LKR","symbol-alt-narrow":"Rs"},"LRD":{"displayName":"دولار ليبيري","displayName-count-zero":"دولار ليبيري","displayName-count-one":"دولار ليبيري","displayName-count-two":"دولاران ليبيريان","displayName-count-few":"دولارات ليبيرية","displayName-count-many":"دولارًا ليبيريًا","displayName-count-other":"دولار ليبيري","symbol":"LRD","symbol-alt-narrow":"$"},"LSL":{"displayName":"لوتي ليسوتو","symbol":"LSL"},"LTL":{"displayName":"ليتا ليتوانية","displayName-count-zero":"ليتا ليتوانية","displayName-count-one":"ليتا ليتوانية","displayName-count-two":"ليتا ليتوانية","displayName-count-few":"ليتا ليتوانية","displayName-count-many":"ليتا ليتوانية","displayName-count-other":"ليتا ليتوانية","symbol":"LTL","symbol-alt-narrow":"Lt"},"LTT":{"displayName":"تالوناس ليتواني","symbol":"LTT"},"LUC":{"displayName":"فرنك لوكسمبرج قابل للتحويل","symbol":"LUC"},"LUF":{"displayName":"فرنك لوكسمبرج","symbol":"LUF"},"LUL":{"displayName":"فرنك لوكسمبرج المالي","symbol":"LUL"},"LVL":{"displayName":"لاتس لاتفيا","displayName-count-zero":"لاتس لاتفي","displayName-count-one":"لاتس لاتفي","displayName-count-two":"لاتس لاتفي","displayName-count-few":"لاتس لاتفي","displayName-count-many":"لاتس لاتفي","displayName-count-other":"لاتس لاتفي","symbol":"LVL","symbol-alt-narrow":"Ls"},"LVR":{"displayName":"روبل لاتفيا","symbol":"LVR"},"LYD":{"displayName":"دينار ليبي","displayName-count-zero":"دينار ليبي","displayName-count-one":"دينار ليبي","displayName-count-two":"ديناران ليبيان","displayName-count-few":"دينارات ليبية","displayName-count-many":"دينارًا ليبيًا","displayName-count-other":"دينار ليبي","symbol":"د.ل.‏"},"MAD":{"displayName":"درهم مغربي","displayName-count-zero":"درهم مغربي","displayName-count-one":"درهم مغربي","displayName-count-two":"درهمان مغربيان","displayName-count-few":"دراهم مغربية","displayName-count-many":"درهمًا مغربيًا","displayName-count-other":"درهم مغربي","symbol":"د.م.‏"},"MAF":{"displayName":"فرنك مغربي","symbol":"MAF"},"MCF":{"displayName":"MCF","symbol":"MCF"},"MDC":{"displayName":"MDC","symbol":"MDC"},"MDL":{"displayName":"ليو مولدوفي","displayName-count-zero":"ليو مولدوفي","displayName-count-one":"ليو مولدوفي","displayName-count-two":"ليو مولدوفي","displayName-count-few":"ليو مولدوفي","displayName-count-many":"ليو مولدوفي","displayName-count-other":"ليو مولدوفي","symbol":"MDL"},"MGA":{"displayName":"أرياري مدغشقر","displayName-count-zero":"أرياري مدغشقر","displayName-count-one":"أرياري مدغشقر","displayName-count-two":"أرياري مدغشقر","displayName-count-few":"أرياري مدغشقر","displayName-count-many":"أرياري مدغشقر","displayName-count-other":"أرياري مدغشقر","symbol":"MGA","symbol-alt-narrow":"Ar"},"MGF":{"displayName":"فرنك مدغشقر","symbol":"MGF"},"MKD":{"displayName":"دينار مقدوني","displayName-count-zero":"دينار مقدوني","displayName-count-one":"دينار مقدوني","displayName-count-two":"ديناران مقدونيان","displayName-count-few":"دينارات مقدونية","displayName-count-many":"دينارًا مقدونيًا","displayName-count-other":"دينار مقدوني","symbol":"MKD"},"MKN":{"displayName":"MKN","symbol":"MKN"},"MLF":{"displayName":"فرنك مالي","symbol":"MLF"},"MMK":{"displayName":"كيات ميانمار","displayName-count-zero":"كيات ميانمار","displayName-count-one":"كيات ميانمار","displayName-count-two":"كيات ميانمار","displayName-count-few":"كيات ميانمار","displayName-count-many":"كيات ميانمار","displayName-count-other":"كيات ميانمار","symbol":"MMK","symbol-alt-narrow":"K"},"MNT":{"displayName":"توغروغ منغولي","displayName-count-zero":"توغروغ منغولي","displayName-count-one":"توغروغ منغولي","displayName-count-two":"توغروغ منغولي","displayName-count-few":"توغروغ منغولي","displayName-count-many":"توغروغ منغولي","displayName-count-other":"توغروغ منغولي","symbol":"MNT","symbol-alt-narrow":"₮"},"MOP":{"displayName":"باتاكا ماكاوي","displayName-count-zero":"باتاكا ماكاوي","displayName-count-one":"باتاكا ماكاوي","displayName-count-two":"باتاكا ماكاوي","displayName-count-few":"باتاكا ماكاوي","displayName-count-many":"باتاكا ماكاوي","displayName-count-other":"باتاكا ماكاوي","symbol":"MOP"},"MRO":{"displayName":"أوقية موريتانية","displayName-count-zero":"أوقية موريتانية","displayName-count-one":"أوقية موريتانية","displayName-count-two":"أوقية موريتانية","displayName-count-few":"أوقية موريتانية","displayName-count-many":"أوقية موريتانية","displayName-count-other":"أوقية موريتانية","symbol":"أ.م.‏"},"MTL":{"displayName":"ليرة مالطية","symbol":"MTL"},"MTP":{"displayName":"جنيه مالطي","symbol":"MTP"},"MUR":{"displayName":"روبية موريشيوسية","displayName-count-zero":"روبية موريشيوسية","displayName-count-one":"روبية موريشيوسية","displayName-count-two":"روبية موريشيوسية","displayName-count-few":"روبية موريشيوسية","displayName-count-many":"روبية موريشيوسية","displayName-count-other":"روبية موريشيوسية","symbol":"MUR","symbol-alt-narrow":"Rs"},"MVP":{"displayName":"MVP","symbol":"MVP"},"MVR":{"displayName":"روفيه جزر المالديف","displayName-count-zero":"روفيه جزر المالديف","displayName-count-one":"روفيه جزر المالديف","displayName-count-two":"روفيه جزر المالديف","displayName-count-few":"روفيه جزر المالديف","displayName-count-many":"روفيه جزر المالديف","displayName-count-other":"روفيه جزر المالديف","symbol":"MVR"},"MWK":{"displayName":"كواشا مالاوي","displayName-count-zero":"كواشا مالاوي","displayName-count-one":"كواشا مالاوي","displayName-count-two":"كواشا مالاوي","displayName-count-few":"كواشا مالاوي","displayName-count-many":"كواشا مالاوي","displayName-count-other":"كواشا مالاوي","symbol":"MWK"},"MXN":{"displayName":"بيزو مكسيكي","displayName-count-zero":"بيزو مكسيكي","displayName-count-one":"بيزو مكسيكي","displayName-count-two":"بيزو مكسيكي","displayName-count-few":"بيزو مكسيكي","displayName-count-many":"بيزو مكسيكي","displayName-count-other":"بيزو مكسيكي","symbol":"MX$","symbol-alt-narrow":"MX$"},"MXP":{"displayName":"بيزو فضي مكسيكي - 1861-1992","symbol":"MXP"},"MXV":{"displayName":"MXV","symbol":"MXV"},"MYR":{"displayName":"رينغيت ماليزي","displayName-count-zero":"رينغيت ماليزي","displayName-count-one":"رينغيت ماليزي","displayName-count-two":"رينغيت ماليزي","displayName-count-few":"رينغيت ماليزي","displayName-count-many":"رينغيت ماليزي","displayName-count-other":"رينغيت ماليزي","symbol":"MYR","symbol-alt-narrow":"RM"},"MZE":{"displayName":"اسكود موزمبيقي","symbol":"MZE"},"MZM":{"displayName":"MZM","symbol":"MZM"},"MZN":{"displayName":"متكال موزمبيقي","displayName-count-zero":"متكال موزمبيقي","displayName-count-one":"متكال موزمبيقي","displayName-count-two":"متكال موزمبيقي","displayName-count-few":"متكال موزمبيقي","displayName-count-many":"متكال موزمبيقي","displayName-count-other":"متكال موزمبيقي","symbol":"MZN"},"NAD":{"displayName":"دولار ناميبي","displayName-count-zero":"دولار ناميبي","displayName-count-one":"دولار ناميبي","displayName-count-two":"دولار ناميبي","displayName-count-few":"دولار ناميبي","displayName-count-many":"دولار ناميبي","displayName-count-other":"دولار ناميبي","symbol":"NAD","symbol-alt-narrow":"$"},"NGN":{"displayName":"نايرا نيجيري","displayName-count-zero":"نايرا نيجيري","displayName-count-one":"نايرا نيجيري","displayName-count-two":"نايرا نيجيري","displayName-count-few":"نايرا نيجيري","displayName-count-many":"نايرا نيجيري","displayName-count-other":"نايرا نيجيري","symbol":"NGN","symbol-alt-narrow":"₦"},"NIC":{"displayName":"كوردوبة نيكاراجوا","symbol":"NIC"},"NIO":{"displayName":"قرطبة نيكاراغوا","displayName-count-zero":"قرطبة نيكاراغوا","displayName-count-one":"قرطبة نيكاراغوا","displayName-count-two":"قرطبة نيكاراغوا","displayName-count-few":"قرطبة نيكاراغوا","displayName-count-many":"قرطبة نيكاراغوا","displayName-count-other":"قرطبة نيكاراغوا","symbol":"NIO","symbol-alt-narrow":"C$"},"NLG":{"displayName":"جلدر هولندي","symbol":"NLG"},"NOK":{"displayName":"كرونة نرويجية","displayName-count-zero":"كرونة نرويجية","displayName-count-one":"كرونة نرويجية","displayName-count-two":"كرونة نرويجية","displayName-count-few":"كرونة نرويجية","displayName-count-many":"كرونة نرويجية","displayName-count-other":"كرونة نرويجية","symbol":"NOK","symbol-alt-narrow":"kr"},"NPR":{"displayName":"روبية نيبالي","displayName-count-zero":"روبية نيبالي","displayName-count-one":"روبية نيبالي","displayName-count-two":"روبية نيبالي","displayName-count-few":"روبية نيبالي","displayName-count-many":"روبية نيبالي","displayName-count-other":"روبية نيبالي","symbol":"NPR","symbol-alt-narrow":"Rs"},"NZD":{"displayName":"دولار نيوزيلندي","displayName-count-zero":"دولار نيوزيلندي","displayName-count-one":"دولار نيوزيلندي","displayName-count-two":"دولار نيوزيلندي","displayName-count-few":"دولار نيوزيلندي","displayName-count-many":"دولار نيوزيلندي","displayName-count-other":"دولار نيوزيلندي","symbol":"NZ$","symbol-alt-narrow":"NZ$"},"OMR":{"displayName":"ريال عماني","displayName-count-zero":"ريال عماني","displayName-count-one":"ريال عماني","displayName-count-two":"ريال عماني","displayName-count-few":"ريال عماني","displayName-count-many":"ريال عماني","displayName-count-other":"ريال عماني","symbol":"ر.ع.‏"},"PAB":{"displayName":"بالبوا بنمي","displayName-count-zero":"بالبوا بنمي","displayName-count-one":"بالبوا بنمي","displayName-count-two":"بالبوا بنمي","displayName-count-few":"بالبوا بنمي","displayName-count-many":"بالبوا بنمي","displayName-count-other":"بالبوا بنمي","symbol":"PAB"},"PEI":{"displayName":"PEI","symbol":"PEI"},"PEN":{"displayName":"سول بيروفي","displayName-count-zero":"سول بيروفي","displayName-count-one":"سول بيروفي","displayName-count-two":"سول بيروفي","displayName-count-few":"سول بيروفي","displayName-count-many":"سول بيروفي","displayName-count-other":"سول بيروفي","symbol":"PEN"},"PES":{"displayName":"PES","symbol":"PES"},"PGK":{"displayName":"كينا بابوا غينيا الجديدة","displayName-count-zero":"كينا بابوا غينيا الجديدة","displayName-count-one":"كينا بابوا غينيا الجديدة","displayName-count-two":"كينا بابوا غينيا الجديدة","displayName-count-few":"كينا بابوا غينيا الجديدة","displayName-count-many":"كينا بابوا غينيا الجديدة","displayName-count-other":"كينا بابوا غينيا الجديدة","symbol":"PGK"},"PHP":{"displayName":"بيزو فلبيني","displayName-count-zero":"بيزو فلبيني","displayName-count-one":"بيزو فلبيني","displayName-count-two":"بيزو فلبيني","displayName-count-few":"بيزو فلبيني","displayName-count-many":"بيزو فلبيني","displayName-count-other":"بيزو فلبيني","symbol":"PHP","symbol-alt-narrow":"₱"},"PKR":{"displayName":"روبية باكستاني","displayName-count-zero":"روبية باكستاني","displayName-count-one":"روبية باكستاني","displayName-count-two":"روبية باكستاني","displayName-count-few":"روبية باكستاني","displayName-count-many":"روبية باكستاني","displayName-count-other":"روبية باكستاني","symbol":"PKR","symbol-alt-narrow":"Rs"},"PLN":{"displayName":"زلوتي بولندي","displayName-count-zero":"زلوتي بولندي","displayName-count-one":"زلوتي بولندي","displayName-count-two":"زلوتي بولندي","displayName-count-few":"زلوتي بولندي","displayName-count-many":"زلوتي بولندي","displayName-count-other":"زلوتي بولندي","symbol":"PLN","symbol-alt-narrow":"zł"},"PLZ":{"displayName":"زلوتي بولندي - 1950-1995","symbol":"PLZ"},"PTE":{"displayName":"اسكود برتغالي","symbol":"PTE"},"PYG":{"displayName":"غواراني باراغواي","displayName-count-zero":"غواراني باراغواي","displayName-count-one":"غواراني باراغواي","displayName-count-two":"غواراني باراغواي","displayName-count-few":"غواراني باراغواي","displayName-count-many":"غواراني باراغواي","displayName-count-other":"غواراني باراغواي","symbol":"PYG","symbol-alt-narrow":"₲"},"QAR":{"displayName":"ريال قطري","displayName-count-zero":"ريال قطري","displayName-count-one":"ريال قطري","displayName-count-two":"ريال قطري","displayName-count-few":"ريال قطري","displayName-count-many":"ريال قطري","displayName-count-other":"ريال قطري","symbol":"ر.ق.‏"},"RHD":{"displayName":"دولار روديسي","symbol":"RHD"},"ROL":{"displayName":"ليو روماني قديم","symbol":"ROL"},"RON":{"displayName":"ليو روماني","displayName-count-zero":"ليو روماني","displayName-count-one":"ليو روماني","displayName-count-two":"ليو روماني","displayName-count-few":"ليو روماني","displayName-count-many":"ليو روماني","displayName-count-other":"ليو روماني","symbol":"RON","symbol-alt-narrow":"lei"},"RSD":{"displayName":"دينار صربي","displayName-count-zero":"دينار صربي","displayName-count-one":"دينار صربي","displayName-count-two":"ديناران صربيان","displayName-count-few":"دينارات صربية","displayName-count-many":"دينارًا صربيًا","displayName-count-other":"دينار صربي","symbol":"RSD"},"RUB":{"displayName":"روبل روسي","displayName-count-zero":"روبل روسي","displayName-count-one":"روبل روسي","displayName-count-two":"روبل روسي","displayName-count-few":"روبل روسي","displayName-count-many":"روبل روسي","displayName-count-other":"روبل روسي","symbol":"RUB","symbol-alt-narrow":"₽"},"RUR":{"displayName":"روبل روسي - 1991-1998","symbol":"RUR","symbol-alt-narrow":"р."},"RWF":{"displayName":"فرنك رواندي","displayName-count-zero":"فرنك رواندي","displayName-count-one":"فرنك رواندي","displayName-count-two":"فرنك رواندي","displayName-count-few":"فرنك رواندي","displayName-count-many":"فرنك رواندي","displayName-count-other":"فرنك رواندي","symbol":"RWF","symbol-alt-narrow":"RF"},"SAR":{"displayName":"ريال سعودي","displayName-count-zero":"ريال سعودي","displayName-count-one":"ريال سعودي","displayName-count-two":"ريال سعودي","displayName-count-few":"ريال سعودي","displayName-count-many":"ريال سعودي","displayName-count-other":"ريال سعودي","symbol":"ر.س.‏"},"SBD":{"displayName":"دولار جزر سليمان","displayName-count-zero":"دولار جزر سليمان","displayName-count-one":"دولار جزر سليمان","displayName-count-two":"دولار جزر سليمان","displayName-count-few":"دولار جزر سليمان","displayName-count-many":"دولار جزر سليمان","displayName-count-other":"دولار جزر سليمان","symbol":"SBD","symbol-alt-narrow":"SB$"},"SCR":{"displayName":"روبية سيشيلية","displayName-count-zero":"روبية سيشيلية","displayName-count-one":"روبية سيشيلية","displayName-count-two":"روبية سيشيلية","displayName-count-few":"روبية سيشيلية","displayName-count-many":"روبية سيشيلية","displayName-count-other":"روبية سيشيلية","symbol":"SCR"},"SDD":{"displayName":"دينار سوداني","symbol":"د.س.‏"},"SDG":{"displayName":"جنيه سوداني","displayName-count-zero":"جنيه سوداني","displayName-count-one":"جنيه سوداني","displayName-count-two":"جنيه سوداني","displayName-count-few":"جنيهات سودانية","displayName-count-many":"جنيهًا سودانيًا","displayName-count-other":"جنيه سوداني","symbol":"ج.س."},"SDP":{"displayName":"جنيه سوداني قديم","symbol":"SDP"},"SEK":{"displayName":"كرونة سويدية","displayName-count-zero":"كرونة سويدية","displayName-count-one":"كرونة سويدية","displayName-count-two":"كرونة سويدية","displayName-count-few":"كرونة سويدية","displayName-count-many":"كرونة سويدية","displayName-count-other":"كرونة سويدية","symbol":"SEK","symbol-alt-narrow":"kr"},"SGD":{"displayName":"دولار سنغافوري","displayName-count-zero":"دولار سنغافوري","displayName-count-one":"دولار سنغافوري","displayName-count-two":"دولار سنغافوري","displayName-count-few":"دولار سنغافوري","displayName-count-many":"دولار سنغافوري","displayName-count-other":"دولار سنغافوري","symbol":"SGD","symbol-alt-narrow":"$"},"SHP":{"displayName":"جنيه سانت هيلين","displayName-count-zero":"جنيه سانت هيلين","displayName-count-one":"جنيه سانت هيلين","displayName-count-two":"جنيه سانت هيلين","displayName-count-few":"جنيه سانت هيلين","displayName-count-many":"جنيه سانت هيلين","displayName-count-other":"جنيه سانت هيلين","symbol":"SHP","symbol-alt-narrow":"£"},"SIT":{"displayName":"تولار سلوفيني","symbol":"SIT"},"SKK":{"displayName":"كرونة سلوفاكية","symbol":"SKK"},"SLL":{"displayName":"ليون سيراليوني","displayName-count-zero":"ليون سيراليوني","displayName-count-one":"ليون سيراليوني","displayName-count-two":"ليون سيراليوني","displayName-count-few":"ليون سيراليوني","displayName-count-many":"ليون سيراليوني","displayName-count-other":"ليون سيراليوني","symbol":"SLL"},"SOS":{"displayName":"شلن صومالي","displayName-count-zero":"شلن صومالي","displayName-count-one":"شلن صومالي","displayName-count-two":"شلن صومالي","displayName-count-few":"شلن صومالي","displayName-count-many":"شلن صومالي","displayName-count-other":"شلن صومالي","symbol":"SOS"},"SRD":{"displayName":"دولار سورينامي","displayName-count-zero":"دولار سورينامي","displayName-count-one":"دولار سورينامي","displayName-count-two":"دولار سورينامي","displayName-count-few":"دولار سورينامي","displayName-count-many":"دولار سورينامي","displayName-count-other":"دولار سورينامي","symbol":"SRD","symbol-alt-narrow":"SR$"},"SRG":{"displayName":"جلدر سورينامي","symbol":"SRG"},"SSP":{"displayName":"جنيه جنوب السودان","displayName-count-zero":"جنيه جنوب السودان","displayName-count-one":"جنيه جنوب السودان","displayName-count-two":"جنيهان جنوب السودان","displayName-count-few":"جنيهات جنوب السودان","displayName-count-many":"جنيهًا جنوب السودان","displayName-count-other":"جنيه جنوب السودان","symbol":"SSP","symbol-alt-narrow":"£"},"STD":{"displayName":"دوبرا ساو تومي وبرينسيبي","displayName-count-zero":"دوبرا ساو تومي وبرينسيبي","displayName-count-one":"دوبرا ساو تومي وبرينسيبي","displayName-count-two":"دوبرا ساو تومي وبرينسيبي","displayName-count-few":"دوبرا ساو تومي وبرينسيبي","displayName-count-many":"دوبرا ساو تومي وبرينسيبي","displayName-count-other":"دوبرا ساو تومي وبرينسيبي","symbol":"STD","symbol-alt-narrow":"Db"},"STN":{"displayName":"STN","symbol":"STN"},"SUR":{"displayName":"روبل سوفيتي","symbol":"SUR"},"SVC":{"displayName":"كولون سلفادوري","symbol":"SVC"},"SYP":{"displayName":"ليرة سورية","displayName-count-zero":"ليرة سورية","displayName-count-one":"ليرة سورية","displayName-count-two":"ليرة سورية","displayName-count-few":"ليرة سورية","displayName-count-many":"ليرة سورية","displayName-count-other":"ليرة سورية","symbol":"ل.س.‏","symbol-alt-narrow":"£"},"SZL":{"displayName":"ليلانجيني سوازيلندي","displayName-count-zero":"ليلانجيني سوازيلندي","displayName-count-one":"ليلانجيني سوازيلندي","displayName-count-two":"ليلانجيني سوازيلندي","displayName-count-few":"ليلانجيني سوازيلندي","displayName-count-many":"ليلانجيني سوازيلندي","displayName-count-other":"ليلانجيني سوازيلندي","symbol":"SZL"},"THB":{"displayName":"باخت تايلاندي","displayName-count-zero":"باخت تايلاندي","displayName-count-one":"باخت تايلاندي","displayName-count-two":"باخت تايلاندي","displayName-count-few":"باخت تايلاندي","displayName-count-many":"باخت تايلاندي","displayName-count-other":"باخت تايلاندي","symbol":"฿","symbol-alt-narrow":"฿"},"TJR":{"displayName":"روبل طاجيكستاني","symbol":"TJR"},"TJS":{"displayName":"سوموني طاجيكستاني","displayName-count-zero":"سوموني طاجيكستاني","displayName-count-one":"سوموني طاجيكستاني","displayName-count-two":"سوموني طاجيكستاني","displayName-count-few":"سوموني طاجيكستاني","displayName-count-many":"سوموني طاجيكستاني","displayName-count-other":"سوموني طاجيكستاني","symbol":"TJS"},"TMM":{"displayName":"مانات تركمنستاني","symbol":"TMM"},"TMT":{"displayName":"مانات تركمانستان","displayName-count-zero":"مانات تركمانستان","displayName-count-one":"مانات تركمانستان","displayName-count-two":"مانات تركمانستان","displayName-count-few":"مانات تركمانستان","displayName-count-many":"مانات تركمانستان","displayName-count-other":"مانات تركمانستان","symbol":"TMT"},"TND":{"displayName":"دينار تونسي","displayName-count-zero":"دينار تونسي","displayName-count-one":"دينار تونسي","displayName-count-two":"ديناران تونسيان","displayName-count-few":"دينارات تونسية","displayName-count-many":"دينارًا تونسيًا","displayName-count-other":"دينار تونسي","symbol":"د.ت.‏"},"TOP":{"displayName":"بانغا تونغا","displayName-count-zero":"بانغا تونغا","displayName-count-one":"بانغا تونغا","displayName-count-two":"بانغا تونغا","displayName-count-few":"بانغا تونغا","displayName-count-many":"بانغا تونغا","displayName-count-other":"بانغا تونغا","symbol":"TOP","symbol-alt-narrow":"T$"},"TPE":{"displayName":"اسكود تيموري","symbol":"TPE"},"TRL":{"displayName":"ليرة تركي","symbol":"TRL"},"TRY":{"displayName":"ليرة تركية","displayName-count-zero":"ليرة تركية","displayName-count-one":"ليرة تركية","displayName-count-two":"ليرة تركية","displayName-count-few":"ليرة تركية","displayName-count-many":"ليرة تركية","displayName-count-other":"ليرة تركية","symbol":"TRY","symbol-alt-narrow":"₺","symbol-alt-variant":"TL"},"TTD":{"displayName":"دولار ترينداد وتوباغو","displayName-count-zero":"دولار ترينداد وتوباغو","displayName-count-one":"دولار ترينداد وتوباغو","displayName-count-two":"دولار ترينداد وتوباغو","displayName-count-few":"دولار ترينداد وتوباغو","displayName-count-many":"دولار ترينداد وتوباغو","displayName-count-other":"دولار ترينداد وتوباغو","symbol":"TTD","symbol-alt-narrow":"TT$"},"TWD":{"displayName":"دولار تايواني","displayName-count-zero":"دولار تايواني","displayName-count-one":"دولار تايواني","displayName-count-two":"دولار تايواني","displayName-count-few":"دولار تايواني","displayName-count-many":"دولار تايواني","displayName-count-other":"دولار تايواني","symbol":"NT$","symbol-alt-narrow":"NT$"},"TZS":{"displayName":"شلن تنزاني","displayName-count-zero":"شلن تنزاني","displayName-count-one":"شلن تنزاني","displayName-count-two":"شلن تنزاني","displayName-count-few":"شلن تنزاني","displayName-count-many":"شلن تنزاني","displayName-count-other":"شلن تنزاني","symbol":"TZS"},"UAH":{"displayName":"هريفنيا أوكراني","displayName-count-zero":"هريفنيا أوكراني","displayName-count-one":"هريفنيا أوكراني","displayName-count-two":"هريفنيا أوكراني","displayName-count-few":"هريفنيا أوكراني","displayName-count-many":"هريفنيا أوكراني","displayName-count-other":"هريفنيا أوكراني","symbol":"UAH","symbol-alt-narrow":"₴"},"UAK":{"displayName":"UAK","symbol":"UAK"},"UGS":{"displayName":"شلن أوغندي - 1966-1987","symbol":"UGS"},"UGX":{"displayName":"شلن أوغندي","displayName-count-zero":"شلن أوغندي","displayName-count-one":"شلن أوغندي","displayName-count-two":"شلن أوغندي","displayName-count-few":"شلن أوغندي","displayName-count-many":"شلن أوغندي","displayName-count-other":"شلن أوغندي","symbol":"UGX"},"USD":{"displayName":"دولار أمريكي","displayName-count-zero":"دولار أمريكي","displayName-count-one":"دولار أمريكي","displayName-count-two":"دولار أمريكي","displayName-count-few":"دولار أمريكي","displayName-count-many":"دولار أمريكي","displayName-count-other":"دولار أمريكي","symbol":"US$","symbol-alt-narrow":"US$"},"USN":{"displayName":"دولار أمريكي (اليوم التالي)‏","symbol":"USN"},"USS":{"displayName":"دولار أمريكي (نفس اليوم)‏","symbol":"USS"},"UYI":{"displayName":"UYI","symbol":"UYI"},"UYP":{"displayName":"بيزو أوروجواي - 1975-1993","symbol":"UYP"},"UYU":{"displayName":"بيزو اوروغواي","displayName-count-zero":"بيزو اوروغواي","displayName-count-one":"بيزو اوروغواي","displayName-count-two":"بيزو اوروغواي","displayName-count-few":"بيزو اوروغواي","displayName-count-many":"بيزو اوروغواي","displayName-count-other":"بيزو اوروغواي","symbol":"UYU","symbol-alt-narrow":"UY$"},"UZS":{"displayName":"سوم أوزبكستاني","displayName-count-zero":"سوم أوزبكستاني","displayName-count-one":"سوم أوزبكستاني","displayName-count-two":"سوم أوزبكستاني","displayName-count-few":"سوم أوزبكستاني","displayName-count-many":"سوم أوزبكستاني","displayName-count-other":"سوم أوزبكستاني","symbol":"UZS"},"VEB":{"displayName":"بوليفار فنزويلي - 1871-2008","symbol":"VEB"},"VEF":{"displayName":"بوليفار فنزويلي","displayName-count-zero":"بوليفار فنزويلي","displayName-count-one":"بوليفار فنزويلي","displayName-count-two":"بوليفار فنزويلي","displayName-count-few":"بوليفار فنزويلي","displayName-count-many":"بوليفار فنزويلي","displayName-count-other":"بوليفار فنزويلي","symbol":"VEF","symbol-alt-narrow":"Bs"},"VND":{"displayName":"دونج فيتنامي","displayName-count-zero":"دونج فيتنامي","displayName-count-one":"دونج فيتنامي","displayName-count-two":"دونج فيتنامي","displayName-count-few":"دونج فيتنامي","displayName-count-many":"دونج فيتنامي","displayName-count-other":"دونج فيتنامي","symbol":"₫","symbol-alt-narrow":"₫"},"VNN":{"displayName":"VNN","symbol":"VNN"},"VUV":{"displayName":"فاتو فانواتو","displayName-count-zero":"فاتو فانواتو","displayName-count-one":"فاتو فانواتو","displayName-count-two":"فاتو فانواتو","displayName-count-few":"فاتو فانواتو","displayName-count-many":"فاتو فانواتو","displayName-count-other":"فاتو فانواتو","symbol":"VUV"},"WST":{"displayName":"تالا ساموا","displayName-count-zero":"تالا ساموا","displayName-count-one":"تالا ساموا","displayName-count-two":"تالا ساموا","displayName-count-few":"تالا ساموا","displayName-count-many":"تالا ساموا","displayName-count-other":"تالا ساموا","symbol":"WST"},"XAF":{"displayName":"فرنك وسط أفريقي","displayName-count-zero":"فرنك وسط أفريقي","displayName-count-one":"فرنك وسط أفريقي","displayName-count-two":"فرنك وسط أفريقي","displayName-count-few":"فرنك وسط أفريقي","displayName-count-many":"فرنك وسط أفريقي","displayName-count-other":"فرنك وسط أفريقي","symbol":"FCFA"},"XAG":{"displayName":"فضة","symbol":"XAG"},"XAU":{"displayName":"ذهب","symbol":"XAU"},"XBA":{"displayName":"الوحدة الأوروبية المركبة","symbol":"XBA"},"XBB":{"displayName":"الوحدة المالية الأوروبية","symbol":"XBB"},"XBC":{"displayName":"الوحدة الحسابية الأوروبية","symbol":"XBC"},"XBD":{"displayName":"(XBD)وحدة الحساب الأوروبية","symbol":"XBD"},"XCD":{"displayName":"دولار شرق الكاريبي","displayName-count-zero":"دولار شرق الكاريبي","displayName-count-one":"دولار شرق الكاريبي","displayName-count-two":"دولار شرق الكاريبي","displayName-count-few":"دولار شرق الكاريبي","displayName-count-many":"دولار شرق الكاريبي","displayName-count-other":"دولار شرق الكاريبي","symbol":"EC$","symbol-alt-narrow":"$"},"XDR":{"displayName":"حقوق السحب الخاصة","symbol":"XDR"},"XEU":{"displayName":"وحدة النقد الأوروبية","symbol":"XEU"},"XFO":{"displayName":"فرنك فرنسي ذهبي","symbol":"XFO"},"XFU":{"displayName":"(UIC)فرنك فرنسي","symbol":"XFU"},"XOF":{"displayName":"فرنك غرب أفريقي","displayName-count-zero":"فرنك غرب أفريقي","displayName-count-one":"فرنك غرب أفريقي","displayName-count-two":"فرنك غرب أفريقي","displayName-count-few":"فرنك غرب أفريقي","displayName-count-many":"فرنك غرب أفريقي","displayName-count-other":"فرنك غرب أفريقي","symbol":"CFA"},"XPD":{"displayName":"بالاديوم","symbol":"XPD"},"XPF":{"displayName":"فرنك سي إف بي","displayName-count-zero":"فرنك سي إف بي","displayName-count-one":"فرنك سي إف بي","displayName-count-two":"فرنك سي إف بي","displayName-count-few":"فرنك سي إف بي","displayName-count-many":"فرنك سي إف بي","displayName-count-other":"فرنك سي إف بي","symbol":"CFPF"},"XPT":{"displayName":"البلاتين","symbol":"XPT"},"XRE":{"displayName":"XRE","symbol":"XRE"},"XSU":{"displayName":"XSU","symbol":"XSU"},"XTS":{"displayName":"كود اختبار العملة","symbol":"XTS"},"XUA":{"displayName":"XUA","symbol":"XUA"},"XXX":{"displayName":"عملة غير معروفة","displayName-count-zero":"(عملة غير معروفة)","displayName-count-one":"(عملة غير معروفة)","displayName-count-two":"(عملة غير معروفة)","displayName-count-few":"(عملة غير معروفة)","displayName-count-many":"(عملة غير معروفة)","displayName-count-other":"(عملة غير معروفة)","symbol":"***"},"YDD":{"displayName":"دينار يمني","symbol":"YDD"},"YER":{"displayName":"ريال يمني","displayName-count-zero":"ريال يمني","displayName-count-one":"ريال يمني","displayName-count-two":"ريال يمني","displayName-count-few":"ريال يمني","displayName-count-many":"ريال يمني","displayName-count-other":"ريال يمني","symbol":"ر.ي.‏"},"YUD":{"displayName":"دينار يوغسلافي","symbol":"YUD"},"YUM":{"displayName":"YUM","symbol":"YUM"},"YUN":{"displayName":"دينار يوغسلافي قابل للتحويل","symbol":"YUN"},"YUR":{"displayName":"YUR","symbol":"YUR"},"ZAL":{"displayName":"راند جنوب أفريقيا -مالي","symbol":"ZAL"},"ZAR":{"displayName":"راند جنوب أفريقيا","displayName-count-zero":"راند جنوب أفريقيا","displayName-count-one":"راند جنوب أفريقيا","displayName-count-two":"راند جنوب أفريقيا","displayName-count-few":"راند جنوب أفريقيا","displayName-count-many":"راند جنوب أفريقيا","displayName-count-other":"راند جنوب أفريقيا","symbol":"ZAR","symbol-alt-narrow":"R"},"ZMK":{"displayName":"كواشا زامبي - 1968-2012","displayName-count-zero":"كواشا زامبي - 1968-2012","displayName-count-one":"كواشا زامبي - 1968-2012","displayName-count-two":"كواشا زامبي - 1968-2012","displayName-count-few":"كواشا زامبي - 1968-2012","displayName-count-many":"كواشا زامبي - 1968-2012","displayName-count-other":"كواشا زامبي - 1968-2012","symbol":"ZMK"},"ZMW":{"displayName":"كواشا زامبي","displayName-count-zero":"كواشا زامبي","displayName-count-one":"كواشا زامبي","displayName-count-two":"كواشا زامبي","displayName-count-few":"كواشا زامبي","displayName-count-many":"كواشا زامبي","displayName-count-other":"كواشا زامبي","symbol":"ZMW","symbol-alt-narrow":"ZK"},"ZRN":{"displayName":"زائير زائيري جديد","symbol":"ZRN"},"ZRZ":{"displayName":"زائير زائيري","symbol":"ZRZ"},"ZWD":{"displayName":"دولار زمبابوي","symbol":"ZWD"},"ZWL":{"displayName":"دولار زمبابوي 2009","symbol":"ZWL"},"ZWR":{"displayName":"ZWR","symbol":"ZWR"}},"defaultNumberingSystem":"arab","otherNumberingSystems":{"native":"arab"},"minimumGroupingDigits":"1","symbols-numberSystem-arab":{"decimal":"٫","group":"٬","list":"؛","percentSign":"٪؜","plusSign":"؜+","minusSign":"؜-","exponential":"اس","superscriptingExponent":"×","perMille":"؉","infinity":"∞","nan":"ليس رقم","timeSeparator":":"},"symbols-numberSystem-latn":{"decimal":".","group":",","list":";","percentSign":"‎%‎","plusSign":"‎+","minusSign":"‎-","exponential":"E","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"ليس رقمًا","timeSeparator":":"},"decimalFormats-numberSystem-arab":{"standard":"#,##0.###","long":{"decimalFormat":{"1000-count-zero":"0 ألف","1000-count-one":"0 ألف","1000-count-two":"0 ألف","1000-count-few":"0 آلاف","1000-count-many":"0 ألف","1000-count-other":"0 ألف","10000-count-zero":"00 ألف","10000-count-one":"00 ألف","10000-count-two":"00 ألف","10000-count-few":"00 ألف","10000-count-many":"00 ألف","10000-count-other":"00 ألف","100000-count-zero":"000 ألف","100000-count-one":"000 ألف","100000-count-two":"000 ألف","100000-count-few":"000 ألف","100000-count-many":"000 ألف","100000-count-other":"000 ألف","1000000-count-zero":"0 مليون","1000000-count-one":"0 مليون","1000000-count-two":"0 مليون","1000000-count-few":"0 ملايين","1000000-count-many":"0 مليون","1000000-count-other":"0 مليون","10000000-count-zero":"00 مليون","10000000-count-one":"00 مليون","10000000-count-two":"00 مليون","10000000-count-few":"00 ملايين","10000000-count-many":"00 مليون","10000000-count-other":"00 مليون","100000000-count-zero":"000 مليون","100000000-count-one":"000 مليون","100000000-count-two":"000 مليون","100000000-count-few":"000 مليون","100000000-count-many":"000 مليون","100000000-count-other":"000 مليون","1000000000-count-zero":"0 مليار","1000000000-count-one":"0 مليار","1000000000-count-two":"0 مليار","1000000000-count-few":"0 مليار","1000000000-count-many":"0 مليار","1000000000-count-other":"0 مليار","10000000000-count-zero":"00 مليار","10000000000-count-one":"00 مليار","10000000000-count-two":"00 مليار","10000000000-count-few":"00 مليار","10000000000-count-many":"00 مليار","10000000000-count-other":"00 مليار","100000000000-count-zero":"000 مليار","100000000000-count-one":"000 مليار","100000000000-count-two":"000 مليار","100000000000-count-few":"000 مليار","100000000000-count-many":"000 مليار","100000000000-count-other":"000 مليار","1000000000000-count-zero":"0 ترليون","1000000000000-count-one":"0 ترليون","1000000000000-count-two":"0 ترليون","1000000000000-count-few":"0 ترليون","1000000000000-count-many":"0 ترليون","1000000000000-count-other":"0 ترليون","10000000000000-count-zero":"00 ترليون","10000000000000-count-one":"00 ترليون","10000000000000-count-two":"00 ترليون","10000000000000-count-few":"00 ترليون","10000000000000-count-many":"00 ترليون","10000000000000-count-other":"00 ترليون","100000000000000-count-zero":"000 ترليون","100000000000000-count-one":"000 ترليون","100000000000000-count-two":"000 ترليون","100000000000000-count-few":"000 ترليون","100000000000000-count-many":"000 ترليون","100000000000000-count-other":"000 ترليون"}},"short":{"decimalFormat":{"1000-count-zero":"0 ألف","1000-count-one":"0 ألف","1000-count-two":"0 ألف","1000-count-few":"0 آلاف","1000-count-many":"0 ألف","1000-count-other":"0 ألف","10000-count-zero":"00 ألف","10000-count-one":"00 ألف","10000-count-two":"00 ألف","10000-count-few":"00 ألف","10000-count-many":"00 ألف","10000-count-other":"00 ألف","100000-count-zero":"000 ألف","100000-count-one":"000 ألف","100000-count-two":"000 ألف","100000-count-few":"000 ألف","100000-count-many":"000 ألف","100000-count-other":"000 ألف","1000000-count-zero":"0 مليون","1000000-count-one":"0 مليون","1000000-count-two":"0 مليون","1000000-count-few":"0 مليون","1000000-count-many":"0 مليون","1000000-count-other":"0 مليون","10000000-count-zero":"00 مليون","10000000-count-one":"00 مليون","10000000-count-two":"00 مليون","10000000-count-few":"00 مليون","10000000-count-many":"00 مليون","10000000-count-other":"00 مليون","100000000-count-zero":"000 مليون","100000000-count-one":"000 مليون","100000000-count-two":"000 مليون","100000000-count-few":"000 مليون","100000000-count-many":"000 مليون","100000000-count-other":"000 مليون","1000000000-count-zero":"0 مليار","1000000000-count-one":"0 مليار","1000000000-count-two":"0 مليار","1000000000-count-few":"0 مليار","1000000000-count-many":"0 مليار","1000000000-count-other":"0 مليار","10000000000-count-zero":"00 مليار","10000000000-count-one":"00 مليار","10000000000-count-two":"00 مليار","10000000000-count-few":"00 مليار","10000000000-count-many":"00 مليار","10000000000-count-other":"00 مليار","100000000000-count-zero":"000 مليار","100000000000-count-one":"000 مليار","100000000000-count-two":"000 مليار","100000000000-count-few":"000 مليار","100000000000-count-many":"000 مليار","100000000000-count-other":"000 مليار","1000000000000-count-zero":"0 ترليون","1000000000000-count-one":"0 ترليون","1000000000000-count-two":"0 ترليون","1000000000000-count-few":"0 ترليون","1000000000000-count-many":"0 ترليون","1000000000000-count-other":"0 ترليون","10000000000000-count-zero":"00 ترليون","10000000000000-count-one":"00 ترليون","10000000000000-count-two":"00 ترليون","10000000000000-count-few":"00 ترليون","10000000000000-count-many":"00 ترليون","10000000000000-count-other":"00 ترليون","100000000000000-count-zero":"000 ترليون","100000000000000-count-one":"000 ترليون","100000000000000-count-two":"000 ترليون","100000000000000-count-few":"000 ترليون","100000000000000-count-many":"000 ترليون","100000000000000-count-other":"000 ترليون"}}},"decimalFormats-numberSystem-latn":{"standard":"#,##0.###","long":{"decimalFormat":{"1000-count-zero":"0 ألف","1000-count-one":"0 ألف","1000-count-two":"0 ألف","1000-count-few":"0 آلاف","1000-count-many":"0 ألف","1000-count-other":"0 ألف","10000-count-zero":"00 ألف","10000-count-one":"00 ألف","10000-count-two":"00 ألف","10000-count-few":"00 ألف","10000-count-many":"00 ألف","10000-count-other":"00 ألف","100000-count-zero":"000 ألف","100000-count-one":"000 ألف","100000-count-two":"000 ألف","100000-count-few":"000 ألف","100000-count-many":"000 ألف","100000-count-other":"000 ألف","1000000-count-zero":"0 مليون","1000000-count-one":"0 مليون","1000000-count-two":"0 مليون","1000000-count-few":"0 ملايين","1000000-count-many":"0 مليون","1000000-count-other":"0 مليون","10000000-count-zero":"00 مليون","10000000-count-one":"00 مليون","10000000-count-two":"00 مليون","10000000-count-few":"00 ملايين","10000000-count-many":"00 مليون","10000000-count-other":"00 مليون","100000000-count-zero":"000 مليون","100000000-count-one":"000 مليون","100000000-count-two":"000 مليون","100000000-count-few":"000 مليون","100000000-count-many":"000 مليون","100000000-count-other":"000 مليون","1000000000-count-zero":"0 مليار","1000000000-count-one":"0 مليار","1000000000-count-two":"0 مليار","1000000000-count-few":"0 مليار","1000000000-count-many":"0 مليار","1000000000-count-other":"0 مليار","10000000000-count-zero":"00 مليار","10000000000-count-one":"00 مليار","10000000000-count-two":"00 مليار","10000000000-count-few":"00 مليار","10000000000-count-many":"00 مليار","10000000000-count-other":"00 مليار","100000000000-count-zero":"000 مليار","100000000000-count-one":"000 مليار","100000000000-count-two":"000 مليار","100000000000-count-few":"000 مليار","100000000000-count-many":"000 مليار","100000000000-count-other":"000 مليار","1000000000000-count-zero":"0 ترليون","1000000000000-count-one":"0 ترليون","1000000000000-count-two":"0 ترليون","1000000000000-count-few":"0 ترليون","1000000000000-count-many":"0 ترليون","1000000000000-count-other":"0 ترليون","10000000000000-count-zero":"00 ترليون","10000000000000-count-one":"00 ترليون","10000000000000-count-two":"00 ترليون","10000000000000-count-few":"00 ترليون","10000000000000-count-many":"00 ترليون","10000000000000-count-other":"00 ترليون","100000000000000-count-zero":"000 ترليون","100000000000000-count-one":"000 ترليون","100000000000000-count-two":"000 ترليون","100000000000000-count-few":"000 ترليون","100000000000000-count-many":"000 ترليون","100000000000000-count-other":"000 ترليون"}},"short":{"decimalFormat":{"1000-count-zero":"0 ألف","1000-count-one":"0 ألف","1000-count-two":"0 ألف","1000-count-few":"0 آلاف","1000-count-many":"0 ألف","1000-count-other":"0 ألف","10000-count-zero":"00 ألف","10000-count-one":"00 ألف","10000-count-two":"00 ألف","10000-count-few":"00 ألف","10000-count-many":"00 ألف","10000-count-other":"00 ألف","100000-count-zero":"000 ألف","100000-count-one":"000 ألف","100000-count-two":"000 ألف","100000-count-few":"000 ألف","100000-count-many":"000 ألف","100000-count-other":"000 ألف","1000000-count-zero":"0 مليون","1000000-count-one":"0 مليون","1000000-count-two":"0 مليون","1000000-count-few":"0 مليون","1000000-count-many":"0 مليون","1000000-count-other":"0 مليون","10000000-count-zero":"00 مليون","10000000-count-one":"00 مليون","10000000-count-two":"00 مليون","10000000-count-few":"00 مليون","10000000-count-many":"00 مليون","10000000-count-other":"00 مليون","100000000-count-zero":"000 مليون","100000000-count-one":"000 مليون","100000000-count-two":"000 مليون","100000000-count-few":"000 مليون","100000000-count-many":"000 مليون","100000000-count-other":"000 مليون","1000000000-count-zero":"0 مليار","1000000000-count-one":"0 مليار","1000000000-count-two":"0 مليار","1000000000-count-few":"0 مليار","1000000000-count-many":"0 مليار","1000000000-count-other":"0 مليار","10000000000-count-zero":"00 مليار","10000000000-count-one":"00 مليار","10000000000-count-two":"00 مليار","10000000000-count-few":"00 مليار","10000000000-count-many":"00 مليار","10000000000-count-other":"00 مليار","100000000000-count-zero":"000 مليار","100000000000-count-one":"000 مليار","100000000000-count-two":"000 مليار","100000000000-count-few":"000 مليار","100000000000-count-many":"000 مليار","100000000000-count-other":"000 مليار","1000000000000-count-zero":"0 ترليون","1000000000000-count-one":"0 ترليون","1000000000000-count-two":"0 ترليون","1000000000000-count-few":"0 ترليون","1000000000000-count-many":"0 ترليون","1000000000000-count-other":"0 ترليون","10000000000000-count-zero":"00 ترليون","10000000000000-count-one":"00 ترليون","10000000000000-count-two":"00 ترليون","10000000000000-count-few":"00 ترليون","10000000000000-count-many":"00 ترليون","10000000000000-count-other":"00 ترليون","100000000000000-count-zero":"000 ترليون","100000000000000-count-one":"000 ترليون","100000000000000-count-two":"000 ترليون","100000000000000-count-few":"000 ترليون","100000000000000-count-many":"000 ترليون","100000000000000-count-other":"000 ترليون"}}},"scientificFormats-numberSystem-arab":{"standard":"#E0"},"scientificFormats-numberSystem-latn":{"standard":"#E0"},"percentFormats-numberSystem-arab":{"standard":"#,##0 %"},"percentFormats-numberSystem-latn":{"standard":"#,##0%"},"currencyFormats-numberSystem-arab":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"#,##0.00 ¤","accounting":"#,##0.00 ¤","unitPattern-count-zero":"{0} {1}","unitPattern-count-one":"{0} {1}","unitPattern-count-two":"{0} {1}","unitPattern-count-few":"{0} {1}","unitPattern-count-many":"{0} {1}","unitPattern-count-other":"{0} {1}"},"currencyFormats-numberSystem-latn":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"¤ #,##0.00","accounting":"¤#,##0.00;(¤#,##0.00)","short":{"standard":{"1000-count-zero":"¤ 0 ألف","1000-count-one":"¤ 0 ألف","1000-count-two":"¤ 0 ألف","1000-count-few":"¤ 0 ألف","1000-count-many":"¤ 0 ألف","1000-count-other":"¤ 0 ألف","10000-count-zero":"¤ 00 ألف","10000-count-one":"¤ 00 ألف","10000-count-two":"¤ 00 ألف","10000-count-few":"¤ 00 ألف","10000-count-many":"¤ 00 ألف","10000-count-other":"¤ 00 ألف","100000-count-zero":"¤ 000 ألف","100000-count-one":"¤ 000 ألف","100000-count-two":"¤ 000 ألف","100000-count-few":"¤ 000 ألف","100000-count-many":"¤ 000 ألف","100000-count-other":"¤ 000 ألف","1000000-count-zero":"¤ 0 مليون","1000000-count-one":"¤ 0 مليون","1000000-count-two":"¤ 0 مليون","1000000-count-few":"¤ 0 مليون","1000000-count-many":"¤ 0 مليون","1000000-count-other":"¤ 0 مليون","10000000-count-zero":"¤ 00 مليون","10000000-count-one":"¤ 00 مليون","10000000-count-two":"¤ 00 مليون","10000000-count-few":"¤ 00 مليون","10000000-count-many":"¤ 00 مليون","10000000-count-other":"¤ 00 مليون","100000000-count-zero":"¤ 000 مليون","100000000-count-one":"¤ 000 مليون","100000000-count-two":"¤ 000 مليون","100000000-count-few":"¤ 000 مليون","100000000-count-many":"¤ 000 مليون","100000000-count-other":"¤ 000 مليون","1000000000-count-zero":"¤ 0 مليار","1000000000-count-one":"¤ 0 مليار","1000000000-count-two":"¤ 0 مليار","1000000000-count-few":"¤ 0 مليار","1000000000-count-many":"¤ 0 مليار","1000000000-count-other":"¤ 0 مليار","10000000000-count-zero":"¤ 00 مليار","10000000000-count-one":"¤ 00 مليار","10000000000-count-two":"¤ 00 مليار","10000000000-count-few":"¤ 00 مليار","10000000000-count-many":"¤ 00 مليار","10000000000-count-other":"¤ 00 مليار","100000000000-count-zero":"¤ 000 مليار","100000000000-count-one":"¤ 000 مليار","100000000000-count-two":"¤ 000 مليار","100000000000-count-few":"¤ 000 مليار","100000000000-count-many":"¤ 000 مليار","100000000000-count-other":"¤ 000 مليار","1000000000000-count-zero":"¤ 0 ترليون","1000000000000-count-one":"¤ 0 ترليون","1000000000000-count-two":"¤ 0 ترليون","1000000000000-count-few":"¤ 0 ترليون","1000000000000-count-many":"¤ 0 ترليون","1000000000000-count-other":"¤ 0 ترليون","10000000000000-count-zero":"¤ 00 ترليون","10000000000000-count-one":"¤ 00 ترليون","10000000000000-count-two":"¤ 00 ترليون","10000000000000-count-few":"¤ 00 ترليون","10000000000000-count-many":"¤ 00 ترليون","10000000000000-count-other":"¤ 00 ترليون","100000000000000-count-zero":"¤ 000 ترليون","100000000000000-count-one":"¤ 000 ترليون","100000000000000-count-two":"¤ 000 ترليون","100000000000000-count-few":"¤ 000 ترليون","100000000000000-count-many":"¤ 000 ترليون","100000000000000-count-other":"¤ 000 ترليون"}},"unitPattern-count-zero":"{0} {1}","unitPattern-count-one":"{0} {1}","unitPattern-count-two":"{0} {1}","unitPattern-count-few":"{0} {1}","unitPattern-count-many":"{0} {1}","unitPattern-count-other":"{0} {1}"},"miscPatterns-numberSystem-arab":{"atLeast":"+{0}","range":"{0}–{1}"},"miscPatterns-numberSystem-latn":{"atLeast":"+{0}","range":"{0}–{1}"},"minimalPairs":{"pluralMinimalPairs-count-zero":"{0} كتاب","pluralMinimalPairs-count-one":"ولد واحد حضر","pluralMinimalPairs-count-two":"ولدان حضرا","pluralMinimalPairs-count-few":"{0} أولاد حضروا","pluralMinimalPairs-count-many":"{0} ولدًا حضروا","pluralMinimalPairs-count-other":"{0} ولد حضروا","other":"اتجه إلى المنعطف الـ {0} يمينًا."}}},"bn":{"identity":{"version":{"_number":"$Revision: 13686 $","_cldrVersion":"32"},"language":"bn"},"dates":{"calendars":{"gregorian":{"months":{"format":{"abbreviated":{"1":"জানু","2":"ফেব","3":"মার্চ","4":"এপ্রিল","5":"মে","6":"জুন","7":"জুলাই","8":"আগস্ট","9":"সেপ্টেম্বর","10":"অক্টোবর","11":"নভেম্বর","12":"ডিসেম্বর"},"narrow":{"1":"জা","2":"ফে","3":"মা","4":"এ","5":"মে","6":"জুন","7":"জু","8":"আ","9":"সে","10":"অ","11":"ন","12":"ডি"},"wide":{"1":"জানুয়ারী","2":"ফেব্রুয়ারী","3":"মার্চ","4":"এপ্রিল","5":"মে","6":"জুন","7":"জুলাই","8":"আগস্ট","9":"সেপ্টেম্বর","10":"অক্টোবর","11":"নভেম্বর","12":"ডিসেম্বর"}},"stand-alone":{"abbreviated":{"1":"জানুয়ারী","2":"ফেব্রুয়ারী","3":"মার্চ","4":"এপ্রিল","5":"মে","6":"জুন","7":"জুলাই","8":"আগস্ট","9":"সেপ্টেম্বর","10":"অক্টোবর","11":"নভেম্বর","12":"ডিসেম্বর"},"narrow":{"1":"জা","2":"ফে","3":"মা","4":"এ","5":"মে","6":"জুন","7":"জু","8":"আ","9":"সে","10":"অ","11":"ন","12":"ডি"},"wide":{"1":"জানুয়ারী","2":"ফেব্রুয়ারী","3":"মার্চ","4":"এপ্রিল","5":"মে","6":"জুন","7":"জুলাই","8":"আগস্ট","9":"সেপ্টেম্বর","10":"অক্টোবর","11":"নভেম্বর","12":"ডিসেম্বর"}}},"days":{"format":{"abbreviated":{"sun":"রবি","mon":"সোম","tue":"মঙ্গল","wed":"বুধ","thu":"বৃহস্পতি","fri":"শুক্র","sat":"শনি"},"narrow":{"sun":"র","mon":"সো","tue":"ম","wed":"বু","thu":"বৃ","fri":"শু","sat":"শ"},"short":{"sun":"রঃ","mon":"সোঃ","tue":"মঃ","wed":"বুঃ","thu":"বৃঃ","fri":"শুঃ","sat":"শোঃ"},"wide":{"sun":"রবিবার","mon":"সোমবার","tue":"মঙ্গলবার","wed":"বুধবার","thu":"বৃহস্পতিবার","fri":"শুক্রবার","sat":"শনিবার"}},"stand-alone":{"abbreviated":{"sun":"রবি","mon":"সোম","tue":"মঙ্গল","wed":"বুধ","thu":"বৃহস্পতি","fri":"শুক্র","sat":"শনি"},"narrow":{"sun":"র","mon":"সো","tue":"ম","wed":"বু","thu":"বৃ","fri":"শু","sat":"শ"},"short":{"sun":"রঃ","mon":"সোঃ","tue":"মঃ","wed":"বুঃ","thu":"বৃঃ","fri":"শুঃ","sat":"শনি"},"wide":{"sun":"রবিবার","mon":"সোমবার","tue":"মঙ্গলবার","wed":"বুধবার","thu":"বৃহষ্পতিবার","fri":"শুক্রবার","sat":"শনিবার"}}},"quarters":{"format":{"abbreviated":{"1":"Q1","2":"Q2","3":"Q3","4":"Q4"},"narrow":{"1":"১","2":"২","3":"৩","4":"৪"},"wide":{"1":"ত্রৈমাসিক","2":"দ্বিতীয় ত্রৈমাসিক","3":"তৃতীয় ত্রৈমাসিক","4":"চতুর্থ ত্রৈমাসিক"}},"stand-alone":{"abbreviated":{"1":"Q1","2":"Q2","3":"Q3","4":"Q4"},"narrow":{"1":"১","2":"২","3":"৩","4":"৪"},"wide":{"1":"ত্রৈমাসিক","2":"দ্বিতীয় ত্রৈমাসিক","3":"তৃতীয় ত্রৈমাসিক","4":"চতুর্থ ত্রৈমাসিক"}}},"dayPeriods":{"format":{"abbreviated":{"am":"AM","pm":"PM","morning1":"ভোর","morning2":"সকাল","afternoon1":"দুপুর","afternoon2":"বিকাল","evening1":"সন্ধ্যা","night1":"রাত্রি"},"narrow":{"am":"AM","pm":"PM","morning1":"ভোর","morning2":"সকাল","afternoon1":"দুপুর","afternoon2":"বিকাল","evening1":"সন্ধ্যা","night1":"রাত্রি"},"wide":{"am":"AM","pm":"PM","morning1":"ভোর","morning2":"সকাল","afternoon1":"দুপুর","afternoon2":"বিকাল","evening1":"সন্ধ্যা","night1":"রাত্রিতে"}},"stand-alone":{"abbreviated":{"am":"AM","pm":"PM","morning1":"ভোর","morning2":"সকাল","afternoon1":"দুপুর","afternoon2":"বিকাল","evening1":"সন্ধ্যা","night1":"রাত্রি"},"narrow":{"am":"AM","pm":"PM","morning1":"ভোর","morning2":"সকাল","afternoon1":"দুপুর","afternoon2":"বিকাল","evening1":"সন্ধ্যা","night1":"রাত্রি"},"wide":{"am":"AM","pm":"PM","morning1":"ভোর","morning2":"সকাল","afternoon1":"দুপুর","afternoon2":"বিকাল","evening1":"সন্ধ্যা","night1":"রাত্রি"}}},"eras":{"eraNames":{"0":"খ্রিস্টপূর্ব","1":"খ্রীষ্টাব্দ","0-alt-variant":"খ্রিষ্টপূর্বাব্দ","1-alt-variant":"খ্রিষ্টাব্দ"},"eraAbbr":{"0":"খ্রিস্টপূর্ব","1":"খৃষ্টাব্দ","0-alt-variant":"খ্রিষ্টপূর্বাব্দ","1-alt-variant":"খ্রিষ্টাব্দ"},"eraNarrow":{"0":"খ্রিস্টপূর্ব","1":"খৃষ্টাব্দ","0-alt-variant":"খ্রিষ্টপূর্বাব্দ","1-alt-variant":"খ্রিষ্টাব্দ"}},"dateFormats":{"full":"EEEE, d MMMM, y","long":"d MMMM, y","medium":"d MMM, y","short":"d/M/yy"},"timeFormats":{"full":"h:mm:ss a zzzz","long":"h:mm:ss a z","medium":"h:mm:ss a","short":"h:mm a"},"dateTimeFormats":{"full":"{1} {0}","long":"{1} {0}","medium":"{1} {0}","short":"{1} {0}","availableFormats":{"Bh":"h B","Bhm":"h:mm B","Bhms":"h:mm:ss B","d":"d","E":"ccc","EBhm":"E h:mm B","EBhms":"E h:mm:ss B","Ed":"d E","Ehm":"E h:mm a","EHm":"E HH:mm","Ehms":"E h:mm:ss a","EHms":"E HH:mm:ss","Gy":"y G","GyMMM":"MMM y G","GyMMMd":"d MMM, y G","GyMMMEd":"E, d MMM, y G","h":"h a","H":"HH","hm":"h:mm a","Hm":"HH:mm","hms":"h:mm:ss a","Hms":"HH:mm:ss","hmsv":"h:mm:ss a v","Hmsv":"HH:mm:ss v","hmv":"h:mm a v","Hmv":"HH:mm v","M":"L","Md":"d/M","MEd":"E, d-M","MMdd":"dd-MM","MMM":"LLL","MMMd":"d MMM","MMMEd":"E d MMM","MMMMd":"d MMMM","MMMMEd":"E d MMMM","MMMMW-count-one":"MMM এর Wয় সপ্তাহ","MMMMW-count-other":"MMM এর Wয় সপ্তাহ","ms":"mm:ss","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"E, d/M/y","yMM":"MM-y","yMMM":"MMM y","yMMMd":"d MMM, y","yMMMEd":"E, d MMM, y","yMMMM":"MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","yw-count-one":"Y এর wতম সপ্তাহ","yw-count-other":"Y এর wতম সপ্তাহ"},"appendItems":{"Day":"{0} ({2}: {1})","Day-Of-Week":"{0} {1}","Era":"{1} {0}","Hour":"{0} ({2}: {1})","Minute":"{0} ({2}: {1})","Month":"{0} ({2}: {1})","Quarter":"{0} ({2}: {1})","Second":"{0} ({2}: {1})","Timezone":"{0} {1}","Week":"{0} ({2}: {1})","Year":"{1} {0}"},"intervalFormats":{"intervalFormatFallback":"{0} – {1}","d":{"d":"d–d"},"h":{"a":"h a – h a","h":"h–h a"},"H":{"H":"HH–HH"},"hm":{"a":"h:mm a – h:mm a","h":"h:mm–h:mm a","m":"h:mm–h:mm a"},"Hm":{"H":"HH:mm–HH:mm","m":"HH:mm–HH:mm"},"hmv":{"a":"h:mm a – h:mm a v","h":"h:mm–h:mm a v","m":"h:mm–h:mm a v"},"Hmv":{"H":"HH:mm–HH:mm v","m":"HH:mm–HH:mm v"},"hv":{"a":"h a – h a v","h":"h–h a v"},"Hv":{"H":"HH–HH v"},"M":{"M":"M–M"},"Md":{"d":"d/M – d/M","M":"d/M – d/M"},"MEd":{"d":"E, d/M – E, d/M","M":"E, d/M – E, d/M"},"MMM":{"M":"MMM – MMM"},"MMMd":{"d":"d–d MMM","M":"d MMM – d MMM"},"MMMEd":{"d":"E, d MMM – E, d MMM","M":"E, d MMM – E, d MMM"},"y":{"y":"y–y"},"yM":{"M":"M/y – M/y","y":"M/y – M/y"},"yMd":{"d":"d/M/y – d/M/y","M":"d/M/y – d/M/y","y":"d/M/y – d/M/y"},"yMEd":{"d":"E, d/M/y – E, d/M/y","M":"E, d/M/y – E, d/M/y","y":"E, d/M/y – E, d/M/y"},"yMMM":{"M":"MMM–MMM y","y":"MMM y – MMM y"},"yMMMd":{"d":"d–d MMM, y","M":"d MMM – d MMM, y","y":"d MMM, y – d MMM, y"},"yMMMEd":{"d":"E, d MMM – E, d MMM, y","M":"E, d MMM – E, d MMM, y","y":"E, d MMM, y – E, d MMM, y"},"yMMMM":{"M":"MMMM–MMMM y","y":"MMMM y – MMMM y"}}}}},"fields":{"era":{"displayName":"যুগ"},"era-short":{"displayName":"যুগ"},"era-narrow":{"displayName":"যুগ"},"year":{"displayName":"বছর","relative-type--1":"গত বছর","relative-type-0":"এই বছর","relative-type-1":"পরের বছর","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} বছরে","relativeTimePattern-count-other":"{0} বছরে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} বছর পূর্বে","relativeTimePattern-count-other":"{0} বছর পূর্বে"}},"year-short":{"displayName":"বছর","relative-type--1":"গত বছর","relative-type-0":"এই বছর","relative-type-1":"পরের বছর","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} বছরে","relativeTimePattern-count-other":"{0} বছরে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} বছর পূর্বে","relativeTimePattern-count-other":"{0} বছর পূর্বে"}},"year-narrow":{"displayName":"বছর","relative-type--1":"গত বছর","relative-type-0":"এই বছর","relative-type-1":"পরের বছর","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} বছরে","relativeTimePattern-count-other":"{0} বছরে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} বছর পূর্বে","relativeTimePattern-count-other":"{0} বছর পূর্বে"}},"quarter":{"displayName":"ত্রৈমাসিক","relative-type--1":"গত ত্রৈমাসিক","relative-type-0":"এই ত্রৈমাসিক","relative-type-1":"পরের ত্রৈমাসিক","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} ত্রৈমাসিকে","relativeTimePattern-count-other":"{0} ত্রৈমাসিকে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ত্রৈমাসিক আগে","relativeTimePattern-count-other":"{0} ত্রৈমাসিক আগে"}},"quarter-short":{"displayName":"ত্রৈমাসিক","relative-type--1":"গত ত্রৈমাসিক","relative-type-0":"এই ত্রৈমাসিক","relative-type-1":"পরের ত্রৈমাসিক","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} ত্রৈমাসিকে","relativeTimePattern-count-other":"{0} ত্রৈমাসিকে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ত্রৈমাসিক আগে","relativeTimePattern-count-other":"{0} ত্রৈমাসিক আগে"}},"quarter-narrow":{"displayName":"ত্রৈমাসিক","relative-type--1":"গত ত্রৈমাসিক","relative-type-0":"এই ত্রৈমাসিক","relative-type-1":"পরের ত্রৈমাসিক","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} ত্রৈমাসিকে","relativeTimePattern-count-other":"{0} ত্রৈমাসিকে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ত্রৈমাসিক আগে","relativeTimePattern-count-other":"{0} ত্রৈমাসিক আগে"}},"month":{"displayName":"মাস","relative-type--1":"গত মাস","relative-type-0":"এই মাস","relative-type-1":"পরের মাস","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} মাসে","relativeTimePattern-count-other":"{0} মাসে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} মাস আগে","relativeTimePattern-count-other":"{0} মাস আগে"}},"month-short":{"displayName":"মাস","relative-type--1":"গত মাস","relative-type-0":"এই মাস","relative-type-1":"পরের মাস","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} মাসে","relativeTimePattern-count-other":"{0} মাসে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} মাস আগে","relativeTimePattern-count-other":"{0} মাস আগে"}},"month-narrow":{"displayName":"মাস","relative-type--1":"গত মাস","relative-type-0":"এই মাস","relative-type-1":"পরের মাস","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} মাসে","relativeTimePattern-count-other":"{0} মাসে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} মাস আগে","relativeTimePattern-count-other":"{0} মাস আগে"}},"week":{"displayName":"সপ্তাহ","relative-type--1":"গত সপ্তাহ","relative-type-0":"এই সপ্তাহ","relative-type-1":"পরের সপ্তাহ","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} সপ্তাহে","relativeTimePattern-count-other":"{0} সপ্তাহে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} সপ্তাহ আগে","relativeTimePattern-count-other":"{0} সপ্তাহ আগে"},"relativePeriod":"{0} তম সপ্তাহে"},"week-short":{"displayName":"সপ্তাহ","relative-type--1":"গত সপ্তাহ","relative-type-0":"এই সপ্তাহ","relative-type-1":"পরের সপ্তাহ","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} সপ্তাহে","relativeTimePattern-count-other":"{0} সপ্তাহে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} সপ্তাহ আগে","relativeTimePattern-count-other":"{0} সপ্তাহ আগে"},"relativePeriod":"{0} তম সপ্তাহে"},"week-narrow":{"displayName":"সপ্তাহ","relative-type--1":"গত সপ্তাহ","relative-type-0":"এই সপ্তাহ","relative-type-1":"পরের সপ্তাহ","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} সপ্তাহে","relativeTimePattern-count-other":"{0} সপ্তাহে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} সপ্তাহ আগে","relativeTimePattern-count-other":"{0} সপ্তাহ আগে"},"relativePeriod":"{0} এর সপ্তাহে"},"weekOfMonth":{"displayName":"মাসের সপ্তাহ"},"weekOfMonth-short":{"displayName":"মাসের সপ্তাহ"},"weekOfMonth-narrow":{"displayName":"মাসের সপ্তাহ"},"day":{"displayName":"দিন","relative-type--2":"গত পরশু","relative-type--1":"গতকাল","relative-type-0":"আজ","relative-type-1":"আগামীকাল","relative-type-2":"আগামী পরশু","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} দিনের মধ্যে","relativeTimePattern-count-other":"{0} দিনের মধ্যে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} দিন আগে","relativeTimePattern-count-other":"{0} দিন আগে"}},"day-short":{"displayName":"দিন","relative-type--2":"গত পরশু","relative-type--1":"গতকাল","relative-type-0":"আজ","relative-type-1":"আগামীকাল","relative-type-2":"আগামী পরশু","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} দিনের মধ্যে","relativeTimePattern-count-other":"{0} দিনের মধ্যে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} দিন আগে","relativeTimePattern-count-other":"{0} দিন আগে"}},"day-narrow":{"displayName":"দিন","relative-type--2":"গত পরশু","relative-type--1":"গতকাল","relative-type-0":"আজ","relative-type-1":"আগামীকাল","relative-type-2":"আগামী পরশু","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} দিনের মধ্যে","relativeTimePattern-count-other":"{0} দিনের মধ্যে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} দিন আগে","relativeTimePattern-count-other":"{0} দিন আগে"}},"dayOfYear":{"displayName":"বছরের দিন"},"dayOfYear-short":{"displayName":"বছরের দিন"},"dayOfYear-narrow":{"displayName":"বছরের দিন"},"weekday":{"displayName":"সপ্তাহের দিন"},"weekday-short":{"displayName":"সপ্তাহের দিন"},"weekday-narrow":{"displayName":"সপ্তাহের দিন"},"weekdayOfMonth":{"displayName":"মাসের কার্য দিবস"},"weekdayOfMonth-short":{"displayName":"মাসের কার্য দিবস"},"weekdayOfMonth-narrow":{"displayName":"মাসের কার্য দিবস"},"sun":{"relative-type--1":"গত রবিবার","relative-type-0":"এই রবিবার","relative-type-1":"পরের রবিবার","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} রবিবারেতে","relativeTimePattern-count-other":"{0} রবিবারেতে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} রবিবার আগে","relativeTimePattern-count-other":"{0} রবিবার আগে"}},"sun-short":{"relative-type--1":"গত রবিবার","relative-type-0":"এই রবিবার","relative-type-1":"পরের রবিবার","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} রবিবারেতে","relativeTimePattern-count-other":"{0} রবিবারেতে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} রবিবার আগে","relativeTimePattern-count-other":"{0} রবিবার আগে"}},"sun-narrow":{"relative-type--1":"গত রবিবার","relative-type-0":"এই রবিবার","relative-type-1":"পরের রবিবার","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} রবিবারেতে","relativeTimePattern-count-other":"{0} রবিবারেতে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} রবিবার আগে","relativeTimePattern-count-other":"{0} রবিবার আগে"}},"mon":{"relative-type--1":"গত সোমবার","relative-type-0":"এই সোমবার","relative-type-1":"পরের সোমবার","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} সোমবারেতে","relativeTimePattern-count-other":"{0} সোমবারেতে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} সোমবারেতে","relativeTimePattern-count-other":"{0} সোমবার আগে"}},"mon-short":{"relative-type--1":"গত সোমবার","relative-type-0":"এই সোমবার","relative-type-1":"পরের সোমবার","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} সোমবারেতে","relativeTimePattern-count-other":"{0} সোমবারেতে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} সোমবার আগে","relativeTimePattern-count-other":"{0} সোমবার আগে"}},"mon-narrow":{"relative-type--1":"গত সোমবার","relative-type-0":"এই সোমবার","relative-type-1":"পরের সোমবার","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} সোমবারেতে","relativeTimePattern-count-other":"{0} সোমবারেতে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} সোমবার আগে","relativeTimePattern-count-other":"{0} সোমবার আগে"}},"tue":{"relative-type--1":"গত মঙ্গলবার","relative-type-0":"এই মঙ্গলবার","relative-type-1":"পরের মঙ্গলবার","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} মঙ্গলবারে","relativeTimePattern-count-other":"{0} মঙ্গলবারে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} মঙ্গলবার আগে","relativeTimePattern-count-other":"{0} মঙ্গলবার আগে"}},"tue-short":{"relative-type--1":"গত মঙ্গলবার","relative-type-0":"এই মঙ্গলবার","relative-type-1":"পরের মঙ্গলবার","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} মঙ্গলবারে","relativeTimePattern-count-other":"{0} মঙ্গলবারে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} মঙ্গলবার আগে","relativeTimePattern-count-other":"{0} মঙ্গলবার আগে"}},"tue-narrow":{"relative-type--1":"গত মঙ্গলবার","relative-type-0":"এই মঙ্গলবার","relative-type-1":"পরের মঙ্গলবার","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} মঙ্গলবারে","relativeTimePattern-count-other":"{0} মঙ্গলবারে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} মঙ্গলবার আগে","relativeTimePattern-count-other":"{0} মঙ্গলবার আগে"}},"wed":{"relative-type--1":"গত বুধবার","relative-type-0":"এই বুধবার","relative-type-1":"পরের বুধবার","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} বুধবারে","relativeTimePattern-count-other":"{0} বুধবারে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} বুধবার আগে","relativeTimePattern-count-other":"{0} বুধবার আগে"}},"wed-short":{"relative-type--1":"গত বুধবার","relative-type-0":"এই বুধবার","relative-type-1":"পরের বুধবার","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} বুধবারে","relativeTimePattern-count-other":"{0} বুধবারে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} বুধবার আগে","relativeTimePattern-count-other":"{0} বুধবার আগে"}},"wed-narrow":{"relative-type--1":"গত বুধবার","relative-type-0":"এই বুধবার","relative-type-1":"পরের বুধবার","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} বুধবারে","relativeTimePattern-count-other":"{0} বুধবারে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} বুধবার আগে","relativeTimePattern-count-other":"{0} বুধবার আগে"}},"thu":{"relative-type--1":"গত বৃহস্পতিবার","relative-type-0":"এই বৃহস্পতিবার","relative-type-1":"পরের বৃহস্পতিবার","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} বৃহস্পতিবারে","relativeTimePattern-count-other":"{0} বৃহস্পতিবারে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} বৃহস্পতিবার আগে","relativeTimePattern-count-other":"{0} বৃহস্পতিবার আগে"}},"thu-short":{"relative-type--1":"গত বৃহস্পতিবার","relative-type-0":"এই বৃহস্পতিবার","relative-type-1":"পরের বৃহস্পতিবার","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} বৃহস্পতিবারে","relativeTimePattern-count-other":"{0} বৃহস্পতিবারে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} বৃহস্পতিবার আগে","relativeTimePattern-count-other":"{0} বৃহস্পতিবার আগে"}},"thu-narrow":{"relative-type--1":"গত বৃহস্পতিবার","relative-type-0":"এই বৃহস্পতিবার","relative-type-1":"পরের বৃহস্পতিবার","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} বৃহস্পতিবারে","relativeTimePattern-count-other":"{0} বৃহস্পতিবারে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} বৃহস্পতিবার আগে","relativeTimePattern-count-other":"{0} বৃহস্পতিবার আগে"}},"fri":{"relative-type--1":"গত শুক্রবার","relative-type-0":"এই শুক্রবার","relative-type-1":"পরের শুক্রবার","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} শুক্রবারে","relativeTimePattern-count-other":"{0} শুক্রবারে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} শুক্রবার আগে","relativeTimePattern-count-other":"{0} শুক্রবার আগে"}},"fri-short":{"relative-type--1":"গত শুক্রবার","relative-type-0":"এই শুক্রবার","relative-type-1":"পরের শুক্রবার","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} শুক্রবারে","relativeTimePattern-count-other":"{0} শুক্রবারে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} শুক্রবার আগে","relativeTimePattern-count-other":"{0} শুক্রবার আগে"}},"fri-narrow":{"relative-type--1":"গত শুক্রবার","relative-type-0":"এই শুক্রবার","relative-type-1":"পরের শুক্রবার","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} শুক্রবারে","relativeTimePattern-count-other":"{0} শুক্রবারে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} শুক্রবার আগে","relativeTimePattern-count-other":"{0} শুক্রবার আগে"}},"sat":{"relative-type--1":"গত শনিবার","relative-type-0":"এই শনিবার","relative-type-1":"পরের শনিবার","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} শনিবারে","relativeTimePattern-count-other":"{0} শনিবারে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} শনিবার আগে","relativeTimePattern-count-other":"{0} শনিবার আগে"}},"sat-short":{"relative-type--1":"গত শনিবার","relative-type-0":"এই শনিবার","relative-type-1":"পরের শনিবার","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} শনিবারে","relativeTimePattern-count-other":"{0} শনিবারে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} শনিবার আগে","relativeTimePattern-count-other":"{0} শনিবার আগে"}},"sat-narrow":{"relative-type--1":"গত শনিবার","relative-type-0":"এই শনিবার","relative-type-1":"পরের শনিবার","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} শনিবারে","relativeTimePattern-count-other":"{0} শনিবারে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} শনিবার আগে","relativeTimePattern-count-other":"{0} শনিবার আগে"}},"dayperiod-short":{"displayName":"AM/PM"},"dayperiod":{"displayName":"AM/PM"},"dayperiod-narrow":{"displayName":"AM/PM"},"hour":{"displayName":"ঘণ্টা","relative-type-0":"এই ঘণ্টায়","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} ঘন্টায়","relativeTimePattern-count-other":"{0} ঘন্টায়"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ঘন্টা আগে","relativeTimePattern-count-other":"{0} ঘন্টা আগে"}},"hour-short":{"displayName":"ঘণ্টা","relative-type-0":"এই ঘণ্টায়","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} ঘন্টায়","relativeTimePattern-count-other":"{0} ঘন্টায়"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ঘন্টা আগে","relativeTimePattern-count-other":"{0} ঘন্টা আগে"}},"hour-narrow":{"displayName":"ঘণ্টা","relative-type-0":"এই ঘণ্টায়","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} ঘন্টায়","relativeTimePattern-count-other":"{0} ঘন্টায়"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ঘন্টা আগে","relativeTimePattern-count-other":"{0} ঘন্টা আগে"}},"minute":{"displayName":"মিনিট","relative-type-0":"এই মিনিট","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} মিনিটে","relativeTimePattern-count-other":"{0} মিনিটে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} মিনিট আগে","relativeTimePattern-count-other":"{0} মিনিট আগে"}},"minute-short":{"displayName":"মিনিট","relative-type-0":"এই মিনিট","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} মিনিটে","relativeTimePattern-count-other":"{0} মিনিটে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} মিনিট আগে","relativeTimePattern-count-other":"{0} মিনিট আগে"}},"minute-narrow":{"displayName":"মিনিট","relative-type-0":"এই মিনিট","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} মিনিটে","relativeTimePattern-count-other":"{0} মিনিটে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} মিনিট আগে","relativeTimePattern-count-other":"{0} মিনিট আগে"}},"second":{"displayName":"সেকেন্ড","relative-type-0":"এখন","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} সেকেন্ডে","relativeTimePattern-count-other":"{0} সেকেন্ডে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} সেকেন্ড পূর্বে","relativeTimePattern-count-other":"{0} সেকেন্ড পূর্বে"}},"second-short":{"displayName":"সেকেন্ড","relative-type-0":"এখন","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} সেকেন্ডে","relativeTimePattern-count-other":"{0} সেকেন্ডে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} সেকেন্ড পূর্বে","relativeTimePattern-count-other":"{0} সেকেন্ড পূর্বে"}},"second-narrow":{"displayName":"সেকেন্ড","relative-type-0":"এখন","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} সেকেন্ডে","relativeTimePattern-count-other":"{0} সেকেন্ডে"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} সেকেন্ড আগে","relativeTimePattern-count-other":"{0} সেকেন্ড আগে"}},"zone":{"displayName":"সময় অঞ্চল"},"zone-short":{"displayName":"অঞ্চল"},"zone-narrow":{"displayName":"অঞ্চল"}}},"numbers":{"currencies":{"ADP":{"displayName":"এ্যান্ডোরান পেসেতা","symbol":"ADP"},"AED":{"displayName":"সংযুক্ত আরব আমিরাত দিরহাম","displayName-count-one":"সংযুক্ত আরব আমিরাত দিরহাম","displayName-count-other":"সংযুক্ত আরব আমিরাত দিরহাম","symbol":"AED"},"AFA":{"displayName":"আফগানি (১৯২৭–২০০২)","symbol":"AFA"},"AFN":{"displayName":"আফগান আফগানি","displayName-count-one":"আফগান আফগানি","displayName-count-other":"আফগান আফগানি","symbol":"AFN"},"ALK":{"displayName":"ALK","symbol":"ALK"},"ALL":{"displayName":"আলবেনিয়ান লেক","displayName-count-one":"আলবেনিয়ান লেক","displayName-count-other":"আলবেনিয়ান লেক","symbol":"ALL"},"AMD":{"displayName":"আরমেনিয়ান দ্রাম","displayName-count-one":"আরমেনিয়ান দ্রাম","displayName-count-other":"আরমেনিয়ান দ্রাম","symbol":"AMD"},"ANG":{"displayName":"নেদারল্যান্ড এ্যান্টিলিয়ান গুল্ডের","displayName-count-one":"নেদারল্যান্ড এ্যান্টিলিয়ান গুল্ডের","displayName-count-other":"নেদারল্যান্ড এ্যান্টিলিয়ান গুল্ডের","symbol":"ANG"},"AOA":{"displayName":"এ্যাঙ্গোলান কওয়ানজা","displayName-count-one":"এ্যাঙ্গোলান কওয়ানজা","displayName-count-other":"এ্যাঙ্গোলান কওয়ানজা","symbol":"AOA","symbol-alt-narrow":"Kz"},"AOK":{"displayName":"এ্যাঙ্গোলান কওয়ানজা (১৯৭৭–১৯৯০)","symbol":"AOK"},"AON":{"displayName":"এ্যাঙ্গোলান নতুন কওয়ানজা (১৯৯৫–২০০০)","symbol":"AON"},"AOR":{"displayName":"এ্যাঙ্গোলান কওয়ানজা (১৯৯৫–১৯৯৯)","symbol":"AOR"},"ARA":{"displayName":"আর্জেন্টিনা অস্ট্রাল","symbol":"ARA"},"ARL":{"displayName":"ARL","symbol":"ARL"},"ARM":{"displayName":"ARM","symbol":"ARM"},"ARP":{"displayName":"আর্জেন্টিনা পেসো (১৯৮৩–১৯৮৫)","symbol":"ARP"},"ARS":{"displayName":"আর্জেন্টিনা পেসো","displayName-count-one":"আর্জেন্টিনা পেসো","displayName-count-other":"আর্জেন্টিনা পেসো","symbol":"ARS","symbol-alt-narrow":"$"},"ATS":{"displayName":"অস্ট্রিয়ান শিলিং","symbol":"ATS"},"AUD":{"displayName":"অস্ট্রেলিয়ান ডলার","displayName-count-one":"অস্ট্রেলিয়ান ডলার","displayName-count-other":"অস্ট্রেলিয়ান ডলার","symbol":"A$","symbol-alt-narrow":"$"},"AWG":{"displayName":"আরুবা গিল্ডার","displayName-count-one":"আরুবা গিল্ডার","displayName-count-other":"আরুবা গিল্ডার","symbol":"AWG"},"AZM":{"displayName":"আজারবাইজান মানাত (১৯৯৩–২০০৬)","symbol":"AZM"},"AZN":{"displayName":"আজারবাইজান মানাত","displayName-count-one":"আজারবাইজান মানাত","displayName-count-other":"আজারবাইজান মানাত","symbol":"AZN"},"BAD":{"displayName":"বসনিয়া এবং হার্জেগোভিনা দিনার","symbol":"BAD"},"BAM":{"displayName":"বসনিয়া এবং হার্জেগোভিনা বিনিমেয় মার্ক","displayName-count-one":"বসনিয়া এবং হার্জেগোভিনা বিনিমেয় মার্ক","displayName-count-other":"বসনিয়া এবং হার্জেগোভিনা বিনিমেয় মার্ক","symbol":"BAM","symbol-alt-narrow":"KM"},"BAN":{"displayName":"BAN","symbol":"BAN"},"BBD":{"displayName":"বার্বেডোজ ডলার","displayName-count-one":"বার্বেডোজ ডলার","displayName-count-other":"বার্বেডোজ ডলার","symbol":"BBD","symbol-alt-narrow":"$"},"BDT":{"displayName":"বাংলাদেশী টাকা","displayName-count-one":"বাংলাদেশী টাকা","displayName-count-other":"বাংলাদেশী টাকা","symbol":"৳","symbol-alt-narrow":"৳"},"BEC":{"displayName":"বেলজিয়ান ফ্রাঙ্ক (রূপান্তরযোগ্য)","symbol":"BEC"},"BEF":{"displayName":"বেলজিয়ান ফ্রাঙ্ক","symbol":"BEF"},"BEL":{"displayName":"বেলজিয়ান ফ্রাঙ্ক (আর্থিক)","symbol":"BEL"},"BGL":{"displayName":"বুলগেরীয় হার্ড লেভ","symbol":"BGL"},"BGM":{"displayName":"BGM","symbol":"BGM"},"BGN":{"displayName":"বুলগেরীয় লেভ","displayName-count-one":"বুলগেরীয় লেভ","displayName-count-other":"বুলগেরীয় লেভা","symbol":"BGN"},"BGO":{"displayName":"BGO","symbol":"BGO"},"BHD":{"displayName":"বাহরাইনি দিনার","displayName-count-one":"বাহরাইনি দিনার","displayName-count-other":"বাহরাইনি দিনার","symbol":"BHD"},"BIF":{"displayName":"বুরুন্ডি ফ্রাঙ্ক","displayName-count-one":"বুরুন্ডি ফ্রাঙ্ক","displayName-count-other":"বুরুন্ডি ফ্রাঙ্ক","symbol":"BIF"},"BMD":{"displayName":"বারমিউডান ডলার","displayName-count-one":"বারমিউডান ডলার","displayName-count-other":"বারমিউডান ডলার","symbol":"BMD","symbol-alt-narrow":"$"},"BND":{"displayName":"ব্রুনেই ডলার","displayName-count-one":"ব্রুনেই ডলার","displayName-count-other":"ব্রুনেই ডলার","symbol":"BND","symbol-alt-narrow":"$"},"BOB":{"displayName":"বলিভিয়ানো","displayName-count-one":"বলিভিয়ানো","displayName-count-other":"বলিভিয়ানো","symbol":"BOB","symbol-alt-narrow":"Bs"},"BOL":{"displayName":"BOL","symbol":"BOL"},"BOP":{"displayName":"বলিভিয়ান পেসো","symbol":"BOP"},"BOV":{"displayName":"বলিভিয়ান মভডোল","symbol":"BOV"},"BRB":{"displayName":"ব্রাজিলিয়ান ক্রুজেয়রোনোভো (১৯৬৭–১৯৮৬)","symbol":"BRB"},"BRC":{"displayName":"ব্রাজিলিয়ান ক্রুজেইডাউ","symbol":"BRC"},"BRE":{"displayName":"ব্রাজিলিয়ান ক্রুজেয়রো (১৯৯০–১৯৯৩)","symbol":"BRE"},"BRL":{"displayName":"ব্রাজিলিয়ান রিয়েল","displayName-count-one":"ব্রাজিলিয়ান রিয়েল","displayName-count-other":"ব্রাজিলিয়ান রিয়েল","symbol":"R$","symbol-alt-narrow":"R$"},"BRN":{"displayName":"ব্রাজিলিয়ান ক্রুজেইডো নোভো","symbol":"BRN"},"BRR":{"displayName":"ব্রাজিলিয়ান ক্রুজেয়রো","symbol":"BRR"},"BRZ":{"displayName":"BRZ","symbol":"BRZ"},"BSD":{"displayName":"বাহামিয়ান ডলার","displayName-count-one":"বাহামিয়ান ডলার","displayName-count-other":"বাহামিয়ান ডলার","symbol":"BSD","symbol-alt-narrow":"$"},"BTN":{"displayName":"ভুটানি এনগুল্ট্রুম","displayName-count-one":"ভুটানি এনগুল্ট্রুম","displayName-count-other":"ভুটানি এনগুল্ট্রুম","symbol":"BTN"},"BUK":{"displayName":"বর্মি কিয়াৎ","symbol":"BUK"},"BWP":{"displayName":"বতসোয়ানা পুলা","displayName-count-one":"বতসোয়ানা পুলা","displayName-count-other":"বতসোয়ানা পুলা","symbol":"BWP","symbol-alt-narrow":"P"},"BYB":{"displayName":"বেলারুশিয়ান নিউ রুবেল (১৯৯৪–১৯৯৯)","symbol":"BYB"},"BYN":{"displayName":"বেলারুশিয়ান রুবেল","displayName-count-one":"বেলারুশিয়ান রুবেল","displayName-count-other":"বেলারুশিয়ান রুবেল","symbol":"BYN","symbol-alt-narrow":"р."},"BYR":{"displayName":"বেলারুশিয়ান রুবেল (2000–2016)","displayName-count-one":"বেলারুশিয়ান রুবেল (2000–2016)","displayName-count-other":"বেলারুশিয়ান রুবেল (2000–2016)","symbol":"BYR"},"BZD":{"displayName":"বেলিজ ডলার","displayName-count-one":"বেলিজ ডলার","displayName-count-other":"বেলিজ ডলার","symbol":"BZD","symbol-alt-narrow":"$"},"CAD":{"displayName":"কানাডিয়ান ডলার","displayName-count-one":"কানাডিয়ান ডলার","displayName-count-other":"কানাডিয়ান ডলার","symbol":"CA$","symbol-alt-narrow":"$"},"CDF":{"displayName":"কঙ্গোলিস ফ্র্যাঙ্ক","displayName-count-one":"কঙ্গোলিস ফ্র্যাঙ্ক","displayName-count-other":"কঙ্গোলিস ফ্র্যাঙ্ক","symbol":"CDF"},"CHE":{"displayName":"সুইজারল্যান্ড ইউরো","symbol":"CHE"},"CHF":{"displayName":"সুইস ফ্রাঁ","displayName-count-one":"সুইস ফ্রাঁ","displayName-count-other":"সুইস ফ্রাঁ","symbol":"CHF"},"CHW":{"displayName":"সুইজারল্যান্ড ফ্রাঙ্ক","symbol":"CHW"},"CLE":{"displayName":"CLE","symbol":"CLE"},"CLF":{"displayName":"চিলিয়ান উনিদাদেস দি ফোমেন্তো","symbol":"CLF"},"CLP":{"displayName":"চিলি পেসো","displayName-count-one":"চিলি পেসো","displayName-count-other":"চিলি পেসো","symbol":"CLP","symbol-alt-narrow":"$"},"CNH":{"displayName":"চাইনিজ ইউয়ান (অফশোর)","displayName-count-one":"চাইনিজ ইউয়ান (অফশোর)","displayName-count-other":"চাইনিজ ইউয়ান (অফশোর)","symbol":"CNH"},"CNX":{"displayName":"CNX","symbol":"CNX"},"CNY":{"displayName":"চীনা য়ুয়ান","displayName-count-one":"চীনা য়ুয়ান","displayName-count-other":"চীনা য়ুয়ান","symbol":"CN¥","symbol-alt-narrow":"¥"},"COP":{"displayName":"কলোম্বিয়ান পেসো","displayName-count-one":"কলোম্বিয়ান পেসো","displayName-count-other":"কলোম্বিয়ান পেসো","symbol":"COP","symbol-alt-narrow":"$"},"COU":{"displayName":"উনিদাদ দি ভ্যালোর রিয়েল","symbol":"COU"},"CRC":{"displayName":"কোস্টা রিকা কোলোন","displayName-count-one":"কোস্টা রিকা কোলোন","displayName-count-other":"কোস্টা রিকা কোলোন","symbol":"CRC","symbol-alt-narrow":"₡"},"CSD":{"displayName":"প্রাচীন সারবিয়ান দিনার","symbol":"CSD"},"CSK":{"displayName":"চেকোস্লোভাক হার্ড কোরুনা","symbol":"CSK"},"CUC":{"displayName":"কিউবান রূপান্তরযোগ্য পেসো","displayName-count-one":"কিউবান রূপান্তরযোগ্য পেসো","displayName-count-other":"কিউবান রূপান্তরযোগ্য পেসো","symbol":"CUC","symbol-alt-narrow":"$"},"CUP":{"displayName":"কিউবান পেসো","displayName-count-one":"কিউবান পেসো","displayName-count-other":"কিউবান পেসো","symbol":"CUP","symbol-alt-narrow":"$"},"CVE":{"displayName":"কেপ ভার্দে এসকুডো","displayName-count-one":"কেপ ভার্দে এসকুডো","displayName-count-other":"কেপ ভার্দে এসকুডো","symbol":"CVE"},"CYP":{"displayName":"সাইপ্রাস পাউন্ড","symbol":"CYP"},"CZK":{"displayName":"চেক প্রজাতন্ত্র কোরুনা","displayName-count-one":"চেক প্রজাতন্ত্র কোরুনা","displayName-count-other":"চেক প্রজাতন্ত্র কোরুনা","symbol":"CZK","symbol-alt-narrow":"Kč"},"DDM":{"displayName":"পূর্ব জার্মান মার্ক","symbol":"DDM"},"DEM":{"displayName":"ডয়চ্ মার্ক","symbol":"DEM"},"DJF":{"displayName":"জিবুতি ফ্রাঙ্ক","displayName-count-one":"জিবুতি ফ্রাঙ্ক","displayName-count-other":"জিবুতি ফ্রাঙ্ক","symbol":"DJF"},"DKK":{"displayName":"ড্যানিশ ক্রোন","displayName-count-one":"ড্যানিশ ক্রোন","displayName-count-other":"ড্যানিশ ক্রৌন","symbol":"DKK","symbol-alt-narrow":"kr"},"DOP":{"displayName":"ডোমিনিকান পেসো","displayName-count-one":"ডোমিনিকান পেসো","displayName-count-other":"ডোমিনিকান পেসো","symbol":"DOP","symbol-alt-narrow":"$"},"DZD":{"displayName":"আলজেরীয় দিনার","displayName-count-one":"আলজেরীয় দিনার","displayName-count-other":"আলজেরীয় দিনার","symbol":"DZD"},"ECS":{"displayName":"ইকুয়াডোর সুক্রে","symbol":"ECS"},"ECV":{"displayName":"ইকুয়াডোর উনিদাদেস দি ভেলর কনসতান্তে (ইউভিসি)","symbol":"ECV"},"EEK":{"displayName":"এস্তোনিয়া ক্রুনি","symbol":"EEK"},"EGP":{"displayName":"মিশরীয় পাউন্ড","displayName-count-one":"মিশরীয় পাউন্ড","displayName-count-other":"মিশরীয় পাউন্ড","symbol":"EGP","symbol-alt-narrow":"E£"},"ERN":{"displayName":"এরিট্রিয়েন নাকফা","displayName-count-one":"এরিট্রিয়েন নাকফা","displayName-count-other":"এরিট্রিয়েন নাকফা","symbol":"ERN"},"ESA":{"displayName":"স্প্যানিশ পেসেতা (একই হিসাব)","symbol":"ESA"},"ESB":{"displayName":"স্প্যানিশ পেসেতা (রূপান্তরযোগ্য হিসাব)","symbol":"ESB"},"ESP":{"displayName":"স্প্যানিশ পেসেতা","symbol":"ESP","symbol-alt-narrow":"₧"},"ETB":{"displayName":"ইথিওপিয়ান বির","displayName-count-one":"ইথিওপিয়ান বির","displayName-count-other":"ইথিওপিয়ান বির","symbol":"ETB"},"EUR":{"displayName":"ইউরো","displayName-count-one":"ইউরো","displayName-count-other":"ইউরো","symbol":"€","symbol-alt-narrow":"€"},"FIM":{"displayName":"ফিনিস মার্কা","symbol":"FIM"},"FJD":{"displayName":"ফিজি ডলার","displayName-count-one":"ফিজি ডলার","displayName-count-other":"ফিজি ডলার","symbol":"FJD","symbol-alt-narrow":"$"},"FKP":{"displayName":"ফকল্যান্ড দ্বীপপুঞ্জ পাউন্ড","displayName-count-one":"ফকল্যান্ড দ্বীপপুঞ্জ পাউন্ড","displayName-count-other":"ফকল্যান্ড দ্বীপপুঞ্জ পাউন্ড","symbol":"FKP","symbol-alt-narrow":"£"},"FRF":{"displayName":"ফরাসি ফ্রাঙ্ক","symbol":"FRF"},"GBP":{"displayName":"ব্রিটিশ পাউন্ড","displayName-count-one":"ব্রিটিশ পাউন্ড","displayName-count-other":"ব্রিটিশ পাউন্ড","symbol":"£","symbol-alt-narrow":"£"},"GEK":{"displayName":"জর্জিয়ান কুপন লারিট","symbol":"GEK"},"GEL":{"displayName":"জর্জিয়ান লারি","displayName-count-one":"জর্জিয়ান লারি","displayName-count-other":"জর্জিয়ান লারি","symbol":"GEL","symbol-alt-narrow":"₾","symbol-alt-variant":"₾"},"GHC":{"displayName":"ঘানা সেডি (১৯৭৯–২০০৭)","symbol":"GHC"},"GHS":{"displayName":"ঘানা সেডি","displayName-count-one":"ঘানা সেডি","displayName-count-other":"ঘানা সেডি","symbol":"GHS"},"GIP":{"displayName":"জিব্রাল্টার পাউন্ড","displayName-count-one":"জিব্রাল্টার পাউন্ড","displayName-count-other":"জিব্রাল্টার পাউন্ড","symbol":"GIP","symbol-alt-narrow":"£"},"GMD":{"displayName":"গাম্বিয়া ডালাসি","displayName-count-one":"গাম্বিয়া ডালাসি","displayName-count-other":"গাম্বিয়া ডালাসি","symbol":"GMD"},"GNF":{"displayName":"গিনি ফ্রাঙ্ক","displayName-count-one":"গিনি ফ্রাঙ্ক","displayName-count-other":"গিনি ফ্রাঙ্ক","symbol":"GNF","symbol-alt-narrow":"FG"},"GNS":{"displayName":"গিনি সাইলি","symbol":"GNS"},"GQE":{"displayName":"ইকুয়েটোরিয়াল গিনি ইকুয়িলি","symbol":"GQE"},"GRD":{"displayName":"গ্রীক দ্রাচমা","symbol":"GRD"},"GTQ":{"displayName":"গুয়াতেমালা কুয়েৎজাল","displayName-count-one":"গুয়াতেমালা কুয়েৎজাল","displayName-count-other":"গুয়াতেমালা কুয়েৎজাল","symbol":"GTQ","symbol-alt-narrow":"Q"},"GWE":{"displayName":"পর্তুগিজ গিনি এসকুডো","symbol":"GWE"},"GWP":{"displayName":"গিনি বিসাউ পেসো","symbol":"GWP"},"GYD":{"displayName":"গাইয়েনা ডলার","displayName-count-one":"গাইয়েনা ডলার","displayName-count-other":"গাইয়েনা ডলার","symbol":"GYD","symbol-alt-narrow":"$"},"HKD":{"displayName":"হংকং ডলার","displayName-count-one":"হংকং ডলার","displayName-count-other":"হংকং ডলার","symbol":"HK$","symbol-alt-narrow":"$"},"HNL":{"displayName":"হন্ডুরাস লেম্পিরা","displayName-count-one":"হন্ডুরাস লেম্পিরা","displayName-count-other":"হন্ডুরাস লেম্পিরা","symbol":"HNL","symbol-alt-narrow":"L"},"HRD":{"displayName":"ক্রোয়েশিয়ান দিনার","symbol":"HRD"},"HRK":{"displayName":"ক্রোয়েশিয়ান কুনা","displayName-count-one":"ক্রোয়েশিয়ান কুনা","displayName-count-other":"ক্রোয়েশিয়ান কুনা","symbol":"HRK","symbol-alt-narrow":"kn"},"HTG":{"displayName":"হাইতি গৌর্দে","displayName-count-one":"হাইতি গৌর্দে","displayName-count-other":"হাইতি গৌর্দে","symbol":"HTG"},"HUF":{"displayName":"হাঙ্গেরিয়ান ফোরিন্ট","displayName-count-one":"হাঙ্গেরিয়ান ফোরিন্ট","displayName-count-other":"হাঙ্গেরিয়ান ফোরিন্ট","symbol":"HUF","symbol-alt-narrow":"Ft"},"IDR":{"displayName":"ইন্দোনেশিয়ান রুপিয়াহ","displayName-count-one":"ইন্দোনেশিয়ান রুপিয়াহ","displayName-count-other":"ইন্দোনেশিয়ান রুপিয়াহ","symbol":"IDR","symbol-alt-narrow":"Rp"},"IEP":{"displayName":"ইরিশ পাউন্ড","symbol":"IEP"},"ILP":{"displayName":"ইস্রাইলি পাউন্ড","symbol":"ILP"},"ILR":{"displayName":"ILR","symbol":"ILR"},"ILS":{"displayName":"ইস্রাইলি নতুন শেকেল","displayName-count-one":"ইস্রাইলি নতুন শেকেল","displayName-count-other":"ইস্রাইলি নতুন শেকেল","symbol":"₪","symbol-alt-narrow":"₪"},"INR":{"displayName":"ভারতীয় রুপি","displayName-count-one":"ভারতীয় রুপি","displayName-count-other":"ভারতীয় রুপি","symbol":"₹","symbol-alt-narrow":"₹"},"IQD":{"displayName":"ইরাকি দিনার","displayName-count-one":"ইরাকি দিনার","displayName-count-other":"ইরাকি দিনার","symbol":"IQD"},"IRR":{"displayName":"ইরানিয়ান রিয়াল","displayName-count-one":"ইরানিয়ান রিয়াল","displayName-count-other":"ইরানিয়ান রিয়াল","symbol":"IRR"},"ISJ":{"displayName":"ISJ","symbol":"ISJ"},"ISK":{"displayName":"আইসল্যান্ডীয় ক্রোনা","displayName-count-one":"আইসল্যান্ডীয় ক্রোনা","displayName-count-other":"আইসল্যান্ড ক্রৌন","symbol":"ISK","symbol-alt-narrow":"kr"},"ITL":{"displayName":"ইতালীয় লিরা","symbol":"ITL"},"JMD":{"displayName":"জামাইকান ডলার","displayName-count-one":"জামাইকান ডলার","displayName-count-other":"জামাইকান ডলার","symbol":"JMD","symbol-alt-narrow":"$"},"JOD":{"displayName":"জর্ডানিয়ান দিনার","displayName-count-one":"জর্ডানিয়ান দিনার","displayName-count-other":"জর্ডানিয়ান দিনার","symbol":"JOD"},"JPY":{"displayName":"জাপানি ইয়েন","displayName-count-one":"জাপানি ইয়েন","displayName-count-other":"জাপানি ইয়েন","symbol":"JP¥","symbol-alt-narrow":"¥"},"KES":{"displayName":"কেনিয়ান শিলিং","displayName-count-one":"কেনিয়ান শিলিং","displayName-count-other":"কেনিয়ান শিলিং","symbol":"KES"},"KGS":{"displayName":"কিরগিজস্তান সোম","displayName-count-one":"কিরগিজস্তান সোম","displayName-count-other":"কিরগিজস্তান সোম","symbol":"KGS"},"KHR":{"displayName":"কম্বোডিয়ান রিয়েল","displayName-count-one":"কম্বোডিয়ান রিয়েল","displayName-count-other":"কম্বোডিয়ান রিয়েল","symbol":"KHR","symbol-alt-narrow":"៛"},"KMF":{"displayName":"কম্বোরো ফ্রাঙ্ক","displayName-count-one":"কমোরিয়ান ফ্রাঙ্ক","displayName-count-other":"কমোরিয়ান ফ্রাঙ্ক","symbol":"KMF","symbol-alt-narrow":"CF"},"KPW":{"displayName":"উত্তর কোরিয়ার ওন","displayName-count-one":"উত্তর কোরিয়ার ওন","displayName-count-other":"উত্তর কোরিয়ার ওন","symbol":"KPW","symbol-alt-narrow":"₩"},"KRH":{"displayName":"KRH","symbol":"KRH"},"KRO":{"displayName":"KRO","symbol":"KRO"},"KRW":{"displayName":"দক্ষিণ কোরিয়ান ওন","displayName-count-one":"দক্ষিণ কোরিয়ান ওন","displayName-count-other":"দক্ষিণ কোরিয়ান ওন","symbol":"₩","symbol-alt-narrow":"₩"},"KWD":{"displayName":"কুয়েতি দিনার","displayName-count-one":"কুয়েতি দিনার","displayName-count-other":"কুয়েতি দিনার","symbol":"KWD"},"KYD":{"displayName":"কেম্যান দ্বীপপুঞ্জের ডলার","displayName-count-one":"কেম্যান দ্বীপপুঞ্জের ডলার","displayName-count-other":"কেম্যান দ্বীপপুঞ্জের ডলার","symbol":"KYD","symbol-alt-narrow":"$"},"KZT":{"displayName":"কাজাখাস্তানি টেঙ্গে","displayName-count-one":"কাজাখাস্তানি টেঙ্গে","displayName-count-other":"কাজাখাস্তানি টেঙ্গে","symbol":"KZT","symbol-alt-narrow":"₸"},"LAK":{"displayName":"লেউশান কিপ","displayName-count-one":"লেউশান কিপ","displayName-count-other":"লেউশান কিপ","symbol":"LAK","symbol-alt-narrow":"₭"},"LBP":{"displayName":"লেবানিজ পাউন্ড","displayName-count-one":"লেবানিজ পাউন্ড","displayName-count-other":"লেবানিজ পাউন্ড","symbol":"LBP","symbol-alt-narrow":"L£"},"LKR":{"displayName":"শ্রীলঙ্কান রুপি","displayName-count-one":"শ্রীলঙ্কান রুপি","displayName-count-other":"শ্রীলঙ্কান রুপি","symbol":"LKR","symbol-alt-narrow":"Rs"},"LRD":{"displayName":"লিবেরিয়ান ডলার","displayName-count-one":"লিবেরিয়ান ডলার","displayName-count-other":"লিবেরিয়ান ডলার","symbol":"LRD","symbol-alt-narrow":"$"},"LSL":{"displayName":"লেসুটু লোটি","symbol":"LSL"},"LTL":{"displayName":"লিথুইনিয়ান লিটা","displayName-count-one":"লিথুইনিয়ান লিটা","displayName-count-other":"লিথুইনিয়ান লিটা","symbol":"LTL","symbol-alt-narrow":"Lt"},"LTT":{"displayName":"লিথুইনিয়ান টালোন্যাস","symbol":"LTT"},"LUC":{"displayName":"লুক্সেমবার্গ রুপান্তযোগ্য ফ্রাঙ্ক","symbol":"LUC"},"LUF":{"displayName":"লুক্সেমবার্গ ফ্রাঙ্ক","symbol":"LUF"},"LUL":{"displayName":"লুক্সেমবার্গ ফাইনেনশিয়াল ফ্রাঙ্ক","symbol":"LUL"},"LVL":{"displayName":"ল্যাটভিয়ান ল্যাট্‌স","displayName-count-one":"ল্যাটভিয়ান ল্যাট্‌স","displayName-count-other":"ল্যাটভিয়ান ল্যাট্‌স","symbol":"LVL","symbol-alt-narrow":"Ls"},"LVR":{"displayName":"ল্যাটভিয়ান রুবল","symbol":"LVR"},"LYD":{"displayName":"লিবিয়ান দিনার","displayName-count-one":"লিবিয়ান দিনার","displayName-count-other":"লিবিয়ান দিনার","symbol":"LYD"},"MAD":{"displayName":"মোরোক্কান দিরহাম","displayName-count-one":"মোরোক্কান দিরহাম","displayName-count-other":"মোরোক্কান দিরহাম","symbol":"MAD"},"MAF":{"displayName":"মোরোক্কান ফ্রাঙ্ক","symbol":"MAF"},"MCF":{"displayName":"MCF","symbol":"MCF"},"MDC":{"displayName":"MDC","symbol":"MDC"},"MDL":{"displayName":"মোল্ডোভান লেয়ু","displayName-count-one":"মোল্ডোভান লেয়ু","displayName-count-other":"মোল্ডোভান লেয়ু","symbol":"MDL"},"MGA":{"displayName":"মাদাগাস্কার আরিয়ারি","displayName-count-one":"মাদাগাস্কার আরিয়ারি","displayName-count-other":"মাদাগাস্কার আরিয়ারি","symbol":"MGA","symbol-alt-narrow":"Ar"},"MGF":{"displayName":"মাদাগাস্কার ফ্রাঙ্ক","symbol":"MGF"},"MKD":{"displayName":"ম্যাসেডোনিয়ান দিনার","displayName-count-one":"ম্যাসেডোনিয়ান দিনার","displayName-count-other":"ম্যাসেডোনিয়ান দিনার","symbol":"MKD"},"MKN":{"displayName":"MKN","symbol":"MKN"},"MLF":{"displayName":"মালি ফ্রাঙ্ক","symbol":"MLF"},"MMK":{"displayName":"মায়ানমার কিয়াত","displayName-count-one":"মায়ানমার কিয়াত","displayName-count-other":"মায়ানমার কিয়াত","symbol":"MMK","symbol-alt-narrow":"K"},"MNT":{"displayName":"মঙ্গোলিয়ান তুগরিক","displayName-count-one":"মঙ্গোলিয়ান তুগরিক","displayName-count-other":"মঙ্গোলিয়ান তুগরিক","symbol":"MNT","symbol-alt-narrow":"₮"},"MOP":{"displayName":"ম্যাক্যাও পাটাকা","displayName-count-one":"ম্যাক্যাও পাটাকা","displayName-count-other":"ম্যাক্যাও পাটাকা","symbol":"MOP"},"MRO":{"displayName":"মৌরিতানিয়ান ওউগুইয়া","displayName-count-one":"মৌরিতানিয়ান ওউগুইয়া","displayName-count-other":"মৌরিতানিয়ান ওউগুইয়া","symbol":"MRO"},"MTL":{"displayName":"মাল্টা লিরা","symbol":"MTL"},"MTP":{"displayName":"মাল্টা পাউন্ড","symbol":"MTP"},"MUR":{"displayName":"মৌরিতানিয়ান রুপি","displayName-count-one":"মৌরিতানিয়ান রুপি","displayName-count-other":"মৌরিতানিয়ান রুপি","symbol":"MUR","symbol-alt-narrow":"Rs"},"MVP":{"displayName":"MVP","symbol":"MVP"},"MVR":{"displayName":"মালদিভিয়ান রুফিয়া","displayName-count-one":"মালদিভিয়ান রুফিয়া","displayName-count-other":"মালদিভিয়ান রুফিয়া","symbol":"MVR"},"MWK":{"displayName":"মালাউইয়ান কওয়াচ","displayName-count-one":"মালাউইয়ান কওয়াচ","displayName-count-other":"মালাউইয়ান কওয়াচ","symbol":"MWK"},"MXN":{"displayName":"ম্যাক্সিকান পেসো","displayName-count-one":"ম্যাক্সিকান পেসো","displayName-count-other":"ম্যাক্সিকান পেসো","symbol":"MX$","symbol-alt-narrow":"$"},"MXP":{"displayName":"ম্যাক্সিকান সিলভার পেসো (১৮৬১–১৯৯২)","symbol":"MXP"},"MXV":{"displayName":"মেক্সিকান উনিদাদ দি ইনভার্সান (UDI)","symbol":"MXV"},"MYR":{"displayName":"মালয়েশিয়ান রিঙ্গিৎ","displayName-count-one":"মালয়েশিয়ান রিঙ্গিৎ","displayName-count-other":"মালয়েশিয়ান রিঙ্গিৎ","symbol":"MYR","symbol-alt-narrow":"RM"},"MZE":{"displayName":"মোজাম্বিক এসকুডো","symbol":"MZE"},"MZM":{"displayName":"প্রাচীন মোজাম্বিক মেটিকেল","symbol":"MZM"},"MZN":{"displayName":"মোজাম্বিক মেটিকেল","displayName-count-one":"মোজাম্বিক মেটিকেল","displayName-count-other":"মোজাম্বিক মেটিকেল","symbol":"MZN"},"NAD":{"displayName":"নামিবিয়া ডলার","displayName-count-one":"নামিবিয়া ডলার","displayName-count-other":"নামিবিয়া ডলার","symbol":"NAD","symbol-alt-narrow":"$"},"NGN":{"displayName":"নাইজেরিয়ান নায়রা","displayName-count-one":"নাইজেরিয়ান নায়রা","displayName-count-other":"নাইজেরিয়ান নায়রা","symbol":"NGN","symbol-alt-narrow":"₦"},"NIC":{"displayName":"নিকারাগুয়ান কর্ডোবা (১৯৮৮–১৯৯১)","symbol":"NIC"},"NIO":{"displayName":"নিকারাগুয়ান কর্ডোবা","displayName-count-one":"নিকারাগুয়ান কর্ডোবা","displayName-count-other":"নিকারাগুয়ান কর্ডোবা","symbol":"NIO","symbol-alt-narrow":"C$"},"NLG":{"displayName":"নেদারল্যান্ড গুল্ডের","symbol":"NLG"},"NOK":{"displayName":"নরওয়েজিয়ান ক্রোন","displayName-count-one":"নরওয়েজিয়ান ক্রোন","displayName-count-other":"নরওয়েজিয়ান ক্রোনার","symbol":"NOK","symbol-alt-narrow":"kr"},"NPR":{"displayName":"নেপালি রুপি","displayName-count-one":"নেপালি রুপি","displayName-count-other":"নেপালি রুপি","symbol":"NPR","symbol-alt-narrow":"Rs"},"NZD":{"displayName":"নিউজিল্যান্ড ডলার","displayName-count-one":"নিউজিল্যান্ড ডলার","displayName-count-other":"নিউজিল্যান্ড ডলার","symbol":"NZ$","symbol-alt-narrow":"$"},"OMR":{"displayName":"ওমানি রিয়াল","displayName-count-one":"ওমানি রিয়াল","displayName-count-other":"ওমানি রিয়াল","symbol":"OMR"},"PAB":{"displayName":"পানামা বেলবোয়া","displayName-count-one":"পানামা বেলবোয়া","displayName-count-other":"পানামা বেলবোয়া","symbol":"PAB"},"PEI":{"displayName":"পেরুভিয়ান ইন্তি","symbol":"PEI"},"PEN":{"displayName":"পেরুভিয়ান সোল","displayName-count-one":"পেরুভিয়ান সোল","displayName-count-other":"পেরুভিয়ান সোল","symbol":"PEN"},"PES":{"displayName":"পেরুভিয়ান সোল (1863–1965)","displayName-count-one":"পেরুভিয়ান সোল (1863–1965)","displayName-count-other":"পেরুভিয়ান সোল (1863–1965)","symbol":"PES"},"PGK":{"displayName":"পাপুয়া নিউ গিনিয়ান কিনা","displayName-count-one":"পাপুয়া নিউ গিনিয়ান কিনা","displayName-count-other":"পাপুয়া নিউ গিনিয়ান কিনা","symbol":"PGK"},"PHP":{"displayName":"ফিলিপাইন পেসো","displayName-count-one":"ফিলিপাইন পেসো","displayName-count-other":"ফিলিপাইন পেসো","symbol":"PHP","symbol-alt-narrow":"₱"},"PKR":{"displayName":"পাকিস্তানি রুপি","displayName-count-one":"পাকিস্তানি রুপি","displayName-count-other":"পাকিস্তানি রুপি","symbol":"PKR","symbol-alt-narrow":"Rs"},"PLN":{"displayName":"পোলিশ জ্লোটি","displayName-count-one":"পোলিশ জ্লোটি","displayName-count-other":"পোলিশ জ্লোটি","symbol":"PLN","symbol-alt-narrow":"zł"},"PLZ":{"displayName":"পোলিশ জ্লোটি (১৯৫০–১৯৯৫)","symbol":"PLZ"},"PTE":{"displayName":"পর্তুগিজ এসকুডো","symbol":"PTE"},"PYG":{"displayName":"প্যারাগুয়ান গুয়ারানি","displayName-count-one":"প্যারাগুয়ান গুয়ারানি","displayName-count-other":"প্যারাগুয়ান গুয়ারানি","symbol":"PYG","symbol-alt-narrow":"₲"},"QAR":{"displayName":"কাতার রিয়াল","displayName-count-one":"কাতার রিয়াল","displayName-count-other":"কাতার রিয়াল","symbol":"QAR"},"RHD":{"displayName":"রোডেশিয়ান ডলার","symbol":"RHD"},"ROL":{"displayName":"প্রাচীন রুমানিয়া লেয়ু","symbol":"ROL"},"RON":{"displayName":"রুমানিয়া লেয়ু","displayName-count-one":"রুমানিয়া লেয়ু","displayName-count-other":"রুমানিয়া লেয়ু","symbol":"RON","symbol-alt-narrow":"lei"},"RSD":{"displayName":"সারবিয়ান দিনার","displayName-count-one":"সারবিয়ান দিনার","displayName-count-other":"সারবিয়ান দিনার","symbol":"RSD"},"RUB":{"displayName":"রাশিয়ান রুবেল","displayName-count-one":"রাশিয়ান রুবেল","displayName-count-other":"রাশিয়ান রুবেল","symbol":"RUB","symbol-alt-narrow":"₽"},"RUR":{"displayName":"রাশিয়ান রুবল (১৯৯১–১৯৯৮)","symbol":"RUR","symbol-alt-narrow":"р."},"RWF":{"displayName":"রুয়ান্ডান ফ্রাঙ্ক","displayName-count-one":"রুয়ান্ডান ফ্রাঙ্ক","displayName-count-other":"রুয়ান্ডান ফ্রাঙ্ক","symbol":"RWF","symbol-alt-narrow":"RF"},"SAR":{"displayName":"সৌদি রিয়াল","displayName-count-one":"সৌদি রিয়াল","displayName-count-other":"সৌদি রিয়াল","symbol":"SAR"},"SBD":{"displayName":"সলোমন দ্বীপপুঞ্জ ডলার","displayName-count-one":"সলোমন দ্বীপপুঞ্জ ডলার","displayName-count-other":"সলোমন দ্বীপপুঞ্জ ডলার","symbol":"SBD","symbol-alt-narrow":"$"},"SCR":{"displayName":"সেয়চেল্লোইস রুপি","displayName-count-one":"সেয়চেল্লোইস রুপি","displayName-count-other":"সেয়চেল্লোইস রুপি","symbol":"SCR"},"SDD":{"displayName":"প্রাচীন সুদানি দিনার","symbol":"SDD"},"SDG":{"displayName":"সুদানি পাউন্ড","displayName-count-one":"সুদানি পাউন্ড","displayName-count-other":"সুদানি পাউন্ড","symbol":"SDG"},"SDP":{"displayName":"প্রাচীন সুদানি পাউন্ড","symbol":"SDP"},"SEK":{"displayName":"সুইডিশ ক্রোনা","displayName-count-one":"সুইডিশ ক্রোনা","displayName-count-other":"সুইডিশ ক্রোনা","symbol":"SEK","symbol-alt-narrow":"kr"},"SGD":{"displayName":"সিঙ্গাপুর ডলার","displayName-count-one":"সিঙ্গাপুর ডলার","displayName-count-other":"সিঙ্গাপুর ডলার","symbol":"SGD","symbol-alt-narrow":"$"},"SHP":{"displayName":"সেন্ট হেলেনা পাউন্ড","displayName-count-one":"সেন্ট হেলেনা পাউন্ড","displayName-count-other":"সেন্ট হেলেনা পাউন্ড","symbol":"SHP","symbol-alt-narrow":"£"},"SIT":{"displayName":"স্লোভানিয়া টোলার","symbol":"SIT"},"SKK":{"displayName":"স্লোভাক কোরুনা","symbol":"SKK"},"SLL":{"displayName":"সিয়েরালিয়ন লিয়ন","displayName-count-one":"সিয়েরালিয়ন লিয়ন","displayName-count-other":"সিয়েরালিয়ন লিয়ন","symbol":"SLL"},"SOS":{"displayName":"সোমালি শিলিং","displayName-count-one":"সোমালি শিলিং","displayName-count-other":"সোমালি শিলিং","symbol":"SOS"},"SRD":{"displayName":"সুরিনাম ডলার","displayName-count-one":"সুরিনাম ডলার","displayName-count-other":"সুরিনাম ডলার","symbol":"SRD","symbol-alt-narrow":"$"},"SRG":{"displayName":"সুরিনাম গিল্ডার","symbol":"SRG"},"SSP":{"displayName":"দক্ষিণ সুদানি পাউন্ড","displayName-count-one":"দক্ষিণ সুদানি পাউন্ড","displayName-count-other":"দক্ষিণ সুদানি পাউন্ড","symbol":"SSP","symbol-alt-narrow":"£"},"STD":{"displayName":"সাও টোমে এবং প্রিন্সিপে ডোবরা","displayName-count-one":"সাও টোমে এবং প্রিন্সিপে ডোবরা","displayName-count-other":"সাও টোমে এবং প্রিন্সিপে ডোবরা","symbol":"STD","symbol-alt-narrow":"Db"},"STN":{"displayName":"STN","symbol":"STN"},"SUR":{"displayName":"সোভিয়েত রুবল","symbol":"SUR"},"SVC":{"displayName":"এল স্যালভোডোর কোলোন","symbol":"SVC"},"SYP":{"displayName":"সিরিয়ান পাউন্ড","displayName-count-one":"সিরিয়ান পাউন্ড","displayName-count-other":"সিরিয়ান পাউন্ড","symbol":"SYP","symbol-alt-narrow":"£"},"SZL":{"displayName":"সোয়াজিল্যান্ড লিলাঙ্গেনি","displayName-count-one":"সোয়াজিল্যান্ড লিলাঙ্গেনি","displayName-count-other":"সোয়াজিল্যান্ড লিলাঙ্গেনি","symbol":"SZL"},"THB":{"displayName":"থাই বাত","displayName-count-one":"থাই বাত","displayName-count-other":"থাই বাত","symbol":"฿","symbol-alt-narrow":"฿"},"TJR":{"displayName":"তাজিকিস্তান রুবল","symbol":"TJR"},"TJS":{"displayName":"তাজিকিস্তান সোমোনি","displayName-count-one":"তাজিকিস্তান সোমোনি","displayName-count-other":"তাজিকিস্তান সোমোনি","symbol":"TJS"},"TMM":{"displayName":"তুর্কমেনিস্টানি মানাত","symbol":"TMM"},"TMT":{"displayName":"তুর্কমেনিস্তান মানত","displayName-count-one":"তুর্কমেনিস্তান মানত","displayName-count-other":"তুর্কমেনিস্তান মানত","symbol":"TMT"},"TND":{"displayName":"তিউনেশিয়ান দিনার","displayName-count-one":"তিউনেশিয়ান দিনার","displayName-count-other":"তিউনেশিয়ান দিনার","symbol":"TND"},"TOP":{"displayName":"টোঙ্গা পা’আঙ্গা","displayName-count-one":"টোঙ্গা পা’আঙ্গা","displayName-count-other":"টোঙ্গা পা’আঙ্গা","symbol":"TOP","symbol-alt-narrow":"T$"},"TPE":{"displayName":"তিমুর এসকুডো","symbol":"TPE"},"TRL":{"displayName":"প্রাচীন তুর্কি লিরা","symbol":"TRL"},"TRY":{"displayName":"তুর্কি লিরা","displayName-count-one":"তুর্কি লিরা","displayName-count-other":"তুর্কি লিরা","symbol":"TRY","symbol-alt-narrow":"₺","symbol-alt-variant":"TL"},"TTD":{"displayName":"ত্রিনিদাদ এবং টোবাগো ডলার","displayName-count-one":"ত্রিনিদাদ এবং টোবাগো ডলার","displayName-count-other":"ত্রিনিদাদ এবং টোবাগো ডলার","symbol":"TTD","symbol-alt-narrow":"$"},"TWD":{"displayName":"নতুন তাইওয়ান ডলার","displayName-count-one":"নতুন তাইওয়ান ডলার","displayName-count-other":"নতুন তাইওয়ান ডলার","symbol":"NT$","symbol-alt-narrow":"NT$"},"TZS":{"displayName":"তাঞ্জনিয়া শিলিং","displayName-count-one":"তাঞ্জনিয়া শিলিং","displayName-count-other":"তাঞ্জনিয়া শিলিং","symbol":"TZS"},"UAH":{"displayName":"ইউক্রেইন হৃভনিয়া","displayName-count-one":"ইউক্রেইন হৃভনিয়া","displayName-count-other":"ইউক্রেইন হৃভনিয়া","symbol":"UAH","symbol-alt-narrow":"₴"},"UAK":{"displayName":"ইউক্রেইন কার্বোভ্যান্টস","symbol":"UAK"},"UGS":{"displayName":"উগান্ডান শিলিং (১৯৬৬–১৯৮৭)","symbol":"UGS"},"UGX":{"displayName":"উগান্ডান শিলিং","displayName-count-one":"উগান্ডান শিলিং","displayName-count-other":"উগান্ডান শিলিং","symbol":"UGX"},"USD":{"displayName":"মার্কিন ডলার","displayName-count-one":"মার্কিন ডলার","displayName-count-other":"মার্কিন ডলার","symbol":"US$","symbol-alt-narrow":"$"},"USN":{"displayName":"মার্কিন ডলার (পরবর্তী দিন)","symbol":"USN"},"USS":{"displayName":"মার্কিন ডলার (একই দিন)","symbol":"USS"},"UYI":{"displayName":"উরুগুয়ায়ান পেসো এন উনিদাদেস ইনডেক্সেডাস","symbol":"UYI"},"UYP":{"displayName":"উরুগুয়ে পেসো (১৯৭৫–১৯৯৩)","symbol":"UYP"},"UYU":{"displayName":"উরুগুয়ে পেসো","displayName-count-one":"উরুগুয়ে পেসো","displayName-count-other":"উরুগুয়ে পেসো","symbol":"UYU","symbol-alt-narrow":"$"},"UZS":{"displayName":"উজবেকিস্তানি সোম","displayName-count-one":"উজবেকিস্তানি সোম","displayName-count-other":"উজবেকিস্তানি সোম","symbol":"UZS"},"VEB":{"displayName":"ভেনিজুয়েলান বলিভার (১৮৭১–২০০৮)","symbol":"VEB"},"VEF":{"displayName":"ভেনিজুয়েলীয় বলিভার","displayName-count-one":"ভেনিজুয়েলীয় বলিভার","displayName-count-other":"ভেনিজুয়েলীয় বলিভার","symbol":"VEF","symbol-alt-narrow":"Bs"},"VND":{"displayName":"ভিয়েতনামি ডঙ্গ","displayName-count-one":"ভিয়েতনামি ডঙ্গ","displayName-count-other":"ভিয়েতনামি ডঙ্গ","symbol":"₫","symbol-alt-narrow":"₫"},"VNN":{"displayName":"VNN","symbol":"VNN"},"VUV":{"displayName":"ভানুয়াতু ভাতু","displayName-count-one":"ভানুয়াতু ভাতু","displayName-count-other":"ভানুয়াতু ভাতু","symbol":"VUV"},"WST":{"displayName":"সামোয়ান টালা","displayName-count-one":"সামোয়ান টালা","displayName-count-other":"সামোয়ান টালা","symbol":"WST"},"XAF":{"displayName":"মধ্য আফ্রিকান [CFA] ফ্র্যাঙ্ক","displayName-count-one":"মধ্য আফ্রিকান [CFA] ফ্র্যাঙ্ক","displayName-count-other":"মধ্য আফ্রিকান [CFA] ফ্র্যাঙ্ক","symbol":"FCFA"},"XAG":{"displayName":"সিলভার","symbol":"XAG"},"XAU":{"displayName":"গোল্ড","symbol":"XAU"},"XBA":{"displayName":"XBA","symbol":"XBA"},"XBB":{"displayName":"ইউরোপীয় আর্থিক একক","symbol":"XBB"},"XBC":{"displayName":"XBC","symbol":"XBC"},"XBD":{"displayName":"XBD","symbol":"XBD"},"XCD":{"displayName":"পূর্ব ক্যারাবিয়ান ডলার","displayName-count-one":"পূর্ব ক্যারাবিয়ান ডলার","displayName-count-other":"পূর্ব ক্যারাবিয়ান ডলার","symbol":"EC$","symbol-alt-narrow":"$"},"XDR":{"displayName":"XDR","symbol":"XDR"},"XEU":{"displayName":"ইউরোপীয় মুদ্রা একক","symbol":"XEU"},"XFO":{"displayName":"ফরাসি গোল্ড ফ্রাঙ্ক","symbol":"XFO"},"XFU":{"displayName":"ফরাসি ইউআইসি - ফ্রাঙ্ক","symbol":"XFU"},"XOF":{"displayName":"পশ্চিম আফ্রিকান [CFA] ফ্র্যাঙ্ক","displayName-count-one":"পশ্চিম আফ্রিকান [CFA] ফ্র্যাঙ্ক","displayName-count-other":"পশ্চিম আফ্রিকান [CFA] ফ্র্যাঙ্ক","symbol":"CFA"},"XPD":{"displayName":"প্যালেডিয়াম","symbol":"XPD"},"XPF":{"displayName":"সিএফপি ফ্র্যাঙ্ক","displayName-count-one":"সিএফপি ফ্র্যাঙ্ক","displayName-count-other":"সিএফপি ফ্র্যাঙ্ক","symbol":"CFPF"},"XPT":{"displayName":"প্লাটিনাম","symbol":"XPT"},"XRE":{"displayName":"XRE","symbol":"XRE"},"XSU":{"displayName":"XSU","symbol":"XSU"},"XTS":{"displayName":"XTS","symbol":"XTS"},"XUA":{"displayName":"XUA","symbol":"XUA"},"XXX":{"displayName":"অজানা মুদ্রা","displayName-count-one":"(মুদ্রার অজানা একক)","displayName-count-other":"(অজানা মুদ্রা)","symbol":"XXX"},"YDD":{"displayName":"ইয়েমেনি দিনার","symbol":"YDD"},"YER":{"displayName":"ইয়েমেনি রিয়াল","displayName-count-one":"ইয়েমেনি রিয়াল","displayName-count-other":"ইয়েমেনি রিয়াল","symbol":"YER"},"YUD":{"displayName":"যুগোশ্লাভিয় হার্ড দিনার","symbol":"YUD"},"YUM":{"displayName":"যুগোশ্লাভিয় নোভি দিনার","symbol":"YUM"},"YUN":{"displayName":"যুগোশ্লাভিয় রুপান্তরযোগ্য দিনার","symbol":"YUN"},"YUR":{"displayName":"YUR","symbol":"YUR"},"ZAL":{"displayName":"দক্ষিণ আফ্রিকান র‌্যান্ড","symbol":"ZAL"},"ZAR":{"displayName":"দক্ষিণ আফ্রিকান রেন্ড","displayName-count-one":"দক্ষিণ আফ্রিকান রেন্ড","displayName-count-other":"দক্ষিণ আফ্রিকান রেন্ড","symbol":"ZAR","symbol-alt-narrow":"R"},"ZMK":{"displayName":"জাম্বিয়ান কওয়াচা (১৯৬৮–২০১২)","symbol":"ZMK"},"ZMW":{"displayName":"জাম্বিয়ান কওয়াচা","displayName-count-one":"জাম্বিয়ান কওয়াচা","displayName-count-other":"জাম্বিয়ান কওয়াচা","symbol":"ZMW","symbol-alt-narrow":"ZK"},"ZRN":{"displayName":"জাইরিয়ান নিউ জাইরে","symbol":"ZRN"},"ZRZ":{"displayName":"জাইরিয়ান জাইরে","symbol":"ZRZ"},"ZWD":{"displayName":"জিম্বাবুয়ে ডলার (১৯৮০–২০০৮)","symbol":"ZWD"},"ZWL":{"displayName":"জিম্বাবুয়ে ডলার (২০০৯)","symbol":"ZWL"},"ZWR":{"displayName":"জিম্বাবুয়ে ডলার (২০০৮)","symbol":"ZWR"}},"defaultNumberingSystem":"beng","otherNumberingSystems":{"native":"beng"},"minimumGroupingDigits":"1","symbols-numberSystem-beng":{"decimal":".","group":",","list":";","percentSign":"%","plusSign":"+","minusSign":"-","exponential":"E","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"NaN","timeSeparator":":"},"symbols-numberSystem-latn":{"decimal":".","group":",","list":";","percentSign":"%","plusSign":"+","minusSign":"-","exponential":"E","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"NaN","timeSeparator":":"},"decimalFormats-numberSystem-beng":{"standard":"#,##,##0.###","long":{"decimalFormat":{"1000-count-one":"0 হাজার","1000-count-other":"0 হাজার","10000-count-one":"00 হাজার","10000-count-other":"00 হাজার","100000-count-one":"0 লাখ","100000-count-other":"0 লাখ","1000000-count-one":"0 মিলিয়ন","1000000-count-other":"0 মিলিয়ন","10000000-count-one":"00 মিলিয়ন","10000000-count-other":"00 মিলিয়ন","100000000-count-one":"000 মিলিয়ন","100000000-count-other":"000 মিলিয়ন","1000000000-count-one":"0 বিলিয়ন","1000000000-count-other":"0 বিলিয়ন","10000000000-count-one":"00 বিলিয়ন","10000000000-count-other":"00 বিলিয়ন","100000000000-count-one":"000 বিলিয়ন","100000000000-count-other":"000 বিলিয়ন","1000000000000-count-one":"0 ট্রিলিয়ন","1000000000000-count-other":"0 ট্রিলিয়ন","10000000000000-count-one":"00 ট্রিলিয়ন","10000000000000-count-other":"00 ট্রিলিয়ন","100000000000000-count-one":"000 ট্রিলিয়ন","100000000000000-count-other":"000 ট্রিলিয়ন"}},"short":{"decimalFormat":{"1000-count-one":"0 হাজার","1000-count-other":"0 হাজার","10000-count-one":"00 হাজার","10000-count-other":"00 হাজার","100000-count-one":"0 লাখ","100000-count-other":"0 লাখ","1000000-count-one":"0M","1000000-count-other":"0M","10000000-count-one":"00M","10000000-count-other":"00M","100000000-count-one":"000M","100000000-count-other":"000M","1000000000-count-one":"0B","1000000000-count-other":"0B","10000000000-count-one":"00B","10000000000-count-other":"00B","100000000000-count-one":"000B","100000000000-count-other":"000B","1000000000000-count-one":"0T","1000000000000-count-other":"0T","10000000000000-count-one":"00T","10000000000000-count-other":"00T","100000000000000-count-one":"000T","100000000000000-count-other":"000T"}}},"decimalFormats-numberSystem-latn":{"standard":"#,##,##0.###","long":{"decimalFormat":{"1000-count-one":"0 হাজার","1000-count-other":"0 হাজার","10000-count-one":"00 হাজার","10000-count-other":"00 হাজার","100000-count-one":"0 লাখ","100000-count-other":"0 লাখ","1000000-count-one":"0 মিলিয়ন","1000000-count-other":"0 মিলিয়ন","10000000-count-one":"00 মিলিয়ন","10000000-count-other":"00 মিলিয়ন","100000000-count-one":"000 মিলিয়ন","100000000-count-other":"000 মিলিয়ন","1000000000-count-one":"0 বিলিয়ন","1000000000-count-other":"0 বিলিয়ন","10000000000-count-one":"00 বিলিয়ন","10000000000-count-other":"00 বিলিয়ন","100000000000-count-one":"000 বিলিয়ন","100000000000-count-other":"000 বিলিয়ন","1000000000000-count-one":"0 ট্রিলিয়ন","1000000000000-count-other":"0 ট্রিলিয়ন","10000000000000-count-one":"00 ট্রিলিয়ন","10000000000000-count-other":"00 ট্রিলিয়ন","100000000000000-count-one":"000 ট্রিলিয়ন","100000000000000-count-other":"000 ট্রিলিয়ন"}},"short":{"decimalFormat":{"1000-count-one":"0 হাজার","1000-count-other":"0 হাজার","10000-count-one":"00 হাজার","10000-count-other":"00 হাজার","100000-count-one":"0 লাখ","100000-count-other":"0 লাখ","1000000-count-one":"0M","1000000-count-other":"0M","10000000-count-one":"00M","10000000-count-other":"00M","100000000-count-one":"000M","100000000-count-other":"000M","1000000000-count-one":"0B","1000000000-count-other":"0B","10000000000-count-one":"00B","10000000000-count-other":"00B","100000000000-count-one":"000B","100000000000-count-other":"000B","1000000000000-count-one":"0T","1000000000000-count-other":"0T","10000000000000-count-one":"00T","10000000000000-count-other":"00T","100000000000000-count-one":"000T","100000000000000-count-other":"000T"}}},"scientificFormats-numberSystem-beng":{"standard":"#E0"},"scientificFormats-numberSystem-latn":{"standard":"#E0"},"percentFormats-numberSystem-beng":{"standard":"#,##0%"},"percentFormats-numberSystem-latn":{"standard":"#,##,##0%"},"currencyFormats-numberSystem-beng":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"#,##,##0.00¤","accounting":"#,##,##0.00¤;(#,##,##0.00¤)","short":{"standard":{"1000-count-one":"0 হাজার¤","1000-count-other":"0 হাজার¤","10000-count-one":"00 হাজার¤","10000-count-other":"00 হাজার¤","100000-count-one":"0 লাখ¤","100000-count-other":"0 লাখ¤","1000000-count-one":"0 লাখ¤","1000000-count-other":"0 লাখ¤","10000000-count-one":"00 কোটি¤","10000000-count-other":"00 কোটি¤","100000000-count-one":"000 কোটি¤","100000000-count-other":"000 কোটি¤","1000000000-count-one":"0 একশো কোটি¤","1000000000-count-other":"0 একশো কোটি¤","10000000000-count-one":"00 হাজার কোটি¤","10000000000-count-other":"00 হাজার কোটি¤","100000000000-count-one":"000 সহস্র কোটি¤","100000000000-count-other":"000 সহস্র কোটি¤","1000000000000-count-one":"0 দশ সহস্রের ত্রিঘাত¤","1000000000000-count-other":"0 দশ সহস্রের ত্রিঘাত¤","10000000000000-count-one":"00 একশো সহস্রের ত্রিঘাত¤","10000000000000-count-other":"00 একশো সহস্রের ত্রিঘাত¤","100000000000000-count-one":"000 সহস্র সহস্রের ত্রিঘাত¤","100000000000000-count-other":"000 সহস্র সহস্রের ত্রিঘাত¤"}},"unitPattern-count-one":"{0} {1}","unitPattern-count-other":"{0} {1}"},"currencyFormats-numberSystem-latn":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"#,##,##0.00¤","accounting":"#,##,##0.00¤;(#,##,##0.00¤)","short":{"standard":{"1000-count-one":"0 হাজার¤","1000-count-other":"0 হাজার¤","10000-count-one":"00 হাজার¤","10000-count-other":"00 হাজার¤","100000-count-one":"0 লাখ¤","100000-count-other":"0 লাখ¤","1000000-count-one":"0 লাখ¤","1000000-count-other":"0 লাখ¤","10000000-count-one":"00 কোটি¤","10000000-count-other":"00 কোটি¤","100000000-count-one":"000 কোটি¤","100000000-count-other":"000 কোটি¤","1000000000-count-one":"0 একশো কোটি¤","1000000000-count-other":"0 একশো কোটি¤","10000000000-count-one":"00 হাজার কোটি¤","10000000000-count-other":"00 হাজার কোটি¤","100000000000-count-one":"000 সহস্র কোটি¤","100000000000-count-other":"000 সহস্র কোটি¤","1000000000000-count-one":"0 দশ সহস্রের ত্রিঘাত¤","1000000000000-count-other":"0 দশ সহস্রের ত্রিঘাত¤","10000000000000-count-one":"00 একশো সহস্রের ত্রিঘাত¤","10000000000000-count-other":"00 একশো সহস্রের ত্রিঘাত¤","100000000000000-count-one":"000 সহস্র সহস্রের ত্রিঘাত¤","100000000000000-count-other":"000 সহস্র সহস্রের ত্রিঘাত¤"}},"unitPattern-count-one":"{0} {1}","unitPattern-count-other":"{0} {1}"},"miscPatterns-numberSystem-beng":{"atLeast":"{0}+","range":"{0}–{1}"},"miscPatterns-numberSystem-latn":{"atLeast":"{0}+","range":"{0}–{1}"},"minimalPairs":{"pluralMinimalPairs-count-one":"সসে {0}টি আপেল খেল, সেটা ভাল","pluralMinimalPairs-count-other":"সসে {0}টি আপেল খেল, সেগুলি ভাল","few":"ডান দিকে {0}র্থ বাঁকটি নিন।","many":"ডান দিকে {0}ষ্ঠ বাঁকটি নিন।","one":"ডান দিকে {0}ম বাঁকটি নিন।","other":"ডান দিকে {0}তম বাঁকটি নিন।","two":"ডান দিকে {0}য় বাঁকটি নিন।"}}},"cs":{"identity":{"version":{"_number":"$Revision: 13711 $","_cldrVersion":"32"},"language":"cs"},"dates":{"calendars":{"gregorian":{"months":{"format":{"abbreviated":{"1":"led","2":"úno","3":"bře","4":"dub","5":"kvě","6":"čvn","7":"čvc","8":"srp","9":"zář","10":"říj","11":"lis","12":"pro"},"narrow":{"1":"1","2":"2","3":"3","4":"4","5":"5","6":"6","7":"7","8":"8","9":"9","10":"10","11":"11","12":"12"},"wide":{"1":"ledna","2":"února","3":"března","4":"dubna","5":"května","6":"června","7":"července","8":"srpna","9":"září","10":"října","11":"listopadu","12":"prosince"}},"stand-alone":{"abbreviated":{"1":"led","2":"úno","3":"bře","4":"dub","5":"kvě","6":"čvn","7":"čvc","8":"srp","9":"zář","10":"říj","11":"lis","12":"pro"},"narrow":{"1":"1","2":"2","3":"3","4":"4","5":"5","6":"6","7":"7","8":"8","9":"9","10":"10","11":"11","12":"12"},"wide":{"1":"leden","2":"únor","3":"březen","4":"duben","5":"květen","6":"červen","7":"červenec","8":"srpen","9":"září","10":"říjen","11":"listopad","12":"prosinec"}}},"days":{"format":{"abbreviated":{"sun":"ne","mon":"po","tue":"út","wed":"st","thu":"čt","fri":"pá","sat":"so"},"narrow":{"sun":"N","mon":"P","tue":"Ú","wed":"S","thu":"Č","fri":"P","sat":"S"},"short":{"sun":"ne","mon":"po","tue":"út","wed":"st","thu":"čt","fri":"pá","sat":"so"},"wide":{"sun":"neděle","mon":"pondělí","tue":"úterý","wed":"středa","thu":"čtvrtek","fri":"pátek","sat":"sobota"}},"stand-alone":{"abbreviated":{"sun":"ne","mon":"po","tue":"út","wed":"st","thu":"čt","fri":"pá","sat":"so"},"narrow":{"sun":"N","mon":"P","tue":"Ú","wed":"S","thu":"Č","fri":"P","sat":"S"},"short":{"sun":"ne","mon":"po","tue":"út","wed":"st","thu":"čt","fri":"pá","sat":"so"},"wide":{"sun":"neděle","mon":"pondělí","tue":"úterý","wed":"středa","thu":"čtvrtek","fri":"pátek","sat":"sobota"}}},"quarters":{"format":{"abbreviated":{"1":"Q1","2":"Q2","3":"Q3","4":"Q4"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"1. čtvrtletí","2":"2. čtvrtletí","3":"3. čtvrtletí","4":"4. čtvrtletí"}},"stand-alone":{"abbreviated":{"1":"Q1","2":"Q2","3":"Q3","4":"Q4"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"1. čtvrtletí","2":"2. čtvrtletí","3":"3. čtvrtletí","4":"4. čtvrtletí"}}},"dayPeriods":{"format":{"abbreviated":{"midnight":"půln.","am":"dop.","noon":"pol.","pm":"odp.","morning1":"r.","morning2":"dop.","afternoon1":"odp.","evening1":"več.","night1":"v n."},"narrow":{"midnight":"půl.","am":"dop.","noon":"pol.","pm":"odp.","morning1":"r.","morning2":"d.","afternoon1":"o.","evening1":"v.","night1":"n."},"wide":{"midnight":"půlnoc","am":"dop.","noon":"poledne","pm":"odp.","morning1":"ráno","morning2":"dopoledne","afternoon1":"odpoledne","evening1":"večer","night1":"v noci"}},"stand-alone":{"abbreviated":{"midnight":"půlnoc","am":"dop.","noon":"poledne","pm":"odp.","morning1":"ráno","morning2":"dopoledne","afternoon1":"odpoledne","evening1":"večer","night1":"noc"},"narrow":{"midnight":"půl.","am":"dop.","noon":"pol.","pm":"odp.","morning1":"ráno","morning2":"dop.","afternoon1":"odp.","evening1":"več.","night1":"noc"},"wide":{"midnight":"půlnoc","am":"dop.","noon":"poledne","pm":"odp.","morning1":"ráno","morning2":"dopoledne","afternoon1":"odpoledne","evening1":"večer","night1":"noc"}}},"eras":{"eraNames":{"0":"před naším letopočtem","1":"našeho letopočtu","0-alt-variant":"př. n. l.","1-alt-variant":"n. l."},"eraAbbr":{"0":"př. n. l.","1":"n. l.","0-alt-variant":"BCE","1-alt-variant":"CE"},"eraNarrow":{"0":"př.n.l.","1":"n.l.","0-alt-variant":"BCE","1-alt-variant":"CE"}},"dateFormats":{"full":"EEEE d. MMMM y","long":"d. MMMM y","medium":"d. M. y","short":"dd.MM.yy"},"timeFormats":{"full":"H:mm:ss zzzz","long":"H:mm:ss z","medium":"H:mm:ss","short":"H:mm"},"dateTimeFormats":{"full":"{1} {0}","long":"{1} {0}","medium":"{1} {0}","short":"{1} {0}","availableFormats":{"Bh":"h B","Bhm":"h:mm B","Bhms":"h:mm:ss B","d":"d.","E":"ccc","EBhm":"E h:mm B","EBhms":"E h:mm:ss B","Ed":"E d.","Ehm":"E h:mm a","EHm":"E H:mm","Ehms":"E h:mm:ss a","EHms":"E H:mm:ss","Gy":"y G","GyMMM":"LLLL y G","GyMMMd":"d. M. y G","GyMMMEd":"E d. M. y G","GyMMMMd":"d. MMMM y G","GyMMMMEd":"E d. MMMM y G","h":"h a","H":"H","hm":"h:mm a","Hm":"H:mm","hms":"h:mm:ss a","Hms":"H:mm:ss","hmsv":"h:mm:ss a v","Hmsv":"H:mm:ss v","hmv":"h:mm a v","Hmv":"H:mm v","M":"L","Md":"d. M.","MEd":"E d. M.","MMM":"LLL","MMMd":"d. M.","MMMEd":"E d. M.","MMMMd":"d. MMMM","MMMMEd":"E d. MMMM","MMMMW-count-one":"W. 'týden' MMMM","MMMMW-count-few":"W. 'týden' MMMM","MMMMW-count-many":"W. 'týden' MMMM","MMMMW-count-other":"W. 'týden' MMMM","ms":"mm:ss","y":"y","yM":"M/y","yMd":"d. M. y","yMEd":"E d. M. y","yMMM":"LLLL y","yMMMd":"d. M. y","yMMMEd":"E d. M. y","yMMMM":"LLLL y","yMMMMd":"d. MMMM y","yMMMMEd":"E d. MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","yw-count-one":"w. 'týden' 'roku' Y","yw-count-few":"w. 'týden' 'roku' Y","yw-count-many":"w. 'týden' 'roku' Y","yw-count-other":"w. 'týden' 'roku' Y"},"appendItems":{"Day":"{0} ({2}: {1})","Day-Of-Week":"{0} {1}","Era":"{1} {0}","Hour":"{0} ({2}: {1})","Minute":"{0} ({2}: {1})","Month":"{0} ({2}: {1})","Quarter":"{0} ({2}: {1})","Second":"{0} ({2}: {1})","Timezone":"{0} {1}","Week":"{0} ({2}: {1})","Year":"{1} {0}"},"intervalFormats":{"intervalFormatFallback":"{0} – {1}","d":{"d":"d.–d."},"h":{"a":"h a – h a","h":"h–h a"},"H":{"H":"H–H"},"hm":{"a":"h:mm a – h:mm a","h":"h:mm–h:mm a","m":"h:mm–h:mm a"},"Hm":{"H":"H:mm–H:mm","m":"H:mm–H:mm"},"hmv":{"a":"h:mm a – h:mm a v","h":"h:mm–h:mm a v","m":"h:mm–h:mm a v"},"Hmv":{"H":"H:mm–H:mm v","m":"H:mm–H:mm v"},"hv":{"a":"h a – h a v","h":"h–h a v"},"Hv":{"H":"H–H v"},"M":{"M":"M–M"},"Md":{"d":"d. M. – d. M.","M":"d. M. – d. M."},"MEd":{"d":"E d. M. – E d. M.","M":"E d. M. – E d. M."},"MMM":{"M":"MMM–MMM"},"MMMd":{"d":"d.–d. M.","M":"d. M. – d. M."},"MMMEd":{"d":"E d. M. – E d. M.","M":"E d. M. – E d. M."},"y":{"y":"y–y"},"yM":{"M":"M/y – M/y","y":"M/y – M/y"},"yMd":{"d":"dd.MM.y – dd.MM.y","M":"dd.MM.y – dd.MM.y","y":"dd.MM.y – dd.MM.y"},"yMEd":{"d":"E dd.MM.y – E dd.MM.y","M":"E dd.MM.y – E dd.MM.y","y":"E dd.MM.y – E dd.MM.y"},"yMMM":{"M":"MMM–MMM y","y":"MMM y – MMM y"},"yMMMd":{"d":"d.–d. M. y","M":"d. M. – d. M. y","y":"d. M. y – d. M. y"},"yMMMEd":{"d":"E d. M. – E d. M. y","M":"E d. M. – E d. M. y","y":"E d. M. y – E d. M. y"},"yMMMM":{"M":"LLLL–LLLL y","y":"LLLL y – LLLL y"}}}}},"fields":{"era":{"displayName":"letopočet"},"era-short":{"displayName":"letop."},"era-narrow":{"displayName":"let."},"year":{"displayName":"rok","relative-type--1":"minulý rok","relative-type-0":"tento rok","relative-type-1":"příští rok","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} rok","relativeTimePattern-count-few":"za {0} roky","relativeTimePattern-count-many":"za {0} roku","relativeTimePattern-count-other":"za {0} let"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} rokem","relativeTimePattern-count-few":"před {0} lety","relativeTimePattern-count-many":"před {0} roku","relativeTimePattern-count-other":"před {0} lety"}},"year-short":{"displayName":"r.","relative-type--1":"minulý rok","relative-type-0":"tento rok","relative-type-1":"příští rok","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} r.","relativeTimePattern-count-few":"za {0} r.","relativeTimePattern-count-many":"za {0} r.","relativeTimePattern-count-other":"za {0} l."},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} r.","relativeTimePattern-count-few":"před {0} r.","relativeTimePattern-count-many":"před {0} r.","relativeTimePattern-count-other":"před {0} l."}},"year-narrow":{"displayName":"r.","relative-type--1":"minulý rok","relative-type-0":"tento rok","relative-type-1":"příští rok","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} r.","relativeTimePattern-count-few":"za {0} r.","relativeTimePattern-count-many":"za {0} r.","relativeTimePattern-count-other":"za {0} l."},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} r.","relativeTimePattern-count-few":"před {0} r.","relativeTimePattern-count-many":"před {0} r.","relativeTimePattern-count-other":"před {0} l."}},"quarter":{"displayName":"čtvrtletí","relative-type--1":"minulé čtvrtletí","relative-type-0":"toto čtvrtletí","relative-type-1":"příští čtvrtletí","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} čtvrtletí","relativeTimePattern-count-few":"za {0} čtvrtletí","relativeTimePattern-count-many":"za {0} čtvrtletí","relativeTimePattern-count-other":"za {0} čtvrtletí"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} čtvrtletím","relativeTimePattern-count-few":"před {0} čtvrtletími","relativeTimePattern-count-many":"před {0} čtvrtletí","relativeTimePattern-count-other":"před {0} čtvrtletími"}},"quarter-short":{"displayName":"Q","relative-type--1":"minulé čtvrtletí","relative-type-0":"toto čtvrtletí","relative-type-1":"příští čtvrtletí","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} Q","relativeTimePattern-count-few":"+{0} Q","relativeTimePattern-count-many":"+{0} Q","relativeTimePattern-count-other":"+{0} Q"},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} Q","relativeTimePattern-count-few":"-{0} Q","relativeTimePattern-count-many":"-{0} Q","relativeTimePattern-count-other":"-{0} Q"}},"quarter-narrow":{"displayName":"Q","relative-type--1":"minulé čtvrtletí","relative-type-0":"toto čtvrtletí","relative-type-1":"příští čtvrtletí","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} Q","relativeTimePattern-count-few":"+{0} Q","relativeTimePattern-count-many":"+{0} Q","relativeTimePattern-count-other":"+{0} Q"},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} Q","relativeTimePattern-count-few":"-{0} Q","relativeTimePattern-count-many":"-{0} Q","relativeTimePattern-count-other":"-{0} Q"}},"month":{"displayName":"měsíc","relative-type--1":"minulý měsíc","relative-type-0":"tento měsíc","relative-type-1":"příští měsíc","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} měsíc","relativeTimePattern-count-few":"za {0} měsíce","relativeTimePattern-count-many":"za {0} měsíce","relativeTimePattern-count-other":"za {0} měsíců"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} měsícem","relativeTimePattern-count-few":"před {0} měsíci","relativeTimePattern-count-many":"před {0} měsíce","relativeTimePattern-count-other":"před {0} měsíci"}},"month-short":{"displayName":"měs.","relative-type--1":"minulý měs.","relative-type-0":"tento měs.","relative-type-1":"příští měs.","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} měs.","relativeTimePattern-count-few":"za {0} měs.","relativeTimePattern-count-many":"za {0} měs.","relativeTimePattern-count-other":"za {0} měs."},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} měs.","relativeTimePattern-count-few":"před {0} měs.","relativeTimePattern-count-many":"před {0} měs.","relativeTimePattern-count-other":"před {0} měs."}},"month-narrow":{"displayName":"měs.","relative-type--1":"minuý měs.","relative-type-0":"tento měs.","relative-type-1":"příští měs.","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} měs.","relativeTimePattern-count-few":"za {0} měs.","relativeTimePattern-count-many":"za {0} měs.","relativeTimePattern-count-other":"za {0} měs."},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} měs.","relativeTimePattern-count-few":"před {0} měs.","relativeTimePattern-count-many":"před {0} měs.","relativeTimePattern-count-other":"před {0} měs."}},"week":{"displayName":"týden","relative-type--1":"minulý týden","relative-type-0":"tento týden","relative-type-1":"příští týden","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} týden","relativeTimePattern-count-few":"za {0} týdny","relativeTimePattern-count-many":"za {0} týdne","relativeTimePattern-count-other":"za {0} týdnů"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} týdnem","relativeTimePattern-count-few":"před {0} týdny","relativeTimePattern-count-many":"před {0} týdne","relativeTimePattern-count-other":"před {0} týdny"},"relativePeriod":"v týdnu {0}"},"week-short":{"displayName":"týd.","relative-type--1":"minulý týd.","relative-type-0":"tento týd.","relative-type-1":"příští týd.","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} týd.","relativeTimePattern-count-few":"za {0} týd.","relativeTimePattern-count-many":"za {0} týd.","relativeTimePattern-count-other":"za {0} týd."},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} týd.","relativeTimePattern-count-few":"před {0} týd.","relativeTimePattern-count-many":"před {0} týd.","relativeTimePattern-count-other":"před {0} týd."},"relativePeriod":"v týd. {0}"},"week-narrow":{"displayName":"týd.","relative-type--1":"minulý týd.","relative-type-0":"tento týd.","relative-type-1":"příští týd.","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} týd.","relativeTimePattern-count-few":"za {0} týd.","relativeTimePattern-count-many":"za {0} týd.","relativeTimePattern-count-other":"za {0} týd."},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} týd.","relativeTimePattern-count-few":"před {0} týd.","relativeTimePattern-count-many":"před {0} týd.","relativeTimePattern-count-other":"před {0} týd."},"relativePeriod":"v týd. {0}"},"weekOfMonth":{"displayName":"týden v měsíci"},"weekOfMonth-short":{"displayName":"týd. v m."},"weekOfMonth-narrow":{"displayName":"týd. v m."},"day":{"displayName":"den","relative-type--2":"předevčírem","relative-type--1":"včera","relative-type-0":"dnes","relative-type-1":"zítra","relative-type-2":"pozítří","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} den","relativeTimePattern-count-few":"za {0} dny","relativeTimePattern-count-many":"za {0} dne","relativeTimePattern-count-other":"za {0} dní"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} dnem","relativeTimePattern-count-few":"před {0} dny","relativeTimePattern-count-many":"před {0} dne","relativeTimePattern-count-other":"před {0} dny"}},"day-short":{"displayName":"den","relative-type--2":"předevčírem","relative-type--1":"včera","relative-type-0":"dnes","relative-type-1":"zítra","relative-type-2":"pozítří","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} den","relativeTimePattern-count-few":"za {0} dny","relativeTimePattern-count-many":"za {0} dne","relativeTimePattern-count-other":"za {0} dní"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} dnem","relativeTimePattern-count-few":"před {0} dny","relativeTimePattern-count-many":"před {0} dne","relativeTimePattern-count-other":"před {0} dny"}},"day-narrow":{"displayName":"den","relative-type--2":"předevčírem","relative-type--1":"včera","relative-type-0":"dnes","relative-type-1":"zítra","relative-type-2":"pozítří","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} den","relativeTimePattern-count-few":"za {0} dny","relativeTimePattern-count-many":"za {0} dne","relativeTimePattern-count-other":"za {0} dní"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} dnem","relativeTimePattern-count-few":"před {0} dny","relativeTimePattern-count-many":"před {0} dne","relativeTimePattern-count-other":"před {0} dny"}},"dayOfYear":{"displayName":"den v roce"},"dayOfYear-short":{"displayName":"den v r."},"dayOfYear-narrow":{"displayName":"d. v r."},"weekday":{"displayName":"den v týdnu"},"weekday-short":{"displayName":"den v týd."},"weekday-narrow":{"displayName":"d. v týd."},"weekdayOfMonth":{"displayName":"den týdne v měsíci"},"weekdayOfMonth-short":{"displayName":"den týd. v měs."},"weekdayOfMonth-narrow":{"displayName":"d. týd. v měs."},"sun":{"relative-type--1":"minulou neděli","relative-type-0":"tuto neděli","relative-type-1":"příští neděli","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} neděli","relativeTimePattern-count-few":"za {0} neděle","relativeTimePattern-count-many":"za {0} neděle","relativeTimePattern-count-other":"za {0} nedělí"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} nedělí","relativeTimePattern-count-few":"před {0} nedělemi","relativeTimePattern-count-many":"před {0} neděle","relativeTimePattern-count-other":"před {0} nedělemi"}},"sun-short":{"relative-type--1":"minulou neděli","relative-type-0":"tuto neděli","relative-type-1":"příští neděli","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} neděli","relativeTimePattern-count-few":"za {0} neděle","relativeTimePattern-count-many":"za {0} neděle","relativeTimePattern-count-other":"za {0} nedělí"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} nedělí","relativeTimePattern-count-few":"před {0} nedělemi","relativeTimePattern-count-many":"před {0} neděle","relativeTimePattern-count-other":"před {0} nedělemi"}},"sun-narrow":{"relative-type--1":"minulou neděli","relative-type-0":"tuto neděli","relative-type-1":"příští neděli","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} neděli","relativeTimePattern-count-few":"za {0} neděle","relativeTimePattern-count-many":"za {0} neděle","relativeTimePattern-count-other":"za {0} nedělí"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} nedělí","relativeTimePattern-count-few":"před {0} nedělemi","relativeTimePattern-count-many":"před {0} neděle","relativeTimePattern-count-other":"před {0} nedělemi"}},"mon":{"relative-type--1":"minulé pondělí","relative-type-0":"toto pondělí","relative-type-1":"příští pondělí","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} pondělí","relativeTimePattern-count-few":"za {0} pondělí","relativeTimePattern-count-many":"za {0} pondělí","relativeTimePattern-count-other":"za {0} pondělí"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} pondělím","relativeTimePattern-count-few":"před {0} pondělími","relativeTimePattern-count-many":"před {0} pondělí","relativeTimePattern-count-other":"před {0} pondělími"}},"mon-short":{"relative-type--1":"minulé pondělí","relative-type-0":"toto pondělí","relative-type-1":"příští pondělí","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} pondělí","relativeTimePattern-count-few":"za {0} pondělí","relativeTimePattern-count-many":"za {0} pondělí","relativeTimePattern-count-other":"za {0} pondělí"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} pondělím","relativeTimePattern-count-few":"před {0} pondělími","relativeTimePattern-count-many":"před {0} pondělí","relativeTimePattern-count-other":"před {0} pondělími"}},"mon-narrow":{"relative-type--1":"minulé pondělí","relative-type-0":"toto pondělí","relative-type-1":"příští pondělí","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} pondělí","relativeTimePattern-count-few":"za {0} pondělí","relativeTimePattern-count-many":"za {0} pondělí","relativeTimePattern-count-other":"za {0} pondělí"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} pondělím","relativeTimePattern-count-few":"před {0} pondělími","relativeTimePattern-count-many":"před {0} pondělí","relativeTimePattern-count-other":"před {0} pondělími"}},"tue":{"relative-type--1":"minulé úterý","relative-type-0":"toto úterý","relative-type-1":"příští úterý","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} úterý","relativeTimePattern-count-few":"za {0} úterý","relativeTimePattern-count-many":"za {0} úterý","relativeTimePattern-count-other":"za {0} úterý"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} úterým","relativeTimePattern-count-few":"před {0} úterými","relativeTimePattern-count-many":"před {0} úterý","relativeTimePattern-count-other":"před {0} úterými"}},"tue-short":{"relative-type--1":"minulé úterý","relative-type-0":"toto úterý","relative-type-1":"příští úterý","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} úterý","relativeTimePattern-count-few":"za {0} úterý","relativeTimePattern-count-many":"za {0} úterý","relativeTimePattern-count-other":"za {0} úterý"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} úterým","relativeTimePattern-count-few":"před {0} úterými","relativeTimePattern-count-many":"před {0} úterý","relativeTimePattern-count-other":"před {0} úterými"}},"tue-narrow":{"relative-type--1":"minulé úterý","relative-type-0":"toto úterý","relative-type-1":"příští úterý","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} úterý","relativeTimePattern-count-few":"za {0} úterý","relativeTimePattern-count-many":"za {0} úterý","relativeTimePattern-count-other":"za {0} úterý"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} úterým","relativeTimePattern-count-few":"před {0} úterými","relativeTimePattern-count-many":"před {0} úterý","relativeTimePattern-count-other":"před {0} úterými"}},"wed":{"relative-type--1":"minulou středu","relative-type-0":"tuto středu","relative-type-1":"příští středu","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} středu","relativeTimePattern-count-few":"za {0} středy","relativeTimePattern-count-many":"za {0} středy","relativeTimePattern-count-other":"za {0} střed"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} středou","relativeTimePattern-count-few":"před {0} středami","relativeTimePattern-count-many":"před {0} středy","relativeTimePattern-count-other":"před {0} středami"}},"wed-short":{"relative-type--1":"minulou středu","relative-type-0":"tuto středu","relative-type-1":"příští středu","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} středu","relativeTimePattern-count-few":"za {0} středy","relativeTimePattern-count-many":"za {0} středy","relativeTimePattern-count-other":"za {0} střed"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} středou","relativeTimePattern-count-few":"před {0} středami","relativeTimePattern-count-many":"před {0} středy","relativeTimePattern-count-other":"před {0} středami"}},"wed-narrow":{"relative-type--1":"minulou středu","relative-type-0":"tuto středu","relative-type-1":"příští středu","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} středu","relativeTimePattern-count-few":"za {0} středy","relativeTimePattern-count-many":"za {0} středy","relativeTimePattern-count-other":"za {0} střed"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} středou","relativeTimePattern-count-few":"před {0} středami","relativeTimePattern-count-many":"před {0} středy","relativeTimePattern-count-other":"před {0} středami"}},"thu":{"relative-type--1":"minulý čtvrtek","relative-type-0":"tento čtvrtek","relative-type-1":"příští čtvrtek","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} čtvrtek","relativeTimePattern-count-few":"za {0} čtvrtky","relativeTimePattern-count-many":"za {0} čtvrtku","relativeTimePattern-count-other":"za {0} čtvrtků"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} čtvrtkem","relativeTimePattern-count-few":"před {0} čtvrtky","relativeTimePattern-count-many":"před {0} čtvrtku","relativeTimePattern-count-other":"před {0} čtvrtky"}},"thu-short":{"relative-type--1":"minulý čtvrtek","relative-type-0":"tento čtvrtek","relative-type-1":"příští čtvrtek","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} čtvrtek","relativeTimePattern-count-few":"za {0} čtvrtky","relativeTimePattern-count-many":"za {0} čtvrtku","relativeTimePattern-count-other":"za {0} čtvrtků"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} čtvrtkem","relativeTimePattern-count-few":"před {0} čtvrtky","relativeTimePattern-count-many":"před {0} čtvrtku","relativeTimePattern-count-other":"před {0} čtvrtky"}},"thu-narrow":{"relative-type--1":"minulý čtvrtek","relative-type-0":"tento čtvrtek","relative-type-1":"příští čtvrtek","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} čtvrtek","relativeTimePattern-count-few":"za {0} čtvrtky","relativeTimePattern-count-many":"za {0} čtvrtku","relativeTimePattern-count-other":"za {0} čtvrtků"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} čtvrtkem","relativeTimePattern-count-few":"před {0} čtvrtky","relativeTimePattern-count-many":"před {0} čtvrtku","relativeTimePattern-count-other":"před {0} čtvrtky"}},"fri":{"relative-type--1":"minulý pátek","relative-type-0":"tento pátek","relative-type-1":"příští pátek","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} pátek","relativeTimePattern-count-few":"za {0} pátky","relativeTimePattern-count-many":"za {0} pátku","relativeTimePattern-count-other":"za {0} pátků"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} pátkem","relativeTimePattern-count-few":"před {0} pátky","relativeTimePattern-count-many":"před {0} pátku","relativeTimePattern-count-other":"před {0} pátky"}},"fri-short":{"relative-type--1":"minulý pátek","relative-type-0":"tento pátek","relative-type-1":"příští pátek","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} pátek","relativeTimePattern-count-few":"za {0} pátky","relativeTimePattern-count-many":"za {0} pátku","relativeTimePattern-count-other":"za {0} pátků"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} pátkem","relativeTimePattern-count-few":"před {0} pátky","relativeTimePattern-count-many":"před {0} pátku","relativeTimePattern-count-other":"před {0} pátky"}},"fri-narrow":{"relative-type--1":"minulý pátek","relative-type-0":"tento pátek","relative-type-1":"příští pátek","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} pátek","relativeTimePattern-count-few":"za {0} pátky","relativeTimePattern-count-many":"za {0} pátku","relativeTimePattern-count-other":"za {0} pátků"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} pátkem","relativeTimePattern-count-few":"před {0} pátky","relativeTimePattern-count-many":"před {0} pátku","relativeTimePattern-count-other":"před {0} pátky"}},"sat":{"relative-type--1":"minulou sobotu","relative-type-0":"tuto sobotu","relative-type-1":"příští sobotu","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} sobotu","relativeTimePattern-count-few":"za {0} soboty","relativeTimePattern-count-many":"za {0} soboty","relativeTimePattern-count-other":"za {0} sobot"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} sobotou","relativeTimePattern-count-few":"před {0} sobotami","relativeTimePattern-count-many":"před {0} soboty","relativeTimePattern-count-other":"před {0} sobotami"}},"sat-short":{"relative-type--1":"minulou sobotu","relative-type-0":"tuto sobotu","relative-type-1":"příští sobotu","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} sobotu","relativeTimePattern-count-few":"za {0} soboty","relativeTimePattern-count-many":"za {0} soboty","relativeTimePattern-count-other":"za {0} sobot"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} sobotou","relativeTimePattern-count-few":"před {0} sobotami","relativeTimePattern-count-many":"před {0} soboty","relativeTimePattern-count-other":"před {0} sobotami"}},"sat-narrow":{"relative-type--1":"minulou sobotu","relative-type-0":"tuto sobotu","relative-type-1":"příští sobotu","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} sobotu","relativeTimePattern-count-few":"za {0} soboty","relativeTimePattern-count-many":"za {0} soboty","relativeTimePattern-count-other":"za {0} sobot"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} sobotou","relativeTimePattern-count-few":"před {0} sobotami","relativeTimePattern-count-many":"před {0} soboty","relativeTimePattern-count-other":"před {0} sobotami"}},"dayperiod-short":{"displayName":"část dne"},"dayperiod":{"displayName":"část dne"},"dayperiod-narrow":{"displayName":"část d."},"hour":{"displayName":"hodina","relative-type-0":"tuto hodinu","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} hodinu","relativeTimePattern-count-few":"za {0} hodiny","relativeTimePattern-count-many":"za {0} hodiny","relativeTimePattern-count-other":"za {0} hodin"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} hodinou","relativeTimePattern-count-few":"před {0} hodinami","relativeTimePattern-count-many":"před {0} hodiny","relativeTimePattern-count-other":"před {0} hodinami"}},"hour-short":{"displayName":"h","relative-type-0":"tuto hodinu","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} h","relativeTimePattern-count-few":"za {0} h","relativeTimePattern-count-many":"za {0} h","relativeTimePattern-count-other":"za {0} h"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} h","relativeTimePattern-count-few":"před {0} h","relativeTimePattern-count-many":"před {0} h","relativeTimePattern-count-other":"před {0} h"}},"hour-narrow":{"displayName":"h","relative-type-0":"tuto hodinu","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} h","relativeTimePattern-count-few":"za {0} h","relativeTimePattern-count-many":"za {0} h","relativeTimePattern-count-other":"za {0} h"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} h","relativeTimePattern-count-few":"před {0} h","relativeTimePattern-count-many":"před {0} h","relativeTimePattern-count-other":"před {0} h"}},"minute":{"displayName":"minuta","relative-type-0":"tuto minutu","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} minutu","relativeTimePattern-count-few":"za {0} minuty","relativeTimePattern-count-many":"za {0} minuty","relativeTimePattern-count-other":"za {0} minut"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} minutou","relativeTimePattern-count-few":"před {0} minutami","relativeTimePattern-count-many":"před {0} minuty","relativeTimePattern-count-other":"před {0} minutami"}},"minute-short":{"displayName":"min","relative-type-0":"tuto minutu","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} min","relativeTimePattern-count-few":"za {0} min","relativeTimePattern-count-many":"za {0} min","relativeTimePattern-count-other":"za {0} min"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} min","relativeTimePattern-count-few":"před {0} min","relativeTimePattern-count-many":"před {0} min","relativeTimePattern-count-other":"před {0} min"}},"minute-narrow":{"displayName":"min","relative-type-0":"tuto minutu","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} min","relativeTimePattern-count-few":"za {0} min","relativeTimePattern-count-many":"za {0} min","relativeTimePattern-count-other":"za {0} min"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} min","relativeTimePattern-count-few":"před {0} min","relativeTimePattern-count-many":"před {0} min","relativeTimePattern-count-other":"před {0} min"}},"second":{"displayName":"sekunda","relative-type-0":"nyní","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} sekundu","relativeTimePattern-count-few":"za {0} sekundy","relativeTimePattern-count-many":"za {0} sekundy","relativeTimePattern-count-other":"za {0} sekund"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} sekundou","relativeTimePattern-count-few":"před {0} sekundami","relativeTimePattern-count-many":"před {0} sekundy","relativeTimePattern-count-other":"před {0} sekundami"}},"second-short":{"displayName":"s","relative-type-0":"nyní","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} s","relativeTimePattern-count-few":"za {0} s","relativeTimePattern-count-many":"za {0} s","relativeTimePattern-count-other":"za {0} s"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} s","relativeTimePattern-count-few":"před {0} s","relativeTimePattern-count-many":"před {0} s","relativeTimePattern-count-other":"před {0} s"}},"second-narrow":{"displayName":"s","relative-type-0":"nyní","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} s","relativeTimePattern-count-few":"za {0} s","relativeTimePattern-count-many":"za {0} s","relativeTimePattern-count-other":"za {0} s"},"relativeTime-type-past":{"relativeTimePattern-count-one":"před {0} s","relativeTimePattern-count-few":"před {0} s","relativeTimePattern-count-many":"před {0} s","relativeTimePattern-count-other":"před {0} s"}},"zone":{"displayName":"časové pásmo"},"zone-short":{"displayName":"čas. pásmo"},"zone-narrow":{"displayName":"pásmo"}}},"numbers":{"currencies":{"ADP":{"displayName":"andorrská peseta","displayName-count-one":"andorrská peseta","displayName-count-few":"andorrské pesety","displayName-count-many":"andorrské pesety","displayName-count-other":"andorrských peset","symbol":"ADP"},"AED":{"displayName":"SAE dirham","displayName-count-one":"SAE dirham","displayName-count-few":"SAE dirhamy","displayName-count-many":"SAE dirhamu","displayName-count-other":"SAE dirhamů","symbol":"AED"},"AFA":{"displayName":"afghánský afghán (1927–2002)","displayName-count-one":"afghánský afghán (1927–2002)","displayName-count-few":"afghánské afghány (1927–2002)","displayName-count-many":"afghánského afghánu (1927–2002)","displayName-count-other":"afghánských afghánů (1927–2002)","symbol":"AFA"},"AFN":{"displayName":"afghánský afghán","displayName-count-one":"afghánský afghán","displayName-count-few":"afghánské afghány","displayName-count-many":"afghánského afghánu","displayName-count-other":"afghánských afghánů","symbol":"AFN"},"ALK":{"displayName":"albánský lek (1946–1965)","displayName-count-one":"albánský lek (1946–1965)","displayName-count-few":"albánské leky (1946–1965)","displayName-count-many":"albánského leku (1946–1965)","displayName-count-other":"albánských leků (1946–1965)","symbol":"ALK"},"ALL":{"displayName":"albánský lek","displayName-count-one":"albánský lek","displayName-count-few":"albánské leky","displayName-count-many":"albánského leku","displayName-count-other":"albánských leků","symbol":"ALL"},"AMD":{"displayName":"arménský dram","displayName-count-one":"arménský dram","displayName-count-few":"arménské dramy","displayName-count-many":"arménského dramu","displayName-count-other":"arménských dramů","symbol":"AMD"},"ANG":{"displayName":"nizozemskoantilský gulden","displayName-count-one":"nizozemskoantilský gulden","displayName-count-few":"nizozemskoantilské guldeny","displayName-count-many":"nizozemskoantilského guldenu","displayName-count-other":"nizozemskoantilských guldenů","symbol":"ANG"},"AOA":{"displayName":"angolská kwanza","displayName-count-one":"angolská kwanza","displayName-count-few":"angolské kwanzy","displayName-count-many":"angolské kwanzy","displayName-count-other":"angolských kwanz","symbol":"AOA","symbol-alt-narrow":"Kz"},"AOK":{"displayName":"angolská kwanza (1977–1991)","displayName-count-one":"angolská kwanza (1977–1991)","displayName-count-few":"angolské kwanzy (1977–1991)","displayName-count-many":"angolské kwanzy (1977–1991)","displayName-count-other":"angolských kwanz (1977–1991)","symbol":"AOK"},"AON":{"displayName":"angolská kwanza (1990–2000)","displayName-count-one":"angolská kwanza (1990–2000)","displayName-count-few":"angolské kwanzy (1990–2000)","displayName-count-many":"angolské kwanzy (1990–2000)","displayName-count-other":"angolských kwanz (1990–2000)","symbol":"AON"},"AOR":{"displayName":"angolská kwanza (1995–1999)","displayName-count-one":"angolská nový kwanza (1995–1999)","displayName-count-few":"angolská kwanza (1995–1999)","displayName-count-many":"angolské kwanzy (1995–1999)","displayName-count-other":"angolských kwanz (1995–1999)","symbol":"AOR"},"ARA":{"displayName":"argentinský austral","displayName-count-one":"argentinský austral","displayName-count-few":"argentinské australy","displayName-count-many":"argentinského australu","displayName-count-other":"argentinských australů","symbol":"ARA"},"ARL":{"displayName":"argentinské peso ley (1970–1983)","displayName-count-one":"argentinské peso ley (1970–1983)","displayName-count-few":"argentinská pesa ley (1970–1983)","displayName-count-many":"argentinského pesa ley (1970–1983)","displayName-count-other":"argentinských pes ley (1970–1983)","symbol":"ARL"},"ARM":{"displayName":"argentinské peso (1881–1970)","displayName-count-one":"argentinské peso (1881–1970)","displayName-count-few":"argentinská pesa (1881–1970)","displayName-count-many":"argentinského pesa (1881–1970)","displayName-count-other":"argentinských pes (1881–1970)","symbol":"ARM"},"ARP":{"displayName":"argentinské peso (1983–1985)","displayName-count-one":"argentinské peso (1983–1985)","displayName-count-few":"argentinská pesa (1983–1985)","displayName-count-many":"argentinského pesa (1983–1985)","displayName-count-other":"argentinských pes (1983–1985)","symbol":"ARP"},"ARS":{"displayName":"argentinské peso","displayName-count-one":"argentinské peso","displayName-count-few":"argentinská pesa","displayName-count-many":"argentinského pesa","displayName-count-other":"argentinských pes","symbol":"ARS","symbol-alt-narrow":"$"},"ATS":{"displayName":"rakouský šilink","displayName-count-one":"rakouský šilink","displayName-count-few":"rakouské šilinky","displayName-count-many":"rakouského šilinku","displayName-count-other":"rakouských šilinků","symbol":"ATS"},"AUD":{"displayName":"australský dolar","displayName-count-one":"australský dolar","displayName-count-few":"australské dolary","displayName-count-many":"australského dolaru","displayName-count-other":"australských dolarů","symbol":"AU$","symbol-alt-narrow":"$"},"AWG":{"displayName":"arubský zlatý","displayName-count-one":"arubský zlatý","displayName-count-few":"arubské zlaté","displayName-count-many":"arubského zlatého","displayName-count-other":"arubských zlatých","symbol":"AWG"},"AZM":{"displayName":"ázerbájdžánský manat (1993–2006)","displayName-count-one":"ázerbájdžánský manat (1993–2006)","displayName-count-few":"ázerbájdžánské manaty (1993–2006)","displayName-count-many":"ázerbájdžánského manatu (1993–2006)","displayName-count-other":"ázerbájdžánských manatů (1993–2006)","symbol":"AZM"},"AZN":{"displayName":"ázerbájdžánský manat","displayName-count-one":"ázerbájdžánský manat","displayName-count-few":"ázerbájdžánské manaty","displayName-count-many":"ázerbájdžánského manatu","displayName-count-other":"ázerbájdžánských manatů","symbol":"AZN"},"BAD":{"displayName":"bosenský dinár (1992–1994)","displayName-count-one":"bosenský dinár (1992–1994)","displayName-count-few":"bosenské dináry (1992–1994)","displayName-count-many":"bosenského dináru (1992–1994)","displayName-count-other":"bosenských dinárů (1992–1994)","symbol":"BAD"},"BAM":{"displayName":"bosenská konvertibilní marka","displayName-count-one":"bosenská konvertibilní marka","displayName-count-few":"bosenské konvertibilní marky","displayName-count-many":"bosenské konvertibilní marky","displayName-count-other":"bosenských konvertibilních marek","symbol":"BAM","symbol-alt-narrow":"KM"},"BAN":{"displayName":"bosenský nový dinár (1994–1997)","displayName-count-one":"bosenský nový dinár (1994–1997)","displayName-count-few":"bosenské nové dináry (1994–1997)","displayName-count-many":"bosenského nového dináru (1994–1997)","displayName-count-other":"bosenských nových dinárů (1994–1997)","symbol":"BAN"},"BBD":{"displayName":"barbadoský dolar","displayName-count-one":"barbadoský dolar","displayName-count-few":"barbadoské dolary","displayName-count-many":"barbadoského dolaru","displayName-count-other":"barbadoských dolarů","symbol":"BBD","symbol-alt-narrow":"$"},"BDT":{"displayName":"bangladéšská taka","displayName-count-one":"bangladéšská taka","displayName-count-few":"bangladéšské taky","displayName-count-many":"bangladéšské taky","displayName-count-other":"bangladéšských tak","symbol":"BDT","symbol-alt-narrow":"৳"},"BEC":{"displayName":"belgický konvertibilní frank","displayName-count-one":"belgický konvertibilní frank","displayName-count-few":"belgické konvertibilní franky","displayName-count-many":"belgického konvertibilního franku","displayName-count-other":"belgických konvertibilních franků","symbol":"BEC"},"BEF":{"displayName":"belgický frank","displayName-count-one":"belgický frank","displayName-count-few":"belgické franky","displayName-count-many":"belgického franku","displayName-count-other":"belgických franků","symbol":"BEF"},"BEL":{"displayName":"belgický finanční frank","displayName-count-one":"belgický finanční frank","displayName-count-few":"belgické finanční franky","displayName-count-many":"belgického finančního franku","displayName-count-other":"belgických finančních franků","symbol":"BEL"},"BGL":{"displayName":"bulharský tvrdý leva","displayName-count-one":"bulharský tvrdý leva","displayName-count-few":"bulharské tvrdé leva","displayName-count-many":"bulharského tvrdého leva","displayName-count-other":"bulharských tvrdých leva","symbol":"BGL"},"BGM":{"displayName":"bulharský socialistický leva","displayName-count-one":"bulharský socialistický leva","displayName-count-few":"bulharské socialistické leva","displayName-count-many":"bulharského socialistického leva","displayName-count-other":"bulharských socialistických leva","symbol":"BGM"},"BGN":{"displayName":"bulharský leva","displayName-count-one":"bulharský leva","displayName-count-few":"bulharské leva","displayName-count-many":"bulharského leva","displayName-count-other":"bulharských leva","symbol":"BGN"},"BGO":{"displayName":"bulharský lev (1879–1952)","displayName-count-one":"bulharský lev (1879–1952)","displayName-count-few":"bulharské leva (1879–1952)","displayName-count-many":"bulharského leva (1879–1952)","displayName-count-other":"bulharských leva (1879–1952)","symbol":"BGO"},"BHD":{"displayName":"bahrajnský dinár","displayName-count-one":"bahrajnský dinár","displayName-count-few":"bahrajnské dináry","displayName-count-many":"bahrajnského dináru","displayName-count-other":"bahrajnských dinárů","symbol":"BHD"},"BIF":{"displayName":"burundský frank","displayName-count-one":"burundský frank","displayName-count-few":"burundské franky","displayName-count-many":"burundského franku","displayName-count-other":"burundských franků","symbol":"BIF"},"BMD":{"displayName":"bermudský dolar","displayName-count-one":"bermudský dolar","displayName-count-few":"bermudské dolary","displayName-count-many":"bermudského dolaru","displayName-count-other":"bermudských dolarů","symbol":"BMD","symbol-alt-narrow":"$"},"BND":{"displayName":"brunejský dolar","displayName-count-one":"brunejský dolar","displayName-count-few":"brunejské dolary","displayName-count-many":"brunejského dolaru","displayName-count-other":"brunejských dolarů","symbol":"BND","symbol-alt-narrow":"$"},"BOB":{"displayName":"bolivijský boliviano","displayName-count-one":"bolivijský boliviano","displayName-count-few":"bolivijské bolivianos","displayName-count-many":"bolivijského boliviana","displayName-count-other":"bolivijských bolivianos","symbol":"BOB","symbol-alt-narrow":"Bs"},"BOL":{"displayName":"bolivijský boliviano (1863–1963)","displayName-count-one":"bolivijský boliviano (1863–1963)","displayName-count-few":"bolivijské bolivianos (1863–1963)","displayName-count-many":"bolivijského boliviana (1863–1963)","displayName-count-other":"bolivijských bolivianos (1863–1963)","symbol":"BOL"},"BOP":{"displayName":"bolivijské peso","displayName-count-one":"bolivijské peso","displayName-count-few":"bolivijská pesa","displayName-count-many":"bolivijského pesa","displayName-count-other":"bolivijských pes","symbol":"BOP"},"BOV":{"displayName":"bolivijský mvdol","displayName-count-one":"bolivijský mvdol","displayName-count-few":"bolivijské mvdoly","displayName-count-many":"bolivijského mvdolu","displayName-count-other":"bolivijských mvdolů","symbol":"BOV"},"BRB":{"displayName":"brazilské nové cruzeiro (1967–1986)","displayName-count-one":"brazilské nové cruzeiro (1967–1986)","displayName-count-few":"brazilská nová cruzeira (1967–1986)","displayName-count-many":"brazilského nového cruzeira (1967–1986)","displayName-count-other":"brazilských nových cruzeir (1967–1986)","symbol":"BRB"},"BRC":{"displayName":"brazilské cruzado (1986–1989)","displayName-count-one":"brazilské cruzado (1986–1989)","displayName-count-few":"brazilská cruzada (1986–1989)","displayName-count-many":"brazilského cruzada (1986–1989)","displayName-count-other":"brazilských cruzad (1986–1989)","symbol":"BRC"},"BRE":{"displayName":"brazilské cruzeiro (1990–1993)","displayName-count-one":"brazilské cruzeiro (1990–1993)","displayName-count-few":"brazilská cruzeira (1990–1993)","displayName-count-many":"brazilského cruzeira (1990–1993)","displayName-count-other":"brazilských cruzeir (1990–1993)","symbol":"BRE"},"BRL":{"displayName":"brazilský real","displayName-count-one":"brazilský real","displayName-count-few":"brazilské realy","displayName-count-many":"brazilského realu","displayName-count-other":"brazilských realů","symbol":"R$","symbol-alt-narrow":"R$"},"BRN":{"displayName":"brazilské nové cruzado (1989–1990)","displayName-count-one":"brazilské nové cruzado (1989–1990)","displayName-count-few":"brazilská nová cruzada (1989–1990)","displayName-count-many":"brazilského nového cruzada (1989–1990)","displayName-count-other":"brazilských nových cruzad (1989–1990)","symbol":"BRN"},"BRR":{"displayName":"brazilské cruzeiro (1993–1994)","displayName-count-one":"brazilské cruzeiro (1993–1994)","displayName-count-few":"brazilská cruzeira (1993–1994)","displayName-count-many":"brazilského cruzeira (1993–1994)","displayName-count-other":"brazilských cruzeir (1993–1994)","symbol":"BRR"},"BRZ":{"displayName":"brazilské cruzeiro (1942–1967)","displayName-count-one":"brazilské cruzeiro (1942–1967)","displayName-count-few":"brazilská cruzeira (1942–1967)","displayName-count-many":"brazilského cruzeira (1942–1967)","displayName-count-other":"brazilských cruzeir (1942–1967)","symbol":"BRZ"},"BSD":{"displayName":"bahamský dolar","displayName-count-one":"bahamský dolar","displayName-count-few":"bahamské dolary","displayName-count-many":"bahamského dolaru","displayName-count-other":"bahamských dolarů","symbol":"BSD","symbol-alt-narrow":"$"},"BTN":{"displayName":"bhútánský ngultrum","displayName-count-one":"bhútánský ngultrum","displayName-count-few":"bhútánské ngultrumy","displayName-count-many":"bhútánského ngultrumu","displayName-count-other":"bhútánských ngultrumů","symbol":"BTN"},"BUK":{"displayName":"barmský kyat","displayName-count-one":"barmský kyat","displayName-count-few":"barmské kyaty","displayName-count-many":"barmského kyatu","displayName-count-other":"barmských kyatů","symbol":"BUK"},"BWP":{"displayName":"botswanská pula","displayName-count-one":"botswanská pula","displayName-count-few":"botswanské puly","displayName-count-many":"botswanské puly","displayName-count-other":"botswanských pul","symbol":"BWP","symbol-alt-narrow":"P"},"BYB":{"displayName":"běloruský rubl (1994–1999)","displayName-count-one":"běloruský rubl (1994–1999)","displayName-count-few":"běloruské rubly (1994–1999)","displayName-count-many":"běloruského rublu (1994–1999)","displayName-count-other":"běloruských rublů (1994–1999)","symbol":"BYB"},"BYN":{"displayName":"běloruský rubl","displayName-count-one":"běloruský rubl","displayName-count-few":"běloruské rubly","displayName-count-many":"běloruského rublu","displayName-count-other":"běloruských rublů","symbol":"BYN","symbol-alt-narrow":"р."},"BYR":{"displayName":"běloruský rubl (2000–2016)","displayName-count-one":"běloruský rubl (2000–2016)","displayName-count-few":"běloruské rubly (2000–2016)","displayName-count-many":"běloruského rublu (2000–2016)","displayName-count-other":"běloruských rublů (2000–2016)","symbol":"BYR"},"BZD":{"displayName":"belizský dolar","displayName-count-one":"belizský dolar","displayName-count-few":"belizské dolary","displayName-count-many":"belizského dolaru","displayName-count-other":"belizských dolarů","symbol":"BZD","symbol-alt-narrow":"$"},"CAD":{"displayName":"kanadský dolar","displayName-count-one":"kanadský dolar","displayName-count-few":"kanadské dolary","displayName-count-many":"kanadského dolaru","displayName-count-other":"kanadských dolarů","symbol":"CA$","symbol-alt-narrow":"$"},"CDF":{"displayName":"konžský frank","displayName-count-one":"konžský frank","displayName-count-few":"konžské franky","displayName-count-many":"konžského franku","displayName-count-other":"konžských franků","symbol":"CDF"},"CHE":{"displayName":"švýcarské WIR-euro","displayName-count-one":"švýcarské WIR-euro","displayName-count-few":"švýcarská WIR-eura","displayName-count-many":"švýcarského WIR-eura","displayName-count-other":"švýcarských WIR-eur","symbol":"CHE"},"CHF":{"displayName":"švýcarský frank","displayName-count-one":"švýcarský frank","displayName-count-few":"švýcarské franky","displayName-count-many":"švýcarského franku","displayName-count-other":"švýcarských franků","symbol":"CHF"},"CHW":{"displayName":"švýcarský WIR-frank","displayName-count-one":"švýcarský WIR-frank","displayName-count-few":"švýcarské WIR-franky","displayName-count-many":"švýcarského WIR-franku","displayName-count-other":"švýcarských WIR-franků","symbol":"CHW"},"CLE":{"displayName":"chilské escudo","displayName-count-one":"chilské escudo","displayName-count-few":"chilská escuda","displayName-count-many":"chilského escuda","displayName-count-other":"chilských escud","symbol":"CLE"},"CLF":{"displayName":"chilská účetní jednotka (UF)","displayName-count-one":"chilská účetní jednotka (UF)","displayName-count-few":"chilské účetní jednotky (UF)","displayName-count-many":"chilské účetní jednotky (UF)","displayName-count-other":"chilských účetních jednotek (UF)","symbol":"CLF"},"CLP":{"displayName":"chilské peso","displayName-count-one":"chilské peso","displayName-count-few":"chilská pesa","displayName-count-many":"chilského pesa","displayName-count-other":"chilských pes","symbol":"CLP","symbol-alt-narrow":"$"},"CNH":{"displayName":"čínský jüan (offshore)","displayName-count-one":"čínský jüan (offshore)","displayName-count-few":"čínské jüany (offshore)","displayName-count-many":"čínského jüanu (offshore)","displayName-count-other":"čínských jüanů (offshore)","symbol":"CNH"},"CNX":{"displayName":"čínský dolar ČLB","displayName-count-one":"čínský dolar ČLB","displayName-count-few":"čínské dolary ČLB","displayName-count-many":"čínského dolaru ČLB","displayName-count-other":"čínských dolarů ČLB","symbol":"CNX"},"CNY":{"displayName":"čínský jüan","displayName-count-one":"čínský jüan","displayName-count-few":"čínské jüany","displayName-count-many":"čínského jüanu","displayName-count-other":"čínských jüanů","symbol":"CN¥","symbol-alt-narrow":"¥"},"COP":{"displayName":"kolumbijské peso","displayName-count-one":"kolumbijské peso","displayName-count-few":"kolumbijská pesa","displayName-count-many":"kolumbijského pesa","displayName-count-other":"kolumbijských pes","symbol":"COP","symbol-alt-narrow":"$"},"COU":{"displayName":"kolumbijská jednotka reálné hodnoty","displayName-count-one":"kolumbijská jednotka reálné hodnoty","displayName-count-few":"kolumbijské jednotky reálné hodnoty","displayName-count-many":"kolumbijské jednotky reálné hodnoty","displayName-count-other":"kolumbijských jednotek reálné hodnoty","symbol":"COU"},"CRC":{"displayName":"kostarický colón","displayName-count-one":"kostarický colón","displayName-count-few":"kostarické colóny","displayName-count-many":"kostarického colónu","displayName-count-other":"kostarických colónů","symbol":"CRC","symbol-alt-narrow":"₡"},"CSD":{"displayName":"srbský dinár (2002–2006)","displayName-count-one":"srbský dinár (2002–2006)","displayName-count-few":"srbské dináry (2002–2006)","displayName-count-many":"srbského dináru (2002–2006)","displayName-count-other":"srbských dinárů (2002–2006)","symbol":"CSD"},"CSK":{"displayName":"československá koruna","displayName-count-one":"československá koruna","displayName-count-few":"československé koruny","displayName-count-many":"československé koruny","displayName-count-other":"československých korun","symbol":"Kčs"},"CUC":{"displayName":"kubánské konvertibilní peso","displayName-count-one":"kubánské konvertibilní peso","displayName-count-few":"kubánská konvertibilní pesa","displayName-count-many":"kubánského konvertibilního pesa","displayName-count-other":"kubánských konvertibilních pes","symbol":"CUC","symbol-alt-narrow":"$"},"CUP":{"displayName":"kubánské peso","displayName-count-one":"kubánské peso","displayName-count-few":"kubánská pesa","displayName-count-many":"kubánského pesa","displayName-count-other":"kubánských pes","symbol":"CUP","symbol-alt-narrow":"$"},"CVE":{"displayName":"kapverdské escudo","displayName-count-one":"kapverdské escudo","displayName-count-few":"kapverdská escuda","displayName-count-many":"kapverdského escuda","displayName-count-other":"kapverdských escud","symbol":"CVE"},"CYP":{"displayName":"kyperská libra","displayName-count-one":"kyperská libra","displayName-count-few":"kyperské libry","displayName-count-many":"kyperské libry","displayName-count-other":"kyperských liber","symbol":"CYP"},"CZK":{"displayName":"česká koruna","displayName-count-one":"česká koruna","displayName-count-few":"české koruny","displayName-count-many":"české koruny","displayName-count-other":"českých korun","symbol":"Kč","symbol-alt-narrow":"Kč"},"DDM":{"displayName":"východoněmecká marka","displayName-count-one":"východoněmecká marka","displayName-count-few":"východoněmecké marky","displayName-count-many":"východoněmecké marky","displayName-count-other":"východoněmeckých marek","symbol":"DDM"},"DEM":{"displayName":"německá marka","displayName-count-one":"německá marka","displayName-count-few":"německé marky","displayName-count-many":"německé marky","displayName-count-other":"německých marek","symbol":"DEM"},"DJF":{"displayName":"džibutský frank","displayName-count-one":"džibutský frank","displayName-count-few":"džibutské franky","displayName-count-many":"džibutského franku","displayName-count-other":"džibutských franků","symbol":"DJF"},"DKK":{"displayName":"dánská koruna","displayName-count-one":"dánská koruna","displayName-count-few":"dánské koruny","displayName-count-many":"dánské koruny","displayName-count-other":"dánských korun","symbol":"DKK","symbol-alt-narrow":"kr"},"DOP":{"displayName":"dominikánské peso","displayName-count-one":"dominikánské peso","displayName-count-few":"dominikánská pesa","displayName-count-many":"dominikánského pesa","displayName-count-other":"dominikánských pes","symbol":"DOP","symbol-alt-narrow":"$"},"DZD":{"displayName":"alžírský dinár","displayName-count-one":"alžírský dinár","displayName-count-few":"alžírské dináry","displayName-count-many":"alžírského dináru","displayName-count-other":"alžírských dinárů","symbol":"DZD"},"ECS":{"displayName":"ekvádorský sucre","displayName-count-one":"ekvádorský sucre","displayName-count-few":"ekvádorské sucre","displayName-count-many":"ekvádorského sucre","displayName-count-other":"ekvádorských sucre","symbol":"ECS"},"ECV":{"displayName":"ekvádorská jednotka konstantní hodnoty","displayName-count-one":"ekvádorská jednotka konstantní hodnoty","displayName-count-few":"ekvádorské jednotky konstantní hodnoty","displayName-count-many":"ekvádorské jednotky konstantní hodnoty","displayName-count-other":"ekvádorských jednotek konstantní hodnoty","symbol":"ECV"},"EEK":{"displayName":"estonská koruna","displayName-count-one":"estonská koruna","displayName-count-few":"estonské koruny","displayName-count-many":"estonské koruny","displayName-count-other":"estonských korun","symbol":"EEK"},"EGP":{"displayName":"egyptská libra","displayName-count-one":"egyptská libra","displayName-count-few":"egyptské libry","displayName-count-many":"egyptské libry","displayName-count-other":"egyptských liber","symbol":"EGP","symbol-alt-narrow":"E£"},"ERN":{"displayName":"eritrejská nakfa","displayName-count-one":"eritrejská nakfa","displayName-count-few":"eritrejské nakfy","displayName-count-many":"eritrejské nakfy","displayName-count-other":"eritrejských nakf","symbol":"ERN"},"ESA":{"displayName":"španělská peseta („A“ účet)","displayName-count-one":"španělská peseta („A“ účet)","displayName-count-few":"španělské pesety („A“ účet)","displayName-count-many":"španělské pesety („A“ účet)","displayName-count-other":"španělských peset („A“ účet)","symbol":"ESA"},"ESB":{"displayName":"španělská peseta (konvertibilní účet)","displayName-count-one":"španělská peseta (konvertibilní účet)","displayName-count-few":"španělské pesety (konvertibilní účet)","displayName-count-many":"španělské pesety (konvertibilní účet)","displayName-count-other":"španělských peset (konvertibilní účet)","symbol":"ESB"},"ESP":{"displayName":"španělská peseta","displayName-count-one":"španělská peseta","displayName-count-few":"španělské pesety","displayName-count-many":"španělské pesety","displayName-count-other":"španělských peset","symbol":"ESP","symbol-alt-narrow":"₧"},"ETB":{"displayName":"etiopský birr","displayName-count-one":"etiopský birr","displayName-count-few":"etiopské birry","displayName-count-many":"etiopského birru","displayName-count-other":"etiopských birrů","symbol":"ETB"},"EUR":{"displayName":"euro","displayName-count-one":"euro","displayName-count-few":"eura","displayName-count-many":"eura","displayName-count-other":"eur","symbol":"€","symbol-alt-narrow":"€"},"FIM":{"displayName":"finská marka","displayName-count-one":"finská marka","displayName-count-few":"finské marky","displayName-count-many":"finské marky","displayName-count-other":"finských marek","symbol":"FIM"},"FJD":{"displayName":"fidžijský dolar","displayName-count-one":"fidžijský dolar","displayName-count-few":"fidžijské dolary","displayName-count-many":"fidžijského dolaru","displayName-count-other":"fidžijských dolarů","symbol":"FJD","symbol-alt-narrow":"$"},"FKP":{"displayName":"falklandská libra","displayName-count-one":"falklandská libra","displayName-count-few":"falklandské libry","displayName-count-many":"falklandské libry","displayName-count-other":"falklandských liber","symbol":"FKP","symbol-alt-narrow":"£"},"FRF":{"displayName":"francouzský frank","displayName-count-one":"francouzský frank","displayName-count-few":"francouzské franky","displayName-count-many":"francouzského franku","displayName-count-other":"francouzských franků","symbol":"FRF"},"GBP":{"displayName":"britská libra","displayName-count-one":"britská libra","displayName-count-few":"britské libry","displayName-count-many":"britské libry","displayName-count-other":"britských liber","symbol":"£","symbol-alt-narrow":"£"},"GEK":{"displayName":"gruzínské kuponové lari","displayName-count-one":"gruzínské kuponové lari","displayName-count-few":"gruzínské kuponové lari","displayName-count-many":"gruzínského kuponového lari","displayName-count-other":"gruzínských kuponových lari","symbol":"GEK"},"GEL":{"displayName":"gruzínské lari","displayName-count-one":"gruzínské lari","displayName-count-few":"gruzínské lari","displayName-count-many":"gruzínského lari","displayName-count-other":"gruzínských lari","symbol":"GEL","symbol-alt-narrow":"₾","symbol-alt-variant":"₾"},"GHC":{"displayName":"ghanský cedi (1979–2007)","displayName-count-one":"ghanský cedi (1979–2007)","displayName-count-few":"ghanské cedi (1979–2007)","displayName-count-many":"ghanského cedi (1979–2007)","displayName-count-other":"ghanských cedi (1979–2007)","symbol":"GHC"},"GHS":{"displayName":"ghanský cedi","displayName-count-one":"ghanský cedi","displayName-count-few":"ghanské cedi","displayName-count-many":"ghanského cedi","displayName-count-other":"ghanských cedi","symbol":"GHS"},"GIP":{"displayName":"gibraltarská libra","displayName-count-one":"gibraltarská libra","displayName-count-few":"gibraltarské libry","displayName-count-many":"gibraltarské libry","displayName-count-other":"gibraltarských liber","symbol":"GIP","symbol-alt-narrow":"£"},"GMD":{"displayName":"gambijský dalasi","displayName-count-one":"gambijský dalasi","displayName-count-few":"gambijské dalasi","displayName-count-many":"gambijského dalasi","displayName-count-other":"gambijských dalasi","symbol":"GMD"},"GNF":{"displayName":"guinejský frank","displayName-count-one":"guinejský frank","displayName-count-few":"guinejské franky","displayName-count-many":"guinejského franku","displayName-count-other":"guinejských franků","symbol":"GNF","symbol-alt-narrow":"FG"},"GNS":{"displayName":"guinejský syli","displayName-count-one":"guinejský syli","displayName-count-few":"guinejské syli","displayName-count-many":"guinejského syli","displayName-count-other":"guinejských syli","symbol":"GNS"},"GQE":{"displayName":"rovníkovoguinejský ekwele","displayName-count-one":"rovníkovoguinejský ekwele","displayName-count-few":"rovníkovoguinejské ekwele","displayName-count-many":"rovníkovoguinejského ekwele","displayName-count-other":"rovníkovoguinejských ekwele","symbol":"GQE"},"GRD":{"displayName":"řecká drachma","displayName-count-one":"řecká drachma","displayName-count-few":"řecké drachmy","displayName-count-many":"řecké drachmy","displayName-count-other":"řeckých drachem","symbol":"GRD"},"GTQ":{"displayName":"guatemalský quetzal","displayName-count-one":"guatemalský quetzal","displayName-count-few":"guatemalské quetzaly","displayName-count-many":"guatemalského quetzalu","displayName-count-other":"guatemalských quetzalů","symbol":"GTQ","symbol-alt-narrow":"Q"},"GWE":{"displayName":"portugalskoguinejské escudo","displayName-count-one":"portugalskoguinejské escudo","displayName-count-few":"portugalskoguinejská escuda","displayName-count-many":"portugalskoguinejského escuda","displayName-count-other":"portugalskoguinejských escud","symbol":"GWE"},"GWP":{"displayName":"guinejsko-bissauské peso","displayName-count-one":"guinejsko-bissauské peso","displayName-count-few":"guinejsko-bissauská pesa","displayName-count-many":"guinejsko-bissauského pesa","displayName-count-other":"guinejsko-bissauských pes","symbol":"GWP"},"GYD":{"displayName":"guyanský dolar","displayName-count-one":"guyanský dolar","displayName-count-few":"guyanské dolary","displayName-count-many":"guyanského dolaru","displayName-count-other":"guyanských dolarů","symbol":"GYD","symbol-alt-narrow":"$"},"HKD":{"displayName":"hongkongský dolar","displayName-count-one":"hongkongský dolar","displayName-count-few":"hongkongské dolary","displayName-count-many":"hongkongského dolaru","displayName-count-other":"hongkongských dolarů","symbol":"HK$","symbol-alt-narrow":"$"},"HNL":{"displayName":"honduraská lempira","displayName-count-one":"honduraská lempira","displayName-count-few":"honduraské lempiry","displayName-count-many":"honduraské lempiry","displayName-count-other":"honduraských lempir","symbol":"HNL","symbol-alt-narrow":"L"},"HRD":{"displayName":"chorvatský dinár","displayName-count-one":"chorvatský dinár","displayName-count-few":"chorvatské dináry","displayName-count-many":"chorvatského dináru","displayName-count-other":"chorvatských dinárů","symbol":"HRD"},"HRK":{"displayName":"chorvatská kuna","displayName-count-one":"chorvatská kuna","displayName-count-few":"chorvatské kuny","displayName-count-many":"chorvatské kuny","displayName-count-other":"chorvatských kun","symbol":"HRK","symbol-alt-narrow":"kn"},"HTG":{"displayName":"haitský gourde","displayName-count-one":"haitský gourde","displayName-count-few":"haitské gourde","displayName-count-many":"haitského gourde","displayName-count-other":"haitských gourde","symbol":"HTG"},"HUF":{"displayName":"maďarský forint","displayName-count-one":"maďarský forint","displayName-count-few":"maďarské forinty","displayName-count-many":"maďarského forintu","displayName-count-other":"maďarských forintů","symbol":"HUF","symbol-alt-narrow":"Ft"},"IDR":{"displayName":"indonéská rupie","displayName-count-one":"indonéská rupie","displayName-count-few":"indonéské rupie","displayName-count-many":"indonéské rupie","displayName-count-other":"indonéských rupií","symbol":"IDR","symbol-alt-narrow":"Rp"},"IEP":{"displayName":"irská libra","displayName-count-one":"irská libra","displayName-count-few":"irské libry","displayName-count-many":"irské libry","displayName-count-other":"irských liber","symbol":"IEP"},"ILP":{"displayName":"izraelská libra","displayName-count-one":"izraelská libra","displayName-count-few":"izraelské libry","displayName-count-many":"izraelské libry","displayName-count-other":"izraelských liber","symbol":"ILP"},"ILR":{"displayName":"izraelský šekel (1980–1985)","displayName-count-one":"izraelský šekel (1980–1985)","displayName-count-few":"izraelské šekely (1980–1985)","displayName-count-many":"izraelského šekelu (1980–1985)","displayName-count-other":"izraelských šekelů (1980–1985)","symbol":"ILR"},"ILS":{"displayName":"izraelský nový šekel","displayName-count-one":"izraelský nový šekel","displayName-count-few":"izraelské nové šekely","displayName-count-many":"izraelského nového šekelu","displayName-count-other":"izraelských nový šekelů","symbol":"ILS","symbol-alt-narrow":"₪"},"INR":{"displayName":"indická rupie","displayName-count-one":"indická rupie","displayName-count-few":"indické rupie","displayName-count-many":"indické rupie","displayName-count-other":"indických rupií","symbol":"INR","symbol-alt-narrow":"₹"},"IQD":{"displayName":"irácký dinár","displayName-count-one":"irácký dinár","displayName-count-few":"irácké dináry","displayName-count-many":"iráckého dináru","displayName-count-other":"iráckých dinárů","symbol":"IQD"},"IRR":{"displayName":"íránský rijál","displayName-count-one":"íránský rijál","displayName-count-few":"íránské rijály","displayName-count-many":"íránského rijálu","displayName-count-other":"íránských rijálů","symbol":"IRR"},"ISJ":{"displayName":"islandská koruna (1918–1981)","displayName-count-one":"islandská koruna (1918–1981)","displayName-count-few":"islandské koruny (1918–1981)","displayName-count-many":"islandské koruny (1918–1981)","displayName-count-other":"islandských korun (1918–1981)","symbol":"ISJ"},"ISK":{"displayName":"islandská koruna","displayName-count-one":"islandská koruna","displayName-count-few":"islandské koruny","displayName-count-many":"islandské koruny","displayName-count-other":"islandských korun","symbol":"ISK","symbol-alt-narrow":"kr"},"ITL":{"displayName":"italská lira","displayName-count-one":"italská lira","displayName-count-few":"italské liry","displayName-count-many":"italské liry","displayName-count-other":"italských lir","symbol":"ITL"},"JMD":{"displayName":"jamajský dolar","displayName-count-one":"jamajský dolar","displayName-count-few":"jamajské dolary","displayName-count-many":"jamajského dolaru","displayName-count-other":"jamajských dolarů","symbol":"JMD","symbol-alt-narrow":"$"},"JOD":{"displayName":"jordánský dinár","displayName-count-one":"jordánský dinár","displayName-count-few":"jordánské dináry","displayName-count-many":"jordánského dináru","displayName-count-other":"jordánských dinárů","symbol":"JOD"},"JPY":{"displayName":"japonský jen","displayName-count-one":"japonský jen","displayName-count-few":"japonské jeny","displayName-count-many":"japonského jenu","displayName-count-other":"japonských jenů","symbol":"JP¥","symbol-alt-narrow":"¥"},"KES":{"displayName":"keňský šilink","displayName-count-one":"keňský šilink","displayName-count-few":"keňské šilinky","displayName-count-many":"keňského šilinku","displayName-count-other":"keňských šilinků","symbol":"KES"},"KGS":{"displayName":"kyrgyzský som","displayName-count-one":"kyrgyzský som","displayName-count-few":"kyrgyzské somy","displayName-count-many":"kyrgyzského somu","displayName-count-other":"kyrgyzských somů","symbol":"KGS"},"KHR":{"displayName":"kambodžský riel","displayName-count-one":"kambodžský riel","displayName-count-few":"kambodžské riely","displayName-count-many":"kambodžského rielu","displayName-count-other":"kambodžských rielů","symbol":"KHR","symbol-alt-narrow":"៛"},"KMF":{"displayName":"komorský frank","displayName-count-one":"komorský frank","displayName-count-few":"komorské franky","displayName-count-many":"komorského franku","displayName-count-other":"komorských franků","symbol":"KMF","symbol-alt-narrow":"CF"},"KPW":{"displayName":"severokorejský won","displayName-count-one":"severokorejský won","displayName-count-few":"severokorejské wony","displayName-count-many":"severokorejského wonu","displayName-count-other":"severokorejských wonů","symbol":"KPW","symbol-alt-narrow":"₩"},"KRH":{"displayName":"jihokorejský hwan (1953–1962)","displayName-count-one":"jihokorejský hwan (1953–1962)","displayName-count-few":"jihokorejské hwany (1953–1962)","displayName-count-many":"jihokorejského hwanu (1953–1962)","displayName-count-other":"jihokorejských hwanů (1953–1962)","symbol":"KRH"},"KRO":{"displayName":"jihokorejský won (1945–1953)","displayName-count-one":"jihokorejský won (1945–1953)","displayName-count-few":"jihokorejské wony (1945–1953)","displayName-count-many":"jihokorejského wonu (1945–1953)","displayName-count-other":"jihokorejských wonů (1945–1953)","symbol":"KRO"},"KRW":{"displayName":"jihokorejský won","displayName-count-one":"jihokorejský won","displayName-count-few":"jihokorejské wony","displayName-count-many":"jihokorejského wonu","displayName-count-other":"jihokorejských wonů","symbol":"₩","symbol-alt-narrow":"₩"},"KWD":{"displayName":"kuvajtský dinár","displayName-count-one":"kuvajtský dinár","displayName-count-few":"kuvajtské dináry","displayName-count-many":"kuvajtského dináru","displayName-count-other":"kuvajtských dinárů","symbol":"KWD"},"KYD":{"displayName":"kajmanský dolar","displayName-count-one":"kajmanský dolar","displayName-count-few":"kajmanské dolary","displayName-count-many":"kajmanského dolaru","displayName-count-other":"kajmanských dolarů","symbol":"KYD","symbol-alt-narrow":"$"},"KZT":{"displayName":"kazašské tenge","displayName-count-one":"kazašské tenge","displayName-count-few":"kazašské tenge","displayName-count-many":"kazašského tenge","displayName-count-other":"kazašských tenge","symbol":"KZT","symbol-alt-narrow":"₸"},"LAK":{"displayName":"laoský kip","displayName-count-one":"laoský kip","displayName-count-few":"laoské kipy","displayName-count-many":"laoského kipu","displayName-count-other":"laoských kipů","symbol":"LAK","symbol-alt-narrow":"₭"},"LBP":{"displayName":"libanonská libra","displayName-count-one":"libanonská libra","displayName-count-few":"libanonské libry","displayName-count-many":"libanonské libry","displayName-count-other":"libanonských liber","symbol":"LBP","symbol-alt-narrow":"L£"},"LKR":{"displayName":"srílanská rupie","displayName-count-one":"srílanská rupie","displayName-count-few":"srílanské rupie","displayName-count-many":"srílanské rupie","displayName-count-other":"srílanských rupií","symbol":"LKR","symbol-alt-narrow":"Rs"},"LRD":{"displayName":"liberijský dolar","displayName-count-one":"liberijský dolar","displayName-count-few":"liberijské dolary","displayName-count-many":"liberijského dolaru","displayName-count-other":"liberijských dolarů","symbol":"LRD","symbol-alt-narrow":"$"},"LSL":{"displayName":"lesothský loti","displayName-count-one":"lesothský loti","displayName-count-few":"lesothské maloti","displayName-count-many":"lesothského loti","displayName-count-other":"lesothských maloti","symbol":"LSL"},"LTL":{"displayName":"litevský litas","displayName-count-one":"litevský litas","displayName-count-few":"litevské lity","displayName-count-many":"litevského litu","displayName-count-other":"litevských litů","symbol":"LTL","symbol-alt-narrow":"Lt"},"LTT":{"displayName":"litevský talonas","displayName-count-one":"litevský talonas","displayName-count-few":"litevské talony","displayName-count-many":"litevského talonu","displayName-count-other":"litevských talonů","symbol":"LTT"},"LUC":{"displayName":"lucemburský konvertibilní frank","displayName-count-one":"lucemburský konvertibilní frank","displayName-count-few":"lucemburské konvertibilní franky","displayName-count-many":"lucemburského konvertibilního franku","displayName-count-other":"lucemburských konvertibilních franků","symbol":"LUC"},"LUF":{"displayName":"lucemburský frank","displayName-count-one":"lucemburský frank","displayName-count-few":"lucemburské franky","displayName-count-many":"lucemburského franku","displayName-count-other":"lucemburských franků","symbol":"LUF"},"LUL":{"displayName":"lucemburský finanční frank","displayName-count-one":"lucemburský finanční frank","displayName-count-few":"lucemburské finanční franky","displayName-count-many":"lucemburského finančního franku","displayName-count-other":"lucemburských finančních franků","symbol":"LUL"},"LVL":{"displayName":"lotyšský lat","displayName-count-one":"lotyšský lat","displayName-count-few":"lotyšské laty","displayName-count-many":"lotyšského latu","displayName-count-other":"lotyšských latů","symbol":"LVL","symbol-alt-narrow":"Ls"},"LVR":{"displayName":"lotyšský rubl","displayName-count-one":"lotyšský rubl","displayName-count-few":"lotyšské rubly","displayName-count-many":"lotyšského rublu","displayName-count-other":"lotyšských rublů","symbol":"LVR"},"LYD":{"displayName":"libyjský dinár","displayName-count-one":"libyjský dinár","displayName-count-few":"libyjské dináry","displayName-count-many":"libyjského dináru","displayName-count-other":"libyjských dinárů","symbol":"LYD"},"MAD":{"displayName":"marocký dinár","displayName-count-one":"marocký dinár","displayName-count-few":"marocké dináry","displayName-count-many":"marockého dináru","displayName-count-other":"marockých dinárů","symbol":"MAD"},"MAF":{"displayName":"marocký frank","displayName-count-one":"marocký frank","displayName-count-few":"marocké franky","displayName-count-many":"marockého franku","displayName-count-other":"marockých franků","symbol":"MAF"},"MCF":{"displayName":"monacký frank","displayName-count-one":"monacký frank","displayName-count-few":"monacké franky","displayName-count-many":"monackého franku","displayName-count-other":"monackých franků","symbol":"MCF"},"MDC":{"displayName":"moldavský kupon","displayName-count-one":"moldavský kupon","displayName-count-few":"moldavské kupony","displayName-count-many":"moldavského kuponu","displayName-count-other":"moldavských kuponů","symbol":"MDC"},"MDL":{"displayName":"moldavský leu","displayName-count-one":"moldavský leu","displayName-count-few":"moldavské lei","displayName-count-many":"moldavského leu","displayName-count-other":"moldavských lei","symbol":"MDL"},"MGA":{"displayName":"madagaskarský ariary","displayName-count-one":"madagaskarský ariary","displayName-count-few":"madagaskarské ariary","displayName-count-many":"madagaskarského ariary","displayName-count-other":"madagaskarských ariary","symbol":"MGA","symbol-alt-narrow":"Ar"},"MGF":{"displayName":"madagaskarský frank","displayName-count-one":"madagaskarský frank","displayName-count-few":"madagaskarské franky","displayName-count-many":"madagaskarského franku","displayName-count-other":"madagaskarských franků","symbol":"MGF"},"MKD":{"displayName":"makedonský denár","displayName-count-one":"makedonský denár","displayName-count-few":"makedonské denáry","displayName-count-many":"makedonského denáru","displayName-count-other":"makedonských denárů","symbol":"MKD"},"MKN":{"displayName":"makedonský denár (1992–1993)","displayName-count-one":"makedonský denár (1992–1993)","displayName-count-few":"makedonské denáry (1992–1993)","displayName-count-many":"makedonského denáru (1992–1993)","displayName-count-other":"makedonských denárů (1992–1993)","symbol":"MKN"},"MLF":{"displayName":"malijský frank","displayName-count-one":"malijský frank","displayName-count-few":"malijské franky","displayName-count-many":"malijského franku","displayName-count-other":"malijských franků","symbol":"MLF"},"MMK":{"displayName":"myanmarský kyat","displayName-count-one":"myanmarský kyat","displayName-count-few":"myanmarské kyaty","displayName-count-many":"myanmarského kyatu","displayName-count-other":"myanmarských kyatů","symbol":"MMK","symbol-alt-narrow":"K"},"MNT":{"displayName":"mongolský tugrik","displayName-count-one":"mongolský tugrik","displayName-count-few":"mongolské tugriky","displayName-count-many":"mongolského tugriku","displayName-count-other":"mongolských tugriků","symbol":"MNT","symbol-alt-narrow":"₮"},"MOP":{"displayName":"macajská pataca","displayName-count-one":"macajská pataca","displayName-count-few":"macajské patacy","displayName-count-many":"macajské patacy","displayName-count-other":"macajských patac","symbol":"MOP"},"MRO":{"displayName":"mauritánská ouguiya","displayName-count-one":"mauritánská ouguiya","displayName-count-few":"mauritánské ouguiye","displayName-count-many":"mauritánské ouguiye","displayName-count-other":"mauritánských ouguiyí","symbol":"MRO"},"MTL":{"displayName":"maltská lira","displayName-count-one":"maltská lira","displayName-count-few":"maltské liry","displayName-count-many":"maltské liry","displayName-count-other":"maltských lir","symbol":"MTL"},"MTP":{"displayName":"maltská libra","displayName-count-one":"maltská libra","displayName-count-few":"maltské libry","displayName-count-many":"maltské libry","displayName-count-other":"maltských liber","symbol":"MTP"},"MUR":{"displayName":"mauricijská rupie","displayName-count-one":"mauricijská rupie","displayName-count-few":"mauricijské rupie","displayName-count-many":"mauricijské rupie","displayName-count-other":"mauricijských rupií","symbol":"MUR","symbol-alt-narrow":"Rs"},"MVP":{"displayName":"maledivská rupie (1947–1981)","displayName-count-one":"maledivská rupie (1947–1981)","displayName-count-few":"maledivské rupie (1947–1981)","displayName-count-many":"maledivské rupie (1947–1981)","displayName-count-other":"maledivských rupií (1947–1981)","symbol":"MVP"},"MVR":{"displayName":"maledivská rupie","displayName-count-one":"maledivská rupie","displayName-count-few":"maledivské rupie","displayName-count-many":"maledivské rupie","displayName-count-other":"maledivských rupií","symbol":"MVR"},"MWK":{"displayName":"malawijská kwacha","displayName-count-one":"malawijská kwacha","displayName-count-few":"malawijské kwachy","displayName-count-many":"malawijské kwachy","displayName-count-other":"malawijských kwach","symbol":"MWK"},"MXN":{"displayName":"mexické peso","displayName-count-one":"mexické peso","displayName-count-few":"mexická pesa","displayName-count-many":"mexického pesa","displayName-count-other":"mexických pes","symbol":"MX$","symbol-alt-narrow":"$"},"MXP":{"displayName":"mexické stříbrné peso (1861–1992)","displayName-count-one":"mexické stříbrné peso (1861–1992)","displayName-count-few":"mexická stříbrná pesa (1861–1992)","displayName-count-many":"mexického stříbrného pesa (1861–1992)","displayName-count-other":"mexických stříbrných pes (1861–1992)","symbol":"MXP"},"MXV":{"displayName":"mexická investiční jednotka","displayName-count-one":"mexická investiční jednotka","displayName-count-few":"mexické investiční jednotky","displayName-count-many":"mexické investiční jednotky","displayName-count-other":"mexických investičních jednotek","symbol":"MXV"},"MYR":{"displayName":"malajsijský ringgit","displayName-count-one":"malajsijský ringgit","displayName-count-few":"malajsijské ringgity","displayName-count-many":"malajsijského ringgitu","displayName-count-other":"malajsijských ringgitů","symbol":"MYR","symbol-alt-narrow":"RM"},"MZE":{"displayName":"mosambický escudo","displayName-count-one":"mosambický escudo","displayName-count-few":"mosambická escuda","displayName-count-many":"mosambického escuda","displayName-count-other":"mosambických escud","symbol":"MZE"},"MZM":{"displayName":"mosambický metical (1980–2006)","displayName-count-one":"mosambický metical (1980–2006)","displayName-count-few":"mosambické meticaly (1980–2006)","displayName-count-many":"mosambického meticalu (1980–2006)","displayName-count-other":"mosambických meticalů (1980–2006)","symbol":"MZM"},"MZN":{"displayName":"mozambický metical","displayName-count-one":"mozambický metical","displayName-count-few":"mozambické meticaly","displayName-count-many":"mozambického meticalu","displayName-count-other":"mozambických meticalů","symbol":"MZN"},"NAD":{"displayName":"namibijský dolar","displayName-count-one":"namibijský dolar","displayName-count-few":"namibijské dolary","displayName-count-many":"namibijského dolaru","displayName-count-other":"namibijských dolarů","symbol":"NAD","symbol-alt-narrow":"$"},"NGN":{"displayName":"nigerijská naira","displayName-count-one":"nigerijská naira","displayName-count-few":"nigerijské nairy","displayName-count-many":"nigerijské nairy","displayName-count-other":"nigerijských nair","symbol":"NGN","symbol-alt-narrow":"₦"},"NIC":{"displayName":"nikaragujská córdoba (1988–1991)","displayName-count-one":"nikaragujská córdoba (1988–1991)","displayName-count-few":"nikaragujské córdoby (1988–1991)","displayName-count-many":"nikaragujské córdoby (1988–1991)","displayName-count-other":"nikaragujských córdob (1988–1991)","symbol":"NIC"},"NIO":{"displayName":"nikaragujská córdoba","displayName-count-one":"nikaragujská córdoba","displayName-count-few":"nikaragujské córdoby","displayName-count-many":"nikaragujské córdoby","displayName-count-other":"nikaragujských córdob","symbol":"NIO","symbol-alt-narrow":"C$"},"NLG":{"displayName":"nizozemský gulden","displayName-count-one":"nizozemský gulden","displayName-count-few":"nizozemské guldeny","displayName-count-many":"nizozemského guldenu","displayName-count-other":"nizozemských guldenů","symbol":"NLG"},"NOK":{"displayName":"norská koruna","displayName-count-one":"norská koruna","displayName-count-few":"norské koruny","displayName-count-many":"norské koruny","displayName-count-other":"norských korun","symbol":"NOK","symbol-alt-narrow":"kr"},"NPR":{"displayName":"nepálská rupie","displayName-count-one":"nepálská rupie","displayName-count-few":"nepálské rupie","displayName-count-many":"nepálské rupie","displayName-count-other":"nepálských rupií","symbol":"NPR","symbol-alt-narrow":"Rs"},"NZD":{"displayName":"novozélandský dolar","displayName-count-one":"novozélandský dolar","displayName-count-few":"novozélandské dolary","displayName-count-many":"novozélandského dolaru","displayName-count-other":"novozélandských dolarů","symbol":"NZ$","symbol-alt-narrow":"$"},"OMR":{"displayName":"ománský rijál","displayName-count-one":"ománský rijál","displayName-count-few":"ománské rijály","displayName-count-many":"ománského rijálu","displayName-count-other":"ománských rijálů","symbol":"OMR"},"PAB":{"displayName":"panamská balboa","displayName-count-one":"panamská balboa","displayName-count-few":"panamské balboy","displayName-count-many":"panamské balboy","displayName-count-other":"panamských balboí","symbol":"PAB"},"PEI":{"displayName":"peruánská inti","displayName-count-one":"peruánská inti","displayName-count-few":"peruánské inti","displayName-count-many":"peruánské inti","displayName-count-other":"peruánských inti","symbol":"PEI"},"PEN":{"displayName":"peruánský sol","displayName-count-one":"peruánský sol","displayName-count-few":"peruánské soly","displayName-count-many":"peruánského solu","displayName-count-other":"peruánských solů","symbol":"PEN"},"PES":{"displayName":"peruánský sol (1863–1965)","displayName-count-one":"peruánský sol (1863–1965)","displayName-count-few":"peruánské soly (1863–1965)","displayName-count-many":"peruánského solu (1863–1965)","displayName-count-other":"peruánských solů (1863–1965)","symbol":"PES"},"PGK":{"displayName":"papuánská nová kina","displayName-count-one":"papuánská nová kina","displayName-count-few":"papuánské nové kiny","displayName-count-many":"papuánské nové kiny","displayName-count-other":"papuánských nových kin","symbol":"PGK"},"PHP":{"displayName":"filipínské peso","displayName-count-one":"filipínské peso","displayName-count-few":"filipínská pesa","displayName-count-many":"filipínského pesa","displayName-count-other":"filipínských pes","symbol":"PHP","symbol-alt-narrow":"₱"},"PKR":{"displayName":"pákistánská rupie","displayName-count-one":"pákistánská rupie","displayName-count-few":"pákistánské rupie","displayName-count-many":"pákistánské rupie","displayName-count-other":"pákistánských rupií","symbol":"PKR","symbol-alt-narrow":"Rs"},"PLN":{"displayName":"polský zlotý","displayName-count-one":"polský zlotý","displayName-count-few":"polské zloté","displayName-count-many":"polského zlotého","displayName-count-other":"polských zlotých","symbol":"PLN","symbol-alt-narrow":"zł"},"PLZ":{"displayName":"polský zlotý (1950–1995)","displayName-count-one":"polský zlotý (1950–1995)","displayName-count-few":"polské zloté (1950–1995)","displayName-count-many":"polského zlotého (1950–1995)","displayName-count-other":"polských zlotých (1950–1995)","symbol":"PLZ"},"PTE":{"displayName":"portugalské escudo","displayName-count-one":"portugalské escudo","displayName-count-few":"portugalská escuda","displayName-count-many":"portugalského escuda","displayName-count-other":"portugalských escud","symbol":"PTE"},"PYG":{"displayName":"paraguajské guarani","displayName-count-one":"paraguajské guarani","displayName-count-few":"paraguajská guarani","displayName-count-many":"paraguajského guarani","displayName-count-other":"paraguajských guarani","symbol":"PYG","symbol-alt-narrow":"₲"},"QAR":{"displayName":"katarský rijál","displayName-count-one":"katarský rijál","displayName-count-few":"katarské rijály","displayName-count-many":"katarského rijálu","displayName-count-other":"katarských rijálů","symbol":"QAR"},"RHD":{"displayName":"rhodéský dolar","displayName-count-one":"rhodéský dolar","displayName-count-few":"rhodéské dolary","displayName-count-many":"rhodéského dolaru","displayName-count-other":"rhodéských dolarů","symbol":"RHD"},"ROL":{"displayName":"rumunské leu (1952–2006)","displayName-count-one":"rumunské leu (1952–2006)","displayName-count-few":"rumunské lei (1952–2006)","displayName-count-many":"rumunského leu (1952–2006)","displayName-count-other":"rumunských lei (1952–2006)","symbol":"ROL"},"RON":{"displayName":"rumunský leu","displayName-count-one":"rumunský leu","displayName-count-few":"rumunské lei","displayName-count-many":"rumunského leu","displayName-count-other":"rumunských lei","symbol":"RON","symbol-alt-narrow":"L"},"RSD":{"displayName":"srbský dinár","displayName-count-one":"srbský dinár","displayName-count-few":"srbské dináry","displayName-count-many":"srbského dináru","displayName-count-other":"srbských dinárů","symbol":"RSD"},"RUB":{"displayName":"ruský rubl","displayName-count-one":"ruský rubl","displayName-count-few":"ruské rubly","displayName-count-many":"ruského rublu","displayName-count-other":"ruských rublů","symbol":"RUB","symbol-alt-narrow":"₽"},"RUR":{"displayName":"ruský rubl (1991–1998)","displayName-count-one":"ruský rubl (1991–1998)","displayName-count-few":"ruské rubly (1991–1998)","displayName-count-many":"ruského rublu (1991–1998)","displayName-count-other":"ruských rublů (1991–1998)","symbol":"RUR","symbol-alt-narrow":"р."},"RWF":{"displayName":"rwandský frank","displayName-count-one":"rwandský frank","displayName-count-few":"rwandské franky","displayName-count-many":"rwandského franku","displayName-count-other":"rwandských franků","symbol":"RWF","symbol-alt-narrow":"RF"},"SAR":{"displayName":"saúdský rijál","displayName-count-one":"saúdský rijál","displayName-count-few":"saúdské rijály","displayName-count-many":"saúdského rijálu","displayName-count-other":"saúdských rijálů","symbol":"SAR"},"SBD":{"displayName":"šalamounský dolar","displayName-count-one":"šalamounský dolar","displayName-count-few":"šalamounské dolary","displayName-count-many":"šalamounského dolaru","displayName-count-other":"šalamounských dolarů","symbol":"SBD","symbol-alt-narrow":"$"},"SCR":{"displayName":"seychelská rupie","displayName-count-one":"seychelská rupie","displayName-count-few":"seychelské rupie","displayName-count-many":"seychelské rupie","displayName-count-other":"seychelských rupií","symbol":"SCR"},"SDD":{"displayName":"súdánský dinár (1992–2007)","displayName-count-one":"súdánský dinár (1992–2007)","displayName-count-few":"súdánské dináry (1992–2007)","displayName-count-many":"súdánského dináru (1992–2007)","displayName-count-other":"súdánských dinárů (1992–2007)","symbol":"SDD"},"SDG":{"displayName":"súdánská libra","displayName-count-one":"súdánská libra","displayName-count-few":"súdánské libry","displayName-count-many":"súdánské libry","displayName-count-other":"súdánských liber","symbol":"SDG"},"SDP":{"displayName":"súdánská libra (1957–1998)","displayName-count-one":"súdánská libra (1957–1998)","displayName-count-few":"súdánské libry (1957–1998)","displayName-count-many":"súdánské libry (1957–1998)","displayName-count-other":"súdánských liber (1957–1998)","symbol":"SDP"},"SEK":{"displayName":"švédská koruna","displayName-count-one":"švédská koruna","displayName-count-few":"švédské koruny","displayName-count-many":"švédské koruny","displayName-count-other":"švédských korun","symbol":"SEK","symbol-alt-narrow":"kr"},"SGD":{"displayName":"singapurský dolar","displayName-count-one":"singapurský dolar","displayName-count-few":"singapurské dolary","displayName-count-many":"singapurského dolaru","displayName-count-other":"singapurských dolarů","symbol":"SGD","symbol-alt-narrow":"$"},"SHP":{"displayName":"svatohelenská libra","displayName-count-one":"svatohelenská libra","displayName-count-few":"svatohelenské libry","displayName-count-many":"svatohelenské libry","displayName-count-other":"svatohelenských liber","symbol":"SHP","symbol-alt-narrow":"£"},"SIT":{"displayName":"slovinský tolar","displayName-count-one":"slovinský tolar","displayName-count-few":"slovinské tolary","displayName-count-many":"slovinského tolaru","displayName-count-other":"slovinských tolarů","symbol":"SIT"},"SKK":{"displayName":"slovenská koruna","displayName-count-one":"slovenská koruna","displayName-count-few":"slovenské koruny","displayName-count-many":"slovenské koruny","displayName-count-other":"slovenských korun","symbol":"SKK"},"SLL":{"displayName":"sierro-leonský leone","displayName-count-one":"sierro-leonský leone","displayName-count-few":"sierro-leonské leone","displayName-count-many":"sierro-leonského leone","displayName-count-other":"sierro-leonských leone","symbol":"SLL"},"SOS":{"displayName":"somálský šilink","displayName-count-one":"somálský šilink","displayName-count-few":"somálské šilinky","displayName-count-many":"somálského šilinku","displayName-count-other":"somálských šilinků","symbol":"SOS"},"SRD":{"displayName":"surinamský dolar","displayName-count-one":"surinamský dolar","displayName-count-few":"surinamské dolary","displayName-count-many":"surinamského dolaru","displayName-count-other":"surinamských dolarů","symbol":"SRD","symbol-alt-narrow":"$"},"SRG":{"displayName":"surinamský zlatý","displayName-count-one":"surinamský zlatý","displayName-count-few":"surinamské zlaté","displayName-count-many":"surinamského zlatého","displayName-count-other":"surinamských zlatých","symbol":"SRG"},"SSP":{"displayName":"jihosúdánská libra","displayName-count-one":"jihosúdánská libra","displayName-count-few":"jihosúdánské libry","displayName-count-many":"jihosúdánské libry","displayName-count-other":"jihosúdánských liber","symbol":"SSP","symbol-alt-narrow":"£"},"STD":{"displayName":"svatotomášská dobra","displayName-count-one":"svatotomášská dobra","displayName-count-few":"svatotomášské dobry","displayName-count-many":"svatotomášské dobry","displayName-count-other":"svatotomášských dober","symbol":"STD","symbol-alt-narrow":"Db"},"STN":{"displayName":"STN","symbol":"STN"},"SUR":{"displayName":"sovětský rubl","displayName-count-one":"sovětský rubl","displayName-count-few":"sovětské rubly","displayName-count-many":"sovětského rublu","displayName-count-other":"sovětských rublů","symbol":"SUR"},"SVC":{"displayName":"salvadorský colón","displayName-count-one":"salvadorský colón","displayName-count-few":"salvadorské colóny","displayName-count-many":"salvadorského colónu","displayName-count-other":"salvadorských colónů","symbol":"SVC"},"SYP":{"displayName":"syrská libra","displayName-count-one":"syrská libra","displayName-count-few":"syrské libry","displayName-count-many":"syrské libry","displayName-count-other":"syrských liber","symbol":"SYP","symbol-alt-narrow":"£"},"SZL":{"displayName":"svazijský lilangeni","displayName-count-one":"svazijský lilangeni","displayName-count-few":"svazijské emalangeni","displayName-count-many":"svazijského lilangeni","displayName-count-other":"svazijských emalangeni","symbol":"SZL"},"THB":{"displayName":"thajský baht","displayName-count-one":"thajský baht","displayName-count-few":"thajské bahty","displayName-count-many":"thajského bahtu","displayName-count-other":"thajských bahtů","symbol":"THB","symbol-alt-narrow":"฿"},"TJR":{"displayName":"tádžický rubl","displayName-count-one":"tádžický rubl","displayName-count-few":"tádžické rubly","displayName-count-many":"tádžického rublu","displayName-count-other":"tádžických rublů","symbol":"TJR"},"TJS":{"displayName":"tádžické somoni","displayName-count-one":"tádžické somoni","displayName-count-few":"tádžická somoni","displayName-count-many":"tádžického somoni","displayName-count-other":"tádžických somoni","symbol":"TJS"},"TMM":{"displayName":"turkmenský manat (1993–2009)","displayName-count-one":"turkmenský manat (1993–2009)","displayName-count-few":"turkmenské manaty (1993–2009)","displayName-count-many":"turkmenského manatu (1993–2009)","displayName-count-other":"turkmenských manatů (1993–2009)","symbol":"TMM"},"TMT":{"displayName":"turkmenský manat","displayName-count-one":"turkmenský manat","displayName-count-few":"turkmenské manaty","displayName-count-many":"turkmenského manatu","displayName-count-other":"turkmenských manatů","symbol":"TMT"},"TND":{"displayName":"tuniský dinár","displayName-count-one":"tuniský dinár","displayName-count-few":"tuniské dináry","displayName-count-many":"tuniského dináru","displayName-count-other":"tuniských dinárů","symbol":"TND"},"TOP":{"displayName":"tonžská paanga","displayName-count-one":"tonžská paanga","displayName-count-few":"tonžské paangy","displayName-count-many":"tonžské paangy","displayName-count-other":"tonžských paang","symbol":"TOP","symbol-alt-narrow":"T$"},"TPE":{"displayName":"timorské escudo","displayName-count-one":"timorské escudo","displayName-count-few":"timorská escuda","displayName-count-many":"timorského escuda","displayName-count-other":"timorských escud","symbol":"TPE"},"TRL":{"displayName":"turecká lira (1922–2005)","displayName-count-one":"turecká lira (1922–2005)","displayName-count-few":"turecké liry (1922–2005)","displayName-count-many":"turecké liry (1922–2005)","displayName-count-other":"tureckých lir (1922–2005)","symbol":"TRL"},"TRY":{"displayName":"turecká lira","displayName-count-one":"turecká lira","displayName-count-few":"turecké liry","displayName-count-many":"turecké liry","displayName-count-other":"tureckých lir","symbol":"TRY","symbol-alt-narrow":"₺","symbol-alt-variant":"TL"},"TTD":{"displayName":"trinidadský dolar","displayName-count-one":"trinidadský dolar","displayName-count-few":"trinidadské dolary","displayName-count-many":"trinidadského dolaru","displayName-count-other":"trinidadských dolarů","symbol":"TTD","symbol-alt-narrow":"$"},"TWD":{"displayName":"tchajwanský dolar","displayName-count-one":"tchajwanský dolar","displayName-count-few":"tchajwanské dolary","displayName-count-many":"tchajwanského dolaru","displayName-count-other":"tchajwanských dolarů","symbol":"NT$","symbol-alt-narrow":"NT$"},"TZS":{"displayName":"tanzanský šilink","displayName-count-one":"tanzanský šilink","displayName-count-few":"tanzanské šilinky","displayName-count-many":"tanzanského šilinku","displayName-count-other":"tanzanských šilinků","symbol":"TZS"},"UAH":{"displayName":"ukrajinská hřivna","displayName-count-one":"ukrajinská hřivna","displayName-count-few":"ukrajinské hřivny","displayName-count-many":"ukrajinské hřivny","displayName-count-other":"ukrajinských hřiven","symbol":"UAH","symbol-alt-narrow":"₴"},"UAK":{"displayName":"ukrajinský karbovanec","displayName-count-one":"ukrajinský karbovanec","displayName-count-few":"ukrajinské karbovance","displayName-count-many":"ukrajinského karbovance","displayName-count-other":"ukrajinských karbovanců","symbol":"UAK"},"UGS":{"displayName":"ugandský šilink (1966–1987)","displayName-count-one":"ugandský šilink (1966–1987)","displayName-count-few":"ugandské šilinky (1966–1987)","displayName-count-many":"ugandského šilinku (1966–1987)","displayName-count-other":"ugandských šilinků (1966–1987)","symbol":"UGS"},"UGX":{"displayName":"ugandský šilink","displayName-count-one":"ugandský šilink","displayName-count-few":"ugandské šilinky","displayName-count-many":"ugandského šilinku","displayName-count-other":"ugandských šilinků","symbol":"UGX"},"USD":{"displayName":"americký dolar","displayName-count-one":"americký dolar","displayName-count-few":"americké dolary","displayName-count-many":"amerického dolaru","displayName-count-other":"amerických dolarů","symbol":"US$","symbol-alt-narrow":"$"},"USN":{"displayName":"americký dolar (příští den)","displayName-count-one":"americký dolar (příští den)","displayName-count-few":"americké dolary (příští den)","displayName-count-many":"amerického dolaru (příští den)","displayName-count-other":"amerických dolarů (příští den)","symbol":"USN"},"USS":{"displayName":"americký dolar (týž den)","displayName-count-one":"americký dolar (týž den)","displayName-count-few":"americké dolary (týž den)","displayName-count-many":"amerického dolaru (týž den)","displayName-count-other":"amerických dolarů (týž den)","symbol":"USS"},"UYI":{"displayName":"uruguayské peso (v indexovaných jednotkách)","displayName-count-one":"uruguayské peso (v indexovaných jednotkách)","displayName-count-few":"uruguayská pesa (v indexovaných jednotkách)","displayName-count-many":"uruguayského pesa (v indexovaných jednotkách)","displayName-count-other":"uruguayských pes (v indexovaných jednotkách)","symbol":"UYI"},"UYP":{"displayName":"uruguayské peso (1975–1993)","displayName-count-one":"uruguayské peso (1975–1993)","displayName-count-few":"uruguayská pesa (1975–1993)","displayName-count-many":"uruguayského pesa (1975–1993)","displayName-count-other":"uruguayských pes (1975–1993)","symbol":"UYP"},"UYU":{"displayName":"uruguayské peso","displayName-count-one":"uruguayské peso","displayName-count-few":"uruguayská pesa","displayName-count-many":"uruguayského pesa","displayName-count-other":"uruguayských pes","symbol":"UYU","symbol-alt-narrow":"$"},"UZS":{"displayName":"uzbecký sum","displayName-count-one":"uzbecký sum","displayName-count-few":"uzbecké sumy","displayName-count-many":"uzbeckého sumu","displayName-count-other":"uzbeckých sumů","symbol":"UZS"},"VEB":{"displayName":"venezuelský bolívar (1871–2008)","displayName-count-one":"venezuelský bolívar (1871–2008)","displayName-count-few":"venezuelské bolívary (1871–2008)","displayName-count-many":"venezuelského bolívaru (1871–2008)","displayName-count-other":"venezuelských bolívarů (1871–2008)","symbol":"VEB"},"VEF":{"displayName":"venezuelský bolívar","displayName-count-one":"venezuelský bolívar","displayName-count-few":"venezuelské bolívary","displayName-count-many":"venezuelského bolívaru","displayName-count-other":"venezuelských bolívarů","symbol":"VEF","symbol-alt-narrow":"Bs"},"VND":{"displayName":"vietnamský dong","displayName-count-one":"vietnamský dong","displayName-count-few":"vietnamské dongy","displayName-count-many":"vietnamského dongu","displayName-count-other":"vietnamských dongů","symbol":"VND","symbol-alt-narrow":"₫"},"VNN":{"displayName":"vietnamský dong (1978–1985)","displayName-count-one":"vietnamský dong (1978–1985)","displayName-count-few":"vietnamské dongy (1978–1985)","displayName-count-many":"vietnamského dongu (1978–1985)","displayName-count-other":"vietnamských dongů (1978–1985)","symbol":"VNN"},"VUV":{"displayName":"vanuatský vatu","displayName-count-one":"vanuatský vatu","displayName-count-few":"vanuatské vatu","displayName-count-many":"vanuatského vatu","displayName-count-other":"vanuatských vatu","symbol":"VUV"},"WST":{"displayName":"samojská tala","displayName-count-one":"samojská tala","displayName-count-few":"samojské taly","displayName-count-many":"samojské taly","displayName-count-other":"samojských tal","symbol":"WST"},"XAF":{"displayName":"CFA/BEAC frank","displayName-count-one":"CFA/BEAC frank","displayName-count-few":"CFA/BEAC franky","displayName-count-many":"CFA/BEAC franku","displayName-count-other":"CFA/BEAC franků","symbol":"FCFA"},"XAG":{"displayName":"stříbro","displayName-count-one":"trojská unce stříbra","displayName-count-few":"trojské unce stříbra","displayName-count-many":"trojské unce stříbra","displayName-count-other":"trojských uncí stříbra","symbol":"XAG"},"XAU":{"displayName":"zlato","displayName-count-one":"trojská unce zlata","displayName-count-few":"trojské unce zlata","displayName-count-many":"trojské unce zlata","displayName-count-other":"trojských uncí zlata","symbol":"XAU"},"XBA":{"displayName":"evropská smíšená jednotka","displayName-count-one":"evropská smíšená jednotka","displayName-count-few":"evropské smíšené jednotky","displayName-count-many":"evropské smíšené jednotky","displayName-count-other":"evropských smíšených jednotek","symbol":"XBA"},"XBB":{"displayName":"evropská peněžní jednotka","displayName-count-one":"evropská peněžní jednotka","displayName-count-few":"evropské peněžní jednotky","displayName-count-many":"evropské peněžní jednotky","displayName-count-other":"evropských peněžních jednotek","symbol":"XBB"},"XBC":{"displayName":"evropská jednotka účtu 9 (XBC)","displayName-count-one":"evropská jednotka účtu 9 (XBC)","displayName-count-few":"evropské jednotky účtu 9 (XBC)","displayName-count-many":"evropské jednotky účtu 9 (XBC)","displayName-count-other":"evropských jednotek účtu 9 (XBC)","symbol":"XBC"},"XBD":{"displayName":"evropská jednotka účtu 17 (XBD)","displayName-count-one":"evropská jednotka účtu 17 (XBD)","displayName-count-few":"evropské jednotky účtu 17 (XBD)","displayName-count-many":"evropské jednotky účtu 17 (XBD)","displayName-count-other":"evropských jednotek účtu 17 (XBD)","symbol":"XBD"},"XCD":{"displayName":"východokaribský dolar","displayName-count-one":"východokaribský dolar","displayName-count-few":"východokaribské dolary","displayName-count-many":"východokaribského dolaru","displayName-count-other":"východokaribských dolarů","symbol":"EC$","symbol-alt-narrow":"$"},"XDR":{"displayName":"SDR","symbol":"XDR"},"XEU":{"displayName":"evropská měnová jednotka","displayName-count-one":"ECU","displayName-count-few":"ECU","displayName-count-many":"ECU","displayName-count-other":"ECU","symbol":"ECU"},"XFO":{"displayName":"francouzský zlatý frank","displayName-count-one":"francouzský zlatý frank","displayName-count-few":"francouzské zlaté franky","displayName-count-many":"francouzského zlatého franku","displayName-count-other":"francouzských zlatých franků","symbol":"XFO"},"XFU":{"displayName":"francouzský UIC frank","displayName-count-one":"francouzský UIC frank","displayName-count-few":"francouzské UIC franky","displayName-count-many":"francouzského UIC franku","displayName-count-other":"francouzských UIC franků","symbol":"XFU"},"XOF":{"displayName":"CFA/BCEAO frank","displayName-count-one":"CFA/BCEAO frank","displayName-count-few":"CFA/BCEAO franky","displayName-count-many":"CFA/BCEAO franku","displayName-count-other":"CFA/BCEAO franků","symbol":"CFA"},"XPD":{"displayName":"palladium","displayName-count-one":"trojská unce palladia","displayName-count-few":"trojské unce palladia","displayName-count-many":"trojské unce palladia","displayName-count-other":"trojských uncí palladia","symbol":"XPD"},"XPF":{"displayName":"CFP frank","displayName-count-one":"CFP frank","displayName-count-few":"CFP franky","displayName-count-many":"CFP franku","displayName-count-other":"CFP franků","symbol":"CFPF"},"XPT":{"displayName":"platina","displayName-count-one":"trojská unce platiny","displayName-count-few":"trojské unce platiny","displayName-count-many":"trojské unce platiny","displayName-count-other":"trojských uncí platiny","symbol":"XPT"},"XRE":{"displayName":"kód fondů RINET","displayName-count-one":"kód fondů RINET","displayName-count-few":"kód fondů RINET","displayName-count-many":"kód fondů RINET","displayName-count-other":"kód fondů RINET","symbol":"XRE"},"XSU":{"displayName":"sucre","displayName-count-one":"sucre","displayName-count-few":"sucre","displayName-count-many":"sucre","displayName-count-other":"sucre","symbol":"XSU"},"XTS":{"displayName":"kód zvlášť vyhrazený pro testovací účely","displayName-count-one":"kód zvlášť vyhrazený pro testovací účely","displayName-count-few":"kódy zvlášť vyhrazené pro testovací účely","displayName-count-many":"kódu zvlášť vyhrazeného pro testovací účely","displayName-count-other":"kódů zvlášť vyhrazených pro testovací účely","symbol":"XTS"},"XUA":{"displayName":"XUA","symbol":"XUA"},"XXX":{"displayName":"neznámá měna","displayName-count-one":"neznámá měna","displayName-count-few":"neznámá měna","displayName-count-many":"neznámá měna","displayName-count-other":"neznámá měna","symbol":"XXX"},"YDD":{"displayName":"jemenský dinár","displayName-count-one":"jemenský dinár","displayName-count-few":"jemenské dináry","displayName-count-many":"jemenského dináru","displayName-count-other":"jemenských dinárů","symbol":"YDD"},"YER":{"displayName":"jemenský rijál","displayName-count-one":"jemenský rijál","displayName-count-few":"jemenské rijály","displayName-count-many":"jemenského rijálu","displayName-count-other":"jemenských rijálů","symbol":"YER"},"YUD":{"displayName":"jugoslávský dinár (1966–1990)","displayName-count-one":"jugoslávský dinár (1966–1990)","displayName-count-few":"jugoslávské dináry (1966–1990)","displayName-count-many":"jugoslávského dináru (1966–1990)","displayName-count-other":"jugoslávských dinárů (1966–1990)","symbol":"YUD"},"YUM":{"displayName":"jugoslávský nový dinár (1994–2002)","displayName-count-one":"jugoslávský nový dinár (1994–2002)","displayName-count-few":"jugoslávské nové dináry (1994–2002)","displayName-count-many":"jugoslávského nového dináru (1994–2002)","displayName-count-other":"jugoslávských nových dinárů (1994–2002)","symbol":"YUM"},"YUN":{"displayName":"jugoslávský konvertibilní dinár (1990–1992)","displayName-count-one":"jugoslávský konvertibilní dinár (1990–1992)","displayName-count-few":"jugoslávské konvertibilní dináry (1990–1992)","displayName-count-many":"jugoslávského konvertibilního dináru (1990–1992)","displayName-count-other":"jugoslávských konvertibilních dinárů (1990–1992)","symbol":"YUN"},"YUR":{"displayName":"jugoslávský reformovaný dinár (1992–1993)","displayName-count-one":"jugoslávský reformovaný dinár (1992–1993)","displayName-count-few":"jugoslávské reformované dináry (1992–1993)","displayName-count-many":"jugoslávského reformovaného dináru (1992–1993)","displayName-count-other":"jugoslávských reformovaných dinárů (1992–1993)","symbol":"YUR"},"ZAL":{"displayName":"jihoafrický finanční rand","displayName-count-one":"jihoafrický finanční rand","displayName-count-few":"jihoafrické finanční randy","displayName-count-many":"jihoafrického finančního randu","displayName-count-other":"jihoafrických finančních randů","symbol":"ZAL"},"ZAR":{"displayName":"jihoafrický rand","displayName-count-one":"jihoafrický rand","displayName-count-few":"jihoafrické randy","displayName-count-many":"jihoafrického randu","displayName-count-other":"jihoafrických randů","symbol":"ZAR","symbol-alt-narrow":"R"},"ZMK":{"displayName":"zambijská kwacha (1968–2012)","displayName-count-one":"zambijská kwacha (1968–2012)","displayName-count-few":"zambijské kwachy (1968–2012)","displayName-count-many":"zambijské kwachy (1968–2012)","displayName-count-other":"zambijských kwach (1968–2012)","symbol":"ZMK"},"ZMW":{"displayName":"zambijská kwacha","displayName-count-one":"zambijská kwacha","displayName-count-few":"zambijské kwachy","displayName-count-many":"zambijské kwachy","displayName-count-other":"zambijských kwach","symbol":"ZMW","symbol-alt-narrow":"ZK"},"ZRN":{"displayName":"zairský nový zaire (1993–1998)","displayName-count-one":"zairský nový zaire (1993–1998)","displayName-count-few":"zairské nové zairy (1993–1998)","displayName-count-many":"zairského nového zairu (1993–1998)","displayName-count-other":"zairských nových zairů (1993–1998)","symbol":"ZRN"},"ZRZ":{"displayName":"zairský zaire (1971–1993)","displayName-count-one":"zairský zaire (1971–1993)","displayName-count-few":"zairské zairy (1971–1993)","displayName-count-many":"zairského zairu (1971–1993)","displayName-count-other":"zairských zairů (1971–1993)","symbol":"ZRZ"},"ZWD":{"displayName":"zimbabwský dolar (1980–2008)","displayName-count-one":"zimbabwský dolar (1980–2008)","displayName-count-few":"zimbabwské dolary (1980–2008)","displayName-count-many":"zimbabwského dolaru (1980–2008)","displayName-count-other":"zimbabwských dolarů (1980–2008)","symbol":"ZWD"},"ZWL":{"displayName":"zimbabwský dolar (2009)","displayName-count-one":"zimbabwský dolar (2009)","displayName-count-few":"zimbabwské dolary (2009)","displayName-count-many":"zimbabwského dolaru (2009)","displayName-count-other":"zimbabwských dolarů (2009)","symbol":"ZWL"},"ZWR":{"displayName":"zimbabwský dolar (2008)","displayName-count-one":"zimbabwský dolar (2008)","displayName-count-few":"zimbabwské dolary (2008)","displayName-count-many":"zimbabwského dolaru (2008)","displayName-count-other":"zimbabwských dolarů (2008)","symbol":"ZWR"}},"defaultNumberingSystem":"latn","otherNumberingSystems":{"native":"latn"},"minimumGroupingDigits":"1","symbols-numberSystem-latn":{"decimal":",","group":" ","list":";","percentSign":"%","plusSign":"+","minusSign":"-","exponential":"E","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"NaN","timeSeparator":":"},"decimalFormats-numberSystem-latn":{"standard":"#,##0.###","long":{"decimalFormat":{"1000-count-one":"0 tisíc","1000-count-few":"0 tisíce","1000-count-many":"0 tisíce","1000-count-other":"0 tisíc","10000-count-one":"00 tisíc","10000-count-few":"00 tisíc","10000-count-many":"00 tisíce","10000-count-other":"00 tisíc","100000-count-one":"000 tisíc","100000-count-few":"000 tisíc","100000-count-many":"000 tisíce","100000-count-other":"000 tisíc","1000000-count-one":"0 milion","1000000-count-few":"0 miliony","1000000-count-many":"0 milionu","1000000-count-other":"0 milionů","10000000-count-one":"00 milionů","10000000-count-few":"00 milionů","10000000-count-many":"00 milionu","10000000-count-other":"00 milionů","100000000-count-one":"000 milionů","100000000-count-few":"000 milionů","100000000-count-many":"000 milionu","100000000-count-other":"000 milionů","1000000000-count-one":"0 miliarda","1000000000-count-few":"0 miliardy","1000000000-count-many":"0 miliardy","1000000000-count-other":"0 miliard","10000000000-count-one":"00 miliard","10000000000-count-few":"00 miliard","10000000000-count-many":"00 miliardy","10000000000-count-other":"00 miliard","100000000000-count-one":"000 miliard","100000000000-count-few":"000 miliard","100000000000-count-many":"000 miliardy","100000000000-count-other":"000 miliard","1000000000000-count-one":"0 bilion","1000000000000-count-few":"0 biliony","1000000000000-count-many":"0 bilionu","1000000000000-count-other":"0 bilionů","10000000000000-count-one":"00 bilionů","10000000000000-count-few":"00 bilionů","10000000000000-count-many":"00 bilionu","10000000000000-count-other":"00 bilionů","100000000000000-count-one":"000 bilionů","100000000000000-count-few":"000 bilionů","100000000000000-count-many":"000 bilionu","100000000000000-count-other":"000 bilionů"}},"short":{"decimalFormat":{"1000-count-one":"0 tis'.'","1000-count-few":"0 tis'.'","1000-count-many":"0 tis'.'","1000-count-other":"0 tis'.'","10000-count-one":"00 tis'.'","10000-count-few":"00 tis'.'","10000-count-many":"00 tis'.'","10000-count-other":"00 tis'.'","100000-count-one":"000 tis'.'","100000-count-few":"000 tis'.'","100000-count-many":"000 tis'.'","100000-count-other":"000 tis'.'","1000000-count-one":"0 mil'.'","1000000-count-few":"0 mil'.'","1000000-count-many":"0 mil'.'","1000000-count-other":"0 mil'.'","10000000-count-one":"00 mil'.'","10000000-count-few":"00 mil'.'","10000000-count-many":"00 mil'.'","10000000-count-other":"00 mil'.'","100000000-count-one":"000 mil'.'","100000000-count-few":"000 mil'.'","100000000-count-many":"000 mil'.'","100000000-count-other":"000 mil'.'","1000000000-count-one":"0 mld'.'","1000000000-count-few":"0 mld'.'","1000000000-count-many":"0 mld'.'","1000000000-count-other":"0 mld'.'","10000000000-count-one":"00 mld'.'","10000000000-count-few":"00 mld'.'","10000000000-count-many":"00 mld'.'","10000000000-count-other":"00 mld'.'","100000000000-count-one":"000 mld'.'","100000000000-count-few":"000 mld'.'","100000000000-count-many":"000 mld'.'","100000000000-count-other":"000 mld'.'","1000000000000-count-one":"0 bil'.'","1000000000000-count-few":"0 bil'.'","1000000000000-count-many":"0 bil'.'","1000000000000-count-other":"0 bil'.'","10000000000000-count-one":"00 bil'.'","10000000000000-count-few":"00 bil'.'","10000000000000-count-many":"00 bil'.'","10000000000000-count-other":"00 bil'.'","100000000000000-count-one":"000 bil'.'","100000000000000-count-few":"000 bil'.'","100000000000000-count-many":"000 bil'.'","100000000000000-count-other":"000 bil'.'"}}},"scientificFormats-numberSystem-latn":{"standard":"#E0"},"percentFormats-numberSystem-latn":{"standard":"#,##0 %"},"currencyFormats-numberSystem-latn":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"#,##0.00 ¤","accounting":"#,##0.00 ¤","short":{"standard":{"1000-count-one":"0 tis'.' ¤","1000-count-few":"0 tis'.' ¤","1000-count-many":"0 tis'.' ¤","1000-count-other":"0 tis'.' ¤","10000-count-one":"00 tis'.' ¤","10000-count-few":"00 tis'.' ¤","10000-count-many":"00 tis'.' ¤","10000-count-other":"00 tis'.' ¤","100000-count-one":"000 tis'.' ¤","100000-count-few":"000 tis'.' ¤","100000-count-many":"000 tis'.' ¤","100000-count-other":"000 tis'.' ¤","1000000-count-one":"0 mil'.' ¤","1000000-count-few":"0 mil'.' ¤","1000000-count-many":"0 mil'.' ¤","1000000-count-other":"0 mil'.' ¤","10000000-count-one":"00 mil'.' ¤","10000000-count-few":"00 mil'.' ¤","10000000-count-many":"00 mil'.' ¤","10000000-count-other":"00 mil'.' ¤","100000000-count-one":"000 mil'.' ¤","100000000-count-few":"000 mil'.' ¤","100000000-count-many":"000 mil'.' ¤","100000000-count-other":"000 mil'.' ¤","1000000000-count-one":"0 mld'.' ¤","1000000000-count-few":"0 mld'.' ¤","1000000000-count-many":"0 mld'.' ¤","1000000000-count-other":"0 mld'.' ¤","10000000000-count-one":"00 mld'.' ¤","10000000000-count-few":"00 mld'.' ¤","10000000000-count-many":"00 mld'.' ¤","10000000000-count-other":"00 mld'.' ¤","100000000000-count-one":"000 mld'.' ¤","100000000000-count-few":"000 mld'.' ¤","100000000000-count-many":"000 mld'.' ¤","100000000000-count-other":"000 mld'.' ¤","1000000000000-count-one":"0 bil'.' ¤","1000000000000-count-few":"0 bil'.' ¤","1000000000000-count-many":"0 bil'.' ¤","1000000000000-count-other":"0 bil'.' ¤","10000000000000-count-one":"00 bil'.' ¤","10000000000000-count-few":"00 bil'.' ¤","10000000000000-count-many":"00 bil'.' ¤","10000000000000-count-other":"00 bil'.' ¤","100000000000000-count-one":"000 bil'.' ¤","100000000000000-count-few":"000 bil'.' ¤","100000000000000-count-many":"000 bil'.' ¤","100000000000000-count-other":"000 bil'.' ¤"}},"unitPattern-count-one":"{0} {1}","unitPattern-count-few":"{0} {1}","unitPattern-count-many":"{0} {1}","unitPattern-count-other":"{0} {1}"},"miscPatterns-numberSystem-latn":{"atLeast":"{0}+","range":"{0}–{1}"},"minimalPairs":{"pluralMinimalPairs-count-one":"{0} den","pluralMinimalPairs-count-few":"{0} dny","pluralMinimalPairs-count-many":"{0} dne","pluralMinimalPairs-count-other":"{0} dní","other":"Na {0}. křižovatce odbočte vpravo."}}},"el":{"identity":{"version":{"_number":"$Revision: 13705 $","_cldrVersion":"32"},"language":"el"},"dates":{"calendars":{"gregorian":{"months":{"format":{"abbreviated":{"1":"Ιαν","2":"Φεβ","3":"Μαρ","4":"Απρ","5":"Μαΐ","6":"Ιουν","7":"Ιουλ","8":"Αυγ","9":"Σεπ","10":"Οκτ","11":"Νοε","12":"Δεκ"},"narrow":{"1":"Ι","2":"Φ","3":"Μ","4":"Α","5":"Μ","6":"Ι","7":"Ι","8":"Α","9":"Σ","10":"Ο","11":"Ν","12":"Δ"},"wide":{"1":"Ιανουαρίου","2":"Φεβρουαρίου","3":"Μαρτίου","4":"Απριλίου","5":"Μαΐου","6":"Ιουνίου","7":"Ιουλίου","8":"Αυγούστου","9":"Σεπτεμβρίου","10":"Οκτωβρίου","11":"Νοεμβρίου","12":"Δεκεμβρίου"}},"stand-alone":{"abbreviated":{"1":"Ιαν","2":"Φεβ","3":"Μάρ","4":"Απρ","5":"Μάι","6":"Ιούν","7":"Ιούλ","8":"Αύγ","9":"Σεπ","10":"Οκτ","11":"Νοέ","12":"Δεκ"},"narrow":{"1":"Ι","2":"Φ","3":"Μ","4":"Α","5":"Μ","6":"Ι","7":"Ι","8":"Α","9":"Σ","10":"Ο","11":"Ν","12":"Δ"},"wide":{"1":"Ιανουάριος","2":"Φεβρουάριος","3":"Μάρτιος","4":"Απρίλιος","5":"Μάιος","6":"Ιούνιος","7":"Ιούλιος","8":"Αύγουστος","9":"Σεπτέμβριος","10":"Οκτώβριος","11":"Νοέμβριος","12":"Δεκέμβριος"}}},"days":{"format":{"abbreviated":{"sun":"Κυρ","mon":"Δευ","tue":"Τρί","wed":"Τετ","thu":"Πέμ","fri":"Παρ","sat":"Σάβ"},"narrow":{"sun":"Κ","mon":"Δ","tue":"Τ","wed":"Τ","thu":"Π","fri":"Π","sat":"Σ"},"short":{"sun":"Κυ","mon":"Δε","tue":"Τρ","wed":"Τε","thu":"Πέ","fri":"Πα","sat":"Σά"},"wide":{"sun":"Κυριακή","mon":"Δευτέρα","tue":"Τρίτη","wed":"Τετάρτη","thu":"Πέμπτη","fri":"Παρασκευή","sat":"Σάββατο"}},"stand-alone":{"abbreviated":{"sun":"Κυρ","mon":"Δευ","tue":"Τρί","wed":"Τετ","thu":"Πέμ","fri":"Παρ","sat":"Σάβ"},"narrow":{"sun":"Κ","mon":"Δ","tue":"Τ","wed":"Τ","thu":"Π","fri":"Π","sat":"Σ"},"short":{"sun":"Κυ","mon":"Δε","tue":"Τρ","wed":"Τε","thu":"Πέ","fri":"Πα","sat":"Σά"},"wide":{"sun":"Κυριακή","mon":"Δευτέρα","tue":"Τρίτη","wed":"Τετάρτη","thu":"Πέμπτη","fri":"Παρασκευή","sat":"Σάββατο"}}},"quarters":{"format":{"abbreviated":{"1":"Τ1","2":"Τ2","3":"Τ3","4":"Τ4"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"1ο τρίμηνο","2":"2ο τρίμηνο","3":"3ο τρίμηνο","4":"4ο τρίμηνο"}},"stand-alone":{"abbreviated":{"1":"Τ1","2":"Τ2","3":"Τ3","4":"Τ4"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"1ο τρίμηνο","2":"2ο τρίμηνο","3":"3ο τρίμηνο","4":"4ο τρίμηνο"}}},"dayPeriods":{"format":{"abbreviated":{"am":"π.μ.","pm":"μ.μ.","morning1":"πρωί","afternoon1":"μεσημ.","evening1":"απόγ.","night1":"βράδυ"},"narrow":{"am":"πμ","pm":"μμ","morning1":"πρωί","afternoon1":"μεσημ.","evening1":"απόγ.","night1":"βράδυ"},"wide":{"am":"π.μ.","pm":"μ.μ.","morning1":"πρωί","afternoon1":"μεσημέρι","evening1":"απόγευμα","night1":"βράδυ"}},"stand-alone":{"abbreviated":{"am":"π.μ.","pm":"μ.μ.","morning1":"πρωί","afternoon1":"μεσημ.","evening1":"απόγ.","night1":"βράδυ"},"narrow":{"am":"πμ","pm":"μμ","morning1":"πρωί","afternoon1":"μεσημ.","evening1":"απόγ.","night1":"βράδυ"},"wide":{"am":"π.μ.","pm":"μ.μ.","morning1":"πρωί","afternoon1":"μεσημέρι","evening1":"απόγευμα","night1":"βράδυ"}}},"eras":{"eraNames":{"0":"προ Χριστού","1":"μετά Χριστόν","0-alt-variant":"πριν από την Κοινή Χρονολογία","1-alt-variant":"Κοινή Χρονολογία"},"eraAbbr":{"0":"π.Χ.","1":"μ.Χ.","0-alt-variant":"π.Κ.Χ.","1-alt-variant":"ΚΧ"},"eraNarrow":{"0":"π.Χ.","1":"μ.Χ.","0-alt-variant":"π.Κ.Χ.","1-alt-variant":"ΚΧ"}},"dateFormats":{"full":"EEEE, d MMMM y","long":"d MMMM y","medium":"d MMM y","short":"d/M/yy"},"timeFormats":{"full":"h:mm:ss a zzzz","long":"h:mm:ss a z","medium":"h:mm:ss a","short":"h:mm a"},"dateTimeFormats":{"full":"{1} - {0}","long":"{1} - {0}","medium":"{1}, {0}","short":"{1}, {0}","availableFormats":{"Bh":"h B","Bhm":"h:mm B","Bhms":"h:mm:ss B","d":"d","E":"ccc","EBhm":"E h:mm B","EBhms":"E h:mm:ss B","Ed":"E d","Ehm":"E h:mm a","EHm":"E HH:mm","Ehms":"E h:mm:ss a","EHms":"E HH:mm:ss","Gy":"y G","GyMMM":"LLL y G","GyMMMd":"d MMM y G","GyMMMEd":"E, d MMM y G","h":"h a","H":"HH","hm":"h:mm a","Hm":"HH:mm","hms":"h:mm:ss a","Hms":"HH:mm:ss","hmsv":"h:mm:ss a v","Hmsv":"HH:mm:ss v","hmv":"h:mm a v","Hmv":"HH:mm v","M":"L","Md":"d/M","MEd":"E, d/M","MMM":"MMM","MMMd":"d MMM","MMMEd":"E, d MMM","MMMMd":"d MMMM","MMMMEd":"E, d MMMM","MMMMW-count-one":"εβδομάδα W του MMM","MMMMW-count-other":"εβδομάδα W του MMM","ms":"mm:ss","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"E, d/M/y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"E, d MMM y","yMMMM":"LLLL y","yQQQ":"y QQQ","yQQQQ":"y QQQQ","yw-count-one":"εβδομάδα w του Y","yw-count-other":"εβδομάδα w του Y"},"appendItems":{"Day":"{0} ({2}: {1})","Day-Of-Week":"{0} {1}","Era":"{1} {0}","Hour":"{0} ({2}: {1})","Minute":"{0} ({2}: {1})","Month":"{0} ({2}: {1})","Quarter":"{0} ({2}: {1})","Second":"{0} ({2}: {1})","Timezone":"{0} {1}","Week":"{0} ({2}: {1})","Year":"{1} {0}"},"intervalFormats":{"intervalFormatFallback":"{0} - {1}","d":{"d":"d–d"},"h":{"a":"h a – h a","h":"h–h a"},"H":{"H":"HH–HH"},"hm":{"a":"h:mm a – h:mm a","h":"h:mm–h:mm a","m":"h:mm–h:mm a"},"Hm":{"H":"HH:mm–HH:mm","m":"HH:mm–HH:mm"},"hmv":{"a":"h:mm a – h:mm a v","h":"h:mm–h:mm a v","m":"h:mm–h:mm a v"},"Hmv":{"H":"HH:mm–HH:mm v","m":"HH:mm–HH:mm v"},"hv":{"a":"h a – h a v","h":"h–h a v"},"Hv":{"H":"HH–HH v"},"M":{"M":"M–M"},"Md":{"d":"dd/MM – dd/MM","M":"dd/MM – dd/MM"},"MEd":{"d":"E, dd/MM – E, dd/MM","M":"E, dd/MM – E, dd/MM"},"MMM":{"M":"MMM–MMM"},"MMMd":{"d":"dd–dd MMM","M":"dd MMM – dd MMM"},"MMMEd":{"d":"E, dd – E, dd MMM","M":"E, dd MMM – E, dd MMM"},"y":{"y":"y–y"},"yM":{"M":"MM/y – MM/y","y":"MM/y – MM/y"},"yMd":{"d":"dd/MM/y – dd/MM/y","M":"dd/MM/y – dd/MM/y","y":"dd/MM/y – dd/MM/y"},"yMEd":{"d":"E, dd/MM/y – E, dd/MM/y","M":"E, dd/MM/y – E, dd/MM/y","y":"E, dd/MM/y – E, dd/MM/y"},"yMMM":{"M":"MMM–MMM y","y":"MMM y – MMM y"},"yMMMd":{"d":"dd–dd MMM y","M":"dd MMM – dd MMM y","y":"dd MMM y – dd MMM y"},"yMMMEd":{"d":"E, dd MMM – E, dd MMM y","M":"E, dd MMM – E, dd MMM y","y":"E, dd MMM y – E, dd MMM y"},"yMMMM":{"M":"LLLL–LLLL y","y":"LLLL y – LLLL y"}}}}},"fields":{"era":{"displayName":"περίοδος"},"era-short":{"displayName":"περ."},"era-narrow":{"displayName":"περ."},"year":{"displayName":"έτος","relative-type--1":"πέρσι","relative-type-0":"φέτος","relative-type-1":"επόμενο έτος","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} έτος","relativeTimePattern-count-other":"σε {0} έτη"},"relativeTime-type-past":{"relativeTimePattern-count-one":"πριν από {0} έτος","relativeTimePattern-count-other":"πριν από {0} έτη"}},"year-short":{"displayName":"έτ.","relative-type--1":"πέρσι","relative-type-0":"φέτος","relative-type-1":"επόμενο έτος","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} έτος","relativeTimePattern-count-other":"σε {0} έτη"},"relativeTime-type-past":{"relativeTimePattern-count-one":"πριν από {0} έτος","relativeTimePattern-count-other":"πριν από {0} έτη"}},"year-narrow":{"displayName":"έτ.","relative-type--1":"πέρσι","relative-type-0":"φέτος","relative-type-1":"επόμενο έτος","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} έτος","relativeTimePattern-count-other":"σε {0} έτη"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} έτος πριν","relativeTimePattern-count-other":"{0} έτη πριν"}},"quarter":{"displayName":"τρίμηνο","relative-type--1":"προηγούμενο τρίμηνο","relative-type-0":"τρέχον τρίμηνο","relative-type-1":"επόμενο τρίμηνο","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} τρίμηνο","relativeTimePattern-count-other":"σε {0} τρίμηνα"},"relativeTime-type-past":{"relativeTimePattern-count-one":"πριν από {0} τρίμηνο","relativeTimePattern-count-other":"πριν από {0} τρίμηνα"}},"quarter-short":{"displayName":"τρίμ.","relative-type--1":"προηγ. τρίμ.","relative-type-0":"τρέχον τρίμ.","relative-type-1":"επόμ. τρίμ.","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} τρίμ.","relativeTimePattern-count-other":"σε {0} τρίμ."},"relativeTime-type-past":{"relativeTimePattern-count-one":"πριν από {0} τρίμ.","relativeTimePattern-count-other":"πριν από {0} τρίμ."}},"quarter-narrow":{"displayName":"τρίμ.","relative-type--1":"προηγ. τρίμ.","relative-type-0":"τρέχον τρίμ.","relative-type-1":"επόμ. τρίμ.","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} τρίμ.","relativeTimePattern-count-other":"σε {0} τρίμ."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} τρίμ. πριν","relativeTimePattern-count-other":"{0} τρίμ. πριν"}},"month":{"displayName":"μήνας","relative-type--1":"προηγούμενος μήνας","relative-type-0":"τρέχων μήνας","relative-type-1":"επόμενος μήνας","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} μήνα","relativeTimePattern-count-other":"σε {0} μήνες"},"relativeTime-type-past":{"relativeTimePattern-count-one":"πριν από {0} μήνα","relativeTimePattern-count-other":"πριν από {0} μήνες"}},"month-short":{"displayName":"μήν.","relative-type--1":"προηγούμενος μήνας","relative-type-0":"τρέχων μήνας","relative-type-1":"επόμενος μήνας","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} μήνα","relativeTimePattern-count-other":"σε {0} μήνες"},"relativeTime-type-past":{"relativeTimePattern-count-one":"πριν από {0} μήνα","relativeTimePattern-count-other":"πριν από {0} μήνες"}},"month-narrow":{"displayName":"μήν.","relative-type--1":"προηγούμενος μήνας","relative-type-0":"τρέχων μήνας","relative-type-1":"επόμενος μήνας","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} μ.","relativeTimePattern-count-other":"σε {0} μ."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} μ. πριν","relativeTimePattern-count-other":"{0} μ. πριν"}},"week":{"displayName":"εβδομάδα","relative-type--1":"προηγούμενη εβδομάδα","relative-type-0":"τρέχουσα εβδομάδα","relative-type-1":"επόμενη εβδομάδα","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} εβδομάδα","relativeTimePattern-count-other":"σε {0} εβδομάδες"},"relativeTime-type-past":{"relativeTimePattern-count-one":"πριν από {0} εβδομάδα","relativeTimePattern-count-other":"πριν από {0} εβδομάδες"},"relativePeriod":"την εβδομάδα {0}"},"week-short":{"displayName":"εβδ.","relative-type--1":"προηγούμενη εβδομάδα","relative-type-0":"τρέχουσα εβδομάδα","relative-type-1":"επόμενη εβδομάδα","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} εβδ.","relativeTimePattern-count-other":"σε {0} εβδ."},"relativeTime-type-past":{"relativeTimePattern-count-one":"πριν από {0} εβδ.","relativeTimePattern-count-other":"πριν από {0} εβδ."},"relativePeriod":"την εβδ. {0}"},"week-narrow":{"displayName":"εβδ.","relative-type--1":"προηγούμενη εβδομάδα","relative-type-0":"τρέχουσα εβδομάδα","relative-type-1":"επόμενη εβδομάδα","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} εβδ.","relativeTimePattern-count-other":"σε {0} εβδ."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} εβδ. πριν","relativeTimePattern-count-other":"{0} εβδ. πριν"},"relativePeriod":"την εβδ. {0}"},"weekOfMonth":{"displayName":"εβδομάδα μήνα"},"weekOfMonth-short":{"displayName":"εβδ. μήνα"},"weekOfMonth-narrow":{"displayName":"εβδ. μήνα"},"day":{"displayName":"ημέρα","relative-type--2":"προχθές","relative-type--1":"χθες","relative-type-0":"σήμερα","relative-type-1":"αύριο","relative-type-2":"μεθαύριο","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} ημέρα","relativeTimePattern-count-other":"σε {0} ημέρες"},"relativeTime-type-past":{"relativeTimePattern-count-one":"πριν από {0} ημέρα","relativeTimePattern-count-other":"πριν από {0} ημέρες"}},"day-short":{"displayName":"ημ.","relative-type--2":"προχθές","relative-type--1":"χθες","relative-type-0":"σήμερα","relative-type-1":"αύριο","relative-type-2":"μεθαύριο","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} ημ.","relativeTimePattern-count-other":"σε {0} ημ."},"relativeTime-type-past":{"relativeTimePattern-count-one":"πριν από {0} ημ.","relativeTimePattern-count-other":"πριν από {0} ημ."}},"day-narrow":{"displayName":"ημ.","relative-type--2":"προχθές","relative-type--1":"χθες","relative-type-0":"σήμερα","relative-type-1":"αύριο","relative-type-2":"μεθαύριο","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} ημ.","relativeTimePattern-count-other":"σε {0} ημ."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ημ. πριν","relativeTimePattern-count-other":"{0} ημ. πριν"}},"dayOfYear":{"displayName":"ημέρα έτους"},"dayOfYear-short":{"displayName":"ημ. έτους"},"dayOfYear-narrow":{"displayName":"ημ. έτους"},"weekday":{"displayName":"καθημερινή"},"weekday-short":{"displayName":"καθημερ."},"weekday-narrow":{"displayName":"καθημερ."},"weekdayOfMonth":{"displayName":"καθημερινή μήνα"},"weekdayOfMonth-short":{"displayName":"καθημερ. μήνα"},"weekdayOfMonth-narrow":{"displayName":"καθημερ. μήνα"},"sun":{"relative-type--1":"προηγούμενη Κυριακή","relative-type-0":"αυτήν την Κυριακή","relative-type-1":"επόμενη Κυριακή","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} Κυριακή","relativeTimePattern-count-other":"σε {0} Κυριακές"},"relativeTime-type-past":{"relativeTimePattern-count-one":"πριν από {0} Κυριακή","relativeTimePattern-count-other":"πριν από {0} Κυριακές"}},"sun-short":{"relative-type--1":"προηγ. Κυρ.","relative-type-0":"αυτήν την Κυρ.","relative-type-1":"επόμ. Κυρ.","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} Κυρ.","relativeTimePattern-count-other":"σε {0} Κυρ."},"relativeTime-type-past":{"relativeTimePattern-count-one":"πριν από {0} Κυρ.","relativeTimePattern-count-other":"πριν από {0} Κυρ."}},"sun-narrow":{"relative-type--1":"προηγ. Κυ","relative-type-0":"αυτήν την Κυ","relative-type-1":"επόμ. Κυ","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} Κυ","relativeTimePattern-count-other":"σε {0} Κυ"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} Κυ πριν","relativeTimePattern-count-other":"{0} Κυ πριν"}},"mon":{"relative-type--1":"προηγούμενη Δευτέρα","relative-type-0":"αυτήν τη Δευτέρα","relative-type-1":"επόμενη Δευτέρα","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} Δευτέρα","relativeTimePattern-count-other":"σε {0} Δευτέρες"},"relativeTime-type-past":{"relativeTimePattern-count-one":"πριν από {0} Δευτέρα","relativeTimePattern-count-other":"πριν από {0} Δευτέρες"}},"mon-short":{"relative-type--1":"προηγ. Δευτ.","relative-type-0":"αυτήν τη Δευτ.","relative-type-1":"επόμ. Δευτ.","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} Δευτ.","relativeTimePattern-count-other":"σε {0} Δευτ."},"relativeTime-type-past":{"relativeTimePattern-count-one":"πριν από {0} Δευτ.","relativeTimePattern-count-other":"πριν από {0} Δευτ."}},"mon-narrow":{"relative-type--1":"προηγ. Δε","relative-type-0":"αυτήν τη Δε","relative-type-1":"επόμ. Δε","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} Δε","relativeTimePattern-count-other":"σε {0} Δε"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} Δε πριν","relativeTimePattern-count-other":"{0} Δε πριν"}},"tue":{"relative-type--1":"προηγούμενη Τρίτη","relative-type-0":"αυτήν την Τρίτη","relative-type-1":"επόμενη Τρίτη","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} Τρίτη","relativeTimePattern-count-other":"σε {0} Τρίτες"},"relativeTime-type-past":{"relativeTimePattern-count-one":"πριν από {0} Τρίτη","relativeTimePattern-count-other":"πριν από {0} Τρίτες"}},"tue-short":{"relative-type--1":"προηγ. Τρ.","relative-type-0":"αυτήν την Τρ.","relative-type-1":"επόμ. Τρ.","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} Τρ.","relativeTimePattern-count-other":"σε {0} Τρ."},"relativeTime-type-past":{"relativeTimePattern-count-one":"πριν από {0} Τρ.","relativeTimePattern-count-other":"πριν από {0} Τρ."}},"tue-narrow":{"relative-type--1":"προηγ. Τρ","relative-type-0":"αυτήν την Τρ","relative-type-1":"επόμ. Τρ","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} Τρ","relativeTimePattern-count-other":"σε {0} Τρ"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} Τρ πριν","relativeTimePattern-count-other":"{0} Τρ πριν"}},"wed":{"relative-type--1":"προηγούμενη Τετάρτη","relative-type-0":"αυτήν την Τετάρτη","relative-type-1":"επόμενη Τετάρτη","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} Τετάρτη","relativeTimePattern-count-other":"σε {0} Τετάρτες"},"relativeTime-type-past":{"relativeTimePattern-count-one":"πριν από {0} Τετάρτη","relativeTimePattern-count-other":"πριν από {0} Τετάρτες"}},"wed-short":{"relative-type--1":"προηγ. Τετ.","relative-type-0":"αυτήν την Τετ.","relative-type-1":"επόμ. Τετ.","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} Τετ.","relativeTimePattern-count-other":"σε {0} Τετ."},"relativeTime-type-past":{"relativeTimePattern-count-one":"πριν από {0} Τετ.","relativeTimePattern-count-other":"πριν από {0} Τετ."}},"wed-narrow":{"relative-type--1":"προηγ. Τε","relative-type-0":"αυτήν την Τε","relative-type-1":"επόμ. Τε","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} Τε","relativeTimePattern-count-other":"σε {0} Τε"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} Τε πριν","relativeTimePattern-count-other":"{0} Τε πριν"}},"thu":{"relative-type--1":"προηγούμενη Πέμπτη","relative-type-0":"αυτήν την Πέμπτη","relative-type-1":"επόμενη Πέμπτη","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} Πέμπτη","relativeTimePattern-count-other":"σε {0} Πέμπτες"},"relativeTime-type-past":{"relativeTimePattern-count-one":"πριν από {0} Πέμπτη","relativeTimePattern-count-other":"πριν από {0} Πέμπτες"}},"thu-short":{"relative-type--1":"προηγ. Πέμ.","relative-type-0":"αυτήν την Πέμ.","relative-type-1":"επόμ. Πέμ.","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} Πέμ.","relativeTimePattern-count-other":"σε {0} Πέμ."},"relativeTime-type-past":{"relativeTimePattern-count-one":"πριν από {0} Πέμ.","relativeTimePattern-count-other":"πριν από {0} Πέμ."}},"thu-narrow":{"relative-type--1":"προηγ. Πέ","relative-type-0":"αυτήν την Πέ","relative-type-1":"επόμ. Πέ","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} Πέ","relativeTimePattern-count-other":"σε {0} Πέ"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} Πέ πριν","relativeTimePattern-count-other":"{0} Πέ πριν"}},"fri":{"relative-type--1":"προηγούμενη Παρασκευή","relative-type-0":"αυτήν την Παρασκευή","relative-type-1":"επόμενη Παρασκευή","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} Παρασκευή","relativeTimePattern-count-other":"σε {0} Παρασκευές"},"relativeTime-type-past":{"relativeTimePattern-count-one":"πριν από {0} Παρασκευή","relativeTimePattern-count-other":"πριν από {0} Παρασκευές"}},"fri-short":{"relative-type--1":"προηγ. Παρ.","relative-type-0":"αυτήν την Παρ.","relative-type-1":"επόμ. Παρ.","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} Παρ.","relativeTimePattern-count-other":"σε {0} Παρ."},"relativeTime-type-past":{"relativeTimePattern-count-one":"πριν από {0} Παρ.","relativeTimePattern-count-other":"πριν από {0} Παρ."}},"fri-narrow":{"relative-type--1":"προηγ. Πα","relative-type-0":"αυτήν την Πα","relative-type-1":"επόμ. Πα","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} Πα","relativeTimePattern-count-other":"σε {0} Πα"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} Πα πριν","relativeTimePattern-count-other":"{0} Πα πριν"}},"sat":{"relative-type--1":"προηγούμενο Σάββατο","relative-type-0":"αυτό το Σάββατο","relative-type-1":"επόμενο Σάββατο","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} Σάββατο","relativeTimePattern-count-other":"σε {0} Σάββατα"},"relativeTime-type-past":{"relativeTimePattern-count-one":"πριν από {0} Σάββατο","relativeTimePattern-count-other":"πριν από {0} Σάββατα"}},"sat-short":{"relative-type--1":"προηγ. Σάβ.","relative-type-0":"αυτό το Σάβ.","relative-type-1":"επόμ. Σάβ.","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} Σάβ.","relativeTimePattern-count-other":"σε {0} Σάβ."},"relativeTime-type-past":{"relativeTimePattern-count-one":"πριν από {0} Σάβ.","relativeTimePattern-count-other":"πριν από {0} Σάβ."}},"sat-narrow":{"relative-type--1":"προηγ. Σά","relative-type-0":"αυτό το Σά","relative-type-1":"επόμ. Σά","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} Σά","relativeTimePattern-count-other":"σε {0} Σά"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} Σά πριν","relativeTimePattern-count-other":"{0} Σά πριν"}},"dayperiod-short":{"displayName":"πμ/μμ"},"dayperiod":{"displayName":"π.μ./μ.μ."},"dayperiod-narrow":{"displayName":"πμ/μμ"},"hour":{"displayName":"ώρα","relative-type-0":"τρέχουσα ώρα","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} ώρα","relativeTimePattern-count-other":"σε {0} ώρες"},"relativeTime-type-past":{"relativeTimePattern-count-one":"πριν από {0} ώρα","relativeTimePattern-count-other":"πριν από {0} ώρες"}},"hour-short":{"displayName":"ώ.","relative-type-0":"τρέχουσα ώρα","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} ώ.","relativeTimePattern-count-other":"σε {0} ώ."},"relativeTime-type-past":{"relativeTimePattern-count-one":"πριν από {0} ώ.","relativeTimePattern-count-other":"πριν από {0} ώ."}},"hour-narrow":{"displayName":"ώ.","relative-type-0":"τρέχουσα ώρα","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} ώ.","relativeTimePattern-count-other":"σε {0} ώ."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ώ. πριν","relativeTimePattern-count-other":"{0} ώ. πριν"}},"minute":{"displayName":"λεπτό","relative-type-0":"τρέχον λεπτό","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} λεπτό","relativeTimePattern-count-other":"σε {0} λεπτά"},"relativeTime-type-past":{"relativeTimePattern-count-one":"πριν από {0} λεπτό","relativeTimePattern-count-other":"πριν από {0} λεπτά"}},"minute-short":{"displayName":"λεπ.","relative-type-0":"τρέχον λεπτό","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} λεπ.","relativeTimePattern-count-other":"σε {0} λεπ."},"relativeTime-type-past":{"relativeTimePattern-count-one":"πριν από {0} λεπ.","relativeTimePattern-count-other":"πριν από {0} λεπ."}},"minute-narrow":{"displayName":"λ.","relative-type-0":"τρέχον λεπτό","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} λ.","relativeTimePattern-count-other":"σε {0} λ."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} λ. πριν","relativeTimePattern-count-other":"{0} λ. πριν"}},"second":{"displayName":"δευτερόλεπτο","relative-type-0":"τώρα","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} δευτερόλεπτο","relativeTimePattern-count-other":"σε {0} δευτερόλεπτα"},"relativeTime-type-past":{"relativeTimePattern-count-one":"πριν από {0} δευτερόλεπτο","relativeTimePattern-count-other":"πριν από {0} δευτερόλεπτα"}},"second-short":{"displayName":"δευτ.","relative-type-0":"τώρα","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} δευτ.","relativeTimePattern-count-other":"σε {0} δευτ."},"relativeTime-type-past":{"relativeTimePattern-count-one":"πριν από {0} δευτ.","relativeTimePattern-count-other":"πριν από {0} δευτ."}},"second-narrow":{"displayName":"δ.","relative-type-0":"τώρα","relativeTime-type-future":{"relativeTimePattern-count-one":"σε {0} δ.","relativeTimePattern-count-other":"σε {0} δ."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} δ. πριν","relativeTimePattern-count-other":"{0} δ. πριν"}},"zone":{"displayName":"ζώνη ώρας"},"zone-short":{"displayName":"ζώνη"},"zone-narrow":{"displayName":"ζώνη"}}},"numbers":{"currencies":{"ADP":{"displayName":"Πεσέτα Ανδόρας","displayName-count-one":"πεσέτα Ανδόρας","displayName-count-other":"πεσέτες Ανδόρας","symbol":"ADP"},"AED":{"displayName":"Ντιράμ Ηνωμένων Αραβικών Εμιράτων","displayName-count-one":"ντιράμ Ηνωμένων Αραβικών Εμιράτων","displayName-count-other":"ντιράμ Ηνωμένων Αραβικών Εμιράτων","symbol":"AED"},"AFA":{"displayName":"Αφγανί Αφγανιστάν (1927–2002)","displayName-count-one":"αφγάνι Αφγανιστάν (AFA)","displayName-count-other":"αφγάνι Αφγανιστάν (AFA)","symbol":"AFA"},"AFN":{"displayName":"Αφγάνι Αφγανιστάν","displayName-count-one":"αφγάνι Αφγανιστάν","displayName-count-other":"αφγάνι Αφγανιστάν","symbol":"AFN"},"ALK":{"displayName":"ALK","symbol":"ALK"},"ALL":{"displayName":"Λεκ Αλβανίας","displayName-count-one":"λεκ Αλβανίας","displayName-count-other":"λεκ Αλβανίας","symbol":"ALL"},"AMD":{"displayName":"Ντραμ Αρμενίας","displayName-count-one":"ντραμ Αρμενίας","displayName-count-other":"ντραμ Αρμενίας","symbol":"AMD"},"ANG":{"displayName":"Γκίλντα Ολλανδικών Αντιλλών","displayName-count-one":"γκίλντα Ολλανδικών Αντιλλών","displayName-count-other":"γκίλντες Ολλανδικών Αντιλλών","symbol":"ANG"},"AOA":{"displayName":"Κουάνζα Ανγκόλας","displayName-count-one":"κουάνζα Ανγκόλας","displayName-count-other":"κουάνζες Ανγκόλας","symbol":"AOA","symbol-alt-narrow":"Kz"},"AOK":{"displayName":"Κουάνζα Ανγκόλας (1977–1990)","displayName-count-one":"κουάνζα Ανγκόλας (AOK)","displayName-count-other":"κουάνζα Ανγκόλας (AOK)","symbol":"AOK"},"AON":{"displayName":"Νέα Κουάνζα Ανγκόλας (1990–2000)","displayName-count-one":"νέο κουάνζα Ανγκόλας (1990–2000)","displayName-count-other":"νέα κουάνζα Ανγκόλας (1990–2000)","symbol":"AON"},"AOR":{"displayName":"AOR","symbol":"AOR"},"ARA":{"displayName":"Ωστράλ Αργετινής","displayName-count-one":"αουστράλ Αργεντινής","displayName-count-other":"αουστράλ Αργεντινής","symbol":"ARA"},"ARL":{"displayName":"ARL","symbol":"ARL"},"ARM":{"displayName":"ARM","symbol":"ARM"},"ARP":{"displayName":"Πέσο Αργεντινής (1983–1985)","displayName-count-one":"πέσο Αργεντινής (ARP)","displayName-count-other":"πέσο Αργεντινής (ARP)","symbol":"ARP"},"ARS":{"displayName":"Πέσο Αργεντινής","displayName-count-one":"πέσο Αργεντινής","displayName-count-other":"πέσο Αργεντινής","symbol":"ARS","symbol-alt-narrow":"$"},"ATS":{"displayName":"Σελίνι Αυστρίας","displayName-count-one":"σελίνι Αυστρίας","displayName-count-other":"σελίνια Αυστρίας","symbol":"ATS"},"AUD":{"displayName":"Δολάριο Αυστραλίας","displayName-count-one":"δολάριο Αυστραλίας","displayName-count-other":"δολάρια Αυστραλίας","symbol":"A$","symbol-alt-narrow":"$"},"AWG":{"displayName":"Φλορίνι Αρούμπας","displayName-count-one":"φλορίνι Αρούμπας","displayName-count-other":"φλορίνια Αρούμπας","symbol":"AWG"},"AZM":{"displayName":"Μανάτ Αζερμπαϊτζάν (1993–2006)","displayName-count-one":"μανάτ Αζερμπαϊτζάν (1993–2006)","displayName-count-other":"μανάτ Αζερμπαϊτζάν (1993–2006)","symbol":"AZM"},"AZN":{"displayName":"Μανάτ Αζερμπαϊτζάν","displayName-count-one":"μανάτ Αζερμπαϊτζάν","displayName-count-other":"μανάτ Αζερμπαϊτζάν","symbol":"AZN"},"BAD":{"displayName":"Δηνάριο Βοσνίας-Ερζεγοβίνης","displayName-count-one":"δηνάριο Βοσνίας-Ερζεγοβίνης","displayName-count-other":"δηνάρια Βοσνίας-Ερζεγοβίνης","symbol":"BAD"},"BAM":{"displayName":"Μετατρέψιμο Μάρκο Βοσνίας-Ερζεγοβίνης","displayName-count-one":"μετατρέψιμο μάρκο Βοσνίας-Ερζεγοβίνης","displayName-count-other":"μετατρέψιμα μάρκα Βοσνίας-Ερζεγοβίνης","symbol":"BAM","symbol-alt-narrow":"KM"},"BAN":{"displayName":"BAN","symbol":"BAN"},"BBD":{"displayName":"Δολάριο Μπαρμπέιντος","displayName-count-one":"δολάριο Μπαρμπέιντος","displayName-count-other":"δολάρια Μπαρμπέιντος","symbol":"BBD","symbol-alt-narrow":"$"},"BDT":{"displayName":"Τάκα Μπαγκλαντές","displayName-count-one":"τάκα Μπαγκλαντές","displayName-count-other":"τάκα Μπαγκλαντές","symbol":"BDT","symbol-alt-narrow":"৳"},"BEC":{"displayName":"Φράγκο Βελγίου (μετατρέψιμο)","displayName-count-one":"φράγκο Βελγίου (μετατρέψιμο)","displayName-count-other":"φράγκα Βελγίου (μετατρέψιμα)","symbol":"BEC"},"BEF":{"displayName":"Φράγκο Βελγίου","displayName-count-one":"φράγκο Βελγίου","displayName-count-other":"φράγκα Βελγίου","symbol":"BEF"},"BEL":{"displayName":"Φράγκο Βελγίου (οικονομικό)","displayName-count-one":"φράγκο Βελγίου (οικονομικό)","displayName-count-other":"φράγκα Βελγίου (οικονομικό)","symbol":"BEL"},"BGL":{"displayName":"Μεταλλικό Λεβ Βουλγαρίας","displayName-count-one":"μεταλλικό λεβ Βουλγαρίας","displayName-count-other":"μεταλλικά λεβ Βουλγαρίας","symbol":"BGL"},"BGM":{"displayName":"BGM","symbol":"BGM"},"BGN":{"displayName":"Λεβ Βουλγαρίας","displayName-count-one":"λεβ Βουλγαρίας","displayName-count-other":"λεβ Βουλγαρίας","symbol":"BGN"},"BGO":{"displayName":"BGO","symbol":"BGO"},"BHD":{"displayName":"Δηνάριο Μπαχρέιν","displayName-count-one":"δηνάριο Μπαχρέιν","displayName-count-other":"δηνάρια Μπαχρέιν","symbol":"BHD"},"BIF":{"displayName":"Φράγκο Μπουρούντι","displayName-count-one":"φράγκο Μπουρούντι","displayName-count-other":"φράγκα Μπουρούντι","symbol":"BIF"},"BMD":{"displayName":"Δολάριο Βερμούδων","displayName-count-one":"δολάριο Βερμούδων","displayName-count-other":"δολάρια Βερμούδων","symbol":"BMD","symbol-alt-narrow":"$"},"BND":{"displayName":"Δολάριο Μπρουνέι","displayName-count-one":"δολάριο Μπρουνέι","displayName-count-other":"δολάρια Μπρουνέι","symbol":"BND","symbol-alt-narrow":"$"},"BOB":{"displayName":"Μπολιβιάνο Βολιβίας","displayName-count-one":"μπολιβιάνο Βολιβίας","displayName-count-other":"μπολιβιάνο Βολιβίας","symbol":"BOB","symbol-alt-narrow":"Bs"},"BOL":{"displayName":"BOL","symbol":"BOL"},"BOP":{"displayName":"Πέσο Βολιβίας","displayName-count-one":"πέσο Βολιβίας","displayName-count-other":"πέσο Βολιβίας","symbol":"BOP"},"BOV":{"displayName":"Μβδολ Βολιβίας","displayName-count-one":"μβντολ Βολιβίας","displayName-count-other":"μβντολ Βολιβίας","symbol":"BOV"},"BRB":{"displayName":"Νέο Κρουζιέρο Βραζιλίας (1967–1986)","displayName-count-one":"νέο κρουζέιρο Βραζιλίας (BRB)","displayName-count-other":"νέα κρουζέιρο Βραζιλίας (BRB)","symbol":"BRB"},"BRC":{"displayName":"Κρουζάντο Βραζιλίας","displayName-count-one":"κρουζάντο Βραζιλίας","displayName-count-other":"κρουζάντο Βραζιλίας","symbol":"BRC"},"BRE":{"displayName":"Κρουζιέρο Βραζιλίας (1990–1993)","displayName-count-one":"κρουζέιρο Βραζιλίας (BRE)","displayName-count-other":"κρουζέιρο Βραζιλίας (BRE)","symbol":"BRE"},"BRL":{"displayName":"Ρεάλ Βραζιλίας","displayName-count-one":"ρεάλ Βραζιλίας","displayName-count-other":"ρεάλ Βραζιλίας","symbol":"R$","symbol-alt-narrow":"R$"},"BRN":{"displayName":"Νέο Κρουζάντο Βραζιλίας","displayName-count-one":"νέο κρουζάντο Βραζιλίας","displayName-count-other":"νέα κρουζάντο Βραζιλίας","symbol":"BRN"},"BRR":{"displayName":"Κρουζιέρο Βραζιλίας","displayName-count-one":"κρουζέιρο Βραζιλίας","displayName-count-other":"κρουζέιρο Βραζιλίας","symbol":"BRR"},"BRZ":{"displayName":"BRZ","symbol":"BRZ"},"BSD":{"displayName":"Δολάριο Μπαχαμών","displayName-count-one":"δολάριο Μπαχαμών","displayName-count-other":"δολάρια Μπαχαμών","symbol":"BSD","symbol-alt-narrow":"$"},"BTN":{"displayName":"Νγκούλτρουμ Μπουτάν","displayName-count-one":"νγκούλτρουμ Μπουτάν","displayName-count-other":"νγκούλτρουμ Μπουτάν","symbol":"BTN"},"BUK":{"displayName":"Κιατ Βιρμανίας","displayName-count-one":"κιάτ Βιρμανίας","displayName-count-other":"κιάτ Βιρμανίας","symbol":"BUK"},"BWP":{"displayName":"Πούλα Μποτσουάνας","displayName-count-one":"πούλα Μποτσουάνας","displayName-count-other":"πούλα Μποτσουάνας","symbol":"BWP","symbol-alt-narrow":"P"},"BYB":{"displayName":"Νέο Ρούβλι Λευκορωσίας (1994–1999)","displayName-count-one":"νέο ρούβλι Λευκορωσίας (1994–1999)","displayName-count-other":"νέα ρούβλια Λευκορωσίας (1994–1999)","symbol":"BYB"},"BYN":{"displayName":"Ρούβλι Λευκορωσίας","displayName-count-one":"ρούβλι Λευκορωσίας","displayName-count-other":"ρούβλια Λευκορωσίας","symbol":"BYN","symbol-alt-narrow":"р."},"BYR":{"displayName":"Ρούβλι Λευκορωσίας (2000–2016)","displayName-count-one":"ρούβλι Λευκορωσίας (2000–2016)","displayName-count-other":"ρούβλια Λευκορωσίας (2000–2016)","symbol":"BYR"},"BZD":{"displayName":"Δολάριο Μπελίζ","displayName-count-one":"δολάριο Μπελίζ","displayName-count-other":"δολάρια Μπελίζ","symbol":"BZD","symbol-alt-narrow":"$"},"CAD":{"displayName":"Δολάριο Καναδά","displayName-count-one":"δολάριο Καναδά","displayName-count-other":"δολάρια Καναδά","symbol":"CA$","symbol-alt-narrow":"$"},"CDF":{"displayName":"Φράγκο Κονγκό","displayName-count-one":"φράγκο Κονγκό","displayName-count-other":"φράγκα Κονγκό","symbol":"CDF"},"CHE":{"displayName":"Ευρώ WIR","displayName-count-one":"ευρώ WIR","displayName-count-other":"ευρώ WIR","symbol":"CHE"},"CHF":{"displayName":"Φράγκο Ελβετίας","displayName-count-one":"φράγκο Ελβετίας","displayName-count-other":"φράγκα Ελβετίας","symbol":"CHF"},"CHW":{"displayName":"Φράγκο WIR","displayName-count-one":"φράγκο WIR","displayName-count-other":"φράγκα WIR","symbol":"CHW"},"CLE":{"displayName":"CLE","symbol":"CLE"},"CLF":{"displayName":"Ουνιδάδες ντε φομέντο Χιλής","displayName-count-one":"ουνιδάδες ντε φομέντο Χιλής","displayName-count-other":"ουνιδάδες ντε φομέντο Χιλής","symbol":"CLF"},"CLP":{"displayName":"Πέσο Χιλής","displayName-count-one":"πέσο Χιλής","displayName-count-other":"πέσο Χιλής","symbol":"CLP","symbol-alt-narrow":"$"},"CNH":{"displayName":"Γουάν Κίνας (υπεράκτιο)","displayName-count-one":"γουάν Κίνας (υπεράκτιο)","displayName-count-other":"γουάν Κίνας (υπεράκτια)","symbol":"CNH"},"CNX":{"displayName":"CNX","symbol":"CNX"},"CNY":{"displayName":"Γουάν Κίνας","displayName-count-one":"γουάν Κίνας","displayName-count-other":"γουάν Κίνας","symbol":"CN¥","symbol-alt-narrow":"¥"},"COP":{"displayName":"Πέσο Κολομβίας","displayName-count-one":"πέσο Κολομβίας","displayName-count-other":"πέσο Κολομβίας","symbol":"COP","symbol-alt-narrow":"$"},"COU":{"displayName":"COU","symbol":"COU"},"CRC":{"displayName":"Κολόν Κόστα Ρίκα","displayName-count-one":"κολόν Κόστα Ρίκα","displayName-count-other":"κολόν Κόστα Ρίκα","symbol":"CRC","symbol-alt-narrow":"₡"},"CSD":{"displayName":"Παλαιό Δηνάριο Σερβίας","displayName-count-one":"παλιό δινάρη Σερβίας","displayName-count-other":"παλιά δινάρια Σερβίας","symbol":"CSD"},"CSK":{"displayName":"Σκληρή Κορόνα Τσεχοσλοβακίας","displayName-count-one":"σκληρή κορόνα Τσεχοσλοβακίας","displayName-count-other":"σκληρές κορόνες Τσεχοσλοβακίας","symbol":"CSK"},"CUC":{"displayName":"Μετατρέψιμο πέσο Κούβας","displayName-count-one":"μετατρέψιμο πέσο Κούβας","displayName-count-other":"μετατρέψιμα πέσο Κούβας","symbol":"CUC","symbol-alt-narrow":"$"},"CUP":{"displayName":"Πέσο Κούβας","displayName-count-one":"πέσο Κούβας","displayName-count-other":"πέσο Κούβας","symbol":"CUP","symbol-alt-narrow":"$"},"CVE":{"displayName":"Εσκούδο Πράσινου Ακρωτηρίου","displayName-count-one":"εσκούδο Πράσινου Ακρωτηρίου","displayName-count-other":"εσκούδο Πράσινου Ακρωτηρίου","symbol":"CVE"},"CYP":{"displayName":"Λίρα Κύπρου","displayName-count-one":"λίρα Κύπρου","displayName-count-other":"λίρες Κύπρου","symbol":"CYP"},"CZK":{"displayName":"Κορόνα Τσεχίας","displayName-count-one":"κορόνα Τσεχίας","displayName-count-other":"κορόνες Τσεχίας","symbol":"CZK","symbol-alt-narrow":"Kč"},"DDM":{"displayName":"Οστμάρκ Ανατολικής Γερμανίας","displayName-count-one":"όστμαρκ Ανατολικής Γερμανίας","displayName-count-other":"όστμαρκ Ανατολικής Γερμανίας","symbol":"DDM"},"DEM":{"displayName":"Μάρκο Γερμανίας","displayName-count-one":"μάρκο Γερμανίας","displayName-count-other":"μάρκα Γερμανίας","symbol":"DEM"},"DJF":{"displayName":"Φράγκο Τζιμπουτί","displayName-count-one":"φράγκο Τζιμπουτί","displayName-count-other":"φράγκα Τζιμπουτί","symbol":"DJF"},"DKK":{"displayName":"Κορόνα Δανίας","displayName-count-one":"κορόνα Δανίας","displayName-count-other":"κορόνες Δανίας","symbol":"DKK","symbol-alt-narrow":"kr"},"DOP":{"displayName":"Πέσο Δομινικανής Δημοκρατίας","displayName-count-one":"πέσο Δομινικανής Δημοκρατίας","displayName-count-other":"πέσο Δομινικανής Δημοκρατίας","symbol":"DOP","symbol-alt-narrow":"$"},"DZD":{"displayName":"Δηνάριο Αλγερίας","displayName-count-one":"δηνάριο Αλγερίας","displayName-count-other":"δηνάρια Αλγερίας","symbol":"DZD"},"ECS":{"displayName":"Σούκρε Εκουαδόρ","displayName-count-one":"σούκρε Εκουαδόρ","displayName-count-other":"σούκρε Εκουαδόρ","symbol":"ECS"},"ECV":{"displayName":"ECV","symbol":"ECV"},"EEK":{"displayName":"Κορόνα Εσθονίας","displayName-count-one":"κορόνα Εσθονίας","displayName-count-other":"κορόνες Εσθονίας","symbol":"EEK"},"EGP":{"displayName":"Λίρα Αιγύπτου","displayName-count-one":"λίρα Αιγύπτου","displayName-count-other":"λίρες Αιγύπτου","symbol":"EGP","symbol-alt-narrow":"E£"},"ERN":{"displayName":"Νάκφα Ερυθραίας","displayName-count-one":"νάκφα Ερυθραίας","displayName-count-other":"νάκφα Ερυθραίας","symbol":"ERN"},"ESA":{"displayName":"πεσέτα Ισπανίας (λογαριασμός Α)","displayName-count-one":"πεσέτα Ισπανίας (λογαριασμός Α)","displayName-count-other":"πεσέτες Ισπανίας (λογαριασμός Α)","symbol":"ESA"},"ESB":{"displayName":"πεσέτα Ισπανίας (μετατρέψιμος λογαριασμός)","displayName-count-one":"πεσέτα Ισπανίας (μετατρέψιμος λογαριασμός)","displayName-count-other":"πεσέτες Ισπανίας (μετατρέψιμες)","symbol":"ESB"},"ESP":{"displayName":"Πεσέτα Ισπανίας","displayName-count-one":"πεσέτα Ισπανίας","displayName-count-other":"πεσέτες Ισπανίας","symbol":"ESP","symbol-alt-narrow":"₧"},"ETB":{"displayName":"Μπιρ Αιθιοπίας","displayName-count-one":"μπιρ Αιθιοπίας","displayName-count-other":"μπιρ Αιθιοπίας","symbol":"ETB"},"EUR":{"displayName":"Ευρώ","displayName-count-one":"ευρώ","displayName-count-other":"ευρώ","symbol":"€","symbol-alt-narrow":"€"},"FIM":{"displayName":"Μάρκο Φινλανδίας","displayName-count-one":"μάρκο Φινλανδίας","displayName-count-other":"μάρκα Φινλανδίας","symbol":"FIM"},"FJD":{"displayName":"Δολάριο Φίτζι","displayName-count-one":"δολάριο Φίτζι","displayName-count-other":"δολάρια Φίτζι","symbol":"FJD","symbol-alt-narrow":"$"},"FKP":{"displayName":"Λίρα Νήσων Φόκλαντ","displayName-count-one":"λίρα Νήσων Φόκλαντ","displayName-count-other":"λίρες Νήσων Φόκλαντ","symbol":"FKP","symbol-alt-narrow":"£"},"FRF":{"displayName":"Φράγκο Γαλλίας","displayName-count-one":"φράγκο Γαλλίας","displayName-count-other":"φράγκα Γαλλίας","symbol":"FRF"},"GBP":{"displayName":"Λίρα Στερλίνα Βρετανίας","displayName-count-one":"λίρα στερλίνα Βρετανίας","displayName-count-other":"λίρες στερλίνες Βρετανίας","symbol":"£","symbol-alt-narrow":"£"},"GEK":{"displayName":"Κούπον Λάρι Γεωργίας","displayName-count-one":"κούπον λάρι Γεωργίας","displayName-count-other":"κούπον λάρι Γεωργίας","symbol":"GEK"},"GEL":{"displayName":"Λάρι Γεωργίας","displayName-count-one":"λάρι Γεωργίας","displayName-count-other":"λάρι Γεωργίας","symbol":"GEL","symbol-alt-narrow":"₾","symbol-alt-variant":"₾"},"GHC":{"displayName":"Σέντι Γκάνας (1979–2007)","displayName-count-one":"σέντι Γκάνας (GHC)","displayName-count-other":"σέντι Γκάνας (GHC)","symbol":"GHC"},"GHS":{"displayName":"Σέντι Γκάνας","displayName-count-one":"σέντι Γκάνας","displayName-count-other":"σέντι Γκάνας","symbol":"GHS"},"GIP":{"displayName":"Λίρα Γιβραλτάρ","displayName-count-one":"λίρα Γιβραλτάρ","displayName-count-other":"λίρες Γιβραλτάρ","symbol":"GIP","symbol-alt-narrow":"£"},"GMD":{"displayName":"Νταλάσι Γκάμπιας","displayName-count-one":"νταλάσι Γκάμπιας","displayName-count-other":"νταλάσι Γκάμπιας","symbol":"GMD"},"GNF":{"displayName":"Φράγκο Γουινέας","displayName-count-one":"φράγκο Γουινέας","displayName-count-other":"φράγκα Γουινέας","symbol":"GNF","symbol-alt-narrow":"FG"},"GNS":{"displayName":"Συλί Γουινέας","displayName-count-one":"συλί Γουινέας","displayName-count-other":"συλί Γουινέας","symbol":"GNS"},"GQE":{"displayName":"Εκγουέλε Ισημερινής Γουινέας","displayName-count-one":"εκουέλε Ισημερινής Γουινέας","displayName-count-other":"εκουέλε Ισημερινής Γουινέας","symbol":"GQE"},"GRD":{"pattern":"#,##0.00 ¤","displayName":"Δραχμή Ελλάδας","displayName-count-one":"δραχμή Ελλάδας","displayName-count-other":"δραχμές Ελλάδας","symbol":"Δρχ","decimal":",","group":"."},"GTQ":{"displayName":"Κουετσάλ Γουατεμάλας","displayName-count-one":"κουετσάλ Γουατεμάλας","displayName-count-other":"κουετσάλ Γουατεμάλας","symbol":"GTQ","symbol-alt-narrow":"Q"},"GWE":{"displayName":"Γκινέα Εσκούδο Πορτογαλίας","displayName-count-one":"γκινέα εσκούδο Πορτογαλίας","displayName-count-other":"γκινέα εσκούδο Πορτογαλίας","symbol":"GWE"},"GWP":{"displayName":"Πέσο Γουινέας-Μπισάου","displayName-count-one":"πέσο Γουινέα-Μπισάου","displayName-count-other":"πέσο Γουινέα-Μπισάου","symbol":"GWP"},"GYD":{"displayName":"Δολάριο Γουιάνας","displayName-count-one":"δολάριο Γουιάνας","displayName-count-other":"δολάρια Γουιάνας","symbol":"GYD","symbol-alt-narrow":"$"},"HKD":{"displayName":"Δολάριο Χονγκ Κονγκ","displayName-count-one":"δολάριο Χονγκ Κονγκ","displayName-count-other":"δολάρια Χονγκ Κονγκ","symbol":"HK$","symbol-alt-narrow":"$"},"HNL":{"displayName":"Λεμπίρα Ονδούρας","displayName-count-one":"λεμπίρα Ονδούρας","displayName-count-other":"λεμπίρα Ονδούρας","symbol":"HNL","symbol-alt-narrow":"L"},"HRD":{"displayName":"Δηνάριο Κροατίας","displayName-count-one":"δηνάριο Κροατίας","displayName-count-other":"δηνάρια Κροατίας","symbol":"HRD"},"HRK":{"displayName":"Κούνα Κροατίας","displayName-count-one":"κούνα Κροατίας","displayName-count-other":"κούνα Κροατίας","symbol":"HRK","symbol-alt-narrow":"kn"},"HTG":{"displayName":"Γκουρντ Αϊτής","displayName-count-one":"γκουρντ Αϊτής","displayName-count-other":"γκουρντ Αϊτής","symbol":"HTG"},"HUF":{"displayName":"Φιορίνι Ουγγαρίας","displayName-count-one":"φιορίνι Ουγγαρίας","displayName-count-other":"φιορίνια Ουγγαρίας","symbol":"HUF","symbol-alt-narrow":"Ft"},"IDR":{"displayName":"Ρουπία Ινδονησίας","displayName-count-one":"ρουπία Ινδονησίας","displayName-count-other":"ρουπία Ινδονησίας","symbol":"IDR","symbol-alt-narrow":"Rp"},"IEP":{"displayName":"Λίρα Ιρλανδίας","displayName-count-one":"λίρα Ιρλανδίας","displayName-count-other":"λίρες Ιρλανδίας","symbol":"IEP"},"ILP":{"displayName":"Λίρα Ισραήλ","displayName-count-one":"λίρα Ισραήλ","displayName-count-other":"λίρες Ισραήλ","symbol":"ILP"},"ILR":{"displayName":"παλιό σεκέλ Ισραήλ","displayName-count-one":"παλιό σεκέλ Ισραήλ","displayName-count-other":"παλιά σεκέλ Ισραήλ","symbol":"ILR"},"ILS":{"displayName":"Νέο Σέκελ Ισραήλ","displayName-count-one":"νέο σέκελ Ισραήλ","displayName-count-other":"νέα σέκελ Ισραήλ","symbol":"₪","symbol-alt-narrow":"₪"},"INR":{"displayName":"Ρουπία Ινδίας","displayName-count-one":"ρουπία Ινδίας","displayName-count-other":"ρουπίες Ινδίας","symbol":"₹","symbol-alt-narrow":"₹"},"IQD":{"displayName":"Δηνάριο Ιράκ","displayName-count-one":"δηνάριο Ιράκ","displayName-count-other":"δηνάρια Ιράκ","symbol":"IQD"},"IRR":{"displayName":"Ριάλ Ιράν","displayName-count-one":"ριάλ Ιράν","displayName-count-other":"ριάλ Ιράν","symbol":"IRR"},"ISJ":{"displayName":"Παλιά κορόνα Ισλανδίας","displayName-count-one":"Παλιά κορόνα Ισλανδίας","displayName-count-other":"παλιές κορόνες Ισλανδίας","symbol":"ISJ"},"ISK":{"displayName":"Κορόνα Ισλανδίας","displayName-count-one":"κορόνα Ισλανδίας","displayName-count-other":"κορόνες Ισλανδίας","symbol":"ISK","symbol-alt-narrow":"kr"},"ITL":{"displayName":"Λιρέτα Ιταλίας","displayName-count-one":"λιρέτα Ιταλίας","displayName-count-other":"λιρέτες Ιταλίας","symbol":"ITL"},"JMD":{"displayName":"Δολάριο Τζαμάικας","displayName-count-one":"δολάριο Τζαμάικας","displayName-count-other":"δολάρια Τζαμάικας","symbol":"JMD","symbol-alt-narrow":"$"},"JOD":{"displayName":"Δηνάριο Ιορδανίας","displayName-count-one":"δηνάριο Ιορδανίας","displayName-count-other":"δηνάρια Ιορδανίας","symbol":"JOD"},"JPY":{"displayName":"Γιεν Ιαπωνίας","displayName-count-one":"γιεν Ιαπωνίας","displayName-count-other":"γιεν Ιαπωνίας","symbol":"JP¥","symbol-alt-narrow":"¥"},"KES":{"displayName":"Σελίνι Κένυας","displayName-count-one":"σελίνι Κένυας","displayName-count-other":"σελίνια Κένυας","symbol":"KES"},"KGS":{"displayName":"Σομ Κιργιζίας","displayName-count-one":"σομ Κιργιζίας","displayName-count-other":"σομ Κιργιζίας","symbol":"KGS"},"KHR":{"displayName":"Ρίελ Καμπότζης","displayName-count-one":"ρίελ Καμπότζης","displayName-count-other":"ρίελ Καμπότζης","symbol":"KHR","symbol-alt-narrow":"៛"},"KMF":{"displayName":"Φράγκο Κομορών","displayName-count-one":"φράγκο Κομορών","displayName-count-other":"φράγκα Κομορών","symbol":"KMF","symbol-alt-narrow":"CF"},"KPW":{"displayName":"Γουόν Βόρειας Κορέας","displayName-count-one":"γουόν Βόρειας Κορέας","displayName-count-other":"γουόν Βόρειας Κορέας","symbol":"KPW","symbol-alt-narrow":"₩"},"KRH":{"displayName":"KRH","symbol":"KRH"},"KRO":{"displayName":"KRO","symbol":"KRO"},"KRW":{"displayName":"Γουόν Νότιας Κορέας","displayName-count-one":"γουόν Νότιας Κορέας","displayName-count-other":"γουόν Νότιας Κορέας","symbol":"₩","symbol-alt-narrow":"₩"},"KWD":{"displayName":"Δηνάριο Κουβέιτ","displayName-count-one":"δηνάριο Κουβέιτ","displayName-count-other":"δηνάρια Κουβέιτ","symbol":"KWD"},"KYD":{"displayName":"Δολάριο Νήσων Κέιμαν","displayName-count-one":"δολάριο Νήσων Κέιμαν","displayName-count-other":"δολάρια Νήσων Κέιμαν","symbol":"KYD","symbol-alt-narrow":"$"},"KZT":{"displayName":"Τένγκε Καζακστάν","displayName-count-one":"τένγκε Καζακστάν","displayName-count-other":"τένγκε Καζακστάν","symbol":"KZT","symbol-alt-narrow":"₸"},"LAK":{"displayName":"Κιπ Λάος","displayName-count-one":"κιπ Λάος","displayName-count-other":"κιπ Λάος","symbol":"LAK","symbol-alt-narrow":"₭"},"LBP":{"displayName":"Λίρα Λιβάνου","displayName-count-one":"λίρα Λιβάνου","displayName-count-other":"λίρες Λιβάνου","symbol":"LBP","symbol-alt-narrow":"L£"},"LKR":{"displayName":"Ρουπία Σρι Λάνκα","displayName-count-one":"ρουπία Σρι Λάνκα","displayName-count-other":"ρουπίες Σρι Λάνκα","symbol":"LKR","symbol-alt-narrow":"Rs"},"LRD":{"displayName":"Δολάριο Λιβερίας","displayName-count-one":"δολάριο Λιβερίας","displayName-count-other":"δολάρια Λιβερίας","symbol":"LRD","symbol-alt-narrow":"$"},"LSL":{"displayName":"Λότι Λεσότο","displayName-count-one":"λότι Λεσόθο","displayName-count-other":"λότι Λεσόθο","symbol":"LSL"},"LTL":{"displayName":"Λίτα Λιθουανίας","displayName-count-one":"λίτα Λιθουανίας","displayName-count-other":"λίτα Λιθουανίας","symbol":"LTL","symbol-alt-narrow":"Lt"},"LTT":{"displayName":"Ταλόνας Λιθουανίας","displayName-count-one":"ταλόνας Λιθουανίας","displayName-count-other":"ταλόνας Λιθουανίας","symbol":"LTT"},"LUC":{"displayName":"Μετατρέψιμο Φράγκο Λουξεμβούργου","symbol":"LUC"},"LUF":{"displayName":"Φράγκο Λουξεμβούργου","displayName-count-one":"φράγκο Λουξεμβούργου","displayName-count-other":"φράγκα Λουξεμβούργου","symbol":"LUF"},"LUL":{"displayName":"Οικονομικό Φράγκο Λουξεμβούργου","symbol":"LUL"},"LVL":{"displayName":"Λατς Λετονίας","displayName-count-one":"λατς Λετονίας","displayName-count-other":"λατς Λετονίας","symbol":"LVL","symbol-alt-narrow":"Ls"},"LVR":{"displayName":"Ρούβλι Λετονίας","displayName-count-one":"ρούβλι Λετονίας","displayName-count-other":"ρούβλια Λετονίας","symbol":"LVR"},"LYD":{"displayName":"Δηνάριο Λιβύης","displayName-count-one":"δηνάριο Λιβύης","displayName-count-other":"δηνάρια Λιβύης","symbol":"LYD"},"MAD":{"displayName":"Ντιράμ Μαρόκου","displayName-count-one":"ντιράμ Μαρόκου","displayName-count-other":"ντιράμ Μαρόκου","symbol":"MAD"},"MAF":{"displayName":"Φράγκο Μαρόκου","displayName-count-one":"φράγκο Μαρόκου","displayName-count-other":"φράγκα Μαρόκου","symbol":"MAF"},"MCF":{"displayName":"MCF","symbol":"MCF"},"MDC":{"displayName":"MDC","symbol":"MDC"},"MDL":{"displayName":"Λέου Μολδαβίας","displayName-count-one":"λέου Μολδαβίας","displayName-count-other":"λέου Μολδαβίας","symbol":"MDL"},"MGA":{"displayName":"Αριάρι Μαδαγασκάρης","displayName-count-one":"αριάρι Μαδαγασκάρης","displayName-count-other":"αριάρι Μαδαγασκάρης","symbol":"MGA","symbol-alt-narrow":"Ar"},"MGF":{"displayName":"Φράγκο Μαδαγασκάρης","displayName-count-one":"φράγκο Μαδαγασκάρης","displayName-count-other":"φράγκα Μαδαγασκάρης","symbol":"MGF"},"MKD":{"displayName":"Δηνάριο ΠΓΔΜ","displayName-count-one":"δηνάριο ΠΓΔΜ","displayName-count-other":"δηνάρια ΠΓΔΜ","symbol":"MKD"},"MKN":{"displayName":"MKN","symbol":"MKN"},"MLF":{"displayName":"Φράγκο Μαλί","displayName-count-one":"φράγκο Μαλί","displayName-count-other":"φράγκα Μαλί","symbol":"MLF"},"MMK":{"displayName":"Κιάτ Μιανμάρ","displayName-count-one":"κιάτ Μιανμάρ","displayName-count-other":"κιάτ Μιανμάρ","symbol":"MMK","symbol-alt-narrow":"K"},"MNT":{"displayName":"Τουγκρίκ Μογγολίας","displayName-count-one":"τουγκρίκ Μογγολίας","displayName-count-other":"τουγκρίκ Μογγολίας","symbol":"MNT","symbol-alt-narrow":"₮"},"MOP":{"displayName":"Πατάκα Μακάο","displayName-count-one":"πατάκα Μακάο","displayName-count-other":"πατάκα Μακάο","symbol":"MOP"},"MRO":{"displayName":"Ουγκίγια Μαυριτανίας","displayName-count-one":"ουγκίγια Μαυριτανίας","displayName-count-other":"ουγκίγια Μαυριτανίας","symbol":"MRO"},"MTL":{"displayName":"Λιρέτα Μάλτας","displayName-count-one":"λιρέτα Μάλτας","displayName-count-other":"λιρέτες Μάλτας","symbol":"MTL"},"MTP":{"displayName":"Λίρα Μάλτας","displayName-count-one":"λίρα Μάλτας","displayName-count-other":"λίρες Μάλτας","symbol":"MTP"},"MUR":{"displayName":"Ρουπία Μαυρικίου","displayName-count-one":"ρουπία Μαυρικίου","displayName-count-other":"ρουπίες Μαυρικίου","symbol":"MUR","symbol-alt-narrow":"Rs"},"MVP":{"displayName":"MVP","symbol":"MVP"},"MVR":{"displayName":"Ρουφίγια Μαλδίβων","displayName-count-one":"ρουφίγια Μαλδίβων","displayName-count-other":"ρουφίγια Μαλδίβων","symbol":"MVR"},"MWK":{"displayName":"Κουάτσα Μαλάουι","displayName-count-one":"κουάτσα Μαλάουι","displayName-count-other":"κουάτσα Μαλάουι","symbol":"MWK"},"MXN":{"displayName":"Πέσο Μεξικού","displayName-count-one":"πέσο Μεξικού","displayName-count-other":"πέσο Μεξικού","symbol":"MX$","symbol-alt-narrow":"$"},"MXP":{"displayName":"Ασημένιο Πέσο Μεξικού (1861–1992)","displayName-count-one":"ασημένιο πέσο Μεξικού (MXP)","displayName-count-other":"ασημένια πέσο Μεξικού (MXP)","symbol":"MXP"},"MXV":{"displayName":"MXV","symbol":"MXV"},"MYR":{"displayName":"Ρινγκίτ Μαλαισίας","displayName-count-one":"ρινγκίτ Μαλαισίας","displayName-count-other":"ρινγκίτ Μαλαισίας","symbol":"MYR","symbol-alt-narrow":"RM"},"MZE":{"displayName":"Εσκούδο Μοζαμβίκης","displayName-count-one":"εσκούδο Μοζαμβίκης","displayName-count-other":"εσκούδο Μοζαμβίκης","symbol":"MZE"},"MZM":{"displayName":"Παλαιό Μετικάλ Μοζαμβίκης","displayName-count-one":"παλιό μετικάλ Μοζαμβίκης","displayName-count-other":"παλιά μετικάλ Μοζαμβίκης","symbol":"MZM"},"MZN":{"displayName":"Μετικάλ Μοζαμβίκης","displayName-count-one":"μετικάλ Μοζαμβίκης","displayName-count-other":"μετικάλ Μοζαμβίκης","symbol":"MZN"},"NAD":{"displayName":"Δολάριο Ναμίμπιας","displayName-count-one":"δολάριο Ναμίμπιας","displayName-count-other":"δολάρια Ναμίμπιας","symbol":"NAD","symbol-alt-narrow":"$"},"NGN":{"displayName":"Νάιρα Νιγηρίας","displayName-count-one":"νάιρα Νιγηρίας","displayName-count-other":"νάιρα Νιγηρίας","symbol":"NGN","symbol-alt-narrow":"₦"},"NIC":{"displayName":"Κόρδοβα Νικαράγουας","displayName-count-one":"κόρδοβα Νικαράγουας","displayName-count-other":"κόρδοβα Νικαράγουας","symbol":"NIC"},"NIO":{"displayName":"Χρυσή Κόρδοβα Νικαράγουας","displayName-count-one":"χρυσή κόρδοβα Νικαράγουας","displayName-count-other":"χρυσές κόρδοβα Νικαράγουας","symbol":"NIO","symbol-alt-narrow":"C$"},"NLG":{"displayName":"Γκίλντα Ολλανδίας","displayName-count-one":"γκίλντα Ολλανδίας","displayName-count-other":"γκίλντα Ολλανδίας","symbol":"NLG"},"NOK":{"displayName":"Κορόνα Νορβηγίας","displayName-count-one":"κορόνα Νορβηγίας","displayName-count-other":"κορόνες Νορβηγίας","symbol":"NOK","symbol-alt-narrow":"kr"},"NPR":{"displayName":"Ρουπία Νεπάλ","displayName-count-one":"ρουπία Νεπάλ","displayName-count-other":"ρουπίες Νεπάλ","symbol":"NPR","symbol-alt-narrow":"Rs"},"NZD":{"displayName":"Δολάριο Νέας Ζηλανδίας","displayName-count-one":"δολάριο Νέας Ζηλανδίας","displayName-count-other":"δολάρια Νέας Ζηλανδίας","symbol":"NZ$","symbol-alt-narrow":"$"},"OMR":{"displayName":"Ριάλ Ομάν","displayName-count-one":"ριάλ Ομάν","displayName-count-other":"ριάλ Ομάν","symbol":"OMR"},"PAB":{"displayName":"Μπαλμπόα Παναμά","displayName-count-one":"μπαλμπόα Παναμά","displayName-count-other":"μπαλμπόα Παναμά","symbol":"PAB"},"PEI":{"displayName":"Ίντι Περού","displayName-count-one":"ίντι Περού","displayName-count-other":"ίντι Περού","symbol":"PEI"},"PEN":{"displayName":"Σολ Περού","displayName-count-one":"σολ Περού","displayName-count-other":"σολ Περού","symbol":"PEN"},"PES":{"displayName":"Σολ Περού (1863–1965)","displayName-count-one":"σολ Περού (1863–1965)","displayName-count-other":"σολ Περού (1863–1965)","symbol":"PES"},"PGK":{"displayName":"Κίνα Παπούας Νέας Γουινέας","displayName-count-one":"κίνα Παπούας Νέας Γουινέας","displayName-count-other":"κίνα Παπούας Νέας Γουινέας","symbol":"PGK"},"PHP":{"displayName":"Πέσο Φιλιππίνων","displayName-count-one":"πέσο Φιλιππίνων","displayName-count-other":"πέσο Φιλιππίνων","symbol":"PHP","symbol-alt-narrow":"₱"},"PKR":{"displayName":"Ρουπία Πακιστάν","displayName-count-one":"ρουπία Πακιστάν","displayName-count-other":"ρουπίες Πακιστάν","symbol":"PKR","symbol-alt-narrow":"Rs"},"PLN":{"displayName":"Ζλότι Πολωνίας","displayName-count-one":"ζλότι Πολωνίας","displayName-count-other":"ζλότι Πολωνίας","symbol":"PLN","symbol-alt-narrow":"zł"},"PLZ":{"displayName":"Ζλότυ Πολωνίας (1950–1995)","displayName-count-one":"ζλότυ Πολωνίας (PLZ)","displayName-count-other":"ζλότυ Πολωνίας (PLZ)","symbol":"PLZ"},"PTE":{"displayName":"Εσκούδο Πορτογαλίας","displayName-count-one":"εσκούδο Πορτογαλίας","displayName-count-other":"εσκούδο Πορτογαλίας","symbol":"PTE"},"PYG":{"displayName":"Γκουαρανί Παραγουάης","displayName-count-one":"γκουαρανί Παραγουάης","displayName-count-other":"γκουαρανί Παραγουάης","symbol":"PYG","symbol-alt-narrow":"₲"},"QAR":{"displayName":"Ριάλ Κατάρ","displayName-count-one":"ριάλ Κατάρ","displayName-count-other":"ριάλ Κατάρ","symbol":"QAR"},"RHD":{"displayName":"Δολάριο Ροδεσίας","displayName-count-one":"δολάριο Ροδεσίας","displayName-count-other":"δολάρια Ροδεσίας","symbol":"RHD"},"ROL":{"displayName":"Λέι Ρουμανίας","displayName-count-one":"παλιό λέι Ρουμανίας","displayName-count-other":"παλιά λέι Ρουμανίας","symbol":"ROL"},"RON":{"displayName":"Λέου Ρουμανίας","displayName-count-one":"λέου Ρουμανίας","displayName-count-other":"λέου Ρουμανίας","symbol":"RON","symbol-alt-narrow":"lei"},"RSD":{"displayName":"Δηνάριο Σερβίας","displayName-count-one":"δηνάριο Σερβίας","displayName-count-other":"δηνάρια Σερβίας","symbol":"RSD"},"RUB":{"displayName":"Ρούβλι Ρωσίας","displayName-count-one":"ρούβλι Ρωσίας","displayName-count-other":"ρούβλια Ρωσίας","symbol":"RUB","symbol-alt-narrow":"₽"},"RUR":{"displayName":"Ρούβλι Ρωσίας (1991–1998)","displayName-count-one":"ρούβλι Ρωσίας (RUR)","displayName-count-other":"ρούβλια Ρωσίας (1991–1998)","symbol":"RUR","symbol-alt-narrow":"р."},"RWF":{"displayName":"Φράγκο Ρουάντας","displayName-count-one":"φράγκο Ρουάντας","displayName-count-other":"φράγκα Ρουάντας","symbol":"RWF","symbol-alt-narrow":"RF"},"SAR":{"displayName":"Ριάλ Σαουδικής Αραβίας","displayName-count-one":"ριάλ Σαουδικής Αραβίας","displayName-count-other":"ριάλ Σαουδικής Αραβίας","symbol":"SAR"},"SBD":{"displayName":"Δολάριο Νήσων Σολομώντος","displayName-count-one":"δολάριο Νήσων Σολομώντος","displayName-count-other":"δολάρια Νήσων Σολομώντος","symbol":"SBD","symbol-alt-narrow":"$"},"SCR":{"displayName":"Ρουπία Σεϋχελλών","displayName-count-one":"ρουπία Σεϋχελλών","displayName-count-other":"ρουπίες Σεϋχελλών","symbol":"SCR"},"SDD":{"displayName":"Δηνάριο Σουδάν","displayName-count-one":"δηνάριο Σουδάν","displayName-count-other":"δηνάρια Σουδάν","symbol":"SDD"},"SDG":{"displayName":"Λίρα Σουδάν","displayName-count-one":"λίρα Σουδάν","displayName-count-other":"λίρες Σουδάν","symbol":"SDG"},"SDP":{"displayName":"Παλαιά Λίρα Σουδάν","displayName-count-one":"παλιά λίρα Σουδάν","displayName-count-other":"παλαιές λίρες Σουδάν","symbol":"SDP"},"SEK":{"displayName":"Κορόνα Σουηδίας","displayName-count-one":"κορόνα Σουηδίας","displayName-count-other":"κορόνες Σουηδίας","symbol":"SEK","symbol-alt-narrow":"kr"},"SGD":{"displayName":"Δολάριο Σιγκαπούρης","displayName-count-one":"δολάριο Σιγκαπούρης","displayName-count-other":"δολάρια Σιγκαπούρης","symbol":"SGD","symbol-alt-narrow":"$"},"SHP":{"displayName":"Λίρα Αγίας Ελένης","displayName-count-one":"λίρα Αγίας Ελένης","displayName-count-other":"λίρες Αγίας Ελένης","symbol":"SHP","symbol-alt-narrow":"£"},"SIT":{"displayName":"Τόλαρ Σλοβενίας","displayName-count-one":"τόλαρ Σλοβενίας","displayName-count-other":"τόλαρ Σλοβ","symbol":"SIT"},"SKK":{"displayName":"Κορόνα Σλοβενίας","displayName-count-one":"κορόνα Σλοβενίας","displayName-count-other":"κορόνες Σλοβενίας","symbol":"SKK"},"SLL":{"displayName":"Λεόνε Σιέρα Λεόνε","displayName-count-one":"λεόνε Σιέρα Λεόνε","displayName-count-other":"λεόνε Σιέρα Λεόνε","symbol":"SLL"},"SOS":{"displayName":"Σελίνι Σομαλίας","displayName-count-one":"σελίνι Σομαλίας","displayName-count-other":"σελίνια Σομαλίας","symbol":"SOS"},"SRD":{"displayName":"Δολάριο Σουρινάμ","displayName-count-one":"δολάριο Σουρινάμ","displayName-count-other":"δολάρια Σουρινάμ","symbol":"SRD","symbol-alt-narrow":"$"},"SRG":{"displayName":"Γκίλντα Σουρινάμ","displayName-count-one":"γκίλντα Σουρινάμ","displayName-count-other":"γκίλντα Σουρινάμ","symbol":"SRG"},"SSP":{"displayName":"Λίρα Νότιου Σουδάν","displayName-count-one":"λίρα Νότιου Σουδάν","displayName-count-other":"λίρες Νότιου Σουδάν","symbol":"SSP","symbol-alt-narrow":"£"},"STD":{"displayName":"Ντόμπρα Σάο Τομέ και Πρίνσιπε","displayName-count-one":"ντόμπρα Σάο Τομέ και Πρίνσιπε","displayName-count-other":"ντόμπρα Σάο Τομέ και Πρίνσιπε","symbol":"STD","symbol-alt-narrow":"Db"},"STN":{"displayName":"STN","symbol":"STN"},"SUR":{"displayName":"Σοβιετικό Ρούβλι","displayName-count-one":"σοβιετικό ρούβλι","displayName-count-other":"σοβιετικά ρούβλια","symbol":"SUR"},"SVC":{"displayName":"Κολόν Ελ Σαλβαδόρ","displayName-count-one":"κολόν Ελ Σαλβαδόρ","displayName-count-other":"κολόν Ελ Σαλβαδόρ","symbol":"SVC"},"SYP":{"displayName":"Λίρα Συρίας","displayName-count-one":"λίρα Συρίας","displayName-count-other":"λίρες Συρίας","symbol":"SYP","symbol-alt-narrow":"£"},"SZL":{"displayName":"Λιλανγκένι Σουαζιλάνδης","displayName-count-one":"λιλανγκένι Σουαζιλάνδης","displayName-count-other":"λιλανγκένι Σουαζιλάνδης","symbol":"SZL"},"THB":{"displayName":"Μπατ Ταϊλάνδης","displayName-count-one":"μπατ Ταϊλάνδης","displayName-count-other":"μπατ Ταϊλάνδης","symbol":"฿","symbol-alt-narrow":"฿"},"TJR":{"displayName":"Ρούβλι Τατζικιστάν","displayName-count-one":"ρούβλι Τατζικιστάν","displayName-count-other":"ρούβλια Τατζικιστάν","symbol":"TJR"},"TJS":{"displayName":"Σομόνι Τατζικιστάν","displayName-count-one":"σομόνι Τατζικιστάν","displayName-count-other":"σομόνι Τατζικιστάν","symbol":"TJS"},"TMM":{"displayName":"Μανάτ Τουρκμενιστάν","displayName-count-one":"μανάτ Τουρκμενιστάν","displayName-count-other":"μανάτ Τουρκμενιστάν","symbol":"TMM"},"TMT":{"displayName":"Μάνατ Τουρκμενιστάν","displayName-count-one":"μάνατ Τουρκμενιστάν","displayName-count-other":"μάνατ Τουρκμενιστάν","symbol":"TMT"},"TND":{"displayName":"Δηνάριο Τυνησίας","displayName-count-one":"δηνάριο Τυνησίας","displayName-count-other":"δηνάρια Τυνησίας","symbol":"TND"},"TOP":{"displayName":"Παάγκα Τόνγκα","displayName-count-one":"παάγκα Τόνγκα","displayName-count-other":"παάγκα Τόνγκα","symbol":"TOP","symbol-alt-narrow":"T$"},"TPE":{"displayName":"Εσκούδο Τιμόρ","displayName-count-one":"εσκούδο Τιμόρ","displayName-count-other":"εσκούδο Τιμόρ","symbol":"TPE"},"TRL":{"displayName":"Παλιά Λίρα Τουρκίας","displayName-count-one":"παλιά λίρα Τουρκίας","displayName-count-other":"παλιές λίρες Τουρκίας","symbol":"TRL"},"TRY":{"displayName":"Λίρα Τουρκίας","displayName-count-one":"λίρα Τουρκίας","displayName-count-other":"λίρες Τουρκίας","symbol":"TRY","symbol-alt-narrow":"₺","symbol-alt-variant":"TL"},"TTD":{"displayName":"Δολάριο Τρινιντάντ και Τομπάγκο","displayName-count-one":"δολάριο Τρινιντάντ και Τομπάγκο","displayName-count-other":"δολάρια Τρινιντάντ και Τομπάγκο","symbol":"TTD","symbol-alt-narrow":"$"},"TWD":{"displayName":"Νέο δολάριο Ταϊβάν","displayName-count-one":"νέο δολάριο Ταϊβάν","displayName-count-other":"νέα δολάρια Ταϊβάν","symbol":"NT$","symbol-alt-narrow":"$"},"TZS":{"displayName":"Σελίνι Τανζανίας","displayName-count-one":"σελίνι Τανζανίας","displayName-count-other":"σελίνια Τανζανίας","symbol":"TZS"},"UAH":{"displayName":"Γρίβνα Ουκρανίας","displayName-count-one":"γρίβνα Ουκρανίας","displayName-count-other":"γρίβνα Ουκρανίας","symbol":"UAH","symbol-alt-narrow":"₴"},"UAK":{"displayName":"Καρμποβανέτς Ουκρανίας","displayName-count-one":"καρμποβανέτς Ουκρανίας","displayName-count-other":"καρμποβανέτς Ουκρανίας","symbol":"UAK"},"UGS":{"displayName":"Σελίνι Ουγκάντας (1966–1987)","displayName-count-one":"σελίνι Ουγκάντας (UGS)","displayName-count-other":"σελίνια Ουγκάντας (UGS)","symbol":"UGS"},"UGX":{"displayName":"Σελίνι Ουγκάντας","displayName-count-one":"σελίνι Ουγκάντας","displayName-count-other":"σελίνια Ουγκάντας","symbol":"UGX"},"USD":{"displayName":"Δολάριο ΗΠΑ","displayName-count-one":"δολάριο ΗΠΑ","displayName-count-other":"δολάρια ΗΠΑ","symbol":"$","symbol-alt-narrow":"$"},"USN":{"displayName":"Δολάριο ΗΠΑ (επόμενη ημέρα)","displayName-count-one":"δολάριο Η.Π.Α. (επόμενη ημέρα)","displayName-count-other":"δολάρια Η.Π.Α. (επόμενη ημέρα)","symbol":"USN"},"USS":{"displayName":"Δολάριο ΗΠΑ (ίδια ημέρα)","displayName-count-one":"δολάριο Η.Π.Α. (ίδια ημέρα)","displayName-count-other":"δολάρια Η.Π.Α. (ίδια ημέρα)","symbol":"USS"},"UYI":{"displayName":"UYI","symbol":"UYI"},"UYP":{"displayName":"Πέσο Ουρουγουάης (1975–1993)","displayName-count-one":"πέσο Ουρουγουάης (UYP)","displayName-count-other":"πέσο Ουρουγουάης (UYP)","symbol":"UYP"},"UYU":{"displayName":"Πέσο Ουρουγουάης","displayName-count-one":"πέσο Ουρουγουάης","displayName-count-other":"πέσο Ουρουγουάης","symbol":"UYU","symbol-alt-narrow":"$"},"UZS":{"displayName":"Σομ Ουζμπεκιστάν","displayName-count-one":"σομ Ουζμπεκιστάν","displayName-count-other":"σομ Ουζμπεκιστάν","symbol":"UZS"},"VEB":{"displayName":"Μπολιβάρ Βενεζουέλας (1871–2008)","displayName-count-one":"μπολιβάρ Βενεζουέλας (1871–2008)","displayName-count-other":"μπολιβάρ Βενεζουέλας (1871–2008)","symbol":"VEB"},"VEF":{"displayName":"Μπολιβάρ Βενεζουέλας","displayName-count-one":"μπολιβάρ Βενεζουέλας","displayName-count-other":"μπολιβάρ Βενεζουέλας","symbol":"VEF","symbol-alt-narrow":"Bs"},"VND":{"displayName":"Ντονγκ Βιετνάμ","displayName-count-one":"ντονγκ Βιετνάμ","displayName-count-other":"ντονγκ Βιετνάμ","symbol":"₫","symbol-alt-narrow":"₫"},"VNN":{"displayName":"VNN","symbol":"VNN"},"VUV":{"displayName":"Βατού Βανουάτου","displayName-count-one":"βατού Βανουάτου","displayName-count-other":"βατού Βανουάτου","symbol":"VUV"},"WST":{"displayName":"Τάλα Σαμόα","displayName-count-one":"τάλα Σαμόα","displayName-count-other":"τάλα Σαμόα","symbol":"WST"},"XAF":{"displayName":"Φράγκο CFA Κεντρικής Αφρικής","displayName-count-one":"φράγκο CFA Κεντρικής Αφρικής","displayName-count-other":"φράγκα CFA Κεντρικής Αφρικής","symbol":"FCFA"},"XAG":{"displayName":"XAG","symbol":"XAG"},"XAU":{"displayName":"XAU","symbol":"XAU"},"XBA":{"displayName":"Ευρωπαϊκή Σύνθετη Μονάδα","displayName-count-one":"ευρωπαϊκή σύνθετη μονάδα","displayName-count-other":"ευρωπαϊκές σύνθετες μονάδες","symbol":"XBA"},"XBB":{"displayName":"Ευρωπαϊκή Νομισματική Μονάδα","displayName-count-one":"ευρωπαϊκή νομισματική μονάδα","displayName-count-other":"ευρωπαϊκές νομισματικές μονάδες","symbol":"XBB"},"XBC":{"displayName":"Ευρωπαϊκή μονάδα λογαριασμού (XBC)","displayName-count-one":"ευρωπαϊκή μονάδα λογαριασμού (XBC)","displayName-count-other":"ευρωπαϊκές μονάδες λογαριασμού (XBC)","symbol":"XBC"},"XBD":{"displayName":"Ευρωπαϊκή μονάδα λογαριασμού (XBD)","displayName-count-one":"ευρωπαϊκή μονάδα λογαριασμού (XBD)","displayName-count-other":"ευρωπαϊκές μονάδες λογαριασμού (XBD)","symbol":"XBD"},"XCD":{"displayName":"Δολάριο Ανατολικής Καραϊβικής","displayName-count-one":"δολάριο Ανατολικής Καραϊβικής","displayName-count-other":"δολάρια Ανατολικής Καραϊβικής","symbol":"EC$","symbol-alt-narrow":"$"},"XDR":{"displayName":"Ειδικά Δικαιώματα Ανάληψης","displayName-count-one":"ειδικό δικαίωμα ανάληψης","displayName-count-other":"ειδικά δικαιώματα ανάληψης","symbol":"XDR"},"XEU":{"displayName":"Ευρωπαϊκή Συναλλαγματική Μονάδα","displayName-count-one":"ευρωπαϊκή συναλλαγματική μονάδα","displayName-count-other":"ευρωπαϊκές συναλλαγματικές μονάδες","symbol":"XEU"},"XFO":{"displayName":"Χρυσό Φράγκο Γαλλίας","displayName-count-one":"χρυσό φράγκο Γαλλίας","displayName-count-other":"χρυσά φράγκα Γαλλίας","symbol":"XFO"},"XFU":{"displayName":"UIC-Φράγκο Γαλλίας","displayName-count-one":"UIC-φράγκο Γαλλίας","displayName-count-other":"UIC-φράγκα Γαλλίας","symbol":"XFU"},"XOF":{"displayName":"Φράγκο CFA Δυτικής Αφρικής","displayName-count-one":"φράγκο CFA Δυτικής Αφρικής","displayName-count-other":"φράγκα CFA Δυτικής Αφρικής","symbol":"CFA"},"XPD":{"displayName":"XPD","symbol":"XPD"},"XPF":{"displayName":"Φράγκο CFP","displayName-count-one":"φράγκο CFP","displayName-count-other":"φράγκα CFP","symbol":"CFPF"},"XPT":{"displayName":"XPT","symbol":"XPT"},"XRE":{"displayName":"XRE","symbol":"XRE"},"XSU":{"displayName":"XSU","symbol":"XSU"},"XTS":{"displayName":"XTS","symbol":"XTS"},"XUA":{"displayName":"XUA","symbol":"XUA"},"XXX":{"displayName":"Άγνωστο νόμισμα","displayName-count-one":"(άγνωστο νόμισμα)","displayName-count-other":"(άγνωστο νόμισμα)","symbol":"XXX"},"YDD":{"displayName":"Δηνάριο Υεμένης","displayName-count-one":"δηνάριο Υεμένης","displayName-count-other":"δηνάρια Υεμένης","symbol":"YDD"},"YER":{"displayName":"Ριάλ Υεμένης","displayName-count-one":"ριάλ Υεμένης","displayName-count-other":"ριάλ Υεμένης","symbol":"YER"},"YUD":{"displayName":"Μεταλλικό Δηνάριο Γιουγκοσλαβίας","displayName-count-one":"μεταλλικό δηνάριο Γιουγκοσλαβίας","displayName-count-other":"μεταλλικά δηνάρια Γιουγκοσλαβίας","symbol":"YUD"},"YUM":{"displayName":"Νέο Δηνάριο Γιουγκοσλαβίας","displayName-count-one":"νέο δηνάριο Γιουγκοσλαβίας","displayName-count-other":"νέο δηνάριο Γιουγκοσλαβίας","symbol":"YUM"},"YUN":{"displayName":"Μετατρέψιμο Δηνάριο Γιουγκοσλαβίας","displayName-count-one":"μετατρέψιμο δινάριο Γιουγκοσλαβίας","displayName-count-other":"μετατρέψιμο δηνάριο Γιουγκοσλαβίας","symbol":"YUN"},"YUR":{"displayName":"YUR","symbol":"YUR"},"ZAL":{"displayName":"Ραντ Νότιας Αφρικής (οικονομικό)","displayName-count-one":"ραντ Νότιας Αφρικής (οικονομικό)","displayName-count-other":"ραντ Νότιας Αφρικής (οικονομικό)","symbol":"ZAL"},"ZAR":{"displayName":"Ραντ Νότιας Αφρικής","displayName-count-one":"ραντ Νότιας Αφρικής","displayName-count-other":"ραντ Νότιας Αφρικής","symbol":"ZAR","symbol-alt-narrow":"R"},"ZMK":{"displayName":"Κουάνζα Ζαΐρ (1968–2012)","displayName-count-one":"κουάτσα Ζάμπιας (1968–2012)","displayName-count-other":"κουάτσα Ζάμπιας (1968–2012)","symbol":"ZMK"},"ZMW":{"displayName":"Κουάτσα Ζάμπιας","displayName-count-one":"κουάτσα Ζάμπιας","displayName-count-other":"κουάτσα Ζάμπιας","symbol":"ZMW","symbol-alt-narrow":"ZK"},"ZRN":{"displayName":"Νέο Ζαΐρ Ζαΐρ","displayName-count-one":"νέο ζαΐρ Ζαΐρ","displayName-count-other":"νέα ζαΐρ Ζαΐρ","symbol":"ZRN"},"ZRZ":{"displayName":"Ζαΐρ Ζαΐρ","displayName-count-one":"ζαΐρ Ζαΐρ","displayName-count-other":"ζαΐρ Ζαΐρ","symbol":"ZRZ"},"ZWD":{"displayName":"Δολάριο Ζιμπάμπουε","displayName-count-one":"δολάριο Ζιμπάμπουε","displayName-count-other":"δολάρια Ζιμπάμπουε","symbol":"ZWD"},"ZWL":{"displayName":"Δολάριο Ζιμπάμπουε (2009)","displayName-count-one":"Δολάριο Ζιμπάμπουε (2009)","displayName-count-other":"Δολάριο Ζιμπάμπουε (2009)","symbol":"ZWL"},"ZWR":{"displayName":"ZWR","symbol":"ZWR"}},"defaultNumberingSystem":"latn","otherNumberingSystems":{"native":"latn","traditional":"grek"},"minimumGroupingDigits":"1","symbols-numberSystem-latn":{"decimal":",","group":".","list":";","percentSign":"%","plusSign":"+","minusSign":"-","exponential":"e","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"NaN","timeSeparator":":"},"decimalFormats-numberSystem-latn":{"standard":"#,##0.###","long":{"decimalFormat":{"1000-count-one":"0 χιλιάδα","1000-count-other":"0 χιλιάδες","10000-count-one":"00 χιλιάδες","10000-count-other":"00 χιλιάδες","100000-count-one":"000 χιλιάδες","100000-count-other":"000 χιλιάδες","1000000-count-one":"0 εκατομμύριο","1000000-count-other":"0 εκατομμύρια","10000000-count-one":"00 εκατομμύρια","10000000-count-other":"00 εκατομμύρια","100000000-count-one":"000 εκατομμύρια","100000000-count-other":"000 εκατομμύρια","1000000000-count-one":"0 δισεκατομμύριο","1000000000-count-other":"0 δισεκατομμύρια","10000000000-count-one":"00 δισεκατομμύρια","10000000000-count-other":"00 δισεκατομμύρια","100000000000-count-one":"000 δισεκατομμύρια","100000000000-count-other":"000 δισεκατομμύρια","1000000000000-count-one":"0 τρισεκατομμύριο","1000000000000-count-other":"0 τρισεκατομμύρια","10000000000000-count-one":"00 τρισεκατομμύρια","10000000000000-count-other":"00 τρισεκατομμύρια","100000000000000-count-one":"000 τρισεκατομμύρια","100000000000000-count-other":"000 τρισεκατομμύρια"}},"short":{"decimalFormat":{"1000-count-one":"0 χιλ'.'","1000-count-other":"0 χιλ'.'","10000-count-one":"00 χιλ'.'","10000-count-other":"00 χιλ'.'","100000-count-one":"000 χιλ'.'","100000-count-other":"000 χιλ'.'","1000000-count-one":"0 εκ'.'","1000000-count-other":"0 εκ'.'","10000000-count-one":"00 εκ'.'","10000000-count-other":"00 εκ'.'","100000000-count-one":"000 εκ'.'","100000000-count-other":"000 εκ'.'","1000000000-count-one":"0 δισ'.'","1000000000-count-other":"0 δισ'.'","10000000000-count-one":"00 δισ'.'","10000000000-count-other":"00 δισ'.'","100000000000-count-one":"000 δισ'.'","100000000000-count-other":"000 δισ'.'","1000000000000-count-one":"0 τρισ'.'","1000000000000-count-other":"0 τρισ'.'","10000000000000-count-one":"00 τρισ'.'","10000000000000-count-other":"00 τρισ'.'","100000000000000-count-one":"000 τρισ'.'","100000000000000-count-other":"000 τρισ'.'"}}},"scientificFormats-numberSystem-latn":{"standard":"#E0"},"percentFormats-numberSystem-latn":{"standard":"#,##0%"},"currencyFormats-numberSystem-latn":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"#,##0.00 ¤","accounting":"#,##0.00 ¤","short":{"standard":{"1000-count-one":"0 χιλ'.' ¤","1000-count-other":"0 χιλ'.' ¤","10000-count-one":"00 χιλ'.' ¤","10000-count-other":"00 χιλ'.' ¤","100000-count-one":"000 χιλ'.' ¤","100000-count-other":"000 χιλ'.' ¤","1000000-count-one":"0 εκ'.' ¤","1000000-count-other":"0 εκ'.' ¤","10000000-count-one":"00 εκ'.' ¤","10000000-count-other":"00 εκ'.' ¤","100000000-count-one":"000 εκ'.' ¤","100000000-count-other":"000 εκ'.' ¤","1000000000-count-one":"0 δισ'.' ¤","1000000000-count-other":"0 δισ'.' ¤","10000000000-count-one":"00 δισ'.' ¤","10000000000-count-other":"00 δισ'.' ¤","100000000000-count-one":"000 δισ'.' ¤","100000000000-count-other":"000 δισ'.' ¤","1000000000000-count-one":"0 τρισ'.' ¤","1000000000000-count-other":"0 τρισ'.' ¤","10000000000000-count-one":"00 τρισ'.' ¤","10000000000000-count-other":"00 τρισ'.' ¤","100000000000000-count-one":"000 τρισ'.' ¤","100000000000000-count-other":"000 τρισ'.' ¤"}},"unitPattern-count-one":"{0} {1}","unitPattern-count-other":"{0} {1}"},"miscPatterns-numberSystem-latn":{"atLeast":"{0}+","range":"{0}–{1}"},"minimalPairs":{"pluralMinimalPairs-count-one":"{0} ημέρα","pluralMinimalPairs-count-other":"{0} ημέρες","other":"Στρίψτε στην {0}η γωνία δεξιά."}}},"fi":{"identity":{"version":{"_number":"$Revision: 13767 $","_cldrVersion":"32"},"language":"fi"},"dates":{"calendars":{"gregorian":{"months":{"format":{"abbreviated":{"1":"tammik.","2":"helmik.","3":"maalisk.","4":"huhtik.","5":"toukok.","6":"kesäk.","7":"heinäk.","8":"elok.","9":"syysk.","10":"lokak.","11":"marrask.","12":"jouluk."},"narrow":{"1":"T","2":"H","3":"M","4":"H","5":"T","6":"K","7":"H","8":"E","9":"S","10":"L","11":"M","12":"J"},"wide":{"1":"tammikuuta","2":"helmikuuta","3":"maaliskuuta","4":"huhtikuuta","5":"toukokuuta","6":"kesäkuuta","7":"heinäkuuta","8":"elokuuta","9":"syyskuuta","10":"lokakuuta","11":"marraskuuta","12":"joulukuuta"}},"stand-alone":{"abbreviated":{"1":"tammi","2":"helmi","3":"maalis","4":"huhti","5":"touko","6":"kesä","7":"heinä","8":"elo","9":"syys","10":"loka","11":"marras","12":"joulu"},"narrow":{"1":"T","2":"H","3":"M","4":"H","5":"T","6":"K","7":"H","8":"E","9":"S","10":"L","11":"M","12":"J"},"wide":{"1":"tammikuu","2":"helmikuu","3":"maaliskuu","4":"huhtikuu","5":"toukokuu","6":"kesäkuu","7":"heinäkuu","8":"elokuu","9":"syyskuu","10":"lokakuu","11":"marraskuu","12":"joulukuu"}}},"days":{"format":{"abbreviated":{"sun":"su","mon":"ma","tue":"ti","wed":"ke","thu":"to","fri":"pe","sat":"la"},"narrow":{"sun":"S","mon":"M","tue":"T","wed":"K","thu":"T","fri":"P","sat":"L"},"short":{"sun":"su","mon":"ma","tue":"ti","wed":"ke","thu":"to","fri":"pe","sat":"la"},"wide":{"sun":"sunnuntaina","mon":"maanantaina","tue":"tiistaina","wed":"keskiviikkona","thu":"torstaina","fri":"perjantaina","sat":"lauantaina"}},"stand-alone":{"abbreviated":{"sun":"su","mon":"ma","tue":"ti","wed":"ke","thu":"to","fri":"pe","sat":"la"},"narrow":{"sun":"S","mon":"M","tue":"T","wed":"K","thu":"T","fri":"P","sat":"L"},"short":{"sun":"su","mon":"ma","tue":"ti","wed":"ke","thu":"to","fri":"pe","sat":"la"},"wide":{"sun":"sunnuntai","mon":"maanantai","tue":"tiistai","wed":"keskiviikko","thu":"torstai","fri":"perjantai","sat":"lauantai"}}},"quarters":{"format":{"abbreviated":{"1":"1. nelj.","2":"2. nelj.","3":"3. nelj.","4":"4. nelj."},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"1. neljännes","2":"2. neljännes","3":"3. neljännes","4":"4. neljännes"}},"stand-alone":{"abbreviated":{"1":"1. nelj.","2":"2. nelj.","3":"3. nelj.","4":"4. nelj."},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"1. neljännes","2":"2. neljännes","3":"3. neljännes","4":"4. neljännes"}}},"dayPeriods":{"format":{"abbreviated":{"midnight":"keskiyöllä","am":"ap.","noon":"keskip.","pm":"ip.","morning1":"aamulla","morning2":"aamup.","afternoon1":"iltap.","evening1":"illalla","night1":"yöllä"},"narrow":{"midnight":"ky.","am":"ap.","noon":"kp.","pm":"ip.","morning1":"aamulla","morning2":"ap.","afternoon1":"ip.","evening1":"illalla","night1":"yöllä"},"wide":{"midnight":"keskiyöllä","am":"ap.","noon":"keskipäivällä","pm":"ip.","morning1":"aamulla","morning2":"aamupäivällä","afternoon1":"iltapäivällä","evening1":"illalla","night1":"yöllä"}},"stand-alone":{"abbreviated":{"midnight":"keskiyö","am":"ap.","noon":"keskip.","pm":"ip.","morning1":"aamu","morning2":"aamup.","afternoon1":"iltap.","evening1":"ilta","night1":"yö"},"narrow":{"midnight":"ky.","am":"ap.","noon":"kp.","pm":"ip.","morning1":"aamu","morning2":"ap.","afternoon1":"ip.","evening1":"ilta","night1":"yö"},"wide":{"midnight":"keskiyö","am":"ap.","noon":"keskipäivä","pm":"ip.","morning1":"aamu","morning2":"aamupäivä","afternoon1":"iltapäivä","evening1":"ilta","night1":"yö"}}},"eras":{"eraNames":{"0":"ennen Kristuksen syntymää","1":"jälkeen Kristuksen syntymän","0-alt-variant":"ennen ajanlaskun alkua","1-alt-variant":"jälkeen ajanlaskun alun"},"eraAbbr":{"0":"eKr.","1":"jKr.","0-alt-variant":"eaa.","1-alt-variant":"jaa."},"eraNarrow":{"0":"eKr","1":"jKr","0-alt-variant":"eaa","1-alt-variant":"jaa"}},"dateFormats":{"full":"cccc d. MMMM y","long":"d. MMMM y","medium":"d.M.y","short":"d.M.y"},"timeFormats":{"full":"H.mm.ss zzzz","long":"H.mm.ss z","medium":"H.mm.ss","short":"H.mm"},"dateTimeFormats":{"full":"{1} 'klo' {0}","long":"{1} 'klo' {0}","medium":"{1} 'klo' {0}","short":"{1} {0}","availableFormats":{"Bh":"h B","Bhm":"h.mm B","Bhms":"h.mm.ss B","d":"d","E":"ccc","EBhm":"E h.mm B","EBhms":"E h.mm.ss B","Ed":"E d.","Ehm":"E h.mm a","EHm":"E H.mm","Ehms":"E h.mm.ss a","EHms":"E H.mm.ss","Gy":"y G","GyMMM":"LLL y G","GyMMMd":"d. MMM y G","GyMMMEd":"E d. MMM y G","h":"h a","H":"H","hm":"h.mm a","Hm":"H.mm","hms":"h.mm.ss a","Hms":"H.mm.ss","hmsv":"h.mm.ss a v","Hmsv":"H.mm.ss v","hmv":"h.mm a v","Hmv":"H.mm v","M":"L","Md":"d.M.","MEd":"E d.M.","MMM":"LLL","MMMd":"d. MMM","MMMEd":"ccc d. MMM","MMMMd":"d. MMMM","MMMMW-count-one":"LLLL'n' W. 'viikko'","MMMMW-count-other":"LLLL'n' W. 'viikko'","ms":"m.ss","y":"y","yM":"L.y","yMd":"d.M.y","yMEd":"E d.M.y","yMM":"M.y","yMMM":"LLL y","yMMMd":"d. MMM y","yMMMEd":"E d. MMM y","yMMMM":"LLLL y","yMMMMccccd":"cccc d. MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","yw-count-one":"'vuoden' Y 'viikko' w","yw-count-other":"'vuoden' Y 'viikko' w"},"appendItems":{"Day":"{0} ({2}: {1})","Day-Of-Week":"{0} {1}","Era":"{1} {0}","Hour":"{0} ({2}: {1})","Minute":"{0} ({2}: {1})","Month":"{0} ({2}: {1})","Quarter":"{0} ({2}: {1})","Second":"{0} ({2}: {1})","Timezone":"{0} {1}","Week":"{0} ({2}: {1})","Year":"{1} {0}"},"intervalFormats":{"intervalFormatFallback":"{0}–{1}","d":{"d":"d.–d."},"h":{"a":"h a – h a","h":"h–h a"},"H":{"H":"H–H"},"hm":{"a":"h.mm a – h.mm a","h":"h.mm–h.mm a","m":"h.mm–h.mm a"},"Hm":{"H":"H.mm–H.mm","m":"H.mm–H.mm"},"hmv":{"a":"h.mm a – h.mm a v","h":"h.mm–h.mm a v","m":"h.mm–h.mm a v"},"Hmv":{"H":"H.mm–H.mm v","m":"H.mm–H.mm v"},"hv":{"a":"h a – h a v","h":"h–h a v"},"Hv":{"H":"H–H v"},"M":{"M":"L.–L."},"Md":{"d":"d.–d.M.","M":"d.M.–d.M."},"MEd":{"d":"E d. – E d.M.","M":"E d.M. – E d.M."},"MMM":{"M":"LLL–LLLL"},"MMMd":{"d":"d.–d. MMMM","M":"d. MMMM – d. MMMM"},"MMMEd":{"d":"E d. – E d. MMMM","M":"E d. MMMM – E d. MMMM"},"MMMM":{"M":"LLL–LLLL"},"y":{"y":"y–y"},"yM":{"M":"LLL–LLLL y","y":"LLLL y – LLLL y"},"yMd":{"d":"d.–d.M.y","M":"d.M.–d.M.y","y":"d.M.y–d.M.y"},"yMEd":{"d":"E d.M.y – E d.M.y","M":"E d.M.y – E d.M.y","y":"E d.M.y – E d.M.y"},"yMMM":{"M":"LLL–LLLL y","y":"LLLL y – LLLL y"},"yMMMd":{"d":"d.–d. MMMM y","M":"d. MMMM – d. MMMM y","y":"d. MMMM y – d. MMMM y"},"yMMMEd":{"d":"E d. – E d. MMMM y","M":"E d. MMMM – E d. MMMM y","y":"E d. MMMM y – E d. MMMM y"},"yMMMM":{"M":"LLL–LLLL y","y":"LLLL y – LLLL y"}}}}},"fields":{"era":{"displayName":"aikakausi"},"era-short":{"displayName":"aikakausi"},"era-narrow":{"displayName":"aikakausi"},"year":{"displayName":"vuosi","relative-type--1":"viime vuonna","relative-type-0":"tänä vuonna","relative-type-1":"ensi vuonna","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} vuoden päästä","relativeTimePattern-count-other":"{0} vuoden päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} vuosi sitten","relativeTimePattern-count-other":"{0} vuotta sitten"}},"year-short":{"displayName":"v","relative-type--1":"viime v","relative-type-0":"tänä v","relative-type-1":"ensi v","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} v päästä","relativeTimePattern-count-other":"{0} v päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} v sitten","relativeTimePattern-count-other":"{0} v sitten"}},"year-narrow":{"displayName":"v","relative-type--1":"viime v","relative-type-0":"tänä v","relative-type-1":"ensi v","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} v päästä","relativeTimePattern-count-other":"{0} v päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} v sitten","relativeTimePattern-count-other":"{0} v sitten"}},"quarter":{"displayName":"neljännesvuosi","relative-type--1":"viime neljännesvuonna","relative-type-0":"tänä neljännesvuonna","relative-type-1":"ensi neljännesvuonna","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} neljännesvuoden päästä","relativeTimePattern-count-other":"{0} neljännesvuoden päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} neljännesvuosi sitten","relativeTimePattern-count-other":"{0} neljännesvuotta sitten"}},"quarter-short":{"displayName":"neljännes","relative-type--1":"viime neljänneksenä","relative-type-0":"tänä neljänneksenä","relative-type-1":"ensi neljänneksenä","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} neljänneksen päästä","relativeTimePattern-count-other":"{0} neljänneksen päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} neljännes sitten","relativeTimePattern-count-other":"{0} neljännestä sitten"}},"quarter-narrow":{"displayName":"nelj.","relative-type--1":"viime nelj.","relative-type-0":"tänä nelj.","relative-type-1":"ensi nelj.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} nelj. päästä","relativeTimePattern-count-other":"{0} nelj. päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} nelj. sitten","relativeTimePattern-count-other":"{0} nelj. sitten"}},"month":{"displayName":"kuukausi","relative-type--1":"viime kuussa","relative-type-0":"tässä kuussa","relative-type-1":"ensi kuussa","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} kuukauden päästä","relativeTimePattern-count-other":"{0} kuukauden päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} kuukausi sitten","relativeTimePattern-count-other":"{0} kuukautta sitten"}},"month-short":{"displayName":"kk","relative-type--1":"viime kk","relative-type-0":"tässä kk","relative-type-1":"ensi kk","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} kk päästä","relativeTimePattern-count-other":"{0} kk päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} kk sitten","relativeTimePattern-count-other":"{0} kk sitten"}},"month-narrow":{"displayName":"kk","relative-type--1":"viime kk","relative-type-0":"tässä kk","relative-type-1":"ensi kk","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} kk päästä","relativeTimePattern-count-other":"{0} kk päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} kk sitten","relativeTimePattern-count-other":"{0} kk sitten"}},"week":{"displayName":"viikko","relative-type--1":"viime viikolla","relative-type-0":"tällä viikolla","relative-type-1":"ensi viikolla","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} viikon päästä","relativeTimePattern-count-other":"{0} viikon päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} viikko sitten","relativeTimePattern-count-other":"{0} viikkoa sitten"},"relativePeriod":"päivän {0} viikolla"},"week-short":{"displayName":"vk","relative-type--1":"viime vk","relative-type-0":"tällä vk","relative-type-1":"ensi vk","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} vk päästä","relativeTimePattern-count-other":"{0} vk päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} vk sitten","relativeTimePattern-count-other":"{0} vk sitten"},"relativePeriod":"päivän {0} viikolla"},"week-narrow":{"displayName":"vk","relative-type--1":"viime vk","relative-type-0":"tällä vk","relative-type-1":"ensi vk","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} vk päästä","relativeTimePattern-count-other":"{0} vk päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} vk sitten","relativeTimePattern-count-other":"{0} vk sitten"},"relativePeriod":"päivän {0} viikolla"},"weekOfMonth":{"displayName":"kuukauden viikko"},"weekOfMonth-short":{"displayName":"kuukauden vk"},"weekOfMonth-narrow":{"displayName":"kuukauden vk"},"day":{"displayName":"päivä","relative-type--2":"toissa päivänä","relative-type--1":"eilen","relative-type-0":"tänään","relative-type-1":"huomenna","relative-type-2":"ylihuomenna","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} päivän päästä","relativeTimePattern-count-other":"{0} päivän päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} päivä sitten","relativeTimePattern-count-other":"{0} päivää sitten"}},"day-short":{"displayName":"pv","relative-type--2":"toissap.","relative-type--1":"eilen","relative-type-0":"tänään","relative-type-1":"huom.","relative-type-2":"ylihuom.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} pv päästä","relativeTimePattern-count-other":"{0} pv päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} pv sitten","relativeTimePattern-count-other":"{0} pv sitten"}},"day-narrow":{"displayName":"pv","relative-type--2":"toissap.","relative-type--1":"eilen","relative-type-0":"tänään","relative-type-1":"huom.","relative-type-2":"ylihuom.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} pv päästä","relativeTimePattern-count-other":"{0} pv päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} pv sitten","relativeTimePattern-count-other":"{0} pv sitten"}},"dayOfYear":{"displayName":"vuodenpäivä"},"dayOfYear-short":{"displayName":"vuodenpv"},"dayOfYear-narrow":{"displayName":"vuodenpv"},"weekday":{"displayName":"viikonpäivä"},"weekday-short":{"displayName":"viikonpäivä"},"weekday-narrow":{"displayName":"viikonpäivä"},"weekdayOfMonth":{"displayName":"kuukauden viikonpäivä"},"weekdayOfMonth-short":{"displayName":"kuukauden vk päivä"},"weekdayOfMonth-narrow":{"displayName":"kuukauden vk päivä"},"sun":{"relative-type--1":"viime sunnuntaina","relative-type-0":"tänä sunnuntaina","relative-type-1":"ensi sunnuntaina","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} sunnuntain päästä","relativeTimePattern-count-other":"{0} sunnuntain päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} sunnuntai sitten","relativeTimePattern-count-other":"{0} sunnuntaita sitten"}},"sun-short":{"relative-type--1":"viime su","relative-type-0":"tänä su","relative-type-1":"ensi su","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} su päästä","relativeTimePattern-count-other":"{0} su päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} su sitten","relativeTimePattern-count-other":"{0} su sitten"}},"sun-narrow":{"relative-type--1":"viime su","relative-type-0":"tänä su","relative-type-1":"ensi su","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} su päästä","relativeTimePattern-count-other":"{0} su päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} su sitten","relativeTimePattern-count-other":"{0} su sitten"}},"mon":{"relative-type--1":"viime maanantaina","relative-type-0":"tänä maanantaina","relative-type-1":"ensi maanantaina","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} maanantain päästä","relativeTimePattern-count-other":"{0} maanantain päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} maanantai sitten","relativeTimePattern-count-other":"{0} maanantaita sitten"}},"mon-short":{"relative-type--1":"viime ma","relative-type-0":"tänä ma","relative-type-1":"ensi ma","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} ma päästä","relativeTimePattern-count-other":"{0} ma päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ma sitten","relativeTimePattern-count-other":"{0} ma sitten"}},"mon-narrow":{"relative-type--1":"viime ma","relative-type-0":"tänä ma","relative-type-1":"ensi ma","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} ma päästä","relativeTimePattern-count-other":"{0} ma päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ma sitten","relativeTimePattern-count-other":"{0} ma sitten"}},"tue":{"relative-type--1":"viime tiistaina","relative-type-0":"tänä tiistaina","relative-type-1":"ensi tiistaina","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} tiistain päästä","relativeTimePattern-count-other":"{0} tiistain päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} tiistai sitten","relativeTimePattern-count-other":"{0} tiistaita sitten"}},"tue-short":{"relative-type--1":"viime ti","relative-type-0":"tänä ti","relative-type-1":"ensi ti","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} ti päästä","relativeTimePattern-count-other":"{0} ti päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ti sitten","relativeTimePattern-count-other":"{0} ti sitten"}},"tue-narrow":{"relative-type--1":"viime ti","relative-type-0":"tänä ti","relative-type-1":"ensi ti","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} ti päästä","relativeTimePattern-count-other":"{0} ti päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ti sitten","relativeTimePattern-count-other":"{0} ti sitten"}},"wed":{"relative-type--1":"viime keskiviikkona","relative-type-0":"tänä keskiviikkona","relative-type-1":"ensi keskiviikkona","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} keskiviikon päästä","relativeTimePattern-count-other":"{0} keskiviikon päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} keskiviikko sitten","relativeTimePattern-count-other":"{0} keskiviikkoa sitten"}},"wed-short":{"relative-type--1":"viime ke","relative-type-0":"tänä ke","relative-type-1":"ensi ke","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} ke päästä","relativeTimePattern-count-other":"{0} ke päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ke sitten","relativeTimePattern-count-other":"{0} ke sitten"}},"wed-narrow":{"relative-type--1":"viime ke","relative-type-0":"tänä ke","relative-type-1":"ensi ke","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} ke päästä","relativeTimePattern-count-other":"{0} ke päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ke sitten","relativeTimePattern-count-other":"{0} ke sitten"}},"thu":{"relative-type--1":"viime torstaina","relative-type-0":"tänä torstaina","relative-type-1":"ensi torstaina","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} torstain päästä","relativeTimePattern-count-other":"{0} torstain päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} torstai sitten","relativeTimePattern-count-other":"{0} torstaita sitten"}},"thu-short":{"relative-type--1":"viime to","relative-type-0":"tänä to","relative-type-1":"ensi to","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} to päästä","relativeTimePattern-count-other":"{0} to päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} to sitten","relativeTimePattern-count-other":"{0} to sitten"}},"thu-narrow":{"relative-type--1":"viime to","relative-type-0":"tänä to","relative-type-1":"ensi to","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} to päästä","relativeTimePattern-count-other":"{0} to päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} to sitten","relativeTimePattern-count-other":"{0} to sitten"}},"fri":{"relative-type--1":"viime perjantaina","relative-type-0":"tänä perjantaina","relative-type-1":"ensi perjantaina","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} perjantain päästä","relativeTimePattern-count-other":"{0} perjantain päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} perjantai sitten","relativeTimePattern-count-other":"{0} perjantaita sitten"}},"fri-short":{"relative-type--1":"viime pe","relative-type-0":"tänä pe","relative-type-1":"ensi pe","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} pe päästä","relativeTimePattern-count-other":"{0} pe päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} pe sitten","relativeTimePattern-count-other":"{0} pe sitten"}},"fri-narrow":{"relative-type--1":"viime pe","relative-type-0":"tänä pe","relative-type-1":"ensi pe","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} pe päästä","relativeTimePattern-count-other":"{0} pe päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} pe sitten","relativeTimePattern-count-other":"{0} pe sitten"}},"sat":{"relative-type--1":"viime lauantaina","relative-type-0":"tänä lauantaina","relative-type-1":"ensi lauantaina","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} lauantain päästä","relativeTimePattern-count-other":"{0} lauantain päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} lauantai sitten","relativeTimePattern-count-other":"{0} lauantaita sitten"}},"sat-short":{"relative-type--1":"viime la","relative-type-0":"tänä la","relative-type-1":"ensi la","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} la päästä","relativeTimePattern-count-other":"{0} la päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} la sitten","relativeTimePattern-count-other":"{0} la sitten"}},"sat-narrow":{"relative-type--1":"viime la","relative-type-0":"tänä la","relative-type-1":"ensi la","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} la päästä","relativeTimePattern-count-other":"{0} la päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} la sitten","relativeTimePattern-count-other":"{0} la sitten"}},"dayperiod-short":{"displayName":"vuorokaudenaika"},"dayperiod":{"displayName":"vuorokaudenaika"},"dayperiod-narrow":{"displayName":"vuorokaudenaika"},"hour":{"displayName":"tunti","relative-type-0":"tämän tunnin aikana","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} tunnin päästä","relativeTimePattern-count-other":"{0} tunnin päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} tunti sitten","relativeTimePattern-count-other":"{0} tuntia sitten"}},"hour-short":{"displayName":"t","relative-type-0":"tunnin sisällä","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} t päästä","relativeTimePattern-count-other":"{0} t päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} t sitten","relativeTimePattern-count-other":"{0} t sitten"}},"hour-narrow":{"displayName":"t","relative-type-0":"tunnin sisällä","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} t päästä","relativeTimePattern-count-other":"{0} t päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} t sitten","relativeTimePattern-count-other":"{0} t sitten"}},"minute":{"displayName":"minuutti","relative-type-0":"tämän minuutin aikana","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} minuutin päästä","relativeTimePattern-count-other":"{0} minuutin päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} minuutti sitten","relativeTimePattern-count-other":"{0} minuuttia sitten"}},"minute-short":{"displayName":"min","relative-type-0":"minuutin sisällä","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} min päästä","relativeTimePattern-count-other":"{0} min päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} min sitten","relativeTimePattern-count-other":"{0} min sitten"}},"minute-narrow":{"displayName":"min","relative-type-0":"minuutin sisällä","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} min päästä","relativeTimePattern-count-other":"{0} min päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} min sitten","relativeTimePattern-count-other":"{0} min sitten"}},"second":{"displayName":"sekunti","relative-type-0":"nyt","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} sekunnin päästä","relativeTimePattern-count-other":"{0} sekunnin päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} sekunti sitten","relativeTimePattern-count-other":"{0} sekuntia sitten"}},"second-short":{"displayName":"s","relative-type-0":"nyt","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} s päästä","relativeTimePattern-count-other":"{0} s päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} s sitten","relativeTimePattern-count-other":"{0} s sitten"}},"second-narrow":{"displayName":"s","relative-type-0":"nyt","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} s päästä","relativeTimePattern-count-other":"{0} s päästä"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} s sitten","relativeTimePattern-count-other":"{0} s sitten"}},"zone":{"displayName":"aikavyöhyke"},"zone-short":{"displayName":"aikavyöhyke"},"zone-narrow":{"displayName":"aikavyöhyke"}}},"numbers":{"currencies":{"ADP":{"displayName":"Andorran peseta","displayName-count-one":"Andorran peseta","displayName-count-other":"Andorran pesetaa","symbol":"ADP"},"AED":{"displayName":"Arabiemiirikuntien dirhami","displayName-count-one":"Arabiemiirikuntien dirhami","displayName-count-other":"Arabiemiirikuntien dirhamia","symbol":"AED"},"AFA":{"displayName":"Afganistanin afgaani (1927–2002)","displayName-count-one":"Afganistanin afgaani (1927–2002)","displayName-count-other":"Afganistanin afgaania (1927–2002)","symbol":"AFA"},"AFN":{"displayName":"Afganistanin afgaani","displayName-count-one":"Afganistanin afgaani","displayName-count-other":"Afganistanin afgaania","symbol":"AFN"},"ALK":{"displayName":"Albanian lek (1946–1965)","displayName-count-one":"Albanian lek (1946–1965)","displayName-count-other":"Albanian lekiä (1946–1965)","symbol":"ALK"},"ALL":{"displayName":"Albanian lek","displayName-count-one":"Albanian lek","displayName-count-other":"Albanian lekiä","symbol":"ALL"},"AMD":{"displayName":"Armenian dram","displayName-count-one":"Armenian dram","displayName-count-other":"Armenian dramia","symbol":"AMD"},"ANG":{"displayName":"Alankomaiden Antillien guldeni","displayName-count-one":"Alankomaiden Antillien guldeni","displayName-count-other":"Alankomaiden Antillien guldenia","symbol":"ANG"},"AOA":{"displayName":"Angolan kwanza","displayName-count-one":"Angolan kwanza","displayName-count-other":"Angolan kwanzaa","symbol":"AOA","symbol-alt-narrow":"AOA"},"AOK":{"displayName":"Angolan kwanza (1977–1991)","displayName-count-one":"Angolan kwanza (1977–1990)","displayName-count-other":"Angolan kwanzaa (1977–1990)","symbol":"AOK"},"AON":{"displayName":"Angolan uusi kwanza (1990–2000)","displayName-count-one":"Angolan uusi kwanza (1990–2000)","displayName-count-other":"Angolan uutta kwanzaa (1990–2000)","symbol":"AON"},"AOR":{"displayName":"Angolan kwanza reajustado (1995–1999)","displayName-count-one":"Angolan kwanza reajustado (1995–1999)","displayName-count-other":"Angolan kwanza reajustadoa (1995–1999)","symbol":"AOR"},"ARA":{"displayName":"Argentiinan austral","displayName-count-one":"Argentiinan austral","displayName-count-other":"Argentiinan australia","symbol":"ARA"},"ARL":{"displayName":"Argentiinan ley-peso (1970–1983)","displayName-count-one":"Argentiinan ley-peso (1970–1983)","displayName-count-other":"Argentiinan ley-pesoa (1970–1983)","symbol":"ARL"},"ARM":{"displayName":"Argentiinan peso (1881–1970)","displayName-count-one":"Argentiinan peso (1881–1970)","displayName-count-other":"Argentiinan pesoa (1881–1970)","symbol":"ARM"},"ARP":{"displayName":"Argentiinan peso (1983–1985)","displayName-count-one":"Argentiinan peso (1983–1985)","displayName-count-other":"Argentiinan pesoa (1983–1985)","symbol":"ARP"},"ARS":{"displayName":"Argentiinan peso","displayName-count-one":"Argentiinan peso","displayName-count-other":"Argentiinan pesoa","symbol":"ARS","symbol-alt-narrow":"ARS"},"ATS":{"displayName":"Itävallan šillinki","displayName-count-one":"Itävallan šillinki","displayName-count-other":"Itävallan šillinkiä","symbol":"ATS"},"AUD":{"displayName":"Australian dollari","displayName-count-one":"Australian dollari","displayName-count-other":"Australian dollaria","symbol":"AUD","symbol-alt-narrow":"AUD"},"AWG":{"displayName":"Aruban floriini","displayName-count-one":"Aruban floriini","displayName-count-other":"Aruban floriinia","symbol":"AWG"},"AZM":{"displayName":"Azerbaidžanin manat (1993–2006)","displayName-count-one":"Azerbaidžanin manat (1993–2006)","displayName-count-other":"Azerbaidžanin manatia (1993–2006)","symbol":"AZM"},"AZN":{"displayName":"Azerbaidžanin manat","displayName-count-one":"Azerbaidžanin manat","displayName-count-other":"Azerbaidžanin manatia","symbol":"AZN"},"BAD":{"displayName":"Bosnia-Hertsegovinan dinaari (1992–1994)","displayName-count-one":"Bosnia-Hertsegovinan dinaari (1992–1994)","displayName-count-other":"Bosnia-Hertsegovinan dinaaria (1992–1994)","symbol":"BAD"},"BAM":{"displayName":"Bosnia-Hertsegovinan vaihdettava markka","displayName-count-one":"Bosnia-Hertsegovinan vaihdettava markka","displayName-count-other":"Bosnia-Hertsegovinan vaihdettavaa markkaa","symbol":"BAM","symbol-alt-narrow":"BAM"},"BAN":{"displayName":"Bosnia-Hertsegovinan uusi dinaari (1994–1997)","displayName-count-one":"Bosnia-Hertsegovinan uusi dinaari (1994–1997)","displayName-count-other":"Bosnia-Hertsegovinan uutta dinaaria (1994–1997)","symbol":"BAN"},"BBD":{"displayName":"Barbadosin dollari","displayName-count-one":"Barbadosin dollari","displayName-count-other":"Barbadosin dollaria","symbol":"BBD","symbol-alt-narrow":"BBD"},"BDT":{"displayName":"Bangladeshin taka","displayName-count-one":"Bangladeshin taka","displayName-count-other":"Bangladeshin takaa","symbol":"BDT","symbol-alt-narrow":"BDT"},"BEC":{"displayName":"Belgian vaihdettava frangi","displayName-count-one":"Belgian vaihdettava frangi","displayName-count-other":"Belgian vaihdettavaa frangia","symbol":"BEC"},"BEF":{"displayName":"Belgian frangi","displayName-count-one":"Belgian frangi","displayName-count-other":"Belgian frangia","symbol":"BEF"},"BEL":{"displayName":"Belgian rahoitusfrangi","displayName-count-one":"Belgian rahoitusfrangi","displayName-count-other":"Belgian rahoitusfrangia","symbol":"BEL"},"BGL":{"displayName":"Bulgarian kova lev","displayName-count-one":"Bulgarian kova lev","displayName-count-other":"Bulgarian kovaa leviä","symbol":"BGL"},"BGM":{"displayName":"Bulgarian sosialistinen lev","displayName-count-one":"Bulgarian sosialistinen lev","displayName-count-other":"Bulgarian sosialistista leviä","symbol":"BGM"},"BGN":{"displayName":"Bulgarian lev","displayName-count-one":"Bulgarian lev","displayName-count-other":"Bulgarian leviä","symbol":"BGN"},"BGO":{"displayName":"Bulgarian lev (1879–1952)","displayName-count-one":"Bulgarian lev (1879–1952)","displayName-count-other":"Bulgarian leviä (1879–1952)","symbol":"BGO"},"BHD":{"displayName":"Bahrainin dinaari","displayName-count-one":"Bahrainin dinaari","displayName-count-other":"Bahrainin dinaaria","symbol":"BHD"},"BIF":{"displayName":"Burundin frangi","displayName-count-one":"Burundin frangi","displayName-count-other":"Burundin frangia","symbol":"BIF"},"BMD":{"displayName":"Bermudan dollari","displayName-count-one":"Bermudan dollari","displayName-count-other":"Bermudan dollaria","symbol":"BMD","symbol-alt-narrow":"BMD"},"BND":{"displayName":"Brunein dollari","displayName-count-one":"Brunein dollari","displayName-count-other":"Brunein dollaria","symbol":"BND","symbol-alt-narrow":"BND"},"BOB":{"displayName":"Bolivian boliviano","displayName-count-one":"Bolivian boliviano","displayName-count-other":"Bolivian bolivianoa","symbol":"BOB","symbol-alt-narrow":"BOB"},"BOL":{"displayName":"Bolivian boliviano (1863–1963)","displayName-count-one":"Bolivian boliviano (1863–1963)","displayName-count-other":"Bolivian bolivianoa (1863–1963)","symbol":"BOL"},"BOP":{"displayName":"Bolivian peso","displayName-count-one":"Bolivian peso","displayName-count-other":"Bolivian pesoa","symbol":"BOP"},"BOV":{"displayName":"Bolivian mvdol","displayName-count-one":"Bolivian mvdol","displayName-count-other":"Bolivian mvdol’ia","symbol":"BOV"},"BRB":{"displayName":"Brasilian uusi cruzeiro (1967–1986)","displayName-count-one":"Brasilian uusi cruzeiro (1967–1986)","displayName-count-other":"Brasilian uutta cruzeiroa (1967–1986)","symbol":"BRB"},"BRC":{"displayName":"Brasilian cruzado (1986–1989)","displayName-count-one":"Brasilian cruzado (1986–1989)","displayName-count-other":"Brasilian cruzadoa (1986–1989)","symbol":"BRC"},"BRE":{"displayName":"Brasilian cruzeiro (1990–1993)","displayName-count-one":"Brasilian cruzeiro (1990–1993)","displayName-count-other":"Brasilian cruzeiroa (1990–1993)","symbol":"BRE"},"BRL":{"displayName":"Brasilian real","displayName-count-one":"Brasilian real","displayName-count-other":"Brasilian realia","symbol":"BRL","symbol-alt-narrow":"BRL"},"BRN":{"displayName":"Brasilian uusi cruzado (1989–1990)","displayName-count-one":"Brasilian uusi cruzado (1989–1990)","displayName-count-other":"Brasilian uutta cruzadoa (1989–1990)","symbol":"BRN"},"BRR":{"displayName":"Brasilian cruzeiro (1993–1994)","displayName-count-one":"Brasilian cruzeiro (1993–1994)","displayName-count-other":"Brasilian cruzeiroa (1993–1994)","symbol":"BRR"},"BRZ":{"displayName":"Brasilian cruzeiro (1942–1967)","displayName-count-one":"Brasilian cruzeiro (1942–1967)","displayName-count-other":"Brasilian cruzeiroa (1942–1967)","symbol":"BRZ"},"BSD":{"displayName":"Bahaman dollari","displayName-count-one":"Bahaman dollari","displayName-count-other":"Bahaman dollaria","symbol":"BSD","symbol-alt-narrow":"BSD"},"BTN":{"displayName":"Bhutanin ngultrum","displayName-count-one":"Bhutanin ngultrum","displayName-count-other":"Bhutanin ngultrumia","symbol":"BTN"},"BUK":{"displayName":"Burman kyat","displayName-count-one":"Burman kyat","displayName-count-other":"Burman kyatia","symbol":"BUK"},"BWP":{"displayName":"Botswanan pula","displayName-count-one":"Botswanan pula","displayName-count-other":"Botswanan pulaa","symbol":"BWP","symbol-alt-narrow":"BWP"},"BYB":{"displayName":"Valko-Venäjän uusi rupla (1994–1999)","displayName-count-one":"Valko-Venäjän uusi rupla (1994–1999)","displayName-count-other":"Valko-Venäjän uutta ruplaa (1994–1999)","symbol":"BYB"},"BYN":{"displayName":"Valko-Venäjän rupla","displayName-count-one":"Valko-Venäjän rupla","displayName-count-other":"Valko-Venäjän ruplaa","symbol":"BYN","symbol-alt-narrow":"BYN"},"BYR":{"displayName":"Valko-Venäjän rupla (2000–2016)","displayName-count-one":"Valko-Venäjän rupla (2000–2016)","displayName-count-other":"Valko-Venäjän ruplaa (2000–2016)","symbol":"BYR"},"BZD":{"displayName":"Belizen dollari","displayName-count-one":"Belizen dollari","displayName-count-other":"Belizen dollaria","symbol":"BZD","symbol-alt-narrow":"BZD"},"CAD":{"displayName":"Kanadan dollari","displayName-count-one":"Kanadan dollari","displayName-count-other":"Kanadan dollaria","symbol":"CAD","symbol-alt-narrow":"CAD"},"CDF":{"displayName":"Kongon frangi","displayName-count-one":"Kongon frangi","displayName-count-other":"Kongon frangia","symbol":"CDF"},"CHE":{"displayName":"Sveitsin WIR-euro","displayName-count-one":"Sveitsin WIR-euro","displayName-count-other":"Sveitsin WIR-euroa","symbol":"CHE"},"CHF":{"displayName":"Sveitsin frangi","displayName-count-one":"Sveitsin frangi","displayName-count-other":"Sveitsin frangia","symbol":"CHF"},"CHW":{"displayName":"Sveitsin WIR-frangi","displayName-count-one":"Sveitsin WIR-frangi","displayName-count-other":"Sveitsin WIR-frangia","symbol":"CHW"},"CLE":{"displayName":"Chilen escudo","displayName-count-one":"Chilen escudo","displayName-count-other":"Chilen escudoa","symbol":"CLE"},"CLF":{"displayName":"Chilen unidades de fomento","displayName-count-one":"Chilen unidades de fomento","displayName-count-other":"Chilen unidades de fomentoa","symbol":"CLF"},"CLP":{"displayName":"Chilen peso","displayName-count-one":"Chilen peso","displayName-count-other":"Chilen pesoa","symbol":"CLP","symbol-alt-narrow":"CLP"},"CNH":{"displayName":"Kiinan juan (offshore)","displayName-count-one":"Kiinan juan (offshore)","displayName-count-other":"Kiinan juania (offshore)","symbol":"CNH"},"CNX":{"displayName":"Kiinan kansanpankin dollari","displayName-count-one":"Kiinan kansanpankin dollari","displayName-count-other":"Kiinan kansanpankin dollaria","symbol":"CNX"},"CNY":{"displayName":"Kiinan juan","displayName-count-one":"Kiinan juan","displayName-count-other":"Kiinan juania","symbol":"CNY","symbol-alt-narrow":"CNY"},"COP":{"displayName":"Kolumbian peso","displayName-count-one":"Kolumbian peso","displayName-count-other":"Kolumbian pesoa","symbol":"COP","symbol-alt-narrow":"COP"},"COU":{"displayName":"Kolumbian unidad de valor real","displayName-count-one":"Kolumbian unidad de valor real","displayName-count-other":"Kolumbian unidad de valor realia","symbol":"COU"},"CRC":{"displayName":"Costa Rican colón","displayName-count-one":"Costa Rican colón","displayName-count-other":"Costa Rican colónia","symbol":"CRC","symbol-alt-narrow":"CRC"},"CSD":{"displayName":"Serbian dinaari (2002–2006)","displayName-count-one":"Serbian dinaari (2002–2006)","displayName-count-other":"Serbian dinaaria (2002–2006)","symbol":"CSD"},"CSK":{"displayName":"Tšekkoslovakian kova koruna","displayName-count-one":"Tšekkoslovakian kova koruna","displayName-count-other":"Tšekkoslovakian kovaa korunaa","symbol":"CSK"},"CUC":{"displayName":"Kuuban vaihdettava peso","displayName-count-one":"Kuuban vaihdettava peso","displayName-count-other":"Kuuban vaihdettavaa pesoa","symbol":"CUC","symbol-alt-narrow":"CUC"},"CUP":{"displayName":"Kuuban peso","displayName-count-one":"Kuuban peso","displayName-count-other":"Kuuban pesoa","symbol":"CUP","symbol-alt-narrow":"CUP"},"CVE":{"displayName":"Kap Verden escudo","displayName-count-one":"Kap Verden escudo","displayName-count-other":"Kap Verden escudoa","symbol":"CVE"},"CYP":{"displayName":"Kyproksen punta","displayName-count-one":"Kyproksen punta","displayName-count-other":"Kyproksen puntaa","symbol":"CYP"},"CZK":{"displayName":"Tšekin koruna","displayName-count-one":"Tšekin koruna","displayName-count-other":"Tšekin korunaa","symbol":"CZK","symbol-alt-narrow":"CZK"},"DDM":{"displayName":"Itä-Saksan markka","displayName-count-one":"Itä-Saksan markka","displayName-count-other":"Itä-Saksan markkaa","symbol":"DDM"},"DEM":{"displayName":"Saksan markka","displayName-count-one":"Saksan markka","displayName-count-other":"Saksan markkaa","symbol":"DEM"},"DJF":{"displayName":"Djiboutin frangi","displayName-count-one":"Djiboutin frangi","displayName-count-other":"Djiboutin frangia","symbol":"DJF"},"DKK":{"displayName":"Tanskan kruunu","displayName-count-one":"Tanskan kruunu","displayName-count-other":"Tanskan kruunua","symbol":"DKK","symbol-alt-narrow":"DKK"},"DOP":{"displayName":"Dominikaanisen tasavallan peso","displayName-count-one":"Dominikaanisen tasavallan peso","displayName-count-other":"Dominikaanisen tasavallan pesoa","symbol":"DOP","symbol-alt-narrow":"DOP"},"DZD":{"displayName":"Algerian dinaari","displayName-count-one":"Algerian dinaari","displayName-count-other":"Algerian dinaaria","symbol":"DZD"},"ECS":{"displayName":"Ecuadorin sucre","displayName-count-one":"Ecuadorin sucre","displayName-count-other":"Ecuadorin sucrea","symbol":"ECS"},"ECV":{"displayName":"Ecuadorin UVC","displayName-count-one":"Ecuadorin UVC","displayName-count-other":"Ecuadorin UVC’ta","symbol":"ECV"},"EEK":{"displayName":"Viron kruunu","displayName-count-one":"Viron kruunu","displayName-count-other":"Viron kruunua","symbol":"EEK"},"EGP":{"displayName":"Egyptin punta","displayName-count-one":"Egyptin punta","displayName-count-other":"Egyptin puntaa","symbol":"EGP","symbol-alt-narrow":"EGP"},"ERN":{"displayName":"Eritrean nakfa","displayName-count-one":"Eritrean nakfa","displayName-count-other":"Eritrean nakfaa","symbol":"ERN"},"ESA":{"displayName":"Espanjan peseta (A–tili)","displayName-count-one":"Espanjan peseta (A–tili)","displayName-count-other":"Espanjan pesetaa (A–tili)","symbol":"ESA"},"ESB":{"displayName":"Espanjan peseta (vaihdettava tili)","displayName-count-one":"Espanjan peseta (vaihdettava tili)","displayName-count-other":"Espanjan pesetaa (vaihdettava tili)","symbol":"ESB"},"ESP":{"displayName":"Espanjan peseta","displayName-count-one":"Espanjan peseta","displayName-count-other":"Espanjan pesetaa","symbol":"ESP","symbol-alt-narrow":"ESP"},"ETB":{"displayName":"Etiopian birr","displayName-count-one":"Etiopian birr","displayName-count-other":"Etiopian birriä","symbol":"ETB"},"EUR":{"displayName":"euro","displayName-count-one":"euro","displayName-count-other":"euroa","symbol":"€","symbol-alt-narrow":"€"},"FIM":{"displayName":"Suomen markka","displayName-count-one":"Suomen markka","displayName-count-other":"Suomen markkaa","symbol":"mk"},"FJD":{"displayName":"Fidžin dollari","displayName-count-one":"Fidžin dollari","displayName-count-other":"Fidžin dollaria","symbol":"FJD","symbol-alt-narrow":"FJD"},"FKP":{"displayName":"Falklandinsaarten punta","displayName-count-one":"Falklandinsaarten punta","displayName-count-other":"Falklandinsaarten puntaa","symbol":"FKP","symbol-alt-narrow":"FKP"},"FRF":{"displayName":"Ranskan frangi","displayName-count-one":"Ranskan frangi","displayName-count-other":"Ranskan frangia","symbol":"FRF"},"GBP":{"displayName":"Englannin punta","displayName-count-one":"Englannin punta","displayName-count-other":"Englannin puntaa","symbol":"£","symbol-alt-narrow":"£"},"GEK":{"displayName":"Georgian kuponkilari","displayName-count-one":"Georgian kuponkilari","displayName-count-other":"Georgian kuponkilaria","symbol":"GEK"},"GEL":{"displayName":"Georgian lari","displayName-count-one":"Georgian lari","displayName-count-other":"Georgian laria","symbol":"GEL","symbol-alt-narrow":"GEL"},"GHC":{"displayName":"Ghanan cedi (1979–2007)","displayName-count-one":"Ghanan cedi (1979–2007)","displayName-count-other":"Ghanan cediä (1979–2007)","symbol":"GHC"},"GHS":{"displayName":"Ghanan cedi","displayName-count-one":"Ghanan cedi","displayName-count-other":"Ghanan cediä","symbol":"GHS"},"GIP":{"displayName":"Gibraltarin punta","displayName-count-one":"Gibraltarin punta","displayName-count-other":"Gibraltarin puntaa","symbol":"GIP","symbol-alt-narrow":"GIP"},"GMD":{"displayName":"Gambian dalasi","displayName-count-one":"Gambian dalasi","displayName-count-other":"Gambian dalasia","symbol":"GMD"},"GNF":{"displayName":"Guinean frangi","displayName-count-one":"Guinean frangi","displayName-count-other":"Guinean frangia","symbol":"GNF","symbol-alt-narrow":"GNF"},"GNS":{"displayName":"Guinean syli","displayName-count-one":"Guinean syli","displayName-count-other":"Guinean syliä","symbol":"GNS"},"GQE":{"displayName":"Päiväntasaajan Guinean ekwele","displayName-count-one":"Päiväntasaajan Guinean ekwele","displayName-count-other":"Päiväntasaajan Guinean ekweleä","symbol":"GQE"},"GRD":{"displayName":"Kreikan drakma","displayName-count-one":"Kreikan drakma","displayName-count-other":"Kreikan drakmaa","symbol":"GRD"},"GTQ":{"displayName":"Guatemalan quetzal","displayName-count-one":"Guatemalan quetzal","displayName-count-other":"Guatemalan quetzalia","symbol":"GTQ","symbol-alt-narrow":"GTQ"},"GWE":{"displayName":"Portugalin Guinean escudo","displayName-count-one":"Portugalin Guinean escudo","displayName-count-other":"Portugalin Guinean escudoa","symbol":"GWE"},"GWP":{"displayName":"Guinea-Bissaun peso","displayName-count-one":"Guinea-Bissaun peso","displayName-count-other":"Guinea-Bissaun pesoa","symbol":"GWP"},"GYD":{"displayName":"Guyanan dollari","displayName-count-one":"Guyanan dollari","displayName-count-other":"Guyanan dollaria","symbol":"GYD","symbol-alt-narrow":"GYD"},"HKD":{"displayName":"Hongkongin dollari","displayName-count-one":"Hongkongin dollari","displayName-count-other":"Hongkongin dollaria","symbol":"HKD","symbol-alt-narrow":"HKD"},"HNL":{"displayName":"Hondurasin lempira","displayName-count-one":"Hondurasin lempira","displayName-count-other":"Hondurasin lempiraa","symbol":"HNL","symbol-alt-narrow":"HNL"},"HRD":{"displayName":"Kroatian dinaari","displayName-count-one":"Kroatian dinaari","displayName-count-other":"Kroatian dinaaria","symbol":"HRD"},"HRK":{"displayName":"Kroatian kuna","displayName-count-one":"Kroatian kuna","displayName-count-other":"Kroatian kunaa","symbol":"HRK","symbol-alt-narrow":"HRK"},"HTG":{"displayName":"Haitin gourde","displayName-count-one":"Haitin gourde","displayName-count-other":"Haitin gourdea","symbol":"HTG"},"HUF":{"displayName":"Unkarin forintti","displayName-count-one":"Unkarin forintti","displayName-count-other":"Unkarin forinttia","symbol":"HUF","symbol-alt-narrow":"HUF"},"IDR":{"displayName":"Indonesian rupia","displayName-count-one":"Indonesian rupia","displayName-count-other":"Indonesian rupiaa","symbol":"IDR","symbol-alt-narrow":"IDR"},"IEP":{"displayName":"Irlannin punta","displayName-count-one":"Irlannin punta","displayName-count-other":"Irlannin puntaa","symbol":"IEP"},"ILP":{"displayName":"Israelin punta","displayName-count-one":"Israelin punta","displayName-count-other":"Israelin puntaa","symbol":"ILP"},"ILR":{"displayName":"Israelin sekeli (1980–1985)","displayName-count-one":"Israelin sekeli (1980–1985)","displayName-count-other":"Israelin sekeliä (1980–1985)","symbol":"ILR"},"ILS":{"displayName":"Israelin uusi sekeli","displayName-count-one":"Israelin uusi sekeli","displayName-count-other":"Israelin uutta sekeliä","symbol":"ILS","symbol-alt-narrow":"ILS"},"INR":{"displayName":"Intian rupia","displayName-count-one":"Intian rupia","displayName-count-other":"Intian rupiaa","symbol":"INR","symbol-alt-narrow":"INR"},"IQD":{"displayName":"Irakin dinaari","displayName-count-one":"Irakin dinaari","displayName-count-other":"Irakin dinaaria","symbol":"IQD"},"IRR":{"displayName":"Iranin rial","displayName-count-one":"Iranin rial","displayName-count-other":"Iranin rialia","symbol":"IRR"},"ISJ":{"displayName":"Islannin kruunu (1918–1981)","displayName-count-one":"Islannin kruunu (1918–1981)","displayName-count-other":"Islannin kruunua (1918–1981)","symbol":"ISJ"},"ISK":{"displayName":"Islannin kruunu","displayName-count-one":"Islannin kruunu","displayName-count-other":"Islannin kruunua","symbol":"ISK","symbol-alt-narrow":"ISK"},"ITL":{"displayName":"Italian liira","displayName-count-one":"Italian liira","displayName-count-other":"Italian liiraa","symbol":"ITL"},"JMD":{"displayName":"Jamaikan dollari","displayName-count-one":"Jamaikan dollari","displayName-count-other":"Jamaikan dollaria","symbol":"JMD","symbol-alt-narrow":"JMD"},"JOD":{"displayName":"Jordanian dinaari","displayName-count-one":"Jordanian dinaari","displayName-count-other":"Jordanian dinaaria","symbol":"JOD"},"JPY":{"displayName":"Japanin jeni","displayName-count-one":"Japanin jeni","displayName-count-other":"Japanin jeniä","symbol":"¥","symbol-alt-narrow":"¥"},"KES":{"displayName":"Kenian šillinki","displayName-count-one":"Kenian šillinki","displayName-count-other":"Kenian šillinkiä","symbol":"KES"},"KGS":{"displayName":"Kirgisian som","displayName-count-one":"Kirgisian som","displayName-count-other":"Kirgisian somia","symbol":"KGS"},"KHR":{"displayName":"Kambodžan riel","displayName-count-one":"Kambodžan riel","displayName-count-other":"Kambodžan rieliä","symbol":"KHR","symbol-alt-narrow":"KHR"},"KMF":{"displayName":"Komorien frangi","displayName-count-one":"Komorien frangi","displayName-count-other":"Komorien frangia","symbol":"KMF","symbol-alt-narrow":"KMF"},"KPW":{"displayName":"Pohjois-Korean won","displayName-count-one":"Pohjois-Korean won","displayName-count-other":"Pohjois-Korean wonia","symbol":"KPW","symbol-alt-narrow":"KPW"},"KRH":{"displayName":"Etelä-Korean hwan (1953–1962)","displayName-count-one":"Etelä-Korean hwan (1953–1962)","displayName-count-other":"Etelä-Korean hwania (1953–1962)","symbol":"KRH"},"KRO":{"displayName":"Etelä-Korean won (1945–1953)","displayName-count-one":"Etelä-Korean won (1945–1953)","displayName-count-other":"Etelä-Korean wonia (1945–1953)","symbol":"KRO"},"KRW":{"displayName":"Etelä-Korean won","displayName-count-one":"Etelä-Korean won","displayName-count-other":"Etelä-Korean wonia","symbol":"KRW","symbol-alt-narrow":"KRW"},"KWD":{"displayName":"Kuwaitin dinaari","displayName-count-one":"Kuwaitin dinaari","displayName-count-other":"Kuwaitin dinaaria","symbol":"KWD"},"KYD":{"displayName":"Caymansaarten dollari","displayName-count-one":"Caymansaarten dollari","displayName-count-other":"Caymansaarten dollaria","symbol":"KYD","symbol-alt-narrow":"KYD"},"KZT":{"displayName":"Kazakstanin tenge","displayName-count-one":"Kazakstanin tenge","displayName-count-other":"Kazakstanin tengeä","symbol":"KZT","symbol-alt-narrow":"KZT"},"LAK":{"displayName":"Laosin kip","displayName-count-one":"Laosin kip","displayName-count-other":"Laosin kipiä","symbol":"LAK","symbol-alt-narrow":"LAK"},"LBP":{"displayName":"Libanonin punta","displayName-count-one":"Libanonin punta","displayName-count-other":"Libanonin puntaa","symbol":"LBP","symbol-alt-narrow":"LBP"},"LKR":{"displayName":"Sri Lankan rupia","displayName-count-one":"Sri Lankan rupia","displayName-count-other":"Sri Lankan rupiaa","symbol":"LKR","symbol-alt-narrow":"LKR"},"LRD":{"displayName":"Liberian dollari","displayName-count-one":"Liberian dollari","displayName-count-other":"Liberian dollaria","symbol":"LRD","symbol-alt-narrow":"LRD"},"LSL":{"displayName":"Lesothon loti","displayName-count-one":"Lesothon loti","displayName-count-other":"Lesothon lotia","symbol":"LSL"},"LTL":{"displayName":"Liettuan liti","displayName-count-one":"Liettuan liti","displayName-count-other":"Liettuan litiä","symbol":"LTL","symbol-alt-narrow":"LTL"},"LTT":{"displayName":"Liettuan talonas","displayName-count-one":"Liettuan talonas","displayName-count-other":"Liettuan talonasia","symbol":"LTT"},"LUC":{"displayName":"Luxemburgin vaihdettava frangi","displayName-count-one":"Luxemburgin vaihdettava frangi","displayName-count-other":"Luxemburgin vaihdettavaa frangia","symbol":"LUC"},"LUF":{"displayName":"Luxemburgin frangi","displayName-count-one":"Luxemburgin frangi","displayName-count-other":"Luxemburgin frangia","symbol":"LUF"},"LUL":{"displayName":"Luxemburgin rahoitusfrangi","displayName-count-one":"Luxemburgin rahoitusfrangi","displayName-count-other":"Luxemburgin rahoitusfrangia","symbol":"LUL"},"LVL":{"displayName":"Latvian lati","displayName-count-one":"Latvian lati","displayName-count-other":"Latvian latia","symbol":"LVL","symbol-alt-narrow":"LVL"},"LVR":{"displayName":"Latvian rupla","displayName-count-one":"Latvian rupla","displayName-count-other":"Latvian ruplaa","symbol":"LVR"},"LYD":{"displayName":"Libyan dinaari","displayName-count-one":"Libyan dinaari","displayName-count-other":"Libyan dinaaria","symbol":"LYD"},"MAD":{"displayName":"Marokon dirhami","displayName-count-one":"Marokon dirhami","displayName-count-other":"Marokon dirhamia","symbol":"MAD"},"MAF":{"displayName":"Marokon frangi","displayName-count-one":"Marokon frangi","displayName-count-other":"Marokon frangia","symbol":"MAF"},"MCF":{"displayName":"Monacon frangi","displayName-count-one":"Monacon frangi","displayName-count-other":"Monacon frangia","symbol":"MCF"},"MDC":{"displayName":"Moldovan kuponkileu","displayName-count-one":"Moldovan kuponkileu","displayName-count-other":"Moldovan kuponkileuta","symbol":"MDC"},"MDL":{"displayName":"Moldovan leu","displayName-count-one":"Moldovan leu","displayName-count-other":"Moldovan leuta","symbol":"MDL"},"MGA":{"displayName":"Madagaskarin ariary","displayName-count-one":"Madagaskarin ariary","displayName-count-other":"Madagaskarin ariarya","symbol":"MGA","symbol-alt-narrow":"MGA"},"MGF":{"displayName":"Madagaskarin frangi","displayName-count-one":"Madagaskarin frangi","displayName-count-other":"Madagaskarin frangia","symbol":"MGF"},"MKD":{"displayName":"Makedonian denaari","displayName-count-one":"Makedonian denaari","displayName-count-other":"Makedonian denaaria","symbol":"MKD"},"MKN":{"displayName":"Makedonian dinaari (1992–1993)","displayName-count-one":"Makedonian dinaari (1992–1993)","displayName-count-other":"Makedonian dinaaria (1992–1993)","symbol":"MKN"},"MLF":{"displayName":"Malin frangi","displayName-count-one":"Malin frangi","displayName-count-other":"Malin frangia","symbol":"MLF"},"MMK":{"displayName":"Myanmarin kyat","displayName-count-one":"Myanmarin kyat","displayName-count-other":"Myanmarin kyatia","symbol":"MMK","symbol-alt-narrow":"MMK"},"MNT":{"displayName":"Mongolian tugrik","displayName-count-one":"Mongolian tugrik","displayName-count-other":"Mongolian tugrikia","symbol":"MNT","symbol-alt-narrow":"MNT"},"MOP":{"displayName":"Macaon pataca","displayName-count-one":"Macaon pataca","displayName-count-other":"Macaon patacaa","symbol":"MOP"},"MRO":{"displayName":"Mauritanian ouguiya","displayName-count-one":"Mauritanian ouguiya","displayName-count-other":"Mauritanian ouguiyaa","symbol":"MRO"},"MTL":{"displayName":"Maltan liira","displayName-count-one":"Maltan liira","displayName-count-other":"Maltan liiraa","symbol":"MTL"},"MTP":{"displayName":"Maltan punta","displayName-count-one":"Maltan punta","displayName-count-other":"Maltan puntaa","symbol":"MTP"},"MUR":{"displayName":"Mauritiuksen rupia","displayName-count-one":"Mauritiuksen rupia","displayName-count-other":"Mauritiuksen rupiaa","symbol":"MUR","symbol-alt-narrow":"MUR"},"MVP":{"displayName":"Malediivien rupia (1947–1981)","displayName-count-one":"Malediivien rupia (1947–1981)","displayName-count-other":"Malediivien rupiaa (1947–1981)","symbol":"MVP"},"MVR":{"displayName":"Malediivien rufiyaa","displayName-count-one":"Malediivien rufiyaa","displayName-count-other":"Malediivien rufiyaata","symbol":"MVR"},"MWK":{"displayName":"Malawin kwacha","displayName-count-one":"Malawin kwacha","displayName-count-other":"Malawin kwachaa","symbol":"MWK"},"MXN":{"displayName":"Meksikon peso","displayName-count-one":"Meksikon peso","displayName-count-other":"Meksikon pesoa","symbol":"MXN","symbol-alt-narrow":"MXN"},"MXP":{"displayName":"Meksikon hopeapeso (1861–1992)","displayName-count-one":"Meksikon hopeapeso (1861–1992)","displayName-count-other":"Meksikon hopeapesoa (1861–1992)","symbol":"MXP"},"MXV":{"displayName":"Meksikon UDI","displayName-count-one":"Meksikon UDI","displayName-count-other":"Meksikon UDI’ta","symbol":"MXV"},"MYR":{"displayName":"Malesian ringgit","displayName-count-one":"Malesian ringgit","displayName-count-other":"Malesian ringgitiä","symbol":"MYR","symbol-alt-narrow":"MYR"},"MZE":{"displayName":"Mosambikin escudo","displayName-count-one":"Mosambikin escudo","displayName-count-other":"Mosambikin escudoa","symbol":"MZE"},"MZM":{"displayName":"Mosambikin metical (1980–2006)","displayName-count-one":"Mosambikin metical (1980–2006)","displayName-count-other":"Mosambikin meticalia (1980–2006)","symbol":"MZM"},"MZN":{"displayName":"Mosambikin metical","displayName-count-one":"Mosambikin metical","displayName-count-other":"Mosambikin meticalia","symbol":"MZN"},"NAD":{"displayName":"Namibian dollari","displayName-count-one":"Namibian dollari","displayName-count-other":"Namibian dollaria","symbol":"NAD","symbol-alt-narrow":"NAD"},"NGN":{"displayName":"Nigerian naira","displayName-count-one":"Nigerian naira","displayName-count-other":"Nigerian nairaa","symbol":"NGN","symbol-alt-narrow":"NGN"},"NIC":{"displayName":"Nicaraguan córdoba (1988–1991)","displayName-count-one":"Nicaraguan córdoba (1988–1991)","displayName-count-other":"Nicaraguan córdobaa (1988–1991)","symbol":"NIC"},"NIO":{"displayName":"Nicaraguan córdoba","displayName-count-one":"Nicaraguan córdoba","displayName-count-other":"Nicaraguan córdobaa","symbol":"NIO","symbol-alt-narrow":"NIO"},"NLG":{"displayName":"Alankomaiden guldeni","displayName-count-one":"Alankomaiden guldeni","displayName-count-other":"Alankomaiden guldenia","symbol":"NLG"},"NOK":{"displayName":"Norjan kruunu","displayName-count-one":"Norjan kruunu","displayName-count-other":"Norjan kruunua","symbol":"NOK","symbol-alt-narrow":"NOK"},"NPR":{"displayName":"Nepalin rupia","displayName-count-one":"Nepalin rupia","displayName-count-other":"Nepalin rupiaa","symbol":"NPR","symbol-alt-narrow":"NPR"},"NZD":{"displayName":"Uuden-Seelannin dollari","displayName-count-one":"Uuden-Seelannin dollari","displayName-count-other":"Uuden-Seelannin dollaria","symbol":"NZD","symbol-alt-narrow":"NZD"},"OMR":{"displayName":"Omanin rial","displayName-count-one":"Omanin rial","displayName-count-other":"Omanin rialia","symbol":"OMR"},"PAB":{"displayName":"Panaman balboa","displayName-count-one":"Panaman balboa","displayName-count-other":"Panaman balboaa","symbol":"PAB"},"PEI":{"displayName":"Perun inti","displayName-count-one":"Perun inti","displayName-count-other":"Perun intiä","symbol":"PEI"},"PEN":{"displayName":"Perun sol","displayName-count-one":"Perun sol","displayName-count-other":"Perun solia","symbol":"PEN"},"PES":{"displayName":"Perun sol (1863–1965)","displayName-count-one":"Perun sol (1863–1965)","displayName-count-other":"Perun solia (1863–1965)","symbol":"PES"},"PGK":{"displayName":"Papua-Uuden-Guinean kina","displayName-count-one":"Papua-Uuden-Guinean kina","displayName-count-other":"Papua-Uuden-Guinean kinaa","symbol":"PGK"},"PHP":{"displayName":"Filippiinien peso","displayName-count-one":"Filippiinien peso","displayName-count-other":"Filippiinien pesoa","symbol":"PHP","symbol-alt-narrow":"PHP"},"PKR":{"displayName":"Pakistanin rupia","displayName-count-one":"Pakistanin rupia","displayName-count-other":"Pakistanin rupiaa","symbol":"PKR","symbol-alt-narrow":"PKR"},"PLN":{"displayName":"Puolan złoty","displayName-count-one":"Puolan złoty","displayName-count-other":"Puolan złotya","symbol":"PLN","symbol-alt-narrow":"PLN"},"PLZ":{"displayName":"Puolan złoty (1950–1995)","displayName-count-one":"Puolan złoty (1950–1995)","displayName-count-other":"Puolan złotya (1950–1995)","symbol":"PLZ"},"PTE":{"displayName":"Portugalin escudo","displayName-count-one":"Portugalin escudo","displayName-count-other":"Portugalin escudoa","symbol":"PTE"},"PYG":{"displayName":"Paraguayn guarani","displayName-count-one":"Paraguayn guarani","displayName-count-other":"Paraguayn guarania","symbol":"PYG","symbol-alt-narrow":"PYG"},"QAR":{"displayName":"Qatarin rial","displayName-count-one":"Qatarin rial","displayName-count-other":"Qatarin rialia","symbol":"QAR"},"RHD":{"displayName":"Rhodesian dollari","displayName-count-one":"Rhodesian dollari","displayName-count-other":"Rhodesian dollaria","symbol":"RHD"},"ROL":{"displayName":"Romanian leu (1952–2006)","displayName-count-one":"Romanian leu (1952–2006)","displayName-count-other":"Romanian leuta (1952–2006)","symbol":"ROL"},"RON":{"displayName":"Romanian leu","displayName-count-one":"Romanian leu","displayName-count-other":"Romanian leuta","symbol":"RON","symbol-alt-narrow":"RON"},"RSD":{"displayName":"Serbian dinaari","displayName-count-one":"Serbian dinaari","displayName-count-other":"Serbian dinaaria","symbol":"RSD"},"RUB":{"displayName":"Venäjän rupla","displayName-count-one":"Venäjän rupla","displayName-count-other":"Venäjän ruplaa","symbol":"RUB","symbol-alt-narrow":"₽"},"RUR":{"displayName":"Venäjän rupla (1991–1998)","displayName-count-one":"Venäjän rupla (1991–1998)","displayName-count-other":"Venäjän ruplaa (1991–1998)","symbol":"RUR","symbol-alt-narrow":"RUR"},"RWF":{"displayName":"Ruandan frangi","displayName-count-one":"Ruandan frangi","displayName-count-other":"Ruandan frangia","symbol":"RWF","symbol-alt-narrow":"RWF"},"SAR":{"displayName":"Saudi-Arabian rial","displayName-count-one":"Saudi-Arabian rial","displayName-count-other":"Saudi-Arabian rialia","symbol":"SAR"},"SBD":{"displayName":"Salomonsaarten dollari","displayName-count-one":"Salomonsaarten dollari","displayName-count-other":"Salomonsaarten dollaria","symbol":"SBD","symbol-alt-narrow":"SBD"},"SCR":{"displayName":"Seychellien rupia","displayName-count-one":"Seychellien rupia","displayName-count-other":"Seychellien rupiaa","symbol":"SCR"},"SDD":{"displayName":"Sudanin dinaari (1992–2007)","displayName-count-one":"Sudanin dinaari (1992–2007)","displayName-count-other":"Sudanin dinaaria (1992–2007)","symbol":"SDD"},"SDG":{"displayName":"Sudanin punta","displayName-count-one":"Sudanin punta","displayName-count-other":"Sudanin puntaa","symbol":"SDG"},"SDP":{"displayName":"Sudanin punta (1957–1998)","displayName-count-one":"Sudanin punta (1957–1998)","displayName-count-other":"Sudanin puntaa (1957–1998)","symbol":"SDP"},"SEK":{"displayName":"Ruotsin kruunu","displayName-count-one":"Ruotsin kruunu","displayName-count-other":"Ruotsin kruunua","symbol":"SEK","symbol-alt-narrow":"SEK"},"SGD":{"displayName":"Singaporen dollari","displayName-count-one":"Singaporen dollari","displayName-count-other":"Singaporen dollaria","symbol":"SGD","symbol-alt-narrow":"SGD"},"SHP":{"displayName":"Saint Helenan punta","displayName-count-one":"Saint Helenan punta","displayName-count-other":"Saint Helenan puntaa","symbol":"SHP","symbol-alt-narrow":"SHP"},"SIT":{"displayName":"Slovenian tolar","displayName-count-one":"Slovenian tolar","displayName-count-other":"Slovenian tolaria","symbol":"SIT"},"SKK":{"displayName":"Slovakian koruna","displayName-count-one":"Slovakian koruna","displayName-count-other":"Slovakian korunaa","symbol":"SKK"},"SLL":{"displayName":"Sierra Leonen leone","displayName-count-one":"Sierra Leonen leone","displayName-count-other":"Sierra Leonen leonea","symbol":"SLL"},"SOS":{"displayName":"Somalian šillinki","displayName-count-one":"Somalian šillinki","displayName-count-other":"Somalian šillinkiä","symbol":"SOS"},"SRD":{"displayName":"Surinamen dollari","displayName-count-one":"Surinamen dollari","displayName-count-other":"Surinamen dollaria","symbol":"SRD","symbol-alt-narrow":"SRD"},"SRG":{"displayName":"Surinamen guldeni","displayName-count-one":"Surinamen guldeni","displayName-count-other":"Surinamen guldeni","symbol":"SRG"},"SSP":{"displayName":"Etelä-Sudanin punta","displayName-count-one":"Etelä-Sudanin punta","displayName-count-other":"Etelä-Sudanin puntaa","symbol":"SSP","symbol-alt-narrow":"SSP"},"STD":{"displayName":"São Tomén ja Príncipen dobra","displayName-count-one":"São Tomén ja Príncipen dobra","displayName-count-other":"São Tomén ja Príncipen dobraa","symbol":"STD","symbol-alt-narrow":"STD"},"STN":{"displayName":"STN","symbol":"STN"},"SUR":{"displayName":"Neuvostoliiton rupla","displayName-count-one":"Neuvostoliiton rupla","displayName-count-other":"Neuvostoliiton ruplaa","symbol":"SUR"},"SVC":{"displayName":"El Salvadorin colón","displayName-count-one":"El Salvadorin colón","displayName-count-other":"El Salvadorin colónia","symbol":"SVC"},"SYP":{"displayName":"Syyrian punta","displayName-count-one":"Syyrian punta","displayName-count-other":"Syyrian puntaa","symbol":"SYP","symbol-alt-narrow":"SYP"},"SZL":{"displayName":"Swazimaan lilangeni","displayName-count-one":"Swazimaan lilangeni","displayName-count-other":"Swazimaan lilangenia","symbol":"SZL"},"THB":{"displayName":"Thaimaan baht","displayName-count-one":"Thaimaan baht","displayName-count-other":"Thaimaan bahtia","symbol":"THB","symbol-alt-narrow":"THB"},"TJR":{"displayName":"Tadžikistanin rupla","displayName-count-one":"Tadžikistanin rupla","displayName-count-other":"Tadžikistanin ruplaa","symbol":"TJR"},"TJS":{"displayName":"Tadžikistanin somoni","displayName-count-one":"Tadžikistanin somoni","displayName-count-other":"Tadžikistanin somonia","symbol":"TJS"},"TMM":{"displayName":"Turkmenistanin manat (1993–2009)","displayName-count-one":"Turkmenistanin manat (1993–2009)","displayName-count-other":"Turkmenistanin manatia (1993–2009)","symbol":"TMM"},"TMT":{"displayName":"Turkmenistanin manat","displayName-count-one":"Turkmenistanin manat","displayName-count-other":"Turkmenistanin manatia","symbol":"TMT"},"TND":{"displayName":"Tunisian dinaari","displayName-count-one":"Tunisian dinaari","displayName-count-other":"Tunisian dinaaria","symbol":"TND"},"TOP":{"displayName":"Tongan pa’anga","displayName-count-one":"Tongan pa’anga","displayName-count-other":"Tongan pa’angaa","symbol":"TOP","symbol-alt-narrow":"TOP"},"TPE":{"displayName":"Timorin escudo","displayName-count-one":"Timorin escudo","displayName-count-other":"Timorin escudoa","symbol":"TPE"},"TRL":{"displayName":"Turkin liira (1922–2005)","displayName-count-one":"Turkin liira (1922–2005)","displayName-count-other":"Turkin liiraa (1922–2005)","symbol":"TRL"},"TRY":{"displayName":"Turkin liira","displayName-count-one":"Turkin liira","displayName-count-other":"Turkin liiraa","symbol":"TRY","symbol-alt-narrow":"TRY","symbol-alt-variant":"TL"},"TTD":{"displayName":"Trinidadin ja Tobagon dollari","displayName-count-one":"Trinidadin ja Tobagon dollari","displayName-count-other":"Trinidadin ja Tobagon dollaria","symbol":"TTD","symbol-alt-narrow":"TTD"},"TWD":{"displayName":"Taiwanin uusi dollari","displayName-count-one":"Taiwanin uusi dollari","displayName-count-other":"Taiwanin uutta dollaria","symbol":"TWD","symbol-alt-narrow":"TWD"},"TZS":{"displayName":"Tansanian šillinki","displayName-count-one":"Tansanian šillinki","displayName-count-other":"Tansanian šillinkiä","symbol":"TZS"},"UAH":{"displayName":"Ukrainan hryvnia","displayName-count-one":"Ukrainan hryvnia","displayName-count-other":"Ukrainan hryvniaa","symbol":"UAH","symbol-alt-narrow":"UAH"},"UAK":{"displayName":"Ukrainan karbovanetz","displayName-count-one":"Ukrainan karbovanetz","displayName-count-other":"Ukrainan karbovanetzia","symbol":"UAK"},"UGS":{"displayName":"Ugandan šillinki (1966–1987)","displayName-count-one":"Ugandan šillinki (1966–1987)","displayName-count-other":"Ugandan šillinkiä (1966–1987)","symbol":"UGS"},"UGX":{"displayName":"Ugandan šillinki","displayName-count-one":"Ugandan šillinki","displayName-count-other":"Ugandan šillinkiä","symbol":"UGX"},"USD":{"displayName":"Yhdysvaltain dollari","displayName-count-one":"Yhdysvaltain dollari","displayName-count-other":"Yhdysvaltain dollaria","symbol":"$","symbol-alt-narrow":"$"},"USN":{"displayName":"Yhdysvaltain dollari (seuraava päivä)","displayName-count-one":"Yhdysvaltain dollari (seuraava päivä)","displayName-count-other":"Yhdysvaltain dollaria (seuraava päivä)","symbol":"USN"},"USS":{"displayName":"Yhdysvaltain dollari (sama päivä)","displayName-count-one":"Yhdysvaltain dollari (sama päivä)","displayName-count-other":"Yhdysvaltain dollaria (sama päivä)","symbol":"USS"},"UYI":{"displayName":"Uruguayn peso en unidades indexadas","displayName-count-one":"Uruguayn peso en unidades indexadas","displayName-count-other":"Uruguayn pesoa en unidades indexadas","symbol":"UYI"},"UYP":{"displayName":"Uruguayn peso (1975–1993)","displayName-count-one":"Uruguayn peso (1975–1993)","displayName-count-other":"Uruguayn pesoa (1975–1993)","symbol":"UYP"},"UYU":{"displayName":"Uruguayn peso","displayName-count-one":"Uruguayn peso","displayName-count-other":"Uruguayn pesoa","symbol":"UYU","symbol-alt-narrow":"UYU"},"UZS":{"displayName":"Uzbekistanin som","displayName-count-one":"Uzbekistanin som","displayName-count-other":"Uzbekistanin somia","symbol":"UZS"},"VEB":{"displayName":"Venezuelan bolivar (1871–2008)","displayName-count-one":"Venezuelan bolivar (1871–2008)","displayName-count-other":"Venezuelan bolivaria (1871–2008)","symbol":"VEB"},"VEF":{"displayName":"Venezuelan bolivar","displayName-count-one":"Venezuelan bolivar","displayName-count-other":"Venezuelan bolivaria","symbol":"VEF","symbol-alt-narrow":"VEF"},"VND":{"displayName":"Vietnamin dong","displayName-count-one":"Vietnamin dong","displayName-count-other":"Vietnamin dongia","symbol":"VND","symbol-alt-narrow":"VND"},"VNN":{"displayName":"Vietnamin dong (1978–1985)","displayName-count-one":"Vietnamin dong (1978–1985)","displayName-count-other":"Vietnamin dongia (1978–1985)","symbol":"VNN"},"VUV":{"displayName":"Vanuatun vatu","displayName-count-one":"Vanuatun vatu","displayName-count-other":"Vanuatun vatua","symbol":"VUV"},"WST":{"displayName":"Samoan tala","displayName-count-one":"Samoan tala","displayName-count-other":"Samoan talaa","symbol":"WST"},"XAF":{"displayName":"CFA-frangi BEAC","displayName-count-one":"CFA-frangi BEAC","displayName-count-other":"CFA-frangia BEAC","symbol":"FCFA"},"XAG":{"displayName":"hopea","displayName-count-one":"troy-unssi hopeaa","displayName-count-other":"troy-unssia hopeaa","symbol":"XAG"},"XAU":{"displayName":"kulta","displayName-count-one":"troy-unssi kultaa","displayName-count-other":"troy-unssia kultaa","symbol":"XAU"},"XBA":{"displayName":"EURCO","displayName-count-one":"EURCO","displayName-count-other":"EURCO’a","symbol":"XBA"},"XBB":{"displayName":"Euroopan rahayksikkö (EMU)","displayName-count-one":"Euroopan rahayksikkö (EMU)","displayName-count-other":"Euroopan rahayksikköä (EMU)","symbol":"XBB"},"XBC":{"displayName":"EUA (XBC)","displayName-count-one":"EUA (XBC)","displayName-count-other":"EUA’ta (XBC)","symbol":"XBC"},"XBD":{"displayName":"EUA (XBD)","displayName-count-one":"EUA (XBD)","displayName-count-other":"EUA’ta (XBD)","symbol":"XBD"},"XCD":{"displayName":"Itä-Karibian dollari","displayName-count-one":"Itä-Karibian dollari","displayName-count-other":"Itä-Karibian dollaria","symbol":"XCD","symbol-alt-narrow":"XCD"},"XDR":{"displayName":"erityisnosto-oikeus (SDR)","displayName-count-one":"erityisnosto-oikeus (SDR)","displayName-count-other":"erityisnosto-oikeutta (SDR)","symbol":"XDR"},"XEU":{"displayName":"Euroopan valuuttayksikkö (ECU)","displayName-count-one":"Euroopan valuuttayksikkö (ECU)","displayName-count-other":"Euroopan valuuttayksikköä (ECU)","symbol":"XEU"},"XFO":{"displayName":"Ranskan kultafrangi","displayName-count-one":"Ranskan kultafrangi","displayName-count-other":"Ranskan kultafrangia","symbol":"XFO"},"XFU":{"displayName":"Ranskan UIC-frangi","displayName-count-one":"Ranskan UIC-frangi","displayName-count-other":"Ranskan UIC-frangia","symbol":"XFU"},"XOF":{"displayName":"CFA-frangi BCEAO","displayName-count-one":"CFA-frangi BCEAO","displayName-count-other":"CFA-frangia BCEAO","symbol":"CFA"},"XPD":{"displayName":"palladium","displayName-count-one":"troy-unssi palladiumia","displayName-count-other":"troy-unssia palladiumia","symbol":"XPD"},"XPF":{"displayName":"CFP-frangi","displayName-count-one":"CFP-frangi","displayName-count-other":"CFP-frangia","symbol":"XPF"},"XPT":{"displayName":"platina","displayName-count-one":"troy-unssi platinaa","displayName-count-other":"troy-unssia platinaa","symbol":"XPT"},"XRE":{"displayName":"RINET-rahastot","displayName-count-one":"RINET-rahastoyksikkö","displayName-count-other":"RINET-rahastoyksikköä","symbol":"XRE"},"XSU":{"displayName":"etelä-amerikkalaisen ALBA:n laskentayksikkö sucre","displayName-count-one":"sucre","displayName-count-other":"sucrea","symbol":"XSU"},"XTS":{"displayName":"testaustarkoitukseen varattu valuuttakoodi","displayName-count-one":"testaustarkoitukseen varattu valuuttakoodi","displayName-count-other":"testaustarkoitukseen varattua valuuttakoodia","symbol":"XTS"},"XUA":{"displayName":"afrikkalainen AfDB-laskentayksikkö","displayName-count-one":"AfDB-laskentayksikkö","displayName-count-other":"AfDB-laskentayksikköä","symbol":"XUA"},"XXX":{"displayName":"tuntematon rahayksikkö","displayName-count-one":"tuntematon rahayksikkö","displayName-count-other":"tuntematonta rahayksikköä","symbol":"XXX"},"YDD":{"displayName":"Jemenin dinaari","displayName-count-one":"Jemenin dinaari","displayName-count-other":"Jemenin dinaaria","symbol":"YDD"},"YER":{"displayName":"Jemenin rial","displayName-count-one":"Jemenin rial","displayName-count-other":"Jemenin rialia","symbol":"YER"},"YUD":{"displayName":"Jugoslavian kova dinaari (1966–1990)","displayName-count-one":"Jugoslavian kova dinaari (1966–1990)","displayName-count-other":"Jugoslavian kovaa dinaaria (1966–1990)","symbol":"YUD"},"YUM":{"displayName":"Jugoslavian uusi dinaari (1994–2002)","displayName-count-one":"Jugoslavian uusi dinaari (1994–2002)","displayName-count-other":"Jugoslavian uutta dinaaria (1994–2002)","symbol":"YUM"},"YUN":{"displayName":"Jugoslavian vaihdettava dinaari (1990–1992)","displayName-count-one":"Jugoslavian vaihdettava dinaari (1990–1992)","displayName-count-other":"Jugoslavian vaihdettavaa dinaaria (1990–1992)","symbol":"YUN"},"YUR":{"displayName":"Jugoslavian uudistettu dinaari (1992–1993)","displayName-count-one":"Jugoslavian uudistettu dinaari (1992–1993)","displayName-count-other":"Jugoslavian uudistettua dinaaria (1992–1993)","symbol":"YUR"},"ZAL":{"displayName":"Etelä-Afrikan rahoitusrandi","displayName-count-one":"Etelä-Afrikan rahoitusrandi","displayName-count-other":"Etelä-Afrikan rahoitusrandia","symbol":"ZAL"},"ZAR":{"displayName":"Etelä-Afrikan randi","displayName-count-one":"Etelä-Afrikan randi","displayName-count-other":"Etelä-Afrikan randia","symbol":"ZAR","symbol-alt-narrow":"ZAR"},"ZMK":{"displayName":"Sambian kwacha (1968–2012)","displayName-count-one":"Sambian kwacha (1968–2012)","displayName-count-other":"Sambian kwachaa (1968–2012)","symbol":"ZMK"},"ZMW":{"displayName":"Sambian kwacha","displayName-count-one":"Sambian kwacha","displayName-count-other":"Sambian kwachaa","symbol":"ZMW","symbol-alt-narrow":"ZMW"},"ZRN":{"displayName":"Zairen uusi zaire (1993–1998)","displayName-count-one":"Zairen uusi zaire (1993–1998)","displayName-count-other":"Zairen uutta zairea (1993–1998)","symbol":"ZRN"},"ZRZ":{"displayName":"Zairen zaire (1971–1993)","displayName-count-one":"Zairen zaire (1971–1993)","displayName-count-other":"Zairen zairea (1971–1993)","symbol":"ZRZ"},"ZWD":{"displayName":"Zimbabwen dollari (1980–2008)","displayName-count-one":"Zimbabwen dollari (1980–2008)","displayName-count-other":"Zimbabwen dollaria (1980–2008)","symbol":"ZWD"},"ZWL":{"displayName":"Zimbabwen dollari (2009)","displayName-count-one":"Zimbabwen dollari (2009)","displayName-count-other":"Zimbabwen dollaria (2009)","symbol":"ZWL"},"ZWR":{"displayName":"Zimbabwen dollari (2008)","displayName-count-one":"Zimbabwen dollari (2008)","displayName-count-other":"Zimbabwen dollaria (2008)","symbol":"ZWR"}},"defaultNumberingSystem":"latn","otherNumberingSystems":{"native":"latn"},"minimumGroupingDigits":"1","symbols-numberSystem-latn":{"decimal":",","group":" ","list":";","percentSign":"%","plusSign":"+","minusSign":"−","exponential":"E","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"epäluku","timeSeparator":"."},"decimalFormats-numberSystem-latn":{"standard":"#,##0.###","long":{"decimalFormat":{"1000-count-one":"0 tuhat","1000-count-other":"0 tuhatta","10000-count-one":"00 tuhatta","10000-count-other":"00 tuhatta","100000-count-one":"000 tuhatta","100000-count-other":"000 tuhatta","1000000-count-one":"0 miljoona","1000000-count-other":"0 miljoonaa","10000000-count-one":"00 miljoonaa","10000000-count-other":"00 miljoonaa","100000000-count-one":"000 miljoonaa","100000000-count-other":"000 miljoonaa","1000000000-count-one":"0 miljardi","1000000000-count-other":"0 miljardia","10000000000-count-one":"00 miljardia","10000000000-count-other":"00 miljardia","100000000000-count-one":"000 miljardia","100000000000-count-other":"000 miljardia","1000000000000-count-one":"0 biljoona","1000000000000-count-other":"0 biljoonaa","10000000000000-count-one":"00 biljoonaa","10000000000000-count-other":"00 biljoonaa","100000000000000-count-one":"000 biljoonaa","100000000000000-count-other":"000 biljoonaa"}},"short":{"decimalFormat":{"1000-count-one":"0 t'.'","1000-count-other":"0 t'.'","10000-count-one":"00 t'.'","10000-count-other":"00 t'.'","100000-count-one":"000 t'.'","100000-count-other":"000 t'.'","1000000-count-one":"0 milj'.'","1000000-count-other":"0 milj'.'","10000000-count-one":"00 milj'.'","10000000-count-other":"00 milj'.'","100000000-count-one":"000 milj'.'","100000000-count-other":"000 milj'.'","1000000000-count-one":"0 mrd'.'","1000000000-count-other":"0 mrd'.'","10000000000-count-one":"00 mrd'.'","10000000000-count-other":"00 mrd'.'","100000000000-count-one":"000 mrd'.'","100000000000-count-other":"000 mrd'.'","1000000000000-count-one":"0 bilj'.'","1000000000000-count-other":"0 bilj'.'","10000000000000-count-one":"00 bilj'.'","10000000000000-count-other":"00 bilj'.'","100000000000000-count-one":"000 bilj'.'","100000000000000-count-other":"000 bilj'.'"}}},"scientificFormats-numberSystem-latn":{"standard":"#E0"},"percentFormats-numberSystem-latn":{"standard":"#,##0 %"},"currencyFormats-numberSystem-latn":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"#,##0.00 ¤","accounting":"#,##0.00 ¤","short":{"standard":{"1000-count-one":"0 t'.' ¤","1000-count-other":"0 t'.' ¤","10000-count-one":"00 t'.' ¤","10000-count-other":"00 t'.' ¤","100000-count-one":"000 t'.' ¤","100000-count-other":"000 t'.' ¤","1000000-count-one":"0 milj'.' ¤","1000000-count-other":"0 milj'.' ¤","10000000-count-one":"00 milj'.' ¤","10000000-count-other":"00 milj'.' ¤","100000000-count-one":"000 milj'.' ¤","100000000-count-other":"000 milj'.' ¤","1000000000-count-one":"0 mrd'.' ¤","1000000000-count-other":"0 mrd'.' ¤","10000000000-count-one":"00 mrd'.' ¤","10000000000-count-other":"00 mrd'.' ¤","100000000000-count-one":"000 mrd'.' ¤","100000000000-count-other":"000 mrd'.' ¤","1000000000000-count-one":"0 bilj'.' ¤","1000000000000-count-other":"0 bilj'.' ¤","10000000000000-count-one":"00 bilj'.' ¤","10000000000000-count-other":"00 bilj'.' ¤","100000000000000-count-one":"000 bilj'.' ¤","100000000000000-count-other":"000 bilj'.' ¤"}},"unitPattern-count-one":"{0} {1}","unitPattern-count-other":"{0} {1}"},"miscPatterns-numberSystem-latn":{"atLeast":"vähintään {0}","range":"{0}–{1}"},"minimalPairs":{"pluralMinimalPairs-count-one":"{0} päivä","pluralMinimalPairs-count-other":"{0} päivää","other":"Käänny {0}. risteyksestä oikealle."}}},"hi":{"identity":{"version":{"_number":"$Revision: 13686 $","_cldrVersion":"32"},"language":"hi"},"dates":{"calendars":{"gregorian":{"months":{"format":{"abbreviated":{"1":"जन॰","2":"फ़र॰","3":"मार्च","4":"अप्रैल","5":"मई","6":"जून","7":"जुल॰","8":"अग॰","9":"सित॰","10":"अक्तू॰","11":"नव॰","12":"दिस॰"},"narrow":{"1":"ज","2":"फ़","3":"मा","4":"अ","5":"म","6":"जू","7":"जु","8":"अ","9":"सि","10":"अ","11":"न","12":"दि"},"wide":{"1":"जनवरी","2":"फ़रवरी","3":"मार्च","4":"अप्रैल","5":"मई","6":"जून","7":"जुलाई","8":"अगस्त","9":"सितंबर","10":"अक्तूबर","11":"नवंबर","12":"दिसंबर"}},"stand-alone":{"abbreviated":{"1":"जन॰","2":"फ़र॰","3":"मार्च","4":"अप्रैल","5":"मई","6":"जून","7":"जुल॰","8":"अग॰","9":"सित॰","10":"अक्तू॰","11":"नव॰","12":"दिस॰"},"narrow":{"1":"ज","2":"फ़","3":"मा","4":"अ","5":"म","6":"जू","7":"जु","8":"अ","9":"सि","10":"अ","11":"न","12":"दि"},"wide":{"1":"जनवरी","2":"फ़रवरी","3":"मार्च","4":"अप्रैल","5":"मई","6":"जून","7":"जुलाई","8":"अगस्त","9":"सितंबर","10":"अक्तूबर","11":"नवंबर","12":"दिसंबर"}}},"days":{"format":{"abbreviated":{"sun":"रवि","mon":"सोम","tue":"मंगल","wed":"बुध","thu":"गुरु","fri":"शुक्र","sat":"शनि"},"narrow":{"sun":"र","mon":"सो","tue":"मं","wed":"बु","thu":"गु","fri":"शु","sat":"श"},"short":{"sun":"र","mon":"सो","tue":"मं","wed":"बु","thu":"गु","fri":"शु","sat":"श"},"wide":{"sun":"रविवार","mon":"सोमवार","tue":"मंगलवार","wed":"बुधवार","thu":"गुरुवार","fri":"शुक्रवार","sat":"शनिवार"}},"stand-alone":{"abbreviated":{"sun":"रवि","mon":"सोम","tue":"मंगल","wed":"बुध","thu":"गुरु","fri":"शुक्र","sat":"शनि"},"narrow":{"sun":"र","mon":"सो","tue":"मं","wed":"बु","thu":"गु","fri":"शु","sat":"श"},"short":{"sun":"र","mon":"सो","tue":"मं","wed":"बु","thu":"गु","fri":"शु","sat":"श"},"wide":{"sun":"रविवार","mon":"सोमवार","tue":"मंगलवार","wed":"बुधवार","thu":"गुरुवार","fri":"शुक्रवार","sat":"शनिवार"}}},"quarters":{"format":{"abbreviated":{"1":"ति1","2":"ति2","3":"ति3","4":"ति4"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"पहली तिमाही","2":"दूसरी तिमाही","3":"तीसरी तिमाही","4":"चौथी तिमाही"}},"stand-alone":{"abbreviated":{"1":"ति1","2":"ति2","3":"ति3","4":"ति4"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"पहली तिमाही","2":"दूसरी तिमाही","3":"तीसरी तिमाही","4":"चौथी तिमाही"}}},"dayPeriods":{"format":{"abbreviated":{"midnight":"मध्यरात्रि","am":"पूर्वाह्न","pm":"अपराह्न","morning1":"सुबह","afternoon1":"अपराह्न","evening1":"शाम","night1":"रात"},"narrow":{"midnight":"मध्यरात्रि","am":"पू","pm":"अ","morning1":"सुबह","afternoon1":"अपराह्न","evening1":"शाम","night1":"रात"},"wide":{"midnight":"मध्यरात्रि","am":"पूर्वाह्न","pm":"अपराह्न","morning1":"सुबह","afternoon1":"अपराह्न","evening1":"शाम","night1":"रात"}},"stand-alone":{"abbreviated":{"midnight":"मध्यरात्रि","am":"पूर्वाह्न","pm":"अपराह्न","morning1":"सुबह","afternoon1":"दोपहर","evening1":"शाम","night1":"रात"},"narrow":{"midnight":"आधी रात","am":"पू","pm":"अ","morning1":"सुबह","afternoon1":"अपराह्न","evening1":"शाम","night1":"रात"},"wide":{"midnight":"मध्यरात्रि","am":"पूर्वाह्न","pm":"अपराह्न","morning1":"सुबह","afternoon1":"दोपहर","evening1":"शाम","night1":"रात"}}},"eras":{"eraNames":{"0":"ईसा-पूर्व","1":"ईसवी सन","0-alt-variant":"ईसवी पूर्व","1-alt-variant":"ईसवी"},"eraAbbr":{"0":"ईसा-पूर्व","1":"ईस्वी","0-alt-variant":"ईसवी पूर्व","1-alt-variant":"ईसवी"},"eraNarrow":{"0":"ईसा-पूर्व","1":"ईस्वी","0-alt-variant":"ईसवी पूर्व","1-alt-variant":"ईसवी"}},"dateFormats":{"full":"EEEE, d MMMM y","long":"d MMMM y","medium":"d MMM y","short":"d/M/yy"},"timeFormats":{"full":"h:mm:ss a zzzz","long":"h:mm:ss a z","medium":"h:mm:ss a","short":"h:mm a"},"dateTimeFormats":{"full":"{1} को {0}","long":"{1} को {0}","medium":"{1}, {0}","short":"{1}, {0}","availableFormats":{"Bh":"B h","Bhm":"B h:mm","Bhms":"B h:mm:ss","d":"d","E":"ccc","EBhm":"E B h:mm","EBhms":"E B h:mm:ss","Ed":"E d","Ehm":"E h:mm a","EHm":"E HH:mm","Ehms":"E h:mm:ss a","EHms":"E HH:mm:ss","Gy":"y G","GyMMM":"MMM G y","GyMMMd":"d MMM y G","GyMMMEd":"E, d MMM y G","h":"h a","H":"HH","hm":"h:mm a","Hm":"HH:mm","hms":"h:mm:ss a","Hms":"HH:mm:ss","hmsv":"h:mm:ss a v","Hmsv":"HH:mm:ss v","hmv":"h:mm a v","Hmv":"HH:mm v","M":"L","Md":"d/M","MEd":"E, d/M","MMdd":"dd/MM","MMM":"LLL","MMMd":"d MMM","MMMEd":"E, d MMM","MMMMd":"d MMMM","MMMMEd":"E, d MMMM","MMMMW-count-one":"MMM का सप्ताह W","MMMMW-count-other":"MMM का सप्ताह W","ms":"mm:ss","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"E, d/M/y","yMM":"MM/y","yMMdd":"dd/MM/y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"E, d MMM y","yMMMM":"MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","yw-count-one":"Y का सप्ताह w","yw-count-other":"Y का सप्ताह w"},"appendItems":{"Day":"{0} ({2}: {1})","Day-Of-Week":"{0} {1}","Era":"{1} {0}","Hour":"{0} ({2}: {1})","Minute":"{0} ({2}: {1})","Month":"{0} ({2}: {1})","Quarter":"{0} ({2}: {1})","Second":"{0} ({2}: {1})","Timezone":"{0} {1}","Week":"{0} ({2}: {1})","Year":"{1} {0}"},"intervalFormats":{"intervalFormatFallback":"{0} – {1}","d":{"d":"d–d"},"h":{"a":"h a – h a","h":"h–h a"},"H":{"H":"HH–HH"},"hm":{"a":"h:mm a – h:mm a","h":"h:mm–h:mm a","m":"h:mm–h:mm a"},"Hm":{"H":"HH:mm–HH:mm","m":"HH:mm–HH:mm"},"hmv":{"a":"h:mm a – h:mm a v","h":"h:mm–h:mm a v","m":"h:mm–h:mm a v"},"Hmv":{"H":"HH:mm–HH:mm v","m":"HH:mm–HH:mm v"},"hv":{"a":"h a – h a v","h":"h–h a v"},"Hv":{"H":"HH–HH v"},"M":{"M":"M–M"},"Md":{"d":"d/M – d/M","M":"d/M – d/M"},"MEd":{"d":"E, d/M – E, d/M","M":"E, d/M – E, d/M"},"MMM":{"M":"MMM–MMM"},"MMMd":{"d":"d MMM–d","M":"d MMM – d MMM"},"MMMEd":{"d":"E, d MMM – E, d MMM","M":"E, d MMM – E, d MMM"},"y":{"y":"y–y"},"yM":{"M":"M/y – M/y","y":"M/y – M/y"},"yMd":{"d":"d/M/y – d/M/y","M":"d/M/y – d/M/y","y":"d/M/y – d/M/y"},"yMEd":{"d":"E, d/M/y – E, d/M/y","M":"E, d/M/y – E, d/M/y","y":"E, d/M/y – E, d/M/y"},"yMMM":{"M":"MMM–MMM y","y":"MMM y – MMM y"},"yMMMd":{"d":"d–d MMM y","M":"d MMM – d MMM y","y":"d MMM y – d MMM y"},"yMMMEd":{"d":"E, d MMM – E, d MMM y","M":"E, d MMM – E, d MMM y","y":"E, d MMM y – E, d MMM y"},"yMMMM":{"M":"MMMM – MMMM y","y":"MMMM y – MMMM y"}}}}},"fields":{"era":{"displayName":"युग"},"era-short":{"displayName":"युग"},"era-narrow":{"displayName":"युग"},"year":{"displayName":"वर्ष","relative-type--1":"पिछला वर्ष","relative-type-0":"इस वर्ष","relative-type-1":"अगला वर्ष","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} वर्ष में","relativeTimePattern-count-other":"{0} वर्ष में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} वर्ष पहले","relativeTimePattern-count-other":"{0} वर्ष पहले"}},"year-short":{"displayName":"वर्ष","relative-type--1":"पिछला वर्ष","relative-type-0":"इस वर्ष","relative-type-1":"अगला वर्ष","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} वर्ष में","relativeTimePattern-count-other":"{0} वर्ष में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} वर्ष पहले","relativeTimePattern-count-other":"{0} वर्ष पहले"}},"year-narrow":{"displayName":"वर्ष","relative-type--1":"पिछला वर्ष","relative-type-0":"इस वर्ष","relative-type-1":"अगला वर्ष","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} वर्ष में","relativeTimePattern-count-other":"{0} वर्ष में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} वर्ष पहले","relativeTimePattern-count-other":"{0} वर्ष पहले"}},"quarter":{"displayName":"तिमाही","relative-type--1":"अंतिम तिमाही","relative-type-0":"इस तिमाही","relative-type-1":"अगली तिमाही","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} तिमाही में","relativeTimePattern-count-other":"{0} तिमाहियों में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} तिमाही पहले","relativeTimePattern-count-other":"{0} तिमाही पहले"}},"quarter-short":{"displayName":"तिमाही","relative-type--1":"अंतिम तिमाही","relative-type-0":"इस तिमाही","relative-type-1":"अगली तिमाही","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} तिमाही में","relativeTimePattern-count-other":"{0} तिमाहियों में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} तिमाही पहले","relativeTimePattern-count-other":"{0} तिमाहियों पहले"}},"quarter-narrow":{"displayName":"तिमाही","relative-type--1":"अंतिम तिमाही","relative-type-0":"इस तिमाही","relative-type-1":"अगली तिमाही","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} ति॰ में","relativeTimePattern-count-other":"{0} ति॰ में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ति॰ पहले","relativeTimePattern-count-other":"{0} ति॰ पहले"}},"month":{"displayName":"माह","relative-type--1":"पिछला माह","relative-type-0":"इस माह","relative-type-1":"अगला माह","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} माह में","relativeTimePattern-count-other":"{0} माह में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} माह पहले","relativeTimePattern-count-other":"{0} माह पहले"}},"month-short":{"displayName":"माह","relative-type--1":"पिछला माह","relative-type-0":"इस माह","relative-type-1":"अगला माह","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} माह में","relativeTimePattern-count-other":"{0} माह में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} माह पहले","relativeTimePattern-count-other":"{0} माह पहले"}},"month-narrow":{"displayName":"माह","relative-type--1":"पिछला माह","relative-type-0":"इस माह","relative-type-1":"अगला माह","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} माह में","relativeTimePattern-count-other":"{0} माह में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} माह पहले","relativeTimePattern-count-other":"{0} माह पहले"}},"week":{"displayName":"सप्ताह","relative-type--1":"पिछला सप्ताह","relative-type-0":"इस सप्ताह","relative-type-1":"अगला सप्ताह","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} सप्ताह में","relativeTimePattern-count-other":"{0} सप्ताह में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} सप्ताह पहले","relativeTimePattern-count-other":"{0} सप्ताह पहले"},"relativePeriod":"{0} के सप्ताह"},"week-short":{"displayName":"सप्ताह","relative-type--1":"पिछला सप्ताह","relative-type-0":"इस सप्ताह","relative-type-1":"अगला सप्ताह","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} सप्ताह में","relativeTimePattern-count-other":"{0} सप्ताह में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} सप्ताह पहले","relativeTimePattern-count-other":"{0} सप्ताह पहले"},"relativePeriod":"{0} के सप्ताह"},"week-narrow":{"displayName":"सप्ताह","relative-type--1":"पिछला सप्ताह","relative-type-0":"इस सप्ताह","relative-type-1":"अगला सप्ताह","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} सप्ताह में","relativeTimePattern-count-other":"{0} सप्ताह में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} सप्ताह पहले","relativeTimePattern-count-other":"{0} सप्ताह पहले"},"relativePeriod":"{0} के सप्ताह"},"weekOfMonth":{"displayName":"माह का सप्ताह"},"weekOfMonth-short":{"displayName":"माह का सप्ताह"},"weekOfMonth-narrow":{"displayName":"माह का सप्ताह"},"day":{"displayName":"दिन","relative-type--2":"परसों","relative-type--1":"कल","relative-type-0":"आज","relative-type-1":"कल","relative-type-2":"परसों","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} दिन में","relativeTimePattern-count-other":"{0} दिन में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} दिन पहले","relativeTimePattern-count-other":"{0} दिन पहले"}},"day-short":{"displayName":"दिन","relative-type--2":"परसों","relative-type--1":"कल","relative-type-0":"आज","relative-type-1":"कल","relative-type-2":"परसों","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} दिन में","relativeTimePattern-count-other":"{0} दिन में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} दिन पहले","relativeTimePattern-count-other":"{0} दिन पहले"}},"day-narrow":{"displayName":"दिन","relative-type--2":"परसों","relative-type--1":"कल","relative-type-0":"आज","relative-type-1":"कल","relative-type-2":"परसों","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} दिन में","relativeTimePattern-count-other":"{0} दिन में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} दिन पहले","relativeTimePattern-count-other":"{0} दिन पहले"}},"dayOfYear":{"displayName":"वर्ष का दिन"},"dayOfYear-short":{"displayName":"वर्ष का दिन"},"dayOfYear-narrow":{"displayName":"वर्ष का दिन"},"weekday":{"displayName":"सप्ताह का दिन"},"weekday-short":{"displayName":"सप्ताह का दिन"},"weekday-narrow":{"displayName":"सप्ताह का दिन"},"weekdayOfMonth":{"displayName":"माह के कार्यदिवस"},"weekdayOfMonth-short":{"displayName":"माह के कार्यदिवस"},"weekdayOfMonth-narrow":{"displayName":"माह के कार्यदिवस"},"sun":{"relative-type--1":"पिछला रविवार","relative-type-0":"इस रविवार","relative-type-1":"अगला रविवार","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} रविवार में","relativeTimePattern-count-other":"{0} रविवार में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} रविवार पूर्व","relativeTimePattern-count-other":"{0} रविवार पूर्व"}},"sun-short":{"relative-type--1":"पिछला रवि॰","relative-type-0":"इस रवि॰","relative-type-1":"अगला रवि॰","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} रवि॰ में","relativeTimePattern-count-other":"{0} रवि॰ में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} रवि॰ पूर्व","relativeTimePattern-count-other":"{0} रवि॰ पूर्व"}},"sun-narrow":{"relative-type--1":"पिछला रवि॰","relative-type-0":"इस रवि॰","relative-type-1":"अगला रवि॰","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} रवि॰ में","relativeTimePattern-count-other":"{0} रवि॰ में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} रवि॰ पूर्व","relativeTimePattern-count-other":"{0} रवि॰ पूर्व"}},"mon":{"relative-type--1":"पिछला सोमवार","relative-type-0":"इस सोमवार","relative-type-1":"अगला सोमवार","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} सोमवार में","relativeTimePattern-count-other":"{0} सोमवार में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} सोमवार पूर्व","relativeTimePattern-count-other":"{0} सोमवार पूर्व"}},"mon-short":{"relative-type--1":"पिछला सोम॰","relative-type-0":"इस सोम॰","relative-type-1":"अगला सोम॰","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} सोम॰ में","relativeTimePattern-count-other":"{0} सोम॰ में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} सोम॰ पूर्व","relativeTimePattern-count-other":"{0} सोम॰ पूर्व"}},"mon-narrow":{"relative-type--1":"पिछला सोम॰","relative-type-0":"इस सोम॰","relative-type-1":"अगला सोम॰","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} सोम॰ में","relativeTimePattern-count-other":"{0} सोम॰ में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} सोम॰ पूर्व","relativeTimePattern-count-other":"{0} सोम॰ पूर्व"}},"tue":{"relative-type--1":"पिछला मंगलवार","relative-type-0":"इस मंगलवार","relative-type-1":"अगला मंगलवार","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} मंगलवार में","relativeTimePattern-count-other":"{0} मंगलवार में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} मंगलवार पूर्व","relativeTimePattern-count-other":"{0} मंगलवार पूर्व"}},"tue-short":{"relative-type--1":"पिछला मंगल॰","relative-type-0":"इस मंगल॰","relative-type-1":"अगला मंगल॰","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} मंगल॰ में","relativeTimePattern-count-other":"{0} मंगल॰ में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} मंगल॰ पूर्व","relativeTimePattern-count-other":"{0} मंगल॰ पूर्व"}},"tue-narrow":{"relative-type--1":"पिछला मंगल॰","relative-type-0":"इस मंगल॰","relative-type-1":"अगला मंगल॰","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} मंगल॰ में","relativeTimePattern-count-other":"{0} मंगल॰ में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} मंगल॰ पूर्व","relativeTimePattern-count-other":"{0} मंगल॰ पूर्व"}},"wed":{"relative-type--1":"पिछला बुधवार","relative-type-0":"इस बुधवार","relative-type-1":"अगला बुधवार","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} बुधवार में","relativeTimePattern-count-other":"{0} बुधवार में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} बुधवार पूर्व","relativeTimePattern-count-other":"{0} बुधवार पूर्व"}},"wed-short":{"relative-type--1":"पिछला बुध॰","relative-type-0":"इस बुध॰","relative-type-1":"अगला बुध॰","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} बुध॰ में","relativeTimePattern-count-other":"{0} बुध॰ में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} बुध॰ पूर्व","relativeTimePattern-count-other":"{0} बुध॰ पूर्व"}},"wed-narrow":{"relative-type--1":"पिछला बुध॰","relative-type-0":"इस बुध॰","relative-type-1":"अगला बुध॰","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} बुध॰ में","relativeTimePattern-count-other":"{0} बुध॰ में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} बुध॰ पूर्व","relativeTimePattern-count-other":"{0} बुध॰ पूर्व"}},"thu":{"relative-type--1":"पिछला गुरुवार","relative-type-0":"इस गुरुवार","relative-type-1":"अगला गुरुवार","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} गुरुवार में","relativeTimePattern-count-other":"{0} गुरुवार में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} गुरुवार पूर्व","relativeTimePattern-count-other":"{0} गुरुवार पूर्व"}},"thu-short":{"relative-type--1":"पिछला गुरु॰","relative-type-0":"इस गुरु॰","relative-type-1":"अगला गुरु॰","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} गुरु॰ में","relativeTimePattern-count-other":"{0} गुरु॰ में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} गुरु॰ पूर्व","relativeTimePattern-count-other":"{0} गुरु॰ पूर्व"}},"thu-narrow":{"relative-type--1":"पिछला गुरु॰","relative-type-0":"इस गुरु॰","relative-type-1":"अगला गुरु॰","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} गुरु॰ में","relativeTimePattern-count-other":"{0} गुरु॰ में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} गुरु॰ पूर्व","relativeTimePattern-count-other":"{0} गुरु॰ पूर्व"}},"fri":{"relative-type--1":"पिछला शुक्रवार","relative-type-0":"इस शुक्रवार","relative-type-1":"अगला शुक्रवार","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} शुक्रवार में","relativeTimePattern-count-other":"{0} शुक्रवार में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} शुक्रवार पूर्व","relativeTimePattern-count-other":"{0} शुक्रवार पूर्व"}},"fri-short":{"relative-type--1":"पिछला शुक्र॰","relative-type-0":"इस शुक्र॰","relative-type-1":"अगला शुक्र॰","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} शुक्र॰ में","relativeTimePattern-count-other":"{0} शुक्र॰ में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} शुक्र॰ पूर्व","relativeTimePattern-count-other":"{0} शुक्र॰ पूर्व"}},"fri-narrow":{"relative-type--1":"पिछला शुक्र॰","relative-type-0":"इस शुक्र॰","relative-type-1":"अगला शुक्र॰","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} शुक्र॰ में","relativeTimePattern-count-other":"{0} शुक्र॰ में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} शुक्र॰ पूर्व","relativeTimePattern-count-other":"{0} शुक्र॰ पूर्व"}},"sat":{"relative-type--1":"पिछला शनिवार","relative-type-0":"इस शनिवार","relative-type-1":"अगला शनिवार","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} शनिवार में","relativeTimePattern-count-other":"{0} शनिवार में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} शनिवार पूर्व","relativeTimePattern-count-other":"{0} शनिवार पूर्व"}},"sat-short":{"relative-type--1":"पिछला शनि॰","relative-type-0":"इस शनि॰","relative-type-1":"अगला शनि॰","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} शनि॰ में","relativeTimePattern-count-other":"{0} शनि॰ में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} शनि॰ पूर्व","relativeTimePattern-count-other":"{0} शनि॰ पूर्व"}},"sat-narrow":{"relative-type--1":"पिछला शनि॰","relative-type-0":"इस शनि॰","relative-type-1":"अगला शनि॰","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} शनि॰ में","relativeTimePattern-count-other":"{0} शनि॰ में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} शनि॰ पूर्व","relativeTimePattern-count-other":"{0} शनि॰ पूर्व"}},"dayperiod-short":{"displayName":"पू/अ"},"dayperiod":{"displayName":"पूर्वाह्न/अपराह्न"},"dayperiod-narrow":{"displayName":"पू/अ"},"hour":{"displayName":"घंटा","relative-type-0":"यह घंटा","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} घंटे में","relativeTimePattern-count-other":"{0} घंटे में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} घंटे पहले","relativeTimePattern-count-other":"{0} घंटे पहले"}},"hour-short":{"displayName":"घं॰","relative-type-0":"यह घंटा","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} घं॰ में","relativeTimePattern-count-other":"{0} घं॰ में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} घं॰ पहले","relativeTimePattern-count-other":"{0} घं॰ पहले"}},"hour-narrow":{"displayName":"घं॰","relative-type-0":"यह घंटा","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} घं॰ में","relativeTimePattern-count-other":"{0} घं॰ में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} घं॰ पहले","relativeTimePattern-count-other":"{0} घं॰ पहले"}},"minute":{"displayName":"मिनट","relative-type-0":"यह मिनट","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} मिनट में","relativeTimePattern-count-other":"{0} मिनट में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} मिनट पहले","relativeTimePattern-count-other":"{0} मिनट पहले"}},"minute-short":{"displayName":"मि॰","relative-type-0":"यह मिनट","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} मि॰ में","relativeTimePattern-count-other":"{0} मि॰ में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} मि॰ पहले","relativeTimePattern-count-other":"{0} मि॰ पहले"}},"minute-narrow":{"displayName":"मि॰","relative-type-0":"यह मिनट","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} मि॰ में","relativeTimePattern-count-other":"{0} मि॰ में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} मि॰ पहले","relativeTimePattern-count-other":"{0} मि॰ पहले"}},"second":{"displayName":"सेकंड","relative-type-0":"अब","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} सेकंड में","relativeTimePattern-count-other":"{0} सेकंड में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} सेकंड पहले","relativeTimePattern-count-other":"{0} सेकंड पहले"}},"second-short":{"displayName":"से॰","relative-type-0":"अब","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} से॰ में","relativeTimePattern-count-other":"{0} से॰ में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} से॰ पहले","relativeTimePattern-count-other":"{0} से॰ पहले"}},"second-narrow":{"displayName":"से॰","relative-type-0":"अब","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} से॰ में","relativeTimePattern-count-other":"{0} से॰ में"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} से॰ पहले","relativeTimePattern-count-other":"{0} से॰ पहले"}},"zone":{"displayName":"समय क्षेत्र"},"zone-short":{"displayName":"क्षेत्र"},"zone-narrow":{"displayName":"क्षेत्र"}}},"numbers":{"currencies":{"ADP":{"displayName":"ADP","symbol":"ADP"},"AED":{"displayName":"संयुक्त अरब अमीरात दिरहाम","displayName-count-one":"संयुक्त अरब अमीरात दिरहाम","displayName-count-other":"संयुक्त अरब अमीरात दिरहाम","symbol":"AED"},"AFA":{"displayName":"अफगानी (1927–2002)","symbol":"AFA"},"AFN":{"displayName":"अफ़गान अफ़गानी","displayName-count-one":"अफ़गान अफ़गानी","displayName-count-other":"अफ़गान अफ़गानी","symbol":"AFN"},"ALK":{"displayName":"ALK","symbol":"ALK"},"ALL":{"displayName":"अल्बानियाई लेक","displayName-count-one":"अल्बानियाई लेक","displayName-count-other":"अल्बानियाई लेक","symbol":"ALL"},"AMD":{"displayName":"आर्मेनियाई द्राम","displayName-count-one":"आर्मेनियाई द्राम","displayName-count-other":"आर्मेनियाई द्राम","symbol":"AMD"},"ANG":{"displayName":"नीदरलैंड एंटीलियन गिल्डर","displayName-count-one":"नीदरलैंड एंटीलियन गिल्डर","displayName-count-other":"नीदरलैंड एंटीलियन गिल्डर","symbol":"ANG"},"AOA":{"displayName":"अंगोला क्वांज़ा","displayName-count-one":"अंगोला क्वांज़ा","displayName-count-other":"अंगोला क्वांज़ा","symbol":"AOA","symbol-alt-narrow":"Kz"},"AOK":{"displayName":"AOK","symbol":"AOK"},"AON":{"displayName":"AON","symbol":"AON"},"AOR":{"displayName":"AOR","symbol":"AOR"},"ARA":{"displayName":"ARA","symbol":"ARA"},"ARL":{"displayName":"ARL","symbol":"ARL"},"ARM":{"displayName":"ARM","symbol":"ARM"},"ARP":{"displayName":"ARP","symbol":"ARP"},"ARS":{"displayName":"अर्जेंटीनी पेसो","displayName-count-one":"अर्जेंटीनी पेसो","displayName-count-other":"अर्जेंटीनी पेसो","symbol":"ARS","symbol-alt-narrow":"$"},"ATS":{"displayName":"ATS","symbol":"ATS"},"AUD":{"displayName":"ऑस्ट्रेलियाई डॉलर","displayName-count-one":"ऑस्ट्रेलियाई डॉलर","displayName-count-other":"ऑस्ट्रेलियाई डॉलर","symbol":"A$","symbol-alt-narrow":"$"},"AWG":{"displayName":"अरूबाई फ़्लोरिन","displayName-count-one":"अरूबाई फ़्लोरिन","displayName-count-other":"अरूबाई फ़्लोरिन","symbol":"AWG"},"AZM":{"displayName":"AZM","symbol":"AZM"},"AZN":{"displayName":"अज़रबैजानी मैनेट","displayName-count-one":"अज़रबैजानी मैनेट","displayName-count-other":"अज़रबैजानी मैनेट","symbol":"AZN"},"BAD":{"displayName":"BAD","symbol":"BAD"},"BAM":{"displayName":"बोस्निया हर्ज़ेगोविना परिवर्तनीय मार्क","displayName-count-one":"बोस्निया हर्ज़ेगोविना परिवर्तनीय मार्क","displayName-count-other":"बोस्निया हर्ज़ेगोविना परिवर्तनीय मार्क","symbol":"BAM","symbol-alt-narrow":"KM"},"BAN":{"displayName":"BAN","symbol":"BAN"},"BBD":{"displayName":"बार्बेडियन डॉलर","displayName-count-one":"बार्बेडियन डॉलर","displayName-count-other":"बार्बेडियन डॉलर","symbol":"BBD","symbol-alt-narrow":"$"},"BDT":{"displayName":"बांग्लादेशी टका","displayName-count-one":"बांग्लादेशी टका","displayName-count-other":"बांग्लादेशी टका","symbol":"BDT","symbol-alt-narrow":"৳"},"BEC":{"displayName":"BEC","symbol":"BEC"},"BEF":{"displayName":"BEF","symbol":"BEF"},"BEL":{"displayName":"BEL","symbol":"BEL"},"BGL":{"displayName":"BGL","symbol":"BGL"},"BGM":{"displayName":"BGM","symbol":"BGM"},"BGN":{"displayName":"बुल्गारियाई लेव","displayName-count-one":"बुल्गारियाई लेव","displayName-count-other":"बुल्गारियाई लेव","symbol":"BGN"},"BGO":{"displayName":"BGO","symbol":"BGO"},"BHD":{"displayName":"बहरीनी दिनार","displayName-count-one":"बहरीनी दिनार","displayName-count-other":"बहरीनी दिनार","symbol":"BHD"},"BIF":{"displayName":"बुरूंडी फ़्रैंक","displayName-count-one":"बुरूंडी फ़्रैंक","displayName-count-other":"बुरूंडी फ़्रैंक","symbol":"BIF"},"BMD":{"displayName":"बरमूडा डॉलर","displayName-count-one":"बरमूडा डॉलर","displayName-count-other":"बरमूडा डॉलर","symbol":"BMD","symbol-alt-narrow":"$"},"BND":{"displayName":"ब्रूनेई डॉलर","displayName-count-one":"ब्रूनेई डॉलर","displayName-count-other":"ब्रूनेई डॉलर","symbol":"BND","symbol-alt-narrow":"$"},"BOB":{"displayName":"बोलिवियाई बोलिवियानो","displayName-count-one":"बोलिवियाई बोलिवियानो","displayName-count-other":"बोलिवियाई बोलिवियानो","symbol":"BOB","symbol-alt-narrow":"Bs"},"BOL":{"displayName":"BOL","symbol":"BOL"},"BOP":{"displayName":"BOP","symbol":"BOP"},"BOV":{"displayName":"BOV","symbol":"BOV"},"BRB":{"displayName":"BRB","symbol":"BRB"},"BRC":{"displayName":"BRC","symbol":"BRC"},"BRE":{"displayName":"BRE","symbol":"BRE"},"BRL":{"displayName":"ब्राज़ीली रियाल","displayName-count-one":"ब्राज़ीली रियाल","displayName-count-other":"ब्राज़ीली रियाल","symbol":"R$","symbol-alt-narrow":"R$"},"BRN":{"displayName":"BRN","symbol":"BRN"},"BRR":{"displayName":"BRR","symbol":"BRR"},"BRZ":{"displayName":"BRZ","symbol":"BRZ"},"BSD":{"displayName":"बहामाई डॉलर","displayName-count-one":"बहामाई डॉलर","displayName-count-other":"बहामाई डॉलर","symbol":"BSD","symbol-alt-narrow":"$"},"BTN":{"displayName":"भूटानी नंगलट्रम","displayName-count-one":"भूटानी नंगलट्रम","displayName-count-other":"भूटानी नंगलट्रम","symbol":"BTN"},"BUK":{"displayName":"BUK","symbol":"BUK"},"BWP":{"displayName":"बोत्सवानियाई पुला","displayName-count-one":"बोत्सवानियाई पुला","displayName-count-other":"बोत्सवानियाई पुला","symbol":"BWP","symbol-alt-narrow":"P"},"BYB":{"displayName":"BYB","symbol":"BYB"},"BYN":{"displayName":"बेलारूसी रूबल","displayName-count-one":"बेलारूसी रूबल","displayName-count-other":"बेलारूसी रूबल","symbol":"BYN","symbol-alt-narrow":"р."},"BYR":{"displayName":"बेलारूसी रूबल (2000–2016)","displayName-count-one":"बेलारूसी रूबल (2000–2016)","displayName-count-other":"बेलारूसी रूबल (2000–2016)","symbol":"BYR"},"BZD":{"displayName":"बेलीज़ डॉलर","displayName-count-one":"बेलीज़ डॉलर","displayName-count-other":"बेलीज़ डॉलर","symbol":"BZD","symbol-alt-narrow":"$"},"CAD":{"displayName":"कनाडाई डॉलर","displayName-count-one":"कनाडाई डॉलर","displayName-count-other":"कनाडाई डॉलर","symbol":"CA$","symbol-alt-narrow":"$"},"CDF":{"displayName":"कोंगोली फ़्रैंक","displayName-count-one":"कोंगोली फ़्रैंक","displayName-count-other":"कोंगोली फ़्रैंक","symbol":"CDF"},"CHE":{"displayName":"CHE","symbol":"CHE"},"CHF":{"displayName":"स्विस फ़्रैंक","displayName-count-one":"स्विस फ़्रैंक","displayName-count-other":"स्विस फ़्रैंक","symbol":"CHF"},"CHW":{"displayName":"CHW","symbol":"CHW"},"CLE":{"displayName":"CLE","symbol":"CLE"},"CLF":{"displayName":"CLF","symbol":"CLF"},"CLP":{"displayName":"चिली पेसो","displayName-count-one":"चिली पेसो","displayName-count-other":"चिली पेसो","symbol":"CLP","symbol-alt-narrow":"$"},"CNH":{"displayName":"चीनी यूआन","displayName-count-one":"चीनी यूआन","displayName-count-other":"चीनी यूआन","symbol":"CNH"},"CNX":{"displayName":"CNX","symbol":"CNX"},"CNY":{"displayName":"चीनी युआन","displayName-count-one":"चीनी युआन","displayName-count-other":"चीनी युआन","symbol":"CN¥","symbol-alt-narrow":"¥"},"COP":{"displayName":"कोलंबियाई पेसो","displayName-count-one":"कोलंबियाई पेसो","displayName-count-other":"कोलंबियाई पेसो","symbol":"COP","symbol-alt-narrow":"$"},"COU":{"displayName":"COU","symbol":"COU"},"CRC":{"displayName":"कोस्टा रिका कोलोन","displayName-count-one":"कोस्टा रिका कोलोन","displayName-count-other":"कोस्टा रिका कोलोन","symbol":"CRC","symbol-alt-narrow":"₡"},"CSD":{"displayName":"सर्बिय का ढीनार","symbol":"CSD"},"CSK":{"displayName":"CSK","symbol":"CSK"},"CUC":{"displayName":"क्यूबाई परिवर्तनीय पेसो","displayName-count-one":"क्यूबाई परिवर्तनीय पेसो","displayName-count-other":"क्यूबाई परिवर्तनीय पेसो","symbol":"CUC","symbol-alt-narrow":"$"},"CUP":{"displayName":"क्यूबाई पेसो","displayName-count-one":"क्यूबाई पेसो","displayName-count-other":"क्यूबाई पेसो","symbol":"CUP","symbol-alt-narrow":"$"},"CVE":{"displayName":"केप वर्ड एस्कूडो","displayName-count-one":"केप वर्ड एस्कूडो","displayName-count-other":"केप वर्ड एस्कूडो","symbol":"CVE"},"CYP":{"displayName":"साईप्रस पाऊंड","symbol":"CYP"},"CZK":{"displayName":"चेक गणराज्य कोरुना","displayName-count-one":"चेक गणराज्य कोरुना","displayName-count-other":"चेक गणराज्य कोरुना","symbol":"CZK","symbol-alt-narrow":"Kč"},"DDM":{"displayName":"DDM","symbol":"DDM"},"DEM":{"displayName":"डच मार्क","symbol":"DEM"},"DJF":{"displayName":"जिबूती फ़्रैंक","displayName-count-one":"जिबूती फ़्रैंक","displayName-count-other":"जिबूती फ़्रैंक","symbol":"DJF"},"DKK":{"displayName":"डैनिश क्रोन","displayName-count-one":"डैनिश क्रोन","displayName-count-other":"डैनिश क्रोन","symbol":"DKK","symbol-alt-narrow":"kr"},"DOP":{"displayName":"डोमिनिकन पेसो","displayName-count-one":"डोमिनिकन पेसो","displayName-count-other":"डोमिनिकन पेसो","symbol":"DOP","symbol-alt-narrow":"$"},"DZD":{"displayName":"अल्जीरियाई दिनार","displayName-count-one":"अल्जीरियाई दिनार","displayName-count-other":"अल्जीरियाई दिनार","symbol":"DZD"},"ECS":{"displayName":"ECS","symbol":"ECS"},"ECV":{"displayName":"ECV","symbol":"ECV"},"EEK":{"displayName":"एस्टोनियाई क्रून्","symbol":"EEK"},"EGP":{"displayName":"मिस्र पाउंड","displayName-count-one":"मिस्र पाउंड","displayName-count-other":"मिस्र पाउंड","symbol":"EGP","symbol-alt-narrow":"E£"},"ERN":{"displayName":"इरीट्रियन नाक्फ़ा","displayName-count-one":"इरीट्रियन नाक्फ़ा","displayName-count-other":"इरीट्रियन नाक्फ़ा","symbol":"ERN"},"ESA":{"displayName":"ESA","symbol":"ESA"},"ESB":{"displayName":"ESB","symbol":"ESB"},"ESP":{"displayName":"ESP","symbol":"ESP","symbol-alt-narrow":"₧"},"ETB":{"displayName":"इथियोपियन बिर","displayName-count-one":"इथियोपियन बिर","displayName-count-other":"इथियोपियन बिर","symbol":"ETB"},"EUR":{"displayName":"यूरो","displayName-count-one":"यूरो","displayName-count-other":"यूरो","symbol":"€","symbol-alt-narrow":"€"},"FIM":{"displayName":"FIM","symbol":"FIM"},"FJD":{"displayName":"फ़िजी डॉलर","displayName-count-one":"फ़िजी डॉलर","displayName-count-other":"फ़िजी डॉलर","symbol":"FJD","symbol-alt-narrow":"$"},"FKP":{"displayName":"फ़ॉकलैंड द्वीपसमूह पाउंड","displayName-count-one":"फ़ॉकलैंड द्वीपसमूह पाउंड","displayName-count-other":"फ़ॉकलैंड द्वीपसमूह पाउंड","symbol":"FKP","symbol-alt-narrow":"£"},"FRF":{"displayName":"फ़्रांसीसी फ़्रैंक","symbol":"FRF"},"GBP":{"displayName":"ब्रिटिश पाउंड स्टर्लिंग","displayName-count-one":"ब्रिटिश पाउंड स्टर्लिंग","displayName-count-other":"ब्रिटिश पाउंड स्टर्लिंग","symbol":"£","symbol-alt-narrow":"£"},"GEK":{"displayName":"GEK","symbol":"GEK"},"GEL":{"displayName":"जॉर्जियन लारी","displayName-count-one":"जॉर्जियन लारी","displayName-count-other":"जॉर्जियन लारी","symbol":"GEL","symbol-alt-narrow":"₾","symbol-alt-variant":"ლ"},"GHC":{"displayName":"GHC","symbol":"GHC"},"GHS":{"displayName":"घानियन सेडी","displayName-count-one":"घानियन सेडी","displayName-count-other":"घानियन सेडी","symbol":"GHS"},"GIP":{"displayName":"जिब्राल्टर पाउंड","displayName-count-one":"जिब्राल्टर पाउंड","displayName-count-other":"जिब्राल्टर पाउंड","symbol":"GIP","symbol-alt-narrow":"£"},"GMD":{"displayName":"गैंबियन डलासी","displayName-count-one":"गैंबियन डलासी","displayName-count-other":"गैंबियन डलासी","symbol":"GMD"},"GNF":{"displayName":"गिनीयन फ़्रैंक","displayName-count-one":"गिनीयन फ़्रैंक","displayName-count-other":"गिनीयन फ़्रैंक","symbol":"GNF","symbol-alt-narrow":"FG"},"GNS":{"displayName":"GNS","symbol":"GNS"},"GQE":{"displayName":"GQE","symbol":"GQE"},"GRD":{"displayName":"GRD","symbol":"GRD"},"GTQ":{"displayName":"ग्वाटेमाला क्वेटज़ल","displayName-count-one":"ग्वाटेमाला क्वेटज़ल","displayName-count-other":"ग्वाटेमाला क्वेटज़ल","symbol":"GTQ","symbol-alt-narrow":"Q"},"GWE":{"displayName":"GWE","symbol":"GWE"},"GWP":{"displayName":"GWP","symbol":"GWP"},"GYD":{"displayName":"गयानीज़ डॉलर","displayName-count-one":"गयानीज़ डॉलर","displayName-count-other":"गयानीज़ डॉलर","symbol":"GYD","symbol-alt-narrow":"$"},"HKD":{"displayName":"हाँगकाँग डॉलर","displayName-count-one":"हाँगकाँग डॉलर","displayName-count-other":"हाँगकाँग डॉलर","symbol":"HK$","symbol-alt-narrow":"$"},"HNL":{"displayName":"होंडुरन लेम्पिरा","displayName-count-one":"होंडुरन लेम्पिरा","displayName-count-other":"होंडुरन लेम्पिरा","symbol":"HNL","symbol-alt-narrow":"L"},"HRD":{"displayName":"क्रोएशियन दिनार","symbol":"HRD"},"HRK":{"displayName":"क्रोएशियाई कुना","displayName-count-one":"क्रोएशियाई कुना","displayName-count-other":"क्रोएशियाई कुना","symbol":"HRK","symbol-alt-narrow":"kn"},"HTG":{"displayName":"हैतियाई गर्ड","displayName-count-one":"हैतियाई गर्ड","displayName-count-other":"हैतियाई गर्ड","symbol":"HTG"},"HUF":{"displayName":"हंगेरियन फ़ोरिंट","displayName-count-one":"हंगेरियन फ़ोरिंट","displayName-count-other":"हंगेरियन फ़ोरिंट","symbol":"HUF","symbol-alt-narrow":"Ft"},"IDR":{"displayName":"इंडोनेशियाई रुपिया","displayName-count-one":"इंडोनेशियाई रुपिया","displayName-count-other":"इंडोनेशियाई रुपिये","symbol":"IDR","symbol-alt-narrow":"Rp"},"IEP":{"displayName":"IEP","symbol":"IEP"},"ILP":{"displayName":"ILP","symbol":"ILP"},"ILR":{"displayName":"ILR","symbol":"ILR"},"ILS":{"displayName":"इज़राइली न्यू शेकेल","displayName-count-one":"इज़राइली न्यू शेकेल","displayName-count-other":"इज़राइली न्यू शेकेल","symbol":"₪","symbol-alt-narrow":"₪"},"INR":{"displayName":"भारतीय रुपया","displayName-count-one":"भारतीय रुपया","displayName-count-other":"भारतीय रूपए","symbol":"₹","symbol-alt-narrow":"₹"},"IQD":{"displayName":"इराकी दिनार","displayName-count-one":"इराकी दिनार","displayName-count-other":"इराकी दिनार","symbol":"IQD"},"IRR":{"displayName":"ईरानी रियाल","displayName-count-one":"ईरानी रियाल","displayName-count-other":"ईरानी रियाल","symbol":"IRR"},"ISJ":{"displayName":"ISJ","symbol":"ISJ"},"ISK":{"displayName":"आइसलैंडिक क्रोना","displayName-count-one":"आइसलैंडिक क्रोना","displayName-count-other":"आइसलैंडिक क्रोना","symbol":"ISK","symbol-alt-narrow":"kr"},"ITL":{"displayName":"इतली का लीरा","symbol":"ITL"},"JMD":{"displayName":"जमैकन डॉलर","displayName-count-one":"जमैकन डॉलर","displayName-count-other":"जमैकन डॉलर","symbol":"JMD","symbol-alt-narrow":"$"},"JOD":{"displayName":"जॉर्डनियन दिनार","displayName-count-one":"जॉर्डनियन दिनार","displayName-count-other":"जॉर्डनियन दिनार","symbol":"JOD"},"JPY":{"displayName":"जापानी येन","displayName-count-one":"जापानी येन","displayName-count-other":"जापानी येन","symbol":"JP¥","symbol-alt-narrow":"¥"},"KES":{"displayName":"केन्याई शिलिंग","displayName-count-one":"केन्याई शिलिंग","displayName-count-other":"केन्याई शिलिंग","symbol":"KES"},"KGS":{"displayName":"किर्गिस्तानी सोम","displayName-count-one":"किर्गिस्तानी सोम","displayName-count-other":"किर्गिस्तानी सोम","symbol":"KGS"},"KHR":{"displayName":"कंबोडियाई रियाल","displayName-count-one":"कंबोडियाई रियाल","displayName-count-other":"कंबोडियाई रियाल","symbol":"KHR","symbol-alt-narrow":"៛"},"KMF":{"displayName":"कोमोरियन फ़्रैंक","displayName-count-one":"कोमोरियन फ़्रैंक","displayName-count-other":"कोमोरियन फ़्रैंक","symbol":"KMF","symbol-alt-narrow":"CF"},"KPW":{"displayName":"उत्तर कोरियाई वॉन","displayName-count-one":"उत्तर कोरियाई वॉन","displayName-count-other":"उत्तर कोरियाई वॉन","symbol":"KPW","symbol-alt-narrow":"₩"},"KRH":{"displayName":"KRH","symbol":"KRH"},"KRO":{"displayName":"KRO","symbol":"KRO"},"KRW":{"displayName":"दक्षिण कोरियाई वॉन","displayName-count-one":"दक्षिण कोरियाई वॉन","displayName-count-other":"दक्षिण कोरियाई वॉन","symbol":"₩","symbol-alt-narrow":"₩"},"KWD":{"displayName":"कुवैती दिनार","displayName-count-one":"कुवैती दिनार","displayName-count-other":"कुवैती दिनार","symbol":"KWD"},"KYD":{"displayName":"कैमेन द्वीपसमूह डॉलर","displayName-count-one":"कैमेन द्वीपसमूह डॉलर","displayName-count-other":"कैमेन द्वीपसमूह डॉलर","symbol":"KYD","symbol-alt-narrow":"$"},"KZT":{"displayName":"कज़ाखिस्तानी टेंज़","displayName-count-one":"कज़ाखिस्तानी टेंज़","displayName-count-other":"कज़ाखिस्तानी टेंज़","symbol":"KZT","symbol-alt-narrow":"₸"},"LAK":{"displayName":"लाओशियन किप","displayName-count-one":"लाओशियन किप","displayName-count-other":"लाओशियन किप","symbol":"LAK","symbol-alt-narrow":"₭"},"LBP":{"displayName":"लेबनानी पाउंड","displayName-count-one":"लेबनानी पाउंड","displayName-count-other":"लेबनानी पाउंड","symbol":"LBP","symbol-alt-narrow":"L£"},"LKR":{"displayName":"श्रीलंकाई रुपया","displayName-count-one":"श्रीलंकाई रुपया","displayName-count-other":"श्रीलंकाई रुपए","symbol":"LKR","symbol-alt-narrow":"Rs"},"LRD":{"displayName":"लाइबेरियाई डॉलर","displayName-count-one":"लाइबेरियाई डॉलर","displayName-count-other":"लाइबेरियाई डॉलर","symbol":"LRD","symbol-alt-narrow":"$"},"LSL":{"displayName":"लेसोथो लोटी","symbol":"LSL"},"LTL":{"displayName":"लिथुआनियाई लितास","displayName-count-one":"लिथुआनियाई लितास","displayName-count-other":"लिथुआनियाई लितास","symbol":"LTL","symbol-alt-narrow":"Lt"},"LTT":{"displayName":"LTT","symbol":"LTT"},"LUC":{"displayName":"LUC","symbol":"LUC"},"LUF":{"displayName":"LUF","symbol":"LUF"},"LUL":{"displayName":"LUL","symbol":"LUL"},"LVL":{"displayName":"लात्वियन लैत्स","displayName-count-one":"लात्वियन लैत्स","displayName-count-other":"लात्वियन लैत्स","symbol":"LVL","symbol-alt-narrow":"Ls"},"LVR":{"displayName":"LVR","symbol":"LVR"},"LYD":{"displayName":"लीबियाई दिनार","displayName-count-one":"लीबियाई दिनार","displayName-count-other":"लीबियाई दिनार","symbol":"LYD"},"MAD":{"displayName":"मोरक्को दिरहम","displayName-count-one":"मोरक्को दिरहम","displayName-count-other":"मोरक्को दिरहम","symbol":"MAD"},"MAF":{"displayName":"मोरक्को फ्रैंक","symbol":"MAF"},"MCF":{"displayName":"MCF","symbol":"MCF"},"MDC":{"displayName":"MDC","symbol":"MDC"},"MDL":{"displayName":"मोल्डोवन लियू","displayName-count-one":"मोल्डोवन लियू","displayName-count-other":"मोल्डोवन लियू","symbol":"MDL"},"MGA":{"displayName":"मालागासी आरियरी","displayName-count-one":"मालागासी आरियरी","displayName-count-other":"मालागासी आरियरी","symbol":"MGA","symbol-alt-narrow":"Ar"},"MGF":{"displayName":"MGF","symbol":"MGF"},"MKD":{"displayName":"मैसीडोनियन दिनार","displayName-count-one":"मैसीडोनियन दिनार","displayName-count-other":"मैसीडोनियन दिनार","symbol":"MKD"},"MKN":{"displayName":"MKN","symbol":"MKN"},"MLF":{"displayName":"MLF","symbol":"MLF"},"MMK":{"displayName":"म्यांमार क्याट","displayName-count-one":"म्यांमार क्याट","displayName-count-other":"म्यांमार क्याट","symbol":"MMK","symbol-alt-narrow":"K"},"MNT":{"displayName":"मंगोलियाई टगरिक","displayName-count-one":"मंगोलियाई टगरिक","displayName-count-other":"मंगोलियाई टगरिक","symbol":"MNT","symbol-alt-narrow":"₮"},"MOP":{"displayName":"मेकानीज़ पाटाका","displayName-count-one":"मेकानीज़ पाटाका","displayName-count-other":"मेकानीज़ पाटाका","symbol":"MOP"},"MRO":{"displayName":"मॉरीटेनियन ओगुइया","displayName-count-one":"मॉरीटेनियन ओगुइया","displayName-count-other":"मॉरीटेनियन ओगुइया","symbol":"MRO"},"MTL":{"displayName":"MTL","symbol":"MTL"},"MTP":{"displayName":"MTP","symbol":"MTP"},"MUR":{"displayName":"मॉरिशियन रुपया","displayName-count-one":"मॉरिशियन रुपया","displayName-count-other":"मॉरिशियन रुपया","symbol":"MUR","symbol-alt-narrow":"Rs"},"MVP":{"displayName":"MVP","symbol":"MVP"},"MVR":{"displayName":"मालदीवी रुफ़िया","displayName-count-one":"मालदीवी रुफ़िया","displayName-count-other":"मालदीवी रुफ़िया","symbol":"MVR"},"MWK":{"displayName":"मालावियन क्वाचा","displayName-count-one":"मालावियन क्वाचा","displayName-count-other":"मालावियन क्वाचा","symbol":"MWK"},"MXN":{"displayName":"मैक्सिकन पेसो","displayName-count-one":"मैक्सिकन पेसो","displayName-count-other":"मैक्सिकन पेसो","symbol":"MX$","symbol-alt-narrow":"$"},"MXP":{"displayName":"MXP","symbol":"MXP"},"MXV":{"displayName":"MXV","symbol":"MXV"},"MYR":{"displayName":"मलेशियाई रिंगित","displayName-count-one":"मलेशियाई रिंगित","displayName-count-other":"मलेशियाई रिंगित","symbol":"MYR","symbol-alt-narrow":"RM"},"MZE":{"displayName":"MZE","symbol":"MZE"},"MZM":{"displayName":"MZM","symbol":"MZM"},"MZN":{"displayName":"मोज़ाम्बिकन मेटिकल","displayName-count-one":"मोज़ाम्बिकन मेटिकल","displayName-count-other":"मोज़ाम्बिकन मेटिकल","symbol":"MZN"},"NAD":{"displayName":"नामीबियाई डॉलर","displayName-count-one":"नामीबियाई डॉलर","displayName-count-other":"नामीबियाई डॉलर","symbol":"NAD","symbol-alt-narrow":"$"},"NGN":{"displayName":"नाइजीरियाई नाइरा","displayName-count-one":"नाइजीरियाई नाइरा","displayName-count-other":"नाइजीरियाई नाइरा","symbol":"NGN","symbol-alt-narrow":"₦"},"NIC":{"displayName":"NIC","symbol":"NIC"},"NIO":{"displayName":"निकारागुअन कोरडोबा","displayName-count-one":"निकारागुअन कोरडोबा","displayName-count-other":"निकारागुअन कोरडोबा","symbol":"NIO","symbol-alt-narrow":"C$"},"NLG":{"displayName":"NLG","symbol":"NLG"},"NOK":{"displayName":"नॉर्वेजियन क्रोन","displayName-count-one":"नॉर्वेजियन क्रोन","displayName-count-other":"नॉर्वेजियन क्रोन","symbol":"NOK","symbol-alt-narrow":"kr"},"NPR":{"displayName":"नेपाली रुपया","displayName-count-one":"नेपाली रुपया","displayName-count-other":"नेपाली रुपए","symbol":"NPR","symbol-alt-narrow":"Rs"},"NZD":{"displayName":"न्यूज़ीलैंड डॉलर","displayName-count-one":"न्यूज़ीलैंड डॉलर","displayName-count-other":"न्यूज़ीलैंड डॉलर","symbol":"NZ$","symbol-alt-narrow":"$"},"OMR":{"displayName":"ओमानी रियाल","displayName-count-one":"ओमानी रियाल","displayName-count-other":"ओमानी रियाल","symbol":"OMR"},"PAB":{"displayName":"पनामेनियन बैल्बोआ","displayName-count-one":"पनामेनियन बैल्बोआ","displayName-count-other":"पनामेनियन बैल्बोआ","symbol":"PAB"},"PEI":{"displayName":"PEI","symbol":"PEI"},"PEN":{"displayName":"पेरूवियन सोल","displayName-count-one":"पेरूवियन सोल","displayName-count-other":"पेरूवियन सोल","symbol":"PEN"},"PES":{"displayName":"PES","symbol":"PES"},"PGK":{"displayName":"पापुआ न्यू गिनीयन किना","displayName-count-one":"पापुआ न्यू गिनीयन किना","displayName-count-other":"पापुआ न्यू गिनीयन किना","symbol":"PGK"},"PHP":{"displayName":"फ़िलिपीनी पेसो","displayName-count-one":"फ़िलिपीनी पेसो","displayName-count-other":"फ़िलिपीनी पेसो","symbol":"PHP","symbol-alt-narrow":"₱"},"PKR":{"displayName":"पाकिस्तानी रुपया","displayName-count-one":"पाकिस्तानी रुपया","displayName-count-other":"पाकिस्तानी रुपए","symbol":"PKR","symbol-alt-narrow":"Rs"},"PLN":{"displayName":"पोलिश ज़्लॉटी","displayName-count-one":"पोलिश ज़्लॉटी","displayName-count-other":"पोलिश ज़्लॉटी","symbol":"PLN","symbol-alt-narrow":"zł"},"PLZ":{"displayName":"PLZ","symbol":"PLZ"},"PTE":{"displayName":"PTE","symbol":"PTE"},"PYG":{"displayName":"पैराग्वियन गुआरानी","displayName-count-one":"पैराग्वियन गुआरानी","displayName-count-other":"पैराग्वियन गुआरानी","symbol":"PYG","symbol-alt-narrow":"₲"},"QAR":{"displayName":"क़तरी रियाल","displayName-count-one":"क़तरी रियाल","displayName-count-other":"क़तरी रियाल","symbol":"QAR"},"RHD":{"displayName":"रोडेशियाई डालर","symbol":"RHD"},"ROL":{"displayName":"ROL","symbol":"ROL"},"RON":{"displayName":"रोमानियाई ल्यू","displayName-count-one":"रोमानियाई ल्यू","displayName-count-other":"रोमानियाई ल्यू","symbol":"RON","symbol-alt-narrow":"लेई"},"RSD":{"displayName":"सर्बियन दिनार","displayName-count-one":"सर्बियन दिनार","displayName-count-other":"सर्बियन दिनार","symbol":"RSD"},"RUB":{"displayName":"रूसी रूबल","displayName-count-one":"रूसी रूबल","displayName-count-other":"रूसी रूबल","symbol":"RUB","symbol-alt-narrow":"₽"},"RUR":{"displayName":"RUR","symbol":"RUR","symbol-alt-narrow":"р."},"RWF":{"displayName":"रवांडाई फ़्रैंक","displayName-count-one":"रवांडाई फ़्रैंक","displayName-count-other":"रवांडाई फ़्रैंक","symbol":"RWF","symbol-alt-narrow":"RF"},"SAR":{"displayName":"सउदी रियाल","displayName-count-one":"सउदी रियाल","displayName-count-other":"सउदी रियाल","symbol":"SAR"},"SBD":{"displayName":"सोलोमन द्वीपसमूह डॉलर","displayName-count-one":"सोलोमन द्वीपसमूह डॉलर","displayName-count-other":"सोलोमन द्वीपसमूह डॉलर","symbol":"SBD","symbol-alt-narrow":"$"},"SCR":{"displayName":"सेशेल्सियाई रुपया","displayName-count-one":"सेशेल्सियाई रुपया","displayName-count-other":"सेशेल्सियाई रुपया","symbol":"SCR"},"SDD":{"displayName":"पुरानी सूडानी दिनार","symbol":"SDD"},"SDG":{"displayName":"सूडानी पाउंड","displayName-count-one":"सूडानी पाउंड","displayName-count-other":"सूडानी पाउंड","symbol":"SDG"},"SDP":{"displayName":"पुराना सूडानी पाउंड","symbol":"SDP"},"SEK":{"displayName":"स्वीडीश क्रोना","displayName-count-one":"स्वीडीश क्रोना","displayName-count-other":"स्वीडीश क्रोना","symbol":"SEK","symbol-alt-narrow":"kr"},"SGD":{"displayName":"सिंगापुर डॉलर","displayName-count-one":"सिंगापुर डॉलर","displayName-count-other":"सिंगापुर डॉलर","symbol":"SGD","symbol-alt-narrow":"$"},"SHP":{"displayName":"सेंट हेलेना पाउंड","displayName-count-one":"सेंट हेलेना पाउंड","displayName-count-other":"सेंट हेलेना पाउंड","symbol":"SHP","symbol-alt-narrow":"£"},"SIT":{"displayName":"स्लोवेनियाई तोलार","symbol":"SIT"},"SKK":{"displayName":"स्लोवाक कोरुना","symbol":"SKK"},"SLL":{"displayName":"सिएरा लियोनियन लियोन","displayName-count-one":"सिएरा लियोनियन लियोन","displayName-count-other":"सिएरा लियोनियन लियोन","symbol":"SLL"},"SOS":{"displayName":"सोमाली शिलिंग","displayName-count-one":"सोमाली शिलिंग","displayName-count-other":"सोमाली शिलिंग","symbol":"SOS"},"SRD":{"displayName":"सूरीनामी डॉलर","displayName-count-one":"सूरीनामी डॉलर","displayName-count-other":"सूरीनामी डॉलर","symbol":"SRD","symbol-alt-narrow":"$"},"SRG":{"displayName":"सूरीनामी गिल्डर","symbol":"SRG"},"SSP":{"displayName":"दक्षिण सूडानी पाउंड","displayName-count-one":"दक्षिण सूडानी पाउंड","displayName-count-other":"दक्षिण सूडानी पाउंड","symbol":"SSP","symbol-alt-narrow":"£"},"STD":{"displayName":"साओ तोम और प्रिंसिपे डोबरा","displayName-count-one":"साओ तोम और प्रिंसिपे डोबरा","displayName-count-other":"साओ तोम और प्रिंसिपे डोबरा","symbol":"STD","symbol-alt-narrow":"Db"},"STN":{"displayName":"STN","symbol":"STN"},"SUR":{"displayName":"सोवियत रूबल","symbol":"SUR"},"SVC":{"displayName":"SVC","symbol":"SVC"},"SYP":{"displayName":"सीरियाई पाउंड","displayName-count-one":"सीरियाई पाउंड","displayName-count-other":"सीरियाई पाउंड","symbol":"SYP","symbol-alt-narrow":"£"},"SZL":{"displayName":"स्वाज़ी लिलांजेनी","displayName-count-one":"स्वाज़ी लिलांजेनी","displayName-count-other":"स्वाज़ी लिलांजेनी","symbol":"SZL"},"THB":{"displayName":"थाई बहत","displayName-count-one":"थाई बहत","displayName-count-other":"थाई बहत","symbol":"฿","symbol-alt-narrow":"฿"},"TJR":{"displayName":"तजाखी रूबल","symbol":"TJR"},"TJS":{"displayName":"ताजिकिस्तानी सोमोनी","displayName-count-one":"ताजिकिस्तानी सोमोनी","displayName-count-other":"ताजिकिस्तानी सोमोनी","symbol":"TJS"},"TMM":{"displayName":"TMM","symbol":"TMM"},"TMT":{"displayName":"तुर्कमेनिस्तानी मैनत","displayName-count-one":"तुर्कमेनिस्तानी मैनत","displayName-count-other":"तुर्कमेनिस्तानी मैनत","symbol":"TMT"},"TND":{"displayName":"ट्यूनीशियाई दिनार","displayName-count-one":"ट्यूनीशियाई दिनार","displayName-count-other":"ट्यूनीशियाई दिनार","symbol":"TND"},"TOP":{"displayName":"टोंगन पांगा","displayName-count-one":"टोंगन पांगा","displayName-count-other":"टोंगन पांगा","symbol":"TOP","symbol-alt-narrow":"T$"},"TPE":{"displayName":"TPE","symbol":"TPE"},"TRL":{"displayName":"पुरानी तुर्की लीरा","symbol":"TRL"},"TRY":{"displayName":"तुर्की लीरा","displayName-count-one":"तुर्की लीरा","displayName-count-other":"तुर्की लीरा","symbol":"TRY","symbol-alt-narrow":"₺","symbol-alt-variant":"TL"},"TTD":{"displayName":"त्रिनिदाद और टोबैगो डॉलर","displayName-count-one":"त्रिनिदाद और टोबैगो डॉलर","displayName-count-other":"त्रिनिदाद और टोबैगो डॉलर","symbol":"TTD","symbol-alt-narrow":"$"},"TWD":{"displayName":"नया ताईवानी डॉलर","displayName-count-one":"नया ताईवानी डॉलर","displayName-count-other":"नया ताईवानी डॉलर","symbol":"NT$","symbol-alt-narrow":"NT$"},"TZS":{"displayName":"तंज़ानियाई शिलिंग","displayName-count-one":"तंज़ानियाई शिलिंग","displayName-count-other":"तंज़ानियाई शिलिंग","symbol":"TZS"},"UAH":{"displayName":"यूक्रेनियन रिव्निया","displayName-count-one":"यूक्रेनियन रिव्निया","displayName-count-other":"यूक्रेनियन रिव्निया","symbol":"UAH","symbol-alt-narrow":"₴"},"UAK":{"displayName":"UAK","symbol":"UAK"},"UGS":{"displayName":"UGS","symbol":"UGS"},"UGX":{"displayName":"युगांडाई शिलिंग","displayName-count-one":"युगांडाई शिलिंग","displayName-count-other":"युगांडाई शिलिंग","symbol":"UGX"},"USD":{"displayName":"यूएस डॉलर","displayName-count-one":"यूएस डॉलर","displayName-count-other":"यूएस डॉलर","symbol":"$","symbol-alt-narrow":"$"},"USN":{"displayName":"अमेरीकी डालर (कल)","symbol":"USN"},"USS":{"displayName":"अमेरीकी डालर (आज)","symbol":"USS"},"UYI":{"displayName":"UYI","symbol":"UYI"},"UYP":{"displayName":"UYP","symbol":"UYP"},"UYU":{"displayName":"उरुग्वियन पेसो","displayName-count-one":"उरुग्वियन पेसो","displayName-count-other":"उरुग्वियन पेसो","symbol":"UYU","symbol-alt-narrow":"$"},"UZS":{"displayName":"उज़्बेकिस्तान सोम","displayName-count-one":"उज़्बेकिस्तान सोम","displayName-count-other":"उज़्बेकिस्तान सोम","symbol":"UZS"},"VEB":{"displayName":"वेनेज़ुएला बोलिवर (1871–2008)","symbol":"VEB"},"VEF":{"displayName":"वेनेज़ुएला बोलिवर","displayName-count-one":"वेनेज़ुएला बोलिवर","displayName-count-other":"वेनेज़ुएला बोलिवर","symbol":"VEF","symbol-alt-narrow":"Bs"},"VND":{"displayName":"वियतनामी डोंग","displayName-count-one":"वियतनामी डोंग","displayName-count-other":"वियतनामी डोंग","symbol":"₫","symbol-alt-narrow":"₫"},"VNN":{"displayName":"VNN","symbol":"VNN"},"VUV":{"displayName":"वनुआतू वातू","displayName-count-one":"वनुआतू वातू","displayName-count-other":"वनुआतू वातू","symbol":"VUV"},"WST":{"displayName":"समोआई ताला","displayName-count-one":"समोआई ताला","displayName-count-other":"समोआई ताला","symbol":"WST"},"XAF":{"displayName":"केंद्रीय अफ़्रीकी CFA फ़्रैंक","displayName-count-one":"केंद्रीय अफ़्रीकी CFA फ़्रैंक","displayName-count-other":"केंद्रीय अफ़्रीकी CFA फ़्रैंक","symbol":"FCFA"},"XAG":{"displayName":"XAG","symbol":"XAG"},"XAU":{"displayName":"XAU","symbol":"XAU"},"XBA":{"displayName":"XBA","symbol":"XBA"},"XBB":{"displayName":"XBB","symbol":"XBB"},"XBC":{"displayName":"XBC","symbol":"XBC"},"XBD":{"displayName":"XBD","symbol":"XBD"},"XCD":{"displayName":"पूर्वी कैरिबियाई डॉलर","displayName-count-one":"पूर्वी कैरिबियाई डॉलर","displayName-count-other":"पूर्वी कैरिबियाई डॉलर","symbol":"EC$","symbol-alt-narrow":"$"},"XDR":{"displayName":"XDR","symbol":"XDR"},"XEU":{"displayName":"XEU","symbol":"XEU"},"XFO":{"displayName":"XFO","symbol":"XFO"},"XFU":{"displayName":"XFU","symbol":"XFU"},"XOF":{"displayName":"पश्चिमी अफ़्रीकी CFA फ़्रैंक","displayName-count-one":"पश्चिमी अफ़्रीकी CFA फ़्रैंक","displayName-count-other":"पश्चिमी अफ़्रीकी CFA फ़्रैंक","symbol":"CFA"},"XPD":{"displayName":"XPD","symbol":"XPD"},"XPF":{"displayName":"[CFP] फ़्रैंक","displayName-count-one":"[CFP] फ़्रैंक","displayName-count-other":"[CFP] फ़्रैंक","symbol":"CFPF"},"XPT":{"displayName":"XPT","symbol":"XPT"},"XRE":{"displayName":"XRE","symbol":"XRE"},"XSU":{"displayName":"XSU","symbol":"XSU"},"XTS":{"displayName":"XTS","symbol":"XTS"},"XUA":{"displayName":"XUA","symbol":"XUA"},"XXX":{"displayName":"अज्ञात मुद्रा","displayName-count-one":"(मुद्रा की अज्ञात इकाई)","displayName-count-other":"(अज्ञात मुद्रा)","symbol":"XXX"},"YDD":{"displayName":"YDD","symbol":"YDD"},"YER":{"displayName":"यमनी रियाल","displayName-count-one":"यमनी रियाल","displayName-count-other":"यमनी रियाल","symbol":"YER"},"YUD":{"displayName":"YUD","symbol":"YUD"},"YUM":{"displayName":"YUM","symbol":"YUM"},"YUN":{"displayName":"YUN","symbol":"YUN"},"YUR":{"displayName":"YUR","symbol":"YUR"},"ZAL":{"displayName":"ZAL","symbol":"ZAL"},"ZAR":{"displayName":"दक्षिण अफ़्रीकी रैंड","displayName-count-one":"दक्षिण अफ़्रीकी रैंड","displayName-count-other":"दक्षिण अफ़्रीकी रैंड","symbol":"ZAR","symbol-alt-narrow":"R"},"ZMK":{"displayName":"ज़ाम्बियन क्वाचा (1968–2012)","symbol":"ZMK"},"ZMW":{"displayName":"ज़ाम्बियन क्वाचा","displayName-count-one":"ज़ाम्बियन क्वाचा","displayName-count-other":"ज़ाम्बियन क्वाचा","symbol":"ZMW","symbol-alt-narrow":"ZK"},"ZRN":{"displayName":"ZRN","symbol":"ZRN"},"ZRZ":{"displayName":"ZRZ","symbol":"ZRZ"},"ZWD":{"displayName":"ZWD","symbol":"ZWD"},"ZWL":{"displayName":"ZWL","symbol":"ZWL"},"ZWR":{"displayName":"ZWR","symbol":"ZWR"}},"defaultNumberingSystem":"latn","otherNumberingSystems":{"native":"deva"},"minimumGroupingDigits":"1","symbols-numberSystem-deva":{"decimal":".","group":",","list":";","percentSign":"%","plusSign":"+","minusSign":"-","exponential":"E","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"NaN","timeSeparator":":"},"symbols-numberSystem-latn":{"decimal":".","group":",","list":";","percentSign":"%","plusSign":"+","minusSign":"-","exponential":"E","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"NaN","timeSeparator":":"},"decimalFormats-numberSystem-deva":{"standard":"#,##,##0.###","long":{"decimalFormat":{"1000-count-one":"0 हज़ार","1000-count-other":"0 हज़ार","10000-count-one":"00 हज़ार","10000-count-other":"00 हज़ार","100000-count-one":"0 लाख","100000-count-other":"0 लाख","1000000-count-one":"00 लाख","1000000-count-other":"00 लाख","10000000-count-one":"0 करोड़","10000000-count-other":"0 करोड़","100000000-count-one":"00 करोड़","100000000-count-other":"00 करोड़","1000000000-count-one":"0 अरब","1000000000-count-other":"0 अरब","10000000000-count-one":"00 अरब","10000000000-count-other":"00 अरब","100000000000-count-one":"0 खरब","100000000000-count-other":"0 खरब","1000000000000-count-one":"00 खरब","1000000000000-count-other":"00 खरब","10000000000000-count-one":"000 खरब","10000000000000-count-other":"000 खरब","100000000000000-count-one":"0000 खरब","100000000000000-count-other":"0000 खरब"}},"short":{"decimalFormat":{"1000-count-one":"0 हज़ार","1000-count-other":"0 हज़ार","10000-count-one":"00 हज़ार","10000-count-other":"00 हज़ार","100000-count-one":"0 लाख","100000-count-other":"0 लाख","1000000-count-one":"00 लाख","1000000-count-other":"00 लाख","10000000-count-one":"0 क॰","10000000-count-other":"0 क॰","100000000-count-one":"00 क॰","100000000-count-other":"00 क॰","1000000000-count-one":"0 अ॰","1000000000-count-other":"0 अ॰","10000000000-count-one":"00 अ॰","10000000000-count-other":"00 अ॰","100000000000-count-one":"0 ख॰","100000000000-count-other":"0 ख॰","1000000000000-count-one":"00 ख॰","1000000000000-count-other":"00 ख॰","10000000000000-count-one":"0 नील","10000000000000-count-other":"0 नील","100000000000000-count-one":"00 नील","100000000000000-count-other":"00 नील"}}},"decimalFormats-numberSystem-latn":{"standard":"#,##,##0.###","long":{"decimalFormat":{"1000-count-one":"0 हज़ार","1000-count-other":"0 हज़ार","10000-count-one":"00 हज़ार","10000-count-other":"00 हज़ार","100000-count-one":"0 लाख","100000-count-other":"0 लाख","1000000-count-one":"00 लाख","1000000-count-other":"00 लाख","10000000-count-one":"0 करोड़","10000000-count-other":"0 करोड़","100000000-count-one":"00 करोड़","100000000-count-other":"00 करोड़","1000000000-count-one":"0 अरब","1000000000-count-other":"0 अरब","10000000000-count-one":"00 अरब","10000000000-count-other":"00 अरब","100000000000-count-one":"0 खरब","100000000000-count-other":"0 खरब","1000000000000-count-one":"00 खरब","1000000000000-count-other":"00 खरब","10000000000000-count-one":"000 खरब","10000000000000-count-other":"000 खरब","100000000000000-count-one":"0000 खरब","100000000000000-count-other":"0000 खरब"}},"short":{"decimalFormat":{"1000-count-one":"0 हज़ार","1000-count-other":"0 हज़ार","10000-count-one":"00 हज़ार","10000-count-other":"00 हज़ार","100000-count-one":"0 लाख","100000-count-other":"0 लाख","1000000-count-one":"00 लाख","1000000-count-other":"00 लाख","10000000-count-one":"0 क॰","10000000-count-other":"0 क॰","100000000-count-one":"00 क॰","100000000-count-other":"00 क॰","1000000000-count-one":"0 अ॰","1000000000-count-other":"0 अ॰","10000000000-count-one":"00 अ॰","10000000000-count-other":"00 अ॰","100000000000-count-one":"0 ख॰","100000000000-count-other":"0 ख॰","1000000000000-count-one":"00 ख॰","1000000000000-count-other":"00 ख॰","10000000000000-count-one":"0 नील","10000000000000-count-other":"0 नील","100000000000000-count-one":"00 नील","100000000000000-count-other":"00 नील"}}},"scientificFormats-numberSystem-deva":{"standard":"[#E0]"},"scientificFormats-numberSystem-latn":{"standard":"[#E0]"},"percentFormats-numberSystem-deva":{"standard":"#,##,##0%"},"percentFormats-numberSystem-latn":{"standard":"#,##,##0%"},"currencyFormats-numberSystem-deva":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"¤#,##,##0.00","accounting":"¤#,##,##0.00","short":{"standard":{"1000-count-one":"¤0 हज़ार","1000-count-other":"¤0 हज़ार","10000-count-one":"¤00 हज़ार","10000-count-other":"¤00 हज़ार","100000-count-one":"¤0 लाख","100000-count-other":"¤0 लाख","1000000-count-one":"¤00 लाख","1000000-count-other":"¤00 लाख","10000000-count-one":"¤0 क॰","10000000-count-other":"¤0 क॰","100000000-count-one":"¤00 क॰","100000000-count-other":"¤00 क॰","1000000000-count-one":"¤0 अ॰","1000000000-count-other":"¤0 अ॰","10000000000-count-one":"¤00 अ॰","10000000000-count-other":"¤00 अ॰","100000000000-count-one":"¤0 ख॰","100000000000-count-other":"¤0 ख॰","1000000000000-count-one":"¤00 ख॰","1000000000000-count-other":"¤00 ख॰","10000000000000-count-one":"¤0 नील","10000000000000-count-other":"¤0 नील","100000000000000-count-one":"¤00 नील","100000000000000-count-other":"¤00 नील"}},"unitPattern-count-one":"{0} {1}","unitPattern-count-other":"{0} {1}"},"currencyFormats-numberSystem-latn":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"¤#,##,##0.00","accounting":"¤#,##,##0.00","short":{"standard":{"1000-count-one":"¤0 हज़ार","1000-count-other":"¤0 हज़ार","10000-count-one":"¤00 हज़ार","10000-count-other":"¤00 हज़ार","100000-count-one":"¤0 लाख","100000-count-other":"¤0 लाख","1000000-count-one":"¤00 लाख","1000000-count-other":"¤00 लाख","10000000-count-one":"¤0 क॰","10000000-count-other":"¤0 क॰","100000000-count-one":"¤00 क॰","100000000-count-other":"¤00 क॰","1000000000-count-one":"¤0 अ॰","1000000000-count-other":"¤0 अ॰","10000000000-count-one":"¤00 अ॰","10000000000-count-other":"¤00 अ॰","100000000000-count-one":"¤0 ख॰","100000000000-count-other":"¤0 ख॰","1000000000000-count-one":"¤00 ख॰","1000000000000-count-other":"¤00 ख॰","10000000000000-count-one":"¤0 नील","10000000000000-count-other":"¤0 नील","100000000000000-count-one":"¤00 नील","100000000000000-count-other":"¤00 नील"}},"unitPattern-count-one":"{0} {1}","unitPattern-count-other":"{0} {1}"},"miscPatterns-numberSystem-deva":{"atLeast":"{0}+","range":"{0}–{1}"},"miscPatterns-numberSystem-latn":{"atLeast":"{0}+","range":"{0}–{1}"},"minimalPairs":{"pluralMinimalPairs-count-one":"{0} घंटा","pluralMinimalPairs-count-other":"{0} घंटे","few":"{0}था दाहिना मोड़ लें॰","many":"{0}ठा दाहिना मोड़ लें॰","one":"{0}ला दाहिना मोड़ लें॰","other":"{0}वां दाहिना मोड़ लें॰","two":"{0}रा दाहिना मोड़ लें॰"}}},"id":{"identity":{"version":{"_number":"$Revision: 13705 $","_cldrVersion":"32"},"language":"id"},"dates":{"calendars":{"gregorian":{"months":{"format":{"abbreviated":{"1":"Jan","2":"Feb","3":"Mar","4":"Apr","5":"Mei","6":"Jun","7":"Jul","8":"Agt","9":"Sep","10":"Okt","11":"Nov","12":"Des"},"narrow":{"1":"J","2":"F","3":"M","4":"A","5":"M","6":"J","7":"J","8":"A","9":"S","10":"O","11":"N","12":"D"},"wide":{"1":"Januari","2":"Februari","3":"Maret","4":"April","5":"Mei","6":"Juni","7":"Juli","8":"Agustus","9":"September","10":"Oktober","11":"November","12":"Desember"}},"stand-alone":{"abbreviated":{"1":"Jan","2":"Feb","3":"Mar","4":"Apr","5":"Mei","6":"Jun","7":"Jul","8":"Agt","9":"Sep","10":"Okt","11":"Nov","12":"Des"},"narrow":{"1":"J","2":"F","3":"M","4":"A","5":"M","6":"J","7":"J","8":"A","9":"S","10":"O","11":"N","12":"D"},"wide":{"1":"Januari","2":"Februari","3":"Maret","4":"April","5":"Mei","6":"Juni","7":"Juli","8":"Agustus","9":"September","10":"Oktober","11":"November","12":"Desember"}}},"days":{"format":{"abbreviated":{"sun":"Min","mon":"Sen","tue":"Sel","wed":"Rab","thu":"Kam","fri":"Jum","sat":"Sab"},"narrow":{"sun":"M","mon":"S","tue":"S","wed":"R","thu":"K","fri":"J","sat":"S"},"short":{"sun":"Min","mon":"Sen","tue":"Sel","wed":"Rab","thu":"Kam","fri":"Jum","sat":"Sab"},"wide":{"sun":"Minggu","mon":"Senin","tue":"Selasa","wed":"Rabu","thu":"Kamis","fri":"Jumat","sat":"Sabtu"}},"stand-alone":{"abbreviated":{"sun":"Min","mon":"Sen","tue":"Sel","wed":"Rab","thu":"Kam","fri":"Jum","sat":"Sab"},"narrow":{"sun":"M","mon":"S","tue":"S","wed":"R","thu":"K","fri":"J","sat":"S"},"short":{"sun":"Min","mon":"Sen","tue":"Sel","wed":"Rab","thu":"Kam","fri":"Jum","sat":"Sab"},"wide":{"sun":"Minggu","mon":"Senin","tue":"Selasa","wed":"Rabu","thu":"Kamis","fri":"Jumat","sat":"Sabtu"}}},"quarters":{"format":{"abbreviated":{"1":"K1","2":"K2","3":"K3","4":"K4"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"Kuartal ke-1","2":"Kuartal ke-2","3":"Kuartal ke-3","4":"Kuartal ke-4"}},"stand-alone":{"abbreviated":{"1":"K1","2":"K2","3":"K3","4":"K4"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"Kuartal ke-1","2":"Kuartal ke-2","3":"Kuartal ke-3","4":"Kuartal ke-4"}}},"dayPeriods":{"format":{"abbreviated":{"midnight":"tengah malam","am":"AM","noon":"tengah hari","pm":"PM","morning1":"pagi","afternoon1":"siang","evening1":"sore","night1":"malam"},"narrow":{"midnight":"tengah malam","am":"AM","noon":"tengah hari","pm":"PM","morning1":"pagi","afternoon1":"siang","evening1":"sore","night1":"malam"},"wide":{"midnight":"tengah malam","am":"AM","noon":"tengah hari","pm":"PM","morning1":"pagi","afternoon1":"siang","evening1":"sore","night1":"malam"}},"stand-alone":{"abbreviated":{"midnight":"tengah malam","am":"AM","noon":"tengah hari","pm":"PM","morning1":"pagi","afternoon1":"siang","evening1":"sore","night1":"malam"},"narrow":{"midnight":"tengah malam","am":"AM","noon":"tengah hari","pm":"PM","morning1":"pagi","afternoon1":"siang","evening1":"sore","night1":"malam"},"wide":{"midnight":"tengah malam","am":"AM","noon":"tengah hari","pm":"PM","morning1":"pagi","afternoon1":"siang","evening1":"sore","night1":"malam"}}},"eras":{"eraNames":{"0":"Sebelum Masehi","1":"Masehi","0-alt-variant":"Sebelum Era Umum","1-alt-variant":"Era Umum"},"eraAbbr":{"0":"SM","1":"M","0-alt-variant":"SEU","1-alt-variant":"EU"},"eraNarrow":{"0":"SM","1":"M","0-alt-variant":"SEU","1-alt-variant":"EU"}},"dateFormats":{"full":"EEEE, dd MMMM y","long":"d MMMM y","medium":"d MMM y","short":"dd/MM/yy"},"timeFormats":{"full":"HH.mm.ss zzzz","long":"HH.mm.ss z","medium":"HH.mm.ss","short":"HH.mm"},"dateTimeFormats":{"full":"{1} {0}","long":"{1} {0}","medium":"{1} {0}","short":"{1} {0}","availableFormats":{"Bh":"h B","Bhm":"h.mm B","Bhms":"h.mm.ss B","d":"d","E":"ccc","EBhm":"E h.mm B","EBhms":"E h.mm.ss B","Ed":"E, d","Ehm":"E h.mm a","EHm":"E HH.mm","Ehms":"E h.mm.ss a","EHms":"E HH.mm.ss","Gy":"y G","GyMMM":"MMM y G","GyMMMd":"d MMM y G","GyMMMEd":"E, d MMM y G","h":"h a","H":"HH","hm":"h.mm a","Hm":"HH.mm","hms":"h.mm.ss a","Hms":"HH.mm.ss","hmsv":"h.mm.ss. a v","Hmsv":"HH.mm.ss v","hmv":"h.mm a v","Hmv":"HH.mm v","M":"L","Md":"d/M","MEd":"E, d/M","MMM":"LLL","MMMd":"d MMM","MMMEd":"E, d MMM","MMMMd":"d MMMM","MMMMEd":"E, d MMMM","MMMMW-count-other":"'minggu' 'ke'-W MMM","ms":"mm.ss","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"E, d/M/y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"E, d MMM y","yMMMM":"MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","yw-count-other":"'minggu' 'ke'-w Y"},"appendItems":{"Day":"{0} ({2}: {1})","Day-Of-Week":"{0} {1}","Era":"{1} {0}","Hour":"{0} ({2}: {1})","Minute":"{0} ({2}: {1})","Month":"{0} ({2}: {1})","Quarter":"{0} ({2}: {1})","Second":"{0} ({2}: {1})","Timezone":"{0} {1}","Week":"{0} ({2}: {1})","Year":"{1} {0}"},"intervalFormats":{"intervalFormatFallback":"{0} – {1}","d":{"d":"d–d"},"h":{"a":"h a – h a","h":"h–h a"},"H":{"H":"HH–HH"},"hm":{"a":"h.mm a – h.mm a","h":"h.mm–h.mm a","m":"h.mm–h.mm a"},"Hm":{"H":"HH.mm–HH.mm","m":"HH.mm–HH.mm"},"hmv":{"a":"h.mm a – h.mm a v","h":"h.mm–h.mm a v","m":"h.mm–h.mm a v"},"Hmv":{"H":"HH.mm–HH.mm v","m":"HH.mm–HH.mm v"},"hv":{"a":"h a – h a v","h":"h–h a v"},"Hv":{"H":"HH–HH v"},"M":{"M":"M–M"},"Md":{"d":"d/M – d/M","M":"d/M – d/M"},"MEd":{"d":"E, d/M – E, d/M","M":"E, d/M – E, d/M"},"MMM":{"M":"MMM–MMM"},"MMMd":{"d":"d–d MMM","M":"d MMM – d MMM"},"MMMEd":{"d":"E, d MMM – E, d MMM","M":"E, d MMM – E, d MMM"},"y":{"y":"y – y"},"yM":{"M":"M/y – M/y","y":"M/y – M/y"},"yMd":{"d":"d/M/y – d/M/y","M":"d/M/y – d/M/y","y":"d/M/y – d/M/y"},"yMEd":{"d":"E, d/M/y – E, d/M/y","M":"E, d/M/y – E, d/M/y","y":"E, d/M/y – E, d/M/y"},"yMMM":{"M":"MMM–MMM y","y":"MMM y – MMM y"},"yMMMd":{"d":"d–d MMM y","M":"d MMM – d MMM y","y":"d MMM y – d MMM y"},"yMMMEd":{"d":"E, d MMM – E, d MMM y","M":"E, d MMM – E, d MMM y","y":"E, d MMM y – E, d MMM y"},"yMMMM":{"M":"MMMM–MMMM y","y":"MMMM y – MMMM y"}}}}},"fields":{"era":{"displayName":"era"},"era-short":{"displayName":"era"},"era-narrow":{"displayName":"era"},"year":{"displayName":"tahun","relative-type--1":"tahun lalu","relative-type-0":"tahun ini","relative-type-1":"tahun depan","relativeTime-type-future":{"relativeTimePattern-count-other":"dalam {0} tahun"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} tahun yang lalu"}},"year-short":{"displayName":"thn.","relative-type--1":"tahun lalu","relative-type-0":"tahun ini","relative-type-1":"tahun depan","relativeTime-type-future":{"relativeTimePattern-count-other":"dlm {0} thn"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} thn lalu"}},"year-narrow":{"displayName":"thn.","relative-type--1":"tahun lalu","relative-type-0":"tahun ini","relative-type-1":"tahun depan","relativeTime-type-future":{"relativeTimePattern-count-other":"dlm {0} thn"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} thn lalu"}},"quarter":{"displayName":"kuartal","relative-type--1":"Kuartal lalu","relative-type-0":"kuartal ini","relative-type-1":"kuartal berikutnya","relativeTime-type-future":{"relativeTimePattern-count-other":"dalam {0} kuartal"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} kuartal yang lalu"}},"quarter-short":{"displayName":"krtl.","relative-type--1":"Kuartal lalu","relative-type-0":"kuartal ini","relative-type-1":"kuartal berikutnya","relativeTime-type-future":{"relativeTimePattern-count-other":"dlm {0} krtl."},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} krtl. lalu"}},"quarter-narrow":{"displayName":"krtl.","relative-type--1":"Kuartal lalu","relative-type-0":"kuartal ini","relative-type-1":"kuartal berikutnya","relativeTime-type-future":{"relativeTimePattern-count-other":"dlm {0} krtl."},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} krtl. lalu"}},"month":{"displayName":"bulan","relative-type--1":"bulan lalu","relative-type-0":"bulan ini","relative-type-1":"bulan berikutnya","relativeTime-type-future":{"relativeTimePattern-count-other":"dalam {0} bulan"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} bulan yang lalu"}},"month-short":{"displayName":"bln.","relative-type--1":"bulan lalu","relative-type-0":"bulan ini","relative-type-1":"bulan berikutnya","relativeTime-type-future":{"relativeTimePattern-count-other":"dlm {0} bln"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} bln lalu"}},"month-narrow":{"displayName":"bln.","relative-type--1":"bulan lalu","relative-type-0":"bulan ini","relative-type-1":"bulan berikutnya","relativeTime-type-future":{"relativeTimePattern-count-other":"dlm {0} bln"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} bln lalu"}},"week":{"displayName":"minggu","relative-type--1":"minggu lalu","relative-type-0":"minggu ini","relative-type-1":"minggu depan","relativeTime-type-future":{"relativeTimePattern-count-other":"dalam {0} minggu"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} minggu yang lalu"},"relativePeriod":"minggu ke-{0}"},"week-short":{"displayName":"mgg.","relative-type--1":"minggu lalu","relative-type-0":"minggu ini","relative-type-1":"minggu depan","relativeTime-type-future":{"relativeTimePattern-count-other":"dlm {0} mgg"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} mgg lalu"},"relativePeriod":"mgg ke-{0}"},"week-narrow":{"displayName":"mgg.","relative-type--1":"minggu lalu","relative-type-0":"minggu ini","relative-type-1":"minggu depan","relativeTime-type-future":{"relativeTimePattern-count-other":"dlm {0} mgg"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} mgg lalu"},"relativePeriod":"mgg ke-{0}"},"weekOfMonth":{"displayName":"minggu"},"weekOfMonth-short":{"displayName":"mgg."},"weekOfMonth-narrow":{"displayName":"mgg."},"day":{"displayName":"hari","relative-type--2":"kemarin dulu","relative-type--1":"kemarin","relative-type-0":"hari ini","relative-type-1":"besok","relative-type-2":"lusa","relativeTime-type-future":{"relativeTimePattern-count-other":"dalam {0} hari"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} hari yang lalu"}},"day-short":{"displayName":"h","relative-type--2":"kemarin dulu","relative-type--1":"kemarin","relative-type-0":"hari ini","relative-type-1":"besok","relative-type-2":"lusa","relativeTime-type-future":{"relativeTimePattern-count-other":"dalam {0} h"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} h lalu"}},"day-narrow":{"displayName":"h","relative-type--2":"kemarin dulu","relative-type--1":"kemarin","relative-type-0":"hari ini","relative-type-1":"besok","relative-type-2":"lusa","relativeTime-type-future":{"relativeTimePattern-count-other":"dalam {0} h"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} h lalu"}},"dayOfYear":{"displayName":"Hari dalam Setahun"},"dayOfYear-short":{"displayName":"Hari dalam Setahun"},"dayOfYear-narrow":{"displayName":"Hari dalam Setahun"},"weekday":{"displayName":"hari dalam seminggu"},"weekday-short":{"displayName":"hari dlm seminggu"},"weekday-narrow":{"displayName":"hari dlm seminggu"},"weekdayOfMonth":{"displayName":"hari kerja"},"weekdayOfMonth-short":{"displayName":"hr kerja"},"weekdayOfMonth-narrow":{"displayName":"hr kerja"},"sun":{"relative-type--1":"hari Minggu lalu","relative-type-0":"hari Minggu ini","relative-type-1":"hari Minggu berikutnya","relativeTime-type-future":{"relativeTimePattern-count-other":"dalam {0} hari Minggu"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} hari Minggu yang lalu"}},"sun-short":{"relative-type--1":"Min. lalu","relative-type-0":"Min. ini","relative-type-1":"Min. berikutnya","relativeTime-type-future":{"relativeTimePattern-count-other":"dlm {0} Min."},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Min. lalu"}},"sun-narrow":{"relative-type--1":"Min. lalu","relative-type-0":"Min. ini","relative-type-1":"Min. berikutnya","relativeTime-type-future":{"relativeTimePattern-count-other":"dlm {0} Min."},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Min. lalu"}},"mon":{"relative-type--1":"Senin lalu","relative-type-0":"Senin ini","relative-type-1":"Senin berikutnya","relativeTime-type-future":{"relativeTimePattern-count-other":"dalam {0} Senin"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Senin lalu"}},"mon-short":{"relative-type--1":"Sen. lalu","relative-type-0":"Sen. ini","relative-type-1":"Sen. berikutnya","relativeTime-type-future":{"relativeTimePattern-count-other":"dlm {0} Sen."},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Sen. lalu"}},"mon-narrow":{"relative-type--1":"Sen. lalu","relative-type-0":"Sen. ini","relative-type-1":"Sen. berikutnya","relativeTime-type-future":{"relativeTimePattern-count-other":"dlm {0} Sen."},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Sen. lalu"}},"tue":{"relative-type--1":"Selasa lalu","relative-type-0":"Selasa ini","relative-type-1":"Selasa berikutnya","relativeTime-type-future":{"relativeTimePattern-count-other":"dalam {0} Selasa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Selasa lalu"}},"tue-short":{"relative-type--1":"Sel. lalu","relative-type-0":"Sel. ini","relative-type-1":"Sel. berikutnya","relativeTime-type-future":{"relativeTimePattern-count-other":"dlm {0} Sel."},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Sel. lalu"}},"tue-narrow":{"relative-type--1":"Sel. lalu","relative-type-0":"Sel. ini","relative-type-1":"Sel. berikutnya","relativeTime-type-future":{"relativeTimePattern-count-other":"dlm {0} Sel."},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Sel. lalu"}},"wed":{"relative-type--1":"Rabu lalu","relative-type-0":"Rabu ini","relative-type-1":"Rabu berikutnya","relativeTime-type-future":{"relativeTimePattern-count-other":"dalam {0} Rabu"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Rabu lalu"}},"wed-short":{"relative-type--1":"Rab. lalu","relative-type-0":"Rab. ini","relative-type-1":"Rab. berikutnya","relativeTime-type-future":{"relativeTimePattern-count-other":"dlm {0} Rab."},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Rab. lalu"}},"wed-narrow":{"relative-type--1":"Rab. lalu","relative-type-0":"Rab. ini","relative-type-1":"Rab. berikutnya","relativeTime-type-future":{"relativeTimePattern-count-other":"dlm {0} Rab."},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Rab. lalu"}},"thu":{"relative-type--1":"Kamis lalu","relative-type-0":"Kamis ini","relative-type-1":"Kamis berikutnya","relativeTime-type-future":{"relativeTimePattern-count-other":"dalam {0} Kamis"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Kamis lalu"}},"thu-short":{"relative-type--1":"Kam. lalu","relative-type-0":"Kam. ini","relative-type-1":"Kam. berikutnya","relativeTime-type-future":{"relativeTimePattern-count-other":"dlm {0} Kam."},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Kam. lalu"}},"thu-narrow":{"relative-type--1":"Kam. lalu","relative-type-0":"Kam. ini","relative-type-1":"Kam. berikutnya","relativeTime-type-future":{"relativeTimePattern-count-other":"dlm {0} Kam."},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Kam. lalu"}},"fri":{"relative-type--1":"Jumat lalu","relative-type-0":"Jumat ini","relative-type-1":"Jumat berikutnya","relativeTime-type-future":{"relativeTimePattern-count-other":"dalam {0} Jumat"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Jumat lalu"}},"fri-short":{"relative-type--1":"Jum. lalu","relative-type-0":"Jum. ini","relative-type-1":"Jum. berikutnya","relativeTime-type-future":{"relativeTimePattern-count-other":"dlm {0} Jum."},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Jum. lalu"}},"fri-narrow":{"relative-type--1":"Jum. lalu","relative-type-0":"Jum. ini","relative-type-1":"Jum. berikutnya","relativeTime-type-future":{"relativeTimePattern-count-other":"dlm {0} Jum."},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Jum. lalu"}},"sat":{"relative-type--1":"Sabtu lalu","relative-type-0":"Sabtu ini","relative-type-1":"Sabtu berikutnya","relativeTime-type-future":{"relativeTimePattern-count-other":"dalam {0} Sabtu"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Sabtu lalu"}},"sat-short":{"relative-type--1":"Sab. lalu","relative-type-0":"Sab. ini","relative-type-1":"Sab. berikutnya","relativeTime-type-future":{"relativeTimePattern-count-other":"dlm {0} Sab."},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Sab. lalu"}},"sat-narrow":{"relative-type--1":"Sab. lalu","relative-type-0":"Sab. ini","relative-type-1":"Sab. berikutnya","relativeTime-type-future":{"relativeTimePattern-count-other":"dlm {0} Sab."},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Sab. lalu"}},"dayperiod-short":{"displayName":"AM/PM"},"dayperiod":{"displayName":"AM/PM"},"dayperiod-narrow":{"displayName":"AM/PM"},"hour":{"displayName":"Jam","relative-type-0":"jam ini","relativeTime-type-future":{"relativeTimePattern-count-other":"dalam {0} jam"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} jam yang lalu"}},"hour-short":{"displayName":"jam","relative-type-0":"jam ini","relativeTime-type-future":{"relativeTimePattern-count-other":"dalam {0} jam"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} jam lalu"}},"hour-narrow":{"displayName":"j","relative-type-0":"jam ini","relativeTime-type-future":{"relativeTimePattern-count-other":"dalam {0} jam"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} jam lalu"}},"minute":{"displayName":"menit","relative-type-0":"menit ini","relativeTime-type-future":{"relativeTimePattern-count-other":"dalam {0} menit"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} menit yang lalu"}},"minute-short":{"displayName":"mnt.","relative-type-0":"menit ini","relativeTime-type-future":{"relativeTimePattern-count-other":"dlm {0} mnt"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} mnt lalu"}},"minute-narrow":{"displayName":"m","relative-type-0":"menit ini","relativeTime-type-future":{"relativeTimePattern-count-other":"dlm {0} mnt"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} mnt lalu"}},"second":{"displayName":"detik","relative-type-0":"sekarang","relativeTime-type-future":{"relativeTimePattern-count-other":"dalam {0} detik"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} detik yang lalu"}},"second-short":{"displayName":"dtk.","relative-type-0":"sekarang","relativeTime-type-future":{"relativeTimePattern-count-other":"dlm {0} dtk"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} dtk lalu"}},"second-narrow":{"displayName":"d","relative-type-0":"sekarang","relativeTime-type-future":{"relativeTimePattern-count-other":"dlm {0} dtk"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} dtk lalu"}},"zone":{"displayName":"zona waktu"},"zone-short":{"displayName":"zona wkt"},"zone-narrow":{"displayName":"zona wkt"}}},"numbers":{"currencies":{"ADP":{"displayName":"Peseta Andorra","symbol":"ADP"},"AED":{"displayName":"Dirham Uni Emirat Arab","displayName-count-other":"Dirham Uni Emirat Arab","symbol":"AED"},"AFA":{"displayName":"Afgani Afganistan (1927–2002)","displayName-count-other":"Afgani Afganistan (1927–2002)","symbol":"AFA"},"AFN":{"displayName":"Afgani Afganistan","displayName-count-other":"Afgani Afganistan","symbol":"AFN"},"ALK":{"displayName":"ALK","symbol":"ALK"},"ALL":{"displayName":"Lek Albania","displayName-count-other":"Lek Albania","symbol":"ALL"},"AMD":{"displayName":"Dram Armenia","displayName-count-other":"Dram Armenia","symbol":"AMD"},"ANG":{"displayName":"Guilder Antilla Belanda","displayName-count-other":"Guilder Antilla Belanda","symbol":"ANG"},"AOA":{"displayName":"Kwanza Angola","displayName-count-other":"Kwanza Angola","symbol":"AOA","symbol-alt-narrow":"Kz"},"AOK":{"displayName":"Kwanza Angola (1977–1991)","displayName-count-other":"Kwanza Angola (1977–1991)","symbol":"AOK"},"AON":{"displayName":"Kwanza Baru Angola (1990–2000)","displayName-count-other":"Kwanza Baru Angola (1990–2000)","symbol":"AON"},"AOR":{"displayName":"Kwanza Angola yang Disesuaikan Lagi (1995–1999)","displayName-count-other":"Kwanza Angola yang Disesuaikan Lagi (1995–1999)","symbol":"AOR"},"ARA":{"displayName":"Austral Argentina","symbol":"ARA"},"ARL":{"displayName":"Peso Ley Argentina (1970–1983)","displayName-count-other":"Peso Ley Argentina (1970–1983)","symbol":"ARL"},"ARM":{"displayName":"Peso Argentina (1881–1970)","displayName-count-other":"Peso Argentina (1881–1970)","symbol":"ARM"},"ARP":{"displayName":"Peso Argentina (1983–1985)","displayName-count-other":"Peso Argentina (1983–1985)","symbol":"ARP"},"ARS":{"displayName":"Peso Argentina","displayName-count-other":"Peso Argentina","symbol":"ARS","symbol-alt-narrow":"$"},"ATS":{"displayName":"Schilling Austria","symbol":"ATS"},"AUD":{"displayName":"Dolar Australia","displayName-count-other":"Dolar Australia","symbol":"AU$","symbol-alt-narrow":"$"},"AWG":{"displayName":"Florin Aruba","displayName-count-other":"Florin Aruba","symbol":"AWG"},"AZM":{"displayName":"Manat Azerbaijan (1993–2006)","displayName-count-other":"Manat Azerbaijan (1993–2006)","symbol":"AZM"},"AZN":{"displayName":"Manat Azerbaijan","displayName-count-other":"Manat Azerbaijan","symbol":"AZN"},"BAD":{"displayName":"Dinar Bosnia-Herzegovina (1992–1994)","displayName-count-other":"Dinar Bosnia-Herzegovina (1992–1994)","symbol":"BAD"},"BAM":{"displayName":"Mark Konvertibel Bosnia-Herzegovina","displayName-count-other":"Mark Konvertibel Bosnia-Herzegovina","symbol":"BAM","symbol-alt-narrow":"KM"},"BAN":{"displayName":"Dinar Baru Bosnia-Herzegovina (1994–1997)","displayName-count-other":"Dinar Baru Bosnia-Herzegovina (1994–1997)","symbol":"BAN"},"BBD":{"displayName":"Dolar Barbados","displayName-count-other":"Dolar Barbados","symbol":"BBD","symbol-alt-narrow":"$"},"BDT":{"displayName":"Taka Bangladesh","displayName-count-other":"Taka Bangladesh","symbol":"BDT","symbol-alt-narrow":"৳"},"BEC":{"displayName":"Franc Belgia (konvertibel)","symbol":"BEC"},"BEF":{"displayName":"Franc Belgia","symbol":"BEF"},"BEL":{"displayName":"Franc Belgia (keuangan)","symbol":"BEL"},"BGL":{"displayName":"Hard Lev Bulgaria","symbol":"BGL"},"BGM":{"displayName":"Socialist Lev Bulgaria","symbol":"BGM"},"BGN":{"displayName":"Lev Bulgaria","displayName-count-other":"Lev Bulgaria","symbol":"BGN"},"BGO":{"displayName":"Lev Bulgaria (1879–1952)","displayName-count-other":"Lev Bulgaria (1879–1952)","symbol":"BGO"},"BHD":{"displayName":"Dinar Bahrain","displayName-count-other":"Dinar Bahrain","symbol":"BHD"},"BIF":{"displayName":"Franc Burundi","displayName-count-other":"Franc Burundi","symbol":"BIF"},"BMD":{"displayName":"Dolar Bermuda","displayName-count-other":"Dolar Bermuda","symbol":"BMD","symbol-alt-narrow":"$"},"BND":{"displayName":"Dolar Brunei","displayName-count-other":"Dolar Brunei","symbol":"BND","symbol-alt-narrow":"$"},"BOB":{"displayName":"Boliviano","displayName-count-other":"Boliviano","symbol":"BOB","symbol-alt-narrow":"Bs"},"BOL":{"displayName":"Boliviano Bolivia (1863–1963)","displayName-count-other":"Boliviano Bolivia (1863–1963)","symbol":"BOL"},"BOP":{"displayName":"Peso Bolivia","symbol":"BOP"},"BOV":{"displayName":"Mvdol Bolivia","symbol":"BOV"},"BRB":{"displayName":"Cruzeiro Baru Brasil (1967–1986)","displayName-count-other":"Cruzeiro Baru Brasil (1967–1986)","symbol":"BRB"},"BRC":{"displayName":"Cruzado Brasil (1986–1989)","displayName-count-other":"Cruzado Brasil (1986–1989)","symbol":"BRC"},"BRE":{"displayName":"Cruzeiro Brasil (1990–1993)","displayName-count-other":"Cruzeiro Brasil (1990–1993)","symbol":"BRE"},"BRL":{"displayName":"Real Brasil","displayName-count-other":"Real Brasil","symbol":"R$","symbol-alt-narrow":"R$"},"BRN":{"displayName":"Cruzado Baru Brasil (1989–1990)","displayName-count-other":"Cruzado Baru Brasil (1989–1990)","symbol":"BRN"},"BRR":{"displayName":"Cruzeiro Brasil (1993–1994)","displayName-count-other":"Cruzeiro Brasil (1993–1994)","symbol":"BRR"},"BRZ":{"displayName":"Cruzeiro Brasil (1942–1967)","displayName-count-other":"Cruzeiro Brasil (1942–1967)","symbol":"BRZ"},"BSD":{"displayName":"Dolar Bahama","displayName-count-other":"Dolar Bahama","symbol":"BSD","symbol-alt-narrow":"$"},"BTN":{"displayName":"Ngultrum Bhutan","displayName-count-other":"Ngultrum Bhutan","symbol":"BTN"},"BUK":{"displayName":"Kyat Burma","symbol":"BUK"},"BWP":{"displayName":"Pula Botswana","displayName-count-other":"Pula Botswana","symbol":"BWP","symbol-alt-narrow":"P"},"BYB":{"displayName":"Rubel Baru Belarus (1994–1999)","displayName-count-other":"Rubel Baru Belarus (1994–1999)","symbol":"BYB"},"BYN":{"displayName":"Rubel Belarusia","displayName-count-other":"Rubel Belarusia","symbol":"BYN","symbol-alt-narrow":"р."},"BYR":{"displayName":"Rubel Belarusia (2000–2016)","displayName-count-other":"Rubel Belarusia (2000–2016)","symbol":"BYR"},"BZD":{"displayName":"Dolar Belize","displayName-count-other":"Dolar Belize","symbol":"BZD","symbol-alt-narrow":"$"},"CAD":{"displayName":"Dolar Kanada","displayName-count-other":"Dolar Kanada","symbol":"CA$","symbol-alt-narrow":"$"},"CDF":{"displayName":"Franc Kongo","displayName-count-other":"Franc Kongo","symbol":"CDF"},"CHE":{"displayName":"Euro WIR","symbol":"CHE"},"CHF":{"displayName":"Franc Swiss","displayName-count-other":"Franc Swiss","symbol":"CHF"},"CHW":{"displayName":"Franc WIR","symbol":"CHW"},"CLE":{"displayName":"Escudo Cile","symbol":"CLE"},"CLF":{"displayName":"Satuan Hitung (UF) Cile","symbol":"CLF"},"CLP":{"displayName":"Peso Cile","displayName-count-other":"Peso Cile","symbol":"CLP","symbol-alt-narrow":"$"},"CNH":{"displayName":"Yuan Tiongkok (luar negeri)","displayName-count-other":"Yuan Tiongkok (luar negeri)","symbol":"CNH"},"CNX":{"displayName":"CNX","symbol":"CNX"},"CNY":{"displayName":"Yuan Tiongkok","displayName-count-other":"Yuan Tiongkok","symbol":"CN¥","symbol-alt-narrow":"¥"},"COP":{"displayName":"Peso Kolombia","displayName-count-other":"Peso Kolombia","symbol":"COP","symbol-alt-narrow":"$"},"COU":{"displayName":"Unit Nilai Nyata Kolombia","symbol":"COU"},"CRC":{"displayName":"Colon Kosta Rika","displayName-count-other":"Colon Kosta Rika","symbol":"CRC","symbol-alt-narrow":"₡"},"CSD":{"displayName":"Dinar Serbia (2002–2006)","displayName-count-other":"Dinar Serbia (2002–2006)","symbol":"CSD"},"CSK":{"displayName":"Hard Koruna Cheska","symbol":"CSK"},"CUC":{"displayName":"Peso Konvertibel Kuba","displayName-count-other":"Peso Konvertibel Kuba","symbol":"CUC","symbol-alt-narrow":"$"},"CUP":{"displayName":"Peso Kuba","displayName-count-other":"Peso Kuba","symbol":"CUP","symbol-alt-narrow":"$"},"CVE":{"displayName":"Escudo Tanjung Verde","displayName-count-other":"Escudo Tanjung Verde","symbol":"CVE"},"CYP":{"displayName":"Pound Siprus","symbol":"CYP"},"CZK":{"displayName":"Koruna Cheska","displayName-count-other":"Koruna Cheska","symbol":"CZK","symbol-alt-narrow":"Kč"},"DDM":{"displayName":"Mark Jerman Timur","symbol":"DDM"},"DEM":{"displayName":"Mark Jerman","symbol":"DEM"},"DJF":{"displayName":"Franc Jibuti","displayName-count-other":"Franc Jibuti","symbol":"DJF"},"DKK":{"displayName":"Krone Denmark","displayName-count-other":"Krone Denmark","symbol":"DKK","symbol-alt-narrow":"kr"},"DOP":{"displayName":"Peso Dominika","displayName-count-other":"Peso Dominika","symbol":"DOP","symbol-alt-narrow":"$"},"DZD":{"displayName":"Dinar Algeria","displayName-count-other":"Dinar Algeria","symbol":"DZD"},"ECS":{"displayName":"Sucre Ekuador","symbol":"ECS"},"ECV":{"displayName":"Satuan Nilai Tetap Ekuador","symbol":"ECV"},"EEK":{"displayName":"Kroon Estonia","symbol":"EEK"},"EGP":{"displayName":"Pound Mesir","displayName-count-other":"Pound Mesir","symbol":"EGP","symbol-alt-narrow":"E£"},"ERN":{"displayName":"Nakfa Eritrea","displayName-count-other":"Nakfa Eritrea","symbol":"ERN"},"ESA":{"displayName":"Peseta Spanyol (akun)","symbol":"ESA"},"ESB":{"displayName":"Peseta Spanyol (konvertibel)","symbol":"ESB"},"ESP":{"displayName":"Peseta Spanyol","symbol":"ESP","symbol-alt-narrow":"₧"},"ETB":{"displayName":"Birr Etiopia","displayName-count-other":"Birr Etiopia","symbol":"ETB"},"EUR":{"displayName":"Euro","displayName-count-other":"Euro","symbol":"€","symbol-alt-narrow":"€"},"FIM":{"displayName":"Markka Finlandia","symbol":"FIM"},"FJD":{"displayName":"Dolar Fiji","displayName-count-other":"Dolar Fiji","symbol":"FJD","symbol-alt-narrow":"$"},"FKP":{"displayName":"Pound Kepulauan Falkland","displayName-count-other":"Pound Kepulauan Falkland","symbol":"FKP","symbol-alt-narrow":"£"},"FRF":{"displayName":"Franc Prancis","symbol":"FRF"},"GBP":{"displayName":"Pound Inggris","displayName-count-other":"Pound Inggris","symbol":"£","symbol-alt-narrow":"£"},"GEK":{"displayName":"Kupon Larit Georgia","symbol":"GEK"},"GEL":{"displayName":"Lari Georgia","displayName-count-other":"Lari Georgia","symbol":"GEL","symbol-alt-narrow":"₾"},"GHC":{"displayName":"Cedi Ghana (1979–2007)","displayName-count-other":"Cedi Ghana (1979–2007)","symbol":"GHC"},"GHS":{"displayName":"Cedi Ghana","displayName-count-other":"Cedi Ghana","symbol":"GHS"},"GIP":{"displayName":"Pound Gibraltar","displayName-count-other":"Pound Gibraltar","symbol":"GIP","symbol-alt-narrow":"£"},"GMD":{"displayName":"Dalasi Gambia","displayName-count-other":"Dalasi Gambia","symbol":"GMD"},"GNF":{"displayName":"Franc Guinea","displayName-count-other":"Franc Guinea","symbol":"GNF","symbol-alt-narrow":"FG"},"GNS":{"displayName":"Syli Guinea","symbol":"GNS"},"GQE":{"displayName":"Ekuele Guinea Ekuatorial","symbol":"GQE"},"GRD":{"displayName":"Drachma Yunani","symbol":"GRD"},"GTQ":{"displayName":"Quetzal Guatemala","displayName-count-other":"Quetzal Guatemala","symbol":"GTQ","symbol-alt-narrow":"Q"},"GWE":{"displayName":"Escudo Guinea Portugal","symbol":"GWE"},"GWP":{"displayName":"Peso Guinea-Bissau","symbol":"GWP"},"GYD":{"displayName":"Dolar Guyana","displayName-count-other":"Dolar Guyana","symbol":"GYD","symbol-alt-narrow":"$"},"HKD":{"displayName":"Dolar Hong Kong","displayName-count-other":"Dolar Hong Kong","symbol":"HK$","symbol-alt-narrow":"$"},"HNL":{"displayName":"Lempira Honduras","displayName-count-other":"Lempira Honduras","symbol":"HNL","symbol-alt-narrow":"L"},"HRD":{"displayName":"Dinar Kroasia","symbol":"HRD"},"HRK":{"displayName":"Kuna Kroasia","displayName-count-other":"Kuna Kroasia","symbol":"HRK","symbol-alt-narrow":"kn"},"HTG":{"displayName":"Gourde Haiti","displayName-count-other":"Gourde Haiti","symbol":"HTG"},"HUF":{"displayName":"Forint Hungaria","displayName-count-other":"Forint Hungaria","symbol":"HUF","symbol-alt-narrow":"Ft"},"IDR":{"displayName":"Rupiah Indonesia","displayName-count-other":"Rupiah Indonesia","symbol":"Rp","symbol-alt-narrow":"Rp"},"IEP":{"displayName":"Pound Irlandia","symbol":"IEP"},"ILP":{"displayName":"Pound Israel","symbol":"ILP"},"ILR":{"displayName":"Shekel Israel","displayName-count-other":"Shekel Israel (1980–1985)","symbol":"ILR"},"ILS":{"displayName":"Shekel Baru Israel","displayName-count-other":"Shekel Baru Israel","symbol":"₪","symbol-alt-narrow":"₪"},"INR":{"displayName":"Rupee India","displayName-count-other":"Rupee India","symbol":"Rs","symbol-alt-narrow":"₹"},"IQD":{"displayName":"Dinar Irak","displayName-count-other":"Dinar Irak","symbol":"IQD"},"IRR":{"displayName":"Rial Iran","displayName-count-other":"Rial Iran","symbol":"IRR"},"ISJ":{"displayName":"Krona Islandia (1918–1981)","displayName-count-other":"Krona Islandia (1918–1981)","symbol":"ISJ"},"ISK":{"displayName":"Krona Islandia","displayName-count-other":"Krona Islandia","symbol":"ISK","symbol-alt-narrow":"kr"},"ITL":{"displayName":"Lira Italia","symbol":"ITL"},"JMD":{"displayName":"Dolar Jamaika","displayName-count-other":"Dolar Jamaika","symbol":"JMD","symbol-alt-narrow":"$"},"JOD":{"displayName":"Dinar Yordania","displayName-count-other":"Dinar Yordania","symbol":"JOD"},"JPY":{"displayName":"Yen Jepang","displayName-count-other":"Yen Jepang","symbol":"JP¥","symbol-alt-narrow":"¥"},"KES":{"displayName":"Shilling Kenya","displayName-count-other":"Shilling Kenya","symbol":"KES"},"KGS":{"displayName":"Som Kirgistan","displayName-count-other":"Som Kirgistan","symbol":"KGS"},"KHR":{"displayName":"Riel Kamboja","displayName-count-other":"Riel Kamboja","symbol":"KHR","symbol-alt-narrow":"៛"},"KMF":{"displayName":"Franc Komoro","displayName-count-other":"Franc Komoro","symbol":"KMF","symbol-alt-narrow":"CF"},"KPW":{"displayName":"Won Korea Utara","displayName-count-other":"Won Korea Utara","symbol":"KPW","symbol-alt-narrow":"₩"},"KRH":{"displayName":"Hwan Korea Selatan (1953–1962)","displayName-count-other":"Hwan Korea Selatan (1953–1962)","symbol":"KRH"},"KRO":{"displayName":"Won Korea Selatan (1945–1953)","displayName-count-other":"Won Korea Selatan (1945–1953)","symbol":"KRO"},"KRW":{"displayName":"Won Korea Selatan","displayName-count-other":"Won Korea Selatan","symbol":"₩","symbol-alt-narrow":"₩"},"KWD":{"displayName":"Dinar Kuwait","displayName-count-other":"Dinar Kuwait","symbol":"KWD"},"KYD":{"displayName":"Dolar Kepulauan Cayman","displayName-count-other":"Dolar Kepulauan Cayman","symbol":"KYD","symbol-alt-narrow":"$"},"KZT":{"displayName":"Tenge Kazakstan","displayName-count-other":"Tenge Kazakstan","symbol":"KZT","symbol-alt-narrow":"₸"},"LAK":{"displayName":"Kip Laos","displayName-count-other":"Kip Laos","symbol":"LAK","symbol-alt-narrow":"₭"},"LBP":{"displayName":"Pound Lebanon","displayName-count-other":"Pound Lebanon","symbol":"LBP","symbol-alt-narrow":"L£"},"LKR":{"displayName":"Rupee Sri Lanka","displayName-count-other":"Rupee Sri Lanka","symbol":"LKR","symbol-alt-narrow":"Rs"},"LRD":{"displayName":"Dolar Liberia","displayName-count-other":"Dolar Liberia","symbol":"LRD","symbol-alt-narrow":"$"},"LSL":{"displayName":"Loti Lesotho","symbol":"LSL"},"LTL":{"displayName":"Litas Lituania","displayName-count-other":"Litas Lituania","symbol":"LTL","symbol-alt-narrow":"Lt"},"LTT":{"displayName":"Talonas Lituania","symbol":"LTT"},"LUC":{"displayName":"Franc Konvertibel Luksemburg","symbol":"LUC"},"LUF":{"displayName":"Franc Luksemburg","symbol":"LUF"},"LUL":{"displayName":"Financial Franc Luksemburg","symbol":"LUL"},"LVL":{"displayName":"Lats Latvia","displayName-count-other":"Lats Latvia","symbol":"LVL","symbol-alt-narrow":"Ls"},"LVR":{"displayName":"Rubel Latvia","symbol":"LVR"},"LYD":{"displayName":"Dinar Libya","displayName-count-other":"Dinar Libya","symbol":"LYD"},"MAD":{"displayName":"Dirham Maroko","displayName-count-other":"Dirham Maroko","symbol":"MAD"},"MAF":{"displayName":"Franc Maroko","symbol":"MAF"},"MCF":{"displayName":"Franc Monegasque","symbol":"MCF"},"MDC":{"displayName":"Cupon Moldova","symbol":"MDC"},"MDL":{"displayName":"Leu Moldova","displayName-count-other":"Leu Moldova","symbol":"MDL"},"MGA":{"displayName":"Ariary Madagaskar","displayName-count-other":"Ariary Madagaskar","symbol":"MGA","symbol-alt-narrow":"Ar"},"MGF":{"displayName":"Franc Malagasi","symbol":"MGF"},"MKD":{"displayName":"Denar Makedonia","displayName-count-other":"Denar Makedonia","symbol":"MKD"},"MKN":{"displayName":"Denar Makedonia (1992–1993)","displayName-count-other":"Denar Makedonia (1992–1993)","symbol":"MKN"},"MLF":{"displayName":"Franc Mali","symbol":"MLF"},"MMK":{"displayName":"Kyat Myanmar","displayName-count-other":"Kyat Myanmar","symbol":"MMK","symbol-alt-narrow":"K"},"MNT":{"displayName":"Tugrik Mongolia","displayName-count-other":"Tugrik Mongolia","symbol":"MNT","symbol-alt-narrow":"₮"},"MOP":{"displayName":"Pataca Makau","displayName-count-other":"Pataca Makau","symbol":"MOP"},"MRO":{"displayName":"Ouguiya Mauritania","displayName-count-other":"Ouguiya Mauritania","symbol":"MRO"},"MTL":{"displayName":"Lira Malta","symbol":"MTL"},"MTP":{"displayName":"Pound Malta","symbol":"MTP"},"MUR":{"displayName":"Rupee Mauritius","displayName-count-other":"Rupee Mauritius","symbol":"MUR","symbol-alt-narrow":"Rs"},"MVP":{"displayName":"Rufiyaa Maladewa (1947–1981)","displayName-count-other":"Rufiyaa Maladewa (1947–1981)","symbol":"MVP"},"MVR":{"displayName":"Rufiyaa Maladewa","displayName-count-other":"Rufiyaa Maladewa","symbol":"MVR"},"MWK":{"displayName":"Kwacha Malawi","displayName-count-other":"Kwacha Malawi","symbol":"MWK"},"MXN":{"displayName":"Peso Meksiko","displayName-count-other":"Peso Meksiko","symbol":"MX$","symbol-alt-narrow":"$"},"MXP":{"displayName":"Peso Silver Meksiko (1861–1992)","displayName-count-other":"Peso Perak Meksiko","symbol":"MXP"},"MXV":{"displayName":"Unit Investasi Meksiko","symbol":"MXV"},"MYR":{"displayName":"Ringgit Malaysia","displayName-count-other":"Ringgit Malaysia","symbol":"MYR","symbol-alt-narrow":"RM"},"MZE":{"displayName":"Escudo Mozambik","symbol":"MZE"},"MZM":{"displayName":"Metical Mozambik (1980–2006)","displayName-count-other":"Metical Mozambik (1980–2006)","symbol":"MZM"},"MZN":{"displayName":"Metical Mozambik","displayName-count-other":"Metical Mozambik","symbol":"MZN"},"NAD":{"displayName":"Dolar Namibia","displayName-count-other":"Dolar Namibia","symbol":"NAD","symbol-alt-narrow":"$"},"NGN":{"displayName":"Naira Nigeria","displayName-count-other":"Naira Nigeria","symbol":"NGN","symbol-alt-narrow":"₦"},"NIC":{"displayName":"Cordoba Nikaragua (1988–1991)","displayName-count-other":"Cordoba Nikaragua (1988–1991)","symbol":"NIC"},"NIO":{"displayName":"Cordoba Nikaragua","displayName-count-other":"Cordoba Nikaragua","symbol":"NIO","symbol-alt-narrow":"C$"},"NLG":{"displayName":"Guilder Belanda","symbol":"NLG"},"NOK":{"displayName":"Krone Norwegia","displayName-count-other":"Krone Norwegia","symbol":"NOK","symbol-alt-narrow":"kr"},"NPR":{"displayName":"Rupee Nepal","displayName-count-other":"Rupee Nepal","symbol":"NPR","symbol-alt-narrow":"Rs"},"NZD":{"displayName":"Dolar Selandia Baru","displayName-count-other":"Dolar Selandia Baru","symbol":"NZ$","symbol-alt-narrow":"$"},"OMR":{"displayName":"Rial Oman","displayName-count-other":"Rial Oman","symbol":"OMR"},"PAB":{"displayName":"Balboa Panama","displayName-count-other":"Balboa Panama","symbol":"PAB"},"PEI":{"displayName":"Inti Peru","symbol":"PEI"},"PEN":{"displayName":"Sol Peru","displayName-count-other":"Sol Peru","symbol":"PEN"},"PES":{"displayName":"Sol Peru (1863–1965)","displayName-count-other":"Sol Peru (1863–1965)","symbol":"PES"},"PGK":{"displayName":"Kina Papua Nugini","displayName-count-other":"Kina Papua Nugini","symbol":"PGK"},"PHP":{"displayName":"Peso Filipina","displayName-count-other":"Peso Filipina","symbol":"PHP","symbol-alt-narrow":"₱"},"PKR":{"displayName":"Rupee Pakistan","displayName-count-other":"Rupee Pakistan","symbol":"PKR","symbol-alt-narrow":"Rs"},"PLN":{"displayName":"Polandia Zloty","displayName-count-other":"Polandia Zloty","symbol":"PLN","symbol-alt-narrow":"zł"},"PLZ":{"displayName":"Zloty Polandia (1950–1995)","displayName-count-other":"Zloty Polandia (1950–1995)","symbol":"PLZ"},"PTE":{"displayName":"Escudo Portugal","symbol":"PTE"},"PYG":{"displayName":"Guarani Paraguay","displayName-count-other":"Guarani Paraguay","symbol":"PYG","symbol-alt-narrow":"₲"},"QAR":{"displayName":"Rial Qatar","displayName-count-other":"Rial Qatar","symbol":"QAR"},"RHD":{"displayName":"Dolar Rhodesia","symbol":"RHD"},"ROL":{"displayName":"Leu Rumania (1952–2006)","displayName-count-other":"Leu Rumania (1952–2006)","symbol":"ROL"},"RON":{"displayName":"Leu Rumania","displayName-count-other":"Leu Rumania","symbol":"RON","symbol-alt-narrow":"lei"},"RSD":{"displayName":"Dinar Serbia","displayName-count-other":"Dinar Serbia","symbol":"RSD"},"RUB":{"displayName":"Rubel Rusia","displayName-count-other":"Rubel Rusia","symbol":"RUB","symbol-alt-narrow":"₽"},"RUR":{"displayName":"Rubel Rusia (1991–1998)","displayName-count-other":"Rubel Rusia (1991–1998)","symbol":"RUR","symbol-alt-narrow":"р."},"RWF":{"displayName":"Franc Rwanda","displayName-count-other":"Franc Rwanda","symbol":"RWF","symbol-alt-narrow":"RF"},"SAR":{"displayName":"Riyal Arab Saudi","displayName-count-other":"Riyal Arab Saudi","symbol":"SAR"},"SBD":{"displayName":"Dolar Kepulauan Solomon","displayName-count-other":"Dolar Kepulauan Solomon","symbol":"SBD","symbol-alt-narrow":"$"},"SCR":{"displayName":"Rupee Seychelles","displayName-count-other":"Rupee Seychelles","symbol":"SCR"},"SDD":{"displayName":"Dinar Sudan (1992–2007)","displayName-count-other":"Dinar Sudan (1992–2007)","symbol":"SDD"},"SDG":{"displayName":"Pound Sudan","displayName-count-other":"Pound Sudan","symbol":"SDG"},"SDP":{"displayName":"Pound Sudan (1957–1998)","displayName-count-other":"Pound Sudan (1957–1998)","symbol":"SDP"},"SEK":{"displayName":"Krona Swedia","displayName-count-other":"Krona Swedia","symbol":"SEK","symbol-alt-narrow":"kr"},"SGD":{"displayName":"Dolar Singapura","displayName-count-other":"Dolar Singapura","symbol":"SGD","symbol-alt-narrow":"$"},"SHP":{"displayName":"Pound Saint Helena","displayName-count-other":"Pound Saint Helena","symbol":"SHP","symbol-alt-narrow":"£"},"SIT":{"displayName":"Tolar Slovenia","symbol":"SIT"},"SKK":{"displayName":"Koruna Slovakia","symbol":"SKK"},"SLL":{"displayName":"Leone Sierra Leone","displayName-count-other":"Leone Sierra Leone","symbol":"SLL"},"SOS":{"displayName":"Shilling Somalia","displayName-count-other":"Shilling Somalia","symbol":"SOS"},"SRD":{"displayName":"Dolar Suriname","displayName-count-other":"Dolar Suriname","symbol":"SRD","symbol-alt-narrow":"$"},"SRG":{"displayName":"Guilder Suriname","symbol":"SRG"},"SSP":{"displayName":"Pound Sudan Selatan","displayName-count-other":"Pound Sudan Selatan","symbol":"SSP","symbol-alt-narrow":"£"},"STD":{"displayName":"Dobra Sao Tome dan Principe","displayName-count-other":"Dobra Sao Tome dan Principe","symbol":"STD","symbol-alt-narrow":"Db"},"STN":{"displayName":"STN","symbol":"STN"},"SUR":{"displayName":"Rubel Soviet","symbol":"SUR"},"SVC":{"displayName":"Colon El Savador","symbol":"SVC"},"SYP":{"displayName":"Pound Suriah","displayName-count-other":"Pound Suriah","symbol":"SYP","symbol-alt-narrow":"£"},"SZL":{"displayName":"Lilangeni Swaziland","displayName-count-other":"Lilangeni Swaziland","symbol":"SZL"},"THB":{"displayName":"Baht Thailand","displayName-count-other":"Baht Thailand","symbol":"฿","symbol-alt-narrow":"฿"},"TJR":{"displayName":"Rubel Tajikistan","symbol":"TJR"},"TJS":{"displayName":"Somoni Tajikistan","displayName-count-other":"Somoni Tajikistan","symbol":"TJS"},"TMM":{"displayName":"Manat Turkmenistan (1993–2009)","displayName-count-other":"Manat Turkmenistan (1993–2009)","symbol":"TMM"},"TMT":{"displayName":"Manat Turkimenistan","displayName-count-other":"Manat Turkimenistan","symbol":"TMT"},"TND":{"displayName":"Dinar Tunisia","displayName-count-other":"Dinar Tunisia","symbol":"TND"},"TOP":{"displayName":"Paʻanga Tonga","displayName-count-other":"Paʻanga Tonga","symbol":"TOP","symbol-alt-narrow":"T$"},"TPE":{"displayName":"Escudo Timor","symbol":"TPE"},"TRL":{"displayName":"Lira Turki (1922–2005)","displayName-count-other":"Lira Turki (1922–2005)","symbol":"TRL"},"TRY":{"displayName":"Lira Turki","displayName-count-other":"Lira Turki","symbol":"TRY","symbol-alt-narrow":"₺","symbol-alt-variant":"TL"},"TTD":{"displayName":"Dolar Trinidad dan Tobago","displayName-count-other":"Dolar Trinidad dan Tobago","symbol":"TTD","symbol-alt-narrow":"$"},"TWD":{"displayName":"Dolar Baru Taiwan","displayName-count-other":"Dolar Baru Taiwan","symbol":"NT$","symbol-alt-narrow":"NT$"},"TZS":{"displayName":"Shilling Tanzania","displayName-count-other":"Shilling Tanzania","symbol":"TZS"},"UAH":{"displayName":"Hryvnia Ukraina","displayName-count-other":"Hryvnia Ukraina","symbol":"UAH","symbol-alt-narrow":"₴"},"UAK":{"displayName":"Karbovanet Ukraina","symbol":"UAK"},"UGS":{"displayName":"Shilling Uganda (1966–1987)","displayName-count-other":"Shilling Uganda (1966–1987)","symbol":"UGS"},"UGX":{"displayName":"Shilling Uganda","displayName-count-other":"Shilling Uganda","symbol":"UGX"},"USD":{"displayName":"Dolar Amerika Serikat","displayName-count-other":"Dolar Amerika Serikat","symbol":"US$","symbol-alt-narrow":"$"},"USN":{"displayName":"Dolar AS (Hari berikutnya)","symbol":"USN"},"USS":{"displayName":"Dolar AS (Hari yang sama)","symbol":"USS"},"UYI":{"displayName":"Peso Uruguay (Unit Diindeks)","symbol":"UYI"},"UYP":{"displayName":"Peso Uruguay (1975–1993)","displayName-count-other":"Peso Uruguay (1975–1993)","symbol":"UYP"},"UYU":{"displayName":"Peso Uruguay","displayName-count-other":"Peso Uruguay","symbol":"UYU","symbol-alt-narrow":"$"},"UZS":{"displayName":"Som Uzbekistan","displayName-count-other":"Som Uzbekistan","symbol":"UZS"},"VEB":{"displayName":"Bolivar Venezuela (1871–2008)","displayName-count-other":"Bolivar Venezuela (1871–2008)","symbol":"VEB"},"VEF":{"displayName":"Bolivar Venezuela","displayName-count-other":"Bolivar Venezuela","symbol":"VEF","symbol-alt-narrow":"Bs"},"VND":{"displayName":"Dong Vietnam","displayName-count-other":"Dong Vietnam","symbol":"₫","symbol-alt-narrow":"₫"},"VNN":{"displayName":"Dong Vietnam (1978–1985)","displayName-count-other":"Dong Vietnam (1978–1985)","symbol":"VNN"},"VUV":{"displayName":"Vatu Vanuatu","displayName-count-other":"Vatu Vanuatu","symbol":"VUV"},"WST":{"displayName":"Tala Samoa","displayName-count-other":"Tala Samoa","symbol":"WST"},"XAF":{"displayName":"Franc CFA BEAC","displayName-count-other":"Franc CFA BEAC","symbol":"FCFA"},"XAG":{"displayName":"Silver","symbol":"XAG"},"XAU":{"displayName":"Emas","symbol":"XAU"},"XBA":{"displayName":"Unit Gabungan Eropa","symbol":"XBA"},"XBB":{"displayName":"Unit Keuangan Eropa","symbol":"XBB"},"XBC":{"displayName":"Satuan Hitung Eropa (XBC)","symbol":"XBC"},"XBD":{"displayName":"Satuan Hitung Eropa (XBD)","symbol":"XBD"},"XCD":{"displayName":"Dolar Karibia Timur","displayName-count-other":"Dolar Karibia Timur","symbol":"EC$","symbol-alt-narrow":"$"},"XDR":{"displayName":"Hak Khusus Menggambar","symbol":"XDR"},"XEU":{"displayName":"Satuan Mata Uang Eropa","symbol":"XEU"},"XFO":{"displayName":"Franc Gold Perancis","symbol":"XFO"},"XFU":{"displayName":"Franc UIC Perancis","symbol":"XFU"},"XOF":{"displayName":"Franc CFA BCEAO","displayName-count-other":"Franc CFA BCEAO","symbol":"CFA"},"XPD":{"displayName":"Palladium","symbol":"XPD"},"XPF":{"displayName":"Franc CFP","displayName-count-other":"Franc CFP","symbol":"CFPF"},"XPT":{"displayName":"Platinum","symbol":"XPT"},"XRE":{"displayName":"Dana RINET","symbol":"XRE"},"XSU":{"displayName":"XSU","symbol":"XSU"},"XTS":{"displayName":"Kode Mata Uang Pengujian","symbol":"XTS"},"XUA":{"displayName":"XUA","symbol":"XUA"},"XXX":{"displayName":"Mata Uang Tidak Dikenal","displayName-count-other":"(mata uang tidak dikenal)","symbol":"XXX"},"YDD":{"displayName":"Dinar Yaman","symbol":"YDD"},"YER":{"displayName":"Rial Yaman","displayName-count-other":"Rial Yaman","symbol":"YER"},"YUD":{"displayName":"Hard Dinar Yugoslavia (1966–1990)","displayName-count-other":"Dinar Keras Yugoslavia","symbol":"YUD"},"YUM":{"displayName":"Dinar Baru Yugoslavia (1994–2002)","displayName-count-other":"Dinar Baru Yugoslavia (1994–2002)","symbol":"YUM"},"YUN":{"displayName":"Dinar Konvertibel Yugoslavia (1990–1992)","displayName-count-other":"Dinar Konvertibel Yugoslavia (1990–1992)","symbol":"YUN"},"YUR":{"displayName":"Dinar Reformasi Yugoslavia (1992–1993)","displayName-count-other":"Dinar Reformasi Yugoslavia (1992–1993)","symbol":"YUR"},"ZAL":{"displayName":"Rand Afrika Selatan (Keuangan)","symbol":"ZAL"},"ZAR":{"displayName":"Rand Afrika Selatan","displayName-count-other":"Rand Afrika Selatan","symbol":"ZAR","symbol-alt-narrow":"R"},"ZMK":{"displayName":"Kwacha Zambia (1968–2012)","displayName-count-other":"Kwacha Zambia (1968–2012)","symbol":"ZMK"},"ZMW":{"displayName":"Kwacha Zambia","displayName-count-other":"Kwacha Zambia","symbol":"ZMW","symbol-alt-narrow":"ZK"},"ZRN":{"displayName":"Zaire Baru Zaire (1993–1998)","displayName-count-other":"Zaire Baru Zaire (1993–1998)","symbol":"ZRN"},"ZRZ":{"displayName":"Zaire Zaire (1971–1993)","displayName-count-other":"Zaire Zaire (1971–1993)","symbol":"ZRZ"},"ZWD":{"displayName":"Dolar Zimbabwe (1980–2008)","displayName-count-other":"Dolar Zimbabwe (1980–2008)","symbol":"ZWD"},"ZWL":{"displayName":"Dolar Zimbabwe (2009)","symbol":"ZWL"},"ZWR":{"displayName":"Dolar Zimbabwe (2008)","symbol":"ZWR"}},"defaultNumberingSystem":"latn","otherNumberingSystems":{"native":"latn"},"minimumGroupingDigits":"1","symbols-numberSystem-latn":{"decimal":",","group":".","list":";","percentSign":"%","plusSign":"+","minusSign":"-","exponential":"E","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"NaN","timeSeparator":"."},"decimalFormats-numberSystem-latn":{"standard":"#,##0.###","long":{"decimalFormat":{"1000-count-other":"0 ribu","10000-count-other":"00 ribu","100000-count-other":"000 ribu","1000000-count-other":"0 juta","10000000-count-other":"00 juta","100000000-count-other":"000 juta","1000000000-count-other":"0 miliar","10000000000-count-other":"00 miliar","100000000000-count-other":"000 miliar","1000000000000-count-other":"0 triliun","10000000000000-count-other":"00 triliun","100000000000000-count-other":"000 triliun"}},"short":{"decimalFormat":{"1000-count-other":"0 rb","10000-count-other":"00 rb","100000-count-other":"000 rb","1000000-count-other":"0 jt","10000000-count-other":"00 jt","100000000-count-other":"000 jt","1000000000-count-other":"0 M","10000000000-count-other":"00 M","100000000000-count-other":"000 M","1000000000000-count-other":"0 T","10000000000000-count-other":"00 T","100000000000000-count-other":"000 T"}}},"scientificFormats-numberSystem-latn":{"standard":"#E0"},"percentFormats-numberSystem-latn":{"standard":"#,##0%"},"currencyFormats-numberSystem-latn":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"¤#,##0.00","accounting":"¤#,##0.00","short":{"standard":{"1000-count-other":"¤0 rb","10000-count-other":"¤00 rb","100000-count-other":"¤000 rb","1000000-count-other":"¤0 jt","10000000-count-other":"¤00 jt","100000000-count-other":"¤000 jt","1000000000-count-other":"¤0 M","10000000000-count-other":"¤00 M","100000000000-count-other":"¤000 M","1000000000000-count-other":"¤0 T","10000000000000-count-other":"¤00 T","100000000000000-count-other":"¤000 T"}},"unitPattern-count-other":"{0} {1}"},"miscPatterns-numberSystem-latn":{"atLeast":"⩾{0}","range":"{0}–{1}"},"minimalPairs":{"pluralMinimalPairs-count-other":"{0} hari","other":"Ambil belokan kanan ke-{0}."}}},"lt":{"identity":{"version":{"_number":"$Revision: 13705 $","_cldrVersion":"32"},"language":"lt"},"dates":{"calendars":{"gregorian":{"months":{"format":{"abbreviated":{"1":"saus.","2":"vas.","3":"kov.","4":"bal.","5":"geg.","6":"birž.","7":"liep.","8":"rugp.","9":"rugs.","10":"spal.","11":"lapkr.","12":"gruod."},"narrow":{"1":"S","2":"V","3":"K","4":"B","5":"G","6":"B","7":"L","8":"R","9":"R","10":"S","11":"L","12":"G"},"wide":{"1":"sausio","2":"vasario","3":"kovo","4":"balandžio","5":"gegužės","6":"birželio","7":"liepos","8":"rugpjūčio","9":"rugsėjo","10":"spalio","11":"lapkričio","12":"gruodžio"}},"stand-alone":{"abbreviated":{"1":"saus.","2":"vas.","3":"kov.","4":"bal.","5":"geg.","6":"birž.","7":"liep.","8":"rugp.","9":"rugs.","10":"spal.","11":"lapkr.","12":"gruod."},"narrow":{"1":"S","2":"V","3":"K","4":"B","5":"G","6":"B","7":"L","8":"R","9":"R","10":"S","11":"L","12":"G"},"wide":{"1":"sausis","2":"vasaris","3":"kovas","4":"balandis","5":"gegužė","6":"birželis","7":"liepa","8":"rugpjūtis","9":"rugsėjis","10":"spalis","11":"lapkritis","12":"gruodis"}}},"days":{"format":{"abbreviated":{"sun":"sk","mon":"pr","tue":"an","wed":"tr","thu":"kt","fri":"pn","sat":"št"},"narrow":{"sun":"S","mon":"P","tue":"A","wed":"T","thu":"K","fri":"P","sat":"Š"},"short":{"sun":"Sk","mon":"Pr","tue":"An","wed":"Tr","thu":"Kt","fri":"Pn","sat":"Št"},"wide":{"sun":"sekmadienis","mon":"pirmadienis","tue":"antradienis","wed":"trečiadienis","thu":"ketvirtadienis","fri":"penktadienis","sat":"šeštadienis"}},"stand-alone":{"abbreviated":{"sun":"sk","mon":"pr","tue":"an","wed":"tr","thu":"kt","fri":"pn","sat":"št"},"narrow":{"sun":"S","mon":"P","tue":"A","wed":"T","thu":"K","fri":"P","sat":"Š"},"short":{"sun":"Sk","mon":"Pr","tue":"An","wed":"Tr","thu":"Kt","fri":"Pn","sat":"Št"},"wide":{"sun":"sekmadienis","mon":"pirmadienis","tue":"antradienis","wed":"trečiadienis","thu":"ketvirtadienis","fri":"penktadienis","sat":"šeštadienis"}}},"quarters":{"format":{"abbreviated":{"1":"I k.","2":"II k.","3":"III k.","4":"IV k."},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"I ketvirtis","2":"II ketvirtis","3":"III ketvirtis","4":"IV ketvirtis"}},"stand-alone":{"abbreviated":{"1":"I ketv.","2":"II ketv.","3":"III ketv.","4":"IV ketv."},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"I ketvirtis","2":"II ketvirtis","3":"III ketvirtis","4":"IV ketvirtis"}}},"dayPeriods":{"format":{"abbreviated":{"midnight":"vidurnaktis","am":"priešpiet","noon":"perpiet","pm":"popiet","morning1":"rytas","afternoon1":"popietė","evening1":"vakaras","night1":"naktis"},"narrow":{"midnight":"vidurnaktis","am":"pr. p.","noon":"perpiet","pm":"pop.","morning1":"rytas","afternoon1":"popietė","evening1":"vakaras","night1":"naktis"},"wide":{"midnight":"vidurnaktis","am":"priešpiet","noon":"perpiet","pm":"popiet","morning1":"rytas","afternoon1":"popietė","evening1":"vakaras","night1":"naktis"}},"stand-alone":{"abbreviated":{"midnight":"vidurnaktis","am":"priešpiet","noon":"vidurdienis","pm":"popiet","morning1":"rytas","afternoon1":"diena","evening1":"vakaras","night1":"naktis"},"narrow":{"midnight":"vidurnaktis","am":"pr. p.","noon":"vidurdienis","pm":"pop.","morning1":"rytas","afternoon1":"diena","evening1":"vakaras","night1":"naktis"},"wide":{"midnight":"vidurnaktis","am":"priešpiet","noon":"vidurdienis","pm":"popiet","morning1":"rytas","afternoon1":"diena","evening1":"vakaras","night1":"naktis"}}},"eras":{"eraNames":{"0":"prieš Kristų","1":"po Kristaus","0-alt-variant":"prieš mūsų erą","1-alt-variant":"mūsų eroje"},"eraAbbr":{"0":"pr. Kr.","1":"po Kr.","0-alt-variant":"pr. m. e.","1-alt-variant":"mūsų eroje"},"eraNarrow":{"0":"pr. Kr.","1":"po Kr.","0-alt-variant":"pr. m. e.","1-alt-variant":"mūsų eroje"}},"dateFormats":{"full":"y 'm'. MMMM d 'd'., EEEE","long":"y 'm'. MMMM d 'd'.","medium":"y-MM-dd","short":"y-MM-dd"},"timeFormats":{"full":"HH:mm:ss zzzz","long":"HH:mm:ss z","medium":"HH:mm:ss","short":"HH:mm"},"dateTimeFormats":{"full":"{1} {0}","long":"{1} {0}","medium":"{1} {0}","short":"{1} {0}","availableFormats":{"Bh":"h B","Bhm":"h:mm B","Bhms":"h:mm:ss B","d":"dd","E":"ccc","EBhm":"h:mm B, E","EBhms":"h:mm:ss B, E","Ed":"d, E","Ehm":"hh:mm a, E","EHm":"HH:mm, E","Ehms":"hh:mm:ss a, E","EHms":"HH:mm:ss, E","Gy":"y 'm'. G","GyMMM":"y-MM G","GyMMMd":"y-MM-dd G","GyMMMEd":"y-MM-dd G, E","GyMMMM":"y 'm'. G, LLLL","GyMMMMd":"y 'm'. G MMMM d 'd'.","GyMMMMEd":"y 'm'. G MMMM d 'd'., E","h":"hh a","H":"HH","hm":"hh:mm a","Hm":"HH:mm","hms":"hh:mm:ss a","Hms":"HH:mm:ss","hmsv":"hh:mm:ss a; v","Hmsv":"HH:mm:ss; v","hmv":"hh:mm a; v","Hmv":"HH:mm; v","M":"MM","Md":"MM-d","MEd":"MM-dd, E","MMdd":"MM-dd","MMM":"MM","MMMd":"MM-dd","MMMEd":"MM-dd, E","MMMM":"LLLL","MMMMd":"MMMM d 'd'.","MMMMEd":"MMMM d 'd'., E","MMMMW-count-one":"MMM W 'sav'.","MMMMW-count-few":"MMM W 'sav'.","MMMMW-count-many":"MMM W 'sav'.","MMMMW-count-other":"MMM W 'sav'.","ms":"mm:ss","y":"y","yM":"y-MM","yMd":"y-MM-dd","yMEd":"y-MM-dd, E","yMMM":"y-MM","yMMMd":"y-MM-dd","yMMMEd":"y-MM-dd, E","yMMMM":"y 'm'. LLLL","yMMMMd":"y 'm'. MMMM d 'd'.","yMMMMEd":"y 'm'. MMMM d 'd'., E","yQQQ":"y QQQ","yQQQQ":"y QQQQ","yw-count-one":"Y w 'sav'.","yw-count-few":"Y w 'sav'.","yw-count-many":"Y w 'sav'.","yw-count-other":"Y w 'sav'."},"appendItems":{"Day":"{0} ({2}: {1})","Day-Of-Week":"{0} {1}","Era":"{1} {0}","Hour":"{0} ({2}: {1})","Minute":"{0} ({2}: {1})","Month":"{0} ({2}: {1})","Quarter":"{0} ({2}: {1})","Second":"{0} ({2}: {1})","Timezone":"{0} {1}","Week":"{0} ({2}: {1})","Year":"{1} {0}"},"intervalFormats":{"intervalFormatFallback":"{0} – {1}","d":{"d":"dd–dd"},"h":{"a":"h a – h a","h":"hh–hh a"},"H":{"H":"HH–HH"},"hm":{"a":"hh:mm a–hh:mm a","h":"hh:mm–hh:mm a","m":"hh:mm–hh:mm a"},"Hm":{"H":"HH:mm–HH:mm","m":"HH:mm–HH:mm"},"hmv":{"a":"hh:mm a–hh:mm a v","h":"hh:mm–hh:mm a v","m":"h:mm–h:mm a v"},"Hmv":{"H":"HH:mm–HH:mm v","m":"HH:mm–HH:mm v"},"hv":{"a":"h a – h a v","h":"hh–hh a v"},"Hv":{"H":"HH–HH v"},"M":{"M":"MM–MM"},"Md":{"d":"MM-dd – MM-dd","M":"MM-dd – MM-dd"},"MEd":{"d":"MM-dd, E – MM-dd, E","M":"MM-dd, E – MM-dd, E"},"MMM":{"M":"LLL–LLL"},"MMMd":{"d":"MMM d–d","M":"MMM d – MMM d"},"MMMEd":{"d":"MMM d, E – MMM d, E","M":"MMM d, E – MMM d, E"},"MMMM":{"M":"LLLL–LLLL"},"MMMMd":{"d":"MMMM d–d","M":"MMMM d – MMMM d"},"MMMMEd":{"d":"MMMM d, E – MMMM d, E","M":"MMMM d, E – MMMM d, E"},"y":{"y":"y–y"},"yM":{"M":"y-MM – y-MM","y":"y-MM – y-MM"},"yMd":{"d":"y-MM-dd – y-MM-dd","M":"y-MM-dd – y-MM-dd","y":"y-MM-dd – y-MM-dd"},"yMEd":{"d":"y-MM-dd, E – y-MM-dd, E","M":"y-MM-dd, E – y-MM-dd, E","y":"y-MM-dd, E – y-MM-dd, E"},"yMMM":{"M":"y MMM–MMM","y":"y MMM – y MMM"},"yMMMd":{"d":"y MMM d–d","M":"y MMM d – MMM d","y":"y MMM d – y MMM d"},"yMMMEd":{"d":"y MMM d, E – MMM d, E","M":"y MMM d, E – MMM d, E","y":"y MMM d, E – y MMM d, E"},"yMMMM":{"M":"y LLLL–LLLL","y":"y LLLL – y LLLL"},"yMMMMd":{"d":"y MMMM d–d","M":"y MMMM d – MMMM d","y":"y MMMM d – y MMMM d"},"yMMMMEd":{"d":"y MMMM d, E – MMMM d, E","M":"y MMMM d, E. – MMMM d, E.","y":"y MMMM d, E. – y MMMM d, E."}}}}},"fields":{"era":{"displayName":"era"},"era-short":{"displayName":"era"},"era-narrow":{"displayName":"era"},"year":{"displayName":"metai","relative-type--1":"praėjusiais metais","relative-type-0":"šiais metais","relative-type-1":"kitais metais","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} metų","relativeTimePattern-count-few":"po {0} metų","relativeTimePattern-count-many":"po {0} metų","relativeTimePattern-count-other":"po {0} metų"},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} metus","relativeTimePattern-count-few":"prieš {0} metus","relativeTimePattern-count-many":"prieš {0} metų","relativeTimePattern-count-other":"prieš {0} metų"}},"year-short":{"displayName":"m.","relative-type--1":"praėjusiais metais","relative-type-0":"šiais metais","relative-type-1":"kitais metais","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} m.","relativeTimePattern-count-few":"po {0} m.","relativeTimePattern-count-many":"po {0} m.","relativeTimePattern-count-other":"po {0} m."},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} m.","relativeTimePattern-count-few":"prieš {0} m.","relativeTimePattern-count-many":"prieš {0} m.","relativeTimePattern-count-other":"prieš {0} m."}},"year-narrow":{"displayName":"m.","relative-type--1":"praėjusiais metais","relative-type-0":"šiais metais","relative-type-1":"kitais metais","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} m.","relativeTimePattern-count-few":"po {0} m.","relativeTimePattern-count-many":"po {0} m.","relativeTimePattern-count-other":"po {0} m."},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} m.","relativeTimePattern-count-few":"prieš {0} m.","relativeTimePattern-count-many":"prieš {0} m.","relativeTimePattern-count-other":"prieš {0} m."}},"quarter":{"displayName":"ketvirtis","relative-type--1":"praėjęs ketvirtis","relative-type-0":"šis ketvirtis","relative-type-1":"kitas ketvirtis","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} ketvirčio","relativeTimePattern-count-few":"po {0} ketvirčių","relativeTimePattern-count-many":"po {0} ketvirčio","relativeTimePattern-count-other":"po {0} ketvirčių"},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} ketvirtį","relativeTimePattern-count-few":"prieš {0} ketvirčius","relativeTimePattern-count-many":"prieš {0} ketvirčio","relativeTimePattern-count-other":"prieš {0} ketvirčių"}},"quarter-short":{"displayName":"ketv.","relative-type--1":"praėjęs ketvirtis","relative-type-0":"šis ketvirtis","relative-type-1":"kitas ketvirtis","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} ketv.","relativeTimePattern-count-few":"po {0} ketv.","relativeTimePattern-count-many":"po {0} ketv.","relativeTimePattern-count-other":"po {0} ketv."},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} ketv.","relativeTimePattern-count-few":"prieš {0} ketv.","relativeTimePattern-count-many":"prieš {0} ketv.","relativeTimePattern-count-other":"prieš {0} ketv."}},"quarter-narrow":{"displayName":"ketv.","relative-type--1":"praėjęs ketvirtis","relative-type-0":"šis ketvirtis","relative-type-1":"kitas ketvirtis","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} ketv.","relativeTimePattern-count-few":"po {0} ketv.","relativeTimePattern-count-many":"po {0} ketv.","relativeTimePattern-count-other":"po {0} ketv."},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} ketv.","relativeTimePattern-count-few":"prieš {0} ketv.","relativeTimePattern-count-many":"prieš {0} ketv.","relativeTimePattern-count-other":"prieš {0} ketv."}},"month":{"displayName":"mėnuo","relative-type--1":"praėjusį mėnesį","relative-type-0":"šį mėnesį","relative-type-1":"kitą mėnesį","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} mėnesio","relativeTimePattern-count-few":"po {0} mėnesių","relativeTimePattern-count-many":"po {0} mėnesio","relativeTimePattern-count-other":"po {0} mėnesių"},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} mėnesį","relativeTimePattern-count-few":"prieš {0} mėnesius","relativeTimePattern-count-many":"prieš {0} mėnesio","relativeTimePattern-count-other":"prieš {0} mėnesių"}},"month-short":{"displayName":"mėn.","relative-type--1":"praėjusį mėnesį","relative-type-0":"šį mėnesį","relative-type-1":"kitą mėnesį","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} mėn.","relativeTimePattern-count-few":"po {0} mėn.","relativeTimePattern-count-many":"po {0} mėn.","relativeTimePattern-count-other":"po {0} mėn."},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} mėn.","relativeTimePattern-count-few":"prieš {0} mėn.","relativeTimePattern-count-many":"prieš {0} mėn.","relativeTimePattern-count-other":"prieš {0} mėn."}},"month-narrow":{"displayName":"mėn.","relative-type--1":"praėjusį mėnesį","relative-type-0":"šį mėnesį","relative-type-1":"kitą mėnesį","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} mėn.","relativeTimePattern-count-few":"po {0} mėn.","relativeTimePattern-count-many":"po {0} mėn.","relativeTimePattern-count-other":"po {0} mėn."},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} mėn.","relativeTimePattern-count-few":"prieš {0} mėn.","relativeTimePattern-count-many":"prieš {0} mėn.","relativeTimePattern-count-other":"prieš {0} mėn."}},"week":{"displayName":"savaitė","relative-type--1":"praėjusią savaitę","relative-type-0":"šią savaitę","relative-type-1":"kitą savaitę","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} savaitės","relativeTimePattern-count-few":"po {0} savaičių","relativeTimePattern-count-many":"po {0} savaitės","relativeTimePattern-count-other":"po {0} savaičių"},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} savaitę","relativeTimePattern-count-few":"prieš {0} savaites","relativeTimePattern-count-many":"prieš {0} savaitės","relativeTimePattern-count-other":"prieš {0} savaičių"},"relativePeriod":"{0} savaitę"},"week-short":{"displayName":"sav.","relative-type--1":"praėjusią savaitę","relative-type-0":"šią savaitę","relative-type-1":"kitą savaitę","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} sav.","relativeTimePattern-count-few":"po {0} sav.","relativeTimePattern-count-many":"po {0} sav.","relativeTimePattern-count-other":"po {0} sav."},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} sav.","relativeTimePattern-count-few":"prieš {0} sav.","relativeTimePattern-count-many":"prieš {0} sav.","relativeTimePattern-count-other":"prieš {0} sav."},"relativePeriod":"{0} savaitę"},"week-narrow":{"displayName":"sav.","relative-type--1":"praėjusią savaitę","relative-type-0":"šią savaitę","relative-type-1":"kitą savaitę","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} sav.","relativeTimePattern-count-few":"po {0} sav.","relativeTimePattern-count-many":"po {0} sav.","relativeTimePattern-count-other":"po {0} sav."},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} sav.","relativeTimePattern-count-few":"prieš {0} sav.","relativeTimePattern-count-many":"prieš {0} sav.","relativeTimePattern-count-other":"prieš {0} sav."},"relativePeriod":"{0} savaitę"},"weekOfMonth":{"displayName":"mėnesio savaitė"},"weekOfMonth-short":{"displayName":"mėnesio savaitė"},"weekOfMonth-narrow":{"displayName":"mėnesio savaitė"},"day":{"displayName":"diena","relative-type--2":"užvakar","relative-type--1":"vakar","relative-type-0":"šiandien","relative-type-1":"rytoj","relative-type-2":"poryt","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} dienos","relativeTimePattern-count-few":"po {0} dienų","relativeTimePattern-count-many":"po {0} dienos","relativeTimePattern-count-other":"po {0} dienų"},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} dieną","relativeTimePattern-count-few":"prieš {0} dienas","relativeTimePattern-count-many":"prieš {0} dienos","relativeTimePattern-count-other":"prieš {0} dienų"}},"day-short":{"displayName":"d.","relative-type--2":"užvakar","relative-type--1":"vakar","relative-type-0":"šiandien","relative-type-1":"rytoj","relative-type-2":"poryt","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} d.","relativeTimePattern-count-few":"po {0} d.","relativeTimePattern-count-many":"po {0} d.","relativeTimePattern-count-other":"po {0} d."},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} d.","relativeTimePattern-count-few":"prieš {0} d.","relativeTimePattern-count-many":"prieš {0} d.","relativeTimePattern-count-other":"prieš {0} d."}},"day-narrow":{"displayName":"d.","relative-type--2":"užvakar","relative-type--1":"vakar","relative-type-0":"šiandien","relative-type-1":"rytoj","relative-type-2":"poryt","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} d.","relativeTimePattern-count-few":"po {0} d.","relativeTimePattern-count-many":"po {0} d.","relativeTimePattern-count-other":"po {0} d."},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} d.","relativeTimePattern-count-few":"prieš {0} d.","relativeTimePattern-count-many":"prieš {0} d.","relativeTimePattern-count-other":"prieš {0} d."}},"dayOfYear":{"displayName":"metų diena"},"dayOfYear-short":{"displayName":"metų diena"},"dayOfYear-narrow":{"displayName":"metų diena"},"weekday":{"displayName":"savaitės diena"},"weekday-short":{"displayName":"savaitės diena"},"weekday-narrow":{"displayName":"savaitės diena"},"weekdayOfMonth":{"displayName":"mėnesio šiokiadienis"},"weekdayOfMonth-short":{"displayName":"mėnesio šiokiadienis"},"weekdayOfMonth-narrow":{"displayName":"mėnesio šiokiadienis"},"sun":{"relative-type--1":"praėjusį sekmadienį","relative-type-0":"šį sekmadienį","relative-type-1":"kitą sekmadienį","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} sekmadienio","relativeTimePattern-count-few":"po {0} sekmadienių","relativeTimePattern-count-many":"po {0} sekmadienio","relativeTimePattern-count-other":"po {0} sekmadienių"},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} sekmadienį","relativeTimePattern-count-few":"prieš {0} sekmadienius","relativeTimePattern-count-many":"prieš {0} sekmadienio","relativeTimePattern-count-other":"prieš {0} sekmadienių"}},"sun-short":{"relative-type--1":"praėjusį sekm.","relative-type-0":"šį sekm.","relative-type-1":"kitą sekm.","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} sekm.","relativeTimePattern-count-few":"po {0} sekm.","relativeTimePattern-count-many":"po {0} sekm.","relativeTimePattern-count-other":"po {0} sekm."},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} sekm.","relativeTimePattern-count-few":"prieš {0} sekm.","relativeTimePattern-count-many":"prieš {0} sekm.","relativeTimePattern-count-other":"prieš {0} sekm."}},"sun-narrow":{"relative-type--1":"praėjusį sekm.","relative-type-0":"šį sekm.","relative-type-1":"kitą sekm.","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} sekm.","relativeTimePattern-count-few":"po {0} sekm.","relativeTimePattern-count-many":"po {0} sekm.","relativeTimePattern-count-other":"po {0} sekm."},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} sekm.","relativeTimePattern-count-few":"prieš {0} sekm.","relativeTimePattern-count-many":"prieš {0} sekm.","relativeTimePattern-count-other":"prieš {0} sekm."}},"mon":{"relative-type--1":"praėjusį pirmadienį","relative-type-0":"šį pirmadienį","relative-type-1":"kitą pirmadienį","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} pirmadienio","relativeTimePattern-count-few":"po {0} pirmadienių","relativeTimePattern-count-many":"po {0} pirmadienio","relativeTimePattern-count-other":"po {0} pirmadienių"},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} pirmadienį","relativeTimePattern-count-few":"prieš {0} pirmadienius","relativeTimePattern-count-many":"prieš {0} pirmadienio","relativeTimePattern-count-other":"prieš {0} pirmadienių"}},"mon-short":{"relative-type--1":"praėjusį pirm.","relative-type-0":"šį pirm.","relative-type-1":"kitą pirm.","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} pirm.","relativeTimePattern-count-few":"po {0} pirm.","relativeTimePattern-count-many":"po {0} pirm.","relativeTimePattern-count-other":"po {0} pirm."},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} pirm.","relativeTimePattern-count-few":"prieš {0} pirm.","relativeTimePattern-count-many":"prieš {0} pirm.","relativeTimePattern-count-other":"prieš {0} pirm."}},"mon-narrow":{"relative-type--1":"praėjusį pirm.","relative-type-0":"šį pirm.","relative-type-1":"kitą pirm.","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} pirm.","relativeTimePattern-count-few":"po {0} pirm.","relativeTimePattern-count-many":"po {0} pirm.","relativeTimePattern-count-other":"po {0} pirm."},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} pirm.","relativeTimePattern-count-few":"prieš {0} pirm.","relativeTimePattern-count-many":"prieš {0} pirm.","relativeTimePattern-count-other":"prieš {0} pirm."}},"tue":{"relative-type--1":"praėjusį antradienį","relative-type-0":"šį antradienį","relative-type-1":"kitą antradienį","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} antradienio","relativeTimePattern-count-few":"po {0} antradienių","relativeTimePattern-count-many":"po {0} antradienio","relativeTimePattern-count-other":"po {0} antradienių"},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} antradienį","relativeTimePattern-count-few":"prieš {0} antradienius","relativeTimePattern-count-many":"prieš {0} antradienio","relativeTimePattern-count-other":"prieš {0} antradienių"}},"tue-short":{"relative-type--1":"praėjusį antr.","relative-type-0":"šį antr.","relative-type-1":"kitą antr.","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} antr.","relativeTimePattern-count-few":"po {0} antr.","relativeTimePattern-count-many":"po {0} antr.","relativeTimePattern-count-other":"po {0} antr."},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} antr.","relativeTimePattern-count-few":"prieš {0} antr.","relativeTimePattern-count-many":"prieš {0} antr.","relativeTimePattern-count-other":"prieš {0} antr."}},"tue-narrow":{"relative-type--1":"praėjusį antr.","relative-type-0":"šį antr.","relative-type-1":"kitą antr.","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} antr.","relativeTimePattern-count-few":"po {0} antr.","relativeTimePattern-count-many":"po {0} antr.","relativeTimePattern-count-other":"po {0} antr."},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} antr.","relativeTimePattern-count-few":"prieš {0} antr.","relativeTimePattern-count-many":"prieš {0} antr.","relativeTimePattern-count-other":"prieš {0} antr."}},"wed":{"relative-type--1":"praėjusį trečiadienį","relative-type-0":"šį trečiadienį","relative-type-1":"kitą trečiadienį","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} trečiadienio","relativeTimePattern-count-few":"po {0} trečiadienių","relativeTimePattern-count-many":"po {0} trečiadienio","relativeTimePattern-count-other":"po {0} trečiadienių"},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} trečiadienį","relativeTimePattern-count-few":"prieš {0} trečiadienius","relativeTimePattern-count-many":"prieš {0} trečiadienio","relativeTimePattern-count-other":"prieš {0} trečiadienių"}},"wed-short":{"relative-type--1":"praėjusį treč.","relative-type-0":"šį treč.","relative-type-1":"kitą treč.","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} treč.","relativeTimePattern-count-few":"po {0} treč.","relativeTimePattern-count-many":"po {0} treč.","relativeTimePattern-count-other":"po {0} treč."},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} treč.","relativeTimePattern-count-few":"prieš {0} treč.","relativeTimePattern-count-many":"prieš {0} treč.","relativeTimePattern-count-other":"prieš {0} treč."}},"wed-narrow":{"relative-type--1":"praėjusį treč.","relative-type-0":"šį treč.","relative-type-1":"kitą treč.","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} treč.","relativeTimePattern-count-few":"po {0} treč.","relativeTimePattern-count-many":"po {0} treč.","relativeTimePattern-count-other":"po {0} treč."},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} treč.","relativeTimePattern-count-few":"prieš {0} treč.","relativeTimePattern-count-many":"prieš {0} treč.","relativeTimePattern-count-other":"prieš {0} treč."}},"thu":{"relative-type--1":"praėjusį ketvirtadienį","relative-type-0":"šį ketvirtadienį","relative-type-1":"kitą ketvirtadienį","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} ketvirtadienio","relativeTimePattern-count-few":"po {0} ketvirtadienių","relativeTimePattern-count-many":"po {0} ketvirtadienio","relativeTimePattern-count-other":"po {0} ketvirtadienių"},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} ketvirtadienį","relativeTimePattern-count-few":"prieš {0} ketvirtadienius","relativeTimePattern-count-many":"prieš {0} ketvirtadienio","relativeTimePattern-count-other":"prieš {0} ketvirtadienių"}},"thu-short":{"relative-type--1":"praėjusį ketv.","relative-type-0":"šį ketv.","relative-type-1":"kitą ketv.","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} ketv.","relativeTimePattern-count-few":"po {0} ketv.","relativeTimePattern-count-many":"po {0} ketv.","relativeTimePattern-count-other":"po {0} ketv."},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} ketv.","relativeTimePattern-count-few":"prieš {0} ketv.","relativeTimePattern-count-many":"prieš {0} ketv.","relativeTimePattern-count-other":"prieš {0} ketv."}},"thu-narrow":{"relative-type--1":"praėjusį ketv.","relative-type-0":"šį ketv.","relative-type-1":"kitą ketv.","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} ketv.","relativeTimePattern-count-few":"po {0} ketv.","relativeTimePattern-count-many":"po {0} ketv.","relativeTimePattern-count-other":"po {0} ketv."},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} ketv.","relativeTimePattern-count-few":"prieš {0} ketv.","relativeTimePattern-count-many":"prieš {0} ketv.","relativeTimePattern-count-other":"prieš {0} ketv."}},"fri":{"relative-type--1":"praėjusį penktadienį","relative-type-0":"šį penktadienį","relative-type-1":"kitą penktadienį","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} penktadienio","relativeTimePattern-count-few":"po {0} penktadienių","relativeTimePattern-count-many":"po {0} penktadienio","relativeTimePattern-count-other":"po {0} penktadienių"},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} penktadienį","relativeTimePattern-count-few":"prieš {0} penktadienius","relativeTimePattern-count-many":"prieš {0} penktadienio","relativeTimePattern-count-other":"prieš {0} penktadienių"}},"fri-short":{"relative-type--1":"praėjusį penkt.","relative-type-0":"šį penkt.","relative-type-1":"kitą penkt.","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} penkt.","relativeTimePattern-count-few":"po {0} penkt.","relativeTimePattern-count-many":"po {0} penkt.","relativeTimePattern-count-other":"po {0} penkt."},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} penkt.","relativeTimePattern-count-few":"prieš {0} penkt.","relativeTimePattern-count-many":"prieš {0} penkt.","relativeTimePattern-count-other":"prieš {0} penkt."}},"fri-narrow":{"relative-type--1":"praėjusį penkt.","relative-type-0":"šį penkt.","relative-type-1":"kitą penkt.","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} penkt.","relativeTimePattern-count-few":"po {0} penkt.","relativeTimePattern-count-many":"po {0} penkt.","relativeTimePattern-count-other":"po {0} penkt."},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} penkt.","relativeTimePattern-count-few":"prieš {0} penkt.","relativeTimePattern-count-many":"prieš {0} penkt.","relativeTimePattern-count-other":"prieš {0} penkt."}},"sat":{"relative-type--1":"praėjusį šeštadienį","relative-type-0":"šį šeštadienį","relative-type-1":"kitą šeštadienį","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} šeštadienio","relativeTimePattern-count-few":"po {0} šeštadienių","relativeTimePattern-count-many":"po {0} šeštadienio","relativeTimePattern-count-other":"po {0} šeštadienių"},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} šeštadienį","relativeTimePattern-count-few":"prieš {0} šeštadienius","relativeTimePattern-count-many":"prieš {0} šeštadienio","relativeTimePattern-count-other":"prieš {0} šeštadienių"}},"sat-short":{"relative-type--1":"praėjusį šešt.","relative-type-0":"šį šešt.","relative-type-1":"kitą šešt.","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} šešt.","relativeTimePattern-count-few":"po {0} šešt.","relativeTimePattern-count-many":"po {0} šešt.","relativeTimePattern-count-other":"po {0} šešt."},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} šešt.","relativeTimePattern-count-few":"prieš {0} šešt.","relativeTimePattern-count-many":"prieš {0} šešt.","relativeTimePattern-count-other":"prieš {0} šešt."}},"sat-narrow":{"relative-type--1":"praėjusį šešt.","relative-type-0":"šį šešt.","relative-type-1":"kitą šešt.","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} šeštadienio","relativeTimePattern-count-few":"po {0} šešt.","relativeTimePattern-count-many":"po {0} šešt.","relativeTimePattern-count-other":"po {0} šešt."},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} šešt.","relativeTimePattern-count-few":"prieš {0} šešt.","relativeTimePattern-count-many":"prieš {0} šešt.","relativeTimePattern-count-other":"prieš {0} šešt."}},"dayperiod-short":{"displayName":"iki pietų / po pietų"},"dayperiod":{"displayName":"iki pietų / po pietų"},"dayperiod-narrow":{"displayName":"iki pietų / po pietų"},"hour":{"displayName":"valanda","relative-type-0":"šią valandą","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} valandos","relativeTimePattern-count-few":"po {0} valandų","relativeTimePattern-count-many":"po {0} valandos","relativeTimePattern-count-other":"po {0} valandų"},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} valandą","relativeTimePattern-count-few":"prieš {0} valandas","relativeTimePattern-count-many":"prieš {0} valandos","relativeTimePattern-count-other":"prieš {0} valandų"}},"hour-short":{"displayName":"val.","relative-type-0":"šią valandą","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} val.","relativeTimePattern-count-few":"po {0} val.","relativeTimePattern-count-many":"po {0} val.","relativeTimePattern-count-other":"po {0} val."},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} val.","relativeTimePattern-count-few":"prieš {0} val.","relativeTimePattern-count-many":"prieš {0} val.","relativeTimePattern-count-other":"prieš {0} val."}},"hour-narrow":{"displayName":"h","relative-type-0":"šią valandą","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} val.","relativeTimePattern-count-few":"po {0} val.","relativeTimePattern-count-many":"po {0} val.","relativeTimePattern-count-other":"po {0} val."},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} val.","relativeTimePattern-count-few":"prieš {0} val.","relativeTimePattern-count-many":"prieš {0} val.","relativeTimePattern-count-other":"prieš {0} val."}},"minute":{"displayName":"minutė","relative-type-0":"šią minutę","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} minutės","relativeTimePattern-count-few":"po {0} minučių","relativeTimePattern-count-many":"po {0} minutės","relativeTimePattern-count-other":"po {0} minučių"},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} minutę","relativeTimePattern-count-few":"prieš {0} minutes","relativeTimePattern-count-many":"prieš {0} minutės","relativeTimePattern-count-other":"prieš {0} minučių"}},"minute-short":{"displayName":"min.","relative-type-0":"šią minutę","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} min.","relativeTimePattern-count-few":"po {0} min.","relativeTimePattern-count-many":"po {0} min.","relativeTimePattern-count-other":"po {0} min."},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} min.","relativeTimePattern-count-few":"prieš {0} min.","relativeTimePattern-count-many":"prieš {0} min.","relativeTimePattern-count-other":"prieš {0} min."}},"minute-narrow":{"displayName":"min.","relative-type-0":"šią minutę","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} min.","relativeTimePattern-count-few":"po {0} min.","relativeTimePattern-count-many":"po {0} min.","relativeTimePattern-count-other":"po {0} min."},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} min.","relativeTimePattern-count-few":"prieš {0} min.","relativeTimePattern-count-many":"prieš {0} min.","relativeTimePattern-count-other":"prieš {0} min."}},"second":{"displayName":"sekundė","relative-type-0":"dabar","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} sekundės","relativeTimePattern-count-few":"po {0} sekundžių","relativeTimePattern-count-many":"po {0} sekundės","relativeTimePattern-count-other":"po {0} sekundžių"},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} sekundę","relativeTimePattern-count-few":"prieš {0} sekundes","relativeTimePattern-count-many":"prieš {0} sekundės","relativeTimePattern-count-other":"prieš {0} sekundžių"}},"second-short":{"displayName":"sek.","relative-type-0":"dabar","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} sek.","relativeTimePattern-count-few":"po {0} sek.","relativeTimePattern-count-many":"po {0} sek.","relativeTimePattern-count-other":"po {0} sek."},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} sek.","relativeTimePattern-count-few":"prieš {0} sek.","relativeTimePattern-count-many":"prieš {0} sek.","relativeTimePattern-count-other":"prieš {0} sek."}},"second-narrow":{"displayName":"s","relative-type-0":"dabar","relativeTime-type-future":{"relativeTimePattern-count-one":"po {0} s","relativeTimePattern-count-few":"po {0} s","relativeTimePattern-count-many":"po {0} s","relativeTimePattern-count-other":"po {0} s"},"relativeTime-type-past":{"relativeTimePattern-count-one":"prieš {0} s","relativeTimePattern-count-few":"prieš {0} s","relativeTimePattern-count-many":"prieš {0} s","relativeTimePattern-count-other":"prieš {0} s"}},"zone":{"displayName":"laiko juosta"},"zone-short":{"displayName":"laiko juosta"},"zone-narrow":{"displayName":"laiko juosta"}}},"numbers":{"currencies":{"ADP":{"displayName":"Andoros peseta","displayName-count-one":"Andoros peseta","displayName-count-few":"Andoros pesetos","displayName-count-many":"Andoros pesetos","displayName-count-other":"Andoros pesetos","symbol":"ADP"},"AED":{"displayName":"Jungtinių Arabų Emyratų dirhamas","displayName-count-one":"JAE dirhamas","displayName-count-few":"JAE dirhamai","displayName-count-many":"JAE dirhamo","displayName-count-other":"JAE dirhamų","symbol":"AED"},"AFA":{"displayName":"Afganistano afganis (1927–2002)","displayName-count-one":"Afganistano afganis (1927–2002)","displayName-count-few":"Afganistano afganiai (1927–2002)","displayName-count-many":"Afganistano afganio (1927–2002)","displayName-count-other":"Afganistano afganių (1927–2002)","symbol":"AFA"},"AFN":{"displayName":"Afganistano afganis","displayName-count-one":"Afganistano afganis","displayName-count-few":"Afganistano afganiai","displayName-count-many":"Afganistano afganio","displayName-count-other":"Afganistano afganių","symbol":"AFN"},"ALK":{"displayName":"Albanijos lekas (1946–1965)","displayName-count-one":"Albanijos lekas (1946–1965)","displayName-count-few":"Albanijos lekai (1946–1965)","displayName-count-many":"Albanijos leko (1946–1965)","displayName-count-other":"Albanijos lekų (1946–1965)","symbol":"ALK"},"ALL":{"displayName":"Albanijos lekas","displayName-count-one":"Albanijos lekas","displayName-count-few":"Albanijos lekai","displayName-count-many":"Albanijos leko","displayName-count-other":"Albanijos lekų","symbol":"ALL"},"AMD":{"displayName":"Armėnijos dramas","displayName-count-one":"Armėnijos dramas","displayName-count-few":"Armėnijos dramai","displayName-count-many":"Armėnijos dramo","displayName-count-other":"Armėnijos dramų","symbol":"AMD"},"ANG":{"displayName":"Olandijos Antilų guldenas","displayName-count-one":"Olandijos Antilų guldenas","displayName-count-few":"Olandijos Antilų guldenai","displayName-count-many":"Olandijos Antilų guldeno","displayName-count-other":"Olandijos Antilų guldenų","symbol":"ANG"},"AOA":{"displayName":"Angolos kvanza","displayName-count-one":"Angolos kvanza","displayName-count-few":"Angolos kvanzos","displayName-count-many":"Angolos kvanzos","displayName-count-other":"Angolos kvanzų","symbol":"AOA","symbol-alt-narrow":"Kz"},"AOK":{"displayName":"Angolos kvanza (1977–1990)","displayName-count-one":"Angolos kvanza (1977–1990)","displayName-count-few":"Angolos kvanzos (1977–1990)","displayName-count-many":"Angolos kvanzos (1977–1990)","displayName-count-other":"Angolos kvanzų (1977–1990)","symbol":"AOK"},"AON":{"displayName":"Angolos naujoji kvanza (1990–2000)","displayName-count-one":"Angolos naujoji kvanza (1990–2000)","displayName-count-few":"Angolos naujosios kvanzos (1990–2000)","displayName-count-many":"Angolos naujosios kvanzos (1990–2000)","displayName-count-other":"Angolos naujųjų kvanzų (1990–2000)","symbol":"AON"},"AOR":{"displayName":"Angolos patikslinta kvanza (1995–1999)","displayName-count-one":"Angolos patikslinta kvanza (1995–1999)","displayName-count-few":"Angolos patikslintos kvanzos (1995–1999)","displayName-count-many":"Angolos patikslintos kvanzos (1995–1999)","displayName-count-other":"Angolos patikslintų kvanzų (1995–1999)","symbol":"AOR"},"ARA":{"displayName":"Argentinos australs","displayName-count-one":"Argentinos austral","displayName-count-few":"Argentinos australs","displayName-count-many":"Argentinos australs","displayName-count-other":"Argentinos australs","symbol":"ARA"},"ARL":{"displayName":"Argentinos pesos ley (1970–1983)","displayName-count-one":"Argentinos pesos ley (1970–1983)","displayName-count-few":"Argentinos pesos ley (1970–1983)","displayName-count-many":"Argentinos pesos ley (1970–1983)","displayName-count-other":"Argentinos pesos ley (1970–1983)","symbol":"ARL"},"ARM":{"displayName":"Argentinos pesai (1881–1970)","displayName-count-one":"Argentinos pesas (1881–1970)","displayName-count-few":"Argentinos pesai (1881–1970)","displayName-count-many":"Argentinos peso (1881–1970)","displayName-count-other":"Argentinos pesų (1881–1970)","symbol":"ARM"},"ARP":{"displayName":"Argentinos pesas (1983–1985)","displayName-count-one":"Argentinos pesas (1983–1985)","displayName-count-few":"Argentinos pesai (1983–1985)","displayName-count-many":"Argentinos pesai (1983–1985)","displayName-count-other":"Argentinos pesai (1983–1985)","symbol":"ARP"},"ARS":{"displayName":"Argentinos pesas","displayName-count-one":"Argentinos pesas","displayName-count-few":"Argentinos pesai","displayName-count-many":"Argentinos peso","displayName-count-other":"Argentinos pesų","symbol":"ARS","symbol-alt-narrow":"$"},"ATS":{"displayName":"Austrijos šilingas","displayName-count-one":"Austrijos šilingas","displayName-count-few":"Austrijos šilingai","displayName-count-many":"Austrijos šilingo","displayName-count-other":"Austrijos šilingų","symbol":"ATS"},"AUD":{"displayName":"Australijos doleris","displayName-count-one":"Australijos doleris","displayName-count-few":"Australijos doleriai","displayName-count-many":"Australijos dolerio","displayName-count-other":"Australijos dolerių","symbol":"AUD","symbol-alt-narrow":"$"},"AWG":{"displayName":"Arubos guldenas","displayName-count-one":"Arubos guldenas","displayName-count-few":"Arubos guldenai","displayName-count-many":"Arubos guldeno","displayName-count-other":"Arubos guldenų","symbol":"AWG"},"AZM":{"displayName":"Azerbaidžano manatas (1993–2006)","displayName-count-one":"Azerbaidžano manatas (1993–2006)","displayName-count-few":"Azerbaidžano manatai (1993–2006)","displayName-count-many":"Azerbaidžano manato (1993–2006)","displayName-count-other":"Azerbaidžano manatų (1993–2006)","symbol":"AZM"},"AZN":{"displayName":"Azerbaidžano manatas","displayName-count-one":"Azerbaidžano manatas","displayName-count-few":"Azerbaidžano manatai","displayName-count-many":"Azerbaidžano manato","displayName-count-other":"Azerbaidžano manatų","symbol":"AZN"},"BAD":{"displayName":"Bosnijos ir Hercegovinos dinaras (1992–1994)","displayName-count-one":"Bosnijos ir Hercegovinos dinaras (1992–1994)","displayName-count-few":"Bosnijos ir Hercegovinos dinarai (1992–1994)","displayName-count-many":"Bosnijos ir Hercegovinos dinaro (1992–1994)","displayName-count-other":"Bosnijos ir Hercegovinos dinarų (1992–1994)","symbol":"BAD"},"BAM":{"displayName":"Bosnijos ir Hercegovinos konvertuojamoji markė","displayName-count-one":"Bosnijos ir Hercegovinos konvertuojamoji markė","displayName-count-few":"Bosnijos ir Hercegovinos konvertuojamosios markės","displayName-count-many":"Bosnijos ir Hercegovinos konvertuojamosios markės","displayName-count-other":"Bosnijos ir Hercegovinos konvertuojamųjų markių","symbol":"BAM","symbol-alt-narrow":"KM"},"BAN":{"displayName":"Bosnijos ir Hercegovinos naujasis dinaras (1994–1997)","displayName-count-one":"Bosnijos ir Hercegovinos naujasis dinaras (1994–1997)","displayName-count-few":"Bosnijos ir Hercegovinos naujieji dinarai (1994–1997)","displayName-count-many":"Bosnijos ir Hercegovinos naujojo dinaro (1994–1997)","displayName-count-other":"Bosnijos ir Hercegovinos naujųjų dinarų (1994–1997)","symbol":"BAN"},"BBD":{"displayName":"Barbadoso doleris","displayName-count-one":"Barbadoso doleris","displayName-count-few":"Barbadoso doleriai","displayName-count-many":"Barbadoso dolerio","displayName-count-other":"Barbadoso dolerių","symbol":"BBD","symbol-alt-narrow":"$"},"BDT":{"displayName":"Bangladešo taka","displayName-count-one":"Bangladešo taka","displayName-count-few":"Bangladešo takos","displayName-count-many":"Bangladešo takos","displayName-count-other":"Bangladešo takų","symbol":"BDT","symbol-alt-narrow":"BDT"},"BEC":{"displayName":"Belgijos frankas (konvertuojamas)","displayName-count-one":"Belgijos frankas (konvertuojamas)","displayName-count-few":"Belgijos frankai (konvertuojami)","displayName-count-many":"Belgijos franko (konvertuojamo)","displayName-count-other":"Belgijos frankų (konvertuojamų)","symbol":"BEC"},"BEF":{"displayName":"Belgijos frankas","displayName-count-one":"Belgijos frankas","displayName-count-few":"Belgijos frankai","displayName-count-many":"Belgijos franko","displayName-count-other":"Belgijos frankų","symbol":"BEF"},"BEL":{"displayName":"Belgijos frankas (finansinis)","displayName-count-one":"Belgijos frankas (finansinis)","displayName-count-few":"Belgijos frankai (finansiniai)","displayName-count-many":"Belgijos franko (finansinio)","displayName-count-other":"Belgijos frankų (finansinių)","symbol":"BEL"},"BGL":{"displayName":"Bulgarijos levas (1962–1999)","displayName-count-one":"Bulgarijos levas (1962–1999)","displayName-count-few":"Bulgarijos levai (1962–1999)","displayName-count-many":"Bulgarijos levo (1962–1999)","displayName-count-other":"Bulgarijos levų (1962–1999)","symbol":"BGL"},"BGM":{"displayName":"Bulgarų socialistų leva","displayName-count-one":"Bulgarų socialistų lev","displayName-count-few":"Bulgarų socialistų leva","displayName-count-many":"Bulgarų socialistų leva","displayName-count-other":"Bulgarų socialistų leva","symbol":"BGM"},"BGN":{"displayName":"Bulgarijos levas","displayName-count-one":"Bulgarijos levas","displayName-count-few":"Bulgarijos levai","displayName-count-many":"Bulgarijos levo","displayName-count-other":"Bulgarijos levų","symbol":"BGN"},"BGO":{"displayName":"Bulgarijos levas (1879–1952)","displayName-count-one":"Bulgarijos levas (1879–1952)","displayName-count-few":"Bulgarijos levai (1879–1952)","displayName-count-many":"Bulgarijos levo (1879–1952)","displayName-count-other":"Bulgarijos levų (1879–1952)","symbol":"BGO"},"BHD":{"displayName":"Bahreino dinaras","displayName-count-one":"Bahreino dinaras","displayName-count-few":"Bahreino dinarai","displayName-count-many":"Bahreino dinaro","displayName-count-other":"Bahreino dinarų","symbol":"BHD"},"BIF":{"displayName":"Burundžio frankas","displayName-count-one":"Burundžio frankas","displayName-count-few":"Burundžio frankai","displayName-count-many":"Burundžio franko","displayName-count-other":"Burundžio frankų","symbol":"BIF"},"BMD":{"displayName":"Bermudos doleris","displayName-count-one":"Bermudos doleris","displayName-count-few":"Bermudos doleriai","displayName-count-many":"Bermudos dolerio","displayName-count-other":"Bermudos dolerių","symbol":"BMD","symbol-alt-narrow":"$"},"BND":{"displayName":"Brunėjaus doleris","displayName-count-one":"Brunėjaus doleris","displayName-count-few":"Brunėjaus doleriai","displayName-count-many":"Brunėjaus dolerio","displayName-count-other":"Brunėjaus dolerių","symbol":"BND","symbol-alt-narrow":"$"},"BOB":{"displayName":"Bolivijos bolivijanas","displayName-count-one":"Bolivijos bolivijanas","displayName-count-few":"Bolivijos bolivijanai","displayName-count-many":"Bolivijos bolivijano","displayName-count-other":"Bolivijos bolivijanų","symbol":"BOB","symbol-alt-narrow":"Bs"},"BOL":{"displayName":"Bolivijos bolivijanas (1863–1963)","displayName-count-one":"Bolivijos bolivijanas (1863–1963)","displayName-count-few":"Bolivijos bolivijanai (1863–1963)","displayName-count-many":"Bolivijos bolivijano (1863–1963)","displayName-count-other":"Bolivijos bolivijanų (1863–1963)","symbol":"BOL"},"BOP":{"displayName":"Bolivijos pesas","displayName-count-one":"Bolivijos pesas","displayName-count-few":"Bolivijos pesai","displayName-count-many":"Bolivijos peso","displayName-count-other":"Bolivijos pesų","symbol":"BOP"},"BOV":{"displayName":"Bolivijos mvdol","displayName-count-one":"Bolivijos mvdol","displayName-count-few":"Boliviečių mvdols","displayName-count-many":"Bolivijos mvdol","displayName-count-other":"Bolivijos mvdol","symbol":"BOV"},"BRB":{"displayName":"Brazilijos naujieji kruzeirai (1967–1986)","displayName-count-one":"Brazilijos naujasis kruzeiras (1967–1986)","displayName-count-few":"Brazilijos naujieji kruzeirai (1967–1986)","displayName-count-many":"Brazilijos naujasis kruzeiro (1967–1986)","displayName-count-other":"Brazilijos naujųjų kruzeirų (1967–1986)","symbol":"BRB"},"BRC":{"displayName":"Brazilijos kruzadai (1986–1989)","displayName-count-one":"Brazilijos kruzadas (1986–1989)","displayName-count-few":"Brazilijos kruzadai (1986–1989)","displayName-count-many":"Brazilijos kruzado (1986–1989)","displayName-count-other":"Brazilijos kruzadų (1986–1989)","symbol":"BRC"},"BRE":{"displayName":"Brazilijos kruzeiras (1990–1993)","displayName-count-one":"Brazilijos kruzeiras (1990–1993)","displayName-count-few":"Brazilijos kruzeirai (1990–1993)","displayName-count-many":"Brazilijos kruzeirai (1990–1993)","displayName-count-other":"Brazilijos kruzeirai (1990–1993)","symbol":"BRE"},"BRL":{"displayName":"Brazilijos realas","displayName-count-one":"Brazilijos realas","displayName-count-few":"Brazilijos realai","displayName-count-many":"Brazilijos realo","displayName-count-other":"Brazilijos realų","symbol":"BRL","symbol-alt-narrow":"R$"},"BRN":{"displayName":"Brazilijos naujiejis kruzadai (1989–1990)","displayName-count-one":"Brazilijos naujasis kruzadas (1989–1990)","displayName-count-few":"Brazilijos naujieji kruzadai (1989–1990)","displayName-count-many":"Brazilijos naujojo kruzado (1989–1990)","displayName-count-other":"Brazilijos naujųjų kruzadų (1989–1990)","symbol":"BRN"},"BRR":{"displayName":"Brazilijos kruzeiras (1993–1994)","displayName-count-one":"Brazilijos kruzeiras (1993–1994)","displayName-count-few":"Brazilijos kruzeirai (1993–1994)","displayName-count-many":"Brazilijos kruzeiro (1993–1994)","displayName-count-other":"Brazilijos kruzeirų (1993–1994)","symbol":"BRR"},"BRZ":{"displayName":"Brazilijos kruzeirai (1942–1967)","displayName-count-one":"Brazilijos kruzeiras (1942–1967)","displayName-count-few":"Brazilijos kruzeirai (1942–1967)","displayName-count-many":"Brazilijos kruzeiro (1942–1967)","displayName-count-other":"Brazilijos kruzeirų (1942–1967)","symbol":"BRZ"},"BSD":{"displayName":"Bahamų doleris","displayName-count-one":"Bahamų doleris","displayName-count-few":"Bahamų doleriai","displayName-count-many":"Bahamų dolerio","displayName-count-other":"Bahamų dolerių","symbol":"BSD","symbol-alt-narrow":"$"},"BTN":{"displayName":"Butano ngultrumas","displayName-count-one":"Butano ngultrumas","displayName-count-few":"Butano ngultrumai","displayName-count-many":"Butano ngultrumo","displayName-count-other":"Butano ngultrumų","symbol":"BTN"},"BUK":{"displayName":"Birmos kijatas","displayName-count-one":"Birmos kijatas","displayName-count-few":"Birmos kijatai","displayName-count-many":"Birmos kijato","displayName-count-other":"Birmos kijatų","symbol":"BUK"},"BWP":{"displayName":"Botsvanos pula","displayName-count-one":"Botsvanos pula","displayName-count-few":"Botsvanos pulos","displayName-count-many":"Botsvanos pulos","displayName-count-other":"Botsvanos pulų","symbol":"BWP","symbol-alt-narrow":"P"},"BYB":{"displayName":"Baltarusijos naujasis rublis (1994–1999)","displayName-count-one":"Baltarusijos naujasis rublis (1994–1999)","displayName-count-few":"Baltarusijos naujieji rubliai (1994–1999)","displayName-count-many":"Baltarusijos naujojo rublio (1994–1999)","displayName-count-other":"Baltarusijos naujųjų rublių","symbol":"BYB"},"BYN":{"displayName":"Baltarusijos rublis","displayName-count-one":"Baltarusijos rublis","displayName-count-few":"Baltarusijos rubliai","displayName-count-many":"Baltarusijos rublio","displayName-count-other":"Baltarusijos rublių","symbol":"BYN","symbol-alt-narrow":"Br"},"BYR":{"displayName":"Baltarusijos rublis (2000–2016)","displayName-count-one":"Baltarusijos rublis (2000–2016)","displayName-count-few":"Baltarusijos rubliai (2000–2016)","displayName-count-many":"Baltarusijos rublio (2000–2016)","displayName-count-other":"Baltarusijos rublių (2000–2016)","symbol":"BYR"},"BZD":{"displayName":"Belizo doleris","displayName-count-one":"Belizo doleris","displayName-count-few":"Belizo doleriai","displayName-count-many":"Belizo dolerio","displayName-count-other":"Belizo dolerių","symbol":"BZD","symbol-alt-narrow":"$"},"CAD":{"displayName":"Kanados doleris","displayName-count-one":"Kanados doleris","displayName-count-few":"Kanados doleriai","displayName-count-many":"Kanados dolerio","displayName-count-other":"Kanados dolerių","symbol":"CAD","symbol-alt-narrow":"$"},"CDF":{"displayName":"Kongo frankas","displayName-count-one":"Kongo frankas","displayName-count-few":"Kongo frankai","displayName-count-many":"Kongo franko","displayName-count-other":"Kongo frankų","symbol":"CDF"},"CHE":{"displayName":"WIR eurai","displayName-count-one":"WIR euras","displayName-count-few":"WIR eurai","displayName-count-many":"WIR euro","displayName-count-other":"WIR eurų","symbol":"CHE"},"CHF":{"displayName":"Šveicarijos frankas","displayName-count-one":"Šveicarijos frankas","displayName-count-few":"Šveicarijos frankai","displayName-count-many":"Šveicarijos franko","displayName-count-other":"Šveicarijos frankų","symbol":"CHF"},"CHW":{"displayName":"WIR frankas","displayName-count-one":"WIR frankas","displayName-count-few":"WIR frankai","displayName-count-many":"WIR franko","displayName-count-other":"WIR frankų","symbol":"CHW"},"CLE":{"displayName":"Čilės eskudai","displayName-count-one":"Čilės eskudas","displayName-count-few":"Čilės eskudai","displayName-count-many":"Čilės eskudo","displayName-count-other":"Čilės eskudų","symbol":"CLE"},"CLF":{"displayName":"Čiliečių unidades de fomentos","displayName-count-one":"Čiliečių unidades de fomentos","displayName-count-few":"Čiliečių unidades de fomentos","displayName-count-many":"Čiliečių unidades de fomentos","displayName-count-other":"Čiliečių unidades de fomentos","symbol":"CLF"},"CLP":{"displayName":"Čilės pesas","displayName-count-one":"Čilės pesas","displayName-count-few":"Čilės pesai","displayName-count-many":"Čilės peso","displayName-count-other":"Čilės pesų","symbol":"CLP","symbol-alt-narrow":"$"},"CNH":{"displayName":"Kinijos Užsienio juanis","displayName-count-one":"Kinijos Užsienio juanis","displayName-count-few":"Kinijos Užsienio juaniai","displayName-count-many":"Kinijos Užsienio juanio","displayName-count-other":"Kinijos Užsienio juanių","symbol":"CNH"},"CNX":{"displayName":"Kinijos \\\"People\\\" banko doleris","displayName-count-one":"Kinijos \\\"People\\\" banko doleris","displayName-count-few":"Kinijos \\\"People\\\" banko doleriai","displayName-count-many":"Kinijos \\\"People\\\" banko dolerio","displayName-count-other":"Kinijos \\\"People\\\" banko dolerių","symbol":"CNX"},"CNY":{"displayName":"Kinijos ženminbi juanis","displayName-count-one":"Kinijos ženminbi juanis","displayName-count-few":"Kinijos ženminbi juaniai","displayName-count-many":"Kinijos ženminbi juanio","displayName-count-other":"Kinijos ženminbi juanių","symbol":"CNY","symbol-alt-narrow":"¥"},"COP":{"displayName":"Kolumbijos pesas","displayName-count-one":"Kolumbijos pesas","displayName-count-few":"Kolumbijos pesai","displayName-count-many":"Kolumbijos peso","displayName-count-other":"Kolumbijos pesų","symbol":"COP","symbol-alt-narrow":"$"},"COU":{"displayName":"unidad de valor realai","displayName-count-one":"unidad de valor realas","displayName-count-few":"unidad de valor realai","displayName-count-many":"unidad de valor realai","displayName-count-other":"unidad de valor realai","symbol":"COU"},"CRC":{"displayName":"Kosta Rikos kolonas","displayName-count-one":"Kosta Rikos kolonas","displayName-count-few":"Kosta Rikos kolonai","displayName-count-many":"Kosta Rikos kolono","displayName-count-other":"Kosta Rikos kolonų","symbol":"CRC","symbol-alt-narrow":"₡"},"CSD":{"displayName":"Serbijos dinaras (2002–2006)","displayName-count-one":"Serbijos dinaras (2002–2006)","displayName-count-few":"Serbijos dinarai (2002–2006)","displayName-count-many":"Serbijos dinaro (2002–2006)","displayName-count-other":"Serbijos dinarų (2002–2006)","symbol":"CSD"},"CSK":{"displayName":"Čekoslovakų sunkusis korunas","displayName-count-one":"Čekoslovakų sunkusis korunas","displayName-count-few":"Čekoslovakų sunkieji korunai","displayName-count-many":"Čekoslovakų sunkiejio koruno","displayName-count-other":"Čekoslovakų sunkiejių korunų","symbol":"CSK"},"CUC":{"displayName":"Kubos konvertuojamasis pesas","displayName-count-one":"Kubos konvertuojamasis pesas","displayName-count-few":"Kubos konvertuojamieji pesai","displayName-count-many":"Kubos konvertuojamojo peso","displayName-count-other":"Kubos konvertuojamųjų pesų","symbol":"CUC","symbol-alt-narrow":"$"},"CUP":{"displayName":"Kubos pesas","displayName-count-one":"Kubos pesas","displayName-count-few":"Kubos pesai","displayName-count-many":"Kubos peso","displayName-count-other":"Kubos pesų","symbol":"CUP","symbol-alt-narrow":"$"},"CVE":{"displayName":"Žaliojo Kyšulio eskudas","displayName-count-one":"Žaliojo Kyšulio eskudas","displayName-count-few":"Žaliojo Kyšulio eskudai","displayName-count-many":"Žaliojo Kyšulio eskudo","displayName-count-other":"Žaliojo Kyšulio eskudų","symbol":"CVE"},"CYP":{"displayName":"Kipro svaras","displayName-count-one":"Kipro svaras","displayName-count-few":"Kipro svarai","displayName-count-many":"Kipro svaro","displayName-count-other":"Kipro svarų","symbol":"CYP"},"CZK":{"displayName":"Čekijos krona","displayName-count-one":"Čekijos krona","displayName-count-few":"Čekijos kronos","displayName-count-many":"Čekijos kronos","displayName-count-other":"Čekijos kronų","symbol":"CZK","symbol-alt-narrow":"Kč"},"DDM":{"displayName":"Rytų Vokietijos markė","displayName-count-one":"Rytų Vokietijos markė","displayName-count-few":"Rytų Vokietijos markės","displayName-count-many":"Rytų Vokietijos markės","displayName-count-other":"Rytų Vokietijos markės","symbol":"DDM"},"DEM":{"displayName":"Vokietijos markė","displayName-count-one":"Vokietijos markė","displayName-count-few":"Vokietijos markės","displayName-count-many":"Vokietijos markės","displayName-count-other":"Vokietijos markės","symbol":"DEM"},"DJF":{"displayName":"Džibučio frankas","displayName-count-one":"Džibučio frankas","displayName-count-few":"Džibučio frankai","displayName-count-many":"Džibučio franko","displayName-count-other":"Džibučio frankų","symbol":"DJF"},"DKK":{"displayName":"Danijos krona","displayName-count-one":"Danijos krona","displayName-count-few":"Danijos kronos","displayName-count-many":"Danijos kronos","displayName-count-other":"Danijos kronų","symbol":"DKK","symbol-alt-narrow":"kr"},"DOP":{"displayName":"Dominikos pesas","displayName-count-one":"Dominikos pesas","displayName-count-few":"Dominikos pesai","displayName-count-many":"Dominikos peso","displayName-count-other":"Dominikos pesų","symbol":"DOP","symbol-alt-narrow":"$"},"DZD":{"displayName":"Alžyro dinaras","displayName-count-one":"Alžyro dinaras","displayName-count-few":"Alžyro dinarai","displayName-count-many":"Alžyro dinaro","displayName-count-other":"Alžyro dinarų","symbol":"DZD"},"ECS":{"displayName":"Ekvadoro sukrė","displayName-count-one":"Ekvadoro sucre","displayName-count-few":"Ekvadoro sucres","displayName-count-many":"Ekvadoro sucres","displayName-count-other":"Ekvadoro sucres","symbol":"ECS"},"ECV":{"displayName":"Ekvadoro constante (UVC)","displayName-count-one":"Ekvadoro unidads de narsa Constante (UVC)","displayName-count-few":"Ekvadoro unidads de narsa Constante (UVC)","displayName-count-many":"Ekvadoro unidads de narsa Constante (UVC)","displayName-count-other":"Ekvadoro unidads de narsa Constante (UVC)","symbol":"ECV"},"EEK":{"displayName":"Estijos krona","displayName-count-one":"Estijos krona","displayName-count-few":"Estijos kronos","displayName-count-many":"Estijos kronos","displayName-count-other":"Estijos kronų","symbol":"EEK"},"EGP":{"displayName":"Egipto svaras","displayName-count-one":"Egipto svaras","displayName-count-few":"Egipto svarai","displayName-count-many":"Egipto svaro","displayName-count-other":"Egipto svarų","symbol":"EGP","symbol-alt-narrow":"E£"},"ERN":{"displayName":"Eritrėjos nakfa","displayName-count-one":"Eritrėjos nakfa","displayName-count-few":"Eritrėjos nakfos","displayName-count-many":"Eritrėjos nakfos","displayName-count-other":"Eritrėjos nakfų","symbol":"ERN"},"ESA":{"displayName":"Ispanų pesetai (A sąskaita)","displayName-count-one":"Ispanų pesetas (A sąskaita)","displayName-count-few":"Ispanų pesetai (A sąskaita)","displayName-count-many":"Ispanų pesetai (A sąskaita)","displayName-count-other":"Ispanų pesetai (A sąskaita)","symbol":"ESA"},"ESB":{"displayName":"Ispanų pesetai (konvertuojama sąskaita)","displayName-count-one":"Ispanų pesetas (konvertuojama sąskaita)","displayName-count-few":"Ispanų pesetai (konvertuojama sąskaita)","displayName-count-many":"Ispanų pesetai (konvertuojama sąskaita)","displayName-count-other":"Ispanų pesetai (konvertuojama sąskaita)","symbol":"ESB"},"ESP":{"displayName":"Ispanijos peseta","displayName-count-one":"Ispanų pesetas","displayName-count-few":"Ispanų pesetai","displayName-count-many":"Ispanų pesetai","displayName-count-other":"Ispanų pesetai","symbol":"ESP","symbol-alt-narrow":"₧"},"ETB":{"displayName":"Etiopijos biras","displayName-count-one":"Etiopijos biras","displayName-count-few":"Etiopijos birai","displayName-count-many":"Etiopijos biro","displayName-count-other":"Etiopijos birų","symbol":"ETB"},"EUR":{"displayName":"Euras","displayName-count-one":"euras","displayName-count-few":"eurai","displayName-count-many":"euro","displayName-count-other":"eurų","symbol":"€","symbol-alt-narrow":"€"},"FIM":{"displayName":"Suomijos markė","displayName-count-one":"Suomijos markė","displayName-count-few":"Suomijos markės","displayName-count-many":"Suomijos markės","displayName-count-other":"Suomijos markės","symbol":"FIM"},"FJD":{"displayName":"Fidžio doleris","displayName-count-one":"Fidžio doleris","displayName-count-few":"Fidžio doleriai","displayName-count-many":"Fidžio dolerio","displayName-count-other":"Fidžio dolerių","symbol":"FJD","symbol-alt-narrow":"$"},"FKP":{"displayName":"Falklando salų svaras","displayName-count-one":"Falklando salų svaras","displayName-count-few":"Falklando salų svarai","displayName-count-many":"Falklando salų svaro","displayName-count-other":"Falklando salų svarų","symbol":"FKP","symbol-alt-narrow":"£"},"FRF":{"displayName":"Prancūzijos frankas","displayName-count-one":"Prancūzijos frankas","displayName-count-few":"Prancūzijos frankai","displayName-count-many":"Prancūzijos franko","displayName-count-other":"Prancūzijos frankų","symbol":"FRF"},"GBP":{"displayName":"Didžiosios Britanijos svaras","displayName-count-one":"Didžiosios Britanijos svaras","displayName-count-few":"Didžiosios Britanijos svarai","displayName-count-many":"Didžiosios Britanijos svaro","displayName-count-other":"Didžiosios Britanijos svarų","symbol":"GBP","symbol-alt-narrow":"£"},"GEK":{"displayName":"Gruzinų kupon larits","displayName-count-one":"Gruzinų kupon larit","displayName-count-few":"Gruzinų kupon larits","displayName-count-many":"Gruzinų kupon larits","displayName-count-other":"Gruzinų kupon larits","symbol":"GEK"},"GEL":{"displayName":"Gruzijos laris","displayName-count-one":"Gruzijos laris","displayName-count-few":"Gruzijos lariai","displayName-count-many":"Gruzijos lario","displayName-count-other":"Gruzijos larių","symbol":"GEL","symbol-alt-narrow":"₾","symbol-alt-variant":"₾"},"GHC":{"displayName":"Ganos sedis (1979–2007)","displayName-count-one":"Ganos sedis (1979–2007)","displayName-count-few":"Ganos sedžiai (1979–2007)","displayName-count-many":"Ganos sedžio (1979–2007)","displayName-count-other":"Ganos sedžių (1979–2007)","symbol":"GHC"},"GHS":{"displayName":"Ganos sedis","displayName-count-one":"Ganos sedis","displayName-count-few":"Ganos sedžiai","displayName-count-many":"Ganos sedžio","displayName-count-other":"Ganos sedžių","symbol":"GHS"},"GIP":{"displayName":"Gibraltaro svaras","displayName-count-one":"Gibraltaro svaras","displayName-count-few":"Gibraltaro svarai","displayName-count-many":"Gibraltaro svaro","displayName-count-other":"Gibraltaro svarų","symbol":"GIP","symbol-alt-narrow":"£"},"GMD":{"displayName":"Gambijos dalasis","displayName-count-one":"Gambijos dalasis","displayName-count-few":"Gambijos dalasiai","displayName-count-many":"Gambijos dalasio","displayName-count-other":"Gambijos dalasių","symbol":"GMD"},"GNF":{"displayName":"Gvinėjos frankas","displayName-count-one":"Gvinėjos frankas","displayName-count-few":"Gvinėjos frankai","displayName-count-many":"Gvinėjos franko","displayName-count-other":"Gvinėjos frankų","symbol":"GNF","symbol-alt-narrow":"FG"},"GNS":{"displayName":"Guinean sylis","displayName-count-one":"Gvinėjos sylis","displayName-count-few":"Gvinėjos syliai","displayName-count-many":"Gvinėjos sylio","displayName-count-other":"Gvinėjos sylio","symbol":"GNS"},"GQE":{"displayName":"Pusiaujo Guinean ekwele","displayName-count-one":"Pusiaujo Guinean ekwele","displayName-count-few":"Pusiaujo Guinean ekwele","displayName-count-many":"Pusiaujo Guinean ekwele","displayName-count-other":"Pusiaujo Guinean ekwele","symbol":"GQE"},"GRD":{"displayName":"Graikijos drachma","displayName-count-one":"Graikijos drachma","displayName-count-few":"Graikijos drachmos","displayName-count-many":"Graikijos drachmos","displayName-count-other":"Graikijos drachmos","symbol":"GRD"},"GTQ":{"displayName":"Gvatemalos ketcalis","displayName-count-one":"Gvatemalos ketcalis","displayName-count-few":"Gvatemalos ketcaliai","displayName-count-many":"Gvatemalos ketcalio","displayName-count-other":"Gvatemalos ketcalių","symbol":"GTQ","symbol-alt-narrow":"Q"},"GWE":{"displayName":"Portugalų Gvinėjos eskudas","displayName-count-one":"Portugalijos Gvinėjos eskudas","displayName-count-few":"Portugalijos Gvinėjos eskudai","displayName-count-many":"Portugalijos Gvinėjos eskudo","displayName-count-other":"Portugalijos Gvinėjos eskudų","symbol":"GWE"},"GWP":{"displayName":"Gvinėjos-Bisau pesas","displayName-count-one":"Bisau Gvinėjos pesas","displayName-count-few":"Bisau Gvinėjos pesai","displayName-count-many":"Bisau Gvinėjos peso","displayName-count-other":"Bisau Gvinėjos pesai","symbol":"GWP"},"GYD":{"displayName":"Gajanos doleris","displayName-count-one":"Gajanos doleris","displayName-count-few":"Gajanos doleriai","displayName-count-many":"Gajanos dolerio","displayName-count-other":"Gajanos dolerių","symbol":"GYD","symbol-alt-narrow":"$"},"HKD":{"displayName":"Honkongo doleris","displayName-count-one":"Honkongo doleris","displayName-count-few":"Honkongo doleriai","displayName-count-many":"Honkongo dolerio","displayName-count-other":"Honkongo dolerių","symbol":"HKD","symbol-alt-narrow":"$"},"HNL":{"displayName":"Hondūro lempira","displayName-count-one":"Hondūro lempira","displayName-count-few":"Hondūro lempiros","displayName-count-many":"Hondūro lempiros","displayName-count-other":"Hondūro lempirų","symbol":"HNL","symbol-alt-narrow":"L"},"HRD":{"displayName":"Kroatijos dinaras","displayName-count-one":"Kroatijos dinaras","displayName-count-few":"Krotaijos dinarai","displayName-count-many":"Kroatijos dinaro","displayName-count-other":"Kroatijos dinarų","symbol":"HRD"},"HRK":{"displayName":"Kroatijos kuna","displayName-count-one":"Kroatijos kuna","displayName-count-few":"Kroatijos kunos","displayName-count-many":"Kroatijos kunos","displayName-count-other":"Kroatijos kunų","symbol":"HRK","symbol-alt-narrow":"kn"},"HTG":{"displayName":"Haičio gurdas","displayName-count-one":"Haičio gurdas","displayName-count-few":"Haičio gurdai","displayName-count-many":"Haičio gurdo","displayName-count-other":"Haičio gurdų","symbol":"HTG"},"HUF":{"displayName":"Vengrijos forintas","displayName-count-one":"Vengrijos forintas","displayName-count-few":"Vengrijos forintai","displayName-count-many":"Vengrijos forinto","displayName-count-other":"Vengrijos forintų","symbol":"HUF","symbol-alt-narrow":"Ft"},"IDR":{"displayName":"Indonezijos rupija","displayName-count-one":"Indonezijos rupija","displayName-count-few":"Indonezijos rupijos","displayName-count-many":"Indonezijos rupijos","displayName-count-other":"Indonezijos rupijų","symbol":"IDR","symbol-alt-narrow":"Rp"},"IEP":{"displayName":"Airijos svaras","displayName-count-one":"Airijos svaras","displayName-count-few":"Airijos svarai","displayName-count-many":"Airijos svaro","displayName-count-other":"Airijos svarų","symbol":"IEP"},"ILP":{"displayName":"Izraelio svaras","displayName-count-one":"Izraelio svaras","displayName-count-few":"Izraelio svarai","displayName-count-many":"Izraelio svaro","displayName-count-other":"Izraelio svarų","symbol":"ILP"},"ILR":{"displayName":"Izraelio šekelis (1980–1985)","displayName-count-one":"Izraelio šekelis (1980–1985)","displayName-count-few":"Izraelio šekeliai (1980–1985)","displayName-count-many":"Izraelio šekelio (1980–1985)","displayName-count-other":"Izraelio šekelių (1980–1985)","symbol":"ILR"},"ILS":{"displayName":"Izraelio naujasis šekelis","displayName-count-one":"Izraelio naujasis šekelis","displayName-count-few":"Izraelio naujieji šekeliai","displayName-count-many":"Izraelio naujojo šekelio","displayName-count-other":"Izraelio naujųjų šekelių","symbol":"ILS","symbol-alt-narrow":"ILS"},"INR":{"displayName":"Indijos rupija","displayName-count-one":"Indijos rupija","displayName-count-few":"Indijos rupijos","displayName-count-many":"Indijos rupijos","displayName-count-other":"Indijos rupijų","symbol":"INR","symbol-alt-narrow":"INR"},"IQD":{"displayName":"Irako dinaras","displayName-count-one":"Irako dinaras","displayName-count-few":"Irako dinarai","displayName-count-many":"Irako dinaro","displayName-count-other":"Irako dinarų","symbol":"IQD"},"IRR":{"displayName":"Irano rialas","displayName-count-one":"Irano rialas","displayName-count-few":"Irano rialai","displayName-count-many":"Irano rialo","displayName-count-other":"Irano rialų","symbol":"IRR"},"ISJ":{"displayName":"Islandijos krona (1918–1981)","displayName-count-one":"Islandijos krona (1918–1981)","displayName-count-few":"Islandijos kronos (1918–1981)","displayName-count-many":"Islandijos kronos (1918–1981)","displayName-count-other":"Islandijos kronų (1918–1981)","symbol":"ISJ"},"ISK":{"displayName":"Islandijos krona","displayName-count-one":"Islandijos krona","displayName-count-few":"Islandijos kronos","displayName-count-many":"Islandijos kronos","displayName-count-other":"Islandijos kronų","symbol":"ISK","symbol-alt-narrow":"kr"},"ITL":{"displayName":"Italijos lira","displayName-count-one":"Italijos lira","displayName-count-few":"Italijos liros","displayName-count-many":"Italijos liros","displayName-count-other":"Italijos lirų","symbol":"ITL"},"JMD":{"displayName":"Jamaikos doleris","displayName-count-one":"Jamaikos doleris","displayName-count-few":"Jamaikos doleriai","displayName-count-many":"Jamaikos dolerio","displayName-count-other":"Jamaikos dolerių","symbol":"JMD","symbol-alt-narrow":"$"},"JOD":{"displayName":"Jordanijos dinaras","displayName-count-one":"Jordanijos dinaras","displayName-count-few":"Jordanijos dinarai","displayName-count-many":"Jordanijos dinaro","displayName-count-other":"Jordanijos dinarų","symbol":"JOD"},"JPY":{"displayName":"Japonijos jena","displayName-count-one":"Japonijos jena","displayName-count-few":"Japonijos jenos","displayName-count-many":"Japonijos jenos","displayName-count-other":"Japonijos jenų","symbol":"JPY","symbol-alt-narrow":"¥"},"KES":{"displayName":"Kenijos šilingas","displayName-count-one":"Kenijos šilingas","displayName-count-few":"Kenijos šilingai","displayName-count-many":"Kenijos šilingo","displayName-count-other":"Kenijos šilingų","symbol":"KES"},"KGS":{"displayName":"Kirgizijos somas","displayName-count-one":"Kirgizijos somas","displayName-count-few":"Kirgizijos somai","displayName-count-many":"Kirgizijos somo","displayName-count-other":"Kirgizijos somų","symbol":"KGS"},"KHR":{"displayName":"Kambodžos rielis","displayName-count-one":"Kambodžos rielis","displayName-count-few":"Kambodžos rieliai","displayName-count-many":"Kambodžos rielio","displayName-count-other":"Kambodžos rielių","symbol":"KHR","symbol-alt-narrow":"KHR"},"KMF":{"displayName":"Komoro frankas","displayName-count-one":"Komoro frankas","displayName-count-few":"Komoro frankai","displayName-count-many":"Komoro franko","displayName-count-other":"Komoro frankų","symbol":"KMF","symbol-alt-narrow":"CF"},"KPW":{"displayName":"Šiaurės Korėjos vonas","displayName-count-one":"Šiaurės Korėjos vonas","displayName-count-few":"Šiaurės Korėjos vonai","displayName-count-many":"Šiaurės Korėjos vono","displayName-count-other":"Šiaurės Korėjos vonų","symbol":"KPW","symbol-alt-narrow":"₩"},"KRH":{"displayName":"Pietų Korėjos hwanas (1953–1962)","displayName-count-one":"Pietų Korėjos hwanas (1953–1962)","displayName-count-few":"Pietų Korėjos hwanai (1953–1962)","displayName-count-many":"Pietų Korėjos hwano (1953–1962)","displayName-count-other":"Pietų Korėjos hwanų (1953–1962)","symbol":"KRH"},"KRO":{"displayName":"Pietų Korėjos vonas (1945–1953)","displayName-count-one":"Pietų Korėjos vonas (1945–1953)","displayName-count-few":"Pietų Korėjos vonai (1945–1953)","displayName-count-many":"Pietų Korėjos vono (1945–1953)","displayName-count-other":"Pietų Korėjos vonų (1945–1953)","symbol":"KRO"},"KRW":{"displayName":"Pietų Korėjos vonas","displayName-count-one":"Pietų Korėjos vonas","displayName-count-few":"Pietų Korėjos vonai","displayName-count-many":"Pietų Korėjos vono","displayName-count-other":"Pietų Korėjos vonų","symbol":"KRW","symbol-alt-narrow":"₩"},"KWD":{"displayName":"Kuveito dinaras","displayName-count-one":"Kuveito dinaras","displayName-count-few":"Kuveito dinarai","displayName-count-many":"Kuveito dinaro","displayName-count-other":"Kuveito dinarų","symbol":"KWD"},"KYD":{"displayName":"Kaimanų salų doleris","displayName-count-one":"Kaimanų salų doleris","displayName-count-few":"Kaimanų salų doleriai","displayName-count-many":"Kaimanų salų dolerio","displayName-count-other":"Kaimanų salų dolerių","symbol":"KYD","symbol-alt-narrow":"$"},"KZT":{"displayName":"Kazachstano tengė","displayName-count-one":"Kazachstano tengė","displayName-count-few":"Kazachstano tengės","displayName-count-many":"Kazachstano tengės","displayName-count-other":"Kazachstano tengių","symbol":"KZT","symbol-alt-narrow":"₸"},"LAK":{"displayName":"Laoso kipas","displayName-count-one":"Laoso kipas","displayName-count-few":"Laoso kipai","displayName-count-many":"Laoso kipo","displayName-count-other":"Laoso kipų","symbol":"LAK","symbol-alt-narrow":"LAK"},"LBP":{"displayName":"Libano svaras","displayName-count-one":"Libano svaras","displayName-count-few":"Libano svarai","displayName-count-many":"Libano svaro","displayName-count-other":"Libano svarų","symbol":"LBP","symbol-alt-narrow":"L£"},"LKR":{"displayName":"Šri Lankos rupija","displayName-count-one":"Šri Lankos rupija","displayName-count-few":"Šri Lankos rupijos","displayName-count-many":"Šri Lankos rupijos","displayName-count-other":"Šri Lankos rupijų","symbol":"LKR","symbol-alt-narrow":"Rs"},"LRD":{"displayName":"Liberijos doleris","displayName-count-one":"Liberijos doleris","displayName-count-few":"Liberijos doleriai","displayName-count-many":"Liberijos dolerio","displayName-count-other":"Liberijos dolerių","symbol":"LRD","symbol-alt-narrow":"$"},"LSL":{"displayName":"Lesoto lotis","displayName-count-one":"Lesoto loti","displayName-count-few":"Lesoto lotis","displayName-count-many":"Lesoto lotis","displayName-count-other":"Lesoto lotis","symbol":"LSL"},"LTL":{"displayName":"Lietuvos litas","displayName-count-one":"Lietuvos litas","displayName-count-few":"Lietuvos litai","displayName-count-many":"Lietuvos lito","displayName-count-other":"Lietuvos litų","symbol":"LTL","symbol-alt-narrow":"Lt"},"LTT":{"displayName":"Lietuvos talonas","displayName-count-one":"Lietuvos talonas","displayName-count-few":"Lietuvos talonai","displayName-count-many":"Lietuvos talonai","displayName-count-other":"Lietuvos talonai","symbol":"LTT"},"LUC":{"displayName":"Liuksemburgo konvertuojamas frankas","displayName-count-one":"Liuksemburgo konvertuojas frankas","displayName-count-few":"Liuksemburgo konvertuojami frankai","displayName-count-many":"Liuksemburgo konvertuojamo franko","displayName-count-other":"Liuksemburgo konvertuojamų frankų","symbol":"LUC"},"LUF":{"displayName":"Liuksemburgo frankas","displayName-count-one":"Liuksemburgo frankas","displayName-count-few":"Liuksemburgo frankai","displayName-count-many":"Liuksemburgo franko","displayName-count-other":"Liuksemburgo frankų","symbol":"LUF"},"LUL":{"displayName":"Liuksemburgo finansinis frankas","displayName-count-one":"Liuksemburgo finansinis frankas","displayName-count-few":"Liuksemburgo finansiniai frankai","displayName-count-many":"Liuksemburgo finansinio franko","displayName-count-other":"Liuksemburgo finansinių frankų","symbol":"LUL"},"LVL":{"displayName":"Latvijos latas","displayName-count-one":"Latvijos latas","displayName-count-few":"Latvijos latai","displayName-count-many":"Latvijos lato","displayName-count-other":"Latvijos latų","symbol":"LVL","symbol-alt-narrow":"Ls"},"LVR":{"displayName":"Latvijos rublis","displayName-count-one":"Latvijos rublis","displayName-count-few":"Latvijos rubliai","displayName-count-many":"Latvijos rublio","displayName-count-other":"Latvijos rublių","symbol":"LVR"},"LYD":{"displayName":"Libijos dinaras","displayName-count-one":"Libijos dinaras","displayName-count-few":"Libijos dinarai","displayName-count-many":"Libijos dinaro","displayName-count-other":"Libijos dinarų","symbol":"LYD"},"MAD":{"displayName":"Maroko dirhamas","displayName-count-one":"Maroko dirhamas","displayName-count-few":"Maroko dirhamai","displayName-count-many":"Maroko dirhamo","displayName-count-other":"Maroko dirhamų","symbol":"MAD"},"MAF":{"displayName":"Maroko frankas","displayName-count-one":"Maroko frankas","displayName-count-few":"Maroko frankai","displayName-count-many":"Maroko franko","displayName-count-other":"Maroko frankų","symbol":"MAF"},"MCF":{"displayName":"Monegasque frankas","displayName-count-one":"Monegasque frankas","displayName-count-few":"Monegasque frankai","displayName-count-many":"Monegasque franko","displayName-count-other":"Monegasque frankų","symbol":"MCF"},"MDC":{"displayName":"Moldovų cupon","displayName-count-one":"Moldovų cupon","displayName-count-few":"Moldovų cupon","displayName-count-many":"Moldovų cupon","displayName-count-other":"Moldovų cupon","symbol":"MDC"},"MDL":{"displayName":"Moldovos lėja","displayName-count-one":"Moldovos lėja","displayName-count-few":"Moldovos lėjos","displayName-count-many":"Moldovos lėjos","displayName-count-other":"Moldovos lėjų","symbol":"MDL"},"MGA":{"displayName":"Madagaskaro ariaris","displayName-count-one":"Madagaskaro ariaris","displayName-count-few":"Madagaskaro ariariai","displayName-count-many":"Madagaskaro ariario","displayName-count-other":"Madagaskaro ariarių","symbol":"MGA","symbol-alt-narrow":"Ar"},"MGF":{"displayName":"Madagaskaro frankas","displayName-count-one":"Madagaskaro frankas","displayName-count-few":"Madagaskaro frankai","displayName-count-many":"Madagaskaro franko","displayName-count-other":"Madagaskaro frankų","symbol":"MGF"},"MKD":{"displayName":"Makedonijos denaras","displayName-count-one":"Makedonijos denaras","displayName-count-few":"Makedonijos denarai","displayName-count-many":"Makedonijos denaro","displayName-count-other":"Makedonijos denarų","symbol":"MKD"},"MKN":{"displayName":"Makedonijos denaras (1992–1993)","displayName-count-one":"Makedonijos denaras (1992–1993)","displayName-count-few":"Makedonijos denarai (1992–1993)","displayName-count-many":"Makedonijos denaro (1992–1993)","displayName-count-other":"Makedonijos denarų (1992–1993)","symbol":"MKN"},"MLF":{"displayName":"Malio frankas","displayName-count-one":"Malio frankas","displayName-count-few":"Malio frankai","displayName-count-many":"Malio franko","displayName-count-other":"Malio frankų","symbol":"MLF"},"MMK":{"displayName":"Mianmaro kijatas","displayName-count-one":"Mianmaro kijatas","displayName-count-few":"Mianmaro kijatai","displayName-count-many":"Mianmaro kijato","displayName-count-other":"Mianmaro kijatų","symbol":"MMK","symbol-alt-narrow":"K"},"MNT":{"displayName":"Mongolijos tugrikas","displayName-count-one":"Mongolijos tugrikas","displayName-count-few":"Mongolijos tugrikai","displayName-count-many":"Mongolijos tugriko","displayName-count-other":"Mongolijos tugrikų","symbol":"MNT","symbol-alt-narrow":"MNT"},"MOP":{"displayName":"Makao pataka","displayName-count-one":"Makao pataka","displayName-count-few":"Makao patakos","displayName-count-many":"Makao patakos","displayName-count-other":"Makao patakų","symbol":"MOP"},"MRO":{"displayName":"Mauritanijos ugija","displayName-count-one":"Mauritanijos ugija","displayName-count-few":"Mauritanijos ugijos","displayName-count-many":"Mauritanijos ugijos","displayName-count-other":"Mauritanijos ugijų","symbol":"MRO"},"MTL":{"displayName":"Maltos lira","displayName-count-one":"Maltos lira","displayName-count-few":"Maltos lira","displayName-count-many":"Maltos lira","displayName-count-other":"Maltos lira","symbol":"MTL"},"MTP":{"displayName":"Maltos svaras","displayName-count-one":"Maltos svaras","displayName-count-few":"Maltos svarai","displayName-count-many":"Maltos svaro","displayName-count-other":"Maltos svarų","symbol":"MTP"},"MUR":{"displayName":"Mauricijaus rupija","displayName-count-one":"Mauricijaus rupija","displayName-count-few":"Mauricijaus rupijos","displayName-count-many":"Mauricijaus rupijos","displayName-count-other":"Mauricijaus rupijų","symbol":"MUR","symbol-alt-narrow":"Rs"},"MVP":{"displayName":"Maldyvų rupija","displayName-count-one":"Maldyvų rupija","displayName-count-few":"Maldyvų rupijos","displayName-count-many":"Maldyvų rupijos","displayName-count-other":"Maldyvų rupijos","symbol":"MVP"},"MVR":{"displayName":"Maldyvų rufija","displayName-count-one":"Maldyvų rufija","displayName-count-few":"Maldyvų rufijos","displayName-count-many":"Maldyvų rufijos","displayName-count-other":"Maldyvų rufijų","symbol":"MVR"},"MWK":{"displayName":"Malavio kvača","displayName-count-one":"Malavio kvača","displayName-count-few":"Malavio kvačos","displayName-count-many":"Malavio kvačos","displayName-count-other":"Malavio kvačų","symbol":"MWK"},"MXN":{"displayName":"Meksikos pesas","displayName-count-one":"Meksikos pesas","displayName-count-few":"Meksikos pesai","displayName-count-many":"Meksikos peso","displayName-count-other":"Meksikos pesų","symbol":"MXN","symbol-alt-narrow":"$"},"MXP":{"displayName":"Meksikos sidabrinis pesas (1861–1992)","displayName-count-one":"Meksikos sidabrinis pesas (1861–1992)","displayName-count-few":"Meksikos sidabriniai pesai (1861–1992)","displayName-count-many":"Meksikos sidabrino peso (1861–1992)","displayName-count-other":"Meksikos sidabrinių pesų (1861–1992)","symbol":"MXP"},"MXV":{"displayName":"Meksikos United de Inversion (UDI)","displayName-count-one":"Meksikos unidad de inversija (UDI)","displayName-count-few":"Meksikos unidads de inversija (UDI)","displayName-count-many":"Meksikos unidads de inversija (UDI)","displayName-count-other":"Meksikos unidads de inversija (UDI)","symbol":"MXV"},"MYR":{"displayName":"Malaizijos ringitas","displayName-count-one":"Malaizijos ringitas","displayName-count-few":"Malaizijos ringitai","displayName-count-many":"Malaizijos ringito","displayName-count-other":"Malaizijos ringitų","symbol":"MYR","symbol-alt-narrow":"RM"},"MZE":{"displayName":"Mozambiko eskudas","displayName-count-one":"Mozambiko eskudas","displayName-count-few":"Mozambiko eskudai","displayName-count-many":"Mozambiko eskudo","displayName-count-other":"Mozambiko eskudų","symbol":"MZE"},"MZM":{"displayName":"Mozambiko metikalis (1980–2006)","displayName-count-one":"Mozambiko metikalis (1980–2006)","displayName-count-few":"Mozambiko metikaliai (1980–2006)","displayName-count-many":"Mozambiko metikalio (1980–2006)","displayName-count-other":"Mozambiko metikalių (1980–2006)","symbol":"MZM"},"MZN":{"displayName":"Mozambiko metikalis","displayName-count-one":"Mozambiko metikalis","displayName-count-few":"Mozambiko metikaliai","displayName-count-many":"Mozambiko metikalio","displayName-count-other":"Mozambiko metikalių","symbol":"MZN"},"NAD":{"displayName":"Namibijos doleris","displayName-count-one":"Namibijos doleris","displayName-count-few":"Namibijos doleriai","displayName-count-many":"Namibijos dolerio","displayName-count-other":"Namibijos dolerių","symbol":"NAD","symbol-alt-narrow":"$"},"NGN":{"displayName":"Nigerijos naira","displayName-count-one":"Nigerijos naira","displayName-count-few":"Nigerijos nairos","displayName-count-many":"Nigerijos nairos","displayName-count-other":"Nigerijos nairų","symbol":"NGN","symbol-alt-narrow":"₦"},"NIC":{"displayName":"Nikaragvos kardoba (1988–1991)","displayName-count-one":"Nikaragvos kordoba (1988–1991)","displayName-count-few":"Nikaragvos kordobai (1988–1991)","displayName-count-many":"Nikaragvos kordobos (1988–1991)","displayName-count-other":"Nikaragvos kordobų (1988–1991)","symbol":"NIC"},"NIO":{"displayName":"Nikaragvos kordoba","displayName-count-one":"Nikaragvos kordoba","displayName-count-few":"Nikaragvos kordobos","displayName-count-many":"Nikaragvos kordobos","displayName-count-other":"Nikaragvos kordobų","symbol":"NIO","symbol-alt-narrow":"C$"},"NLG":{"displayName":"Nyderlandų guldenas","displayName-count-one":"Nyderlandų guldenas","displayName-count-few":"Nyderlandų guldenai","displayName-count-many":"Nyderlandų guldeno","displayName-count-other":"Nyderlandų guldenų","symbol":"NLG"},"NOK":{"displayName":"Norvegijos krona","displayName-count-one":"Norvegijos krona","displayName-count-few":"Norvegijos kronos","displayName-count-many":"Norvegijos kronos","displayName-count-other":"Norvegijos kronų","symbol":"NOK","symbol-alt-narrow":"kr"},"NPR":{"displayName":"Nepalo rupija","displayName-count-one":"Nepalo rupija","displayName-count-few":"Nepalo rupijos","displayName-count-many":"Nepalo rupijos","displayName-count-other":"Nepalo rupijų","symbol":"NPR","symbol-alt-narrow":"Rs"},"NZD":{"displayName":"Naujosios Zelandijos doleris","displayName-count-one":"Naujosios Zelandijos doleris","displayName-count-few":"Naujosios Zelandijos doleriai","displayName-count-many":"Naujosios Zelandijos dolerio","displayName-count-other":"Naujosios Zelandijos dolerių","symbol":"NZD","symbol-alt-narrow":"$"},"OMR":{"displayName":"Omano rialas","displayName-count-one":"Omano rialas","displayName-count-few":"Omano rialai","displayName-count-many":"Omano rialo","displayName-count-other":"Omano rialų","symbol":"OMR"},"PAB":{"displayName":"Panamos balboja","displayName-count-one":"Panamos balboja","displayName-count-few":"Panamos balbojos","displayName-count-many":"Panamos balbojos","displayName-count-other":"Panamos balbojų","symbol":"PAB"},"PEI":{"displayName":"Peru intis","displayName-count-one":"Peru inti","displayName-count-few":"Peru intis","displayName-count-many":"Peru intis","displayName-count-other":"Peru intis","symbol":"PEI"},"PEN":{"displayName":"Peru solis","displayName-count-one":"Peru solis","displayName-count-few":"Peru soliai","displayName-count-many":"Peru solio","displayName-count-other":"Peru solių","symbol":"PEN"},"PES":{"displayName":"Peru solis (1863–1965)","displayName-count-one":"Peru solis (1863–1965)","displayName-count-few":"Peru soliai (1863–1965)","displayName-count-many":"Peru solio (1863–1965)","displayName-count-other":"Peru solių (1863–1965)","symbol":"PES"},"PGK":{"displayName":"Papua Naujosios Gvinėjos kina","displayName-count-one":"Papua Naujosios Gvinėjos kina","displayName-count-few":"Papua Naujosios Gvinėjos kinos","displayName-count-many":"Papua Naujosios Gvinėjos kinos","displayName-count-other":"Papua Naujosios Gvinėjos kinų","symbol":"PGK"},"PHP":{"displayName":"Filipinų pesas","displayName-count-one":"Filipinų pesas","displayName-count-few":"Filipinų pesai","displayName-count-many":"Filipinų peso","displayName-count-other":"Filipinų pesų","symbol":"PHP","symbol-alt-narrow":"₱"},"PKR":{"displayName":"Pakistano rupija","displayName-count-one":"Pakistano rupija","displayName-count-few":"Pakistano rupijos","displayName-count-many":"Pakistano rupijos","displayName-count-other":"Pakistano rupijų","symbol":"PKR","symbol-alt-narrow":"Rs"},"PLN":{"displayName":"Lenkijos zlotas","displayName-count-one":"Lenkijos zlotas","displayName-count-few":"Lenkijos zlotai","displayName-count-many":"Lenkijos zloto","displayName-count-other":"Lenkijos zlotų","symbol":"PLN","symbol-alt-narrow":"zl"},"PLZ":{"displayName":"Lenkijos zlotas (1950–1995)","displayName-count-one":"Lenkijos zlotas (1950–1995)","displayName-count-few":"Lenkijos zlotai (1950–1995)","displayName-count-many":"Lenkijos zloto (1950–1995)","displayName-count-other":"Lenkijos zlotų (1950–1995)","symbol":"PLZ"},"PTE":{"displayName":"Portugalijos eskudas","displayName-count-one":"Portugalijos eskudas","displayName-count-few":"Portugalijos eskudai","displayName-count-many":"Portugalijos eskudo","displayName-count-other":"Portugalijos eskudų","symbol":"PTE"},"PYG":{"displayName":"Paragvajaus guaranis","displayName-count-one":"Paragvajaus guaranis","displayName-count-few":"Paragvajaus guaraniai","displayName-count-many":"Paragvajaus guaranio","displayName-count-other":"Paragvajaus guaranių","symbol":"PYG","symbol-alt-narrow":"Gs"},"QAR":{"displayName":"Kataro rialas","displayName-count-one":"Kataro rialas","displayName-count-few":"Kataro rialai","displayName-count-many":"Kataro rialo","displayName-count-other":"Kataro rialų","symbol":"QAR"},"RHD":{"displayName":"Rodezijos doleris","displayName-count-one":"Rodezijos doleris","displayName-count-few":"Rodezijos doleriai","displayName-count-many":"Rodezijos dolerio","displayName-count-other":"Rodezijos dolerių","symbol":"RHD"},"ROL":{"displayName":"Rumunijos lėja (1952–2006)","displayName-count-one":"Rumunijos lėja (1952–2006)","displayName-count-few":"Rumunijos lėjos (1952–2006)","displayName-count-many":"Rumunijos lėjos (1952–2006)","displayName-count-other":"Rumunijos lėjų (1952–2006)","symbol":"ROL"},"RON":{"displayName":"Rumunijos lėja","displayName-count-one":"Rumunijos lėja","displayName-count-few":"Rumunijos lėjos","displayName-count-many":"Rumunijos lėjos","displayName-count-other":"Rumunijos lėjų","symbol":"RON","symbol-alt-narrow":"lei"},"RSD":{"displayName":"Serbijos dinaras","displayName-count-one":"Serbijos dinaras","displayName-count-few":"Serbijos dinarai","displayName-count-many":"Serbijos dinaro","displayName-count-other":"Serbijos dinarų","symbol":"RSD"},"RUB":{"displayName":"Rusijos rublis","displayName-count-one":"Rusijos rublis","displayName-count-few":"Rusijos rubliai","displayName-count-many":"Rusijos rublio","displayName-count-other":"Rusijos rublių","symbol":"RUB","symbol-alt-narrow":"rb","symbol-alt-variant":"₽"},"RUR":{"displayName":"Rusijos rublis (1991–1998)","displayName-count-one":"Rusijos rublis (1991–1998)","displayName-count-few":"Rusijos rubliai (1991–1998)","displayName-count-many":"Rusijos rublio (1991–1998)","displayName-count-other":"Rusijos rublių (1991–1998)","symbol":"RUR","symbol-alt-narrow":"р."},"RWF":{"displayName":"Ruandos frankas","displayName-count-one":"Ruandos frankas","displayName-count-few":"Ruandos frankai","displayName-count-many":"Ruandos franko","displayName-count-other":"Ruandos frankų","symbol":"RWF","symbol-alt-narrow":"RF"},"SAR":{"displayName":"Saudo Arabijos rijalas","displayName-count-one":"Saudo Arabijos rijalas","displayName-count-few":"Saudo Arabijos rijalai","displayName-count-many":"Saudo Arabijos rijalo","displayName-count-other":"Saudo Arabijos rijalų","symbol":"SAR"},"SBD":{"displayName":"Saliamono salų doleris","displayName-count-one":"Saliamono salų doleris","displayName-count-few":"Saliamono salų doleriai","displayName-count-many":"Saliamono salų dolerio","displayName-count-other":"Saliamono salų dolerių","symbol":"SBD","symbol-alt-narrow":"$"},"SCR":{"displayName":"Seišelių rupija","displayName-count-one":"Seišelių rupija","displayName-count-few":"Seišelių rupijos","displayName-count-many":"Seišelių rupijos","displayName-count-other":"Seišelių rupijų","symbol":"SCR"},"SDD":{"displayName":"Sudano dinaras (1992–2007)","displayName-count-one":"Sudano dinaras (1992–2007)","displayName-count-few":"Sudano dinarai (1992–2007)","displayName-count-many":"Sudano dinaro (1992–2007)","displayName-count-other":"Sudano dinarų (1992–2007)","symbol":"SDD"},"SDG":{"displayName":"Sudano svaras","displayName-count-one":"Sudano svaras","displayName-count-few":"Sudano svarai","displayName-count-many":"Sudano svaro","displayName-count-other":"Sudano svarų","symbol":"SDG"},"SDP":{"displayName":"Sudano svaras (1957–1998)","displayName-count-one":"Sudano svaras (1957–1998)","displayName-count-few":"Sudano svarai (1957–1998)","displayName-count-many":"Sudano svaro (1957–1998)","displayName-count-other":"Sudano svarų (1957–1998)","symbol":"SDP"},"SEK":{"displayName":"Švedijos krona","displayName-count-one":"Švedijos krona","displayName-count-few":"Švedijos kronos","displayName-count-many":"Švedijos kronos","displayName-count-other":"Švedijos kronų","symbol":"SEK","symbol-alt-narrow":"kr"},"SGD":{"displayName":"Singapūro doleris","displayName-count-one":"Singapūro doleris","displayName-count-few":"Singapūro doleriai","displayName-count-many":"Singapūro dolerio","displayName-count-other":"Singapūro dolerių","symbol":"SGD","symbol-alt-narrow":"$"},"SHP":{"displayName":"Šv. Elenos salų svaras","displayName-count-one":"Šv. Elenos salų svaras","displayName-count-few":"Šv. Elenos salų svarai","displayName-count-many":"Šv. Elenos salų svaro","displayName-count-other":"Šv. Elenos salų svarų","symbol":"SHP","symbol-alt-narrow":"£"},"SIT":{"displayName":"Slovėnijos tolaras","displayName-count-one":"Slovėnijos tolars","displayName-count-few":"Slovėnijos tolars","displayName-count-many":"Slovėnijos tolar","displayName-count-other":"Slovėnijos tolar","symbol":"SIT"},"SKK":{"displayName":"Slovakijos krona","displayName-count-one":"Slovakijos krona","displayName-count-few":"Slovakijos kronos","displayName-count-many":"Slovakijos kronos","displayName-count-other":"Slovakijos kronų","symbol":"SKK"},"SLL":{"displayName":"Siera Leonės leonė","displayName-count-one":"Siera Leonės leonė","displayName-count-few":"Siera Leonės leonės","displayName-count-many":"Siera Leonės leonės","displayName-count-other":"Siera Leonės leonių","symbol":"SLL"},"SOS":{"displayName":"Somalio šilingas","displayName-count-one":"Somalio šilingas","displayName-count-few":"Somalio šilingai","displayName-count-many":"Somalio šilingo","displayName-count-other":"Somalio šilingų","symbol":"SOS"},"SRD":{"displayName":"Surimano doleris","displayName-count-one":"Surimano doleris","displayName-count-few":"Surimano doleriai","displayName-count-many":"Surimano dolerio","displayName-count-other":"Surimano dolerių","symbol":"SRD","symbol-alt-narrow":"$"},"SRG":{"displayName":"Surimano guldenas","displayName-count-one":"Surimano guldenas","displayName-count-few":"Surimano guldenai","displayName-count-many":"Surimano guldeno","displayName-count-other":"Surimano guldenų","symbol":"SRG"},"SSP":{"displayName":"Pietų Sudano svaras","displayName-count-one":"Pietų Sudano svaras","displayName-count-few":"Pietų Sudano svarai","displayName-count-many":"Pietų Sudano svaro","displayName-count-other":"Pietų Sudano svarų","symbol":"SSP","symbol-alt-narrow":"£"},"STD":{"displayName":"San Tomės ir Principės dobra","displayName-count-one":"San Tomės ir Principės dobra","displayName-count-few":"San Tomės ir Principės dobros","displayName-count-many":"San Tomės ir Principės dobros","displayName-count-other":"Sao Tomės ir Principės dobrų","symbol":"STD","symbol-alt-narrow":"Db"},"STN":{"displayName":"STN","symbol":"STN"},"SUR":{"displayName":"Sovietų rublis","displayName-count-one":"Sovietų rublis","displayName-count-few":"Sovietų rubliai","displayName-count-many":"Sovietų rublio","displayName-count-other":"Sovietų rublių","symbol":"SUR"},"SVC":{"displayName":"Salvadoro kolonas","displayName-count-one":"Salvadoro kolonas","displayName-count-few":"Salvadoro kolonai","displayName-count-many":"Salvadoro kolonai","displayName-count-other":"Salvadoro kolonai","symbol":"SVC"},"SYP":{"displayName":"Sirijos svaras","displayName-count-one":"Sirijos svaras","displayName-count-few":"Sirijos svarai","displayName-count-many":"Sirijos svaro","displayName-count-other":"Sirijos svarų","symbol":"SYP","symbol-alt-narrow":"£"},"SZL":{"displayName":"Svazilando lilangenis","displayName-count-one":"Svazilando lilangenis","displayName-count-few":"Svazilando lilangeniai","displayName-count-many":"Svazilendo lilangenio","displayName-count-other":"Svazilendo lilangenių","symbol":"SZL"},"THB":{"displayName":"Tailando batas","displayName-count-one":"Tailando batas","displayName-count-few":"Tailando batai","displayName-count-many":"Tailando bato","displayName-count-other":"Tailando batų","symbol":"THB","symbol-alt-narrow":"฿"},"TJR":{"displayName":"Tadžikistano rublis","displayName-count-one":"Tadžikistano rublis","displayName-count-few":"Tadžikistano rubliai","displayName-count-many":"Tadžikistano rublio","displayName-count-other":"Tadžikistano rublių","symbol":"TJR"},"TJS":{"displayName":"Tadžikistano somonis","displayName-count-one":"Tadžikistano somonis","displayName-count-few":"Tadžikistano somoniai","displayName-count-many":"Tadžikistano somonio","displayName-count-other":"Tadžikistano somonių","symbol":"TJS"},"TMM":{"displayName":"Turkmėnistano manatas (1993–2009)","displayName-count-one":"Turkmėnistano manatas (1993–2009)","displayName-count-few":"Turkmėnistano manatai (1993–2009)","displayName-count-many":"Turkmėnistano manato (1993–2009)","displayName-count-other":"Turkmėnistano manatų (1993–2009)","symbol":"TMM"},"TMT":{"displayName":"Turkmėnistano manatas","displayName-count-one":"Turkmėnistano manatas","displayName-count-few":"Turkmėnistano manatai","displayName-count-many":"Turkmėnistano manato","displayName-count-other":"Turkmėnistano manatų","symbol":"TMT"},"TND":{"displayName":"Tuniso dinaras","displayName-count-one":"Tuniso dinaras","displayName-count-few":"Tuniso dinarai","displayName-count-many":"Tuniso dinaro","displayName-count-other":"Tuniso dinarų","symbol":"TND"},"TOP":{"displayName":"Tongo paanga","displayName-count-one":"Tongo paanga","displayName-count-few":"Tongo paangos","displayName-count-many":"Tongo paangos","displayName-count-other":"Tongo paangų","symbol":"TOP","symbol-alt-narrow":"T$"},"TPE":{"displayName":"Timoro eskudas","displayName-count-one":"Timoro eskudas","displayName-count-few":"Timoro eskudai","displayName-count-many":"Timoro eskudo","displayName-count-other":"Timoro eskudų","symbol":"TPE"},"TRL":{"displayName":"Turkijos lira (1922–2005)","displayName-count-one":"Turkijos lira (1922–2005)","displayName-count-few":"Turkijos liros (1922–2005)","displayName-count-many":"Turkijos liros (1922–2005)","displayName-count-other":"Turkijos lirų (1922–2005)","symbol":"TRL"},"TRY":{"displayName":"Turkijos lira","displayName-count-one":"Turkijos lira","displayName-count-few":"Turkijos liros","displayName-count-many":"Turkijos liros","displayName-count-other":"Turkijos lirų","symbol":"TRY","symbol-alt-narrow":"₺","symbol-alt-variant":"TL"},"TTD":{"displayName":"Trinidado ir Tobago doleris","displayName-count-one":"Trinidado ir Tobago doleris","displayName-count-few":"Trinidado ir Tobago doleriai","displayName-count-many":"Trinidado ir Tobago dolerio","displayName-count-other":"Trinidado ir Tobago dolerių","symbol":"TTD","symbol-alt-narrow":"$"},"TWD":{"displayName":"Taivano naujasis doleris","displayName-count-one":"Taivano naujasis doleris","displayName-count-few":"Taivano naujieji doleriai","displayName-count-many":"Taivano naujojo dolerio","displayName-count-other":"Taivano naujųjų dolerių","symbol":"TWD","symbol-alt-narrow":"$"},"TZS":{"displayName":"Tanzanijos šilingas","displayName-count-one":"Tanzanijos šilingas","displayName-count-few":"Tanzanijos šilingai","displayName-count-many":"Tanzanijos šilingo","displayName-count-other":"Tanzanijos šilingų","symbol":"TZS"},"UAH":{"displayName":"Ukrainos grivina","displayName-count-one":"Ukrainos grivina","displayName-count-few":"Ukrainos grivinos","displayName-count-many":"Ukrainos grivinos","displayName-count-other":"Ukrainos grivinų","symbol":"UAH","symbol-alt-narrow":"₴"},"UAK":{"displayName":"Ukrainos karbovanecas","displayName-count-one":"Ukrainos karbovanets","displayName-count-few":"Ukrainos karbovantsiv","displayName-count-many":"Ukrainos karbovantsiv","displayName-count-other":"Ukrainos karbovantsiv","symbol":"UAK"},"UGS":{"displayName":"Ugandos šilingas (1966–1987)","displayName-count-one":"Ugandos šilingas (1966–1987)","displayName-count-few":"Ugandos šilingai (1966–1987)","displayName-count-many":"Ugandos šilingo (1966–1987)","displayName-count-other":"Ugandos šilingų (1966–1987)","symbol":"UGS"},"UGX":{"displayName":"Ugandos šilingas","displayName-count-one":"Ugandos šilingas","displayName-count-few":"Ugandos šilingai","displayName-count-many":"Ugandos šilingo","displayName-count-other":"Ugandos šilingų","symbol":"UGX"},"USD":{"displayName":"JAV doleris","displayName-count-one":"JAV doleris","displayName-count-few":"JAV doleriai","displayName-count-many":"JAV dolerio","displayName-count-other":"JAV dolerių","symbol":"USD","symbol-alt-narrow":"$"},"USN":{"displayName":"JAV doleris (kitos dienos)","displayName-count-one":"JAV doleris (kitą dieną)","displayName-count-few":"JAV doleriai (kitą dieną)","displayName-count-many":"JAV dolerio (kitą dieną)","displayName-count-other":"JAV dolerių (kitą dieną)","symbol":"USN"},"USS":{"displayName":"JAV doleris (šios dienos)","displayName-count-one":"JAV doleris (tą pačią dieną)","displayName-count-few":"JAV doleriai (tą pačią dieną)","displayName-count-many":"JAV dolerio (tą pačią dieną)","displayName-count-other":"JAV dolerių (tą pačią dieną)","symbol":"USS"},"UYI":{"displayName":"Urugvajaus pesai en unidades indexadas","displayName-count-one":"Urugvajaus pesas en unidades indexadas","displayName-count-few":"Uragvajaus pesai en unidades indexadas","displayName-count-many":"Urugvajaus pesai en unidades indexadas","displayName-count-other":"Urugvajaus pesai en unidades indexadas","symbol":"UYI"},"UYP":{"displayName":"Urugvajaus pesas (1975–1993)","displayName-count-one":"Urugvajaus pesas (1975–1993)","displayName-count-few":"Urugvajaus pesai (1975–1993)","displayName-count-many":"Urugvajaus peso (1975–1993)","displayName-count-other":"Urugvajaus pesų (1975–1993)","symbol":"UYP"},"UYU":{"displayName":"Urugvajaus pesas","displayName-count-one":"Urugvajaus pesas","displayName-count-few":"Urugvajaus pesai","displayName-count-many":"Urugvajaus peso","displayName-count-other":"Urugvajaus pesų","symbol":"UYU","symbol-alt-narrow":"$"},"UZS":{"displayName":"Uzbekistano sumas","displayName-count-one":"Uzbekistano sumas","displayName-count-few":"Uzbekistano sumai","displayName-count-many":"Uzbekistano sumo","displayName-count-other":"Uzbekistano sumų","symbol":"UZS"},"VEB":{"displayName":"Venesuelos bolivaras (1871–2008)","displayName-count-one":"Venesuelos bolivaras (1871–2008)","displayName-count-few":"Venesuelos bolivarai (1871–2008)","displayName-count-many":"Venesuelos bolivaro (1871–2008)","displayName-count-other":"Venesuelos bolivarų (1871–2008)","symbol":"VEB"},"VEF":{"displayName":"Venesuelos bolivaras","displayName-count-one":"Venesuelos bolivaras","displayName-count-few":"Venesuelos bolivarai","displayName-count-many":"Venesuelos bolivaro","displayName-count-other":"Venesuelos bolivarų","symbol":"VEF","symbol-alt-narrow":"Bs"},"VND":{"displayName":"Vietnamo dongas","displayName-count-one":"Vietnamo dongas","displayName-count-few":"Vietnamo dongai","displayName-count-many":"Vietnamo dongo","displayName-count-other":"Vietnamo dongų","symbol":"VND","symbol-alt-narrow":"VND"},"VNN":{"displayName":"Vietnamo dongas (1978–1985)","displayName-count-one":"Vietnamo dongas (1978–1985)","displayName-count-few":"Vietnamo dongai (1978–1985)","displayName-count-many":"Vietnamo dongo (1978–1985)","displayName-count-other":"Vietnamo dongų (1978–1985)","symbol":"VNN"},"VUV":{"displayName":"Vanuatu vatas","displayName-count-one":"Vanuatu vatas","displayName-count-few":"Vanuatu vatai","displayName-count-many":"Vanuatu vato","displayName-count-other":"Vanuatu vatų","symbol":"VUV"},"WST":{"displayName":"Samoa tala","displayName-count-one":"Samoa tala","displayName-count-few":"Samoa talos","displayName-count-many":"Samoa talos","displayName-count-other":"Samoa talų","symbol":"WST"},"XAF":{"displayName":"CFA BEAC frankas","displayName-count-one":"CFA BEAC frankas","displayName-count-few":"CFA BEAC frankai","displayName-count-many":"CFA BEAC franko","displayName-count-other":"CFA BEAC frankų","symbol":"XAF"},"XAG":{"displayName":"Sidabras","displayName-count-one":"Sidabras","displayName-count-few":"Sidabras","displayName-count-many":"Sidabras","displayName-count-other":"Sidabras","symbol":"XAG"},"XAU":{"displayName":"Auksas","displayName-count-one":"Auksas","displayName-count-few":"Auksas","displayName-count-many":"Auksas","displayName-count-other":"Auksas","symbol":"XAU"},"XBA":{"displayName":"Europos suvestinės vienetas","displayName-count-one":"Europos suvestinės vienetas","displayName-count-few":"Europos suvestinės vienetai","displayName-count-many":"Europos suvestinės vienetai","displayName-count-other":"Europos suvestinės vienetai","symbol":"XBA"},"XBB":{"displayName":"Europos piniginis vienetas","displayName-count-one":"Europos piniginis vienetas","displayName-count-few":"Europos piniginiai vienetai","displayName-count-many":"Europos piniginiai vienetai","displayName-count-other":"Europos piniginiai vienetai","symbol":"XBB"},"XBC":{"displayName":"Europos valiutos / apskaitos vienetas (XBC)","displayName-count-one":"Europos valiutos / apskaitos vienetas (XBC)","displayName-count-few":"Europos valiutos / apskaitos vienetai (XBC)","displayName-count-many":"Europos valiutos / apskaitos vienetai (XBC)","displayName-count-other":"Europos valiutos / apskaitos vienetai (XBC)","symbol":"XBC"},"XBD":{"displayName":"Europos valiutos / apskaitos vienetas (XBD)","displayName-count-one":"Europos valiutos / apskaitos vienetas (XBD)","displayName-count-few":"Europos valiutos / apskaitos vienetas (XBD)","displayName-count-many":"Europos valiutos / apskaitos vienetai (XBD)","displayName-count-other":"Europos valiutos / apskaitos vienetai (XBD)","symbol":"XBD"},"XCD":{"displayName":"Rytų Karibų doleris","displayName-count-one":"Rytų Karibų doleris","displayName-count-few":"Rytų Karibų doleriai","displayName-count-many":"Rytų Karibų dolerio","displayName-count-other":"Rytų Karibų dolerių","symbol":"XCD","symbol-alt-narrow":"$"},"XDR":{"displayName":"SDR tarptautinis valiutos fondas","displayName-count-one":"SDR tarptautinis valiutos fondas","displayName-count-few":"SDR tarptautinis valiutos fondas","displayName-count-many":"SDR tarptautinis valiutos fondas","displayName-count-other":"SDR tarptautinis valiutos fondas","symbol":"XDR"},"XEU":{"displayName":"Europos piniginis vienetas (1993–1999)","symbol":"XEU"},"XFO":{"displayName":"Aukso frankas","displayName-count-one":"Aukso frankas","displayName-count-few":"Aukso frankai","displayName-count-many":"Aukso franko","displayName-count-other":"Aukso frankų","symbol":"XFO"},"XFU":{"displayName":"Prancūzijos UIC - frankas","displayName-count-one":"Prancūzijos UIC - frankas","displayName-count-few":"Prancūzijos UIC - frankai","displayName-count-many":"Prancūzijos UIC - franko","displayName-count-other":"Prancūzijos UIC - frankų","symbol":"XFU"},"XOF":{"displayName":"CFA BCEAO frankas","displayName-count-one":"CFA BCEAO frankas","displayName-count-few":"CFA BCEAO frankai","displayName-count-many":"CFA BCEAO franko","displayName-count-other":"CFA BCEAO frankų","symbol":"XOF"},"XPD":{"displayName":"Paladis","displayName-count-one":"Paladis","displayName-count-few":"Paladis","displayName-count-many":"Paladis","displayName-count-other":"Paladis","symbol":"XPD"},"XPF":{"displayName":"CFP frankas","displayName-count-one":"CFP frankas","displayName-count-few":"CFP frankai","displayName-count-many":"CFP franko","displayName-count-other":"CFP frankų","symbol":"XPF"},"XPT":{"displayName":"Platina","displayName-count-one":"Platina","displayName-count-few":"Platina","displayName-count-many":"Platina","displayName-count-other":"Platina","symbol":"XPT"},"XRE":{"displayName":"RINET fondai","displayName-count-one":"RINET fondas","displayName-count-few":"RINET fondai","displayName-count-many":"RINET fondai","displayName-count-other":"RINET fondai","symbol":"XRE"},"XSU":{"displayName":"Sukrė","displayName-count-one":"Sukrė","displayName-count-few":"Sukrės","displayName-count-many":"Sukrės","displayName-count-other":"Sukrių","symbol":"XSU"},"XTS":{"displayName":"Tikrinamas valiutos kodas","displayName-count-one":"Tikrinamas valiutos kodas","displayName-count-few":"Tikrinamas valiutos kodas","displayName-count-many":"Tikrinamas valiutos kodas","displayName-count-other":"Tikrinamas valiutos kodas","symbol":"XTS"},"XUA":{"displayName":"Azijos plėtros banko apskaitos vienetas","displayName-count-one":"Azijos plėtros banko apskaitos vienetas","displayName-count-few":"Azijos plėtros banko apskaitos vienetai","displayName-count-many":"Azijos plėtros banko apskaitos vieneto","displayName-count-other":"Azijos plėtros banko apskaitos vienetų","symbol":"XUA"},"XXX":{"displayName":"nežinoma valiuta","displayName-count-one":"(nežinoma valiuta)","displayName-count-few":"(nežinoma valiuta)","displayName-count-many":"(nežinoma valiuta)","displayName-count-other":"(nežinoma valiuta)","symbol":"XXX"},"YDD":{"displayName":"Jemeno dinaras","displayName-count-one":"Jemeno dinaras","displayName-count-few":"Jemeno dinarai","displayName-count-many":"Jemeno dinaro","displayName-count-other":"Jemeno dinarų","symbol":"YDD"},"YER":{"displayName":"Jemeno rialas","displayName-count-one":"Jemeno rialas","displayName-count-few":"Jemeno rialai","displayName-count-many":"Jemeno rialo","displayName-count-other":"Jemeno rialų","symbol":"YER"},"YUD":{"displayName":"Jugoslavijos kietasis dinaras (1966–1990)","displayName-count-one":"Jugoslavijos kietasis dinaras (1966–1990)","displayName-count-few":"Jugoslavijos kietieji dinarai (1966–1990)","displayName-count-many":"Jugoslavijos kietiejo dinaro (1966–1990)","displayName-count-other":"Jugoslavijos kietiejų dinarų (1966–1990)","symbol":"YUD"},"YUM":{"displayName":"Jugoslavijos naujasis dinaras (1994–2002)","displayName-count-one":"Jugoslavijos naujasis dinaras (1994–2002)","displayName-count-few":"Jugoslavijos naujieji dinarai (1994–2002)","displayName-count-many":"Jugoslavijos naujojo dinaro (1994–2002)","displayName-count-other":"Jugoslavijos naujųjų dinarų (1994–2002)","symbol":"YUM"},"YUN":{"displayName":"Jugoslavijos konvertuojamas dinaras (1990–1992)","displayName-count-one":"Jugoslavijos konvertuojamas dinaras (1990–1992)","displayName-count-few":"Jugoslavijos konvertuojami dinarai (1990–1992)","displayName-count-many":"Jugoslavijos konvertuojamo dinaro (1990–1992)","displayName-count-other":"Jugoslavijos konvertuojamų dinarų (1990–1992)","symbol":"YUN"},"YUR":{"displayName":"Jugoslavijos reformuotas dinaras (1992–1993)","displayName-count-one":"Jugoslavijos reformuotas dinaras (1992–1993)","displayName-count-few":"Jugoslavijos reformuoti dinarai (1992–1993)","displayName-count-many":"Jugoslavijos reformuoto dinaro (1992–1993)","displayName-count-other":"Jugoslavijos reformuotų dinarų (1992–1993)","symbol":"YUR"},"ZAL":{"displayName":"Pietų Afrikos finansinis randas","displayName-count-one":"Pietų Afrikos randas (finansinis)","displayName-count-few":"Pietų Afrikos randai (finansinis)","displayName-count-many":"Pietų Afrikos rando (finansinis)","displayName-count-other":"Pietų Afrikos randų (finansinis)","symbol":"ZAL"},"ZAR":{"displayName":"Pietų Afrikos Respublikos randas","displayName-count-one":"Pietų Afrikos Respublikos randas","displayName-count-few":"Pietų Afrikos Respublikos randai","displayName-count-many":"Pietų Afrikos Respublikos rando","displayName-count-other":"Pietų Afrikos Respublikos randų","symbol":"ZAR","symbol-alt-narrow":"R"},"ZMK":{"displayName":"Zambijos kvača (1968–2012)","displayName-count-one":"Zambijos kvača (1968–2012)","displayName-count-few":"Zambijos kvačos (1968–2012)","displayName-count-many":"Zambijos kvačos (1968–2012)","displayName-count-other":"Zambijos kvačų (1968–2012)","symbol":"ZMK"},"ZMW":{"displayName":"Zambijos kvača","displayName-count-one":"Zambijos kvača","displayName-count-few":"Zambijos kvačos","displayName-count-many":"Zambijos kvačos","displayName-count-other":"Zambijos kvačų","symbol":"ZMW","symbol-alt-narrow":"ZK"},"ZRN":{"displayName":"Zairo naujasis zairas (1993–1998)","displayName-count-one":"Zairo naujasis zairas (1993–1998)","displayName-count-few":"Zairo naujieji zairai (1993–1998)","displayName-count-many":"Zairo naujojo zairo (1993–1998)","displayName-count-other":"Zairo naujųjų zairų (1993–1998)","symbol":"ZRN"},"ZRZ":{"displayName":"Zairo zairas (1971–1993)","displayName-count-one":"Zairo zairas (1971–1993)","displayName-count-few":"Zairo zairai (1971–1993)","displayName-count-many":"Zairo zairo (1971–1993)","displayName-count-other":"Zairo zairų (1971–1993)","symbol":"ZRZ"},"ZWD":{"displayName":"Zimbabvės doleris (1980–2008)","displayName-count-one":"Zimbabvės doleris (1980–2008)","displayName-count-few":"Zimbabvės doleriai (1980–2008)","displayName-count-many":"Zimbabvės dolerio (1980–2008)","displayName-count-other":"Zimbabvės dolerių (1980–2008)","symbol":"ZWD"},"ZWL":{"displayName":"Zimbabvės doleris (2009)","displayName-count-one":"Zimbabvės doleris (2009)","displayName-count-few":"Zimbabvės doleriai (2009)","displayName-count-many":"Zimbabvės dolerio (2009)","displayName-count-other":"Zimbabvės dolerių (2009)","symbol":"ZWL"},"ZWR":{"displayName":"Zimbabvės doleris (2008)","displayName-count-one":"Zimbabvės doleris (2008)","displayName-count-few":"Zimbabvės doleriai (2008)","displayName-count-many":"Zimbabvės dolerio (2008)","displayName-count-other":"Zimbabvės dolerių (2008)","symbol":"ZWR"}},"defaultNumberingSystem":"latn","otherNumberingSystems":{"native":"latn"},"minimumGroupingDigits":"1","symbols-numberSystem-latn":{"decimal":",","group":" ","list":";","percentSign":"%","plusSign":"+","minusSign":"−","exponential":"×10^","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"NaN","timeSeparator":":"},"decimalFormats-numberSystem-latn":{"standard":"#,##0.###","long":{"decimalFormat":{"1000-count-one":"0 tūkstantis","1000-count-few":"0 tūkstančiai","1000-count-many":"0 tūkstančio","1000-count-other":"0 tūkstančių","10000-count-one":"00 tūkstantis","10000-count-few":"00 tūkstančiai","10000-count-many":"00 tūkstančio","10000-count-other":"00 tūkstančių","100000-count-one":"000 tūkstantis","100000-count-few":"000 tūkstančiai","100000-count-many":"000 tūkstančio","100000-count-other":"000 tūkstančių","1000000-count-one":"0 milijonas","1000000-count-few":"0 milijonai","1000000-count-many":"0 milijono","1000000-count-other":"0 milijonų","10000000-count-one":"00 milijonas","10000000-count-few":"00 milijonai","10000000-count-many":"00 milijono","10000000-count-other":"00 milijonų","100000000-count-one":"000 milijonas","100000000-count-few":"000 milijonai","100000000-count-many":"000 milijono","100000000-count-other":"000 milijonų","1000000000-count-one":"0 milijardas","1000000000-count-few":"0 milijardai","1000000000-count-many":"0 milijardo","1000000000-count-other":"0 milijardų","10000000000-count-one":"00 milijardas","10000000000-count-few":"00 milijardai","10000000000-count-many":"00 milijardo","10000000000-count-other":"00 milijardų","100000000000-count-one":"000 milijardas","100000000000-count-few":"000 milijardai","100000000000-count-many":"000 milijardo","100000000000-count-other":"000 milijardų","1000000000000-count-one":"0 trilijonas","1000000000000-count-few":"0 trilijonai","1000000000000-count-many":"0 trilijono","1000000000000-count-other":"0 trilijonų","10000000000000-count-one":"00 trilijonas","10000000000000-count-few":"00 trilijonai","10000000000000-count-many":"00 trilijono","10000000000000-count-other":"00 trilijonų","100000000000000-count-one":"000 trilijonas","100000000000000-count-few":"000 trilijonai","100000000000000-count-many":"000 trilijono","100000000000000-count-other":"000 trilijonų"}},"short":{"decimalFormat":{"1000-count-one":"0 tūkst'.'","1000-count-few":"0 tūkst'.'","1000-count-many":"0 tūkst'.'","1000-count-other":"0 tūkst'.'","10000-count-one":"00 tūkst'.'","10000-count-few":"00 tūkst'.'","10000-count-many":"00 tūkst'.'","10000-count-other":"00 tūkst'.'","100000-count-one":"000 tūkst'.'","100000-count-few":"000 tūkst'.'","100000-count-many":"000 tūkst'.'","100000-count-other":"000 tūkst'.'","1000000-count-one":"0 mln'.'","1000000-count-few":"0 mln'.'","1000000-count-many":"0 mln'.'","1000000-count-other":"0 mln'.'","10000000-count-one":"00 mln'.'","10000000-count-few":"00 mln'.'","10000000-count-many":"00 mln'.'","10000000-count-other":"00 mln'.'","100000000-count-one":"000 mln'.'","100000000-count-few":"000 mln'.'","100000000-count-many":"000 mln'.'","100000000-count-other":"000 mln'.'","1000000000-count-one":"0 mlrd'.'","1000000000-count-few":"0 mlrd'.'","1000000000-count-many":"0 mlrd'.'","1000000000-count-other":"0 mlrd'.'","10000000000-count-one":"00 mlrd'.'","10000000000-count-few":"00 mlrd'.'","10000000000-count-many":"00 mlrd'.'","10000000000-count-other":"00 mlrd'.'","100000000000-count-one":"000 mlrd'.'","100000000000-count-few":"000 mlrd'.'","100000000000-count-many":"000 mlrd'.'","100000000000-count-other":"000 mlrd'.'","1000000000000-count-one":"0 trln'.'","1000000000000-count-few":"0 trln'.'","1000000000000-count-many":"0 trln'.'","1000000000000-count-other":"0 trln'.'","10000000000000-count-one":"00 trln'.'","10000000000000-count-few":"00 trln'.'","10000000000000-count-many":"00 trln'.'","10000000000000-count-other":"00 trln'.'","100000000000000-count-one":"000 trln'.'","100000000000000-count-few":"000 trln'.'","100000000000000-count-many":"000 trln'.'","100000000000000-count-other":"000 trln'.'"}}},"scientificFormats-numberSystem-latn":{"standard":"#E0"},"percentFormats-numberSystem-latn":{"standard":"#,##0 %"},"currencyFormats-numberSystem-latn":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"#,##0.00 ¤","accounting":"#,##0.00 ¤","short":{"standard":{"1000-count-one":"0 tūkst'.' ¤","1000-count-few":"0 tūkst'.' ¤","1000-count-many":"0 tūkst'.' ¤","1000-count-other":"0 tūkst'.' ¤","10000-count-one":"00 tūkst'.' ¤","10000-count-few":"00 tūkst'.' ¤","10000-count-many":"00 tūkst'.' ¤","10000-count-other":"00 tūkst'.' ¤","100000-count-one":"000 tūkst'.' ¤","100000-count-few":"000 tūkst'.' ¤","100000-count-many":"000 tūkst'.' ¤","100000-count-other":"000 tūkst'.' ¤","1000000-count-one":"0 mln'.' ¤","1000000-count-few":"0 mln'.' ¤","1000000-count-many":"0 mln'.' ¤","1000000-count-other":"0 mln'.' ¤","10000000-count-one":"00 mln'.' ¤","10000000-count-few":"00 mln'.' ¤","10000000-count-many":"00 mln'.' ¤","10000000-count-other":"00 mln'.' ¤","100000000-count-one":"000 mln'.' ¤","100000000-count-few":"000 mln'.' ¤","100000000-count-many":"000 mln'.' ¤","100000000-count-other":"000 mln'.' ¤","1000000000-count-one":"0 mlrd'.' ¤","1000000000-count-few":"0 mlrd'.' ¤","1000000000-count-many":"0 mlrd'.' ¤","1000000000-count-other":"0 mlrd'.' ¤","10000000000-count-one":"00 mlrd'.' ¤","10000000000-count-few":"00 mlrd'.' ¤","10000000000-count-many":"00 mlrd'.' ¤","10000000000-count-other":"00 mlrd'.' ¤","100000000000-count-one":"000 mlrd'.' ¤","100000000000-count-few":"000 mlrd'.' ¤","100000000000-count-many":"000 mlrd'.' ¤","100000000000-count-other":"000 mlrd'.' ¤","1000000000000-count-one":"0 trln'.' ¤","1000000000000-count-few":"0 trln'.' ¤","1000000000000-count-many":"0 trln'.' ¤","1000000000000-count-other":"0 trln'.' ¤","10000000000000-count-one":"00 trln'.' ¤","10000000000000-count-few":"00 trln'.' ¤","10000000000000-count-many":"00 trln'.' ¤","10000000000000-count-other":"00 trln'.' ¤","100000000000000-count-one":"000 trln'.' ¤","100000000000000-count-few":"000 trln'.' ¤","100000000000000-count-many":"000 trln'.' ¤","100000000000000-count-other":"000 trln'.' ¤"}},"unitPattern-count-one":"{0} {1}","unitPattern-count-few":"{0} {1}","unitPattern-count-many":"{0} {1}","unitPattern-count-other":"{0} {1}"},"miscPatterns-numberSystem-latn":{"atLeast":"⩾{0}","range":"{0}–{1}"},"minimalPairs":{"pluralMinimalPairs-count-one":"{0} obuolys","pluralMinimalPairs-count-few":"{0} obuoliai","pluralMinimalPairs-count-many":"{0} obuolio","pluralMinimalPairs-count-other":"{0} obuolių","other":"{0}-ame posūkyje sukite į dešinę."}}},"nb":{"identity":{"version":{"_number":"$Revision: 13705 $","_cldrVersion":"32"},"language":"nb"},"dates":{"calendars":{"gregorian":{"months":{"format":{"abbreviated":{"1":"jan.","2":"feb.","3":"mar.","4":"apr.","5":"mai","6":"jun.","7":"jul.","8":"aug.","9":"sep.","10":"okt.","11":"nov.","12":"des."},"narrow":{"1":"J","2":"F","3":"M","4":"A","5":"M","6":"J","7":"J","8":"A","9":"S","10":"O","11":"N","12":"D"},"wide":{"1":"januar","2":"februar","3":"mars","4":"april","5":"mai","6":"juni","7":"juli","8":"august","9":"september","10":"oktober","11":"november","12":"desember"}},"stand-alone":{"abbreviated":{"1":"jan","2":"feb","3":"mar","4":"apr","5":"mai","6":"jun","7":"jul","8":"aug","9":"sep","10":"okt","11":"nov","12":"des"},"narrow":{"1":"J","2":"F","3":"M","4":"A","5":"M","6":"J","7":"J","8":"A","9":"S","10":"O","11":"N","12":"D"},"wide":{"1":"januar","2":"februar","3":"mars","4":"april","5":"mai","6":"juni","7":"juli","8":"august","9":"september","10":"oktober","11":"november","12":"desember"}}},"days":{"format":{"abbreviated":{"sun":"søn.","mon":"man.","tue":"tir.","wed":"ons.","thu":"tor.","fri":"fre.","sat":"lør."},"narrow":{"sun":"S","mon":"M","tue":"T","wed":"O","thu":"T","fri":"F","sat":"L"},"short":{"sun":"sø.","mon":"ma.","tue":"ti.","wed":"on.","thu":"to.","fri":"fr.","sat":"lø."},"wide":{"sun":"søndag","mon":"mandag","tue":"tirsdag","wed":"onsdag","thu":"torsdag","fri":"fredag","sat":"lørdag"}},"stand-alone":{"abbreviated":{"sun":"søn.","mon":"man.","tue":"tir.","wed":"ons.","thu":"tor.","fri":"fre.","sat":"lør."},"narrow":{"sun":"S","mon":"M","tue":"T","wed":"O","thu":"T","fri":"F","sat":"L"},"short":{"sun":"sø.","mon":"ma.","tue":"ti.","wed":"on.","thu":"to.","fri":"fr.","sat":"lø."},"wide":{"sun":"søndag","mon":"mandag","tue":"tirsdag","wed":"onsdag","thu":"torsdag","fri":"fredag","sat":"lørdag"}}},"quarters":{"format":{"abbreviated":{"1":"K1","2":"K2","3":"K3","4":"K4"},"narrow":{"1":"1.","2":"2.","3":"3.","4":"4."},"wide":{"1":"1. kvartal","2":"2. kvartal","3":"3. kvartal","4":"4. kvartal"}},"stand-alone":{"abbreviated":{"1":"K1","2":"K2","3":"K3","4":"K4"},"narrow":{"1":"1.","2":"2.","3":"3.","4":"4."},"wide":{"1":"1. kvartal","2":"2. kvartal","3":"3. kvartal","4":"4. kvartal"}}},"dayPeriods":{"format":{"abbreviated":{"midnight":"midn.","am":"a.m.","pm":"p.m.","morning1":"morg.","morning2":"form.","afternoon1":"etterm.","evening1":"kveld","night1":"natt"},"narrow":{"midnight":"mn.","am":"a","pm":"p","morning1":"mg.","morning2":"fm.","afternoon1":"em.","evening1":"kv.","night1":"nt."},"wide":{"midnight":"midnatt","am":"a.m.","pm":"p.m.","morning1":"morgenen","morning2":"formiddagen","afternoon1":"ettermiddagen","evening1":"kvelden","night1":"natten"}},"stand-alone":{"abbreviated":{"midnight":"midn.","am":"a.m.","pm":"p.m.","morning1":"morg.","morning2":"form.","afternoon1":"etterm.","evening1":"kveld","night1":"natt"},"narrow":{"midnight":"mn.","am":"a.m.","pm":"p.m.","morning1":"mg.","morning2":"fm.","afternoon1":"em.","evening1":"kv.","night1":"nt."},"wide":{"midnight":"midnatt","am":"a.m.","pm":"p.m.","morning1":"morgen","morning2":"formiddag","afternoon1":"ettermiddag","evening1":"kveld","night1":"natt"}}},"eras":{"eraNames":{"0":"før Kristus","1":"etter Kristus","0-alt-variant":"før vår tidsregning","1-alt-variant":"etter vår tidsregning"},"eraAbbr":{"0":"f.Kr.","1":"e.Kr.","0-alt-variant":"fvt.","1-alt-variant":"evt."},"eraNarrow":{"0":"f.Kr.","1":"e.Kr.","0-alt-variant":"fvt.","1-alt-variant":"vt."}},"dateFormats":{"full":"EEEE d. MMMM y","long":"d. MMMM y","medium":"d. MMM y","short":"dd.MM.y"},"timeFormats":{"full":"HH:mm:ss zzzz","full-alt-variant":"HH.mm.ss zzzz","long":"HH:mm:ss z","long-alt-variant":"HH.mm.ss z","medium":"HH:mm:ss","medium-alt-variant":"HH.mm.ss","short":"HH:mm","short-alt-variant":"HH.mm"},"dateTimeFormats":{"full":"{1} {0}","long":"{1} 'kl'. {0}","medium":"{1}, {0}","short":"{1}, {0}","availableFormats":{"Bh":"h B","Bhm":"h:mm B","Bhms":"h:mm:ss B","d":"d.","E":"ccc","EBhm":"E h:mm B","EBhms":"E h:mm:ss B","Ed":"E d.","Ehm":"E h:mm a","EHm":"E HH:mm","Ehms":"E h:mm:ss a","EHms":"E HH:mm:ss","Gy":"y G","GyMMM":"MMM y G","GyMMMd":"d. MMM y G","GyMMMEd":"E d. MMM y G","h":"h a","H":"HH","hm":"h:mm a","Hm":"HH:mm","hms":"h:mm:ss a","Hms":"HH:mm:ss","hmsv":"h:mm:ss a v","Hmsv":"HH:mm:ss v","hmv":"h:mm a v","Hmv":"HH:mm v","M":"L.","Md":"d.M.","MEd":"E d.M.","MMdd":"d.M.","MMM":"LLL","MMMd":"d. MMM","MMMEd":"E d. MMM","MMMMd":"d. MMMM","MMMMW-count-one":"W. 'uke' 'i' MMM","MMMMW-count-other":"W. 'uke' 'i' MMM","ms":"mm:ss","y":"y","yM":"M.y","yMd":"d.M.y","yMEd":"E d.MM.y","yMM":"MM.y","yMMM":"MMM y","yMMMd":"d. MMM y","yMMMEd":"E d. MMM y","yMMMM":"MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","yw-count-one":"'uke' w 'i' Y","yw-count-other":"'uke' w 'i' Y"},"appendItems":{"Day":"{0} ({2}: {1})","Day-Of-Week":"{0} {1}","Era":"{1} {0}","Hour":"{0} ({2}: {1})","Minute":"{0} ({2}: {1})","Month":"{0} ({2}: {1})","Quarter":"{0} ({2}: {1})","Second":"{0} ({2}: {1})","Timezone":"{0} {1}","Week":"{0} ({2}: {1})","Year":"{1} {0}"},"intervalFormats":{"intervalFormatFallback":"{0}–{1}","d":{"d":"d.–d."},"h":{"a":"h a – h a","h":"h–h a"},"H":{"H":"HH–HH"},"hm":{"a":"h:mm a – h:mm a","h":"h:mm–h:mm a","m":"h:mm–h:mm a"},"Hm":{"H":"HH:mm–HH:mm","m":"HH:mm–HH:mm"},"hmv":{"a":"h:mm a – h:mm a v","h":"h:mm–h:mm a v","m":"h:mm–h:mm a v"},"Hmv":{"H":"HH:mm–HH:mm v","m":"HH:mm–HH:mm v"},"hv":{"a":"h a – h a v","h":"h–h a v"},"Hv":{"H":"HH–HH v"},"M":{"M":"M.–M."},"Md":{"d":"dd.MM.–dd.MM.","M":"dd.MM.–dd.MM."},"MEd":{"d":"E dd.MM.–E dd.MM.","M":"E dd.MM.–E dd.MM."},"MMM":{"M":"MMM–MMM"},"MMMd":{"d":"d.–d. MMM","M":"d. MMM–d. MMM"},"MMMEd":{"d":"E d.–E d. MMM","M":"E d. MMM–E d. MMM"},"y":{"y":"y–y"},"yM":{"M":"MM.y–MM.y","y":"MM.y–MM.y"},"yMd":{"d":"dd.MM.y–dd.MM.y","M":"dd.MM.y–dd.MM.y","y":"dd.MM.y–dd.MM.y"},"yMEd":{"d":"E dd.MM.y–E dd.MM.y","M":"E dd.MM.y–E dd.MM.y","y":"E dd.MM.y–E dd.MM.y"},"yMMM":{"M":"MMM–MMM y","y":"MMM y–MMM y"},"yMMMd":{"d":"d.–d. MMM y","M":"d. MMM–d. MMM y","y":"d. MMM y–d. MMM y"},"yMMMEd":{"d":"E d.–E d. MMM y","M":"E d. MMM–E d. MMM y","y":"E d. MMM y–E d. MMM y"},"yMMMM":{"M":"MMMM–MMMM y","y":"MMMM y–MMMM y"}}}}},"fields":{"era":{"displayName":"tidsalder"},"era-short":{"displayName":"tidsalder"},"era-narrow":{"displayName":"tidsalder"},"year":{"displayName":"år","relative-type--1":"i fjor","relative-type-0":"i år","relative-type-1":"neste år","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} år","relativeTimePattern-count-other":"om {0} år"},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} år siden","relativeTimePattern-count-other":"for {0} år siden"}},"year-short":{"displayName":"år","relative-type--1":"i fjor","relative-type-0":"i år","relative-type-1":"neste år","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} år","relativeTimePattern-count-other":"om {0} år"},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} år siden","relativeTimePattern-count-other":"for {0} år siden"}},"year-narrow":{"displayName":"år","relative-type--1":"i fjor","relative-type-0":"i år","relative-type-1":"neste år","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} år","relativeTimePattern-count-other":"+{0} år"},"relativeTime-type-past":{"relativeTimePattern-count-one":"–{0} år","relativeTimePattern-count-other":"–{0} år"}},"quarter":{"displayName":"kvartal","relative-type--1":"forrige kvartal","relative-type-0":"dette kvartalet","relative-type-1":"neste kvartal","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} kvartal","relativeTimePattern-count-other":"om {0} kvartaler"},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} kvartal siden","relativeTimePattern-count-other":"for {0} kvartaler siden"}},"quarter-short":{"displayName":"kv.","relative-type--1":"forrige kv.","relative-type-0":"dette kv.","relative-type-1":"neste kv.","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} kv.","relativeTimePattern-count-other":"om {0} kv."},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} kv. siden","relativeTimePattern-count-other":"for {0} kv. siden"}},"quarter-narrow":{"displayName":"kv.","relative-type--1":"forrige kv.","relative-type-0":"dette kv.","relative-type-1":"neste kv.","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} kv.","relativeTimePattern-count-other":"+{0} kv."},"relativeTime-type-past":{"relativeTimePattern-count-one":"–{0} kv.","relativeTimePattern-count-other":"–{0} kv."}},"month":{"displayName":"måned","relative-type--1":"forrige måned","relative-type-0":"denne måneden","relative-type-1":"neste måned","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} måned","relativeTimePattern-count-other":"om {0} måneder"},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} måned siden","relativeTimePattern-count-other":"for {0} måneder siden"}},"month-short":{"displayName":"mnd.","relative-type--1":"forrige md.","relative-type-0":"denne md.","relative-type-1":"neste md.","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} md.","relativeTimePattern-count-other":"om {0} md."},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} md. siden","relativeTimePattern-count-other":"for {0} md. siden"}},"month-narrow":{"displayName":"md.","relative-type--1":"forrige md.","relative-type-0":"denne md.","relative-type-1":"neste md.","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} md.","relativeTimePattern-count-other":"+{0} md."},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} md.","relativeTimePattern-count-other":"-{0} md."}},"week":{"displayName":"uke","relative-type--1":"forrige uke","relative-type-0":"denne uken","relative-type-1":"neste uke","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} uke","relativeTimePattern-count-other":"om {0} uker"},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} uke siden","relativeTimePattern-count-other":"for {0} uker siden"},"relativePeriod":"uken som inneholder {0}"},"week-short":{"displayName":"uke","relative-type--1":"forrige uke","relative-type-0":"denne uken","relative-type-1":"neste uke","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} u.","relativeTimePattern-count-other":"om {0} u."},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} u. siden","relativeTimePattern-count-other":"for {0} u. siden"},"relativePeriod":"uken med {0}"},"week-narrow":{"displayName":"u.","relative-type--1":"forrige uke","relative-type-0":"denne uken","relative-type-1":"neste uke","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} u.","relativeTimePattern-count-other":"+{0} u."},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} u.","relativeTimePattern-count-other":"-{0} u."},"relativePeriod":"u. {0}"},"weekOfMonth":{"displayName":"uke i måneden"},"weekOfMonth-short":{"displayName":"uke i mnd."},"weekOfMonth-narrow":{"displayName":"uke i md."},"day":{"displayName":"dag","relative-type--2":"i forgårs","relative-type--1":"i går","relative-type-0":"i dag","relative-type-1":"i morgen","relative-type-2":"i overmorgen","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} døgn","relativeTimePattern-count-other":"om {0} døgn"},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} døgn siden","relativeTimePattern-count-other":"for {0} døgn siden"}},"day-short":{"displayName":"dag","relative-type--2":"i forgårs","relative-type--1":"i går","relative-type-0":"i dag","relative-type-1":"i morgen","relative-type-2":"i overmorgen","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} d.","relativeTimePattern-count-other":"om {0} d."},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} d. siden","relativeTimePattern-count-other":"for {0} d. siden"}},"day-narrow":{"displayName":"d.","relative-type--2":"i forgårs","relative-type--1":"i går","relative-type-0":"i dag","relative-type-1":"i morgen","relative-type-2":"i overmorgen","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} d.","relativeTimePattern-count-other":"+{0} d."},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} d.","relativeTimePattern-count-other":"-{0} d."}},"dayOfYear":{"displayName":"dag i året"},"dayOfYear-short":{"displayName":"dag i året"},"dayOfYear-narrow":{"displayName":"d. i året"},"weekday":{"displayName":"ukedag"},"weekday-short":{"displayName":"ukedag"},"weekday-narrow":{"displayName":"uked."},"weekdayOfMonth":{"displayName":"ukedag i måneden"},"weekdayOfMonth-short":{"displayName":"uked. i mnd."},"weekdayOfMonth-narrow":{"displayName":"uked. i md."},"sun":{"relative-type--1":"forrige søndag","relative-type-0":"søndag","relative-type-1":"neste søndag","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} søndag","relativeTimePattern-count-other":"om {0} søndager"},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} søndag siden","relativeTimePattern-count-other":"for {0} søndager siden"}},"sun-short":{"relative-type--1":"sist søn.","relative-type-0":"denne søn.","relative-type-1":"neste søn.","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} søn.","relativeTimePattern-count-other":"om {0} søn."},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} søn. siden","relativeTimePattern-count-other":"for {0} søn. siden"}},"sun-narrow":{"relative-type--1":"sist sø.","relative-type-0":"denne sø.","relative-type-1":"neste sø.","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} sø.","relativeTimePattern-count-other":"om {0} sø."},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} sø. siden","relativeTimePattern-count-other":"for {0} sø. siden"}},"mon":{"relative-type--1":"forrige mandag","relative-type-0":"mandag","relative-type-1":"neste mandag","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} mandag","relativeTimePattern-count-other":"om {0} mandager"},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} mandag siden","relativeTimePattern-count-other":"for {0} mandager siden"}},"mon-short":{"relative-type--1":"sist man.","relative-type-0":"denne man.","relative-type-1":"neste man.","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} man.","relativeTimePattern-count-other":"om {0} man."},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} man. siden","relativeTimePattern-count-other":"for {0} man. siden"}},"mon-narrow":{"relative-type--1":"sist ma.","relative-type-0":"denne ma.","relative-type-1":"neste ma.","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} ma.","relativeTimePattern-count-other":"om {0} ma."},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} ma. siden","relativeTimePattern-count-other":"for {0} ma. siden"}},"tue":{"relative-type--1":"forrige tirsdag","relative-type-0":"tirsdag","relative-type-1":"neste tirsdag","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} tirsdag","relativeTimePattern-count-other":"om {0} tirsdager"},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} tirsdag siden","relativeTimePattern-count-other":"for {0} tirsdager siden"}},"tue-short":{"relative-type--1":"sist tir.","relative-type-0":"denne tir.","relative-type-1":"neste tir.","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} tir.","relativeTimePattern-count-other":"om {0} tir."},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} tir. siden","relativeTimePattern-count-other":"for {0} tir. siden"}},"tue-narrow":{"relative-type--1":"sist ti.","relative-type-0":"denne ti.","relative-type-1":"neste ti.","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} ti.","relativeTimePattern-count-other":"om {0} ti."},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} ti. siden","relativeTimePattern-count-other":"for {0} ti. siden"}},"wed":{"relative-type--1":"forrige onsdag","relative-type-0":"onsdag","relative-type-1":"neste onsdag","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} onsdag","relativeTimePattern-count-other":"om {0} onsdager"},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} onsdag siden","relativeTimePattern-count-other":"for {0} onsdager siden"}},"wed-short":{"relative-type--1":"sist ons.","relative-type-0":"denne ons.","relative-type-1":"neste ons.","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} ons.","relativeTimePattern-count-other":"om {0} ons."},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} ons. siden","relativeTimePattern-count-other":"for {0} ons. siden"}},"wed-narrow":{"relative-type--1":"sist on.","relative-type-0":"denne on.","relative-type-1":"neste on.","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} on.","relativeTimePattern-count-other":"om {0} on."},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} on. siden","relativeTimePattern-count-other":"for {0} on. siden"}},"thu":{"relative-type--1":"forrige torsdag","relative-type-0":"torsdag","relative-type-1":"neste torsdag","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} torsdag","relativeTimePattern-count-other":"om {0} torsdager"},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} torsdag siden","relativeTimePattern-count-other":"for {0} torsdager siden"}},"thu-short":{"relative-type--1":"sist tor.","relative-type-0":"denne tor.","relative-type-1":"neste tor.","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} tor.","relativeTimePattern-count-other":"om {0} tor."},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} tor. siden","relativeTimePattern-count-other":"for {0} tor. siden"}},"thu-narrow":{"relative-type--1":"sist to.","relative-type-0":"denne to.","relative-type-1":"neste to.","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} to.","relativeTimePattern-count-other":"om {0} to."},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} to. siden","relativeTimePattern-count-other":"for {0} to. siden"}},"fri":{"relative-type--1":"forrige fredag","relative-type-0":"fredag","relative-type-1":"neste fredag","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} fredag","relativeTimePattern-count-other":"om {0} fredager"},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} fredag siden","relativeTimePattern-count-other":"for {0} fredager siden"}},"fri-short":{"relative-type--1":"sist fre.","relative-type-0":"denne fre.","relative-type-1":"neste fre.","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} fre.","relativeTimePattern-count-other":"om {0} fre."},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} fre. siden","relativeTimePattern-count-other":"for {0} fre. siden"}},"fri-narrow":{"relative-type--1":"sist fr.","relative-type-0":"denne fr.","relative-type-1":"neste fr.","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} fr.","relativeTimePattern-count-other":"om {0} fr."},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} fr. siden","relativeTimePattern-count-other":"for {0} fr. siden"}},"sat":{"relative-type--1":"forrige lørdag","relative-type-0":"lørdag","relative-type-1":"neste lørdag","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} lørdag","relativeTimePattern-count-other":"om {0} lørdager"},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} lørdag siden","relativeTimePattern-count-other":"for {0} lørdager siden"}},"sat-short":{"relative-type--1":"sist lør.","relative-type-0":"denne lør.","relative-type-1":"neste lør.","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} lør.","relativeTimePattern-count-other":"om {0} lør."},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} lør. siden","relativeTimePattern-count-other":"for {0} lør. siden"}},"sat-narrow":{"relative-type--1":"sist lø.","relative-type-0":"denne lø.","relative-type-1":"neste lø.","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} lø.","relativeTimePattern-count-other":"om {0} lø."},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} lø. siden","relativeTimePattern-count-other":"for {0} lø. siden"}},"dayperiod-short":{"displayName":"am/pm"},"dayperiod":{"displayName":"a.m./p.m."},"dayperiod-narrow":{"displayName":"am/pm"},"hour":{"displayName":"time","relative-type-0":"denne timen","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} time","relativeTimePattern-count-other":"om {0} timer"},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} time siden","relativeTimePattern-count-other":"for {0} timer siden"}},"hour-short":{"displayName":"t","relative-type-0":"denne timen","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} t","relativeTimePattern-count-other":"om {0} t"},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} t siden","relativeTimePattern-count-other":"for {0} t siden"}},"hour-narrow":{"displayName":"t","relative-type-0":"denne timen","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} t","relativeTimePattern-count-other":"+{0} t"},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} t","relativeTimePattern-count-other":"-{0} t"}},"minute":{"displayName":"minutt","relative-type-0":"dette minuttet","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} minutt","relativeTimePattern-count-other":"om {0} minutter"},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} minutt siden","relativeTimePattern-count-other":"for {0} minutter siden"}},"minute-short":{"displayName":"min","relative-type-0":"dette minuttet","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} min","relativeTimePattern-count-other":"om {0} min"},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} min siden","relativeTimePattern-count-other":"for {0} min siden"}},"minute-narrow":{"displayName":"m","relative-type-0":"dette minuttet","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} min","relativeTimePattern-count-other":"+{0} min"},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} min","relativeTimePattern-count-other":"-{0} min"}},"second":{"displayName":"sekund","relative-type-0":"nå","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} sekund","relativeTimePattern-count-other":"om {0} sekunder"},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} sekund siden","relativeTimePattern-count-other":"for {0} sekunder siden"}},"second-short":{"displayName":"sek","relative-type-0":"nå","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} sek","relativeTimePattern-count-other":"om {0} sek"},"relativeTime-type-past":{"relativeTimePattern-count-one":"for {0} sek siden","relativeTimePattern-count-other":"for {0} sek siden"}},"second-narrow":{"displayName":"s","relative-type-0":"nå","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} s","relativeTimePattern-count-other":"+{0} s"},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} s","relativeTimePattern-count-other":"-{0} s"}},"zone":{"displayName":"tidssone"},"zone-short":{"displayName":"tidssone"},"zone-narrow":{"displayName":"tidssone"}}},"numbers":{"currencies":{"ADP":{"displayName":"andorranske pesetas","displayName-count-one":"andorransk pesetas","displayName-count-other":"andorranske pesetas","symbol":"ADP"},"AED":{"displayName":"emiratarabiske dirham","displayName-count-one":"emiratarabisk dirham","displayName-count-other":"emiratarabiske dirham","symbol":"AED"},"AFA":{"displayName":"afgansk afghani (1927–2002)","displayName-count-one":"afghansk afghani (1927–2002)","displayName-count-other":"afghanske afghani (1927–2002)","symbol":"AFA"},"AFN":{"displayName":"afghanske afghani","displayName-count-one":"afghansk afghani","displayName-count-other":"afghanske afghani","symbol":"AFN"},"ALK":{"displayName":"albanske lek (1946–1965)","displayName-count-one":"albansk lek (1946–1965)","displayName-count-other":"albanske lek (1946–1965)","symbol":"ALK"},"ALL":{"displayName":"albanske lek","displayName-count-one":"albansk lek","displayName-count-other":"albanske lek","symbol":"ALL"},"AMD":{"displayName":"armenske dram","displayName-count-one":"armensk dram","displayName-count-other":"armenske dram","symbol":"AMD"},"ANG":{"displayName":"nederlandske antillegylden","displayName-count-one":"nederlandsk antillegylden","displayName-count-other":"nederlandske antillegylden","symbol":"ANG"},"AOA":{"displayName":"angolanske kwanza","displayName-count-one":"angolansk kwanza","displayName-count-other":"angolanske kwanza","symbol":"AOA","symbol-alt-narrow":"Kz"},"AOK":{"displayName":"angolanske kwanza (1977–1990)","displayName-count-one":"angolansk kwanza (1977–1990)","displayName-count-other":"angolanske kwanza (1977–1990)","symbol":"AOK"},"AON":{"displayName":"angolanske nye kwanza (1990–2000)","displayName-count-one":"angolansk ny kwanza","displayName-count-other":"angolanske nye kwanza (1990–2000)","symbol":"AON"},"AOR":{"displayName":"angolanske omjusterte kwanza (1995–1999)","displayName-count-one":"angolansk kwanza reajustado (1995–1999)","displayName-count-other":"angolanske omjusterte kwanza (1995–1999)","symbol":"AOR"},"ARA":{"displayName":"argentinske australer","displayName-count-one":"argentinsk austral","displayName-count-other":"argentinske australer","symbol":"ARA"},"ARL":{"displayName":"argentinske peso ley","displayName-count-one":"argentinsk peso ley","displayName-count-other":"argentinske peso ley","symbol":"ARL"},"ARM":{"displayName":"argentinsk pesos (1881–1970)","displayName-count-one":"argentinsk pesos (1881–1970)","displayName-count-other":"argentinske pesos (1881–1970)","symbol":"ARM"},"ARP":{"displayName":"argentinske pesos (1983–1985)","displayName-count-one":"argentinsk pesos (1983–1985)","displayName-count-other":"argentinske pesos (1983–1985)","symbol":"ARP"},"ARS":{"displayName":"argentinske pesos","displayName-count-one":"argentinsk peso","displayName-count-other":"argentinske pesos","symbol":"ARS","symbol-alt-narrow":"$"},"ATS":{"displayName":"østerrikske shilling","displayName-count-one":"østerriksk schilling","displayName-count-other":"østerrikske schilling","symbol":"ATS"},"AUD":{"displayName":"australske dollar","displayName-count-one":"australsk dollar","displayName-count-other":"australske dollar","symbol":"AUD","symbol-alt-narrow":"$"},"AWG":{"displayName":"arubiske floriner","displayName-count-one":"arubisk florin","displayName-count-other":"arubiske floriner","symbol":"AWG"},"AZM":{"displayName":"aserbajdsjanske manat (1993–2006)","displayName-count-one":"aserbajdsjansk manat (1993–2006)","displayName-count-other":"aserbajdsjanske manat (1993–2006)","symbol":"AZM"},"AZN":{"displayName":"aserbajdsjanske manat","displayName-count-one":"aserbajdsjansk manat","displayName-count-other":"aserbajdsjanske manat","symbol":"AZN"},"BAD":{"displayName":"bosnisk-hercegovinske dinarer (1992–1994)","displayName-count-one":"bosnisk-hercegovinsk dinar (1992–1994)","displayName-count-other":"bosnisk-hercegovinske dinarer (1992–1994)","symbol":"BAD"},"BAM":{"displayName":"bosnisk-hercegovinske konvertible mark","displayName-count-one":"bosnisk-hercegovinsk konvertibel mark","displayName-count-other":"bosnisk-hercegovinske konvertible mark","symbol":"BAM","symbol-alt-narrow":"KM"},"BAN":{"displayName":"nye bosnisk-hercegovinske dinarer (1994–1997)","displayName-count-one":"ny bosnisk-hercegovinsk dinar (1994–1997)","displayName-count-other":"nye bosnisk-hercegovinske dinarer (1994–1997)","symbol":"BAN"},"BBD":{"displayName":"barbadiske dollar","displayName-count-one":"barbadisk dollar","displayName-count-other":"barbadiske dollar","symbol":"BBD","symbol-alt-narrow":"$"},"BDT":{"displayName":"bangladeshiske taka","displayName-count-one":"bangladeshisk taka","displayName-count-other":"bangladeshiske taka","symbol":"BDT","symbol-alt-narrow":"৳"},"BEC":{"displayName":"belgiske franc (konvertible)","displayName-count-one":"belgisk franc (konvertibel)","displayName-count-other":"belgiske franc (konvertible)","symbol":"BEC"},"BEF":{"displayName":"belgiske franc","displayName-count-one":"belgisk franc","displayName-count-other":"belgiske franc","symbol":"BEF"},"BEL":{"displayName":"belgiske franc (finansielle)","displayName-count-one":"belgisk franc (finansiell)","displayName-count-other":"belgiske franc (finansielle)","symbol":"BEL"},"BGL":{"displayName":"bulgarske lev (hard)","displayName-count-one":"bulgarsk lev (hard)","displayName-count-other":"bulgarske lev (hard)","symbol":"BGL"},"BGM":{"displayName":"bulgarske lev (sosialist)","displayName-count-one":"bulgarsk lev (sosialist)","displayName-count-other":"bulgarske lev (sosialist)","symbol":"BGM"},"BGN":{"displayName":"bulgarske lev","displayName-count-one":"bulgarsk lev","displayName-count-other":"bulgarske lev","symbol":"BGN"},"BGO":{"displayName":"bulgarske lev (1879–1952)","displayName-count-one":"bulgarsk lev (1879–1952)","displayName-count-other":"bulgarske lev (1879–1952)","symbol":"BGO"},"BHD":{"displayName":"bahrainske dinarer","displayName-count-one":"bahrainsk dinar","displayName-count-other":"bahrainske dinarer","symbol":"BHD"},"BIF":{"displayName":"burundiske franc","displayName-count-one":"burundisk franc","displayName-count-other":"burundiske franc","symbol":"BIF"},"BMD":{"displayName":"bermudiske dollar","displayName-count-one":"bermudisk dollar","displayName-count-other":"bermudiske dollar","symbol":"BMD","symbol-alt-narrow":"$"},"BND":{"displayName":"bruneiske dollar","displayName-count-one":"bruneisk dollar","displayName-count-other":"bruneiske dollar","symbol":"BND","symbol-alt-narrow":"$"},"BOB":{"displayName":"bolivianske boliviano","displayName-count-one":"boliviansk boliviano","displayName-count-other":"bolivianske boliviano","symbol":"BOB","symbol-alt-narrow":"Bs"},"BOL":{"displayName":"bolivianske boliviano (1863–1963)","displayName-count-one":"boliviansk boliviano (1863–1963)","displayName-count-other":"bolivianske boliviano (1863–1963)","symbol":"BOL"},"BOP":{"displayName":"bolivianske pesos","displayName-count-one":"boliviansk pesos","displayName-count-other":"bolivianske pesos","symbol":"BOP"},"BOV":{"displayName":"bolivianske mvdol","displayName-count-one":"bolivianske mvdol","displayName-count-other":"bolivianske mvdol","symbol":"BOV"},"BRB":{"displayName":"brasilianske cruzeiro novo (1967–1986)","displayName-count-one":"brasiliansk cruzeiro novo (1967–1986)","displayName-count-other":"brasilianske cruzeiro novo (1967–1986)","symbol":"BRB"},"BRC":{"displayName":"brasilianske cruzados (1986–1989)","displayName-count-one":"brasiliansk cruzado (1986–1989)","displayName-count-other":"brasilianske cruzado (1986–1989)","symbol":"BRC"},"BRE":{"displayName":"brasilianske cruzeiro (1990–1993)","displayName-count-one":"brasiliansk cruzeiro (1990–1993)","displayName-count-other":"brasilianske cruzeiro (1990–1993)","symbol":"BRE"},"BRL":{"displayName":"brasilianske real","displayName-count-one":"brasiliansk real","displayName-count-other":"brasilianske real","symbol":"BRL","symbol-alt-narrow":"R$"},"BRN":{"displayName":"brasilianske cruzado novo (1989–1990)","displayName-count-one":"brasiliansk cruzado novo (1989–1990)","displayName-count-other":"brasilianske cruzado novo (1989–1990)","symbol":"BRN"},"BRR":{"displayName":"brasilianske cruzeiro (1993–1994)","displayName-count-one":"brasiliansk cruzeiro (1993–1994)","displayName-count-other":"brasilianske cruzeiro (1993–1994)","symbol":"BRR"},"BRZ":{"displayName":"brasilianske cruzeiro (1942–1967)","displayName-count-one":"brasiliansk cruzeiro (1942–1967)","displayName-count-other":"brasilianske cruzeiro (1942–1967)","symbol":"BRZ"},"BSD":{"displayName":"bahamanske dollar","displayName-count-one":"bahamansk dollar","displayName-count-other":"bahamanske dollar","symbol":"BSD","symbol-alt-narrow":"$"},"BTN":{"displayName":"bhutanske ngultrum","displayName-count-one":"bhutansk ngultrum","displayName-count-other":"bhutanske ngultrum","symbol":"BTN"},"BUK":{"displayName":"burmesiske kyat","displayName-count-one":"burmesisk kyat","displayName-count-other":"burmesiske kyat","symbol":"BUK"},"BWP":{"displayName":"botswanske pula","displayName-count-one":"botswansk pula","displayName-count-other":"botswanske pula","symbol":"BWP","symbol-alt-narrow":"P"},"BYB":{"displayName":"hviterussiske nye rubler (1994–1999)","displayName-count-one":"hviterussisk ny rubel (1994–1999)","displayName-count-other":"hviterussiske nye rubler (1994–1999)","symbol":"BYB"},"BYN":{"displayName":"nye hviterussiske rubler","displayName-count-one":"ny hviterussisk rubel","displayName-count-other":"nye hviterussiske rubler","symbol":"BYN","symbol-alt-narrow":"р."},"BYR":{"displayName":"hviterussiske rubler (2000–2016)","displayName-count-one":"hviterussisk rubel (2000–2016)","displayName-count-other":"hviterussiske rubler (2000–2016)","symbol":"BYR"},"BZD":{"displayName":"beliziske dollar","displayName-count-one":"belizisk dollar","displayName-count-other":"beliziske dollar","symbol":"BZD","symbol-alt-narrow":"$"},"CAD":{"displayName":"kanadiske dollar","displayName-count-one":"kanadisk dollar","displayName-count-other":"kanadiske dollar","symbol":"CAD","symbol-alt-narrow":"$"},"CDF":{"displayName":"kongolesiske franc","displayName-count-one":"kongolesisk franc","displayName-count-other":"kongolesiske franc","symbol":"CDF"},"CHE":{"displayName":"WIR euro","symbol":"CHE"},"CHF":{"displayName":"sveitsiske franc","displayName-count-one":"sveitsisk franc","displayName-count-other":"sveitsiske franc","symbol":"CHF"},"CHW":{"displayName":"WIR franc","symbol":"CHW"},"CLE":{"displayName":"chilenske escudo","displayName-count-one":"chilensk escudo","displayName-count-other":"chilenske escudo","symbol":"CLE"},"CLF":{"displayName":"chilenske unidades de fomento","displayName-count-one":"chilensk unidades de fomento","displayName-count-other":"chilenske unidades de fomento","symbol":"CLF"},"CLP":{"displayName":"chilenske pesos","displayName-count-one":"chilensk peso","displayName-count-other":"chilenske pesos","symbol":"CLP","symbol-alt-narrow":"$"},"CNH":{"displayName":"kinesiske yuan (offshore)","displayName-count-one":"kinesisk yuan (offshore)","displayName-count-other":"kinesiske yuan (offshore)","symbol":"CNH"},"CNX":{"displayName":"Kinas folkebank dollar","displayName-count-one":"Kinas folkebank dollar","displayName-count-other":"Kinas folkebank dollar","symbol":"CNX"},"CNY":{"displayName":"kinesiske yuan","displayName-count-one":"kinesisk yuan","displayName-count-other":"kinesiske yuan","symbol":"CNY","symbol-alt-narrow":"¥"},"COP":{"displayName":"colombianske pesos","displayName-count-one":"colombiansk peso","displayName-count-other":"colombianske pesos","symbol":"COP","symbol-alt-narrow":"$"},"COU":{"displayName":"colombianske unidad de valor real","displayName-count-one":"colombiansk unidad de valor real","displayName-count-other":"colombianske unidad de valor real","symbol":"COU"},"CRC":{"displayName":"costaricanske colón","displayName-count-one":"costaricansk colón","displayName-count-other":"costaricanske colón","symbol":"CRC","symbol-alt-narrow":"₡"},"CSD":{"displayName":"serbiske dinarer (2002–2006)","displayName-count-one":"serbisk dinar (2002–2006)","displayName-count-other":"serbiske dinarer (2002–2006)","symbol":"CSD"},"CSK":{"displayName":"tsjekkoslovakiske koruna (hard)","displayName-count-one":"tsjekkoslovakisk koruna (hard)","displayName-count-other":"tsjekkoslovakiske koruna (hard)","symbol":"CSK"},"CUC":{"displayName":"kubanske konvertible pesos","displayName-count-one":"kubansk konvertibel peso","displayName-count-other":"kubanske konvertible pesos","symbol":"CUC","symbol-alt-narrow":"$"},"CUP":{"displayName":"kubanske pesos","displayName-count-one":"kubansk peso","displayName-count-other":"kubanske pesos","symbol":"CUP","symbol-alt-narrow":"$"},"CVE":{"displayName":"kappverdiske escudos","displayName-count-one":"kappverdisk escudo","displayName-count-other":"kappverdiske escudos","symbol":"CVE"},"CYP":{"displayName":"kypriotiske pund","displayName-count-one":"kypriotisk pund","displayName-count-other":"kypriotiske pund","symbol":"CYP"},"CZK":{"displayName":"tsjekkiske koruna","displayName-count-one":"tsjekkisk koruna","displayName-count-other":"tsjekkiske koruna","symbol":"CZK","symbol-alt-narrow":"Kč"},"DDM":{"displayName":"østtyske mark","displayName-count-one":"østtysk mark","displayName-count-other":"østtyske mark","symbol":"DDM"},"DEM":{"displayName":"tyske mark","displayName-count-one":"tysk mark","displayName-count-other":"tyske mark","symbol":"DEM"},"DJF":{"displayName":"djiboutiske franc","displayName-count-one":"djiboutisk franc","displayName-count-other":"djiboutiske franc","symbol":"DJF"},"DKK":{"displayName":"danske kroner","displayName-count-one":"dansk krone","displayName-count-other":"danske kroner","symbol":"DKK","symbol-alt-narrow":"kr"},"DOP":{"displayName":"dominikanske pesos","displayName-count-one":"dominikansk peso","displayName-count-other":"dominikanske pesos","symbol":"DOP","symbol-alt-narrow":"$"},"DZD":{"displayName":"algeriske dinarer","displayName-count-one":"algerisk dinar","displayName-count-other":"algeriske dinarer","symbol":"DZD"},"ECS":{"displayName":"ecuadorianske sucre","displayName-count-one":"ecuadoriansk sucre","displayName-count-other":"ecuadorianske sucre","symbol":"ECS"},"ECV":{"displayName":"ecuadorianske unidad de valor constante (UVC)","displayName-count-one":"ecuadoriansk unidad de valor constante (UVC)","displayName-count-other":"ecuadorianske unidad de valor constante (UVC)","symbol":"ECV"},"EEK":{"displayName":"estiske kroon","displayName-count-one":"estisk kroon","displayName-count-other":"estiske kroner","symbol":"EEK"},"EGP":{"displayName":"egyptiske pund","displayName-count-one":"egyptisk pund","displayName-count-other":"egyptiske pund","symbol":"EGP","symbol-alt-narrow":"E£"},"ERN":{"displayName":"eritreiske nakfa","displayName-count-one":"eritreisk nakfa","displayName-count-other":"eritreiske nakfa","symbol":"ERN"},"ESA":{"displayName":"spanske peseta (A–konto)","displayName-count-one":"spansk peseta (A–konto)","displayName-count-other":"spanske peseta (A–konto)","symbol":"ESA"},"ESB":{"displayName":"spanske peseta (konvertibel konto)","displayName-count-one":"spansk peseta (konvertibel konto)","displayName-count-other":"spanske peseta (konvertibel konto)","symbol":"ESB"},"ESP":{"displayName":"spanske peseta","displayName-count-one":"spansk peseta","displayName-count-other":"spanske peseta","symbol":"ESP","symbol-alt-narrow":"₧"},"ETB":{"displayName":"etiopiske birr","displayName-count-one":"etiopisk birr","displayName-count-other":"etiopiske birr","symbol":"ETB"},"EUR":{"displayName":"euro","displayName-count-one":"euro","displayName-count-other":"euro","symbol":"€","symbol-alt-narrow":"€"},"FIM":{"displayName":"finske mark","displayName-count-one":"finsk mark","displayName-count-other":"finske mark","symbol":"FIM"},"FJD":{"displayName":"fijianske dollar","displayName-count-one":"fijiansk dollar","displayName-count-other":"fijianske dollar","symbol":"FJD","symbol-alt-narrow":"$"},"FKP":{"displayName":"falklandspund","displayName-count-one":"falklandspund","displayName-count-other":"falklandspund","symbol":"FKP","symbol-alt-narrow":"£"},"FRF":{"displayName":"franske franc","displayName-count-one":"fransk franc","displayName-count-other":"franske franc","symbol":"FRF"},"GBP":{"displayName":"britiske pund","displayName-count-one":"britisk pund","displayName-count-other":"britiske pund","symbol":"£","symbol-alt-narrow":"£"},"GEK":{"displayName":"georgiske kupon larit","displayName-count-one":"georgisk kupon larit","displayName-count-other":"georgiske kupon larit","symbol":"GEK"},"GEL":{"displayName":"georgiske lari","displayName-count-one":"georgisk lari","displayName-count-other":"georgiske lari","symbol":"GEL","symbol-alt-narrow":"₾","symbol-alt-variant":"₾"},"GHC":{"displayName":"ghanesisk cedi (1979–2007)","displayName-count-one":"ghanesisk cedi (1979–2007)","displayName-count-other":"ghanesiske cedi (1979–2007)","symbol":"GHC"},"GHS":{"displayName":"ghanesiske cedi","displayName-count-one":"ghanesisk cedi","displayName-count-other":"ghanesiske cedi","symbol":"GHS"},"GIP":{"displayName":"gibraltarske pund","displayName-count-one":"gibraltarsk pund","displayName-count-other":"gibraltarske pund","symbol":"GIP","symbol-alt-narrow":"£"},"GMD":{"displayName":"gambiske dalasi","displayName-count-one":"gambisk dalasi","displayName-count-other":"gambiske dalasi","symbol":"GMD"},"GNF":{"displayName":"guineanske franc","displayName-count-one":"guineansk franc","displayName-count-other":"guineanske franc","symbol":"GNF","symbol-alt-narrow":"FG"},"GNS":{"displayName":"guineanske syli","displayName-count-one":"guineansk syli","displayName-count-other":"guineanske syli","symbol":"GNS"},"GQE":{"displayName":"ekvatorialguineanske ekwele guineana","displayName-count-one":"ekvatorialguineansk ekwele guineana","displayName-count-other":"ekvatorialguineanske ekwele guineana","symbol":"GQE"},"GRD":{"displayName":"greske drakmer","displayName-count-one":"gresk drakme","displayName-count-other":"greske drakmer","symbol":"GRD"},"GTQ":{"displayName":"guatemalanske quetzal","displayName-count-one":"guatemalansk quetzal","displayName-count-other":"guatemalanske quetzal","symbol":"GTQ","symbol-alt-narrow":"Q"},"GWE":{"displayName":"portugisiske guinea escudo","displayName-count-one":"portugisisk guinea escudo","displayName-count-other":"portugisiske guinea escudo","symbol":"GWE"},"GWP":{"displayName":"Guinea-Bissau-pesos","displayName-count-one":"Guinea-Bissau-pesos","displayName-count-other":"Guinea-Bissau-pesos","symbol":"GWP"},"GYD":{"displayName":"guyanske dollar","displayName-count-one":"guyansk dollar","displayName-count-other":"guyanske dollar","symbol":"GYD","symbol-alt-narrow":"$"},"HKD":{"displayName":"Hongkong-dollar","displayName-count-one":"Hongkong-dollar","displayName-count-other":"Hongkong-dollar","symbol":"HKD","symbol-alt-narrow":"$"},"HNL":{"displayName":"honduranske lempira","displayName-count-one":"honduransk lempira","displayName-count-other":"honduranske lempira","symbol":"HNL","symbol-alt-narrow":"L"},"HRD":{"displayName":"kroatiske dinarer","displayName-count-one":"kroatisk dinar","displayName-count-other":"kroatiske dinarer","symbol":"HRD"},"HRK":{"displayName":"kroatiske kuna","displayName-count-one":"kroatisk kuna","displayName-count-other":"kroatiske kuna","symbol":"HRK","symbol-alt-narrow":"kn"},"HTG":{"displayName":"haitiske gourde","displayName-count-one":"haitisk gourde","displayName-count-other":"haitiske gourde","symbol":"HTG"},"HUF":{"displayName":"ungarske forinter","displayName-count-one":"ungarsk forint","displayName-count-other":"ungarske forinter","symbol":"HUF","symbol-alt-narrow":"Ft"},"IDR":{"displayName":"indonesiske rupier","displayName-count-one":"indonesisk rupi","displayName-count-other":"indonesiske rupier","symbol":"IDR","symbol-alt-narrow":"Rp"},"IEP":{"displayName":"irske pund","displayName-count-one":"irsk pund","displayName-count-other":"irske pund","symbol":"IEP"},"ILP":{"displayName":"israelske pund","displayName-count-one":"israelsk pund","displayName-count-other":"israelske pund","symbol":"ILP"},"ILR":{"displayName":"israelske shekler (1980–1985)","displayName-count-one":"israelsk shekel (1980–1985)","displayName-count-other":"israelske shekler (1980–1985)","symbol":"ILR"},"ILS":{"displayName":"nye israelske shekler","displayName-count-one":"ny israelsk shekel","displayName-count-other":"nye israelske shekler","symbol":"ILS","symbol-alt-narrow":"₪"},"INR":{"displayName":"indiske rupier","displayName-count-one":"indisk rupi","displayName-count-other":"indiske rupier","symbol":"INR","symbol-alt-narrow":"₹"},"IQD":{"displayName":"irakske dinarer","displayName-count-one":"iraksk dinar","displayName-count-other":"irakske dinarer","symbol":"IQD"},"IRR":{"displayName":"iranske rialer","displayName-count-one":"iransk rial","displayName-count-other":"iranske rialer","symbol":"IRR"},"ISJ":{"displayName":"islandske kroner (1918–1981)","displayName-count-one":"islandsk krone (1918–1981)","displayName-count-other":"islandske kroner (1918–1981)","symbol":"ISJ"},"ISK":{"displayName":"islandske kroner","displayName-count-one":"islandsk krone","displayName-count-other":"islandske kroner","symbol":"ISK","symbol-alt-narrow":"kr"},"ITL":{"displayName":"italienske lire","displayName-count-one":"italiensk lire","displayName-count-other":"italienske lire","symbol":"ITL"},"JMD":{"displayName":"jamaikanske dollar","displayName-count-one":"jamaikansk dollar","displayName-count-other":"jamaikanske dollar","symbol":"JMD","symbol-alt-narrow":"$"},"JOD":{"displayName":"jordanske dinarer","displayName-count-one":"jordansk dinar","displayName-count-other":"jordanske dinarer","symbol":"JOD"},"JPY":{"displayName":"japanske yen","displayName-count-one":"japansk yen","displayName-count-other":"japanske yen","symbol":"JPY","symbol-alt-narrow":"¥"},"KES":{"displayName":"kenyanske shilling","displayName-count-one":"kenyansk shilling","displayName-count-other":"kenyanske shilling","symbol":"KES"},"KGS":{"displayName":"kirgisiske som","displayName-count-one":"kirgisisk som","displayName-count-other":"kirgisiske som","symbol":"KGS"},"KHR":{"displayName":"kambodsjanske riel","displayName-count-one":"kambodsjansk riel","displayName-count-other":"kambodsjanske riel","symbol":"KHR","symbol-alt-narrow":"៛"},"KMF":{"displayName":"komoriske franc","displayName-count-one":"komorisk franc","displayName-count-other":"komoriske franc","symbol":"KMF","symbol-alt-narrow":"CF"},"KPW":{"displayName":"nordkoreanske won","displayName-count-one":"nordkoreansk won","displayName-count-other":"nordkoreanske won","symbol":"KPW","symbol-alt-narrow":"₩"},"KRH":{"displayName":"sørkoreanske hwan (1953–1962)","displayName-count-one":"sørkoreansk hwan (1953–1962)","displayName-count-other":"sørkoreanske hwan (1953–1962)","symbol":"KRH"},"KRO":{"displayName":"sørkoreanske won (1945–1953)","displayName-count-one":"sørkoreansk won (1945–1953)","displayName-count-other":"sørkoreanske won (1945–1953)","symbol":"KRO"},"KRW":{"displayName":"sørkoreanske won","displayName-count-one":"sørkoreansk won","displayName-count-other":"sørkoreanske won","symbol":"KRW","symbol-alt-narrow":"₩"},"KWD":{"displayName":"kuwaitiske dinarer","displayName-count-one":"kuwaitisk dinar","displayName-count-other":"kuwaitiske dinarer","symbol":"KWD"},"KYD":{"displayName":"caymanske dollar","displayName-count-one":"caymansk dollar","displayName-count-other":"caymanske dollar","symbol":"KYD","symbol-alt-narrow":"$"},"KZT":{"displayName":"kasakhstanske tenge","displayName-count-one":"kasakhstansk tenge","displayName-count-other":"kasakhstanske tenge","symbol":"KZT","symbol-alt-narrow":"₸"},"LAK":{"displayName":"laotiske kip","displayName-count-one":"laotisk kip","displayName-count-other":"laotiske kip","symbol":"LAK","symbol-alt-narrow":"₭"},"LBP":{"displayName":"libanesiske pund","displayName-count-one":"libanesisk pund","displayName-count-other":"libanesiske pund","symbol":"LBP","symbol-alt-narrow":"L£"},"LKR":{"displayName":"srilankiske rupier","displayName-count-one":"srilankisk rupi","displayName-count-other":"srilankiske rupier","symbol":"LKR","symbol-alt-narrow":"Rs"},"LRD":{"displayName":"liberiske dollar","displayName-count-one":"liberisk dollar","displayName-count-other":"liberiske dollar","symbol":"LRD","symbol-alt-narrow":"$"},"LSL":{"displayName":"lesothiske loti","displayName-count-one":"lesothisk loti","displayName-count-other":"lesothiske loti","symbol":"LSL"},"LTL":{"displayName":"litauiske litas","displayName-count-one":"litauisk lita","displayName-count-other":"litauiske lita","symbol":"LTL","symbol-alt-narrow":"Lt"},"LTT":{"displayName":"litauiske talonas","displayName-count-one":"litauisk talonas","displayName-count-other":"litauiske talonas","symbol":"LTT"},"LUC":{"displayName":"luxemburgske konvertible franc","displayName-count-one":"luxemburgsk konvertibel franc","displayName-count-other":"luxemburgske konvertible franc","symbol":"LUC"},"LUF":{"displayName":"luxemburgske franc","displayName-count-one":"luxemburgsk franc","displayName-count-other":"luxemburgske franc","symbol":"LUF"},"LUL":{"displayName":"luxemburgske finansielle franc","displayName-count-one":"luxemburgsk finansiell franc","displayName-count-other":"luxemburgske finansielle franc","symbol":"LUL"},"LVL":{"displayName":"latviske lats","displayName-count-one":"latvisk lats","displayName-count-other":"latviske lats","symbol":"LVL","symbol-alt-narrow":"Ls"},"LVR":{"displayName":"latviske rubler","displayName-count-one":"latvisk rubel","displayName-count-other":"latviske rubler","symbol":"LVR"},"LYD":{"displayName":"libyske dinarer","displayName-count-one":"libysk dinar","displayName-count-other":"libyske dinarer","symbol":"LYD"},"MAD":{"displayName":"marokkanske dirham","displayName-count-one":"marokkansk dirham","displayName-count-other":"marokkanske dirham","symbol":"MAD"},"MAF":{"displayName":"marokkanske franc","displayName-count-one":"marokkansk franc","displayName-count-other":"marokkanske franc","symbol":"MAF"},"MCF":{"displayName":"MCF","displayName-count-one":"MCF","displayName-count-other":"MCF","symbol":"MCF"},"MDC":{"displayName":"moldovske cupon","displayName-count-one":"moldovsk cupon","displayName-count-other":"moldovske cupon","symbol":"MDC"},"MDL":{"displayName":"moldovske leu","displayName-count-one":"moldovsk leu","displayName-count-other":"moldovske lei","symbol":"MDL"},"MGA":{"displayName":"madagassiske ariary","displayName-count-one":"madagassisk ariary","displayName-count-other":"madagassiske ariary","symbol":"MGA","symbol-alt-narrow":"Ar"},"MGF":{"displayName":"madagassiske franc","displayName-count-one":"madagassisk franc","displayName-count-other":"madagassiske franc","symbol":"MGF"},"MKD":{"displayName":"makedonske denarer","displayName-count-one":"makedonsk denar","displayName-count-other":"makedonske denarer","symbol":"MKD"},"MKN":{"displayName":"makedonske denarer (1992–1993)","displayName-count-one":"makedonsk denar (1992–1993)","displayName-count-other":"makedonske denarer (1992–1993)","symbol":"MKN"},"MLF":{"displayName":"maliske franc","displayName-count-one":"malisk franc","displayName-count-other":"maliske franc","symbol":"MLF"},"MMK":{"displayName":"myanmarske kyat","displayName-count-one":"myanmarsk kyat","displayName-count-other":"myanmarske kyat","symbol":"MMK","symbol-alt-narrow":"K"},"MNT":{"displayName":"mongolske tugrik","displayName-count-one":"mongolsk tugrik","displayName-count-other":"mongolske tugrik","symbol":"MNT","symbol-alt-narrow":"₮"},"MOP":{"displayName":"makaoiske pataca","displayName-count-one":"makaoisk pataca","displayName-count-other":"makaoiske pataca","symbol":"MOP"},"MRO":{"displayName":"mauritanske ouguiya","displayName-count-one":"mauritansk ouguiya","displayName-count-other":"mauritanske ouguiya","symbol":"MRO"},"MTL":{"displayName":"maltesiske lira","displayName-count-one":"maltesisk lira","displayName-count-other":"maltesiske lira","symbol":"MTL"},"MTP":{"displayName":"maltesiske pund","displayName-count-one":"maltesisk pund","displayName-count-other":"maltesiske pund","symbol":"MTP"},"MUR":{"displayName":"mauritiske rupier","displayName-count-one":"mauritisk rupi","displayName-count-other":"mauritiske rupier","symbol":"MUR","symbol-alt-narrow":"Rs"},"MVP":{"displayName":"maldiviske rupier","displayName-count-one":"maldivisk rupi","displayName-count-other":"maldiviske rupier","symbol":"MVP"},"MVR":{"displayName":"maldiviske rufiyaa","displayName-count-one":"maldivisk rufiyaa","displayName-count-other":"maldiviske rufiyaa","symbol":"MVR"},"MWK":{"displayName":"malawiske kwacha","displayName-count-one":"malawisk kwacha","displayName-count-other":"malawiske kwacha","symbol":"MWK"},"MXN":{"displayName":"meksikanske pesos","displayName-count-one":"meksikansk peso","displayName-count-other":"meksikanske pesos","symbol":"MXN","symbol-alt-narrow":"$"},"MXP":{"displayName":"meksikanske sølvpesos (1861–1992)","displayName-count-one":"meksikansk sølvpesos (1860–1992)","displayName-count-other":"meksikanske sølvpesos (1860–1992)","symbol":"MXP"},"MXV":{"displayName":"meksikanske unidad de inversion (UDI)","displayName-count-one":"meksikansk unidad de inversion (UDI)","displayName-count-other":"meksikanske unidad de inversion (UDI)","symbol":"MXV"},"MYR":{"displayName":"malaysiske ringgit","displayName-count-one":"malaysisk ringgit","displayName-count-other":"malaysiske ringgit","symbol":"MYR","symbol-alt-narrow":"RM"},"MZE":{"displayName":"mosambikiske escudo","displayName-count-one":"mosambikisk escudo","displayName-count-other":"mosambikiske escudo","symbol":"MZE"},"MZM":{"displayName":"gamle mosambikiske metical","displayName-count-one":"gammel mosambikisk metical","displayName-count-other":"gamle mosambikiske metical","symbol":"MZM"},"MZN":{"displayName":"mosambikiske metical","displayName-count-one":"mosambikisk metical","displayName-count-other":"mosambikiske metical","symbol":"MZN"},"NAD":{"displayName":"namibiske dollar","displayName-count-one":"namibisk dollar","displayName-count-other":"namibiske dollar","symbol":"NAD","symbol-alt-narrow":"$"},"NGN":{"displayName":"nigerianske naira","displayName-count-one":"nigeriansk naira","displayName-count-other":"nigerianske naira","symbol":"NGN","symbol-alt-narrow":"₦"},"NIC":{"displayName":"nicaraguanske cordoba (1988–1991)","displayName-count-one":"nicaraguansk cordoba (1988–1991)","displayName-count-other":"nicaraguanske cordoba (1988–1991)","symbol":"NIC"},"NIO":{"displayName":"nicaraguanske córdoba","displayName-count-one":"nicaraguansk córdoba","displayName-count-other":"nicaraguanske córdoba","symbol":"NIO","symbol-alt-narrow":"C$"},"NLG":{"displayName":"nederlandske gylden","displayName-count-one":"nederlandsk gylden","displayName-count-other":"nederlandske gylden","symbol":"NLG"},"NOK":{"displayName":"norske kroner","displayName-count-one":"norsk krone","displayName-count-other":"norske kroner","symbol":"kr","symbol-alt-narrow":"kr"},"NPR":{"displayName":"nepalske rupier","displayName-count-one":"nepalsk rupi","displayName-count-other":"nepalske rupier","symbol":"NPR","symbol-alt-narrow":"Rs"},"NZD":{"displayName":"newzealandske dollar","displayName-count-one":"newzealandsk dollar","displayName-count-other":"newzealandske dollar","symbol":"NZD","symbol-alt-narrow":"$"},"OMR":{"displayName":"omanske rialer","displayName-count-one":"omansk rial","displayName-count-other":"omanske rialer","symbol":"OMR"},"PAB":{"displayName":"panamanske balboa","displayName-count-one":"panamansk balboa","displayName-count-other":"panamanske balboa","symbol":"PAB"},"PEI":{"displayName":"peruanske inti","displayName-count-one":"peruansk inti","displayName-count-other":"peruanske inti","symbol":"PEI"},"PEN":{"displayName":"peruanske sol","displayName-count-one":"peruansk sol","displayName-count-other":"peruanske sol","symbol":"PEN"},"PES":{"displayName":"peruanske sol (1863–1965)","displayName-count-one":"peruansk sol (1863–1965)","displayName-count-other":"peruanske sol (1863–1965)","symbol":"PES"},"PGK":{"displayName":"papuanske kina","displayName-count-one":"papuansk kina","displayName-count-other":"papuanske kina","symbol":"PGK"},"PHP":{"displayName":"filippinske pesos","displayName-count-one":"filippinsk peso","displayName-count-other":"filippinske pesos","symbol":"PHP","symbol-alt-narrow":"₱"},"PKR":{"displayName":"pakistanske rupier","displayName-count-one":"pakistansk rupi","displayName-count-other":"pakistanske rupier","symbol":"PKR","symbol-alt-narrow":"Rs"},"PLN":{"displayName":"polske zloty","displayName-count-one":"polsk zloty","displayName-count-other":"polske zloty","symbol":"PLN","symbol-alt-narrow":"zł"},"PLZ":{"displayName":"polske zloty (1950–1995)","displayName-count-one":"polsk zloty (1950–1995)","displayName-count-other":"polske zloty (1950–1995)","symbol":"PLZ"},"PTE":{"displayName":"portugisiske escudo","displayName-count-one":"portugisisk escudo","displayName-count-other":"portugisiske escudo","symbol":"PTE"},"PYG":{"displayName":"paraguayanske guarani","displayName-count-one":"paraguayansk guarani","displayName-count-other":"paraguayanske guarani","symbol":"PYG","symbol-alt-narrow":"₲"},"QAR":{"displayName":"qatarske rialer","displayName-count-one":"qatarsk rial","displayName-count-other":"qatarske rialer","symbol":"QAR"},"RHD":{"displayName":"rhodesiske dollar","displayName-count-one":"rhodesisk dollar","displayName-count-other":"rhodesiske dollar","symbol":"RHD"},"ROL":{"displayName":"rumenske leu (1952–2006)","displayName-count-one":"rumensk leu (1952–2006)","displayName-count-other":"rumenske leu (1952–2006)","symbol":"ROL"},"RON":{"displayName":"rumenske leu","displayName-count-one":"rumensk leu","displayName-count-other":"rumenske lei","symbol":"RON","symbol-alt-narrow":"L"},"RSD":{"displayName":"serbiske dinarer","displayName-count-one":"serbisk dinar","displayName-count-other":"serbiske dinarer","symbol":"RSD"},"RUB":{"displayName":"russiske rubler","displayName-count-one":"russisk rubel","displayName-count-other":"russiske rubler","symbol":"RUB","symbol-alt-narrow":"₽"},"RUR":{"displayName":"russiske rubler (1991–1998)","displayName-count-one":"russisk rubel (1991–1998)","displayName-count-other":"russiske rubler (1991–1998)","symbol":"RUR","symbol-alt-narrow":"р."},"RWF":{"displayName":"rwandiske franc","displayName-count-one":"rwandisk franc","displayName-count-other":"rwandiske franc","symbol":"RWF","symbol-alt-narrow":"RF"},"SAR":{"displayName":"saudiarabiske riyaler","displayName-count-one":"saudiarabisk riyal","displayName-count-other":"saudiarabiske riyaler","symbol":"SAR"},"SBD":{"displayName":"salomonske dollar","displayName-count-one":"salomonsk dollar","displayName-count-other":"salomonske dollar","symbol":"SBD","symbol-alt-narrow":"$"},"SCR":{"displayName":"seychelliske rupier","displayName-count-one":"seychellisk rupi","displayName-count-other":"seychelliske rupier","symbol":"SCR"},"SDD":{"displayName":"sudanesiske dinarer (1992–2007)","displayName-count-one":"sudanesisk dinar (1992–2007)","displayName-count-other":"sudanesiske dinarer (1992–2007)","symbol":"SDD"},"SDG":{"displayName":"sudanske pund","displayName-count-one":"sudansk pund","displayName-count-other":"sudanske pund","symbol":"SDG"},"SDP":{"displayName":"sudanesiske pund","displayName-count-one":"sudansk pund (1957–1998)","displayName-count-other":"sudanske pund (1957–1998)","symbol":"SDP"},"SEK":{"displayName":"svenske kroner","displayName-count-one":"svensk krone","displayName-count-other":"svenske kroner","symbol":"SEK","symbol-alt-narrow":"kr"},"SGD":{"displayName":"singaporske dollar","displayName-count-one":"singaporsk dollar","displayName-count-other":"singaporske dollar","symbol":"SGD","symbol-alt-narrow":"$"},"SHP":{"displayName":"sankthelenske pund","displayName-count-one":"sankthelensk pund","displayName-count-other":"sankthelenske pund","symbol":"SHP","symbol-alt-narrow":"£"},"SIT":{"displayName":"slovenske tolar","displayName-count-one":"slovensk tolar","displayName-count-other":"slovenske tolar","symbol":"SIT"},"SKK":{"displayName":"slovakiske koruna","displayName-count-one":"slovakisk koruna","displayName-count-other":"slovakiske koruna","symbol":"SKK"},"SLL":{"displayName":"sierraleonske leone","displayName-count-one":"sierraleonsk leone","displayName-count-other":"sierraleonske leone","symbol":"SLL"},"SOS":{"displayName":"somaliske shilling","displayName-count-one":"somalisk shilling","displayName-count-other":"somaliske shilling","symbol":"SOS"},"SRD":{"displayName":"surinamske dollar","displayName-count-one":"surinamsk dollar","displayName-count-other":"surinamske dollar","symbol":"SRD","symbol-alt-narrow":"$"},"SRG":{"displayName":"surinamske gylden","displayName-count-one":"surinamsk gylden","displayName-count-other":"surinamske gylden","symbol":"SRG"},"SSP":{"displayName":"sørsudanske pund","displayName-count-one":"sørsudansk pund","displayName-count-other":"sørsudanske pund","symbol":"SSP","symbol-alt-narrow":"£"},"STD":{"displayName":"saotomesiske dobra","displayName-count-one":"saotomesisk dobra","displayName-count-other":"saotomesiske dobra","symbol":"STD","symbol-alt-narrow":"Db"},"STN":{"displayName":"STN","symbol":"STN"},"SUR":{"displayName":"sovjetiske rubler","displayName-count-one":"sovjetisk rubel","displayName-count-other":"sovjetiske rubler","symbol":"SUR"},"SVC":{"displayName":"salvadoranske colon","displayName-count-one":"salvadoransk colon","displayName-count-other":"salvadoranske colon","symbol":"SVC"},"SYP":{"displayName":"syriske pund","displayName-count-one":"syrisk pund","displayName-count-other":"syriske pund","symbol":"SYP","symbol-alt-narrow":"£"},"SZL":{"displayName":"swazilandske lilangeni","displayName-count-one":"swazilandsk lilangeni","displayName-count-other":"swazilandske lilangeni","symbol":"SZL"},"THB":{"displayName":"thailandske baht","displayName-count-one":"thailandsk baht","displayName-count-other":"thailandske baht","symbol":"THB","symbol-alt-narrow":"฿"},"TJR":{"displayName":"tadsjikiske rubler","displayName-count-one":"tadsjikisk rubel","displayName-count-other":"tadsjikiske rubler","symbol":"TJR"},"TJS":{"displayName":"tadsjikiske somoni","displayName-count-one":"tadsjikisk somoni","displayName-count-other":"tadsjikiske somoni","symbol":"TJS"},"TMM":{"displayName":"turkmenske manat (1993–2009)","displayName-count-one":"turkmensk manat (1993–2009)","displayName-count-other":"turkmenske manat (1993–2009)","symbol":"TMM"},"TMT":{"displayName":"turkmenske manat","displayName-count-one":"turkmensk manat","displayName-count-other":"turkmenske manat","symbol":"TMT"},"TND":{"displayName":"tunisiske dinarer","displayName-count-one":"tunisisk dinar","displayName-count-other":"tunisiske dinarer","symbol":"TND"},"TOP":{"displayName":"tonganske paʻanga","displayName-count-one":"tongansk paʻanga","displayName-count-other":"tonganske paʻanga","symbol":"TOP","symbol-alt-narrow":"T$"},"TPE":{"displayName":"timoresiske escudo","displayName-count-one":"timoresisk escudo","displayName-count-other":"timoresiske escudo","symbol":"TPE"},"TRL":{"displayName":"tyrkiske lire (1922–2005)","displayName-count-one":"tyrkisk lire (1922–2005)","displayName-count-other":"tyrkiske lire (1922–2005)","symbol":"TRL"},"TRY":{"displayName":"tyrkiske lire","displayName-count-one":"tyrkisk lire","displayName-count-other":"tyrkiske lire","symbol":"TRY","symbol-alt-narrow":"₺","symbol-alt-variant":"TL"},"TTD":{"displayName":"trinidadiske dollar","displayName-count-one":"trinidadisk dollar","displayName-count-other":"trinidadiske dollar","symbol":"TTD","symbol-alt-narrow":"$"},"TWD":{"displayName":"nye taiwanske dollar","displayName-count-one":"ny taiwansk dollar","displayName-count-other":"nye taiwanske dollar","symbol":"TWD","symbol-alt-narrow":"NT$"},"TZS":{"displayName":"tanzanianske shilling","displayName-count-one":"tanzaniansk shilling","displayName-count-other":"tanzanianske shilling","symbol":"TZS"},"UAH":{"displayName":"ukrainske hryvnia","displayName-count-one":"ukrainsk hryvnia","displayName-count-other":"ukrainske hryvnia","symbol":"UAH","symbol-alt-narrow":"₴"},"UAK":{"displayName":"ukrainske karbovanetz","displayName-count-one":"ukrainsk karbovanetz","displayName-count-other":"ukrainske karbovanetz","symbol":"UAK"},"UGS":{"displayName":"ugandiske shilling (1966–1987)","displayName-count-one":"ugandisk shilling (1966–1987)","displayName-count-other":"ugandiske shilling (1966–1987)","symbol":"UGS"},"UGX":{"displayName":"ugandiske shilling","displayName-count-one":"ugandisk shilling","displayName-count-other":"ugandiske shilling","symbol":"UGX"},"USD":{"displayName":"amerikanske dollar","displayName-count-one":"amerikansk dollar","displayName-count-other":"amerikanske dollar","symbol":"USD","symbol-alt-narrow":"$"},"USN":{"displayName":"amerikanske dollar (neste dag)","displayName-count-one":"amerikansk dollar (neste dag)","displayName-count-other":"amerikanske dollar (neste dag)","symbol":"USN"},"USS":{"displayName":"amerikanske dollar (samme dag)","displayName-count-one":"amerikansk dollar (samme dag)","displayName-count-other":"amerikanske dollar (samme dag)","symbol":"USS"},"UYI":{"displayName":"uruguyanske pesos (indekserte enheter)","displayName-count-one":"uruguyanske pesos (indekserte enheter)","displayName-count-other":"uruguyanske pesos (indekserte enheter)","symbol":"UYI"},"UYP":{"displayName":"uruguayanske pesos (1975–1993)","displayName-count-one":"uruguayansk peso (1975–1993)","displayName-count-other":"uruguayanske pesos (1975–1993)","symbol":"UYP"},"UYU":{"displayName":"uruguayanske pesos","displayName-count-one":"uruguyansk peso","displayName-count-other":"uruguayanske pesos","symbol":"UYU","symbol-alt-narrow":"$"},"UZS":{"displayName":"usbekiske som","displayName-count-one":"usbekisk som","displayName-count-other":"usbekiske som","symbol":"UZS"},"VEB":{"displayName":"venezuelanske bolivar (1871–2008)","displayName-count-one":"venezuelansk bolivar (1871–2008)","displayName-count-other":"venezuelanske bolivar (1871–2008)","symbol":"VEB"},"VEF":{"displayName":"venezuelanske bolivar","displayName-count-one":"venezuelansk bolivar","displayName-count-other":"venezuelanske bolivar","symbol":"VEF","symbol-alt-narrow":"Bs"},"VND":{"displayName":"vietnamesiske dong","displayName-count-one":"vietnamesisk dong","displayName-count-other":"vietnamesiske dong","symbol":"VND","symbol-alt-narrow":"₫"},"VNN":{"displayName":"vietnamesiske dong (1978–1985)","displayName-count-one":"vietnamesisk dong (1978–1985)","displayName-count-other":"vietnamesiske dong (1978–1985)","symbol":"VNN"},"VUV":{"displayName":"vanuatiske vatu","displayName-count-one":"vanuatisk vatu","displayName-count-other":"vanuatiske vatu","symbol":"VUV"},"WST":{"displayName":"samoanske tala","displayName-count-one":"samoansk tala","displayName-count-other":"samoanske tala","symbol":"WST"},"XAF":{"displayName":"sentralafrikanske CFA-franc","displayName-count-one":"sentralafrikansk CFA-franc","displayName-count-other":"sentralafrikanske CFA-franc","symbol":"XAF"},"XAG":{"displayName":"sølv","displayName-count-one":"unse sølv","displayName-count-other":"unser sølv","symbol":"XAG"},"XAU":{"displayName":"gull","displayName-count-one":"unse gull","displayName-count-other":"unser gull","symbol":"XAU"},"XBA":{"displayName":"europeisk sammensatt enhet","displayName-count-one":"europeisk sammensatt enhet","displayName-count-other":"europeiske sammensatte enheter","symbol":"XBA"},"XBB":{"displayName":"europeisk monetær enhet","displayName-count-one":"europeisk monetær enhet","displayName-count-other":"europeiske monetære enheter","symbol":"XBB"},"XBC":{"displayName":"europeisk kontoenhet (XBC)","displayName-count-one":"europeisk kontoenhet (XBC)","displayName-count-other":"europeiske kontoenheter","symbol":"XBC"},"XBD":{"displayName":"europeisk kontoenhet (XBD)","displayName-count-one":"europeisk kontoenhet (XBD)","displayName-count-other":"europeiske kontoenheter (XBD)","symbol":"XBD"},"XCD":{"displayName":"østkaribiske dollar","displayName-count-one":"østkaribisk dollar","displayName-count-other":"østkaribiske dollar","symbol":"XCD","symbol-alt-narrow":"$"},"XDR":{"displayName":"spesielle trekkrettigheter","displayName-count-one":"spesiell trekkrettighet","displayName-count-other":"spesielle trekkrettigheter","symbol":"XDR"},"XEU":{"displayName":"europeisk valutaenhet","displayName-count-one":"europeisk valutaenhet","displayName-count-other":"europeiske valutaenheter","symbol":"XEU"},"XFO":{"displayName":"franske gullfranc","displayName-count-one":"fransk gullfranc","displayName-count-other":"franske gullfranc","symbol":"XFO"},"XFU":{"displayName":"franske UIC-franc","displayName-count-one":"fransk UIC-franc","displayName-count-other":"franske UIC-franc","symbol":"XFU"},"XOF":{"displayName":"vestafrikanske CFA-franc","displayName-count-one":"vestafrikansk CFA-franc","displayName-count-other":"vestafrikanske CFA-franc","symbol":"CFA"},"XPD":{"displayName":"palladium","displayName-count-one":"unse palladium","displayName-count-other":"unser palladium","symbol":"XPD"},"XPF":{"displayName":"CFP-franc","displayName-count-one":"CFP-franc","displayName-count-other":"CFP-franc","symbol":"XPF"},"XPT":{"displayName":"platina","displayName-count-one":"unse platina","displayName-count-other":"unser platina","symbol":"XPT"},"XRE":{"displayName":"RINET-fond","symbol":"XRE"},"XSU":{"displayName":"sucre","displayName-count-one":"sucre","displayName-count-other":"sucre","symbol":"XSU"},"XTS":{"displayName":"testvalutakode","displayName-count-one":"testvaluta","displayName-count-other":"testvaluta","symbol":"XTS"},"XUA":{"displayName":"ADB-kontoenhet","displayName-count-one":"ADB-kontoenhet","displayName-count-other":"ADB-kontoenheter","symbol":"XUA"},"XXX":{"displayName":"ukjent valuta","displayName-count-one":"(ukjent valuta)","displayName-count-other":"(ukjent valuta)","symbol":"XXX"},"YDD":{"displayName":"jemenittiske dinarer","displayName-count-one":"jemenittisk dinar","displayName-count-other":"jemenittiske dinarer","symbol":"YDD"},"YER":{"displayName":"jemenittiske rialer","displayName-count-one":"jemenittisk rial","displayName-count-other":"jemenittiske rialer","symbol":"YER"},"YUD":{"displayName":"jugoslaviske dinarer (hard)","displayName-count-one":"jugoslavisk dinar (hard)","displayName-count-other":"jugoslaviske dinarer (hard)","symbol":"YUD"},"YUM":{"displayName":"jugoslaviske noviy-dinarer","displayName-count-one":"jugoslavisk noviy-dinar","displayName-count-other":"jugoslaviske noviy-dinarer","symbol":"YUM"},"YUN":{"displayName":"jugoslaviske konvertible dinarer","displayName-count-one":"jugoslavisk konvertibel dinar","displayName-count-other":"jugoslaviske konvertible dinarer","symbol":"YUN"},"YUR":{"displayName":"jugoslaviske reformerte dinarer (1992–1993)","displayName-count-one":"jugoslavisk reformert dinar (1992–1993)","displayName-count-other":"jugoslaviske reformerte dinarer (1992–1993)","symbol":"YUR"},"ZAL":{"displayName":"sørafrikanske rand (finansielle)","displayName-count-one":"sørafrikansk rand (finansiell)","displayName-count-other":"sørafrikanske rand (finansielle)","symbol":"ZAL"},"ZAR":{"displayName":"sørafrikanske rand","displayName-count-one":"sørafrikansk rand","displayName-count-other":"sørafrikanske rand","symbol":"ZAR","symbol-alt-narrow":"R"},"ZMK":{"displayName":"zambiske kwacha (1968–2012)","displayName-count-one":"zambisk kwacha (1968–2012)","displayName-count-other":"zambiske kwacha (1968–2012)","symbol":"ZMK"},"ZMW":{"displayName":"zambiske kwacha","displayName-count-one":"zambisk kwacha","displayName-count-other":"zambiske kwacha","symbol":"ZMW","symbol-alt-narrow":"ZK"},"ZRN":{"displayName":"zairiske nye zaire","displayName-count-one":"zairisk ny zaire","displayName-count-other":"zairiske nye zaire","symbol":"ZRN"},"ZRZ":{"displayName":"zairiske zaire","displayName-count-one":"zairisk zaire","displayName-count-other":"zairiske zaire","symbol":"ZRZ"},"ZWD":{"displayName":"zimbabwiske dollar (1980–2008)","displayName-count-one":"zimbabwisk dollar (1980–2008)","displayName-count-other":"zimbabwiske dollar (1980–2008)","symbol":"ZWD"},"ZWL":{"displayName":"zimbabwisk dollar (2009)","displayName-count-one":"zimbabwisk dollar (2009)","displayName-count-other":"zimbabwiske dollar (2009)","symbol":"ZWL"},"ZWR":{"displayName":"zimbabwisk dollar (2008)","displayName-count-one":"zimbabwisk dollar (2008)","displayName-count-other":"zimbabwiske dollar (2008)","symbol":"ZWR"}},"defaultNumberingSystem":"latn","otherNumberingSystems":{"native":"latn"},"minimumGroupingDigits":"1","symbols-numberSystem-latn":{"decimal":",","group":" ","list":";","percentSign":"%","plusSign":"+","minusSign":"−","exponential":"E","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"NaN","timeSeparator":":","timeSeparator-alt-variant":"."},"decimalFormats-numberSystem-latn":{"standard":"#,##0.###","long":{"decimalFormat":{"1000-count-one":"0 tusen","1000-count-other":"0 tusen","10000-count-one":"00 tusen","10000-count-other":"00 tusen","100000-count-one":"000 tusen","100000-count-other":"000 tusen","1000000-count-one":"0 million","1000000-count-other":"0 millioner","10000000-count-one":"00 million","10000000-count-other":"00 millioner","100000000-count-one":"000 million","100000000-count-other":"000 millioner","1000000000-count-one":"0 milliard","1000000000-count-other":"0 milliarder","10000000000-count-one":"00 milliard","10000000000-count-other":"00 milliarder","100000000000-count-one":"000 milliard","100000000000-count-other":"000 milliarder","1000000000000-count-one":"0 billion","1000000000000-count-other":"0 billioner","10000000000000-count-one":"00 billioner","10000000000000-count-other":"00 billioner","100000000000000-count-one":"000 billioner","100000000000000-count-other":"000 billioner"}},"short":{"decimalFormat":{"1000-count-one":"0k","1000-count-other":"0k","10000-count-one":"00k","10000-count-other":"00k","100000-count-one":"000k","100000-count-other":"000k","1000000-count-one":"0 mill","1000000-count-other":"0 mill","10000000-count-one":"00 mill","10000000-count-other":"00 mill","100000000-count-one":"000 mill","100000000-count-other":"000 mill","1000000000-count-one":"0 mrd","1000000000-count-other":"0 mrd","10000000000-count-one":"00 mrd","10000000000-count-other":"00 mrd","100000000000-count-one":"000 mrd","100000000000-count-other":"000 mrd","1000000000000-count-one":"0 bill","1000000000000-count-other":"0 bill","10000000000000-count-one":"00 bill","10000000000000-count-other":"00 bill","100000000000000-count-one":"000 bill","100000000000000-count-other":"000 bill"}}},"scientificFormats-numberSystem-latn":{"standard":"#E0"},"percentFormats-numberSystem-latn":{"standard":"#,##0 %"},"currencyFormats-numberSystem-latn":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"¤ #,##0.00","accounting":"¤ #,##0.00","short":{"standard":{"1000-count-one":"¤ 0k","1000-count-other":"¤ 0k","10000-count-one":"¤ 00k","10000-count-other":"¤ 00k","100000-count-one":"¤ 000k","100000-count-other":"¤ 000k","1000000-count-one":"¤ 0 mill'.'","1000000-count-other":"¤ 0 mill'.'","10000000-count-one":"¤ 00 mill'.'","10000000-count-other":"¤ 00 mill'.'","100000000-count-one":"¤ 000 mill'.'","100000000-count-other":"¤ 000 mill'.'","1000000000-count-one":"¤ 0 mrd'.'","1000000000-count-other":"¤ 0 mrd'.'","10000000000-count-one":"¤ 00 mrd'.'","10000000000-count-other":"¤ 00 mrd'.'","100000000000-count-one":"¤ 000 mrd'.'","100000000000-count-other":"¤ 000 mrd'.'","1000000000000-count-one":"¤ 0 bill'.'","1000000000000-count-other":"¤ 0 bill'.'","10000000000000-count-one":"¤ 00 bill'.'","10000000000000-count-other":"¤ 00 bill'.'","100000000000000-count-one":"¤ 000 bill'.'","100000000000000-count-other":"¤ 000 bill'.'"}},"unitPattern-count-one":"{0} {1}","unitPattern-count-other":"{0} {1}"},"miscPatterns-numberSystem-latn":{"atLeast":"⩾{0}","range":"{0}–{1}"},"minimalPairs":{"pluralMinimalPairs-count-one":"{0} dag","pluralMinimalPairs-count-other":"{0} dager","other":"Ta {0}. svingen til høyre."}}},"nl":{"identity":{"version":{"_number":"$Revision: 13701 $","_cldrVersion":"32"},"language":"nl"},"dates":{"calendars":{"gregorian":{"months":{"format":{"abbreviated":{"1":"jan.","2":"feb.","3":"mrt.","4":"apr.","5":"mei","6":"jun.","7":"jul.","8":"aug.","9":"sep.","10":"okt.","11":"nov.","12":"dec."},"narrow":{"1":"J","2":"F","3":"M","4":"A","5":"M","6":"J","7":"J","8":"A","9":"S","10":"O","11":"N","12":"D"},"wide":{"1":"januari","2":"februari","3":"maart","4":"april","5":"mei","6":"juni","7":"juli","8":"augustus","9":"september","10":"oktober","11":"november","12":"december"}},"stand-alone":{"abbreviated":{"1":"jan.","2":"feb.","3":"mrt.","4":"apr.","5":"mei","6":"jun.","7":"jul.","8":"aug.","9":"sep.","10":"okt.","11":"nov.","12":"dec."},"narrow":{"1":"J","2":"F","3":"M","4":"A","5":"M","6":"J","7":"J","8":"A","9":"S","10":"O","11":"N","12":"D"},"wide":{"1":"januari","2":"februari","3":"maart","4":"april","5":"mei","6":"juni","7":"juli","8":"augustus","9":"september","10":"oktober","11":"november","12":"december"}}},"days":{"format":{"abbreviated":{"sun":"zo","mon":"ma","tue":"di","wed":"wo","thu":"do","fri":"vr","sat":"za"},"narrow":{"sun":"Z","mon":"M","tue":"D","wed":"W","thu":"D","fri":"V","sat":"Z"},"short":{"sun":"zo","mon":"ma","tue":"di","wed":"wo","thu":"do","fri":"vr","sat":"za"},"wide":{"sun":"zondag","mon":"maandag","tue":"dinsdag","wed":"woensdag","thu":"donderdag","fri":"vrijdag","sat":"zaterdag"}},"stand-alone":{"abbreviated":{"sun":"zo","mon":"ma","tue":"di","wed":"wo","thu":"do","fri":"vr","sat":"za"},"narrow":{"sun":"Z","mon":"M","tue":"D","wed":"W","thu":"D","fri":"V","sat":"Z"},"short":{"sun":"zo","mon":"ma","tue":"di","wed":"wo","thu":"do","fri":"vr","sat":"za"},"wide":{"sun":"zondag","mon":"maandag","tue":"dinsdag","wed":"woensdag","thu":"donderdag","fri":"vrijdag","sat":"zaterdag"}}},"quarters":{"format":{"abbreviated":{"1":"K1","2":"K2","3":"K3","4":"K4"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"1e kwartaal","2":"2e kwartaal","3":"3e kwartaal","4":"4e kwartaal"}},"stand-alone":{"abbreviated":{"1":"K1","2":"K2","3":"K3","4":"K4"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"1e kwartaal","2":"2e kwartaal","3":"3e kwartaal","4":"4e kwartaal"}}},"dayPeriods":{"format":{"abbreviated":{"midnight":"middernacht","am":"a.m.","pm":"p.m.","morning1":"‘s ochtends","afternoon1":"‘s middags","evening1":"‘s avonds","night1":"‘s nachts"},"narrow":{"midnight":"middernacht","am":"a.m.","pm":"p.m.","morning1":"‘s ochtends","afternoon1":"‘s middags","evening1":"‘s avonds","night1":"‘s nachts"},"wide":{"midnight":"middernacht","am":"a.m.","pm":"p.m.","morning1":"‘s ochtends","afternoon1":"‘s middags","evening1":"‘s avonds","night1":"‘s nachts"}},"stand-alone":{"abbreviated":{"midnight":"middernacht","am":"a.m.","pm":"p.m.","morning1":"ochtend","afternoon1":"middag","evening1":"avond","night1":"nacht"},"narrow":{"midnight":"middernacht","am":"a.m.","pm":"p.m.","morning1":"ochtend","afternoon1":"middag","evening1":"avond","night1":"nacht"},"wide":{"midnight":"middernacht","am":"a.m.","pm":"p.m.","morning1":"ochtend","afternoon1":"middag","evening1":"avond","night1":"nacht"}}},"eras":{"eraNames":{"0":"voor Christus","1":"na Christus","0-alt-variant":"vóór gewone jaartelling","1-alt-variant":"gewone jaartelling"},"eraAbbr":{"0":"v.Chr.","1":"n.Chr.","0-alt-variant":"v.g.j.","1-alt-variant":"g.j."},"eraNarrow":{"0":"v.C.","1":"n.C.","0-alt-variant":"vgj","1-alt-variant":"gj"}},"dateFormats":{"full":"EEEE d MMMM y","long":"d MMMM y","medium":"d MMM y","short":"dd-MM-yy"},"timeFormats":{"full":"HH:mm:ss zzzz","long":"HH:mm:ss z","medium":"HH:mm:ss","short":"HH:mm"},"dateTimeFormats":{"full":"{1} 'om' {0}","long":"{1} 'om' {0}","medium":"{1} {0}","short":"{1} {0}","availableFormats":{"Bh":"h B","Bhm":"h:mm B","Bhms":"h:mm:ss B","d":"d","E":"ccc","EBhm":"E h:mm B","EBhms":"E h:mm:ss B","Ed":"E d","Ehm":"E h:mm a","EHm":"E HH:mm","Ehms":"E h:mm:ss a","EHms":"E HH:mm:ss","Gy":"y G","GyMMM":"MMM y G","GyMMMd":"d MMM y G","GyMMMEd":"E d MMM y G","h":"h a","H":"HH","hm":"h:mm a","Hm":"HH:mm","hms":"h:mm:ss a","Hms":"HH:mm:ss","hmsv":"h:mm:ss a v","Hmsv":"HH:mm:ss v","hmv":"h:mm a v","Hmv":"HH:mm v","M":"L","Md":"d-M","MEd":"E d-M","MMM":"LLL","MMMd":"d MMM","MMMEd":"E d MMM","MMMMd":"d MMMM","MMMMW-count-one":"'week' W 'van' MMM","MMMMW-count-other":"'week' W 'van' MMM","ms":"mm:ss","y":"y","yM":"M-y","yMd":"d-M-y","yMEd":"E d-M-y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"E d MMM y","yMMMM":"MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","yw-count-one":"'week' w 'in' Y","yw-count-other":"'week' w 'in' Y"},"appendItems":{"Day":"{0} ({2}: {1})","Day-Of-Week":"{0} {1}","Era":"{1} {0}","Hour":"{0} ({2}: {1})","Minute":"{0} ({2}: {1})","Month":"{0} ({2}: {1})","Quarter":"{0} ({2}: {1})","Second":"{0} ({2}: {1})","Timezone":"{0} {1}","Week":"{0} ({2}: {1})","Year":"{1} {0}"},"intervalFormats":{"intervalFormatFallback":"{0} - {1}","d":{"d":"d–d"},"h":{"a":"h a – h a","h":"h–h a"},"H":{"H":"HH–HH"},"hm":{"a":"h:mm a – h:mm a","h":"h:mm–h:mm a","m":"h:mm–h:mm a"},"Hm":{"H":"HH:mm–HH:mm","m":"HH:mm–HH:mm"},"hmv":{"a":"h:mm a – h:mm a v","h":"h:mm–h:mm a v","m":"h:mm–h:mm a v"},"Hmv":{"H":"HH:mm–HH:mm v","m":"HH:mm–HH:mm v"},"hv":{"a":"h a – h a v","h":"h–h a v"},"Hv":{"H":"HH–HH v"},"M":{"M":"M–M"},"Md":{"d":"dd-MM – dd-MM","M":"dd-MM – dd-MM"},"MEd":{"d":"E dd-MM – E dd-MM","M":"E dd-MM – E dd-MM"},"MMM":{"M":"MMM–MMM"},"MMMd":{"d":"d–d MMM","M":"d MMM – d MMM"},"MMMEd":{"d":"E d – E d MMM","M":"E d MMM – E d MMM"},"MMMM":{"M":"MMMM–MMMM"},"y":{"y":"y–y"},"yM":{"M":"MM-y – MM-y","y":"MM-y – MM-y"},"yMd":{"d":"dd-MM-y – dd-MM-y","M":"dd-MM-y – dd-MM-y","y":"dd-MM-y – dd-MM-y"},"yMEd":{"d":"E dd-MM-y – E dd-MM-y","M":"E dd-MM-y – E dd-MM-y","y":"E dd-MM-y – E dd-MM-y"},"yMMM":{"M":"MMM–MMM y","y":"MMM y – MMM y"},"yMMMd":{"d":"d–d MMM y","M":"d MMM – d MMM y","y":"d MMM y – d MMM y"},"yMMMEd":{"d":"E d – E d MMM y","M":"E d MMM – E d MMM y","y":"E d MMM y – E d MMM y"},"yMMMM":{"M":"MMMM–MMMM y","y":"MMMM y – MMMM y"}}}}},"fields":{"era":{"displayName":"tijdperk"},"era-short":{"displayName":"tijdperk"},"era-narrow":{"displayName":"tijdperk"},"year":{"displayName":"jaar","relative-type--1":"vorig jaar","relative-type-0":"dit jaar","relative-type-1":"volgend jaar","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} jaar","relativeTimePattern-count-other":"over {0} jaar"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} jaar geleden","relativeTimePattern-count-other":"{0} jaar geleden"}},"year-short":{"displayName":"jr","relative-type--1":"vorig jaar","relative-type-0":"dit jaar","relative-type-1":"volgend jaar","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} jaar","relativeTimePattern-count-other":"over {0} jaar"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} jaar geleden","relativeTimePattern-count-other":"{0} jaar geleden"}},"year-narrow":{"displayName":"jr","relative-type--1":"vorig jaar","relative-type-0":"dit jaar","relative-type-1":"volgend jaar","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} jaar","relativeTimePattern-count-other":"over {0} jaar"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} jaar geleden","relativeTimePattern-count-other":"{0} jaar geleden"}},"quarter":{"displayName":"kwartaal","relative-type--1":"vorig kwartaal","relative-type-0":"dit kwartaal","relative-type-1":"volgend kwartaal","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} kwartaal","relativeTimePattern-count-other":"over {0} kwartalen"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} kwartaal geleden","relativeTimePattern-count-other":"{0} kwartalen geleden"}},"quarter-short":{"displayName":"kwartaal","relative-type--1":"vorig kwartaal","relative-type-0":"dit kwartaal","relative-type-1":"volgend kwartaal","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} kwartaal","relativeTimePattern-count-other":"over {0} kwartalen"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} kwartaal geleden","relativeTimePattern-count-other":"{0} kwartalen geleden"}},"quarter-narrow":{"displayName":"kwartaal","relative-type--1":"vorig kwartaal","relative-type-0":"dit kwartaal","relative-type-1":"volgend kwartaal","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} kw.","relativeTimePattern-count-other":"over {0} kwartalen"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} kwartaal geleden","relativeTimePattern-count-other":"{0} kwartalen geleden"}},"month":{"displayName":"maand","relative-type--1":"vorige maand","relative-type-0":"deze maand","relative-type-1":"volgende maand","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} maand","relativeTimePattern-count-other":"over {0} maanden"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} maand geleden","relativeTimePattern-count-other":"{0} maanden geleden"}},"month-short":{"displayName":"mnd","relative-type--1":"vorige maand","relative-type-0":"deze maand","relative-type-1":"volgende maand","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} maand","relativeTimePattern-count-other":"over {0} maanden"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} maand geleden","relativeTimePattern-count-other":"{0} maanden geleden"}},"month-narrow":{"displayName":"mnd","relative-type--1":"vorige maand","relative-type-0":"deze maand","relative-type-1":"volgende maand","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} maand","relativeTimePattern-count-other":"over {0} maanden"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} maand geleden","relativeTimePattern-count-other":"{0} maanden geleden"}},"week":{"displayName":"week","relative-type--1":"vorige week","relative-type-0":"deze week","relative-type-1":"volgende week","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} week","relativeTimePattern-count-other":"over {0} weken"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} week geleden","relativeTimePattern-count-other":"{0} weken geleden"},"relativePeriod":"de week van {0}"},"week-short":{"displayName":"wk","relative-type--1":"vorige week","relative-type-0":"deze week","relative-type-1":"volgende week","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} week","relativeTimePattern-count-other":"over {0} weken"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} week geleden","relativeTimePattern-count-other":"{0} weken geleden"},"relativePeriod":"de week van {0}"},"week-narrow":{"displayName":"wk","relative-type--1":"vorige week","relative-type-0":"deze week","relative-type-1":"volgende week","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} week","relativeTimePattern-count-other":"over {0} weken"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} week geleden","relativeTimePattern-count-other":"{0} weken geleden"},"relativePeriod":"de week van {0}"},"weekOfMonth":{"displayName":"week van de maand"},"weekOfMonth-short":{"displayName":"wk van de mnd"},"weekOfMonth-narrow":{"displayName":"wk v.d. mnd"},"day":{"displayName":"dag","relative-type--2":"eergisteren","relative-type--1":"gisteren","relative-type-0":"vandaag","relative-type-1":"morgen","relative-type-2":"overmorgen","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} dag","relativeTimePattern-count-other":"over {0} dagen"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} dag geleden","relativeTimePattern-count-other":"{0} dagen geleden"}},"day-short":{"displayName":"dag","relative-type--2":"eergisteren","relative-type--1":"gisteren","relative-type-0":"vandaag","relative-type-1":"morgen","relative-type-2":"overmorgen","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} dag","relativeTimePattern-count-other":"over {0} dgn"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} dag geleden","relativeTimePattern-count-other":"{0} dgn geleden"}},"day-narrow":{"displayName":"dag","relative-type--2":"eergisteren","relative-type--1":"gisteren","relative-type-0":"vandaag","relative-type-1":"morgen","relative-type-2":"overmorgen","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} dag","relativeTimePattern-count-other":"over {0} dgn"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} dag geleden","relativeTimePattern-count-other":"{0} dgn geleden"}},"dayOfYear":{"displayName":"dag van het jaar"},"dayOfYear-short":{"displayName":"dag van het jr"},"dayOfYear-narrow":{"displayName":"dag v.h. jr"},"weekday":{"displayName":"dag van de week"},"weekday-short":{"displayName":"dag van de wk"},"weekday-narrow":{"displayName":"dag v.d. wk"},"weekdayOfMonth":{"displayName":"weekdag van de maand"},"weekdayOfMonth-short":{"displayName":"wkdag van de mnd"},"weekdayOfMonth-narrow":{"displayName":"wkdag v.d. mnd"},"sun":{"relative-type--1":"afgelopen zondag","relative-type-0":"deze zondag","relative-type-1":"volgende week zondag","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} zondag","relativeTimePattern-count-other":"over {0} zondagen"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} zondag geleden","relativeTimePattern-count-other":"{0} zondagen geleden"}},"sun-short":{"relative-type--1":"afgelopen zon.","relative-type-0":"deze zon.","relative-type-1":"volgende week zon.","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} zon.","relativeTimePattern-count-other":"over {0} zon."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} zon. geleden","relativeTimePattern-count-other":"{0} zon. geleden"}},"sun-narrow":{"relative-type--1":"afgelopen zo","relative-type-0":"deze zo","relative-type-1":"volgende week zo","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} zo","relativeTimePattern-count-other":"over {0} zo"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} zo geleden","relativeTimePattern-count-other":"{0} zo geleden"}},"mon":{"relative-type--1":"afgelopen maandag","relative-type-0":"deze maandag","relative-type-1":"volgende week maandag","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} maandag","relativeTimePattern-count-other":"over {0} maandagen"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} maandag geleden","relativeTimePattern-count-other":"{0} maandagen geleden"}},"mon-short":{"relative-type--1":"afgelopen maan.","relative-type-0":"deze maan.","relative-type-1":"volgende week maan.","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} maan.","relativeTimePattern-count-other":"over {0} maan."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} maan. geleden","relativeTimePattern-count-other":"{0} maan. geleden"}},"mon-narrow":{"relative-type--1":"afgelopen ma","relative-type-0":"deze ma","relative-type-1":"volgende week ma","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} ma","relativeTimePattern-count-other":"over {0} ma"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ma geleden","relativeTimePattern-count-other":"{0} ma geleden"}},"tue":{"relative-type--1":"afgelopen dinsdag","relative-type-0":"deze dinsdag","relative-type-1":"volgende week dinsdag","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} dinsdag","relativeTimePattern-count-other":"over {0} dinsdagen"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} dinsdag geleden","relativeTimePattern-count-other":"{0} dinsdagen geleden"}},"tue-short":{"relative-type--1":"afgelopen dins.","relative-type-0":"deze dins.","relative-type-1":"volgende week dins.","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} dins.","relativeTimePattern-count-other":"over {0} dins."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} dins. geleden","relativeTimePattern-count-other":"{0} dins. geleden"}},"tue-narrow":{"relative-type--1":"afgelopen di","relative-type-0":"deze di","relative-type-1":"volgende week di","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} di","relativeTimePattern-count-other":"over {0} di"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} di geleden","relativeTimePattern-count-other":"{0} di geleden"}},"wed":{"relative-type--1":"afgelopen woensdag","relative-type-0":"deze woensdag","relative-type-1":"volgende week woensdag","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} woensdag","relativeTimePattern-count-other":"over {0} woensdagen"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} woensdag geleden","relativeTimePattern-count-other":"{0} woensdagen geleden"}},"wed-short":{"relative-type--1":"afgelopen woens.","relative-type-0":"deze woens.","relative-type-1":"volgende week woens.","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} woens.","relativeTimePattern-count-other":"over {0} woens."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} woens. geleden","relativeTimePattern-count-other":"{0} woens. geleden"}},"wed-narrow":{"relative-type--1":"afgelopen wo","relative-type-0":"deze wo","relative-type-1":"volgende week wo","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} wo","relativeTimePattern-count-other":"over {0} wo"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} wo geleden","relativeTimePattern-count-other":"{0} wo geleden"}},"thu":{"relative-type--1":"afgelopen donderdag","relative-type-0":"deze donderdag","relative-type-1":"volgende week donderdag","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} donderdag","relativeTimePattern-count-other":"over {0} donderdagen"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} donderdag geleden","relativeTimePattern-count-other":"{0} donderdagen geleden"}},"thu-short":{"relative-type--1":"afgelopen donder.","relative-type-0":"deze donder.","relative-type-1":"volgende week donder.","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} donder.","relativeTimePattern-count-other":"over {0} donder."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} donder. geleden","relativeTimePattern-count-other":"{0} donder. geleden"}},"thu-narrow":{"relative-type--1":"afgelopen do","relative-type-0":"deze do","relative-type-1":"volgende week do","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} do","relativeTimePattern-count-other":"over {0} do"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} do geleden","relativeTimePattern-count-other":"{0} do geleden"}},"fri":{"relative-type--1":"afgelopen vrijdag","relative-type-0":"deze vrijdag","relative-type-1":"volgende week vrijdag","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} vrijdag","relativeTimePattern-count-other":"over {0} vrijdagen"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} vrijdag geleden","relativeTimePattern-count-other":"{0} vrijdagen geleden"}},"fri-short":{"relative-type--1":"afgelopen vrij.","relative-type-0":"deze vrij.","relative-type-1":"volgende week vrij.","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} vrij.","relativeTimePattern-count-other":"over {0} vrij."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} vrij. geleden","relativeTimePattern-count-other":"{0} vrij. geleden"}},"fri-narrow":{"relative-type--1":"afgelopen vr","relative-type-0":"deze vr","relative-type-1":"volgende week vr","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} vr","relativeTimePattern-count-other":"over {0} vr"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} vr geleden","relativeTimePattern-count-other":"{0} vr geleden"}},"sat":{"relative-type--1":"afgelopen zaterdag","relative-type-0":"deze zaterdag","relative-type-1":"volgende week zaterdag","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} zaterdag","relativeTimePattern-count-other":"over {0} zaterdagen"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} zaterdag geleden","relativeTimePattern-count-other":"{0} zaterdagen geleden"}},"sat-short":{"relative-type--1":"afgelopen zater.","relative-type-0":"deze zater.","relative-type-1":"volgende week zater.","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} zater.","relativeTimePattern-count-other":"over {0} zater."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} zater. geleden","relativeTimePattern-count-other":"{0} zater. geleden"}},"sat-narrow":{"relative-type--1":"afgelopen za","relative-type-0":"deze za","relative-type-1":"volgende week za","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} za","relativeTimePattern-count-other":"over {0} za"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} za geleden","relativeTimePattern-count-other":"{0} za geleden"}},"dayperiod-short":{"displayName":"a.m./p.m."},"dayperiod":{"displayName":"a.m./p.m."},"dayperiod-narrow":{"displayName":"a.m./p.m."},"hour":{"displayName":"uur","relative-type-0":"binnen een uur","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} uur","relativeTimePattern-count-other":"over {0} uur"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} uur geleden","relativeTimePattern-count-other":"{0} uur geleden"}},"hour-short":{"displayName":"uur","relative-type-0":"binnen een uur","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} uur","relativeTimePattern-count-other":"over {0} uur"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} uur geleden","relativeTimePattern-count-other":"{0} uur geleden"}},"hour-narrow":{"displayName":"uur","relative-type-0":"binnen een uur","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} uur","relativeTimePattern-count-other":"over {0} uur"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} uur geleden","relativeTimePattern-count-other":"{0} uur geleden"}},"minute":{"displayName":"minuut","relative-type-0":"binnen een minuut","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} minuut","relativeTimePattern-count-other":"over {0} minuten"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} minuut geleden","relativeTimePattern-count-other":"{0} minuten geleden"}},"minute-short":{"displayName":"min","relative-type-0":"binnen een minuut","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} min.","relativeTimePattern-count-other":"over {0} min."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} min. geleden","relativeTimePattern-count-other":"{0} min. geleden"}},"minute-narrow":{"displayName":"min","relative-type-0":"binnen een minuut","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} min.","relativeTimePattern-count-other":"over {0} min."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} min. geleden","relativeTimePattern-count-other":"{0} min. geleden"}},"second":{"displayName":"seconde","relative-type-0":"nu","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} seconde","relativeTimePattern-count-other":"over {0} seconden"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} seconde geleden","relativeTimePattern-count-other":"{0} seconden geleden"}},"second-short":{"displayName":"sec","relative-type-0":"nu","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} sec.","relativeTimePattern-count-other":"over {0} sec."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} sec. geleden","relativeTimePattern-count-other":"{0} sec. geleden"}},"second-narrow":{"displayName":"s","relative-type-0":"nu","relativeTime-type-future":{"relativeTimePattern-count-one":"over {0} sec.","relativeTimePattern-count-other":"over {0} sec."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} sec. geleden","relativeTimePattern-count-other":"{0} sec. geleden"}},"zone":{"displayName":"tijdzone"},"zone-short":{"displayName":"zone"},"zone-narrow":{"displayName":"zone"}}},"numbers":{"currencies":{"ADP":{"displayName":"Andorrese peseta","displayName-count-one":"Andorrese peseta","displayName-count-other":"Andorrese peseta","symbol":"ADP"},"AED":{"displayName":"Verenigde Arabische Emiraten-dirham","displayName-count-one":"VAE-dirham","displayName-count-other":"VAE-dirham","symbol":"AED"},"AFA":{"displayName":"Afghani (1927–2002)","displayName-count-one":"Afghani (AFA)","displayName-count-other":"Afghani (AFA)","symbol":"AFA"},"AFN":{"displayName":"Afghaanse afghani","displayName-count-one":"Afghaanse afghani","displayName-count-other":"Afghaanse afghani","symbol":"AFN"},"ALK":{"displayName":"Albanese lek (1946–1965)","displayName-count-one":"Albanese lek (1946–1965)","displayName-count-other":"Albanese lek (1946–1965)","symbol":"ALK"},"ALL":{"displayName":"Albanese lek","displayName-count-one":"Albanese lek","displayName-count-other":"Albanese lek","symbol":"ALL"},"AMD":{"displayName":"Armeense dram","displayName-count-one":"Armeense dram","displayName-count-other":"Armeense dram","symbol":"AMD"},"ANG":{"displayName":"Nederlands-Antilliaanse gulden","displayName-count-one":"Nederlands-Antilliaanse gulden","displayName-count-other":"Nederlands-Antilliaanse gulden","symbol":"ANG"},"AOA":{"displayName":"Angolese kwanza","displayName-count-one":"Angolese kwanza","displayName-count-other":"Angolese kwanza","symbol":"AOA","symbol-alt-narrow":"Kz"},"AOK":{"displayName":"Angolese kwanza (1977–1990)","displayName-count-one":"Angolese kwanza (1977–1990)","displayName-count-other":"Angolese kwanza (1977–1990)","symbol":"AOK"},"AON":{"displayName":"Angolese nieuwe kwanza (1990–2000)","displayName-count-one":"Angolese nieuwe kwanza (1990–2000)","displayName-count-other":"Angolese nieuwe kwanza (1990–2000)","symbol":"AON"},"AOR":{"displayName":"Angolese kwanza reajustado (1995–1999)","displayName-count-one":"Angolese kwanza reajustado (1995–1999)","displayName-count-other":"Angolese kwanza reajustado (1995–1999)","symbol":"AOR"},"ARA":{"displayName":"Argentijnse austral","displayName-count-one":"Argentijnse austral","displayName-count-other":"Argentijnse austral","symbol":"ARA"},"ARL":{"displayName":"Argentijnse peso ley (1970–1983)","displayName-count-one":"Argentijnse peso ley (1970–1983)","displayName-count-other":"Argentijnse peso ley (1970–1983)","symbol":"ARL"},"ARM":{"displayName":"Argentijnse peso (1881–1970)","displayName-count-one":"Argentijnse peso (1881–1970)","displayName-count-other":"Argentijnse peso (1881–1970)","symbol":"ARM"},"ARP":{"displayName":"Argentijnse peso (1983–1985)","displayName-count-one":"Argentijnse peso (1983–1985)","displayName-count-other":"Argentijnse peso (1983–1985)","symbol":"ARP"},"ARS":{"displayName":"Argentijnse peso","displayName-count-one":"Argentijnse peso","displayName-count-other":"Argentijnse peso","symbol":"ARS","symbol-alt-narrow":"$"},"ATS":{"displayName":"Oostenrijkse schilling","displayName-count-one":"Oostenrijkse schilling","displayName-count-other":"Oostenrijkse schilling","symbol":"ATS"},"AUD":{"displayName":"Australische dollar","displayName-count-one":"Australische dollar","displayName-count-other":"Australische dollar","symbol":"AU$","symbol-alt-narrow":"$"},"AWG":{"displayName":"Arubaanse gulden","displayName-count-one":"Arubaanse gulden","displayName-count-other":"Arubaanse gulden","symbol":"AWG"},"AZM":{"displayName":"Azerbeidzjaanse manat (1993–2006)","displayName-count-one":"Azerbeidzjaanse manat (1993–2006)","displayName-count-other":"Azerbeidzjaanse manat (1993–2006)","symbol":"AZM"},"AZN":{"displayName":"Azerbeidzjaanse manat","displayName-count-one":"Azerbeidzjaanse manat","displayName-count-other":"Azerbeidzjaanse manat","symbol":"AZN"},"BAD":{"displayName":"Bosnische dinar","displayName-count-one":"Bosnische dinar","displayName-count-other":"Bosnische dinar","symbol":"BAD"},"BAM":{"displayName":"Bosnische convertibele mark","displayName-count-one":"Bosnische convertibele mark","displayName-count-other":"Bosnische convertibele mark","symbol":"BAM","symbol-alt-narrow":"KM"},"BAN":{"displayName":"Nieuwe Bosnische dinar (1994–1997)","displayName-count-one":"Nieuwe Bosnische dinar (1994–1997)","displayName-count-other":"Nieuwe Bosnische dinar (1994–1997)","symbol":"BAN"},"BBD":{"displayName":"Barbadaanse dollar","displayName-count-one":"Barbadaanse dollar","displayName-count-other":"Barbadaanse dollar","symbol":"BBD","symbol-alt-narrow":"$"},"BDT":{"displayName":"Bengalese taka","displayName-count-one":"Bengalese taka","displayName-count-other":"Bengalese taka","symbol":"BDT","symbol-alt-narrow":"৳"},"BEC":{"displayName":"Belgische frank (convertibel)","displayName-count-one":"Belgische frank (convertibel)","displayName-count-other":"Belgische frank (convertibel)","symbol":"BEC"},"BEF":{"displayName":"Belgische frank","displayName-count-one":"Belgische frank","displayName-count-other":"Belgische frank","symbol":"BEF"},"BEL":{"displayName":"Belgische frank (financieel)","displayName-count-one":"Belgische frank (financieel)","displayName-count-other":"Belgische frank (financieel)","symbol":"BEL"},"BGL":{"displayName":"Bulgaarse harde lev","displayName-count-one":"Bulgaarse harde lev","displayName-count-other":"Bulgaarse harde lev","symbol":"BGL"},"BGM":{"displayName":"Bulgaarse socialistische lev","displayName-count-one":"Bulgaarse socialistische lev","displayName-count-other":"Bulgaarse socialistische lev","symbol":"BGM"},"BGN":{"displayName":"Bulgaarse lev","displayName-count-one":"Bulgaarse lev","displayName-count-other":"Bulgaarse leva","symbol":"BGN"},"BGO":{"displayName":"Bulgaarse lev (1879–1952)","displayName-count-one":"Bulgaarse lev (1879–1952)","displayName-count-other":"Bulgaarse lev (1879–1952)","symbol":"BGO"},"BHD":{"displayName":"Bahreinse dinar","displayName-count-one":"Bahreinse dinar","displayName-count-other":"Bahreinse dinar","symbol":"BHD"},"BIF":{"displayName":"Burundese frank","displayName-count-one":"Burundese frank","displayName-count-other":"Burundese frank","symbol":"BIF"},"BMD":{"displayName":"Bermuda-dollar","displayName-count-one":"Bermuda-dollar","displayName-count-other":"Bermuda-dollar","symbol":"BMD","symbol-alt-narrow":"$"},"BND":{"displayName":"Bruneise dollar","displayName-count-one":"Bruneise dollar","displayName-count-other":"Bruneise dollar","symbol":"BND","symbol-alt-narrow":"$"},"BOB":{"displayName":"Boliviaanse boliviano","displayName-count-one":"Boliviaanse boliviano","displayName-count-other":"Boliviaanse boliviano","symbol":"BOB","symbol-alt-narrow":"Bs"},"BOL":{"displayName":"Boliviaanse boliviano (1863–1963)","displayName-count-one":"Boliviaanse boliviano (1863–1963)","displayName-count-other":"Boliviaanse boliviano (1863–1963)","symbol":"BOL"},"BOP":{"displayName":"Boliviaanse peso","displayName-count-one":"Boliviaanse peso","displayName-count-other":"Boliviaanse peso","symbol":"BOP"},"BOV":{"displayName":"Boliviaanse mvdol","displayName-count-one":"Boliviaanse mvdol","displayName-count-other":"Boliviaanse mvdol","symbol":"BOV"},"BRB":{"displayName":"Braziliaanse cruzeiro novo (1967–1986)","displayName-count-one":"Braziliaanse cruzeiro novo (1967–1986)","displayName-count-other":"Braziliaanse cruzeiro novo (1967–1986)","symbol":"BRB"},"BRC":{"displayName":"Braziliaanse cruzado","displayName-count-one":"Braziliaanse cruzado","displayName-count-other":"Braziliaanse cruzado","symbol":"BRC"},"BRE":{"displayName":"Braziliaanse cruzeiro (1990–1993)","displayName-count-one":"Braziliaanse cruzeiro (1990–1993)","displayName-count-other":"Braziliaanse cruzeiro (1990–1993)","symbol":"BRE"},"BRL":{"displayName":"Braziliaanse real","displayName-count-one":"Braziliaanse real","displayName-count-other":"Braziliaanse real","symbol":"R$","symbol-alt-narrow":"R$"},"BRN":{"displayName":"Braziliaanse nieuwe cruzado (1989–1990)","displayName-count-one":"Braziliaanse cruzado novo","displayName-count-other":"Braziliaanse cruzado novo","symbol":"BRN"},"BRR":{"displayName":"Braziliaanse cruzeiro","displayName-count-one":"Braziliaanse cruzeiro","displayName-count-other":"Braziliaanse cruzeiro","symbol":"BRR"},"BRZ":{"displayName":"Braziliaanse cruzeiro (1942–1967)","displayName-count-one":"Braziliaanse cruzeiro (1942–1967)","displayName-count-other":"Braziliaanse cruzeiro (1942–1967)","symbol":"BRZ"},"BSD":{"displayName":"Bahamaanse dollar","displayName-count-one":"Bahamaanse dollar","displayName-count-other":"Bahamaanse dollar","symbol":"BSD","symbol-alt-narrow":"$"},"BTN":{"displayName":"Bhutaanse ngultrum","displayName-count-one":"Bhutaanse ngultrum","displayName-count-other":"Bhutaanse ngultrum","symbol":"BTN"},"BUK":{"displayName":"Birmese kyat","displayName-count-one":"Birmese kyat","displayName-count-other":"Birmese kyat","symbol":"BUK"},"BWP":{"displayName":"Botswaanse pula","displayName-count-one":"Botswaanse pula","displayName-count-other":"Botswaanse pula","symbol":"BWP","symbol-alt-narrow":"P"},"BYB":{"displayName":"Wit-Russische nieuwe roebel (1994–1999)","displayName-count-one":"Wit-Russische nieuwe roebel (1994–1999)","displayName-count-other":"Wit-Russische nieuwe roebel (1994–1999)","symbol":"BYB"},"BYN":{"displayName":"Wit-Russische roebel","displayName-count-one":"Wit-Russische roebel","displayName-count-other":"Wit-Russische roebel","symbol":"BYN","symbol-alt-narrow":"р."},"BYR":{"displayName":"Wit-Russische roebel (2000–2016)","displayName-count-one":"Wit-Russische roebel (2000–2016)","displayName-count-other":"Wit-Russische roebel (2000–2016)","symbol":"BYR"},"BZD":{"displayName":"Belizaanse dollar","displayName-count-one":"Belizaanse dollar","displayName-count-other":"Belizaanse dollar","symbol":"BZD","symbol-alt-narrow":"$"},"CAD":{"displayName":"Canadese dollar","displayName-count-one":"Canadese dollar","displayName-count-other":"Canadese dollar","symbol":"C$","symbol-alt-narrow":"$"},"CDF":{"displayName":"Congolese frank","displayName-count-one":"Congolese frank","displayName-count-other":"Congolese frank","symbol":"CDF"},"CHE":{"displayName":"WIR euro","displayName-count-one":"WIR euro","displayName-count-other":"WIR euro","symbol":"CHE"},"CHF":{"displayName":"Zwitserse frank","displayName-count-one":"Zwitserse frank","displayName-count-other":"Zwitserse frank","symbol":"CHF"},"CHW":{"displayName":"WIR franc","displayName-count-one":"WIR franc","displayName-count-other":"WIR franc","symbol":"CHW"},"CLE":{"displayName":"Chileense escudo","displayName-count-one":"Chileense escudo","displayName-count-other":"Chileense escudo","symbol":"CLE"},"CLF":{"displayName":"Chileense unidades de fomento","displayName-count-one":"Chileense unidades de fomento","displayName-count-other":"Chileense unidades de fomento","symbol":"CLF"},"CLP":{"displayName":"Chileense peso","displayName-count-one":"Chileense peso","displayName-count-other":"Chileense peso","symbol":"CLP","symbol-alt-narrow":"$"},"CNH":{"displayName":"Chinese renminbi (offshore)","displayName-count-one":"Chinese yuan (offshore)","displayName-count-other":"Chinese yuan (offshore)","symbol":"CNH"},"CNX":{"displayName":"dollar van de Chinese Volksbank","displayName-count-one":"dollar van de Chinese Volksbank","displayName-count-other":"dollar van de Chinese Volksbank","symbol":"CNX"},"CNY":{"displayName":"Chinese Yuan","displayName-count-one":"Chinese yuan","displayName-count-other":"Chinese yuan","symbol":"CN¥","symbol-alt-narrow":"¥"},"COP":{"displayName":"Colombiaanse peso","displayName-count-one":"Colombiaanse peso","displayName-count-other":"Colombiaanse peso","symbol":"COP","symbol-alt-narrow":"$"},"COU":{"displayName":"Unidad de Valor Real","displayName-count-one":"Unidad de Valor Real","displayName-count-other":"Unidad de Valor Real","symbol":"COU"},"CRC":{"displayName":"Costa Ricaanse colon","displayName-count-one":"Costa Ricaanse colon","displayName-count-other":"Costa Ricaanse colon","symbol":"CRC","symbol-alt-narrow":"₡"},"CSD":{"displayName":"Oude Servische dinar","displayName-count-one":"Oude Servische dinar","displayName-count-other":"Oude Servische dinar","symbol":"CSD"},"CSK":{"displayName":"Tsjechoslowaakse harde koruna","displayName-count-one":"Tsjechoslowaakse harde koruna","displayName-count-other":"Tsjechoslowaakse harde koruna","symbol":"CSK"},"CUC":{"displayName":"Cubaanse convertibele peso","displayName-count-one":"Cubaanse convertibele peso","displayName-count-other":"Cubaanse convertibele peso","symbol":"CUC","symbol-alt-narrow":"$"},"CUP":{"displayName":"Cubaanse peso","displayName-count-one":"Cubaanse peso","displayName-count-other":"Cubaanse peso","symbol":"CUP","symbol-alt-narrow":"$"},"CVE":{"displayName":"Kaapverdische escudo","displayName-count-one":"Kaapverdische escudo","displayName-count-other":"Kaapverdische escudo","symbol":"CVE"},"CYP":{"displayName":"Cyprisch pond","displayName-count-one":"Cyprisch pond","displayName-count-other":"Cyprisch pond","symbol":"CYP"},"CZK":{"displayName":"Tsjechische kroon","displayName-count-one":"Tsjechische kroon","displayName-count-other":"Tsjechische kronen","symbol":"CZK","symbol-alt-narrow":"Kč"},"DDM":{"displayName":"Oost-Duitse ostmark","displayName-count-one":"Oost-Duitse ostmark","displayName-count-other":"Oost-Duitse ostmark","symbol":"DDM"},"DEM":{"displayName":"Duitse mark","displayName-count-one":"Duitse mark","displayName-count-other":"Duitse mark","symbol":"DEM"},"DJF":{"displayName":"Djiboutiaanse frank","displayName-count-one":"Djiboutiaanse frank","displayName-count-other":"Djiboutiaanse frank","symbol":"DJF"},"DKK":{"displayName":"Deense kroon","displayName-count-one":"Deense kroon","displayName-count-other":"Deense kronen","symbol":"DKK","symbol-alt-narrow":"kr"},"DOP":{"displayName":"Dominicaanse peso","displayName-count-one":"Dominicaanse peso","displayName-count-other":"Dominicaanse peso","symbol":"DOP","symbol-alt-narrow":"$"},"DZD":{"displayName":"Algerijnse dinar","displayName-count-one":"Algerijnse dinar","displayName-count-other":"Algerijnse dinar","symbol":"DZD"},"ECS":{"displayName":"Ecuadoraanse sucre","displayName-count-one":"Ecuadoraanse sucre","displayName-count-other":"Ecuadoraanse sucre","symbol":"ECS"},"ECV":{"displayName":"Ecuadoraanse unidad de valor constante (UVC)","displayName-count-one":"Ecuadoraanse unidad de valor constante (UVC)","displayName-count-other":"Ecuadoraanse unidad de valor constante (UVC)","symbol":"ECV"},"EEK":{"displayName":"Estlandse kroon","displayName-count-one":"Estlandse kroon","displayName-count-other":"Estlandse kroon","symbol":"EEK"},"EGP":{"displayName":"Egyptisch pond","displayName-count-one":"Egyptisch pond","displayName-count-other":"Egyptisch pond","symbol":"EGP","symbol-alt-narrow":"E£"},"ERN":{"displayName":"Eritrese nakfa","displayName-count-one":"Eritrese nakfa","displayName-count-other":"Eritrese nakfa","symbol":"ERN"},"ESA":{"displayName":"Spaanse peseta (account A)","displayName-count-one":"Spaanse peseta (account A)","displayName-count-other":"Spaanse peseta (account A)","symbol":"ESA"},"ESB":{"displayName":"Spaanse peseta (convertibele account)","displayName-count-one":"Spaanse peseta (convertibele account)","displayName-count-other":"Spaanse peseta (convertibele account)","symbol":"ESB"},"ESP":{"displayName":"Spaanse peseta","displayName-count-one":"Spaanse peseta","displayName-count-other":"Spaanse peseta","symbol":"ESP","symbol-alt-narrow":"₧"},"ETB":{"displayName":"Ethiopische birr","displayName-count-one":"Ethiopische birr","displayName-count-other":"Ethiopische birr","symbol":"ETB"},"EUR":{"displayName":"Euro","displayName-count-one":"euro","displayName-count-other":"euro","symbol":"€","symbol-alt-narrow":"€"},"FIM":{"displayName":"Finse markka","displayName-count-one":"Finse markka","displayName-count-other":"Finse markka","symbol":"FIM"},"FJD":{"displayName":"Fiji-dollar","displayName-count-one":"Fiji-dollar","displayName-count-other":"Fiji-dollar","symbol":"FJ$","symbol-alt-narrow":"$"},"FKP":{"displayName":"Falklandeilands pond","displayName-count-one":"Falklandeilands pond","displayName-count-other":"Falklandeilands pond","symbol":"FKP","symbol-alt-narrow":"£"},"FRF":{"displayName":"Franse franc","displayName-count-one":"Franse franc","displayName-count-other":"Franse franc","symbol":"FRF"},"GBP":{"displayName":"Brits pond","displayName-count-one":"Brits pond","displayName-count-other":"Brits pond","symbol":"£","symbol-alt-narrow":"£"},"GEK":{"displayName":"Georgische kupon larit","displayName-count-one":"Georgische kupon larit","displayName-count-other":"Georgische kupon larit","symbol":"GEK"},"GEL":{"displayName":"Georgische lari","displayName-count-one":"Georgische lari","displayName-count-other":"Georgische lari","symbol":"GEL","symbol-alt-narrow":"₾","symbol-alt-variant":"ლ"},"GHC":{"displayName":"Ghanese cedi (1979–2007)","displayName-count-one":"Ghanese cedi (1979–2007)","displayName-count-other":"Ghanese cedi (1979–2007)","symbol":"GHC"},"GHS":{"displayName":"Ghanese cedi","displayName-count-one":"Ghanese cedi","displayName-count-other":"Ghanese cedi","symbol":"GHS"},"GIP":{"displayName":"Gibraltarees pond","displayName-count-one":"Gibraltarees pond","displayName-count-other":"Gibraltarees pond","symbol":"GIP","symbol-alt-narrow":"£"},"GMD":{"displayName":"Gambiaanse dalasi","displayName-count-one":"Gambiaanse dalasi","displayName-count-other":"Gambiaanse dalasi","symbol":"GMD"},"GNF":{"displayName":"Guinese frank","displayName-count-one":"Guinese frank","displayName-count-other":"Guinese frank","symbol":"GNF","symbol-alt-narrow":"FG"},"GNS":{"displayName":"Guinese syli","displayName-count-one":"Guinese syli","displayName-count-other":"Guinese syli","symbol":"GNS"},"GQE":{"displayName":"Equatoriaal-Guinese ekwele guineana","displayName-count-one":"Equatoriaal-Guinese ekwele guineana","displayName-count-other":"Equatoriaal-Guinese ekwele guineana","symbol":"GQE"},"GRD":{"displayName":"Griekse drachme","displayName-count-one":"Griekse drachme","displayName-count-other":"Griekse drachme","symbol":"GRD"},"GTQ":{"displayName":"Guatemalteekse quetzal","displayName-count-one":"Guatemalteekse quetzal","displayName-count-other":"Guatemalteekse quetzal","symbol":"GTQ","symbol-alt-narrow":"Q"},"GWE":{"displayName":"Portugees-Guinese escudo","displayName-count-one":"Portugees-Guinese escudo","displayName-count-other":"Portugees-Guinese escudo","symbol":"GWE"},"GWP":{"displayName":"Guinee-Bissause peso","displayName-count-one":"Guinee-Bissause peso","displayName-count-other":"Guinee-Bissause peso","symbol":"GWP"},"GYD":{"displayName":"Guyaanse dollar","displayName-count-one":"Guyaanse dollar","displayName-count-other":"Guyaanse dollar","symbol":"GYD","symbol-alt-narrow":"$"},"HKD":{"displayName":"Hongkongse dollar","displayName-count-one":"Hongkongse dollar","displayName-count-other":"Hongkongse dollar","symbol":"HK$","symbol-alt-narrow":"$"},"HNL":{"displayName":"Hondurese lempira","displayName-count-one":"Hondurese lempira","displayName-count-other":"Hondurese lempira","symbol":"HNL","symbol-alt-narrow":"L"},"HRD":{"displayName":"Kroatische dinar","displayName-count-one":"Kroatische dinar","displayName-count-other":"Kroatische dinar","symbol":"HRD"},"HRK":{"displayName":"Kroatische kuna","displayName-count-one":"Kroatische kuna","displayName-count-other":"Kroatische kuna","symbol":"HRK","symbol-alt-narrow":"kn"},"HTG":{"displayName":"Haïtiaanse gourde","displayName-count-one":"Haïtiaanse gourde","displayName-count-other":"Haïtiaanse gourde","symbol":"HTG"},"HUF":{"displayName":"Hongaarse forint","displayName-count-one":"Hongaarse forint","displayName-count-other":"Hongaarse forint","symbol":"HUF","symbol-alt-narrow":"Ft"},"IDR":{"displayName":"Indonesische roepia","displayName-count-one":"Indonesische roepia","displayName-count-other":"Indonesische roepia","symbol":"IDR","symbol-alt-narrow":"Rp"},"IEP":{"displayName":"Iers pond","displayName-count-one":"Iers pond","displayName-count-other":"Iers pond","symbol":"IEP"},"ILP":{"displayName":"Israëlisch pond","displayName-count-one":"Israëlisch pond","displayName-count-other":"Israëlisch pond","symbol":"ILP"},"ILR":{"displayName":"Israëlische sjekel (1980–1985)","displayName-count-one":"Israëlische sjekel (1980–1985)","displayName-count-other":"Israëlische sjekel (1980–1985)","symbol":"ILR"},"ILS":{"displayName":"Israëlische nieuwe shekel","displayName-count-one":"Israëlische nieuwe shekel","displayName-count-other":"Israëlische nieuwe shekel","symbol":"₪","symbol-alt-narrow":"₪"},"INR":{"displayName":"Indiase roepie","displayName-count-one":"Indiase roepie","displayName-count-other":"Indiase roepie","symbol":"₹","symbol-alt-narrow":"₹"},"IQD":{"displayName":"Iraakse dinar","displayName-count-one":"Iraakse dinar","displayName-count-other":"Iraakse dinar","symbol":"IQD"},"IRR":{"displayName":"Iraanse rial","displayName-count-one":"Iraanse rial","displayName-count-other":"Iraanse rial","symbol":"IRR"},"ISJ":{"displayName":"IJslandse kroon (1918–1981)","displayName-count-one":"IJslandse kroon (1918–1981)","displayName-count-other":"IJslandse kronen (1918–1981)","symbol":"ISJ"},"ISK":{"displayName":"IJslandse kroon","displayName-count-one":"IJslandse kroon","displayName-count-other":"IJslandse kronen","symbol":"ISK","symbol-alt-narrow":"kr"},"ITL":{"displayName":"Italiaanse lire","displayName-count-one":"Italiaanse lire","displayName-count-other":"Italiaanse lire","symbol":"ITL"},"JMD":{"displayName":"Jamaicaanse dollar","displayName-count-one":"Jamaicaanse dollar","displayName-count-other":"Jamaicaanse dollar","symbol":"JMD","symbol-alt-narrow":"$"},"JOD":{"displayName":"Jordaanse dinar","displayName-count-one":"Jordaanse dinar","displayName-count-other":"Jordaanse dinar","symbol":"JOD"},"JPY":{"displayName":"Japanse yen","displayName-count-one":"Japanse yen","displayName-count-other":"Japanse yen","symbol":"JP¥","symbol-alt-narrow":"¥"},"KES":{"displayName":"Keniaanse shilling","displayName-count-one":"Keniaanse shilling","displayName-count-other":"Keniaanse shilling","symbol":"KES"},"KGS":{"displayName":"Kirgizische som","displayName-count-one":"Kirgizische som","displayName-count-other":"Kirgizische som","symbol":"KGS"},"KHR":{"displayName":"Cambodjaanse riel","displayName-count-one":"Cambodjaanse riel","displayName-count-other":"Cambodjaanse riel","symbol":"KHR","symbol-alt-narrow":"៛"},"KMF":{"displayName":"Comorese frank","displayName-count-one":"Comorese frank","displayName-count-other":"Comorese frank","symbol":"KMF","symbol-alt-narrow":"CF"},"KPW":{"displayName":"Noord-Koreaanse won","displayName-count-one":"Noord-Koreaanse won","displayName-count-other":"Noord-Koreaanse won","symbol":"KPW","symbol-alt-narrow":"₩"},"KRH":{"displayName":"Zuid-Koreaanse hwan (1953–1962)","displayName-count-one":"Zuid-Koreaanse hwan (1953–1962)","displayName-count-other":"Zuid-Koreaanse hwan (1953–1962)","symbol":"KRH"},"KRO":{"displayName":"Oude Zuid-Koreaanse won (1945–1953)","displayName-count-one":"oude Zuid-Koreaanse won (1945–1953)","displayName-count-other":"oude Zuid-Koreaanse won (1945–1953)","symbol":"KRO"},"KRW":{"displayName":"Zuid-Koreaanse won","displayName-count-one":"Zuid-Koreaanse won","displayName-count-other":"Zuid-Koreaanse won","symbol":"₩","symbol-alt-narrow":"₩"},"KWD":{"displayName":"Koeweitse dinar","displayName-count-one":"Koeweitse dinar","displayName-count-other":"Koeweitse dinar","symbol":"KWD"},"KYD":{"displayName":"Kaaimaneilandse dollar","displayName-count-one":"Kaaimaneilandse dollar","displayName-count-other":"Kaaimaneilandse dollar","symbol":"KYD","symbol-alt-narrow":"$"},"KZT":{"displayName":"Kazachse tenge","displayName-count-one":"Kazachse tenge","displayName-count-other":"Kazachse tenge","symbol":"KZT","symbol-alt-narrow":"₸"},"LAK":{"displayName":"Laotiaanse kip","displayName-count-one":"Laotiaanse kip","displayName-count-other":"Laotiaanse kip","symbol":"LAK","symbol-alt-narrow":"₭"},"LBP":{"displayName":"Libanees pond","displayName-count-one":"Libanees pond","displayName-count-other":"Libanees pond","symbol":"LBP","symbol-alt-narrow":"L£"},"LKR":{"displayName":"Sri Lankaanse roepie","displayName-count-one":"Sri Lankaanse roepie","displayName-count-other":"Sri Lankaanse roepie","symbol":"LKR","symbol-alt-narrow":"Rs"},"LRD":{"displayName":"Liberiaanse dollar","displayName-count-one":"Liberiaanse dollar","displayName-count-other":"Liberiaanse dollar","symbol":"LRD","symbol-alt-narrow":"$"},"LSL":{"displayName":"Lesothaanse loti","displayName-count-one":"Lesothaanse loti","displayName-count-other":"Lesothaanse loti","symbol":"LSL"},"LTL":{"displayName":"Litouwse litas","displayName-count-one":"Litouwse litas","displayName-count-other":"Litouwse litas","symbol":"LTL","symbol-alt-narrow":"Lt"},"LTT":{"displayName":"Litouwse talonas","displayName-count-one":"Litouwse talonas","displayName-count-other":"Litouwse talonas","symbol":"LTT"},"LUC":{"displayName":"Luxemburgse convertibele franc","displayName-count-one":"Luxemburgse convertibele franc","displayName-count-other":"Luxemburgse convertibele franc","symbol":"LUC"},"LUF":{"displayName":"Luxemburgse frank","displayName-count-one":"Luxemburgse frank","displayName-count-other":"Luxemburgse frank","symbol":"LUF"},"LUL":{"displayName":"Luxemburgse financiële franc","displayName-count-one":"Luxemburgse financiële franc","displayName-count-other":"Luxemburgse financiële franc","symbol":"LUL"},"LVL":{"displayName":"Letse lats","displayName-count-one":"Letse lats","displayName-count-other":"Letse lats","symbol":"LVL","symbol-alt-narrow":"Ls"},"LVR":{"displayName":"Letse roebel","displayName-count-one":"Letse roebel","displayName-count-other":"Letse roebel","symbol":"LVR"},"LYD":{"displayName":"Libische dinar","displayName-count-one":"Libische dinar","displayName-count-other":"Libische dinar","symbol":"LYD"},"MAD":{"displayName":"Marokkaanse dirham","displayName-count-one":"Marokkaanse dirham","displayName-count-other":"Marokkaanse dirham","symbol":"MAD"},"MAF":{"displayName":"Marokkaanse franc","displayName-count-one":"Marokkaanse franc","displayName-count-other":"Marokkaanse franc","symbol":"MAF"},"MCF":{"displayName":"Monegaskische frank","displayName-count-one":"Monegaskische frank","displayName-count-other":"Monegaskische frank","symbol":"MCF"},"MDC":{"displayName":"Moldavische cupon","displayName-count-one":"Moldavische cupon","displayName-count-other":"Moldavische cupon","symbol":"MDC"},"MDL":{"displayName":"Moldavische leu","displayName-count-one":"Moldavische leu","displayName-count-other":"Moldavische leu","symbol":"MDL"},"MGA":{"displayName":"Malagassische ariary","displayName-count-one":"Malagassische ariary","displayName-count-other":"Malagassische ariary","symbol":"MGA","symbol-alt-narrow":"Ar"},"MGF":{"displayName":"Malagassische franc","displayName-count-one":"Malagassische franc","displayName-count-other":"Malagassische franc","symbol":"MGF"},"MKD":{"displayName":"Macedonische denar","displayName-count-one":"Macedonische denar","displayName-count-other":"Macedonische denar","symbol":"MKD"},"MKN":{"displayName":"Macedonische denar (1992–1993)","displayName-count-one":"Macedonische denar (1992–1993)","displayName-count-other":"Macedonische denar (1992–1993)","symbol":"MKN"},"MLF":{"displayName":"Malinese franc","displayName-count-one":"Malinese franc","displayName-count-other":"Malinese franc","symbol":"MLF"},"MMK":{"displayName":"Myanmarese kyat","displayName-count-one":"Myanmarese kyat","displayName-count-other":"Myanmarese kyat","symbol":"MMK","symbol-alt-narrow":"K"},"MNT":{"displayName":"Mongoolse tugrik","displayName-count-one":"Mongoolse tugrik","displayName-count-other":"Mongoolse tugrik","symbol":"MNT","symbol-alt-narrow":"₮"},"MOP":{"displayName":"Macause pataca","displayName-count-one":"Macause pataca","displayName-count-other":"Macause pataca","symbol":"MOP"},"MRO":{"displayName":"Mauritaanse ouguiya","displayName-count-one":"Mauritaanse ouguiya","displayName-count-other":"Mauritaanse ouguiya","symbol":"MRO"},"MTL":{"displayName":"Maltese lire","displayName-count-one":"Maltese lire","displayName-count-other":"Maltese lire","symbol":"MTL"},"MTP":{"displayName":"Maltees pond","displayName-count-one":"Maltees pond","displayName-count-other":"Maltees pond","symbol":"MTP"},"MUR":{"displayName":"Mauritiaanse roepie","displayName-count-one":"Mauritiaanse roepie","displayName-count-other":"Mauritiaanse roepie","symbol":"MUR","symbol-alt-narrow":"Rs"},"MVP":{"displayName":"Maldivische roepie","displayName-count-one":"Maldivische roepie","displayName-count-other":"Maldivische roepie","symbol":"MVP"},"MVR":{"displayName":"Maldivische rufiyaa","displayName-count-one":"Maldivische rufiyaa","displayName-count-other":"Maldivische rufiyaa","symbol":"MVR"},"MWK":{"displayName":"Malawische kwacha","displayName-count-one":"Malawische kwacha","displayName-count-other":"Malawische kwacha","symbol":"MWK"},"MXN":{"displayName":"Mexicaanse peso","displayName-count-one":"Mexicaanse peso","displayName-count-other":"Mexicaanse peso","symbol":"MX$","symbol-alt-narrow":"$"},"MXP":{"displayName":"Mexicaanse zilveren peso (1861–1992)","displayName-count-one":"Mexicaanse zilveren peso (1861–1992)","displayName-count-other":"Mexicaanse zilveren peso (1861–1992)","symbol":"MXP"},"MXV":{"displayName":"Mexicaanse unidad de inversion (UDI)","displayName-count-one":"Mexicaanse unidad de inversion (UDI)","displayName-count-other":"Mexicaanse unidad de inversion (UDI)","symbol":"MXV"},"MYR":{"displayName":"Maleisische ringgit","displayName-count-one":"Maleisische ringgit","displayName-count-other":"Maleisische ringgit","symbol":"MYR","symbol-alt-narrow":"RM"},"MZE":{"displayName":"Mozambikaanse escudo","displayName-count-one":"Mozambikaanse escudo","displayName-count-other":"Mozambikaanse escudo","symbol":"MZE"},"MZM":{"displayName":"Oude Mozambikaanse metical","displayName-count-one":"Oude Mozambikaanse metical","displayName-count-other":"Oude Mozambikaanse metical","symbol":"MZM"},"MZN":{"displayName":"Mozambikaanse metical","displayName-count-one":"Mozambikaanse metical","displayName-count-other":"Mozambikaanse metical","symbol":"MZN"},"NAD":{"displayName":"Namibische dollar","displayName-count-one":"Namibische dollar","displayName-count-other":"Namibische dollar","symbol":"NAD","symbol-alt-narrow":"$"},"NGN":{"displayName":"Nigeriaanse naira","displayName-count-one":"Nigeriaanse naira","displayName-count-other":"Nigeriaanse naira","symbol":"NGN","symbol-alt-narrow":"₦"},"NIC":{"displayName":"Nicaraguaanse córdoba (1988–1991)","displayName-count-one":"Nicaraguaanse córdoba (1988–1991)","displayName-count-other":"Nicaraguaanse córdoba (1988–1991)","symbol":"NIC"},"NIO":{"displayName":"Nicaraguaanse córdoba","displayName-count-one":"Nicaraguaanse córdoba","displayName-count-other":"Nicaraguaanse córdoba","symbol":"NIO","symbol-alt-narrow":"C$"},"NLG":{"displayName":"Nederlandse gulden","displayName-count-one":"Nederlandse gulden","displayName-count-other":"Nederlandse gulden","symbol":"NLG"},"NOK":{"displayName":"Noorse kroon","displayName-count-one":"Noorse kroon","displayName-count-other":"Noorse kronen","symbol":"NOK","symbol-alt-narrow":"kr"},"NPR":{"displayName":"Nepalese roepie","displayName-count-one":"Nepalese roepie","displayName-count-other":"Nepalese roepie","symbol":"NPR","symbol-alt-narrow":"Rs"},"NZD":{"displayName":"Nieuw-Zeelandse dollar","displayName-count-one":"Nieuw-Zeelandse dollar","displayName-count-other":"Nieuw-Zeelandse dollar","symbol":"NZ$","symbol-alt-narrow":"$"},"OMR":{"displayName":"Omaanse rial","displayName-count-one":"Omaanse rial","displayName-count-other":"Omaanse rial","symbol":"OMR"},"PAB":{"displayName":"Panamese balboa","displayName-count-one":"Panamese balboa","displayName-count-other":"Panamese balboa","symbol":"PAB"},"PEI":{"displayName":"Peruaanse inti","displayName-count-one":"Peruaanse inti","displayName-count-other":"Peruaanse inti","symbol":"PEI"},"PEN":{"displayName":"Peruaanse sol","displayName-count-one":"Peruaanse sol","displayName-count-other":"Peruaanse sol","symbol":"PEN"},"PES":{"displayName":"Peruaanse sol (1863–1965)","displayName-count-one":"Peruaanse sol (1863–1965)","displayName-count-other":"Peruaanse sol (1863–1965)","symbol":"PES"},"PGK":{"displayName":"Papoea-Nieuw-Guinese kina","displayName-count-one":"Papoea-Nieuw-Guinese kina","displayName-count-other":"Papoea-Nieuw-Guinese kina","symbol":"PGK"},"PHP":{"displayName":"Filipijnse peso","displayName-count-one":"Filipijnse peso","displayName-count-other":"Filipijnse peso","symbol":"PHP","symbol-alt-narrow":"₱"},"PKR":{"displayName":"Pakistaanse roepie","displayName-count-one":"Pakistaanse roepie","displayName-count-other":"Pakistaanse roepie","symbol":"PKR","symbol-alt-narrow":"Rs"},"PLN":{"displayName":"Poolse zloty","displayName-count-one":"Poolse zloty","displayName-count-other":"Poolse zloty","symbol":"PLN","symbol-alt-narrow":"zł"},"PLZ":{"displayName":"Poolse zloty (1950–1995)","displayName-count-one":"Poolse zloty (1950–1995)","displayName-count-other":"Poolse zloty (1950–1995)","symbol":"PLZ"},"PTE":{"displayName":"Portugese escudo","displayName-count-one":"Portugese escudo","displayName-count-other":"Portugese escudo","symbol":"PTE"},"PYG":{"displayName":"Paraguayaanse guarani","displayName-count-one":"Paraguayaanse guarani","displayName-count-other":"Paraguayaanse guarani","symbol":"PYG","symbol-alt-narrow":"₲"},"QAR":{"displayName":"Qatarese rial","displayName-count-one":"Qatarese rial","displayName-count-other":"Qatarese rial","symbol":"QAR"},"RHD":{"displayName":"Rhodesische dollar","displayName-count-one":"Rhodesische dollar","displayName-count-other":"Rhodesische dollar","symbol":"RHD"},"ROL":{"displayName":"Oude Roemeense leu","displayName-count-one":"Oude Roemeense leu","displayName-count-other":"Oude Roemeense leu","symbol":"ROL"},"RON":{"displayName":"Roemeense leu","displayName-count-one":"Roemeense leu","displayName-count-other":"Roemeense leu","symbol":"RON","symbol-alt-narrow":"lei"},"RSD":{"displayName":"Servische dinar","displayName-count-one":"Servische dinar","displayName-count-other":"Servische dinar","symbol":"RSD"},"RUB":{"displayName":"Russische roebel","displayName-count-one":"Russische roebel","displayName-count-other":"Russische roebel","symbol":"RUB","symbol-alt-narrow":"₽"},"RUR":{"displayName":"Russische roebel (1991–1998)","displayName-count-one":"Russische roebel (1991–1998)","displayName-count-other":"Russische roebel (1991–1998)","symbol":"RUR","symbol-alt-narrow":"р."},"RWF":{"displayName":"Rwandese frank","displayName-count-one":"Rwandese frank","displayName-count-other":"Rwandese frank","symbol":"RWF","symbol-alt-narrow":"RF"},"SAR":{"displayName":"Saoedi-Arabische riyal","displayName-count-one":"Saoedi-Arabische riyal","displayName-count-other":"Saoedi-Arabische riyal","symbol":"SAR"},"SBD":{"displayName":"Salomon-dollar","displayName-count-one":"Salomon-dollar","displayName-count-other":"Salomon-dollar","symbol":"SI$","symbol-alt-narrow":"$"},"SCR":{"displayName":"Seychelse roepie","displayName-count-one":"Seychelse roepie","displayName-count-other":"Seychelse roepie","symbol":"SCR"},"SDD":{"displayName":"Soedanese dinar","displayName-count-one":"Soedanese dinar","displayName-count-other":"Soedanese dinar","symbol":"SDD"},"SDG":{"displayName":"Soedanees pond","displayName-count-one":"Soedanees pond","displayName-count-other":"Soedanees pond","symbol":"SDG"},"SDP":{"displayName":"Soedanees pond (1957–1998)","displayName-count-one":"Soedanees pond (1957–1998)","displayName-count-other":"Soedanees pond (1957–1998)","symbol":"SDP"},"SEK":{"displayName":"Zweedse kroon","displayName-count-one":"Zweedse kroon","displayName-count-other":"Zweedse kronen","symbol":"SEK","symbol-alt-narrow":"kr"},"SGD":{"displayName":"Singaporese dollar","displayName-count-one":"Singaporese dollar","displayName-count-other":"Singaporese dollar","symbol":"SGD","symbol-alt-narrow":"$"},"SHP":{"displayName":"Sint-Heleens pond","displayName-count-one":"Sint-Heleens pond","displayName-count-other":"Sint-Heleens pond","symbol":"SHP","symbol-alt-narrow":"£"},"SIT":{"displayName":"Sloveense tolar","displayName-count-one":"Sloveense tolar","displayName-count-other":"Sloveense tolar","symbol":"SIT"},"SKK":{"displayName":"Slowaakse koruna","displayName-count-one":"Slowaakse koruna","displayName-count-other":"Slowaakse koruna","symbol":"SKK"},"SLL":{"displayName":"Sierraleoonse leone","displayName-count-one":"Sierraleoonse leone","displayName-count-other":"Sierraleoonse leone","symbol":"SLL"},"SOS":{"displayName":"Somalische shilling","displayName-count-one":"Somalische shilling","displayName-count-other":"Somalische shilling","symbol":"SOS"},"SRD":{"displayName":"Surinaamse dollar","displayName-count-one":"Surinaamse dollar","displayName-count-other":"Surinaamse dollar","symbol":"SRD","symbol-alt-narrow":"$"},"SRG":{"displayName":"Surinaamse gulden","displayName-count-one":"Surinaamse gulden","displayName-count-other":"Surinaamse gulden","symbol":"SRG"},"SSP":{"displayName":"Zuid-Soedanees pond","displayName-count-one":"Zuid-Soedanees pond","displayName-count-other":"Zuid-Soedanees pond","symbol":"SSP","symbol-alt-narrow":"£"},"STD":{"displayName":"Santomese dobra","displayName-count-one":"Santomese dobra","displayName-count-other":"Santomese dobra","symbol":"STD","symbol-alt-narrow":"Db"},"STN":{"displayName":"STN","symbol":"STN"},"SUR":{"displayName":"Sovjet-roebel","displayName-count-one":"Sovjet-roebel","displayName-count-other":"Sovjet-roebel","symbol":"SUR"},"SVC":{"displayName":"Salvadoraanse colón","displayName-count-one":"Salvadoraanse colón","displayName-count-other":"Salvadoraanse colón","symbol":"SVC"},"SYP":{"displayName":"Syrisch pond","displayName-count-one":"Syrisch pond","displayName-count-other":"Syrisch pond","symbol":"SYP","symbol-alt-narrow":"£"},"SZL":{"displayName":"Swazische lilangeni","displayName-count-one":"Swazische lilangeni","displayName-count-other":"Swazische lilangeni","symbol":"SZL"},"THB":{"displayName":"Thaise baht","displayName-count-one":"Thaise baht","displayName-count-other":"Thaise baht","symbol":"฿","symbol-alt-narrow":"฿"},"TJR":{"displayName":"Tadzjikistaanse roebel","displayName-count-one":"Tadzjikistaanse roebel","displayName-count-other":"Tadzjikistaanse roebel","symbol":"TJR"},"TJS":{"displayName":"Tadzjiekse somoni","displayName-count-one":"Tadzjiekse somoni","displayName-count-other":"Tadzjiekse somoni","symbol":"TJS"},"TMM":{"displayName":"Turkmeense manat (1993–2009)","displayName-count-one":"Turkmeense manat (1993–2009)","displayName-count-other":"Turkmeense manat (1993–2009)","symbol":"TMM"},"TMT":{"displayName":"Turkmeense manat","displayName-count-one":"Turkmeense manat","displayName-count-other":"Turkmeense manat","symbol":"TMT"},"TND":{"displayName":"Tunesische dinar","displayName-count-one":"Tunesische dinar","displayName-count-other":"Tunesische dinar","symbol":"TND"},"TOP":{"displayName":"Tongaanse paʻanga","displayName-count-one":"Tongaanse paʻanga","displayName-count-other":"Tongaanse paʻanga","symbol":"TOP","symbol-alt-narrow":"T$"},"TPE":{"displayName":"Timorese escudo","displayName-count-one":"Timorese escudo","displayName-count-other":"Timorese escudo","symbol":"TPE"},"TRL":{"displayName":"Turkse lire","displayName-count-one":"oude Turkse lira","displayName-count-other":"oude Turkse lira","symbol":"TRL"},"TRY":{"displayName":"Turkse lira","displayName-count-one":"Turkse lira","displayName-count-other":"Turkse lira","symbol":"TRY","symbol-alt-narrow":"₺","symbol-alt-variant":"TL"},"TTD":{"displayName":"Trinidad en Tobago-dollar","displayName-count-one":"Trinidad en Tobago-dollar","displayName-count-other":"Trinidad en Tobago-dollar","symbol":"TTD","symbol-alt-narrow":"$"},"TWD":{"displayName":"Nieuwe Taiwanese dollar","displayName-count-one":"Nieuwe Taiwanese dollar","displayName-count-other":"Nieuwe Taiwanese dollar","symbol":"NT$","symbol-alt-narrow":"NT$"},"TZS":{"displayName":"Tanzaniaanse shilling","displayName-count-one":"Tanzaniaanse shilling","displayName-count-other":"Tanzaniaanse shilling","symbol":"TZS"},"UAH":{"displayName":"Oekraïense hryvnia","displayName-count-one":"Oekraïense hryvnia","displayName-count-other":"Oekraïense hryvnia","symbol":"UAH","symbol-alt-narrow":"₴"},"UAK":{"displayName":"Oekraïense karbovanetz","displayName-count-one":"Oekraïense karbovanetz","displayName-count-other":"Oekraïense karbovanetz","symbol":"UAK"},"UGS":{"displayName":"Oegandese shilling (1966–1987)","displayName-count-one":"Oegandese shilling (1966–1987)","displayName-count-other":"Oegandese shilling (1966–1987)","symbol":"UGS"},"UGX":{"displayName":"Oegandese shilling","displayName-count-one":"Oegandese shilling","displayName-count-other":"Oegandese shilling","symbol":"UGX"},"USD":{"displayName":"Amerikaanse dollar","displayName-count-one":"Amerikaanse dollar","displayName-count-other":"Amerikaanse dollar","symbol":"US$","symbol-alt-narrow":"$"},"USN":{"displayName":"Amerikaanse dollar (volgende dag)","displayName-count-one":"Amerikaanse dollar (volgende dag)","displayName-count-other":"Amerikaanse dollar (volgende dag)","symbol":"USN"},"USS":{"displayName":"Amerikaanse dollar (zelfde dag)","displayName-count-one":"Amerikaanse dollar (zelfde dag)","displayName-count-other":"Amerikaanse dollar (zelfde dag)","symbol":"USS"},"UYI":{"displayName":"Uruguayaanse peso en geïndexeerde eenheden","displayName-count-one":"Uruguayaanse peso en geïndexeerde eenheden","displayName-count-other":"Uruguayaanse peso en geïndexeerde eenheden","symbol":"UYI"},"UYP":{"displayName":"Uruguayaanse peso (1975–1993)","displayName-count-one":"Uruguayaanse peso (1975–1993)","displayName-count-other":"Uruguayaanse peso (1975–1993)","symbol":"UYP"},"UYU":{"displayName":"Uruguayaanse peso","displayName-count-one":"Uruguayaanse peso","displayName-count-other":"Uruguayaanse peso","symbol":"UYU","symbol-alt-narrow":"$"},"UZS":{"displayName":"Oezbeekse sum","displayName-count-one":"Oezbeekse sum","displayName-count-other":"Oezbeekse sum","symbol":"UZS"},"VEB":{"displayName":"Venezolaanse bolivar (1871–2008)","displayName-count-one":"Venezolaanse bolivar (1871–2008)","displayName-count-other":"Venezolaanse bolivar (1871–2008)","symbol":"VEB"},"VEF":{"displayName":"Venezolaanse bolivar","displayName-count-one":"Venezolaanse bolivar","displayName-count-other":"Venezolaanse bolivar","symbol":"VEF","symbol-alt-narrow":"Bs"},"VND":{"displayName":"Vietnamese dong","displayName-count-one":"Vietnamese dong","displayName-count-other":"Vietnamese dong","symbol":"₫","symbol-alt-narrow":"₫"},"VNN":{"displayName":"Vietnamese dong (1978–1985)","displayName-count-one":"Vietnamese dong (1978–1985)","displayName-count-other":"Vietnamese dong (1978–1985)","symbol":"VNN"},"VUV":{"displayName":"Vanuatuaanse vatu","displayName-count-one":"Vanuatuaanse vatu","displayName-count-other":"Vanuatuaanse vatu","symbol":"VUV"},"WST":{"displayName":"Samoaanse tala","displayName-count-one":"Samoaanse tala","displayName-count-other":"Samoaanse tala","symbol":"WST"},"XAF":{"displayName":"CFA-frank","displayName-count-one":"CFA-frank","displayName-count-other":"CFA-frank","symbol":"FCFA"},"XAG":{"displayName":"Zilver","displayName-count-one":"Troy ounce zilver","displayName-count-other":"Troy ounces zilver","symbol":"XAG"},"XAU":{"displayName":"Goud","displayName-count-one":"Troy ounce goud","displayName-count-other":"Troy ounces goud","symbol":"XAU"},"XBA":{"displayName":"Europese samengestelde eenheid","displayName-count-one":"Europese samengestelde eenheid","displayName-count-other":"Europese samengestelde eenheid","symbol":"XBA"},"XBB":{"displayName":"Europese monetaire eenheid","displayName-count-one":"Europese monetaire eenheid","displayName-count-other":"Europese monetaire eenheid","symbol":"XBB"},"XBC":{"displayName":"Europese rekeneenheid (XBC)","displayName-count-one":"Europese rekeneenheid (XBC)","displayName-count-other":"Europese rekeneenheid (XBC)","symbol":"XBC"},"XBD":{"displayName":"Europese rekeneenheid (XBD)","displayName-count-one":"Europese rekeneenheid (XBD)","displayName-count-other":"Europese rekeneenheid (XBD)","symbol":"XBD"},"XCD":{"displayName":"Oost-Caribische dollar","displayName-count-one":"Oost-Caribische dollar","displayName-count-other":"Oost-Caribische dollar","symbol":"EC$","symbol-alt-narrow":"$"},"XDR":{"displayName":"Special Drawing Rights","displayName-count-one":"Special Drawing Rights","displayName-count-other":"Special Drawing Rights","symbol":"XDR"},"XEU":{"displayName":"European Currency Unit","displayName-count-one":"European Currency Unit","displayName-count-other":"European Currency Unit","symbol":"XEU"},"XFO":{"displayName":"Franse gouden franc","displayName-count-one":"Franse gouden franc","displayName-count-other":"Franse gouden franc","symbol":"XFO"},"XFU":{"displayName":"Franse UIC-franc","displayName-count-one":"Franse UIC-franc","displayName-count-other":"Franse UIC-franc","symbol":"XFU"},"XOF":{"displayName":"CFA-franc BCEAO","displayName-count-one":"CFA-franc BCEAO","displayName-count-other":"CFA-franc BCEAO","symbol":"CFA"},"XPD":{"displayName":"Palladium","displayName-count-one":"Troy ounce palladium","displayName-count-other":"Troy ounces palladium","symbol":"XPD"},"XPF":{"displayName":"CFP-frank","displayName-count-one":"CFP-frank","displayName-count-other":"CFP-frank","symbol":"XPF"},"XPT":{"displayName":"Platina","displayName-count-one":"Troy ounce platina","displayName-count-other":"Troy ounces platina","symbol":"XPT"},"XRE":{"displayName":"RINET-fondsen","displayName-count-one":"RINET-fondsen","displayName-count-other":"RINET-fondsen","symbol":"XRE"},"XSU":{"displayName":"Sucre","displayName-count-one":"Sucre","displayName-count-other":"Sucre","symbol":"XSU"},"XTS":{"displayName":"Valutacode voor testdoeleinden","displayName-count-one":"Valutacode voor testdoeleinden","displayName-count-other":"Valutacode voor testdoeleinden","symbol":"XTS"},"XUA":{"displayName":"ADB-rekeneenheid","displayName-count-one":"ADB-rekeneenheid","displayName-count-other":"ADB-rekeneenheid","symbol":"XUA"},"XXX":{"displayName":"onbekende munteenheid","displayName-count-one":"onbekende munteenheid","displayName-count-other":"onbekende munteenheid","symbol":"XXX"},"YDD":{"displayName":"Jemenitische dinar","displayName-count-one":"Jemenitische dinar","displayName-count-other":"Jemenitische dinar","symbol":"YDD"},"YER":{"displayName":"Jemenitische rial","displayName-count-one":"Jemenitische rial","displayName-count-other":"Jemenitische rial","symbol":"YER"},"YUD":{"displayName":"Joegoslavische harde dinar","displayName-count-one":"Joegoslavische harde dinar","displayName-count-other":"Joegoslavische harde dinar","symbol":"YUD"},"YUM":{"displayName":"Joegoslavische noviy-dinar","displayName-count-one":"Joegoslavische noviy-dinar","displayName-count-other":"Joegoslavische noviy-dinar","symbol":"YUM"},"YUN":{"displayName":"Joegoslavische convertibele dinar","displayName-count-one":"Joegoslavische convertibele dinar","displayName-count-other":"Joegoslavische convertibele dinar","symbol":"YUN"},"YUR":{"displayName":"Joegoslavische hervormde dinar (1992–1993)","displayName-count-one":"Joegoslavische hervormde dinar (1992–1993)","displayName-count-other":"Joegoslavische hervormde dinar (1992–1993)","symbol":"YUR"},"ZAL":{"displayName":"Zuid-Afrikaanse rand (financieel)","displayName-count-one":"Zuid-Afrikaanse rand (financieel)","displayName-count-other":"Zuid-Afrikaanse rand (financieel)","symbol":"ZAL"},"ZAR":{"displayName":"Zuid-Afrikaanse rand","displayName-count-one":"Zuid-Afrikaanse rand","displayName-count-other":"Zuid-Afrikaanse rand","symbol":"ZAR","symbol-alt-narrow":"R"},"ZMK":{"displayName":"Zambiaanse kwacha (1968–2012)","displayName-count-one":"Zambiaanse kwacha (1968–2012)","displayName-count-other":"Zambiaanse kwacha (1968–2012)","symbol":"ZMK"},"ZMW":{"displayName":"Zambiaanse kwacha","displayName-count-one":"Zambiaanse kwacha","displayName-count-other":"Zambiaanse kwacha","symbol":"ZMW","symbol-alt-narrow":"ZK"},"ZRN":{"displayName":"Zaïrese nieuwe zaïre","displayName-count-one":"Zaïrese nieuwe zaïre","displayName-count-other":"Zaïrese nieuwe zaïre","symbol":"ZRN"},"ZRZ":{"displayName":"Zaïrese zaïre","displayName-count-one":"Zaïrese zaïre","displayName-count-other":"Zaïrese zaïre","symbol":"ZRZ"},"ZWD":{"displayName":"Zimbabwaanse dollar","displayName-count-one":"Zimbabwaanse dollar","displayName-count-other":"Zimbabwaanse dollar","symbol":"ZWD"},"ZWL":{"displayName":"Zimbabwaanse dollar (2009)","displayName-count-one":"Zimbabwaanse dollar (2009)","displayName-count-other":"Zimbabwaanse dollar (2009)","symbol":"ZWL"},"ZWR":{"displayName":"Zimbabwaanse dollar (2008)","displayName-count-one":"Zimbabwaanse dollar (2008)","displayName-count-other":"Zimbabwaanse dollar (2008)","symbol":"ZWR"}},"defaultNumberingSystem":"latn","otherNumberingSystems":{"native":"latn"},"minimumGroupingDigits":"1","symbols-numberSystem-latn":{"decimal":",","group":".","list":";","percentSign":"%","plusSign":"+","minusSign":"-","exponential":"E","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"NaN","timeSeparator":":"},"decimalFormats-numberSystem-latn":{"standard":"#,##0.###","long":{"decimalFormat":{"1000-count-one":"0 duizend","1000-count-other":"0 duizend","10000-count-one":"00 duizend","10000-count-other":"00 duizend","100000-count-one":"000 duizend","100000-count-other":"000 duizend","1000000-count-one":"0 miljoen","1000000-count-other":"0 miljoen","10000000-count-one":"00 miljoen","10000000-count-other":"00 miljoen","100000000-count-one":"000 miljoen","100000000-count-other":"000 miljoen","1000000000-count-one":"0 miljard","1000000000-count-other":"0 miljard","10000000000-count-one":"00 miljard","10000000000-count-other":"00 miljard","100000000000-count-one":"000 miljard","100000000000-count-other":"000 miljard","1000000000000-count-one":"0 biljoen","1000000000000-count-other":"0 biljoen","10000000000000-count-one":"00 biljoen","10000000000000-count-other":"00 biljoen","100000000000000-count-one":"000 biljoen","100000000000000-count-other":"000 biljoen"}},"short":{"decimalFormat":{"1000-count-one":"0K","1000-count-other":"0K","10000-count-one":"00K","10000-count-other":"00K","100000-count-one":"000K","100000-count-other":"000K","1000000-count-one":"0 mln'.'","1000000-count-other":"0 mln'.'","10000000-count-one":"00 mln'.'","10000000-count-other":"00 mln'.'","100000000-count-one":"000 mln'.'","100000000-count-other":"000 mln'.'","1000000000-count-one":"0 mld'.'","1000000000-count-other":"0 mld'.'","10000000000-count-one":"00 mld'.'","10000000000-count-other":"00 mld'.'","100000000000-count-one":"000 mld'.'","100000000000-count-other":"000 mld'.'","1000000000000-count-one":"0 bln'.'","1000000000000-count-other":"0 bln'.'","10000000000000-count-one":"00 bln'.'","10000000000000-count-other":"00 bln'.'","100000000000000-count-one":"000 bln'.'","100000000000000-count-other":"000 bln'.'"}}},"scientificFormats-numberSystem-latn":{"standard":"#E0"},"percentFormats-numberSystem-latn":{"standard":"#,##0%"},"currencyFormats-numberSystem-latn":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"¤ #,##0.00;¤ -#,##0.00","accounting":"¤ #,##0.00;(¤ #,##0.00)","short":{"standard":{"1000-count-one":"¤ 0K","1000-count-other":"¤ 0K","10000-count-one":"¤ 00K","10000-count-other":"¤ 00K","100000-count-one":"¤ 000K","100000-count-other":"¤ 000K","1000000-count-one":"¤ 0 mln'.'","1000000-count-other":"¤ 0 mln'.'","10000000-count-one":"¤ 00 mln'.'","10000000-count-other":"¤ 00 mln'.'","100000000-count-one":"¤ 000 mln'.'","100000000-count-other":"¤ 000 mln'.'","1000000000-count-one":"¤ 0 mld'.'","1000000000-count-other":"¤ 0 mld'.'","10000000000-count-one":"¤ 00 mld'.'","10000000000-count-other":"¤ 00 mld'.'","100000000000-count-one":"¤ 000 mld'.'","100000000000-count-other":"¤ 000 mld'.'","1000000000000-count-one":"¤ 0 bln'.'","1000000000000-count-other":"¤ 0 bln'.'","10000000000000-count-one":"¤ 00 bln'.'","10000000000000-count-other":"¤ 00 bln'.'","100000000000000-count-one":"¤ 000 bln'.'","100000000000000-count-other":"¤ 000 bln'.'"}},"unitPattern-count-one":"{0} {1}","unitPattern-count-other":"{0} {1}"},"miscPatterns-numberSystem-latn":{"atLeast":"{0}+","range":"{0}-{1}"},"minimalPairs":{"pluralMinimalPairs-count-one":"{0} dag","pluralMinimalPairs-count-other":"{0} dagen","other":"Neem de {0}e afslag rechts."}}},"pl":{"identity":{"version":{"_number":"$Revision: 13705 $","_cldrVersion":"32"},"language":"pl"},"dates":{"calendars":{"gregorian":{"months":{"format":{"abbreviated":{"1":"sty","2":"lut","3":"mar","4":"kwi","5":"maj","6":"cze","7":"lip","8":"sie","9":"wrz","10":"paź","11":"lis","12":"gru"},"narrow":{"1":"s","2":"l","3":"m","4":"k","5":"m","6":"c","7":"l","8":"s","9":"w","10":"p","11":"l","12":"g"},"wide":{"1":"stycznia","2":"lutego","3":"marca","4":"kwietnia","5":"maja","6":"czerwca","7":"lipca","8":"sierpnia","9":"września","10":"października","11":"listopada","12":"grudnia"}},"stand-alone":{"abbreviated":{"1":"sty","2":"lut","3":"mar","4":"kwi","5":"maj","6":"cze","7":"lip","8":"sie","9":"wrz","10":"paź","11":"lis","12":"gru"},"narrow":{"1":"S","2":"L","3":"M","4":"K","5":"M","6":"C","7":"L","8":"S","9":"W","10":"P","11":"L","12":"G"},"wide":{"1":"styczeń","2":"luty","3":"marzec","4":"kwiecień","5":"maj","6":"czerwiec","7":"lipiec","8":"sierpień","9":"wrzesień","10":"październik","11":"listopad","12":"grudzień"}}},"days":{"format":{"abbreviated":{"sun":"niedz.","mon":"pon.","tue":"wt.","wed":"śr.","thu":"czw.","fri":"pt.","sat":"sob."},"narrow":{"sun":"n","mon":"p","tue":"w","wed":"ś","thu":"c","fri":"p","sat":"s"},"short":{"sun":"nie","mon":"pon","tue":"wto","wed":"śro","thu":"czw","fri":"pią","sat":"sob"},"wide":{"sun":"niedziela","mon":"poniedziałek","tue":"wtorek","wed":"środa","thu":"czwartek","fri":"piątek","sat":"sobota"}},"stand-alone":{"abbreviated":{"sun":"niedz.","mon":"pon.","tue":"wt.","wed":"śr.","thu":"czw.","fri":"pt.","sat":"sob."},"narrow":{"sun":"N","mon":"P","tue":"W","wed":"Ś","thu":"C","fri":"P","sat":"S"},"short":{"sun":"nie","mon":"pon","tue":"wto","wed":"śro","thu":"czw","fri":"pią","sat":"sob"},"wide":{"sun":"niedziela","mon":"poniedziałek","tue":"wtorek","wed":"środa","thu":"czwartek","fri":"piątek","sat":"sobota"}}},"quarters":{"format":{"abbreviated":{"1":"I kw.","2":"II kw.","3":"III kw.","4":"IV kw."},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"I kwartał","2":"II kwartał","3":"III kwartał","4":"IV kwartał"}},"stand-alone":{"abbreviated":{"1":"I kw.","2":"II kw.","3":"III kw.","4":"IV kw."},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"I kwartał","2":"II kwartał","3":"III kwartał","4":"IV kwartał"}}},"dayPeriods":{"format":{"abbreviated":{"midnight":"o północy","am":"AM","noon":"w południe","pm":"PM","morning1":"rano","morning2":"przed południem","afternoon1":"po południu","evening1":"wieczorem","night1":"w nocy"},"narrow":{"midnight":"o półn.","am":"a","noon":"w poł.","pm":"p","morning1":"rano","morning2":"przed poł.","afternoon1":"po poł.","evening1":"wiecz.","night1":"w nocy"},"wide":{"midnight":"o północy","am":"AM","noon":"w południe","pm":"PM","morning1":"rano","morning2":"przed południem","afternoon1":"po południu","evening1":"wieczorem","night1":"w nocy"}},"stand-alone":{"abbreviated":{"midnight":"północ","am":"AM","noon":"południe","pm":"PM","morning1":"rano","morning2":"przedpołudnie","afternoon1":"popołudnie","evening1":"wieczór","night1":"noc"},"narrow":{"midnight":"półn.","am":"a","noon":"poł.","pm":"p","morning1":"rano","morning2":"przedpoł.","afternoon1":"popoł.","evening1":"wiecz.","night1":"noc"},"wide":{"midnight":"północ","am":"AM","noon":"południe","pm":"PM","morning1":"rano","morning2":"przedpołudnie","afternoon1":"popołudnie","evening1":"wieczór","night1":"noc"}}},"eras":{"eraNames":{"0":"przed naszą erą","1":"naszej ery","0-alt-variant":"p.n.e.","1-alt-variant":"n.e."},"eraAbbr":{"0":"p.n.e.","1":"n.e.","0-alt-variant":"BCE","1-alt-variant":"CE"},"eraNarrow":{"0":"p.n.e.","1":"n.e.","0-alt-variant":"BCE","1-alt-variant":"CE"}},"dateFormats":{"full":"EEEE, d MMMM y","long":"d MMMM y","medium":"d MMM y","short":"dd.MM.y"},"timeFormats":{"full":"HH:mm:ss zzzz","long":"HH:mm:ss z","medium":"HH:mm:ss","short":"HH:mm"},"dateTimeFormats":{"full":"{1} {0}","long":"{1} {0}","medium":"{1}, {0}","short":"{1}, {0}","availableFormats":{"Bh":"h B","Bhm":"h:mm B","Bhms":"h:mm:ss B","d":"d","E":"ccc","EBhm":"E h:mm B","EBhms":"E h:mm:ss B","Ed":"E, d","Ehm":"E, h:mm a","EHm":"E, HH:mm","Ehms":"E, h:mm:ss a","EHms":"E, HH:mm:ss","Gy":"y G","GyMMM":"MMM y G","GyMMMd":"d MMM y G","GyMMMEd":"E, d MMM y G","GyMMMM":"LLLL y G","GyMMMMd":"d MMMM y G","GyMMMMEd":"E, d MMMM y G","h":"h a","H":"HH","hm":"h:mm a","Hm":"HH:mm","hms":"h:mm:ss a","Hms":"HH:mm:ss","hmsv":"h:mm:ss a v","Hmsv":"HH:mm:ss v","hmv":"h:mm a v","Hmv":"HH:mm v","M":"L","Md":"d.MM","MEd":"E, d.MM","MMM":"LLL","MMMd":"d MMM","MMMEd":"E, d MMM","MMMMd":"d MMMM","MMMMEd":"E, d MMMM","MMMMW-count-one":"MMM, 'tydz'. W","MMMMW-count-few":"MMM, 'tydz'. W","MMMMW-count-many":"MMM, 'tydz'. W","MMMMW-count-other":"MMM, 'tydz'. W","ms":"mm:ss","y":"y","yM":"MM.y","yMd":"d.MM.y","yMEd":"E, d.MM.y","yMMM":"LLL y","yMMMd":"d MMM y","yMMMEd":"E, d MMM y","yMMMM":"LLLL y","yMMMMd":"d MMMM y","yMMMMEd":"E, d MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","yw-count-one":"Y, 'tydz'. w","yw-count-few":"Y, 'tydz'. w","yw-count-many":"Y, 'tydz'. w","yw-count-other":"Y, 'tydz'. w"},"appendItems":{"Day":"{0} ({2}: {1})","Day-Of-Week":"{0} {1}","Era":"{1} {0}","Hour":"{0} ({2}: {1})","Minute":"{0} ({2}: {1})","Month":"{0} ({2}: {1})","Quarter":"{0} ({2}: {1})","Second":"{0} ({2}: {1})","Timezone":"{0} {1}","Week":"{0} ({2}: {1})","Year":"{1} {0}"},"intervalFormats":{"intervalFormatFallback":"{0}–{1}","d":{"d":"d–d"},"h":{"a":"h a–h a","h":"h–h a"},"H":{"H":"HH–HH"},"hm":{"a":"h:mm a–h:mm a","h":"h:mm–h:mm a","m":"h:mm–h:mm a"},"Hm":{"H":"HH:mm–HH:mm","m":"HH:mm–HH:mm"},"hmv":{"a":"h:mm a–h:mm a v","h":"h:mm–h:mm a v","m":"h:mm–h:mm a v"},"Hmv":{"H":"HH:mm–HH:mm v","m":"HH:mm–HH:mm v"},"hv":{"a":"h a – h a v","h":"h–h a v"},"Hv":{"H":"HH–HH v"},"M":{"M":"MM–MM"},"Md":{"d":"dd.MM–dd.MM","M":"dd.MM–dd.MM"},"MEd":{"d":"E, dd.MM–E, dd.MM","M":"E, dd.MM–E, dd.MM"},"MMM":{"M":"LLL–LLL"},"MMMd":{"d":"d–d MMM","M":"d MMM–d MMM"},"MMMEd":{"d":"E, d MMM–E, d MMM","M":"E, d MMM–E, d MMM"},"MMMMd":{"d":"d–d MMMM","M":"d MMMM – d MMMM"},"MMMMEd":{"d":"E, d MMMM – E, d MMMM","M":"E, d MMMM – E, d MMMM"},"y":{"y":"y–y"},"yM":{"M":"MM.y–MM.y","y":"MM.y–MM.y"},"yMd":{"d":"dd–dd.MM.y","M":"dd.MM–dd.MM.y","y":"dd.MM.y–dd.MM.y"},"yMEd":{"d":"E, dd.MM.y–E, dd.MM.y","M":"E, dd.MM.y–E, dd.MM.y","y":"E, dd.MM.y–E, dd.MM.y"},"yMMM":{"M":"LLL–LLL y","y":"LLL y–LLL y"},"yMMMd":{"d":"d–d MMM y","M":"d MMM–d MMM y","y":"d MMM y–d MMM y"},"yMMMEd":{"d":"E, d–E, d MMM y","M":"E, d MMM y–E, d MMM y","y":"E, d MMM y–E, d MMM y"},"yMMMM":{"M":"LLLL–LLLL y","y":"LLLL y–LLLL y"},"yMMMMd":{"d":"d–d MMMM y","M":"d MMMM – d MMMM y","y":"d MMMM y – d MMMM y"},"yMMMMEd":{"d":"E, d – E, d MMMM y","M":"E, d MMMM – E, d MMMM y","y":"E, d MMMM y – E, d MMMM y"}}}}},"fields":{"era":{"displayName":"era"},"era-short":{"displayName":"era"},"era-narrow":{"displayName":"era"},"year":{"displayName":"rok","relative-type--1":"w zeszłym roku","relative-type-0":"w tym roku","relative-type-1":"w przyszłym roku","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} rok","relativeTimePattern-count-few":"za {0} lata","relativeTimePattern-count-many":"za {0} lat","relativeTimePattern-count-other":"za {0} roku"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} rok temu","relativeTimePattern-count-few":"{0} lata temu","relativeTimePattern-count-many":"{0} lat temu","relativeTimePattern-count-other":"{0} roku temu"}},"year-short":{"displayName":"r.","relative-type--1":"w zeszłym roku","relative-type-0":"w tym roku","relative-type-1":"w przyszłym roku","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} rok","relativeTimePattern-count-few":"za {0} lata","relativeTimePattern-count-many":"za {0} lat","relativeTimePattern-count-other":"za {0} roku"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} rok temu","relativeTimePattern-count-few":"{0} lata temu","relativeTimePattern-count-many":"{0} lat temu","relativeTimePattern-count-other":"{0} roku temu"}},"year-narrow":{"displayName":"r.","relative-type--1":"w zeszłym roku","relative-type-0":"w tym roku","relative-type-1":"w przyszłym roku","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} rok","relativeTimePattern-count-few":"za {0} lata","relativeTimePattern-count-many":"za {0} lat","relativeTimePattern-count-other":"za {0} roku"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} rok temu","relativeTimePattern-count-few":"{0} lata temu","relativeTimePattern-count-many":"{0} lat temu","relativeTimePattern-count-other":"{0} roku temu"}},"quarter":{"displayName":"kwartał","relative-type--1":"w zeszłym kwartale","relative-type-0":"w tym kwartale","relative-type-1":"w przyszłym kwartale","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} kwartał","relativeTimePattern-count-few":"za {0} kwartały","relativeTimePattern-count-many":"za {0} kwartałów","relativeTimePattern-count-other":"za {0} kwartału"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} kwartał temu","relativeTimePattern-count-few":"{0} kwartały temu","relativeTimePattern-count-many":"{0} kwartałów temu","relativeTimePattern-count-other":"{0} kwartału temu"}},"quarter-short":{"displayName":"kw.","relative-type--1":"w zeszłym kwartale","relative-type-0":"w tym kwartale","relative-type-1":"w przyszłym kwartale","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} kw.","relativeTimePattern-count-few":"za {0} kw.","relativeTimePattern-count-many":"za {0} kw.","relativeTimePattern-count-other":"za {0} kw."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} kw. temu","relativeTimePattern-count-few":"{0} kw. temu","relativeTimePattern-count-many":"{0} kw. temu","relativeTimePattern-count-other":"{0} kw. temu"}},"quarter-narrow":{"displayName":"kw.","relative-type--1":"w zeszłym kwartale","relative-type-0":"w tym kwartale","relative-type-1":"w przyszłym kwartale","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} kw.","relativeTimePattern-count-few":"za {0} kw.","relativeTimePattern-count-many":"za {0} kw.","relativeTimePattern-count-other":"za {0} kw."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} kw. temu","relativeTimePattern-count-few":"{0} kw. temu","relativeTimePattern-count-many":"{0} kw. temu","relativeTimePattern-count-other":"{0} kw. temu"}},"month":{"displayName":"miesiąc","relative-type--1":"w zeszłym miesiącu","relative-type-0":"w tym miesiącu","relative-type-1":"w przyszłym miesiącu","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} miesiąc","relativeTimePattern-count-few":"za {0} miesiące","relativeTimePattern-count-many":"za {0} miesięcy","relativeTimePattern-count-other":"za {0} miesiąca"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} miesiąc temu","relativeTimePattern-count-few":"{0} miesiące temu","relativeTimePattern-count-many":"{0} miesięcy temu","relativeTimePattern-count-other":"{0} miesiąca temu"}},"month-short":{"displayName":"mies.","relative-type--1":"w zeszłym miesiącu","relative-type-0":"w tym miesiącu","relative-type-1":"w przyszłym miesiącu","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} mies.","relativeTimePattern-count-few":"za {0} mies.","relativeTimePattern-count-many":"za {0} mies.","relativeTimePattern-count-other":"za {0} mies."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} mies. temu","relativeTimePattern-count-few":"{0} mies. temu","relativeTimePattern-count-many":"{0} mies. temu","relativeTimePattern-count-other":"{0} mies. temu"}},"month-narrow":{"displayName":"mc","relative-type--1":"w zeszłym miesiącu","relative-type-0":"w tym miesiącu","relative-type-1":"w przyszłym miesiącu","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} mies.","relativeTimePattern-count-few":"za {0} mies.","relativeTimePattern-count-many":"za {0} mies.","relativeTimePattern-count-other":"za {0} mies."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} mies. temu","relativeTimePattern-count-few":"{0} mies. temu","relativeTimePattern-count-many":"{0} mies. temu","relativeTimePattern-count-other":"{0} mies. temu"}},"week":{"displayName":"tydzień","relative-type--1":"w zeszłym tygodniu","relative-type-0":"w tym tygodniu","relative-type-1":"w przyszłym tygodniu","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} tydzień","relativeTimePattern-count-few":"za {0} tygodnie","relativeTimePattern-count-many":"za {0} tygodni","relativeTimePattern-count-other":"za {0} tygodnia"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} tydzień temu","relativeTimePattern-count-few":"{0} tygodnie temu","relativeTimePattern-count-many":"{0} tygodni temu","relativeTimePattern-count-other":"{0} tygodnia temu"},"relativePeriod":"tydzień {0}"},"week-short":{"displayName":"tydz.","relative-type--1":"w zeszłym tygodniu","relative-type-0":"w tym tygodniu","relative-type-1":"w przyszłym tygodniu","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} tydz.","relativeTimePattern-count-few":"za {0} tyg.","relativeTimePattern-count-many":"za {0} tyg.","relativeTimePattern-count-other":"za {0} tyg."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} tydz. temu","relativeTimePattern-count-few":"{0} tyg. temu","relativeTimePattern-count-many":"{0} tyg. temu","relativeTimePattern-count-other":"{0} tyg. temu"},"relativePeriod":"tydzień {0}"},"week-narrow":{"displayName":"tydz.","relative-type--1":"w zeszłym tygodniu","relative-type-0":"w tym tygodniu","relative-type-1":"w przyszłym tygodniu","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} tydz.","relativeTimePattern-count-few":"za {0} tyg.","relativeTimePattern-count-many":"za {0} tyg.","relativeTimePattern-count-other":"za {0} tyg."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} tydz. temu","relativeTimePattern-count-few":"{0} tyg. temu","relativeTimePattern-count-many":"{0} tyg. temu","relativeTimePattern-count-other":"{0} tyg. temu"},"relativePeriod":"tydzień {0}"},"weekOfMonth":{"displayName":"tydzień miesiąca"},"weekOfMonth-short":{"displayName":"tydz. mies."},"weekOfMonth-narrow":{"displayName":"tydz. mies."},"day":{"displayName":"dzień","relative-type--2":"przedwczoraj","relative-type--1":"wczoraj","relative-type-0":"dzisiaj","relative-type-1":"jutro","relative-type-2":"pojutrze","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} dzień","relativeTimePattern-count-few":"za {0} dni","relativeTimePattern-count-many":"za {0} dni","relativeTimePattern-count-other":"za {0} dnia"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} dzień temu","relativeTimePattern-count-few":"{0} dni temu","relativeTimePattern-count-many":"{0} dni temu","relativeTimePattern-count-other":"{0} dnia temu"}},"day-short":{"displayName":"dzień","relative-type--2":"przedwczoraj","relative-type--1":"wczoraj","relative-type-0":"dzisiaj","relative-type-1":"jutro","relative-type-2":"pojutrze","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} dzień","relativeTimePattern-count-few":"za {0} dni","relativeTimePattern-count-many":"za {0} dni","relativeTimePattern-count-other":"za {0} dnia"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} dzień temu","relativeTimePattern-count-few":"{0} dni temu","relativeTimePattern-count-many":"{0} dni temu","relativeTimePattern-count-other":"{0} dnia temu"}},"day-narrow":{"displayName":"dzień","relative-type--2":"przedwczoraj","relative-type--1":"wczoraj","relative-type-0":"dzisiaj","relative-type-1":"jutro","relative-type-2":"pojutrze","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} dzień","relativeTimePattern-count-few":"za {0} dni","relativeTimePattern-count-many":"za {0} dni","relativeTimePattern-count-other":"za {0} dnia"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} dzień temu","relativeTimePattern-count-few":"{0} dni temu","relativeTimePattern-count-many":"{0} dni temu","relativeTimePattern-count-other":"{0} dnia temu"}},"dayOfYear":{"displayName":"dzień roku"},"dayOfYear-short":{"displayName":"dz. roku"},"dayOfYear-narrow":{"displayName":"dz. r."},"weekday":{"displayName":"dzień tygodnia"},"weekday-short":{"displayName":"dzień tyg."},"weekday-narrow":{"displayName":"dzień tyg."},"weekdayOfMonth":{"displayName":"dzień miesiąca"},"weekdayOfMonth-short":{"displayName":"dzień mies."},"weekdayOfMonth-narrow":{"displayName":"dzień mies."},"sun":{"relative-type--1":"w zeszłą niedzielę","relative-type-0":"w tę niedzielę","relative-type-1":"w przyszłą niedzielę","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} niedzielę","relativeTimePattern-count-few":"za {0} niedziele","relativeTimePattern-count-many":"za {0} niedziel","relativeTimePattern-count-other":"za {0} niedzieli"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} niedzielę temu","relativeTimePattern-count-few":"{0} niedziele temu","relativeTimePattern-count-many":"{0} niedziel temu","relativeTimePattern-count-other":"{0} niedzieli temu"}},"sun-short":{"relative-type--1":"w zeszłą niedzielę","relative-type-0":"w tę niedzielę","relative-type-1":"w przyszłą niedzielę","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} niedzielę","relativeTimePattern-count-few":"za {0} niedziele","relativeTimePattern-count-many":"za {0} niedziel","relativeTimePattern-count-other":"za {0} niedzieli"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} niedzielę temu","relativeTimePattern-count-few":"{0} niedziele temu","relativeTimePattern-count-many":"{0} niedziel temu","relativeTimePattern-count-other":"{0} niedzieli temu"}},"sun-narrow":{"relative-type--1":"w zeszłą niedzielę","relative-type-0":"w tę niedzielę","relative-type-1":"w przyszłą niedzielę","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} niedzielę","relativeTimePattern-count-few":"za {0} niedziele","relativeTimePattern-count-many":"za {0} niedziel","relativeTimePattern-count-other":"za {0} niedzieli"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} niedzielę temu","relativeTimePattern-count-few":"{0} niedziele temu","relativeTimePattern-count-many":"{0} niedziel temu","relativeTimePattern-count-other":"{0} niedzieli temu"}},"mon":{"relative-type--1":"w zeszły poniedziałek","relative-type-0":"w ten poniedziałek","relative-type-1":"w przyszły poniedziałek","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} poniedziałek","relativeTimePattern-count-few":"za {0} poniedziałki","relativeTimePattern-count-many":"za {0} poniedziałków","relativeTimePattern-count-other":"za {0} poniedziałku"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} poniedziałek temu","relativeTimePattern-count-few":"{0} poniedziałki temu","relativeTimePattern-count-many":"{0} poniedziałków temu","relativeTimePattern-count-other":"{0} poniedziałku temu"}},"mon-short":{"relative-type--1":"w zeszły poniedziałek","relative-type-0":"w ten poniedziałek","relative-type-1":"w przyszły poniedziałek","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} poniedziałek","relativeTimePattern-count-few":"za {0} poniedziałki","relativeTimePattern-count-many":"za {0} poniedziałków","relativeTimePattern-count-other":"za {0} poniedziałku"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} poniedziałek temu","relativeTimePattern-count-few":"{0} poniedziałki temu","relativeTimePattern-count-many":"{0} poniedziałków temu","relativeTimePattern-count-other":"{0} poniedziałku temu"}},"mon-narrow":{"relative-type--1":"w zeszły poniedziałek","relative-type-0":"w ten poniedziałek","relative-type-1":"w przyszły poniedziałek","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} poniedziałek","relativeTimePattern-count-few":"za {0} poniedziałki","relativeTimePattern-count-many":"za {0} poniedziałków","relativeTimePattern-count-other":"za {0} poniedziałku"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} poniedziałek temu","relativeTimePattern-count-few":"{0} poniedziałki temu","relativeTimePattern-count-many":"{0} poniedziałków temu","relativeTimePattern-count-other":"{0} poniedziałku temu"}},"tue":{"relative-type--1":"w zeszły wtorek","relative-type-0":"w ten wtorek","relative-type-1":"w przyszły wtorek","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} wtorek","relativeTimePattern-count-few":"za {0} wtorki","relativeTimePattern-count-many":"za {0} wtorków","relativeTimePattern-count-other":"za {0} wtorku"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} wtorek temu","relativeTimePattern-count-few":"{0} wtorki temu","relativeTimePattern-count-many":"{0} wtorków temu","relativeTimePattern-count-other":"{0} wtorku temu"}},"tue-short":{"relative-type--1":"w zeszły wtorek","relative-type-0":"w ten wtorek","relative-type-1":"w przyszły wtorek","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} wtorek","relativeTimePattern-count-few":"za {0} wtorki","relativeTimePattern-count-many":"za {0} wtorków","relativeTimePattern-count-other":"za {0} wtorku"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} wtorek temu","relativeTimePattern-count-few":"{0} wtorki temu","relativeTimePattern-count-many":"{0} wtorków temu","relativeTimePattern-count-other":"{0} wtorku temu"}},"tue-narrow":{"relative-type--1":"w zeszły wtorek","relative-type-0":"w ten wtorek","relative-type-1":"w przyszły wtorek","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} wtorek","relativeTimePattern-count-few":"za {0} wtorki","relativeTimePattern-count-many":"za {0} wtorków","relativeTimePattern-count-other":"za {0} wtorku"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} wtorek temu","relativeTimePattern-count-few":"{0} wtorki temu","relativeTimePattern-count-many":"{0} wtorków temu","relativeTimePattern-count-other":"{0} wtorku temu"}},"wed":{"relative-type--1":"w zeszłą środę","relative-type-0":"w tę środę","relative-type-1":"w przyszłą środę","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} środę","relativeTimePattern-count-few":"za {0} środy","relativeTimePattern-count-many":"za {0} śród","relativeTimePattern-count-other":"za {0} środy"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} środę temu","relativeTimePattern-count-few":"{0} środy temu","relativeTimePattern-count-many":"{0} śród temu","relativeTimePattern-count-other":"{0} środy temu"}},"wed-short":{"relative-type--1":"w zeszłą środę","relative-type-0":"w tę środę","relative-type-1":"w przyszłą środę","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} środę","relativeTimePattern-count-few":"za {0} środy","relativeTimePattern-count-many":"za {0} śród","relativeTimePattern-count-other":"za {0} środy"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} środę temu","relativeTimePattern-count-few":"{0} środy temu","relativeTimePattern-count-many":"{0} śród temu","relativeTimePattern-count-other":"{0} środy temu"}},"wed-narrow":{"relative-type--1":"w zeszłą środę","relative-type-0":"w tę środę","relative-type-1":"w przyszłą środę","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} środę","relativeTimePattern-count-few":"za {0} środy","relativeTimePattern-count-many":"za {0} śród","relativeTimePattern-count-other":"za {0} środy"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} środę temu","relativeTimePattern-count-few":"{0} środy temu","relativeTimePattern-count-many":"{0} śród temu","relativeTimePattern-count-other":"{0} środy temu"}},"thu":{"relative-type--1":"w zeszły czwartek","relative-type-0":"w ten czwartek","relative-type-1":"w przyszły czwartek","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} czwartek","relativeTimePattern-count-few":"za {0} czwartki","relativeTimePattern-count-many":"za {0} czwartków","relativeTimePattern-count-other":"za {0} czwartku"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} czwartek temu","relativeTimePattern-count-few":"{0} czwartki temu","relativeTimePattern-count-many":"{0} czwartków temu","relativeTimePattern-count-other":"{0} czwartku temu"}},"thu-short":{"relative-type--1":"w zeszły czwartek","relative-type-0":"w ten czwartek","relative-type-1":"w przyszły czwartek","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} czwartek","relativeTimePattern-count-few":"za {0} czwartki","relativeTimePattern-count-many":"za {0} czwartków","relativeTimePattern-count-other":"za {0} czwartku"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} czwartek temu","relativeTimePattern-count-few":"{0} czwartki temu","relativeTimePattern-count-many":"{0} czwartków temu","relativeTimePattern-count-other":"{0} czwartku temu"}},"thu-narrow":{"relative-type--1":"w zeszły czwartek","relative-type-0":"w ten czwartek","relative-type-1":"w przyszły czwartek","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} czwartek","relativeTimePattern-count-few":"za {0} czwartki","relativeTimePattern-count-many":"za {0} czwartków","relativeTimePattern-count-other":"za {0} czwartku"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} czwartek temu","relativeTimePattern-count-few":"{0} czwartki temu","relativeTimePattern-count-many":"{0} czwartków temu","relativeTimePattern-count-other":"{0} czwartku temu"}},"fri":{"relative-type--1":"w zeszły piątek","relative-type-0":"w ten piątek","relative-type-1":"w przyszły piątek","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} piątek","relativeTimePattern-count-few":"za {0} piątki","relativeTimePattern-count-many":"za {0} piątków","relativeTimePattern-count-other":"za {0} piątku"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} piątek temu","relativeTimePattern-count-few":"{0} piątki temu","relativeTimePattern-count-many":"{0} piątków temu","relativeTimePattern-count-other":"{0} piątku temu"}},"fri-short":{"relative-type--1":"w zeszły piątek","relative-type-0":"w ten piątek","relative-type-1":"w przyszły piątek","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} piątek","relativeTimePattern-count-few":"za {0} piątki","relativeTimePattern-count-many":"za {0} piątków","relativeTimePattern-count-other":"za {0} piątku"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} piątek temu","relativeTimePattern-count-few":"{0} piątki temu","relativeTimePattern-count-many":"{0} piątków temu","relativeTimePattern-count-other":"{0} piątku temu"}},"fri-narrow":{"relative-type--1":"w zeszły piątek","relative-type-0":"w ten piątek","relative-type-1":"w przyszły piątek","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} piątek","relativeTimePattern-count-few":"za {0} piątki","relativeTimePattern-count-many":"za {0} piątków","relativeTimePattern-count-other":"za {0} piątku"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} piątek temu","relativeTimePattern-count-few":"{0} piątki temu","relativeTimePattern-count-many":"{0} piątków temu","relativeTimePattern-count-other":"{0} piątku temu"}},"sat":{"relative-type--1":"w zeszłą sobotę","relative-type-0":"w tę sobotę","relative-type-1":"w przyszłą sobotę","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} sobotę","relativeTimePattern-count-few":"za {0} soboty","relativeTimePattern-count-many":"za {0} sobót","relativeTimePattern-count-other":"za {0} soboty"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} sobotę temu","relativeTimePattern-count-few":"{0} soboty temu","relativeTimePattern-count-many":"{0} sobót temu","relativeTimePattern-count-other":"{0} soboty temu"}},"sat-short":{"relative-type--1":"w zeszłą sobotę","relative-type-0":"w tę sobotę","relative-type-1":"w przyszłą sobotę","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} sobotę","relativeTimePattern-count-few":"za {0} soboty","relativeTimePattern-count-many":"za {0} sobót","relativeTimePattern-count-other":"za {0} soboty"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} sobotę temu","relativeTimePattern-count-few":"{0} soboty temu","relativeTimePattern-count-many":"{0} sobót temu","relativeTimePattern-count-other":"{0} soboty temu"}},"sat-narrow":{"relative-type--1":"w zeszłą sobotę","relative-type-0":"w tę sobotę","relative-type-1":"w przyszłą sobotę","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} sobotę","relativeTimePattern-count-few":"za {0} soboty","relativeTimePattern-count-many":"za {0} sobót","relativeTimePattern-count-other":"za {0} soboty"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} sobotę temu","relativeTimePattern-count-few":"{0} soboty temu","relativeTimePattern-count-many":"{0} sobót temu","relativeTimePattern-count-other":"{0} soboty temu"}},"dayperiod-short":{"displayName":"rano / po południu / wieczorem"},"dayperiod":{"displayName":"rano / po południu / wieczorem"},"dayperiod-narrow":{"displayName":"rano / po poł. / wiecz."},"hour":{"displayName":"godzina","relative-type-0":"ta godzina","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} godzinę","relativeTimePattern-count-few":"za {0} godziny","relativeTimePattern-count-many":"za {0} godzin","relativeTimePattern-count-other":"za {0} godziny"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} godzinę temu","relativeTimePattern-count-few":"{0} godziny temu","relativeTimePattern-count-many":"{0} godzin temu","relativeTimePattern-count-other":"{0} godziny temu"}},"hour-short":{"displayName":"godz.","relative-type-0":"ta godzina","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} godz.","relativeTimePattern-count-few":"za {0} godz.","relativeTimePattern-count-many":"za {0} godz.","relativeTimePattern-count-other":"za {0} godz."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} godz. temu","relativeTimePattern-count-few":"{0} godz. temu","relativeTimePattern-count-many":"{0} godz. temu","relativeTimePattern-count-other":"{0} godz. temu"}},"hour-narrow":{"displayName":"g.","relative-type-0":"ta godzina","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} g.","relativeTimePattern-count-few":"za {0} g.","relativeTimePattern-count-many":"za {0} g.","relativeTimePattern-count-other":"za {0} g."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} g. temu","relativeTimePattern-count-few":"{0} g. temu","relativeTimePattern-count-many":"{0} g. temu","relativeTimePattern-count-other":"{0} g. temu"}},"minute":{"displayName":"minuta","relative-type-0":"ta minuta","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} minutę","relativeTimePattern-count-few":"za {0} minuty","relativeTimePattern-count-many":"za {0} minut","relativeTimePattern-count-other":"za {0} minuty"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} minutę temu","relativeTimePattern-count-few":"{0} minuty temu","relativeTimePattern-count-many":"{0} minut temu","relativeTimePattern-count-other":"{0} minuty temu"}},"minute-short":{"displayName":"min","relative-type-0":"ta minuta","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} min","relativeTimePattern-count-few":"za {0} min","relativeTimePattern-count-many":"za {0} min","relativeTimePattern-count-other":"za {0} min"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} min temu","relativeTimePattern-count-few":"{0} min temu","relativeTimePattern-count-many":"{0} min temu","relativeTimePattern-count-other":"{0} min temu"}},"minute-narrow":{"displayName":"min","relative-type-0":"ta minuta","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} min","relativeTimePattern-count-few":"za {0} min","relativeTimePattern-count-many":"za {0} min","relativeTimePattern-count-other":"za {0} min"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} min temu","relativeTimePattern-count-few":"{0} min temu","relativeTimePattern-count-many":"{0} min temu","relativeTimePattern-count-other":"{0} min temu"}},"second":{"displayName":"sekunda","relative-type-0":"teraz","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} sekundę","relativeTimePattern-count-few":"za {0} sekundy","relativeTimePattern-count-many":"za {0} sekund","relativeTimePattern-count-other":"za {0} sekundy"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} sekundę temu","relativeTimePattern-count-few":"{0} sekundy temu","relativeTimePattern-count-many":"{0} sekund temu","relativeTimePattern-count-other":"{0} sekundy temu"}},"second-short":{"displayName":"sek.","relative-type-0":"teraz","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} sek.","relativeTimePattern-count-few":"za {0} sek.","relativeTimePattern-count-many":"za {0} sek.","relativeTimePattern-count-other":"za {0} sek."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} sek. temu","relativeTimePattern-count-few":"{0} sek. temu","relativeTimePattern-count-many":"{0} sek. temu","relativeTimePattern-count-other":"{0} sek. temu"}},"second-narrow":{"displayName":"s","relative-type-0":"teraz","relativeTime-type-future":{"relativeTimePattern-count-one":"za {0} s","relativeTimePattern-count-few":"za {0} s","relativeTimePattern-count-many":"za {0} s","relativeTimePattern-count-other":"za {0} s"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} s temu","relativeTimePattern-count-few":"{0} s temu","relativeTimePattern-count-many":"{0} s temu","relativeTimePattern-count-other":"{0} s temu"}},"zone":{"displayName":"strefa czasowa"},"zone-short":{"displayName":"str. czasowa"},"zone-narrow":{"displayName":"str. czas."}}},"numbers":{"currencies":{"ADP":{"displayName":"peseta andorska","displayName-count-one":"peseta andorska","displayName-count-few":"pesety andorskie","displayName-count-many":"peset andorskich","displayName-count-other":"peseta andorska","symbol":"ADP"},"AED":{"displayName":"dirham arabski","displayName-count-one":"dirham arabski","displayName-count-few":"dirhamy arabskie","displayName-count-many":"dirhamów arabskich","displayName-count-other":"dirhama arabskiego","symbol":"AED"},"AFA":{"displayName":"afgani (1927–2002)","displayName-count-one":"afgani (1927–2002)","displayName-count-few":"afgani (1927–2002)","displayName-count-many":"afgani (1927–2002)","displayName-count-other":"afgani (1927–2002)","symbol":"AFA"},"AFN":{"displayName":"afgani","displayName-count-one":"afgani","displayName-count-few":"afgani","displayName-count-many":"afgani","displayName-count-other":"afgani","symbol":"AFN"},"ALK":{"displayName":"ALK","symbol":"ALK"},"ALL":{"displayName":"lek albański","displayName-count-one":"lek albański","displayName-count-few":"leki albańskie","displayName-count-many":"leków albańskich","displayName-count-other":"leka albańskiego","symbol":"ALL"},"AMD":{"displayName":"dram armeński","displayName-count-one":"dram ormiański","displayName-count-few":"dramy armeńskie","displayName-count-many":"dramów armeńskich","displayName-count-other":"dramy ormiańskiej","symbol":"AMD"},"ANG":{"displayName":"gulden antylski","displayName-count-one":"gulden antylski","displayName-count-few":"guldeny antylskie","displayName-count-many":"guldenów antylskich","displayName-count-other":"guldena antylskiego","symbol":"ANG"},"AOA":{"displayName":"kwanza angolańska","displayName-count-one":"kwanza angolańska","displayName-count-few":"kwanzy angolańskie","displayName-count-many":"kwanz angolańskich","displayName-count-other":"kwanzy angolańskiej","symbol":"AOA","symbol-alt-narrow":"Kz"},"AOK":{"displayName":"kwanza angolańska (1977–1990)","displayName-count-one":"kwanza angolańska (1977–1990)","displayName-count-few":"kwanzy angolańskie (1977–1990)","displayName-count-many":"kwanz angolańskich (1977–1990)","displayName-count-other":"kwanza angolańska (1977–1990)","symbol":"AOK"},"AON":{"displayName":"nowa kwanza angolańska (1990–2000)","displayName-count-one":"nowa kwanza angolańska (1990–2000)","displayName-count-few":"nowe kwanzy angolańskie (1990–2000)","displayName-count-many":"nowych kwanz angolańskich (1990–2000)","displayName-count-other":"nowa kwanza angolańska (1990–2000)","symbol":"AON"},"AOR":{"displayName":"kwanza angolańska Reajustado (1995–1999)","displayName-count-one":"kwanza angolańska Reajustado (1995–1999)","displayName-count-few":"kwanzy angolańskie Reajustado (1995–1999)","displayName-count-many":"kwanz angolańskich Reajustado (1995–1999)","displayName-count-other":"kwanza angolańska Reajustado (1995–1999)","symbol":"AOR"},"ARA":{"displayName":"austral argentyński","symbol":"ARA"},"ARL":{"displayName":"ARL","symbol":"ARL"},"ARM":{"displayName":"ARM","symbol":"ARM"},"ARP":{"displayName":"peso argentyńskie (1983–1985)","symbol":"ARP"},"ARS":{"displayName":"peso argentyńskie","displayName-count-one":"peso argentyńskie","displayName-count-few":"pesos argentyńskie","displayName-count-many":"pesos argentyńskich","displayName-count-other":"peso argentyńskiego","symbol":"ARS","symbol-alt-narrow":"$"},"ATS":{"displayName":"szyling austriacki","symbol":"ATS"},"AUD":{"displayName":"dolar australijski","displayName-count-one":"dolar australijski","displayName-count-few":"dolary australijskie","displayName-count-many":"dolarów australijskich","displayName-count-other":"dolara australijskiego","symbol":"AUD","symbol-alt-narrow":"$"},"AWG":{"displayName":"florin arubański","displayName-count-one":"florin arubański","displayName-count-few":"floriny arubańskie","displayName-count-many":"florinów arubańskich","displayName-count-other":"florina arubańskiego","symbol":"AWG"},"AZM":{"displayName":"manat azerbejdżański","displayName-count-one":"manat azerbejdżański","displayName-count-few":"manat azerbejdżański","displayName-count-many":"manat azerbejdżański","displayName-count-other":"manat azerbejdżański","symbol":"AZM"},"AZN":{"displayName":"manat azerski","displayName-count-one":"manat azerski","displayName-count-few":"manaty azerskie","displayName-count-many":"manatów azerskich","displayName-count-other":"manata azerskiego","symbol":"AZN"},"BAD":{"displayName":"dinar Bośni i Hercegowiny","symbol":"BAD"},"BAM":{"displayName":"marka zamienna Bośni i Hercegowiny","displayName-count-one":"marka zamienna Bośni i Hercegowiny","displayName-count-few":"marki zamienne Bośni i Hercegowiny","displayName-count-many":"marek zamiennych Bośni i Hercegowiny","displayName-count-other":"marki zamiennej Bośni i Hercegowiny","symbol":"BAM","symbol-alt-narrow":"KM"},"BAN":{"displayName":"BAN","symbol":"BAN"},"BBD":{"displayName":"dolar Barbadosu","displayName-count-one":"dolar Barbadosu","displayName-count-few":"dolary Barbadosu","displayName-count-many":"dolarów Barbadosu","displayName-count-other":"dolara Barbadosu","symbol":"BBD","symbol-alt-narrow":"$"},"BDT":{"displayName":"taka bengalska","displayName-count-one":"taka bengalska","displayName-count-few":"taka bengalskie","displayName-count-many":"taka bengalskich","displayName-count-other":"taka bengalskiej","symbol":"BDT","symbol-alt-narrow":"৳"},"BEC":{"displayName":"frank belgijski (zamienny)","displayName-count-one":"frank belgijski (wymienialny)","displayName-count-few":"franki belgijskie (wymienialne)","displayName-count-many":"franków belgijskich (wymienialnych)","displayName-count-other":"frank belgijski (zamienny)","symbol":"BEC"},"BEF":{"displayName":"frank belgijski","symbol":"BEF"},"BEL":{"displayName":"frank belgijski (finansowy)","symbol":"BEL"},"BGL":{"displayName":"lew bułgarski wymienny","displayName-count-one":"lew bułgarski wymienny","displayName-count-few":"lewy bułgarskie wymienne","displayName-count-many":"lewów bułgarskich wymiennych","displayName-count-other":"lewa bułgarskiego wymiennego","symbol":"BGL"},"BGM":{"displayName":"lew bułgarski socjalistyczny","displayName-count-one":"lew bułgarski socjalistyczny","displayName-count-few":"lewy bułgarskie socjalistyczne","displayName-count-many":"lewów bułgarskich socjalistycznych","displayName-count-other":"lewa bułgarskiego socjalistycznego","symbol":"BGM"},"BGN":{"displayName":"lew bułgarski","displayName-count-one":"lew bułgarski","displayName-count-few":"lewy bułgarskie","displayName-count-many":"lewów bułgarskich","displayName-count-other":"lewa bułgarskiego","symbol":"BGN"},"BGO":{"displayName":"lew bułgarski (1879–1952)","displayName-count-one":"lew bułgarski (1879–1952)","displayName-count-few":"lewy bułgarskie (1879–1952)","displayName-count-many":"lewów bułgarskich (1879–1952)","displayName-count-other":"lewa bułgarskiego (1879–1952)","symbol":"BGO"},"BHD":{"displayName":"dinar bahrański","displayName-count-one":"dinar bahrański","displayName-count-few":"dinary bahrańskie","displayName-count-many":"dinarów bahrańskich","displayName-count-other":"dinara bahrańskiego","symbol":"BHD"},"BIF":{"displayName":"frank burundyjski","displayName-count-one":"frank burundyjski","displayName-count-few":"franki burundyjskie","displayName-count-many":"franków burundyjskich","displayName-count-other":"franka burundyjskiego","symbol":"BIF"},"BMD":{"displayName":"dolar bermudzki","displayName-count-one":"dolar bermudzki","displayName-count-few":"dolary bermudzkie","displayName-count-many":"dolarów bermudzkich","displayName-count-other":"dolara bermudzkiego","symbol":"BMD","symbol-alt-narrow":"$"},"BND":{"displayName":"dolar brunejski","displayName-count-one":"dolar brunejski","displayName-count-few":"dolary brunejskie","displayName-count-many":"dolarów brunejskich","displayName-count-other":"dolara brunejskiego","symbol":"BND","symbol-alt-narrow":"$"},"BOB":{"displayName":"boliviano","displayName-count-one":"boliviano","displayName-count-few":"boliviano","displayName-count-many":"boliviano","displayName-count-other":"boliviano","symbol":"BOB","symbol-alt-narrow":"Bs"},"BOL":{"displayName":"BOL","symbol":"BOL"},"BOP":{"displayName":"peso boliwijskie","symbol":"BOP"},"BOV":{"displayName":"mvdol boliwijski","symbol":"BOV"},"BRB":{"displayName":"cruzeiro novo brazylijskie (1967–1986)","symbol":"BRB"},"BRC":{"displayName":"cruzado brazylijskie","symbol":"BRC"},"BRE":{"displayName":"cruzeiro brazylijskie (1990–1993)","symbol":"BRE"},"BRL":{"displayName":"real brazylijski","displayName-count-one":"real brazylijski","displayName-count-few":"reale brazylijskie","displayName-count-many":"reali brazylijskich","displayName-count-other":"reala brazylijskiego","symbol":"R$","symbol-alt-narrow":"R$"},"BRN":{"displayName":"nowe cruzado brazylijskie","symbol":"BRN"},"BRR":{"displayName":"cruzeiro brazylijskie","symbol":"BRR"},"BRZ":{"displayName":"BRZ","symbol":"BRZ"},"BSD":{"displayName":"dolar bahamski","displayName-count-one":"dolar bahamski","displayName-count-few":"dolary bahamskie","displayName-count-many":"dolarów bahamskich","displayName-count-other":"dolara bahamskiego","symbol":"BSD","symbol-alt-narrow":"$"},"BTN":{"displayName":"ngultrum bhutański","displayName-count-one":"ngultrum bhutański","displayName-count-few":"ngultrum bhutańskie","displayName-count-many":"ngultrum bhutańskich","displayName-count-other":"ngultrum bhutańskiego","symbol":"BTN"},"BUK":{"displayName":"kyat birmański","symbol":"BUK"},"BWP":{"displayName":"pula botswańska","displayName-count-one":"pula botswańska","displayName-count-few":"pule botswańskie","displayName-count-many":"pul botswańskich","displayName-count-other":"puli botswańskiej","symbol":"BWP","symbol-alt-narrow":"P"},"BYB":{"displayName":"rubel białoruski (1994–1999)","symbol":"BYB"},"BYN":{"displayName":"rubel białoruski","displayName-count-one":"rubel białoruski","displayName-count-few":"ruble białoruskie","displayName-count-many":"rubli białoruskich","displayName-count-other":"rubla białoruskiego","symbol":"BYN","symbol-alt-narrow":"р."},"BYR":{"displayName":"rubel białoruski (2000–2016)","displayName-count-one":"rubel białoruski (2000–2016)","displayName-count-few":"ruble białoruskie (2000–2016)","displayName-count-many":"rubli białoruskich (2000–2016)","displayName-count-other":"rubla białoruskiego (2000–2016)","symbol":"BYR"},"BZD":{"displayName":"dolar belizeński","displayName-count-one":"dolar belizeński","displayName-count-few":"dolary belizeńskie","displayName-count-many":"dolarów belizeńskich","displayName-count-other":"dolara belizeńskiego","symbol":"BZD","symbol-alt-narrow":"$"},"CAD":{"displayName":"dolar kanadyjski","displayName-count-one":"dolar kanadyjski","displayName-count-few":"dolary kanadyjskie","displayName-count-many":"dolarów kanadyjskich","displayName-count-other":"dolara kanadyjskiego","symbol":"CAD","symbol-alt-narrow":"$"},"CDF":{"displayName":"frank kongijski","displayName-count-one":"frank kongijski","displayName-count-few":"franki kongijskie","displayName-count-many":"franków kongijskich","displayName-count-other":"franka kongijskiego","symbol":"CDF"},"CHE":{"displayName":"CHE","symbol":"CHE"},"CHF":{"displayName":"frank szwajcarski","displayName-count-one":"frank szwajcarski","displayName-count-few":"franki szwajcarskie","displayName-count-many":"franków szwajcarskich","displayName-count-other":"franka szwajcarskiego","symbol":"CHF"},"CHW":{"displayName":"CHW","symbol":"CHW"},"CLE":{"displayName":"CLE","symbol":"CLE"},"CLF":{"displayName":"CLF","symbol":"CLF"},"CLP":{"displayName":"peso chilijskie","displayName-count-one":"peso chilijskie","displayName-count-few":"pesos chilijskie","displayName-count-many":"pesos chilijskich","displayName-count-other":"peso chilijskiego","symbol":"CLP","symbol-alt-narrow":"$"},"CNH":{"displayName":"juan chiński (rynek zewnętrzny)","displayName-count-one":"juan chiński (rynek zewnętrzny)","displayName-count-few":"juany chińskie (rynek zewnętrzny)","displayName-count-many":"juanów chińskich (rynek zewnętrzny)","displayName-count-other":"juana chińskiego (rynek zewnętrzny)","symbol":"CNH"},"CNX":{"displayName":"CNX","symbol":"CNX"},"CNY":{"displayName":"juan chiński","displayName-count-one":"juan chiński","displayName-count-few":"juany chińskie","displayName-count-many":"juanów chińskich","displayName-count-other":"juana chińskiego","symbol":"CNY","symbol-alt-narrow":"¥"},"COP":{"displayName":"peso kolumbijskie","displayName-count-one":"peso kolumbijskie","displayName-count-few":"pesos kolumbijskie","displayName-count-many":"pesos kolumbijskich","displayName-count-other":"peso kolumbijskiego","symbol":"COP","symbol-alt-narrow":"$"},"COU":{"displayName":"COU","symbol":"COU"},"CRC":{"displayName":"colon kostarykański","displayName-count-one":"colon kostarykański","displayName-count-few":"colony kostarykańskie","displayName-count-many":"colonów kostarykańskich","displayName-count-other":"colona kostarykańskiego","symbol":"CRC","symbol-alt-narrow":"₡"},"CSD":{"displayName":"stary dinar serbski","symbol":"CSD"},"CSK":{"displayName":"korona czechosłowacka","displayName-count-one":"korona czechosłowacka","displayName-count-few":"korony czechosłowackie","displayName-count-many":"koron czechosłowackich","displayName-count-other":"korona czechosłowacka","symbol":"CSK"},"CUC":{"displayName":"peso kubańskie wymienialne","displayName-count-one":"peso kubańskie wymienialne","displayName-count-few":"pesos kubańskie wymienialne","displayName-count-many":"pesos kubańskich wymienialnych","displayName-count-other":"peso kubańskiego wymienialnego","symbol":"CUC","symbol-alt-narrow":"$"},"CUP":{"displayName":"peso kubańskie","displayName-count-one":"peso kubańskie","displayName-count-few":"pesos kubańskie","displayName-count-many":"pesos kubańskich","displayName-count-other":"peso kubańskiego","symbol":"CUP","symbol-alt-narrow":"$"},"CVE":{"displayName":"escudo zielonoprzylądkowe","displayName-count-one":"escudo zielonoprzylądkowe","displayName-count-few":"escudo zielonoprzylądkowe","displayName-count-many":"escudo zielonoprzylądkowych","displayName-count-other":"escudo zielonoprzylądkowego","symbol":"CVE"},"CYP":{"displayName":"funt cypryjski","symbol":"CYP"},"CZK":{"displayName":"korona czeska","displayName-count-one":"korona czeska","displayName-count-few":"korony czeskie","displayName-count-many":"koron czeskich","displayName-count-other":"korony czeskiej","symbol":"CZK","symbol-alt-narrow":"Kč"},"DDM":{"displayName":"wschodnia marka wschodnioniemiecka","symbol":"DDM"},"DEM":{"displayName":"marka niemiecka","displayName-count-one":"marka niemiecka","displayName-count-few":"marki niemieckie","displayName-count-many":"marek niemieckich","displayName-count-other":"marka niemiecka","symbol":"DEM"},"DJF":{"displayName":"frank dżibutyjski","displayName-count-one":"frank dżibutyjski","displayName-count-few":"franki dżibutyjskie","displayName-count-many":"franków dżibutyjskich","displayName-count-other":"franka dżibutyjskiego","symbol":"DJF"},"DKK":{"displayName":"korona duńska","displayName-count-one":"korona duńska","displayName-count-few":"korony duńskie","displayName-count-many":"koron duńskich","displayName-count-other":"korony duńskiej","symbol":"DKK","symbol-alt-narrow":"kr"},"DOP":{"displayName":"peso dominikańskie","displayName-count-one":"peso dominikańskie","displayName-count-few":"pesos dominikańskie","displayName-count-many":"pesos dominikańskich","displayName-count-other":"peso dominikańskiego","symbol":"DOP","symbol-alt-narrow":"$"},"DZD":{"displayName":"dinar algierski","displayName-count-one":"dinar algierski","displayName-count-few":"dinary algierskie","displayName-count-many":"dinarów algierskich","displayName-count-other":"dinara algierskiego","symbol":"DZD"},"ECS":{"displayName":"sucre ekwadorski","symbol":"ECS"},"ECV":{"displayName":"ECV","symbol":"ECV"},"EEK":{"displayName":"korona estońska","displayName-count-one":"korona estońska","displayName-count-few":"korony estońskie","displayName-count-many":"koron estońskich","displayName-count-other":"korona estońska","symbol":"EEK"},"EGP":{"displayName":"funt egipski","displayName-count-one":"funt egipski","displayName-count-few":"funty egipskie","displayName-count-many":"funtów egipskich","displayName-count-other":"funta egipskiego","symbol":"EGP","symbol-alt-narrow":"E£"},"ERN":{"displayName":"nakfa erytrejska","displayName-count-one":"nakfa erytrejska","displayName-count-few":"nakfy erytrejskie","displayName-count-many":"nakf erytrejskich","displayName-count-other":"nakfy erytrejskiej","symbol":"ERN"},"ESA":{"displayName":"peseta hiszpańska (Konto A)","symbol":"ESA"},"ESB":{"displayName":"peseta hiszpańska (konto wymienne)","displayName-count-one":"peseta hiszpańska (konto wymienialne)","displayName-count-few":"pesety hiszpańskie (konto wymienialne)","displayName-count-many":"peset hiszpańskich (konto wymienialne)","displayName-count-other":"peseta hiszpańska (konto wymienne)","symbol":"ESB"},"ESP":{"displayName":"peseta hiszpańska","symbol":"ESP","symbol-alt-narrow":"₧"},"ETB":{"displayName":"birr etiopski","displayName-count-one":"birr etiopski","displayName-count-few":"birra etiopskie","displayName-count-many":"birra etiopskich","displayName-count-other":"birra etiopskiego","symbol":"ETB"},"EUR":{"displayName":"euro","displayName-count-one":"euro","displayName-count-few":"euro","displayName-count-many":"euro","displayName-count-other":"euro","symbol":"€","symbol-alt-narrow":"€"},"FIM":{"displayName":"marka fińska","symbol":"FIM"},"FJD":{"displayName":"dolar fidżyjski","displayName-count-one":"dolar fidżyjski","displayName-count-few":"dolary fidżyjskie","displayName-count-many":"dolarów fidżyjskich","displayName-count-other":"dolara fidżyjskiego","symbol":"FJD","symbol-alt-narrow":"$"},"FKP":{"displayName":"funt falklandzki","displayName-count-one":"funt falklandzki","displayName-count-few":"funty falklandzkie","displayName-count-many":"funtów falklandzkich","displayName-count-other":"funta falklandzkiego","symbol":"FKP","symbol-alt-narrow":"£"},"FRF":{"displayName":"frank francuski","displayName-count-one":"frank francuski","displayName-count-few":"franki francuskie","displayName-count-many":"franków francuskich","displayName-count-other":"frank francuski","symbol":"FRF"},"GBP":{"displayName":"funt szterling","displayName-count-one":"funt szterling","displayName-count-few":"funty szterlingi","displayName-count-many":"funtów szterlingów","displayName-count-other":"funta szterlinga","symbol":"GBP","symbol-alt-narrow":"£"},"GEK":{"displayName":"kupon gruziński larit","symbol":"GEK"},"GEL":{"displayName":"lari gruzińskie","displayName-count-one":"lari gruzińskie","displayName-count-few":"lari gruzińskie","displayName-count-many":"lari gruzińskich","displayName-count-other":"lari gruzińskiego","symbol":"GEL","symbol-alt-narrow":"₾","symbol-alt-variant":"₾"},"GHC":{"displayName":"cedi ghańskie (1979–2007)","symbol":"GHC"},"GHS":{"displayName":"cedi ghański","displayName-count-one":"cedi ghański","displayName-count-few":"cedi ghańskie","displayName-count-many":"cedi ghańskich","displayName-count-other":"cedi ghańskiego","symbol":"GHS"},"GIP":{"displayName":"funt gibraltarski","displayName-count-one":"funt gibraltarski","displayName-count-few":"funty gibraltarskie","displayName-count-many":"funtów gibraltarskich","displayName-count-other":"funta gibraltarskiego","symbol":"GIP","symbol-alt-narrow":"£"},"GMD":{"displayName":"dalasi gambijskie","displayName-count-one":"dalasi gambijskie","displayName-count-few":"dalasi gambijskie","displayName-count-many":"dalasi gambijskich","displayName-count-other":"dalasi gambijskiego","symbol":"GMD"},"GNF":{"displayName":"frank gwinejski","displayName-count-one":"frank gwinejski","displayName-count-few":"franki gwinejskie","displayName-count-many":"franków gwinejskich","displayName-count-other":"franka gwinejskiego","symbol":"GNF","symbol-alt-narrow":"FG"},"GNS":{"displayName":"syli gwinejskie","symbol":"GNS"},"GQE":{"displayName":"ekwele gwinejskie Gwinei Równikowej","symbol":"GQE"},"GRD":{"displayName":"drachma grecka","symbol":"GRD"},"GTQ":{"displayName":"quetzal gwatemalski","displayName-count-one":"quetzal gwatemalski","displayName-count-few":"quetzale gwatemalskie","displayName-count-many":"quetzali gwatemalskich","displayName-count-other":"quetzala gwatemalskiego","symbol":"GTQ","symbol-alt-narrow":"Q"},"GWE":{"displayName":"escudo Gwinea Portugalska","symbol":"GWE"},"GWP":{"displayName":"peso Guinea-Bissau","symbol":"GWP"},"GYD":{"displayName":"dolar gujański","displayName-count-one":"dolar gujański","displayName-count-few":"dolary gujańskie","displayName-count-many":"dolarów gujańskich","displayName-count-other":"dolara gujańskiego","symbol":"GYD","symbol-alt-narrow":"$"},"HKD":{"displayName":"dolar hongkoński","displayName-count-one":"dolar hongkoński","displayName-count-few":"dolary hongkońskie","displayName-count-many":"dolarów hongkońskich","displayName-count-other":"dolara hongkońskiego","symbol":"HKD","symbol-alt-narrow":"$"},"HNL":{"displayName":"lempira honduraska","displayName-count-one":"lempira honduraska","displayName-count-few":"lempiry honduraskie","displayName-count-many":"lempir honduraskich","displayName-count-other":"lempiry honduraskiej","symbol":"HNL","symbol-alt-narrow":"L"},"HRD":{"displayName":"dinar chorwacki","symbol":"HRD"},"HRK":{"displayName":"kuna chorwacka","displayName-count-one":"kuna chorwacka","displayName-count-few":"kuny chorwackie","displayName-count-many":"kun chorwackich","displayName-count-other":"kuny chorwackiej","symbol":"HRK","symbol-alt-narrow":"kn"},"HTG":{"displayName":"gourde haitańskie","displayName-count-one":"gourde haitańskie","displayName-count-few":"gourde haitańskie","displayName-count-many":"gourde haitańskich","displayName-count-other":"gourde haitańskiego","symbol":"HTG"},"HUF":{"displayName":"forint węgierski","displayName-count-one":"forint węgierski","displayName-count-few":"forinty węgierskie","displayName-count-many":"forintów węgierskich","displayName-count-other":"forinta węgierskiego","symbol":"HUF","symbol-alt-narrow":"Ft"},"IDR":{"displayName":"rupia indonezyjska","displayName-count-one":"rupia indonezyjska","displayName-count-few":"rupie indonezyjskie","displayName-count-many":"rupii indonezyjskich","displayName-count-other":"rupii indonezyjskiej","symbol":"IDR","symbol-alt-narrow":"Rp"},"IEP":{"displayName":"funt irlandzki","symbol":"IEP"},"ILP":{"displayName":"funt izraelski","symbol":"ILP"},"ILR":{"displayName":"ILR","symbol":"ILR"},"ILS":{"displayName":"nowy szekel izraelski","displayName-count-one":"nowy szekel izraelski","displayName-count-few":"nowe szekle izraelskie","displayName-count-many":"nowych szekli izraelskich","displayName-count-other":"nowego szekla izraelskiego","symbol":"ILS","symbol-alt-narrow":"₪"},"INR":{"displayName":"rupia indyjska","displayName-count-one":"rupia indyjska","displayName-count-few":"rupie indyjskie","displayName-count-many":"rupii indyjskich","displayName-count-other":"rupii indyjskiej","symbol":"INR","symbol-alt-narrow":"₹"},"IQD":{"displayName":"dinar iracki","displayName-count-one":"dinar iracki","displayName-count-few":"dinary irackie","displayName-count-many":"dinarów irackich","displayName-count-other":"dinara irackiego","symbol":"IQD"},"IRR":{"displayName":"rial irański","displayName-count-one":"rial irański","displayName-count-few":"riale irańskie","displayName-count-many":"riali irańskich","displayName-count-other":"riala irańskiego","symbol":"IRR"},"ISJ":{"displayName":"ISJ","symbol":"ISJ"},"ISK":{"displayName":"korona islandzka","displayName-count-one":"korona islandzka","displayName-count-few":"korony islandzkie","displayName-count-many":"koron islandzkich","displayName-count-other":"korony islandzkiej","symbol":"ISK","symbol-alt-narrow":"kr"},"ITL":{"displayName":"lir włoski","symbol":"ITL"},"JMD":{"displayName":"dolar jamajski","displayName-count-one":"dolar jamajski","displayName-count-few":"dolary jamajskie","displayName-count-many":"dolarów jamajskich","displayName-count-other":"dolara jamajskiego","symbol":"JMD","symbol-alt-narrow":"$"},"JOD":{"displayName":"dinar jordański","displayName-count-one":"dinar jordański","displayName-count-few":"dinary jordańskie","displayName-count-many":"dinarów jordańskich","displayName-count-other":"dinara jordańskiego","symbol":"JOD"},"JPY":{"displayName":"jen japoński","displayName-count-one":"jen japoński","displayName-count-few":"jeny japońskie","displayName-count-many":"jenów japońskich","displayName-count-other":"jena japońskiego","symbol":"JPY","symbol-alt-narrow":"¥"},"KES":{"displayName":"szyling kenijski","displayName-count-one":"szyling kenijski","displayName-count-few":"szylingi kenijskie","displayName-count-many":"szylingów kenijskich","displayName-count-other":"szylinga kenijskiego","symbol":"KES"},"KGS":{"displayName":"som kirgiski","displayName-count-one":"som kirgiski","displayName-count-few":"somy kirgiskie","displayName-count-many":"somów kirgiskich","displayName-count-other":"soma kirgiskiego","symbol":"KGS"},"KHR":{"displayName":"riel kambodżański","displayName-count-one":"riel kambodżański","displayName-count-few":"riele kambodżańskie","displayName-count-many":"rieli kambodżańskich","displayName-count-other":"riela kambodżańskiego","symbol":"KHR","symbol-alt-narrow":"៛"},"KMF":{"displayName":"frank komoryjski","displayName-count-one":"frank komoryjski","displayName-count-few":"franki komoryjskie","displayName-count-many":"franków komoryjskich","displayName-count-other":"franka komoryjskiego","symbol":"KMF","symbol-alt-narrow":"CF"},"KPW":{"displayName":"won północnokoreański","displayName-count-one":"won północnokoreański","displayName-count-few":"wony północnokoreańskie","displayName-count-many":"wonów północnokoreańskich","displayName-count-other":"wona północnokoreańskiego","symbol":"KPW","symbol-alt-narrow":"₩"},"KRH":{"displayName":"KRH","symbol":"KRH"},"KRO":{"displayName":"KRO","symbol":"KRO"},"KRW":{"displayName":"won południowokoreański","displayName-count-one":"won południowokoreański","displayName-count-few":"wony południowokoreańskie","displayName-count-many":"wonów południowokoreańskich","displayName-count-other":"wona południowokoreańskiego","symbol":"KRW","symbol-alt-narrow":"₩"},"KWD":{"displayName":"dinar kuwejcki","displayName-count-one":"dinar kuwejcki","displayName-count-few":"dinary kuwejckie","displayName-count-many":"dinarów kuwejckich","displayName-count-other":"dinara kuwejckiego","symbol":"KWD"},"KYD":{"displayName":"dolar kajmański","displayName-count-one":"dolar kajmański","displayName-count-few":"dolary kajmańskie","displayName-count-many":"dolarów kajmańskich","displayName-count-other":"dolara kajmańskiego","symbol":"KYD","symbol-alt-narrow":"$"},"KZT":{"displayName":"tenge kazachskie","displayName-count-one":"tenge kazachskie","displayName-count-few":"tenge kazachskie","displayName-count-many":"tenge kazachskich","displayName-count-other":"tenge kazachskiego","symbol":"KZT","symbol-alt-narrow":"₸"},"LAK":{"displayName":"kip laotański","displayName-count-one":"kip laotański","displayName-count-few":"kipy laotańskie","displayName-count-many":"kipów laotańskich","displayName-count-other":"kipa laotańskiego","symbol":"LAK","symbol-alt-narrow":"₭"},"LBP":{"displayName":"funt libański","displayName-count-one":"funt libański","displayName-count-few":"funty libańskie","displayName-count-many":"funtów libańskich","displayName-count-other":"funta libańskiego","symbol":"LBP","symbol-alt-narrow":"L£"},"LKR":{"displayName":"rupia lankijska","displayName-count-one":"rupia lankijska","displayName-count-few":"rupie lankijskie","displayName-count-many":"rupii lankijskich","displayName-count-other":"rupii lankijskiej","symbol":"LKR","symbol-alt-narrow":"Rs"},"LRD":{"displayName":"dolar liberyjski","displayName-count-one":"dolar liberyjski","displayName-count-few":"dolary liberyjskie","displayName-count-many":"dolarów liberyjskich","displayName-count-other":"dolara liberyjskiego","symbol":"LRD","symbol-alt-narrow":"$"},"LSL":{"displayName":"loti Lesoto","symbol":"LSL"},"LTL":{"displayName":"lit litewski","displayName-count-one":"lit litewski","displayName-count-few":"lity litewskie","displayName-count-many":"litów litewskich","displayName-count-other":"lita litewskiego","symbol":"LTL","symbol-alt-narrow":"Lt"},"LTT":{"displayName":"talon litewski","symbol":"LTT"},"LUC":{"displayName":"LUC","symbol":"LUC"},"LUF":{"displayName":"frank luksemburski","symbol":"LUF"},"LUL":{"displayName":"LUL","symbol":"LUL"},"LVL":{"displayName":"łat łotewski","displayName-count-one":"łat łotewski","displayName-count-few":"łaty łotewskie","displayName-count-many":"łatów łotewskich","displayName-count-other":"łata łotewskiego","symbol":"LVL","symbol-alt-narrow":"Ls"},"LVR":{"displayName":"rubel łotewski","symbol":"LVR"},"LYD":{"displayName":"dinar libijski","displayName-count-one":"dinar libijski","displayName-count-few":"dinary libijskie","displayName-count-many":"dinarów libijskich","displayName-count-other":"dinara libijskiego","symbol":"LYD"},"MAD":{"displayName":"dirham marokański","displayName-count-one":"dirham marokański","displayName-count-few":"dirhamy marokańskie","displayName-count-many":"dirhamów marokańskich","displayName-count-other":"dirhama marokańskiego","symbol":"MAD"},"MAF":{"displayName":"frank marokański","displayName-count-one":"frank marokański","displayName-count-few":"franki marokańskie","displayName-count-many":"franków marokańskich","displayName-count-other":"frank marokański","symbol":"MAF"},"MCF":{"displayName":"MCF","symbol":"MCF"},"MDC":{"displayName":"MDC","symbol":"MDC"},"MDL":{"displayName":"lej mołdawski","displayName-count-one":"lej mołdawski","displayName-count-few":"leje mołdawskie","displayName-count-many":"lejów mołdawskich","displayName-count-other":"leja mołdawskiego","symbol":"MDL"},"MGA":{"displayName":"ariary malgaski","displayName-count-one":"ariary malgaski","displayName-count-few":"ariary malgaskie","displayName-count-many":"ariary malgaskich","displayName-count-other":"ariary malgaskiego","symbol":"MGA","symbol-alt-narrow":"Ar"},"MGF":{"displayName":"frank malgaski","symbol":"MGF"},"MKD":{"displayName":"denar macedoński","displayName-count-one":"denar macedoński","displayName-count-few":"denary macedońskie","displayName-count-many":"denarów macedońskich","displayName-count-other":"denara macedońskiego","symbol":"MKD"},"MKN":{"displayName":"MKN","symbol":"MKN"},"MLF":{"displayName":"frank malijski","symbol":"MLF"},"MMK":{"displayName":"kiat birmański","displayName-count-one":"kiat birmański","displayName-count-few":"kiaty birmańskie","displayName-count-many":"kiatów birmańskich","displayName-count-other":"kiata birmańskiego","symbol":"MMK","symbol-alt-narrow":"K"},"MNT":{"displayName":"tugrik mongolski","displayName-count-one":"tugrik mongolski","displayName-count-few":"tugriki mongolskie","displayName-count-many":"tugrików mongolskich","displayName-count-other":"tugrika mongolskiego","symbol":"MNT","symbol-alt-narrow":"₮"},"MOP":{"displayName":"pataca Makau","displayName-count-one":"pataca Makau","displayName-count-few":"pataca Makau","displayName-count-many":"pataca Makau","displayName-count-other":"pataca Makau","symbol":"MOP"},"MRO":{"displayName":"ouguiya mauretańska","displayName-count-one":"ouguiya mauretańska","displayName-count-few":"ouguiya mauretańskie","displayName-count-many":"ouguiya mauretańskich","displayName-count-other":"ouguiya mauretańskiej","symbol":"MRO"},"MTL":{"displayName":"lira maltańska","symbol":"MTL"},"MTP":{"displayName":"funt maltański","symbol":"MTP"},"MUR":{"displayName":"rupia maurytyjska","displayName-count-one":"rupia maurytyjska","displayName-count-few":"rupie maurytyjskie","displayName-count-many":"rupii maurytyjskich","displayName-count-other":"rupii maurytyjskiej","symbol":"MUR","symbol-alt-narrow":"Rs"},"MVP":{"displayName":"MVP","symbol":"MVP"},"MVR":{"displayName":"rupia malediwska","displayName-count-one":"rupia malediwska","displayName-count-few":"rupie malediwskie","displayName-count-many":"rupii malediwskich","displayName-count-other":"rupii malediwskiej","symbol":"MVR"},"MWK":{"displayName":"kwacha malawijska","displayName-count-one":"kwacha malawijska","displayName-count-few":"kwacha malawijskie","displayName-count-many":"kwacha malawijskich","displayName-count-other":"kwacha malawijskiej","symbol":"MWK"},"MXN":{"displayName":"peso meksykańskie","displayName-count-one":"peso meksykańskie","displayName-count-few":"pesos meksykańskie","displayName-count-many":"pesos meksykańskich","displayName-count-other":"peso meksykańskiego","symbol":"MXN","symbol-alt-narrow":"$"},"MXP":{"displayName":"peso srebrne meksykańskie (1861–1992)","symbol":"MXP"},"MXV":{"displayName":"MXV","symbol":"MXV"},"MYR":{"displayName":"ringgit malezyjski","displayName-count-one":"ringgit malezyjski","displayName-count-few":"ringgity malezyjskie","displayName-count-many":"ringgitów malezyjskich","displayName-count-other":"ringgita malezyjskiego","symbol":"MYR","symbol-alt-narrow":"RM"},"MZE":{"displayName":"escudo mozambickie","symbol":"MZE"},"MZM":{"displayName":"metical Mozambik","symbol":"MZM"},"MZN":{"displayName":"metical mozambicki","displayName-count-one":"metical mozambicki","displayName-count-few":"meticale mozambickie","displayName-count-many":"meticali mozambickich","displayName-count-other":"meticala mozambickiego","symbol":"MZN"},"NAD":{"displayName":"dolar namibijski","displayName-count-one":"dolar namibijski","displayName-count-few":"dolary namibijskie","displayName-count-many":"dolarów namibijskich","displayName-count-other":"dolara namibijskiego","symbol":"NAD","symbol-alt-narrow":"$"},"NGN":{"displayName":"naira nigeryjska","displayName-count-one":"naira nigeryjska","displayName-count-few":"nairy nigeryjskie","displayName-count-many":"nair nigeryjskich","displayName-count-other":"nairy nigeryjskiej","symbol":"NGN","symbol-alt-narrow":"₦"},"NIC":{"displayName":"cordoba nikaraguańska (1988–1991)","displayName-count-one":"cordoba nikaraguańska (1988–1991)","displayName-count-few":"cordoby nikaraguańskie (1988–1991)","displayName-count-many":"cordob nikaraguańskich (1988–1991)","displayName-count-other":"cordoby nikaraguańskiej (1988–1991)","symbol":"NIC"},"NIO":{"displayName":"cordoba nikaraguańska","displayName-count-one":"cordoba nikaraguańska","displayName-count-few":"cordoby nikaraguańskie","displayName-count-many":"cordob nikaraguańskich","displayName-count-other":"cordoby nikaraguańskiej","symbol":"NIO","symbol-alt-narrow":"C$"},"NLG":{"displayName":"gulden holenderski","symbol":"NLG"},"NOK":{"displayName":"korona norweska","displayName-count-one":"korona norweska","displayName-count-few":"korony norweskie","displayName-count-many":"koron norweskich","displayName-count-other":"korony norweskiej","symbol":"NOK","symbol-alt-narrow":"kr"},"NPR":{"displayName":"rupia nepalska","displayName-count-one":"rupia nepalska","displayName-count-few":"rupie nepalskie","displayName-count-many":"rupii nepalskich","displayName-count-other":"rupii nepalskiej","symbol":"NPR","symbol-alt-narrow":"Rs"},"NZD":{"displayName":"dolar nowozelandzki","displayName-count-one":"dolar nowozelandzki","displayName-count-few":"dolary nowozelandzkie","displayName-count-many":"dolarów nowozelandzkich","displayName-count-other":"dolara nowozelandzkiego","symbol":"NZD","symbol-alt-narrow":"$"},"OMR":{"displayName":"rial omański","displayName-count-one":"rial omański","displayName-count-few":"riale omańskie","displayName-count-many":"riali omańskich","displayName-count-other":"riala omańskiego","symbol":"OMR"},"PAB":{"displayName":"balboa panamski","displayName-count-one":"balboa panamski","displayName-count-few":"balboa panamskie","displayName-count-many":"balboa panamskich","displayName-count-other":"balboa panamskiego","symbol":"PAB"},"PEI":{"displayName":"inti peruwiański","symbol":"PEI"},"PEN":{"displayName":"sol peruwiański","displayName-count-one":"sol peruwiański","displayName-count-few":"sole peruwiańskie","displayName-count-many":"soli peruwiańskich","displayName-count-other":"sola peruwiańskiego","symbol":"PEN"},"PES":{"displayName":"sol peruwiański (1863–1965)","displayName-count-one":"sol peruwiański (1863–1965)","displayName-count-few":"sole peruwiańskie (1863–1965)","displayName-count-many":"soli peruwiańskich (1863–1965)","displayName-count-other":"sola peruwiańskiego (1863–1965)","symbol":"PES"},"PGK":{"displayName":"kina Papua Nowa Gwinea","displayName-count-one":"kina papuaska","displayName-count-few":"kina papuaskie","displayName-count-many":"kina papuaskich","displayName-count-other":"kina papuaskiej","symbol":"PGK"},"PHP":{"displayName":"peso filipińskie","displayName-count-one":"peso filipińskie","displayName-count-few":"pesos filipińskie","displayName-count-many":"pesos filipińskich","displayName-count-other":"peso filipińskiego","symbol":"PHP","symbol-alt-narrow":"₱"},"PKR":{"displayName":"rupia pakistańska","displayName-count-one":"rupia pakistańska","displayName-count-few":"rupie pakistańskie","displayName-count-many":"rupii pakistańskich","displayName-count-other":"rupii pakistańskiej","symbol":"PKR","symbol-alt-narrow":"Rs"},"PLN":{"displayName":"złoty polski","displayName-count-one":"złoty polski","displayName-count-few":"złote polskie","displayName-count-many":"złotych polskich","displayName-count-other":"złotego polskiego","symbol":"zł","symbol-alt-narrow":"zł"},"PLZ":{"displayName":"złoty polski (1950–1995)","displayName-count-one":"złoty polski (1950–1995)","displayName-count-few":"złote polskie (1950–1995)","displayName-count-many":"złotych polskich (1950–1995)","displayName-count-other":"złotego polskiego (1950–1995)","symbol":"PLZ"},"PTE":{"displayName":"escudo portugalskie","symbol":"PTE"},"PYG":{"displayName":"guarani paragwajskie","displayName-count-one":"guarani paragwajskie","displayName-count-few":"guarani paragwajskie","displayName-count-many":"guarani paragwajskich","displayName-count-other":"guarani paragwajskiego","symbol":"PYG","symbol-alt-narrow":"₲"},"QAR":{"displayName":"rial katarski","displayName-count-one":"rial katarski","displayName-count-few":"riale katarskie","displayName-count-many":"riali katarskich","displayName-count-other":"riala katarskiego","symbol":"QAR"},"RHD":{"displayName":"dolar rodezyjski","symbol":"RHD"},"ROL":{"displayName":"lej rumuński (1952–2006)","displayName-count-one":"lej rumuński (1952–2006)","displayName-count-few":"lei rumuńskie (1952–2006)","displayName-count-many":"lei rumuńskich (1952–2006)","displayName-count-other":"leja rumuńskiego (1952–2006)","symbol":"ROL"},"RON":{"displayName":"lej rumuński","displayName-count-one":"lej rumuński","displayName-count-few":"leje rumuńskie","displayName-count-many":"lejów rumuńskich","displayName-count-other":"leja rumuńskiego","symbol":"RON","symbol-alt-narrow":"lej"},"RSD":{"displayName":"dinar serbski","displayName-count-one":"dinar serbski","displayName-count-few":"dinary serbskie","displayName-count-many":"dinarów serbskich","displayName-count-other":"dinara serbskiego","symbol":"RSD"},"RUB":{"displayName":"rubel rosyjski","displayName-count-one":"rubel rosyjski","displayName-count-few":"ruble rosyjskie","displayName-count-many":"rubli rosyjskich","displayName-count-other":"rubla rosyjskiego","symbol":"RUB","symbol-alt-narrow":"₽"},"RUR":{"displayName":"rubel rosyjski (1991–1998)","displayName-count-one":"rubel rosyjski (1991–1998)","displayName-count-few":"ruble rosyjskie (1991–1998)","displayName-count-many":"rubli rosyjskich (1991–1998)","displayName-count-other":"rubla rosyjskiego (1991–1998)","symbol":"RUR","symbol-alt-narrow":"р."},"RWF":{"displayName":"frank ruandyjski","displayName-count-one":"frank ruandyjski","displayName-count-few":"franki ruandyjskie","displayName-count-many":"franków ruandyjskich","displayName-count-other":"franka ruandyjskiego","symbol":"RWF","symbol-alt-narrow":"RF"},"SAR":{"displayName":"rial saudyjski","displayName-count-one":"rial saudyjski","displayName-count-few":"riale saudyjskie","displayName-count-many":"riali saudyjskich","displayName-count-other":"riala saudyjskiego","symbol":"SAR"},"SBD":{"displayName":"dolar Wysp Salomona","displayName-count-one":"dolar Wysp Salomona","displayName-count-few":"dolary Wysp Salomona","displayName-count-many":"dolarów Wysp Salomona","displayName-count-other":"dolara Wysp Salomona","symbol":"SBD","symbol-alt-narrow":"$"},"SCR":{"displayName":"rupia seszelska","displayName-count-one":"rupia seszelska","displayName-count-few":"rupie seszelskie","displayName-count-many":"rupii seszelskich","displayName-count-other":"rupii seszelskiej","symbol":"SCR"},"SDD":{"displayName":"dinar sudański","symbol":"SDD"},"SDG":{"displayName":"funt sudański","displayName-count-one":"funt sudański","displayName-count-few":"funty sudańskie","displayName-count-many":"funtów sudańskich","displayName-count-other":"funta sudańskiego","symbol":"SDG"},"SDP":{"displayName":"funt sudański (1957–1998)","displayName-count-one":"funt sudański (1957–1998)","displayName-count-few":"funty sudańskie (1957–1998)","displayName-count-many":"funtów sudańskich (1957–1998)","displayName-count-other":"funta sudańskiego (1957–1998)","symbol":"SDP"},"SEK":{"displayName":"korona szwedzka","displayName-count-one":"korona szwedzka","displayName-count-few":"korony szwedzkie","displayName-count-many":"koron szwedzkich","displayName-count-other":"korony szwedzkiej","symbol":"SEK","symbol-alt-narrow":"kr"},"SGD":{"displayName":"dolar singapurski","displayName-count-one":"dolar singapurski","displayName-count-few":"dolary singapurskie","displayName-count-many":"dolarów singapurskich","displayName-count-other":"dolara singapurskiego","symbol":"SGD","symbol-alt-narrow":"$"},"SHP":{"displayName":"funt Wyspy Świętej Heleny","displayName-count-one":"funt Wyspy Świętej Heleny","displayName-count-few":"funty Wyspy Świętej Heleny","displayName-count-many":"funtów Wyspy Świętej Heleny","displayName-count-other":"funta Wyspy Świętej Heleny","symbol":"SHP","symbol-alt-narrow":"£"},"SIT":{"displayName":"tolar słoweński","displayName-count-one":"tolar słoweński","displayName-count-few":"tolary słoweńskie","displayName-count-many":"tolarów słoweńskich","displayName-count-other":"tolar słoweński","symbol":"SIT"},"SKK":{"displayName":"korona słowacka","displayName-count-one":"korona słowacka","displayName-count-few":"korony słowackie","displayName-count-many":"koron słowackich","displayName-count-other":"korona słowacka","symbol":"SKK"},"SLL":{"displayName":"leone sierraleoński","displayName-count-one":"leone sierraleoński","displayName-count-few":"leone sierraleońskie","displayName-count-many":"leone sierraleońskich","displayName-count-other":"leone sierraleońskiego","symbol":"SLL"},"SOS":{"displayName":"szyling somalijski","displayName-count-one":"szyling somalijski","displayName-count-few":"szylingi somalijskie","displayName-count-many":"szylingów somalijskich","displayName-count-other":"szylinga somalijskiego","symbol":"SOS"},"SRD":{"displayName":"dolar surinamski","displayName-count-one":"dolar surinamski","displayName-count-few":"dolary surinamskie","displayName-count-many":"dolarów surinamskich","displayName-count-other":"dolara surinamskiego","symbol":"SRD","symbol-alt-narrow":"$"},"SRG":{"displayName":"gulden surinamski","symbol":"SRG"},"SSP":{"displayName":"funt południowosudański","displayName-count-one":"funt południowosudański","displayName-count-few":"funty południowosudańskie","displayName-count-many":"funtów południowosudańskich","displayName-count-other":"funta południowosudańskiego","symbol":"SSP","symbol-alt-narrow":"£"},"STD":{"displayName":"dobra Wysp Świętego Tomasza i Książęcej","displayName-count-one":"dobra Wysp Świętego Tomasza i Książęcej","displayName-count-few":"dobry Wysp Świętego Tomasza i Książęcej","displayName-count-many":"dobr Wysp Świętego Tomasza i Książęcej","displayName-count-other":"dobry Wysp Świętego Tomasza i Książęcej","symbol":"STD","symbol-alt-narrow":"Db"},"STN":{"displayName":"STN","symbol":"STN"},"SUR":{"displayName":"rubel radziecki","displayName-count-one":"rubel radziecki","displayName-count-few":"ruble radzieckie","displayName-count-many":"rubli radzieckich","displayName-count-other":"rubel radziecki","symbol":"SUR"},"SVC":{"displayName":"colon salwadorski","symbol":"SVC"},"SYP":{"displayName":"funt syryjski","displayName-count-one":"funt syryjski","displayName-count-few":"funty syryjskie","displayName-count-many":"funtów syryjskich","displayName-count-other":"funta syryjskiego","symbol":"SYP","symbol-alt-narrow":"£"},"SZL":{"displayName":"lilangeni Suazi","displayName-count-one":"lilangeni Suazi","displayName-count-few":"emalangeni Suazi","displayName-count-many":"emalangeni Suazi","displayName-count-other":"emalangeni Suazi","symbol":"SZL"},"THB":{"displayName":"baht tajski","displayName-count-one":"baht tajski","displayName-count-few":"bahty tajskie","displayName-count-many":"bahtów tajskich","displayName-count-other":"bahta tajskiego","symbol":"THB","symbol-alt-narrow":"฿"},"TJR":{"displayName":"rubel tadżycki","symbol":"TJR"},"TJS":{"displayName":"somoni tadżyckie","displayName-count-one":"somoni tadżyckie","displayName-count-few":"somoni tadżyckie","displayName-count-many":"somoni tadżyckich","displayName-count-other":"somoni tadżyckiego","symbol":"TJS"},"TMM":{"displayName":"manat turkmeński (1993–2009)","displayName-count-one":"manat turkmeński (1993–2009)","displayName-count-few":"manaty turkmeńskie (1993–2009)","displayName-count-many":"manatów turkmeńskich (1993–2009)","displayName-count-other":"manata turkmeńskiego (1993–2009)","symbol":"TMM"},"TMT":{"displayName":"manat turkmeński","displayName-count-one":"manat turkmeński","displayName-count-few":"manaty turkmeńskie","displayName-count-many":"manatów turkmeńskich","displayName-count-other":"manata turkmeńskiego","symbol":"TMT"},"TND":{"displayName":"dinar tunezyjski","displayName-count-one":"dinar tunezyjski","displayName-count-few":"dinary tunezyjskie","displayName-count-many":"dinarów tunezyjskich","displayName-count-other":"dinara tunezyjskiego","symbol":"TND"},"TOP":{"displayName":"pa’anga tongijska","displayName-count-one":"pa’anga tongijska","displayName-count-few":"pa’anga tongijskie","displayName-count-many":"pa’anga tongijskich","displayName-count-other":"pa’anga tongijskiej","symbol":"TOP","symbol-alt-narrow":"T$"},"TPE":{"displayName":"escudo timorskie","symbol":"TPE"},"TRL":{"displayName":"lira turecka (1922–2005)","displayName-count-one":"lira turecka (1922–2005)","displayName-count-few":"liry tureckie (1922–2005)","displayName-count-many":"lir tureckich (1922–2005)","displayName-count-other":"liry tureckiej (1922–2005)","symbol":"TRL"},"TRY":{"displayName":"lira turecka","displayName-count-one":"lira turecka","displayName-count-few":"liry tureckie","displayName-count-many":"lir tureckich","displayName-count-other":"liry tureckiej","symbol":"TRY","symbol-alt-narrow":"₺","symbol-alt-variant":"TL"},"TTD":{"displayName":"dolar Trynidadu i Tobago","displayName-count-one":"dolar Trynidadu i Tobago","displayName-count-few":"dolary Trynidadu i Tobago","displayName-count-many":"dolarów Trynidadu i Tobago","displayName-count-other":"dolara Trynidadu i Tobago","symbol":"TTD","symbol-alt-narrow":"$"},"TWD":{"displayName":"nowy dolar tajwański","displayName-count-one":"nowy dolar tajwański","displayName-count-few":"nowe dolary tajwańskie","displayName-count-many":"nowych dolarów tajwańskich","displayName-count-other":"nowego dolara tajwańskiego","symbol":"TWD","symbol-alt-narrow":"NT$"},"TZS":{"displayName":"szyling tanzański","displayName-count-one":"szyling tanzański","displayName-count-few":"szylingi tanzańskie","displayName-count-many":"szylingów tanzańskich","displayName-count-other":"szylinga tanzańskiego","symbol":"TZS"},"UAH":{"displayName":"hrywna ukraińska","displayName-count-one":"hrywna ukraińska","displayName-count-few":"hrywny ukraińskie","displayName-count-many":"hrywien ukraińskich","displayName-count-other":"hrywny ukraińskiej","symbol":"UAH","symbol-alt-narrow":"₴"},"UAK":{"displayName":"karbowaniec ukraiński","displayName-count-one":"karbowaniec ukraiński","displayName-count-few":"karbowańce ukraińskie","displayName-count-many":"karbowańców ukraińskich","displayName-count-other":"karbowaniec ukraiński","symbol":"UAK"},"UGS":{"displayName":"szyling ugandyjski (1966–1987)","symbol":"UGS"},"UGX":{"displayName":"szyling ugandyjski","displayName-count-one":"szyling ugandyjski","displayName-count-few":"szylingi ugandyjskie","displayName-count-many":"szylingów ugandyjskich","displayName-count-other":"szylinga ugandyjskiego","symbol":"UGX"},"USD":{"displayName":"dolar amerykański","displayName-count-one":"dolar amerykański","displayName-count-few":"dolary amerykańskie","displayName-count-many":"dolarów amerykańskich","displayName-count-other":"dolara amerykańskiego","symbol":"USD","symbol-alt-narrow":"$"},"USN":{"displayName":"USN","symbol":"USN"},"USS":{"displayName":"USS","symbol":"USS"},"UYI":{"displayName":"UYI","symbol":"UYI"},"UYP":{"displayName":"peso urugwajskie (1975–1993)","symbol":"UYP"},"UYU":{"displayName":"peso urugwajskie","displayName-count-one":"peso urugwajskie","displayName-count-few":"pesos urugwajskie","displayName-count-many":"pesos urugwajskich","displayName-count-other":"peso urugwajskiego","symbol":"UYU","symbol-alt-narrow":"$"},"UZS":{"displayName":"som uzbecki","displayName-count-one":"som uzbecki","displayName-count-few":"somy uzbeckie","displayName-count-many":"somów uzbeckich","displayName-count-other":"soma uzbeckiego","symbol":"UZS"},"VEB":{"displayName":"boliwar wenezuelski (1871–2008)","displayName-count-one":"boliwar wenezuelski (1871–2008)","displayName-count-few":"boliwary wenezuelskie (1871–2008)","displayName-count-many":"boliwarów wenezuelskich (1871–2008)","displayName-count-other":"boliwary wenezuelskiego (1871–2008)","symbol":"VEB"},"VEF":{"displayName":"boliwar wenezuelski","displayName-count-one":"boliwar wenezuelski","displayName-count-few":"boliwary wenezuelskie","displayName-count-many":"boliwarów wenezuelskich","displayName-count-other":"boliwara wenezuelskiego","symbol":"VEF","symbol-alt-narrow":"Bs"},"VND":{"displayName":"dong wietnamski","displayName-count-one":"dong wietnamski","displayName-count-few":"dongi wietnamskie","displayName-count-many":"dongów wietnamskich","displayName-count-other":"donga wietnamskiego","symbol":"VND","symbol-alt-narrow":"₫"},"VNN":{"displayName":"VNN","symbol":"VNN"},"VUV":{"displayName":"vatu wanuackie","displayName-count-one":"vatu wanuackie","displayName-count-few":"vatu wanuackie","displayName-count-many":"vatu wanuackich","displayName-count-other":"vatu wanuackiego","symbol":"VUV"},"WST":{"displayName":"tala samoańskie","displayName-count-one":"tala samoańskie","displayName-count-few":"tala samoańskie","displayName-count-many":"tala samoańskich","displayName-count-other":"tala samoańskiego","symbol":"WST"},"XAF":{"displayName":"frank CFA BEAC","displayName-count-one":"frank CFA BEAC","displayName-count-few":"franki CFA BEAC","displayName-count-many":"franków CFA BEAC","displayName-count-other":"franka CFA BEAC","symbol":"FCFA"},"XAG":{"displayName":"srebro","symbol":"XAG"},"XAU":{"displayName":"złoto","symbol":"XAU"},"XBA":{"displayName":"XBA","symbol":"XBA"},"XBB":{"displayName":"XBB","symbol":"XBB"},"XBC":{"displayName":"europejska jednostka rozrachunkowa (XBC)","symbol":"XBC"},"XBD":{"displayName":"europejska jednostka rozrachunkowa (XBD)","symbol":"XBD"},"XCD":{"displayName":"dolar wschodniokaraibski","displayName-count-one":"dolar wschodniokaraibski","displayName-count-few":"dolary wschodniokaraibskie","displayName-count-many":"dolarów wschodniokaraibskich","displayName-count-other":"dolara wschodniokaraibskiego","symbol":"EC$","symbol-alt-narrow":"$"},"XDR":{"displayName":"specjalne prawa ciągnienia","symbol":"XDR"},"XEU":{"displayName":"ECU","symbol":"XEU"},"XFO":{"displayName":"frank złoty francuski","symbol":"XFO"},"XFU":{"displayName":"UIC-frank francuski","symbol":"XFU"},"XOF":{"displayName":"frank CFA","displayName-count-one":"frank CFA","displayName-count-few":"franki CFA","displayName-count-many":"franków CFA","displayName-count-other":"franka CFA","symbol":"CFA"},"XPD":{"displayName":"pallad","symbol":"XPD"},"XPF":{"displayName":"frank CFP","displayName-count-one":"frank CFP","displayName-count-few":"franki CFP","displayName-count-many":"franków CFP","displayName-count-other":"franka CFP","symbol":"CFPF"},"XPT":{"displayName":"platyna","symbol":"XPT"},"XRE":{"displayName":"XRE","symbol":"XRE"},"XSU":{"displayName":"XSU","symbol":"XSU"},"XTS":{"displayName":"testowy kod waluty","symbol":"XTS"},"XUA":{"displayName":"XUA","symbol":"XUA"},"XXX":{"displayName":"nieznana waluta","displayName-count-one":"nieznana waluta","displayName-count-few":"nieznanej waluty","displayName-count-many":"nieznanej waluty","displayName-count-other":"nieznanej waluty","symbol":"XXX"},"YDD":{"displayName":"dinar jemeński","symbol":"YDD"},"YER":{"displayName":"rial jemeński","displayName-count-one":"rial jemeński","displayName-count-few":"riale jemeńskie","displayName-count-many":"riali jemeńskich","displayName-count-other":"riala jemeńskiego","symbol":"YER"},"YUD":{"displayName":"YUD","symbol":"YUD"},"YUM":{"displayName":"nowy dinar jugosławiański","symbol":"YUM"},"YUN":{"displayName":"dinar jugosławiański wymienny","symbol":"YUN"},"YUR":{"displayName":"YUR","symbol":"YUR"},"ZAL":{"displayName":"rand południowoafrykański (finansowy)","symbol":"ZAL"},"ZAR":{"displayName":"rand południowoafrykański","displayName-count-one":"rand południowoafrykański","displayName-count-few":"randy południowoafrykańskie","displayName-count-many":"randów południowoafrykańskich","displayName-count-other":"randa południowoafrykańskiego","symbol":"ZAR","symbol-alt-narrow":"R"},"ZMK":{"displayName":"kwacha zambijska (1968–2012)","displayName-count-one":"kwacha zambijska (1968–2012)","displayName-count-few":"kwacha zambijskie (1968–2012)","displayName-count-many":"kwacha zambijskich (1968–2012)","displayName-count-other":"kwacha zambijskiej (1968–2012)","symbol":"ZMK"},"ZMW":{"displayName":"kwacha zambijska","displayName-count-one":"kwacha zambijska","displayName-count-few":"kwacha zambijskie","displayName-count-many":"kwacha zambijskich","displayName-count-other":"kwacha zambijskiej","symbol":"ZMW","symbol-alt-narrow":"ZK"},"ZRN":{"displayName":"nowy zair zairski","symbol":"ZRN"},"ZRZ":{"displayName":"zair zairski","symbol":"ZRZ"},"ZWD":{"displayName":"dolar Zimbabwe (1980–2008)","symbol":"ZWD"},"ZWL":{"displayName":"dolar Zimbabwe (2009)","symbol":"ZWL"},"ZWR":{"displayName":"dolar Zimbabwe (2008)","symbol":"ZWR"}},"defaultNumberingSystem":"latn","otherNumberingSystems":{"native":"latn"},"minimumGroupingDigits":"2","symbols-numberSystem-latn":{"decimal":",","group":" ","list":";","percentSign":"%","plusSign":"+","minusSign":"-","exponential":"E","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"NaN","timeSeparator":":"},"decimalFormats-numberSystem-latn":{"standard":"#,##0.###","long":{"decimalFormat":{"1000-count-one":"0 tysiąc","1000-count-few":"0 tysiące","1000-count-many":"0 tysięcy","1000-count-other":"0 tysiąca","10000-count-one":"00 tysiąc","10000-count-few":"00 tysiące","10000-count-many":"00 tysięcy","10000-count-other":"00 tysiąca","100000-count-one":"000 tysiąc","100000-count-few":"000 tysiące","100000-count-many":"000 tysięcy","100000-count-other":"000 tysiąca","1000000-count-one":"0 milion","1000000-count-few":"0 miliony","1000000-count-many":"0 milionów","1000000-count-other":"0 miliona","10000000-count-one":"00 milion","10000000-count-few":"00 miliony","10000000-count-many":"00 milionów","10000000-count-other":"00 miliona","100000000-count-one":"000 milion","100000000-count-few":"000 miliony","100000000-count-many":"000 milionów","100000000-count-other":"000 miliona","1000000000-count-one":"0 miliard","1000000000-count-few":"0 miliardy","1000000000-count-many":"0 miliardów","1000000000-count-other":"0 miliarda","10000000000-count-one":"00 miliard","10000000000-count-few":"00 miliardy","10000000000-count-many":"00 miliardów","10000000000-count-other":"00 miliarda","100000000000-count-one":"000 miliard","100000000000-count-few":"000 miliardy","100000000000-count-many":"000 miliardów","100000000000-count-other":"000 miliarda","1000000000000-count-one":"0 bilion","1000000000000-count-few":"0 biliony","1000000000000-count-many":"0 bilionów","1000000000000-count-other":"0 biliona","10000000000000-count-one":"00 bilion","10000000000000-count-few":"00 biliony","10000000000000-count-many":"00 bilionów","10000000000000-count-other":"00 biliona","100000000000000-count-one":"000 bilion","100000000000000-count-few":"000 biliony","100000000000000-count-many":"000 bilionów","100000000000000-count-other":"000 biliona"}},"short":{"decimalFormat":{"1000-count-one":"0 tys'.'","1000-count-few":"0 tys'.'","1000-count-many":"0 tys'.'","1000-count-other":"0 tys'.'","10000-count-one":"00 tys'.'","10000-count-few":"00 tys'.'","10000-count-many":"00 tys'.'","10000-count-other":"00 tys'.'","100000-count-one":"000 tys'.'","100000-count-few":"000 tys'.'","100000-count-many":"000 tys'.'","100000-count-other":"000 tys'.'","1000000-count-one":"0 mln","1000000-count-few":"0 mln","1000000-count-many":"0 mln","1000000-count-other":"0 mln","10000000-count-one":"00 mln","10000000-count-few":"00 mln","10000000-count-many":"00 mln","10000000-count-other":"00 mln","100000000-count-one":"000 mln","100000000-count-few":"000 mln","100000000-count-many":"000 mln","100000000-count-other":"000 mln","1000000000-count-one":"0 mld","1000000000-count-few":"0 mld","1000000000-count-many":"0 mld","1000000000-count-other":"0 mld","10000000000-count-one":"00 mld","10000000000-count-few":"00 mld","10000000000-count-many":"00 mld","10000000000-count-other":"00 mld","100000000000-count-one":"000 mld","100000000000-count-few":"000 mld","100000000000-count-many":"000 mld","100000000000-count-other":"000 mld","1000000000000-count-one":"0 bln","1000000000000-count-few":"0 bln","1000000000000-count-many":"0 bln","1000000000000-count-other":"0 bln","10000000000000-count-one":"00 bln","10000000000000-count-few":"00 bln","10000000000000-count-many":"00 bln","10000000000000-count-other":"00 bln","100000000000000-count-one":"000 bln","100000000000000-count-few":"000 bln","100000000000000-count-many":"000 bln","100000000000000-count-other":"000 bln"}}},"scientificFormats-numberSystem-latn":{"standard":"#E0"},"percentFormats-numberSystem-latn":{"standard":"#,##0%"},"currencyFormats-numberSystem-latn":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"#,##0.00 ¤","accounting":"#,##0.00 ¤;(#,##0.00 ¤)","short":{"standard":{"1000-count-one":"0 tys'.' ¤","1000-count-few":"0 tys'.' ¤","1000-count-many":"0 tys'.' ¤","1000-count-other":"0 tys'.' ¤","10000-count-one":"00 tys'.' ¤","10000-count-few":"00 tys'.' ¤","10000-count-many":"00 tys'.' ¤","10000-count-other":"00 tys'.' ¤","100000-count-one":"000 tys'.' ¤","100000-count-few":"000 tys'.' ¤","100000-count-many":"000 tys'.' ¤","100000-count-other":"000 tys'.' ¤","1000000-count-one":"0 mln ¤","1000000-count-few":"0 mln ¤","1000000-count-many":"0 mln ¤","1000000-count-other":"0 mln ¤","10000000-count-one":"00 mln ¤","10000000-count-few":"00 mln ¤","10000000-count-many":"00 mln ¤","10000000-count-other":"00 mln ¤","100000000-count-one":"000 mln ¤","100000000-count-few":"000 mln ¤","100000000-count-many":"000 mln ¤","100000000-count-other":"000 mln ¤","1000000000-count-one":"0 mld ¤","1000000000-count-few":"0 mld ¤","1000000000-count-many":"0 mld ¤","1000000000-count-other":"0 mld ¤","10000000000-count-one":"00 mld ¤","10000000000-count-few":"00 mld ¤","10000000000-count-many":"00 mld ¤","10000000000-count-other":"00 mld ¤","100000000000-count-one":"000 mld ¤","100000000000-count-few":"000 mld ¤","100000000000-count-many":"000 mld ¤","100000000000-count-other":"000 mld ¤","1000000000000-count-one":"0 bln ¤","1000000000000-count-few":"0 bln ¤","1000000000000-count-many":"0 bln ¤","1000000000000-count-other":"0 bln ¤","10000000000000-count-one":"00 bln ¤","10000000000000-count-few":"00 bln ¤","10000000000000-count-many":"00 bln ¤","10000000000000-count-other":"00 bln ¤","100000000000000-count-one":"000 bln ¤","100000000000000-count-few":"000 bln ¤","100000000000000-count-many":"000 bln ¤","100000000000000-count-other":"000 bln ¤"}},"unitPattern-count-one":"{0} {1}","unitPattern-count-few":"{0} {1}","unitPattern-count-many":"{0} {1}","unitPattern-count-other":"{0} {1}"},"miscPatterns-numberSystem-latn":{"atLeast":"{0}+","range":"{0}–{1}"},"minimalPairs":{"pluralMinimalPairs-count-one":"{0} miesiąc","pluralMinimalPairs-count-few":"{0} miesiące","pluralMinimalPairs-count-many":"{0} miesięcy","pluralMinimalPairs-count-other":"{0} miesiąca","other":"Skręć w {0} w prawo."}}},"ro":{"identity":{"version":{"_number":"$Revision: 13705 $","_cldrVersion":"32"},"language":"ro"},"dates":{"calendars":{"gregorian":{"months":{"format":{"abbreviated":{"1":"ian.","2":"feb.","3":"mar.","4":"apr.","5":"mai","6":"iun.","7":"iul.","8":"aug.","9":"sept.","10":"oct.","11":"nov.","12":"dec."},"narrow":{"1":"I","2":"F","3":"M","4":"A","5":"M","6":"I","7":"I","8":"A","9":"S","10":"O","11":"N","12":"D"},"wide":{"1":"ianuarie","2":"februarie","3":"martie","4":"aprilie","5":"mai","6":"iunie","7":"iulie","8":"august","9":"septembrie","10":"octombrie","11":"noiembrie","12":"decembrie"}},"stand-alone":{"abbreviated":{"1":"ian.","2":"feb.","3":"mar.","4":"apr.","5":"mai","6":"iun.","7":"iul.","8":"aug.","9":"sept.","10":"oct.","11":"nov.","12":"dec."},"narrow":{"1":"I","2":"F","3":"M","4":"A","5":"M","6":"I","7":"I","8":"A","9":"S","10":"O","11":"N","12":"D"},"wide":{"1":"ianuarie","2":"februarie","3":"martie","4":"aprilie","5":"mai","6":"iunie","7":"iulie","8":"august","9":"septembrie","10":"octombrie","11":"noiembrie","12":"decembrie"}}},"days":{"format":{"abbreviated":{"sun":"dum.","mon":"lun.","tue":"mar.","wed":"mie.","thu":"joi","fri":"vin.","sat":"sâm."},"narrow":{"sun":"D","mon":"L","tue":"M","wed":"M","thu":"J","fri":"V","sat":"S"},"short":{"sun":"du.","mon":"lu.","tue":"ma.","wed":"mi.","thu":"joi","fri":"vi.","sat":"sâ."},"wide":{"sun":"duminică","mon":"luni","tue":"marți","wed":"miercuri","thu":"joi","fri":"vineri","sat":"sâmbătă"}},"stand-alone":{"abbreviated":{"sun":"dum.","mon":"lun.","tue":"mar.","wed":"mie.","thu":"joi","fri":"vin.","sat":"sâm."},"narrow":{"sun":"D","mon":"L","tue":"M","wed":"M","thu":"J","fri":"V","sat":"S"},"short":{"sun":"du.","mon":"lu.","tue":"ma.","wed":"mi.","thu":"joi","fri":"vi.","sat":"sâ."},"wide":{"sun":"duminică","mon":"luni","tue":"marți","wed":"miercuri","thu":"joi","fri":"vineri","sat":"sâmbătă"}}},"quarters":{"format":{"abbreviated":{"1":"trim. I","2":"trim. II","3":"trim. III","4":"trim. IV"},"narrow":{"1":"I","2":"II","3":"III","4":"IV"},"wide":{"1":"trimestrul I","2":"trimestrul al II-lea","3":"trimestrul al III-lea","4":"trimestrul al IV-lea"}},"stand-alone":{"abbreviated":{"1":"trim. I","2":"trim. II","3":"trim. III","4":"trim. IV"},"narrow":{"1":"I","2":"II","3":"III","4":"IV"},"wide":{"1":"trimestrul I","2":"trimestrul al II-lea","3":"trimestrul al III-lea","4":"trimestrul al IV-lea"}}},"dayPeriods":{"format":{"abbreviated":{"midnight":"miezul nopții","am":"a.m.","noon":"amiază","pm":"p.m.","morning1":"dimineața","afternoon1":"după-amiaza","evening1":"seara","night1":"noaptea"},"narrow":{"midnight":"miezul nopții","am":"a.m.","noon":"la amiază","pm":"p.m.","morning1":"dimineața","afternoon1":"după-amiaza","evening1":"seara","night1":"noaptea"},"wide":{"midnight":"la miezul nopții","am":"a.m.","noon":"la amiază","pm":"p.m.","morning1":"dimineața","afternoon1":"după-amiaza","evening1":"seara","night1":"noaptea"}},"stand-alone":{"abbreviated":{"midnight":"miezul nopții","am":"a.m.","noon":"amiază","pm":"p.m.","morning1":"dimineața","afternoon1":"după-amiaza","evening1":"seara","night1":"noaptea"},"narrow":{"midnight":"miezul nopții","am":"a.m.","noon":"amiază","pm":"p.m.","morning1":"dimineața","afternoon1":"după-amiaza","evening1":"seara","night1":"noaptea"},"wide":{"midnight":"la miezul nopții","am":"a.m.","noon":"la amiază","pm":"p.m.","morning1":"dimineața","afternoon1":"după-amiaza","evening1":"seara","night1":"noaptea"}}},"eras":{"eraNames":{"0":"înainte de Hristos","1":"după Hristos","0-alt-variant":"înaintea erei noastre","1-alt-variant":"era noastră"},"eraAbbr":{"0":"î.Hr.","1":"d.Hr.","0-alt-variant":"î.e.n","1-alt-variant":"e.n."},"eraNarrow":{"0":"î.Hr.","1":"d.Hr.","0-alt-variant":"î.e.n","1-alt-variant":"e.n."}},"dateFormats":{"full":"EEEE, d MMMM y","long":"d MMMM y","medium":"d MMM y","short":"dd.MM.y"},"timeFormats":{"full":"HH:mm:ss zzzz","long":"HH:mm:ss z","medium":"HH:mm:ss","short":"HH:mm"},"dateTimeFormats":{"full":"{1}, {0}","long":"{1}, {0}","medium":"{1}, {0}","short":"{1}, {0}","availableFormats":{"Bh":"h B","Bhm":"h:mm B","Bhms":"h:mm:ss B","d":"d","E":"ccc","EBhm":"E h:mm B","EBhms":"E h:mm:ss B","Ed":"E d","Ehm":"E h:mm a","EHm":"E HH:mm","Ehms":"E h:mm:ss a","EHms":"E HH:mm:ss","Gy":"y G","GyMMM":"MMM y G","GyMMMd":"d MMM y G","GyMMMEd":"E, d MMM y G","h":"h a","H":"HH","hm":"h:mm a","Hm":"HH:mm","hms":"h:mm:ss a","Hms":"HH:mm:ss","hmsv":"h:mm:ss a v","Hmsv":"HH:mm:ss v","hmv":"h:mm a v","Hmv":"HH:mm v","M":"L","Md":"dd.MM","MEd":"E, dd.MM","MMdd":"dd.MM","MMM":"LLL","MMMd":"d MMM","MMMEd":"E, d MMM","MMMMd":"d MMMM","MMMMEd":"E, d MMMM","MMMMW-count-one":"'săptămâna' W 'din' MMM","MMMMW-count-few":"'săptămâna' W 'din' MMM","MMMMW-count-other":"'săptămâna' W 'din' MMM","ms":"mm:ss","y":"y","yM":"MM.y","yMd":"dd.MM.y","yMEd":"E, dd.MM.y","yMM":"MM.y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"E, d MMM y","yMMMM":"MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","yw-count-one":"'săptămâna' w 'din' Y","yw-count-few":"'săptămâna' w 'din' Y","yw-count-other":"'săptămâna' w 'din' Y"},"appendItems":{"Day":"{0} ({2}: {1})","Day-Of-Week":"{0} {1}","Era":"{1} {0}","Hour":"{0} ({2}: {1})","Minute":"{0} ({2}: {1})","Month":"{0} ({2}: {1})","Quarter":"{0} ({2}: {1})","Second":"{0} ({2}: {1})","Timezone":"{0} {1}","Week":"{0} ({2}: {1})","Year":"{1} {0}"},"intervalFormats":{"intervalFormatFallback":"{0} – {1}","d":{"d":"d–d"},"h":{"a":"h a – h a","h":"h–h a"},"H":{"H":"HH–HH"},"hm":{"a":"h:mm a – h:mm a","h":"h:mm–h:mm a","m":"h:mm–h:mm a"},"Hm":{"H":"HH:mm–HH:mm","m":"HH:mm–HH:mm"},"hmv":{"a":"h:mm a – h:mm a v","h":"h:mm–h:mm a v","m":"h:mm–h:mm a v"},"Hmv":{"H":"HH:mm–HH:mm v","m":"HH:mm–HH:mm v"},"hv":{"a":"h a – h a v","h":"h–h a v"},"Hv":{"H":"HH–HH v"},"M":{"M":"M–M"},"Md":{"d":"dd.MM – dd.MM","M":"dd.MM – dd.MM"},"MEd":{"d":"E, dd.MM – E, dd.MM","M":"E, dd.MM – E, dd.MM"},"MMM":{"M":"MMM–MMM"},"MMMd":{"d":"d–d MMM","M":"d MMM – d MMM"},"MMMEd":{"d":"E, d MMM – E, d MMM","M":"E, d MMM – E, d MMM"},"y":{"y":"y–y"},"yM":{"M":"MM.y – MM.y","y":"MM.y – MM.y"},"yMd":{"d":"dd.MM.y – dd.MM.y","M":"dd.MM.y – dd.MM.y","y":"dd.MM.y – dd.MM.y"},"yMEd":{"d":"E, dd.MM.y – E, dd.MM.y","M":"E, dd.MM.y – E, dd.MM.y","y":"E, dd.MM.y – E, dd.MM.y"},"yMMM":{"M":"MMM–MMM y","y":"MMM y – MMM y"},"yMMMd":{"d":"d–d MMM y","M":"d MMM – d MMM y","y":"d MMM y – d MMM y"},"yMMMEd":{"d":"E, d MMM – E, d MMM y","M":"E, d MMM – E, d MMM y","y":"E, d MMM y – E, d MMM y"},"yMMMM":{"M":"MMMM – MMMM y","y":"MMMM y – MMMM y"}}}}},"fields":{"era":{"displayName":"eră"},"era-short":{"displayName":"eră"},"era-narrow":{"displayName":"eră"},"year":{"displayName":"an","relative-type--1":"anul trecut","relative-type-0":"anul acesta","relative-type-1":"anul viitor","relativeTime-type-future":{"relativeTimePattern-count-one":"peste {0} an","relativeTimePattern-count-few":"peste {0} ani","relativeTimePattern-count-other":"peste {0} de ani"},"relativeTime-type-past":{"relativeTimePattern-count-one":"acum {0} an","relativeTimePattern-count-few":"acum {0} ani","relativeTimePattern-count-other":"acum {0} de ani"}},"year-short":{"displayName":"an","relative-type--1":"anul trecut","relative-type-0":"anul acesta","relative-type-1":"anul viitor","relativeTime-type-future":{"relativeTimePattern-count-one":"peste {0} an","relativeTimePattern-count-few":"peste {0} ani","relativeTimePattern-count-other":"peste {0} de ani"},"relativeTime-type-past":{"relativeTimePattern-count-one":"acum {0} an","relativeTimePattern-count-few":"acum {0} ani","relativeTimePattern-count-other":"acum {0} de ani"}},"year-narrow":{"displayName":"an","relative-type--1":"anul trecut","relative-type-0":"anul acesta","relative-type-1":"anul viitor","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} an","relativeTimePattern-count-few":"+{0} ani","relativeTimePattern-count-other":"+{0} ani"},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} an","relativeTimePattern-count-few":"-{0} ani","relativeTimePattern-count-other":"-{0} ani"}},"quarter":{"displayName":"trimestru","relative-type--1":"trimestrul trecut","relative-type-0":"trimestrul acesta","relative-type-1":"trimestrul viitor","relativeTime-type-future":{"relativeTimePattern-count-one":"peste {0} trimestru","relativeTimePattern-count-few":"peste {0} trimestre","relativeTimePattern-count-other":"peste {0} de trimestre"},"relativeTime-type-past":{"relativeTimePattern-count-one":"acum {0} trimestru","relativeTimePattern-count-few":"acum {0} trimestre","relativeTimePattern-count-other":"acum {0} de trimestre"}},"quarter-short":{"displayName":"trim.","relative-type--1":"trim. trecut","relative-type-0":"trim. acesta","relative-type-1":"trim. viitor","relativeTime-type-future":{"relativeTimePattern-count-one":"peste {0} trim.","relativeTimePattern-count-few":"peste {0} trim.","relativeTimePattern-count-other":"peste {0} trim."},"relativeTime-type-past":{"relativeTimePattern-count-one":"acum {0} trim.","relativeTimePattern-count-few":"acum {0} trim.","relativeTimePattern-count-other":"acum {0} trim."}},"quarter-narrow":{"displayName":"trim.","relative-type--1":"trim. trecut","relative-type-0":"trim. acesta","relative-type-1":"trim. viitor","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} trim.","relativeTimePattern-count-few":"+{0} trim.","relativeTimePattern-count-other":"+{0} trim."},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} trim.","relativeTimePattern-count-few":"-{0} trim.","relativeTimePattern-count-other":"-{0} trim."}},"month":{"displayName":"lună","relative-type--1":"luna trecută","relative-type-0":"luna aceasta","relative-type-1":"luna viitoare","relativeTime-type-future":{"relativeTimePattern-count-one":"peste {0} lună","relativeTimePattern-count-few":"peste {0} luni","relativeTimePattern-count-other":"peste {0} de luni"},"relativeTime-type-past":{"relativeTimePattern-count-one":"acum {0} lună","relativeTimePattern-count-few":"acum {0} luni","relativeTimePattern-count-other":"acum {0} de luni"}},"month-short":{"displayName":"lună","relative-type--1":"luna trecută","relative-type-0":"luna aceasta","relative-type-1":"luna viitoare","relativeTime-type-future":{"relativeTimePattern-count-one":"peste {0} lună","relativeTimePattern-count-few":"peste {0} luni","relativeTimePattern-count-other":"peste {0} luni"},"relativeTime-type-past":{"relativeTimePattern-count-one":"acum {0} lună","relativeTimePattern-count-few":"acum {0} luni","relativeTimePattern-count-other":"acum {0} luni"}},"month-narrow":{"displayName":"lună","relative-type--1":"luna trecută","relative-type-0":"luna aceasta","relative-type-1":"luna viitoare","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} lună","relativeTimePattern-count-few":"+{0} luni","relativeTimePattern-count-other":"+{0} luni"},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} lună","relativeTimePattern-count-few":"-{0} luni","relativeTimePattern-count-other":"-{0} luni"}},"week":{"displayName":"săptămână","relative-type--1":"săptămâna trecută","relative-type-0":"săptămâna aceasta","relative-type-1":"săptămâna viitoare","relativeTime-type-future":{"relativeTimePattern-count-one":"peste {0} săptămână","relativeTimePattern-count-few":"peste {0} săptămâni","relativeTimePattern-count-other":"peste {0} de săptămâni"},"relativeTime-type-past":{"relativeTimePattern-count-one":"acum {0} săptămână","relativeTimePattern-count-few":"acum {0} săptămâni","relativeTimePattern-count-other":"acum {0} de săptămâni"},"relativePeriod":"săptămâna cu {0}"},"week-short":{"displayName":"săpt.","relative-type--1":"săptămâna trecută","relative-type-0":"săptămâna aceasta","relative-type-1":"săptămâna viitoare","relativeTime-type-future":{"relativeTimePattern-count-one":"peste {0} săpt.","relativeTimePattern-count-few":"peste {0} săpt.","relativeTimePattern-count-other":"peste {0} săpt."},"relativeTime-type-past":{"relativeTimePattern-count-one":"acum {0} săpt.","relativeTimePattern-count-few":"acum {0} săpt.","relativeTimePattern-count-other":"acum {0} săpt."},"relativePeriod":"săpt. cu {0}"},"week-narrow":{"displayName":"săpt.","relative-type--1":"săptămâna trecută","relative-type-0":"săptămâna aceasta","relative-type-1":"săptămâna viitoare","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} săpt.","relativeTimePattern-count-few":"+{0} săpt.","relativeTimePattern-count-other":"+{0} săpt."},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} săpt.","relativeTimePattern-count-few":"-{0} săpt.","relativeTimePattern-count-other":"-{0} săpt."},"relativePeriod":"săpt. cu {0}"},"weekOfMonth":{"displayName":"săptămâna din lună"},"weekOfMonth-short":{"displayName":"săpt. din lună"},"weekOfMonth-narrow":{"displayName":"săpt. din lună"},"day":{"displayName":"zi","relative-type--2":"alaltăieri","relative-type--1":"ieri","relative-type-0":"azi","relative-type-1":"mâine","relative-type-2":"poimâine","relativeTime-type-future":{"relativeTimePattern-count-one":"peste {0} zi","relativeTimePattern-count-few":"peste {0} zile","relativeTimePattern-count-other":"peste {0} de zile"},"relativeTime-type-past":{"relativeTimePattern-count-one":"acum {0} zi","relativeTimePattern-count-few":"acum {0} zile","relativeTimePattern-count-other":"acum {0} de zile"}},"day-short":{"displayName":"zi","relative-type--2":"alaltăieri","relative-type--1":"ieri","relative-type-0":"azi","relative-type-1":"mâine","relative-type-2":"poimâine","relativeTime-type-future":{"relativeTimePattern-count-one":"peste {0} zi","relativeTimePattern-count-few":"peste {0} zile","relativeTimePattern-count-other":"peste {0} de zile"},"relativeTime-type-past":{"relativeTimePattern-count-one":"acum {0} zi","relativeTimePattern-count-few":"acum {0} zile","relativeTimePattern-count-other":"acum {0} de zile"}},"day-narrow":{"displayName":"zi","relative-type--2":"alaltăieri","relative-type--1":"ieri","relative-type-0":"azi","relative-type-1":"mâine","relative-type-2":"poimâine","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} zi","relativeTimePattern-count-few":"+{0} zile","relativeTimePattern-count-other":"+{0} zile"},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} zi","relativeTimePattern-count-few":"-{0} zile","relativeTimePattern-count-other":"-{0} zile"}},"dayOfYear":{"displayName":"ziua din an"},"dayOfYear-short":{"displayName":"ziua din an"},"dayOfYear-narrow":{"displayName":"ziua din an"},"weekday":{"displayName":"ziua din săptămână"},"weekday-short":{"displayName":"ziua din săpt."},"weekday-narrow":{"displayName":"ziua din săpt."},"weekdayOfMonth":{"displayName":"ziua săptămânii din lună"},"weekdayOfMonth-short":{"displayName":"ziua săpt. din lună"},"weekdayOfMonth-narrow":{"displayName":"ziua săpt. din lună"},"sun":{"relative-type--1":"duminica trecută","relative-type-0":"duminica aceasta","relative-type-1":"duminica viitoare","relativeTime-type-future":{"relativeTimePattern-count-one":"duminică, peste {0} săptămână","relativeTimePattern-count-few":"duminică, peste {0} săptămâni","relativeTimePattern-count-other":"duminică, peste {0} de săptămâni"},"relativeTime-type-past":{"relativeTimePattern-count-one":"duminică, acum {0} săptămână","relativeTimePattern-count-few":"duminică, acum {0} săptămâni","relativeTimePattern-count-other":"duminică, acum {0} de săptămâni"}},"sun-short":{"relative-type--1":"dum. trecută","relative-type-0":"dum. aceasta","relative-type-1":"dum. viitoare","relativeTime-type-future":{"relativeTimePattern-count-one":"duminică, peste {0} săpt.","relativeTimePattern-count-few":"duminică, peste {0} săpt.","relativeTimePattern-count-other":"duminică, peste {0} săpt."},"relativeTime-type-past":{"relativeTimePattern-count-one":"duminică, acum {0} săpt.","relativeTimePattern-count-few":"duminică, acum {0} săpt.","relativeTimePattern-count-other":"duminică, acum {0} săpt."}},"sun-narrow":{"relative-type--1":"du. trecută","relative-type-0":"du. aceasta","relative-type-1":"du. viitoare","relativeTime-type-future":{"relativeTimePattern-count-one":"du. +{0} săpt.","relativeTimePattern-count-few":"du. +{0} săpt.","relativeTimePattern-count-other":"du. +{0} săpt."},"relativeTime-type-past":{"relativeTimePattern-count-one":"du. -{0} săpt.","relativeTimePattern-count-few":"du. -{0} săpt.","relativeTimePattern-count-other":"du. -{0} săpt."}},"mon":{"relative-type--1":"lunea trecută","relative-type-0":"lunea aceasta","relative-type-1":"lunea viitoare","relativeTime-type-future":{"relativeTimePattern-count-one":"luni, peste {0} săptămână","relativeTimePattern-count-few":"luni, peste {0} săptămâni","relativeTimePattern-count-other":"luni, peste {0} de săptămâni"},"relativeTime-type-past":{"relativeTimePattern-count-one":"luni, acum {0} săptămână","relativeTimePattern-count-few":"luni, acum {0} săptămâni","relativeTimePattern-count-other":"luni, acum {0} de săptămâni"}},"mon-short":{"relative-type--1":"lun. trecută","relative-type-0":"lun. aceasta","relative-type-1":"lun. viitoare","relativeTime-type-future":{"relativeTimePattern-count-one":"luni, peste {0} săpt.","relativeTimePattern-count-few":"luni, peste {0} săpt.","relativeTimePattern-count-other":"luni, peste {0} săpt."},"relativeTime-type-past":{"relativeTimePattern-count-one":"luni, acum {0} săpt.","relativeTimePattern-count-few":"luni, acum {0} săpt.","relativeTimePattern-count-other":"luni, acum {0} săpt."}},"mon-narrow":{"relative-type--1":"lu. trecută","relative-type-0":"lu. aceasta","relative-type-1":"lu. viitoare","relativeTime-type-future":{"relativeTimePattern-count-one":"lu. +{0} săpt.","relativeTimePattern-count-few":"lu. +{0} săpt.","relativeTimePattern-count-other":"lu. +{0} săpt."},"relativeTime-type-past":{"relativeTimePattern-count-one":"lu. -{0} săpt.","relativeTimePattern-count-few":"lu. -{0} săpt.","relativeTimePattern-count-other":"lu. -{0} săpt."}},"tue":{"relative-type--1":"marțea trecută","relative-type-0":"marțea aceasta","relative-type-1":"marțea viitoare","relativeTime-type-future":{"relativeTimePattern-count-one":"marți, peste {0} săptămână","relativeTimePattern-count-few":"marți, peste {0} săptămâni","relativeTimePattern-count-other":"marți, peste {0} de săptămâni"},"relativeTime-type-past":{"relativeTimePattern-count-one":"marți, acum {0} săptămână","relativeTimePattern-count-few":"marți, acum {0} săptămâni","relativeTimePattern-count-other":"marți, acum {0} de săptămâni"}},"tue-short":{"relative-type--1":"mar. trecută","relative-type-0":"mar. aceasta","relative-type-1":"mar. viitoare","relativeTime-type-future":{"relativeTimePattern-count-one":"marți, peste {0} săpt.","relativeTimePattern-count-few":"marți, peste {0} săpt.","relativeTimePattern-count-other":"marți, peste {0} săpt."},"relativeTime-type-past":{"relativeTimePattern-count-one":"marți, acum {0} săpt.","relativeTimePattern-count-few":"marți, acum {0} săpt.","relativeTimePattern-count-other":"marți, acum {0} săpt."}},"tue-narrow":{"relative-type--1":"ma. trecută","relative-type-0":"ma. aceasta","relative-type-1":"ma. viitoare","relativeTime-type-future":{"relativeTimePattern-count-one":"ma. +{0} săpt.","relativeTimePattern-count-few":"ma. +{0} săpt.","relativeTimePattern-count-other":"ma. +{0} săpt."},"relativeTime-type-past":{"relativeTimePattern-count-one":"ma. -{0} săpt.","relativeTimePattern-count-few":"ma. -{0} săpt.","relativeTimePattern-count-other":"ma. -{0} săpt."}},"wed":{"relative-type--1":"miercurea trecută","relative-type-0":"miercurea aceasta","relative-type-1":"miercurea viitoare","relativeTime-type-future":{"relativeTimePattern-count-one":"miercuri, peste {0} săptămână","relativeTimePattern-count-few":"miercuri, peste {0} săptămâni","relativeTimePattern-count-other":"miercuri, peste {0} de săptămâni"},"relativeTime-type-past":{"relativeTimePattern-count-one":"miercuri, acum {0} săptămână","relativeTimePattern-count-few":"miercuri, acum {0} săptămâni","relativeTimePattern-count-other":"miercuri, acum {0} de săptămâni"}},"wed-short":{"relative-type--1":"mie. trecută","relative-type-0":"mie. aceasta","relative-type-1":"mie. viitoare","relativeTime-type-future":{"relativeTimePattern-count-one":"miercuri, peste {0} săpt.","relativeTimePattern-count-few":"miercuri, peste {0} săpt.","relativeTimePattern-count-other":"miercuri, peste {0} săpt."},"relativeTime-type-past":{"relativeTimePattern-count-one":"miercuri, acum {0} săpt.","relativeTimePattern-count-few":"miercuri, acum {0} săpt.","relativeTimePattern-count-other":"miercuri, acum {0} săpt."}},"wed-narrow":{"relative-type--1":"mi. trecută","relative-type-0":"mi. aceasta","relative-type-1":"mi. viitoare","relativeTime-type-future":{"relativeTimePattern-count-one":"mi. +{0} săpt.","relativeTimePattern-count-few":"mi. +{0} săpt.","relativeTimePattern-count-other":"mi. +{0} săpt."},"relativeTime-type-past":{"relativeTimePattern-count-one":"mi. -{0} săpt.","relativeTimePattern-count-few":"mi. -{0} săpt.","relativeTimePattern-count-other":"mi. -{0} săpt."}},"thu":{"relative-type--1":"joia trecută","relative-type-0":"joia aceasta","relative-type-1":"joia viitoare","relativeTime-type-future":{"relativeTimePattern-count-one":"joi, peste {0} săptămână","relativeTimePattern-count-few":"joi, peste {0} săptămâni","relativeTimePattern-count-other":"joi, peste {0} de săptămâni"},"relativeTime-type-past":{"relativeTimePattern-count-one":"joi, acum {0} săptămână","relativeTimePattern-count-few":"joi, acum {0} săptămâni","relativeTimePattern-count-other":"joi, acum {0} de săptămâni"}},"thu-short":{"relative-type--1":"joia trecută","relative-type-0":"joia aceasta","relative-type-1":"joia viitoare","relativeTime-type-future":{"relativeTimePattern-count-one":"joi, peste {0} săpt.","relativeTimePattern-count-few":"joi, peste {0} săpt.","relativeTimePattern-count-other":"joi, peste {0} săpt."},"relativeTime-type-past":{"relativeTimePattern-count-one":"joi, acum {0} săpt.","relativeTimePattern-count-few":"joi, acum {0} săpt.","relativeTimePattern-count-other":"joi, acum {0} săpt."}},"thu-narrow":{"relative-type--1":"jo. trecută","relative-type-0":"jo. aceasta","relative-type-1":"jo. viitoare","relativeTime-type-future":{"relativeTimePattern-count-one":"jo. +{0} săpt.","relativeTimePattern-count-few":"jo. +{0} săpt.","relativeTimePattern-count-other":"jo. +{0} săpt."},"relativeTime-type-past":{"relativeTimePattern-count-one":"jo. -{0} săpt.","relativeTimePattern-count-few":"jo. -{0} săpt.","relativeTimePattern-count-other":"jo. -{0} săpt."}},"fri":{"relative-type--1":"vinerea trecută","relative-type-0":"vinerea aceasta","relative-type-1":"vinerea viitoare","relativeTime-type-future":{"relativeTimePattern-count-one":"vineri, peste {0} săptămână","relativeTimePattern-count-few":"vineri, peste {0} săptămâni","relativeTimePattern-count-other":"vineri, peste {0} de săptămâni"},"relativeTime-type-past":{"relativeTimePattern-count-one":"vineri, acum {0} săptămână","relativeTimePattern-count-few":"vineri, acum {0} săptămâni","relativeTimePattern-count-other":"vineri, acum {0} de săptămâni"}},"fri-short":{"relative-type--1":"vin. trecută","relative-type-0":"vin. aceasta","relative-type-1":"vin. viitoare","relativeTime-type-future":{"relativeTimePattern-count-one":"vineri, peste {0} săpt.","relativeTimePattern-count-few":"vineri, peste {0} săpt.","relativeTimePattern-count-other":"vineri, peste {0} săpt."},"relativeTime-type-past":{"relativeTimePattern-count-one":"vineri, acum {0} săpt.","relativeTimePattern-count-few":"vineri, acum {0} săpt.","relativeTimePattern-count-other":"vineri, acum {0} săpt."}},"fri-narrow":{"relative-type--1":"vi. trecută","relative-type-0":"vi. aceasta","relative-type-1":"vi. viitoare","relativeTime-type-future":{"relativeTimePattern-count-one":"vi. +{0} săpt.","relativeTimePattern-count-few":"vi. +{0} săpt.","relativeTimePattern-count-other":"vi. +{0} săpt."},"relativeTime-type-past":{"relativeTimePattern-count-one":"vi. -{0} săpt.","relativeTimePattern-count-few":"vi. -{0} săpt.","relativeTimePattern-count-other":"vi. -{0} săpt."}},"sat":{"relative-type--1":"sâmbăta trecută","relative-type-0":"sâmbăta aceasta","relative-type-1":"sâmbăta viitoare","relativeTime-type-future":{"relativeTimePattern-count-one":"sâmbătă, peste {0} săptămână","relativeTimePattern-count-few":"sâmbătă, peste {0} săptămâni","relativeTimePattern-count-other":"sâmbătă, peste {0} de săptămâni"},"relativeTime-type-past":{"relativeTimePattern-count-one":"sâmbătă, acum {0} săptămână","relativeTimePattern-count-few":"sâmbătă, acum {0} săptămâni","relativeTimePattern-count-other":"sâmbătă, acum de {0} săptămâni"}},"sat-short":{"relative-type--1":"sâm. trecută","relative-type-0":"sâm. aceasta","relative-type-1":"sâm. viitoare","relativeTime-type-future":{"relativeTimePattern-count-one":"sâmbătă, peste {0} săpt.","relativeTimePattern-count-few":"sâmbătă, peste {0} săpt.","relativeTimePattern-count-other":"sâmbătă, peste {0} săpt."},"relativeTime-type-past":{"relativeTimePattern-count-one":"sâmbătă, acum {0} săpt.","relativeTimePattern-count-few":"sâmbătă, acum {0} săpt.","relativeTimePattern-count-other":"sâmbătă, acum {0} săpt."}},"sat-narrow":{"relative-type--1":"sâ. trecută","relative-type-0":"sâ. aceasta","relative-type-1":"sâ. viitoare","relativeTime-type-future":{"relativeTimePattern-count-one":"sâ. +{0} săpt.","relativeTimePattern-count-few":"sâ. +{0} săpt.","relativeTimePattern-count-other":"sâ. +{0} săpt."},"relativeTime-type-past":{"relativeTimePattern-count-one":"sâ. -{0} săpt.","relativeTimePattern-count-few":"sâ. -{0} săpt.","relativeTimePattern-count-other":"sâ. -{0} săpt."}},"dayperiod-short":{"displayName":"a.m/p.m."},"dayperiod":{"displayName":"a.m/p.m."},"dayperiod-narrow":{"displayName":"a.m/p.m."},"hour":{"displayName":"oră","relative-type-0":"ora aceasta","relativeTime-type-future":{"relativeTimePattern-count-one":"peste {0} oră","relativeTimePattern-count-few":"peste {0} ore","relativeTimePattern-count-other":"peste {0} de ore"},"relativeTime-type-past":{"relativeTimePattern-count-one":"acum {0} oră","relativeTimePattern-count-few":"acum {0} ore","relativeTimePattern-count-other":"acum {0} de ore"}},"hour-short":{"displayName":"h","relative-type-0":"ora aceasta","relativeTime-type-future":{"relativeTimePattern-count-one":"peste {0} h","relativeTimePattern-count-few":"peste {0} h","relativeTimePattern-count-other":"peste {0} h"},"relativeTime-type-past":{"relativeTimePattern-count-one":"acum {0} h","relativeTimePattern-count-few":"acum {0} h","relativeTimePattern-count-other":"acum {0} h"}},"hour-narrow":{"displayName":"h","relative-type-0":"ora aceasta","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} h","relativeTimePattern-count-few":"+{0} h","relativeTimePattern-count-other":"+{0} h"},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} h","relativeTimePattern-count-few":"-{0} h","relativeTimePattern-count-other":"-{0} h"}},"minute":{"displayName":"minut","relative-type-0":"minutul acesta","relativeTime-type-future":{"relativeTimePattern-count-one":"peste {0} minut","relativeTimePattern-count-few":"peste {0} minute","relativeTimePattern-count-other":"peste {0} de minute"},"relativeTime-type-past":{"relativeTimePattern-count-one":"acum {0} minut","relativeTimePattern-count-few":"acum {0} minute","relativeTimePattern-count-other":"acum {0} de minute"}},"minute-short":{"displayName":"min.","relative-type-0":"minutul acesta","relativeTime-type-future":{"relativeTimePattern-count-one":"peste {0} min.","relativeTimePattern-count-few":"peste {0} min.","relativeTimePattern-count-other":"peste {0} min."},"relativeTime-type-past":{"relativeTimePattern-count-one":"acum {0} min.","relativeTimePattern-count-few":"acum {0} min.","relativeTimePattern-count-other":"acum {0} min."}},"minute-narrow":{"displayName":"m","relative-type-0":"minutul acesta","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} m","relativeTimePattern-count-few":"+{0} m","relativeTimePattern-count-other":"+{0} m"},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} m","relativeTimePattern-count-few":"-{0} m","relativeTimePattern-count-other":"-{0} m"}},"second":{"displayName":"secundă","relative-type-0":"acum","relativeTime-type-future":{"relativeTimePattern-count-one":"peste {0} secundă","relativeTimePattern-count-few":"peste {0} secunde","relativeTimePattern-count-other":"peste {0} de secunde"},"relativeTime-type-past":{"relativeTimePattern-count-one":"acum {0} secundă","relativeTimePattern-count-few":"acum {0} secunde","relativeTimePattern-count-other":"acum {0} de secunde"}},"second-short":{"displayName":"sec.","relative-type-0":"acum","relativeTime-type-future":{"relativeTimePattern-count-one":"peste {0} sec.","relativeTimePattern-count-few":"peste {0} sec.","relativeTimePattern-count-other":"peste {0} sec."},"relativeTime-type-past":{"relativeTimePattern-count-one":"acum {0} sec.","relativeTimePattern-count-few":"acum {0} sec.","relativeTimePattern-count-other":"acum {0} sec."}},"second-narrow":{"displayName":"s","relative-type-0":"acum","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} s","relativeTimePattern-count-few":"+{0} s","relativeTimePattern-count-other":"+{0} s"},"relativeTime-type-past":{"relativeTimePattern-count-one":"-{0} s","relativeTimePattern-count-few":"-{0} s","relativeTimePattern-count-other":"-{0} s"}},"zone":{"displayName":"fus orar"},"zone-short":{"displayName":"fus"},"zone-narrow":{"displayName":"fus"}}},"numbers":{"currencies":{"ADP":{"displayName":"pesetă andorrană","displayName-count-one":"pesetă andorrană","displayName-count-few":"pesete andorrane","displayName-count-other":"pesete andorrane","symbol":"ADP"},"AED":{"displayName":"dirham din Emiratele Arabe Unite","displayName-count-one":"dirham din Emiratele Arabe Unite","displayName-count-few":"dirhami din Emiratele Arabe Unite","displayName-count-other":"dirhami din Emiratele Arabe Unite","symbol":"AED"},"AFA":{"displayName":"AFA","symbol":"AFA"},"AFN":{"displayName":"afgani afgan","displayName-count-one":"afgani afgan","displayName-count-few":"afgani afgani","displayName-count-other":"afgani afgani","symbol":"AFN"},"ALK":{"displayName":"ALK","symbol":"ALK"},"ALL":{"displayName":"leka albaneză","displayName-count-one":"leka albaneză","displayName-count-few":"leka albaneze","displayName-count-other":"leka albaneze","symbol":"ALL"},"AMD":{"displayName":"dram armenesc","displayName-count-one":"dram armenesc","displayName-count-few":"drami armenești","displayName-count-other":"drami armenești","symbol":"AMD"},"ANG":{"displayName":"gulden din Antilele Olandeze","displayName-count-one":"gulden din Antilele Olandeze","displayName-count-few":"guldeni din Antilele Olandeze","displayName-count-other":"guldeni din Antilele Olandeze","symbol":"ANG"},"AOA":{"displayName":"kwanza angoleză","displayName-count-one":"kwanza angoleză","displayName-count-few":"kwanze angoleze","displayName-count-other":"kwanze angoleze","symbol":"AOA","symbol-alt-narrow":"Kz"},"AOK":{"displayName":"AOK","symbol":"AOK"},"AON":{"displayName":"AON","symbol":"AON"},"AOR":{"displayName":"AOR","symbol":"AOR"},"ARA":{"displayName":"ARA","symbol":"ARA"},"ARL":{"displayName":"ARL","symbol":"ARL"},"ARM":{"displayName":"ARM","symbol":"ARM"},"ARP":{"displayName":"peso argentinian (1983–1985)","displayName-count-one":"peso argentinian (1983–1985)","displayName-count-few":"pesos argentinieni (1983–1985)","displayName-count-other":"pesos argentinieni (1983–1985)","symbol":"ARP"},"ARS":{"displayName":"peso argentinian","displayName-count-one":"peso argentinian","displayName-count-few":"pesos argentinieni","displayName-count-other":"pesos argentinieni","symbol":"ARS","symbol-alt-narrow":"$"},"ATS":{"displayName":"șiling austriac","displayName-count-one":"șiling austriac","displayName-count-few":"șilingi austrieci","displayName-count-other":"șilingi austrieci","symbol":"ATS"},"AUD":{"displayName":"dolar australian","displayName-count-one":"dolar australian","displayName-count-few":"dolari australieni","displayName-count-other":"dolari australieni","symbol":"AUD","symbol-alt-narrow":"$"},"AWG":{"displayName":"florin aruban","displayName-count-one":"florin aruban","displayName-count-few":"florini arubani","displayName-count-other":"florini arubani","symbol":"AWG"},"AZM":{"displayName":"manat azer (1993–2006)","symbol":"AZM"},"AZN":{"displayName":"manat azer","displayName-count-one":"manat azer","displayName-count-few":"manați azeri","displayName-count-other":"manați azeri","symbol":"AZN"},"BAD":{"displayName":"dinar Bosnia-Herțegovina (1992–1994)","displayName-count-one":"dinar Bosnia-Herțegovina (1992–1994)","displayName-count-few":"dinari Bosnia-Herțegovina","displayName-count-other":"dinari Bosnia-Herțegovina (1992–1994)","symbol":"BAD"},"BAM":{"displayName":"marcă convertibilă din Bosnia și Herțegovina","displayName-count-one":"marcă convertibilă din Bosnia și Herțegovina","displayName-count-few":"mărci convertibile din Bosnia și Herțegovina","displayName-count-other":"mărci convertibile din Bosnia și Herțegovina","symbol":"BAM","symbol-alt-narrow":"KM"},"BAN":{"displayName":"BAN","symbol":"BAN"},"BBD":{"displayName":"dolar din Barbados","displayName-count-one":"dolar din Barbados","displayName-count-few":"dolari din Barbados","displayName-count-other":"dolari din Barbados","symbol":"BBD","symbol-alt-narrow":"$"},"BDT":{"displayName":"taka din Bangladesh","displayName-count-one":"taka din Bangladesh","displayName-count-few":"taka din Bangladesh","displayName-count-other":"taka din Bangladesh","symbol":"BDT","symbol-alt-narrow":"৳"},"BEC":{"displayName":"franc belgian (convertibil)","displayName-count-one":"franc belgian (convertibil)","displayName-count-few":"franci belgieni (convertibili)","displayName-count-other":"franci belgieni (convertibili)","symbol":"BEC"},"BEF":{"displayName":"franc belgian","displayName-count-one":"franc belgian","displayName-count-few":"franci belgieni","displayName-count-other":"franci belgieni","symbol":"BEF"},"BEL":{"displayName":"franc belgian (financiar)","displayName-count-one":"franc belgian (financiar)","displayName-count-few":"franci belgieni (financiari)","displayName-count-other":"franci belgieni (financiari)","symbol":"BEL"},"BGL":{"displayName":"BGL","symbol":"BGL"},"BGM":{"displayName":"BGM","symbol":"BGM"},"BGN":{"displayName":"leva bulgărească","displayName-count-one":"leva bulgărească","displayName-count-few":"leva bulgărești","displayName-count-other":"leva bulgărești","symbol":"BGN"},"BGO":{"displayName":"BGO","symbol":"BGO"},"BHD":{"displayName":"dinar din Bahrain","displayName-count-one":"dinar din Bahrain","displayName-count-few":"dinari din Bahrain","displayName-count-other":"dinari din Bahrain","symbol":"BHD"},"BIF":{"displayName":"franc burundez","displayName-count-one":"franc burundez","displayName-count-few":"franci burundezi","displayName-count-other":"franci burundezi","symbol":"BIF"},"BMD":{"displayName":"dolar din Bermuda","displayName-count-one":"dolar din Bermuda","displayName-count-few":"dolari din Bermuda","displayName-count-other":"dolari din Bermuda","symbol":"BMD","symbol-alt-narrow":"$"},"BND":{"displayName":"dolar din Brunei","displayName-count-one":"dolar din Brunei","displayName-count-few":"dolari din Brunei","displayName-count-other":"dolari Brunei","symbol":"BND","symbol-alt-narrow":"$"},"BOB":{"displayName":"boliviano bolivian","displayName-count-one":"boliviano bolivian","displayName-count-few":"boliviano bolivieni","displayName-count-other":"boliviano bolivieni","symbol":"BOB","symbol-alt-narrow":"Bs"},"BOL":{"displayName":"BOL","symbol":"BOL"},"BOP":{"displayName":"peso bolivian","displayName-count-one":"peso bolivian","displayName-count-few":"pesos bolivieni","displayName-count-other":"pesos bolivieni","symbol":"BOP"},"BOV":{"displayName":"mvdol bolivian","symbol":"BOV"},"BRB":{"displayName":"BRB","symbol":"BRB"},"BRC":{"displayName":"BRC","symbol":"BRC"},"BRE":{"displayName":"cruzeiro brazilian (1990–1993)","symbol":"BRE"},"BRL":{"displayName":"real brazilian","displayName-count-one":"real brazilian","displayName-count-few":"reali brazilieni","displayName-count-other":"reali brazilieni","symbol":"BRL","symbol-alt-narrow":"R$"},"BRN":{"displayName":"BRN","symbol":"BRN"},"BRR":{"displayName":"cruzeiro brazilian (1993–1994)","symbol":"BRR"},"BRZ":{"displayName":"BRZ","symbol":"BRZ"},"BSD":{"displayName":"dolar din Bahamas","displayName-count-one":"dolar din Bahamas","displayName-count-few":"dolari din Bahamas","displayName-count-other":"dolari din Bahamas","symbol":"BSD","symbol-alt-narrow":"$"},"BTN":{"displayName":"ngultrum din Bhutan","displayName-count-one":"ngultrum din Bhutan","displayName-count-few":"ngultrum din Bhutan","displayName-count-other":"ngultrum din Bhutan","symbol":"BTN"},"BUK":{"displayName":"kyat birman","symbol":"BUK"},"BWP":{"displayName":"pula Botswana","displayName-count-one":"pula Botswana","displayName-count-few":"pula Botswana","displayName-count-other":"pula Botswana","symbol":"BWP","symbol-alt-narrow":"P"},"BYB":{"displayName":"BYB","symbol":"BYB"},"BYN":{"displayName":"rublă belarusă","displayName-count-one":"rublă belarusă","displayName-count-few":"ruble belaruse","displayName-count-other":"ruble belaruse","symbol":"BYN","symbol-alt-narrow":"р."},"BYR":{"displayName":"rublă belarusă (2000–2016)","displayName-count-one":"rublă belarusă (2000–2016)","displayName-count-few":"ruble belaruse (2000–2016)","displayName-count-other":"ruble belaruse (2000–2016)","symbol":"BYR"},"BZD":{"displayName":"dolar din Belize","displayName-count-one":"dolar din Belize","displayName-count-few":"dolari din Belize","displayName-count-other":"dolari din Belize","symbol":"BZD","symbol-alt-narrow":"$"},"CAD":{"displayName":"dolar canadian","displayName-count-one":"dolar canadian","displayName-count-few":"dolari canadieni","displayName-count-other":"dolari canadieni","symbol":"CAD","symbol-alt-narrow":"$"},"CDF":{"displayName":"franc congolez","displayName-count-one":"franc congolez","displayName-count-few":"franci congolezi","displayName-count-other":"franci congolezi","symbol":"CDF"},"CHE":{"displayName":"CHE","symbol":"CHE"},"CHF":{"displayName":"franc elvețian","displayName-count-one":"franc elvețian","displayName-count-few":"franci elvețieni","displayName-count-other":"franci elvețieni","symbol":"CHF"},"CHW":{"displayName":"CHW","symbol":"CHW"},"CLE":{"displayName":"CLE","symbol":"CLE"},"CLF":{"displayName":"CLF","symbol":"CLF"},"CLP":{"displayName":"peso chilian","displayName-count-one":"peso chilian","displayName-count-few":"pesos chilieni","displayName-count-other":"pesos chilieni","symbol":"CLP","symbol-alt-narrow":"$"},"CNH":{"displayName":"yuan chinezesc (offshore)","displayName-count-one":"yuan chinezesc (offshore)","displayName-count-few":"yuani chinezești (offshore)","displayName-count-other":"yuani chinezești (offshore)","symbol":"CNH"},"CNX":{"displayName":"CNX","symbol":"CNX"},"CNY":{"displayName":"yuan chinezesc","displayName-count-one":"yuan chinezesc","displayName-count-few":"yuani chinezești","displayName-count-other":"yuani chinezești","symbol":"CNY","symbol-alt-narrow":"¥"},"COP":{"displayName":"peso columbian","displayName-count-one":"peso columbian","displayName-count-few":"pesos columbieni","displayName-count-other":"pesos columbieni","symbol":"COP","symbol-alt-narrow":"$"},"COU":{"displayName":"COU","symbol":"COU"},"CRC":{"displayName":"colon costarican","displayName-count-one":"colon costarican","displayName-count-few":"coloni costaricani","displayName-count-other":"coloni costaricani","symbol":"CRC","symbol-alt-narrow":"₡"},"CSD":{"displayName":"dinar Serbia și Muntenegru (2002–2006)","displayName-count-one":"dinar Serbia și Muntenegru (2002–2006)","displayName-count-few":"dinari Serbia și Muntenegru (2002–2006)","displayName-count-other":"dinari Serbia și Muntenegru (2002–2006)","symbol":"CSD"},"CSK":{"displayName":"CSK","symbol":"CSK"},"CUC":{"displayName":"peso cubanez convertibil","displayName-count-one":"peso cubanez convertibil","displayName-count-few":"pesos cubanezi convertibili","displayName-count-other":"pesos cubanezi convertibili","symbol":"CUC","symbol-alt-narrow":"$"},"CUP":{"displayName":"peso cubanez","displayName-count-one":"peso cubanez","displayName-count-few":"pesos cubanezi","displayName-count-other":"pesos cubanezi","symbol":"CUP","symbol-alt-narrow":"$"},"CVE":{"displayName":"escudo din Capul Verde","displayName-count-one":"escudo din Capul Verde","displayName-count-few":"escudo din Capul Verde","displayName-count-other":"escudo din Capul Verde","symbol":"CVE"},"CYP":{"displayName":"liră cipriotă","displayName-count-one":"liră cipriotă","displayName-count-few":"lire cipriote","displayName-count-other":"lire cipriote","symbol":"CYP"},"CZK":{"displayName":"coroană cehă","displayName-count-one":"coroană cehă","displayName-count-few":"coroane cehe","displayName-count-other":"coroane cehe","symbol":"CZK","symbol-alt-narrow":"Kč"},"DDM":{"displayName":"marcă est-germană","displayName-count-one":"marcă est-germană","displayName-count-few":"mărci est-germane","displayName-count-other":"mărci est-germane","symbol":"DDM"},"DEM":{"displayName":"marcă germană","displayName-count-one":"marcă germană","displayName-count-few":"mărci germane","displayName-count-other":"mărci germane","symbol":"DEM"},"DJF":{"displayName":"franc djiboutian","displayName-count-one":"franc djiboutian","displayName-count-few":"franci djiboutieni","displayName-count-other":"franci djiboutieni","symbol":"DJF"},"DKK":{"displayName":"coroană daneză","displayName-count-one":"coroană daneză","displayName-count-few":"coroane daneze","displayName-count-other":"coroane daneze","symbol":"DKK","symbol-alt-narrow":"kr"},"DOP":{"displayName":"peso dominican","displayName-count-one":"peso dominican","displayName-count-few":"pesos dominicani","displayName-count-other":"pesos dominicani","symbol":"DOP","symbol-alt-narrow":"$"},"DZD":{"displayName":"dinar algerian","displayName-count-one":"dinar algerian","displayName-count-few":"dinari algerieni","displayName-count-other":"dinari algerieni","symbol":"DZD"},"ECS":{"displayName":"sucre Ecuador","symbol":"ECS"},"ECV":{"displayName":"ECV","symbol":"ECV"},"EEK":{"displayName":"coroană estoniană","displayName-count-one":"coroană estoniană","displayName-count-few":"coroane estoniene","displayName-count-other":"coroane estoniene","symbol":"EEK"},"EGP":{"displayName":"liră egipteană","displayName-count-one":"liră egipteană","displayName-count-few":"lire egiptene","displayName-count-other":"lire egiptene","symbol":"EGP","symbol-alt-narrow":"E£"},"ERN":{"displayName":"nakfa eritreeană","displayName-count-one":"nakfa eritreeană","displayName-count-few":"nakfa eritreene","displayName-count-other":"nakfa eritreene","symbol":"ERN"},"ESA":{"displayName":"peseta spaniolă (cont A)","symbol":"ESA"},"ESB":{"displayName":"peseta spaniolă (cont convertibil)","symbol":"ESB"},"ESP":{"displayName":"pesetă spaniolă","displayName-count-one":"pesetă spaniolă","displayName-count-few":"pesete spaniole","displayName-count-other":"pesete spaniole","symbol":"ESP","symbol-alt-narrow":"₧"},"ETB":{"displayName":"birr etiopian","displayName-count-one":"birr etiopian","displayName-count-few":"birri etiopieni","displayName-count-other":"birri etiopieni","symbol":"ETB"},"EUR":{"displayName":"euro","displayName-count-one":"euro","displayName-count-few":"euro","displayName-count-other":"euro","symbol":"EUR","symbol-alt-narrow":"€"},"FIM":{"displayName":"marcă finlandeză","displayName-count-one":"mărci finlandeze","displayName-count-few":"mărci finlandeze","displayName-count-other":"mărci finlandeze","symbol":"FIM"},"FJD":{"displayName":"dolar fijian","displayName-count-one":"dolar fijian","displayName-count-few":"dolari fijieni","displayName-count-other":"dolari fijieni","symbol":"FJD","symbol-alt-narrow":"$"},"FKP":{"displayName":"liră din Insulele Falkland","displayName-count-one":"liră din Insulele Falkland","displayName-count-few":"lire din Insulele Falkland","displayName-count-other":"lire din Insulele Falkland","symbol":"FKP","symbol-alt-narrow":"£"},"FRF":{"displayName":"franc francez","displayName-count-one":"franc francez","displayName-count-few":"franci francezi","displayName-count-other":"franci francezi","symbol":"FRF"},"GBP":{"displayName":"liră sterlină","displayName-count-one":"liră sterlină","displayName-count-few":"lire sterline","displayName-count-other":"lire sterline","symbol":"GBP","symbol-alt-narrow":"£"},"GEK":{"displayName":"GEK","symbol":"GEK"},"GEL":{"displayName":"lari georgian","displayName-count-one":"lari georgian","displayName-count-few":"lari georgieni","displayName-count-other":"lari georgieni","symbol":"GEL","symbol-alt-narrow":"₾","symbol-alt-variant":"₾"},"GHC":{"displayName":"cedi Ghana (1979–2007)","symbol":"GHC"},"GHS":{"displayName":"cedi ghanez","displayName-count-one":"cedi ghanez","displayName-count-few":"cedi ghanezi","displayName-count-other":"cedi ghanezi","symbol":"GHS"},"GIP":{"displayName":"liră din Gibraltar","displayName-count-one":"liră din Gibraltar","displayName-count-few":"lire din Gibraltar","displayName-count-other":"lire Gibraltar","symbol":"GIP","symbol-alt-narrow":"£"},"GMD":{"displayName":"dalasi din Gambia","displayName-count-one":"dalasi din Gambia","displayName-count-few":"dalasi din Gambia","displayName-count-other":"dalasi din Gambia","symbol":"GMD"},"GNF":{"displayName":"franc guineean","displayName-count-one":"franc guineean","displayName-count-few":"franci guineeni","displayName-count-other":"franci guineeni","symbol":"GNF","symbol-alt-narrow":"FG"},"GNS":{"displayName":"GNS","symbol":"GNS"},"GQE":{"displayName":"GQE","symbol":"GQE"},"GRD":{"displayName":"drahmă grecească","displayName-count-one":"drahmă grecească","displayName-count-few":"drahme grecești","displayName-count-other":"drahme grecești","symbol":"GRD"},"GTQ":{"displayName":"quetzal guatemalez","displayName-count-one":"quetzal guatemalez","displayName-count-few":"quetzali guatemalezi","displayName-count-other":"quetzali guatemalezi","symbol":"GTQ","symbol-alt-narrow":"Q"},"GWE":{"displayName":"GWE","symbol":"GWE"},"GWP":{"displayName":"peso Guineea-Bissau","displayName-count-one":"peso Guineea-Bissau","displayName-count-few":"pesos Guineea-Bissau","displayName-count-other":"pesos Guineea-Bissau","symbol":"GWP"},"GYD":{"displayName":"dolar guyanez","displayName-count-one":"dolar guyanez","displayName-count-few":"dolari guyanezi","displayName-count-other":"dolari guyanezi","symbol":"GYD","symbol-alt-narrow":"$"},"HKD":{"displayName":"dolar din Hong Kong","displayName-count-one":"dolar din Hong Kong","displayName-count-few":"dolari din Hong Kong","displayName-count-other":"dolari din Hong Kong","symbol":"HKD","symbol-alt-narrow":"$"},"HNL":{"displayName":"lempira honduriană","displayName-count-one":"lempiră honduriană","displayName-count-few":"lempire honduriene","displayName-count-other":"lempire honduriene","symbol":"HNL","symbol-alt-narrow":"L"},"HRD":{"displayName":"dinar croat","displayName-count-one":"dinar croat","displayName-count-few":"dinari croați","displayName-count-other":"dinari croați","symbol":"HRD"},"HRK":{"displayName":"kuna croată","displayName-count-one":"kuna croată","displayName-count-few":"kune croate","displayName-count-other":"kune croate","symbol":"HRK","symbol-alt-narrow":"kn"},"HTG":{"displayName":"gourde din Haiti","displayName-count-one":"gourde din Haiti","displayName-count-few":"gourde din Haiti","displayName-count-other":"gourde din Haiti","symbol":"HTG"},"HUF":{"displayName":"forint maghiar","displayName-count-one":"forint maghiar","displayName-count-few":"forinți maghiari","displayName-count-other":"forinți maghiari","symbol":"HUF","symbol-alt-narrow":"Ft"},"IDR":{"displayName":"rupie indoneziană","displayName-count-one":"rupie indoneziană","displayName-count-few":"rupii indoneziene","displayName-count-other":"rupii indoneziene","symbol":"IDR","symbol-alt-narrow":"Rp"},"IEP":{"displayName":"liră irlandeză","displayName-count-one":"liră irlandeză","displayName-count-few":"lire irlandeze","displayName-count-other":"lire irlandeze","symbol":"IEP"},"ILP":{"displayName":"liră israeliană","displayName-count-one":"liră israeliană","displayName-count-few":"lire israeliene","displayName-count-other":"lire israeliene","symbol":"ILP"},"ILR":{"displayName":"ILR","symbol":"ILR"},"ILS":{"displayName":"șechel israelian nou","displayName-count-one":"șechel israelian nou","displayName-count-few":"șecheli israelieni noi","displayName-count-other":"șecheli israelieni noi","symbol":"ILS","symbol-alt-narrow":"₪"},"INR":{"displayName":"rupie indiană","displayName-count-one":"rupie indiană","displayName-count-few":"rupii indiene","displayName-count-other":"rupii indiene","symbol":"INR","symbol-alt-narrow":"₹"},"IQD":{"displayName":"dinar irakian","displayName-count-one":"dinar irakian","displayName-count-few":"dinari irakieni","displayName-count-other":"dinari irakieni","symbol":"IQD"},"IRR":{"displayName":"rial iranian","displayName-count-one":"rial iranian","displayName-count-few":"riali iranieni","displayName-count-other":"riali iranieni","symbol":"IRR"},"ISJ":{"displayName":"ISJ","symbol":"ISJ"},"ISK":{"displayName":"coroană islandeză","displayName-count-one":"coroană islandeză","displayName-count-few":"coroane islandeze","displayName-count-other":"coroane islandeze","symbol":"ISK","symbol-alt-narrow":"kr"},"ITL":{"displayName":"liră italiană","displayName-count-one":"liră italiană","displayName-count-few":"lire italiene","displayName-count-other":"lire italiene","symbol":"ITL"},"JMD":{"displayName":"dolar jamaican","displayName-count-one":"dolar jamaican","displayName-count-few":"dolari jamaicani","displayName-count-other":"dolari jamaicani","symbol":"JMD","symbol-alt-narrow":"$"},"JOD":{"displayName":"dinar iordanian","displayName-count-one":"dinar iordanian","displayName-count-few":"dinari iordanieni","displayName-count-other":"dinari iordanieni","symbol":"JOD"},"JPY":{"displayName":"yen japonez","displayName-count-one":"yen japonez","displayName-count-few":"yeni japonezi","displayName-count-other":"yeni japonezi","symbol":"JPY","symbol-alt-narrow":"¥"},"KES":{"displayName":"șiling kenyan","displayName-count-one":"șiling kenyan","displayName-count-few":"șilingi kenyeni","displayName-count-other":"șilingi kenyeni","symbol":"KES"},"KGS":{"displayName":"som kârgâz","displayName-count-one":"som kârgâz","displayName-count-few":"somi kârgâzi","displayName-count-other":"somi kârgâzi","symbol":"KGS"},"KHR":{"displayName":"riel cambodgian","displayName-count-one":"riel cambodgian","displayName-count-few":"rieli cambodgieni","displayName-count-other":"rieli cambodgieni","symbol":"KHR","symbol-alt-narrow":"៛"},"KMF":{"displayName":"franc comorian","displayName-count-one":"franc comorian","displayName-count-few":"franci comorieni","displayName-count-other":"franci comorieni","symbol":"KMF","symbol-alt-narrow":"CF"},"KPW":{"displayName":"won nord-coreean","displayName-count-one":"won nord-coreean","displayName-count-few":"woni nord-coreeni","displayName-count-other":"woni nord-coreeni","symbol":"KPW","symbol-alt-narrow":"₩"},"KRH":{"displayName":"KRH","symbol":"KRH"},"KRO":{"displayName":"KRO","symbol":"KRO"},"KRW":{"displayName":"won sud-coreean","displayName-count-one":"won sud-coreean","displayName-count-few":"woni sud-coreeni","displayName-count-other":"woni sud-coreeni","symbol":"KRW","symbol-alt-narrow":"₩"},"KWD":{"displayName":"dinar kuweitian","displayName-count-one":"dinar kuweitian","displayName-count-few":"dinari kuweitieni","displayName-count-other":"dinari kuweitieni","symbol":"KWD"},"KYD":{"displayName":"dolar din Insulele Cayman","displayName-count-one":"dolar din Insulele Cayman","displayName-count-few":"dolari din Insulele Cayman","displayName-count-other":"dolari din Insulele Cayman","symbol":"KYD","symbol-alt-narrow":"$"},"KZT":{"displayName":"tenge kazahă","displayName-count-one":"tenge kazahă","displayName-count-few":"tenge kazahe","displayName-count-other":"tenge kazahe","symbol":"KZT","symbol-alt-narrow":"₸"},"LAK":{"displayName":"kip laoțian","displayName-count-one":"kip laoțian","displayName-count-few":"kipi laoțieni","displayName-count-other":"kipi laoțieni","symbol":"LAK","symbol-alt-narrow":"₭"},"LBP":{"displayName":"liră libaneză","displayName-count-one":"liră libaneză","displayName-count-few":"lire libaneze","displayName-count-other":"lire libaneze","symbol":"LBP","symbol-alt-narrow":"L£"},"LKR":{"displayName":"rupie srilankeză","displayName-count-one":"rupie srilankeză","displayName-count-few":"rupii srilankeze","displayName-count-other":"rupii srilankeze","symbol":"LKR","symbol-alt-narrow":"Rs"},"LRD":{"displayName":"dolar liberian","displayName-count-one":"dolar liberian","displayName-count-few":"dolari liberieni","displayName-count-other":"dolari liberieni","symbol":"LRD","symbol-alt-narrow":"$"},"LSL":{"displayName":"loti lesothian","symbol":"LSL"},"LTL":{"displayName":"litu lituanian","displayName-count-one":"litu lituanian","displayName-count-few":"lite lituaniene","displayName-count-other":"lite lituaniene","symbol":"LTL","symbol-alt-narrow":"Lt"},"LTT":{"displayName":"LTT","symbol":"LTT"},"LUC":{"displayName":"franc convertibil luxemburghez","displayName-count-one":"franc convertibil luxemburghez","displayName-count-few":"franci convertibili luxemburghezi","displayName-count-other":"franci convertibili luxemburghezi","symbol":"LUC"},"LUF":{"displayName":"franc luxemburghez","displayName-count-one":"franc luxemburghez","displayName-count-few":"franci luxemburghezi","displayName-count-other":"franci luxemburghezi","symbol":"LUF"},"LUL":{"displayName":"franc financiar luxemburghez","displayName-count-one":"franc financiar luxemburghez","displayName-count-few":"franci financiari luxemburghezi","displayName-count-other":"franci financiari luxemburghezi","symbol":"LUL"},"LVL":{"displayName":"lats letonian","displayName-count-one":"lats letonian","displayName-count-few":"lats letonieni","displayName-count-other":"lats letonieni","symbol":"LVL","symbol-alt-narrow":"Ls"},"LVR":{"displayName":"rublă Letonia","displayName-count-one":"rublă Letonia","displayName-count-few":"ruble Letonia","displayName-count-other":"ruble Letonia","symbol":"LVR"},"LYD":{"displayName":"dinar libian","displayName-count-one":"dinar libian","displayName-count-few":"dinari libieni","displayName-count-other":"dinari libieni","symbol":"LYD"},"MAD":{"displayName":"dirham marocan","displayName-count-one":"dirham marocan","displayName-count-few":"dirhami marocani","displayName-count-other":"dirhami marocani","symbol":"MAD"},"MAF":{"displayName":"franc marocan","displayName-count-one":"franc marocan","displayName-count-few":"franci marocani","displayName-count-other":"franci marocani","symbol":"MAF"},"MCF":{"displayName":"MCF","symbol":"MCF"},"MDC":{"displayName":"MDC","symbol":"MDC"},"MDL":{"displayName":"leu moldovenesc","displayName-count-one":"leu moldovenesc","displayName-count-few":"lei moldovenești","displayName-count-other":"lei moldovenești","symbol":"MDL"},"MGA":{"displayName":"ariary malgaș","displayName-count-one":"ariary malgaș","displayName-count-few":"ariary malgași","displayName-count-other":"ariary malgași","symbol":"MGA","symbol-alt-narrow":"Ar"},"MGF":{"displayName":"franc Madagascar","displayName-count-one":"franc Madagascar","displayName-count-few":"franci Madagascar","displayName-count-other":"franci Madagascar","symbol":"MGF"},"MKD":{"displayName":"dinar macedonean","displayName-count-one":"dinar macedonean","displayName-count-few":"dinari macedoneni","displayName-count-other":"dinari macedoneni","symbol":"MKD"},"MKN":{"displayName":"MKN","symbol":"MKN"},"MLF":{"displayName":"franc Mali","displayName-count-one":"franc Mali","displayName-count-few":"franci Mali","displayName-count-other":"franci Mali","symbol":"MLF"},"MMK":{"displayName":"kyat din Myanmar","displayName-count-one":"kyat din Myanmar","displayName-count-few":"kyați din Myanmar","displayName-count-other":"kyați din Myanmar","symbol":"MMK","symbol-alt-narrow":"K"},"MNT":{"displayName":"tugrik mongol","displayName-count-one":"tugrik mongol","displayName-count-few":"tugrici mongoli","displayName-count-other":"tugrici mongoli","symbol":"MNT","symbol-alt-narrow":"₮"},"MOP":{"displayName":"pataca din Macao","displayName-count-one":"pataca din Macao","displayName-count-few":"pataca din Macao","displayName-count-other":"pataca din Macao","symbol":"MOP"},"MRO":{"displayName":"ouguiya mauritană","displayName-count-one":"ouguiya mauritană","displayName-count-few":"ouguiya mauritane","displayName-count-other":"ouguiya mauritane","symbol":"MRO"},"MTL":{"displayName":"liră malteză","displayName-count-one":"liră malteză","displayName-count-few":"lire malteze","displayName-count-other":"lire malteze","symbol":"MTL"},"MTP":{"displayName":"MTP","symbol":"MTP"},"MUR":{"displayName":"rupie mauritiană","displayName-count-one":"rupie mauritiană","displayName-count-few":"rupii mauritiene","displayName-count-other":"rupii mauritiene","symbol":"MUR","symbol-alt-narrow":"Rs"},"MVP":{"displayName":"MVP","symbol":"MVP"},"MVR":{"displayName":"rufiyaa maldiviană","displayName-count-one":"rufiyaa maldiviană","displayName-count-few":"rufiyaa maldiviene","displayName-count-other":"rufiyaa maldiviene","symbol":"MVR"},"MWK":{"displayName":"kwacha malawiană","displayName-count-one":"kwacha malawiană","displayName-count-few":"kwache malawiene","displayName-count-other":"kwache malawiene","symbol":"MWK"},"MXN":{"displayName":"peso mexican","displayName-count-one":"peso mexican","displayName-count-few":"pesos mexicani","displayName-count-other":"pesos mexicani","symbol":"MXN","symbol-alt-narrow":"$"},"MXP":{"displayName":"peso mexican de argint (1861–1992)","displayName-count-one":"peso mexican de argint (1861–1992)","displayName-count-few":"pesos mexicani de argint (1861–1992","displayName-count-other":"pesos mexicani de argint (1861–1992)","symbol":"MXP"},"MXV":{"displayName":"MXV","symbol":"MXV"},"MYR":{"displayName":"ringgit malaiezian","displayName-count-one":"ringgit malaiezian","displayName-count-few":"ringgit malaiezieni","displayName-count-other":"ringgit malaiezieni","symbol":"MYR","symbol-alt-narrow":"RM"},"MZE":{"displayName":"escudo Mozambic","symbol":"MZE"},"MZM":{"displayName":"metical Mozambic vechi","symbol":"MZM"},"MZN":{"displayName":"metical mozambican","displayName-count-one":"metical mozambican","displayName-count-few":"metical mozambicani","displayName-count-other":"metical mozambicani","symbol":"MZN"},"NAD":{"displayName":"dolar namibian","displayName-count-one":"dolar namibian","displayName-count-few":"dolari namibieni","displayName-count-other":"dolari namibieni","symbol":"NAD","symbol-alt-narrow":"$"},"NGN":{"displayName":"naira nigeriană","displayName-count-one":"naira nigeriană","displayName-count-few":"naire nigeriene","displayName-count-other":"naire nigeriene","symbol":"NGN","symbol-alt-narrow":"₦"},"NIC":{"displayName":"cordoba nicaraguană (1988–1991)","symbol":"NIC"},"NIO":{"displayName":"cordoba nicaraguană","displayName-count-one":"cordoba nicaraguană","displayName-count-few":"cordobe nicaraguane","displayName-count-other":"cordobe nicaraguane","symbol":"NIO","symbol-alt-narrow":"C$"},"NLG":{"displayName":"gulden olandez","displayName-count-one":"gulden olandez","displayName-count-few":"guldeni olandezi","displayName-count-other":"guldeni olandezi","symbol":"NLG"},"NOK":{"displayName":"coroană norvegiană","displayName-count-one":"coroană norvegiană","displayName-count-few":"coroane norvegiene","displayName-count-other":"coroane norvegiene","symbol":"NOK","symbol-alt-narrow":"kr"},"NPR":{"displayName":"rupie nepaleză","displayName-count-one":"rupie nepaleză","displayName-count-few":"rupii nepaleze","displayName-count-other":"rupii nepaleze","symbol":"NPR","symbol-alt-narrow":"Rs"},"NZD":{"displayName":"dolar neozeelandez","displayName-count-one":"dolar neozeelandez","displayName-count-few":"dolari neozeelandezi","displayName-count-other":"dolari neozeelandezi","symbol":"NZD","symbol-alt-narrow":"$"},"OMR":{"displayName":"rial omanez","displayName-count-one":"rial omanez","displayName-count-few":"riali omanezi","displayName-count-other":"riali omanezi","symbol":"OMR"},"PAB":{"displayName":"balboa panameză","displayName-count-one":"balboa panameză","displayName-count-few":"balboa panameze","displayName-count-other":"balboa panameze","symbol":"PAB"},"PEI":{"displayName":"inti peruvian","symbol":"PEI"},"PEN":{"displayName":"sol peruvian","displayName-count-one":"sol peruvian","displayName-count-few":"soli peruvieni","displayName-count-other":"soli peruvieni","symbol":"PEN"},"PES":{"displayName":"sol peruvian (1863–1965)","displayName-count-one":"sol peruvian (1863–1965)","displayName-count-few":"soli peruvieni (1863–1965)","displayName-count-other":"soli peruvieni (1863–1965)","symbol":"PES"},"PGK":{"displayName":"kina din Papua-Noua Guinee","displayName-count-one":"kina din Papua-Noua Guinee","displayName-count-few":"kina din Papua-Noua Guinee","displayName-count-other":"kina din Papua-Noua Guinee","symbol":"PGK"},"PHP":{"displayName":"peso filipinez","displayName-count-one":"peso filipinez","displayName-count-few":"pesos filipinezi","displayName-count-other":"pesos filipinezi","symbol":"PHP","symbol-alt-narrow":"₱"},"PKR":{"displayName":"rupie pakistaneză","displayName-count-one":"rupie pakistaneză","displayName-count-few":"rupii pakistaneze","displayName-count-other":"rupii pakistaneze","symbol":"PKR","symbol-alt-narrow":"Rs"},"PLN":{"displayName":"zlot polonez","displayName-count-one":"zlot polonez","displayName-count-few":"zloți polonezi","displayName-count-other":"zloți polonezi","symbol":"PLN","symbol-alt-narrow":"zł"},"PLZ":{"displayName":"zlot polonez (1950–1995)","displayName-count-one":"zlot polonez (1950–1995)","displayName-count-few":"zloți polonezi (1950–1995)","displayName-count-other":"zloți polonezi (1950–1995)","symbol":"PLZ"},"PTE":{"displayName":"PTE","symbol":"PTE"},"PYG":{"displayName":"guarani paraguayan","displayName-count-one":"guarani paraguayan","displayName-count-few":"guarani paraguayeni","displayName-count-other":"guarani paraguayeni","symbol":"PYG","symbol-alt-narrow":"₲"},"QAR":{"displayName":"rial qatarian","displayName-count-one":"rial qatarian","displayName-count-few":"riali qatarieni","displayName-count-other":"riali qatarieni","symbol":"QAR"},"RHD":{"displayName":"dolar rhodesian","displayName-count-one":"dolar rhodesian","displayName-count-few":"dolari rhodesieni","displayName-count-other":"dolari rhodesieni","symbol":"RHD"},"ROL":{"displayName":"leu românesc (1952–2006)","displayName-count-one":"leu românesc (1952–2006)","displayName-count-few":"lei românești (1952–2006)","displayName-count-other":"lei românești (1952–2006)","symbol":"ROL"},"RON":{"displayName":"leu românesc","displayName-count-one":"leu românesc","displayName-count-few":"lei românești","displayName-count-other":"lei românești","symbol":"RON","symbol-alt-narrow":"lei"},"RSD":{"displayName":"dinar sârbesc","displayName-count-one":"dinar sârbesc","displayName-count-few":"dinari sârbești","displayName-count-other":"dinari sârbești","symbol":"RSD"},"RUB":{"displayName":"rublă rusească","displayName-count-one":"rublă rusească","displayName-count-few":"ruble rusești","displayName-count-other":"ruble rusești","symbol":"RUB","symbol-alt-narrow":"₽"},"RUR":{"displayName":"RUR","symbol":"RUR","symbol-alt-narrow":"р."},"RWF":{"displayName":"franc rwandez","displayName-count-one":"franc rwandez","displayName-count-few":"franci rwandezi","displayName-count-other":"franci rwandezi","symbol":"RWF","symbol-alt-narrow":"RF"},"SAR":{"displayName":"rial saudit","displayName-count-one":"rial saudit","displayName-count-few":"riali saudiți","displayName-count-other":"riali saudiți","symbol":"SAR"},"SBD":{"displayName":"dolar din Insulele Solomon","displayName-count-one":"dolar din Insulele Solomon","displayName-count-few":"dolari din Insulele Solomon","displayName-count-other":"dolari din Insulele Solomon","symbol":"SBD","symbol-alt-narrow":"$"},"SCR":{"displayName":"rupie din Seychelles","displayName-count-one":"rupie din Seychelles","displayName-count-few":"rupii din Seychelles","displayName-count-other":"rupii din Seychelles","symbol":"SCR"},"SDD":{"displayName":"dinar sudanez","displayName-count-one":"dinar sudanez","displayName-count-few":"dinari sudanezi","displayName-count-other":"dinari sudanezi","symbol":"SDD"},"SDG":{"displayName":"liră sudaneză","displayName-count-one":"liră sudaneză","displayName-count-few":"lire sudaneze","displayName-count-other":"lire sudaneze","symbol":"SDG"},"SDP":{"displayName":"liră sudaneză (1957–1998)","displayName-count-one":"liră sudaneză (1957–1998)","displayName-count-few":"lire sudaneze (1957–1998)","displayName-count-other":"lire sudaneze (1957–1998)","symbol":"SDP"},"SEK":{"displayName":"coroană suedeză","displayName-count-one":"coroană suedeză","displayName-count-few":"coroane suedeze","displayName-count-other":"coroane suedeze","symbol":"SEK","symbol-alt-narrow":"kr"},"SGD":{"displayName":"dolar singaporez","displayName-count-one":"dolar singaporez","displayName-count-few":"dolari singaporezi","displayName-count-other":"dolari singaporezi","symbol":"SGD","symbol-alt-narrow":"$"},"SHP":{"displayName":"liră Insula Sf. Elena","displayName-count-one":"liră Insula Sf. Elena","displayName-count-few":"lire Insula Sf. Elena","displayName-count-other":"lire Insula Sf. Elena","symbol":"SHP","symbol-alt-narrow":"£"},"SIT":{"displayName":"tolar sloven","displayName-count-one":"tolar sloven","displayName-count-few":"tolari sloveni","displayName-count-other":"tolari sloveni","symbol":"SIT"},"SKK":{"displayName":"coroană slovacă","displayName-count-one":"coroană slovacă","displayName-count-few":"coroane slovace","displayName-count-other":"coroane slovace","symbol":"SKK"},"SLL":{"displayName":"leone din Sierra Leone","displayName-count-one":"leone din Sierra Leone","displayName-count-few":"leoni din Sierra Leone","displayName-count-other":"leoni din Sierra Leone","symbol":"SLL"},"SOS":{"displayName":"șiling somalez","displayName-count-one":"șiling somalez","displayName-count-few":"șilingi somalezi","displayName-count-other":"șilingi somalezi","symbol":"SOS"},"SRD":{"displayName":"dolar surinamez","displayName-count-one":"dolar surinamez","displayName-count-few":"dolari surinamezi","displayName-count-other":"dolari surinamezi","symbol":"SRD","symbol-alt-narrow":"$"},"SRG":{"displayName":"gulden Surinam","displayName-count-one":"gulden Surinam","displayName-count-few":"guldeni Surinam","displayName-count-other":"guldeni Surinam","symbol":"SRG"},"SSP":{"displayName":"liră din Sudanul de Sud","displayName-count-one":"liră din Sudanul de Sud","displayName-count-few":"lire din Sudanul de Sud","displayName-count-other":"lire din Sudanul de Sud","symbol":"SSP","symbol-alt-narrow":"£"},"STD":{"displayName":"dobra Sao Tome și Principe","displayName-count-one":"dobra Sao Tome și Principe","displayName-count-few":"dobre Sao Tome și Principe","displayName-count-other":"dobre Sao Tome și Principe","symbol":"STD","symbol-alt-narrow":"Db"},"STN":{"displayName":"STN","symbol":"STN"},"SUR":{"displayName":"rublă sovietică","displayName-count-one":"rublă sovietică","displayName-count-few":"ruble sovietice","displayName-count-other":"ruble sovietice","symbol":"SUR"},"SVC":{"displayName":"colon El Salvador","displayName-count-one":"colon El Salvador","displayName-count-few":"coloni El Salvador","displayName-count-other":"coloni El Salvador","symbol":"SVC"},"SYP":{"displayName":"liră siriană","displayName-count-one":"liră siriană","displayName-count-few":"lire siriene","displayName-count-other":"lire siriene","symbol":"SYP","symbol-alt-narrow":"£"},"SZL":{"displayName":"lilangeni din Swaziland","displayName-count-one":"lilangeni din Swaziland","displayName-count-few":"emalangeni din Swaziland","displayName-count-other":"emalangeni din Swaziland","symbol":"SZL"},"THB":{"displayName":"baht thailandez","displayName-count-one":"baht thailandez","displayName-count-few":"bahți thailandezi","displayName-count-other":"bahți thailandezi","symbol":"THB","symbol-alt-narrow":"฿"},"TJR":{"displayName":"rublă Tadjikistan","displayName-count-one":"rublă Tadjikistan","displayName-count-few":"ruble Tadjikistan","displayName-count-other":"ruble Tadjikistan","symbol":"TJR"},"TJS":{"displayName":"somoni tadjic","displayName-count-one":"somoni tajdic","displayName-count-few":"somoni tadjici","displayName-count-other":"somoni tadjici","symbol":"TJS"},"TMM":{"displayName":"manat turkmen (1993–2009)","displayName-count-one":"manat turkmen (1993–2009)","displayName-count-few":"manat turkmeni (1993–2009)","displayName-count-other":"manat turkmeni (1993–2009)","symbol":"TMM"},"TMT":{"displayName":"manat turkmen","displayName-count-one":"manat turkmen","displayName-count-few":"manat turkmeni","displayName-count-other":"manat turkmeni","symbol":"TMT"},"TND":{"displayName":"dinar tunisian","displayName-count-one":"dinar tunisian","displayName-count-few":"dinari tunisieni","displayName-count-other":"dinari tunisieni","symbol":"TND"},"TOP":{"displayName":"pa’anga tongană","displayName-count-one":"pa’anga tongană","displayName-count-few":"pa’anga tongane","displayName-count-other":"pa’anga tongane","symbol":"TOP","symbol-alt-narrow":"T$"},"TPE":{"displayName":"TPE","symbol":"TPE"},"TRL":{"displayName":"liră turcească (1922–2005)","displayName-count-one":"liră turcească (1922–2005)","displayName-count-few":"liră turcească (1922–2005)","displayName-count-other":"lire turcești (1922–2005)","symbol":"TRL"},"TRY":{"displayName":"liră turcească","displayName-count-one":"liră turcească","displayName-count-few":"lire turcești","displayName-count-other":"lire turcești","symbol":"TRY","symbol-alt-narrow":"₺","symbol-alt-variant":"TL"},"TTD":{"displayName":"dolar din Trinidad-Tobago","displayName-count-one":"dolar din Trinidad-Tobago","displayName-count-few":"dolari din Trinidad-Tobago","displayName-count-other":"dolari din Trinidad-Tobago","symbol":"TTD","symbol-alt-narrow":"$"},"TWD":{"displayName":"dolar nou din Taiwan","displayName-count-one":"dolar nou din Taiwan","displayName-count-few":"dolari noi din Taiwan","displayName-count-other":"dolari noi Taiwan","symbol":"TWD","symbol-alt-narrow":"NT$"},"TZS":{"displayName":"șiling tanzanian","displayName-count-one":"șiling tanzanian","displayName-count-few":"șilingi tanzanieni","displayName-count-other":"șilingi tanzanieni","symbol":"TZS"},"UAH":{"displayName":"hryvna ucraineană","displayName-count-one":"hryvna ucrainiană","displayName-count-few":"hryvna ucrainiene","displayName-count-other":"hryvna ucrainiene","symbol":"UAH","symbol-alt-narrow":"₴"},"UAK":{"displayName":"carboavă ucraineană","displayName-count-one":"carboavă ucraineană","displayName-count-few":"carboave ucrainiene","displayName-count-other":"carboave ucrainiene","symbol":"UAK"},"UGS":{"displayName":"șiling ugandez (1966–1987)","displayName-count-one":"șiling ugandez (1966–1987)","displayName-count-few":"șilingi ugandezi (1966–1987)","displayName-count-other":"șilingi ugandezi (1966–1987)","symbol":"UGS"},"UGX":{"displayName":"șiling ugandez","displayName-count-one":"șiling ugandez","displayName-count-few":"șilingi ugandezi","displayName-count-other":"șilingi ugandezi","symbol":"UGX"},"USD":{"displayName":"dolar american","displayName-count-one":"dolar american","displayName-count-few":"dolari americani","displayName-count-other":"dolari americani","symbol":"USD","symbol-alt-narrow":"$"},"USN":{"displayName":"dolar american (ziua următoare)","displayName-count-one":"dolar american (ziua următoare)","displayName-count-few":"dolari americani (ziua următoare)","displayName-count-other":"dolari americani (ziua următoare)","symbol":"USN"},"USS":{"displayName":"dolar american (aceeași zi)","displayName-count-one":"dolar american (aceeași zi)","displayName-count-few":"dolari americani (aceeași zi)","displayName-count-other":"dolari americani (aceeași zi)","symbol":"USS"},"UYI":{"displayName":"UYI","symbol":"UYI"},"UYP":{"displayName":"peso Uruguay (1975–1993)","displayName-count-one":"peso Uruguay (1975–1993)","displayName-count-few":"pesos Uruguay (1975–1993)","displayName-count-other":"pesos Uruguay (1975–1993)","symbol":"UYP"},"UYU":{"displayName":"peso uruguayan","displayName-count-one":"peso uruguayan","displayName-count-few":"pesos uruguayeni","displayName-count-other":"pesos uruguayeni","symbol":"UYU","symbol-alt-narrow":"$"},"UZS":{"displayName":"sum Uzbekistan","displayName-count-one":"sum Uzbekistan","displayName-count-few":"sum Uzbekistan","displayName-count-other":"sum Uzbekistan","symbol":"UZS"},"VEB":{"displayName":"bolivar Venezuela (1871–2008)","displayName-count-one":"bolivar Venezuela (1871–2008)","displayName-count-few":"bolivari Venezuela (1871–2008)","displayName-count-other":"bolivari Venezuela (1871–2008)","symbol":"VEB"},"VEF":{"displayName":"bolivar venezuelean","displayName-count-one":"bolivar venezuelean","displayName-count-few":"bolivari venezueleni","displayName-count-other":"bolivari venezueleni","symbol":"VEF","symbol-alt-narrow":"Bs"},"VND":{"displayName":"dong vietnamez","displayName-count-one":"dong vietnamez","displayName-count-few":"dongi vietnamezi","displayName-count-other":"dongi vietnamezi","symbol":"VND","symbol-alt-narrow":"₫"},"VNN":{"displayName":"VNN","symbol":"VNN"},"VUV":{"displayName":"vatu din Vanuatu","displayName-count-one":"vatu din Vanuatu","displayName-count-few":"vatu din Vanuatu","displayName-count-other":"vatu din Vanuatu","symbol":"VUV"},"WST":{"displayName":"tala samoană","displayName-count-one":"tala samoană","displayName-count-few":"tala samoane","displayName-count-other":"tala samoană","symbol":"WST"},"XAF":{"displayName":"franc CFA BEAC","displayName-count-one":"franc CFA BEAC","displayName-count-few":"franci CFA BEAC","displayName-count-other":"franci CFA central-africani","symbol":"FCFA"},"XAG":{"displayName":"argint","symbol":"XAG"},"XAU":{"displayName":"aur","symbol":"XAU"},"XBA":{"displayName":"unitate compusă europeană","symbol":"XBA"},"XBB":{"displayName":"unitate monetară europeană","symbol":"XBB"},"XBC":{"displayName":"unitate de cont europeană (XBC)","symbol":"XBC"},"XBD":{"displayName":"unitate de cont europeană (XBD)","symbol":"XBD"},"XCD":{"displayName":"dolar din Caraibele de Est","displayName-count-one":"dolar din Caraibele de Est","displayName-count-few":"dolari din Caraibele de Est","displayName-count-other":"dolari din Caraibele de Est","symbol":"XCD","symbol-alt-narrow":"$"},"XDR":{"displayName":"drepturi speciale de tragere","symbol":"XDR"},"XEU":{"displayName":"unitate de monedă europeană","symbol":"XEU"},"XFO":{"displayName":"franc francez de aur","displayName-count-one":"franc francez de aur","displayName-count-few":"franci francezi de aur","displayName-count-other":"franci francezi de aur","symbol":"XFO"},"XFU":{"displayName":"franc UIC francez","symbol":"XFU"},"XOF":{"displayName":"franc CFA BCEAO","displayName-count-one":"franc CFA BCEAO","displayName-count-few":"franci CFA BCEAO","displayName-count-other":"franci CFA BCEAO","symbol":"CFA"},"XPD":{"displayName":"paladiu","symbol":"XPD"},"XPF":{"displayName":"franc CFP","displayName-count-one":"franc CFP","displayName-count-few":"franci CFP","displayName-count-other":"franci CFP","symbol":"CFPF"},"XPT":{"displayName":"platină","symbol":"XPT"},"XRE":{"displayName":"XRE","symbol":"XRE"},"XSU":{"displayName":"XSU","symbol":"XSU"},"XTS":{"displayName":"cod monetar de test","symbol":"XTS"},"XUA":{"displayName":"XUA","symbol":"XUA"},"XXX":{"displayName":"monedă necunoscută","displayName-count-one":"(unitate monetară necunoscută)","displayName-count-few":"(monedă necunoscută)","displayName-count-other":"(monedă necunoscută)","symbol":"XXX"},"YDD":{"displayName":"dinar Yemen","displayName-count-one":"dinar Yemen","displayName-count-few":"dinari Yemen","displayName-count-other":"dinari Yemen","symbol":"YDD"},"YER":{"displayName":"rial yemenit","displayName-count-one":"rial yemenit","displayName-count-few":"riali yemeniți","displayName-count-other":"riali yemeniți","symbol":"YER"},"YUD":{"displayName":"dinar iugoslav greu","displayName-count-one":"dinar iugoslav greu","displayName-count-few":"dinari iugoslavi grei","displayName-count-other":"dinari iugoslavi grei","symbol":"YUD"},"YUM":{"displayName":"dinar iugoslav nou","displayName-count-one":"dinar iugoslav nou","displayName-count-few":"dinari iugoslavi noi","displayName-count-other":"dinari iugoslavi noi","symbol":"YUM"},"YUN":{"displayName":"dinar iugoslav convertibil","displayName-count-one":"dinar iugoslav convertibil","displayName-count-few":"dinari iugoslavi convertibili","displayName-count-other":"dinari iugoslavi convertibili","symbol":"YUN"},"YUR":{"displayName":"YUR","symbol":"YUR"},"ZAL":{"displayName":"rand sud-african (financiar)","symbol":"ZAL"},"ZAR":{"displayName":"rand sud-african","displayName-count-one":"rand sud-african","displayName-count-few":"ranzi sud-africani","displayName-count-other":"ranzi sud-africani","symbol":"ZAR","symbol-alt-narrow":"R"},"ZMK":{"displayName":"kwacha zambian (1968–2012)","displayName-count-one":"kwacha zambiană (1968–2012)","displayName-count-few":"kwache zambiene (1968–2012)","displayName-count-other":"kwache zambiene (1968–2012)","symbol":"ZMK"},"ZMW":{"displayName":"kwacha zambian","displayName-count-one":"kwacha zambian","displayName-count-few":"kwache zambiene","displayName-count-other":"kwache zambiene","symbol":"ZMW","symbol-alt-narrow":"ZK"},"ZRN":{"displayName":"zair nou","displayName-count-one":"zair nou","displayName-count-few":"zairi noi","displayName-count-other":"zairi noi","symbol":"ZRN"},"ZRZ":{"displayName":"ZRZ","symbol":"ZRZ"},"ZWD":{"displayName":"dolar Zimbabwe (1980–2008)","displayName-count-one":"dolar Zimbabwe (1980–2008)","displayName-count-few":"dolari Zimbabwe (1980–2008)","displayName-count-other":"dolari Zimbabwe (1980–2008)","symbol":"ZWD"},"ZWL":{"displayName":"dolar Zimbabwe (2009)","symbol":"ZWL"},"ZWR":{"displayName":"dolar Zimbabwe (2008)","symbol":"ZWR"}},"defaultNumberingSystem":"latn","otherNumberingSystems":{"native":"latn"},"minimumGroupingDigits":"1","symbols-numberSystem-latn":{"decimal":",","group":".","list":";","percentSign":"%","plusSign":"+","minusSign":"-","exponential":"E","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"NaN","timeSeparator":":"},"decimalFormats-numberSystem-latn":{"standard":"#,##0.###","long":{"decimalFormat":{"1000-count-one":"0 mie","1000-count-few":"0 mii","1000-count-other":"0 de mii","10000-count-one":"00 mie","10000-count-few":"00 mii","10000-count-other":"00 de mii","100000-count-one":"000 mie","100000-count-few":"000 mii","100000-count-other":"000 de mii","1000000-count-one":"0 milion","1000000-count-few":"0 milioane","1000000-count-other":"0 de milioane","10000000-count-one":"00 milion","10000000-count-few":"00 milioane","10000000-count-other":"00 de milioane","100000000-count-one":"000 milion","100000000-count-few":"000 milioane","100000000-count-other":"000 de milioane","1000000000-count-one":"0 miliard","1000000000-count-few":"0 miliarde","1000000000-count-other":"0 de miliarde","10000000000-count-one":"00 miliard","10000000000-count-few":"00 miliarde","10000000000-count-other":"00 de miliarde","100000000000-count-one":"000 miliard","100000000000-count-few":"000 miliarde","100000000000-count-other":"000 de miliarde","1000000000000-count-one":"0 trilion","1000000000000-count-few":"0 trilioane","1000000000000-count-other":"0 de trilioane","10000000000000-count-one":"00 trilion","10000000000000-count-few":"00 trilioane","10000000000000-count-other":"00 de trilioane","100000000000000-count-one":"000 trilion","100000000000000-count-few":"000 trilioane","100000000000000-count-other":"000 de trilioane"}},"short":{"decimalFormat":{"1000-count-one":"0 K","1000-count-few":"0 K","1000-count-other":"0 K","10000-count-one":"00 K","10000-count-few":"00 K","10000-count-other":"00 K","100000-count-one":"000 K","100000-count-few":"000 K","100000-count-other":"000 K","1000000-count-one":"0 mil'.'","1000000-count-few":"0 mil'.'","1000000-count-other":"0 mil'.'","10000000-count-one":"00 mil'.'","10000000-count-few":"00 mil'.'","10000000-count-other":"00 mil'.'","100000000-count-one":"000 mil'.'","100000000-count-few":"000 mil'.'","100000000-count-other":"000 mil'.'","1000000000-count-one":"0 mld'.'","1000000000-count-few":"0 mld'.'","1000000000-count-other":"0 mld'.'","10000000000-count-one":"00 mld'.'","10000000000-count-few":"00 mld'.'","10000000000-count-other":"00 mld'.'","100000000000-count-one":"000 mld'.'","100000000000-count-few":"000 mld'.'","100000000000-count-other":"000 mld'.'","1000000000000-count-one":"0 tril'.'","1000000000000-count-few":"0 tril'.'","1000000000000-count-other":"0 tril'.'","10000000000000-count-one":"00 tril'.'","10000000000000-count-few":"00 tril'.'","10000000000000-count-other":"00 tril'.'","100000000000000-count-one":"000 tril'.'","100000000000000-count-few":"000 tril'.'","100000000000000-count-other":"000 tril'.'"}}},"scientificFormats-numberSystem-latn":{"standard":"#E0"},"percentFormats-numberSystem-latn":{"standard":"#,##0 %"},"currencyFormats-numberSystem-latn":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"#,##0.00 ¤","accounting":"#,##0.00 ¤;(#,##0.00 ¤)","short":{"standard":{"1000-count-one":"0 mie ¤","1000-count-few":"0 mii ¤","1000-count-other":"0 mii ¤","10000-count-one":"00 mii ¤","10000-count-few":"00 mii ¤","10000-count-other":"00 mii ¤","100000-count-one":"000 mii ¤","100000-count-few":"000 mii ¤","100000-count-other":"000 mii ¤","1000000-count-one":"0 mil'.' ¤","1000000-count-few":"0 mil'.' ¤","1000000-count-other":"0 mil'.' ¤","10000000-count-one":"00 mil'.' ¤","10000000-count-few":"00 mil'.' ¤","10000000-count-other":"00 mil'.' ¤","100000000-count-one":"000 mil'.' ¤","100000000-count-few":"000 mil'.' ¤","100000000-count-other":"000 mil'.' ¤","1000000000-count-one":"0 mld'.' ¤","1000000000-count-few":"0 mld'.' ¤","1000000000-count-other":"0 mld'.' ¤","10000000000-count-one":"00 mld'.' ¤","10000000000-count-few":"00 mld'.' ¤","10000000000-count-other":"00 mld'.' ¤","100000000000-count-one":"000 mld'.' ¤","100000000000-count-few":"000 mld'.' ¤","100000000000-count-other":"000 mld'.' ¤","1000000000000-count-one":"0 tril'.' ¤","1000000000000-count-few":"0 tril'.' ¤","1000000000000-count-other":"0 tril'.' ¤","10000000000000-count-one":"00 tril'.' ¤","10000000000000-count-few":"00 tril'.' ¤","10000000000000-count-other":"00 tril'.' ¤","100000000000000-count-one":"000 tril'.' ¤","100000000000000-count-few":"000 tril'.' ¤","100000000000000-count-other":"000 tril'.' ¤"}},"unitPattern-count-one":"{0} {1}","unitPattern-count-few":"{0} {1}","unitPattern-count-other":"{0} de {1}"},"miscPatterns-numberSystem-latn":{"atLeast":"⩾{0}","range":"{0} - {1}"},"minimalPairs":{"pluralMinimalPairs-count-one":"{0} zi","pluralMinimalPairs-count-few":"{0} zile","pluralMinimalPairs-count-other":"{0} de zile","one":"Faceți virajul nr. {0} la dreapta.","other":"Faceți virajul al {0}-lea la dreapta."}}},"sl":{"identity":{"version":{"_number":"$Revision: 13701 $","_cldrVersion":"32"},"language":"sl"},"dates":{"calendars":{"gregorian":{"months":{"format":{"abbreviated":{"1":"jan.","2":"feb.","3":"mar.","4":"apr.","5":"maj","6":"jun.","7":"jul.","8":"avg.","9":"sep.","10":"okt.","11":"nov.","12":"dec."},"narrow":{"1":"j","2":"f","3":"m","4":"a","5":"m","6":"j","7":"j","8":"a","9":"s","10":"o","11":"n","12":"d"},"wide":{"1":"januar","2":"februar","3":"marec","4":"april","5":"maj","6":"junij","7":"julij","8":"avgust","9":"september","10":"oktober","11":"november","12":"december"}},"stand-alone":{"abbreviated":{"1":"jan.","2":"feb.","3":"mar.","4":"apr.","5":"maj","6":"jun.","7":"jul.","8":"avg.","9":"sep.","10":"okt.","11":"nov.","12":"dec."},"narrow":{"1":"j","2":"f","3":"m","4":"a","5":"m","6":"j","7":"j","8":"a","9":"s","10":"o","11":"n","12":"d"},"wide":{"1":"januar","2":"februar","3":"marec","4":"april","5":"maj","6":"junij","7":"julij","8":"avgust","9":"september","10":"oktober","11":"november","12":"december"}}},"days":{"format":{"abbreviated":{"sun":"ned.","mon":"pon.","tue":"tor.","wed":"sre.","thu":"čet.","fri":"pet.","sat":"sob."},"narrow":{"sun":"n","mon":"p","tue":"t","wed":"s","thu":"č","fri":"p","sat":"s"},"short":{"sun":"ned.","mon":"pon.","tue":"tor.","wed":"sre.","thu":"čet.","fri":"pet.","sat":"sob."},"wide":{"sun":"nedelja","mon":"ponedeljek","tue":"torek","wed":"sreda","thu":"četrtek","fri":"petek","sat":"sobota"}},"stand-alone":{"abbreviated":{"sun":"ned.","mon":"pon.","tue":"tor.","wed":"sre.","thu":"čet.","fri":"pet.","sat":"sob."},"narrow":{"sun":"n","mon":"p","tue":"t","wed":"s","thu":"č","fri":"p","sat":"s"},"short":{"sun":"ned.","mon":"pon.","tue":"tor.","wed":"sre.","thu":"čet.","fri":"pet.","sat":"sob."},"wide":{"sun":"nedelja","mon":"ponedeljek","tue":"torek","wed":"sreda","thu":"četrtek","fri":"petek","sat":"sobota"}}},"quarters":{"format":{"abbreviated":{"1":"1. čet.","2":"2. čet.","3":"3. čet.","4":"4. čet."},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"1. četrtletje","2":"2. četrtletje","3":"3. četrtletje","4":"4. četrtletje"}},"stand-alone":{"abbreviated":{"1":"1. čet.","2":"2. čet.","3":"3. čet.","4":"4. čet."},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"1. četrtletje","2":"2. četrtletje","3":"3. četrtletje","4":"4. četrtletje"}}},"dayPeriods":{"format":{"abbreviated":{"midnight":"opoln.","am":"dop.","noon":"opold.","pm":"pop.","morning1":"zjut.","morning2":"dop.","afternoon1":"pop.","evening1":"zveč.","night1":"ponoči"},"narrow":{"midnight":"24.00","am":"d","noon":"12.00","pm":"p","morning1":"zj","morning2":"d","afternoon1":"p","evening1":"zv","night1":"po"},"wide":{"midnight":"opolnoči","am":"dop.","noon":"opoldne","pm":"pop.","morning1":"zjutraj","morning2":"dopoldan","afternoon1":"popoldan","evening1":"zvečer","night1":"ponoči"}},"stand-alone":{"abbreviated":{"midnight":"poln.","am":"dop.","noon":"pold.","pm":"pop.","morning1":"jut.","morning2":"dop.","afternoon1":"pop.","evening1":"zveč.","night1":"noč"},"narrow":{"midnight":"24.00","am":"d","noon":"12.00","pm":"p","morning1":"j","morning2":"d","afternoon1":"p","evening1":"v","night1":"n"},"wide":{"midnight":"polnoč","am":"dopoldne","noon":"poldne","pm":"popoldne","morning1":"jutro","morning2":"dopoldne","afternoon1":"popoldne","evening1":"večer","night1":"noč"}}},"eras":{"eraNames":{"0":"pred Kristusom","1":"po Kristusu","0-alt-variant":"pred našim štetjem","1-alt-variant":"po našem štetju"},"eraAbbr":{"0":"pr. Kr.","1":"po Kr.","0-alt-variant":"pr. n. št.","1-alt-variant":"po n. št."},"eraNarrow":{"0":"pr. Kr.","1":"po Kr.","0-alt-variant":"pr. n. št.","1-alt-variant":"po n. št."}},"dateFormats":{"full":"EEEE, dd. MMMM y","long":"dd. MMMM y","medium":"d. MMM y","short":"d. MM. yy"},"timeFormats":{"full":"HH:mm:ss zzzz","long":"HH:mm:ss z","medium":"HH:mm:ss","short":"HH:mm"},"dateTimeFormats":{"full":"{1} {0}","long":"{1} {0}","medium":"{1} {0}","short":"{1} {0}","availableFormats":{"Bh":"h B","Bhm":"h:mm B","Bhms":"h:mm:ss B","d":"d.","E":"ccc","EBhm":"E h:mm B","EBhms":"E h:mm:ss B","Ed":"E, d.","Ehm":"E, h:mm a","EHm":"E HH:mm","Ehms":"E, h:mm:ss a","EHms":"E HH:mm:ss","Gy":"y G","GyM":"MMM y G","GyMMM":"MMM y G","GyMMMd":"d. MMM y G","GyMMMEd":"E, d. MMM y G","h":"h a","H":"HH'h'","hm":"h:mm a","Hm":"HH:mm","hms":"h:mm:ss a","Hms":"HH:mm:ss","hmsv":"h:mm:ss a v","Hmsv":"HH:mm:ss v","hmv":"h:mm a v","Hmv":"HH:mm v","M":"L","Md":"d. M.","MEd":"E, d. M.","MMM":"LLL","MMMd":"d. MMM","MMMEd":"E, d. MMM","MMMMd":"d. MMMM","MMMMW-count-one":"W. 'teden' 'v' MMM","MMMMW-count-two":"W. 'teden' 'v' MMM","MMMMW-count-few":"W. 'teden' 'v' MMM","MMMMW-count-other":"W. 'teden' 'v' MMM","ms":"mm:ss","y":"y","yM":"M/y","yMd":"d. M. y","yMEd":"E, d. M. y","yMMM":"MMM y","yMMMd":"d. MMM y","yMMMEd":"E, d. MMM y","yMMMM":"MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","yw-count-one":"w. 'teden' 'v' Y","yw-count-two":"w. 'teden' 'v' Y","yw-count-few":"w. 'teden' 'v' Y","yw-count-other":"w. 'teden' 'v' Y"},"appendItems":{"Day":"{0} ({2}: {1})","Day-Of-Week":"{0} {1}","Era":"{1} {0}","Hour":"{0} ({2}: {1})","Minute":"{0} ({2}: {1})","Month":"{0} ({2}: {1})","Quarter":"{0} ({2}: {1})","Second":"{0} ({2}: {1})","Timezone":"{0} {1}","Week":"{0} ({2}: {1})","Year":"{1} {0}"},"intervalFormats":{"intervalFormatFallback":"{0}–{1}","d":{"d":"d.–d."},"h":{"a":"h a–h a","h":"h–h a"},"H":{"H":"HH–HH"},"hm":{"a":"h:mm a – h:mm a","h":"h:mm–h:mm a","m":"h:mm–h:mm a"},"Hm":{"H":"HH:mm–HH:mm","m":"HH:mm–HH:mm"},"hmv":{"a":"h:mm a – h:mm a v","h":"h:mm–h:mm a v","m":"h:mm–h:mm a v"},"Hmv":{"H":"HH:mm–HH:mm v","m":"HH:mm–HH:mm v"},"hv":{"a":"h a – h a v","h":"h–h a v"},"Hv":{"H":"HH–HH v"},"M":{"M":"M.–M."},"Md":{"d":"d.–d. M.","M":"d. M.–d. M."},"MEd":{"d":"E, d.–E, d. M.","M":"E, d. M.–E, d. M."},"MMM":{"M":"MMM–MMM"},"MMMd":{"d":"d.–d. MMM","M":"d. MMM–d. MMM"},"MMMEd":{"d":"E, d.–E, d. MMM","M":"E, d. MMM–E, d. MMM"},"y":{"y":"y–y"},"yM":{"M":"M.–M. y","y":"M. y–M. y"},"yMd":{"d":"d. M. y–d. M. y","M":"d. M.–d. M. y","y":"d. M. y–d. M. y"},"yMEd":{"d":"E, d. – E, d. M. y","M":"E, d. M. – E, d. M. y","y":"E, d. M. y – E, d. M. y"},"yMMM":{"M":"MMM–MMM y","y":"MMM y–MMM y"},"yMMMd":{"d":"d.–d. MMM y","M":"d. MMM–d. MMM y","y":"d. MMM y–d. MMM y"},"yMMMEd":{"d":"E, d. MMM–E, d. MMM y","M":"E, d. MMM–E, d. MMM y","y":"E, d. MMM y–E, d. MMM y"},"yMMMM":{"M":"MMMM–MMMM y","y":"MMMM y–MMMM y"}}}}},"fields":{"era":{"displayName":"doba"},"era-short":{"displayName":"doba"},"era-narrow":{"displayName":"doba"},"year":{"displayName":"leto","relative-type--1":"lani","relative-type-0":"letos","relative-type-1":"naslednje leto","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} leto","relativeTimePattern-count-two":"čez {0} leti","relativeTimePattern-count-few":"čez {0} leta","relativeTimePattern-count-other":"čez {0} let"},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} letom","relativeTimePattern-count-two":"pred {0} letoma","relativeTimePattern-count-few":"pred {0} leti","relativeTimePattern-count-other":"pred {0} leti"}},"year-short":{"displayName":"leto","relative-type--1":"lani","relative-type-0":"letos","relative-type-1":"naslednje leto","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} leto","relativeTimePattern-count-two":"čez {0} leti","relativeTimePattern-count-few":"čez {0} leta","relativeTimePattern-count-other":"čez {0} let"},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} letom","relativeTimePattern-count-two":"pred {0} letoma","relativeTimePattern-count-few":"pred {0} leti","relativeTimePattern-count-other":"pred {0} leti"}},"year-narrow":{"displayName":"leto","relative-type--1":"lani","relative-type-0":"letos","relative-type-1":"naslednje leto","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} leto","relativeTimePattern-count-two":"čez {0} leti","relativeTimePattern-count-few":"čez {0} leta","relativeTimePattern-count-other":"čez {0} let"},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} letom","relativeTimePattern-count-two":"pred {0} letoma","relativeTimePattern-count-few":"pred {0} leti","relativeTimePattern-count-other":"pred {0} leti"}},"quarter":{"displayName":"četrtletje","relative-type--1":"zadnje četrtletje","relative-type-0":"to četrtletje","relative-type-1":"naslednje četrtletje","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} četrtletje","relativeTimePattern-count-two":"čez {0} četrtletji","relativeTimePattern-count-few":"čez {0} četrtletja","relativeTimePattern-count-other":"čez {0} četrtletij"},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} četrtletjem","relativeTimePattern-count-two":"pred {0} četrtletjema","relativeTimePattern-count-few":"pred {0} četrtletji","relativeTimePattern-count-other":"pred {0} četrtletji"}},"quarter-short":{"displayName":"četrtl.","relative-type--1":"zadnje četrtletje","relative-type-0":"to četrtletje","relative-type-1":"naslednje četrtletje","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} četrtl.","relativeTimePattern-count-two":"čez {0} četrtl.","relativeTimePattern-count-few":"čez {0} četrtl.","relativeTimePattern-count-other":"čez {0} četrtl."},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} četrtl.","relativeTimePattern-count-two":"pred {0} četrtl.","relativeTimePattern-count-few":"pred {0} četrtl.","relativeTimePattern-count-other":"pred {0} četrtl."}},"quarter-narrow":{"displayName":"četr.","relative-type--1":"zadnje četrtletje","relative-type-0":"to četrtletje","relative-type-1":"naslednje četrtletje","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} četr.","relativeTimePattern-count-two":"čez {0} četr.","relativeTimePattern-count-few":"čez {0} četr.","relativeTimePattern-count-other":"čez {0} četr."},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} četr.","relativeTimePattern-count-two":"pred {0} četr.","relativeTimePattern-count-few":"pred {0} četr.","relativeTimePattern-count-other":"pred {0} četr."}},"month":{"displayName":"mesec","relative-type--1":"prejšnji mesec","relative-type-0":"ta mesec","relative-type-1":"naslednji mesec","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} mesec","relativeTimePattern-count-two":"čez {0} meseca","relativeTimePattern-count-few":"čez {0} mesece","relativeTimePattern-count-other":"čez {0} mesecev"},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} mesecem","relativeTimePattern-count-two":"pred {0} mesecema","relativeTimePattern-count-few":"pred {0} meseci","relativeTimePattern-count-other":"pred {0} meseci"}},"month-short":{"displayName":"mes.","relative-type--1":"prejšnji mesec","relative-type-0":"ta mesec","relative-type-1":"naslednji mesec","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} mes.","relativeTimePattern-count-two":"čez {0} mes.","relativeTimePattern-count-few":"čez {0} mes.","relativeTimePattern-count-other":"čez {0} mes."},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} mes.","relativeTimePattern-count-two":"pred {0} mes.","relativeTimePattern-count-few":"pred {0} mes.","relativeTimePattern-count-other":"pred {0} mes."}},"month-narrow":{"displayName":"mes.","relative-type--1":"prejšnji mesec","relative-type-0":"ta mesec","relative-type-1":"naslednji mesec","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} mes.","relativeTimePattern-count-two":"čez {0} mes.","relativeTimePattern-count-few":"čez {0} mes.","relativeTimePattern-count-other":"čez {0} mes."},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} mes.","relativeTimePattern-count-two":"pred {0} mes.","relativeTimePattern-count-few":"pred {0} mes.","relativeTimePattern-count-other":"pred {0} mes."}},"week":{"displayName":"teden","relative-type--1":"prejšnji teden","relative-type-0":"ta teden","relative-type-1":"naslednji teden","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} teden","relativeTimePattern-count-two":"čez {0} tedna","relativeTimePattern-count-few":"čez {0} tedne","relativeTimePattern-count-other":"čez {0} tednov"},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} tednom","relativeTimePattern-count-two":"pred {0} tednoma","relativeTimePattern-count-few":"pred {0} tedni","relativeTimePattern-count-other":"pred {0} tedni"},"relativePeriod":"v tednu {0}"},"week-short":{"displayName":"ted.","relative-type--1":"prejšnji teden","relative-type-0":"ta teden","relative-type-1":"naslednji teden","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} ted.","relativeTimePattern-count-two":"čez {0} ted.","relativeTimePattern-count-few":"čez {0} ted.","relativeTimePattern-count-other":"čez {0} ted."},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} ted.","relativeTimePattern-count-two":"pred {0} ted.","relativeTimePattern-count-few":"pred {0} ted.","relativeTimePattern-count-other":"pred {0} ted."},"relativePeriod":"v tednu {0}"},"week-narrow":{"displayName":"ted.","relative-type--1":"prejšnji teden","relative-type-0":"ta teden","relative-type-1":"naslednji teden","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} ted.","relativeTimePattern-count-two":"čez {0} ted.","relativeTimePattern-count-few":"čez {0} ted.","relativeTimePattern-count-other":"čez {0} ted."},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} ted.","relativeTimePattern-count-two":"pred {0} ted.","relativeTimePattern-count-few":"pred {0} ted.","relativeTimePattern-count-other":"pred {0} ted."},"relativePeriod":"v tednu {0}"},"weekOfMonth":{"displayName":"teden meseca"},"weekOfMonth-short":{"displayName":"ted. v mes."},"weekOfMonth-narrow":{"displayName":"teden meseca"},"day":{"displayName":"dan","relative-type--2":"predvčerajšnjim","relative-type--1":"včeraj","relative-type-0":"danes","relative-type-1":"jutri","relative-type-2":"pojutrišnjem","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} dan","relativeTimePattern-count-two":"čez {0} dneva","relativeTimePattern-count-few":"čez {0} dni","relativeTimePattern-count-other":"čez {0} dni"},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} dnevom","relativeTimePattern-count-two":"pred {0} dnevoma","relativeTimePattern-count-few":"pred {0} dnevi","relativeTimePattern-count-other":"pred {0} dnevi"}},"day-short":{"displayName":"dan","relative-type--2":"predvčerajšnjim","relative-type--1":"včeraj","relative-type-0":"danes","relative-type-1":"jutri","relative-type-2":"pojutrišnjem","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} dan","relativeTimePattern-count-two":"čez {0} dneva","relativeTimePattern-count-few":"čez {0} dni","relativeTimePattern-count-other":"čez {0} dni"},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} dnevom","relativeTimePattern-count-two":"pred {0} dnevoma","relativeTimePattern-count-few":"pred {0} dnevi","relativeTimePattern-count-other":"pred {0} dnevi"}},"day-narrow":{"displayName":"dan","relative-type--2":"predvčerajšnjim","relative-type--1":"včeraj","relative-type-0":"danes","relative-type-1":"jutri","relative-type-2":"pojutrišnjem","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} dan","relativeTimePattern-count-two":"čez {0} dneva","relativeTimePattern-count-few":"čez {0} dni","relativeTimePattern-count-other":"čez {0} dni"},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} dnevom","relativeTimePattern-count-two":"pred {0} dnevoma","relativeTimePattern-count-few":"pred {0} dnevi","relativeTimePattern-count-other":"pred {0} dnevi"}},"dayOfYear":{"displayName":"dan leta"},"dayOfYear-short":{"displayName":"dan leta"},"dayOfYear-narrow":{"displayName":"dan leta"},"weekday":{"displayName":"dan v tednu"},"weekday-short":{"displayName":"dan v tednu"},"weekday-narrow":{"displayName":"dan v tednu"},"weekdayOfMonth":{"displayName":"dan meseca"},"weekdayOfMonth-short":{"displayName":"dan meseca"},"weekdayOfMonth-narrow":{"displayName":"dan v mes."},"sun":{"relative-type--1":"prejšnjo nedeljo","relative-type-0":"to nedeljo","relative-type-1":"naslednjo nedeljo","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} nedeljo","relativeTimePattern-count-two":"čez {0} nedelji","relativeTimePattern-count-few":"čez {0} nedelj","relativeTimePattern-count-other":"čez {0} nedelj"},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} nedeljo","relativeTimePattern-count-two":"pred {0} nedeljama","relativeTimePattern-count-few":"pred {0} nedeljami","relativeTimePattern-count-other":"pred {0} nedeljami"}},"sun-short":{"relative-type--1":"prejšnjo ned.","relative-type-0":"to ned.","relative-type-1":"naslednjo ned.","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} nedeljo","relativeTimePattern-count-two":"čez {0} nedelji","relativeTimePattern-count-few":"čez {0} nedelje","relativeTimePattern-count-other":"čez {0} nedelj"},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} nedeljo","relativeTimePattern-count-two":"pred {0} nedeljama","relativeTimePattern-count-few":"pred {0} nedeljami","relativeTimePattern-count-other":"pred {0} nedeljami"}},"sun-narrow":{"relative-type--1":"prejš. ned.","relative-type-0":"to ned.","relative-type-1":"nasl. ned.","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} ned.","relativeTimePattern-count-two":"čez {0} ned.","relativeTimePattern-count-few":"čez {0} ned.","relativeTimePattern-count-other":"čez {0} ned."},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} ned.","relativeTimePattern-count-two":"pred {0} ned.","relativeTimePattern-count-few":"pred {0} ned.","relativeTimePattern-count-other":"pred {0} ned."}},"mon":{"relative-type--1":"prejšnji ponedeljek","relative-type-0":"ta ponedeljek","relative-type-1":"naslednji ponedeljek","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} ponedeljek","relativeTimePattern-count-two":"čez {0} ponedeljka","relativeTimePattern-count-few":"čez {0} ponedeljke","relativeTimePattern-count-other":"čez {0} ponedeljkov"},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} ponedeljkom","relativeTimePattern-count-two":"pred {0} ponedeljkoma","relativeTimePattern-count-few":"pred {0} ponedeljki","relativeTimePattern-count-other":"pred {0} ponedeljki"}},"mon-short":{"relative-type--1":"prejšnji pon.","relative-type-0":"ta pon.","relative-type-1":"naslednji pon.","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} pon.","relativeTimePattern-count-two":"čez {0} pon.","relativeTimePattern-count-few":"čez {0} pon.","relativeTimePattern-count-other":"čez {0} pon."},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} pon.","relativeTimePattern-count-two":"pred {0} pon.","relativeTimePattern-count-few":"pred {0} pon.","relativeTimePattern-count-other":"pred {0} pon."}},"mon-narrow":{"relative-type--1":"prejš. pon.","relative-type-0":"ta pon.","relative-type-1":"nasl. pon.","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} ponedeljek","relativeTimePattern-count-two":"čez {0} ponedeljka","relativeTimePattern-count-few":"čez {0} ponedeljke","relativeTimePattern-count-other":"čez {0} ponedeljkov"},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} ponedeljkom","relativeTimePattern-count-two":"pred {0} ponedeljkoma","relativeTimePattern-count-few":"pred {0} ponedeljki","relativeTimePattern-count-other":"pred {0} ponedeljki"}},"tue":{"relative-type--1":"prejšnji torek","relative-type-0":"ta torek","relative-type-1":"naslednji torek","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} torek","relativeTimePattern-count-two":"čez {0} torka","relativeTimePattern-count-few":"čez {0} torke","relativeTimePattern-count-other":"čez {0} torkov"},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} torkom","relativeTimePattern-count-two":"pred {0} torkoma","relativeTimePattern-count-few":"pred {0} torki","relativeTimePattern-count-other":"pred {0} torki"}},"tue-short":{"relative-type--1":"prejšnji tor.","relative-type-0":"ta tor.","relative-type-1":"naslednji tor.","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} tor.","relativeTimePattern-count-two":"čez {0} tor.","relativeTimePattern-count-few":"čez {0} tor.","relativeTimePattern-count-other":"čez {0} tor."},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} tor.","relativeTimePattern-count-two":"pred {0} tor.","relativeTimePattern-count-few":"pred {0} tor.","relativeTimePattern-count-other":"pred {0} tor."}},"tue-narrow":{"relative-type--1":"prejš. tor.","relative-type-0":"ta tor.","relative-type-1":"nasl. tor.","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} torek","relativeTimePattern-count-two":"čez {0} torka","relativeTimePattern-count-few":"čez {0} torke","relativeTimePattern-count-other":"čez {0} torkov"},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} torkom","relativeTimePattern-count-two":"pred {0} torkoma","relativeTimePattern-count-few":"pred {0} torki","relativeTimePattern-count-other":"pred {0} torki"}},"wed":{"relative-type--1":"prejšnjo sredo","relative-type-0":"to sredo","relative-type-1":"naslednjo sredo","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} sredo","relativeTimePattern-count-two":"čez {0} sredi","relativeTimePattern-count-few":"čez {0} srede","relativeTimePattern-count-other":"čez {0} sred"},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} sredo","relativeTimePattern-count-two":"pred {0} sredama","relativeTimePattern-count-few":"pred {0} sredami","relativeTimePattern-count-other":"pred {0} sredami"}},"wed-short":{"relative-type--1":"prejšnjo sre.","relative-type-0":"to sre.","relative-type-1":"naslednjo sre.","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} sre.","relativeTimePattern-count-two":"čez {0} sre.","relativeTimePattern-count-few":"čez {0} sre.","relativeTimePattern-count-other":"čez {0} sre."},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} sre.","relativeTimePattern-count-two":"pred {0} sre.","relativeTimePattern-count-few":"pred {0} sre.","relativeTimePattern-count-other":"pred {0} sre."}},"wed-narrow":{"relative-type--1":"prejš. sre.","relative-type-0":"to sre.","relative-type-1":"nasl. sre.","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} sre.","relativeTimePattern-count-two":"čez {0} sre.","relativeTimePattern-count-few":"čez {0} sre.","relativeTimePattern-count-other":"čez {0} sre."},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} sre.","relativeTimePattern-count-two":"pred {0} sre.","relativeTimePattern-count-few":"pred {0} sre.","relativeTimePattern-count-other":"pred {0} sre."}},"thu":{"relative-type--1":"prejšnji četrtek","relative-type-0":"ta četrtek","relative-type-1":"naslednji četrtek","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} četrtek","relativeTimePattern-count-two":"čez {0} četrtka","relativeTimePattern-count-few":"čez {0} četrtke","relativeTimePattern-count-other":"čez {0} četrtkov"},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} četrtkom","relativeTimePattern-count-two":"pred {0} četrtkoma","relativeTimePattern-count-few":"pred {0} četrtki","relativeTimePattern-count-other":"pred {0} četrtki"}},"thu-short":{"relative-type--1":"prejšnji čet.","relative-type-0":"ta čet.","relative-type-1":"naslednji čet.","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} čet.","relativeTimePattern-count-two":"čez {0} čet.","relativeTimePattern-count-few":"čez {0} čet.","relativeTimePattern-count-other":"čez {0} čet."},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} čet.","relativeTimePattern-count-two":"pred {0} čet.","relativeTimePattern-count-few":"pred {0} čet.","relativeTimePattern-count-other":"pred {0} čet."}},"thu-narrow":{"relative-type--1":"prejš. čet.","relative-type-0":"ta čet.","relative-type-1":"nasl. čet.","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} čet.","relativeTimePattern-count-two":"čez {0} čet.","relativeTimePattern-count-few":"čez {0} četrtke","relativeTimePattern-count-other":"čez {0} čet."},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} čet.","relativeTimePattern-count-two":"pred {0} četrtkoma","relativeTimePattern-count-few":"pred {0} četrtki","relativeTimePattern-count-other":"pred {0} četrtki"}},"fri":{"relative-type--1":"prejšnji petek","relative-type-0":"ta petek","relative-type-1":"naslednji petek","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} petek","relativeTimePattern-count-two":"čez {0} petka","relativeTimePattern-count-few":"čez {0} petke","relativeTimePattern-count-other":"čez {0} petkov"},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} petkom","relativeTimePattern-count-two":"pred {0} petkoma","relativeTimePattern-count-few":"pred {0} petki","relativeTimePattern-count-other":"pred {0} petki"}},"fri-short":{"relative-type--1":"prejšnji pet.","relative-type-0":"ta pet.","relative-type-1":"naslednji pet.","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} pet.","relativeTimePattern-count-two":"čez {0} pet.","relativeTimePattern-count-few":"čez {0} pet.","relativeTimePattern-count-other":"čez {0} pet."},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} pet.","relativeTimePattern-count-two":"pred {0} pet.","relativeTimePattern-count-few":"pred {0} pet.","relativeTimePattern-count-other":"pred {0} pet."}},"fri-narrow":{"relative-type--1":"prejš. pet.","relative-type-0":"ta pet.","relative-type-1":"nasl. pet.","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} pet.","relativeTimePattern-count-two":"čez {0} pet.","relativeTimePattern-count-few":"čez {0} pet.","relativeTimePattern-count-other":"čez {0} pet."},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} pet.","relativeTimePattern-count-two":"pred {0} pet.","relativeTimePattern-count-few":"pred {0} pet.","relativeTimePattern-count-other":"pred {0} pet."}},"sat":{"relative-type--1":"prejšnjo soboto","relative-type-0":"to soboto","relative-type-1":"naslednjo soboto","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} soboto","relativeTimePattern-count-two":"čez {0} soboti","relativeTimePattern-count-few":"čez {0} sobote","relativeTimePattern-count-other":"čez {0} sobot"},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} soboto","relativeTimePattern-count-two":"pred {0} sobotama","relativeTimePattern-count-few":"pred {0} sobotami","relativeTimePattern-count-other":"pred {0} sobotami"}},"sat-short":{"relative-type--1":"prejšnjo sob.","relative-type-0":"to sob.","relative-type-1":"naslednjo sob.","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} sob.","relativeTimePattern-count-two":"čez {0} sob.","relativeTimePattern-count-few":"čez {0} sob.","relativeTimePattern-count-other":"čez {0} sob."},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} sob.","relativeTimePattern-count-two":"pred {0} sob.","relativeTimePattern-count-few":"pred {0} sob.","relativeTimePattern-count-other":"pred {0} sob."}},"sat-narrow":{"relative-type--1":"prejš. sob.","relative-type-0":"to sob.","relative-type-1":"nasl. sob.","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} sob.","relativeTimePattern-count-two":"čez {0} soboti","relativeTimePattern-count-few":"čez {0} sobote","relativeTimePattern-count-other":"čez {0} sobot"},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} sob.","relativeTimePattern-count-two":"pred {0} sobotama","relativeTimePattern-count-few":"pred {0} sobotami","relativeTimePattern-count-other":"pred {0} sobotami"}},"dayperiod-short":{"displayName":"dop/pop"},"dayperiod":{"displayName":"dop/pop"},"dayperiod-narrow":{"displayName":"dop/pop"},"hour":{"displayName":"ura","relative-type-0":"v tej uri","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} uro","relativeTimePattern-count-two":"čez {0} uri","relativeTimePattern-count-few":"čez {0} ure","relativeTimePattern-count-other":"čez {0} ur"},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} uro","relativeTimePattern-count-two":"pred {0} urama","relativeTimePattern-count-few":"pred {0} urami","relativeTimePattern-count-other":"pred {0} urami"}},"hour-short":{"displayName":"ura","relative-type-0":"v tej uri","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} uro","relativeTimePattern-count-two":"čez {0} uri","relativeTimePattern-count-few":"čez {0} ure","relativeTimePattern-count-other":"čez {0} ur"},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} uro","relativeTimePattern-count-two":"pred {0} urama","relativeTimePattern-count-few":"pred {0} urami","relativeTimePattern-count-other":"pred {0} urami"}},"hour-narrow":{"displayName":"h","relative-type-0":"v tej uri","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} h","relativeTimePattern-count-two":"čez {0} h","relativeTimePattern-count-few":"čez {0} h","relativeTimePattern-count-other":"čez {0} h"},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} h","relativeTimePattern-count-two":"pred {0} h","relativeTimePattern-count-few":"pred {0} h","relativeTimePattern-count-other":"pred {0} h"}},"minute":{"displayName":"minuta","relative-type-0":"to minuto","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} minuto","relativeTimePattern-count-two":"čez {0} minuti","relativeTimePattern-count-few":"čez {0} minute","relativeTimePattern-count-other":"čez {0} minut"},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} minuto","relativeTimePattern-count-two":"pred {0} minutama","relativeTimePattern-count-few":"pred {0} minutami","relativeTimePattern-count-other":"pred {0} minutami"}},"minute-short":{"displayName":"min.","relative-type-0":"to minuto","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} min.","relativeTimePattern-count-two":"čez {0} min.","relativeTimePattern-count-few":"čez {0} min.","relativeTimePattern-count-other":"čez {0} min."},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} min.","relativeTimePattern-count-two":"pred {0} min.","relativeTimePattern-count-few":"pred {0} min.","relativeTimePattern-count-other":"pred {0} min."}},"minute-narrow":{"displayName":"min","relative-type-0":"to minuto","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} min","relativeTimePattern-count-two":"čez {0} min","relativeTimePattern-count-few":"čez {0} min","relativeTimePattern-count-other":"čez {0} min"},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} min","relativeTimePattern-count-two":"pred {0} min","relativeTimePattern-count-few":"pred {0} min","relativeTimePattern-count-other":"pred {0} min"}},"second":{"displayName":"sekunda","relative-type-0":"zdaj","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} sekundo","relativeTimePattern-count-two":"čez {0} sekundi","relativeTimePattern-count-few":"čez {0} sekunde","relativeTimePattern-count-other":"čez {0} sekund"},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} sekundo","relativeTimePattern-count-two":"pred {0} sekundama","relativeTimePattern-count-few":"pred {0} sekundami","relativeTimePattern-count-other":"pred {0} sekundami"}},"second-short":{"displayName":"sek.","relative-type-0":"zdaj","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} s","relativeTimePattern-count-two":"čez {0} s","relativeTimePattern-count-few":"čez {0} s","relativeTimePattern-count-other":"čez {0} s"},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} s","relativeTimePattern-count-two":"pred {0} s","relativeTimePattern-count-few":"pred {0} s","relativeTimePattern-count-other":"pred {0} s"}},"second-narrow":{"displayName":"s","relative-type-0":"zdaj","relativeTime-type-future":{"relativeTimePattern-count-one":"čez {0} s","relativeTimePattern-count-two":"čez {0} s","relativeTimePattern-count-few":"čez {0} s","relativeTimePattern-count-other":"čez {0} s"},"relativeTime-type-past":{"relativeTimePattern-count-one":"pred {0} s","relativeTimePattern-count-two":"pred {0} s","relativeTimePattern-count-few":"pred {0} s","relativeTimePattern-count-other":"pred {0} s"}},"zone":{"displayName":"časovni pas"},"zone-short":{"displayName":"časovni pas"},"zone-narrow":{"displayName":"časovni pas"}}},"numbers":{"currencies":{"ADP":{"displayName":"andorska peseta","symbol":"ADP"},"AED":{"displayName":"dirham Združenih arabskih emiratov","displayName-count-one":"dirham Združenih arabskih emiratov","displayName-count-two":"dirhama Združenih arabskih emiratov","displayName-count-few":"dirhami Združenih arabskih emiratov","displayName-count-other":"dirhamov Združenih arabskih emiratov","symbol":"AED"},"AFA":{"displayName":"stari afganistanski afgani (1927–2002)","symbol":"AFA"},"AFN":{"displayName":"afgani","displayName-count-one":"afgani","displayName-count-two":"afganija","displayName-count-few":"afganiji","displayName-count-other":"afganijev","symbol":"AFN"},"ALK":{"displayName":"ALK","symbol":"ALK"},"ALL":{"displayName":"albanski lek","displayName-count-one":"albanski lek","displayName-count-two":"albanska leka","displayName-count-few":"albanski leki","displayName-count-other":"albanskih lekov","symbol":"ALL"},"AMD":{"displayName":"armenski dram","displayName-count-one":"armenski dram","displayName-count-two":"armenska drama","displayName-count-few":"armenski drami","displayName-count-other":"armenskih dramov","symbol":"AMD"},"ANG":{"displayName":"nizozemsko-antilski gulden","displayName-count-one":"nizozemsko-antilski gulden","displayName-count-two":"nizozemsko-antilska guldna","displayName-count-few":"nizozemsko-antilski guldni","displayName-count-other":"nizozemsko-antilskih guldnov","symbol":"ANG"},"AOA":{"displayName":"angolska kvanza","displayName-count-one":"angolska kvanza","displayName-count-two":"angolski kvanzi","displayName-count-few":"angolske kvanze","displayName-count-other":"angolskih kvanz","symbol":"AOA","symbol-alt-narrow":"Kz"},"AOK":{"displayName":"stara angolska kvanza (1977–1990)","symbol":"AOK"},"AON":{"displayName":"angolska nova kvanza (1990–2000)","symbol":"AON"},"AOR":{"displayName":"konvertibilna angolska kvanza (1995–1999)","symbol":"AOR"},"ARA":{"displayName":"argentinski avstral","symbol":"ARA"},"ARL":{"displayName":"ARL","symbol":"ARL"},"ARM":{"displayName":"ARM","symbol":"ARM"},"ARP":{"displayName":"argentinski peso (1983–1985)","symbol":"ARP"},"ARS":{"displayName":"argentinski peso","displayName-count-one":"argentinski peso","displayName-count-two":"argentinska pesa","displayName-count-few":"argentinski pesi","displayName-count-other":"argentinskih pesov","symbol":"ARS","symbol-alt-narrow":"$"},"ATS":{"displayName":"avstrijski šiling","symbol":"ATS"},"AUD":{"displayName":"avstralski dolar","displayName-count-one":"avstralski dolar","displayName-count-two":"avstralska dolarja","displayName-count-few":"avstralski dolarji","displayName-count-other":"avstralskih dolarjev","symbol":"AUD","symbol-alt-narrow":"$"},"AWG":{"displayName":"arubski florin","displayName-count-one":"arubski florin","displayName-count-two":"arubska florina","displayName-count-few":"arubski florin","displayName-count-other":"arubskih florinov","symbol":"AWG"},"AZM":{"displayName":"stari azerbajdžanski manat (1993–2006)","symbol":"AZM"},"AZN":{"displayName":"azerbajdžanski manat","displayName-count-one":"azerbajdžanski manat","displayName-count-two":"azerbajdžanska manata","displayName-count-few":"azerbajdžanski manati","displayName-count-other":"azerbajdžanskih manatov","symbol":"AZN"},"BAD":{"displayName":"bosansko-hercegovski dinar","symbol":"BAD"},"BAM":{"displayName":"bosansko-hercegovska konvertibilna marka","displayName-count-one":"bosansko-hercegovska konvertibilna marka","displayName-count-two":"bosansko-hercegovski konvertibilni marki","displayName-count-few":"bosansko-hercegovske konvertibilne marke","displayName-count-other":"bosansko-hercegovskih konvertibilnih mark","symbol":"BAM","symbol-alt-narrow":"KM"},"BAN":{"displayName":"BAN","symbol":"BAN"},"BBD":{"displayName":"barbadoški dolar","displayName-count-one":"barbadoški dolar","displayName-count-two":"barbadoška dolarja","displayName-count-few":"barbadoški dolarji","displayName-count-other":"barbadoških dolarjev","symbol":"BBD","symbol-alt-narrow":"$"},"BDT":{"displayName":"bangladeška taka","displayName-count-one":"bangladeška taka","displayName-count-two":"bangladeški taki","displayName-count-few":"bangladeške take","displayName-count-other":"bangladeških tak","symbol":"BDT","symbol-alt-narrow":"৳"},"BEC":{"displayName":"belgijski konvertibilni frank","symbol":"BEC"},"BEF":{"displayName":"belgijski frank","symbol":"BEF"},"BEL":{"displayName":"belgijski finančni frank","symbol":"BEL"},"BGL":{"displayName":"stari bolgarski lev","symbol":"BGL"},"BGM":{"displayName":"BGM","symbol":"BGM"},"BGN":{"displayName":"bolgarski lev","displayName-count-one":"bolgarski lev","displayName-count-two":"bolgarska leva","displayName-count-few":"bolgarski levi","displayName-count-other":"bolgarskih levov","symbol":"BGN"},"BGO":{"displayName":"BGO","symbol":"BGO"},"BHD":{"displayName":"bahranski dinar","displayName-count-one":"bahranski dinar","displayName-count-two":"bahranska dinarja","displayName-count-few":"bahranski dinarji","displayName-count-other":"bahranskih dinarjev","symbol":"BHD"},"BIF":{"displayName":"burundski frank","displayName-count-one":"burundski frank","displayName-count-two":"burundska franka","displayName-count-few":"burundski franki","displayName-count-other":"burundskih frankov","symbol":"BIF"},"BMD":{"displayName":"bermudski dolar","displayName-count-one":"bermudski dolar","displayName-count-two":"bermudska dolarja","displayName-count-few":"bermudski dolarji","displayName-count-other":"bermudskih dolarjev","symbol":"BMD","symbol-alt-narrow":"$"},"BND":{"displayName":"brunejski dolar","displayName-count-one":"brunejski dolar","displayName-count-two":"brunejska dolarja","displayName-count-few":"brunejski dolarji","displayName-count-other":"brunejskih dolarjev","symbol":"BND","symbol-alt-narrow":"$"},"BOB":{"displayName":"bolivijski boliviano","displayName-count-one":"bolivijski boliviano","displayName-count-two":"bolivijska boliviana","displayName-count-few":"bolivijski boliviani","displayName-count-other":"bolivijskih bolivianov","symbol":"BOB","symbol-alt-narrow":"Bs"},"BOL":{"displayName":"BOL","symbol":"BOL"},"BOP":{"displayName":"bolivijski peso","symbol":"BOP"},"BOV":{"displayName":"bolivijski mvdol","symbol":"BOV"},"BRB":{"displayName":"brazilski novi kruzeiro (1967–1986)","symbol":"BRB"},"BRC":{"displayName":"brazilski kruzado","symbol":"BRC"},"BRE":{"displayName":"stari brazilski kruzeiro (1990–1993)","symbol":"BRE"},"BRL":{"displayName":"brazilski real","displayName-count-one":"brazilski real","displayName-count-two":"brazilska reala","displayName-count-few":"brazilski reali","displayName-count-other":"brazilskih realov","symbol":"BRL","symbol-alt-narrow":"R$"},"BRN":{"displayName":"novi brazilski kruzado","symbol":"BRN"},"BRR":{"displayName":"brazilski kruzeiro","symbol":"BRR"},"BRZ":{"displayName":"BRZ","symbol":"BRZ"},"BSD":{"displayName":"bahamski dolar","displayName-count-one":"bahamski dolar","displayName-count-two":"bahamska dolarja","displayName-count-few":"bahamski dolarji","displayName-count-other":"bahamskih dolarjev","symbol":"BSD","symbol-alt-narrow":"$"},"BTN":{"displayName":"butanski ngultrum","displayName-count-one":"butanski ngultrum","displayName-count-two":"butanska ngultruma","displayName-count-few":"butanski ngultrumi","displayName-count-other":"butanskih ngultrumov","symbol":"BTN"},"BUK":{"displayName":"burmanski kjat","symbol":"BUK"},"BWP":{"displayName":"bocvanska pula","displayName-count-one":"bocvanska pula","displayName-count-two":"bocvanski puli","displayName-count-few":"bocvanske pule","displayName-count-other":"bocvanskih pul","symbol":"BWP","symbol-alt-narrow":"P"},"BYB":{"displayName":"beloruski novi rubelj (1994–1999)","symbol":"BYB"},"BYN":{"displayName":"beloruski rubelj","displayName-count-one":"beloruski rubelj","displayName-count-two":"beloruska rublja","displayName-count-few":"beloruski rublji","displayName-count-other":"beloruskih rubljev","symbol":"BYN","symbol-alt-narrow":"р."},"BYR":{"displayName":"beloruski rubelj (2000–2016)","displayName-count-one":"beloruski rubelj (2000–2016)","displayName-count-two":"beloruska rublja (2000–2016)","displayName-count-few":"beloruski rublji (2000–2016)","displayName-count-other":"beloruskih rubljev (2000–2016)","symbol":"BYR"},"BZD":{"displayName":"belizejski dolar","displayName-count-one":"belizejski dolar","displayName-count-two":"belizejska dolarja","displayName-count-few":"belizejski dolarji","displayName-count-other":"belizejskih dolarjev","symbol":"BZD","symbol-alt-narrow":"$"},"CAD":{"displayName":"kanadski dolar","displayName-count-one":"kanadski dolar","displayName-count-two":"kanadska dolarja","displayName-count-few":"kanadski dolarji","displayName-count-other":"kanadskih dolarjev","symbol":"CAD","symbol-alt-narrow":"$"},"CDF":{"displayName":"kongoški frank","displayName-count-one":"kongoški frank","displayName-count-two":"kongoška franka","displayName-count-few":"kongoški frank","displayName-count-other":"kongoških frankov","symbol":"CDF"},"CHE":{"displayName":"evro WIR","symbol":"CHE"},"CHF":{"displayName":"švicarski frank","displayName-count-one":"švicarski frank","displayName-count-two":"švicarska franka","displayName-count-few":"švicarski franki","displayName-count-other":"švicarskih frankov","symbol":"CHF"},"CHW":{"displayName":"frank WIR","symbol":"CHW"},"CLE":{"displayName":"CLE","symbol":"CLE"},"CLF":{"displayName":"čilski unidades de fomento","symbol":"CLF"},"CLP":{"displayName":"čilski peso","displayName-count-one":"čilski peso","displayName-count-two":"čilska pesa","displayName-count-few":"čilski pesi","displayName-count-other":"čilskih pesov","symbol":"CLP","symbol-alt-narrow":"$"},"CNH":{"displayName":"kitajski juan (offshore)","displayName-count-one":"kitajski juan renminbi (offshore)","displayName-count-two":"kitajska juana renminbi (offshore)","displayName-count-few":"kitajski juani renminbi (offshore)","displayName-count-other":"kitajskih juanov renminbi (offshore)","symbol":"CNH"},"CNX":{"displayName":"CNX","symbol":"CNX"},"CNY":{"displayName":"kitajski juan","displayName-count-one":"kitajski juan renminbi","displayName-count-two":"kitajska juana renmibi","displayName-count-few":"kitajski juani renminbi","displayName-count-other":"kitajskih juanov renminbi","symbol":"CN¥","symbol-alt-narrow":"¥"},"COP":{"displayName":"kolumbijski peso","displayName-count-one":"kolumbijski peso","displayName-count-two":"kolumbijska pesa","displayName-count-few":"kolumbijski pesi","displayName-count-other":"kolumbijskih pesov","symbol":"COP","symbol-alt-narrow":"$"},"COU":{"displayName":"kolumbijska enota realne vrednosti","symbol":"COU"},"CRC":{"displayName":"kostariški kolon","displayName-count-one":"kostariški kolon","displayName-count-two":"kostariška kolona","displayName-count-few":"kostariški koloni","displayName-count-other":"kostariških kolonov","symbol":"CRC","symbol-alt-narrow":"₡"},"CSD":{"displayName":"stari srbski dinar","symbol":"CSD"},"CSK":{"displayName":"češkoslovaška krona","symbol":"CSK"},"CUC":{"displayName":"kubanski konvertibilni peso","displayName-count-one":"kubanski konvertibilni peso","displayName-count-two":"kubanska konvertibilna pesa","displayName-count-few":"kubanski konvertibilni pesi","displayName-count-other":"kubanskih konvertibilnih pesov","symbol":"CUC","symbol-alt-narrow":"$"},"CUP":{"displayName":"kubanski peso","displayName-count-one":"kubanski peso","displayName-count-two":"kubanska pesa","displayName-count-few":"kubanski pesi","displayName-count-other":"kubanskih pesov","symbol":"CUP","symbol-alt-narrow":"$"},"CVE":{"displayName":"zelenortski eskudo","displayName-count-one":"zelenortski eskudo","displayName-count-two":"zelenortska eskuda","displayName-count-few":"zelenortski eskudi","displayName-count-other":"zelenortskih eskudov","symbol":"CVE"},"CYP":{"displayName":"ciprski funt","symbol":"CYP"},"CZK":{"displayName":"češka krona","displayName-count-one":"češka krona","displayName-count-two":"češki kroni","displayName-count-few":"češke krone","displayName-count-other":"čeških kron","symbol":"CZK","symbol-alt-narrow":"Kč"},"DDM":{"displayName":"vzhodnonemška marka","symbol":"DDM"},"DEM":{"displayName":"nemška marka","symbol":"DEM"},"DJF":{"displayName":"džibutski frank","displayName-count-one":"džibutski frank","displayName-count-two":"džibutska franka","displayName-count-few":"džibutski franki","displayName-count-other":"džibutskih frankov","symbol":"DJF"},"DKK":{"displayName":"danska krona","displayName-count-one":"danska krona","displayName-count-two":"danski kroni","displayName-count-few":"danske krone","displayName-count-other":"danskih kron","symbol":"DKK","symbol-alt-narrow":"kr"},"DOP":{"displayName":"dominikanski peso","displayName-count-one":"dominikanski peso","displayName-count-two":"dominikanska pesa","displayName-count-few":"dominikanski pesi","displayName-count-other":"dominikanskih pesov","symbol":"DOP","symbol-alt-narrow":"$"},"DZD":{"displayName":"alžirski dinar","displayName-count-one":"alžirski dinar","displayName-count-two":"alžirska dinarja","displayName-count-few":"alžirski dinarji","displayName-count-other":"alžirskih dinarjev","symbol":"DZD"},"ECS":{"displayName":"ekvadorski sukre","symbol":"ECS"},"ECV":{"displayName":"ekvadorska enota realne vrednosti (UVC)","symbol":"ECV"},"EEK":{"displayName":"estonska krona","symbol":"EEK"},"EGP":{"displayName":"egiptovski funt","displayName-count-one":"egiptovski funt","displayName-count-two":"egiptovska funta","displayName-count-few":"egiptovski funti","displayName-count-other":"egiptovskih funtov","symbol":"EGP","symbol-alt-narrow":"E£"},"ERN":{"displayName":"eritrejska nakfa","displayName-count-one":"eritrejska nakfa","displayName-count-two":"eritrejski nakfi","displayName-count-few":"eritrejske nakfe","displayName-count-other":"eritrejskih nakf","symbol":"ERN"},"ESA":{"displayName":"španska pezeta (račun A)","symbol":"ESA"},"ESB":{"displayName":"španska pezeta (račun B)","symbol":"ESB"},"ESP":{"displayName":"španska pezeta","symbol":"ESP","symbol-alt-narrow":"₧"},"ETB":{"displayName":"etiopski bir","displayName-count-one":"etiopski bir","displayName-count-two":"etiopska bira","displayName-count-few":"etiopski biri","displayName-count-other":"etiopskih birov","symbol":"ETB"},"EUR":{"displayName":"evro","displayName-count-one":"evro","displayName-count-two":"evra","displayName-count-few":"evri","displayName-count-other":"evrov","symbol":"€","symbol-alt-narrow":"€"},"FIM":{"displayName":"finska marka","symbol":"FIM"},"FJD":{"displayName":"fidžijski dolar","displayName-count-one":"fidžijski dolar","displayName-count-two":"fidžijska dolarja","displayName-count-few":"fidžijski dolarji","displayName-count-other":"fidžijskih dolarjev","symbol":"FJD","symbol-alt-narrow":"$"},"FKP":{"displayName":"falklandski funt","displayName-count-one":"falklandski funt","displayName-count-two":"falklandska funta","displayName-count-few":"falklandski funti","displayName-count-other":"falklandskih funtov","symbol":"FKP","symbol-alt-narrow":"£"},"FRF":{"displayName":"francoski frank","symbol":"FRF"},"GBP":{"displayName":"britanski funt","displayName-count-one":"britanski funt","displayName-count-two":"britanska funta","displayName-count-few":"britanski funti","displayName-count-other":"britanskih funtov","symbol":"GBP","symbol-alt-narrow":"£"},"GEK":{"displayName":"gruzijski bon lari","symbol":"GEK"},"GEL":{"displayName":"gruzijski lari","displayName-count-one":"gruzijski lari","displayName-count-two":"gruzijska larija","displayName-count-few":"gruzijski lari","displayName-count-other":"gruzijskih larijev","symbol":"GEL","symbol-alt-narrow":"₾","symbol-alt-variant":"₾"},"GHC":{"displayName":"stari ganski cedi (1979–2007)","symbol":"GHC"},"GHS":{"displayName":"ganski cedi","displayName-count-one":"ganski cedi","displayName-count-two":"ganska ceda","displayName-count-few":"ganski cedi","displayName-count-other":"ganskih cedov","symbol":"GHS"},"GIP":{"displayName":"gibraltarski funt","displayName-count-one":"gibraltarski funt","displayName-count-two":"gibraltarska funta","displayName-count-few":"gibraltarski funti","displayName-count-other":"gibraltarskih funtov","symbol":"GIP","symbol-alt-narrow":"£"},"GMD":{"displayName":"gambijski dalasi","displayName-count-one":"gambijski dalasi","displayName-count-two":"gambijska dalasa","displayName-count-few":"gambijski dalasi","displayName-count-other":"gambijskih dalasov","symbol":"GMD"},"GNF":{"displayName":"gvinejski frank","displayName-count-one":"gvinejski frank","displayName-count-two":"gvinejska franka","displayName-count-few":"gvinejski franki","displayName-count-other":"gvinejskih frankov","symbol":"GNF","symbol-alt-narrow":"FG"},"GNS":{"displayName":"gvinejski sili","symbol":"GNS"},"GQE":{"displayName":"ekwele Ekvatorialne Gvineje","symbol":"GQE"},"GRD":{"displayName":"grška drahma","symbol":"GRD"},"GTQ":{"displayName":"gvatemalski kecal","displayName-count-one":"gvatemalski kecal","displayName-count-two":"gvatemalska kecala","displayName-count-few":"gvatemalski kecali","displayName-count-other":"gvatemalskih kecalov","symbol":"GTQ","symbol-alt-narrow":"Q"},"GWE":{"displayName":"eskudo Portugalske Gvineje","symbol":"GWE"},"GWP":{"displayName":"peso Gvineje Bissau","symbol":"GWP"},"GYD":{"displayName":"gvajanski dolar","displayName-count-one":"gvajanski dolar","displayName-count-two":"gvajanska dolarja","displayName-count-few":"gvajanski dolarji","displayName-count-other":"gvajanskih dolarjev","symbol":"GYD","symbol-alt-narrow":"$"},"HKD":{"displayName":"hongkonški dolar","displayName-count-one":"hongkonški dolar","displayName-count-two":"hongkonška dolarja","displayName-count-few":"hongkonški dolarji","displayName-count-other":"hongkonških dolarjev","symbol":"HK$","symbol-alt-narrow":"$"},"HNL":{"displayName":"honduraška lempira","displayName-count-one":"honduraška lempira","displayName-count-two":"honduraški lempiri","displayName-count-few":"honduraške lempire","displayName-count-other":"honduraških lempir","symbol":"HNL","symbol-alt-narrow":"L"},"HRD":{"displayName":"hrvaški dinar","symbol":"HRD"},"HRK":{"displayName":"hrvaška kuna","displayName-count-one":"hrvaška kuna","displayName-count-two":"hrvaški kuni","displayName-count-few":"hrvaške kune","displayName-count-other":"hrvaških kun","symbol":"HRK","symbol-alt-narrow":"kn"},"HTG":{"displayName":"haitski gurd","displayName-count-one":"haitski gurd","displayName-count-two":"haitska gurda","displayName-count-few":"haitski gurdi","displayName-count-other":"haitskih gurdov","symbol":"HTG"},"HUF":{"displayName":"madžarski forint","displayName-count-one":"madžarski forint","displayName-count-two":"madžarska forinta","displayName-count-few":"madžarski forinti","displayName-count-other":"madžarskih forintov","symbol":"HUF","symbol-alt-narrow":"Ft"},"IDR":{"displayName":"indonezijska rupija","displayName-count-one":"indonezijska rupija","displayName-count-two":"indonezijski rupiji","displayName-count-few":"indonezijske rupije","displayName-count-other":"indonezijskih rupij","symbol":"IDR","symbol-alt-narrow":"Rp"},"IEP":{"displayName":"irski funt","symbol":"IEP"},"ILP":{"displayName":"izraelski funt","symbol":"ILP"},"ILR":{"displayName":"ILR","symbol":"ILR"},"ILS":{"displayName":"izraelski šekel","displayName-count-one":"izraelski šekel","displayName-count-two":"izraelska šekela","displayName-count-few":"izraelski šekeli","displayName-count-other":"izraelskih šekelov","symbol":"₪","symbol-alt-narrow":"₪"},"INR":{"displayName":"indijska rupija","displayName-count-one":"indijska rupija","displayName-count-two":"indijski rupiji","displayName-count-few":"indijske rupije","displayName-count-other":"indijskih rupij","symbol":"₹","symbol-alt-narrow":"₹"},"IQD":{"displayName":"iraški dinar","displayName-count-one":"iraški dinar","displayName-count-two":"iraška dinarja","displayName-count-few":"iraški dinarji","displayName-count-other":"iraških dinarjev","symbol":"IQD"},"IRR":{"displayName":"iranski rial","displayName-count-one":"iranski rial","displayName-count-two":"iranska riala","displayName-count-few":"iranski riali","displayName-count-other":"iranskih rialov","symbol":"IRR"},"ISJ":{"displayName":"ISJ","symbol":"ISJ"},"ISK":{"displayName":"islandska krona","displayName-count-one":"islandska krona","displayName-count-two":"islandski kroni","displayName-count-few":"islandske krone","displayName-count-other":"islandskih kron","symbol":"ISK","symbol-alt-narrow":"kr"},"ITL":{"displayName":"italijanska lira","symbol":"ITL"},"JMD":{"displayName":"jamajški dolar","displayName-count-one":"jamajški dolar","displayName-count-two":"jamajška dolarja","displayName-count-few":"jamajški dolarji","displayName-count-other":"jamajških dolarjev","symbol":"JMD","symbol-alt-narrow":"$"},"JOD":{"displayName":"jordanski dinar","displayName-count-one":"jordanski dinar","displayName-count-two":"jordanska dinarja","displayName-count-few":"jordanski dinarji","displayName-count-other":"jordanskih dinarjev","symbol":"JOD"},"JPY":{"displayName":"japonski jen","displayName-count-one":"japonski jen","displayName-count-two":"japonska jena","displayName-count-few":"japonski jeni","displayName-count-other":"japonskih jenov","symbol":"¥","symbol-alt-narrow":"¥"},"KES":{"displayName":"kenijski šiling","displayName-count-one":"kenijski šiling","displayName-count-two":"kenijska šilinga","displayName-count-few":"kenijski šilingi","displayName-count-other":"kenijskih šilingov","symbol":"KES"},"KGS":{"displayName":"kirgiški som","displayName-count-one":"kirgiški som","displayName-count-two":"kirgiška soma","displayName-count-few":"kirgiški somi","displayName-count-other":"kirgiških somov","symbol":"KGS"},"KHR":{"displayName":"kamboški riel","displayName-count-one":"kamboški riel","displayName-count-two":"kamboška riela","displayName-count-few":"kamboški rieli","displayName-count-other":"kamboških rielov","symbol":"KHR","symbol-alt-narrow":"៛"},"KMF":{"displayName":"komorski frank","displayName-count-one":"komorski frank","displayName-count-two":"komorska franka","displayName-count-few":"komorski franki","displayName-count-other":"komorskih frankov","symbol":"KMF","symbol-alt-narrow":"CF"},"KPW":{"displayName":"severnokorejski von","displayName-count-one":"severnokorejski von","displayName-count-two":"severnokorejska vona","displayName-count-few":"severnokorejski voni","displayName-count-other":"severnokorejskih vonov","symbol":"KPW","symbol-alt-narrow":"₩"},"KRH":{"displayName":"KRH","symbol":"KRH"},"KRO":{"displayName":"KRO","symbol":"KRO"},"KRW":{"displayName":"južnokorejski von","displayName-count-one":"južnokorejski von","displayName-count-two":"južnokorejska vona","displayName-count-few":"južnokorejski voni","displayName-count-other":"južnokorejskih vonov","symbol":"₩","symbol-alt-narrow":"₩"},"KWD":{"displayName":"kuvajtski dinar","displayName-count-one":"kuvajtski dinar","displayName-count-two":"kuvajtska dinarja","displayName-count-few":"kuvajtski dinarji","displayName-count-other":"kuvajtskih dinarjev","symbol":"KWD"},"KYD":{"displayName":"kajmanski dolar","displayName-count-one":"kajmanski dolar","displayName-count-two":"kajmanska dolarja","displayName-count-few":"kajmanski dolarji","displayName-count-other":"kajmanski dolar","symbol":"KYD","symbol-alt-narrow":"$"},"KZT":{"displayName":"kazahstanski tenge","displayName-count-one":"kazahstanski tenge","displayName-count-two":"kazahstanska tenga","displayName-count-few":"kazahstanski tenge","displayName-count-other":"kazahstanskih tengov","symbol":"KZT","symbol-alt-narrow":"₸"},"LAK":{"displayName":"laoški kip","displayName-count-one":"laoški kip","displayName-count-two":"laoška kipa","displayName-count-few":"laoški kipi","displayName-count-other":"laoških kipov","symbol":"LAK","symbol-alt-narrow":"₭"},"LBP":{"displayName":"libanonski funt","displayName-count-one":"libanonski funt","displayName-count-two":"libanonska funta","displayName-count-few":"libanonski funti","displayName-count-other":"libanonskih funtov","symbol":"LBP","symbol-alt-narrow":"L£"},"LKR":{"displayName":"šrilanška rupija","displayName-count-one":"šrilanška rupija","displayName-count-two":"šrilanški rupiji","displayName-count-few":"šrilanške rupije","displayName-count-other":"šrilanških rupij","symbol":"LKR","symbol-alt-narrow":"Rs"},"LRD":{"displayName":"liberijski dolar","displayName-count-one":"liberijski dolar","displayName-count-two":"liberijska dolarja","displayName-count-few":"liberijski dolarji","displayName-count-other":"liberijskih dolarjev","symbol":"LRD","symbol-alt-narrow":"$"},"LSL":{"displayName":"lesoški loti","symbol":"LSL"},"LTL":{"displayName":"litovski litas","displayName-count-one":"litovski litas","displayName-count-two":"litovski litas","displayName-count-few":"litovski litas","displayName-count-other":"litovski litas","symbol":"LTL","symbol-alt-narrow":"Lt"},"LTT":{"displayName":"litvanski litas","symbol":"LTT"},"LUC":{"displayName":"luksemburški konvertibilni frank","symbol":"LUC"},"LUF":{"displayName":"luksemburški frank","symbol":"LUF"},"LUL":{"displayName":"luksemburški finančni frank","symbol":"LUL"},"LVL":{"displayName":"latvijski lats","displayName-count-one":"latvijski lats","displayName-count-two":"latvijski lats","displayName-count-few":"latvijski lats","displayName-count-other":"latvijski lats","symbol":"LVL","symbol-alt-narrow":"Ls"},"LVR":{"displayName":"latvijski rubelj","symbol":"LVR"},"LYD":{"displayName":"libijski dinar","displayName-count-one":"libijski dinar","displayName-count-two":"libijska dinarja","displayName-count-few":"libijski dinarji","displayName-count-other":"libijskih dinarjev","symbol":"LYD"},"MAD":{"displayName":"maroški dirham","displayName-count-one":"maroški dirham","displayName-count-two":"maroška dirhama","displayName-count-few":"maroški dirhami","displayName-count-other":"maroških dirhamov","symbol":"MAD"},"MAF":{"displayName":"maroški frank","symbol":"MAF"},"MCF":{"displayName":"MCF","symbol":"MCF"},"MDC":{"displayName":"MDC","symbol":"MDC"},"MDL":{"displayName":"moldavijski leu","displayName-count-one":"moldavijski leu","displayName-count-two":"moldavijska leua","displayName-count-few":"moldavijski leu","displayName-count-other":"moldavijskih leuov","symbol":"MDL"},"MGA":{"displayName":"malgaški ariarij","displayName-count-one":"malgaški ariarij","displayName-count-two":"malgaška ariarija","displayName-count-few":"malgaški ariariji","displayName-count-other":"malgaških ariarijev","symbol":"MGA","symbol-alt-narrow":"Ar"},"MGF":{"displayName":"malgaški frank","symbol":"MGF"},"MKD":{"displayName":"makedonski denar","displayName-count-one":"makedonski denar","displayName-count-two":"makedonska denarja","displayName-count-few":"makedonski denarji","displayName-count-other":"makedonskih denarjev","symbol":"MKD"},"MKN":{"displayName":"MKN","symbol":"MKN"},"MLF":{"displayName":"malijski frank","symbol":"MLF"},"MMK":{"displayName":"mjanmarski kjat","displayName-count-one":"mjanmarski kjat","displayName-count-two":"mjanmarska kjata","displayName-count-few":"mjanmarski kjati","displayName-count-other":"mjanmarskih kjatov","symbol":"MMK","symbol-alt-narrow":"K"},"MNT":{"displayName":"mongolski tugrik","displayName-count-one":"mongolski tugrik","displayName-count-two":"mongolska tugrika","displayName-count-few":"mongolski tugriki","displayName-count-other":"mongolskih tugrikov","symbol":"MNT","symbol-alt-narrow":"₮"},"MOP":{"displayName":"makavska pataka","displayName-count-one":"makavska pataka","displayName-count-two":"makavski pataki","displayName-count-few":"makavske patake","displayName-count-other":"makavskih patak","symbol":"MOP"},"MRO":{"displayName":"mavretanska uguija","displayName-count-one":"mavretanska uguija","displayName-count-two":"mavretanski uguiji","displayName-count-few":"mavretanske uguije","displayName-count-other":"mavretanskih uguij","symbol":"MRO"},"MTL":{"displayName":"malteška lira","symbol":"MTL"},"MTP":{"displayName":"malteški funt","symbol":"MTP"},"MUR":{"displayName":"mavricijska rupija","displayName-count-one":"mavricijska rupija","displayName-count-two":"mavricijski rupiji","displayName-count-few":"mavricijske rupije","displayName-count-other":"mavricijskih rupij","symbol":"MUR","symbol-alt-narrow":"Rs"},"MVP":{"displayName":"MVP","symbol":"MVP"},"MVR":{"displayName":"maldivska rufija","displayName-count-one":"maldivska rufija","displayName-count-two":"maldivski rufiji","displayName-count-few":"maldivske rufije","displayName-count-other":"maldivskih rufij","symbol":"MVR"},"MWK":{"displayName":"malavijska kvača","displayName-count-one":"malavijska kvača","displayName-count-two":"malavijski kvači","displayName-count-few":"malavijske kvače","displayName-count-other":"malavijskih kvač","symbol":"MWK"},"MXN":{"displayName":"mehiški peso","displayName-count-one":"mehiški peso","displayName-count-two":"mehiška pesa","displayName-count-few":"mehiški pesi","displayName-count-other":"mehiških pesov","symbol":"MXN","symbol-alt-narrow":"$"},"MXP":{"displayName":"mehiški srebrni peso (1861–1992)","symbol":"MXP"},"MXV":{"displayName":"mehiška inverzna enota (UDI)","symbol":"MXV"},"MYR":{"displayName":"malezijski ringit","displayName-count-one":"malezijski ringit","displayName-count-two":"malezijska ringita","displayName-count-few":"malezijski ringiti","displayName-count-other":"malezijskih ringitov","symbol":"MYR","symbol-alt-narrow":"RM"},"MZE":{"displayName":"mozambiški eskudo","symbol":"MZE"},"MZM":{"displayName":"stari mozambiški metikal","symbol":"MZM"},"MZN":{"displayName":"mozambiški metikal","displayName-count-one":"mozambiški metikal","displayName-count-two":"mozambiška metikala","displayName-count-few":"mozambiški metikali","displayName-count-other":"mozambiških metikalov","symbol":"MZN"},"NAD":{"displayName":"namibijski dolar","displayName-count-one":"namibijski dolar","displayName-count-two":"namibijska dolarja","displayName-count-few":"namibijski dolarji","displayName-count-other":"namibijskih dolarjev","symbol":"NAD","symbol-alt-narrow":"$"},"NGN":{"displayName":"nigerijska naira","displayName-count-one":"nigerijska naira","displayName-count-two":"nigerijski nairi","displayName-count-few":"nigerijske naire","displayName-count-other":"nigerijskih nair","symbol":"NGN","symbol-alt-narrow":"₦"},"NIC":{"displayName":"nikaraška kordova","symbol":"NIC"},"NIO":{"displayName":"nikaraška zlata kordova","displayName-count-one":"nikaraška zlata kordova","displayName-count-two":"nikaraški zlati kordovi","displayName-count-few":"nikaraške zlate kordove","displayName-count-other":"nikaraških zlatih kordov","symbol":"NIO","symbol-alt-narrow":"C$"},"NLG":{"displayName":"nizozemski gulden","symbol":"NLG"},"NOK":{"displayName":"norveška krona","displayName-count-one":"norveška krona","displayName-count-two":"norveški kroni","displayName-count-few":"norveške krone","displayName-count-other":"norveških kron","symbol":"NOK","symbol-alt-narrow":"kr"},"NPR":{"displayName":"nepalska rupija","displayName-count-one":"nepalska rupija","displayName-count-two":"nepalski rupiji","displayName-count-few":"nepalske rupije","displayName-count-other":"nepalskih rupij","symbol":"NPR","symbol-alt-narrow":"Rs"},"NZD":{"displayName":"novozelandski dolar","displayName-count-one":"novozelandski dolar","displayName-count-two":"novozelandska dolarja","displayName-count-few":"novozelandski dolarji","displayName-count-other":"novozelandskih dolarjev","symbol":"NZD","symbol-alt-narrow":"$"},"OMR":{"displayName":"omanski rial","displayName-count-one":"omanski rial","displayName-count-two":"omanska riala","displayName-count-few":"omanski riali","displayName-count-other":"omanskih rialov","symbol":"OMR"},"PAB":{"displayName":"panamska balboa","displayName-count-one":"panamska balboa","displayName-count-two":"panamski balboi","displayName-count-few":"panamske balboe","displayName-count-other":"panamskih balbov","symbol":"PAB"},"PEI":{"displayName":"perujski inti","symbol":"PEI"},"PEN":{"displayName":"perujski sol","displayName-count-one":"perujski sol","displayName-count-two":"perujska sola","displayName-count-few":"perujski soli","displayName-count-other":"perujskih solov","symbol":"PEN"},"PES":{"displayName":"perujski sol (1863–1965)","displayName-count-one":"perujski sol (1863–1965)","displayName-count-two":"perujska sola (1863–1965)","displayName-count-few":"perujski soli (1863–1965)","displayName-count-other":"perujskih solov (1863–1965)","symbol":"PES"},"PGK":{"displayName":"kina Papue Nove Gvineje","displayName-count-one":"kina Papue Nove Gvineje","displayName-count-two":"kini Papue Nove Gvineje","displayName-count-few":"kine Papue Nove Gvineje","displayName-count-other":"kin Papue Nove Gvineje","symbol":"PGK"},"PHP":{"displayName":"filipinski peso","displayName-count-one":"filipinski peso","displayName-count-two":"filipinska pesa","displayName-count-few":"filipinski pesi","displayName-count-other":"filipinskih pesov","symbol":"PHP","symbol-alt-narrow":"₱"},"PKR":{"displayName":"pakistanska rupija","displayName-count-one":"pakistanska rupija","displayName-count-two":"pakistanski rupiji","displayName-count-few":"pakistanske rupije","displayName-count-other":"pakistanskih rupij","symbol":"PKR","symbol-alt-narrow":"Rs"},"PLN":{"displayName":"poljski novi zlot","displayName-count-one":"poljski novi zlot","displayName-count-two":"poljska nova zlota","displayName-count-few":"poljski novi zloti","displayName-count-other":"poljskih novih zlotov","symbol":"PLN","symbol-alt-narrow":"zł"},"PLZ":{"displayName":"stari poljski zlot (1950–1995)","symbol":"PLZ"},"PTE":{"displayName":"portugalski eskudo","symbol":"PTE"},"PYG":{"displayName":"paragvajski gvarani","displayName-count-one":"paragvajski gvarani","displayName-count-two":"paragvajska gvaranija","displayName-count-few":"paragvajski gvarani","displayName-count-other":"paragvajskih gvaranijev","symbol":"PYG","symbol-alt-narrow":"₲"},"QAR":{"displayName":"katarski rial","displayName-count-one":"katarski rial","displayName-count-two":"katarska riala","displayName-count-few":"katarski riali","displayName-count-other":"katarskih rialov","symbol":"QAR"},"RHD":{"displayName":"rodezijski dolar","symbol":"RHD"},"ROL":{"displayName":"stari romunski leu","symbol":"ROL"},"RON":{"displayName":"romunski leu","displayName-count-one":"romunski leu","displayName-count-two":"romunska leua","displayName-count-few":"romunski leu","displayName-count-other":"romunskih leuov","symbol":"RON","symbol-alt-narrow":"lei"},"RSD":{"displayName":"srbski dinar","displayName-count-one":"srbski dinar","displayName-count-two":"srbska dinarja","displayName-count-few":"srbski dinarji","displayName-count-other":"srbskih dinarjev","symbol":"RSD"},"RUB":{"displayName":"ruski rubelj","displayName-count-one":"ruski rubelj","displayName-count-two":"ruska rublja","displayName-count-few":"ruski rublji","displayName-count-other":"ruskih rubljev","symbol":"RUB","symbol-alt-narrow":"₽"},"RUR":{"displayName":"ruski rubelj (1991–1998)","symbol":"RUR","symbol-alt-narrow":"р."},"RWF":{"displayName":"ruandski frank","displayName-count-one":"ruandski frank","displayName-count-two":"ruandska franka","displayName-count-few":"ruandski franki","displayName-count-other":"ruandskih frankov","symbol":"RWF","symbol-alt-narrow":"RF"},"SAR":{"displayName":"saudski rial","displayName-count-one":"saudski rial","displayName-count-two":"saudska riala","displayName-count-few":"saudski riali","displayName-count-other":"saudskih rialov","symbol":"SAR"},"SBD":{"displayName":"solomonski dolar","displayName-count-one":"solomonski dolar","displayName-count-two":"solomonska dolarja","displayName-count-few":"solomonski dolarji","displayName-count-other":"solomonskih dolarjev","symbol":"SBD","symbol-alt-narrow":"$"},"SCR":{"displayName":"sejšelska rupija","displayName-count-one":"sejšelska rupija","displayName-count-two":"sejšelski rupiji","displayName-count-few":"sejšelske rupije","displayName-count-other":"sejšelskih rupij","symbol":"SCR"},"SDD":{"displayName":"stari sudanski dinar","symbol":"SDD"},"SDG":{"displayName":"sudanski funt","displayName-count-one":"sudanski funt","displayName-count-two":"sudanska funta","displayName-count-few":"sudanski funti","displayName-count-other":"sudanskih funtov","symbol":"SDG"},"SDP":{"displayName":"stari sudanski funt","symbol":"SDP"},"SEK":{"displayName":"švedska krona","displayName-count-one":"švedska krona","displayName-count-two":"švedski kroni","displayName-count-few":"švedske krone","displayName-count-other":"švedskih kron","symbol":"SEK","symbol-alt-narrow":"kr"},"SGD":{"displayName":"singapurski dolar","displayName-count-one":"singapurski dolar","displayName-count-two":"singapurska dolarja","displayName-count-few":"singapurski dolarji","displayName-count-other":"singapurskih dolarjev","symbol":"SGD","symbol-alt-narrow":"$"},"SHP":{"displayName":"funt Sv. Helene","displayName-count-one":"funt Sv. Helene","displayName-count-two":"funta Sv. Helene","displayName-count-few":"funti Sv. Helene","displayName-count-other":"funtov Sv. Helene","symbol":"SHP","symbol-alt-narrow":"£"},"SIT":{"displayName":"slovenski tolar","symbol":"SIT"},"SKK":{"displayName":"slovaška krona","symbol":"SKK"},"SLL":{"displayName":"sieraleonski leone","displayName-count-one":"sieraleonski leone","displayName-count-two":"sieraleonska leona","displayName-count-few":"sieraleonski leoni","displayName-count-other":"sieraleonskih leonov","symbol":"SLL"},"SOS":{"displayName":"somalski šiling","displayName-count-one":"somalski šiling","displayName-count-two":"somalska šilinga","displayName-count-few":"somalski šilingi","displayName-count-other":"somalskih šilingov","symbol":"SOS"},"SRD":{"displayName":"surinamski dolar","displayName-count-one":"surinamski dolar","displayName-count-two":"surinamska dolarja","displayName-count-few":"surinamski dolarji","displayName-count-other":"surinamskih dolarjev","symbol":"SRD","symbol-alt-narrow":"$"},"SRG":{"displayName":"surinamski gulden","symbol":"SRG"},"SSP":{"displayName":"južnosudanski funt","displayName-count-one":"južnosudanski funt","displayName-count-two":"južnosudanska funta","displayName-count-few":"južnosudanski funti","displayName-count-other":"južnosudanskih funtov","symbol":"SSP","symbol-alt-narrow":"£"},"STD":{"displayName":"saotomejska dobra","displayName-count-one":"saotomejska dobra","displayName-count-two":"saotomejski dobri","displayName-count-few":"saotomejske dobre","displayName-count-other":"saotomejskih dober","symbol":"STD","symbol-alt-narrow":"Db"},"STN":{"displayName":"STN","symbol":"STN"},"SUR":{"displayName":"sovjetski rubelj","symbol":"SUR"},"SVC":{"displayName":"salvadorski kolon","symbol":"SVC"},"SYP":{"displayName":"sirijski funt","displayName-count-one":"sirijski funt","displayName-count-two":"sirijska funta","displayName-count-few":"sirijski funti","displayName-count-other":"sirijskih funtov","symbol":"SYP","symbol-alt-narrow":"£"},"SZL":{"displayName":"svazijski lilangeni","displayName-count-one":"svazijski lilangeni","displayName-count-two":"svazijska lilangenija","displayName-count-few":"svazijski lilangeni","displayName-count-other":"svazijskih lilangenijev","symbol":"SZL"},"THB":{"displayName":"tajski baht","displayName-count-one":"tajski baht","displayName-count-two":"tajska bahta","displayName-count-few":"tajski bahti","displayName-count-other":"tajskih bahtov","symbol":"THB","symbol-alt-narrow":"฿"},"TJR":{"displayName":"tadžikistanski rubelj","symbol":"TJR"},"TJS":{"displayName":"tadžikistanski somoni","displayName-count-one":"tadžikistanski somoni","displayName-count-two":"tadžikistanska somona","displayName-count-few":"tadžikistanski somoni","displayName-count-other":"tadžikistanskih somonov","symbol":"TJS"},"TMM":{"displayName":"turkmenski manat","symbol":"TMM"},"TMT":{"displayName":"turkmenistanski novi manat","displayName-count-one":"turkmenistanski novi manat","displayName-count-two":"turkmenistanska nova manata","displayName-count-few":"turkmenistanski novi manati","displayName-count-other":"turkmenistanskih novih manatov","symbol":"TMT"},"TND":{"displayName":"tunizijski dinar","displayName-count-one":"tunizijski dinar","displayName-count-two":"tunizijska dinarja","displayName-count-few":"tunizijski dinarji","displayName-count-other":"tunizijskih dinarjev","symbol":"TND"},"TOP":{"displayName":"tongovska paanga","displayName-count-one":"tongovska paanga","displayName-count-two":"tongovski paangi","displayName-count-few":"tongovske paange","displayName-count-other":"tongovskih paang","symbol":"TOP","symbol-alt-narrow":"T$"},"TPE":{"displayName":"timorski eskudo","symbol":"TPE"},"TRL":{"displayName":"stara turška lira","symbol":"TRL"},"TRY":{"displayName":"nova turška lira","displayName-count-one":"nova turška lira","displayName-count-two":"novi turški liri","displayName-count-few":"nove turške lire","displayName-count-other":"novih turških lir","symbol":"TRY","symbol-alt-narrow":"₺","symbol-alt-variant":"TL"},"TTD":{"displayName":"dolar Trinidada in Tobaga","displayName-count-one":"dolar Trinidada in Tobaga","displayName-count-two":"dolarja Trinidada in Tobaga","displayName-count-few":"dolarji Trinidada in Tobaga","displayName-count-other":"dolarjev Trinidada in Tobaga","symbol":"TTD","symbol-alt-narrow":"$"},"TWD":{"displayName":"novi tajvanski dolar","displayName-count-one":"novi tajvanski dolar","displayName-count-two":"nova tajvanska dolarja","displayName-count-few":"novi tajvanski dolarji","displayName-count-other":"novih tajvanskih dolarjev","symbol":"TWD","symbol-alt-narrow":"NT$"},"TZS":{"displayName":"tanzanijski šiling","displayName-count-one":"tanzanijski šiling","displayName-count-two":"tanzanijska šilinga","displayName-count-few":"tanzanijski šilingi","displayName-count-other":"tanzanijskih šilingov","symbol":"TZS"},"UAH":{"displayName":"ukrajinska grivna","displayName-count-one":"ukrajinska grivna","displayName-count-two":"ukrajinski grivni","displayName-count-few":"ukrajinske grivne","displayName-count-other":"ukrajinskih grivn","symbol":"UAH","symbol-alt-narrow":"₴"},"UAK":{"displayName":"ukrajinski karbovanci","symbol":"UAK"},"UGS":{"displayName":"stari ugandski šiling (1966–1987)","symbol":"UGS"},"UGX":{"displayName":"ugandski šiling","displayName-count-one":"ugandski šiling","displayName-count-two":"ugandska šilinga","displayName-count-few":"ugandski šilingi","displayName-count-other":"ugandskih šilingov","symbol":"UGX"},"USD":{"displayName":"ameriški dolar","displayName-count-one":"ameriški dolar","displayName-count-two":"ameriška dolarja","displayName-count-few":"ameriški dolarji","displayName-count-other":"ameriških dolarjev","symbol":"$","symbol-alt-narrow":"$"},"USN":{"displayName":"ameriški dolar, naslednji dan","symbol":"USN"},"USS":{"displayName":"ameriški dolar, isti dan","symbol":"USS"},"UYI":{"displayName":"UYI","symbol":"UYI"},"UYP":{"displayName":"stari urugvajski peso (1975–1993)","symbol":"UYP"},"UYU":{"displayName":"urugvajski peso","displayName-count-one":"urugvajski peso","displayName-count-two":"urugvajska pesa","displayName-count-few":"urugvajski pesi","displayName-count-other":"urugvajskih pesov","symbol":"UYU","symbol-alt-narrow":"$"},"UZS":{"displayName":"uzbeški sum","displayName-count-one":"uzbeški sum","displayName-count-two":"uzbeška suma","displayName-count-few":"uzbeški sumi","displayName-count-other":"uzbeških sumov","symbol":"UZS"},"VEB":{"displayName":"venezuelski bolivar (1871–2008)","symbol":"VEB"},"VEF":{"displayName":"venezuelski bolivar","displayName-count-one":"venezuelski bolivar","displayName-count-two":"venezuelska bolivarja","displayName-count-few":"venezuelski bolivarji","displayName-count-other":"venezuelskih bolivarjev","symbol":"VEF","symbol-alt-narrow":"Bs"},"VND":{"displayName":"vientnamski dong","displayName-count-one":"vientnamski dong","displayName-count-two":"vietnamska donga","displayName-count-few":"vietnamski dongi","displayName-count-other":"vietnamskih dongov","symbol":"₫","symbol-alt-narrow":"₫"},"VNN":{"displayName":"VNN","symbol":"VNN"},"VUV":{"displayName":"vanuatujski vatu","displayName-count-one":"vanuatujski vatu","displayName-count-two":"vanuatujska vatuja","displayName-count-few":"vanuatujski vati","displayName-count-other":"vanuatujskih vatujev","symbol":"VUV"},"WST":{"displayName":"samoanska tala","displayName-count-one":"samoanska tala","displayName-count-two":"samoanski tali","displayName-count-few":"samoanske tale","displayName-count-other":"samoanskih tal","symbol":"WST"},"XAF":{"displayName":"CFA frank BEAC","displayName-count-one":"srednjeafriški frank CFA","displayName-count-two":"franka CFA BEAC","displayName-count-few":"franki CFA BEAC","displayName-count-other":"srednjeafriški frank CFA","symbol":"FCFA"},"XAG":{"displayName":"srebro","symbol":"XAG"},"XAU":{"displayName":"zlato","symbol":"XAU"},"XBA":{"displayName":"evropska sestavljena enota","symbol":"XBA"},"XBB":{"displayName":"evropska monetarna enota","symbol":"XBB"},"XBC":{"displayName":"evropska obračunska enota (XBC)","symbol":"XBC"},"XBD":{"displayName":"evropska obračunska enota (XBD)","symbol":"XBD"},"XCD":{"displayName":"vzhodnokaribski dolar","displayName-count-one":"vzhodnokaribski dolar","displayName-count-two":"vzhodnokaribska dolarja","displayName-count-few":"vzhodnokaribski dolarji","displayName-count-other":"vzhodnokaribskih dolarjev","symbol":"XCD","symbol-alt-narrow":"$"},"XDR":{"displayName":"posebne pravice črpanja","symbol":"XDR"},"XEU":{"displayName":"evropska denarna enota","symbol":"XEU"},"XFO":{"displayName":"zlati frank","symbol":"XFO"},"XFU":{"displayName":"frank UIC","symbol":"XFU"},"XOF":{"displayName":"zahodnoafriški frank CFA","displayName-count-one":"zahodnoafriški frank CFA","displayName-count-two":"franka CFA BCEAO","displayName-count-few":"franki CFA BCEAO","displayName-count-other":"zahodnoafriški frank CFA","symbol":"CFA"},"XPD":{"displayName":"paladij","symbol":"XPD"},"XPF":{"displayName":"CFP frank","displayName-count-one":"CFP frank","displayName-count-two":"franka CFP","displayName-count-few":"franki CFP","displayName-count-other":"frankov CFP","symbol":"CFPF"},"XPT":{"displayName":"platina","symbol":"XPT"},"XRE":{"displayName":"XRE","symbol":"XRE"},"XSU":{"displayName":"XSU","symbol":"XSU"},"XTS":{"displayName":"koda za potrebe testiranja","symbol":"XTS"},"XUA":{"displayName":"XUA","symbol":"XUA"},"XXX":{"displayName":"neznana valuta","displayName-count-one":"(neznana enota valute)","displayName-count-two":"(neznana valuta)","displayName-count-few":"(neznana valuta)","displayName-count-other":"(neznana valuta)","symbol":"XXX"},"YDD":{"displayName":"jemenski dinar","symbol":"YDD"},"YER":{"displayName":"jemenski rial","displayName-count-one":"jemenski rial","displayName-count-two":"jemenska riala","displayName-count-few":"jemenski riali","displayName-count-other":"jemenskih rialov","symbol":"YER"},"YUD":{"displayName":"stari jugoslovanski dinar","symbol":"YUD"},"YUM":{"displayName":"novi jugoslovanski dinar","symbol":"YUM"},"YUN":{"displayName":"jugoslovanski konvertibilni dinar","symbol":"YUN"},"YUR":{"displayName":"YUR","symbol":"YUR"},"ZAL":{"displayName":"južnoafriški finančni rand","symbol":"ZAL"},"ZAR":{"displayName":"južnoafriški rand","displayName-count-one":"južnoafriški rand","displayName-count-two":"južnoafriška randa","displayName-count-few":"južnoafriški randi","displayName-count-other":"južnoafriških randov","symbol":"ZAR","symbol-alt-narrow":"R"},"ZMK":{"displayName":"zambijska kvača (1968–2012)","symbol":"ZMK"},"ZMW":{"displayName":"zambijska kvača","displayName-count-one":"zambijska kvača","displayName-count-two":"zambijski kvači","displayName-count-few":"zambijske kvače","displayName-count-other":"zambijskih kvač","symbol":"ZMW","symbol-alt-narrow":"ZK"},"ZRN":{"displayName":"zairski novi zaire","symbol":"ZRN"},"ZRZ":{"displayName":"zairski zaire","symbol":"ZRZ"},"ZWD":{"displayName":"zimbabvejski dolar","symbol":"ZWD"},"ZWL":{"displayName":"zimbabvejski dolar (2009)","symbol":"ZWL"},"ZWR":{"displayName":"ZWR","symbol":"ZWR"}},"defaultNumberingSystem":"latn","otherNumberingSystems":{"native":"latn"},"minimumGroupingDigits":"1","symbols-numberSystem-latn":{"decimal":",","group":".","list":";","percentSign":"%","plusSign":"+","minusSign":"−","exponential":"e","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"NaN","timeSeparator":":"},"decimalFormats-numberSystem-latn":{"standard":"#,##0.###","long":{"decimalFormat":{"1000-count-one":"0 tisoč","1000-count-two":"0 tisoč","1000-count-few":"0 tisoč","1000-count-other":"0 tisoč","10000-count-one":"00 tisoč","10000-count-two":"00 tisoč","10000-count-few":"00 tisoč","10000-count-other":"00 tisoč","100000-count-one":"000 tisoč","100000-count-two":"000 tisoč","100000-count-few":"000 tisoč","100000-count-other":"000 tisoč","1000000-count-one":"0 milijon","1000000-count-two":"0 milijona","1000000-count-few":"0 milijone","1000000-count-other":"0 milijonov","10000000-count-one":"00 milijon","10000000-count-two":"00 milijona","10000000-count-few":"00 milijoni","10000000-count-other":"00 milijonov","100000000-count-one":"000 milijon","100000000-count-two":"000 milijona","100000000-count-few":"000 milijoni","100000000-count-other":"000 milijonov","1000000000-count-one":"0 milijarda","1000000000-count-two":"0 milijardi","1000000000-count-few":"0 milijarde","1000000000-count-other":"0 milijard","10000000000-count-one":"00 milijarda","10000000000-count-two":"00 milijardi","10000000000-count-few":"00 milijarde","10000000000-count-other":"00 milijard","100000000000-count-one":"000 milijarda","100000000000-count-two":"000 milijardi","100000000000-count-few":"000 milijarde","100000000000-count-other":"000 milijard","1000000000000-count-one":"0 bilijon","1000000000000-count-two":"0 bilijona","1000000000000-count-few":"0 bilijoni","1000000000000-count-other":"0 bilijonov","10000000000000-count-one":"00 bilijon","10000000000000-count-two":"00 bilijona","10000000000000-count-few":"00 bilijoni","10000000000000-count-other":"00 bilijonov","100000000000000-count-one":"000 bilijon","100000000000000-count-two":"000 bilijona","100000000000000-count-few":"000 bilijoni","100000000000000-count-other":"000 bilijonov"}},"short":{"decimalFormat":{"1000-count-one":"0 tis'.'","1000-count-two":"0 tis'.'","1000-count-few":"0 tis'.'","1000-count-other":"0 tis'.'","10000-count-one":"00 tis'.'","10000-count-two":"00 tis'.'","10000-count-few":"00 tis'.'","10000-count-other":"00 tis'.'","100000-count-one":"000 tis'.'","100000-count-two":"000 tis'.'","100000-count-few":"000 tis'.'","100000-count-other":"000 tis'.'","1000000-count-one":"0 mio'.'","1000000-count-two":"0 mio'.'","1000000-count-few":"0 mio'.'","1000000-count-other":"0 mio'.'","10000000-count-one":"00 mio'.'","10000000-count-two":"00 mio'.'","10000000-count-few":"00 mio'.'","10000000-count-other":"00 mio'.'","100000000-count-one":"000 mio'.'","100000000-count-two":"000 mio'.'","100000000-count-few":"000 mio'.'","100000000-count-other":"000 mio'.'","1000000000-count-one":"0 mrd'.'","1000000000-count-two":"0 mrd'.'","1000000000-count-few":"0 mrd'.'","1000000000-count-other":"0 mrd'.'","10000000000-count-one":"00 mrd'.'","10000000000-count-two":"00 mrd'.'","10000000000-count-few":"00 mrd'.'","10000000000-count-other":"00 mrd'.'","100000000000-count-one":"000 mrd'.'","100000000000-count-two":"000 mrd'.'","100000000000-count-few":"000 mrd'.'","100000000000-count-other":"000 mrd'.'","1000000000000-count-one":"0 bil'.'","1000000000000-count-two":"0 bil'.'","1000000000000-count-few":"0 bil'.'","1000000000000-count-other":"0 bil'.'","10000000000000-count-one":"00 bil'.'","10000000000000-count-two":"00 bil'.'","10000000000000-count-few":"00 bil'.'","10000000000000-count-other":"00 bil'.'","100000000000000-count-one":"000 bil'.'","100000000000000-count-two":"000 bil'.'","100000000000000-count-few":"000 bil'.'","100000000000000-count-other":"000 bil'.'"}}},"scientificFormats-numberSystem-latn":{"standard":"#E0"},"percentFormats-numberSystem-latn":{"standard":"#,##0 %"},"currencyFormats-numberSystem-latn":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"#,##0.00 ¤","accounting":"#,##0.00 ¤;(#,##0.00 ¤)","short":{"standard":{"1000-count-one":"0 tis'.' ¤","1000-count-two":"0 tis'.' ¤","1000-count-few":"0 tis'.' ¤","1000-count-other":"0 tis'.' ¤","10000-count-one":"00 tis'.' ¤","10000-count-two":"00 tis'.' ¤","10000-count-few":"00 tis'.' ¤","10000-count-other":"00 tis'.' ¤","100000-count-one":"000 tis'.' ¤","100000-count-two":"000 tis'.' ¤","100000-count-few":"000 tis'.' ¤","100000-count-other":"000 tis'.' ¤","1000000-count-one":"0 mio'.' ¤","1000000-count-two":"0 mio'.' ¤","1000000-count-few":"0 mio'.' ¤","1000000-count-other":"0 mio'.' ¤","10000000-count-one":"00 mio'.' ¤","10000000-count-two":"00 mio'.' ¤","10000000-count-few":"00 mio'.' ¤","10000000-count-other":"00 mio'.' ¤","100000000-count-one":"000 mio'.' ¤","100000000-count-two":"000 mio'.' ¤","100000000-count-few":"000 mio'.' ¤","100000000-count-other":"000 mio'.' ¤","1000000000-count-one":"0 mrd'.' ¤","1000000000-count-two":"0 mrd'.' ¤","1000000000-count-few":"0 mrd'.' ¤","1000000000-count-other":"0 mrd'.' ¤","10000000000-count-one":"00 mrd'.' ¤","10000000000-count-two":"00 mrd'.' ¤","10000000000-count-few":"00 mrd'.' ¤","10000000000-count-other":"00 mrd'.' ¤","100000000000-count-one":"000 mrd'.' ¤","100000000000-count-two":"000 mrd'.' ¤","100000000000-count-few":"000 mrd'.' ¤","100000000000-count-other":"000 mrd'.' ¤","1000000000000-count-one":"0 bil'.' ¤","1000000000000-count-two":"0 bil'.' ¤","1000000000000-count-few":"0 bil'.' ¤","1000000000000-count-other":"0 bil'.' ¤","10000000000000-count-one":"00 bil'.' ¤","10000000000000-count-two":"00 bil'.' ¤","10000000000000-count-few":"00 bil'.' ¤","10000000000000-count-other":"00 bil'.' ¤","100000000000000-count-one":"000 bil'.' ¤","100000000000000-count-two":"000 bil'.' ¤","100000000000000-count-few":"000 bil'.' ¤","100000000000000-count-other":"000 bil'.' ¤"}},"unitPattern-count-one":"{0} {1}","unitPattern-count-two":"{0} {1}","unitPattern-count-few":"{0} {1}","unitPattern-count-other":"{0} {1}"},"miscPatterns-numberSystem-latn":{"atLeast":"⩾{0}","range":"{0}–{1}"},"minimalPairs":{"pluralMinimalPairs-count-one":"{0} ura","pluralMinimalPairs-count-two":"{0} uri","pluralMinimalPairs-count-few":"{0} ure","pluralMinimalPairs-count-other":"{0} ur","other":"V {0}. križišču zavijte desno."}}},"sv":{"identity":{"version":{"_number":"$Revision: 13705 $","_cldrVersion":"32"},"language":"sv"},"dates":{"calendars":{"gregorian":{"months":{"format":{"abbreviated":{"1":"jan.","2":"feb.","3":"mars","4":"apr.","5":"maj","6":"juni","7":"juli","8":"aug.","9":"sep.","10":"okt.","11":"nov.","12":"dec."},"narrow":{"1":"J","2":"F","3":"M","4":"A","5":"M","6":"J","7":"J","8":"A","9":"S","10":"O","11":"N","12":"D"},"wide":{"1":"januari","2":"februari","3":"mars","4":"april","5":"maj","6":"juni","7":"juli","8":"augusti","9":"september","10":"oktober","11":"november","12":"december"}},"stand-alone":{"abbreviated":{"1":"jan.","2":"feb.","3":"mars","4":"apr.","5":"maj","6":"juni","7":"juli","8":"aug.","9":"sep.","10":"okt.","11":"nov.","12":"dec."},"narrow":{"1":"J","2":"F","3":"M","4":"A","5":"M","6":"J","7":"J","8":"A","9":"S","10":"O","11":"N","12":"D"},"wide":{"1":"januari","2":"februari","3":"mars","4":"april","5":"maj","6":"juni","7":"juli","8":"augusti","9":"september","10":"oktober","11":"november","12":"december"}}},"days":{"format":{"abbreviated":{"sun":"sön","mon":"mån","tue":"tis","wed":"ons","thu":"tors","fri":"fre","sat":"lör"},"narrow":{"sun":"S","mon":"M","tue":"T","wed":"O","thu":"T","fri":"F","sat":"L"},"short":{"sun":"sö","mon":"må","tue":"ti","wed":"on","thu":"to","fri":"fr","sat":"lö"},"wide":{"sun":"söndag","mon":"måndag","tue":"tisdag","wed":"onsdag","thu":"torsdag","fri":"fredag","sat":"lördag"}},"stand-alone":{"abbreviated":{"sun":"sön","mon":"mån","tue":"tis","wed":"ons","thu":"tors","fri":"fre","sat":"lör"},"narrow":{"sun":"S","mon":"M","tue":"T","wed":"O","thu":"T","fri":"F","sat":"L"},"short":{"sun":"sö","mon":"må","tue":"ti","wed":"on","thu":"to","fri":"fr","sat":"lö"},"wide":{"sun":"söndag","mon":"måndag","tue":"tisdag","wed":"onsdag","thu":"torsdag","fri":"fredag","sat":"lördag"}}},"quarters":{"format":{"abbreviated":{"1":"K1","2":"K2","3":"K3","4":"K4"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"1:a kvartalet","2":"2:a kvartalet","3":"3:e kvartalet","4":"4:e kvartalet"}},"stand-alone":{"abbreviated":{"1":"K1","2":"K2","3":"K3","4":"K4"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"1:a kvartalet","2":"2:a kvartalet","3":"3:e kvartalet","4":"4:e kvartalet"}}},"dayPeriods":{"format":{"abbreviated":{"midnight":"midnatt","am":"fm","pm":"em","morning1":"på morg.","morning2":"på förm.","afternoon1":"på efterm.","evening1":"på kvällen","night1":"på natten"},"narrow":{"midnight":"midn.","am":"fm","pm":"em","morning1":"på morg.","morning2":"på förm.","afternoon1":"på efterm.","evening1":"på kvällen","night1":"på natten"},"wide":{"midnight":"midnatt","am":"fm","pm":"em","morning1":"på morgonen","morning2":"på förmiddagen","afternoon1":"på eftermiddagen","evening1":"på kvällen","night1":"på natten"}},"stand-alone":{"abbreviated":{"midnight":"midnatt","am":"f.m.","pm":"e.m.","morning1":"morgon","morning2":"förm.","afternoon1":"efterm.","evening1":"kväll","night1":"natt"},"narrow":{"midnight":"midn.","am":"fm","pm":"em","morning1":"morg.","morning2":"förm.","afternoon1":"efterm.","evening1":"kväll","night1":"natt"},"wide":{"midnight":"midnatt","am":"förmiddag","pm":"eftermiddag","morning1":"morgon","morning2":"förmiddag","afternoon1":"eftermiddag","evening1":"kväll","night1":"natt"}}},"eras":{"eraNames":{"0":"före Kristus","1":"efter Kristus","0-alt-variant":"före västerländsk tideräkning","1-alt-variant":"västerländsk tideräkning"},"eraAbbr":{"0":"f.Kr.","1":"e.Kr.","0-alt-variant":"f.v.t.","1-alt-variant":"v.t."},"eraNarrow":{"0":"f.Kr.","1":"e.Kr.","0-alt-variant":"f.v.t.","1-alt-variant":"v.t."}},"dateFormats":{"full":"EEEE d MMMM y","long":"d MMMM y","medium":"d MMM y","short":"y-MM-dd"},"timeFormats":{"full":"'kl'. HH:mm:ss zzzz","full-alt-variant":"'kl'. HH.mm.ss zzzz","long":"HH:mm:ss z","long-alt-variant":"HH.mm.ss z","medium":"HH:mm:ss","medium-alt-variant":"HH.mm.ss","short":"HH:mm","short-alt-variant":"HH.mm"},"dateTimeFormats":{"full":"{1} {0}","long":"{1} {0}","medium":"{1} {0}","short":"{1} {0}","availableFormats":{"Bh":"h B","Bhm":"h:mm B","Bhms":"h:mm:ss B","d":"d","E":"ccc","EBhm":"E h:mm B","EBhms":"E h:mm:ss B","Ed":"E d","Ehm":"E h:mm a","EHm":"E HH:mm","Ehms":"E h:mm:ss a","EHms":"E HH:mm:ss","Gy":"y G","GyMMM":"MMM y G","GyMMMd":"d MMM y G","GyMMMEd":"E d MMM y G","h":"h a","H":"HH","hm":"h:mm a","Hm":"HH:mm","hms":"h:mm:ss a","Hms":"HH:mm:ss","hmsv":"h:mm:ss a v","Hmsv":"HH:mm:ss v","hmv":"h:mm a v","Hmv":"HH:mm v","M":"L","Md":"d/M","MEd":"E d/M","MMd":"d/M","MMdd":"dd/MM","MMM":"LLL","MMMd":"d MMM","MMMEd":"E d MMM","MMMMd":"d MMMM","MMMMEd":"E d MMMM","MMMMW-count-one":"'vecka' W 'i' MMM","MMMMW-count-other":"'vecka' W 'i' MMM","ms":"mm:ss","y":"y","yM":"y-MM","yMd":"y-MM-dd","yMEd":"E, y-MM-dd","yMM":"y-MM","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"E d MMM y","yMMMM":"MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","yw-count-one":"'vecka' w, Y","yw-count-other":"'vecka' w, Y"},"appendItems":{"Day":"{0} ({2}: {1})","Day-Of-Week":"{0} {1}","Era":"{1} {0}","Hour":"{0} ({2}: {1})","Minute":"{0} ({2}: {1})","Month":"{0} ({2}: {1})","Quarter":"{0} ({2}: {1})","Second":"{0} ({2}: {1})","Timezone":"{0} {1}","Week":"{0} ({2}: {1})","Year":"{1} {0}"},"intervalFormats":{"intervalFormatFallback":"{0} – {1}","d":{"d":"d–d"},"h":{"a":"h a – h a","h":"h–h a"},"H":{"H":"HH–HH"},"hm":{"a":"h:mm a – h:mm a","h":"h:mm–h:mm a","m":"h:mm–h:mm a"},"Hm":{"H":"HH:mm–HH:mm","m":"HH:mm–HH:mm"},"hmv":{"a":"h:mm a – h:mm a v","h":"h:mm–h:mm a v","m":"h:mm–h:mm a v"},"Hmv":{"H":"HH:mm–HH:mm v","m":"HH:mm–HH:mm v"},"hv":{"a":"h a – h a v","h":"h–h a v"},"Hv":{"H":"HH–HH v"},"M":{"M":"M–M"},"Md":{"d":"d–d/M","M":"d/M–d/M"},"MEd":{"d":"E d/M – E d/M","M":"E d/M – E d/M"},"MMM":{"M":"MMM–MMM"},"MMMd":{"d":"d–d MMM","M":"d MMM – d MMM"},"MMMEd":{"d":"E d – E d MMM","M":"E d MMM – E d MMM"},"y":{"y":"y–y"},"yM":{"M":"y-MM – MM","y":"y-MM – y-MM"},"yMd":{"d":"y-MM-dd – dd","M":"y-MM-dd – MM-dd","y":"y-MM-dd – y-MM-dd"},"yMEd":{"d":"E, y-MM-dd – E, y-MM-dd","M":"E, y-MM-dd – E, y-MM-dd","y":"E, y-MM-dd – E, y-MM-dd"},"yMMM":{"M":"MMM–MMM y","y":"MMM y – MMM y"},"yMMMd":{"d":"d–d MMM y","M":"d MMM–d MMM y","y":"d MMM y–d MMM y"},"yMMMEd":{"d":"E dd MMM–E dd MMM y","M":"E dd MMM–E dd MMM y","y":"E dd MMM y–E dd MMM y"},"yMMMM":{"M":"MMMM–MMMM y","y":"MMMM y – MMMM y"}}}}},"fields":{"era":{"displayName":"era"},"era-short":{"displayName":"era"},"era-narrow":{"displayName":"era"},"year":{"displayName":"år","relative-type--1":"i fjol","relative-type-0":"i år","relative-type-1":"nästa år","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} år","relativeTimePattern-count-other":"om {0} år"},"relativeTime-type-past":{"relativeTimePattern-count-one":"för {0} år sedan","relativeTimePattern-count-other":"för {0} år sedan"}},"year-short":{"displayName":"år","relative-type--1":"i fjol","relative-type-0":"i år","relative-type-1":"nästa år","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} år","relativeTimePattern-count-other":"om {0} år"},"relativeTime-type-past":{"relativeTimePattern-count-one":"för {0} år sen","relativeTimePattern-count-other":"för {0} år sen"}},"year-narrow":{"displayName":"år","relative-type--1":"i fjol","relative-type-0":"i år","relative-type-1":"nästa år","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} år","relativeTimePattern-count-other":"+{0} år"},"relativeTime-type-past":{"relativeTimePattern-count-one":"−{0} år","relativeTimePattern-count-other":"−{0} år"}},"quarter":{"displayName":"kvartal","relative-type--1":"förra kvartalet","relative-type-0":"detta kvartal","relative-type-1":"nästa kvartal","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} kvartal","relativeTimePattern-count-other":"om {0} kvartal"},"relativeTime-type-past":{"relativeTimePattern-count-one":"för {0} kvartal sedan","relativeTimePattern-count-other":"för {0} kvartal sedan"}},"quarter-short":{"displayName":"kv.","relative-type--1":"förra kv.","relative-type-0":"detta kv.","relative-type-1":"nästa kv.","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} kv.","relativeTimePattern-count-other":"om {0} kv."},"relativeTime-type-past":{"relativeTimePattern-count-one":"för {0} kv. sen","relativeTimePattern-count-other":"för {0} kv. sen"}},"quarter-narrow":{"displayName":"kv.","relative-type--1":"förra kv.","relative-type-0":"detta kv.","relative-type-1":"nästa kv.","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} kv.","relativeTimePattern-count-other":"+{0} kv."},"relativeTime-type-past":{"relativeTimePattern-count-one":"−{0} kv","relativeTimePattern-count-other":"−{0} kv"}},"month":{"displayName":"månad","relative-type--1":"förra månaden","relative-type-0":"denna månad","relative-type-1":"nästa månad","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} månad","relativeTimePattern-count-other":"om {0} månader"},"relativeTime-type-past":{"relativeTimePattern-count-one":"för {0} månad sedan","relativeTimePattern-count-other":"för {0} månader sedan"}},"month-short":{"displayName":"m","relative-type--1":"förra mån.","relative-type-0":"denna mån.","relative-type-1":"nästa mån.","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} mån.","relativeTimePattern-count-other":"om {0} mån."},"relativeTime-type-past":{"relativeTimePattern-count-one":"för {0} mån. sen","relativeTimePattern-count-other":"för {0} mån. sen"}},"month-narrow":{"displayName":"mån","relative-type--1":"förra mån.","relative-type-0":"denna mån.","relative-type-1":"nästa mån.","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} mån.","relativeTimePattern-count-other":"+{0} mån."},"relativeTime-type-past":{"relativeTimePattern-count-one":"−{0} mån","relativeTimePattern-count-other":"−{0} mån"}},"week":{"displayName":"vecka","relative-type--1":"förra veckan","relative-type-0":"denna vecka","relative-type-1":"nästa vecka","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} vecka","relativeTimePattern-count-other":"om {0} veckor"},"relativeTime-type-past":{"relativeTimePattern-count-one":"för {0} vecka sedan","relativeTimePattern-count-other":"för {0} veckor sedan"},"relativePeriod":"veckan för {0}"},"week-short":{"displayName":"v","relative-type--1":"förra v.","relative-type-0":"denna v.","relative-type-1":"nästa v.","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} v.","relativeTimePattern-count-other":"om {0} v."},"relativeTime-type-past":{"relativeTimePattern-count-one":"för {0} v. sedan","relativeTimePattern-count-other":"för {0} v. sedan"},"relativePeriod":"veckan för {0}"},"week-narrow":{"displayName":"v","relative-type--1":"förra v.","relative-type-0":"denna v.","relative-type-1":"nästa v.","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} v.","relativeTimePattern-count-other":"+{0} v."},"relativeTime-type-past":{"relativeTimePattern-count-one":"−{0} v","relativeTimePattern-count-other":"−{0} v"},"relativePeriod":"veckan för {0}"},"weekOfMonth":{"displayName":"vecka i månaden"},"weekOfMonth-short":{"displayName":"vk. i mån."},"weekOfMonth-narrow":{"displayName":"vk.i mån."},"day":{"displayName":"dag","relative-type--2":"i förrgår","relative-type--1":"i går","relative-type-0":"i dag","relative-type-1":"i morgon","relative-type-2":"i övermorgon","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} dag","relativeTimePattern-count-other":"om {0} dagar"},"relativeTime-type-past":{"relativeTimePattern-count-one":"för {0} dag sedan","relativeTimePattern-count-other":"för {0} dagar sedan"}},"day-short":{"displayName":"dag","relative-type--2":"i förrgår","relative-type--1":"i går","relative-type-0":"i dag","relative-type-1":"i morgon","relative-type-2":"i övermorgon","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} d","relativeTimePattern-count-other":"om {0} d"},"relativeTime-type-past":{"relativeTimePattern-count-one":"för {0} d sedan","relativeTimePattern-count-other":"för {0} d sedan"}},"day-narrow":{"displayName":"dag","relative-type--2":"i förrgår","relative-type--1":"igår","relative-type-0":"idag","relative-type-1":"imorgon","relative-type-2":"i övermorgon","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} d","relativeTimePattern-count-other":"+{0} d"},"relativeTime-type-past":{"relativeTimePattern-count-one":"−{0} d","relativeTimePattern-count-other":"−{0} d"}},"dayOfYear":{"displayName":"dag under året"},"dayOfYear-short":{"displayName":"dag under året"},"dayOfYear-narrow":{"displayName":"dag under året"},"weekday":{"displayName":"veckodag"},"weekday-short":{"displayName":"veckodag"},"weekday-narrow":{"displayName":"veckodag"},"weekdayOfMonth":{"displayName":"veckodag i månad"},"weekdayOfMonth-short":{"displayName":"veckodag i mån."},"weekdayOfMonth-narrow":{"displayName":"veckodag i mån."},"sun":{"relative-type--1":"söndag förra veckan","relative-type-0":"söndag denna vecka","relative-type-1":"söndag nästa vecka","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} söndag","relativeTimePattern-count-other":"om {0} söndagar"},"relativeTime-type-past":{"relativeTimePattern-count-one":"för {0} söndag sedan","relativeTimePattern-count-other":"för {0} söndagar sedan"}},"sun-short":{"relative-type--1":"sön. förra veckan","relative-type-0":"sön. denna vecka","relative-type-1":"sön. nästa vecka","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} sön.","relativeTimePattern-count-other":"om {0} sön."},"relativeTime-type-past":{"relativeTimePattern-count-one":"för {0} sön. sen","relativeTimePattern-count-other":"för {0} sön. sen"}},"sun-narrow":{"relative-type--1":"förra sön.","relative-type-0":"denna sön.","relative-type-1":"nästa sön.","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} sön","relativeTimePattern-count-other":"+{0} sön"},"relativeTime-type-past":{"relativeTimePattern-count-one":"−{0} sön","relativeTimePattern-count-other":"−{0} sön"}},"mon":{"relative-type--1":"måndag förra veckan","relative-type-0":"måndag denna vecka","relative-type-1":"måndag nästa vecka","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} måndag","relativeTimePattern-count-other":"om {0} måndagar"},"relativeTime-type-past":{"relativeTimePattern-count-one":"för {0} måndag sedan","relativeTimePattern-count-other":"för {0} måndagar sedan"}},"mon-short":{"relative-type--1":"mån. förra veckan","relative-type-0":"mån. denna vecka","relative-type-1":"mån. nästa vecka","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} månd.","relativeTimePattern-count-other":"om {0} månd."},"relativeTime-type-past":{"relativeTimePattern-count-one":"för {0} månd. sen","relativeTimePattern-count-other":"för {0} månd. sen"}},"mon-narrow":{"relative-type--1":"förra mån.","relative-type-0":"denna mån.","relative-type-1":"nästa mån.","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} månd","relativeTimePattern-count-other":"+{0} månd"},"relativeTime-type-past":{"relativeTimePattern-count-one":"–{0} månd","relativeTimePattern-count-other":"–{0} månd"}},"tue":{"relative-type--1":"tisdag förra veckan","relative-type-0":"tisdag denna vecka","relative-type-1":"tisdag nästa vecka","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} tisdag","relativeTimePattern-count-other":"om {0} tisdagar"},"relativeTime-type-past":{"relativeTimePattern-count-one":"för {0} tisdag sedan","relativeTimePattern-count-other":"för {0} tisdagar sedan"}},"tue-short":{"relative-type--1":"tis. förra veckan","relative-type-0":"tis. denna vecka","relative-type-1":"tis. nästa vecka","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} tis.","relativeTimePattern-count-other":"om {0} tis."},"relativeTime-type-past":{"relativeTimePattern-count-one":"för {0} tis. sen","relativeTimePattern-count-other":"för {0} tis. sen"}},"tue-narrow":{"relative-type--1":"förra tis.","relative-type-0":"denna tis.","relative-type-1":"nästa tis.","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} tis","relativeTimePattern-count-other":"+{0} tis"},"relativeTime-type-past":{"relativeTimePattern-count-one":"−{0} tis","relativeTimePattern-count-other":"−{0} tis"}},"wed":{"relative-type--1":"onsdag förra veckan","relative-type-0":"onsdag denna vecka","relative-type-1":"onsdag nästa vecka","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} onsdag","relativeTimePattern-count-other":"om {0} onsdagar"},"relativeTime-type-past":{"relativeTimePattern-count-one":"för {0} onsdag sedan","relativeTimePattern-count-other":"för {0} onsdagar sedan"}},"wed-short":{"relative-type--1":"ons. förra veckan","relative-type-0":"ons. denna vecka","relative-type-1":"ons. nästa vecka","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} ons.","relativeTimePattern-count-other":"om {0} ons."},"relativeTime-type-past":{"relativeTimePattern-count-one":"för {0} ons. sen","relativeTimePattern-count-other":"för {0} ons. sen"}},"wed-narrow":{"relative-type--1":"förra ons.","relative-type-0":"denna ons.","relative-type-1":"nästa ons.","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} ons","relativeTimePattern-count-other":"+{0} ons"},"relativeTime-type-past":{"relativeTimePattern-count-one":"−{0} ons","relativeTimePattern-count-other":"−{0} ons"}},"thu":{"relative-type--1":"torsdag förra veckan","relative-type-0":"torsdag denna vecka","relative-type-1":"torsdag nästa vecka","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} torsdag","relativeTimePattern-count-other":"om {0} torsdagar"},"relativeTime-type-past":{"relativeTimePattern-count-one":"för {0} torsdag sedan","relativeTimePattern-count-other":"för {0} torsdagar sedan"}},"thu-short":{"relative-type--1":"tors. förra veckan","relative-type-0":"tors. denna vecka","relative-type-1":"tors. nästa vecka","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} tors.","relativeTimePattern-count-other":"om {0} tors."},"relativeTime-type-past":{"relativeTimePattern-count-one":"för {0} tors. sen","relativeTimePattern-count-other":"för {0} tors. sen"}},"thu-narrow":{"relative-type--1":"förra tors.","relative-type-0":"denna tors.","relative-type-1":"nästa tors.","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} tors","relativeTimePattern-count-other":"+{0} tors"},"relativeTime-type-past":{"relativeTimePattern-count-one":"−{0} tors","relativeTimePattern-count-other":"−{0} tors"}},"fri":{"relative-type--1":"fredag förra veckan","relative-type-0":"fredag denna vecka","relative-type-1":"fredag nästa vecka","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} fredag","relativeTimePattern-count-other":"om {0} fredagar"},"relativeTime-type-past":{"relativeTimePattern-count-one":"för {0} fredag sedan","relativeTimePattern-count-other":"för {0} fredagar sedan"}},"fri-short":{"relative-type--1":"fre. förra veckan","relative-type-0":"fre. denna vecka","relative-type-1":"fre. nästa vecka","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} fre.","relativeTimePattern-count-other":"om {0} fre."},"relativeTime-type-past":{"relativeTimePattern-count-one":"för {0} fre. sen","relativeTimePattern-count-other":"för {0} fred. sen"}},"fri-narrow":{"relative-type--1":"förra fre.","relative-type-0":"denna fre.","relative-type-1":"nästa fre.","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} fre","relativeTimePattern-count-other":"+{0} fre"},"relativeTime-type-past":{"relativeTimePattern-count-one":"−{0} fre","relativeTimePattern-count-other":"−{0} fre"}},"sat":{"relative-type--1":"lördag förra veckan","relative-type-0":"lördag denna vecka","relative-type-1":"lördag nästa vecka","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} lördag","relativeTimePattern-count-other":"om {0} lördagar"},"relativeTime-type-past":{"relativeTimePattern-count-one":"för {0} lördag sedan","relativeTimePattern-count-other":"för {0} lördagar sedan"}},"sat-short":{"relative-type--1":"lör. förra veckan","relative-type-0":"lör. denna vecka","relative-type-1":"lör. nästa vecka","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} lör.","relativeTimePattern-count-other":"om {0} lör."},"relativeTime-type-past":{"relativeTimePattern-count-one":"för {0} lör. sen","relativeTimePattern-count-other":"för {0} lör. sen"}},"sat-narrow":{"relative-type--1":"förra lör.","relative-type-0":"denna lör.","relative-type-1":"nästa lör.","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} lör","relativeTimePattern-count-other":"+{0} lör"},"relativeTime-type-past":{"relativeTimePattern-count-one":"−{0} lör","relativeTimePattern-count-other":"−{0} lör"}},"dayperiod-short":{"displayName":"fm/em"},"dayperiod":{"displayName":"fm/em"},"dayperiod-narrow":{"displayName":"fm/em"},"hour":{"displayName":"timme","relative-type-0":"denna timme","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} timme","relativeTimePattern-count-other":"om {0} timmar"},"relativeTime-type-past":{"relativeTimePattern-count-one":"för {0} timme sedan","relativeTimePattern-count-other":"för {0} timmar sedan"}},"hour-short":{"displayName":"tim","relative-type-0":"denna timme","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} tim","relativeTimePattern-count-other":"om {0} tim"},"relativeTime-type-past":{"relativeTimePattern-count-one":"för {0} tim sedan","relativeTimePattern-count-other":"för {0} tim sedan"}},"hour-narrow":{"displayName":"h","relative-type-0":"denna timme","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} h","relativeTimePattern-count-other":"+{0} h"},"relativeTime-type-past":{"relativeTimePattern-count-one":"−{0} h","relativeTimePattern-count-other":"−{0} h"}},"minute":{"displayName":"minut","relative-type-0":"denna minut","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} minut","relativeTimePattern-count-other":"om {0} minuter"},"relativeTime-type-past":{"relativeTimePattern-count-one":"för {0} minut sedan","relativeTimePattern-count-other":"för {0} minuter sedan"}},"minute-short":{"displayName":"min","relative-type-0":"denna minut","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} min","relativeTimePattern-count-other":"om {0} min"},"relativeTime-type-past":{"relativeTimePattern-count-one":"för {0} min sen","relativeTimePattern-count-other":"för {0} min sen"}},"minute-narrow":{"displayName":"m","relative-type-0":"denna minut","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} min","relativeTimePattern-count-other":"+{0} min"},"relativeTime-type-past":{"relativeTimePattern-count-one":"−{0} min","relativeTimePattern-count-other":"−{0} min"}},"second":{"displayName":"sekund","relative-type-0":"nu","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} sekund","relativeTimePattern-count-other":"om {0} sekunder"},"relativeTime-type-past":{"relativeTimePattern-count-one":"för {0} sekund sedan","relativeTimePattern-count-other":"för {0} sekunder sedan"}},"second-short":{"displayName":"sek","relative-type-0":"nu","relativeTime-type-future":{"relativeTimePattern-count-one":"om {0} sek","relativeTimePattern-count-other":"om {0} sek"},"relativeTime-type-past":{"relativeTimePattern-count-one":"för {0} s sen","relativeTimePattern-count-other":"för {0} s sen"}},"second-narrow":{"displayName":"s","relative-type-0":"nu","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} s","relativeTimePattern-count-other":"+{0} s"},"relativeTime-type-past":{"relativeTimePattern-count-one":"−{0} s","relativeTimePattern-count-other":"−{0} s"}},"zone":{"displayName":"tidszon"},"zone-short":{"displayName":"tidszon"},"zone-narrow":{"displayName":"tidszon"}}},"numbers":{"currencies":{"ADP":{"displayName":"andorransk peseta","displayName-count-one":"andorransk peseta","displayName-count-other":"andorranska pesetas","symbol":"ADP"},"AED":{"displayName":"Förenade Arabemiratens dirham","displayName-count-one":"Förenade Arabemiratens dirham","displayName-count-other":"Förenade Arabemiratens dirham","symbol":"AED"},"AFA":{"displayName":"afghani (1927–2002)","displayName-count-one":"afghani (1927–2002)","displayName-count-other":"afghani (1927–2002)","symbol":"AFA"},"AFN":{"displayName":"afghansk afghani","displayName-count-one":"afghansk afghani","displayName-count-other":"afghanska afghani","symbol":"AFN"},"ALK":{"displayName":"albansk lek (1946–1965)","displayName-count-one":"albansk lek (1946–1965)","displayName-count-other":"albanska lek (1946–1965)","symbol":"ALK"},"ALL":{"displayName":"albansk lek","displayName-count-one":"albansk lek","displayName-count-other":"albanska leke","symbol":"ALL"},"AMD":{"displayName":"armenisk dram","displayName-count-one":"armenisk dram","displayName-count-other":"armeniska dram","symbol":"AMD"},"ANG":{"displayName":"Nederländska Antillernas gulden","displayName-count-one":"Nederländska Antillernas gulden","displayName-count-other":"Nederländska Antillernas gulden","symbol":"ANG"},"AOA":{"displayName":"angolansk kwanza","displayName-count-one":"angolansk kwanza","displayName-count-other":"angolanska kwanza","symbol":"AOA","symbol-alt-narrow":"Kz"},"AOK":{"displayName":"angolansk kwanza (1977–1990)","displayName-count-one":"angolansk kwanza (1977–1990)","displayName-count-other":"angolanska kwanza (1977–1990)","symbol":"AOK"},"AON":{"displayName":"angolansk ny kwanza (1990–2000)","displayName-count-one":"angolansk kwanza (1990–2000)","displayName-count-other":"angolanska nya kwanza (1990–2000)","symbol":"AON"},"AOR":{"displayName":"angolansk kwanza reajustado (1995–1999)","displayName-count-one":"angolansk kwanza reajustado (1995–1999)","displayName-count-other":"angolanska kwanza reajustado (1995–1999)","symbol":"AOR"},"ARA":{"displayName":"argentinsk austral","displayName-count-one":"argentinsk austral","displayName-count-other":"argentinska australer","symbol":"ARA"},"ARL":{"displayName":"argentisk peso (1970–1983)","displayName-count-one":"argentisk peso (1970–1983)","displayName-count-other":"argentiska pesos (1970–1983)","symbol":"ARL"},"ARM":{"displayName":"argentisk peso (1881–1969)","displayName-count-one":"argentisk peso (1881–1969)","displayName-count-other":"argentiska pesos (1881–1969)","symbol":"ARM"},"ARP":{"displayName":"argentinsk peso (1983–1985)","displayName-count-one":"argentinsk peso (1983–1985)","displayName-count-other":"argentinska pesos (1983–1985)","symbol":"ARP"},"ARS":{"displayName":"argentinsk peso","displayName-count-one":"argentinsk peso","displayName-count-other":"argentinska pesos","symbol":"ARS","symbol-alt-narrow":"$"},"ATS":{"displayName":"österrikisk schilling","displayName-count-one":"österrikisk schilling","displayName-count-other":"österrikiska schilling","symbol":"ATS"},"AUD":{"displayName":"australisk dollar","displayName-count-one":"australisk dollar","displayName-count-other":"australiska dollar","symbol":"AUD","symbol-alt-narrow":"$"},"AWG":{"displayName":"arubansk florin","displayName-count-one":"arubansk florin","displayName-count-other":"arubanska floriner","symbol":"AWG"},"AZM":{"displayName":"azerbajdzjansk manat (1993–2006)","displayName-count-one":"azerbajdzjansk manat (1993–2006)","displayName-count-other":"azerbajdzjanska manat (1993–2006)","symbol":"AZM"},"AZN":{"displayName":"azerbajdzjansk manat","displayName-count-one":"azerbajdzjansk manat","displayName-count-other":"azerbajdzjanska manat","symbol":"AZN"},"BAD":{"displayName":"bosnisk-hercegovinsk dinar (1992–1994)","displayName-count-one":"bosnisk-hercegovinsk dinar (1992–1994)","displayName-count-other":"bosnisk-hercegovinska dinarer (1992–1994)","symbol":"BAD"},"BAM":{"displayName":"bosnisk-hercegovinsk mark (konvertibel)","displayName-count-one":"bosnisk-hercegovinsk mark (konvertibel)","displayName-count-other":"bosnisk-hercegovinska mark (konvertibla)","symbol":"BAM","symbol-alt-narrow":"KM"},"BAN":{"displayName":"bosnisk-hercegovinsk dinar (1994–1998)","displayName-count-one":"bosnisk-hercegovinsk dinar (1994–1998)","displayName-count-other":"bosnisk-hercegovinska dinarer (1994–1998)","symbol":"BAN"},"BBD":{"displayName":"Barbados-dollar","displayName-count-one":"Barbados-dollar","displayName-count-other":"Barbados-dollar","symbol":"Bds$","symbol-alt-narrow":"$"},"BDT":{"displayName":"bangladeshisk taka","displayName-count-one":"bangladeshisk taka","displayName-count-other":"bangladeshiska taka","symbol":"BDT","symbol-alt-narrow":"৳"},"BEC":{"displayName":"belgisk franc (konvertibel)","displayName-count-one":"belgisk franc (konvertibel)","displayName-count-other":"belgiska franc (konvertibla)","symbol":"BEC"},"BEF":{"displayName":"belgisk franc","displayName-count-one":"belgisk franc","displayName-count-other":"belgiska franc","symbol":"BEF"},"BEL":{"displayName":"belgisk franc (finansiell)","displayName-count-one":"belgisk franc (finansiell)","displayName-count-other":"belgiska franc (finansiella)","symbol":"BEL"},"BGL":{"displayName":"bulgarisk hård lev (1962–1999)","displayName-count-one":"bulgarisk hård lev (1962–1999)","displayName-count-other":"bulgariska hård lev (1962–1999)","symbol":"BGL"},"BGM":{"displayName":"bulgarisk lev (1952–1962)","displayName-count-one":"bulgarisk lev (1952–1962)","displayName-count-other":"bulgariska lev (1952–1962)","symbol":"BGM"},"BGN":{"displayName":"bulgarisk lev","displayName-count-one":"bulgarisk lev","displayName-count-other":"bulgariska leva","symbol":"BGN"},"BGO":{"displayName":"bulgarisk lev (1881–1952)","displayName-count-one":"bulgarisk lev (1881–1952)","displayName-count-other":"bulgarisk lev (1881–1952)","symbol":"BGO"},"BHD":{"displayName":"bahrainsk dinar","displayName-count-one":"bahrainsk dinar","displayName-count-other":"bahrainska dinarer","symbol":"BHD"},"BIF":{"displayName":"burundisk franc","displayName-count-one":"burundisk franc","displayName-count-other":"burundiska franc","symbol":"BIF"},"BMD":{"displayName":"Bermuda-dollar","displayName-count-one":"Bermuda-dollar","displayName-count-other":"Bermuda-dollar","symbol":"BM$","symbol-alt-narrow":"$"},"BND":{"displayName":"bruneisk dollar","displayName-count-one":"bruneisk dollar","displayName-count-other":"bruneiska dollar","symbol":"BND","symbol-alt-narrow":"$"},"BOB":{"displayName":"boliviansk boliviano","displayName-count-one":"boliviansk boliviano","displayName-count-other":"bolivianska bolivianos","symbol":"BOB","symbol-alt-narrow":"Bs"},"BOL":{"displayName":"boliviansk boliviano (1864–1963)","displayName-count-one":"boliviansk boliviano (1864–1963)","displayName-count-other":"bolivianska bolivianos (1864–1963)","symbol":"BOL"},"BOP":{"displayName":"boliviansk peso","displayName-count-one":"boliviansk peso","displayName-count-other":"bolivianska pesos","symbol":"BOP"},"BOV":{"displayName":"boliviansk mvdol","displayName-count-one":"boliviansk mvdol","displayName-count-other":"bolivianska mvdol","symbol":"BOV"},"BRB":{"displayName":"brasiliansk cruzeiro novo (1967–1986)","displayName-count-one":"brasiliansk cruzeiro (1967–1986)","displayName-count-other":"brasilianska cruzeiro novo (1967–1986)","symbol":"BRB"},"BRC":{"displayName":"brasiliansk cruzado","displayName-count-one":"brasiliansk cruzado","displayName-count-other":"brasilianska cruzado","symbol":"BRC"},"BRE":{"displayName":"brasiliansk cruzeiro (1990–1993)","displayName-count-one":"brasiliansk cruzeiro (1990–1993)","displayName-count-other":"brasilianska cruzeiro (1990–1993)","symbol":"BRE"},"BRL":{"displayName":"brasiliansk real","displayName-count-one":"brasiliansk real","displayName-count-other":"brasilianska real","symbol":"BR$","symbol-alt-narrow":"R$"},"BRN":{"displayName":"brasiliansk cruzado novo","displayName-count-one":"brasiliansk cruzado novo","displayName-count-other":"brasilianska cruzado novo","symbol":"BRN"},"BRR":{"displayName":"brasiliansk cruzeiro","displayName-count-one":"brasiliansk cruzeiro","displayName-count-other":"brasilianska cruzeiros","symbol":"BRR"},"BRZ":{"displayName":"brasiliansk cruzeiro (1942–1967)","displayName-count-one":"brasiliansk cruzeiro (1942–1967)","displayName-count-other":"brasilianska cruzeiros (1942–1967)","symbol":"BRZ"},"BSD":{"displayName":"bahamansk dollar","displayName-count-one":"bahamansk dollar","displayName-count-other":"bahamanska dollar","symbol":"BS$","symbol-alt-narrow":"$"},"BTN":{"displayName":"bhutanesisk ngultrum","displayName-count-one":"bhutanesisk ngultrum","displayName-count-other":"bhutanesiska ngultrum","symbol":"BTN"},"BUK":{"displayName":"burmesisk kyat","displayName-count-one":"burmesisk kyat","displayName-count-other":"burmesiska kyat","symbol":"BUK"},"BWP":{"displayName":"botswansk pula","displayName-count-one":"botswansk pula","displayName-count-other":"botswanska pula","symbol":"BWP","symbol-alt-narrow":"P"},"BYB":{"displayName":"vitrysk ny rubel (1994–1999)","displayName-count-one":"vitrysk rubel (1994–1999)","displayName-count-other":"vitryska nya rubel (1994–1999)","symbol":"BYB"},"BYN":{"displayName":"vitrysk rubel","displayName-count-one":"vitrysk rubel","displayName-count-other":"vitryska rubel","symbol":"BYN","symbol-alt-narrow":"р."},"BYR":{"displayName":"vitrysk rubel (2000–2016)","displayName-count-one":"vitrysk rubel (2000–2016)","displayName-count-other":"vitryska rubel (2000–2016)","symbol":"BYR"},"BZD":{"displayName":"belizisk dollar","displayName-count-one":"belizisk dollar","displayName-count-other":"beliziska dollar","symbol":"BZ$","symbol-alt-narrow":"$"},"CAD":{"displayName":"kanadensisk dollar","displayName-count-one":"kanadensisk dollar","displayName-count-other":"kanadensiska dollar","symbol":"CA$","symbol-alt-narrow":"$"},"CDF":{"displayName":"kongolesisk franc","displayName-count-one":"kongolesisk franc","displayName-count-other":"kongolesiska franc","symbol":"CDF"},"CHE":{"displayName":"euro (konvertibelt konto, WIR Bank, Schweiz)","displayName-count-one":"euro (WIR Bank)","displayName-count-other":"euro (konvertibelt konto, WIR Bank, Schweiz)","symbol":"CHE"},"CHF":{"displayName":"schweizisk franc","displayName-count-one":"schweizisk franc","displayName-count-other":"schweiziska franc","symbol":"CHF"},"CHW":{"displayName":"franc (konvertibelt konto, WIR Bank, Schweiz)","displayName-count-one":"franc (WIR Bank)","displayName-count-other":"franc (konvertibelt konto, WIR Bank, Schweiz)","symbol":"CHW"},"CLE":{"displayName":"chilensk escudo (1960–1975)","displayName-count-one":"chilensk escudo (1960–1975)","displayName-count-other":"chilenska escudos (1960–1975)","symbol":"CLE"},"CLF":{"displayName":"chilensk unidad de fomento","displayName-count-one":"chilensk unidad de fomento","displayName-count-other":"chilenska unidad de fomento","symbol":"CLF"},"CLP":{"displayName":"chilensk peso","displayName-count-one":"chilensk peso","displayName-count-other":"chilenska pesos","symbol":"CLP","symbol-alt-narrow":"$"},"CNH":{"displayName":"CNH","displayName-count-one":"CNH","displayName-count-other":"CNH","symbol":"CNH"},"CNX":{"displayName":"kinesisk dollar","displayName-count-one":"kinesisk dollar","displayName-count-other":"kinesiska dollar","symbol":"CNX"},"CNY":{"displayName":"kinesisk yuan","displayName-count-one":"kinesisk yuan","displayName-count-other":"kinesiska yuan","symbol":"CNY","symbol-alt-narrow":"¥"},"COP":{"displayName":"colombiansk peso","displayName-count-one":"colombiansk peso","displayName-count-other":"colombianska pesos","symbol":"COP","symbol-alt-narrow":"$"},"COU":{"displayName":"colombiansk unidad de valor real","displayName-count-one":"colombiansk unidad de valor real","displayName-count-other":"colombianska unidad de valor real","symbol":"COU"},"CRC":{"displayName":"costarikansk colón","displayName-count-one":"costarikansk colón","displayName-count-other":"costarikanska colón","symbol":"CRC","symbol-alt-narrow":"₡"},"CSD":{"displayName":"serbisk dinar (2002–2006)","displayName-count-one":"serbisk dinar (2002–2006)","displayName-count-other":"serbiska dinarer (2002–2006)","symbol":"CSD"},"CSK":{"displayName":"tjeckoslovakisk krona (–1993)","displayName-count-one":"tjeckoslovakisk hård koruna","displayName-count-other":"tjeckiska hårda koruna","symbol":"CSK"},"CUC":{"displayName":"kubansk peso (konvertibel)","displayName-count-one":"kubansk peso (konvertibel)","displayName-count-other":"kubanska pesos (konvertibla)","symbol":"CUC","symbol-alt-narrow":"$"},"CUP":{"displayName":"kubansk peso","displayName-count-one":"kubansk peso","displayName-count-other":"kubanska pesos","symbol":"CUP","symbol-alt-narrow":"$"},"CVE":{"displayName":"kapverdisk escudo","displayName-count-one":"kapverdisk escudo","displayName-count-other":"kapverdiska escudos","symbol":"CVE"},"CYP":{"displayName":"cypriotiskt pund","displayName-count-one":"cypriotiskt pund","displayName-count-other":"cypriotiska pund","symbol":"CYP"},"CZK":{"displayName":"tjeckisk koruna","displayName-count-one":"tjeckisk koruna","displayName-count-other":"tjeckiska koruna","symbol":"CZK","symbol-alt-narrow":"Kč"},"DDM":{"displayName":"östtysk mark","displayName-count-one":"östtysk mark","displayName-count-other":"östtyska mark","symbol":"DDM"},"DEM":{"displayName":"tysk mark","displayName-count-one":"tysk mark","displayName-count-other":"tyska mark","symbol":"DEM"},"DJF":{"displayName":"djiboutisk franc","displayName-count-one":"djiboutisk franc","displayName-count-other":"djiboutiska franc","symbol":"DJF"},"DKK":{"displayName":"dansk krona","displayName-count-one":"dansk krona","displayName-count-other":"danska kronor","symbol":"Dkr","symbol-alt-narrow":"kr"},"DOP":{"displayName":"dominikansk peso","displayName-count-one":"dominikansk peso","displayName-count-other":"dominikanska pesos","symbol":"RD$","symbol-alt-narrow":"$"},"DZD":{"displayName":"algerisk dinar","displayName-count-one":"algerisk dinar","displayName-count-other":"algeriska dinarer","symbol":"DZD"},"ECS":{"displayName":"ecuadoriansk sucre","displayName-count-one":"ecuadoriansk sucre","displayName-count-other":"ecuadorianska sucre","symbol":"ECS"},"ECV":{"displayName":"ecuadoriansk unidad de valor constante","displayName-count-one":"ecuadoriansk unidad de valor constante","displayName-count-other":"ecuadorianska unidad de valor constante","symbol":"ECV"},"EEK":{"displayName":"estnisk krona","displayName-count-one":"estnisk krona","displayName-count-other":"estniska kronor","symbol":"Ekr"},"EGP":{"displayName":"egyptiskt pund","displayName-count-one":"egyptiskt pund","displayName-count-other":"egyptiska pund","symbol":"EG£","symbol-alt-narrow":"E£"},"ERN":{"displayName":"eritreansk nakfa","displayName-count-one":"eritreansk nakfa","displayName-count-other":"eritreanska nakfa","symbol":"ERN"},"ESA":{"displayName":"spansk peseta (konto)","displayName-count-one":"spansk peseta (konto)","displayName-count-other":"spanska pesetas (konto)","symbol":"ESA"},"ESB":{"displayName":"spansk peseta (konvertibelt konto)","displayName-count-one":"spansk peseta (konvertibelt konto)","displayName-count-other":"spanska pesetas (konvertibelt konto)","symbol":"ESB"},"ESP":{"displayName":"spansk peseta","displayName-count-one":"spansk peseta","displayName-count-other":"spanska pesetas","symbol":"ESP","symbol-alt-narrow":"ESP"},"ETB":{"displayName":"etiopisk birr","displayName-count-one":"etiopisk birr","displayName-count-other":"etiopiska birr","symbol":"ETB"},"EUR":{"displayName":"euro","displayName-count-one":"euro","displayName-count-other":"euro","symbol":"€","symbol-alt-narrow":"€"},"FIM":{"displayName":"finsk mark","displayName-count-one":"finsk mark","displayName-count-other":"finska mark","symbol":"FIM"},"FJD":{"displayName":"Fijidollar","displayName-count-one":"Fijidollar","displayName-count-other":"Fijidollar","symbol":"FJD","symbol-alt-narrow":"$"},"FKP":{"displayName":"Falklandspund","displayName-count-one":"Falklandspund","displayName-count-other":"Falklandspund","symbol":"FKP","symbol-alt-narrow":"£"},"FRF":{"displayName":"fransk franc","displayName-count-one":"fransk franc","displayName-count-other":"franska franc","symbol":"FRF"},"GBP":{"displayName":"brittiskt pund","displayName-count-one":"brittiskt pund","displayName-count-other":"brittiska pund","symbol":"GBP","symbol-alt-narrow":"£"},"GEK":{"displayName":"georgisk kupon larit","displayName-count-one":"georgisk kupon larit","displayName-count-other":"georgiska kupon larit","symbol":"GEK"},"GEL":{"displayName":"georgisk lari","displayName-count-one":"georgisk lari","displayName-count-other":"georgiska lari","symbol":"GEL","symbol-alt-narrow":"₾","symbol-alt-variant":"₾"},"GHC":{"displayName":"ghanansk cedi (1979–2007)","displayName-count-one":"ghanansk cedi (1979–2007)","displayName-count-other":"ghananska cedi (1979–2007)","symbol":"GHC"},"GHS":{"displayName":"ghanansk cedi","displayName-count-one":"ghanansk cedi","displayName-count-other":"ghananska cedi","symbol":"GHS"},"GIP":{"displayName":"gibraltiskt pund","displayName-count-one":"gibraltiskt pund","displayName-count-other":"gibraltiska pund","symbol":"GIP","symbol-alt-narrow":"£"},"GMD":{"displayName":"gambisk dalasi","displayName-count-one":"gambisk dalasi","displayName-count-other":"gambiska dalasi","symbol":"GMD"},"GNF":{"displayName":"guineansk franc","displayName-count-one":"guineansk franc","displayName-count-other":"guineanska franc","symbol":"GNF","symbol-alt-narrow":"FG"},"GNS":{"displayName":"guineansk syli","displayName-count-one":"guineansk syli","displayName-count-other":"guineanska syli","symbol":"GNS"},"GQE":{"displayName":"ekvatorialguineansk ekwele","displayName-count-one":"ekvatorialguineansk ekwele","displayName-count-other":"ekvatorialguineanska ekweler","symbol":"GQE"},"GRD":{"displayName":"grekisk drachma","displayName-count-one":"grekisk drachma","displayName-count-other":"grekiska drachmer","symbol":"GRD"},"GTQ":{"displayName":"guatemalansk quetzal","displayName-count-one":"guatemalansk quetzal","displayName-count-other":"guatemalanska quetzal","symbol":"GTQ","symbol-alt-narrow":"Q"},"GWE":{"displayName":"Portugisiska Guinea-escudo","displayName-count-one":"Portugisiska Guinea-escudo","displayName-count-other":"Portugisiska Guinea-escudos","symbol":"GWE"},"GWP":{"displayName":"Guinea-Bissau-peso","displayName-count-one":"Guinea-Bissau-peso","displayName-count-other":"Guinea-Bissau-pesos","symbol":"GWP"},"GYD":{"displayName":"Guyanadollar","displayName-count-one":"Guyanadollar","displayName-count-other":"Guyanadollar","symbol":"GYD","symbol-alt-narrow":"$"},"HKD":{"displayName":"Hongkongdollar","displayName-count-one":"Hongkongdollar","displayName-count-other":"Hongkongdollar","symbol":"HKD","symbol-alt-narrow":"$"},"HNL":{"displayName":"honduransk lempira","displayName-count-one":"honduransk lempira","displayName-count-other":"honduranska lempira","symbol":"HNL","symbol-alt-narrow":"L"},"HRD":{"displayName":"kroatisk dinar","displayName-count-one":"kroatisk dinar","displayName-count-other":"kroatiska dinarer","symbol":"HRD"},"HRK":{"displayName":"kroatisk kuna","displayName-count-one":"kroatisk kuna","displayName-count-other":"kroatiska kunor","symbol":"HRK","symbol-alt-narrow":"kn"},"HTG":{"displayName":"haitisk gourde","displayName-count-one":"haitisk gourde","displayName-count-other":"haitiska gourder","symbol":"HTG"},"HUF":{"displayName":"ungersk forint","displayName-count-one":"ungersk forint","displayName-count-other":"ungerska forinter","symbol":"HUF","symbol-alt-narrow":"Ft"},"IDR":{"displayName":"indonesisk rupie","displayName-count-one":"indonesisk rupie","displayName-count-other":"indonesiska rupier","symbol":"IDR","symbol-alt-narrow":"Rp"},"IEP":{"displayName":"irländskt pund","displayName-count-one":"irländskt pund","displayName-count-other":"irländska pund","symbol":"IE£"},"ILP":{"displayName":"israeliskt pund","displayName-count-one":"israeliskt pund","displayName-count-other":"israeliska pund","symbol":"ILP"},"ILR":{"displayName":"israelisk shekel (1980–1985)","displayName-count-one":"israelisk shekel (1980–1985)","displayName-count-other":"israeliska shekel (1980–1985)","symbol":"ILR"},"ILS":{"displayName":"israelisk ny shekel","displayName-count-one":"israelisk ny shekel","displayName-count-other":"israeliska nya shekel","symbol":"₪","symbol-alt-narrow":"₪"},"INR":{"displayName":"indisk rupie","displayName-count-one":"indisk rupie","displayName-count-other":"indiska rupier","symbol":"INR","symbol-alt-narrow":"₹"},"IQD":{"displayName":"irakisk dinar","displayName-count-one":"irakisk dinar","displayName-count-other":"irakiska dinarer","symbol":"IQD"},"IRR":{"displayName":"iransk rial","displayName-count-one":"iransk rial","displayName-count-other":"iranska rial","symbol":"IRR"},"ISJ":{"displayName":"isländsk gammal krona","displayName-count-one":"isländsk gammal krona","displayName-count-other":"isländska kronor (1874–1981)","symbol":"ISJ"},"ISK":{"displayName":"isländsk krona","displayName-count-one":"isländsk krona","displayName-count-other":"isländska kronor","symbol":"Ikr","symbol-alt-narrow":"kr"},"ITL":{"displayName":"italiensk lire","displayName-count-one":"italiensk lire","displayName-count-other":"italienska lire","symbol":"ITL"},"JMD":{"displayName":"Jamaica-dollar","displayName-count-one":"Jamaica-dollar","displayName-count-other":"Jamaica-dollar","symbol":"JM$","symbol-alt-narrow":"$"},"JOD":{"displayName":"jordansk dinar","displayName-count-one":"jordansk dinar","displayName-count-other":"jordanska dinarer","symbol":"JOD"},"JPY":{"displayName":"japansk yen","displayName-count-one":"japansk yen","displayName-count-other":"japanska yen","symbol":"JPY","symbol-alt-narrow":"¥"},"KES":{"displayName":"kenyansk shilling","displayName-count-one":"kenyansk shilling","displayName-count-other":"kenyanska shilling","symbol":"KES"},"KGS":{"displayName":"kirgizisk som","displayName-count-one":"kirgizisk som","displayName-count-other":"kirgiziska somer","symbol":"KGS"},"KHR":{"displayName":"kambodjansk riel","displayName-count-one":"kambodjansk riel","displayName-count-other":"kambodjanska riel","symbol":"KHR","symbol-alt-narrow":"៛"},"KMF":{"displayName":"komorisk franc","displayName-count-one":"komorisk franc","displayName-count-other":"komoriska franc","symbol":"KMF","symbol-alt-narrow":"CF"},"KPW":{"displayName":"nordkoreansk won","displayName-count-one":"nordkoreansk won","displayName-count-other":"nordkoreanska won","symbol":"KPW","symbol-alt-narrow":"₩"},"KRH":{"displayName":"sydkoreansk hwan (1953–1962)","displayName-count-one":"sydkoreansk hwan (1953–1962)","displayName-count-other":"sydkoreanska hwan (1953–1962)","symbol":"KRH"},"KRO":{"displayName":"sydkoreansk won (1945–1953)","displayName-count-one":"sydkoreansk won (1945–1953)","displayName-count-other":"sydkoreanska won (1945–1953)","symbol":"KRO"},"KRW":{"displayName":"sydkoreansk won","displayName-count-one":"sydkoreansk won","displayName-count-other":"sydkoreanska won","symbol":"KRW","symbol-alt-narrow":"₩"},"KWD":{"displayName":"kuwaitisk dinar","displayName-count-one":"kuwaitisk dinar","displayName-count-other":"kuwaitiska dinarer","symbol":"KWD"},"KYD":{"displayName":"Cayman-dollar","displayName-count-one":"Cayman-dollar","displayName-count-other":"Cayman-dollar","symbol":"KYD","symbol-alt-narrow":"$"},"KZT":{"displayName":"kazakisk tenge","displayName-count-one":"kazakisk tenge","displayName-count-other":"kazakiska tenge","symbol":"KZT","symbol-alt-narrow":"₸"},"LAK":{"displayName":"laotisk kip","displayName-count-one":"laotisk kip","displayName-count-other":"laotiska kip","symbol":"LAK","symbol-alt-narrow":"₭"},"LBP":{"displayName":"libanesiskt pund","displayName-count-one":"libanesiskt pund","displayName-count-other":"libanesiska pund","symbol":"LBP","symbol-alt-narrow":"L£"},"LKR":{"displayName":"srilankesisk rupie","displayName-count-one":"srilankesisk rupie","displayName-count-other":"srilankesiska rupier","symbol":"LKR","symbol-alt-narrow":"Rs"},"LRD":{"displayName":"liberiansk dollar","displayName-count-one":"liberiansk dollar","displayName-count-other":"liberianska dollar","symbol":"LRD","symbol-alt-narrow":"$"},"LSL":{"displayName":"lesothisk loti","displayName-count-one":"lesothisk loti","displayName-count-other":"lesothiska lotier","symbol":"LSL"},"LTL":{"displayName":"litauisk litas","displayName-count-one":"litauisk litas","displayName-count-other":"litauiska litai","symbol":"LTL","symbol-alt-narrow":"Lt"},"LTT":{"displayName":"litauisk talonas","displayName-count-one":"litauisk talonas","displayName-count-other":"litauiska talonas","symbol":"LTT"},"LUC":{"displayName":"luxemburgsk franc (konvertibel)","displayName-count-one":"luxemburgsk franc (konvertibel)","displayName-count-other":"luxemburgska franc (konvertibla)","symbol":"LUC"},"LUF":{"displayName":"luxemburgsk franc","displayName-count-one":"luxemburgsk franc","displayName-count-other":"luxemburgska franc","symbol":"LUF"},"LUL":{"displayName":"luxemburgsk franc (finansiell)","displayName-count-one":"luxemburgsk franc (finansiell)","displayName-count-other":"luxemburgska franc (finansiella)","symbol":"LUL"},"LVL":{"displayName":"lettisk lats","displayName-count-one":"lettisk lats","displayName-count-other":"lettiska lati","symbol":"LVL","symbol-alt-narrow":"Ls"},"LVR":{"displayName":"lettisk rubel","displayName-count-one":"lettisk rubel","displayName-count-other":"lettiska rubel","symbol":"LVR"},"LYD":{"displayName":"libysk dinar","displayName-count-one":"libysk dinar","displayName-count-other":"libyska dinarer","symbol":"LYD"},"MAD":{"displayName":"marockansk dirham","displayName-count-one":"marockansk dirham","displayName-count-other":"marockanska dirhamer","symbol":"MAD"},"MAF":{"displayName":"marockansk franc","displayName-count-one":"marockansk franc","displayName-count-other":"marockanska franc","symbol":"MAF"},"MCF":{"displayName":"monegaskisk franc (–2001)","displayName-count-one":"monegaskisk franc (–2001)","displayName-count-other":"monegaskiska franc (–2001)","symbol":"MCF"},"MDC":{"displayName":"moldavisk cupon (1992–1993)","displayName-count-one":"moldavisk cupon (1992–1993)","displayName-count-other":"moldaviska cupon (1992–1993)","symbol":"MDC"},"MDL":{"displayName":"moldavisk leu","displayName-count-one":"moldavisk leu","displayName-count-other":"moldaviska lei","symbol":"MDL"},"MGA":{"displayName":"madagaskisk ariary","displayName-count-one":"madagaskisk ariary","displayName-count-other":"madagaskiska ariary","symbol":"MGA","symbol-alt-narrow":"Ar"},"MGF":{"displayName":"madagaskisk franc","displayName-count-one":"madagaskisk franc","displayName-count-other":"madagaskiska franc","symbol":"MGF"},"MKD":{"displayName":"makedonisk denar","displayName-count-one":"makedonisk denar","displayName-count-other":"makedoniska denarer","symbol":"MKD"},"MKN":{"displayName":"makedonisk denar (1992–1993)","displayName-count-one":"makedonisk denar (1992–1993)","displayName-count-other":"makedoniska denarer (1992–1993)","symbol":"MKN"},"MLF":{"displayName":"malisk franc","displayName-count-one":"malisk franc","displayName-count-other":"maliska franc","symbol":"MLF"},"MMK":{"displayName":"myanmarisk kyat","displayName-count-one":"myanmarisk kyat","displayName-count-other":"myanmariska kyat","symbol":"MMK","symbol-alt-narrow":"K"},"MNT":{"displayName":"mongolisk tögrög","displayName-count-one":"mongolisk tögrög","displayName-count-other":"mongoliska tögrög","symbol":"MNT","symbol-alt-narrow":"₮"},"MOP":{"displayName":"makanesisk pataca","displayName-count-one":"makanesisk pataca","displayName-count-other":"makanesiska pataca","symbol":"MOP"},"MRO":{"displayName":"mauretansk ouguiya","displayName-count-one":"mauretansk ouguiya","displayName-count-other":"mauretanska ouguiya","symbol":"MRO"},"MTL":{"displayName":"maltesisk lire","displayName-count-one":"maltesisk lire","displayName-count-other":"maltesiska lire","symbol":"MTL"},"MTP":{"displayName":"maltesiskt pund","displayName-count-one":"maltesiskt pund","displayName-count-other":"maltesiska pund","symbol":"MTP"},"MUR":{"displayName":"mauritisk rupie","displayName-count-one":"mauritisk rupie","displayName-count-other":"mauritiska rupier","symbol":"MUR","symbol-alt-narrow":"Rs"},"MVP":{"displayName":"maldivisk rupie","displayName-count-one":"maldivisk rupie","displayName-count-other":"maldiviska rupier","symbol":"MVP"},"MVR":{"displayName":"maldivisk rufiyaa","displayName-count-one":"maldivisk rufiyaa","displayName-count-other":"maldiviska rufiyer","symbol":"MVR"},"MWK":{"displayName":"malawisk kwacha","displayName-count-one":"malawisk kwacha","displayName-count-other":"malawiska kwacha","symbol":"MWK"},"MXN":{"displayName":"mexikansk peso","displayName-count-one":"mexikansk peso","displayName-count-other":"mexikanska pesos","symbol":"MX$","symbol-alt-narrow":"$"},"MXP":{"displayName":"mexikansk silverpeso (1861–1992)","displayName-count-one":"mexikansk silverpeso (1861–1992)","displayName-count-other":"mexikanska silverpesos (1861–1992)","symbol":"MXP"},"MXV":{"displayName":"mexikansk unidad de inversion","displayName-count-one":"mexikansk unidad de inversion","displayName-count-other":"mexikanska unidad de inversion","symbol":"MXV"},"MYR":{"displayName":"malaysisk ringgit","displayName-count-one":"malaysisk ringgit","displayName-count-other":"malaysiska ringgiter","symbol":"MYR","symbol-alt-narrow":"RM"},"MZE":{"displayName":"moçambikisk escudo","displayName-count-one":"moçambikisk escudo (1914–1980)","displayName-count-other":"moçambikiska escudos","symbol":"MZE"},"MZM":{"displayName":"gammal moçambikisk metical","displayName-count-one":"moçambikisk metical (1980–2006)","displayName-count-other":"gammla moçambikiska metical","symbol":"MZM"},"MZN":{"displayName":"moçambikisk metical","displayName-count-one":"moçambikisk metical","displayName-count-other":"moçambikiska metical","symbol":"MZN"},"NAD":{"displayName":"namibisk dollar","displayName-count-one":"namibisk dollar","displayName-count-other":"namibiska dollar","symbol":"NAD","symbol-alt-narrow":"$"},"NGN":{"displayName":"nigeriansk naira","displayName-count-one":"nigeriansk naira","displayName-count-other":"nigerianska naira","symbol":"NGN","symbol-alt-narrow":"₦"},"NIC":{"displayName":"nicaraguansk córdoba (1998–1991)","displayName-count-one":"nicaraguansk córdoba (1998–1991)","displayName-count-other":"nicaraguanska córdobas (1988–1991)","symbol":"NIC"},"NIO":{"displayName":"nicaraguansk córdoba","displayName-count-one":"nicaraguansk córdoba","displayName-count-other":"nicaraguanska córdobas","symbol":"NIO","symbol-alt-narrow":"C$"},"NLG":{"displayName":"nederländsk gulden","displayName-count-one":"nederländsk gulden","displayName-count-other":"nederländska gulden","symbol":"NLG"},"NOK":{"displayName":"norsk krona","displayName-count-one":"norsk krona","displayName-count-other":"norska kronor","symbol":"Nkr","symbol-alt-narrow":"kr"},"NPR":{"displayName":"nepalesisk rupie","displayName-count-one":"nepalesisk rupie","displayName-count-other":"nepalesiska rupier","symbol":"NPR","symbol-alt-narrow":"Rs"},"NZD":{"displayName":"nyzeeländsk dollar","displayName-count-one":"nyzeeländsk dollar","displayName-count-other":"nyzeeländska dollar","symbol":"NZD","symbol-alt-narrow":"$"},"OMR":{"displayName":"omansk rial","displayName-count-one":"omansk rial","displayName-count-other":"omanska rial","symbol":"OMR"},"PAB":{"displayName":"panamansk balboa","displayName-count-one":"panamansk balboa","displayName-count-other":"panamanska balboa","symbol":"PAB"},"PEI":{"displayName":"peruansk inti","displayName-count-one":"peruansk inti","displayName-count-other":"peruanska intier","symbol":"PEI"},"PEN":{"displayName":"peruansk sol","displayName-count-one":"peruansk sol","displayName-count-other":"peruanska sol","symbol":"PEN"},"PES":{"displayName":"peruansk sol (1863–1965)","displayName-count-one":"peruansk sol (1863–1965)","displayName-count-other":"peruanska sol (1863–1965)","symbol":"PES"},"PGK":{"displayName":"papuansk kina","displayName-count-one":"papuansk kina","displayName-count-other":"papuanska kinor","symbol":"PGK"},"PHP":{"displayName":"filippinsk peso","displayName-count-one":"filippinsk peso","displayName-count-other":"filippinska pesos","symbol":"PHP","symbol-alt-narrow":"₱"},"PKR":{"displayName":"pakistansk rupie","displayName-count-one":"pakistansk rupie","displayName-count-other":"pakistanska rupier","symbol":"PKR","symbol-alt-narrow":"Rs"},"PLN":{"displayName":"polsk zloty","displayName-count-one":"polsk zloty","displayName-count-other":"polska zloty","symbol":"PLN","symbol-alt-narrow":"zł"},"PLZ":{"displayName":"polsk zloty (1950–1995)","displayName-count-one":"polsk zloty (1950–1995)","displayName-count-other":"polska zloty (1950–1995)","symbol":"PLZ"},"PTE":{"displayName":"portugisisk escudo","displayName-count-one":"portugisisk escudo","displayName-count-other":"portugisiska escudos","symbol":"PTE"},"PYG":{"displayName":"paraguayansk guarani","displayName-count-one":"paraguayansk guarani","displayName-count-other":"paraguayska guarani","symbol":"PYG","symbol-alt-narrow":"₲"},"QAR":{"displayName":"qatarisk rial","displayName-count-one":"qatarisk rial","displayName-count-other":"qatariska rial","symbol":"QAR"},"RHD":{"displayName":"rhodesisk dollar","displayName-count-one":"rhodesisk dollar","displayName-count-other":"rhodesiska dollar","symbol":"RHD"},"ROL":{"displayName":"rumänsk leu (1952–2005)","displayName-count-one":"rumänsk leu (1952–2005)","displayName-count-other":"rumänska leu (1952–2005)","symbol":"ROL"},"RON":{"displayName":"rumänsk leu","displayName-count-one":"rumänsk leu","displayName-count-other":"rumänska lei","symbol":"RON","symbol-alt-narrow":"L"},"RSD":{"displayName":"serbisk dinar","displayName-count-one":"serbisk dinar","displayName-count-other":"serbiska dinarer","symbol":"RSD"},"RUB":{"displayName":"rysk rubel","displayName-count-one":"rysk rubel","displayName-count-other":"ryska rubel","symbol":"RUB","symbol-alt-narrow":"₽"},"RUR":{"displayName":"rysk rubel (1991–1998)","displayName-count-one":"rysk rubel (1991–1998)","displayName-count-other":"ryska rubel (1991–1998)","symbol":"RUR","symbol-alt-narrow":"р."},"RWF":{"displayName":"rwandisk franc","displayName-count-one":"rwandisk franc","displayName-count-other":"rwandiska franc","symbol":"RWF","symbol-alt-narrow":"RF"},"SAR":{"displayName":"saudisk riyal","displayName-count-one":"saudisk riyal","displayName-count-other":"saudiska riyal","symbol":"SAR"},"SBD":{"displayName":"Salomondollar","displayName-count-one":"Salomondollar","displayName-count-other":"Salomondollar","symbol":"SBD","symbol-alt-narrow":"$"},"SCR":{"displayName":"seychellisk rupie","displayName-count-one":"seychellisk rupie","displayName-count-other":"seychelliska rupier","symbol":"SCR"},"SDD":{"displayName":"sudansk dinar (1992–2007)","displayName-count-one":"sudansk dinar (1992–2007)","displayName-count-other":"sudanska dinarer (1992–2007)","symbol":"SDD"},"SDG":{"displayName":"sudanesiskt pund","displayName-count-one":"sudanesiskt pund","displayName-count-other":"sudanesiska pund","symbol":"SDG"},"SDP":{"displayName":"sudanskt pund (1916–1992)","displayName-count-one":"sudanskt pund (1916–1992)","displayName-count-other":"sudanska pund (1916–1992)","symbol":"SDP"},"SEK":{"displayName":"svensk krona","displayName-count-one":"svensk krona","displayName-count-other":"svenska kronor","symbol":"kr","symbol-alt-narrow":"kr"},"SGD":{"displayName":"singaporiansk dollar","displayName-count-one":"singaporiansk dollar","displayName-count-other":"singaporianska dollar","symbol":"SGD","symbol-alt-narrow":"$"},"SHP":{"displayName":"S:t Helena-pund","displayName-count-one":"S:t Helena-pund","displayName-count-other":"S:t Helena-pund","symbol":"SHP","symbol-alt-narrow":"£"},"SIT":{"displayName":"slovensk tolar","displayName-count-one":"slovensk tolar","displayName-count-other":"slovenska tolar","symbol":"SIT"},"SKK":{"displayName":"slovakisk koruna","displayName-count-one":"slovakisk krona","displayName-count-other":"slovakiska korunor","symbol":"SKK"},"SLL":{"displayName":"sierraleonsk leone","displayName-count-one":"sierraleonsk leone","displayName-count-other":"sierraleonska leoner","symbol":"SLL"},"SOS":{"displayName":"somalisk shilling","displayName-count-one":"somalisk shilling","displayName-count-other":"somaliska shilling","symbol":"SOS"},"SRD":{"displayName":"surinamesisk dollar","displayName-count-one":"surinamesisk dollar","displayName-count-other":"surinamesiska dollar","symbol":"SRD","symbol-alt-narrow":"$"},"SRG":{"displayName":"surinamesisk gulden","displayName-count-one":"surinamesisk gulden","displayName-count-other":"surinamesiska gulden","symbol":"SRG"},"SSP":{"displayName":"sydsudanesiskt pund","displayName-count-one":"sydsudanesiskt pund","displayName-count-other":"sydsudanesiska pund","symbol":"SSP","symbol-alt-narrow":"£"},"STD":{"displayName":"saotomeansk dobra","displayName-count-one":"saotomeansk dobra","displayName-count-other":"saotomeanska dobra","symbol":"STD","symbol-alt-narrow":"Db"},"STN":{"displayName":"STN","symbol":"STN"},"SUR":{"displayName":"sovjetisk rubel","displayName-count-one":"sovjetisk rubel","displayName-count-other":"sovjetiska rubler","symbol":"SUR"},"SVC":{"displayName":"salvadoransk colón","displayName-count-one":"salvadoransk colón","displayName-count-other":"salvadoranska colón","symbol":"SVC"},"SYP":{"displayName":"syriskt pund","displayName-count-one":"syriskt pund","displayName-count-other":"syriska pund","symbol":"SYP","symbol-alt-narrow":"£"},"SZL":{"displayName":"swaziländsk lilangeni","displayName-count-one":"swaziländsk lilangeni","displayName-count-other":"swaziländska lilangeni","symbol":"SZL"},"THB":{"displayName":"thailändsk baht","displayName-count-one":"thailändsk baht","displayName-count-other":"thailändska baht","symbol":"THB","symbol-alt-narrow":"฿"},"TJR":{"displayName":"tadzjikisk rubel","displayName-count-one":"tadzjikisk rubel","displayName-count-other":"tadzjikiska rubler","symbol":"TJR"},"TJS":{"displayName":"tadzjikisk somoni","displayName-count-one":"tadzjikisk somoni","displayName-count-other":"tadzjikiska somoni","symbol":"TJS"},"TMM":{"displayName":"turkmenistansk manat (1993–2009)","displayName-count-one":"turkmenistansk manat (1993–2009)","displayName-count-other":"turkmenistanska manat (1993–2009)","symbol":"TMM"},"TMT":{"displayName":"turkmenistansk manat","displayName-count-one":"turkmenistansk manat","displayName-count-other":"turkmenistanska manat","symbol":"TMT"},"TND":{"displayName":"tunisisk dinar","displayName-count-one":"tunisisk dinar","displayName-count-other":"tunisiska dinarer","symbol":"TND"},"TOP":{"displayName":"tongansk paʻanga","displayName-count-one":"tongansk paʻanga","displayName-count-other":"tonganska paʻanga","symbol":"TOP","symbol-alt-narrow":"T$"},"TPE":{"displayName":"timoriansk escudo","displayName-count-one":"östtimoresisk escudo","displayName-count-other":"timorianska escudos","symbol":"TPE"},"TRL":{"displayName":"turkisk lire (1922–2005)","displayName-count-one":"turkisk lire (1922–2005)","displayName-count-other":"turkiska lire (1922–2005)","symbol":"TRL"},"TRY":{"displayName":"turkisk lira","displayName-count-one":"turkisk lira","displayName-count-other":"turkiska lira","symbol":"TRY","symbol-alt-narrow":"₺","symbol-alt-variant":"TL"},"TTD":{"displayName":"Trinidad och Tobago-dollar","displayName-count-one":"Trinidad och Tobago-dollar","displayName-count-other":"Trinidad och Tobago-dollar","symbol":"TTD","symbol-alt-narrow":"$"},"TWD":{"displayName":"Taiwandollar","displayName-count-one":"Taiwandollar","displayName-count-other":"Taiwandollar","symbol":"TWD","symbol-alt-narrow":"NT$"},"TZS":{"displayName":"tanzanisk shilling","displayName-count-one":"tanzanisk shilling","displayName-count-other":"tanzaniska shilling","symbol":"TZS"},"UAH":{"displayName":"ukrainsk hryvnia","displayName-count-one":"ukrainsk hryvnia","displayName-count-other":"ukrainska hryvnia","symbol":"UAH","symbol-alt-narrow":"₴"},"UAK":{"displayName":"ukrainsk karbovanetz","displayName-count-one":"ukrainsk karbovanetz (1992–1996)","displayName-count-other":"ukrainska karbovanetz (1992–1996)","symbol":"UAK"},"UGS":{"displayName":"ugandisk shilling (1966–1987)","displayName-count-one":"ugandisk shilling (1966–1987)","displayName-count-other":"ugandiska shilling (1966–1987)","symbol":"UGS"},"UGX":{"displayName":"ugandisk shilling","displayName-count-one":"ugandisk shilling","displayName-count-other":"ugandiska shilling","symbol":"UGX"},"USD":{"displayName":"US-dollar","displayName-count-one":"US-dollar","displayName-count-other":"US-dollar","symbol":"US$","symbol-alt-narrow":"$"},"USN":{"displayName":"US-dollar (nästa dag)","displayName-count-one":"US-dollar (nästa dag)","displayName-count-other":"US-dollar (nästa dag)","symbol":"USN"},"USS":{"displayName":"US-dollar (samma dag)","displayName-count-one":"US-dollar (samma dag)","displayName-count-other":"US-dollar (samma dag)","symbol":"USS"},"UYI":{"displayName":"uruguayansk peso en unidades indexadas","displayName-count-one":"uruguayansk peso en unidades indexadas","displayName-count-other":"uruguayanska pesos en unidades indexadas","symbol":"UYI"},"UYP":{"displayName":"uruguayansk peso (1975–1993)","displayName-count-one":"uruguayansk peso (1975–1993)","displayName-count-other":"uruguayanska pesos (1975–1993)","symbol":"UYP"},"UYU":{"displayName":"uruguayansk peso","displayName-count-one":"uruguayansk peso","displayName-count-other":"uruguayanska pesos","symbol":"UYU","symbol-alt-narrow":"$"},"UZS":{"displayName":"uzbekisk sum","displayName-count-one":"uzbekisk sum","displayName-count-other":"uzbekiska sum","symbol":"UZS"},"VEB":{"displayName":"venezuelansk bolivar (1871–2008)","displayName-count-one":"venezuelansk bolivar (1871–2008)","displayName-count-other":"venezuelanska bolivar (1871–2008)","symbol":"VEB"},"VEF":{"displayName":"venezuelansk bolívar","displayName-count-one":"venezuelansk bolívar","displayName-count-other":"venezuelanska bolívar","symbol":"VEF","symbol-alt-narrow":"Bs"},"VND":{"displayName":"vietnamesisk dong","displayName-count-one":"vietnamesisk dong","displayName-count-other":"vietnamesiska dong","symbol":"VND","symbol-alt-narrow":"₫"},"VNN":{"displayName":"vietnamesisk dong (1978–1985)","displayName-count-one":"vietnamesisk dong (1978–1985)","displayName-count-other":"vietnamesiska dong (1978–1985)","symbol":"VNN"},"VUV":{"displayName":"vanuatisk vatu","displayName-count-one":"vanuatisk vatu","displayName-count-other":"vanuatiska vatu","symbol":"VUV"},"WST":{"displayName":"västsamoansk tala","displayName-count-one":"västsamoansk tala","displayName-count-other":"västsamoanska tala","symbol":"WST"},"XAF":{"displayName":"centralafrikansk franc","displayName-count-one":"centralafrikansk franc","displayName-count-other":"centralafrikanska franc","symbol":"FCFA"},"XAG":{"displayName":"silver","displayName-count-one":"uns silver","displayName-count-other":"silveruns","symbol":"XAG"},"XAU":{"displayName":"guld","displayName-count-one":"uns guld","displayName-count-other":"gulduns","symbol":"XAU"},"XBA":{"displayName":"europeisk kompositenhet","displayName-count-one":"europeisk gammal kompositenhet","displayName-count-other":"europeiska kompositenheter","symbol":"XBA"},"XBB":{"displayName":"europeisk monetär enhet","displayName-count-one":"europeisk gammal monetär enhet","displayName-count-other":"europeiska monetära enheter","symbol":"XBB"},"XBC":{"displayName":"europeisk kontoenhet (XBC)","displayName-count-one":"europeisk gammal kontoenhet","displayName-count-other":"europeiska kontoenheter (XBC)","symbol":"XBC"},"XBD":{"displayName":"europeisk kontoenhet (XBD)","displayName-count-one":"europeisk kontoenhet (XBD)","displayName-count-other":"europeiska kontoenheter (XBD)","symbol":"XBD"},"XCD":{"displayName":"östkaribisk dollar","displayName-count-one":"östkaribisk dollar","displayName-count-other":"östkaribiska dollar","symbol":"EC$","symbol-alt-narrow":"$"},"XDR":{"displayName":"IMF särskild dragningsrätt","displayName-count-one":"IMF särskild dragningsrätt","displayName-count-other":"IMF särskilda dragningsrätter","symbol":"XDR"},"XEU":{"displayName":"europeisk valutaenhet","displayName-count-one":"europeisk valutaenhet","displayName-count-other":"europeiska valutaenheter","symbol":"XEU"},"XFO":{"displayName":"fransk guldfranc","displayName-count-one":"fransk guldfranc","displayName-count-other":"franska guldfranc","symbol":"XFO"},"XFU":{"displayName":"internationella järnvägsunionens franc","displayName-count-one":"internationella järnvägsunionens franc","displayName-count-other":"internationella järnvägsunionens franc","symbol":"XFU"},"XOF":{"displayName":"västafrikansk franc","displayName-count-one":"västafrikansk franc","displayName-count-other":"västafrikanska franc","symbol":"CFA"},"XPD":{"displayName":"palladium","displayName-count-one":"uns palladium","displayName-count-other":"palladium","symbol":"XPD"},"XPF":{"displayName":"CFP-franc","displayName-count-one":"CFP-franc","displayName-count-other":"CFP-franc","symbol":"CFPF"},"XPT":{"displayName":"platina","displayName-count-one":"uns platina","displayName-count-other":"platina","symbol":"XPT"},"XRE":{"displayName":"RINET-fond","displayName-count-one":"RINET-fond","displayName-count-other":"RINET-fond","symbol":"XRE"},"XSU":{"displayName":"latinamerikansk sucre","displayName-count-one":"latinamerikansk sucre","displayName-count-other":"latinamerikanska sucre","symbol":"XSU"},"XTS":{"displayName":"test-valutakod","displayName-count-one":"(valutakod för teständamål)","displayName-count-other":"test-valutakod","symbol":"XTS"},"XUA":{"displayName":"afrikansk kontoenhet","displayName-count-one":"afrikansk kontoenhet","displayName-count-other":"afrikanska kontoenheter","symbol":"XUA"},"XXX":{"displayName":"okänd valuta","displayName-count-one":"(okänd valutaenhet)","displayName-count-other":"(okända valutaenheter)","symbol":"XXX"},"YDD":{"displayName":"jemenitisk dinar","displayName-count-one":"jemenitisk dinar","displayName-count-other":"jemenitiska dinarer","symbol":"YDD"},"YER":{"displayName":"jemenitisk rial","displayName-count-one":"jemenitisk rial","displayName-count-other":"jemenitiska rial","symbol":"YER"},"YUD":{"displayName":"jugoslavisk dinar (1966–1990)","displayName-count-one":"jugoslavisk dinar (1966–1990)","displayName-count-other":"jugoslaviska dinarer (1966–1990)","symbol":"YUD"},"YUM":{"displayName":"jugoslavisk dinar (1994–2002)","displayName-count-one":"jugoslavisk dinar (1994–2002)","displayName-count-other":"jugoslaviska dinarer (1994–2002)","symbol":"YUM"},"YUN":{"displayName":"jugoslavisk dinar (1990–1992)","displayName-count-one":"jugoslavisk dinar (1990–1992)","displayName-count-other":"jugoslaviska dinarer (1990–1992)","symbol":"YUN"},"YUR":{"displayName":"jugoslavisk dinar (1992–1993)","displayName-count-one":"jugoslavisk dinar (1992–1993)","displayName-count-other":"jugoslaviska dinarer (1992–1993)","symbol":"YUR"},"ZAL":{"displayName":"sydafrikansk rand (finansiell)","displayName-count-one":"sydafrikansk rand (finansiell)","displayName-count-other":"sydafrikanska rand (finansiella)","symbol":"ZAL"},"ZAR":{"displayName":"sydafrikansk rand","displayName-count-one":"sydafrikansk rand","displayName-count-other":"sydafrikanska rand","symbol":"ZAR","symbol-alt-narrow":"R"},"ZMK":{"displayName":"zambisk kwacha (1968–2012)","displayName-count-one":"zambisk kwacha (1968–2012)","displayName-count-other":"zambiska kwacha (1968–2012)","symbol":"ZMK"},"ZMW":{"displayName":"zambisk kwacha","displayName-count-one":"zambisk kwacha","displayName-count-other":"zambiska kwacha","symbol":"ZMW","symbol-alt-narrow":"ZK"},"ZRN":{"displayName":"zairisk ny zaire","displayName-count-one":"zaïrisk ny zaïre","displayName-count-other":"zaïriska nya zaïre","symbol":"ZRN"},"ZRZ":{"displayName":"zairisk zaire","displayName-count-one":"zaïrisk zaïre","displayName-count-other":"zaïriska zaïre","symbol":"ZRZ"},"ZWD":{"displayName":"Zimbabwe-dollar","displayName-count-one":"Zimbabwe-dollar","displayName-count-other":"Zimbabwe-dollar","symbol":"ZWD"},"ZWL":{"displayName":"Zimbabwe-dollar (2009)","displayName-count-one":"Zimbabwe-dollar (2009)","displayName-count-other":"Zimbabwe-dollar (2009)","symbol":"ZWL"},"ZWR":{"displayName":"Zimbabwe-dollar (2008)","displayName-count-one":"Zimbabwe-dollar (2008)","displayName-count-other":"Zimbabwe-dollar (2008)","symbol":"ZWR"}},"defaultNumberingSystem":"latn","otherNumberingSystems":{"native":"latn"},"minimumGroupingDigits":"1","symbols-numberSystem-latn":{"decimal":",","group":" ","list":";","percentSign":"%","plusSign":"+","minusSign":"−","exponential":"×10^","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"¤¤¤","timeSeparator":":","timeSeparator-alt-variant":"."},"decimalFormats-numberSystem-latn":{"standard":"#,##0.###","long":{"decimalFormat":{"1000-count-one":"0 tusen","1000-count-other":"0 tusen","10000-count-one":"00 tusen","10000-count-other":"00 tusen","100000-count-one":"000 tusen","100000-count-other":"000 tusen","1000000-count-one":"0 miljon","1000000-count-other":"0 miljoner","10000000-count-one":"00 miljon","10000000-count-other":"00 miljoner","100000000-count-one":"000 miljoner","100000000-count-other":"000 miljoner","1000000000-count-one":"0 miljard","1000000000-count-other":"0 miljarder","10000000000-count-one":"00 miljarder","10000000000-count-other":"00 miljarder","100000000000-count-one":"000 miljarder","100000000000-count-other":"000 miljarder","1000000000000-count-one":"0 biljon","1000000000000-count-other":"0 biljoner","10000000000000-count-one":"00 biljoner","10000000000000-count-other":"00 biljoner","100000000000000-count-one":"000 biljoner","100000000000000-count-other":"000 biljoner"}},"short":{"decimalFormat":{"1000-count-one":"0 tn","1000-count-other":"0 tn","10000-count-one":"00 tn","10000-count-other":"00 tn","100000-count-one":"000 tn","100000-count-other":"000 tn","1000000-count-one":"0 mn","1000000-count-other":"0 mn","10000000-count-one":"00 mn","10000000-count-other":"00 mn","100000000-count-one":"000 mn","100000000-count-other":"000 mn","1000000000-count-one":"0 md","1000000000-count-other":"0 md","10000000000-count-one":"00 md","10000000000-count-other":"00 md","100000000000-count-one":"000 md","100000000000-count-other":"000 md","1000000000000-count-one":"0 bn","1000000000000-count-other":"0 bn","10000000000000-count-one":"00 bn","10000000000000-count-other":"00 bn","100000000000000-count-one":"000 bn","100000000000000-count-other":"000 bn"}}},"scientificFormats-numberSystem-latn":{"standard":"#E0"},"percentFormats-numberSystem-latn":{"standard":"#,##0 %"},"currencyFormats-numberSystem-latn":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"#,##0.00 ¤","accounting":"#,##0.00 ¤","short":{"standard":{"1000-count-one":"0 tn ¤","1000-count-other":"0 tn ¤","10000-count-one":"00 tn ¤","10000-count-other":"00 tn ¤","100000-count-one":"000 tn ¤","100000-count-other":"000 tn ¤","1000000-count-one":"0 mn ¤","1000000-count-other":"0 mn ¤","10000000-count-one":"00 mn ¤","10000000-count-other":"00 mn ¤","100000000-count-one":"000 mn ¤","100000000-count-other":"000 mn ¤","1000000000-count-one":"0 md ¤","1000000000-count-other":"0 md ¤","10000000000-count-one":"00 md ¤","10000000000-count-other":"00 md ¤","100000000000-count-one":"000 md ¤","100000000000-count-other":"000 md ¤","1000000000000-count-one":"0 bn ¤","1000000000000-count-other":"0 bn ¤","10000000000000-count-one":"00 bn ¤","10000000000000-count-other":"00 bn ¤","100000000000000-count-one":"000 bn ¤","100000000000000-count-other":"000 bn ¤"}},"unitPattern-count-one":"{0} {1}","unitPattern-count-other":"{0} {1}"},"miscPatterns-numberSystem-latn":{"atLeast":"⩾{0}","range":"{0}‒{1}"},"minimalPairs":{"pluralMinimalPairs-count-one":"om {0} dag","pluralMinimalPairs-count-other":"om {0} dagar","one":"Ta {0}:a svängen till höger","other":"Ta {0}:e svängen till höger"}}},"ta":{"identity":{"version":{"_number":"$Revision: 13686 $","_cldrVersion":"32"},"language":"ta"},"dates":{"calendars":{"gregorian":{"months":{"format":{"abbreviated":{"1":"ஜன.","2":"பிப்.","3":"மார்.","4":"ஏப்.","5":"மே","6":"ஜூன்","7":"ஜூலை","8":"ஆக.","9":"செப்.","10":"அக்.","11":"நவ.","12":"டிச."},"narrow":{"1":"ஜ","2":"பி","3":"மா","4":"ஏ","5":"மே","6":"ஜூ","7":"ஜூ","8":"ஆ","9":"செ","10":"அ","11":"ந","12":"டி"},"wide":{"1":"ஜனவரி","2":"பிப்ரவரி","3":"மார்ச்","4":"ஏப்ரல்","5":"மே","6":"ஜூன்","7":"ஜூலை","8":"ஆகஸ்ட்","9":"செப்டம்பர்","10":"அக்டோபர்","11":"நவம்பர்","12":"டிசம்பர்"}},"stand-alone":{"abbreviated":{"1":"ஜன.","2":"பிப்.","3":"மார்.","4":"ஏப்.","5":"மே","6":"ஜூன்","7":"ஜூலை","8":"ஆக.","9":"செப்.","10":"அக்.","11":"நவ.","12":"டிச."},"narrow":{"1":"ஜ","2":"பி","3":"மா","4":"ஏ","5":"மே","6":"ஜூ","7":"ஜூ","8":"ஆ","9":"செ","10":"அ","11":"ந","12":"டி"},"wide":{"1":"ஜனவரி","2":"பிப்ரவரி","3":"மார்ச்","4":"ஏப்ரல்","5":"மே","6":"ஜூன்","7":"ஜூலை","8":"ஆகஸ்ட்","9":"செப்டம்பர்","10":"அக்டோபர்","11":"நவம்பர்","12":"டிசம்பர்"}}},"days":{"format":{"abbreviated":{"sun":"ஞாயி.","mon":"திங்.","tue":"செவ்.","wed":"புத.","thu":"வியா.","fri":"வெள்.","sat":"சனி"},"narrow":{"sun":"ஞா","mon":"தி","tue":"செ","wed":"பு","thu":"வி","fri":"வெ","sat":"ச"},"short":{"sun":"ஞா","mon":"தி","tue":"செ","wed":"பு","thu":"வி","fri":"வெ","sat":"ச"},"wide":{"sun":"ஞாயிறு","mon":"திங்கள்","tue":"செவ்வாய்","wed":"புதன்","thu":"வியாழன்","fri":"வெள்ளி","sat":"சனி"}},"stand-alone":{"abbreviated":{"sun":"ஞாயி.","mon":"திங்.","tue":"செவ்.","wed":"புத.","thu":"வியா.","fri":"வெள்.","sat":"சனி"},"narrow":{"sun":"ஞா","mon":"தி","tue":"செ","wed":"பு","thu":"வி","fri":"வெ","sat":"ச"},"short":{"sun":"ஞா","mon":"தி","tue":"செ","wed":"பு","thu":"வி","fri":"வெ","sat":"ச"},"wide":{"sun":"ஞாயிறு","mon":"திங்கள்","tue":"செவ்வாய்","wed":"புதன்","thu":"வியாழன்","fri":"வெள்ளி","sat":"சனி"}}},"quarters":{"format":{"abbreviated":{"1":"காலா.1","2":"காலா.2","3":"காலா.3","4":"காலா.4"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"ஒன்றாம் காலாண்டு","2":"இரண்டாம் காலாண்டு","3":"மூன்றாம் காலாண்டு","4":"நான்காம் காலாண்டு"}},"stand-alone":{"abbreviated":{"1":"காலா.1","2":"காலா.2","3":"காலா.3","4":"காலா.4"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"ஒன்றாம் காலாண்டு","2":"இரண்டாம் காலாண்டு","3":"மூன்றாம் காலாண்டு","4":"நான்காம் காலாண்டு"}}},"dayPeriods":{"format":{"abbreviated":{"midnight":"நள்ளிரவு","am":"முற்பகல்","noon":"நண்பகல்","pm":"பிற்பகல்","morning1":"அதிகாலை","morning2":"காலை","afternoon1":"மதியம்","afternoon2":"பிற்பகல்","evening1":"மாலை","evening2":"அந்தி மாலை","night1":"இரவு"},"narrow":{"midnight":"நள்.","am":"மு.ப","noon":"நண்.","pm":"பி.ப","morning1":"அதி.","morning2":"கா.","afternoon1":"மதி.","afternoon2":"பிற்.","evening1":"மா.","evening2":"அந்தி மா.","night1":"இர."},"wide":{"midnight":"நள்ளிரவு","am":"முற்பகல்","noon":"நண்பகல்","pm":"பிற்பகல்","morning1":"அதிகாலை","morning2":"காலை","afternoon1":"மதியம்","afternoon2":"பிற்பகல்","evening1":"மாலை","evening2":"அந்தி மாலை","night1":"இரவு"}},"stand-alone":{"abbreviated":{"midnight":"நள்ளிரவு","am":"முற்பகல்","noon":"நண்பகல்","pm":"பிற்பகல்","morning1":"அதிகாலை","morning2":"காலை","afternoon1":"மதியம்","afternoon2":"பிற்பகல்","evening1":"மாலை","evening2":"அந்தி மாலை","night1":"இரவு"},"narrow":{"midnight":"நள்.","am":"மு.ப","noon":"நண்.","pm":"பி.ப","morning1":"அதி.","morning2":"கா.","afternoon1":"மதி.","afternoon2":"பிற்.","evening1":"மா.","evening2":"அந்தி மா.","night1":"இ."},"wide":{"midnight":"நள்ளிரவு","am":"முற்பகல்","noon":"நண்பகல்","pm":"பிற்பகல்","morning1":"அதிகாலை","morning2":"காலை","afternoon1":"மதியம்","afternoon2":"பிற்பகல்","evening1":"மாலை","evening2":"அந்தி மாலை","night1":"இரவு"}}},"eras":{"eraNames":{"0":"கிறிஸ்துவுக்கு முன்","1":"அன்னோ டோமினி","0-alt-variant":"பொ.ச.மு","1-alt-variant":"பொ.ச"},"eraAbbr":{"0":"கி.மு.","1":"கி.பி.","0-alt-variant":"பொ.ச.மு","1-alt-variant":"பொ.ச"},"eraNarrow":{"0":"கி.மு.","1":"கி.பி.","0-alt-variant":"பொ.ச.மு","1-alt-variant":"பொ.ச"}},"dateFormats":{"full":"EEEE, d MMMM, y","long":"d MMMM, y","medium":"d MMM, y","short":"d/M/yy"},"timeFormats":{"full":"a h:mm:ss zzzz","long":"a h:mm:ss z","medium":"a h:mm:ss","short":"a h:mm"},"dateTimeFormats":{"full":"{1} ’அன்று’ {0}","long":"{1} ’அன்று’ {0}","medium":"{1}, {0}","short":"{1}, {0}","availableFormats":{"Bh":"B h","Bhm":"B h:mm","Bhms":"B h:mm:ss","d":"d","E":"ccc","EBhm":"E B h:mm","EBhms":"E B h:mm:ss","Ed":"d E","Ehm":"E a h:mm","EHm":"E HH:mm","Ehms":"E a h:mm:ss","EHms":"E HH:mm:ss","Gy":"G y","GyMMM":"G y MMM","GyMMMd":"G y MMM d","GyMMMEd":"G y MMM d, E","h":"a h","H":"HH","hm":"a h:mm","Hm":"HH:mm","hms":"a h:mm:ss","Hms":"HH:mm:ss","hmsv":"a h:mm:ss v","Hmsv":"HH:mm:ss v","hmv":"a h:mm v","Hmv":"HH:mm v","M":"L","Md":"d/M","MEd":"dd-MM, E","MMdd":"dd-MM","MMM":"LLL","MMMd":"MMM d","MMMEd":"MMM d, E","MMMMd":"d MMMM","MMMMW-count-one":"MMM W -ஆம் வாரம்","MMMMW-count-other":"MMM W -ஆம் வாரம்","ms":"mm:ss","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"E, d/M/y","yMM":"MM-y","yMMM":"MMM y","yMMMd":"d MMM, y","yMMMEd":"E, d MMM, y","yMMMM":"MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","yw-count-one":"Y ஆம் ஆண்டின் w -ஆம் வாரம்","yw-count-other":"Y ஆம் ஆண்டின் w -ஆம் வாரம்"},"appendItems":{"Day":"{0} ({2}: {1})","Day-Of-Week":"{0} {1}","Era":"{1} {0}","Hour":"{0} ({2}: {1})","Minute":"{0} ({2}: {1})","Month":"{0} ({2}: {1})","Quarter":"{0} ({2}: {1})","Second":"{0} ({2}: {1})","Timezone":"{0} {1}","Week":"{0} ({2}: {1})","Year":"{1} {0}"},"intervalFormats":{"intervalFormatFallback":"{0} – {1}","d":{"d":"d–d"},"h":{"a":"a h – a h","h":"a h–h"},"H":{"H":"HH – HH"},"hm":{"a":"a h:mm – a h:mm","h":"a h:mm–h:mm","m":"a h:mm–h:mm"},"Hm":{"H":"HH:mm – HH:mm","m":"HH:mm – HH:mm"},"hmv":{"a":"a h:mm – a h:mm v","h":"a h:mm – h:mm v","m":"a h:mm – h:mm v"},"Hmv":{"H":"HH:mm – HH:mm v","m":"HH:mm – HH:mm v"},"hv":{"a":"a h – a h v","h":"a h – h v"},"Hv":{"H":"HH – HH v"},"M":{"M":"M–M"},"Md":{"d":"d/M – d/M","M":"d/M – d/M"},"MEd":{"d":"E, d/M – E, d/M","M":"E, d/M – E, d/M"},"MMM":{"M":"MMM – MMM"},"MMMd":{"d":"d – d MMM","M":"d MMM – d MMM"},"MMMEd":{"d":"E, d MMM – E, d MMM","M":"E, d MMM – E, d MMM"},"y":{"y":"y – y"},"yM":{"M":"M/y – M/y","y":"M/y – M/y"},"yMd":{"d":"d/M/y – d/M/y","M":"d/M/y – d/M/y","y":"d/M/y – d/M/y"},"yMEd":{"d":"E, d/M/y – E, d/M/y","M":"E, d/M/y – E, d/M/y","y":"E, d/M/y – E, d/M/y"},"yMMM":{"M":"MMM – MMM y","y":"MMM y – MMM y"},"yMMMd":{"d":"d – d MMM, y","M":"d MMM – d MMM, y","y":"d MMM, y – d MMM, y"},"yMMMEd":{"d":"E, d MMM – E, d MMM, y","M":"E, d MMM – E, d MMM, y","y":"E, d MMM, y – E, d MMM, y"},"yMMMM":{"M":"MMMM – MMMM y","y":"MMMM y – MMMM y"}}}}},"fields":{"era":{"displayName":"காலம்"},"era-short":{"displayName":"காலம்"},"era-narrow":{"displayName":"காலம்"},"year":{"displayName":"ஆண்டு","relative-type--1":"கடந்த ஆண்டு","relative-type-0":"இந்த ஆண்டு","relative-type-1":"அடுத்த ஆண்டு","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} ஆண்டில்","relativeTimePattern-count-other":"{0} ஆண்டுகளில்"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ஆண்டிற்கு முன்","relativeTimePattern-count-other":"{0} ஆண்டுகளுக்கு முன்"}},"year-short":{"displayName":"ஆண்டு","relative-type--1":"கடந்த ஆண்டு","relative-type-0":"இந்த ஆண்டு","relative-type-1":"அடுத்த ஆண்டு","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} ஆண்டில்","relativeTimePattern-count-other":"{0} ஆண்டுகளில்"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ஆண்டிற்கு முன்","relativeTimePattern-count-other":"{0} ஆண்டுகளுக்கு முன்"}},"year-narrow":{"displayName":"ஆ.","relative-type--1":"கடந்த ஆண்டு","relative-type-0":"இந்த ஆண்டு","relative-type-1":"அடுத்த ஆண்டு","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} ஆ.","relativeTimePattern-count-other":"{0} ஆ."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ஆ. முன்","relativeTimePattern-count-other":"{0} ஆ. முன்"}},"quarter":{"displayName":"காலாண்டு","relative-type--1":"கடந்த காலாண்டு","relative-type-0":"இந்த காலாண்டு","relative-type-1":"அடுத்த காலாண்டு","relativeTime-type-future":{"relativeTimePattern-count-one":"+{0} காலாண்டில்","relativeTimePattern-count-other":"{0} காலாண்டுகளில்"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} காலாண்டுக்கு முன்","relativeTimePattern-count-other":"{0} காலாண்டுகளுக்கு முன்"}},"quarter-short":{"displayName":"காலா.","relative-type--1":"இறுதி காலாண்டு","relative-type-0":"இந்த காலாண்டு","relative-type-1":"அடுத்த காலாண்டு","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} காலா.","relativeTimePattern-count-other":"{0} காலா."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} காலா. முன்","relativeTimePattern-count-other":"{0} காலா. முன்"}},"quarter-narrow":{"displayName":"கா.","relative-type--1":"இறுதி காலாண்டு","relative-type-0":"இந்த காலாண்டு","relative-type-1":"அடுத்த காலாண்டு","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} கா.","relativeTimePattern-count-other":"{0} கா."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} கா. முன்","relativeTimePattern-count-other":"{0} கா. முன்"}},"month":{"displayName":"மாதம்","relative-type--1":"கடந்த மாதம்","relative-type-0":"இந்த மாதம்","relative-type-1":"அடுத்த மாதம்","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} மாதத்தில்","relativeTimePattern-count-other":"{0} மாதங்களில்"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} மாதத்துக்கு முன்","relativeTimePattern-count-other":"{0} மாதங்களுக்கு முன்"}},"month-short":{"displayName":"மாத.","relative-type--1":"கடந்த மாதம்","relative-type-0":"இந்த மாதம்","relative-type-1":"அடுத்த மாதம்","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} மாத.","relativeTimePattern-count-other":"{0} மாத."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} மாத. முன்","relativeTimePattern-count-other":"{0} மாத. முன்"}},"month-narrow":{"displayName":"மா.","relative-type--1":"கடந்த மாதம்","relative-type-0":"இந்த மாதம்","relative-type-1":"அடுத்த மாதம்","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} மா.","relativeTimePattern-count-other":"{0} மா."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} மா. முன்","relativeTimePattern-count-other":"{0} மா. முன்"}},"week":{"displayName":"வாரம்","relative-type--1":"கடந்த வாரம்","relative-type-0":"இந்த வாரம்","relative-type-1":"அடுத்த வாரம்","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} வாரத்தில்","relativeTimePattern-count-other":"{0} வாரங்களில்"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} வாரத்திற்கு முன்","relativeTimePattern-count-other":"{0} வாரங்களுக்கு முன்"},"relativePeriod":"{0} -இன் வாரம்"},"week-short":{"displayName":"வாரம்","relative-type--1":"கடந்த வாரம்","relative-type-0":"இந்த வாரம்","relative-type-1":"அடுத்த வாரம்","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} வார.","relativeTimePattern-count-other":"{0} வார."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} வார. முன்","relativeTimePattern-count-other":"{0} வார. முன்"},"relativePeriod":"{0} -இன் வாரம்"},"week-narrow":{"displayName":"வா.","relative-type--1":"கடந்த வாரம்","relative-type-0":"இந்த வாரம்","relative-type-1":"அடுத்த வாரம்","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} வா.","relativeTimePattern-count-other":"{0} வா."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} வா. முன்","relativeTimePattern-count-other":"{0} வா. முன்"},"relativePeriod":"{0} -இன் வாரம்"},"weekOfMonth":{"displayName":"மாதத்தின் வாரம்"},"weekOfMonth-short":{"displayName":"மாத. வாரம்"},"weekOfMonth-narrow":{"displayName":"மாத. வாரம்"},"day":{"displayName":"நாள்","relative-type--2":"நேற்று முன் தினம்","relative-type--1":"நேற்று","relative-type-0":"இன்று","relative-type-1":"நாளை","relative-type-2":"நாளை மறுநாள்","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} நாளில்","relativeTimePattern-count-other":"{0} நாட்களில்"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} நாளுக்கு முன்","relativeTimePattern-count-other":"{0} நாட்களுக்கு முன்"}},"day-short":{"displayName":"நாள்","relative-type--2":"நேற்று முன் தினம்","relative-type--1":"நேற்று","relative-type-0":"இன்று","relative-type-1":"நாளை","relative-type-2":"நாளை மறுநாள்","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} நாளில்","relativeTimePattern-count-other":"{0} நாட்களில்"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} நாளுக்கு முன்","relativeTimePattern-count-other":"{0} நாட்களுக்கு முன்"}},"day-narrow":{"displayName":"நா.","relative-type--2":"நேற்று முன் தினம்","relative-type--1":"நேற்று","relative-type-0":"இன்று","relative-type-1":"நாளை","relative-type-2":"நாளை மறுநாள்","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} நா.","relativeTimePattern-count-other":"{0} நா."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} நா. முன்","relativeTimePattern-count-other":"{0} நா. முன்"}},"dayOfYear":{"displayName":"வருடத்தின் நாள்"},"dayOfYear-short":{"displayName":"வருட. நாள்"},"dayOfYear-narrow":{"displayName":"வருட. நாள்"},"weekday":{"displayName":"வாரத்தின் நாள்"},"weekday-short":{"displayName":"வார. நாள்"},"weekday-narrow":{"displayName":"வார. நாள்"},"weekdayOfMonth":{"displayName":"மாதத்தின் வாரநாள்"},"weekdayOfMonth-short":{"displayName":"மாத. வாரநாள்"},"weekdayOfMonth-narrow":{"displayName":"மாத. வாரநாள்"},"sun":{"relative-type--1":"கடந்த ஞாயிறு","relative-type-0":"இந்த ஞாயிறு","relative-type-1":"அடுத்த ஞாயிறு","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} ஞாயிறில்","relativeTimePattern-count-other":"{0} ஞாயிறுகளில்"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ஞாயிறுக்கு முன்பு","relativeTimePattern-count-other":"{0} ஞாயிறுகளுக்கு முன்பு"}},"sun-short":{"relative-type--1":"கடந்த ஞாயி.","relative-type-0":"இந்த ஞாயி.","relative-type-1":"அடுத்த ஞாயி.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} ஞாயி.","relativeTimePattern-count-other":"{0} ஞாயி."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ஞாயி. முன்","relativeTimePattern-count-other":"{0} ஞாயி. முன்"}},"sun-narrow":{"relative-type--1":"கடந்த ஞா.","relative-type-0":"இந்த ஞா.","relative-type-1":"அடுத்த ஞா.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} ஞா.","relativeTimePattern-count-other":"{0} ஞா."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ஞா. முன்","relativeTimePattern-count-other":"{0} ஞா. முன்"}},"mon":{"relative-type--1":"கடந்த திங்கள்","relative-type-0":"இந்த திங்கள்","relative-type-1":"அடுத்த திங்கள்","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} திங்களில்","relativeTimePattern-count-other":"{0} திங்கள்களில்"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} திங்களுக்கு முன்","relativeTimePattern-count-other":"{0} திங்கள்களுக்கு முன்"}},"mon-short":{"relative-type--1":"கடந்த திங்.","relative-type-0":"இந்த திங்.","relative-type-1":"அடுத்த திங்.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} திங்.","relativeTimePattern-count-other":"{0} திங்."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} திங். முன்","relativeTimePattern-count-other":"{0} திங். முன்"}},"mon-narrow":{"relative-type--1":"கடந்த திங்.","relative-type-0":"இந்த திங்.","relative-type-1":"அடுத்த திங்.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} திங்.","relativeTimePattern-count-other":"{0} திங்."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} திங். முன்","relativeTimePattern-count-other":"{0} திங். முன்"}},"tue":{"relative-type--1":"கடந்த செவ்வாய்","relative-type-0":"இந்த செவ்வாய்","relative-type-1":"அடுத்த செவ்வாய்","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} செவ்வாயில்","relativeTimePattern-count-other":"{0} செவ்வாய்களில்"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} செவ்வாய் முன்பு","relativeTimePattern-count-other":"{0} செவ்வாய்கள் முன்பு"}},"tue-short":{"relative-type--1":"கடந்த செவ்.","relative-type-0":"இந்த செவ்.","relative-type-1":"அடுத்த செவ்.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} செவ்.","relativeTimePattern-count-other":"{0} செவ்."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} செவ்வாய்களுக்கு முன்","relativeTimePattern-count-other":"{0} செவ்வாய்களுக்கு முன்"}},"tue-narrow":{"relative-type--1":"கடந்த செவ்.","relative-type-0":"இந்த செவ்.","relative-type-1":"அடுத்த செவ்.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} செவ்.","relativeTimePattern-count-other":"{0} செவ்வாய்களில்"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} செவ்வாய்களுக்கு முன்","relativeTimePattern-count-other":"{0} செவ். முன்பு"}},"wed":{"relative-type--1":"கடந்த புதன்","relative-type-0":"இந்த புதன்","relative-type-1":"அடுத்த புதன்","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} புதனில்","relativeTimePattern-count-other":"{0} புதன்களில்"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} புதனுக்கு முன்","relativeTimePattern-count-other":"{0} புதன்களுக்கு முன்"}},"wed-short":{"relative-type--1":"கடந்த புத.","relative-type-0":"இந்த புத.","relative-type-1":"அடுத்த புத.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} புத.","relativeTimePattern-count-other":"{0} புத."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} புதன்களுக்கு முன்","relativeTimePattern-count-other":"{0} புதன்களுக்கு முன்"}},"wed-narrow":{"relative-type--1":"கடந்த புத.","relative-type-0":"இந்த புத.","relative-type-1":"அடுத்த புத.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} புத.","relativeTimePattern-count-other":"{0} புத."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} புத. முன்","relativeTimePattern-count-other":"{0} புத. முன்"}},"thu":{"relative-type--1":"கடந்த வியாழன்","relative-type-0":"இந்த வியாழன்","relative-type-1":"அடுத்த வியாழன்","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} வியாழனில்","relativeTimePattern-count-other":"{0} வியாழன்களில்"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} வியாழனுக்கு முன்","relativeTimePattern-count-other":"{0} வியாழன்களுக்கு முன்"}},"thu-short":{"relative-type--1":"கடந்த வியா.","relative-type-0":"இந்த வியா.","relative-type-1":"அடுத்த வியா.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} வியா.","relativeTimePattern-count-other":"{0} வியா."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} வியா. முன்","relativeTimePattern-count-other":"{0} வியா. முன்"}},"thu-narrow":{"relative-type--1":"கடந்த வியா.","relative-type-0":"இந்த வியா.","relative-type-1":"அடுத்த வியா.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} வியா.","relativeTimePattern-count-other":"{0} வியா."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} வியா. முன்","relativeTimePattern-count-other":"{0} வியா. முன்"}},"fri":{"relative-type--1":"கடந்த வெள்ளி","relative-type-0":"இந்த வெள்ளி","relative-type-1":"அடுத்த வெள்ளி","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} வெள்ளியில்","relativeTimePattern-count-other":"{0} வெள்ளிகளில்"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} வெள்ளிக்கு முன்","relativeTimePattern-count-other":"{0} வெள்ளிகளுக்கு முன்"}},"fri-short":{"relative-type--1":"கடந்த வெள்.","relative-type-0":"இந்த வெள்.","relative-type-1":"அடுத்த வெள்.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} வெள்.","relativeTimePattern-count-other":"{0} வெள்."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} வெள். முன்","relativeTimePattern-count-other":"{0} வெள். முன்"}},"fri-narrow":{"relative-type--1":"கடந்த வெள்.","relative-type-0":"இந்த வெள்.","relative-type-1":"அடுத்த வெள்.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} வெள்.","relativeTimePattern-count-other":"{0} வெள்."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} வெள். முன்","relativeTimePattern-count-other":"{0} வெள். முன்"}},"sat":{"relative-type--1":"கடந்த சனி","relative-type-0":"இந்த சனி","relative-type-1":"அடுத்த சனி","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} சனியில்","relativeTimePattern-count-other":"{0} சனிகளில்"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} சனிக்கு முன்","relativeTimePattern-count-other":"{0} சனிகளுக்கு முன்"}},"sat-short":{"relative-type--1":"கடந்த சனி","relative-type-0":"இந்த சனி","relative-type-1":"அடுத்த சனி","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} சனி.","relativeTimePattern-count-other":"{0} சனி."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} சனி. முன்","relativeTimePattern-count-other":"{0} சனி. முன்"}},"sat-narrow":{"relative-type--1":"கடந்த சனி","relative-type-0":"இந்த சனி","relative-type-1":"அடுத்த சனி","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} சனி.","relativeTimePattern-count-other":"{0} சனி."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} சனி. முன்","relativeTimePattern-count-other":"{0} சனி. முன்"}},"dayperiod-short":{"displayName":"முற்./பிற்."},"dayperiod":{"displayName":"முற்பகல்/பிற்பகல்"},"dayperiod-narrow":{"displayName":"முற்./பிற்."},"hour":{"displayName":"மணி","relative-type-0":"இந்த ஒரு மணிநேரத்தில்","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} மணிநேரத்தில்","relativeTimePattern-count-other":"{0} மணிநேரத்தில்"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} மணிநேரம் முன்","relativeTimePattern-count-other":"{0} மணிநேரம் முன்"}},"hour-short":{"displayName":"மணி.","relative-type-0":"இந்த ஒரு மணிநேரத்தில்","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} மணி.","relativeTimePattern-count-other":"{0} மணி."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} மணி. முன்","relativeTimePattern-count-other":"{0} மணி. முன்"}},"hour-narrow":{"displayName":"ம.","relative-type-0":"இந்த ஒரு மணிநேரத்தில்","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} ம.","relativeTimePattern-count-other":"{0} ம."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ம. முன்","relativeTimePattern-count-other":"{0} ம. முன்"}},"minute":{"displayName":"நிமிடம்","relative-type-0":"இந்த ஒரு நிமிடத்தில்","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} நிமிடத்தில்","relativeTimePattern-count-other":"{0} நிமிடங்களில்"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} நிமிடத்திற்கு முன்","relativeTimePattern-count-other":"{0} நிமிடங்களுக்கு முன்"}},"minute-short":{"displayName":"நிமி.","relative-type-0":"இந்த ஒரு நிமிடத்தில்","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} நிமி.","relativeTimePattern-count-other":"{0} நிமி."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} நிமி. முன்","relativeTimePattern-count-other":"{0} நிமி. முன்"}},"minute-narrow":{"displayName":"நிமி.","relative-type-0":"இந்த ஒரு நிமிடத்தில்","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} நி.","relativeTimePattern-count-other":"{0} நி."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} நி. முன்","relativeTimePattern-count-other":"{0} நி. முன்"}},"second":{"displayName":"விநாடி","relative-type-0":"இப்போது","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} விநாடியில்","relativeTimePattern-count-other":"{0} விநாடிகளில்"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} விநாடிக்கு முன்","relativeTimePattern-count-other":"{0} விநாடிகளுக்கு முன்"}},"second-short":{"displayName":"விநா.","relative-type-0":"இப்போது","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} விநா.","relativeTimePattern-count-other":"{0} விநா."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} விநா. முன்","relativeTimePattern-count-other":"{0} விநா. முன்"}},"second-narrow":{"displayName":"வி.","relative-type-0":"இப்போது","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} வி.","relativeTimePattern-count-other":"{0} வி."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} வி. முன்","relativeTimePattern-count-other":"{0} வி. முன்"}},"zone":{"displayName":"நேர மண்டலம்"},"zone-short":{"displayName":"மண்டலம்"},"zone-narrow":{"displayName":"மண்டலம்"}}},"numbers":{"currencies":{"ADP":{"displayName":"ADP","symbol":"ADP"},"AED":{"displayName":"ஐக்கிய அரபு எமிரேட்ஸ் திர்ஹாம்","displayName-count-one":"ஐக்கிய அரபு எமிரேட்ஸ் திர்ஹாம்","displayName-count-other":"ஐக்கிய அரபு எமிரேட்ஸ் திர்ஹாம்கள்","symbol":"AED"},"AFA":{"displayName":"AFA","symbol":"AFA"},"AFN":{"displayName":"ஆஃப்கான் ஆஃப்கானி","displayName-count-one":"ஆஃப்கான் ஆஃப்கானி","displayName-count-other":"ஆஃப்கான் ஆஃப்கானிகள்","symbol":"AFN"},"ALK":{"displayName":"ALK","symbol":"ALK"},"ALL":{"displayName":"அல்பேனியன் லெக்","displayName-count-one":"அல்பேனியன் லெக்","displayName-count-other":"அல்பேனியன் லெகே","symbol":"ALL"},"AMD":{"displayName":"ஆர்மேனியன் ட்ராம்","displayName-count-one":"ஆர்மேனியன் ட்ராம்","displayName-count-other":"ஆர்மேனியன் ட்ராம்கள்","symbol":"AMD"},"ANG":{"displayName":"நெதர்லேண்ட்ஸ் அன்டிலியன் கில்டர்","displayName-count-one":"நெதர்லேண்ட்ஸ் அன்டிலியன் கில்டர்","displayName-count-other":"நெதர்லேண்ட்ஸ் அன்டிலியன் கில்டர்கள்","symbol":"ANG"},"AOA":{"displayName":"அங்கோலன் க்வான்ஸா","displayName-count-one":"அங்கோலன் க்வான்ஸா","displayName-count-other":"அங்கோலன் க்வான்ஸாக்கள்","symbol":"AOA","symbol-alt-narrow":"Kz"},"AOK":{"displayName":"AOK","symbol":"AOK"},"AON":{"displayName":"AON","symbol":"AON"},"AOR":{"displayName":"AOR","symbol":"AOR"},"ARA":{"displayName":"ARA","symbol":"ARA"},"ARL":{"displayName":"ARL","symbol":"ARL"},"ARM":{"displayName":"ARM","symbol":"ARM"},"ARP":{"displayName":"ARP","symbol":"ARP"},"ARS":{"displayName":"அர்ஜென்டைன் பெசோ","displayName-count-one":"அர்ஜென்டைன் பெசோ","displayName-count-other":"அர்ஜென்டைன் பெசோக்கள்","symbol":"ARS","symbol-alt-narrow":"$"},"ATS":{"displayName":"ATS","symbol":"ATS"},"AUD":{"displayName":"ஆஸ்திரேலிய டாலர்","displayName-count-one":"ஆஸ்திரேலிய டாலர்","displayName-count-other":"ஆஸ்திரேலிய டாலர்கள்","symbol":"A$","symbol-alt-narrow":"$"},"AWG":{"displayName":"அருபன் ஃப்ளோரின்","displayName-count-one":"அருபன் ஃப்ளோரின்","displayName-count-other":"அருபன் ஃப்ளோரின்","symbol":"AWG"},"AZM":{"displayName":"AZM","symbol":"AZM"},"AZN":{"displayName":"அசர்பைஜானி மனத்","displayName-count-one":"அஜர்பைசானி மனத்","displayName-count-other":"அசர்பைஜானி மனத்கள்","symbol":"AZN"},"BAD":{"displayName":"BAD","symbol":"BAD"},"BAM":{"displayName":"போஸ்னியா-ஹெர்ஸேகோவினா கன்வெர்டிபில் மார்க்","displayName-count-one":"போஸ்னியா-ஹெர்ஸேகோவினா கன்வெர்டிபில் மார்க்","displayName-count-other":"போஸ்னியா-ஹெர்ஸேகோவினா கன்வெர்டிபில் மார்க்குகள்","symbol":"BAM","symbol-alt-narrow":"KM"},"BAN":{"displayName":"BAN","symbol":"BAN"},"BBD":{"displayName":"பார்பேடியன் டாலர்","displayName-count-one":"பார்பேடியன் டாலர்","displayName-count-other":"பார்பேடியன் டாலர்கள்","symbol":"BBD","symbol-alt-narrow":"$"},"BDT":{"displayName":"பங்களாதேஷி டாகா","displayName-count-one":"பங்களாதேஷி டாகா","displayName-count-other":"பங்களாதேஷி டாகாக்கள்","symbol":"BDT","symbol-alt-narrow":"৳"},"BEC":{"displayName":"BEC","symbol":"BEC"},"BEF":{"displayName":"BEF","symbol":"BEF"},"BEL":{"displayName":"BEL","symbol":"BEL"},"BGL":{"displayName":"BGL","symbol":"BGL"},"BGM":{"displayName":"BGM","symbol":"BGM"},"BGN":{"displayName":"பல்கேரியன் லேவ்","displayName-count-one":"பல்கேரியன் லேவ்","displayName-count-other":"பல்கேரியன் லேவா","symbol":"BGN"},"BGO":{"displayName":"BGO","symbol":"BGO"},"BHD":{"displayName":"பஹ்ரைனி தினார்","displayName-count-one":"பஹ்ரைனி தினார்","displayName-count-other":"பஹ்ரைனி தினார்கள்","symbol":"BHD"},"BIF":{"displayName":"புருண்டியன் ஃப்ராங்க்","displayName-count-one":"புருண்டியன் ஃப்ராங்க்","displayName-count-other":"புருண்டியன் ஃப்ராங்க்குகள்","symbol":"BIF"},"BMD":{"displayName":"பெர்முடன் டாலர்","displayName-count-one":"பெர்முடன் டாலர்","displayName-count-other":"பெர்முடன் டாலர்கள்","symbol":"BMD","symbol-alt-narrow":"$"},"BND":{"displayName":"புரூனே டாலர்","displayName-count-one":"புரூனே டாலர்","displayName-count-other":"புரூனே டாலர்கள்","symbol":"BND","symbol-alt-narrow":"$"},"BOB":{"displayName":"பொலிவியன் பொலிவியானோ","displayName-count-one":"பொலிவியன் பொலிவியானோ","displayName-count-other":"பொலிவியன் பொலிவியானோக்கள்","symbol":"BOB","symbol-alt-narrow":"Bs"},"BOL":{"displayName":"BOL","symbol":"BOL"},"BOP":{"displayName":"BOP","symbol":"BOP"},"BOV":{"displayName":"BOV","symbol":"BOV"},"BRB":{"displayName":"BRB","symbol":"BRB"},"BRC":{"displayName":"BRC","symbol":"BRC"},"BRE":{"displayName":"BRE","symbol":"BRE"},"BRL":{"displayName":"பிரேசிலியன் ரியால்","displayName-count-one":"பிரேசிலியன் ரியால்","displayName-count-other":"பிரேசிலியன் ரியால்கள்","symbol":"R$","symbol-alt-narrow":"R$"},"BRN":{"displayName":"BRN","symbol":"BRN"},"BRR":{"displayName":"BRR","symbol":"BRR"},"BRZ":{"displayName":"BRZ","symbol":"BRZ"},"BSD":{"displayName":"பஹாமியன் டாலர்","displayName-count-one":"பஹாமியன் டாலர்","displayName-count-other":"பஹாமியன் டாலர்கள்","symbol":"BSD","symbol-alt-narrow":"$"},"BTN":{"displayName":"பூட்டானீஸ் குல்ட்ரம்","displayName-count-one":"பூட்டானீஸ் குல்ட்ரம்","displayName-count-other":"பூட்டானீஸ் குல்ட்ரம்கள்","symbol":"BTN"},"BUK":{"displayName":"BUK","symbol":"BUK"},"BWP":{"displayName":"போட்ஸ்வானன் புலா","displayName-count-one":"போட்ஸ்வானன் புலா","displayName-count-other":"போட்ஸ்வானன் புலாக்கள்","symbol":"BWP","symbol-alt-narrow":"P"},"BYB":{"displayName":"BYB","symbol":"BYB"},"BYN":{"displayName":"பெலருசியன் ரூபிள்","displayName-count-one":"பெலருசியன் ரூபிள்","displayName-count-other":"பெலருசியன் ரூபிள்கள்","symbol":"BYN","symbol-alt-narrow":"р."},"BYR":{"displayName":"பெலருசியன் ரூபிள் (2000–2016)","displayName-count-one":"பெலருசியன் ரூபிள் (2000–2016)","displayName-count-other":"பெலருசியன் ரூபிள்கள் (2000–2016)","symbol":"BYR"},"BZD":{"displayName":"பெலீஸ் டாலர்","displayName-count-one":"பெலீஸ் டாலர்","displayName-count-other":"பெலீஸ் டாலர்கள்","symbol":"BZD","symbol-alt-narrow":"$"},"CAD":{"displayName":"கனடியன் டாலர்","displayName-count-one":"கனடியன் டாலர்","displayName-count-other":"கனடியன் டாலர்கள்","symbol":"CA$","symbol-alt-narrow":"$"},"CDF":{"displayName":"காங்கோலீஸ் ஃப்ராங்க்","displayName-count-one":"காங்கோலீஸ் ஃப்ராங்க்","displayName-count-other":"காங்கோலீஸ் ஃப்ராங்க்குகள்","symbol":"CDF"},"CHE":{"displayName":"CHE","symbol":"CHE"},"CHF":{"displayName":"சுவிஸ் ஃப்ராங்க்","displayName-count-one":"சுவிஸ் ஃப்ராங்க்","displayName-count-other":"சுவிஸ் ஃப்ராங்குகள்","symbol":"CHF"},"CHW":{"displayName":"CHW","symbol":"CHW"},"CLE":{"displayName":"CLE","symbol":"CLE"},"CLF":{"displayName":"CLF","symbol":"CLF"},"CLP":{"displayName":"சிலியன் பெசோ","displayName-count-one":"சிலியன் பெசோ","displayName-count-other":"சிலியன் பெசோக்கள்","symbol":"CLP","symbol-alt-narrow":"$"},"CNH":{"displayName":"CNH","displayName-count-one":"CNH","displayName-count-other":"CNH","symbol":"CNH"},"CNX":{"displayName":"CNX","symbol":"CNX"},"CNY":{"displayName":"சீன யுவான்","displayName-count-one":"சீன யுவான்","displayName-count-other":"சீன யுவான்","symbol":"CN¥","symbol-alt-narrow":"¥"},"COP":{"displayName":"கொலம்பியன் பெசோ","displayName-count-one":"கொலம்பியன் பெசோ","displayName-count-other":"கொலம்பியன் பெசோக்கள்","symbol":"COP","symbol-alt-narrow":"$"},"COU":{"displayName":"COU","symbol":"COU"},"CRC":{"displayName":"கோஸ்டா ரிகன் கொலோன்","displayName-count-one":"கோஸ்டா ரிகன் கொலோன்","displayName-count-other":"கோஸ்டா ரிகன் கொலோன்கள்","symbol":"CRC","symbol-alt-narrow":"₡"},"CSD":{"displayName":"CSD","symbol":"CSD"},"CSK":{"displayName":"CSK","symbol":"CSK"},"CUC":{"displayName":"கியூபன் கன்வெர்டிபில் பெசோ","displayName-count-one":"கியூபன் கன்வெர்டிபில் பெசோ","displayName-count-other":"கியூபன் கன்வெர்டிபில் பெசோக்கள்","symbol":"CUC","symbol-alt-narrow":"$"},"CUP":{"displayName":"கியூபன் பெசோ","displayName-count-one":"கியூபன் பெசோ","displayName-count-other":"கியூபன் பெசோக்கள்","symbol":"CUP","symbol-alt-narrow":"$"},"CVE":{"displayName":"கேப் வெர்டியன் எஸ்குடோ","displayName-count-one":"கேப் வெர்டியன் எஸ்குடோ","displayName-count-other":"கேப் வெர்டியன் எஸ்குடோக்கள்","symbol":"CVE"},"CYP":{"displayName":"CYP","symbol":"CYP"},"CZK":{"displayName":"செக் குடியரசு கொருனா","displayName-count-one":"செக் குடியரசு கொருனா","displayName-count-other":"செக் குடியரசு கொருனாக்கள்","symbol":"CZK","symbol-alt-narrow":"Kč"},"DDM":{"displayName":"DDM","symbol":"DDM"},"DEM":{"displayName":"DEM","symbol":"DEM"},"DJF":{"displayName":"ஜிபவ்டியென் ஃப்ராங்க்","displayName-count-one":"ஜிபவ்டியென் ஃப்ராங்க்","displayName-count-other":"ஜிபவ்டியென் ஃப்ராங்க்குகள்","symbol":"DJF"},"DKK":{"displayName":"டேனிஷ் க்ரோன்","displayName-count-one":"டேனிஷ் க்ரோன்","displayName-count-other":"டேனிஷ் க்ரோனர்","symbol":"DKK","symbol-alt-narrow":"kr"},"DOP":{"displayName":"டொமினிக்கன் பெசோ","displayName-count-one":"டொமினிக்கன் பெசோ","displayName-count-other":"டொமினிக்கன் பெசோக்கள்","symbol":"DOP","symbol-alt-narrow":"$"},"DZD":{"displayName":"அல்ஜீரியன் தினார்","displayName-count-one":"அல்ஜீரியன் தினார்","displayName-count-other":"அல்ஜீரியன் தினார்கள்","symbol":"DZD"},"ECS":{"displayName":"ECS","symbol":"ECS"},"ECV":{"displayName":"ECV","symbol":"ECV"},"EEK":{"displayName":"EEK","symbol":"EEK"},"EGP":{"displayName":"எகிப்திய பவுண்டு","displayName-count-one":"எகிப்திய பவுண்டு","displayName-count-other":"எகிப்திய பவுண்டுகள்","symbol":"EGP","symbol-alt-narrow":"E£"},"ERN":{"displayName":"எரித்ரியன் நக்ஃபா","displayName-count-one":"எரித்ரியன் நக்ஃபா","displayName-count-other":"எரித்ரியன் நக்ஃபாக்கள்","symbol":"ERN"},"ESA":{"displayName":"ESA","symbol":"ESA"},"ESB":{"displayName":"ESB","symbol":"ESB"},"ESP":{"displayName":"ESP","symbol":"ESP","symbol-alt-narrow":"₧"},"ETB":{"displayName":"எத்தியோப்பியன் பிர்","displayName-count-one":"எத்தியோப்பியன் பிர்","displayName-count-other":"எத்தியோப்பியன் பிர்கள்","symbol":"ETB"},"EUR":{"displayName":"யூரோ","displayName-count-one":"யூரோ","displayName-count-other":"யூரோக்கள்","symbol":"€","symbol-alt-narrow":"€"},"FIM":{"displayName":"FIM","symbol":"FIM"},"FJD":{"displayName":"ஃபிஜியன் டாலர்","displayName-count-one":"ஃபிஜியன் டாலர்","displayName-count-other":"ஃபிஜியன் டாலர்கள்","symbol":"FJD","symbol-alt-narrow":"$"},"FKP":{"displayName":"ஃபாக்லாந்து தீவுகள் பவுண்டு","displayName-count-one":"ஃபாக்லாந்து தீவுகள் பவுண்டு","displayName-count-other":"ஃபாக்லாந்து தீவுகள் பவுண்டுகள்","symbol":"FKP","symbol-alt-narrow":"£"},"FRF":{"displayName":"FRF","symbol":"FRF"},"GBP":{"displayName":"பிரிட்டிஷ் பவுண்டு","displayName-count-one":"பிரிட்டிஷ் பவுண்டு","displayName-count-other":"பிரிட்டிஷ் பவுண்டுகள்","symbol":"£","symbol-alt-narrow":"£"},"GEK":{"displayName":"GEK","symbol":"GEK"},"GEL":{"displayName":"ஜார்ஜியன் லாரி","displayName-count-one":"ஜார்ஜியன் லாரி","displayName-count-other":"ஜார்ஜியன் லாரிகள்","symbol":"GEL","symbol-alt-narrow":"₾","symbol-alt-variant":"₾"},"GHC":{"displayName":"GHC","symbol":"GHC"},"GHS":{"displayName":"கானயன் சேடி","displayName-count-one":"கானயன் சேடி","displayName-count-other":"கானயன் சேடிகள்","symbol":"GHS"},"GIP":{"displayName":"ஜிப்ரால்டர் பவுண்டு","displayName-count-one":"ஜிப்ரால்டர் பவுண்டு","displayName-count-other":"ஜிப்ரால்டர் பவுண்டுகள்","symbol":"GIP","symbol-alt-narrow":"£"},"GMD":{"displayName":"கேம்பியன் தலாசி","displayName-count-one":"கேம்பியன் தலாசி","displayName-count-other":"கேம்பியன் தலாசிகள்","symbol":"GMD"},"GNF":{"displayName":"கினியன் ஃப்ராங்க்","displayName-count-one":"கினியன் ஃப்ராங்க்","displayName-count-other":"கினியன் ஃப்ராங்குகள்","symbol":"GNF","symbol-alt-narrow":"FG"},"GNS":{"displayName":"GNS","symbol":"GNS"},"GQE":{"displayName":"GQE","symbol":"GQE"},"GRD":{"displayName":"GRD","symbol":"GRD"},"GTQ":{"displayName":"குவாதெமாலன் க்யுட்ஸல்","displayName-count-one":"குவாதெமாலன் க்யுட்ஸல்","displayName-count-other":"குவாதெமாலன் க்யுட்ஸல்கள்","symbol":"GTQ","symbol-alt-narrow":"Q"},"GWE":{"displayName":"GWE","symbol":"GWE"},"GWP":{"displayName":"GWP","symbol":"GWP"},"GYD":{"displayName":"கயானீஸ் டாலர்","displayName-count-one":"கயானீஸ் டாலர்","displayName-count-other":"கயானீஸ் டாலர்கள்","symbol":"GYD","symbol-alt-narrow":"$"},"HKD":{"displayName":"ஹாங்காங் டாலர்","displayName-count-one":"ஹாங்காங் டாலர்","displayName-count-other":"ஹாங்காங் டாலர்கள்","symbol":"HK$","symbol-alt-narrow":"$"},"HNL":{"displayName":"ஹோன்டூரன் லெம்பீரா","displayName-count-one":"ஹோன்டூரன் லெம்பீரா","displayName-count-other":"ஹோன்டூரன் லெம்பீராக்கள்","symbol":"HNL","symbol-alt-narrow":"L"},"HRD":{"displayName":"HRD","symbol":"HRD"},"HRK":{"displayName":"குரோஷியன் குனா","displayName-count-one":"குரோஷியன் குனா","displayName-count-other":"குரோஷியன் குனாக்கள்","symbol":"HRK","symbol-alt-narrow":"kn"},"HTG":{"displayName":"ஹைட்டியன் கோர்டே","displayName-count-one":"ஹைட்டியன் கோர்டே","displayName-count-other":"ஹைட்டியன் கோர்டேக்கள்","symbol":"HTG"},"HUF":{"displayName":"ஹங்கேரியன் ஃபோரின்ட்","displayName-count-one":"ஹங்கேரியன் ஃபோரின்ட்","displayName-count-other":"ஹங்கேரியன் ஃபோரின்ட்கள்","symbol":"HUF","symbol-alt-narrow":"Ft"},"IDR":{"displayName":"இந்தோனேஷியன் ருபியா","displayName-count-one":"இந்தோனேஷியன் ருபியா","displayName-count-other":"இந்தோனேஷியன் ருபியாக்கள்","symbol":"IDR","symbol-alt-narrow":"Rp"},"IEP":{"displayName":"IEP","symbol":"IEP"},"ILP":{"displayName":"ILP","symbol":"ILP"},"ILR":{"displayName":"ILR","symbol":"ILR"},"ILS":{"displayName":"இஸ்ரேலி நியூ ஷிகேல்","displayName-count-one":"இஸ்ரேலி நியூ ஷிகேல்","displayName-count-other":"இஸ்ரேலி நியூ ஷிகேல்கள்","symbol":"₪","symbol-alt-narrow":"₪"},"INR":{"displayName":"இந்திய ரூபாய்","displayName-count-one":"இந்திய ரூபாய்","displayName-count-other":"இந்திய ரூபாய்கள்","symbol":"₹","symbol-alt-narrow":"₹"},"IQD":{"displayName":"ஈராக்கி தினார்","displayName-count-one":"ஈராக்கி தினார்","displayName-count-other":"ஈராக்கி தினார்கள்","symbol":"IQD"},"IRR":{"displayName":"ஈரானியன் ரியால்","displayName-count-one":"ஈரானியன் ரியால்","displayName-count-other":"ஈரானியன் ரியால்கள்","symbol":"IRR"},"ISJ":{"displayName":"ISJ","symbol":"ISJ"},"ISK":{"displayName":"ஐஸ்லாண்டிக் க்ரோனா","displayName-count-one":"ஐஸ்லாண்டிக் க்ரோனா","displayName-count-other":"ஐஸ்லாண்டிக் க்ரோனர்","symbol":"ISK","symbol-alt-narrow":"kr"},"ITL":{"displayName":"ITL","symbol":"ITL"},"JMD":{"displayName":"ஜமைக்கன் டாலர்","displayName-count-one":"ஜமைக்கன் டாலர்","displayName-count-other":"ஜமைக்கன் டாலர்கள்","symbol":"JMD","symbol-alt-narrow":"$"},"JOD":{"displayName":"ஜோர்டானிய தினார்","displayName-count-one":"ஜோர்டானிய தினார்","displayName-count-other":"ஜோர்டானிய தினார்கள்","symbol":"JOD"},"JPY":{"displayName":"ஜப்பானிய யென்","displayName-count-one":"ஜப்பானிய யென்","displayName-count-other":"ஜப்பானிய யென்","symbol":"¥","symbol-alt-narrow":"¥"},"KES":{"displayName":"கென்யன் ஷில்லிங்","displayName-count-one":"கென்யன் ஷில்லிங்","displayName-count-other":"கென்யன் ஷில்லிங்குகள்","symbol":"KES"},"KGS":{"displayName":"கிர்கிஸ்தானி சோம்","displayName-count-one":"கிரிகிஸ்தானி சோம்","displayName-count-other":"கிர்கிஸ்தானி சோம்கள்","symbol":"KGS"},"KHR":{"displayName":"கம்போடியன் ரியெல்","displayName-count-one":"கம்போடியன் ரியெல்","displayName-count-other":"கம்போடியன் ரியெல்கள்","symbol":"KHR","symbol-alt-narrow":"៛"},"KMF":{"displayName":"கமோரியன் ஃப்ராங்க்","displayName-count-one":"கமோரியன் ஃப்ராங்க்","displayName-count-other":"கமோரியன் ஃப்ராங்க்குகள்","symbol":"KMF","symbol-alt-narrow":"CF"},"KPW":{"displayName":"வட கொரிய வான்","displayName-count-one":"வட கொரிய வான்","displayName-count-other":"வட கொரிய வான்","symbol":"KPW","symbol-alt-narrow":"₩"},"KRH":{"displayName":"KRH","symbol":"KRH"},"KRO":{"displayName":"KRO","symbol":"KRO"},"KRW":{"displayName":"தென் கொரிய வான்","displayName-count-one":"தென் கொரிய வான்","displayName-count-other":"தென் கொரிய வான்","symbol":"₩","symbol-alt-narrow":"₩"},"KWD":{"displayName":"குவைத்தி தினார்","displayName-count-one":"குவைத்தி தினார்","displayName-count-other":"குவைத்தி தினார்கள்","symbol":"KWD"},"KYD":{"displayName":"கேமன் தீவுகள் டாலர்","displayName-count-one":"கேமன் தீவுகள் டாலர்","displayName-count-other":"கேமன் தீவுகள் டாலர்கள்","symbol":"KYD","symbol-alt-narrow":"$"},"KZT":{"displayName":"கஸகஸ்தானி டென்கே","displayName-count-one":"கஸகஸ்தானி டென்கே","displayName-count-other":"கஸகஸ்தானி டென்கேக்கள்","symbol":"KZT","symbol-alt-narrow":"₸"},"LAK":{"displayName":"லவோஷியன் கிப்","displayName-count-one":"லவோஷியன் கிப்","displayName-count-other":"லவோஷியன் கிப்கள்","symbol":"LAK","symbol-alt-narrow":"₭"},"LBP":{"displayName":"லெபனீஸ் பவுண்டு","displayName-count-one":"லெபனீஸ் பவுண்டு","displayName-count-other":"லெபனீஸ் பவுண்டுகள்","symbol":"LBP","symbol-alt-narrow":"L£"},"LKR":{"displayName":"இலங்கை ரூபாய்","displayName-count-one":"இலங்கை ரூபாய்","displayName-count-other":"இலங்கை ரூபாய்கள்","symbol":"LKR","symbol-alt-narrow":"Rs"},"LRD":{"displayName":"லைபீரியன் டாலர்","displayName-count-one":"லைபீரியன் டாலர்","displayName-count-other":"லைபீரியன் டாலர்கள்","symbol":"LRD","symbol-alt-narrow":"$"},"LSL":{"displayName":"லெசோதோ லோட்டி","symbol":"LSL"},"LTL":{"displayName":"லிதுவேனியன் லிடஸ்","displayName-count-one":"லிதுவேனியன் லிடாஸ்","displayName-count-other":"லிதுவேனியன் லிடை","symbol":"LTL","symbol-alt-narrow":"Lt"},"LTT":{"displayName":"LTT","symbol":"LTT"},"LUC":{"displayName":"LUC","symbol":"LUC"},"LUF":{"displayName":"LUF","symbol":"LUF"},"LUL":{"displayName":"LUL","symbol":"LUL"},"LVL":{"displayName":"லத்வியன் லாட்ஸ்","displayName-count-one":"லாத்வியன் லாட்ஸ்","displayName-count-other":"லத்வியன் லாட்டி","symbol":"LVL","symbol-alt-narrow":"Ls"},"LVR":{"displayName":"LVR","symbol":"LVR"},"LYD":{"displayName":"லிபியன் தினார்","displayName-count-one":"லிபியன் தினார்","displayName-count-other":"லிபியன் தினார்கள்","symbol":"LYD"},"MAD":{"displayName":"மொராக்கன் திர்ஹாம்","displayName-count-one":"மொராக்கன் திர்ஹாம்","displayName-count-other":"மொராக்கன் திர்ஹாம்கள்","symbol":"MAD"},"MAF":{"displayName":"MAF","symbol":"MAF"},"MCF":{"displayName":"MCF","symbol":"MCF"},"MDC":{"displayName":"MDC","symbol":"MDC"},"MDL":{"displayName":"மால்டோவன் லியூ","displayName-count-one":"மால்டோவன் லியூ","displayName-count-other":"மால்டோவன் லேய்","symbol":"MDL"},"MGA":{"displayName":"மலகாசி ஏரியரி","displayName-count-one":"மலகாசி ஏரியரி","displayName-count-other":"மலகாசி ஏரியரிகள்","symbol":"MGA","symbol-alt-narrow":"Ar"},"MGF":{"displayName":"MGF","symbol":"MGF"},"MKD":{"displayName":"மாசிடோனியன் டேனார்","displayName-count-one":"மாசிடோனியன் டேனார்","displayName-count-other":"மாசிடோனியன் டேனாரி","symbol":"MKD"},"MKN":{"displayName":"MKN","symbol":"MKN"},"MLF":{"displayName":"MLF","symbol":"MLF"},"MMK":{"displayName":"மியான்மர் கியாத்","displayName-count-one":"மியான்மர் கியாத்","displayName-count-other":"மியான்மர் கியாத்கள்","symbol":"MMK","symbol-alt-narrow":"K"},"MNT":{"displayName":"மங்கோலியன் டுக்ரிக்","displayName-count-one":"மங்கோலியன் டுக்ரிக்","displayName-count-other":"மங்கோலியன் டுக்ரிக்குகள்","symbol":"MNT","symbol-alt-narrow":"₮"},"MOP":{"displayName":"மெகனீஸ் படாகா","displayName-count-one":"மெகனீஸ் படாகா","displayName-count-other":"மெகனீஸ் படாகாக்கள்","symbol":"MOP"},"MRO":{"displayName":"மொரிஷானியன் ஒகுயா","displayName-count-one":"மொரிஷானியன் ஒகுயா","displayName-count-other":"மொரிஷானியன் ஒகுயாக்கள்","symbol":"MRO"},"MTL":{"displayName":"MTL","symbol":"MTL"},"MTP":{"displayName":"MTP","symbol":"MTP"},"MUR":{"displayName":"மொரீஷியன் ருபீ","displayName-count-one":"மொரீஷியன் ருபீ","displayName-count-other":"மொரீஷியன் ருபீக்கள்","symbol":"MUR","symbol-alt-narrow":"Rs"},"MVP":{"displayName":"MVP","symbol":"MVP"},"MVR":{"displayName":"மாலத்தீவு ருஃபியா","displayName-count-one":"மாலத்தீவு ருஃபியா","displayName-count-other":"மாலத்தீவு ருஃபியாக்கள்","symbol":"MVR"},"MWK":{"displayName":"மலாவியன் குவாச்சா","displayName-count-one":"மலாவியன் குவாச்சா","displayName-count-other":"மலாவியன் குவாச்சாக்கள்","symbol":"MWK"},"MXN":{"displayName":"மெக்ஸிகன் பெசோ","displayName-count-one":"மெக்ஸிகன் பெசோ","displayName-count-other":"மெக்ஸிகன் பெசோக்கள்","symbol":"MX$","symbol-alt-narrow":"$"},"MXP":{"displayName":"MXP","symbol":"MXP"},"MXV":{"displayName":"MXV","symbol":"MXV"},"MYR":{"displayName":"மலேஷியன் ரிங்கிட்","displayName-count-one":"மலேஷியன் ரிங்கிட்","displayName-count-other":"மலேஷியன் ரிங்கிட்கள்","symbol":"MYR","symbol-alt-narrow":"RM"},"MZE":{"displayName":"MZE","symbol":"MZE"},"MZM":{"displayName":"MZM","symbol":"MZM"},"MZN":{"displayName":"மொசாம்பிகன் மெடிகல்","displayName-count-one":"மொசாம்பிகன் மெடிகல்","displayName-count-other":"மொசாம்பிகன் மெடிகல்கள்","symbol":"MZN"},"NAD":{"displayName":"நமீபியன் டாலர்","displayName-count-one":"நமீபியன் டாலர்","displayName-count-other":"நமீபியன் டாலர்கள்","symbol":"NAD","symbol-alt-narrow":"$"},"NGN":{"displayName":"நைஜீரியன் நைரா","displayName-count-one":"நைஜீரியன் நைரா","displayName-count-other":"நைஜீரியன் நைராக்கள்","symbol":"NGN","symbol-alt-narrow":"₦"},"NIC":{"displayName":"NIC","symbol":"NIC"},"NIO":{"displayName":"நிகரகுவன் கோர்டோபா","displayName-count-one":"நிகரகுவன் கோர்டோபா","displayName-count-other":"நிகரகுவன் கோர்டோபாக்கள்","symbol":"NIO","symbol-alt-narrow":"C$"},"NLG":{"displayName":"NLG","symbol":"NLG"},"NOK":{"displayName":"நார்வேஜியன் க்ரோன்","displayName-count-one":"நார்வேஜியன் க்ரோன்","displayName-count-other":"நார்வேஜியன் க்ரோனர்","symbol":"NOK","symbol-alt-narrow":"kr"},"NPR":{"displayName":"நேபாளீஸ் ரூபாய்","displayName-count-one":"நேபாளீஸ் ரூபாய்","displayName-count-other":"நேபாளீஸ் ரூபாய்கள்","symbol":"NPR","symbol-alt-narrow":"Rs"},"NZD":{"displayName":"நியூசிலாந்து டாலர்","displayName-count-one":"நியூசிலாந்து டாலர்","displayName-count-other":"நியூசிலாந்து டாலர்கள்","symbol":"NZ$","symbol-alt-narrow":"$"},"OMR":{"displayName":"ஓமானி ரியால்","displayName-count-one":"ஓமானி ரியால்","displayName-count-other":"ஓமானி ரியால்கள்","symbol":"OMR"},"PAB":{"displayName":"பனாமானியன் பால்போவா","displayName-count-one":"பனாமானியன் பால்போவா","displayName-count-other":"பனாமானியன் பால்போவாக்கள்","symbol":"PAB"},"PEI":{"displayName":"PEI","symbol":"PEI"},"PEN":{"displayName":"பெரூவியன் சோல்","displayName-count-one":"பெரூவியன் சோல்","displayName-count-other":"பெரூவியன் சோல்கள்","symbol":"PEN"},"PES":{"displayName":"PES","symbol":"PES"},"PGK":{"displayName":"பபுவா நியூ கினியன் கினா","displayName-count-one":"பபுவா நியூ கினியன் கினா","displayName-count-other":"பபுவா நியூ கினியன் கினா","symbol":"PGK"},"PHP":{"displayName":"பிலிப்பைன் பெசோ","displayName-count-one":"பிலிப்பைன் பெசோ","displayName-count-other":"பிலிப்பைன் பெசோக்கள்","symbol":"PHP","symbol-alt-narrow":"₱"},"PKR":{"displayName":"பாகிஸ்தானி ரூபாய்","displayName-count-one":"பாகிஸ்தானி ரூபாய்","displayName-count-other":"பாகிஸ்தானி ரூபாய்கள்","symbol":"PKR","symbol-alt-narrow":"Rs"},"PLN":{"displayName":"போலிஷ் ஸ்லாட்டி","displayName-count-one":"போலிஷ் ஸ்லாட்டி","displayName-count-other":"போலிஷ் ஸ்லாட்டிகள்","symbol":"PLN","symbol-alt-narrow":"zł"},"PLZ":{"displayName":"PLZ","symbol":"PLZ"},"PTE":{"displayName":"PTE","symbol":"PTE"},"PYG":{"displayName":"பராகுவன் குவாரானி","displayName-count-one":"பராகுவன் குவாரானி","displayName-count-other":"பராகுவன் குவாரானிகள்","symbol":"PYG","symbol-alt-narrow":"₲"},"QAR":{"displayName":"கத்தாரி ரியால்","displayName-count-one":"கத்தாரி ரியால்","displayName-count-other":"கத்தாரி ரியால்கள்","symbol":"QAR"},"RHD":{"displayName":"RHD","symbol":"RHD"},"ROL":{"displayName":"ROL","symbol":"ROL"},"RON":{"displayName":"ரோமானியன் லியூ","displayName-count-one":"ரோமானியன் லியூ","displayName-count-other":"ரோமானியன் லேய்","symbol":"RON","symbol-alt-narrow":"lei"},"RSD":{"displayName":"செர்பியன் தினார்","displayName-count-one":"செர்பியன் தினார்","displayName-count-other":"செர்பியன் தினார்கள்","symbol":"RSD"},"RUB":{"displayName":"ரஷியன் ரூபிள்","displayName-count-one":"ரஷியன் ரூபிள்","displayName-count-other":"ரஷியன் ரூபிள்கள்","symbol":"RUB","symbol-alt-narrow":"₽"},"RUR":{"displayName":"RUR","symbol":"RUR","symbol-alt-narrow":"р."},"RWF":{"displayName":"ருவாண்டன் ஃப்ராங்க்","displayName-count-one":"ருவாண்டன் ஃப்ராங்க்","displayName-count-other":"ருவாண்டன் ஃப்ராங்க்குகள்","symbol":"RWF","symbol-alt-narrow":"RF"},"SAR":{"displayName":"சவுதி ரியால்","displayName-count-one":"சவுதி ரியால்","displayName-count-other":"சவுதி ரியால்கள்","symbol":"SAR"},"SBD":{"displayName":"சாலமன் தீவுகள் டாலர்","displayName-count-one":"சாலமன் தீவுகள் டாலர்","displayName-count-other":"சாலமன் தீவுகள் டாலர்கள்","symbol":"SBD","symbol-alt-narrow":"$"},"SCR":{"displayName":"சிசீலோயிஸ் ருபீ","displayName-count-one":"சிசீலோயிஸ் ருபீ","displayName-count-other":"சிசீலோயிஸ் ருபீக்கள்","symbol":"SCR"},"SDD":{"displayName":"SDD","symbol":"SDD"},"SDG":{"displayName":"சூடானீஸ் பவுண்டு","displayName-count-one":"சூடானீஸ் பவுண்டு","displayName-count-other":"சூடானீஸ் பவுண்டுகள்","symbol":"SDG"},"SDP":{"displayName":"SDP","symbol":"SDP"},"SEK":{"displayName":"ஸ்வீடிஷ் க்ரோனா","displayName-count-one":"ஸ்வீடிஷ் க்ரோனா","displayName-count-other":"ஸ்வீடிஷ் க்ரோனர்","symbol":"SEK","symbol-alt-narrow":"kr"},"SGD":{"displayName":"சிங்கப்பூர் டாலர்","displayName-count-one":"சிங்கப்பூர் டாலர்","displayName-count-other":"சிங்கப்பூர் டாலர்கள்","symbol":"SGD","symbol-alt-narrow":"$"},"SHP":{"displayName":"செயின்ட் ஹெலேனா பவுண்டு","displayName-count-one":"செயின்ட் ஹெலேனா பவுண்டு","displayName-count-other":"செயின்ட் ஹெலேனா பவுண்டுகள்","symbol":"SHP","symbol-alt-narrow":"£"},"SIT":{"displayName":"SIT","symbol":"SIT"},"SKK":{"displayName":"SKK","symbol":"SKK"},"SLL":{"displayName":"சியாரா லியோனியன் லியோன்","displayName-count-one":"சியாரா லியோனியன் லியோன்","displayName-count-other":"சியாரா லியோனியன் லியோன்கள்","symbol":"SLL"},"SOS":{"displayName":"சோமாலி ஷில்லிங்","displayName-count-one":"சோமாலி ஷில்லிங்","displayName-count-other":"சோமாலி ஷில்லிங்குகள்","symbol":"SOS"},"SRD":{"displayName":"சுரினாமீஸ் டாலர்","displayName-count-one":"சுரினாமீஸ் டாலர்","displayName-count-other":"சுரினாமீஸ் டாலர்கள்","symbol":"SRD","symbol-alt-narrow":"$"},"SRG":{"displayName":"SRG","symbol":"SRG"},"SSP":{"displayName":"தெற்கு சூடானீஸ் பவுண்டு","displayName-count-one":"தெற்கு சூடானீஸ் பவுண்டு","displayName-count-other":"தெற்கு சூடானீஸ் பவுண்டுகள்","symbol":"SSP","symbol-alt-narrow":"£"},"STD":{"displayName":"சாவ் டோமி மற்றும் பிரின்ஸ்பி டோப்ரா","displayName-count-one":"சாவ் டோமி மற்றும் பிரின்ஸ்பி டோப்ரா","displayName-count-other":"சாவ் டோமி மற்றும் பிரின்ஸ்பி டோப்ராக்கள்","symbol":"STD","symbol-alt-narrow":"Db"},"STN":{"displayName":"STN","symbol":"STN"},"SUR":{"displayName":"SUR","symbol":"SUR"},"SVC":{"displayName":"SVC","symbol":"SVC"},"SYP":{"displayName":"சிரியன் பவுண்டு","displayName-count-one":"சிரியன் பவுண்டு","displayName-count-other":"சிரியன் பவுண்டுகள்","symbol":"SYP","symbol-alt-narrow":"£"},"SZL":{"displayName":"சுவாஸி லிலாங்கனி","displayName-count-one":"சுவாஸி லிலாங்கனி","displayName-count-other":"சுவாஸி எமாலாங்கனி","symbol":"SZL"},"THB":{"displayName":"தாய் பாட்","displayName-count-one":"தாய் பாட்","displayName-count-other":"தாய் பாட்","symbol":"฿","symbol-alt-narrow":"฿"},"TJR":{"displayName":"TJR","symbol":"TJR"},"TJS":{"displayName":"தஜிகிஸ்தானி சோமோனி","displayName-count-one":"தஜிகிஸ்தானி சோமோனி","displayName-count-other":"தஜிகிஸ்தானி சோமோனிகள்","symbol":"TJS"},"TMM":{"displayName":"TMM","symbol":"TMM"},"TMT":{"displayName":"துர்க்மெனிஸ்தானி மனத்","displayName-count-one":"துர்க்மெனிஸ்தானி மனத்","displayName-count-other":"துர்க்மெனிஸ்தானி மனத்","symbol":"TMT"},"TND":{"displayName":"துனிஷியன் தினார்","displayName-count-one":"துனிஷியன் தினார்","displayName-count-other":"துனிஷியன் தினார்கள்","symbol":"TND"},"TOP":{"displayName":"தொங்கான் பங்கா","displayName-count-one":"தொங்கான் பங்கா","displayName-count-other":"தொங்கான் பங்கா","symbol":"TOP","symbol-alt-narrow":"T$"},"TPE":{"displayName":"TPE","symbol":"TPE"},"TRL":{"displayName":"TRL","symbol":"TRL"},"TRY":{"displayName":"துருக்கிஷ் லீரா","displayName-count-one":"துருக்கிஷ் லீரா","displayName-count-other":"துருக்கிஷ் லீரா","symbol":"TRY","symbol-alt-narrow":"₺","symbol-alt-variant":"TL"},"TTD":{"displayName":"டிரினிடாட் மற்றும் டோபாகோ டாலர்","displayName-count-one":"டிரினிடாட் மற்றும் டோபாகோ டாலர்","displayName-count-other":"டிரினிடாட் மற்றும் டோபாகோ டாலர்கள்","symbol":"TTD","symbol-alt-narrow":"$"},"TWD":{"displayName":"புதிய தைவான் டாலர்","displayName-count-one":"புதிய தைவான் டாலர்","displayName-count-other":"புதிய தைவான் டாலர்கள்","symbol":"NT$","symbol-alt-narrow":"NT$"},"TZS":{"displayName":"தான்சானியன் ஷில்லிங்","displayName-count-one":"தான்சானியன் ஷில்லிங்","displayName-count-other":"தான்சானியன் ஷில்லிங்குகள்","symbol":"TZS"},"UAH":{"displayName":"உக்ரைனியன் ஹிரைவ்னியா","displayName-count-one":"உக்ரைனியன் ஹிரைவ்னியா","displayName-count-other":"உக்ரைனியன் ஹிரைவ்னியாக்கள்","symbol":"UAH","symbol-alt-narrow":"₴"},"UAK":{"displayName":"UAK","symbol":"UAK"},"UGS":{"displayName":"UGS","symbol":"UGS"},"UGX":{"displayName":"உகாண்டன் ஷில்லிங்","displayName-count-one":"உகாண்டன் ஷில்லிங்","displayName-count-other":"உகாண்டன் ஷில்லிங்குகள்","symbol":"UGX"},"USD":{"displayName":"அமெரிக்க டாலர்","displayName-count-one":"அமெரிக்க டாலர்","displayName-count-other":"அமெரிக்க டாலர்கள்","symbol":"$","symbol-alt-narrow":"$"},"USN":{"displayName":"USN","symbol":"USN"},"USS":{"displayName":"USS","symbol":"USS"},"UYI":{"displayName":"UYI","symbol":"UYI"},"UYP":{"displayName":"UYP","symbol":"UYP"},"UYU":{"displayName":"உருகுவேயன் பெசோ","displayName-count-one":"உருகுவேயன் பெசோ","displayName-count-other":"உருகுவேயன் பெசோக்கள்","symbol":"UYU","symbol-alt-narrow":"$"},"UZS":{"displayName":"உஸ்பெக்கிஸ்தானி சோம்","displayName-count-one":"உஸ்பெக்கிஸ்தானி சோம்","displayName-count-other":"உஸ்பெக்கிஸ்தானி சோம்","symbol":"UZS"},"VEB":{"displayName":"VEB","symbol":"VEB"},"VEF":{"displayName":"வெனிசுலன் போலிவர்","displayName-count-one":"வெனிசுலன் போலிவர்","displayName-count-other":"வெனிசுலன் போலிவர்கள்","symbol":"VEF","symbol-alt-narrow":"Bs"},"VND":{"displayName":"வியட்நாமீஸ் டாங்","displayName-count-one":"வியட்நாமீஸ் டாங்","displayName-count-other":"வியட்நாமீஸ் டாங்","symbol":"₫","symbol-alt-narrow":"₫"},"VNN":{"displayName":"VNN","symbol":"VNN"},"VUV":{"displayName":"வனுவாட்டு வாட்டு","displayName-count-one":"வனுவாட்டு வாட்டு","displayName-count-other":"வனுவாட்டு வாட்டுகள்","symbol":"VUV"},"WST":{"displayName":"சமோவான் தாலா","displayName-count-one":"சமோவான் தாலா","displayName-count-other":"சமோவான் தாலா","symbol":"WST"},"XAF":{"displayName":"மத்திய ஆப்பிரிக்க CFA ஃப்ராங்க்","displayName-count-one":"மத்திய ஆப்பிரிக்க CFA ஃப்ராங்க்","displayName-count-other":"மத்திய ஆப்பிரிக்க CFA ஃப்ராங்க்குகள்","symbol":"FCFA"},"XAG":{"displayName":"XAG","symbol":"XAG"},"XAU":{"displayName":"XAU","symbol":"XAU"},"XBA":{"displayName":"XBA","symbol":"XBA"},"XBB":{"displayName":"XBB","symbol":"XBB"},"XBC":{"displayName":"XBC","symbol":"XBC"},"XBD":{"displayName":"XBD","symbol":"XBD"},"XCD":{"displayName":"கிழக்கு கரீபியன் டாலர்","displayName-count-one":"கிழக்கு கரீபியன் டாலர்","displayName-count-other":"கிழக்கு கரீபியன் டாலர்கள்","symbol":"EC$","symbol-alt-narrow":"$"},"XDR":{"displayName":"XDR","symbol":"XDR"},"XEU":{"displayName":"XEU","symbol":"XEU"},"XFO":{"displayName":"XFO","symbol":"XFO"},"XFU":{"displayName":"XFU","symbol":"XFU"},"XOF":{"displayName":"மேற்கு ஆப்பிரிக்க CFA ஃப்ராங்க்","displayName-count-one":"மேற்கு ஆப்பிரிக்க CFA ஃப்ராங்க்","displayName-count-other":"மேற்கு ஆப்பிரிக்க CFA ஃப்ராங்க்குகள்","symbol":"CFA"},"XPD":{"displayName":"XPD","symbol":"XPD"},"XPF":{"displayName":"ஃப்ராங்க் (CFP)","displayName-count-one":"ஃப்ராங்க் (CFP)","displayName-count-other":"ஃப்ராங்குகள் (CFP)","symbol":"CFPF"},"XPT":{"displayName":"XPT","symbol":"XPT"},"XRE":{"displayName":"XRE","symbol":"XRE"},"XSU":{"displayName":"XSU","symbol":"XSU"},"XTS":{"displayName":"XTS","symbol":"XTS"},"XUA":{"displayName":"XUA","symbol":"XUA"},"XXX":{"displayName":"தெரியாத நாணயம்","displayName-count-one":"(தெரியாத நாணய அலகு)","displayName-count-other":"(தெரியாத நாணயம்)","symbol":"XXX"},"YDD":{"displayName":"YDD","symbol":"YDD"},"YER":{"displayName":"ஏமனி ரியால்","displayName-count-one":"ஏமனி ரியால்","displayName-count-other":"ஏமனி ரியால்கள்","symbol":"YER"},"YUD":{"displayName":"YUD","symbol":"YUD"},"YUM":{"displayName":"YUM","symbol":"YUM"},"YUN":{"displayName":"YUN","symbol":"YUN"},"YUR":{"displayName":"YUR","symbol":"YUR"},"ZAL":{"displayName":"ZAL","symbol":"ZAL"},"ZAR":{"displayName":"தென் ஆப்ரிக்க ராண்ட்","displayName-count-one":"தென் ஆப்ரிக்க ராண்ட்","displayName-count-other":"தென் ஆப்ரிக்க ராண்ட்","symbol":"ZAR","symbol-alt-narrow":"R"},"ZMK":{"displayName":"ஸாம்பியன் குவாசா (1968–2012)","symbol":"ZMK"},"ZMW":{"displayName":"ஸாம்பியன் குவாச்சா","displayName-count-one":"ஸாம்பியன் குவாச்சா","displayName-count-other":"ஸாம்பியன் குவாச்சாக்கள்","symbol":"ZMW","symbol-alt-narrow":"ZK"},"ZRN":{"displayName":"ZRN","symbol":"ZRN"},"ZRZ":{"displayName":"ZRZ","symbol":"ZRZ"},"ZWD":{"displayName":"ZWD","symbol":"ZWD"},"ZWL":{"displayName":"ZWL","symbol":"ZWL"},"ZWR":{"displayName":"ZWR","symbol":"ZWR"}},"defaultNumberingSystem":"latn","otherNumberingSystems":{"native":"tamldec","traditional":"taml"},"minimumGroupingDigits":"1","symbols-numberSystem-latn":{"decimal":".","group":",","list":";","percentSign":"%","plusSign":"+","minusSign":"-","exponential":"E","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"NaN","timeSeparator":":"},"symbols-numberSystem-tamldec":{"decimal":".","group":",","list":";","percentSign":"%","plusSign":"+","minusSign":"-","exponential":"E","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"NaN","timeSeparator":":"},"decimalFormats-numberSystem-latn":{"standard":"#,##,##0.###","long":{"decimalFormat":{"1000-count-one":"0 ஆயிரம்","1000-count-other":"0 ஆயிரம்","10000-count-one":"00 ஆயிரம்","10000-count-other":"00 ஆயிரம்","100000-count-one":"000 ஆயிரம்","100000-count-other":"000 ஆயிரம்","1000000-count-one":"0 மில்லியன்","1000000-count-other":"0 மில்லியன்","10000000-count-one":"00 மில்லியன்","10000000-count-other":"00 மில்லியன்","100000000-count-one":"000 மில்லியன்","100000000-count-other":"000 மில்லியன்","1000000000-count-one":"0 பில்லியன்","1000000000-count-other":"0 பில்லியன்","10000000000-count-one":"00 பில்லியன்","10000000000-count-other":"00 பில்லியன்","100000000000-count-one":"000 பில்லியன்","100000000000-count-other":"000 பில்லியன்","1000000000000-count-one":"0 டிரில்லியன்","1000000000000-count-other":"0 டிரில்லியன்","10000000000000-count-one":"00 டிரில்லியன்","10000000000000-count-other":"00 டிரில்லியன்","100000000000000-count-one":"000 டிரில்லியன்","100000000000000-count-other":"000 டிரில்லியன்"}},"short":{"decimalFormat":{"1000-count-one":"0ஆ","1000-count-other":"0ஆ","10000-count-one":"00ஆ","10000-count-other":"00ஆ","100000-count-one":"000ஆ","100000-count-other":"000ஆ","1000000-count-one":"0மி","1000000-count-other":"0மி","10000000-count-one":"00மி","10000000-count-other":"00மி","100000000-count-one":"000மி","100000000-count-other":"000மி","1000000000-count-one":"0பி","1000000000-count-other":"0பி","10000000000-count-one":"00பி","10000000000-count-other":"00பி","100000000000-count-one":"000பி","100000000000-count-other":"000பி","1000000000000-count-one":"0டி","1000000000000-count-other":"0டி","10000000000000-count-one":"00டி","10000000000000-count-other":"00டி","100000000000000-count-one":"000டி","100000000000000-count-other":"000டி"}}},"decimalFormats-numberSystem-tamldec":{"standard":"#,##,##0.###","long":{"decimalFormat":{"1000-count-one":"0 ஆயிரம்","1000-count-other":"0 ஆயிரம்","10000-count-one":"00 ஆயிரம்","10000-count-other":"00 ஆயிரம்","100000-count-one":"000 ஆயிரம்","100000-count-other":"000 ஆயிரம்","1000000-count-one":"0 மில்லியன்","1000000-count-other":"0 மில்லியன்","10000000-count-one":"00 மில்லியன்","10000000-count-other":"00 மில்லியன்","100000000-count-one":"000 மில்லியன்","100000000-count-other":"000 மில்லியன்","1000000000-count-one":"0 பில்லியன்","1000000000-count-other":"0 பில்லியன்","10000000000-count-one":"00 பில்லியன்","10000000000-count-other":"00 பில்லியன்","100000000000-count-one":"000 பில்லியன்","100000000000-count-other":"000 பில்லியன்","1000000000000-count-one":"0 டிரில்லியன்","1000000000000-count-other":"0 டிரில்லியன்","10000000000000-count-one":"00 டிரில்லியன்","10000000000000-count-other":"00 டிரில்லியன்","100000000000000-count-one":"000 டிரில்லியன்","100000000000000-count-other":"000 டிரில்லியன்"}},"short":{"decimalFormat":{"1000-count-one":"0ஆ","1000-count-other":"0ஆ","10000-count-one":"00ஆ","10000-count-other":"00ஆ","100000-count-one":"000ஆ","100000-count-other":"000ஆ","1000000-count-one":"0மி","1000000-count-other":"0மி","10000000-count-one":"00மி","10000000-count-other":"00மி","100000000-count-one":"000மி","100000000-count-other":"000மி","1000000000-count-one":"0பி","1000000000-count-other":"0பி","10000000000-count-one":"00பி","10000000000-count-other":"00பி","100000000000-count-one":"000பி","100000000000-count-other":"000பி","1000000000000-count-one":"0டி","1000000000000-count-other":"0டி","10000000000000-count-one":"00டி","10000000000000-count-other":"00டி","100000000000000-count-one":"000டி","100000000000000-count-other":"000டி"}}},"scientificFormats-numberSystem-latn":{"standard":"#E0"},"scientificFormats-numberSystem-tamldec":{"standard":"#E0"},"percentFormats-numberSystem-latn":{"standard":"#,##,##0%"},"percentFormats-numberSystem-tamldec":{"standard":"#,##,##0%"},"currencyFormats-numberSystem-latn":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"¤ #,##,##0.00","accounting":"¤#,##0.00;(¤#,##0.00)","short":{"standard":{"1000-count-one":"¤ 0ஆ","1000-count-other":"¤ 0ஆ","10000-count-one":"¤ 00ஆ","10000-count-other":"¤ 00ஆ","100000-count-one":"¤ 000ஆ","100000-count-other":"¤ 000ஆ","1000000-count-one":"¤ 0மி","1000000-count-other":"¤ 0மி","10000000-count-one":"¤ 00மி","10000000-count-other":"¤ 00மி","100000000-count-one":"¤ 000மி","100000000-count-other":"¤ 000மி","1000000000-count-one":"¤ 0பி","1000000000-count-other":"¤0பி","10000000000-count-one":"¤ 00பி","10000000000-count-other":"¤ 00பி","100000000000-count-one":"¤ 000பி","100000000000-count-other":"¤000பி","1000000000000-count-one":"¤ 0டி","1000000000000-count-other":"¤ 0டி","10000000000000-count-one":"¤ 00டி","10000000000000-count-other":"¤ 00டி","100000000000000-count-one":"¤ 000டி","100000000000000-count-other":"¤ 000டி"}},"unitPattern-count-one":"{0} {1}","unitPattern-count-other":"{0} {1}"},"currencyFormats-numberSystem-tamldec":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"¤ #,##,##0.00","accounting":"¤#,##0.00;(¤#,##0.00)","short":{"standard":{"1000-count-one":"¤ 0ஆ","1000-count-other":"¤ 0ஆ","10000-count-one":"¤ 00ஆ","10000-count-other":"¤ 00ஆ","100000-count-one":"¤ 000ஆ","100000-count-other":"¤ 000ஆ","1000000-count-one":"¤ 0மி","1000000-count-other":"¤ 0மி","10000000-count-one":"¤ 00மி","10000000-count-other":"¤ 00மி","100000000-count-one":"¤ 000மி","100000000-count-other":"¤ 000மி","1000000000-count-one":"¤ 0பி","1000000000-count-other":"¤0பி","10000000000-count-one":"¤ 00பி","10000000000-count-other":"¤ 00பி","100000000000-count-one":"¤ 000பி","100000000000-count-other":"¤000பி","1000000000000-count-one":"¤ 0டி","1000000000000-count-other":"¤ 0டி","10000000000000-count-one":"¤ 00டி","10000000000000-count-other":"¤ 00டி","100000000000000-count-one":"¤ 000டி","100000000000000-count-other":"¤ 000டி"}},"unitPattern-count-one":"{0} {1}","unitPattern-count-other":"{0} {1}"},"miscPatterns-numberSystem-latn":{"atLeast":"{0}+","range":"{0}–{1}"},"miscPatterns-numberSystem-tamldec":{"atLeast":"{0}+","range":"{0}–{1}"},"minimalPairs":{"pluralMinimalPairs-count-one":"{0} நாள்","pluralMinimalPairs-count-other":"{0} நாட்கள்","other":"{0}வது வலது திருப்பத்தை எடு."}}},"te":{"identity":{"version":{"_number":"$Revision: 13686 $","_cldrVersion":"32"},"language":"te"},"dates":{"calendars":{"gregorian":{"months":{"format":{"abbreviated":{"1":"జన","2":"ఫిబ్ర","3":"మార్చి","4":"ఏప్రి","5":"మే","6":"జూన్","7":"జులై","8":"ఆగ","9":"సెప్టెం","10":"అక్టో","11":"నవం","12":"డిసెం"},"narrow":{"1":"జ","2":"ఫి","3":"మా","4":"ఏ","5":"మే","6":"జూ","7":"జు","8":"ఆ","9":"సె","10":"అ","11":"న","12":"డి"},"wide":{"1":"జనవరి","2":"ఫిబ్రవరి","3":"మార్చి","4":"ఏప్రిల్","5":"మే","6":"జూన్","7":"జులై","8":"ఆగస్టు","9":"సెప్టెంబర్","10":"అక్టోబర్","11":"నవంబర్","12":"డిసెంబర్"}},"stand-alone":{"abbreviated":{"1":"జన","2":"ఫిబ్ర","3":"మార్చి","4":"ఏప్రి","5":"మే","6":"జూన్","7":"జులై","8":"ఆగ","9":"సెప్టెం","10":"అక్టో","11":"నవం","12":"డిసెం"},"narrow":{"1":"జ","2":"ఫి","3":"మా","4":"ఏ","5":"మే","6":"జూ","7":"జు","8":"ఆ","9":"సె","10":"అ","11":"న","12":"డి"},"wide":{"1":"జనవరి","2":"ఫిబ్రవరి","3":"మార్చి","4":"ఏప్రిల్","5":"మే","6":"జూన్","7":"జులై","8":"ఆగస్టు","9":"సెప్టెంబర్","10":"అక్టోబర్","11":"నవంబర్","12":"డిసెంబర్"}}},"days":{"format":{"abbreviated":{"sun":"ఆది","mon":"సోమ","tue":"మంగళ","wed":"బుధ","thu":"గురు","fri":"శుక్ర","sat":"శని"},"narrow":{"sun":"ఆ","mon":"సో","tue":"మ","wed":"బు","thu":"గు","fri":"శు","sat":"శ"},"short":{"sun":"ఆది","mon":"సోమ","tue":"మం","wed":"బుధ","thu":"గురు","fri":"శుక్ర","sat":"శని"},"wide":{"sun":"ఆదివారం","mon":"సోమవారం","tue":"మంగళవారం","wed":"బుధవారం","thu":"గురువారం","fri":"శుక్రవారం","sat":"శనివారం"}},"stand-alone":{"abbreviated":{"sun":"ఆది","mon":"సోమ","tue":"మంగళ","wed":"బుధ","thu":"గురు","fri":"శుక్ర","sat":"శని"},"narrow":{"sun":"ఆ","mon":"సో","tue":"మ","wed":"బు","thu":"గు","fri":"శు","sat":"శ"},"short":{"sun":"ఆది","mon":"సోమ","tue":"మం","wed":"బుధ","thu":"గురు","fri":"శుక్ర","sat":"శని"},"wide":{"sun":"ఆదివారం","mon":"సోమవారం","tue":"మంగళవారం","wed":"బుధవారం","thu":"గురువారం","fri":"శుక్రవారం","sat":"శనివారం"}}},"quarters":{"format":{"abbreviated":{"1":"త్రై1","2":"త్రై2","3":"త్రై3","4":"త్రై4"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"1వ త్రైమాసికం","2":"2వ త్రైమాసికం","3":"3వ త్రైమాసికం","4":"4వ త్రైమాసికం"}},"stand-alone":{"abbreviated":{"1":"త్రై1","2":"త్రై2","3":"త్రై3","4":"త్రై4"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"1వ త్రైమాసికం","2":"2వ త్రైమాసికం","3":"3వ త్రైమాసికం","4":"4వ త్రైమాసికం"}}},"dayPeriods":{"format":{"abbreviated":{"midnight":"అర్ధరాత్రి","am":"AM","pm":"PM","morning1":"ఉదయం","afternoon1":"మధ్యాహ్నం","evening1":"సాయంత్రం","night1":"రాత్రి"},"narrow":{"midnight":"అర్ధరాత్రి","am":"ఉ","pm":"సా","morning1":"ఉదయం","afternoon1":"మధ్యాహ్నం","evening1":"సాయంత్రం","night1":"రాత్రి"},"wide":{"midnight":"అర్ధరాత్రి","am":"AM","pm":"PM","morning1":"ఉదయం","afternoon1":"మధ్యాహ్నం","evening1":"సాయంత్రం","night1":"రాత్రి"}},"stand-alone":{"abbreviated":{"midnight":"అర్ధరాత్రి","am":"AM","pm":"PM","morning1":"ఉదయం","afternoon1":"మధ్యాహ్నం","evening1":"సాయంత్రం","night1":"రాత్రి"},"narrow":{"midnight":"అర్ధరాత్రి","am":"AM","pm":"PM","morning1":"ఉదయం","afternoon1":"మధ్యాహ్నం","evening1":"సాయంత్రం","night1":"రాత్రి"},"wide":{"midnight":"అర్ధరాత్రి","am":"AM","pm":"PM","morning1":"ఉదయం","afternoon1":"మధ్యాహ్నం","evening1":"సాయంత్రం","night1":"రాత్రి"}}},"eras":{"eraNames":{"0":"క్రీస్తు పూర్వం","1":"క్రీస్తు శకం","0-alt-variant":"ప్రస్తుత శకానికి పూర్వం","1-alt-variant":"ప్రస్తుత శకం"},"eraAbbr":{"0":"క్రీపూ","1":"క్రీశ","0-alt-variant":"BCE","1-alt-variant":"CE"},"eraNarrow":{"0":"క్రీపూ","1":"క్రీశ","0-alt-variant":"BCE","1-alt-variant":"CE"}},"dateFormats":{"full":"d, MMMM y, EEEE","long":"d MMMM, y","medium":"d MMM, y","short":"dd-MM-yy"},"timeFormats":{"full":"h:mm:ss a zzzz","long":"h:mm:ss a z","medium":"h:mm:ss a","short":"h:mm a"},"dateTimeFormats":{"full":"{1} {0}కి","long":"{1} {0}కి","medium":"{1} {0}","short":"{1} {0}","availableFormats":{"Bh":"h B","Bhm":"h:mm B","Bhms":"h:mm:ss B","d":"d","E":"ccc","EBhm":"E h:mm B","EBhms":"E h:mm:ss B","Ed":"d, E","Ehm":"E h:mm a","EHm":"E HH:mm","Ehms":"E h:mm:ss a","EHms":"E HH:mm:ss","Gy":"G y","GyMMM":"G MMM y","GyMMMd":"G d, MMM y","GyMMMEd":"G, d MMM, y, E","h":"h a","H":"HH","hm":"h:mm a","Hm":"HH:mm","hms":"h:mm:ss a","Hms":"HH:mm:ss","hmsv":"h:mm:ss a v","Hmsv":"HH:mm:ss v","hmv":"h:mm a v","Hmv":"HH:mm v","M":"L","Md":"d/M","MEd":"d/M, E","MMdd":"dd-MM","MMM":"LLL","MMMd":"d MMM","MMMEd":"d MMM, E","MMMMd":"d MMMM","MMMMW-count-one":"MMMMలో Wవ వారం","MMMMW-count-other":"MMMMలో Wవ వారం","ms":"mm:ss","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"d/M/y, E","yMM":"MM-y","yMMM":"MMM y","yMMMd":"d, MMM y","yMMMEd":"d MMM, y, E","yMMMM":"MMMM y","yQQQ":"QQQ y","yQQQQ":"QQQQ y","yw-count-one":"Yలో wవ వారం","yw-count-other":"Yలో wవ వారం"},"appendItems":{"Day":"{0} ({2}: {1})","Day-Of-Week":"{0} {1}","Era":"{1} {0}","Hour":"{0} ({2}: {1})","Minute":"{0} ({2}: {1})","Month":"{0} ({2}: {1})","Quarter":"{0} ({2}: {1})","Second":"{0} ({2}: {1})","Timezone":"{0} {1}","Week":"{0} ({2}: {1})","Year":"{1} {0}"},"intervalFormats":{"intervalFormatFallback":"{0} – {1}","d":{"d":"d–d"},"h":{"a":"h a – h a","h":"h–h a"},"H":{"H":"HH–HH"},"hm":{"a":"h:mm a – h:mm a","h":"h:mm–h:mm a","m":"h:mm–h:mm a"},"Hm":{"H":"HH:mm–HH:mm","m":"HH:mm–HH:mm"},"hmv":{"a":"h:mm a – h:mm a v","h":"h:mm–h:mm a v","m":"h:mm–h:mm a v"},"Hmv":{"H":"HH:mm–HH:mm v","m":"HH:mm–HH:mm v"},"hv":{"a":"h a – h a v","h":"h–h a v"},"Hv":{"H":"HH–HH v"},"M":{"M":"M–M"},"Md":{"d":"d/M – d/M","M":"d/M – d/M"},"MEd":{"d":"d/M, E – d/M, E","M":"d/M, E – d/M, E"},"MMM":{"M":"MMM–MMM"},"MMMd":{"d":"d–d MMM","M":"d MMM – d MMM"},"MMMEd":{"d":"d MMM, E – d MMM, E","M":"d MMM, E – d MMM, E"},"y":{"y":"y–y"},"yM":{"M":"M/y – M/y","y":"M/y – M/y"},"yMd":{"d":"d/M/y – d/M/y","M":"d/M/y – d/M/y","y":"d/M/y – d/M/y"},"yMEd":{"d":"d/M/y, E – d/M/y, E","M":"d/M/y, E – d/M/y, E","y":"d/M/y, E – d/M/y, E"},"yMMM":{"M":"MMM–MMM y","y":"MMM y – MMM y"},"yMMMd":{"d":"d–d MMM, y","M":"d MMM – d MMM, y","y":"d MMM, y – d MMM, y"},"yMMMEd":{"d":"d MMM, E – d MMM, y, E","M":"d MMM, E – d MMM, y, E","y":"d MMM, y, E – d MMM, y, E"},"yMMMM":{"M":"MMMM – MMMM y","y":"MMMM y – MMMM y"}}}}},"fields":{"era":{"displayName":"యుగం"},"era-short":{"displayName":"యుగం"},"era-narrow":{"displayName":"యుగం"},"year":{"displayName":"సంవత్సరం","relative-type--1":"గత సంవత్సరం","relative-type-0":"ఈ సంవత్సరం","relative-type-1":"తదుపరి సంవత్సరం","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} సంవత్సరంలో","relativeTimePattern-count-other":"{0} సంవత్సరాల్లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} సంవత్సరం క్రితం","relativeTimePattern-count-other":"{0} సంవత్సరాల క్రితం"}},"year-short":{"displayName":"సం.","relative-type--1":"గత సంవత్సరం","relative-type-0":"ఈ సంవత్సరం","relative-type-1":"తదుపరి సంవత్సరం","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} సం.లో","relativeTimePattern-count-other":"{0} సం.ల్లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} సం. క్రితం","relativeTimePattern-count-other":"{0} సం. క్రితం"}},"year-narrow":{"displayName":"సం.","relative-type--1":"గత సంవత్సరం","relative-type-0":"ఈ సంవత్సరం","relative-type-1":"తదుపరి సంవత్సరం","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} సం.లో","relativeTimePattern-count-other":"{0} సం.ల్లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} సం. క్రితం","relativeTimePattern-count-other":"{0} సం. క్రితం"}},"quarter":{"displayName":"త్రైమాసికం","relative-type--1":"గత త్రైమాసికం","relative-type-0":"ఈ త్రైమాసికం","relative-type-1":"తదుపరి త్రైమాసికం","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} త్రైమాసికంలో","relativeTimePattern-count-other":"{0} త్రైమాసికాల్లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} త్రైమాసికం క్రితం","relativeTimePattern-count-other":"{0} త్రైమాసికాల క్రితం"}},"quarter-short":{"displayName":"త్రై.","relative-type--1":"గత త్రైమాసికం","relative-type-0":"ఈ త్రైమాసికం","relative-type-1":"తదుపరి త్రైమాసికం","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} త్రైమా.లో","relativeTimePattern-count-other":"{0} త్రైమా.ల్లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} త్రైమా. క్రితం","relativeTimePattern-count-other":"{0} త్రైమా. క్రితం"}},"quarter-narrow":{"displayName":"త్రై.","relative-type--1":"గత త్రైమాసికం","relative-type-0":"ఈ త్రైమాసికం","relative-type-1":"తదుపరి త్రైమాసికం","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} త్రైమాసికంలో","relativeTimePattern-count-other":"{0} త్రైమాసికాల్లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} త్రైమా. క్రితం","relativeTimePattern-count-other":"{0} త్రైమా. క్రితం"}},"month":{"displayName":"నెల","relative-type--1":"గత నెల","relative-type-0":"ఈ నెల","relative-type-1":"తదుపరి నెల","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} నెలలో","relativeTimePattern-count-other":"{0} నెలల్లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} నెల క్రితం","relativeTimePattern-count-other":"{0} నెలల క్రితం"}},"month-short":{"displayName":"నెల","relative-type--1":"గత నెల","relative-type-0":"ఈ నెల","relative-type-1":"తదుపరి నెల","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} నెలలో","relativeTimePattern-count-other":"{0} నెలల్లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} నెల క్రితం","relativeTimePattern-count-other":"{0} నెలల క్రితం"}},"month-narrow":{"displayName":"నె","relative-type--1":"గత నెల","relative-type-0":"ఈ నెల","relative-type-1":"తదుపరి నెల","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} నెలలో","relativeTimePattern-count-other":"{0} నెలల్లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} నెల క్రితం","relativeTimePattern-count-other":"{0} నెలల క్రితం"}},"week":{"displayName":"వారము","relative-type--1":"గత వారం","relative-type-0":"ఈ వారం","relative-type-1":"తదుపరి వారం","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} వారంలో","relativeTimePattern-count-other":"{0} వారాల్లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} వారం క్రితం","relativeTimePattern-count-other":"{0} వారాల క్రితం"},"relativePeriod":"{0} వారం"},"week-short":{"displayName":"వా","relative-type--1":"గత వారం","relative-type-0":"ఈ వారం","relative-type-1":"తదుపరి వారం","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} వారంలో","relativeTimePattern-count-other":"{0} వారాల్లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} వారం క్రితం","relativeTimePattern-count-other":"{0} వారాల క్రితం"},"relativePeriod":"{0}లో వారం"},"week-narrow":{"displayName":"వా","relative-type--1":"గత వారం","relative-type-0":"ఈ వారం","relative-type-1":"తదుపరి వారం","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} వారంలో","relativeTimePattern-count-other":"{0} వారాల్లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} వారం క్రితం","relativeTimePattern-count-other":"{0} వారాల క్రితం"},"relativePeriod":"{0}లో వారం"},"weekOfMonth":{"displayName":"నెలలో వారం"},"weekOfMonth-short":{"displayName":"నెలలో వారం"},"weekOfMonth-narrow":{"displayName":"నెలలో వారం"},"day":{"displayName":"దినం","relative-type--2":"మొన్న","relative-type--1":"నిన్న","relative-type-0":"ఈ రోజు","relative-type-1":"రేపు","relative-type-2":"ఎల్లుండి","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} రోజులో","relativeTimePattern-count-other":"{0} రోజుల్లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} రోజు క్రితం","relativeTimePattern-count-other":"{0} రోజుల క్రితం"}},"day-short":{"displayName":"దినం","relative-type--2":"మొన్న","relative-type--1":"నిన్న","relative-type-0":"ఈ రోజు","relative-type-1":"రేపు","relative-type-2":"ఎల్లుండి","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} రోజులో","relativeTimePattern-count-other":"{0} రోజుల్లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} రోజు క్రితం","relativeTimePattern-count-other":"{0} రోజుల క్రితం"}},"day-narrow":{"displayName":"రోజు","relative-type--2":"మొన్న","relative-type--1":"నిన్న","relative-type-0":"ఈ రోజు","relative-type-1":"రేపు","relative-type-2":"ఎల్లుండి","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} రోజులో","relativeTimePattern-count-other":"{0} రోజుల్లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} రోజు క్రితం","relativeTimePattern-count-other":"{0} రోజుల క్రితం"}},"dayOfYear":{"displayName":"సంవత్సరంలో దినం"},"dayOfYear-short":{"displayName":"సంవత్సరంలో దినం"},"dayOfYear-narrow":{"displayName":"సంవత్సరంలో దినం"},"weekday":{"displayName":"వారంలో రోజు"},"weekday-short":{"displayName":"వారంలో రోజు"},"weekday-narrow":{"displayName":"వారంలో రోజు"},"weekdayOfMonth":{"displayName":"నెలలో పనిదినం"},"weekdayOfMonth-short":{"displayName":"నెలలో పనిదినం"},"weekdayOfMonth-narrow":{"displayName":"నెలలో పనిదినం"},"sun":{"relative-type--1":"గత ఆదివారం","relative-type-0":"ఈ ఆదివారం","relative-type-1":"తదుపరి ఆదివారం","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} ఆదివారంలో","relativeTimePattern-count-other":"{0} ఆదివారాల్లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ఆదివారం క్రితం","relativeTimePattern-count-other":"{0} ఆదివారాల క్రితం"}},"sun-short":{"relative-type--1":"గత ఆది.","relative-type-0":"ఈ ఆది.","relative-type-1":"తదుపరి ఆది.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} ఆది.లో","relativeTimePattern-count-other":"{0} ఆది.ల్లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ఆది. క్రితం","relativeTimePattern-count-other":"{0} ఆది. క్రితం"}},"sun-narrow":{"relative-type--1":"గత ఆది.","relative-type-0":"ఈ ఆది.","relative-type-1":"తదుపరి ఆది.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} ఆదివారంలో","relativeTimePattern-count-other":"{0} ఆదివారాల్లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ఆది. క్రితం","relativeTimePattern-count-other":"{0} ఆది. క్రితం"}},"mon":{"relative-type--1":"గత సోమవారం","relative-type-0":"ఈ సోమవారం","relative-type-1":"తదుపరి సోమవారం","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} సోమవారంలో","relativeTimePattern-count-other":"{0} సోమవారాలలో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} సోమవారం క్రితం","relativeTimePattern-count-other":"{0} సోమవారాల క్రితం"}},"mon-short":{"relative-type--1":"గత సోమ.","relative-type-0":"ఈ సోమ.","relative-type-1":"తదుపరి సోమ.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} సోమ.లో","relativeTimePattern-count-other":"{0} సోమ.లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} సోమ. క్రితం","relativeTimePattern-count-other":"{0} సోమ. క్రితం"}},"mon-narrow":{"relative-type--1":"గత సోమ.","relative-type-0":"ఈ సోమ.","relative-type-1":"తదుపరి సోమ.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} సోమవారంలో","relativeTimePattern-count-other":"{0} సోమవారాలలో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} సోమ. క్రితం","relativeTimePattern-count-other":"{0} సోమ. క్రితం"}},"tue":{"relative-type--1":"గత మంగళవారం","relative-type-0":"ఈ మంగళవారం","relative-type-1":"తదుపరి మంగళవారం","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} మంగళవారంలో","relativeTimePattern-count-other":"{0} మంగళవారాలలో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} మంగళవారం క్రితం","relativeTimePattern-count-other":"{0} మంగళవారాల క్రితం"}},"tue-short":{"relative-type--1":"గత మంగళ.","relative-type-0":"ఈ మంగళ.","relative-type-1":"తదుపరి మంగళ.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} మంగళ.లో","relativeTimePattern-count-other":"{0} మంగళ.లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} మంగళ. క్రితం","relativeTimePattern-count-other":"{0} మంగళ. క్రితం"}},"tue-narrow":{"relative-type--1":"గత మంగళ.","relative-type-0":"ఈ మంగళ.","relative-type-1":"తదుపరి మంగళ.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} మం.లో","relativeTimePattern-count-other":"{0} మం.లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} మంగళ. క్రితం","relativeTimePattern-count-other":"{0} మంగళ. క్రితం"}},"wed":{"relative-type--1":"గత బుధవారం","relative-type-0":"ఈ బుధవారం","relative-type-1":"తదుపరి బుధవారం","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} బుధవారంలో","relativeTimePattern-count-other":"{0} బుధవారాలలో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} బుధవారం క్రితం","relativeTimePattern-count-other":"{0} బుధవారాల క్రితం"}},"wed-short":{"relative-type--1":"గత బుధ.","relative-type-0":"ఈ బుధ.","relative-type-1":"తదుపరి బుధ.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} బుధ.లో","relativeTimePattern-count-other":"{0} బుధ.లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} బుధ. క్రితం","relativeTimePattern-count-other":"{0} బుధ. క్రితం"}},"wed-narrow":{"relative-type--1":"గత బుధ.","relative-type-0":"ఈ బుధ.","relative-type-1":"తదుపరి బుధ.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} బుధవారంలో","relativeTimePattern-count-other":"{0} బుధవారాలలో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} బుధ. క్రితం","relativeTimePattern-count-other":"{0} బుధ. క్రితం"}},"thu":{"relative-type--1":"గత గురువారం","relative-type-0":"ఈ గురువారం","relative-type-1":"తదుపరి గురువారం","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} గురువారంలో","relativeTimePattern-count-other":"{0} గురువారాలలో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} గురువారం క్రితం","relativeTimePattern-count-other":"{0} గురువారాల క్రితం"}},"thu-short":{"relative-type--1":"గత గురు.","relative-type-0":"ఈ గురు.","relative-type-1":"తదుపరి గురు.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} గురు.లో","relativeTimePattern-count-other":"{0} గురు.లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} గురు. క్రితం","relativeTimePattern-count-other":"{0} గురు. క్రితం"}},"thu-narrow":{"relative-type--1":"గత గురు.","relative-type-0":"ఈ గురు.","relative-type-1":"తదుపరి గురు.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} గు.లో","relativeTimePattern-count-other":"{0} గు.లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} గురు. క్రితం","relativeTimePattern-count-other":"{0} గురు. క్రితం"}},"fri":{"relative-type--1":"గత శుక్రవారం","relative-type-0":"ఈ శుక్రవారం","relative-type-1":"తదుపరి శుక్రవారం","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} శుక్రవారంలో","relativeTimePattern-count-other":"{0} శుక్రవారాలలో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} శుక్రవారం క్రితం","relativeTimePattern-count-other":"{0} శుక్రవారాల క్రితం"}},"fri-short":{"relative-type--1":"గత శుక్ర.","relative-type-0":"ఈ శుక్ర.","relative-type-1":"తదుపరి శుక్ర.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} శుక్ర.లో","relativeTimePattern-count-other":"{0} శుక్ర.లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} శుక్ర. క్రితం","relativeTimePattern-count-other":"{0} శుక్ర. క్రితం"}},"fri-narrow":{"relative-type--1":"గత శుక్ర.","relative-type-0":"ఈ శుక్ర.","relative-type-1":"తదుపరి శుక్ర.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} శు.లో","relativeTimePattern-count-other":"{0} శు.లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} శుక్ర. క్రితం","relativeTimePattern-count-other":"{0} శుక్ర. క్రితం"}},"sat":{"relative-type--1":"గత శనివారం","relative-type-0":"ఈ శనివారం","relative-type-1":"తదుపరి శనివారం","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} శనివారంలో","relativeTimePattern-count-other":"{0} శనివారాలలో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} శనివారం క్రితం","relativeTimePattern-count-other":"{0} శనివారాల క్రితం"}},"sat-short":{"relative-type--1":"గత శని.","relative-type-0":"ఈ శని.","relative-type-1":"తదుపరి శని.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} శని.లో","relativeTimePattern-count-other":"{0} శని.లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} శని. క్రితం","relativeTimePattern-count-other":"{0} శని. క్రితం"}},"sat-narrow":{"relative-type--1":"గత శని.","relative-type-0":"ఈ శని.","relative-type-1":"తదుపరి శని.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} శ.లో","relativeTimePattern-count-other":"{0} శ.లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} శని. క్రితం","relativeTimePattern-count-other":"{0} శని. క్రితం"}},"dayperiod-short":{"displayName":"AM/PM"},"dayperiod":{"displayName":"AM/PM"},"dayperiod-narrow":{"displayName":"AM/PM"},"hour":{"displayName":"గంట","relative-type-0":"ఈ గంట","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} గంటలో","relativeTimePattern-count-other":"{0} గంటల్లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} గంట క్రితం","relativeTimePattern-count-other":"{0} గంటల క్రితం"}},"hour-short":{"displayName":"గం.","relative-type-0":"ఈ గంట","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} గం.లో","relativeTimePattern-count-other":"{0} గం.లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} గం. క్రితం","relativeTimePattern-count-other":"{0} గం. క్రితం"}},"hour-narrow":{"displayName":"గం","relative-type-0":"ఈ గంట","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} గం.లో","relativeTimePattern-count-other":"{0} గం.లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} గం. క్రితం","relativeTimePattern-count-other":"{0} గం. క్రితం"}},"minute":{"displayName":"నిమిషము","relative-type-0":"ఈ నిమిషం","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} నిమిషంలో","relativeTimePattern-count-other":"{0} నిమిషాల్లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} నిమిషం క్రితం","relativeTimePattern-count-other":"{0} నిమిషాల క్రితం"}},"minute-short":{"displayName":"నిమి.","relative-type-0":"ఈ నిమిషం","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} నిమి.లో","relativeTimePattern-count-other":"{0} నిమి.లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} నిమి. క్రితం","relativeTimePattern-count-other":"{0} నిమి. క్రితం"}},"minute-narrow":{"displayName":"ని","relative-type-0":"ఈ నిమిషం","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} నిమి.లో","relativeTimePattern-count-other":"{0} నిమి.లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} నిమి. క్రితం","relativeTimePattern-count-other":"{0} నిమి. క్రితం"}},"second":{"displayName":"సెకను","relative-type-0":"ప్రస్తుతం","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} సెకనులో","relativeTimePattern-count-other":"{0} సెకన్లలో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} సెకను క్రితం","relativeTimePattern-count-other":"{0} సెకన్ల క్రితం"}},"second-short":{"displayName":"సెక.","relative-type-0":"ప్రస్తుతం","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} సెకనులో","relativeTimePattern-count-other":"{0} సెకన్లలో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} సెక. క్రితం","relativeTimePattern-count-other":"{0} సెక. క్రితం"}},"second-narrow":{"displayName":"సెక.","relative-type-0":"ప్రస్తుతం","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} సెక.లో","relativeTimePattern-count-other":"{0} సెక. లో"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} సెక. క్రితం","relativeTimePattern-count-other":"{0} సెక. క్రితం"}},"zone":{"displayName":"సమయ మండలి"},"zone-short":{"displayName":"సమయ మండలి"},"zone-narrow":{"displayName":"సమయ మండలి"}}},"numbers":{"currencies":{"ADP":{"displayName":"ADP","symbol":"ADP"},"AED":{"displayName":"యునైటెడ్ ఆరబ్ ఎమిరేట్స్ దిరామ్","displayName-count-one":"యునైటెడ్ ఆరబ్ ఎమిరేట్స్ దిరామ్","displayName-count-other":"యునైటెడ్ ఆరబ్ ఎమిరేట్స్ దిరామ్‌లు","symbol":"AED"},"AFA":{"displayName":"AFA","symbol":"AFA"},"AFN":{"displayName":"ఆఫ్ఘాన్ ఆఫ్ఘాని","displayName-count-one":"ఆఫ్ఘాన్ ఆఫ్ఘాని","displayName-count-other":"ఆఫ్ఘాన్ ఆఫ్ఘాని","symbol":"AFN"},"ALK":{"displayName":"ALK","symbol":"ALK"},"ALL":{"displayName":"ఆల్బేనియన్ లేక్","displayName-count-one":"ఆల్బేనియన్ లేక్","displayName-count-other":"ఆల్బేనియన్ లేక్","symbol":"ALL"},"AMD":{"displayName":"అమెరికన్ డ్రామ్","displayName-count-one":"అమెరికన్ డ్రామ్","displayName-count-other":"అమెరికన్ డ్రామ్‌లు","symbol":"AMD"},"ANG":{"displayName":"నెదర్లాండ్స్ యాంటిల్లియన్ గిల్‌డర్","displayName-count-one":"నెదర్లాండ్స్ యాంటిల్లియన్ గిల్‌డర్","displayName-count-other":"నెదర్లాండ్స్ యాంటిల్లియన్ గిల్‌డర్‌లు","symbol":"ANG"},"AOA":{"displayName":"అంగోలాన్ క్వాన్‌జా","displayName-count-one":"అంగోలాన్ క్వాన్‌జా","displayName-count-other":"అంగోలాన్ క్వాన్‌జా‌లు","symbol":"AOA","symbol-alt-narrow":"Kz"},"AOK":{"displayName":"AOK","symbol":"AOK"},"AON":{"displayName":"AON","symbol":"AON"},"AOR":{"displayName":"AOR","symbol":"AOR"},"ARA":{"displayName":"ARA","symbol":"ARA"},"ARL":{"displayName":"ARL","symbol":"ARL"},"ARM":{"displayName":"ARM","symbol":"ARM"},"ARP":{"displayName":"ARP","symbol":"ARP"},"ARS":{"displayName":"అర్జెంటీనా పెసో","displayName-count-one":"అర్జెంటీనా పెసో","displayName-count-other":"అర్జెంటీనా పెసోలు","symbol":"ARS","symbol-alt-narrow":"$"},"ATS":{"displayName":"ATS","symbol":"ATS"},"AUD":{"displayName":"ఆస్ట్రేలియన్ డాలర్","displayName-count-one":"ఆస్ట్రేలియన్ డాలర్","displayName-count-other":"ఆస్ట్రేలియన్ డాలర్‌లు","symbol":"A$","symbol-alt-narrow":"$"},"AWG":{"displayName":"అరుబన్ ఫ్లోరిన్","displayName-count-one":"అరుబన్ ఫ్లోరిన్","displayName-count-other":"అరుబన్ ఫ్లోరిన్","symbol":"AWG"},"AZM":{"displayName":"AZM","symbol":"AZM"},"AZN":{"displayName":"అజర్బైజాన్ మానట్","displayName-count-one":"అజర్బైజాన్ మానట్","displayName-count-other":"అజర్బైజాన్ మానట్‌లు","symbol":"AZN"},"BAD":{"displayName":"BAD","symbol":"BAD"},"BAM":{"displayName":"బోస్నియా-హెర్జగోవినా మార్పిడి చెయ్యగలిగే మార్క్","displayName-count-one":"బోస్నియా-హెర్జగోవినా మార్పిడి చెయ్యగలిగే మార్క్","displayName-count-other":"బోస్నియా-హెర్జగోవినా మార్పిడి చెయ్యగలిగే మార్క్‌లు","symbol":"BAM","symbol-alt-narrow":"KM"},"BAN":{"displayName":"BAN","symbol":"BAN"},"BBD":{"displayName":"బర్బాడియన్ డాలర్","displayName-count-one":"బర్బాడియన్ డాలర్","displayName-count-other":"బర్బాడియన్ డాలర్‌లు","symbol":"BBD","symbol-alt-narrow":"$"},"BDT":{"displayName":"బాంగ్లాదేశ్ టాకా","displayName-count-one":"బాంగ్లాదేశ్ టాకా","displayName-count-other":"బాంగ్లాదేశ్ టాకాలు","symbol":"BDT","symbol-alt-narrow":"৳"},"BEC":{"displayName":"BEC","symbol":"BEC"},"BEF":{"displayName":"BEF","symbol":"BEF"},"BEL":{"displayName":"BEL","symbol":"BEL"},"BGL":{"displayName":"BGL","symbol":"BGL"},"BGM":{"displayName":"BGM","symbol":"BGM"},"BGN":{"displayName":"బల్గేరియన్ లేవ్","displayName-count-one":"బల్గేరియన్ లేవ్","displayName-count-other":"బల్గేరియన్ లేవ","symbol":"BGN"},"BGO":{"displayName":"BGO","symbol":"BGO"},"BHD":{"displayName":"బహ్రెయిన్ దినార్","displayName-count-one":"బహ్రెయిన్ దినార్","displayName-count-other":"బహ్రెయిన్ దినార్‌లు","symbol":"BHD"},"BIF":{"displayName":"బురిండియన్ ఫ్రాంక్","displayName-count-one":"బురిండియన్ ఫ్రాంక్","displayName-count-other":"బురిండియన్ ఫ్రాంక్‌లు","symbol":"BIF"},"BMD":{"displayName":"బెర్ముడన్ డాలర్","displayName-count-one":"బెర్ముడన్ డాలర్","displayName-count-other":"బెర్ముడన్ డాలర్‌లు","symbol":"BMD","symbol-alt-narrow":"$"},"BND":{"displayName":"బ్రూనై డాలర్","displayName-count-one":"బ్రూనై డాలర్","displayName-count-other":"బ్రూనై డాలర్‌లు","symbol":"BND","symbol-alt-narrow":"$"},"BOB":{"displayName":"బొలీవియన్ బొలీవియానో","displayName-count-one":"బొలీవియన్ బొలీవియానో","displayName-count-other":"బొలీవియన్ బొలీవియానోలు","symbol":"BOB","symbol-alt-narrow":"Bs"},"BOL":{"displayName":"BOL","symbol":"BOL"},"BOP":{"displayName":"BOP","symbol":"BOP"},"BOV":{"displayName":"BOV","symbol":"BOV"},"BRB":{"displayName":"BRB","symbol":"BRB"},"BRC":{"displayName":"BRC","symbol":"BRC"},"BRE":{"displayName":"BRE","symbol":"BRE"},"BRL":{"displayName":"బ్రెజిలియన్ రియల్","displayName-count-one":"బ్రెజిలియన్ రియల్","displayName-count-other":"బ్రెజిలియన్ రియల్‌లు","symbol":"R$","symbol-alt-narrow":"R$"},"BRN":{"displayName":"BRN","symbol":"BRN"},"BRR":{"displayName":"BRR","symbol":"BRR"},"BRZ":{"displayName":"BRZ","symbol":"BRZ"},"BSD":{"displayName":"బహామియన్ డాలర్","displayName-count-one":"బహామియన్ డాలర్","displayName-count-other":"బహామియన్ డాలర్‌లు","symbol":"BSD","symbol-alt-narrow":"$"},"BTN":{"displayName":"భూటానీయుల గుల్‌ట్రుమ్","displayName-count-one":"భూటానీయుల గుల్‌ట్రుమ్","displayName-count-other":"భూటానీయుల గుల్‌ట్రుమ్‌లు","symbol":"BTN"},"BUK":{"displayName":"BUK","symbol":"BUK"},"BWP":{"displayName":"బోట్స్‌వానా పులా","displayName-count-one":"బోట్స్‌వానా పులా","displayName-count-other":"బోట్స్‌వానా పులాలు","symbol":"BWP","symbol-alt-narrow":"P"},"BYB":{"displayName":"BYB","symbol":"BYB"},"BYN":{"displayName":"బెలరూసియన్ రూబల్","displayName-count-one":"బెలరూసియన్ రూబల్","displayName-count-other":"బెలరూసియన్ రూబల్‌లు","symbol":"BYN","symbol-alt-narrow":"р."},"BYR":{"displayName":"బెలరూసియన్ రూబల్ (2000–2016)","displayName-count-one":"బెలరూసియన్ రూబల్ (2000–2016)","displayName-count-other":"బెలరూసియన్ రూబల్‌లు (2000–2016)","symbol":"BYR"},"BZD":{"displayName":"బెలీజ్ డాలర్","displayName-count-one":"బెలీజ్ డాలర్","displayName-count-other":"బెలీజ్ డాలర్‌లు","symbol":"BZD","symbol-alt-narrow":"$"},"CAD":{"displayName":"కెనడియన్ డాలర్","displayName-count-one":"కెనడియన్ డాలర్","displayName-count-other":"కెనడియన్ డాలర్‌లు","symbol":"CA$","symbol-alt-narrow":"$"},"CDF":{"displayName":"కొంగోలిస్ ఫ్రాంక్","displayName-count-one":"కొంగోలిస్ ఫ్రాంక్","displayName-count-other":"కొంగోలిస్ ఫ్రాంక్‌లు","symbol":"CDF"},"CHE":{"displayName":"CHE","symbol":"CHE"},"CHF":{"displayName":"స్విస్ ఫ్రాంక్","displayName-count-one":"స్విస్ ఫ్రాంక్","displayName-count-other":"స్విస్ ఫ్రాంక్‌లు","symbol":"CHF"},"CHW":{"displayName":"CHW","symbol":"CHW"},"CLE":{"displayName":"CLE","symbol":"CLE"},"CLF":{"displayName":"CLF","symbol":"CLF"},"CLP":{"displayName":"చిలియన్ పెసో","displayName-count-one":"చిలియన్ పెసో","displayName-count-other":"చిలియన్ పెసోలు","symbol":"CLP","symbol-alt-narrow":"$"},"CNH":{"displayName":"చైనీస్ యూవాన్ (ఆఫ్‌షోర్)","displayName-count-one":"చైనీస్ యూవాన్ (ఆఫ్‌షోర్)","displayName-count-other":"చైనీస్ యూవాన్ (ఆఫ్‌షోర్)","symbol":"CNH"},"CNX":{"displayName":"CNX","symbol":"CNX"},"CNY":{"displayName":"చైనా దేశ యువాన్","displayName-count-one":"చైనా దేశ యువాన్","displayName-count-other":"చైనా దేశ యువాన్","symbol":"CN¥","symbol-alt-narrow":"¥"},"COP":{"displayName":"కొలంబియన్ పెసో","displayName-count-one":"కొలంబియన్ పెసో","displayName-count-other":"కొలంబియన్ పెసోలు","symbol":"COP","symbol-alt-narrow":"$"},"COU":{"displayName":"COU","symbol":"COU"},"CRC":{"displayName":"కోస్టా రికన్ కోలోన్","displayName-count-one":"కోస్టా రికన్ కోలోన్","displayName-count-other":"కోస్టా రికన్ కోలోన్‌లు","symbol":"CRC","symbol-alt-narrow":"₡"},"CSD":{"displayName":"CSD","symbol":"CSD"},"CSK":{"displayName":"CSK","symbol":"CSK"},"CUC":{"displayName":"క్యూబన్ కన్వర్టబుల్ పెసో","displayName-count-one":"క్యూబన్ కన్వర్టబుల్ పెసో","displayName-count-other":"క్యూబన్ కన్వర్టబుల్ పెసోలు","symbol":"CUC","symbol-alt-narrow":"$"},"CUP":{"displayName":"క్యూబన్ పెసో","displayName-count-one":"క్యూబన్ పెసో","displayName-count-other":"క్యూబన్ పెసోలు","symbol":"CUP","symbol-alt-narrow":"$"},"CVE":{"displayName":"కేప్ వెర్డియన్ ఎస్కుడో","displayName-count-one":"కేప్ వెర్డియన్ ఎస్కుడో","displayName-count-other":"కేప్ వెర్డియన్ ఎస్కుడోలు","symbol":"CVE"},"CYP":{"displayName":"CYP","symbol":"CYP"},"CZK":{"displayName":"చెక్ రిపబ్లిక్ కోరునా","displayName-count-one":"చెక్ రిపబ్లిక్ కోరునా","displayName-count-other":"చెక్ రిపబ్లిక్ కోరునాలు","symbol":"CZK","symbol-alt-narrow":"Kč"},"DDM":{"displayName":"DDM","symbol":"DDM"},"DEM":{"displayName":"DEM","symbol":"DEM"},"DJF":{"displayName":"జిబోటియన్ ఫ్రాంక్","displayName-count-one":"జిబోటియన్ ఫ్రాంక్","displayName-count-other":"జిబోటియన్ ఫ్రాంక్‌లు","symbol":"DJF"},"DKK":{"displayName":"డానిష్ క్రోన్","displayName-count-one":"డానిష్ క్రోన్","displayName-count-other":"డానిష్ క్రోనర్","symbol":"DKK","symbol-alt-narrow":"kr"},"DOP":{"displayName":"డోమినికన్ పెసో","displayName-count-one":"డోమినికన్ పెసో","displayName-count-other":"డోమినికన్ పెసోలు","symbol":"DOP","symbol-alt-narrow":"$"},"DZD":{"displayName":"అల్జీరియన్ దీనార్","displayName-count-one":"అల్జీరియన్ దీనార్","displayName-count-other":"అల్జీరియన్ దీనార్‌లు","symbol":"DZD"},"ECS":{"displayName":"ECS","symbol":"ECS"},"ECV":{"displayName":"ECV","symbol":"ECV"},"EEK":{"displayName":"EEK","symbol":"EEK"},"EGP":{"displayName":"ఈజిప్షియన్ పౌండ్","displayName-count-one":"ఈజిప్షియన్ పౌండ్","displayName-count-other":"ఈజిప్షియన్ పౌండ్‌లు","symbol":"EGP","symbol-alt-narrow":"E£"},"ERN":{"displayName":"ఎరిట్రీన్ నక్ఫా","displayName-count-one":"ఎరిట్రీన్ నక్ఫా","displayName-count-other":"ఎరిట్రీన్ నక్ఫా‌లు","symbol":"ERN"},"ESA":{"displayName":"ESA","symbol":"ESA"},"ESB":{"displayName":"ESB","symbol":"ESB"},"ESP":{"displayName":"ESP","symbol":"ESP","symbol-alt-narrow":"₧"},"ETB":{"displayName":"ఇథియోపియన్ బర్","displayName-count-one":"ఇథియోపియన్ బర్","displayName-count-other":"ఇథియోపియన్ బర్‌లు","symbol":"ETB"},"EUR":{"displayName":"యురొ","displayName-count-one":"యురొ","displayName-count-other":"యురోలు","symbol":"€","symbol-alt-narrow":"€"},"FIM":{"displayName":"FIM","symbol":"FIM"},"FJD":{"displayName":"ఫీజియన్ డాలర్","displayName-count-one":"ఫీజియన్ డాలర్","displayName-count-other":"ఫీజియన్ డాలర్‌లు","symbol":"FJD","symbol-alt-narrow":"$"},"FKP":{"displayName":"ఫాక్‌ల్యాండ్ దీవులు పౌండ్","displayName-count-one":"ఫాక్‌ల్యాండ్ దీవులు పౌండ్","displayName-count-other":"ఫాక్‌ల్యాండ్ దీవులు పౌండ్‌లు","symbol":"FKP","symbol-alt-narrow":"£"},"FRF":{"displayName":"FRF","symbol":"FRF"},"GBP":{"displayName":"బ్రిటిష్ పౌండ్","displayName-count-one":"బ్రిటిష్ పౌండ్","displayName-count-other":"బ్రిటిష్ పౌండ్‌లు","symbol":"£","symbol-alt-narrow":"£"},"GEK":{"displayName":"GEK","symbol":"GEK"},"GEL":{"displayName":"జార్జియన్ లారి","displayName-count-one":"జార్జియన్ లారి","displayName-count-other":"జార్జియన్ లారీలు","symbol":"GEL","symbol-alt-narrow":"₾","symbol-alt-variant":"₾"},"GHC":{"displayName":"GHC","symbol":"GHC"},"GHS":{"displayName":"గానెయన్ సెడి","displayName-count-one":"గానెయన్ సెడి","displayName-count-other":"గానెయన్ సెడిలు","symbol":"GHS"},"GIP":{"displayName":"జిబ్రల్‌టూర్ పౌండ్","displayName-count-one":"జిబ్రల్‌టూర్ పౌండ్","displayName-count-other":"జిబ్రల్‌టూర్ పౌండ్‌లు","symbol":"GIP","symbol-alt-narrow":"£"},"GMD":{"displayName":"గాంబియన్ దలాసి","displayName-count-one":"గాంబియన్ దలాసి","displayName-count-other":"గాంబియన్ దలాసిలు","symbol":"GMD"},"GNF":{"displayName":"గ్వినియన్ ఫ్రాంక్","displayName-count-one":"గ్వినియన్ ఫ్రాంక్","displayName-count-other":"గ్వినియన్ ఫ్రాంక్‌లు","symbol":"GNF","symbol-alt-narrow":"FG"},"GNS":{"displayName":"GNS","symbol":"GNS"},"GQE":{"displayName":"GQE","symbol":"GQE"},"GRD":{"displayName":"GRD","symbol":"GRD"},"GTQ":{"displayName":"గ్యుటెమాలన్ క్వెట్‌జల్","displayName-count-one":"గ్యుటెమాలన్ క్వెట్‌జల్","displayName-count-other":"గ్యుటెమాలన్ క్వెట్‌జల్‌లు","symbol":"GTQ","symbol-alt-narrow":"Q"},"GWE":{"displayName":"GWE","symbol":"GWE"},"GWP":{"displayName":"GWP","symbol":"GWP"},"GYD":{"displayName":"గుయనియాస్ డాలర్","displayName-count-one":"గుయనియాస్ డాలర్","displayName-count-other":"గుయనియాస్ డాలర్‌లు","symbol":"GYD","symbol-alt-narrow":"$"},"HKD":{"displayName":"హాంకాంగ్ డాలర్","displayName-count-one":"హాంకాంగ్ డాలర్","displayName-count-other":"హాంకాంగ్ డాలర్‌లు","symbol":"HK$","symbol-alt-narrow":"$"},"HNL":{"displayName":"హోండురన్ లెమిపిరా","displayName-count-one":"హోండురన్ లెమిపిరా","displayName-count-other":"హోండురన్ లెమిపిరాలు","symbol":"HNL","symbol-alt-narrow":"L"},"HRD":{"displayName":"HRD","symbol":"HRD"},"HRK":{"displayName":"క్రొయేషియన్ క్యూన","displayName-count-one":"క్రొయేషియన్ క్యూన","displayName-count-other":"క్రొయేషియన్ క్యూనాలు","symbol":"HRK","symbol-alt-narrow":"kn"},"HTG":{"displayName":"హైటియన్ గ్వోర్డే","displayName-count-one":"హైటియన్ గ్వోర్డే","displayName-count-other":"హైటియన్ గ్వోర్డేలు","symbol":"HTG"},"HUF":{"displayName":"హంగేరియన్ ఫోరింట్","displayName-count-one":"హంగేరియన్ ఫోరింట్","displayName-count-other":"హంగేరియన్ ఫోరింట్‌లు","symbol":"HUF","symbol-alt-narrow":"Ft"},"IDR":{"displayName":"ఇండోనేషియా రూపాయి","displayName-count-one":"ఇండోనేషియా రూపాయి","displayName-count-other":"ఇండోనేషియా రూపాయలు","symbol":"IDR","symbol-alt-narrow":"Rp"},"IEP":{"displayName":"IEP","symbol":"IEP"},"ILP":{"displayName":"ILP","symbol":"ILP"},"ILR":{"displayName":"ILR","symbol":"ILR"},"ILS":{"displayName":"ఐరాయిలి న్యూ షెక్యెల్","displayName-count-one":"ఐరాయిలి న్యూ షెక్యెల్","displayName-count-other":"ఐరాయిలి న్యూ షెక్యెల్‌లు","symbol":"₪","symbol-alt-narrow":"₪"},"INR":{"displayName":"రూపాయి","displayName-count-one":"రూపాయి","displayName-count-other":"రూపాయలు","symbol":"₹","symbol-alt-narrow":"₹"},"IQD":{"displayName":"ఇరాకీ దీనార్","displayName-count-one":"ఇరాకీ దీనార్","displayName-count-other":"ఇరాకీ దీనార్‌లు","symbol":"IQD"},"IRR":{"displayName":"ఇరానియన్ రీయల్","displayName-count-one":"ఇరానియన్ రీయల్","displayName-count-other":"ఇరానియన్ రీయల్‌లు","symbol":"IRR"},"ISJ":{"displayName":"ISJ","symbol":"ISJ"},"ISK":{"displayName":"ఐస్లాండిక్ క్రోనా","displayName-count-one":"ఐస్లాండిక్ క్రోనా","displayName-count-other":"ఐస్లాండిక్ క్రోనర్","symbol":"ISK","symbol-alt-narrow":"kr"},"ITL":{"displayName":"ITL","symbol":"ITL"},"JMD":{"displayName":"జమైకన్ డాలర్","displayName-count-one":"జమైకన్ డాలర్","displayName-count-other":"జమైకన్ డాలర్‌లు","symbol":"JMD","symbol-alt-narrow":"$"},"JOD":{"displayName":"జోర్‌డానియన్ దీనార్","displayName-count-one":"జోర్‌డానియన్ దీనార్","displayName-count-other":"జోర్‌డానియన్ దీనార్‌లు","symbol":"JOD"},"JPY":{"displayName":"జపాను దేశ యెస్","displayName-count-one":"జపాను దేశ యెస్","displayName-count-other":"జపాను దేశ యెస్","symbol":"JP¥","symbol-alt-narrow":"¥"},"KES":{"displayName":"కెన్యాన్ షిల్లింగ్","displayName-count-one":"కెన్యాన్ షిల్లింగ్","displayName-count-other":"కెన్యాన్ షిల్లింగ్‌లు","symbol":"KES"},"KGS":{"displayName":"కిర్గిస్థాని సౌమ్","displayName-count-one":"కిర్గిస్థాని సౌమ్","displayName-count-other":"కిర్గిస్థాని సౌమ్‌లు","symbol":"KGS"},"KHR":{"displayName":"కాంబోడియన్ రీల్","displayName-count-one":"కాంబోడియన్ రీల్","displayName-count-other":"కాంబోడియన్ రీల్‌లు","symbol":"KHR","symbol-alt-narrow":"៛"},"KMF":{"displayName":"కొమోరియన్ ఫ్రాంక్","displayName-count-one":"కొమోరియన్ ఫ్రాంక్","displayName-count-other":"కొమోరియన్ ఫ్రాంక్‌లు","symbol":"KMF","symbol-alt-narrow":"CF"},"KPW":{"displayName":"ఉత్తర కొరియా వోన్","displayName-count-one":"ఉత్తర కొరియా వోన్","displayName-count-other":"ఉత్తర కొరియా వోన్","symbol":"KPW","symbol-alt-narrow":"₩"},"KRH":{"displayName":"KRH","symbol":"KRH"},"KRO":{"displayName":"KRO","symbol":"KRO"},"KRW":{"displayName":"దక్షిణ కొరియా వోన్","displayName-count-one":"దక్షిణ కొరియా వోన్","displayName-count-other":"దక్షిణ కొరియా వోన్","symbol":"₩","symbol-alt-narrow":"₩"},"KWD":{"displayName":"కువైట్ దీనార్","displayName-count-one":"కువైట్ దీనార్","displayName-count-other":"కువైట్ దీనార్‌లు","symbol":"KWD"},"KYD":{"displayName":"కేమాన్ దీవుల డాలర్","displayName-count-one":"కేమాన్ దీవుల డాలర్","displayName-count-other":"కేమాన్ దీవుల డాలర్‌లు","symbol":"KYD","symbol-alt-narrow":"$"},"KZT":{"displayName":"ఖజికిస్థాన్ టెంగే","displayName-count-one":"ఖజికిస్థాన్ టెంగే","displayName-count-other":"ఖజికిస్థాన్ టెంగేలు","symbol":"KZT","symbol-alt-narrow":"₸"},"LAK":{"displayName":"లాటియన్ కిప్","displayName-count-one":"లాటియన్ కిప్","displayName-count-other":"లాటియన్ కిప్‌లు","symbol":"LAK","symbol-alt-narrow":"₭"},"LBP":{"displayName":"లెబనీస్ పౌండ్","displayName-count-one":"లెబనీస్ పౌండ్","displayName-count-other":"లెబనీస్ పౌండ్‌లు","symbol":"LBP","symbol-alt-narrow":"L£"},"LKR":{"displayName":"శ్రీలంక రూపాయి","displayName-count-one":"శ్రీలంక రూపాయి","displayName-count-other":"శ్రీలంక రూపాయలు","symbol":"LKR","symbol-alt-narrow":"Rs"},"LRD":{"displayName":"లిబేరియన్ డాలర్","displayName-count-one":"లిబేరియన్ డాలర్","displayName-count-other":"లిబేరియన్ డాలర్‌లు","symbol":"LRD","symbol-alt-narrow":"$"},"LSL":{"displayName":"లెసోధో లోటి","symbol":"LSL"},"LTL":{"displayName":"లిథోనియన్ లీటాస్","displayName-count-one":"లిథోనియన్ లీటాస్","displayName-count-other":"లిథోనియన్ లీటై","symbol":"LTL","symbol-alt-narrow":"Lt"},"LTT":{"displayName":"LTT","symbol":"LTT"},"LUC":{"displayName":"LUC","symbol":"LUC"},"LUF":{"displayName":"LUF","symbol":"LUF"},"LUL":{"displayName":"LUL","symbol":"LUL"},"LVL":{"displayName":"లాత్వియన్ లాట్స్","displayName-count-one":"లాత్వియన్ లాట్స్","displayName-count-other":"లాత్వియన్ లాటి","symbol":"LVL","symbol-alt-narrow":"Ls"},"LVR":{"displayName":"LVR","symbol":"LVR"},"LYD":{"displayName":"లిబియన్ దీనార్","displayName-count-one":"లిబియన్ దీనార్","displayName-count-other":"లిబియన్ దీనార్‌లు","symbol":"LYD"},"MAD":{"displayName":"మోరోకన్ దిర్హుమ్","displayName-count-one":"మోరోకన్ దిర్హుమ్","displayName-count-other":"మోరోకన్ దిర్హుమ్‌లు","symbol":"MAD"},"MAF":{"displayName":"MAF","symbol":"MAF"},"MCF":{"displayName":"MCF","symbol":"MCF"},"MDC":{"displayName":"MDC","symbol":"MDC"},"MDL":{"displayName":"మోల్‌డోవన్ ల్యూ","displayName-count-one":"మోల్‌డోవన్ ల్యూ","displayName-count-other":"మోల్‌డోవన్ లీ","symbol":"MDL"},"MGA":{"displayName":"మలగసీ అరియరీ","displayName-count-one":"మలగసీ అరియరీ","displayName-count-other":"మలగసీ అరియరీలు","symbol":"MGA","symbol-alt-narrow":"Ar"},"MGF":{"displayName":"MGF","symbol":"MGF"},"MKD":{"displayName":"మెసిడోనియన్ దినార్","displayName-count-one":"మెసిడోనియన్ దినార్","displayName-count-other":"మెసిడోనియన్ దినారి","symbol":"MKD"},"MKN":{"displayName":"MKN","symbol":"MKN"},"MLF":{"displayName":"MLF","symbol":"MLF"},"MMK":{"displayName":"మయన్మార్ క్యాట్","displayName-count-one":"మయన్మార్ క్యాట్","displayName-count-other":"మయన్మార్ క్యాట్‌లు","symbol":"MMK","symbol-alt-narrow":"K"},"MNT":{"displayName":"మంగోలియన్ టుగ్రిక్","displayName-count-one":"మంగోలియన్ టుగ్రిక్","displayName-count-other":"మంగోలియన్ టుగ్రిక్‌లు","symbol":"MNT","symbol-alt-narrow":"₮"},"MOP":{"displayName":"మకనీస్ పటాక","displayName-count-one":"మకనీస్ పటాక","displayName-count-other":"మకనీస్ పటాకాలు","symbol":"MOP"},"MRO":{"displayName":"మౌరిటానియన్ ఒగ్యియా","displayName-count-one":"మౌరిటానియన్ ఒగ్యియా","displayName-count-other":"మౌరిటానియన్ ఒగ్యియాలు","symbol":"MRO"},"MTL":{"displayName":"MTL","symbol":"MTL"},"MTP":{"displayName":"MTP","symbol":"MTP"},"MUR":{"displayName":"మారిషన్ రూపాయి","displayName-count-one":"మారిషన్ రూపాయి","displayName-count-other":"మారిషన్ రూపాయలు","symbol":"MUR","symbol-alt-narrow":"Rs"},"MVP":{"displayName":"MVP","symbol":"MVP"},"MVR":{"displayName":"మాల్దీవియన్ రుఫియా","displayName-count-one":"మాల్దీవియన్ రుఫియా","displayName-count-other":"మాల్దీవియన్ రుఫియాలు","symbol":"MVR"},"MWK":{"displayName":"మలావియన్ క్వాచా","displayName-count-one":"మలావియన్ క్వాచా","displayName-count-other":"మలావియన్ క్వాచాలు","symbol":"MWK"},"MXN":{"displayName":"మెక్సికన్ పెసో","displayName-count-one":"మెక్సికన్ పెసో","displayName-count-other":"మెక్సికన్ పెసోలు","symbol":"MX$","symbol-alt-narrow":"$"},"MXP":{"displayName":"MXP","symbol":"MXP"},"MXV":{"displayName":"MXV","symbol":"MXV"},"MYR":{"displayName":"మలేషియా రింగ్గిట్","displayName-count-one":"మలేషియా రింగ్గిట్","displayName-count-other":"మలేషియా రింగ్గిట్‌లు","symbol":"MYR","symbol-alt-narrow":"RM"},"MZE":{"displayName":"MZE","symbol":"MZE"},"MZM":{"displayName":"MZM","symbol":"MZM"},"MZN":{"displayName":"మొజాంబికన్ మెటికల్","displayName-count-one":"మొజాంబికన్ మెటికల్","displayName-count-other":"మొజాంబికన్ మెటికల్‌లు","symbol":"MZN"},"NAD":{"displayName":"నమిబియన్ డాలర్","displayName-count-one":"నమిబియన్ డాలర్","displayName-count-other":"నమిబియన్ డాలర్‌లు","symbol":"NAD","symbol-alt-narrow":"$"},"NGN":{"displayName":"నైజీరియన్ నైరా","displayName-count-one":"నైజీరియన్ నైరా","displayName-count-other":"నైజీరియన్ నైరాలు","symbol":"NGN","symbol-alt-narrow":"₦"},"NIC":{"displayName":"NIC","symbol":"NIC"},"NIO":{"displayName":"నికరగ్యుయన్ కొర్‌డుబు","displayName-count-one":"నికరగ్యుయన్ కొర్‌డుబు","displayName-count-other":"నికరగ్యుయన్ కొర్‌డుబులు","symbol":"NIO","symbol-alt-narrow":"C$"},"NLG":{"displayName":"NLG","symbol":"NLG"},"NOK":{"displayName":"నార్వేజీయన్ క్రోన్","displayName-count-one":"నార్వేజీయన్ క్రోన్","displayName-count-other":"నార్వేజీయన్ క్రోనర్","symbol":"NOK","symbol-alt-narrow":"kr"},"NPR":{"displayName":"నేపాలీయుల రూపాయి","displayName-count-one":"నేపాలీయుల రూపాయి","displayName-count-other":"నేపాలీయుల రూపాయలు","symbol":"NPR","symbol-alt-narrow":"Rs"},"NZD":{"displayName":"న్యూజిలాండ్ డాలర్","displayName-count-one":"న్యూజిలాండ్ డాలర్","displayName-count-other":"న్యూజిలాండ్ డాలర్‌లు","symbol":"NZ$","symbol-alt-narrow":"$"},"OMR":{"displayName":"ఒమాని రీయల్","displayName-count-one":"ఒమాని రీయల్","displayName-count-other":"ఒమాని రీయల్‌లు","symbol":"OMR"},"PAB":{"displayName":"పనామనియన్ బల్బోవ","displayName-count-one":"పనామనియన్ బల్బోవ","displayName-count-other":"పనామనియన్ బల్బోవాలు","symbol":"PAB"},"PEI":{"displayName":"PEI","symbol":"PEI"},"PEN":{"displayName":"పెరువియన్ సోల్","displayName-count-one":"పెరువియన్ సోల్","displayName-count-other":"పెరువియన్ సోల్‌లు","symbol":"PEN"},"PES":{"displayName":"PES","symbol":"PES"},"PGK":{"displayName":"పప్యూ న్యూ గ్యినియన్ కినా","displayName-count-one":"పప్యూ న్యూ గ్యినియన్ కినా","displayName-count-other":"పప్యూ న్యూ గ్యినియన్ కినా","symbol":"PGK"},"PHP":{"displayName":"ఫిలిప్పిన్ పెసో","displayName-count-one":"ఫిలిప్పిన్ పెసో","displayName-count-other":"ఫిలిప్పిన్ పెసోలు","symbol":"PHP","symbol-alt-narrow":"₱"},"PKR":{"displayName":"పాకిస్థాన్ రూపాయి","displayName-count-one":"పాకిస్థాన్ రూపాయి","displayName-count-other":"పాకిస్థాన్ రూపాయలు","symbol":"PKR","symbol-alt-narrow":"Rs"},"PLN":{"displayName":"పోలిష్ జ్లోటీ","displayName-count-one":"పోలిష్ జ్లోటీ","displayName-count-other":"పోలిష్ జ్లోటీలు","symbol":"PLN","symbol-alt-narrow":"zł"},"PLZ":{"displayName":"PLZ","symbol":"PLZ"},"PTE":{"displayName":"PTE","symbol":"PTE"},"PYG":{"displayName":"పరగ్వాయన్ గ్వారని","displayName-count-one":"పరగ్వాయన్ గ్వారని","displayName-count-other":"పరగ్వాయన్ గ్వారనీలు","symbol":"PYG","symbol-alt-narrow":"₲"},"QAR":{"displayName":"క్వాటరి రీయల్","displayName-count-one":"క్వాటరి రీయల్","displayName-count-other":"క్వాటరి రీయల్‌లు","symbol":"QAR"},"RHD":{"displayName":"RHD","symbol":"RHD"},"ROL":{"displayName":"ROL","symbol":"ROL"},"RON":{"displayName":"రోమానియాన్ లెయు","displayName-count-one":"రోమానియాన్ లెయు","displayName-count-other":"రోమానియాన్ లీ","symbol":"RON","symbol-alt-narrow":"lei"},"RSD":{"displayName":"సెర్బియన్ దీనార్","displayName-count-one":"సెర్బియన్ దీనార్","displayName-count-other":"సెర్బియన్ దీనార్‌లు","symbol":"RSD"},"RUB":{"displayName":"రష్యన్ రూబల్","displayName-count-one":"రష్యన్ రూబల్","displayName-count-other":"రష్యన్ రూబల్‌లు","symbol":"RUB","symbol-alt-narrow":"₽"},"RUR":{"displayName":"RUR","symbol":"RUR","symbol-alt-narrow":"р."},"RWF":{"displayName":"ర్వానడాన్ ఫ్రాంక్","displayName-count-one":"ర్వానడాన్ ఫ్రాంక్","displayName-count-other":"ర్వానడాన్ ఫ్రాంక్‌లు","symbol":"RWF","symbol-alt-narrow":"RF"},"SAR":{"displayName":"సౌది రియల్","displayName-count-one":"సౌది రియల్","displayName-count-other":"సౌది రియల్‌లు","symbol":"SAR"},"SBD":{"displayName":"సోలోమన్ దీవుల డాలర్","displayName-count-one":"సోలోమన్ దీవుల డాలర్","displayName-count-other":"సోలోమన్ దీవుల డాలర్‌లు","symbol":"SBD","symbol-alt-narrow":"$"},"SCR":{"displayName":"సెయిచెల్లోయిస్ రూపాయి","displayName-count-one":"సెయిచెల్లోయిస్ రూపాయి","displayName-count-other":"సెయిచెల్లోయిస్ రూపాయలు","symbol":"SCR"},"SDD":{"displayName":"SDD","symbol":"SDD"},"SDG":{"displayName":"సుడానీస్ పౌండ్","displayName-count-one":"సుడానీస్ పౌండ్","displayName-count-other":"సుడానీస్ పౌండ్‌లు","symbol":"SDG"},"SDP":{"displayName":"SDP","symbol":"SDP"},"SEK":{"displayName":"స్వీడిష్ క్రోనా","displayName-count-one":"స్వీడిష్ క్రోనా","displayName-count-other":"స్వీడిష్ క్రోనర్","symbol":"SEK","symbol-alt-narrow":"kr"},"SGD":{"displayName":"సింగపూర్ డాలర్","displayName-count-one":"సింగపూర్ డాలర్","displayName-count-other":"సింగపూర్ డాలర్‌లు","symbol":"SGD","symbol-alt-narrow":"$"},"SHP":{"displayName":"సెయింట్ హెలెనా పౌండ్","displayName-count-one":"సెయింట్ హెలెనా పౌండ్","displayName-count-other":"సెయింట్ హెలెనా పౌండ్‌లు","symbol":"SHP","symbol-alt-narrow":"£"},"SIT":{"displayName":"SIT","symbol":"SIT"},"SKK":{"displayName":"SKK","symbol":"SKK"},"SLL":{"displayName":"సీయిరు లియోనియన్ లీయోన్","displayName-count-one":"సీయిరు లియోనియన్ లీయోన్","displayName-count-other":"సీయిరు లియోనియన్ లీయోన్‌లు","symbol":"SLL"},"SOS":{"displayName":"సొమాలి షిల్లింగ్","displayName-count-one":"సొమాలి షిల్లింగ్","displayName-count-other":"సొమాలి షిల్లింగ్‌లు","symbol":"SOS"},"SRD":{"displayName":"సురినామీయుల డాలర్","displayName-count-one":"సురినామీయుల డాలర్","displayName-count-other":"సురినామీయుల డాలర్‌లు","symbol":"SRD","symbol-alt-narrow":"$"},"SRG":{"displayName":"SRG","symbol":"SRG"},"SSP":{"displayName":"దక్షిణ సుడానీస్ పౌండ్","displayName-count-one":"దక్షిణ సుడానీస్ పౌండ్","displayName-count-other":"దక్షిణ సుడానీస్ పౌండ్‌లు","symbol":"SSP","symbol-alt-narrow":"£"},"STD":{"displayName":"సావో టోమ్ మరియు ప్రిన్సిపి డోబ్రా","displayName-count-one":"సావో టోమ్ మరియు ప్రిన్సిపి డోబ్రా","displayName-count-other":"సావో టోమ్ మరియు ప్రిన్సిపి డోబ్రాలు","symbol":"STD","symbol-alt-narrow":"Db"},"STN":{"displayName":"STN","symbol":"STN"},"SUR":{"displayName":"SUR","symbol":"SUR"},"SVC":{"displayName":"SVC","symbol":"SVC"},"SYP":{"displayName":"సిరీయన్ పౌండ్","displayName-count-one":"సిరీయన్ పౌండ్","displayName-count-other":"సిరీయన్ పౌండ్‌లు","symbol":"SYP","symbol-alt-narrow":"£"},"SZL":{"displayName":"స్వాజి లిలాన్గేని","displayName-count-one":"స్వాజి లిలాన్గేని","displayName-count-other":"స్వాజి ఎమలాన్గేని","symbol":"SZL"},"THB":{"displayName":"థాయ్ బాట్","displayName-count-one":"థాయ్ బాట్","displayName-count-other":"థాయ్ బాట్","symbol":"฿","symbol-alt-narrow":"฿"},"TJR":{"displayName":"TJR","symbol":"TJR"},"TJS":{"displayName":"తజికిస్థాన్ సమోని","displayName-count-one":"తజికిస్థాన్ సమోని","displayName-count-other":"తజికిస్థాన్ సమోనీలు","symbol":"TJS"},"TMM":{"displayName":"TMM","symbol":"TMM"},"TMT":{"displayName":"తుర్క్‌మెనిస్థాని మనాట్","displayName-count-one":"తుర్క్‌మెనిస్థాని మనాట్","displayName-count-other":"తుర్క్‌మెనిస్థాని మనాట్","symbol":"TMT"},"TND":{"displayName":"తునీషియన్ దీనార్","displayName-count-one":"తునీషియన్ దీనార్","displayName-count-other":"తునీషియన్ దీనార్‌లు","symbol":"TND"},"TOP":{"displayName":"టోంగాన్ పాంʻగా","displayName-count-one":"టోంగాన్ పాంʻగా","displayName-count-other":"టోంగాన్ పాంʻగా","symbol":"TOP","symbol-alt-narrow":"T$"},"TPE":{"displayName":"TPE","symbol":"TPE"},"TRL":{"displayName":"TRL","symbol":"TRL"},"TRY":{"displayName":"తుర్కిష్ లిరా","displayName-count-one":"తుర్కిష్ లిరా","displayName-count-other":"తుర్కిష్ లిరా","symbol":"TRY","symbol-alt-narrow":"₺","symbol-alt-variant":"TL"},"TTD":{"displayName":"ట్రినిడాడ్ మరియు టొబాగో డాలర్","displayName-count-one":"ట్రినిడాడ్ మరియు టొబాగో డాలర్","displayName-count-other":"ట్రినిడాడ్ మరియు టొబాగో డాలర్‌లు","symbol":"TTD","symbol-alt-narrow":"$"},"TWD":{"displayName":"క్రొత్త తైవాన్ డాలర్","displayName-count-one":"క్రొత్త తైవాన్ డాలర్","displayName-count-other":"కొత్త తైవాన్ డాలర్‌లు","symbol":"NT$","symbol-alt-narrow":"NT$"},"TZS":{"displayName":"టాంజానియన్ షిల్లింగ్","displayName-count-one":"టాంజానియన్ షిల్లింగ్","displayName-count-other":"టాంజానియన్ షిల్లింగ్‌లు","symbol":"TZS"},"UAH":{"displayName":"ఉక్రయినియన్ హ్రివ్‌నియా","displayName-count-one":"ఉక్రయినియన్ హ్రివ్‌నియా","displayName-count-other":"ఉక్రయినియన్ హ్రివ్‌నియాలు","symbol":"UAH","symbol-alt-narrow":"₴"},"UAK":{"displayName":"UAK","symbol":"UAK"},"UGS":{"displayName":"UGS","symbol":"UGS"},"UGX":{"displayName":"ఉగాండన్ షిల్లింగ్","displayName-count-one":"ఉగాండన్ షిల్లింగ్","displayName-count-other":"ఉగాండన్ షిల్లింగ్‌లు","symbol":"UGX"},"USD":{"displayName":"అమెరికా డాలర్","displayName-count-one":"అమెరికా డాలర్","displayName-count-other":"అమెరికా డాలర్‌లు","symbol":"$","symbol-alt-narrow":"$"},"USN":{"displayName":"USN","symbol":"USN"},"USS":{"displayName":"USS","symbol":"USS"},"UYI":{"displayName":"UYI","symbol":"UYI"},"UYP":{"displayName":"UYP","symbol":"UYP"},"UYU":{"displayName":"ఉరుగ్వెయన్ పెసో","displayName-count-one":"ఉరుగ్వెయన్ పెసో","displayName-count-other":"ఉరుగ్వెయన్ పెసోలు","symbol":"UYU","symbol-alt-narrow":"$"},"UZS":{"displayName":"ఉజ్‌బెకిస్తాన్ సౌమ్","displayName-count-one":"ఉజ్‌బెకిస్తాన్ సౌమ్","displayName-count-other":"ఉజ్‌బెకిస్తాన్ సౌమ్","symbol":"UZS"},"VEB":{"displayName":"VEB","symbol":"VEB"},"VEF":{"displayName":"వెనుజులా బోలివర్","displayName-count-one":"వెనుజులా బోలివర్","displayName-count-other":"వెనుజులా బోలివర్‌లు","symbol":"VEF","symbol-alt-narrow":"Bs"},"VND":{"displayName":"వియత్నామీయుల డాంగ్","displayName-count-one":"వియత్నామీయుల డాంగ్","displayName-count-other":"వియత్నామీయుల డాంగ్","symbol":"₫","symbol-alt-narrow":"₫"},"VNN":{"displayName":"VNN","symbol":"VNN"},"VUV":{"displayName":"వనాటు వటు","displayName-count-one":"వనాటు వటు","displayName-count-other":"వవాటు వటూలు","symbol":"VUV"},"WST":{"displayName":"సమోయన్ తాలా","displayName-count-one":"సమోయన్ తాలా","displayName-count-other":"సమోయన్ తాలా","symbol":"WST"},"XAF":{"displayName":"సెంట్రల్ ఆఫ్రికన్ సిఎఫ్‌ఎ ఫ్రాంక్","displayName-count-one":"సెంట్రల్ ఆఫ్రికన్ సిఎఫ్‌ఎ ఫ్రాంక్","displayName-count-other":"సెంట్రల్ ఆఫ్రికన్ సిఎఫ్‌ఎ ఫ్రాంక్‌లు","symbol":"FCFA"},"XAG":{"displayName":"XAG","symbol":"XAG"},"XAU":{"displayName":"XAU","symbol":"XAU"},"XBA":{"displayName":"XBA","symbol":"XBA"},"XBB":{"displayName":"XBB","symbol":"XBB"},"XBC":{"displayName":"XBC","symbol":"XBC"},"XBD":{"displayName":"XBD","symbol":"XBD"},"XCD":{"displayName":"తూర్పు కరీబియన్ డాలర్","displayName-count-one":"తూర్పు కరీబియన్ డాలర్","displayName-count-other":"తూర్పు కరీబియన్ డాలర్‌లు","symbol":"EC$","symbol-alt-narrow":"$"},"XDR":{"displayName":"XDR","symbol":"XDR"},"XEU":{"displayName":"XEU","symbol":"XEU"},"XFO":{"displayName":"XFO","symbol":"XFO"},"XFU":{"displayName":"XFU","symbol":"XFU"},"XOF":{"displayName":"పశ్చిమ ఆఫ్రికన్ సిఏఫ్ఏ ఫ్రాంక్","displayName-count-one":"పశ్చిమ ఆఫ్రికన్ సిఏఫ్ఏ ఫ్రాంక్","displayName-count-other":"పశ్చిమ ఆఫ్రికన్ సిఏఫ్ఏ ఫ్రాంక్‌లు","symbol":"CFA"},"XPD":{"displayName":"XPD","symbol":"XPD"},"XPF":{"displayName":"సిఎఫ్‌పి ఫ్రాంక్","displayName-count-one":"సిఎఫ్‌పి ఫ్రాంక్","displayName-count-other":"సిఎఫ్‌పి ఫ్రాంక్‌లు","symbol":"CFPF"},"XPT":{"displayName":"XPT","symbol":"XPT"},"XRE":{"displayName":"XRE","symbol":"XRE"},"XSU":{"displayName":"XSU","symbol":"XSU"},"XTS":{"displayName":"XTS","symbol":"XTS"},"XUA":{"displayName":"XUA","symbol":"XUA"},"XXX":{"displayName":"తెలియని కరెన్సీ","displayName-count-one":"తెలియని కరెన్సీ ప్రమాణం","displayName-count-other":"తెలియని కరెన్సీ","symbol":"XXX"},"YDD":{"displayName":"YDD","symbol":"YDD"},"YER":{"displayName":"ఎమునీ రీయల్","displayName-count-one":"ఎమునీ రీయల్","displayName-count-other":"ఎమునీ రీయల్‌లు","symbol":"YER"},"YUD":{"displayName":"YUD","symbol":"YUD"},"YUM":{"displayName":"YUM","symbol":"YUM"},"YUN":{"displayName":"YUN","symbol":"YUN"},"YUR":{"displayName":"YUR","symbol":"YUR"},"ZAL":{"displayName":"ZAL","symbol":"ZAL"},"ZAR":{"displayName":"దక్షిణ ఆఫ్రికా ర్యాండ్","displayName-count-one":"దక్షిణ ఆఫ్రికా ర్యాండ్","displayName-count-other":"దక్షిణ ఆఫ్రికా ర్యాండ్","symbol":"ZAR","symbol-alt-narrow":"R"},"ZMK":{"displayName":"జాంబియన్ క్వాచా (1968–2012)","symbol":"ZMK"},"ZMW":{"displayName":"జాంబియన్ క్వాచా","displayName-count-one":"జాంబియన్ క్వాచా","displayName-count-other":"జాంబియన్ క్వాచాలు","symbol":"ZMW","symbol-alt-narrow":"ZK"},"ZRN":{"displayName":"ZRN","symbol":"ZRN"},"ZRZ":{"displayName":"ZRZ","symbol":"ZRZ"},"ZWD":{"displayName":"ZWD","symbol":"ZWD"},"ZWL":{"displayName":"ZWL","symbol":"ZWL"},"ZWR":{"displayName":"ZWR","symbol":"ZWR"}},"defaultNumberingSystem":"latn","otherNumberingSystems":{"native":"telu"},"minimumGroupingDigits":"1","symbols-numberSystem-latn":{"decimal":".","group":",","list":";","percentSign":"%","plusSign":"+","minusSign":"-","exponential":"E","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"NaN","timeSeparator":":"},"symbols-numberSystem-telu":{"decimal":".","group":",","list":";","percentSign":"%","plusSign":"+","minusSign":"-","exponential":"E","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"NaN","timeSeparator":":"},"decimalFormats-numberSystem-latn":{"standard":"#,##,##0.###","long":{"decimalFormat":{"1000-count-one":"0 వేయి","1000-count-other":"0 వేలు","10000-count-one":"00 వేలు","10000-count-other":"00 వేలు","100000-count-one":"000 వేలు","100000-count-other":"000 వేలు","1000000-count-one":"0 మిలియన్","1000000-count-other":"0 మిలియన్లు","10000000-count-one":"00 మిలియన్లు","10000000-count-other":"00 మిలియన్లు","100000000-count-one":"000 మిలియన్లు","100000000-count-other":"000 మిలియన్లు","1000000000-count-one":"0 బిలియన్","1000000000-count-other":"0 బిలియన్లు","10000000000-count-one":"00 బిలియన్లు","10000000000-count-other":"00 బిలియన్లు","100000000000-count-one":"000 బిలియన్లు","100000000000-count-other":"000 బిలియన్లు","1000000000000-count-one":"0 ట్రిలియన్","1000000000000-count-other":"0 ట్రిలియన్లు","10000000000000-count-one":"00 ట్రిలియన్లు","10000000000000-count-other":"00 ట్రిలియన్లు","100000000000000-count-one":"000 ట్రిలియన్లు","100000000000000-count-other":"000 ట్రిలియన్లు"}},"short":{"decimalFormat":{"1000-count-one":"0వే","1000-count-other":"0వే","10000-count-one":"00వే","10000-count-other":"00వే","100000-count-one":"000వే","100000-count-other":"000వే","1000000-count-one":"0మి","1000000-count-other":"0మి","10000000-count-one":"00మి","10000000-count-other":"00మి","100000000-count-one":"000మి","100000000-count-other":"000మి","1000000000-count-one":"0బి","1000000000-count-other":"0బి","10000000000-count-one":"00బి","10000000000-count-other":"00బి","100000000000-count-one":"000బి","100000000000-count-other":"000బి","1000000000000-count-one":"0ట్రి","1000000000000-count-other":"0ట్రి","10000000000000-count-one":"00ట్రి","10000000000000-count-other":"00ట్రి","100000000000000-count-one":"000ట్రి","100000000000000-count-other":"000ట్రి"}}},"decimalFormats-numberSystem-telu":{"standard":"#,##0.###","long":{"decimalFormat":{"1000-count-one":"0 వేయి","1000-count-other":"0 వేలు","10000-count-one":"00 వేలు","10000-count-other":"00 వేలు","100000-count-one":"000 వేలు","100000-count-other":"000 వేలు","1000000-count-one":"0 మిలియన్","1000000-count-other":"0 మిలియన్లు","10000000-count-one":"00 మిలియన్లు","10000000-count-other":"00 మిలియన్లు","100000000-count-one":"000 మిలియన్లు","100000000-count-other":"000 మిలియన్లు","1000000000-count-one":"0 బిలియన్","1000000000-count-other":"0 బిలియన్లు","10000000000-count-one":"00 బిలియన్లు","10000000000-count-other":"00 బిలియన్లు","100000000000-count-one":"000 బిలియన్లు","100000000000-count-other":"000 బిలియన్లు","1000000000000-count-one":"0 ట్రిలియన్","1000000000000-count-other":"0 ట్రిలియన్లు","10000000000000-count-one":"00 ట్రిలియన్లు","10000000000000-count-other":"00 ట్రిలియన్లు","100000000000000-count-one":"000 ట్రిలియన్లు","100000000000000-count-other":"000 ట్రిలియన్లు"}},"short":{"decimalFormat":{"1000-count-one":"0వే","1000-count-other":"0వే","10000-count-one":"00వే","10000-count-other":"00వే","100000-count-one":"000వే","100000-count-other":"000వే","1000000-count-one":"0మి","1000000-count-other":"0మి","10000000-count-one":"00మి","10000000-count-other":"00మి","100000000-count-one":"000మి","100000000-count-other":"000మి","1000000000-count-one":"0బి","1000000000-count-other":"0బి","10000000000-count-one":"00బి","10000000000-count-other":"00బి","100000000000-count-one":"000బి","100000000000-count-other":"000బి","1000000000000-count-one":"0ట్రి","1000000000000-count-other":"0ట్రి","10000000000000-count-one":"00ట్రి","10000000000000-count-other":"00ట్రి","100000000000000-count-one":"000ట్రి","100000000000000-count-other":"000ట్రి"}}},"scientificFormats-numberSystem-latn":{"standard":"#E0"},"scientificFormats-numberSystem-telu":{"standard":"#E0"},"percentFormats-numberSystem-latn":{"standard":"#,##0%"},"percentFormats-numberSystem-telu":{"standard":"#,##0%"},"currencyFormats-numberSystem-latn":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"¤#,##,##0.00","accounting":"¤#,##,##0.00;(¤#,##,##0.00)","short":{"standard":{"1000-count-one":"¤0వే","1000-count-other":"¤0వే","10000-count-one":"¤00వే","10000-count-other":"¤00వే","100000-count-one":"¤000వే","100000-count-other":"¤000వే","1000000-count-one":"¤0మి","1000000-count-other":"¤0మి","10000000-count-one":"¤00మి","10000000-count-other":"¤00మి","100000000-count-one":"¤000మి","100000000-count-other":"¤000మి","1000000000-count-one":"¤0బి","1000000000-count-other":"¤0బి","10000000000-count-one":"¤00బి","10000000000-count-other":"¤00బి","100000000000-count-one":"¤000బి","100000000000-count-other":"¤000బి","1000000000000-count-one":"¤0ట్రి","1000000000000-count-other":"¤0ట్రి","10000000000000-count-one":"¤00ట్రి","10000000000000-count-other":"¤00ట్రి","100000000000000-count-one":"¤000ట్రి","100000000000000-count-other":"¤000ట్రి"}},"unitPattern-count-one":"{0} {1}","unitPattern-count-other":"{0} {1}"},"currencyFormats-numberSystem-telu":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"¤#,##,##0.00","accounting":"¤#,##,##0.00;(¤#,##,##0.00)","short":{"standard":{"1000-count-one":"¤0వే","1000-count-other":"¤0వే","10000-count-one":"¤00వే","10000-count-other":"¤00వే","100000-count-one":"¤000వే","100000-count-other":"¤000వే","1000000-count-one":"¤0మి","1000000-count-other":"¤0మి","10000000-count-one":"¤00మి","10000000-count-other":"¤00మి","100000000-count-one":"¤000మి","100000000-count-other":"¤000మి","1000000000-count-one":"¤0బి","1000000000-count-other":"¤0బి","10000000000-count-one":"¤00బి","10000000000-count-other":"¤00బి","100000000000-count-one":"¤000బి","100000000000-count-other":"¤000బి","1000000000000-count-one":"¤0ట్రి","1000000000000-count-other":"¤0ట్రి","10000000000000-count-one":"¤00ట్రి","10000000000000-count-other":"¤00ట్రి","100000000000000-count-one":"¤000ట్రి","100000000000000-count-other":"¤000ట్రి"}},"unitPattern-count-one":"{0} {1}","unitPattern-count-other":"{0} {1}"},"miscPatterns-numberSystem-latn":{"atLeast":"{0}+","range":"{0}–{1}"},"miscPatterns-numberSystem-telu":{"atLeast":"{0}+","range":"{0}–{1}"},"minimalPairs":{"pluralMinimalPairs-count-one":"{0} రోజు","pluralMinimalPairs-count-other":"{0} రోజులు","other":"{0}వ కుడి మలుపు తీసుకోండి."}}},"th":{"identity":{"version":{"_number":"$Revision: 13756 $","_cldrVersion":"32"},"language":"th"},"dates":{"calendars":{"gregorian":{"months":{"format":{"abbreviated":{"1":"ม.ค.","2":"ก.พ.","3":"มี.ค.","4":"เม.ย.","5":"พ.ค.","6":"มิ.ย.","7":"ก.ค.","8":"ส.ค.","9":"ก.ย.","10":"ต.ค.","11":"พ.ย.","12":"ธ.ค."},"narrow":{"1":"ม.ค.","2":"ก.พ.","3":"มี.ค.","4":"เม.ย.","5":"พ.ค.","6":"มิ.ย.","7":"ก.ค.","8":"ส.ค.","9":"ก.ย.","10":"ต.ค.","11":"พ.ย.","12":"ธ.ค."},"wide":{"1":"มกราคม","2":"กุมภาพันธ์","3":"มีนาคม","4":"เมษายน","5":"พฤษภาคม","6":"มิถุนายน","7":"กรกฎาคม","8":"สิงหาคม","9":"กันยายน","10":"ตุลาคม","11":"พฤศจิกายน","12":"ธันวาคม"}},"stand-alone":{"abbreviated":{"1":"ม.ค.","2":"ก.พ.","3":"มี.ค.","4":"เม.ย.","5":"พ.ค.","6":"มิ.ย.","7":"ก.ค.","8":"ส.ค.","9":"ก.ย.","10":"ต.ค.","11":"พ.ย.","12":"ธ.ค."},"narrow":{"1":"ม.ค.","2":"ก.พ.","3":"มี.ค.","4":"เม.ย.","5":"พ.ค.","6":"มิ.ย.","7":"ก.ค.","8":"ส.ค.","9":"ก.ย.","10":"ต.ค.","11":"พ.ย.","12":"ธ.ค."},"wide":{"1":"มกราคม","2":"กุมภาพันธ์","3":"มีนาคม","4":"เมษายน","5":"พฤษภาคม","6":"มิถุนายน","7":"กรกฎาคม","8":"สิงหาคม","9":"กันยายน","10":"ตุลาคม","11":"พฤศจิกายน","12":"ธันวาคม"}}},"days":{"format":{"abbreviated":{"sun":"อา.","mon":"จ.","tue":"อ.","wed":"พ.","thu":"พฤ.","fri":"ศ.","sat":"ส."},"narrow":{"sun":"อา","mon":"จ","tue":"อ","wed":"พ","thu":"พฤ","fri":"ศ","sat":"ส"},"short":{"sun":"อา.","mon":"จ.","tue":"อ.","wed":"พ.","thu":"พฤ.","fri":"ศ.","sat":"ส."},"wide":{"sun":"วันอาทิตย์","mon":"วันจันทร์","tue":"วันอังคาร","wed":"วันพุธ","thu":"วันพฤหัสบดี","fri":"วันศุกร์","sat":"วันเสาร์"}},"stand-alone":{"abbreviated":{"sun":"อา.","mon":"จ.","tue":"อ.","wed":"พ.","thu":"พฤ.","fri":"ศ.","sat":"ส."},"narrow":{"sun":"อา","mon":"จ","tue":"อ","wed":"พ","thu":"พฤ","fri":"ศ","sat":"ส"},"short":{"sun":"อา.","mon":"จ.","tue":"อ.","wed":"พ.","thu":"พฤ.","fri":"ศ.","sat":"ส."},"wide":{"sun":"วันอาทิตย์","mon":"วันจันทร์","tue":"วันอังคาร","wed":"วันพุธ","thu":"วันพฤหัสบดี","fri":"วันศุกร์","sat":"วันเสาร์"}}},"quarters":{"format":{"abbreviated":{"1":"ไตรมาส 1","2":"ไตรมาส 2","3":"ไตรมาส 3","4":"ไตรมาส 4"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"ไตรมาส 1","2":"ไตรมาส 2","3":"ไตรมาส 3","4":"ไตรมาส 4"}},"stand-alone":{"abbreviated":{"1":"ไตรมาส 1","2":"ไตรมาส 2","3":"ไตรมาส 3","4":"ไตรมาส 4"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"ไตรมาส 1","2":"ไตรมาส 2","3":"ไตรมาส 3","4":"ไตรมาส 4"}}},"dayPeriods":{"format":{"abbreviated":{"midnight":"เที่ยงคืน","am":"ก่อนเที่ยง","noon":"เที่ยง","pm":"หลังเที่ยง","morning1":"ในตอนเช้า","afternoon1":"ในตอนบ่าย","afternoon2":"บ่าย","evening1":"ในตอนเย็น","evening2":"ค่ำ","night1":"กลางคืน"},"narrow":{"midnight":"เที่ยงคืน","am":"a","noon":"n","pm":"p","morning1":"เช้า","afternoon1":"เที่ยง","afternoon2":"บ่าย","evening1":"เย็น","evening2":"ค่ำ","night1":"กลางคืน"},"wide":{"midnight":"เที่ยงคืน","am":"ก่อนเที่ยง","noon":"เที่ยง","pm":"หลังเที่ยง","morning1":"ในตอนเช้า","afternoon1":"ในตอนบ่าย","afternoon2":"บ่าย","evening1":"ในตอนเย็น","evening2":"ค่ำ","night1":"กลางคืน"}},"stand-alone":{"abbreviated":{"midnight":"เที่ยงคืน","am":"ก่อนเที่ยง","noon":"เที่ยง","pm":"หลังเที่ยง","morning1":"ในตอนเช้า","afternoon1":"ในตอนบ่าย","afternoon2":"บ่าย","evening1":"ในตอนเย็น","evening2":"ค่ำ","night1":"กลางคืน"},"narrow":{"midnight":"เที่ยงคืน","am":"ก่อนเที่ยง","noon":"เที่ยง","pm":"หลังเที่ยง","morning1":"เช้า","afternoon1":"ช่วงเที่ยง","afternoon2":"บ่าย","evening1":"เย็น","evening2":"ค่ำ","night1":"กลางคืน"},"wide":{"midnight":"เที่ยงคืน","am":"ก่อนเที่ยง","noon":"เที่ยง","pm":"หลังเที่ยง","morning1":"ในตอนเช้า","afternoon1":"ในตอนบ่าย","afternoon2":"บ่าย","evening1":"ในตอนเย็น","evening2":"ค่ำ","night1":"กลางคืน"}}},"eras":{"eraNames":{"0":"ปีก่อนคริสต์ศักราช","1":"คริสต์ศักราช","0-alt-variant":"ก่อนสามัญศักราช","1-alt-variant":"สามัญศักราช"},"eraAbbr":{"0":"ปีก่อน ค.ศ.","1":"ค.ศ.","0-alt-variant":"ก.ส.ศ.","1-alt-variant":"ส.ศ."},"eraNarrow":{"0":"ก่อน ค.ศ.","1":"ค.ศ.","0-alt-variant":"ก.ส.ศ.","1-alt-variant":"ส.ศ."}},"dateFormats":{"full":"EEEEที่ d MMMM G y","long":"d MMMM G y","medium":"d MMM y","short":"d/M/yy"},"timeFormats":{"full":"H นาฬิกา mm นาที ss วินาที zzzz","long":"H นาฬิกา mm นาที ss วินาที z","medium":"HH:mm:ss","short":"HH:mm"},"dateTimeFormats":{"full":"{1} {0}","long":"{1} {0}","medium":"{1} {0}","short":"{1} {0}","availableFormats":{"Bh":"h B","Bhm":"h:mm B","Bhms":"h:mm:ss B","d":"d","E":"ccc","EBhm":"E h:mm B","EBhms":"E h:mm:ss B","Ed":"E d","Ehm":"E h:mm a","EHm":"E HH:mm น.","Ehms":"E h:mm:ss a","EHms":"E HH:mm:ss","Gy":"G y","GyMMM":"MMM G y","GyMMMd":"d MMM G y","GyMMMEd":"E d MMM G y","GyMMMEEEEd":"EEEEที่ d MMM G y","h":"h a","H":"HH","hm":"h:mm a","Hm":"HH:mm น.","hms":"h:mm:ss a","Hms":"HH:mm:ss","hmsv":"h:mm:ss a v","Hmsv":"HH:mm:ss v","hmv":"h:mm น. a v","Hmv":"HH:mm v","M":"L","Md":"d/M","MEd":"E d/M","MMM":"LLL","MMMd":"d MMM","MMMEd":"E d MMM","MMMEEEEd":"EEEEที่ d MMM","MMMMd":"d MMMM","MMMMEd":"E d MMMM","MMMMEEEEd":"EEEEที่ d MMMM","MMMMW-count-other":"สัปดาห์ที่ W ของ MMM","mmss":"mm:ss","ms":"mm:ss","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"E d/M/y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"E d MMM y","yMMMEEEEd":"EEEEที่ d MMM y","yMMMM":"MMMM G y","yMMMMd":"d MMMM G y","yMMMMEd":"E d MMMM G y","yMMMMEEEEd":"EEEEที่ d MMMM G y","yQQQ":"QQQ y","yQQQQ":"QQQQ G y","yw-count-other":"สัปดาห์ที่ w ของ Y"},"appendItems":{"Day":"{0} ({2}: {1})","Day-Of-Week":"{0} {1}","Era":"{1} {0}","Hour":"{0} ({2}: {1})","Minute":"{0} ({2}: {1})","Month":"{0} ({2}: {1})","Quarter":"{0} ({2}: {1})","Second":"{0} ({2}: {1})","Timezone":"{0} {1}","Week":"{0} ({2}: {1})","Year":"{1} {0}"},"intervalFormats":{"intervalFormatFallback":"{0} – {1}","d":{"d":"d–d"},"h":{"a":"h a – h a","h":"h–h a"},"H":{"H":"HH–HH"},"hm":{"a":"h:mm a – h:mm a","h":"h:mm–h:mm a","m":"h:mm–h:mm a"},"Hm":{"H":"HH:mm น. – HH:mm น.","m":"HH:mm น. – HH:mm น."},"hmv":{"a":"h:mm a – h:mm a v","h":"h:mm–h:mm a v","m":"h:mm–h:mm a v"},"Hmv":{"H":"H:mm น. – H:mm น. v","m":"H:mm น. – H:mm น. v"},"hv":{"a":"h a – h a v","h":"h–h a v"},"Hv":{"H":"HH–HH v"},"M":{"M":"M–M"},"Md":{"d":"d/M – d/M","M":"d/M – d/M"},"MEd":{"d":"E d/M – E d/M/","M":"E d/M – E d/M"},"MMM":{"M":"MMM – MMM"},"MMMd":{"d":"MMM d–d","M":"d MMM – d MMM"},"MMMEd":{"d":"E d – E d MMM","M":"E d MMM – E d MMM"},"MMMEEEEd":{"d":"EEEEที่ d – EEEEที่ d MMM","M":"EEEEที่ d MMM – EEEEที่ d MMM"},"y":{"y":"y–y"},"yM":{"M":"M/y – M/y","y":"M/y – M/y"},"yMd":{"d":"d/M/y – d/M/y","M":"d/M/y – d/M/y","y":"d/M/y – d/M/y"},"yMEd":{"d":"E d/M/y – E d/M/y","M":"E d/M/y – E d/M/y","y":"E d/M/y – E d/M/y"},"yMMM":{"M":"MMM–MMM y","y":"MMM y – MMM y"},"yMMMd":{"d":"d–d MMM y","M":"d MMM – d MMM y","y":"d MMM y – d MMM y"},"yMMMEd":{"d":"E d MMM – E d MMM y","M":"E d MMM – E d MMM y","y":"E d MMM y – E d MMM y"},"yMMMEEEEd":{"d":"EEEEที่ d – EEEEที่ d MMM y","M":"EEEEที่ d MMM – EEEEที่ d MMM y","y":"EEEEที่ d MMM y – EEEEที่ d MMM y"},"yMMMM":{"M":"MMMM – MMMM y","y":"MMMM y – MMMM y"},"yMMMMd":{"d":"d–d MMMM G y","M":"d MMMM – d MMMM G y","y":"d MMMM G y – d MMMM y"},"yMMMMEd":{"d":"E d – E d MMMM G y","M":"E d MMMM – E d MMMM G y","y":"E d MMMM G y – E d MMMM y"},"yMMMMEEEEd":{"d":"EEEEที่ d – EEEEที่ d MMMM G y","M":"EEEEที่ d MMMM – EEEEที่ d MMMM G y","y":"EEEEที่ d MMMM G y – EEEEที่ d MMMM y"}}}}},"fields":{"era":{"displayName":"สมัย"},"era-short":{"displayName":"สมัย"},"era-narrow":{"displayName":"สมัย"},"year":{"displayName":"ปี","relative-type--1":"ปีที่แล้ว","relative-type-0":"ปีนี้","relative-type-1":"ปีหน้า","relativeTime-type-future":{"relativeTimePattern-count-other":"ในอีก {0} ปี"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} ปีที่แล้ว"}},"year-short":{"displayName":"ปี","relative-type--1":"ปีที่แล้ว","relative-type-0":"ปีนี้","relative-type-1":"ปีหน้า","relativeTime-type-future":{"relativeTimePattern-count-other":"ใน {0} ปี"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} ปีที่แล้ว"}},"year-narrow":{"displayName":"ปี","relative-type--1":"ปีที่แล้ว","relative-type-0":"ปีนี้","relative-type-1":"ปีหน้า","relativeTime-type-future":{"relativeTimePattern-count-other":"ใน {0} ปี"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} ปีที่แล้ว"}},"quarter":{"displayName":"ไตรมาส","relative-type--1":"ไตรมาสที่แล้ว","relative-type-0":"ไตรมาสนี้","relative-type-1":"ไตรมาสหน้า","relativeTime-type-future":{"relativeTimePattern-count-other":"ในอีก {0} ไตรมาส"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} ไตรมาสที่แล้ว"}},"quarter-short":{"displayName":"ไตรมาส","relative-type--1":"ไตรมาสที่แล้ว","relative-type-0":"ไตรมาสนี้","relative-type-1":"ไตรมาสหน้า","relativeTime-type-future":{"relativeTimePattern-count-other":"ใน {0} ไตรมาส"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} ไตรมาสที่แล้ว"}},"quarter-narrow":{"displayName":"ไตรมาส","relative-type--1":"ไตรมาสที่แล้ว","relative-type-0":"ไตรมาสนี้","relative-type-1":"ไตรมาสหน้า","relativeTime-type-future":{"relativeTimePattern-count-other":"ใน {0} ไตรมาส"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} ไตรมาสที่แล้ว"}},"month":{"displayName":"เดือน","relative-type--1":"เดือนที่แล้ว","relative-type-0":"เดือนนี้","relative-type-1":"เดือนหน้า","relativeTime-type-future":{"relativeTimePattern-count-other":"ในอีก {0} เดือน"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} เดือนที่ผ่านมา"}},"month-short":{"displayName":"เดือน","relative-type--1":"เดือนที่แล้ว","relative-type-0":"เดือนนี้","relative-type-1":"เดือนหน้า","relativeTime-type-future":{"relativeTimePattern-count-other":"ใน {0} เดือน"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} เดือนที่แล้ว"}},"month-narrow":{"displayName":"เดือน","relative-type--1":"เดือนที่แล้ว","relative-type-0":"เดือนนี้","relative-type-1":"เดือนหน้า","relativeTime-type-future":{"relativeTimePattern-count-other":"ใน {0} เดือน"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} เดือนที่แล้ว"}},"week":{"displayName":"สัปดาห์","relative-type--1":"สัปดาห์ที่แล้ว","relative-type-0":"สัปดาห์นี้","relative-type-1":"สัปดาห์หน้า","relativeTime-type-future":{"relativeTimePattern-count-other":"ในอีก {0} สัปดาห์"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} สัปดาห์ที่ผ่านมา"},"relativePeriod":"สัปดาห์ที่เริ่มต้นวันที่"},"week-short":{"displayName":"สัปดาห์","relative-type--1":"สัปดาห์ที่แล้ว","relative-type-0":"สัปดาห์นี้","relative-type-1":"สัปดาห์หน้า","relativeTime-type-future":{"relativeTimePattern-count-other":"ใน {0} สัปดาห์"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} สัปดาห์ที่แล้ว"},"relativePeriod":"สัปดาห์ที่เริ่มต้นวันที่"},"week-narrow":{"displayName":"สัปดาห์","relative-type--1":"สัปดาห์ที่แล้ว","relative-type-0":"สัปดาห์นี้","relative-type-1":"สัปดาห์หน้า","relativeTime-type-future":{"relativeTimePattern-count-other":"ใน {0} สัปดาห์"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} สัปดาห์ที่แล้ว"},"relativePeriod":"สัปดาห์ที่เริ่มต้นวันที่"},"weekOfMonth":{"displayName":"สัปดาห์ของเดือน"},"weekOfMonth-short":{"displayName":"สัปดาห์ของเดือน"},"weekOfMonth-narrow":{"displayName":"สัปดาห์ของเดือน"},"day":{"displayName":"วัน","relative-type--2":"เมื่อวานซืน","relative-type--1":"เมื่อวาน","relative-type-0":"วันนี้","relative-type-1":"พรุ่งนี้","relative-type-2":"มะรืนนี้","relativeTime-type-future":{"relativeTimePattern-count-other":"ในอีก {0} วัน"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} วันที่ผ่านมา"}},"day-short":{"displayName":"วัน","relative-type--2":"เมื่อวานซืน","relative-type--1":"เมื่อวาน","relative-type-0":"วันนี้","relative-type-1":"พรุ่งนี้","relative-type-2":"มะรืนนี้","relativeTime-type-future":{"relativeTimePattern-count-other":"ใน {0} วัน"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} วันที่แล้ว"}},"day-narrow":{"displayName":"วัน","relative-type--2":"เมื่อวานซืน","relative-type--1":"เมื่อวาน","relative-type-0":"วันนี้","relative-type-1":"พรุ่งนี้","relative-type-2":"มะรืนนี้","relativeTime-type-future":{"relativeTimePattern-count-other":"ใน {0} วัน"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} วันที่แล้ว"}},"dayOfYear":{"displayName":"วันของปี"},"dayOfYear-short":{"displayName":"วันของปี"},"dayOfYear-narrow":{"displayName":"วันของปี"},"weekday":{"displayName":"วันในสัปดาห์"},"weekday-short":{"displayName":"วันของสัปดาห์"},"weekday-narrow":{"displayName":"วันของสัปดาห์"},"weekdayOfMonth":{"displayName":"วันของเดือน"},"weekdayOfMonth-short":{"displayName":"วันของเดือน"},"weekdayOfMonth-narrow":{"displayName":"วันของเดือน"},"sun":{"relative-type--1":"วันอาทิตย์ที่แล้ว","relative-type-0":"วันอาทิตย์นี้","relative-type-1":"วันอาทิตย์หน้า","relativeTime-type-future":{"relativeTimePattern-count-other":"วันอาทิตย์ในอีก {0} สัปดาห์"},"relativeTime-type-past":{"relativeTimePattern-count-other":"วันอาทิตย์เมื่อ {0} สัปดาห์ที่แล้ว"}},"sun-short":{"relative-type--1":"วันอาทิตย์ที่แล้ว","relative-type-0":"วันอาทิตย์นี้","relative-type-1":"วันอาทิตย์หน้า","relativeTime-type-future":{"relativeTimePattern-count-other":"วันอาทิตย์ในอีก {0} สัปดาห์"},"relativeTime-type-past":{"relativeTimePattern-count-other":"วันอาทิตย์เมื่อ {0} สัปดาห์ที่แล้ว"}},"sun-narrow":{"relative-type--1":"วันอาทิตย์ที่แล้ว","relative-type-0":"วันอาทิตย์นี้","relative-type-1":"วันอาทิตย์หน้า","relativeTime-type-future":{"relativeTimePattern-count-other":"วันอาทิตย์ในอีก {0} สัปดาห์"},"relativeTime-type-past":{"relativeTimePattern-count-other":"วันอาทิตย์เมื่อ {0} สัปดาห์ที่แล้ว"}},"mon":{"relative-type--1":"จันทร์ที่แล้ว","relative-type-0":"จันทร์นี้","relative-type-1":"จันทร์หน้า","relativeTime-type-future":{"relativeTimePattern-count-other":"ในอีก {0} จันทร์"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} จันทร์ที่แล้ว"}},"mon-short":{"relative-type--1":"จันทร์ที่แล้ว","relative-type-0":"จันทร์นี้","relative-type-1":"จันทร์หน้า","relativeTime-type-future":{"relativeTimePattern-count-other":"ในอีก {0} จันทร์"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} จันทร์ที่แล้ว"}},"mon-narrow":{"relative-type--1":"จันทร์ที่แล้ว","relative-type-0":"จันทร์นี้","relative-type-1":"จันทร์หน้า","relativeTime-type-future":{"relativeTimePattern-count-other":"อีก {0} จันทร์"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} จันทร์ที่แล้ว"}},"tue":{"relative-type--1":"อังคารที่แล้ว","relative-type-0":"อังคารนี้","relative-type-1":"อังคารหน้า","relativeTime-type-future":{"relativeTimePattern-count-other":"ในอีก {0} อังคาร"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} อังคารที่แล้ว"}},"tue-short":{"relative-type--1":"อังคารที่แล้ว","relative-type-0":"อังคารนี้","relative-type-1":"อังคารหน้า","relativeTime-type-future":{"relativeTimePattern-count-other":"ในอีก {0} อังคาร"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} อังคารที่แล้ว"}},"tue-narrow":{"relative-type--1":"อังคารที่แล้ว","relative-type-0":"อังคารนี้","relative-type-1":"อังคารหน้า","relativeTime-type-future":{"relativeTimePattern-count-other":"อีก {0} อังคาร"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} อังคารที่แล้ว"}},"wed":{"relative-type--1":"พุธที่แล้ว","relative-type-0":"พุธนี้","relative-type-1":"พุธหน้า","relativeTime-type-future":{"relativeTimePattern-count-other":"ในอีก {0} พุธ"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} พุธที่แล้ว"}},"wed-short":{"relative-type--1":"พุธที่แล้ว","relative-type-0":"พุธนี้","relative-type-1":"พุธหน้า","relativeTime-type-future":{"relativeTimePattern-count-other":"ในอีก {0} พุธ"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} พุธที่แล้ว"}},"wed-narrow":{"relative-type--1":"พุธที่แล้ว","relative-type-0":"พุธนี้","relative-type-1":"พุธหน้า","relativeTime-type-future":{"relativeTimePattern-count-other":"ในอีก {0} พุธ"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} พุธที่แล้ว"}},"thu":{"relative-type--1":"พฤหัสที่แล้ว","relative-type-0":"พฤหัสนี้","relative-type-1":"พฤหัสหน้า","relativeTime-type-future":{"relativeTimePattern-count-other":"ในอีก {0} พฤหัส"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} พฤหัสที่แล้ว"}},"thu-short":{"relative-type--1":"พฤหัสที่แล้ว","relative-type-0":"พฤหัสนี้","relative-type-1":"พฤหัสหน้า","relativeTime-type-future":{"relativeTimePattern-count-other":"อีก {0} พฤหัส"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} พฤหัสที่แล้ว"}},"thu-narrow":{"relative-type--1":"พฤหัสที่แล้ว","relative-type-0":"พฤหัสนี้","relative-type-1":"พฤหัสหน้า","relativeTime-type-future":{"relativeTimePattern-count-other":"อีก {0} พฤหัส"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} พฤหัสที่แล้ว"}},"fri":{"relative-type--1":"ศุกร์ที่แล้ว","relative-type-0":"ศุกร์นี้","relative-type-1":"ศุกร์หน้า","relativeTime-type-future":{"relativeTimePattern-count-other":"ในอีก {0} ศุกร์"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} ศุกร์ที่แล้ว"}},"fri-short":{"relative-type--1":"ศุกร์ที่แล้ว","relative-type-0":"ศุกร์นี้","relative-type-1":"ศุกร์หน้า","relativeTime-type-future":{"relativeTimePattern-count-other":"ในอีก {0} ศุกร์"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} ศุกร์ที่แล้ว"}},"fri-narrow":{"relative-type--1":"ศุกร์ที่แล้ว","relative-type-0":"ศุกร์นี้","relative-type-1":"ศุกร์หน้า","relativeTime-type-future":{"relativeTimePattern-count-other":"อีก {0} ศุกร์"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} ศุกร์ที่แล้ว"}},"sat":{"relative-type--1":"เสาร์ที่แล้ว","relative-type-0":"เสาร์นี้","relative-type-1":"เสาร์หน้า","relativeTime-type-future":{"relativeTimePattern-count-other":"ในอีก {0} เสาร์"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} เสาร์ที่แล้ว"}},"sat-short":{"relative-type--1":"เสาร์ที่แล้ว","relative-type-0":"เสาร์นี้","relative-type-1":"เสาร์หน้า","relativeTime-type-future":{"relativeTimePattern-count-other":"ในอีก {0} เสาร์"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} เสาร์ที่แล้ว"}},"sat-narrow":{"relative-type--1":"เสาร์ที่แล้ว","relative-type-0":"เสาร์นี้","relative-type-1":"เสาร์หน้า","relativeTime-type-future":{"relativeTimePattern-count-other":"อีก {0} เสาร์"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} เสาร์ที่แล้ว"}},"dayperiod-short":{"displayName":"ช่วงวัน"},"dayperiod":{"displayName":"ช่วงวัน"},"dayperiod-narrow":{"displayName":"ช่วงวัน"},"hour":{"displayName":"ชั่วโมง","relative-type-0":"ชั่วโมงนี้","relativeTime-type-future":{"relativeTimePattern-count-other":"ในอีก {0} ชั่วโมง"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} ชั่วโมงที่ผ่านมา"}},"hour-short":{"displayName":"ชม.","relative-type-0":"ชั่วโมงนี้","relativeTime-type-future":{"relativeTimePattern-count-other":"ใน {0} ชม."},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} ชม. ที่แล้ว"}},"hour-narrow":{"displayName":"ชม.","relative-type-0":"ชั่วโมงนี้","relativeTime-type-future":{"relativeTimePattern-count-other":"ใน {0} ชม."},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} ชม. ที่แล้ว"}},"minute":{"displayName":"นาที","relative-type-0":"นาทีนี้","relativeTime-type-future":{"relativeTimePattern-count-other":"ในอีก {0} นาที"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} นาทีที่ผ่านมา"}},"minute-short":{"displayName":"น.","relative-type-0":"นาทีนี้","relativeTime-type-future":{"relativeTimePattern-count-other":"ใน {0} นาที"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} นาทีที่แล้ว"}},"minute-narrow":{"displayName":"น.","relative-type-0":"นาทีนี้","relativeTime-type-future":{"relativeTimePattern-count-other":"ใน {0} นาที"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} นาทีที่แล้ว"}},"second":{"displayName":"วินาที","relative-type-0":"ขณะนี้","relativeTime-type-future":{"relativeTimePattern-count-other":"ในอีก {0} วินาที"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} วินาทีที่ผ่านมา"}},"second-short":{"displayName":"วิ","relative-type-0":"ขณะนี้","relativeTime-type-future":{"relativeTimePattern-count-other":"ใน {0} วินาที"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} วินาทีที่แล้ว"}},"second-narrow":{"displayName":"วิ","relative-type-0":"ขณะนี้","relativeTime-type-future":{"relativeTimePattern-count-other":"ใน {0} วินาที"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} วินาทีที่แล้ว"}},"zone":{"displayName":"เขตเวลา"},"zone-short":{"displayName":"โซน"},"zone-narrow":{"displayName":"เขตเวลา"}}},"numbers":{"currencies":{"ADP":{"displayName":"เปเซตาอันดอร์รา","symbol":"ADP"},"AED":{"displayName":"เดอร์แฮมสหรัฐอาหรับเอมิเรตส์","displayName-count-other":"เดอร์แฮมสหรัฐอาหรับเอมิเรตส์","symbol":"AED"},"AFA":{"displayName":"อัฟกานีอัฟกานิสถาน (1927–2002)","symbol":"AFA"},"AFN":{"displayName":"อัฟกานิอัฟกานิสถาน","displayName-count-other":"อัฟกานิอัฟกานิสถาน","symbol":"AFN"},"ALK":{"displayName":"ALK","symbol":"ALK"},"ALL":{"displayName":"เลกแอลเบเนีย","displayName-count-other":"เลกแอลเบเนีย","symbol":"ALL"},"AMD":{"displayName":"แดรมอาร์เมเนีย","displayName-count-other":"แดรมอาร์เมเนีย","symbol":"AMD"},"ANG":{"displayName":"กิลเดอร์เนเธอร์แลนด์แอนทิลลิส","displayName-count-other":"กิลเดอร์เนเธอร์แลนด์แอนทิลลิส","symbol":"ANG"},"AOA":{"displayName":"กวานซาแองโกลา","displayName-count-other":"กวานซาแองโกลา","symbol":"AOA","symbol-alt-narrow":"Kz"},"AOK":{"displayName":"กวานซาแองโกลา (1977–1990)","symbol":"AOK"},"AON":{"displayName":"นิวกวานซาแองโกลา (1990–2000)","symbol":"AON"},"AOR":{"displayName":"กวานซารีจัสทาโดแองโกลา (1995–1999)","symbol":"AOR"},"ARA":{"displayName":"ออสตรัลอาร์เจนตินา","symbol":"ARA"},"ARL":{"displayName":"เปโซเลย์อาร์เจนตินา (1970–1983)","symbol":"ARL"},"ARM":{"displayName":"เปโซอาร์เจนตินา (1881–1970)","symbol":"ARM"},"ARP":{"displayName":"เปโซอาร์เจนตินา (1983–1985)","symbol":"ARP"},"ARS":{"displayName":"เปโซอาร์เจนตินา","displayName-count-other":"เปโซอาร์เจนตินา","symbol":"ARS","symbol-alt-narrow":"$"},"ATS":{"displayName":"ชิลลิงออสเตรีย","symbol":"ATS"},"AUD":{"displayName":"ดอลลาร์ออสเตรเลีย","displayName-count-other":"ดอลลาร์ออสเตรเลีย","symbol":"AU$","symbol-alt-narrow":"$"},"AWG":{"displayName":"ฟลอรินอารูบา","displayName-count-other":"ฟลอรินอารูบา","symbol":"AWG"},"AZM":{"displayName":"มานัตอาเซอร์ไบจาน (1993–2006)","symbol":"AZM"},"AZN":{"displayName":"มานัตอาเซอร์ไบจาน","displayName-count-other":"มานัตอาเซอร์ไบจาน","symbol":"AZN"},"BAD":{"displayName":"ดีนาร์บอสเนีย-เฮอร์เซโกวีนา","symbol":"BAD"},"BAM":{"displayName":"มาร์กบอสเนีย-เฮอร์เซโกวีนา","displayName-count-other":"มาร์กบอสเนีย-เฮอร์เซโกวีนา","symbol":"BAM","symbol-alt-narrow":"KM"},"BAN":{"displayName":"ดีนาร์ใหม่บอสเนีย-เฮอร์เซโกวีนา (1994–1997)","symbol":"BAN"},"BBD":{"displayName":"ดอลลาร์บาร์เบโดส","displayName-count-other":"ดอลลาร์บาร์เบโดส","symbol":"BBD","symbol-alt-narrow":"$"},"BDT":{"displayName":"ตากาบังกลาเทศ","displayName-count-other":"ตากาบังกลาเทศ","symbol":"BDT","symbol-alt-narrow":"৳"},"BEC":{"displayName":"ฟรังก์เบลเยียม (เปลี่ยนแปลงได้)","symbol":"BEC"},"BEF":{"displayName":"ฟรังก์เบลเยียม","symbol":"BEF"},"BEL":{"displayName":"ฟรังก์เบลเยียม (การเงิน)","symbol":"BEL"},"BGL":{"displayName":"ฮาร์ดเลฟบัลแกเรีย","symbol":"BGL"},"BGM":{"displayName":"โซเชียลลิสต์เลฟบัลแกเรีย","symbol":"BGM"},"BGN":{"displayName":"เลฟบัลแกเรีย","displayName-count-other":"เลฟบัลแกเรีย","symbol":"BGN"},"BGO":{"displayName":"เลฟบัลเกเรีย (1879–1952)","symbol":"BGO"},"BHD":{"displayName":"ดีนาร์บาห์เรน","displayName-count-other":"ดีนาร์บาห์เรน","symbol":"BHD"},"BIF":{"displayName":"ฟรังก์บุรุนดี","displayName-count-other":"ฟรังก์บุรุนดี","symbol":"BIF"},"BMD":{"displayName":"ดอลลาร์เบอร์มิวดา","displayName-count-other":"ดอลลาร์เบอร์มิวดา","symbol":"BMD","symbol-alt-narrow":"$"},"BND":{"displayName":"ดอลลาร์บรูไน","displayName-count-other":"ดอลลาร์บรูไน","symbol":"BND","symbol-alt-narrow":"$"},"BOB":{"displayName":"โบลิเวียโนโบลิเวีย","displayName-count-other":"โบลิเวียโนโบลิเวีย","symbol":"BOB","symbol-alt-narrow":"Bs"},"BOL":{"displayName":"โบลิเวียโนโบลิเวีย (1863–1963)","symbol":"BOL"},"BOP":{"displayName":"เปโซโบลิเวีย","symbol":"BOP"},"BOV":{"displayName":"มฟดอลโบลิเวีย","symbol":"BOV"},"BRB":{"displayName":"ครูเซโรโนโวบราซิล (1967–1986)","symbol":"BRB"},"BRC":{"displayName":"ครูซาโดบราซิล","symbol":"BRC"},"BRE":{"displayName":"ครูเซโรบราซิล (1990–1993)","symbol":"BRE"},"BRL":{"displayName":"เรียลบราซิล","displayName-count-other":"เรียลบราซิล","symbol":"R$","symbol-alt-narrow":"R$"},"BRN":{"displayName":"ครูซาโดโนโวบราซิล","symbol":"BRN"},"BRR":{"displayName":"ครูเซโรบราซิล","symbol":"BRR"},"BRZ":{"displayName":"ครูเซโรบราซิล (1942–1967)","symbol":"BRZ"},"BSD":{"displayName":"ดอลลาร์บาฮามาส","displayName-count-other":"ดอลลาร์บาฮามาส","symbol":"BSD","symbol-alt-narrow":"$"},"BTN":{"displayName":"เอ็งกุลตรัมภูฏาน","displayName-count-other":"เอ็งกุลตรัมภูฏาน","symbol":"BTN"},"BUK":{"displayName":"จ๊าดพม่า","symbol":"BUK"},"BWP":{"displayName":"ปูลาบอตสวานา","displayName-count-other":"ปูลาบอตสวานา","symbol":"BWP","symbol-alt-narrow":"P"},"BYB":{"displayName":"นิวรูเบิลเบลารุส (1994–1999)","symbol":"BYB"},"BYN":{"displayName":"รูเบิลเบลารุส","displayName-count-other":"รูเบิลเบลารุส","symbol":"BYN","symbol-alt-narrow":"р."},"BYR":{"displayName":"รูเบิลเบลารุส (2000–2016)","displayName-count-other":"รูเบิลเบลารุส (2000–2016)","symbol":"BYR"},"BZD":{"displayName":"ดอลลาร์เบลีซ","displayName-count-other":"ดอลลาร์เบลีซ","symbol":"BZD","symbol-alt-narrow":"$"},"CAD":{"displayName":"ดอลลาร์แคนาดา","displayName-count-other":"ดอลลาร์แคนาดา","symbol":"CA$","symbol-alt-narrow":"$"},"CDF":{"displayName":"ฟรังก์คองโก","displayName-count-other":"ฟรังก์คองโก","symbol":"CDF"},"CHE":{"displayName":"ยูโรดับเบิลยูไออาร์","symbol":"CHE"},"CHF":{"displayName":"ฟรังก์สวิส","displayName-count-other":"ฟรังก์สวิส","symbol":"CHF"},"CHW":{"displayName":"ฟรังก์ดับเบิลยูไออาร์","symbol":"CHW"},"CLE":{"displayName":"เอสคูโดชิลี","symbol":"CLE"},"CLF":{"displayName":"ฟูเมนโตชิลี","symbol":"CLF"},"CLP":{"displayName":"เปโซชิลี","displayName-count-other":"เปโซชิลี","symbol":"CLP","symbol-alt-narrow":"$"},"CNH":{"displayName":"หยวน","displayName-count-other":"หยวน","symbol":"CNH"},"CNX":{"displayName":"CNX","symbol":"CNX"},"CNY":{"displayName":"หยวนจีน","displayName-count-other":"หยวนจีน","symbol":"CN¥","symbol-alt-narrow":"¥"},"COP":{"displayName":"เปโซโคลอมเบีย","displayName-count-other":"เปโซโคลอมเบีย","symbol":"COP","symbol-alt-narrow":"$"},"COU":{"displayName":"วาเลอร์เรียลโคลอมเบีย","symbol":"COU"},"CRC":{"displayName":"โกลองคอสตาริกา","displayName-count-other":"โกลองคอสตาริกา","symbol":"CRC","symbol-alt-narrow":"₡"},"CSD":{"displayName":"ดีนาร์เซอร์เบียเก่า","symbol":"CSD"},"CSK":{"displayName":"ฮาร์ดโครูนาเช็กโกสโลวัก","symbol":"CSK"},"CUC":{"displayName":"เปโซคิวบา (แปลงสภาพ)","displayName-count-other":"เปโซคิวบา (แปลงสภาพ)","symbol":"CUC","symbol-alt-narrow":"$"},"CUP":{"displayName":"เปโซคิวบา","displayName-count-other":"เปโซคิวบา","symbol":"CUP","symbol-alt-narrow":"$"},"CVE":{"displayName":"เอสคูโดเคปเวิร์ด","displayName-count-other":"เอสคูโดเคปเวิร์ด","symbol":"CVE"},"CYP":{"displayName":"ปอนด์ไซปรัส","symbol":"CYP"},"CZK":{"displayName":"โครูนาสาธารณรัฐเช็ก","displayName-count-other":"โครูนาสาธารณรัฐเช็ก","symbol":"CZK","symbol-alt-narrow":"Kč"},"DDM":{"displayName":"มาร์กเยอรมันตะวันออก","symbol":"DDM"},"DEM":{"displayName":"มาร์กเยอรมัน","symbol":"DEM"},"DJF":{"displayName":"ฟรังก์จิบูตี","displayName-count-other":"ฟรังก์จิบูตี","symbol":"DJF"},"DKK":{"displayName":"โครนเดนมาร์ก","displayName-count-other":"โครนเดนมาร์ก","symbol":"DKK","symbol-alt-narrow":"kr"},"DOP":{"displayName":"เปโซโดมินิกัน","displayName-count-other":"เปโซโดมินิกัน","symbol":"DOP","symbol-alt-narrow":"$"},"DZD":{"displayName":"ดีนาร์แอลจีเรีย","displayName-count-other":"ดีนาร์แอลจีเรีย","symbol":"DZD"},"ECS":{"displayName":"ซูเกรเอกวาดอร์","symbol":"ECS"},"ECV":{"displayName":"วาเลอร์คอนสแตนต์เอกวาดอร์","symbol":"ECV"},"EEK":{"displayName":"ครูนเอสโตเนีย","symbol":"EEK"},"EGP":{"displayName":"ปอนด์อียิปต์","displayName-count-other":"ปอนด์อียิปต์","symbol":"EGP","symbol-alt-narrow":"E£"},"ERN":{"displayName":"แนกฟาเอริเทรีย","displayName-count-other":"แนกฟาเอริเทรีย","symbol":"ERN"},"ESA":{"displayName":"เปเซตาสเปน (บัญชีเอ)","symbol":"ESA"},"ESB":{"displayName":"เปเซตาสเปน (บัญชีที่เปลี่ยนแปลงได้)","symbol":"ESB"},"ESP":{"displayName":"เปเซตาสเปน","symbol":"ESP","symbol-alt-narrow":"₧"},"ETB":{"displayName":"เบอรร์เอธิโอเปีย","displayName-count-other":"เบอรร์เอธิโอเปีย","symbol":"ETB"},"EUR":{"displayName":"ยูโร","displayName-count-other":"ยูโร","symbol":"€","symbol-alt-narrow":"€"},"FIM":{"displayName":"มาร์กกาฟินแลนด์","symbol":"FIM"},"FJD":{"displayName":"ดอลลาร์ฟิจิ","displayName-count-other":"ดอลลาร์ฟิจิ","symbol":"FJD","symbol-alt-narrow":"$"},"FKP":{"displayName":"ปอนด์หมู่เกาะฟอล์กแลนด์","displayName-count-other":"ปอนด์หมู่เกาะฟอล์กแลนด์","symbol":"FKP","symbol-alt-narrow":"£"},"FRF":{"displayName":"ฟรังก์ฝรั่งเศส","symbol":"FRF"},"GBP":{"displayName":"ปอนด์สเตอร์ลิง (สหราชอาณาจักร)","displayName-count-other":"ปอนด์สเตอร์ลิง (สหราชอาณาจักร)","symbol":"£","symbol-alt-narrow":"£"},"GEK":{"displayName":"คูปอนลาริตจอร์เจีย","symbol":"GEK"},"GEL":{"displayName":"ลารีจอร์เจีย","displayName-count-other":"ลารีจอร์เจีย","symbol":"GEL","symbol-alt-narrow":"₾","symbol-alt-variant":"₾"},"GHC":{"displayName":"เซดีกานา (1979–2007)","symbol":"GHC"},"GHS":{"displayName":"เซดีกานา","displayName-count-other":"เซดีกานา","symbol":"GHS"},"GIP":{"displayName":"ปอนด์ยิบรอลตาร์","displayName-count-other":"ปอนด์ยิบรอลตาร์","symbol":"GIP","symbol-alt-narrow":"£"},"GMD":{"displayName":"ดาลาซีแกมเบีย","displayName-count-other":"ดาลาซีแกมเบีย","symbol":"GMD"},"GNF":{"displayName":"ฟรังก์กินี","displayName-count-other":"ฟรังก์กินี","symbol":"GNF","symbol-alt-narrow":"FG"},"GNS":{"displayName":"ไซลีกินี","symbol":"GNS"},"GQE":{"displayName":"เอ็กเวเลอิเควทอเรียลกินี","symbol":"GQE"},"GRD":{"displayName":"ดรัชมากรีก","symbol":"GRD"},"GTQ":{"displayName":"เควตซัลกัวเตมาลา","displayName-count-other":"เควตซัลกัวเตมาลา","symbol":"GTQ","symbol-alt-narrow":"Q"},"GWE":{"displayName":"เอสคูโดกินีโปรตุเกส","symbol":"GWE"},"GWP":{"displayName":"เปโซกินี-บิสเซา","symbol":"GWP"},"GYD":{"displayName":"ดอลลาร์กายอานา","displayName-count-other":"ดอลลาร์กายอานา","symbol":"GYD","symbol-alt-narrow":"$"},"HKD":{"displayName":"ดอลลาร์ฮ่องกง","displayName-count-other":"ดอลลาร์ฮ่องกง","symbol":"HK$","symbol-alt-narrow":"$"},"HNL":{"displayName":"เลมปิราฮอนดูรัส","displayName-count-other":"เลมปิราฮอนดูรัส","symbol":"HNL","symbol-alt-narrow":"L"},"HRD":{"displayName":"ดีนาร์โครเอเชีย","symbol":"HRD"},"HRK":{"displayName":"คูนาโครเอเชีย","displayName-count-other":"คูนาโครเอเชีย","symbol":"HRK","symbol-alt-narrow":"kn"},"HTG":{"displayName":"กูร์ดเฮติ","displayName-count-other":"กูร์ดเฮติ","symbol":"HTG"},"HUF":{"displayName":"ฟอรินต์ฮังการี","displayName-count-other":"ฟอรินต์ฮังการี","symbol":"HUF","symbol-alt-narrow":"Ft"},"IDR":{"displayName":"รูเปียห์อินโดนีเซีย","displayName-count-other":"รูเปียห์อินโดนีเซีย","symbol":"IDR","symbol-alt-narrow":"Rp"},"IEP":{"displayName":"ปอนด์ไอริช","symbol":"IEP"},"ILP":{"displayName":"ปอนด์อิสราเอล","symbol":"ILP"},"ILR":{"displayName":"ILR","symbol":"ILR"},"ILS":{"displayName":"นิวเชเกลอิสราเอล","displayName-count-other":"นิวเชเกลอิสราเอล","symbol":"₪","symbol-alt-narrow":"₪"},"INR":{"displayName":"รูปีอินเดีย","displayName-count-other":"รูปีอินเดีย","symbol":"₹","symbol-alt-narrow":"₹"},"IQD":{"displayName":"ดีนาร์อิรัก","displayName-count-other":"ดีนาร์อิรัก","symbol":"IQD"},"IRR":{"displayName":"เรียลอิหร่าน","displayName-count-other":"เรียลอิหร่าน","symbol":"IRR"},"ISJ":{"displayName":"ISJ","symbol":"ISJ"},"ISK":{"displayName":"โครนาไอซ์แลนด์","displayName-count-other":"โครนาไอซ์แลนด์","symbol":"ISK","symbol-alt-narrow":"kr"},"ITL":{"displayName":"ลีราอิตาลี","symbol":"ITL"},"JMD":{"displayName":"ดอลลาร์จาเมกา","displayName-count-other":"ดอลลาร์จาเมกา","symbol":"JMD","symbol-alt-narrow":"$"},"JOD":{"displayName":"ดีนาร์จอร์แดน","displayName-count-other":"ดีนาร์จอร์แดน","symbol":"JOD"},"JPY":{"displayName":"เยนญี่ปุ่น","displayName-count-other":"เยนญี่ปุ่น","symbol":"¥","symbol-alt-narrow":"¥"},"KES":{"displayName":"ชิลลิงเคนยา","displayName-count-other":"ชิลลิงเคนยา","symbol":"KES"},"KGS":{"displayName":"ซอมคีร์กีซสถาน","displayName-count-other":"ซอมคีร์กีซสถาน","symbol":"KGS"},"KHR":{"displayName":"เรียลกัมพูชา","displayName-count-other":"เรียลกัมพูชา","symbol":"KHR","symbol-alt-narrow":"៛"},"KMF":{"displayName":"ฟรังก์คอโมโรส","displayName-count-other":"ฟรังก์คอโมโรส","symbol":"KMF","symbol-alt-narrow":"CF"},"KPW":{"displayName":"วอนเกาหลีเหนือ","displayName-count-other":"วอนเกาหลีเหนือ","symbol":"KPW","symbol-alt-narrow":"₩"},"KRH":{"displayName":"ฮวานเกาหลีใต้ (1953–1962)","symbol":"KRH"},"KRO":{"displayName":"วอนเกาหลีใต้ (1945–1953)","symbol":"KRO"},"KRW":{"displayName":"วอนเกาหลีใต้","displayName-count-other":"วอนเกาหลีใต้","symbol":"₩","symbol-alt-narrow":"₩"},"KWD":{"displayName":"ดีนาร์คูเวต","displayName-count-other":"ดีนาร์คูเวต","symbol":"KWD"},"KYD":{"displayName":"ดอลลาร์หมู่เกาะเคย์แมน","displayName-count-other":"ดอลลาร์หมู่เกาะเคย์แมน","symbol":"KYD","symbol-alt-narrow":"$"},"KZT":{"displayName":"เทงเจคาซัคสถาน","displayName-count-other":"เทงเจคาซัคสถาน","symbol":"KZT","symbol-alt-narrow":"₸"},"LAK":{"displayName":"กีบลาว","displayName-count-other":"กีบลาว","symbol":"LAK","symbol-alt-narrow":"₭"},"LBP":{"displayName":"ปอนด์เลบานอน","displayName-count-other":"ปอนด์เลบานอน","symbol":"LBP","symbol-alt-narrow":"L£"},"LKR":{"displayName":"รูปีศรีลังกา","displayName-count-other":"รูปีศรีลังกา","symbol":"LKR","symbol-alt-narrow":"Rs"},"LRD":{"displayName":"ดอลลาร์ไลบีเรีย","displayName-count-other":"ดอลลาร์ไลบีเรีย","symbol":"LRD","symbol-alt-narrow":"$"},"LSL":{"displayName":"โลตีเลโซโท","symbol":"LSL"},"LTL":{"displayName":"ลีตัสลิทัวเนีย","displayName-count-other":"ลีตัสลิทัวเนีย","symbol":"LTL","symbol-alt-narrow":"Lt"},"LTT":{"displayName":"ทาโลนัสลิทัวเนีย","symbol":"LTT"},"LUC":{"displayName":"คอนเวอร์ทิเบิลฟรังก์ลักเซมเบิร์ก","symbol":"LUC"},"LUF":{"displayName":"ฟรังก์ลักเซมเบิร์ก","symbol":"LUF"},"LUL":{"displayName":"ไฟแนลเชียลฟรังก์ลักเซมเบิร์ก","symbol":"LUL"},"LVL":{"displayName":"ลัตส์ลัตเวีย","displayName-count-other":"ลัตส์ลัตเวีย","symbol":"LVL","symbol-alt-narrow":"Ls"},"LVR":{"displayName":"รูเบิลลัตเวีย","symbol":"LVR"},"LYD":{"displayName":"ดีนาร์ลิเบีย","displayName-count-other":"ดีนาร์ลิเบีย","symbol":"LYD"},"MAD":{"displayName":"ดีแรห์มโมร็อกโก","displayName-count-other":"ดีแรห์มโมร็อกโก","symbol":"MAD"},"MAF":{"displayName":"ฟรังก์โมร็อกโก","symbol":"MAF"},"MCF":{"displayName":"ฟรังก์โมนาโก","symbol":"MCF"},"MDC":{"displayName":"บัตรปันส่วนมอลโดวา","symbol":"MDC"},"MDL":{"displayName":"ลิวมอลโดวา","displayName-count-other":"ลิวมอลโดวา","symbol":"MDL"},"MGA":{"displayName":"อาเรียรีมาลากาซี","displayName-count-other":"อาเรียรีมาลากาซี","symbol":"MGA","symbol-alt-narrow":"Ar"},"MGF":{"displayName":"ฟรังก์มาดากัสการ์","symbol":"MGF"},"MKD":{"displayName":"ดีนาร์มาซิโดเนีย","displayName-count-other":"ดีนาร์มาซิโดเนีย","symbol":"MKD"},"MKN":{"displayName":"ดีนาร์มาซิโดเนีย (1992–1993)","symbol":"MKN"},"MLF":{"displayName":"ฟรังก์มาลี","symbol":"MLF"},"MMK":{"displayName":"จ๊าตพม่า","displayName-count-other":"จ๊าตพม่า","symbol":"MMK","symbol-alt-narrow":"K"},"MNT":{"displayName":"ทูกริกมองโกเลีย","displayName-count-other":"ทูกริกมองโกเลีย","symbol":"MNT","symbol-alt-narrow":"₮"},"MOP":{"displayName":"ปาตากามาเก๊า","displayName-count-other":"ปาตากามาเก๊า","symbol":"MOP"},"MRO":{"displayName":"อูกียามอริเตเนีย","displayName-count-other":"อูกียามอริเตเนีย","symbol":"MRO"},"MTL":{"displayName":"ลีรามอลตา","symbol":"MTL"},"MTP":{"displayName":"ปอนด์มอลตา","symbol":"MTP"},"MUR":{"displayName":"รูปีมอริเชียส","displayName-count-other":"รูปีมอริเชียส","symbol":"MUR","symbol-alt-narrow":"Rs"},"MVP":{"displayName":"MVP","symbol":"MVP"},"MVR":{"displayName":"รูฟิยามัลดีฟส์","displayName-count-other":"รูฟิยามัลดีฟส์","symbol":"MVR"},"MWK":{"displayName":"ควาชามาลาวี","displayName-count-other":"ควาชามาลาวี","symbol":"MWK"},"MXN":{"displayName":"เปโซเม็กซิโก","displayName-count-other":"เปโซเม็กซิโก","symbol":"MX$","symbol-alt-narrow":"$"},"MXP":{"displayName":"เงินเปโซเม็กซิโก (1861–1992)","symbol":"MXP"},"MXV":{"displayName":"ยูนิแดด ดี อินเวอร์ชั่น เม็กซิโก","symbol":"MXV"},"MYR":{"displayName":"ริงกิตมาเลเซีย","displayName-count-other":"ริงกิตมาเลเซีย","symbol":"MYR","symbol-alt-narrow":"RM"},"MZE":{"displayName":"เอสคูโดโมซัมบิก","symbol":"MZE"},"MZM":{"displayName":"เมติคัลโมซัมบิกเก่า","symbol":"MZM"},"MZN":{"displayName":"เมติคัลโมซัมบิก","displayName-count-other":"เมติคัลโมซัมบิก","symbol":"MZN"},"NAD":{"displayName":"ดอลลาร์นามิเบีย","displayName-count-other":"ดอลลาร์นามิเบีย","symbol":"NAD","symbol-alt-narrow":"$"},"NGN":{"displayName":"ไนราไนจีเรีย","displayName-count-other":"ไนราไนจีเรีย","symbol":"NGN","symbol-alt-narrow":"₦"},"NIC":{"displayName":"คอร์โดบานิการากัว","symbol":"NIC"},"NIO":{"displayName":"กอร์โดบานิการากัว","displayName-count-other":"กอร์โดบานิการากัว","symbol":"NIO","symbol-alt-narrow":"C$"},"NLG":{"displayName":"กิลเดอร์เนเธอร์แลนด์","symbol":"NLG"},"NOK":{"displayName":"โครนนอร์เวย์","displayName-count-other":"โครนนอร์เวย์","symbol":"NOK","symbol-alt-narrow":"kr"},"NPR":{"displayName":"รูปีเนปาล","displayName-count-other":"รูปีเนปาล","symbol":"NPR","symbol-alt-narrow":"Rs"},"NZD":{"displayName":"ดอลลาร์นิวซีแลนด์","displayName-count-other":"ดอลลาร์นิวซีแลนด์","symbol":"NZ$","symbol-alt-narrow":"$"},"OMR":{"displayName":"เรียลโอมาน","displayName-count-other":"เรียลโอมาน","symbol":"OMR"},"PAB":{"displayName":"บัลบัวปานามา","displayName-count-other":"บัลบัวปานามา","symbol":"PAB"},"PEI":{"displayName":"อินตีเปรู","symbol":"PEI"},"PEN":{"displayName":"ซอลเปรู","displayName-count-other":"ซอลเปรู","symbol":"PEN"},"PES":{"displayName":"ซอลเปรู (1863–1965)","displayName-count-other":"ซอลเปรู(1863–1965)","symbol":"PES"},"PGK":{"displayName":"กีนาปาปัวนิวกินี","displayName-count-other":"กีนาปาปัวนิวกินี","symbol":"PGK"},"PHP":{"displayName":"เปโซฟิลิปปินส์","displayName-count-other":"เปโซฟิลิปปินส์","symbol":"PHP","symbol-alt-narrow":"₱"},"PKR":{"displayName":"รูปีปากีสถาน","displayName-count-other":"รูปีปากีสถาน","symbol":"PKR","symbol-alt-narrow":"Rs"},"PLN":{"displayName":"ซลอตีโปแลนด์","displayName-count-other":"ซลอตีโปแลนด์","symbol":"PLN","symbol-alt-narrow":"zł"},"PLZ":{"displayName":"ซลอตีโปแลนด์ (1950–1995)","symbol":"PLZ"},"PTE":{"displayName":"เอสคูโดโปรตุเกส","symbol":"PTE"},"PYG":{"displayName":"กวารานีปารากวัย","displayName-count-other":"กวารานีปารากวัย","symbol":"PYG","symbol-alt-narrow":"₲"},"QAR":{"displayName":"เรียลกาตาร์","displayName-count-other":"เรียลกาตาร์","symbol":"QAR"},"RHD":{"displayName":"ดอลลาร์โรดีเซีย","symbol":"RHD"},"ROL":{"displayName":"ลิวโรมาเนียเก่า","symbol":"ROL"},"RON":{"displayName":"ลิวโรมาเนีย","displayName-count-other":"ลิวโรมาเนีย","symbol":"RON","symbol-alt-narrow":"lei"},"RSD":{"displayName":"ดีนาร์เซอร์เบีย","displayName-count-other":"ดีนาร์เซอร์เบีย","symbol":"RSD"},"RUB":{"displayName":"รูเบิลรัสเซีย","displayName-count-other":"รูเบิลรัสเซีย","symbol":"RUB","symbol-alt-narrow":"₽","symbol-alt-variant":"₽"},"RUR":{"displayName":"รูเบิลรัสเซีย (1991–1998)","symbol":"RUR","symbol-alt-narrow":"р."},"RWF":{"displayName":"ฟรังก์รวันดา","displayName-count-other":"ฟรังก์รวันดา","symbol":"RWF","symbol-alt-narrow":"RF"},"SAR":{"displayName":"ริยัลซาอุดีอาระเบีย","displayName-count-other":"ริยัลซาอุดีอาระเบีย","symbol":"SAR"},"SBD":{"displayName":"ดอลลาร์หมู่เกาะโซโลมอน","displayName-count-other":"ดอลลาร์หมู่เกาะโซโลมอน","symbol":"SBD","symbol-alt-narrow":"$"},"SCR":{"displayName":"รูปีเซเชลส์","displayName-count-other":"รูปีเซเชลส์","symbol":"SCR"},"SDD":{"displayName":"ดีนาร์ซูดานเก่า","symbol":"SDD"},"SDG":{"displayName":"ปอนด์ซูดาน","displayName-count-other":"ปอนด์ซูดาน","symbol":"SDG"},"SDP":{"displayName":"ปอนด์ซูดานเก่า","symbol":"SDP"},"SEK":{"displayName":"โครนาสวีเดน","displayName-count-other":"โครนาสวีเดน","symbol":"SEK","symbol-alt-narrow":"kr"},"SGD":{"displayName":"ดอลลาร์สิงคโปร์","displayName-count-other":"ดอลลาร์สิงคโปร์","symbol":"SGD","symbol-alt-narrow":"$"},"SHP":{"displayName":"ปอนด์เซนต์เฮเลนา","displayName-count-other":"ปอนด์เซนต์เฮเลนา","symbol":"SHP","symbol-alt-narrow":"£"},"SIT":{"displayName":"ทอลาร์สโลวีเนีย","symbol":"SIT"},"SKK":{"displayName":"โครูนาสโลวัก","symbol":"SKK"},"SLL":{"displayName":"ลีโอนเซียร์ราลีโอน","displayName-count-other":"ลีโอนเซียร์ราลีโอน","symbol":"SLL"},"SOS":{"displayName":"ชิลลิงโซมาเลีย","displayName-count-other":"ชิลลิงโซมาเลีย","symbol":"SOS"},"SRD":{"displayName":"ดอลลาร์ซูรินาเม","displayName-count-other":"ดอลลาร์ซูรินาเม","symbol":"SRD","symbol-alt-narrow":"$"},"SRG":{"displayName":"กิลเดอร์ซูรินาเม","symbol":"SRG"},"SSP":{"displayName":"ปอนด์ซูดานใต้","displayName-count-other":"ปอนด์ซูดานใต้","symbol":"SSP","symbol-alt-narrow":"£"},"STD":{"displayName":"ดอบราเซาตูเมและปรินซิปี","displayName-count-other":"ดอบราเซาตูเมและปรินซิปี","symbol":"STD","symbol-alt-narrow":"Db"},"STN":{"displayName":"STN","symbol":"STN"},"SUR":{"displayName":"รูเบิลโซเวียต","symbol":"SUR"},"SVC":{"displayName":"โคลอนเอลซัลวาดอร์","symbol":"SVC"},"SYP":{"displayName":"ปอนด์ซีเรีย","displayName-count-other":"ปอนด์ซีเรีย","symbol":"SYP","symbol-alt-narrow":"£"},"SZL":{"displayName":"ลิลันเจนีสวาซิ","displayName-count-other":"ลิลันเจนีสวาซิ","symbol":"SZL"},"THB":{"displayName":"บาท","displayName-count-other":"บาทไทย","symbol":"THB","symbol-alt-narrow":"฿"},"TJR":{"displayName":"รูเบิลทาจิกิสถาน","symbol":"TJR"},"TJS":{"displayName":"โซโมนิทาจิกิสถาน","displayName-count-other":"โซโมนิทาจิกิสถาน","symbol":"TJS"},"TMM":{"displayName":"มานัตเติร์กเมนิสถาน (1993–2009)","symbol":"TMM"},"TMT":{"displayName":"มานัตเติร์กเมนิสถาน","displayName-count-other":"มานัตเติร์กเมนิสถาน","symbol":"TMT"},"TND":{"displayName":"ดีนาร์ตูนิเซีย","displayName-count-other":"ดีนาร์ตูนิเซีย","symbol":"TND"},"TOP":{"displayName":"พาแองกาตองกา","displayName-count-other":"พาแองกาตองกา","symbol":"TOP","symbol-alt-narrow":"T$"},"TPE":{"displayName":"เอสคูโดติมอร์","symbol":"TPE"},"TRL":{"displayName":"ลีราตุรกีเก่า","symbol":"TRL"},"TRY":{"displayName":"ลีราตุรกี","displayName-count-other":"ลีราตุรกี","symbol":"TRY","symbol-alt-narrow":"₺","symbol-alt-variant":"TL"},"TTD":{"displayName":"ดอลลาร์ตรินิแดดและโตเบโก","displayName-count-other":"ดอลลาร์ตรินิแดดและโตเบโก","symbol":"TTD","symbol-alt-narrow":"$"},"TWD":{"displayName":"ดอลลาร์ไต้หวันใหม่","displayName-count-other":"ดอลลาร์ไต้หวันใหม่","symbol":"NT$","symbol-alt-narrow":"NT$"},"TZS":{"displayName":"ชิลลิงแทนซาเนีย","displayName-count-other":"ชิลลิงแทนซาเนีย","symbol":"TZS"},"UAH":{"displayName":"ฮรีฟเนียยูเครน","displayName-count-other":"ฮรีฟเนียยูเครน","symbol":"UAH","symbol-alt-narrow":"₴"},"UAK":{"displayName":"คาร์โบวาเนตซ์ยูเครน","symbol":"UAK"},"UGS":{"displayName":"ชิลลิงยูกันดา (1966–1987)","symbol":"UGS"},"UGX":{"displayName":"ชิลลิงยูกันดา","displayName-count-other":"ชิลลิงยูกันดา","symbol":"UGX"},"USD":{"displayName":"ดอลลาร์สหรัฐ","displayName-count-other":"ดอลลาร์สหรัฐ","symbol":"US$","symbol-alt-narrow":"$"},"USN":{"displayName":"ดอลลาร์สหรัฐ (วันถัดไป)","displayName-count-other":"ดอลลาร์สหรัฐ (วันถัดไป)","symbol":"USN"},"USS":{"displayName":"ดอลลาร์สหรัฐ (วันเดียวกัน)","displayName-count-other":"ดอลลาร์สหรัฐ (วันเดียวกัน)","symbol":"USS"},"UYI":{"displayName":"เปโซเอนยูนิแดดเซสอินเด็กซาแดสอุรุกวัย","symbol":"UYI"},"UYP":{"displayName":"เปโซอุรุกวัย (1975–1993)","symbol":"UYP"},"UYU":{"displayName":"เปโซอุรุกวัย","displayName-count-other":"เปโซอุรุกวัย","symbol":"UYU","symbol-alt-narrow":"$"},"UZS":{"displayName":"ซอมอุซเบกิสถาน","displayName-count-other":"ซอมอุซเบกิสถาน","symbol":"UZS"},"VEB":{"displayName":"โบลิวาร์เวเนซุเอลา (1871–2008)","symbol":"VEB"},"VEF":{"displayName":"โบลิวาร์เวเนซุเอลา","displayName-count-other":"โบลิวาร์เวเนซุเอลา","symbol":"VEF","symbol-alt-narrow":"Bs"},"VND":{"displayName":"ดองเวียดนาม","displayName-count-other":"ดองเวียดนาม","symbol":"₫","symbol-alt-narrow":"₫"},"VNN":{"displayName":"ดองเวียดนาม (1978–1985)","symbol":"VNN"},"VUV":{"displayName":"วาตูวานูอาตู","displayName-count-other":"วาตูวานูอาตู","symbol":"VUV"},"WST":{"displayName":"ทาลาซามัว","displayName-count-other":"ทาลาซามัว","symbol":"WST"},"XAF":{"displayName":"ฟรังก์เซฟาธนาคารรัฐแอฟริกากลาง","displayName-count-other":"ฟรังก์เซฟาธนาคารรัฐแอฟริกากลาง","symbol":"FCFA"},"XAG":{"displayName":"เงิน","symbol":"XAG"},"XAU":{"displayName":"ทอง","symbol":"XAU"},"XBA":{"displayName":"หน่วยคอมโพสิตยุโรป","symbol":"XBA"},"XBB":{"displayName":"หน่วยโมเนทารียุโรป","symbol":"XBB"},"XBC":{"displayName":"หน่วยบัญชียุโรป [XBC]","symbol":"XBC"},"XBD":{"displayName":"หน่วยบัญชียุโรป [XBD]","symbol":"XBD"},"XCD":{"displayName":"ดอลลาร์แคริบเบียนตะวันออก","displayName-count-other":"ดอลลาร์แคริบเบียนตะวันออก","symbol":"EC$","symbol-alt-narrow":"$"},"XDR":{"displayName":"สิทธิถอนเงินพิเศษ","symbol":"XDR"},"XEU":{"displayName":"หน่วยสกุลเงินยุโรป","symbol":"XEU"},"XFO":{"displayName":"ฟรังก์ทองฝรั่งเศส","symbol":"XFO"},"XFU":{"displayName":"ฟรังก์ยูไอซีฝรั่งเศส","symbol":"XFU"},"XOF":{"displayName":"ฟรังก์เซฟาธนาคารกลางรัฐแอฟริกาตะวันตก","displayName-count-other":"ฟรังก์เซฟาธนาคารกลางรัฐแอฟริกาตะวันตก","symbol":"CFA"},"XPD":{"displayName":"พัลเลเดียม","symbol":"XPD"},"XPF":{"displayName":"ฟรังก์ซีเอฟพี","displayName-count-other":"ฟรังก์ซีเอฟพี","symbol":"CFPF"},"XPT":{"displayName":"แพลตินัม","symbol":"XPT"},"XRE":{"displayName":"กองทุนไรเน็ต","symbol":"XRE"},"XSU":{"displayName":"ซูเกร","symbol":"XSU"},"XTS":{"displayName":"รหัสทดสอบสกุลเงิน","symbol":"XTS"},"XUA":{"displayName":"หน่วยบัญชี เอดีบี","symbol":"XUA"},"XXX":{"displayName":"สกุลเงินที่ไม่รู้จัก","displayName-count-other":"(สกุลเงินที่ไม่รู้จัก)","symbol":"XXX"},"YDD":{"displayName":"ดีนาร์เยเมน","symbol":"YDD"},"YER":{"displayName":"เรียลเยเมน","displayName-count-other":"เรียลเยเมน","symbol":"YER"},"YUD":{"displayName":"ฮาร์ดดีนาร์ยูโกสลาเวีย","symbol":"YUD"},"YUM":{"displayName":"โนวิย์ดีนาร์ยูโกสลาเวีย","symbol":"YUM"},"YUN":{"displayName":"คอนเวอร์ทิเบิลดีนาร์ยูโกสลาเวีย","symbol":"YUN"},"YUR":{"displayName":"ดีนาร์ปฏิรูปยูโกสลาเวีย (1992–1993)","symbol":"YUR"},"ZAL":{"displayName":"แรนด์แอฟริกาใต้ (การเงิน)","symbol":"ZAL"},"ZAR":{"displayName":"แรนด์แอฟริกาใต้","displayName-count-other":"แรนด์แอฟริกาใต้","symbol":"ZAR","symbol-alt-narrow":"R"},"ZMK":{"displayName":"ควาชาแซมเบีย (1968–2012)","symbol":"ZMK"},"ZMW":{"displayName":"ควาชาแซมเบีย","displayName-count-other":"ควาชาแซมเบีย","symbol":"ZMW","symbol-alt-narrow":"ZK"},"ZRN":{"displayName":"นิวแซร์คองโก","symbol":"ZRN"},"ZRZ":{"displayName":"แซร์คองโก","symbol":"ZRZ"},"ZWD":{"displayName":"ดอลลาร์ซิมบับเว","symbol":"ZWD"},"ZWL":{"displayName":"ดอลลาร์ซิมบับเว (2009)","symbol":"ZWL"},"ZWR":{"displayName":"ดอลลาร์ซิมบับเว (2008)","symbol":"ZWR"}},"defaultNumberingSystem":"latn","otherNumberingSystems":{"native":"thai"},"minimumGroupingDigits":"1","symbols-numberSystem-latn":{"decimal":".","group":",","list":";","percentSign":"%","plusSign":"+","minusSign":"-","exponential":"E","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"NaN","timeSeparator":":"},"symbols-numberSystem-thai":{"decimal":".","group":",","list":";","percentSign":"%","plusSign":"+","minusSign":"-","exponential":"E","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"NaN","timeSeparator":":"},"decimalFormats-numberSystem-latn":{"standard":"#,##0.###","long":{"decimalFormat":{"1000-count-other":"0 พัน","10000-count-other":"0 หมื่น","100000-count-other":"0 แสน","1000000-count-other":"0 ล้าน","10000000-count-other":"00 ล้าน","100000000-count-other":"000 ล้าน","1000000000-count-other":"0 พันล้าน","10000000000-count-other":"0 หมื่นล้าน","100000000000-count-other":"0 แสนล้าน","1000000000000-count-other":"0 ล้านล้าน","10000000000000-count-other":"00 ล้านล้าน","100000000000000-count-other":"000 ล้านล้าน"}},"short":{"decimalFormat":{"1000-count-other":"0K","10000-count-other":"00K","100000-count-other":"000K","1000000-count-other":"0M","10000000-count-other":"00M","100000000-count-other":"000M","1000000000-count-other":"0B","10000000000-count-other":"00B","100000000000-count-other":"000B","1000000000000-count-other":"0T","10000000000000-count-other":"00T","100000000000000-count-other":"000T"}}},"decimalFormats-numberSystem-thai":{"standard":"#,##0.###","long":{"decimalFormat":{"1000-count-other":"0 พัน","10000-count-other":"0 หมื่น","100000-count-other":"0 แสน","1000000-count-other":"0 ล้าน","10000000-count-other":"00 ล้าน","100000000-count-other":"000 ล้าน","1000000000-count-other":"0 พันล้าน","10000000000-count-other":"0 หมื่นล้าน","100000000000-count-other":"0 แสนล้าน","1000000000000-count-other":"0 ล้านล้าน","10000000000000-count-other":"00 ล้านล้าน","100000000000000-count-other":"000 ล้านล้าน"}},"short":{"decimalFormat":{"1000-count-other":"0K","10000-count-other":"00K","100000-count-other":"000K","1000000-count-other":"0M","10000000-count-other":"00M","100000000-count-other":"000M","1000000000-count-other":"0B","10000000000-count-other":"00B","100000000000-count-other":"000B","1000000000000-count-other":"0T","10000000000000-count-other":"00T","100000000000000-count-other":"000T"}}},"scientificFormats-numberSystem-latn":{"standard":"#E0"},"scientificFormats-numberSystem-thai":{"standard":"#E0"},"percentFormats-numberSystem-latn":{"standard":"#,##0%"},"percentFormats-numberSystem-thai":{"standard":"#,##0%"},"currencyFormats-numberSystem-latn":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"¤#,##0.00","accounting":"¤#,##0.00;(¤#,##0.00)","short":{"standard":{"1000-count-other":"¤0K","10000-count-other":"¤00K","100000-count-other":"¤000K","1000000-count-other":"¤0M","10000000-count-other":"¤00M","100000000-count-other":"¤000M","1000000000-count-other":"¤0B","10000000000-count-other":"¤00B","100000000000-count-other":"¤000B","1000000000000-count-other":"¤0T","10000000000000-count-other":"¤00T","100000000000000-count-other":"¤000T"}},"unitPattern-count-other":"{0} {1}"},"currencyFormats-numberSystem-thai":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"¤#,##0.00","accounting":"¤#,##0.00;(¤#,##0.00)","short":{"standard":{"1000-count-other":"¤0K","10000-count-other":"¤00K","100000-count-other":"¤000K","1000000-count-other":"¤0M","10000000-count-other":"¤00M","100000000-count-other":"¤000M","1000000000-count-other":"¤0B","10000000000-count-other":"¤00B","100000000000-count-other":"¤000B","1000000000000-count-other":"¤0T","10000000000000-count-other":"¤00T","100000000000000-count-other":"¤000T"}},"unitPattern-count-other":"{0} {1}"},"miscPatterns-numberSystem-latn":{"atLeast":"{0}+","range":"{0}-{1}"},"miscPatterns-numberSystem-thai":{"atLeast":"{0}+","range":"{0}-{1}"},"minimalPairs":{"pluralMinimalPairs-count-other":"{0} วัน","other":"เลี้ยวขวาที่ทางเลี้ยวที่ {0}"}}},"tr":{"identity":{"version":{"_number":"$Revision: 13705 $","_cldrVersion":"32"},"language":"tr"},"dates":{"calendars":{"gregorian":{"months":{"format":{"abbreviated":{"1":"Oca","2":"Şub","3":"Mar","4":"Nis","5":"May","6":"Haz","7":"Tem","8":"Ağu","9":"Eyl","10":"Eki","11":"Kas","12":"Ara"},"narrow":{"1":"O","2":"Ş","3":"M","4":"N","5":"M","6":"H","7":"T","8":"A","9":"E","10":"E","11":"K","12":"A"},"wide":{"1":"Ocak","2":"Şubat","3":"Mart","4":"Nisan","5":"Mayıs","6":"Haziran","7":"Temmuz","8":"Ağustos","9":"Eylül","10":"Ekim","11":"Kasım","12":"Aralık"}},"stand-alone":{"abbreviated":{"1":"Oca","2":"Şub","3":"Mar","4":"Nis","5":"May","6":"Haz","7":"Tem","8":"Ağu","9":"Eyl","10":"Eki","11":"Kas","12":"Ara"},"narrow":{"1":"O","2":"Ş","3":"M","4":"N","5":"M","6":"H","7":"T","8":"A","9":"E","10":"E","11":"K","12":"A"},"wide":{"1":"Ocak","2":"Şubat","3":"Mart","4":"Nisan","5":"Mayıs","6":"Haziran","7":"Temmuz","8":"Ağustos","9":"Eylül","10":"Ekim","11":"Kasım","12":"Aralık"}}},"days":{"format":{"abbreviated":{"sun":"Paz","mon":"Pzt","tue":"Sal","wed":"Çar","thu":"Per","fri":"Cum","sat":"Cmt"},"narrow":{"sun":"P","mon":"P","tue":"S","wed":"Ç","thu":"P","fri":"C","sat":"C"},"short":{"sun":"Pa","mon":"Pt","tue":"Sa","wed":"Ça","thu":"Pe","fri":"Cu","sat":"Ct"},"wide":{"sun":"Pazar","mon":"Pazartesi","tue":"Salı","wed":"Çarşamba","thu":"Perşembe","fri":"Cuma","sat":"Cumartesi"}},"stand-alone":{"abbreviated":{"sun":"Paz","mon":"Pzt","tue":"Sal","wed":"Çar","thu":"Per","fri":"Cum","sat":"Cmt"},"narrow":{"sun":"P","mon":"P","tue":"S","wed":"Ç","thu":"P","fri":"C","sat":"C"},"short":{"sun":"Pa","mon":"Pt","tue":"Sa","wed":"Ça","thu":"Pe","fri":"Cu","sat":"Ct"},"wide":{"sun":"Pazar","mon":"Pazartesi","tue":"Salı","wed":"Çarşamba","thu":"Perşembe","fri":"Cuma","sat":"Cumartesi"}}},"quarters":{"format":{"abbreviated":{"1":"Ç1","2":"Ç2","3":"Ç3","4":"Ç4"},"narrow":{"1":"1.","2":"2.","3":"3.","4":"4."},"wide":{"1":"1. çeyrek","2":"2. çeyrek","3":"3. çeyrek","4":"4. çeyrek"}},"stand-alone":{"abbreviated":{"1":"Ç1","2":"Ç2","3":"Ç3","4":"Ç4"},"narrow":{"1":"1.","2":"2.","3":"3.","4":"4."},"wide":{"1":"1. çeyrek","2":"2. çeyrek","3":"3. çeyrek","4":"4. çeyrek"}}},"dayPeriods":{"format":{"abbreviated":{"midnight":"gece yarısı","am":"ÖÖ","noon":"öğle","pm":"ÖS","morning1":"sabah","morning2":"öğleden önce","afternoon1":"öğleden sonra","afternoon2":"akşamüstü","evening1":"akşam","night1":"gece"},"narrow":{"midnight":"gece","am":"öö","noon":"ö","pm":"ös","morning1":"sabah","morning2":"öğleden önce","afternoon1":"öğleden sonra","afternoon2":"akşamüstü","evening1":"akşam","night1":"gece"},"wide":{"midnight":"gece yarısı","am":"ÖÖ","noon":"öğle","pm":"ÖS","morning1":"sabah","morning2":"öğleden önce","afternoon1":"öğleden sonra","afternoon2":"akşamüstü","evening1":"akşam","night1":"gece"}},"stand-alone":{"abbreviated":{"midnight":"gece yarısı","am":"ÖÖ","noon":"öğle","pm":"ÖS","morning1":"sabah","morning2":"öğleden önce","afternoon1":"öğleden sonra","afternoon2":"akşamüstü","evening1":"akşam","night1":"gece"},"narrow":{"midnight":"gece yarısı","am":"ÖÖ","noon":"öğle","pm":"ÖS","morning1":"sabah","morning2":"öğleden önce","afternoon1":"öğleden sonra","afternoon2":"akşamüstü","evening1":"akşam","night1":"gece"},"wide":{"midnight":"gece yarısı","am":"ÖÖ","noon":"öğle","pm":"ÖS","morning1":"sabah","morning2":"öğleden önce","afternoon1":"öğleden sonra","afternoon2":"akşamüstü","evening1":"akşam","night1":"gece"}}},"eras":{"eraNames":{"0":"Milattan Önce","1":"Milattan Sonra","0-alt-variant":"İsa’dan Önce","1-alt-variant":"İsa’dan Sonra"},"eraAbbr":{"0":"MÖ","1":"MS","0-alt-variant":"İÖ","1-alt-variant":"İS"},"eraNarrow":{"0":"MÖ","1":"MS","0-alt-variant":"İÖ","1-alt-variant":"İS"}},"dateFormats":{"full":"d MMMM y EEEE","long":"d MMMM y","medium":"d MMM y","short":"d.MM.y"},"timeFormats":{"full":"HH:mm:ss zzzz","long":"HH:mm:ss z","medium":"HH:mm:ss","short":"HH:mm"},"dateTimeFormats":{"full":"{1} {0}","long":"{1} {0}","medium":"{1} {0}","short":"{1} {0}","availableFormats":{"Bh":"B h","Bhm":"B h:mm","Bhms":"B h:mm:ss","d":"d","E":"ccc","EBhm":"E B h:mm","EBhms":"E B h:mm:ss","Ed":"d E","Ehm":"E a h:mm","EHm":"E HH:mm","Ehms":"E a h:mm:ss","EHms":"E HH:mm:ss","Gy":"G y","GyMMM":"G MMM y","GyMMMd":"G d MMM y","GyMMMEd":"G d MMM y E","h":"a h","H":"HH","hm":"a h:mm","Hm":"HH:mm","hms":"a h:mm:ss","Hms":"HH:mm:ss","hmsv":"a h:mm:ss v","Hmsv":"HH:mm:ss v","hmv":"a h:mm v","Hmv":"HH:mm v","M":"L","Md":"d/M","MEd":"d/MM E","MMM":"LLL","MMMd":"d MMM","MMMEd":"d MMMM E","MMMMd":"d MMMM","MMMMEd":"d MMMM E","MMMMW-count-one":"MMMM 'ayının' W. 'haftası'","MMMMW-count-other":"MMMM 'ayının' W. 'haftası'","mmss":"mm:ss","ms":"mm:ss","y":"y","yM":"MM/y","yMd":"dd.MM.y","yMEd":"d.M.y E","yMM":"MM.y","yMMM":"MMM y","yMMMd":"d MMM y","yMMMEd":"d MMM y E","yMMMM":"MMMM y","yQQQ":"y QQQ","yQQQQ":"y QQQQ","yw-count-one":"Y 'yılının' w. 'haftası'","yw-count-other":"Y 'yılının' w. 'haftası'"},"appendItems":{"Day":"{0} ({2}: {1})","Day-Of-Week":"{0} {1}","Era":"{1} {0}","Hour":"{0} ({2}: {1})","Minute":"{0} ({2}: {1})","Month":"{0} ({2}: {1})","Quarter":"{0} ({2}: {1})","Second":"{0} ({2}: {1})","Timezone":"{0} {1}","Week":"{0} ({2}: {1})","Year":"{1} {0}"},"intervalFormats":{"intervalFormatFallback":"{0} – {1}","d":{"d":"d–d"},"h":{"a":"a h – a h","h":"a h–h"},"H":{"H":"HH–HH"},"hm":{"a":"a h:mm – a h:mm","h":"a h:mm–h:mm","m":"a h:mm–h:mm"},"Hm":{"H":"HH:mm–HH:mm","m":"HH:mm–HH:mm"},"hmv":{"a":"a h:mm – a h:mm v","h":"a h:mm–h:mm v","m":"a h:mm–h:mm v"},"Hmv":{"H":"HH:mm–HH:mm v","m":"HH:mm–HH:mm v"},"hv":{"a":"a h – a h v","h":"a h–h v"},"Hv":{"H":"HH–HH v"},"M":{"M":"M – M"},"Md":{"d":"d.M – d.M","M":"d.M – d.M"},"MEd":{"d":"d.M E – d.M E","M":"d.M E – d.M E"},"MMM":{"M":"MMM–MMM"},"MMMd":{"d":"d – d MMM","M":"d MMM – d MMM"},"MMMEd":{"d":"d MMM E – d MMM E","M":"d MMM E – d MMM E"},"y":{"y":"y–y"},"yM":{"M":"MM.y – MM.y","y":"MM.y – MM.y"},"yMd":{"d":"dd.MM.y – dd.MM.y","M":"dd.MM.y – dd.MM.y","y":"dd.MM.y – dd.MM.y"},"yMEd":{"d":"dd.MM.y E – dd.MM.y E","M":"dd.MM.y E – dd.MM.y E","y":"dd.MM.y E – dd.MM.y E"},"yMMM":{"M":"MMM–MMM y","y":"MMM y – MMM y"},"yMMMd":{"d":"d–d MMM y","M":"d MMM – d MMM y","y":"d MMM y – d MMM y"},"yMMMEd":{"d":"d MMM y E – d MMM y E","M":"d MMM y E – d MMM y E","y":"d MMM y E – d MMM y E"},"yMMMM":{"M":"MMMM – MMMM y","y":"MMMM y – MMMM y"}}}}},"fields":{"era":{"displayName":"çağ"},"era-short":{"displayName":"çağ"},"era-narrow":{"displayName":"çağ"},"year":{"displayName":"yıl","relative-type--1":"geçen yıl","relative-type-0":"bu yıl","relative-type-1":"gelecek yıl","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} yıl sonra","relativeTimePattern-count-other":"{0} yıl sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} yıl önce","relativeTimePattern-count-other":"{0} yıl önce"}},"year-short":{"displayName":"yıl","relative-type--1":"geçen yıl","relative-type-0":"bu yıl","relative-type-1":"gelecek yıl","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} yıl sonra","relativeTimePattern-count-other":"{0} yıl sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} yıl önce","relativeTimePattern-count-other":"{0} yıl önce"}},"year-narrow":{"displayName":"yıl","relative-type--1":"geçen yıl","relative-type-0":"bu yıl","relative-type-1":"gelecek yıl","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} yıl sonra","relativeTimePattern-count-other":"{0} yıl sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} yıl önce","relativeTimePattern-count-other":"{0} yıl önce"}},"quarter":{"displayName":"çeyrek","relative-type--1":"geçen çeyrek","relative-type-0":"bu çeyrek","relative-type-1":"gelecek çeyrek","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} çeyrek sonra","relativeTimePattern-count-other":"{0} çeyrek sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} çeyrek önce","relativeTimePattern-count-other":"{0} çeyrek önce"}},"quarter-short":{"displayName":"çyr.","relative-type--1":"geçen çeyrek","relative-type-0":"bu çeyrek","relative-type-1":"gelecek çeyrek","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} çyr. sonra","relativeTimePattern-count-other":"{0} çyr. sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} çyr. önce","relativeTimePattern-count-other":"{0} çyr. önce"}},"quarter-narrow":{"displayName":"çyr.","relative-type--1":"geçen çeyrek","relative-type-0":"bu çeyrek","relative-type-1":"gelecek çeyrek","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} çyr. sonra","relativeTimePattern-count-other":"{0} çyr. sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} çyr. önce","relativeTimePattern-count-other":"{0} çyr. önce"}},"month":{"displayName":"ay","relative-type--1":"geçen ay","relative-type-0":"bu ay","relative-type-1":"gelecek ay","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} ay sonra","relativeTimePattern-count-other":"{0} ay sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ay önce","relativeTimePattern-count-other":"{0} ay önce"}},"month-short":{"displayName":"ay","relative-type--1":"geçen ay","relative-type-0":"bu ay","relative-type-1":"gelecek ay","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} ay sonra","relativeTimePattern-count-other":"{0} ay sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ay önce","relativeTimePattern-count-other":"{0} ay önce"}},"month-narrow":{"displayName":"ay","relative-type--1":"geçen ay","relative-type-0":"bu ay","relative-type-1":"gelecek ay","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} ay sonra","relativeTimePattern-count-other":"{0} ay sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} ay önce","relativeTimePattern-count-other":"{0} ay önce"}},"week":{"displayName":"hafta","relative-type--1":"geçen hafta","relative-type-0":"bu hafta","relative-type-1":"gelecek hafta","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} hafta sonra","relativeTimePattern-count-other":"{0} hafta sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} hafta önce","relativeTimePattern-count-other":"{0} hafta önce"},"relativePeriod":"{0} haftası"},"week-short":{"displayName":"hf.","relative-type--1":"geçen hafta","relative-type-0":"bu hafta","relative-type-1":"gelecek hafta","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} hf. sonra","relativeTimePattern-count-other":"{0} hf. sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} hf. önce","relativeTimePattern-count-other":"{0} hf. önce"},"relativePeriod":"{0} haftası"},"week-narrow":{"displayName":"hf.","relative-type--1":"geçen hafta","relative-type-0":"bu hafta","relative-type-1":"gelecek hafta","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} hf. sonra","relativeTimePattern-count-other":"{0} hf. sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} hf. önce","relativeTimePattern-count-other":"{0} hf. önce"},"relativePeriod":"{0} haftası"},"weekOfMonth":{"displayName":"ayın haftası"},"weekOfMonth-short":{"displayName":"ayın haftası"},"weekOfMonth-narrow":{"displayName":"ayın haftası"},"day":{"displayName":"gün","relative-type--2":"evvelsi gün","relative-type--1":"dün","relative-type-0":"bugün","relative-type-1":"yarın","relative-type-2":"öbür gün","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} gün sonra","relativeTimePattern-count-other":"{0} gün sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} gün önce","relativeTimePattern-count-other":"{0} gün önce"}},"day-short":{"displayName":"gün","relative-type--2":"evvelsi gün","relative-type--1":"dün","relative-type-0":"bugün","relative-type-1":"yarın","relative-type-2":"öbür gün","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} gün sonra","relativeTimePattern-count-other":"{0} gün sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} gün önce","relativeTimePattern-count-other":"{0} gün önce"}},"day-narrow":{"displayName":"gün","relative-type--2":"evvelsi gün","relative-type--1":"dün","relative-type-0":"bugün","relative-type-1":"yarın","relative-type-2":"öbür gün","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} gün sonra","relativeTimePattern-count-other":"{0} gün sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} gün önce","relativeTimePattern-count-other":"{0} gün önce"}},"dayOfYear":{"displayName":"yılın günü"},"dayOfYear-short":{"displayName":"yılın günü"},"dayOfYear-narrow":{"displayName":"yılın günü"},"weekday":{"displayName":"haftanın günü"},"weekday-short":{"displayName":"haftanın günü"},"weekday-narrow":{"displayName":"haftanın günü"},"weekdayOfMonth":{"displayName":"ayın günü"},"weekdayOfMonth-short":{"displayName":"ayın günü"},"weekdayOfMonth-narrow":{"displayName":"ayın günü"},"sun":{"relative-type--1":"geçen pazar","relative-type-0":"bu pazar","relative-type-1":"gelecek pazar","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} pazar sonra","relativeTimePattern-count-other":"{0} pazar sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} pazar önce","relativeTimePattern-count-other":"{0} pazar önce"}},"sun-short":{"relative-type--1":"geçen paz.","relative-type-0":"bu paz.","relative-type-1":"gelecek paz.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} paz. sonra","relativeTimePattern-count-other":"{0} paz. sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} paz. önce","relativeTimePattern-count-other":"{0} paz. önce"}},"sun-narrow":{"relative-type--1":"geçen paz.","relative-type-0":"bu paz.","relative-type-1":"gelecek paz.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} paz. sonra","relativeTimePattern-count-other":"{0} paz. sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} paz. önce","relativeTimePattern-count-other":"{0} paz. önce"}},"mon":{"relative-type--1":"geçen pazartesi","relative-type-0":"bu pazartesi","relative-type-1":"gelecek pazartesi","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} pazartesi sonra","relativeTimePattern-count-other":"{0} pazartesi sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} pazartesi önce","relativeTimePattern-count-other":"{0} pazartesi önce"}},"mon-short":{"relative-type--1":"geçen pzt.","relative-type-0":"bu pzt.","relative-type-1":"gelecek pzt.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} pzt. sonra","relativeTimePattern-count-other":"{0} pzt. sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} pzt. önce","relativeTimePattern-count-other":"{0} pzt. önce"}},"mon-narrow":{"relative-type--1":"geçen pzt.","relative-type-0":"bu pzt.","relative-type-1":"gelecek pzt.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} pzt. sonra","relativeTimePattern-count-other":"{0} pzt. sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} pzt. önce","relativeTimePattern-count-other":"{0} pzt. önce"}},"tue":{"relative-type--1":"geçen salı","relative-type-0":"bu salı","relative-type-1":"gelecek salı","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} salı sonra","relativeTimePattern-count-other":"{0} salı sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} salı önce","relativeTimePattern-count-other":"{0} salı önce"}},"tue-short":{"relative-type--1":"geçen salı","relative-type-0":"bu salı","relative-type-1":"gelecek salı","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} salı sonra","relativeTimePattern-count-other":"{0} salı sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} salı önce","relativeTimePattern-count-other":"{0} salı önce"}},"tue-narrow":{"relative-type--1":"geçen salı","relative-type-0":"bu salı","relative-type-1":"gelecek salı","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} salı sonra","relativeTimePattern-count-other":"{0} salı sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} salı önce","relativeTimePattern-count-other":"{0} salı önce"}},"wed":{"relative-type--1":"geçen çarşamba","relative-type-0":"bu çarşamba","relative-type-1":"gelecek çarşamba","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} çarşamba sonra","relativeTimePattern-count-other":"{0} çarşamba sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} çarşamba önce","relativeTimePattern-count-other":"{0} çarşamba önce"}},"wed-short":{"relative-type--1":"geçen çar.","relative-type-0":"bu çar.","relative-type-1":"gelecek çar.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} çar. sonra","relativeTimePattern-count-other":"{0} çar. sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} çar. önce","relativeTimePattern-count-other":"{0} çar. önce"}},"wed-narrow":{"relative-type--1":"geçen çar.","relative-type-0":"bu çar.","relative-type-1":"gelecek çar.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} çar. sonra","relativeTimePattern-count-other":"{0} çar. sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} çar. önce","relativeTimePattern-count-other":"{0} çar. önce"}},"thu":{"relative-type--1":"geçen perşembe","relative-type-0":"bu perşembe","relative-type-1":"gelecek perşembe","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} perşembe sonra","relativeTimePattern-count-other":"{0} perşembe sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} perşembe önce","relativeTimePattern-count-other":"{0} perşembe önce"}},"thu-short":{"relative-type--1":"geçen per.","relative-type-0":"bu per.","relative-type-1":"gelecek per.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} per. sonra","relativeTimePattern-count-other":"{0} per. sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} per. önce","relativeTimePattern-count-other":"{0} per. önce"}},"thu-narrow":{"relative-type--1":"geçen per.","relative-type-0":"bu per.","relative-type-1":"gelecek per.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} per. sonra","relativeTimePattern-count-other":"{0} per. sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} per. önce","relativeTimePattern-count-other":"{0} per. önce"}},"fri":{"relative-type--1":"geçen cuma","relative-type-0":"bu cuma","relative-type-1":"gelecek cuma","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} cuma sonra","relativeTimePattern-count-other":"{0} cuma sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} cuma önce","relativeTimePattern-count-other":"{0} cuma önce"}},"fri-short":{"relative-type--1":"geçen cuma","relative-type-0":"bu cuma","relative-type-1":"gelecek cuma","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} cuma sonra","relativeTimePattern-count-other":"{0} cuma sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} cuma önce","relativeTimePattern-count-other":"{0} cuma önce"}},"fri-narrow":{"relative-type--1":"geçen cuma","relative-type-0":"bu cuma","relative-type-1":"gelecek cuma","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} cuma sonra","relativeTimePattern-count-other":"{0} cuma sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} cuma önce","relativeTimePattern-count-other":"{0} cuma önce"}},"sat":{"relative-type--1":"geçen cumartesi","relative-type-0":"bu cumartesi","relative-type-1":"gelecek cumartesi","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} cumartesi sonra","relativeTimePattern-count-other":"{0} cumartesi sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} cumartesi önce","relativeTimePattern-count-other":"{0} cumartesi önce"}},"sat-short":{"relative-type--1":"geçen cmt.","relative-type-0":"bu cmt.","relative-type-1":"gelecek cmt.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} cmt. sonra","relativeTimePattern-count-other":"{0} cmt. sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} cmt. önce","relativeTimePattern-count-other":"{0} cmt. önce"}},"sat-narrow":{"relative-type--1":"geçen cmt.","relative-type-0":"bu cmt.","relative-type-1":"gelecek cmt.","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} cmt. sonra","relativeTimePattern-count-other":"{0} cmt. sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} cmt. önce","relativeTimePattern-count-other":"{0} cmt. önce"}},"dayperiod-short":{"displayName":"ÖÖ/ÖS"},"dayperiod":{"displayName":"ÖÖ/ÖS"},"dayperiod-narrow":{"displayName":"ÖÖ/ÖS"},"hour":{"displayName":"saat","relative-type-0":"bu saat","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} saat sonra","relativeTimePattern-count-other":"{0} saat sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} saat önce","relativeTimePattern-count-other":"{0} saat önce"}},"hour-short":{"displayName":"sa.","relative-type-0":"bu saat","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} sa. sonra","relativeTimePattern-count-other":"{0} sa. sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} sa. önce","relativeTimePattern-count-other":"{0} sa. önce"}},"hour-narrow":{"displayName":"sa.","relative-type-0":"bu saat","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} sa. sonra","relativeTimePattern-count-other":"{0} sa. sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} sa. önce","relativeTimePattern-count-other":"{0} sa. önce"}},"minute":{"displayName":"dakika","relative-type-0":"bu dakika","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} dakika sonra","relativeTimePattern-count-other":"{0} dakika sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} dakika önce","relativeTimePattern-count-other":"{0} dakika önce"}},"minute-short":{"displayName":"dk.","relative-type-0":"bu dakika","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} dk. sonra","relativeTimePattern-count-other":"{0} dk. sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} dk. önce","relativeTimePattern-count-other":"{0} dk. önce"}},"minute-narrow":{"displayName":"dk.","relative-type-0":"bu dakika","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} dk. sonra","relativeTimePattern-count-other":"{0} dk. sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} dk. önce","relativeTimePattern-count-other":"{0} dk. önce"}},"second":{"displayName":"saniye","relative-type-0":"şimdi","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} saniye sonra","relativeTimePattern-count-other":"{0} saniye sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} saniye önce","relativeTimePattern-count-other":"{0} saniye önce"}},"second-short":{"displayName":"sn.","relative-type-0":"şimdi","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} sn. sonra","relativeTimePattern-count-other":"{0} sn. sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} sn. önce","relativeTimePattern-count-other":"{0} sn. önce"}},"second-narrow":{"displayName":"sn.","relative-type-0":"şimdi","relativeTime-type-future":{"relativeTimePattern-count-one":"{0} sn. sonra","relativeTimePattern-count-other":"{0} sn. sonra"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} sn. önce","relativeTimePattern-count-other":"{0} sn. önce"}},"zone":{"displayName":"saat dilimi"},"zone-short":{"displayName":"dilim"},"zone-narrow":{"displayName":"dilim"}}},"numbers":{"currencies":{"ADP":{"displayName":"Andorra Pezetası","displayName-count-one":"Andorra Pezetası","displayName-count-other":"Andorra Pezetası","symbol":"ADP"},"AED":{"displayName":"Birleşik Arap Emirlikleri Dirhemi","displayName-count-one":"BAE dirhemi","displayName-count-other":"BAE dirhemi","symbol":"AED"},"AFA":{"displayName":"Afganistan Afganisi (1927–2002)","displayName-count-one":"Afganistan Afganisi (1927–2002)","displayName-count-other":"Afganistan Afganisi (1927–2002)","symbol":"AFA"},"AFN":{"displayName":"Afganistan Afganisi","displayName-count-one":"Afganistan afganisi","displayName-count-other":"Afganistan afganisi","symbol":"AFN"},"ALK":{"displayName":"Arnavutluk Leki (1946–1965)","displayName-count-one":"Arnavutluk leki (1946–1965)","displayName-count-other":"Arnavutluk leki (1946–1965)","symbol":"ALK"},"ALL":{"displayName":"Arnavutluk Leki","displayName-count-one":"Arnavutluk leki","displayName-count-other":"Arnavutluk leki","symbol":"ALL"},"AMD":{"displayName":"Ermenistan Dramı","displayName-count-one":"Ermenistan dramı","displayName-count-other":"Ermenistan dramı","symbol":"AMD"},"ANG":{"displayName":"Hollanda Antilleri Guldeni","displayName-count-one":"Hollanda Antilleri guldeni","displayName-count-other":"Hollanda Antilleri guldeni","symbol":"ANG"},"AOA":{"displayName":"Angola Kvanzası","displayName-count-one":"Angola kvanzası","displayName-count-other":"Angola kvanzası","symbol":"AOA","symbol-alt-narrow":"Kz"},"AOK":{"displayName":"Angola Kvanzası (1977–1990)","symbol":"AOK"},"AON":{"displayName":"Yeni Angola Kvanzası (1990–2000)","symbol":"AON"},"AOR":{"displayName":"Angola Kvanzası Reajustado (1995–1999)","symbol":"AOR"},"ARA":{"displayName":"Arjantin Australi","displayName-count-one":"Arjantin Australi","displayName-count-other":"Arjantin Australi","symbol":"ARA"},"ARL":{"displayName":"Arjantin Peso Leyi (1970–1983)","displayName-count-one":"Arjantin peso leyi (1970–1983)","displayName-count-other":"Arjantin peso leyi (1970–1983)","symbol":"ARL"},"ARM":{"displayName":"Arjantin Pesosu (1881–1970)","displayName-count-one":"Arjantin pesosu (1881–1970)","displayName-count-other":"Arjantin pesosu (1881–1970)","symbol":"ARM"},"ARP":{"displayName":"Arjantin Pezosu (1983–1985)","displayName-count-one":"Arjantin Pezosu (1983–1985)","displayName-count-other":"Arjantin Pezosu (1983–1985)","symbol":"ARP"},"ARS":{"displayName":"Arjantin Pesosu","displayName-count-one":"Arjantin pesosu","displayName-count-other":"Arjantin pesosu","symbol":"ARS","symbol-alt-narrow":"$"},"ATS":{"displayName":"Avusturya Şilini","displayName-count-one":"Avusturya Şilini","displayName-count-other":"Avusturya Şilini","symbol":"ATS"},"AUD":{"displayName":"Avustralya Doları","displayName-count-one":"Avustralya doları","displayName-count-other":"Avustralya doları","symbol":"AU$","symbol-alt-narrow":"$"},"AWG":{"displayName":"Aruba Florini","displayName-count-one":"Aruba florini","displayName-count-other":"Aruba florini","symbol":"AWG"},"AZM":{"displayName":"Azerbaycan Manatı (1993–2006)","displayName-count-one":"Azerbaycan Manatı (1993–2006)","displayName-count-other":"Azerbaycan Manatı (1993–2006)","symbol":"AZM"},"AZN":{"displayName":"Azerbaycan Manatı","displayName-count-one":"Azerbaycan manatı","displayName-count-other":"Azerbaycan manatı","symbol":"AZN"},"BAD":{"displayName":"Bosna Hersek Dinarı","displayName-count-one":"Bosna Hersek Dinarı","displayName-count-other":"Bosna Hersek Dinarı","symbol":"BAD"},"BAM":{"displayName":"Konvertibl Bosna Hersek Markı","displayName-count-one":"Konvertibl Bosna Hersek markı","displayName-count-other":"Konvertibl Bosna Hersek markı","symbol":"BAM","symbol-alt-narrow":"KM"},"BAN":{"displayName":"Yeni Bosna Hersek Dinarı (1994–1997)","displayName-count-one":"Yeni Bosna Hersek dinarı (1994–1997)","displayName-count-other":"Yeni Bosna Hersek dinarı (1994–1997)","symbol":"BAN"},"BBD":{"displayName":"Barbados Doları","displayName-count-one":"Barbados doları","displayName-count-other":"Barbados doları","symbol":"BBD","symbol-alt-narrow":"$"},"BDT":{"displayName":"Bangladeş Takası","displayName-count-one":"Bangladeş takası","displayName-count-other":"Bangladeş takası","symbol":"BDT","symbol-alt-narrow":"৳"},"BEC":{"displayName":"Belçika Frangı (konvertibl)","displayName-count-one":"Belçika Frangı (konvertibl)","displayName-count-other":"Belçika Frangı (konvertibl)","symbol":"BEC"},"BEF":{"displayName":"Belçika Frangı","displayName-count-one":"Belçika Frangı","displayName-count-other":"Belçika Frangı","symbol":"BEF"},"BEL":{"displayName":"Belçika Frangı (finansal)","displayName-count-one":"Belçika Frangı (finansal)","displayName-count-other":"Belçika Frangı (finansal)","symbol":"BEL"},"BGL":{"displayName":"Bulgar Levası (Hard)","displayName-count-one":"Bulgar Levası (Hard)","displayName-count-other":"Bulgar Levası (Hard)","symbol":"BGL"},"BGM":{"displayName":"Sosyalist Bulgaristan Levası","displayName-count-one":"Sosyalist Bulgaristan levası","displayName-count-other":"Sosyalist Bulgaristan levası","symbol":"BGM"},"BGN":{"displayName":"Bulgar Levası","displayName-count-one":"Bulgar levası","displayName-count-other":"Bulgar levası","symbol":"BGN"},"BGO":{"displayName":"Bulgar Levası (1879–1952)","displayName-count-one":"Bulgar levası (1879–1952)","displayName-count-other":"Bulgar levası (1879–1952)","symbol":"BGO"},"BHD":{"displayName":"Bahreyn Dinarı","displayName-count-one":"Bahreyn dinarı","displayName-count-other":"Bahreyn dinarı","symbol":"BHD"},"BIF":{"displayName":"Burundi Frangı","displayName-count-one":"Burundi frangı","displayName-count-other":"Burundi frangı","symbol":"BIF"},"BMD":{"displayName":"Bermuda Doları","displayName-count-one":"Bermuda doları","displayName-count-other":"Bermuda doları","symbol":"BMD","symbol-alt-narrow":"$"},"BND":{"displayName":"Brunei Doları","displayName-count-one":"Brunei doları","displayName-count-other":"Brunei doları","symbol":"BND","symbol-alt-narrow":"$"},"BOB":{"displayName":"Bolivya Bolivyanosu","displayName-count-one":"Bolivya bolivyanosu","displayName-count-other":"Bolivya bolivyanosu","symbol":"BOB","symbol-alt-narrow":"Bs"},"BOL":{"displayName":"Bolivya Bolivyanosu (1863–1963)","displayName-count-one":"Bolivya bolivyanosu (1863–1963)","displayName-count-other":"Bolivya bolivyanosu (1863–1963)","symbol":"BOL"},"BOP":{"displayName":"Bolivya Pezosu","displayName-count-one":"Bolivya Pezosu","displayName-count-other":"Bolivya Pezosu","symbol":"BOP"},"BOV":{"displayName":"Bolivya Mvdolu","displayName-count-one":"Bolivya Mvdolu","displayName-count-other":"Bolivya Mvdolu","symbol":"BOV"},"BRB":{"displayName":"Yeni Brezilya Kruzeirosu (1967–1986)","displayName-count-one":"Yeni Brezilya Kruzeirosu (1967–1986)","displayName-count-other":"Yeni Brezilya Kruzeirosu (1967–1986)","symbol":"BRB"},"BRC":{"displayName":"Brezilya Kruzadosu","displayName-count-one":"Brezilya Kruzadosu","displayName-count-other":"Brezilya Kruzadosu","symbol":"BRC"},"BRE":{"displayName":"Brezilya Kruzeirosu (1990–1993)","displayName-count-one":"Brezilya Kruzeirosu (1990–1993)","displayName-count-other":"Brezilya Kruzeirosu (1990–1993)","symbol":"BRE"},"BRL":{"displayName":"Brezilya Reali","displayName-count-one":"Brezilya reali","displayName-count-other":"Brezilya reali","symbol":"R$","symbol-alt-narrow":"R$"},"BRN":{"displayName":"Yeni Brezilya Kruzadosu","displayName-count-one":"Yeni Brezilya Kruzadosu","displayName-count-other":"Yeni Brezilya Kruzadosu","symbol":"BRN"},"BRR":{"displayName":"Brezilya Kruzeirosu","displayName-count-one":"Brezilya Kruzeirosu","displayName-count-other":"Brezilya Kruzeirosu","symbol":"BRR"},"BRZ":{"displayName":"Brezilya Kruzeirosu (1942–1967)","displayName-count-one":"Brezilya kruzeirosu (1942–1967)","displayName-count-other":"Brezilya kruzeirosu (1942–1967)","symbol":"BRZ"},"BSD":{"displayName":"Bahama Doları","displayName-count-one":"Bahama doları","displayName-count-other":"Bahama doları","symbol":"BSD","symbol-alt-narrow":"$"},"BTN":{"displayName":"Bhutan Ngultrumu","displayName-count-one":"Bhutan ngultrumu","displayName-count-other":"Bhutan ngultrumu","symbol":"BTN"},"BUK":{"displayName":"Burma Kyatı","displayName-count-one":"Burma Kyatı","displayName-count-other":"Burma Kyatı","symbol":"BUK"},"BWP":{"displayName":"Botsvana Pulası","displayName-count-one":"Botsvana pulası","displayName-count-other":"Botsvana pulası","symbol":"BWP","symbol-alt-narrow":"P"},"BYB":{"displayName":"Yeni Beyaz Rusya Rublesi (1994–1999)","displayName-count-one":"Yeni Beyaz Rusya Rublesi (1994–1999)","displayName-count-other":"Yeni Beyaz Rusya Rublesi (1994–1999)","symbol":"BYB"},"BYN":{"displayName":"Belarus Rublesi","displayName-count-one":"Belarus rublesi","displayName-count-other":"Belarus rublesi","symbol":"BYN","symbol-alt-narrow":"р."},"BYR":{"displayName":"Beyaz Rusya Rublesi (2000–2016)","displayName-count-one":"Beyaz Rusya rublesi (2000–2016)","displayName-count-other":"Beyaz Rusya rublesi (2000–2016)","symbol":"BYR"},"BZD":{"displayName":"Belize Doları","displayName-count-one":"Belize doları","displayName-count-other":"Belize doları","symbol":"BZD","symbol-alt-narrow":"$"},"CAD":{"displayName":"Kanada Doları","displayName-count-one":"Kanada doları","displayName-count-other":"Kanada doları","symbol":"CA$","symbol-alt-narrow":"$"},"CDF":{"displayName":"Kongo Frangı","displayName-count-one":"Kongo frangı","displayName-count-other":"Kongo frangı","symbol":"CDF"},"CHE":{"displayName":"WIR Avrosu","displayName-count-one":"WIR Avrosu","displayName-count-other":"WIR Avrosu","symbol":"CHE"},"CHF":{"displayName":"İsviçre Frangı","displayName-count-one":"İsviçre frangı","displayName-count-other":"İsviçre frangı","symbol":"CHF"},"CHW":{"displayName":"WIR Frangı","displayName-count-one":"WIR Frangı","displayName-count-other":"WIR Frangı","symbol":"CHW"},"CLE":{"displayName":"Şili Esküdosu","displayName-count-one":"Şili esküdosu","displayName-count-other":"Şili esküdosu","symbol":"CLE"},"CLF":{"displayName":"Şili Unidades de Fomento","displayName-count-one":"Şili Unidades de Fomento","displayName-count-other":"Şili Unidades de Fomento","symbol":"CLF"},"CLP":{"displayName":"Şili Pesosu","displayName-count-one":"Şili pesosu","displayName-count-other":"Şili pesosu","symbol":"CLP","symbol-alt-narrow":"$"},"CNH":{"displayName":"Çin Yuanı (offshore)","displayName-count-one":"Çin yuanı (offshore)","displayName-count-other":"Çin yuanı (offshore)","symbol":"CNH"},"CNX":{"displayName":"Çin Halk Cumhuriyeti Merkez Bankası Doları","displayName-count-one":"Çin Halk Cumhuriyeti Merkez Bankası doları","displayName-count-other":"Çin Halk Cumhuriyeti Merkez Bankası doları","symbol":"CNX"},"CNY":{"displayName":"Çin Yuanı","displayName-count-one":"Çin yuanı","displayName-count-other":"Çin yuanı","symbol":"CN¥","symbol-alt-narrow":"¥"},"COP":{"displayName":"Kolombiya Pesosu","displayName-count-one":"Kolombiya pesosu","displayName-count-other":"Kolombiya pesosu","symbol":"COP","symbol-alt-narrow":"$"},"COU":{"displayName":"Unidad de Valor Real","displayName-count-one":"Unidad de Valor Real","displayName-count-other":"Unidad de Valor Real","symbol":"COU"},"CRC":{"displayName":"Kosta Rika Kolonu","displayName-count-one":"Kosta Rika kolonu","displayName-count-other":"Kosta Rika kolonu","symbol":"CRC","symbol-alt-narrow":"₡"},"CSD":{"displayName":"Eski Sırbistan Dinarı","displayName-count-one":"Eski Sırbistan Dinarı","displayName-count-other":"Eski Sırbistan Dinarı","symbol":"CSD"},"CSK":{"displayName":"Çekoslavak Korunası (Hard)","displayName-count-one":"Çekoslavak Korunası (Hard)","displayName-count-other":"Çekoslavak Korunası (Hard)","symbol":"CSK"},"CUC":{"displayName":"Konvertibl Küba Pesosu","displayName-count-one":"Konvertibl Küba pesosu","displayName-count-other":"Konvertibl Küba pesosu","symbol":"CUC","symbol-alt-narrow":"$"},"CUP":{"displayName":"Küba Pesosu","displayName-count-one":"Küba pesosu","displayName-count-other":"Küba pesosu","symbol":"CUP","symbol-alt-narrow":"$"},"CVE":{"displayName":"Cape Verde Esküdosu","displayName-count-one":"Cape Verde esküdosu","displayName-count-other":"Cape Verde esküdosu","symbol":"CVE"},"CYP":{"displayName":"Güney Kıbrıs Lirası","displayName-count-one":"Güney Kıbrıs Lirası","displayName-count-other":"Güney Kıbrıs Lirası","symbol":"CYP"},"CZK":{"displayName":"Çek Cumhuriyeti Korunası","displayName-count-one":"Çek Cumhuriyeti korunası","displayName-count-other":"Çek Cumhuriyeti korunası","symbol":"CZK","symbol-alt-narrow":"Kč"},"DDM":{"displayName":"Doğu Alman Markı","displayName-count-one":"Doğu Alman Markı","displayName-count-other":"Doğu Alman Markı","symbol":"DDM"},"DEM":{"displayName":"Alman Markı","displayName-count-one":"Alman Markı","displayName-count-other":"Alman Markı","symbol":"DEM"},"DJF":{"displayName":"Cibuti Frangı","displayName-count-one":"Cibuti frangı","displayName-count-other":"Cibuti frangı","symbol":"DJF"},"DKK":{"displayName":"Danimarka Kronu","displayName-count-one":"Danimarka kronu","displayName-count-other":"Danimarka kronu","symbol":"DKK","symbol-alt-narrow":"kr"},"DOP":{"displayName":"Dominik Pesosu","displayName-count-one":"Dominik pesosu","displayName-count-other":"Dominik pesosu","symbol":"DOP","symbol-alt-narrow":"$"},"DZD":{"displayName":"Cezayir Dinarı","displayName-count-one":"Cezayir dinarı","displayName-count-other":"Cezayir dinarı","symbol":"DZD"},"ECS":{"displayName":"Ekvador Sukresi","displayName-count-one":"Ekvador Sukresi","displayName-count-other":"Ekvador Sukresi","symbol":"ECS"},"ECV":{"displayName":"Ekvador Unidad de Valor Constante (UVC)","displayName-count-one":"Ekvador Unidad de Valor Constante (UVC)","displayName-count-other":"Ekvador Unidad de Valor Constante (UVC)","symbol":"ECV"},"EEK":{"displayName":"Estonya Krunu","displayName-count-one":"Estonya Krunu","displayName-count-other":"Estonya Krunu","symbol":"EEK"},"EGP":{"displayName":"Mısır Lirası","displayName-count-one":"Mısır lirası","displayName-count-other":"Mısır lirası","symbol":"EGP","symbol-alt-narrow":"E£"},"ERN":{"displayName":"Eritre Nakfası","displayName-count-one":"Eritre nakfası","displayName-count-other":"Eritre nakfası","symbol":"ERN"},"ESA":{"displayName":"İspanyol Pezetası (A hesabı)","displayName-count-one":"İspanyol Pezetası (A hesabı)","displayName-count-other":"İspanyol Pezetası (A hesabı)","symbol":"ESA"},"ESB":{"displayName":"İspanyol Pezetası (konvertibl hesap)","displayName-count-one":"İspanyol Pezetası (konvertibl hesap)","displayName-count-other":"İspanyol Pezetası (konvertibl hesap)","symbol":"ESB"},"ESP":{"displayName":"İspanyol Pezetası","displayName-count-one":"İspanyol Pezetası","displayName-count-other":"İspanyol Pezetası","symbol":"ESP","symbol-alt-narrow":"₧"},"ETB":{"displayName":"Etiyopya Birri","displayName-count-one":"Etiyopya birri","displayName-count-other":"Etiyopya birri","symbol":"ETB"},"EUR":{"displayName":"Euro","displayName-count-one":"Euro","displayName-count-other":"Euro","symbol":"€","symbol-alt-narrow":"€"},"FIM":{"displayName":"Fin Markkası","displayName-count-one":"Fin Markkası","displayName-count-other":"Fin Markkası","symbol":"FIM"},"FJD":{"displayName":"Fiji Doları","displayName-count-one":"Fiji doları","displayName-count-other":"Fiji doları","symbol":"FJD","symbol-alt-narrow":"$"},"FKP":{"displayName":"Falkland Adaları Lirası","displayName-count-one":"Falkland Adaları lirası","displayName-count-other":"Falkland Adaları lirası","symbol":"FKP","symbol-alt-narrow":"£"},"FRF":{"displayName":"Fransız Frangı","displayName-count-one":"Fransız Frangı","displayName-count-other":"Fransız Frangı","symbol":"FRF"},"GBP":{"displayName":"İngiliz Sterlini","displayName-count-one":"İngiliz sterlini","displayName-count-other":"İngiliz sterlini","symbol":"£","symbol-alt-narrow":"£"},"GEK":{"displayName":"Gürcistan Kupon Larisi","displayName-count-one":"Gürcistan Kupon Larisi","displayName-count-other":"Gürcistan Kupon Larisi","symbol":"GEK"},"GEL":{"displayName":"Gürcistan Larisi","displayName-count-one":"Gürcistan larisi","displayName-count-other":"Gürcistan larisi","symbol":"GEL","symbol-alt-narrow":"₾","symbol-alt-variant":"₾"},"GHC":{"displayName":"Gana Sedisi (1979–2007)","symbol":"GHC"},"GHS":{"displayName":"Gana Sedisi","displayName-count-one":"Gana sedisi","displayName-count-other":"Gana sedisi","symbol":"GHS"},"GIP":{"displayName":"Cebelitarık Lirası","displayName-count-one":"Cebelitarık lirası","displayName-count-other":"Cebelitarık lirası","symbol":"GIP","symbol-alt-narrow":"£"},"GMD":{"displayName":"Gambiya Dalasisi","displayName-count-one":"Gambiya dalasisi","displayName-count-other":"Gambiya dalasisi","symbol":"GMD"},"GNF":{"displayName":"Gine Frangı","displayName-count-one":"Gine frangı","displayName-count-other":"Gine frangı","symbol":"GNF","symbol-alt-narrow":"FG"},"GNS":{"displayName":"Gine Sylisi","symbol":"GNS"},"GQE":{"displayName":"Ekvator Ginesi Ekuelesi","symbol":"GQE"},"GRD":{"displayName":"Yunan Drahmisi","displayName-count-one":"Yunan Drahmisi","displayName-count-other":"Yunan Drahmisi","symbol":"GRD"},"GTQ":{"displayName":"Guatemala Quetzalı","displayName-count-one":"Guatemala quetzalı","displayName-count-other":"Guatemala quetzalı","symbol":"GTQ","symbol-alt-narrow":"Q"},"GWE":{"displayName":"Portekiz Ginesi Esküdosu","symbol":"GWE"},"GWP":{"displayName":"Gine-Bissau Pezosu","symbol":"GWP"},"GYD":{"displayName":"Guyana Doları","displayName-count-one":"Guyana doları","displayName-count-other":"Guyana doları","symbol":"GYD","symbol-alt-narrow":"$"},"HKD":{"displayName":"Hong Kong Doları","displayName-count-one":"Hong Kong doları","displayName-count-other":"Hong Kong doları","symbol":"HK$","symbol-alt-narrow":"$"},"HNL":{"displayName":"Honduras Lempirası","displayName-count-one":"Honduras lempirası","displayName-count-other":"Honduras lempirası","symbol":"HNL","symbol-alt-narrow":"L"},"HRD":{"displayName":"Hırvatistan Dinarı","displayName-count-one":"Hırvatistan Dinarı","displayName-count-other":"Hırvatistan Dinarı","symbol":"HRD"},"HRK":{"displayName":"Hırvatistan Kunası","displayName-count-one":"Hırvatistan kunası","displayName-count-other":"Hırvatistan kunası","symbol":"HRK","symbol-alt-narrow":"kn"},"HTG":{"displayName":"Haiti Gurdu","displayName-count-one":"Haiti gurdu","displayName-count-other":"Haiti gurdu","symbol":"HTG"},"HUF":{"displayName":"Macar Forinti","displayName-count-one":"Macar forinti","displayName-count-other":"Macar forinti","symbol":"HUF","symbol-alt-narrow":"Ft"},"IDR":{"displayName":"Endonezya Rupiahı","displayName-count-one":"Endonezya rupiahı","displayName-count-other":"Endonezya rupiahı","symbol":"IDR","symbol-alt-narrow":"Rp"},"IEP":{"displayName":"İrlanda Lirası","displayName-count-one":"İrlanda Lirası","displayName-count-other":"İrlanda Lirası","symbol":"IEP"},"ILP":{"displayName":"İsrail Lirası","displayName-count-one":"İsrail Lirası","displayName-count-other":"İsrail Lirası","symbol":"ILP"},"ILR":{"displayName":"İsrail Şekeli (1980–1985)","displayName-count-one":"İsrail şekeli (1980–1985)","displayName-count-other":"İsrail şekeli (1980–1985)","symbol":"ILR"},"ILS":{"displayName":"Yeni İsrail Şekeli","displayName-count-one":"Yeni İsrail şekeli","displayName-count-other":"Yeni İsrail şekeli","symbol":"₪","symbol-alt-narrow":"₪"},"INR":{"displayName":"Hindistan Rupisi","displayName-count-one":"Hindistan rupisi","displayName-count-other":"Hindistan rupisi","symbol":"₹","symbol-alt-narrow":"₹"},"IQD":{"displayName":"Irak Dinarı","displayName-count-one":"Irak dinarı","displayName-count-other":"Irak dinarı","symbol":"IQD"},"IRR":{"displayName":"İran Riyali","displayName-count-one":"İran riyali","displayName-count-other":"İran riyali","symbol":"IRR"},"ISJ":{"displayName":"İzlanda Kronu (1918–1981)","displayName-count-one":"İzlanda kronu (1918–1981)","displayName-count-other":"İzlanda kronu (1918–1981)","symbol":"ISJ"},"ISK":{"displayName":"İzlanda Kronu","displayName-count-one":"İzlanda kronu","displayName-count-other":"İzlanda kronu","symbol":"ISK","symbol-alt-narrow":"kr"},"ITL":{"displayName":"İtalyan Lireti","displayName-count-one":"İtalyan Lireti","displayName-count-other":"İtalyan Lireti","symbol":"ITL"},"JMD":{"displayName":"Jamaika Doları","displayName-count-one":"Jamaika doları","displayName-count-other":"Jamaika doları","symbol":"JMD","symbol-alt-narrow":"$"},"JOD":{"displayName":"Ürdün Dinarı","displayName-count-one":"Ürdün dinarı","displayName-count-other":"Ürdün dinarı","symbol":"JOD"},"JPY":{"displayName":"Japon Yeni","displayName-count-one":"Japon yeni","displayName-count-other":"Japon yeni","symbol":"¥","symbol-alt-narrow":"¥"},"KES":{"displayName":"Kenya Şilini","displayName-count-one":"Kenya şilini","displayName-count-other":"Kenya şilini","symbol":"KES"},"KGS":{"displayName":"Kırgızistan Somu","displayName-count-one":"Kırgızistan somu","displayName-count-other":"Kırgızistan somu","symbol":"KGS"},"KHR":{"displayName":"Kamboçya Rieli","displayName-count-one":"Kamboçya rieli","displayName-count-other":"Kamboçya rieli","symbol":"KHR","symbol-alt-narrow":"៛"},"KMF":{"displayName":"Komorlar Frangı","displayName-count-one":"Komorlar frangı","displayName-count-other":"Komorlar frangı","symbol":"KMF","symbol-alt-narrow":"CF"},"KPW":{"displayName":"Kuzey Kore Wonu","displayName-count-one":"Kuzey Kore wonu","displayName-count-other":"Kuzey Kore wonu","symbol":"KPW","symbol-alt-narrow":"₩"},"KRH":{"displayName":"Güney Kore Hwanı (1953–1962)","displayName-count-one":"Güney Kore hwanı (1953–1962)","displayName-count-other":"Güney Kore hwanı (1953–1962)","symbol":"KRH"},"KRO":{"displayName":"Güney Kore Wonu (1945–1953)","displayName-count-one":"Güney Kore wonu (1945–1953)","displayName-count-other":"Güney Kore wonu (1945–1953)","symbol":"KRO"},"KRW":{"displayName":"Güney Kore Wonu","displayName-count-one":"Güney Kore wonu","displayName-count-other":"Güney Kore wonu","symbol":"₩","symbol-alt-narrow":"₩"},"KWD":{"displayName":"Kuveyt Dinarı","displayName-count-one":"Kuveyt dinarı","displayName-count-other":"Kuveyt dinarı","symbol":"KWD"},"KYD":{"displayName":"Cayman Adaları Doları","displayName-count-one":"Cayman Adaları doları","displayName-count-other":"Cayman Adaları doları","symbol":"KYD","symbol-alt-narrow":"$"},"KZT":{"displayName":"Kazakistan Tengesi","displayName-count-one":"Kazakistan tengesi","displayName-count-other":"Kazakistan tengesi","symbol":"KZT","symbol-alt-narrow":"₸"},"LAK":{"displayName":"Laos Kipi","displayName-count-one":"Laos kipi","displayName-count-other":"Laos kipi","symbol":"LAK","symbol-alt-narrow":"₭"},"LBP":{"displayName":"Lübnan Lirası","displayName-count-one":"Lübnan lirası","displayName-count-other":"Lübnan lirası","symbol":"LBP","symbol-alt-narrow":"L£"},"LKR":{"displayName":"Sri Lanka Rupisi","displayName-count-one":"Sri Lanka rupisi","displayName-count-other":"Sri Lanka rupisi","symbol":"LKR","symbol-alt-narrow":"Rs"},"LRD":{"displayName":"Liberya Doları","displayName-count-one":"Liberya doları","displayName-count-other":"Liberya doları","symbol":"LRD","symbol-alt-narrow":"$"},"LSL":{"displayName":"Lesotho Lotisi","symbol":"LSL"},"LTL":{"displayName":"Litvanya Litası","displayName-count-one":"Litvanya litası","displayName-count-other":"Litvanya litası","symbol":"LTL","symbol-alt-narrow":"Lt"},"LTT":{"displayName":"Litvanya Talonu","displayName-count-one":"Litvanya Talonu","displayName-count-other":"Litvanya Talonu","symbol":"LTT"},"LUC":{"displayName":"Konvertibl Lüksemburg Frangı","displayName-count-one":"Konvertibl Lüksemburg Frangı","displayName-count-other":"Konvertibl Lüksemburg Frangı","symbol":"LUC"},"LUF":{"displayName":"Lüksemburg Frangı","displayName-count-one":"Lüksemburg Frangı","displayName-count-other":"Lüksemburg Frangı","symbol":"LUF"},"LUL":{"displayName":"Finansal Lüksemburg Frangı","displayName-count-one":"Finansal Lüksemburg Frangı","displayName-count-other":"Finansal Lüksemburg Frangı","symbol":"LUL"},"LVL":{"displayName":"Letonya Latı","displayName-count-one":"Letonya latı","displayName-count-other":"Letonya latı","symbol":"LVL","symbol-alt-narrow":"Ls"},"LVR":{"displayName":"Letonya Rublesi","displayName-count-one":"Letonya Rublesi","displayName-count-other":"Letonya Rublesi","symbol":"LVR"},"LYD":{"displayName":"Libya Dinarı","displayName-count-one":"Libya dinarı","displayName-count-other":"Libya dinarı","symbol":"LYD"},"MAD":{"displayName":"Fas Dirhemi","displayName-count-one":"Fas dirhemi","displayName-count-other":"Fas dirhemi","symbol":"MAD"},"MAF":{"displayName":"Fas Frangı","symbol":"MAF"},"MCF":{"displayName":"Monako Frangı","displayName-count-one":"Monako frangı","displayName-count-other":"Monako frangı","symbol":"MCF"},"MDC":{"displayName":"Moldova Kuponu","displayName-count-one":"Moldova kuponu","displayName-count-other":"Moldova kuponu","symbol":"MDC"},"MDL":{"displayName":"Moldova Leyi","displayName-count-one":"Moldova leyi","displayName-count-other":"Moldova leyi","symbol":"MDL"},"MGA":{"displayName":"Madagaskar Ariarisi","displayName-count-one":"Madagaskar ariarisi","displayName-count-other":"Madagaskar ariarisi","symbol":"MGA","symbol-alt-narrow":"Ar"},"MGF":{"displayName":"Madagaskar Frangı","symbol":"MGF"},"MKD":{"displayName":"Makedonya Dinarı","displayName-count-one":"Makedonya dinarı","displayName-count-other":"Makedonya dinarı","symbol":"MKD"},"MKN":{"displayName":"Makedonya Dinarı (1992–1993)","displayName-count-one":"Makedonya dinarı (1992–1993)","displayName-count-other":"Makedonya dinarı (1992–1993)","symbol":"MKN"},"MLF":{"displayName":"Mali Frangı","symbol":"MLF"},"MMK":{"displayName":"Myanmar Kyatı","displayName-count-one":"Myanmar kyatı","displayName-count-other":"Myanmar kyatı","symbol":"MMK","symbol-alt-narrow":"K"},"MNT":{"displayName":"Moğolistan Tugriki","displayName-count-one":"Moğolistan tugriki","displayName-count-other":"Moğolistan tugriki","symbol":"MNT","symbol-alt-narrow":"₮"},"MOP":{"displayName":"Makao Patakası","displayName-count-one":"Makao patakası","displayName-count-other":"Makao patakası","symbol":"MOP"},"MRO":{"displayName":"Moritanya Ouguiyası","displayName-count-one":"Moritanya ouguiyası","displayName-count-other":"Moritanya ouguiyası","symbol":"MRO"},"MTL":{"displayName":"Malta Lirası","displayName-count-one":"Malta Lirası","displayName-count-other":"Malta Lirası","symbol":"MTL"},"MTP":{"displayName":"Malta Sterlini","displayName-count-one":"Malta Sterlini","displayName-count-other":"Malta Sterlini","symbol":"MTP"},"MUR":{"displayName":"Mauritius Rupisi","displayName-count-one":"Mauritius rupisi","displayName-count-other":"Mauritius rupisi","symbol":"MUR","symbol-alt-narrow":"Rs"},"MVP":{"displayName":"Maldiv Rupisi","displayName-count-one":"Maldiv rupisi","displayName-count-other":"Maldiv rupisi","symbol":"MVP"},"MVR":{"displayName":"Maldiv Rufiyaası","displayName-count-one":"Maldiv rufiyaası","displayName-count-other":"Maldiv rufiyaası","symbol":"MVR"},"MWK":{"displayName":"Malavi Kvaçası","displayName-count-one":"Malavi kvaçası","displayName-count-other":"Malavi kvaçası","symbol":"MWK"},"MXN":{"displayName":"Meksika Pesosu","displayName-count-one":"Meksika pesosu","displayName-count-other":"Meksika pesosu","symbol":"MX$","symbol-alt-narrow":"$"},"MXP":{"displayName":"Gümüş Meksika Pezosu (1861–1992)","displayName-count-one":"Gümüş Meksika Pezosu (1861–1992)","displayName-count-other":"Gümüş Meksika Pezosu (1861–1992)","symbol":"MXP"},"MXV":{"displayName":"Meksika Unidad de Inversion (UDI)","displayName-count-one":"Meksika Unidad de Inversion (UDI)","displayName-count-other":"Meksika Unidad de Inversion (UDI)","symbol":"MXV"},"MYR":{"displayName":"Malezya Ringgiti","displayName-count-one":"Malezya ringgiti","displayName-count-other":"Malezya ringgiti","symbol":"MYR","symbol-alt-narrow":"RM"},"MZE":{"displayName":"Mozambik Esküdosu","symbol":"MZE"},"MZM":{"displayName":"Eski Mozambik Metikali","symbol":"MZM"},"MZN":{"displayName":"Mozambik Metikali","displayName-count-one":"Mozambik metikali","displayName-count-other":"Mozambik metikali","symbol":"MZN"},"NAD":{"displayName":"Namibya Doları","displayName-count-one":"Namibya doları","displayName-count-other":"Namibya doları","symbol":"NAD","symbol-alt-narrow":"$"},"NGN":{"displayName":"Nijerya Nairası","displayName-count-one":"Nijerya nairası","displayName-count-other":"Nijerya nairası","symbol":"NGN","symbol-alt-narrow":"₦"},"NIC":{"displayName":"Nikaragua Kordobası (1988–1991)","displayName-count-one":"Nikaragua Kordobası (1988–1991)","displayName-count-other":"Nikaragua Kordobası (1988–1991)","symbol":"NIC"},"NIO":{"displayName":"Nikaragua Kordobası","displayName-count-one":"Nikaragua kordobası","displayName-count-other":"Nikaragua kordobası","symbol":"NIO","symbol-alt-narrow":"C$"},"NLG":{"displayName":"Hollanda Florini","displayName-count-one":"Hollanda Florini","displayName-count-other":"Hollanda Florini","symbol":"NLG"},"NOK":{"displayName":"Norveç Kronu","displayName-count-one":"Norveç kronu","displayName-count-other":"Norveç kronu","symbol":"NOK","symbol-alt-narrow":"kr"},"NPR":{"displayName":"Nepal Rupisi","displayName-count-one":"Nepal rupisi","displayName-count-other":"Nepal rupisi","symbol":"NPR","symbol-alt-narrow":"Rs"},"NZD":{"displayName":"Yeni Zelanda Doları","displayName-count-one":"Yeni Zelanda doları","displayName-count-other":"Yeni Zelanda doları","symbol":"NZ$","symbol-alt-narrow":"$"},"OMR":{"displayName":"Umman Riyali","displayName-count-one":"Umman riyali","displayName-count-other":"Umman riyali","symbol":"OMR"},"PAB":{"displayName":"Panama Balboası","displayName-count-one":"Panama balboası","displayName-count-other":"Panama balboası","symbol":"PAB"},"PEI":{"displayName":"Peru İnti","displayName-count-one":"Peru İnti","displayName-count-other":"Peru İnti","symbol":"PEI"},"PEN":{"displayName":"Peru Solü","displayName-count-one":"Peru solü","displayName-count-other":"Peru solü","symbol":"PEN"},"PES":{"displayName":"Peru Solü (1863–1965)","displayName-count-one":"Peru Solü (1863–1965)","displayName-count-other":"Peru Solü (1863–1965)","symbol":"PES"},"PGK":{"displayName":"Papua Yeni Gine Kinası","displayName-count-one":"Papua Yeni Gine kinası","displayName-count-other":"Papua Yeni Gine kinası","symbol":"PGK"},"PHP":{"displayName":"Filipinler Pesosu","displayName-count-one":"Filipinler pesosu","displayName-count-other":"Filipinler pesosu","symbol":"PHP","symbol-alt-narrow":"₱"},"PKR":{"displayName":"Pakistan Rupisi","displayName-count-one":"Pakistan rupisi","displayName-count-other":"Pakistan rupisi","symbol":"PKR","symbol-alt-narrow":"Rs"},"PLN":{"displayName":"Polonya Zlotisi","displayName-count-one":"Polonya zlotisi","displayName-count-other":"Polonya zlotisi","symbol":"PLN","symbol-alt-narrow":"zł"},"PLZ":{"displayName":"Polonya Zlotisi (1950–1995)","displayName-count-one":"Polonya Zlotisi (1950–1995)","displayName-count-other":"Polonya Zlotisi (1950–1995)","symbol":"PLZ"},"PTE":{"displayName":"Portekiz Esküdosu","displayName-count-one":"Portekiz Esküdosu","displayName-count-other":"Portekiz Esküdosu","symbol":"PTE"},"PYG":{"displayName":"Paraguay Guaranisi","displayName-count-one":"Paraguay guaranisi","displayName-count-other":"Paraguay guaranisi","symbol":"PYG","symbol-alt-narrow":"₲"},"QAR":{"displayName":"Katar Riyali","displayName-count-one":"Katar riyali","displayName-count-other":"Katar riyali","symbol":"QAR"},"RHD":{"displayName":"Rodezya Doları","symbol":"RHD"},"ROL":{"displayName":"Eski Romen Leyi","displayName-count-one":"Eski Romen Leyi","displayName-count-other":"Eski Romen Leyi","symbol":"ROL"},"RON":{"displayName":"Romen Leyi","displayName-count-one":"Romen leyi","displayName-count-other":"Romen leyi","symbol":"RON","symbol-alt-narrow":"L"},"RSD":{"displayName":"Sırp Dinarı","displayName-count-one":"Sırp dinarı","displayName-count-other":"Sırp dinarı","symbol":"RSD"},"RUB":{"displayName":"Rus Rublesi","displayName-count-one":"Rus rublesi","displayName-count-other":"Rus rublesi","symbol":"RUB","symbol-alt-narrow":"₽"},"RUR":{"displayName":"Rus Rublesi (1991–1998)","displayName-count-one":"Rus Rublesi (1991–1998)","displayName-count-other":"Rus Rublesi (1991–1998)","symbol":"RUR","symbol-alt-narrow":"р."},"RWF":{"displayName":"Ruanda Frangı","displayName-count-one":"Ruanda frangı","displayName-count-other":"Ruanda frangı","symbol":"RWF","symbol-alt-narrow":"RF"},"SAR":{"displayName":"Suudi Arabistan Riyali","displayName-count-one":"Suudi Arabistan riyali","displayName-count-other":"Suudi Arabistan riyali","symbol":"SAR"},"SBD":{"displayName":"Solomon Adaları Doları","displayName-count-one":"Solomon Adaları doları","displayName-count-other":"Solomon Adaları doları","symbol":"SBD","symbol-alt-narrow":"$"},"SCR":{"displayName":"Seyşeller Rupisi","displayName-count-one":"Seyşeller rupisi","displayName-count-other":"Seyşeller rupisi","symbol":"SCR"},"SDD":{"displayName":"Eski Sudan Dinarı","symbol":"SDD"},"SDG":{"displayName":"Sudan Lirası","displayName-count-one":"Sudan lirası","displayName-count-other":"Sudan lirası","symbol":"SDG"},"SDP":{"displayName":"Eski Sudan Lirası","symbol":"SDP"},"SEK":{"displayName":"İsveç Kronu","displayName-count-one":"İsveç kronu","displayName-count-other":"İsveç kronu","symbol":"SEK","symbol-alt-narrow":"kr"},"SGD":{"displayName":"Singapur Doları","displayName-count-one":"Singapur doları","displayName-count-other":"Singapur doları","symbol":"SGD","symbol-alt-narrow":"$"},"SHP":{"displayName":"Saint Helena Lirası","displayName-count-one":"Saint Helena lirası","displayName-count-other":"Saint Helena lirası","symbol":"SHP","symbol-alt-narrow":"£"},"SIT":{"displayName":"Slovenya Toları","displayName-count-one":"Slovenya Toları","displayName-count-other":"Slovenya Toları","symbol":"SIT"},"SKK":{"displayName":"Slovak Korunası","displayName-count-one":"Slovak Korunası","displayName-count-other":"Slovak Korunası","symbol":"SKK"},"SLL":{"displayName":"Sierra Leone Leonesi","displayName-count-one":"Sierra Leone leonesi","displayName-count-other":"Sierra Leone leonesi","symbol":"SLL"},"SOS":{"displayName":"Somali Şilini","displayName-count-one":"Somali şilini","displayName-count-other":"Somali şilini","symbol":"SOS"},"SRD":{"displayName":"Surinam Doları","displayName-count-one":"Surinam doları","displayName-count-other":"Surinam doları","symbol":"SRD","symbol-alt-narrow":"$"},"SRG":{"displayName":"Surinam Guldeni","displayName-count-one":"Surinam Guldeni","displayName-count-other":"Surinam Guldeni","symbol":"SRG"},"SSP":{"displayName":"Güney Sudan Lirası","displayName-count-one":"Güney Sudan lirası","displayName-count-other":"Güney Sudan lirası","symbol":"SSP","symbol-alt-narrow":"£"},"STD":{"displayName":"São Tomé ve Príncipe Dobrası","displayName-count-one":"São Tomé ve Príncipe dobrası","displayName-count-other":"São Tomé ve Príncipe dobrası","symbol":"STD","symbol-alt-narrow":"Db"},"STN":{"displayName":"STN","symbol":"STN"},"SUR":{"displayName":"Sovyet Rublesi","displayName-count-one":"Sovyet Rublesi","displayName-count-other":"Sovyet Rublesi","symbol":"SUR"},"SVC":{"displayName":"El Salvador Kolonu","displayName-count-one":"El Salvador Kolonu","displayName-count-other":"El Salvador Kolonu","symbol":"SVC"},"SYP":{"displayName":"Suriye Lirası","displayName-count-one":"Suriye lirası","displayName-count-other":"Suriye lirası","symbol":"SYP","symbol-alt-narrow":"£"},"SZL":{"displayName":"Svaziland Lilangenisi","displayName-count-one":"Svaziland lilangenisi","displayName-count-other":"Svaziland lilangenisi","symbol":"SZL"},"THB":{"displayName":"Tayland Bahtı","displayName-count-one":"Tayland bahtı","displayName-count-other":"Tayland bahtı","symbol":"฿","symbol-alt-narrow":"฿"},"TJR":{"displayName":"Tacikistan Rublesi","displayName-count-one":"Tacikistan Rublesi","displayName-count-other":"Tacikistan Rublesi","symbol":"TJR"},"TJS":{"displayName":"Tacikistan Somonisi","displayName-count-one":"Tacikistan somonisi","displayName-count-other":"Tacikistan somonisi","symbol":"TJS"},"TMM":{"displayName":"Türkmenistan Manatı (1993–2009)","displayName-count-one":"Türkmenistan Manatı (1993–2009)","displayName-count-other":"Türkmenistan Manatı (1993–2009)","symbol":"TMM"},"TMT":{"displayName":"Türkmenistan Manatı","displayName-count-one":"Türkmenistan manatı","displayName-count-other":"Türkmenistan manatı","symbol":"TMT"},"TND":{"displayName":"Tunus Dinarı","displayName-count-one":"Tunus dinarı","displayName-count-other":"Tunus dinarı","symbol":"TND"},"TOP":{"displayName":"Tonga Paʻangası","displayName-count-one":"Tonga paʻangası","displayName-count-other":"Tonga paʻangası","symbol":"TOP","symbol-alt-narrow":"T$"},"TPE":{"displayName":"Timor Esküdosu","displayName-count-one":"Timor Esküdosu","displayName-count-other":"Timor Esküdosu","symbol":"TPE"},"TRL":{"displayName":"Eski Türk Lirası","displayName-count-one":"Eski Türk Lirası","displayName-count-other":"Eski Türk Lirası","symbol":"TRL"},"TRY":{"pattern":"¤#,##0.00","displayName":"Türk Lirası","displayName-count-one":"Türk lirası","displayName-count-other":"Türk lirası","symbol":"₺","symbol-alt-narrow":"₺","symbol-alt-variant":"TL"},"TTD":{"displayName":"Trinidad ve Tobago Doları","displayName-count-one":"Trinidad ve Tobago doları","displayName-count-other":"Trinidad ve Tobago doları","symbol":"TTD","symbol-alt-narrow":"$"},"TWD":{"displayName":"Yeni Tayvan Doları","displayName-count-one":"Yeni Tayvan doları","displayName-count-other":"Yeni Tayvan doları","symbol":"NT$","symbol-alt-narrow":"NT$"},"TZS":{"displayName":"Tanzanya Şilini","displayName-count-one":"Tanzanya şilini","displayName-count-other":"Tanzanya şilini","symbol":"TZS"},"UAH":{"displayName":"Ukrayna Grivnası","displayName-count-one":"Ukrayna grivnası","displayName-count-other":"Ukrayna grivnası","symbol":"UAH","symbol-alt-narrow":"₴"},"UAK":{"displayName":"Ukrayna Karbovanetz","displayName-count-one":"Ukrayna Karbovanetz","displayName-count-other":"Ukrayna Karbovanetz","symbol":"UAK"},"UGS":{"displayName":"Uganda Şilini (1966–1987)","symbol":"UGS"},"UGX":{"displayName":"Uganda Şilini","displayName-count-one":"Uganda şilini","displayName-count-other":"Uganda şilini","symbol":"UGX"},"USD":{"displayName":"ABD Doları","displayName-count-one":"ABD doları","displayName-count-other":"ABD doları","symbol":"$","symbol-alt-narrow":"$"},"USN":{"displayName":"ABD Doları (Ertesi gün)","displayName-count-one":"ABD Doları (Ertesi gün)","displayName-count-other":"ABD Doları (Ertesi gün)","symbol":"USN"},"USS":{"displayName":"ABD Doları (Aynı gün)","displayName-count-one":"ABD Doları (Aynı gün)","displayName-count-other":"ABD Doları (Aynı gün)","symbol":"USS"},"UYI":{"displayName":"Uruguay Peso en Unidades Indexadas","displayName-count-one":"Uruguay Peso en Unidades Indexadas","displayName-count-other":"Uruguay Peso en Unidades Indexadas","symbol":"UYI"},"UYP":{"displayName":"Uruguay Pezosu (1975–1993)","displayName-count-one":"Uruguay Pezosu (1975–1993)","displayName-count-other":"Uruguay Pezosu (1975–1993)","symbol":"UYP"},"UYU":{"displayName":"Uruguay Pesosu","displayName-count-one":"Uruguay pesosu","displayName-count-other":"Uruguay pesosu","symbol":"UYU","symbol-alt-narrow":"$"},"UZS":{"displayName":"Özbekistan Somu","displayName-count-one":"Özbekistan somu","displayName-count-other":"Özbekistan somu","symbol":"UZS"},"VEB":{"displayName":"Venezuela Bolivarı (1871–2008)","displayName-count-one":"Venezuela Bolivarı (1871–2008)","displayName-count-other":"Venezuela Bolivarı (1871–2008)","symbol":"VEB"},"VEF":{"displayName":"Venezuela Bolivarı","displayName-count-one":"Venezuela bolivarı","displayName-count-other":"Venezuela bolivarı","symbol":"VEF","symbol-alt-narrow":"Bs"},"VND":{"displayName":"Vietnam Dongu","displayName-count-one":"Vietnam dongu","displayName-count-other":"Vietnam dongu","symbol":"₫","symbol-alt-narrow":"₫"},"VNN":{"displayName":"Vietnam Dongu (1978–1985)","displayName-count-one":"Vietnam dongu (1978–1985)","displayName-count-other":"Vietnam dongu (1978–1985)","symbol":"VNN"},"VUV":{"displayName":"Vanuatu Vatusu","displayName-count-one":"Vanuatu vatusu","displayName-count-other":"Vanuatu vatusu","symbol":"VUV"},"WST":{"displayName":"Samoa Talası","displayName-count-one":"Samoa talası","displayName-count-other":"Samoa talası","symbol":"WST"},"XAF":{"displayName":"CFA Frangı BEAC","displayName-count-one":"CFA frangı BEAC","displayName-count-other":"CFA frangı BEAC","symbol":"FCFA"},"XAG":{"displayName":"Gümüş","displayName-count-one":"Gümüş","displayName-count-other":"Gümüş","symbol":"XAG"},"XAU":{"displayName":"Altın","displayName-count-one":"Altın","displayName-count-other":"Altın","symbol":"XAU"},"XBA":{"displayName":"Birleşik Avrupa Birimi","symbol":"XBA"},"XBB":{"displayName":"Avrupa Para Birimi (EMU)","symbol":"XBB"},"XBC":{"displayName":"Avrupa Hesap Birimi (XBC)","symbol":"XBC"},"XBD":{"displayName":"Avrupa Hesap Birimi (XBD)","symbol":"XBD"},"XCD":{"displayName":"Doğu Karayip Doları","displayName-count-one":"Doğu Karayip doları","displayName-count-other":"Doğu Karayip doları","symbol":"EC$","symbol-alt-narrow":"$"},"XDR":{"displayName":"Özel Çekme Hakkı (SDR)","symbol":"XDR"},"XEU":{"displayName":"Avrupa Para Birimi","displayName-count-one":"Avrupa Para Birimi","displayName-count-other":"Avrupa Para Birimi","symbol":"XEU"},"XFO":{"displayName":"Fransız Altın Frangı","symbol":"XFO"},"XFU":{"displayName":"Fransız UIC-Frangı","symbol":"XFU"},"XOF":{"displayName":"CFA Frangı BCEAO","displayName-count-one":"CFA frangı BCEAO","displayName-count-other":"CFA frangı BCEAO","symbol":"CFA"},"XPD":{"displayName":"Paladyum","symbol":"XPD"},"XPF":{"displayName":"CFP Frangı","displayName-count-one":"CFP frangı","displayName-count-other":"CFP frangı","symbol":"CFPF"},"XPT":{"displayName":"Platin","symbol":"XPT"},"XRE":{"displayName":"RINET Fonları","displayName-count-one":"RINET Fonları","displayName-count-other":"RINET Fonları","symbol":"XRE"},"XSU":{"displayName":"Sucre","displayName-count-one":"Sucre","displayName-count-other":"Sucre","symbol":"XSU"},"XTS":{"displayName":"Test Para Birimi Kodu","displayName-count-one":"Test Para Birimi Kodu","displayName-count-other":"Test Para Birimi Kodu","symbol":"XTS"},"XUA":{"displayName":"ADB Hesap Birimi","displayName-count-one":"ADB hesap birimi","displayName-count-other":"ADB hesap birimi","symbol":"XUA"},"XXX":{"displayName":"Bilinmeyen Para Birimi","displayName-count-one":"(bilinmeyen para birimi)","displayName-count-other":"(bilinmeyen para birimi)","symbol":"XXX"},"YDD":{"displayName":"Yemen Dinarı","displayName-count-one":"Yemen Dinarı","displayName-count-other":"Yemen Dinarı","symbol":"YDD"},"YER":{"displayName":"Yemen Riyali","displayName-count-one":"Yemen riyali","displayName-count-other":"Yemen riyali","symbol":"YER"},"YUD":{"displayName":"Yugoslav Dinarı (Hard)","displayName-count-one":"Yugoslav Dinarı (Hard)","displayName-count-other":"Yugoslav Dinarı (Hard)","symbol":"YUD"},"YUM":{"displayName":"Yeni Yugoslav Dinarı","displayName-count-one":"Yeni Yugoslav Dinarı","displayName-count-other":"Yeni Yugoslav Dinarı","symbol":"YUM"},"YUN":{"displayName":"Konvertibl Yugoslav Dinarı","displayName-count-one":"Konvertibl Yugoslav Dinarı","displayName-count-other":"Konvertibl Yugoslav Dinarı","symbol":"YUN"},"YUR":{"displayName":"İyileştirilmiş Yugoslav Dinarı (1992–1993)","displayName-count-one":"İyileştirilmiş Yugoslav dinarı (1992–1993)","displayName-count-other":"İyileştirilmiş Yugoslav dinarı (1992–1993)","symbol":"YUR"},"ZAL":{"displayName":"Güney Afrika Randı (finansal)","symbol":"ZAL"},"ZAR":{"displayName":"Güney Afrika Randı","displayName-count-one":"Güney Afrika randı","displayName-count-other":"Güney Afrika randı","symbol":"ZAR","symbol-alt-narrow":"R"},"ZMK":{"displayName":"Zambiya Kvaçası (1968–2012)","symbol":"ZMK"},"ZMW":{"displayName":"Zambiya Kvaçası","displayName-count-one":"Zambiya kvaçası","displayName-count-other":"Zambiya kvaçası","symbol":"ZMW","symbol-alt-narrow":"ZK"},"ZRN":{"displayName":"Yeni Zaire Zairesi","symbol":"ZRN"},"ZRZ":{"displayName":"Zaire Zairesi","symbol":"ZRZ"},"ZWD":{"displayName":"Zimbabve Doları","symbol":"ZWD"},"ZWL":{"displayName":"Zimbabve Doları (2009)","symbol":"ZWL"},"ZWR":{"displayName":"Zimbabve Doları (2008)","displayName-count-one":"Zimbabve doları (2008)","displayName-count-other":"Zimbabve doları (2008)","symbol":"ZWR"}},"defaultNumberingSystem":"latn","otherNumberingSystems":{"native":"latn"},"minimumGroupingDigits":"1","symbols-numberSystem-latn":{"decimal":",","group":".","list":";","percentSign":"%","plusSign":"+","minusSign":"-","exponential":"E","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"NaN","timeSeparator":":"},"decimalFormats-numberSystem-latn":{"standard":"#,##0.###","long":{"decimalFormat":{"1000-count-one":"0 bin","1000-count-other":"0 bin","10000-count-one":"00 bin","10000-count-other":"00 bin","100000-count-one":"000 bin","100000-count-other":"000 bin","1000000-count-one":"0 milyon","1000000-count-other":"0 milyon","10000000-count-one":"00 milyon","10000000-count-other":"00 milyon","100000000-count-one":"000 milyon","100000000-count-other":"000 milyon","1000000000-count-one":"0 milyar","1000000000-count-other":"0 milyar","10000000000-count-one":"00 milyar","10000000000-count-other":"00 milyar","100000000000-count-one":"000 milyar","100000000000-count-other":"000 milyar","1000000000000-count-one":"0 trilyon","1000000000000-count-other":"0 trilyon","10000000000000-count-one":"00 trilyon","10000000000000-count-other":"00 trilyon","100000000000000-count-one":"000 trilyon","100000000000000-count-other":"000 trilyon"}},"short":{"decimalFormat":{"1000-count-one":"0 B","1000-count-other":"0 B","10000-count-one":"00 B","10000-count-other":"00 B","100000-count-one":"000 B","100000-count-other":"000 B","1000000-count-one":"0 Mn","1000000-count-other":"0 Mn","10000000-count-one":"00 Mn","10000000-count-other":"00 Mn","100000000-count-one":"000 Mn","100000000-count-other":"000 Mn","1000000000-count-one":"0 Mr","1000000000-count-other":"0 Mr","10000000000-count-one":"00 Mr","10000000000-count-other":"00 Mr","100000000000-count-one":"000 Mr","100000000000-count-other":"000 Mr","1000000000000-count-one":"0 Tn","1000000000000-count-other":"0 Tn","10000000000000-count-one":"00 Tn","10000000000000-count-other":"00 Tn","100000000000000-count-one":"000 Tn","100000000000000-count-other":"000 Tn"}}},"scientificFormats-numberSystem-latn":{"standard":"#E0"},"percentFormats-numberSystem-latn":{"standard":"%#,##0"},"currencyFormats-numberSystem-latn":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"¤#,##0.00","accounting":"¤#,##0.00;(¤#,##0.00)","short":{"standard":{"1000-count-one":"0 B ¤","1000-count-other":"0 B ¤","10000-count-one":"00 B ¤","10000-count-other":"00 B ¤","100000-count-one":"000 B ¤","100000-count-other":"000 B ¤","1000000-count-one":"0 Mn ¤","1000000-count-other":"0 Mn ¤","10000000-count-one":"00 Mn ¤","10000000-count-other":"00 Mn ¤","100000000-count-one":"000 Mn ¤","100000000-count-other":"000 Mn ¤","1000000000-count-one":"0 Mr ¤","1000000000-count-other":"0 Mr ¤","10000000000-count-one":"00 Mr ¤","10000000000-count-other":"00 Mr ¤","100000000000-count-one":"000 Mr ¤","100000000000-count-other":"000 Mr ¤","1000000000000-count-one":"0 Tn ¤","1000000000000-count-other":"0 Tn ¤","10000000000000-count-one":"00 Tn ¤","10000000000000-count-other":"00 Tn ¤","100000000000000-count-one":"000 Tn ¤","100000000000000-count-other":"000 Tn ¤"}},"unitPattern-count-one":"{0} {1}","unitPattern-count-other":"{0} {1}"},"miscPatterns-numberSystem-latn":{"atLeast":"{0}+","range":"{0}–{1}"},"minimalPairs":{"pluralMinimalPairs-count-one":"Sepetinizde {0} X var. Bunu almak istiyor musunuz?","pluralMinimalPairs-count-other":"Sepetinizde {0} X var. Bunları almak istiyor musunuz?","other":"{0}. sağdan dönün."}}},"uk":{"identity":{"version":{"_number":"$Revision: 13712 $","_cldrVersion":"32"},"language":"uk"},"dates":{"calendars":{"gregorian":{"months":{"format":{"abbreviated":{"1":"січ.","2":"лют.","3":"бер.","4":"квіт.","5":"трав.","6":"черв.","7":"лип.","8":"серп.","9":"вер.","10":"жовт.","11":"лист.","12":"груд."},"narrow":{"1":"с","2":"л","3":"б","4":"к","5":"т","6":"ч","7":"л","8":"с","9":"в","10":"ж","11":"л","12":"г"},"wide":{"1":"січня","2":"лютого","3":"березня","4":"квітня","5":"травня","6":"червня","7":"липня","8":"серпня","9":"вересня","10":"жовтня","11":"листопада","12":"грудня"}},"stand-alone":{"abbreviated":{"1":"січ","2":"лют","3":"бер","4":"кві","5":"тра","6":"чер","7":"лип","8":"сер","9":"вер","10":"жов","11":"лис","12":"гру"},"narrow":{"1":"С","2":"Л","3":"Б","4":"К","5":"Т","6":"Ч","7":"Л","8":"С","9":"В","10":"Ж","11":"Л","12":"Г"},"wide":{"1":"січень","2":"лютий","3":"березень","4":"квітень","5":"травень","6":"червень","7":"липень","8":"серпень","9":"вересень","10":"жовтень","11":"листопад","12":"грудень"}}},"days":{"format":{"abbreviated":{"sun":"нд","mon":"пн","tue":"вт","wed":"ср","thu":"чт","fri":"пт","sat":"сб"},"narrow":{"sun":"Н","mon":"П","tue":"В","wed":"С","thu":"Ч","fri":"П","sat":"С"},"short":{"sun":"нд","mon":"пн","tue":"вт","wed":"ср","thu":"чт","fri":"пт","sat":"сб"},"wide":{"sun":"неділя","mon":"понеділок","tue":"вівторок","wed":"середа","thu":"четвер","fri":"пʼятниця","sat":"субота"}},"stand-alone":{"abbreviated":{"sun":"нд","mon":"пн","tue":"вт","wed":"ср","thu":"чт","fri":"пт","sat":"сб"},"narrow":{"sun":"Н","mon":"П","tue":"В","wed":"С","thu":"Ч","fri":"П","sat":"С"},"short":{"sun":"нд","mon":"пн","tue":"вт","wed":"ср","thu":"чт","fri":"пт","sat":"сб"},"wide":{"sun":"неділя","mon":"понеділок","tue":"вівторок","wed":"середа","thu":"четвер","fri":"пʼятниця","sat":"субота"}}},"quarters":{"format":{"abbreviated":{"1":"1-й кв.","2":"2-й кв.","3":"3-й кв.","4":"4-й кв."},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"1-й квартал","2":"2-й квартал","3":"3-й квартал","4":"4-й квартал"}},"stand-alone":{"abbreviated":{"1":"1-й кв.","2":"2-й кв.","3":"3-й кв.","4":"4-й кв."},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"1-й квартал","2":"2-й квартал","3":"3-й квартал","4":"4-й квартал"}}},"dayPeriods":{"format":{"abbreviated":{"midnight":"опівночі","am":"дп","noon":"пополудні","pm":"пп","morning1":"ранку","afternoon1":"дня","evening1":"вечора","night1":"ночі"},"narrow":{"midnight":"північ","am":"дп","noon":"п","pm":"пп","morning1":"ранку","afternoon1":"дня","evening1":"вечора","night1":"ночі"},"wide":{"midnight":"опівночі","am":"дп","noon":"пополудні","pm":"пп","morning1":"ранку","afternoon1":"дня","evening1":"вечора","night1":"ночі"}},"stand-alone":{"abbreviated":{"midnight":"північ","am":"дп","noon":"полудень","pm":"пп","morning1":"ранок","afternoon1":"день","evening1":"вечір","night1":"ніч"},"narrow":{"midnight":"північ","am":"дп","noon":"полудень","pm":"пп","morning1":"ранок","afternoon1":"день","evening1":"вечір","night1":"ніч"},"wide":{"midnight":"північ","am":"дп","noon":"полудень","pm":"пп","morning1":"ранок","afternoon1":"день","evening1":"вечір","night1":"ніч"}}},"eras":{"eraNames":{"0":"до нашої ери","1":"нашої ери","0-alt-variant":"до нової ери","1-alt-variant":"нової ери"},"eraAbbr":{"0":"до н. е.","1":"н. е.","0-alt-variant":"BCE","1-alt-variant":"CE"},"eraNarrow":{"0":"до н.е.","1":"н.е.","0-alt-variant":"BCE","1-alt-variant":"CE"}},"dateFormats":{"full":"EEEE, d MMMM y 'р'.","long":"d MMMM y 'р'.","medium":"d MMM y 'р'.","short":"dd.MM.yy"},"timeFormats":{"full":"HH:mm:ss zzzz","long":"HH:mm:ss z","medium":"HH:mm:ss","short":"HH:mm"},"dateTimeFormats":{"full":"{1} 'о' {0}","long":"{1} 'о' {0}","medium":"{1}, {0}","short":"{1}, {0}","availableFormats":{"Bh":"h B","Bhm":"h:mm B","Bhms":"h:mm:ss B","d":"d","E":"ccc","EBhm":"E h:mm B","EBhms":"E h:mm:ss B","Ed":"E, d","Ehm":"E h:mm a","EHm":"E HH:mm","Ehms":"E h:mm:ss a","EHms":"E HH:mm:ss","Gy":"y G","GyMMM":"LLL y G","GyMMMd":"d MMM y G","GyMMMEd":"E, d MMM y G","h":"h a","H":"HH","hm":"h:mm a","Hm":"HH:mm","hms":"h:mm:ss a","Hms":"HH:mm:ss","hmsv":"h:mm:ss a v","Hmsv":"HH:mm:ss v","hmv":"h:mm a v","Hmv":"HH:mm v","M":"LL","Md":"dd.MM","MEd":"E, dd.MM","MMM":"LLL","MMMd":"d MMM","MMMEd":"E, d MMM","MMMMd":"d MMMM","MMMMEd":"E, d MMMM","MMMMW-count-one":"W-'й' 'тиж'. MMMM","MMMMW-count-few":"W-'й' 'тиж'. MMMM","MMMMW-count-many":"W-'й' 'тиж'. MMMM","MMMMW-count-other":"W-'й' 'тиж'. MMMM","ms":"mm:ss","y":"y","yM":"MM.y","yMd":"dd.MM.y","yMEd":"E, dd.MM.y","yMMM":"LLL y","yMMMd":"d MMM y","yMMMEd":"E, d MMM y","yMMMM":"LLLL y","yQQQ":"QQQ y","yQQQQ":"QQQQ y 'р'.","yw-count-one":"w-'й' 'тиж'. Y 'р'.","yw-count-few":"w-'й' 'тиж'. Y 'р'.","yw-count-many":"w-'й' 'тиж'. Y 'р'.","yw-count-other":"w-'й' 'тиж'. Y 'р'."},"appendItems":{"Day":"{0} ({2}: {1})","Day-Of-Week":"{0} {1}","Era":"{1} {0}","Hour":"{0} ({2}: {1})","Minute":"{0} ({2}: {1})","Month":"{0} ({2}: {1})","Quarter":"{0} ({2}: {1})","Second":"{0} ({2}: {1})","Timezone":"{0} {1}","Week":"{0} ({2}: {1})","Year":"{1} {0}"},"intervalFormats":{"intervalFormatFallback":"{0} – {1}","d":{"d":"d–d"},"h":{"a":"h a – h a","h":"h–h a"},"H":{"H":"HH–HH"},"hm":{"a":"h:mm a – h:mm a","h":"h:mm–h:mm a","m":"h:mm–h:mm a"},"Hm":{"H":"HH:mm–HH:mm","m":"HH:mm–HH:mm"},"hmv":{"a":"h:mm a – h:mm a v","h":"h:mm–h:mm a v","m":"h:mm–h:mm a v"},"Hmv":{"H":"HH:mm–HH:mm v","m":"HH:mm–HH:mm v"},"hv":{"a":"h a – h a v","h":"h–h a v"},"Hv":{"H":"HH–HH v"},"M":{"M":"M–M"},"Md":{"d":"dd.MM – dd.MM","M":"dd.MM – dd.MM"},"MEd":{"d":"E, dd.MM – E, dd.MM","M":"E, dd.MM – E, dd.MM"},"MMM":{"M":"LLL–LLL"},"MMMd":{"d":"d–d MMM","M":"d MMM – d MMM"},"MMMEd":{"d":"E, d – E, d MMM","M":"E, d MMM – E, d MMM"},"y":{"y":"y–y"},"yM":{"M":"MM.y – MM.y","y":"MM.y – MM.y"},"yMd":{"d":"dd.MM.y – dd.MM.y","M":"dd.MM.y – dd.MM.y","y":"dd.MM.y – dd.MM.y"},"yMEd":{"d":"E, dd.MM.y – E, dd.MM.y","M":"E, dd.MM.y – E, dd.MM.y","y":"E, dd.MM.y – E, dd.MM.y"},"yMMM":{"M":"LLL–LLL y","y":"LLL y – LLL y"},"yMMMd":{"d":"d–d MMM y","M":"d MMM – d MMM y","y":"d MMM y – d MMM y"},"yMMMEd":{"d":"E, d – E, d MMM y","M":"E, d MMM – E, d MMM y","y":"E, d MMM y – E, d MMM y"},"yMMMM":{"M":"LLLL – LLLL y","y":"LLLL y – LLLL y"}}}}},"fields":{"era":{"displayName":"ера"},"era-short":{"displayName":"е."},"era-narrow":{"displayName":"е"},"year":{"displayName":"рік","relative-type--1":"торік","relative-type-0":"цього року","relative-type-1":"наступного року","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} рік","relativeTimePattern-count-few":"через {0} роки","relativeTimePattern-count-many":"через {0} років","relativeTimePattern-count-other":"через {0} року"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} рік тому","relativeTimePattern-count-few":"{0} роки тому","relativeTimePattern-count-many":"{0} років тому","relativeTimePattern-count-other":"{0} року тому"}},"year-short":{"displayName":"р.","relative-type--1":"торік","relative-type-0":"цього року","relative-type-1":"наступного року","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} р.","relativeTimePattern-count-few":"через {0} р.","relativeTimePattern-count-many":"через {0} р.","relativeTimePattern-count-other":"через {0} р."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} р. тому","relativeTimePattern-count-few":"{0} р. тому","relativeTimePattern-count-many":"{0} р. тому","relativeTimePattern-count-other":"{0} р. тому"}},"year-narrow":{"displayName":"р.","relative-type--1":"торік","relative-type-0":"цього року","relative-type-1":"наступного року","relativeTime-type-future":{"relativeTimePattern-count-one":"за {0} р.","relativeTimePattern-count-few":"за {0} р.","relativeTimePattern-count-many":"за {0} р.","relativeTimePattern-count-other":"за {0} р."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} р. тому","relativeTimePattern-count-few":"{0} р. тому","relativeTimePattern-count-many":"{0} р. тому","relativeTimePattern-count-other":"{0} р. тому"}},"quarter":{"displayName":"квартал","relative-type--1":"минулого кварталу","relative-type-0":"цього кварталу","relative-type-1":"наступного кварталу","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} квартал","relativeTimePattern-count-few":"через {0} квартали","relativeTimePattern-count-many":"через {0} кварталів","relativeTimePattern-count-other":"через {0} кварталу"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} квартал тому","relativeTimePattern-count-few":"{0} квартали тому","relativeTimePattern-count-many":"{0} кварталів тому","relativeTimePattern-count-other":"{0} кварталу тому"}},"quarter-short":{"displayName":"кв.","relative-type--1":"минулого кв.","relative-type-0":"цього кв.","relative-type-1":"наступного кв.","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} кв.","relativeTimePattern-count-few":"через {0} кв.","relativeTimePattern-count-many":"через {0} кв.","relativeTimePattern-count-other":"через {0} кв."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} кв. тому","relativeTimePattern-count-few":"{0} кв. тому","relativeTimePattern-count-many":"{0} кв. тому","relativeTimePattern-count-other":"{0} кв. тому"}},"quarter-narrow":{"displayName":"кв.","relative-type--1":"минулого кв.","relative-type-0":"цього кв.","relative-type-1":"наступного кв.","relativeTime-type-future":{"relativeTimePattern-count-one":"за {0} кв.","relativeTimePattern-count-few":"за {0} кв.","relativeTimePattern-count-many":"за {0} кв.","relativeTimePattern-count-other":"за {0} кв."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} кв. тому","relativeTimePattern-count-few":"{0} кв. тому","relativeTimePattern-count-many":"{0} кв. тому","relativeTimePattern-count-other":"{0} кв. тому"}},"month":{"displayName":"місяць","relative-type--1":"минулого місяця","relative-type-0":"цього місяця","relative-type-1":"наступного місяця","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} місяць","relativeTimePattern-count-few":"через {0} місяці","relativeTimePattern-count-many":"через {0} місяців","relativeTimePattern-count-other":"через {0} місяця"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} місяць тому","relativeTimePattern-count-few":"{0} місяці тому","relativeTimePattern-count-many":"{0} місяців тому","relativeTimePattern-count-other":"{0} місяця тому"}},"month-short":{"displayName":"міс.","relative-type--1":"минулого місяця","relative-type-0":"цього місяця","relative-type-1":"наступного місяця","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} міс.","relativeTimePattern-count-few":"через {0} міс.","relativeTimePattern-count-many":"через {0} міс.","relativeTimePattern-count-other":"через {0} міс."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} міс. тому","relativeTimePattern-count-few":"{0} міс. тому","relativeTimePattern-count-many":"{0} міс. тому","relativeTimePattern-count-other":"{0} міс. тому"}},"month-narrow":{"displayName":"міс.","relative-type--1":"минулого місяця","relative-type-0":"цього місяця","relative-type-1":"наступного місяця","relativeTime-type-future":{"relativeTimePattern-count-one":"за {0} міс.","relativeTimePattern-count-few":"за {0} міс.","relativeTimePattern-count-many":"за {0} міс.","relativeTimePattern-count-other":"за {0} міс."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} міс. тому","relativeTimePattern-count-few":"{0} міс. тому","relativeTimePattern-count-many":"{0} міс. тому","relativeTimePattern-count-other":"{0} міс. тому"}},"week":{"displayName":"тиждень","relative-type--1":"минулого тижня","relative-type-0":"цього тижня","relative-type-1":"наступного тижня","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} тиждень","relativeTimePattern-count-few":"через {0} тижні","relativeTimePattern-count-many":"через {0} тижнів","relativeTimePattern-count-other":"через {0} тижня"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} тиждень тому","relativeTimePattern-count-few":"{0} тижні тому","relativeTimePattern-count-many":"{0} тижнів тому","relativeTimePattern-count-other":"{0} тижня тому"},"relativePeriod":"тиждень з {0}"},"week-short":{"displayName":"тиж.","relative-type--1":"минулого тижня","relative-type-0":"цього тижня","relative-type-1":"наступного тижня","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} тиж.","relativeTimePattern-count-few":"через {0} тиж.","relativeTimePattern-count-many":"через {0} тиж.","relativeTimePattern-count-other":"через {0} тиж."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} тиж. тому","relativeTimePattern-count-few":"{0} тиж. тому","relativeTimePattern-count-many":"{0} тиж. тому","relativeTimePattern-count-other":"{0} тиж. тому"},"relativePeriod":"тиждень з {0}"},"week-narrow":{"displayName":"тиж.","relative-type--1":"минулого тижня","relative-type-0":"цього тижня","relative-type-1":"наступного тижня","relativeTime-type-future":{"relativeTimePattern-count-one":"за {0} тиж.","relativeTimePattern-count-few":"за {0} тиж.","relativeTimePattern-count-many":"за {0} тиж.","relativeTimePattern-count-other":"за {0} тиж."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} тиж. тому","relativeTimePattern-count-few":"{0} тиж. тому","relativeTimePattern-count-many":"{0} тиж. тому","relativeTimePattern-count-other":"{0} тиж. тому"},"relativePeriod":"тиждень з {0}"},"weekOfMonth":{"displayName":"тиждень місяця"},"weekOfMonth-short":{"displayName":"тиж. місяця"},"weekOfMonth-narrow":{"displayName":"тиж. місяця"},"day":{"displayName":"день","relative-type--2":"позавчора","relative-type--1":"учора","relative-type-0":"сьогодні","relative-type-1":"завтра","relative-type-2":"післязавтра","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} день","relativeTimePattern-count-few":"через {0} дні","relativeTimePattern-count-many":"через {0} днів","relativeTimePattern-count-other":"через {0} дня"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} день тому","relativeTimePattern-count-few":"{0} дні тому","relativeTimePattern-count-many":"{0} днів тому","relativeTimePattern-count-other":"{0} дня тому"}},"day-short":{"displayName":"д.","relative-type--2":"позавчора","relative-type--1":"учора","relative-type-0":"сьогодні","relative-type-1":"завтра","relative-type-2":"післязавтра","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} дн.","relativeTimePattern-count-few":"через {0} дн.","relativeTimePattern-count-many":"через {0} дн.","relativeTimePattern-count-other":"через {0} дн."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} дн. тому","relativeTimePattern-count-few":"{0} дн. тому","relativeTimePattern-count-many":"{0} дн. тому","relativeTimePattern-count-other":"{0} дн. тому"}},"day-narrow":{"displayName":"д.","relative-type--2":"позавчора","relative-type--1":"учора","relative-type-0":"сьогодні","relative-type-1":"завтра","relative-type-2":"післязавтра","relativeTime-type-future":{"relativeTimePattern-count-one":"за {0} д.","relativeTimePattern-count-few":"за {0} д.","relativeTimePattern-count-many":"за {0} д.","relativeTimePattern-count-other":"за {0} д."},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} д. тому","relativeTimePattern-count-few":"-{0} дн.","relativeTimePattern-count-many":"-{0} дн.","relativeTimePattern-count-other":"-{0} дн."}},"dayOfYear":{"displayName":"день року"},"dayOfYear-short":{"displayName":"день року"},"dayOfYear-narrow":{"displayName":"день року"},"weekday":{"displayName":"день тижня"},"weekday-short":{"displayName":"день тижня"},"weekday-narrow":{"displayName":"день тижня"},"weekdayOfMonth":{"displayName":"день місяця"},"weekdayOfMonth-short":{"displayName":"день місяця"},"weekdayOfMonth-narrow":{"displayName":"день місяця"},"sun":{"relative-type--1":"минулої неділі","relative-type-0":"цієї неділі","relative-type-1":"наступної неділі","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} неділю","relativeTimePattern-count-few":"через {0} неділі","relativeTimePattern-count-many":"через {0} неділь","relativeTimePattern-count-other":"через {0} неділі"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} неділю тому","relativeTimePattern-count-few":"{0} неділі тому","relativeTimePattern-count-many":"{0} неділь тому","relativeTimePattern-count-other":"{0} неділі тому"}},"sun-short":{"relative-type--1":"минулої нд","relative-type-0":"цієї нд","relative-type-1":"наступної нд","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} неділю","relativeTimePattern-count-few":"через {0} неділі","relativeTimePattern-count-many":"через {0} неділь","relativeTimePattern-count-other":"через {0} неділі"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} неділю тому","relativeTimePattern-count-few":"{0} неділі тому","relativeTimePattern-count-many":"{0} неділь тому","relativeTimePattern-count-other":"{0} неділі тому"}},"sun-narrow":{"relative-type--1":"мин. нд","relative-type-0":"цієї нд","relative-type-1":"наст. нд","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} неділю","relativeTimePattern-count-few":"через {0} неділі","relativeTimePattern-count-many":"через {0} неділь","relativeTimePattern-count-other":"через {0} неділі"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} неділю тому","relativeTimePattern-count-few":"{0} неділі тому","relativeTimePattern-count-many":"{0} неділь тому","relativeTimePattern-count-other":"{0} неділі тому"}},"mon":{"relative-type--1":"минулого понеділка","relative-type-0":"цього понеділка","relative-type-1":"наступного понеділка","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} понеділок","relativeTimePattern-count-few":"через {0} понеділки","relativeTimePattern-count-many":"через {0} понеділків","relativeTimePattern-count-other":"через {0} понеділка"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} понеділок тому","relativeTimePattern-count-few":"{0} понеділки тому","relativeTimePattern-count-many":"{0} понеділків тому","relativeTimePattern-count-other":"{0} понеділка тому"}},"mon-short":{"relative-type--1":"минулого пн","relative-type-0":"цього пн","relative-type-1":"наступного пн","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} понеділок","relativeTimePattern-count-few":"через {0} понеділки","relativeTimePattern-count-many":"через {0} понеділків","relativeTimePattern-count-other":"через {0} понеділка"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} понеділок тому","relativeTimePattern-count-few":"{0} понеділки тому","relativeTimePattern-count-many":"{0} понеділків тому","relativeTimePattern-count-other":"{0} понеділка тому"}},"mon-narrow":{"relative-type--1":"мин. пн","relative-type-0":"цього пн","relative-type-1":"наст. пн","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} понеділок","relativeTimePattern-count-few":"через {0} понеділки","relativeTimePattern-count-many":"через {0} понеділків","relativeTimePattern-count-other":"через {0} понеділка"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} понеділок тому","relativeTimePattern-count-few":"{0} понеділки тому","relativeTimePattern-count-many":"{0} понеділків тому","relativeTimePattern-count-other":"{0} понеділка тому"}},"tue":{"relative-type--1":"минулого вівторка","relative-type-0":"цього вівторка","relative-type-1":"наступного вівторка","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} вівторок","relativeTimePattern-count-few":"через {0} вівторки","relativeTimePattern-count-many":"через {0} вівторків","relativeTimePattern-count-other":"через {0} вівторка"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} вівторок тому","relativeTimePattern-count-few":"{0} вівторки тому","relativeTimePattern-count-many":"{0} вівторків тому","relativeTimePattern-count-other":"{0} вівторка тому"}},"tue-short":{"relative-type--1":"минулого вт","relative-type-0":"цього вт","relative-type-1":"наступного вт","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} вівторок","relativeTimePattern-count-few":"через {0} вівторки","relativeTimePattern-count-many":"через {0} вівторків","relativeTimePattern-count-other":"через {0} вівторка"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} вівторок тому","relativeTimePattern-count-few":"{0} вівторки тому","relativeTimePattern-count-many":"{0} вівторків тому","relativeTimePattern-count-other":"{0} вівторка тому"}},"tue-narrow":{"relative-type--1":"мин. вт","relative-type-0":"цього вт","relative-type-1":"наст. вт","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} вівторок","relativeTimePattern-count-few":"через {0} вівторки","relativeTimePattern-count-many":"через {0} вівторків","relativeTimePattern-count-other":"через {0} вівторка"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} вівторок тому","relativeTimePattern-count-few":"{0} вівторки тому","relativeTimePattern-count-many":"{0} вівторків тому","relativeTimePattern-count-other":"{0} вівторка тому"}},"wed":{"relative-type--1":"минулої середи","relative-type-0":"цієї середи","relative-type-1":"наступної середи","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} середу","relativeTimePattern-count-few":"через {0} середи","relativeTimePattern-count-many":"через {0} серед","relativeTimePattern-count-other":"через {0} середи"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} середу тому","relativeTimePattern-count-few":"{0} середи тому","relativeTimePattern-count-many":"{0} серед тому","relativeTimePattern-count-other":"{0} середи тому"}},"wed-short":{"relative-type--1":"минулої ср","relative-type-0":"цієї ср","relative-type-1":"наступної ср","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} середу","relativeTimePattern-count-few":"через {0} середи","relativeTimePattern-count-many":"через {0} серед","relativeTimePattern-count-other":"через {0} середи"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} середу тому","relativeTimePattern-count-few":"{0} середи тому","relativeTimePattern-count-many":"{0} серед тому","relativeTimePattern-count-other":"{0} середи тому"}},"wed-narrow":{"relative-type--1":"мин. ср","relative-type-0":"цієї ср","relative-type-1":"наст. ср","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} середу","relativeTimePattern-count-few":"через {0} середи","relativeTimePattern-count-many":"через {0} серед","relativeTimePattern-count-other":"через {0} середи"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} середу тому","relativeTimePattern-count-few":"{0} середи тому","relativeTimePattern-count-many":"{0} серед тому","relativeTimePattern-count-other":"{0} середи тому"}},"thu":{"relative-type--1":"минулого четверга","relative-type-0":"цього четверга","relative-type-1":"наступного четверга","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} четвер","relativeTimePattern-count-few":"через {0} четверги","relativeTimePattern-count-many":"через {0} четвергів","relativeTimePattern-count-other":"через {0} четверга"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} четвер тому","relativeTimePattern-count-few":"{0} четверги тому","relativeTimePattern-count-many":"{0} четвергів тому","relativeTimePattern-count-other":"{0} четверга тому"}},"thu-short":{"relative-type--1":"минулого чт","relative-type-0":"цього чт","relative-type-1":"наступного чт","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} четвер","relativeTimePattern-count-few":"через {0} четверги","relativeTimePattern-count-many":"через {0} четвергів","relativeTimePattern-count-other":"через {0} четверга"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} четвер тому","relativeTimePattern-count-few":"{0} четверги тому","relativeTimePattern-count-many":"{0} четвергів тому","relativeTimePattern-count-other":"{0} четверга тому"}},"thu-narrow":{"relative-type--1":"мин. чт","relative-type-0":"цього чт","relative-type-1":"наст. чт","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} четвер","relativeTimePattern-count-few":"через {0} четверги","relativeTimePattern-count-many":"через {0} четвергів","relativeTimePattern-count-other":"через {0} четверга"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} четвер тому","relativeTimePattern-count-few":"{0} четверги тому","relativeTimePattern-count-many":"{0} четвергів тому","relativeTimePattern-count-other":"{0} четверга тому"}},"fri":{"relative-type--1":"минулої пʼятниці","relative-type-0":"цієї пʼятниці","relative-type-1":"наступної пʼятниці","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} пʼятницю","relativeTimePattern-count-few":"через {0} пʼятниці","relativeTimePattern-count-many":"через {0} пʼятниць","relativeTimePattern-count-other":"через {0} пʼятниці"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} пʼятницю тому","relativeTimePattern-count-few":"{0} пʼятниці тому","relativeTimePattern-count-many":"{0} пʼятниць тому","relativeTimePattern-count-other":"{0} пʼятниці тому"}},"fri-short":{"relative-type--1":"минулої пт","relative-type-0":"цієї пт","relative-type-1":"наступної пт","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} пʼятницю","relativeTimePattern-count-few":"через {0} пʼятниці","relativeTimePattern-count-many":"через {0} пʼятниць","relativeTimePattern-count-other":"через {0} пʼятниці"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} пʼятницю тому","relativeTimePattern-count-few":"{0} пʼятниці тому","relativeTimePattern-count-many":"{0} пʼятниць тому","relativeTimePattern-count-other":"{0} пʼятниці тому"}},"fri-narrow":{"relative-type--1":"мин. пт","relative-type-0":"цієї пт","relative-type-1":"наст. пт","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} пʼятницю","relativeTimePattern-count-few":"через {0} пʼятниці","relativeTimePattern-count-many":"через {0} пʼятниць","relativeTimePattern-count-other":"через {0} пʼятниці"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} пʼятницю тому","relativeTimePattern-count-few":"{0} пʼятниці тому","relativeTimePattern-count-many":"{0} пʼятниць тому","relativeTimePattern-count-other":"{0} пʼятниці тому"}},"sat":{"relative-type--1":"минулої суботи","relative-type-0":"цієї суботи","relative-type-1":"наступної суботи","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} суботу","relativeTimePattern-count-few":"через {0} суботи","relativeTimePattern-count-many":"через {0} субот","relativeTimePattern-count-other":"через {0} суботи"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} суботу тому","relativeTimePattern-count-few":"{0} суботи тому","relativeTimePattern-count-many":"{0} субот тому","relativeTimePattern-count-other":"{0} суботи тому"}},"sat-short":{"relative-type--1":"минулої сб","relative-type-0":"цієї сб","relative-type-1":"наступної сб","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} суботу","relativeTimePattern-count-few":"через {0} суботи","relativeTimePattern-count-many":"через {0} субот","relativeTimePattern-count-other":"через {0} суботи"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} суботу тому","relativeTimePattern-count-few":"{0} суботи тому","relativeTimePattern-count-many":"{0} субот тому","relativeTimePattern-count-other":"{0} суботи тому"}},"sat-narrow":{"relative-type--1":"мин. сб","relative-type-0":"цієї сб","relative-type-1":"наст. сб","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} суботу","relativeTimePattern-count-few":"через {0} суботи","relativeTimePattern-count-many":"через {0} субот","relativeTimePattern-count-other":"через {0} суботи"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} суботу тому","relativeTimePattern-count-few":"{0} суботи тому","relativeTimePattern-count-many":"{0} субот тому","relativeTimePattern-count-other":"{0} суботи тому"}},"dayperiod-short":{"displayName":"дп/пп"},"dayperiod":{"displayName":"дп/пп"},"dayperiod-narrow":{"displayName":"дп/пп"},"hour":{"displayName":"година","relative-type-0":"цієї години","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} годину","relativeTimePattern-count-few":"через {0} години","relativeTimePattern-count-many":"через {0} годин","relativeTimePattern-count-other":"через {0} години"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} годину тому","relativeTimePattern-count-few":"{0} години тому","relativeTimePattern-count-many":"{0} годин тому","relativeTimePattern-count-other":"{0} години тому"}},"hour-short":{"displayName":"год","relative-type-0":"цієї години","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} год","relativeTimePattern-count-few":"через {0} год","relativeTimePattern-count-many":"через {0} год","relativeTimePattern-count-other":"через {0} год"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} год тому","relativeTimePattern-count-few":"{0} год тому","relativeTimePattern-count-many":"{0} год тому","relativeTimePattern-count-other":"{0} год тому"}},"hour-narrow":{"displayName":"год","relative-type-0":"цієї години","relativeTime-type-future":{"relativeTimePattern-count-one":"за {0} год","relativeTimePattern-count-few":"за {0} год","relativeTimePattern-count-many":"за {0} год","relativeTimePattern-count-other":"за {0} год"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} год тому","relativeTimePattern-count-few":"{0} год тому","relativeTimePattern-count-many":"{0} год тому","relativeTimePattern-count-other":"{0} год тому"}},"minute":{"displayName":"хвилина","relative-type-0":"цієї хвилини","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} хвилину","relativeTimePattern-count-few":"через {0} хвилини","relativeTimePattern-count-many":"через {0} хвилин","relativeTimePattern-count-other":"через {0} хвилини"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} хвилину тому","relativeTimePattern-count-few":"{0} хвилини тому","relativeTimePattern-count-many":"{0} хвилин тому","relativeTimePattern-count-other":"{0} хвилини тому"}},"minute-short":{"displayName":"хв","relative-type-0":"цієї хвилини","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} хв","relativeTimePattern-count-few":"через {0} хв","relativeTimePattern-count-many":"через {0} хв","relativeTimePattern-count-other":"через {0} хв"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} хв тому","relativeTimePattern-count-few":"{0} хв тому","relativeTimePattern-count-many":"{0} хв тому","relativeTimePattern-count-other":"{0} хв тому"}},"minute-narrow":{"displayName":"хв","relative-type-0":"цієї хвилини","relativeTime-type-future":{"relativeTimePattern-count-one":"за {0} хв","relativeTimePattern-count-few":"за {0} хв","relativeTimePattern-count-many":"за {0} хв","relativeTimePattern-count-other":"за {0} хв"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} хв тому","relativeTimePattern-count-few":"{0} хв тому","relativeTimePattern-count-many":"{0} хв тому","relativeTimePattern-count-other":"{0} хв тому"}},"second":{"displayName":"секунда","relative-type-0":"зараз","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} секунду","relativeTimePattern-count-few":"через {0} секунди","relativeTimePattern-count-many":"через {0} секунд","relativeTimePattern-count-other":"через {0} секунди"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} секунду тому","relativeTimePattern-count-few":"{0} секунди тому","relativeTimePattern-count-many":"{0} секунд тому","relativeTimePattern-count-other":"{0} секунди тому"}},"second-short":{"displayName":"с","relative-type-0":"зараз","relativeTime-type-future":{"relativeTimePattern-count-one":"через {0} с","relativeTimePattern-count-few":"через {0} с","relativeTimePattern-count-many":"через {0} с","relativeTimePattern-count-other":"через {0} с"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} с тому","relativeTimePattern-count-few":"{0} с тому","relativeTimePattern-count-many":"{0} с тому","relativeTimePattern-count-other":"{0} с тому"}},"second-narrow":{"displayName":"с","relative-type-0":"зараз","relativeTime-type-future":{"relativeTimePattern-count-one":"за {0} с","relativeTimePattern-count-few":"за {0} с","relativeTimePattern-count-many":"за {0} с","relativeTimePattern-count-other":"за {0} с"},"relativeTime-type-past":{"relativeTimePattern-count-one":"{0} с тому","relativeTimePattern-count-few":"{0} с тому","relativeTimePattern-count-many":"{0} с тому","relativeTimePattern-count-other":"{0} с тому"}},"zone":{"displayName":"часовий пояс"},"zone-short":{"displayName":"часовий пояс"},"zone-narrow":{"displayName":"часовий пояс"}}},"numbers":{"currencies":{"ADP":{"displayName":"андоррська песета","displayName-count-one":"андоррська песета","displayName-count-few":"андоррські песети","displayName-count-many":"андоррських песет","displayName-count-other":"андоррських песет","symbol":"ADP"},"AED":{"displayName":"дирхам ОАЕ","displayName-count-one":"дирхам ОАЕ","displayName-count-few":"дирхами ОАЕ","displayName-count-many":"дирхамів ОАЕ","displayName-count-other":"дирхама ОАЕ","symbol":"AED"},"AFA":{"displayName":"афгані (1927–2002)","symbol":"AFA"},"AFN":{"displayName":"афганський афгані","displayName-count-one":"афганський афгані","displayName-count-few":"афганські афгані","displayName-count-many":"афганських афгані","displayName-count-other":"афганського афгані","symbol":"AFN"},"ALK":{"displayName":"ALK","symbol":"ALK"},"ALL":{"displayName":"албанський лек","displayName-count-one":"албанський лек","displayName-count-few":"албанські леки","displayName-count-many":"албанських леків","displayName-count-other":"албанського лека","symbol":"ALL"},"AMD":{"displayName":"вірменський драм","displayName-count-one":"вірменський драм","displayName-count-few":"вірменські драми","displayName-count-many":"вірменських драмів","displayName-count-other":"вірменського драма","symbol":"AMD"},"ANG":{"displayName":"нідерландський антильський гульден","displayName-count-one":"нідерландський антильський гульден","displayName-count-few":"нідерландські антильські гульдени","displayName-count-many":"нідерландських антильських гульденів","displayName-count-other":"нідерландського антильського гульдена","symbol":"ANG"},"AOA":{"displayName":"ангольська кванза","displayName-count-one":"ангольська кванза","displayName-count-few":"ангольські кванзи","displayName-count-many":"ангольських кванз","displayName-count-other":"ангольської кванзи","symbol":"AOA","symbol-alt-narrow":"Kz"},"AOK":{"displayName":"ангольська кванза (1977–1990)","displayName-count-one":"ангольська кванза (1977–1990)","displayName-count-few":"ангольські кванзи (1977–1990)","displayName-count-many":"ангольських кванз (1977–1990)","displayName-count-other":"ангольської кванзи (1977–1990)","symbol":"AOK"},"AON":{"displayName":"ангольська нова кванза (1990–2000)","displayName-count-one":"ангольська нова кванза (1990–2000)","displayName-count-few":"ангольські нові кванзи (1990–2000)","displayName-count-many":"ангольських нових кванз (1990–2000)","displayName-count-other":"ангольської нової кванзи (1990–2000)","symbol":"AON"},"AOR":{"displayName":"ангольська кванза реаджастадо (1995–1999)","displayName-count-one":"ангольська кванза реаджастадо (1995–1999)","displayName-count-few":"ангольські кванзи реаджастадо (1995–1999)","displayName-count-many":"ангольських кванз реаджастадо (1995–1999)","displayName-count-other":"ангольської кванзи реаджастадо (1995–1999)","symbol":"AOR"},"ARA":{"displayName":"аргентинський австрал","displayName-count-one":"аргентинський австрал","displayName-count-few":"аргентинські австрали","displayName-count-many":"аргентинських австралів","displayName-count-other":"аргентинського австрала","symbol":"ARA"},"ARL":{"displayName":"ARL","symbol":"ARL"},"ARM":{"displayName":"ARM","symbol":"ARM"},"ARP":{"displayName":"аргентинський песо (1983–1985)","symbol":"ARP"},"ARS":{"displayName":"аргентинський песо","displayName-count-one":"аргентинський песо","displayName-count-few":"аргентинські песо","displayName-count-many":"аргентинських песо","displayName-count-other":"аргентинського песо","symbol":"ARS","symbol-alt-narrow":"$"},"ATS":{"displayName":"австрійський шилінг","symbol":"ATS"},"AUD":{"displayName":"австралійський долар","displayName-count-one":"австралійський долар","displayName-count-few":"австралійські долари","displayName-count-many":"австралійських доларів","displayName-count-other":"австралійського долара","symbol":"AUD","symbol-alt-narrow":"$"},"AWG":{"displayName":"арубський флорин","displayName-count-one":"арубський флорин","displayName-count-few":"арубські флорини","displayName-count-many":"арубських флоринів","displayName-count-other":"арубського флорина","symbol":"AWG"},"AZM":{"displayName":"азербайджанський манат (1993–2006)","displayName-count-one":"азербайджанський манат (1993–2006)","displayName-count-few":"азербайджанські манати (1993–2006)","displayName-count-many":"азербайджанських манатів (1993–2006)","displayName-count-other":"азербайджанського маната (1993–2006)","symbol":"AZM"},"AZN":{"displayName":"азербайджанський манат","displayName-count-one":"азербайджанський манат","displayName-count-few":"азербайджанські манати","displayName-count-many":"азербайджанських манатів","displayName-count-other":"азербайджанського маната","symbol":"AZN"},"BAD":{"displayName":"динар (Боснія і Герцеговина)","symbol":"BAD"},"BAM":{"displayName":"конвертована марка Боснії і Герцеговини","displayName-count-one":"конвертована марка Боснії і Герцеговини","displayName-count-few":"конвертовані марки Боснії і Герцеговини","displayName-count-many":"конвертованих марок Боснії і Герцеговини","displayName-count-other":"конвертованої марки Боснії і Герцеговини","symbol":"BAM","symbol-alt-narrow":"KM"},"BAN":{"displayName":"BAN","symbol":"BAN"},"BBD":{"displayName":"барбадоський долар","displayName-count-one":"барбадоський долар","displayName-count-few":"барбадоські долари","displayName-count-many":"барбадоських доларів","displayName-count-other":"барбадоського долара","symbol":"BBD","symbol-alt-narrow":"$"},"BDT":{"displayName":"бангладеська така","displayName-count-one":"бангладеська така","displayName-count-few":"бангладеські таки","displayName-count-many":"бангладеських так","displayName-count-other":"бангладеської таки","symbol":"BDT","symbol-alt-narrow":"৳"},"BEC":{"displayName":"бельгійський франк (конвертований)","symbol":"BEC"},"BEF":{"displayName":"бельгійський франк","symbol":"BEF"},"BEL":{"displayName":"бельгійський франк (фінансовий)","symbol":"BEL"},"BGL":{"displayName":"болгарський твердий лев","symbol":"BGL"},"BGM":{"displayName":"BGM","symbol":"BGM"},"BGN":{"displayName":"болгарський лев","displayName-count-one":"болгарський лев","displayName-count-few":"болгарські леви","displayName-count-many":"болгарських левів","displayName-count-other":"болгарського лева","symbol":"BGN"},"BGO":{"displayName":"BGO","symbol":"BGO"},"BHD":{"displayName":"бахрейнський динар","displayName-count-one":"бахрейнський динар","displayName-count-few":"бахрейнські динари","displayName-count-many":"бахрейнських динарів","displayName-count-other":"бахрейнського динара","symbol":"BHD"},"BIF":{"displayName":"бурундійський франк","displayName-count-one":"бурундійський франк","displayName-count-few":"бурундійські франки","displayName-count-many":"бурундійських франків","displayName-count-other":"бурундійського франка","symbol":"BIF"},"BMD":{"displayName":"бермудський долар","displayName-count-one":"бермудський долар","displayName-count-few":"бермудські долари","displayName-count-many":"бермудських доларів","displayName-count-other":"бермудського долара","symbol":"BMD","symbol-alt-narrow":"$"},"BND":{"displayName":"брунейський долар","displayName-count-one":"брунейський долар","displayName-count-few":"брунейські долари","displayName-count-many":"брунейських доларів","displayName-count-other":"брунейського долара","symbol":"BND","symbol-alt-narrow":"$"},"BOB":{"displayName":"болівійський болівіано","displayName-count-one":"болівійський болівіано","displayName-count-few":"болівійські болівіано","displayName-count-many":"болівійських болівіано","displayName-count-other":"болівійського болівіано","symbol":"BOB","symbol-alt-narrow":"Bs"},"BOL":{"displayName":"BOL","symbol":"BOL"},"BOP":{"displayName":"болівійське песо","symbol":"BOP"},"BOV":{"displayName":"болівійський мвдол","symbol":"BOV"},"BRB":{"displayName":"бразильське нове крузейро (1967–1986)","symbol":"BRB"},"BRC":{"displayName":"бразильське крузадо","symbol":"BRC"},"BRE":{"displayName":"бразильське крузейро (1990–1993)","symbol":"BRE"},"BRL":{"displayName":"бразильський реал","displayName-count-one":"бразильський реал","displayName-count-few":"бразильські реали","displayName-count-many":"бразильських реалів","displayName-count-other":"бразильського реала","symbol":"BRL","symbol-alt-narrow":"R$"},"BRN":{"displayName":"бразильське нове крузадо","symbol":"BRN"},"BRR":{"displayName":"бразильське крузейро","symbol":"BRR"},"BRZ":{"displayName":"BRZ","symbol":"BRZ"},"BSD":{"displayName":"багамський долар","displayName-count-one":"багамський долар","displayName-count-few":"багамські долари","displayName-count-many":"багамських доларів","displayName-count-other":"багамського долара","symbol":"BSD","symbol-alt-narrow":"$"},"BTN":{"displayName":"бутанський нгултрум","displayName-count-one":"бутанський нгултрум","displayName-count-few":"бутанські нгултруми","displayName-count-many":"бутанських нгултрумів","displayName-count-other":"бутанського нгултрума","symbol":"BTN"},"BUK":{"displayName":"бірманський кіат","symbol":"BUK"},"BWP":{"displayName":"ботсванська пула","displayName-count-one":"ботсванська пула","displayName-count-few":"ботсванські пули","displayName-count-many":"ботсванських пул","displayName-count-other":"ботсванської пули","symbol":"BWP","symbol-alt-narrow":"P"},"BYB":{"displayName":"білоруський новий рубль (1994–1999)","displayName-count-one":"білоруський новий рубль (1994–1999)","displayName-count-few":"білоруські нові рублі (1994–1999)","displayName-count-many":"білоруських нових рублів (1994–1999)","displayName-count-other":"білоруського нового рубля (1994–1999)","symbol":"BYB"},"BYN":{"displayName":"білоруський рубль","displayName-count-one":"білоруський рубль","displayName-count-few":"білоруські рублі","displayName-count-many":"білоруських рублів","displayName-count-other":"білоруського рубля","symbol":"BYN","symbol-alt-narrow":"р."},"BYR":{"displayName":"білоруський рубль (2000–2016)","displayName-count-one":"білоруський рубль (2000–2016)","displayName-count-few":"білоруські рублі (2000–2016)","displayName-count-many":"білоруських рублів (2000–2016)","displayName-count-other":"білоруського рубля (2000–2016)","symbol":"BYR"},"BZD":{"displayName":"белізький долар","displayName-count-one":"белізький долар","displayName-count-few":"белізькі долари","displayName-count-many":"белізьких доларів","displayName-count-other":"белізького долара","symbol":"BZD","symbol-alt-narrow":"$"},"CAD":{"displayName":"канадський долар","displayName-count-one":"канадський долар","displayName-count-few":"канадські долари","displayName-count-many":"канадських доларів","displayName-count-other":"канадського долара","symbol":"CAD","symbol-alt-narrow":"$"},"CDF":{"displayName":"конголезький франк","displayName-count-one":"конголезький франк","displayName-count-few":"конголезькі франки","displayName-count-many":"конголезьких франків","displayName-count-other":"конголезького франка","symbol":"CDF"},"CHE":{"displayName":"євро WIR","symbol":"CHE"},"CHF":{"displayName":"швейцарський франк","displayName-count-one":"швейцарський франк","displayName-count-few":"швейцарські франки","displayName-count-many":"швейцарських франків","displayName-count-other":"швейцарського франка","symbol":"CHF"},"CHW":{"displayName":"франк WIR","symbol":"CHW"},"CLE":{"displayName":"CLE","symbol":"CLE"},"CLF":{"displayName":"чилійський юнідадес де фоменто","symbol":"CLF"},"CLP":{"displayName":"чилійський песо","displayName-count-one":"чилійський песо","displayName-count-few":"чилійські песо","displayName-count-many":"чилійських песо","displayName-count-other":"чилійського песо","symbol":"CLP","symbol-alt-narrow":"$"},"CNH":{"displayName":"китайський офшорний юань","displayName-count-one":"китайський офшорний юань","displayName-count-few":"китайські офшорні юані","displayName-count-many":"китайських офшорних юанів","displayName-count-other":"китайського офшорного юаня","symbol":"CNH"},"CNX":{"displayName":"CNX","symbol":"CNX"},"CNY":{"displayName":"китайський юань","displayName-count-one":"китайський юань","displayName-count-few":"китайські юані","displayName-count-many":"китайських юанів","displayName-count-other":"китайського юаня","symbol":"CNY","symbol-alt-narrow":"¥"},"COP":{"displayName":"колумбійський песо","displayName-count-one":"колумбійський песо","displayName-count-few":"колумбійські песо","displayName-count-many":"колумбійських песо","displayName-count-other":"колумбійського песо","symbol":"COP","symbol-alt-narrow":"$"},"COU":{"displayName":"одиниця реальної вартості","symbol":"COU"},"CRC":{"displayName":"костариканський колон","displayName-count-one":"костариканський колон","displayName-count-few":"костариканські колони","displayName-count-many":"костариканських колонів","displayName-count-other":"костариканського колона","symbol":"CRC","symbol-alt-narrow":"₡"},"CSD":{"displayName":"старий сербський динар","symbol":"CSD"},"CSK":{"displayName":"чехословацька тверда крона","symbol":"CSK"},"CUC":{"displayName":"кубинський конвертований песо","displayName-count-one":"кубинський конвертований песо","displayName-count-few":"кубинські конвертовані песо","displayName-count-many":"кубинських конвертованих песо","displayName-count-other":"кубинського конвертованого песо","symbol":"CUC","symbol-alt-narrow":"$"},"CUP":{"displayName":"кубинський песо","displayName-count-one":"кубинський песо","displayName-count-few":"кубинські песо","displayName-count-many":"кубинськх песо","displayName-count-other":"кубинського песо","symbol":"CUP","symbol-alt-narrow":"$"},"CVE":{"displayName":"ескудо Кабо-Верде","displayName-count-one":"ескудо Кабо-Верде","displayName-count-few":"ескудо Кабо-Верде","displayName-count-many":"ескудо Кабо-Верде","displayName-count-other":"ескудо Кабо-Верде","symbol":"CVE"},"CYP":{"displayName":"кіпрський фунт","symbol":"CYP"},"CZK":{"displayName":"чеська крона","displayName-count-one":"чеська крона","displayName-count-few":"чеські крони","displayName-count-many":"чеських крон","displayName-count-other":"чеської крони","symbol":"CZK","symbol-alt-narrow":"Kč"},"DDM":{"displayName":"марка НДР","symbol":"DDM"},"DEM":{"displayName":"німецька марка","symbol":"DEM"},"DJF":{"displayName":"джибутійський франк","displayName-count-one":"джибутійський франк","displayName-count-few":"джибутійські франки","displayName-count-many":"джибутійських франків","displayName-count-other":"джибутійського франка","symbol":"DJF"},"DKK":{"displayName":"данська крона","displayName-count-one":"данська крона","displayName-count-few":"данські крони","displayName-count-many":"данських крон","displayName-count-other":"данської крони","symbol":"DKK","symbol-alt-narrow":"kr"},"DOP":{"displayName":"домініканський песо","displayName-count-one":"домініканський песо","displayName-count-few":"домініканські песо","displayName-count-many":"домініканських песо","displayName-count-other":"домініканського песо","symbol":"DOP","symbol-alt-narrow":"$"},"DZD":{"displayName":"алжирський динар","displayName-count-one":"алжирський динар","displayName-count-few":"алжирські динари","displayName-count-many":"алжирських динарів","displayName-count-other":"алжирського динара","symbol":"DZD"},"ECS":{"displayName":"еквадорський сукре","symbol":"ECS"},"ECV":{"displayName":"еквадорський юнідад де валор константе","symbol":"ECV"},"EEK":{"displayName":"естонська крона","displayName-count-one":"естонська крона","displayName-count-few":"естонські крони","displayName-count-many":"естонських крон","displayName-count-other":"естонської крони","symbol":"EEK"},"EGP":{"displayName":"єгипетський фунт","displayName-count-one":"єгипетський фунт","displayName-count-few":"єгипетські фунти","displayName-count-many":"єгипетських фунтів","displayName-count-other":"єгипетського фунта","symbol":"EGP","symbol-alt-narrow":"E£"},"ERN":{"displayName":"еритрейська накфа","displayName-count-one":"еритрейська накфа","displayName-count-few":"еритрейські накфи","displayName-count-many":"еритрейських накф","displayName-count-other":"еритрейської накфи","symbol":"ERN"},"ESA":{"displayName":"іспанська песета (\\\"А\\\" рахунок)","symbol":"ESA"},"ESB":{"displayName":"іспанська песета (конвертовані рахунки)","symbol":"ESB"},"ESP":{"displayName":"іспанська песета","symbol":"ESP","symbol-alt-narrow":"₧"},"ETB":{"displayName":"ефіопський бир","displayName-count-one":"ефіопський бир","displayName-count-few":"ефіопські бири","displayName-count-many":"ефіопських бирів","displayName-count-other":"ефіопського бира","symbol":"ETB"},"EUR":{"displayName":"євро","displayName-count-one":"євро","displayName-count-few":"євро","displayName-count-many":"євро","displayName-count-other":"євро","symbol":"EUR","symbol-alt-narrow":"€"},"FIM":{"displayName":"фінляндська марка","symbol":"FIM"},"FJD":{"displayName":"фіджійський долар","displayName-count-one":"фіджійський долар","displayName-count-few":"фіджійські долари","displayName-count-many":"фіджійських доларів","displayName-count-other":"фіджійського долара","symbol":"FJD","symbol-alt-narrow":"$"},"FKP":{"displayName":"фунт Фолклендських островів","displayName-count-one":"фунт Фолклендських островів","displayName-count-few":"фунти Фолклендських островів","displayName-count-many":"фунтів Фолклендських островів","displayName-count-other":"фунта Фолклендських островів","symbol":"FKP","symbol-alt-narrow":"£"},"FRF":{"displayName":"французький франк","symbol":"FRF"},"GBP":{"displayName":"англійський фунт","displayName-count-one":"англійський фунт","displayName-count-few":"англійські фунти","displayName-count-many":"англійських фунтів","displayName-count-other":"англійського фунта","symbol":"GBP","symbol-alt-narrow":"£"},"GEK":{"displayName":"грузинський купон","displayName-count-one":"грузинський купон","displayName-count-few":"грузинські купони","displayName-count-many":"грузинських купонів","displayName-count-other":"грузинського купона","symbol":"GEK"},"GEL":{"displayName":"грузинський ларі","displayName-count-one":"грузинський ларі","displayName-count-few":"грузинські ларі","displayName-count-many":"грузинських ларі","displayName-count-other":"грузинського ларі","symbol":"GEL","symbol-alt-narrow":"₾","symbol-alt-variant":"₾"},"GHC":{"displayName":"ганський седі (1979–2007)","symbol":"GHC"},"GHS":{"displayName":"ганський седі","displayName-count-one":"ганський седі","displayName-count-few":"ганські седі","displayName-count-many":"ганських седі","displayName-count-other":"ганського седі","symbol":"GHS"},"GIP":{"displayName":"гібралтарський фунт","displayName-count-one":"гібралтарський фунт","displayName-count-few":"гібралтарські фунти","displayName-count-many":"гібралтарських фунтів","displayName-count-other":"гібралтарського фунта","symbol":"GIP","symbol-alt-narrow":"£"},"GMD":{"displayName":"гамбійський даласі","displayName-count-one":"гамбійський даласі","displayName-count-few":"гамбійські даласі","displayName-count-many":"гамбійських даласі","displayName-count-other":"гамбійського даласі","symbol":"GMD"},"GNF":{"displayName":"гвінейський франк","displayName-count-one":"гвінейський франк","displayName-count-few":"гвінейські франки","displayName-count-many":"гвінейських франків","displayName-count-other":"гвінейського франка","symbol":"GNF","symbol-alt-narrow":"FG"},"GNS":{"displayName":"гвінейське сілі","symbol":"GNS"},"GQE":{"displayName":"еквеле (Екваторіальна Ґвінея)","symbol":"GQE"},"GRD":{"displayName":"грецька драхма","symbol":"GRD"},"GTQ":{"displayName":"гватемальський кетсаль","displayName-count-one":"гватемальський кетсаль","displayName-count-few":"гватемальські кетсалі","displayName-count-many":"гватемальських кетсалів","displayName-count-other":"гватемальського кетсаля","symbol":"GTQ","symbol-alt-narrow":"Q"},"GWE":{"displayName":"ескудо португальської гвінеї","symbol":"GWE"},"GWP":{"displayName":"песо Гвінеї-Бісау","symbol":"GWP"},"GYD":{"displayName":"гаянський долар","displayName-count-one":"гаянський долар","displayName-count-few":"гаянські долари","displayName-count-many":"гаянських доларів","displayName-count-other":"гаянського долара","symbol":"GYD","symbol-alt-narrow":"$"},"HKD":{"displayName":"гонконгський долар","displayName-count-one":"гонконгський долар","displayName-count-few":"гонконгські долари","displayName-count-many":"гонконгських доларів","displayName-count-other":"гонконгського долара","symbol":"HKD","symbol-alt-narrow":"$"},"HNL":{"displayName":"гондураська лемпіра","displayName-count-one":"гондураська лемпіра","displayName-count-few":"гондураські лемпіри","displayName-count-many":"гондураських лемпір","displayName-count-other":"гондураської лемпіри","symbol":"HNL","symbol-alt-narrow":"L"},"HRD":{"displayName":"хорватський динар","symbol":"HRD"},"HRK":{"displayName":"хорватська куна","displayName-count-one":"хорватська куна","displayName-count-few":"хорватські куни","displayName-count-many":"хорватських кун","displayName-count-other":"хорватської куни","symbol":"HRK","symbol-alt-narrow":"kn"},"HTG":{"displayName":"гаїтянський гурд","displayName-count-one":"гаїтянський гурд","displayName-count-few":"гаїтянські гурди","displayName-count-many":"гаїтянських гурдів","displayName-count-other":"гаїтянського гурда","symbol":"HTG"},"HUF":{"displayName":"угорський форинт","displayName-count-one":"угорський форинт","displayName-count-few":"угорські форинти","displayName-count-many":"угорських форинтів","displayName-count-other":"угорського форинта","symbol":"HUF","symbol-alt-narrow":"Ft"},"IDR":{"displayName":"індонезійська рупія","displayName-count-one":"індонезійська рупія","displayName-count-few":"індонезійські рупії","displayName-count-many":"індонезійських рупій","displayName-count-other":"індонезійські рупії","symbol":"IDR","symbol-alt-narrow":"Rp"},"IEP":{"displayName":"ірландський фунт","symbol":"IEP"},"ILP":{"displayName":"ізраїльський фунт","symbol":"ILP"},"ILR":{"displayName":"ILR","symbol":"ILR"},"ILS":{"displayName":"ізраїльський новий шекель","displayName-count-one":"ізраїльський новий шекель","displayName-count-few":"ізраїльські нові шекелі","displayName-count-many":"ізраїльських нових шекелів","displayName-count-other":"ізраїльського нового шекеля","symbol":"ILS","symbol-alt-narrow":"₪"},"INR":{"displayName":"індійська рупія","displayName-count-one":"індійська рупія","displayName-count-few":"індійські рупії","displayName-count-many":"індійських рупій","displayName-count-other":"індійської рупії","symbol":"INR","symbol-alt-narrow":"₹"},"IQD":{"displayName":"іракський динар","displayName-count-one":"іракський динар","displayName-count-few":"іракські динари","displayName-count-many":"іракських динарів","displayName-count-other":"іракського динара","symbol":"IQD"},"IRR":{"displayName":"іранський ріал","displayName-count-one":"іранський ріал","displayName-count-few":"іранські ріали","displayName-count-many":"іранських ріалів","displayName-count-other":"іранського ріала","symbol":"IRR"},"ISJ":{"displayName":"ISJ","symbol":"ISJ"},"ISK":{"displayName":"ісландська крона","displayName-count-one":"ісландська крона","displayName-count-few":"ісландські кроні","displayName-count-many":"ісландських крон","displayName-count-other":"ісландської крони","symbol":"ISK","symbol-alt-narrow":"kr"},"ITL":{"displayName":"італійська ліра","symbol":"ITL"},"JMD":{"displayName":"ямайський долар","displayName-count-one":"ямайський долар","displayName-count-few":"ямайські долари","displayName-count-many":"ямайських доларів","displayName-count-other":"ямайського долара","symbol":"JMD","symbol-alt-narrow":"$"},"JOD":{"displayName":"йорданський динар","displayName-count-one":"йорданський динар","displayName-count-few":"йорданські динари","displayName-count-many":"йорданських динарів","displayName-count-other":"йорданського динара","symbol":"JOD"},"JPY":{"displayName":"японська єна","displayName-count-one":"японська єна","displayName-count-few":"японські єни","displayName-count-many":"японських єн","displayName-count-other":"японської єни","symbol":"¥","symbol-alt-narrow":"¥"},"KES":{"displayName":"кенійський шилінг","displayName-count-one":"кенійський шилінг","displayName-count-few":"кенійські шилінги","displayName-count-many":"кенійських шилінгів","displayName-count-other":"кенійського шилінга","symbol":"KES"},"KGS":{"displayName":"киргизький сом","displayName-count-one":"киргизький сом","displayName-count-few":"киргизькі соми","displayName-count-many":"киргизьких сомів","displayName-count-other":"киргизького сома","symbol":"KGS"},"KHR":{"displayName":"камбоджійський рієль","displayName-count-one":"камбоджійський рієль","displayName-count-few":"камбоджійські рієлі","displayName-count-many":"камбоджійських рієлів","displayName-count-other":"камбоджійського рієля","symbol":"KHR","symbol-alt-narrow":"៛"},"KMF":{"displayName":"коморський франк","displayName-count-one":"коморський франк","displayName-count-few":"коморські франки","displayName-count-many":"коморських франків","displayName-count-other":"коморського франка","symbol":"KMF","symbol-alt-narrow":"CF"},"KPW":{"displayName":"північнокорейський вон","displayName-count-one":"північнокорейський вон","displayName-count-few":"північнокорейські вони","displayName-count-many":"північнокорейських вонів","displayName-count-other":"північнокорейського вона","symbol":"KPW","symbol-alt-narrow":"₩"},"KRH":{"displayName":"KRH","symbol":"KRH"},"KRO":{"displayName":"KRO","symbol":"KRO"},"KRW":{"displayName":"південнокорейський вон","displayName-count-one":"південнокорейський вон","displayName-count-few":"південнокорейські вони","displayName-count-many":"південнокорейських вонів","displayName-count-other":"південнокорейського вона","symbol":"KRW","symbol-alt-narrow":"₩"},"KWD":{"displayName":"кувейтський динар","displayName-count-one":"кувейтський динар","displayName-count-few":"кувейтські динари","displayName-count-many":"кувейтських динарів","displayName-count-other":"кувейтського динара","symbol":"KWD"},"KYD":{"displayName":"долар Кайманових островів","displayName-count-one":"долар Кайманових островів","displayName-count-few":"долари Кайманових островів","displayName-count-many":"доларів Кайманових островів","displayName-count-other":"долара Кайманових островів","symbol":"KYD","symbol-alt-narrow":"$"},"KZT":{"displayName":"казахстанський тенге","displayName-count-one":"казахстанський тенге","displayName-count-few":"казахстанські тенге","displayName-count-many":"казахстанських тенге","displayName-count-other":"казахстанського тенге","symbol":"KZT","symbol-alt-narrow":"₸"},"LAK":{"displayName":"лаоський кіп","displayName-count-one":"лаоський кіп","displayName-count-few":"лаоські кіпи","displayName-count-many":"лаоських кіпів","displayName-count-other":"лаоського кіпа","symbol":"LAK","symbol-alt-narrow":"₭"},"LBP":{"displayName":"ліванський фунт","displayName-count-one":"ліванський фунт","displayName-count-few":"ліванські фунти","displayName-count-many":"ліванських фунтів","displayName-count-other":"ліванського фунта","symbol":"LBP","symbol-alt-narrow":"L£"},"LKR":{"displayName":"шрі-ланкійська рупія","displayName-count-one":"шрі-ланкійська рупія","displayName-count-few":"шрі-ланкійські рупії","displayName-count-many":"шрі-ланкійських рупій","displayName-count-other":"шрі-ланкійської рупії","symbol":"LKR","symbol-alt-narrow":"Rs"},"LRD":{"displayName":"ліберійський долар","displayName-count-one":"ліберійський долар","displayName-count-few":"ліберійські долари","displayName-count-many":"ліберійських доларів","displayName-count-other":"ліберійського долара","symbol":"LRD","symbol-alt-narrow":"$"},"LSL":{"displayName":"лесотський лоті","symbol":"LSL"},"LTL":{"displayName":"литовський літ","displayName-count-one":"литовський літ","displayName-count-few":"литовські літи","displayName-count-many":"литовських літів","displayName-count-other":"литовського літа","symbol":"LTL","symbol-alt-narrow":"Lt"},"LTT":{"displayName":"литовський талон","symbol":"LTT"},"LUC":{"displayName":"люксембурґський франк (конвертований)","symbol":"LUC"},"LUF":{"displayName":"люксембурзький франк","symbol":"LUF"},"LUL":{"displayName":"люксембурґський франк (фінансовий)","symbol":"LUL"},"LVL":{"displayName":"латвійський лат","displayName-count-one":"латвійський лат","displayName-count-few":"латвійські лати","displayName-count-many":"латвійських латів","displayName-count-other":"латвійського лата","symbol":"LVL","symbol-alt-narrow":"Ls"},"LVR":{"displayName":"латвійський рубль","symbol":"LVR"},"LYD":{"displayName":"лівійський динар","displayName-count-one":"лівійський динар","displayName-count-few":"лівійські динари","displayName-count-many":"лівійських динарів","displayName-count-other":"лівійського динара","symbol":"LYD"},"MAD":{"displayName":"марокканський дирхам","displayName-count-one":"марокканський дирхам","displayName-count-few":"марокканські дирхами","displayName-count-many":"марокканських дирхамів","displayName-count-other":"марокканського дирхама","symbol":"MAD"},"MAF":{"displayName":"марокканський франк","symbol":"MAF"},"MCF":{"displayName":"MCF","symbol":"MCF"},"MDC":{"displayName":"MDC","symbol":"MDC"},"MDL":{"displayName":"молдовський лей","displayName-count-one":"молдовський лей","displayName-count-few":"молдовські леї","displayName-count-many":"молдовських леїв","displayName-count-other":"молдовського лея","symbol":"MDL"},"MGA":{"displayName":"малагасійський аріарі","displayName-count-one":"малагасійський аріарі","displayName-count-few":"малагасійські аріарі","displayName-count-many":"малагасійських аріарі","displayName-count-other":"малагасійського аріарі","symbol":"MGA","symbol-alt-narrow":"Ar"},"MGF":{"displayName":"мадагаскарський франк","symbol":"MGF"},"MKD":{"displayName":"македонський денар","displayName-count-one":"македонський денар","displayName-count-few":"македонські денари","displayName-count-many":"македонських денарів","displayName-count-other":"македонського денара","symbol":"MKD"},"MKN":{"displayName":"MKN","symbol":"MKN"},"MLF":{"displayName":"малійський франк","symbol":"MLF"},"MMK":{"displayName":"кʼят Мʼянми","displayName-count-one":"кʼят Мʼянми","displayName-count-few":"кʼяти Мʼянми","displayName-count-many":"кʼятів Мʼянми","displayName-count-other":"кʼята Мʼянми","symbol":"MMK","symbol-alt-narrow":"K"},"MNT":{"displayName":"монгольський тугрик","displayName-count-one":"монгольський тугрик","displayName-count-few":"монгольські тугрики","displayName-count-many":"монгольських тугриків","displayName-count-other":"монгольського тугрика","symbol":"MNT","symbol-alt-narrow":"₮"},"MOP":{"displayName":"патака Макао","displayName-count-one":"патака Макао","displayName-count-few":"патаки Макао","displayName-count-many":"патак Макао","displayName-count-other":"патаки Макао","symbol":"MOP"},"MRO":{"displayName":"мавританська угія","displayName-count-one":"мавританська угія","displayName-count-few":"мавританські угії","displayName-count-many":"мавританських угій","displayName-count-other":"мавританської угії","symbol":"MRO"},"MTL":{"displayName":"мальтійська ліра","symbol":"MTL"},"MTP":{"displayName":"мальтійський фунт","symbol":"MTP"},"MUR":{"displayName":"маврикійська рупія","displayName-count-one":"маврикійська рупія","displayName-count-few":"маврикійські рупії","displayName-count-many":"маврикійських рупій","displayName-count-other":"маврикійської рупії","symbol":"MUR","symbol-alt-narrow":"Rs"},"MVP":{"displayName":"MVP","symbol":"MVP"},"MVR":{"displayName":"мальдівська руфія","displayName-count-one":"мальдівська руфія","displayName-count-few":"мальдівські руфії","displayName-count-many":"мальдівських руфій","displayName-count-other":"мальдівської руфії","symbol":"MVR"},"MWK":{"displayName":"малавійська квача","displayName-count-one":"малавійська квача","displayName-count-few":"малавійські квачі","displayName-count-many":"малавійських квач","displayName-count-other":"малавійської квачі","symbol":"MWK"},"MXN":{"displayName":"мексиканський песо","displayName-count-one":"мексиканський песо","displayName-count-few":"мексиканські песо","displayName-count-many":"мексиканських песо","displayName-count-other":"мексиканського песо","symbol":"MXN","symbol-alt-narrow":"$"},"MXP":{"displayName":"мексиканське срібне песо (1861–1992)","symbol":"MXP"},"MXV":{"displayName":"мексиканський юнідад де інверсіон","symbol":"MXV"},"MYR":{"displayName":"малайзійський рингіт","displayName-count-one":"малайзійський рингіт","displayName-count-few":"малайзійські рингіти","displayName-count-many":"малайзійських рингітів","displayName-count-other":"малайзійського рингіта","symbol":"MYR","symbol-alt-narrow":"RM"},"MZE":{"displayName":"мозамбіцький ескудо","symbol":"MZE"},"MZM":{"displayName":"старий мозамбіцький метикал","symbol":"MZM"},"MZN":{"displayName":"мозамбіцький метикал","displayName-count-one":"мозамбіцький метикал","displayName-count-few":"мозамбіцькі метикали","displayName-count-many":"мозамбіцьких метикалів","displayName-count-other":"мозамбіцького метикала","symbol":"MZN"},"NAD":{"displayName":"намібійський долар","displayName-count-one":"намібійський долар","displayName-count-few":"намібійські долари","displayName-count-many":"намібійських доларів","displayName-count-other":"намібійського долара","symbol":"NAD","symbol-alt-narrow":"$"},"NGN":{"displayName":"нігерійська найра","displayName-count-one":"нігерійська найра","displayName-count-few":"нігерійські найри","displayName-count-many":"нігерійських найр","displayName-count-other":"нігерійської найри","symbol":"NGN","symbol-alt-narrow":"₦"},"NIC":{"displayName":"нікарагуанська кордоба (1988–1991)","displayName-count-one":"нікарагуанська кордоба (1988–1991)","displayName-count-few":"нікарагуанські кордоби (1988–1991)","displayName-count-many":"нікарагуанських кордоб (1988–1991)","displayName-count-other":"нікарагуанської кордоби (1988–1991)","symbol":"NIC"},"NIO":{"displayName":"нікарагуанська кордоба","displayName-count-one":"нікарагуанська кордоба","displayName-count-few":"нікарагуанські кордоби","displayName-count-many":"нікарагуанських кордоб","displayName-count-other":"нікарагуанської кордоби","symbol":"NIO","symbol-alt-narrow":"C$"},"NLG":{"displayName":"нідерландський гульден","symbol":"NLG"},"NOK":{"displayName":"норвезька крона","displayName-count-one":"норвезька крона","displayName-count-few":"норвезькі крони","displayName-count-many":"норвезьких крон","displayName-count-other":"норвезької крони","symbol":"NOK","symbol-alt-narrow":"kr"},"NPR":{"displayName":"непальська рупія","displayName-count-one":"непальська рупія","displayName-count-few":"непальські рупії","displayName-count-many":"непальських рупій","displayName-count-other":"непальської рупії","symbol":"NPR","symbol-alt-narrow":"Rs"},"NZD":{"displayName":"новозеландський долар","displayName-count-one":"новозеландський долар","displayName-count-few":"новозеландські долари","displayName-count-many":"новозеландських доларів","displayName-count-other":"новозеландського долара","symbol":"NZD","symbol-alt-narrow":"$"},"OMR":{"displayName":"оманський ріал","displayName-count-one":"оманський ріал","displayName-count-few":"оманські ріали","displayName-count-many":"оманських ріалів","displayName-count-other":"оманського ріала","symbol":"OMR"},"PAB":{"displayName":"панамське бальбоа","displayName-count-one":"панамське бальбоа","displayName-count-few":"панамські бальбоа","displayName-count-many":"панамських бальбоа","displayName-count-other":"панамського бальбоа","symbol":"PAB"},"PEI":{"displayName":"перуанський інті","symbol":"PEI"},"PEN":{"displayName":"перуанський новий сол","displayName-count-one":"перуанський новий сол","displayName-count-few":"перуанські нові соли","displayName-count-many":"перуанських нових солів","displayName-count-other":"перуанського нового сола","symbol":"PEN"},"PES":{"displayName":"перуанський сол (1863–1965)","displayName-count-one":"перуанський сол (1863–1965)","displayName-count-few":"перуанські соли (1863–1965)","displayName-count-many":"перуанських солів (1863–1965)","displayName-count-other":"перуанського сола (1863–1965)","symbol":"PES"},"PGK":{"displayName":"кіна Папуа-Нової Ґвінеї","displayName-count-one":"кіна Папуа-Нової Ґвінеї","displayName-count-few":"кіни Папуа-Нової Ґвінеї","displayName-count-many":"кін Папуа-Нової Ґвінеї","displayName-count-other":"кіни Папуа-Нової Ґвінеї","symbol":"PGK"},"PHP":{"displayName":"філіппінський песо","displayName-count-one":"філіппінський песо","displayName-count-few":"філіппінські песо","displayName-count-many":"філіппінських песо","displayName-count-other":"філіппінського песо","symbol":"PHP","symbol-alt-narrow":"₱"},"PKR":{"displayName":"пакистанська рупія","displayName-count-one":"пакистанська рупія","displayName-count-few":"пакистанські рупії","displayName-count-many":"пакистанських рупій","displayName-count-other":"пакистанської рупії","symbol":"PKR","symbol-alt-narrow":"Rs"},"PLN":{"displayName":"польський злотий","displayName-count-one":"польський злотий","displayName-count-few":"польські злоті","displayName-count-many":"польських злотих","displayName-count-other":"польського злотого","symbol":"PLN","symbol-alt-narrow":"zł"},"PLZ":{"displayName":"польський злотий (1950–1995)","symbol":"PLZ"},"PTE":{"displayName":"португальський ескудо","symbol":"PTE"},"PYG":{"displayName":"парагвайський гуарані","displayName-count-one":"парагвайський гуарані","displayName-count-few":"парагвайські гуарані","displayName-count-many":"парагвайських гуарані","displayName-count-other":"парагвайського гуарані","symbol":"PYG","symbol-alt-narrow":"₲"},"QAR":{"displayName":"катарський ріал","displayName-count-one":"катарський ріал","displayName-count-few":"катарські ріали","displayName-count-many":"катарських ріалів","displayName-count-other":"катарського ріала","symbol":"QAR"},"RHD":{"displayName":"родезійський долар","symbol":"RHD"},"ROL":{"displayName":"старий румунський лей","symbol":"ROL"},"RON":{"displayName":"румунський лей","displayName-count-one":"румунський лей","displayName-count-few":"румунські леї","displayName-count-many":"румунських леїв","displayName-count-other":"румунського лея","symbol":"RON","symbol-alt-narrow":"lei"},"RSD":{"displayName":"сербський динар","displayName-count-one":"сербський динар","displayName-count-few":"сербські динари","displayName-count-many":"сербських динарів","displayName-count-other":"сербського динара","symbol":"RSD"},"RUB":{"displayName":"російський рубль","displayName-count-one":"російський рубль","displayName-count-few":"російські рублі","displayName-count-many":"російських рублів","displayName-count-other":"російського рубля","symbol":"RUB","symbol-alt-narrow":"₽"},"RUR":{"displayName":"російський рубль (1991–1998)","displayName-count-one":"російський рубль (RUR)","displayName-count-few":"російські рублі (RUR)","displayName-count-many":"російських рублів (RUR)","displayName-count-other":"російського рубля (RUR)","symbol":"RUR","symbol-alt-narrow":"р."},"RWF":{"displayName":"руандійський франк","displayName-count-one":"руандійський франк","displayName-count-few":"руандійські франки","displayName-count-many":"руандійських франків","displayName-count-other":"руандійського франка","symbol":"RWF","symbol-alt-narrow":"RF"},"SAR":{"displayName":"саудівський ріал","displayName-count-one":"саудівський ріал","displayName-count-few":"саудівські ріали","displayName-count-many":"саудівських ріалів","displayName-count-other":"саудівського ріала","symbol":"SAR"},"SBD":{"displayName":"долар Соломонових Островів","displayName-count-one":"долар Соломонових Островів","displayName-count-few":"долари Соломонових Островів","displayName-count-many":"доларів Соломонових Островів","displayName-count-other":"долара Соломонових Островів","symbol":"SBD","symbol-alt-narrow":"$"},"SCR":{"displayName":"сейшельська рупія","displayName-count-one":"сейшельська рупія","displayName-count-few":"сейшельські рупії","displayName-count-many":"сейшельських рупій","displayName-count-other":"сейшельської рупії","symbol":"SCR"},"SDD":{"displayName":"суданський динар","symbol":"SDD"},"SDG":{"displayName":"суданський фунт","displayName-count-one":"суданський фунт","displayName-count-few":"суданські фунти","displayName-count-many":"суданських фунтів","displayName-count-other":"суданського фунта","symbol":"SDG"},"SDP":{"displayName":"старий суданський фунт","symbol":"SDP"},"SEK":{"displayName":"шведська крона","displayName-count-one":"шведська крона","displayName-count-few":"шведські крони","displayName-count-many":"шведських крон","displayName-count-other":"шведської крони","symbol":"SEK","symbol-alt-narrow":"kr"},"SGD":{"displayName":"сінгапурський долар","displayName-count-one":"сінгапурський долар","displayName-count-few":"сінгапурські долари","displayName-count-many":"сінгапурських доларів","displayName-count-other":"сінгапурського долара","symbol":"SGD","symbol-alt-narrow":"$"},"SHP":{"displayName":"фунт острова Святої Єлени","displayName-count-one":"фунт острова Святої Єлени","displayName-count-few":"фунти острова Святої Єлени","displayName-count-many":"фунтів острова Святої Єлени","displayName-count-other":"фунта острова Святої Єлени","symbol":"SHP","symbol-alt-narrow":"£"},"SIT":{"displayName":"словенський толар","symbol":"SIT"},"SKK":{"displayName":"словацька крона","symbol":"SKK"},"SLL":{"displayName":"леоне Сьєрра-Леоне","displayName-count-one":"леоне Сьєрра-Леоне","displayName-count-few":"леоне Сьєрра-Леоне","displayName-count-many":"леоне Сьєрра-Леоне","displayName-count-other":"леоне Сьєрра-Леоне","symbol":"SLL"},"SOS":{"displayName":"сомалійський шилінг","displayName-count-one":"сомалійський шилінг","displayName-count-few":"сомалійські шилінги","displayName-count-many":"сомалійських шилінгів","displayName-count-other":"сомалійського шилінга","symbol":"SOS"},"SRD":{"displayName":"суринамський долар","displayName-count-one":"суринамський долар","displayName-count-few":"суринамські долари","displayName-count-many":"суринамських доларів","displayName-count-other":"суринамського долара","symbol":"SRD","symbol-alt-narrow":"$"},"SRG":{"displayName":"суринамський гульден","symbol":"SRG"},"SSP":{"displayName":"південносуданський фунт","displayName-count-one":"південносуданський фунт","displayName-count-few":"південносуданські фунти","displayName-count-many":"південносуданських фунтів","displayName-count-other":"південносуданського фунта","symbol":"SSP","symbol-alt-narrow":"£"},"STD":{"displayName":"добра Сан-Томе і Прінсіпі","displayName-count-one":"добра Сан-Томе і Прінсіпі","displayName-count-few":"добри Сан-Томе і Принсіпі","displayName-count-many":"добр Сан-Томе і Принсіпі","displayName-count-other":"добри Сан-Томе і Прінсіпі","symbol":"STD","symbol-alt-narrow":"Db"},"STN":{"displayName":"STN","symbol":"STN"},"SUR":{"displayName":"радянський рубль","displayName-count-one":"радянський рубль","displayName-count-few":"радянські рублі","displayName-count-many":"радянських рублів","displayName-count-other":"радянського рубля","symbol":"SUR"},"SVC":{"displayName":"сальвадорський колон","symbol":"SVC"},"SYP":{"displayName":"сирійський фунт","displayName-count-one":"сирійський фунт","displayName-count-few":"сирійські фунти","displayName-count-many":"сирійських фунтів","displayName-count-other":"сирійського фунта","symbol":"SYP","symbol-alt-narrow":"£"},"SZL":{"displayName":"свазілендський лілангені","displayName-count-one":"свазілендський лілангені","displayName-count-few":"свазілендські лілангені","displayName-count-many":"свазілендських лілангені","displayName-count-other":"свазілендського лілангені","symbol":"SZL"},"THB":{"displayName":"таїландський бат","displayName-count-one":"таїландський бат","displayName-count-few":"таїландські бати","displayName-count-many":"таїландських батів","displayName-count-other":"таїландського бата","symbol":"THB","symbol-alt-narrow":"฿"},"TJR":{"displayName":"таджицький рубль","symbol":"TJR"},"TJS":{"displayName":"таджицький сомоні","displayName-count-one":"таджицький сомоні","displayName-count-few":"таджицькі сомоні","displayName-count-many":"таджицьких сомоні","displayName-count-other":"таджицького сомоні","symbol":"TJS"},"TMM":{"displayName":"туркменський манат (1993–2009)","displayName-count-one":"туркменський манат (1993–2009)","displayName-count-few":"туркменські манати (1993–2009)","displayName-count-many":"туркменських манатів (1993–2009)","displayName-count-other":"туркменського маната (1993–2009)","symbol":"TMM"},"TMT":{"displayName":"туркменський манат","displayName-count-one":"туркменський манат","displayName-count-few":"туркменські манати","displayName-count-many":"туркменських манатів","displayName-count-other":"туркменського маната","symbol":"TMT"},"TND":{"displayName":"туніський динар","displayName-count-one":"туніський динар","displayName-count-few":"туніські динари","displayName-count-many":"туніських динарів","displayName-count-other":"туніського динара","symbol":"TND"},"TOP":{"displayName":"тонґанська паанга","displayName-count-one":"тонґанська паанга","displayName-count-few":"тонґанські паанги","displayName-count-many":"тонґанських паанг","displayName-count-other":"тонґанської паанги","symbol":"TOP","symbol-alt-narrow":"T$"},"TPE":{"displayName":"тіморський ескудо","symbol":"TPE"},"TRL":{"displayName":"турецька ліра (1922–2005)","displayName-count-one":"турецька ліра (1922–2005)","displayName-count-few":"турецькі ліри (1922–2005)","displayName-count-many":"турецьких лір (1922–2005)","displayName-count-other":"турецької ліри (1922–2005)","symbol":"TRL"},"TRY":{"displayName":"турецька ліра","displayName-count-one":"турецька ліра","displayName-count-few":"турецькі ліри","displayName-count-many":"турецьких лір","displayName-count-other":"турецької ліри","symbol":"TRY","symbol-alt-narrow":"₺","symbol-alt-variant":"TL"},"TTD":{"displayName":"долар Трінідаду і Тобаґо","displayName-count-one":"долар Трінідаду і Тобаґо","displayName-count-few":"долари Тринідаду і Тобаго","displayName-count-many":"доларів Тринідаду і Тобаго","displayName-count-other":"долара Трінідаду і Тобаґо","symbol":"TTD","symbol-alt-narrow":"$"},"TWD":{"displayName":"новий тайванський долар","displayName-count-one":"новий тайванський долар","displayName-count-few":"нові тайванські долари","displayName-count-many":"нових тайванських доларів","displayName-count-other":"нового тайванського долара","symbol":"TWD","symbol-alt-narrow":"NT$"},"TZS":{"displayName":"танзанійський шилінг","displayName-count-one":"танзанійський шилінг","displayName-count-few":"танзанійські шилінги","displayName-count-many":"танзанійських шилінгів","displayName-count-other":"танзанійського шилінга","symbol":"TZS"},"UAH":{"displayName":"українська гривня","displayName-count-one":"гривня","displayName-count-few":"гривні","displayName-count-many":"гривень","displayName-count-other":"гривні","symbol":"₴","symbol-alt-narrow":"₴","symbol-alt-variant":"грн."},"UAK":{"displayName":"український карбованець","displayName-count-one":"український карбованець","displayName-count-few":"українські карбованці","displayName-count-many":"українських карбованців","displayName-count-other":"українського карбованця","symbol":"крб."},"UGS":{"displayName":"угандійський шилінг (1966–1987)","symbol":"UGS"},"UGX":{"displayName":"угандійський шилінг","displayName-count-one":"угандійський шилінг","displayName-count-few":"угандійські шилінги","displayName-count-many":"угандійських шилінгів","displayName-count-other":"угандійського шилінга","symbol":"UGX"},"USD":{"displayName":"долар США","displayName-count-one":"долар США","displayName-count-few":"долари США","displayName-count-many":"доларів США","displayName-count-other":"долара США","symbol":"USD","symbol-alt-narrow":"$"},"USN":{"displayName":"долар США (наступного дня)","symbol":"USN"},"USS":{"displayName":"долар США (цього дня)","symbol":"USS"},"UYI":{"displayName":"уругвайський песо в індексованих одиницях","symbol":"UYI"},"UYP":{"displayName":"уругвайське песо (1975–1993)","symbol":"UYP"},"UYU":{"displayName":"уругвайський песо","displayName-count-one":"уругвайський песо","displayName-count-few":"уругвайські песо","displayName-count-many":"уругвайських песо","displayName-count-other":"уругвайського песо","symbol":"UYU","symbol-alt-narrow":"$"},"UZS":{"displayName":"узбецький сум","displayName-count-one":"узбецький сум","displayName-count-few":"узбецькі суми","displayName-count-many":"узбецьких сумів","displayName-count-other":"узбецького сума","symbol":"UZS"},"VEB":{"displayName":"венесуельський болівар (1871–2008)","symbol":"VEB"},"VEF":{"displayName":"венесуельський болівар","displayName-count-one":"венесуельський болівар","displayName-count-few":"венесуельські болівари","displayName-count-many":"венесуельських боліварів","displayName-count-other":"венесуельського болівара","symbol":"VEF","symbol-alt-narrow":"Bs"},"VND":{"displayName":"вʼєтнамський донг","displayName-count-one":"вʼєтнамський донг","displayName-count-few":"вʼєтнамські донги","displayName-count-many":"вʼєтнамських донгів","displayName-count-other":"вʼєтнамського донга","symbol":"VND","symbol-alt-narrow":"₫"},"VNN":{"displayName":"VNN","symbol":"VNN"},"VUV":{"displayName":"вануатський вату","displayName-count-one":"вануатський вату","displayName-count-few":"вануатські вату","displayName-count-many":"вануатських вату","displayName-count-other":"вануатського вату","symbol":"VUV"},"WST":{"displayName":"самоанська тала","displayName-count-one":"самоанська тала","displayName-count-few":"самоанські тали","displayName-count-many":"самоанських тал","displayName-count-other":"самоанської тали","symbol":"WST"},"XAF":{"displayName":"центральноафриканський франк","displayName-count-one":"центральноафриканський франк","displayName-count-few":"центральноафриканські франки","displayName-count-many":"центральноафриканських франків","displayName-count-other":"центральноафриканського франка","symbol":"FCFA"},"XAG":{"displayName":"срібло","symbol":"XAG"},"XAU":{"displayName":"золото","symbol":"XAU"},"XBA":{"displayName":"європейська складена валютна одиниця","symbol":"XBA"},"XBB":{"displayName":"одиниця європейського валютного фонду","symbol":"XBB"},"XBC":{"displayName":"європейська розрахункова одиниця XBC","symbol":"XBC"},"XBD":{"displayName":"європейська розрахункова одиниця XBD","symbol":"XBD"},"XCD":{"displayName":"східнокарибський долар","displayName-count-one":"східнокарибський долар","displayName-count-few":"східнокарибські долари","displayName-count-many":"східнокарибських доларів","displayName-count-other":"східнокарибського долара","symbol":"XCD","symbol-alt-narrow":"$"},"XDR":{"displayName":"спеціальні права запозичення","symbol":"XDR"},"XEU":{"displayName":"європейська валютна одиниця","symbol":"XEU"},"XFO":{"displayName":"французький золотий франк","symbol":"XFO"},"XFU":{"displayName":"французький франк UIC","symbol":"XFU"},"XOF":{"displayName":"західноафриканський франк","displayName-count-one":"західноафриканський франк","displayName-count-few":"західноафриканські франки","displayName-count-many":"західноафриканських франків","displayName-count-other":"західноафриканського франка","symbol":"CFA"},"XPD":{"displayName":"паладій","symbol":"XPD"},"XPF":{"displayName":"французький тихоокеанський франк","displayName-count-one":"французький тихоокеанський франк","displayName-count-few":"французькі тихоокеанські франки","displayName-count-many":"французьких тихоокеанських франків","displayName-count-other":"французького тихоокеанського франка","symbol":"CFPF"},"XPT":{"displayName":"платина","symbol":"XPT"},"XRE":{"displayName":"фонди RINET","symbol":"XRE"},"XSU":{"displayName":"XSU","symbol":"XSU"},"XTS":{"displayName":"код тестування валюти","symbol":"XTS"},"XUA":{"displayName":"XUA","symbol":"XUA"},"XXX":{"displayName":"невідома грошова одиниця","displayName-count-one":"невідома грошова одиниця","displayName-count-few":"невідомі грошові одиниці","displayName-count-many":"невідомих грошових одиниць","displayName-count-other":"невідомої грошової одиниці","symbol":"XXX"},"YDD":{"displayName":"єменський динар","symbol":"YDD"},"YER":{"displayName":"єменський ріал","displayName-count-one":"єменський ріал","displayName-count-few":"єменські ріали","displayName-count-many":"єменських ріалів","displayName-count-other":"єменського ріала","symbol":"YER"},"YUD":{"displayName":"югославський твердий динар","symbol":"YUD"},"YUM":{"displayName":"югославський новий динар","symbol":"YUM"},"YUN":{"displayName":"югославський конвертований динар","symbol":"YUN"},"YUR":{"displayName":"YUR","symbol":"YUR"},"ZAL":{"displayName":"південноафриканський фінансовий ранд","symbol":"ZAL"},"ZAR":{"displayName":"південноафриканський ранд","displayName-count-one":"південноафриканський ранд","displayName-count-few":"південноафриканські ранди","displayName-count-many":"південноафриканських рандів","displayName-count-other":"південноафриканського ранда","symbol":"ZAR","symbol-alt-narrow":"R"},"ZMK":{"displayName":"замбійська квача (1968–2012)","displayName-count-one":"замбійська квача (1968–2012)","displayName-count-few":"замбійські квачі (1968–2012)","displayName-count-many":"замбійських квач (1968–2012)","displayName-count-other":"замбійські квачі (1968–2012)","symbol":"ZMK"},"ZMW":{"displayName":"замбійська квача","displayName-count-one":"замбійська квача","displayName-count-few":"замбійські квачі","displayName-count-many":"замбійських квач","displayName-count-other":"замбійської квачі","symbol":"ZMW","symbol-alt-narrow":"ZK"},"ZRN":{"displayName":"заїрський новий заїр","symbol":"ZRN"},"ZRZ":{"displayName":"заїрський заїр","symbol":"ZRZ"},"ZWD":{"displayName":"зімбабвійський долар","displayName-count-one":"зімбабвійського долара","displayName-count-few":"зімбабвійскі долари","displayName-count-many":"зімбабвійських доларів","displayName-count-other":"зімбабвійські долари","symbol":"ZWD"},"ZWL":{"displayName":"зімбабвійський долар (2009)","displayName-count-one":"зімбабвійський долар (2009)","displayName-count-few":"зімбабвійські долари (2009)","displayName-count-many":"зімбабвійських доларів (2009)","displayName-count-other":"зімбабвійського долара (2009)","symbol":"ZWL"},"ZWR":{"displayName":"ZWR","symbol":"ZWR"}},"defaultNumberingSystem":"latn","otherNumberingSystems":{"native":"latn"},"minimumGroupingDigits":"1","symbols-numberSystem-latn":{"decimal":",","group":" ","list":";","percentSign":"%","plusSign":"+","minusSign":"-","exponential":"Е","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"NaN","timeSeparator":":"},"decimalFormats-numberSystem-latn":{"standard":"#,##0.###","long":{"decimalFormat":{"1000-count-one":"0 тисяча","1000-count-few":"0 тисячі","1000-count-many":"0 тисяч","1000-count-other":"0 тисячі","10000-count-one":"00 тисяча","10000-count-few":"00 тисячі","10000-count-many":"00 тисяч","10000-count-other":"00 тисячі","100000-count-one":"000 тисяча","100000-count-few":"000 тисячі","100000-count-many":"000 тисяч","100000-count-other":"000 тисячі","1000000-count-one":"0 мільйон","1000000-count-few":"0 мільйони","1000000-count-many":"0 мільйонів","1000000-count-other":"0 мільйона","10000000-count-one":"00 мільйон","10000000-count-few":"00 мільйони","10000000-count-many":"00 мільйонів","10000000-count-other":"00 мільйона","100000000-count-one":"000 мільйон","100000000-count-few":"000 мільйони","100000000-count-many":"000 мільйонів","100000000-count-other":"000 мільйона","1000000000-count-one":"0 мільярд","1000000000-count-few":"0 мільярди","1000000000-count-many":"0 мільярдів","1000000000-count-other":"0 мільярда","10000000000-count-one":"00 мільярд","10000000000-count-few":"00 мільярди","10000000000-count-many":"00 мільярдів","10000000000-count-other":"00 мільярда","100000000000-count-one":"000 мільярд","100000000000-count-few":"000 мільярди","100000000000-count-many":"000 мільярдів","100000000000-count-other":"000 мільярда","1000000000000-count-one":"0 трильйон","1000000000000-count-few":"0 трильйони","1000000000000-count-many":"0 трильйонів","1000000000000-count-other":"0 трильйона","10000000000000-count-one":"00 трильйон","10000000000000-count-few":"00 трильйони","10000000000000-count-many":"00 трильйонів","10000000000000-count-other":"00 трильйона","100000000000000-count-one":"000 трильйон","100000000000000-count-few":"000 трильйони","100000000000000-count-many":"000 трильйонів","100000000000000-count-other":"000 трильйона"}},"short":{"decimalFormat":{"1000-count-one":"0 тис'.'","1000-count-few":"0 тис'.'","1000-count-many":"0 тис'.'","1000-count-other":"0 тис'.'","10000-count-one":"00 тис'.'","10000-count-few":"00 тис'.'","10000-count-many":"00 тис'.'","10000-count-other":"00 тис'.'","100000-count-one":"000 тис'.'","100000-count-few":"000 тис'.'","100000-count-many":"000 тис'.'","100000-count-other":"000 тис'.'","1000000-count-one":"0 млн","1000000-count-few":"0 млн","1000000-count-many":"0 млн","1000000-count-other":"0 млн","10000000-count-one":"00 млн","10000000-count-few":"00 млн","10000000-count-many":"00 млн","10000000-count-other":"00 млн","100000000-count-one":"000 млн","100000000-count-few":"000 млн","100000000-count-many":"000 млн","100000000-count-other":"000 млн","1000000000-count-one":"0 млрд","1000000000-count-few":"0 млрд","1000000000-count-many":"0 млрд","1000000000-count-other":"0 млрд","10000000000-count-one":"00 млрд","10000000000-count-few":"00 млрд","10000000000-count-many":"00 млрд","10000000000-count-other":"00 млрд","100000000000-count-one":"000 млрд","100000000000-count-few":"000 млрд","100000000000-count-many":"000 млрд","100000000000-count-other":"000 млрд","1000000000000-count-one":"0 трлн","1000000000000-count-few":"0 трлн","1000000000000-count-many":"0 трлн","1000000000000-count-other":"0 трлн","10000000000000-count-one":"00 трлн","10000000000000-count-few":"00 трлн","10000000000000-count-many":"00 трлн","10000000000000-count-other":"00 трлн","100000000000000-count-one":"000 трлн","100000000000000-count-few":"000 трлн","100000000000000-count-many":"000 трлн","100000000000000-count-other":"000 трлн"}}},"scientificFormats-numberSystem-latn":{"standard":"#E0"},"percentFormats-numberSystem-latn":{"standard":"#,##0%"},"currencyFormats-numberSystem-latn":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"#,##0.00 ¤","accounting":"#,##0.00¤;(#,##0.00¤)","short":{"standard":{"1000-count-one":"0 тис'.' ¤","1000-count-few":"0 тис'.' ¤","1000-count-many":"0 тис'.' ¤","1000-count-other":"0 тис'.' ¤","10000-count-one":"00 тис'.' ¤","10000-count-few":"00 тис'.' ¤","10000-count-many":"00 тис'.' ¤","10000-count-other":"00 тис'.' ¤","100000-count-one":"000 тис'.' ¤","100000-count-few":"000 тис'.' ¤","100000-count-many":"000 тис'.' ¤","100000-count-other":"000 тис'.' ¤","1000000-count-one":"0 млн ¤","1000000-count-few":"0 млн ¤","1000000-count-many":"0 млн ¤","1000000-count-other":"0 млн ¤","10000000-count-one":"00 млн ¤","10000000-count-few":"00 млн ¤","10000000-count-many":"00 млн ¤","10000000-count-other":"00 млн ¤","100000000-count-one":"000 млн ¤","100000000-count-few":"000 млн ¤","100000000-count-many":"000 млн ¤","100000000-count-other":"000 млн ¤","1000000000-count-one":"0 млрд ¤","1000000000-count-few":"0 млрд ¤","1000000000-count-many":"0 млрд ¤","1000000000-count-other":"0 млрд ¤","10000000000-count-one":"00 млрд ¤","10000000000-count-few":"00 млрд ¤","10000000000-count-many":"00 млрд ¤","10000000000-count-other":"00 млрд ¤","100000000000-count-one":"000 млрд ¤","100000000000-count-few":"000 млрд ¤","100000000000-count-many":"000 млрд ¤","100000000000-count-other":"000 млрд ¤","1000000000000-count-one":"0 трлн ¤","1000000000000-count-few":"0 трлн ¤","1000000000000-count-many":"0 трлн ¤","1000000000000-count-other":"0 трлн ¤","10000000000000-count-one":"00 трлн ¤","10000000000000-count-few":"00 трлн ¤","10000000000000-count-many":"00 трлн ¤","10000000000000-count-other":"00 трлн ¤","100000000000000-count-one":"000 трлн ¤","100000000000000-count-few":"000 трлн ¤","100000000000000-count-many":"000 трлн ¤","100000000000000-count-other":"000 трлн ¤"}},"unitPattern-count-one":"{0} {1}","unitPattern-count-few":"{0} {1}","unitPattern-count-many":"{0} {1}","unitPattern-count-other":"{0} {1}"},"miscPatterns-numberSystem-latn":{"atLeast":"{0}+","range":"{0}–{1}"},"minimalPairs":{"pluralMinimalPairs-count-one":"{0} день","pluralMinimalPairs-count-few":"{0} дні","pluralMinimalPairs-count-many":"{0} днів","pluralMinimalPairs-count-other":"{0} дня","few":"{0}-я дивізія, {0}-є коло","other":"{0}-а дивізія, {0}-е коло"}}},"vi":{"identity":{"version":{"_number":"$Revision: 13705 $","_cldrVersion":"32"},"language":"vi"},"dates":{"calendars":{"gregorian":{"months":{"format":{"abbreviated":{"1":"thg 1","2":"thg 2","3":"thg 3","4":"thg 4","5":"thg 5","6":"thg 6","7":"thg 7","8":"thg 8","9":"thg 9","10":"thg 10","11":"thg 11","12":"thg 12"},"narrow":{"1":"1","2":"2","3":"3","4":"4","5":"5","6":"6","7":"7","8":"8","9":"9","10":"10","11":"11","12":"12"},"wide":{"1":"tháng 1","2":"tháng 2","3":"tháng 3","4":"tháng 4","5":"tháng 5","6":"tháng 6","7":"tháng 7","8":"tháng 8","9":"tháng 9","10":"tháng 10","11":"tháng 11","12":"tháng 12"}},"stand-alone":{"abbreviated":{"1":"Thg 1","2":"Thg 2","3":"Thg 3","4":"Thg 4","5":"Thg 5","6":"Thg 6","7":"Thg 7","8":"Thg 8","9":"Thg 9","10":"Thg 10","11":"Thg 11","12":"Thg 12"},"narrow":{"1":"1","2":"2","3":"3","4":"4","5":"5","6":"6","7":"7","8":"8","9":"9","10":"10","11":"11","12":"12"},"wide":{"1":"Tháng 1","2":"Tháng 2","3":"Tháng 3","4":"Tháng 4","5":"Tháng 5","6":"Tháng 6","7":"Tháng 7","8":"Tháng 8","9":"Tháng 9","10":"Tháng 10","11":"Tháng 11","12":"Tháng 12"}}},"days":{"format":{"abbreviated":{"sun":"CN","mon":"Th 2","tue":"Th 3","wed":"Th 4","thu":"Th 5","fri":"Th 6","sat":"Th 7"},"narrow":{"sun":"CN","mon":"T2","tue":"T3","wed":"T4","thu":"T5","fri":"T6","sat":"T7"},"short":{"sun":"CN","mon":"T2","tue":"T3","wed":"T4","thu":"T5","fri":"T6","sat":"T7"},"wide":{"sun":"Chủ Nhật","mon":"Thứ Hai","tue":"Thứ Ba","wed":"Thứ Tư","thu":"Thứ Năm","fri":"Thứ Sáu","sat":"Thứ Bảy"}},"stand-alone":{"abbreviated":{"sun":"CN","mon":"Th 2","tue":"Th 3","wed":"Th 4","thu":"Th 5","fri":"Th 6","sat":"Th 7"},"narrow":{"sun":"CN","mon":"T2","tue":"T3","wed":"T4","thu":"T5","fri":"T6","sat":"T7"},"short":{"sun":"CN","mon":"T2","tue":"T3","wed":"T4","thu":"T5","fri":"T6","sat":"T7"},"wide":{"sun":"Chủ Nhật","mon":"Thứ Hai","tue":"Thứ Ba","wed":"Thứ Tư","thu":"Thứ Năm","fri":"Thứ Sáu","sat":"Thứ Bảy"}}},"quarters":{"format":{"abbreviated":{"1":"Q1","2":"Q2","3":"Q3","4":"Q4"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"Quý 1","2":"Quý 2","3":"Quý 3","4":"Quý 4"}},"stand-alone":{"abbreviated":{"1":"Q1","2":"Q2","3":"Q3","4":"Q4"},"narrow":{"1":"1","2":"2","3":"3","4":"4"},"wide":{"1":"quý 1","2":"quý 2","3":"quý 3","4":"quý 4"}}},"dayPeriods":{"format":{"abbreviated":{"midnight":"nửa đêm","am":"SA","noon":"TR","pm":"CH","morning1":"sáng","afternoon1":"chiều","evening1":"tối","night1":"đêm"},"narrow":{"midnight":"nửa đêm","am":"s","noon":"tr","pm":"c","morning1":"sáng","afternoon1":"chiều","evening1":"tối","night1":"đêm"},"wide":{"midnight":"nửa đêm","am":"SA","noon":"TR","pm":"CH","morning1":"sáng","afternoon1":"chiều","evening1":"tối","night1":"đêm"}},"stand-alone":{"abbreviated":{"midnight":"nửa đêm","am":"SA","noon":"TR","pm":"CH","morning1":"sáng","afternoon1":"chiều","evening1":"tối","night1":"đêm"},"narrow":{"midnight":"nửa đêm","am":"SA","noon":"trưa","pm":"CH","morning1":"sáng","afternoon1":"chiều","evening1":"tối","night1":"đêm"},"wide":{"midnight":"nửa đêm","am":"SA","noon":"trưa","pm":"CH","morning1":"sáng","afternoon1":"chiều","evening1":"tối","night1":"đêm"}}},"eras":{"eraNames":{"0":"Trước CN","1":"sau CN","0-alt-variant":"BCE","1-alt-variant":"CN"},"eraAbbr":{"0":"Trước CN","1":"sau CN","0-alt-variant":"BCE","1-alt-variant":"CN"},"eraNarrow":{"0":"tr. CN","1":"sau CN","0-alt-variant":"BCE","1-alt-variant":"CN"}},"dateFormats":{"full":"EEEE, d MMMM, y","long":"d MMMM, y","medium":"d MMM, y","short":"dd/MM/y"},"timeFormats":{"full":"HH:mm:ss zzzz","long":"HH:mm:ss z","medium":"HH:mm:ss","short":"HH:mm"},"dateTimeFormats":{"full":"{0} {1}","long":"{0} {1}","medium":"{0}, {1}","short":"{0}, {1}","availableFormats":{"Bh":"h B","Bhm":"h:mm B","Bhms":"h:mm:ss B","d":"d","E":"ccc","EBhm":"E h:mm B","EBhms":"E h:mm:ss B","Ed":"E, 'ngày' d","Ehm":"E h:mm a","EHm":"E HH:mm","Ehms":"E h:mm:ss a","EHms":"E HH:mm:ss","Gy":"y G","GyMMM":"MMM y G","GyMMMd":"dd MMM, y G","GyMMMEd":"E, dd/MM/y G","h":"h a","H":"HH","hm":"h:mm a","Hm":"H:mm","hms":"h:mm:ss a","Hms":"HH:mm:ss","hmsv":"h:mm:ss a v","Hmsv":"HH:mm:ss v","hmv":"h:mm a v","Hmv":"HH:mm v","M":"L","Md":"dd/M","MEd":"E, dd/M","MMdd":"dd-MM","MMM":"LLL","MMMd":"d MMM","MMMEd":"E, d MMM","MMMMd":"d MMMM","MMMMEd":"E, d MMMM","MMMMW-count-other":"'tuần' W 'của' 'tháng' M","mmss":"mm:ss","ms":"mm:ss","y":"y","yM":"M/y","yMd":"d/M/y","yMEd":"E, dd/M/y","yMM":"'tháng' MM, y","yMMM":"MMM y","yMMMd":"d MMM, y","yMMMEd":"E, d MMM, y","yMMMM":"MMMM 'năm' y","yQQQ":"QQQ y","yQQQQ":"QQQQ 'năm' y","yw-count-other":"'tuần' w 'của' 'năm' Y"},"appendItems":{"Day":"{0} ({2}: {1})","Day-Of-Week":"{0} {1}","Era":"{1} {0}","Hour":"{0} ({2}: {1})","Minute":"{0} ({2}: {1})","Month":"{0} ({2}: {1})","Quarter":"{0} ({2}: {1})","Second":"{0} ({2}: {1})","Timezone":"{0} {1}","Week":"{0} ({2}: {1})","Year":"{1} {0}"},"intervalFormats":{"intervalFormatFallback":"{0} - {1}","d":{"d":"'Ngày' dd–dd"},"h":{"a":"h a – h a","h":"h–h a"},"H":{"H":"HH–HH"},"hm":{"a":"h:mm a – h:mm a","h":"h:mm–h:mm a","m":"h:mm–h:mm a"},"Hm":{"H":"HH:mm–HH:mm","m":"HH:mm–HH:mm"},"hmv":{"a":"h:mm a – h:mm a v","h":"h:mm–h:mm a v","m":"h:mm–h:mm a v"},"Hmv":{"H":"HH:mm–HH:mm v","m":"HH:mm–HH:mm v"},"hv":{"a":"h a – h a v","h":"h–h a v"},"Hv":{"H":"HH–HH v"},"M":{"M":"'Tháng' M – M"},"Md":{"d":"dd/MM – dd/MM","M":"dd/MM – dd/MM"},"MEd":{"d":"EEEE, dd/MM – EEEE, dd/MM","M":"EEEE, dd/MM – EEEE, dd/MM"},"MMM":{"M":"MMM–MMM"},"MMMd":{"d":"'Ngày' dd - 'Ngày' dd 'tháng' M","M":"'Ngày' dd 'tháng' M - 'Ngày' dd 'tháng' M"},"MMMEd":{"d":"E, d MMM – E, d MMM","M":"E, d MMM – E, d MMM"},"y":{"y":"y–y"},"yM":{"M":"MM/y – MM/y","y":"MM/y – MM/y"},"yMd":{"d":"dd/MM/y – dd/MM/y","M":"dd/MM/y – dd/MM/y","y":"dd/MM/y – dd/MM/y"},"yMEd":{"d":"EEEE, dd/MM/y – EEEE, dd/MM/y","M":"EEEE, dd/MM/y – EEEE, dd/MM/y","y":"EEEE, dd/MM/y – EEEE, dd/MM/y"},"yMMM":{"M":"'Tháng' M - 'Tháng' M 'năm' y","y":"'Tháng' M 'năm' y - 'Tháng' M 'năm' y"},"yMMMd":{"d":"d – d MMM, y","M":"d MMM – d MMM, y","y":"'Ngày' dd 'tháng' M 'năm' y - 'Ngày' dd 'tháng' M 'năm' y"},"yMMMEd":{"d":"EEEE, 'ngày' dd MMM – EEEE, 'ngày' dd MMM 'năm' y","M":"E, dd 'tháng' M – E, dd 'tháng' M, y","y":"E, dd 'tháng' M, y – E, dd 'tháng' M, y"},"yMMMM":{"M":"MMMM–MMMM 'năm' y","y":"MMMM, y – MMMM, y"}}}}},"fields":{"era":{"displayName":"thời đại"},"era-short":{"displayName":"thời đại"},"era-narrow":{"displayName":"thời đại"},"year":{"displayName":"Năm","relative-type--1":"năm ngoái","relative-type-0":"năm nay","relative-type-1":"năm sau","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} năm nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} năm trước"}},"year-short":{"displayName":"Năm","relative-type--1":"năm ngoái","relative-type-0":"năm nay","relative-type-1":"năm sau","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} năm nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} năm trước"}},"year-narrow":{"displayName":"Năm","relative-type--1":"năm ngoái","relative-type-0":"năm nay","relative-type-1":"năm sau","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} năm nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} năm trước"}},"quarter":{"displayName":"Quý","relative-type--1":"quý trước","relative-type-0":"quý này","relative-type-1":"quý sau","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} quý nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} quý trước"}},"quarter-short":{"displayName":"Quý","relative-type--1":"quý trước","relative-type-0":"quý này","relative-type-1":"quý sau","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} quý nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} quý trước"}},"quarter-narrow":{"displayName":"Quý","relative-type--1":"quý trước","relative-type-0":"quý này","relative-type-1":"quý sau","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} quý nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} quý trước"}},"month":{"displayName":"Tháng","relative-type--1":"tháng trước","relative-type-0":"tháng này","relative-type-1":"tháng sau","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} tháng nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} tháng trước"}},"month-short":{"displayName":"Tháng","relative-type--1":"tháng trước","relative-type-0":"tháng này","relative-type-1":"tháng sau","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} tháng nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} tháng trước"}},"month-narrow":{"displayName":"Tháng","relative-type--1":"tháng trước","relative-type-0":"tháng này","relative-type-1":"tháng sau","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} tháng nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} tháng trước"}},"week":{"displayName":"Tuần","relative-type--1":"tuần trước","relative-type-0":"tuần này","relative-type-1":"tuần sau","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} tuần nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} tuần trước"},"relativePeriod":"tuần {0}"},"week-short":{"displayName":"Tuần","relative-type--1":"tuần trước","relative-type-0":"tuần này","relative-type-1":"tuần sau","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} tuần nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} tuần trước"},"relativePeriod":"tuần {0}"},"week-narrow":{"displayName":"Tuần","relative-type--1":"tuần trước","relative-type-0":"tuần này","relative-type-1":"tuần sau","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} tuần nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} tuần trước"},"relativePeriod":"tuần {0}"},"weekOfMonth":{"displayName":"tuần trong tháng"},"weekOfMonth-short":{"displayName":"tuần trong tháng"},"weekOfMonth-narrow":{"displayName":"tuần trong tháng"},"day":{"displayName":"Ngày","relative-type--2":"Hôm kia","relative-type--1":"Hôm qua","relative-type-0":"Hôm nay","relative-type-1":"Ngày mai","relative-type-2":"Ngày kia","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} ngày nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} ngày trước"}},"day-short":{"displayName":"Ngày","relative-type--2":"Hôm kia","relative-type--1":"Hôm qua","relative-type-0":"Hôm nay","relative-type-1":"Ngày mai","relative-type-2":"Ngày kia","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} ngày nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} ngày trước"}},"day-narrow":{"displayName":"Ngày","relative-type--2":"Hôm kia","relative-type--1":"Hôm qua","relative-type-0":"Hôm nay","relative-type-1":"Ngày mai","relative-type-2":"Ngày kia","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} ngày nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} ngày trước"}},"dayOfYear":{"displayName":"ngày trong năm"},"dayOfYear-short":{"displayName":"ngày trong năm"},"dayOfYear-narrow":{"displayName":"ngày trong năm"},"weekday":{"displayName":"ngày trong tuần"},"weekday-short":{"displayName":"ngày trong tuần"},"weekday-narrow":{"displayName":"ngày trong tuần"},"weekdayOfMonth":{"displayName":"ngày thường trong tháng"},"weekdayOfMonth-short":{"displayName":"ngày thường trong tháng"},"weekdayOfMonth-narrow":{"displayName":"ngày thường trong tháng"},"sun":{"relative-type--1":"Chủ Nhật tuần trước","relative-type-0":"Chủ Nhật tuần này","relative-type-1":"Chủ Nhật tuần sau","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} Chủ Nhật nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Chủ Nhật trước"}},"sun-short":{"relative-type--1":"Chủ Nhật tuần trước","relative-type-0":"Chủ Nhật tuần này","relative-type-1":"Chủ Nhật tuần sau","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} Chủ Nhật nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Chủ Nhật trước"}},"sun-narrow":{"relative-type--1":"Chủ Nhật tuần trước","relative-type-0":"Chủ Nhật tuần này","relative-type-1":"Chủ Nhật tuần sau","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} Chủ Nhật nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Chủ Nhật trước"}},"mon":{"relative-type--1":"Thứ Hai tuần trước","relative-type-0":"Thứ Hai tuần này","relative-type-1":"Thứ Hai tuần sau","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} Thứ Hai nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Thứ Hai trước"}},"mon-short":{"relative-type--1":"Thứ Hai tuần trước","relative-type-0":"Thứ Hai tuần này","relative-type-1":"Thứ Hai tuần sau","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} Thứ Hai nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Thứ Hai trước"}},"mon-narrow":{"relative-type--1":"Thứ Hai tuần trước","relative-type-0":"Thứ Hai tuần này","relative-type-1":"Thứ Hai tuần sau","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} Thứ Hai nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Thứ Hai trước"}},"tue":{"relative-type--1":"Thứ Ba tuần trước","relative-type-0":"Thứ Ba tuần này","relative-type-1":"Thứ Ba tuần sau","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} Thứ Ba nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Thứ Ba trước"}},"tue-short":{"relative-type--1":"Thứ Ba tuần trước","relative-type-0":"Thứ Ba tuần này","relative-type-1":"Thứ Ba tuần sau","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} Thứ Ba nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Thứ Ba trước"}},"tue-narrow":{"relative-type--1":"Thứ Ba tuần trước","relative-type-0":"Thứ Ba tuần này","relative-type-1":"Thứ Ba tuần sau","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} Thứ Ba nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Thứ Ba trước"}},"wed":{"relative-type--1":"Thứ Tư tuần trước","relative-type-0":"Thứ Tư tuần này","relative-type-1":"Thứ Tư tuần sau","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} Thứ Tư nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Thứ Tư trước"}},"wed-short":{"relative-type--1":"Thứ Tư tuần trước","relative-type-0":"Thứ Tư tuần này","relative-type-1":"Thứ Tư tuần sau","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} Thứ Tư nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Thứ Tư trước"}},"wed-narrow":{"relative-type--1":"Thứ Tư tuần trước","relative-type-0":"Thứ Tư tuần này","relative-type-1":"Thứ Tư tuần sau","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} Thứ Tư nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Thứ Tư trước"}},"thu":{"relative-type--1":"Thứ Năm tuần trước","relative-type-0":"Thứ Năm tuần này","relative-type-1":"Thứ Năm tuần sau","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} Thứ Năm nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Thứ Năm trước"}},"thu-short":{"relative-type--1":"Thứ Năm tuần trước","relative-type-0":"Thứ Năm tuần này","relative-type-1":"Thứ Năm tuần sau","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} Thứ Năm nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Thứ Năm trước"}},"thu-narrow":{"relative-type--1":"Thứ Năm tuần trước","relative-type-0":"Thứ Năm tuần này","relative-type-1":"Thứ Năm tuần sau","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} Thứ Năm nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Thứ Năm trước"}},"fri":{"relative-type--1":"Thứ Sáu tuần trước","relative-type-0":"Thứ Sáu tuần này","relative-type-1":"Thứ Sáu tuần sau","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} Thứ Sáu nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Thứ Sáu trước"}},"fri-short":{"relative-type--1":"Thứ Sáu tuần trước","relative-type-0":"Thứ Sáu tuần này","relative-type-1":"Thứ Sáu tuần sau","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} Thứ Sáu nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Thứ Sáu trước"}},"fri-narrow":{"relative-type--1":"Thứ Sáu tuần trước","relative-type-0":"Thứ Sáu tuần này","relative-type-1":"Thứ Sáu tuần sau","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} Thứ Sáu nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Thứ Sáu trước"}},"sat":{"relative-type--1":"Thứ Bảy tuần trước","relative-type-0":"Thứ Bảy tuần này","relative-type-1":"Thứ Bảy tuần sau","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} Thứ Bảy nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Thứ Bảy trước"}},"sat-short":{"relative-type--1":"Thứ Bảy tuần trước","relative-type-0":"Thứ Bảy tuần này","relative-type-1":"Thứ Bảy tuần sau","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} Thứ Bảy nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Thứ Bảy trước"}},"sat-narrow":{"relative-type--1":"Thứ Bảy tuần trước","relative-type-0":"Thứ Bảy tuần này","relative-type-1":"Thứ Bảy tuần sau","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} Thứ Bảy nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} Thứ Bảy trước"}},"dayperiod-short":{"displayName":"SA/CH"},"dayperiod":{"displayName":"SA/CH"},"dayperiod-narrow":{"displayName":"SA/CH"},"hour":{"displayName":"Giờ","relative-type-0":"giờ này","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} giờ nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} giờ trước"}},"hour-short":{"displayName":"Giờ","relative-type-0":"giờ này","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} giờ nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} giờ trước"}},"hour-narrow":{"displayName":"Giờ","relative-type-0":"giờ này","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} giờ nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} giờ trước"}},"minute":{"displayName":"Phút","relative-type-0":"phút này","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} phút nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} phút trước"}},"minute-short":{"displayName":"Phút","relative-type-0":"phút này","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} phút nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} phút trước"}},"minute-narrow":{"displayName":"Phút","relative-type-0":"phút này","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} phút nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} phút trước"}},"second":{"displayName":"Giây","relative-type-0":"bây giờ","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} giây nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} giây trước"}},"second-short":{"displayName":"Giây","relative-type-0":"bây giờ","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} giây nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} giây trước"}},"second-narrow":{"displayName":"Giây","relative-type-0":"bây giờ","relativeTime-type-future":{"relativeTimePattern-count-other":"sau {0} giây nữa"},"relativeTime-type-past":{"relativeTimePattern-count-other":"{0} giây trước"}},"zone":{"displayName":"Múi giờ"},"zone-short":{"displayName":"Múi giờ"},"zone-narrow":{"displayName":"Múi giờ"}}},"numbers":{"currencies":{"ADP":{"displayName":"Đồng Peseta của Andora","symbol":"ADP"},"AED":{"displayName":"Dirham UAE","displayName-count-other":"Dirham UAE","symbol":"AED"},"AFA":{"displayName":"Đồng Afghani của Afghanistan (1927–2002)","symbol":"AFA"},"AFN":{"displayName":"Afghani Afghanistan","displayName-count-other":"Afghani Afghanistan","symbol":"AFN"},"ALK":{"displayName":"ALK","symbol":"ALK"},"ALL":{"displayName":"Lek Albania","displayName-count-other":"Lek Albania","symbol":"ALL"},"AMD":{"displayName":"Dram Armenia","displayName-count-other":"Dram Armenia","symbol":"AMD"},"ANG":{"displayName":"Guilder Antille Hà Lan","displayName-count-other":"Guilder Antille Hà Lan","symbol":"ANG"},"AOA":{"displayName":"Kwanza Angola","displayName-count-other":"Kwanza Angola","symbol":"AOA","symbol-alt-narrow":"Kz"},"AOK":{"displayName":"Đồng Kwanza của Angola (1977–1991)","symbol":"AOK"},"AON":{"displayName":"Đồng Kwanza Mới của Angola (1990–2000)","symbol":"AON"},"AOR":{"displayName":"Đồng Kwanza Điều chỉnh lại của Angola (1995–1999)","symbol":"AOR"},"ARA":{"displayName":"Đồng Austral của Argentina","symbol":"ARA"},"ARL":{"displayName":"Đồng Peso Ley của Argentina (1970–1983)","symbol":"ARL"},"ARM":{"displayName":"Đồng Peso Argentina (1881–1970)","symbol":"ARM"},"ARP":{"displayName":"Đồng Peso Argentina (1983–1985)","symbol":"ARP"},"ARS":{"displayName":"Peso Argentina","displayName-count-other":"Peso Argentina","symbol":"ARS","symbol-alt-narrow":"$"},"ATS":{"displayName":"Đồng Schiling Áo","symbol":"ATS"},"AUD":{"displayName":"Đô la Australia","displayName-count-other":"Đô la Australia","symbol":"AU$","symbol-alt-narrow":"$"},"AWG":{"displayName":"Florin Aruba","displayName-count-other":"Florin Aruba","symbol":"AWG"},"AZM":{"displayName":"Đồng Manat của Azerbaijan (1993–2006)","symbol":"AZM"},"AZN":{"displayName":"Manat Azerbaijan","displayName-count-other":"Manat Azerbaijan","symbol":"AZN"},"BAD":{"displayName":"Đồng Dinar của Bosnia-Herzegovina (1992–1994)","symbol":"BAD"},"BAM":{"displayName":"Mark Bosnia-Herzegovina có thể chuyển đổi","displayName-count-other":"Mark Bosnia-Herzegovina có thể chuyển đổi","symbol":"BAM","symbol-alt-narrow":"KM"},"BAN":{"displayName":"Đồng Dinar Mới của Bosnia-Herzegovina (1994–1997)","symbol":"BAN"},"BBD":{"displayName":"Đô la Barbados","displayName-count-other":"Đô la Barbados","symbol":"BBD","symbol-alt-narrow":"$"},"BDT":{"displayName":"Taka Bangladesh","displayName-count-other":"Taka Bangladesh","symbol":"BDT","symbol-alt-narrow":"৳"},"BEC":{"displayName":"Đồng Franc Bỉ (có thể chuyển đổi)","symbol":"BEC"},"BEF":{"displayName":"Đồng Franc Bỉ","symbol":"BEF"},"BEL":{"displayName":"Đồng Franc Bỉ (tài chính)","symbol":"BEL"},"BGL":{"displayName":"Đồng Lev Xu của Bun-ga-ri","symbol":"BGL"},"BGM":{"displayName":"Đồng Lev Xã hội chủ nghĩa của Bun-ga-ri","symbol":"BGM"},"BGN":{"displayName":"Lev Bulgaria","displayName-count-other":"Lev Bulgaria","symbol":"BGN"},"BGO":{"displayName":"Đồng Lev của Bun-ga-ri (1879–1952)","symbol":"BGO"},"BHD":{"displayName":"Dinar Bahrain","displayName-count-other":"Dinar Bahrain","symbol":"BHD"},"BIF":{"displayName":"Franc Burundi","displayName-count-other":"Franc Burundi","symbol":"BIF"},"BMD":{"displayName":"Đô la Bermuda","displayName-count-other":"Đô la Bermuda","symbol":"BMD","symbol-alt-narrow":"$"},"BND":{"displayName":"Đô la Brunei","displayName-count-other":"Đô la Brunei","symbol":"BND","symbol-alt-narrow":"$"},"BOB":{"displayName":"Boliviano Bolivia","displayName-count-other":"Boliviano Bolivia","symbol":"BOB","symbol-alt-narrow":"Bs"},"BOL":{"displayName":"Đồng Boliviano của Bolivia (1863–1963)","symbol":"BOL"},"BOP":{"displayName":"Đồng Peso Bolivia","symbol":"BOP"},"BOV":{"displayName":"Đồng Mvdol Bolivia","symbol":"BOV"},"BRB":{"displayName":"Đồng Cruzerio Mới của Braxin (1967–1986)","symbol":"BRB"},"BRC":{"displayName":"Đồng Cruzado của Braxin (1986–1989)","symbol":"BRC"},"BRE":{"displayName":"Đồng Cruzerio của Braxin (1990–1993)","symbol":"BRE"},"BRL":{"displayName":"Real Braxin","displayName-count-other":"Real Braxin","symbol":"R$","symbol-alt-narrow":"R$"},"BRN":{"displayName":"Đồng Cruzado Mới của Braxin (1989–1990)","symbol":"BRN"},"BRR":{"displayName":"Đồng Cruzeiro của Braxin (1993–1994)","symbol":"BRR"},"BRZ":{"displayName":"Đồng Cruzeiro của Braxin (1942–1967)","symbol":"BRZ"},"BSD":{"displayName":"Đô la Bahamas","displayName-count-other":"Đô la Bahamas","symbol":"BSD","symbol-alt-narrow":"$"},"BTN":{"displayName":"Ngultrum Bhutan","displayName-count-other":"Ngultrum Bhutan","symbol":"BTN"},"BUK":{"displayName":"Đồng Kyat Miến Điện","symbol":"BUK"},"BWP":{"displayName":"Pula Botswana","displayName-count-other":"Pula Botswana","symbol":"BWP","symbol-alt-narrow":"P"},"BYB":{"displayName":"Đồng Rúp Mới của Belarus (1994–1999)","symbol":"BYB"},"BYN":{"displayName":"Rúp Belarus","displayName-count-other":"Rúp Belarus","symbol":"BYN","symbol-alt-narrow":"р."},"BYR":{"displayName":"Rúp Belarus (2000–2016)","displayName-count-other":"Rúp Belarus (2000–2016)","symbol":"BYR"},"BZD":{"displayName":"Đô la Belize","displayName-count-other":"Đô la Belize","symbol":"BZD","symbol-alt-narrow":"$"},"CAD":{"displayName":"Đô la Canada","displayName-count-other":"Đô la Canada","symbol":"CA$","symbol-alt-narrow":"$"},"CDF":{"displayName":"Franc Congo","displayName-count-other":"Franc Congo","symbol":"CDF"},"CHE":{"displayName":"Đồng Euro WIR","symbol":"CHE"},"CHF":{"displayName":"Franc Thụy sĩ","displayName-count-other":"Franc Thụy sĩ","symbol":"CHF"},"CHW":{"displayName":"Đồng France WIR","symbol":"CHW"},"CLE":{"displayName":"Đồng Escudo của Chile","symbol":"CLE"},"CLF":{"displayName":"Đơn vị Kế toán của Chile (UF)","symbol":"CLF"},"CLP":{"displayName":"Peso Chile","displayName-count-other":"Peso Chile","symbol":"CLP","symbol-alt-narrow":"$"},"CNH":{"displayName":"Nhân dân tệ (hải ngoại)","displayName-count-other":"Nhân dân tệ (hải ngoại)","symbol":"CNH"},"CNX":{"displayName":"CNX","symbol":"CNX"},"CNY":{"displayName":"Nhân dân tệ","displayName-count-other":"Nhân dân tệ","symbol":"CN¥","symbol-alt-narrow":"¥"},"COP":{"displayName":"Peso Colombia","displayName-count-other":"Peso Colombia","symbol":"COP","symbol-alt-narrow":"$"},"COU":{"displayName":"Đơn vị Giá trị Thực của Colombia","symbol":"COU"},"CRC":{"displayName":"Colón Costa Rica","displayName-count-other":"Colón Costa Rica","symbol":"CRC","symbol-alt-narrow":"₡"},"CSD":{"displayName":"Đồng Dinar của Serbia (2002–2006)","symbol":"CSD"},"CSK":{"displayName":"Đồng Koruna Xu của Czechoslovakia","symbol":"CSK"},"CUC":{"displayName":"Peso Cuba có thể chuyển đổi","displayName-count-other":"Peso Cuba có thể chuyển đổi","symbol":"CUC","symbol-alt-narrow":"$"},"CUP":{"displayName":"Peso Cuba","displayName-count-other":"Peso Cuba","symbol":"CUP","symbol-alt-narrow":"$"},"CVE":{"displayName":"Escudo Cape Verde","displayName-count-other":"Escudo Cape Verde","symbol":"CVE"},"CYP":{"displayName":"Đồng Bảng Síp","symbol":"CYP"},"CZK":{"displayName":"Koruna Cộng hòa Séc","displayName-count-other":"Koruna Cộng hòa Séc","symbol":"CZK","symbol-alt-narrow":"Kč"},"DDM":{"displayName":"Đồng Mark Đông Đức","symbol":"DDM"},"DEM":{"displayName":"Đồng Mark Đức","symbol":"DEM"},"DJF":{"displayName":"Franc Djibouti","displayName-count-other":"Franc Djibouti","symbol":"DJF"},"DKK":{"displayName":"Krone Đan Mạch","displayName-count-other":"Krone Đan Mạch","symbol":"DKK","symbol-alt-narrow":"kr"},"DOP":{"displayName":"Peso Dominica","displayName-count-other":"Peso Dominica","symbol":"DOP","symbol-alt-narrow":"$"},"DZD":{"displayName":"Dinar Algeria","displayName-count-other":"Dinar Algeria","symbol":"DZD"},"ECS":{"displayName":"Đồng Scure Ecuador","symbol":"ECS"},"ECV":{"displayName":"Đơn vị Giá trị Không đổi của Ecuador","symbol":"ECV"},"EEK":{"displayName":"Crun Extônia","symbol":"EEK"},"EGP":{"displayName":"Bảng Ai Cập","displayName-count-other":"Bảng Ai Cập","symbol":"EGP","symbol-alt-narrow":"E£"},"ERN":{"displayName":"Nakfa Eritrea","displayName-count-other":"Nakfa Eritrea","symbol":"ERN"},"ESA":{"displayName":"Đồng Peseta Tây Ban Nha (Tài khoản)","symbol":"ESA"},"ESB":{"displayName":"Đồng Peseta Tây Ban Nha (tài khoản có thể chuyển đổi)","symbol":"ESB"},"ESP":{"displayName":"Đồng Peseta Tây Ban Nha","symbol":"ESP","symbol-alt-narrow":"₧"},"ETB":{"displayName":"Birr Ethiopia","displayName-count-other":"Birr Ethiopia","symbol":"ETB"},"EUR":{"displayName":"Euro","displayName-count-other":"euro","symbol":"€","symbol-alt-narrow":"€"},"FIM":{"displayName":"Đồng Markka Phần Lan","symbol":"FIM"},"FJD":{"displayName":"Đô la Fiji","displayName-count-other":"Đô la Fiji","symbol":"FJD","symbol-alt-narrow":"$"},"FKP":{"displayName":"Bảng Quần đảo Falkland","displayName-count-other":"Bảng Quần đảo Falkland","symbol":"FKP","symbol-alt-narrow":"£"},"FRF":{"displayName":"Franc Pháp","symbol":"FRF"},"GBP":{"displayName":"Bảng Anh","displayName-count-other":"Bảng Anh","symbol":"£","symbol-alt-narrow":"£"},"GEK":{"displayName":"Đồng Kupon Larit của Georgia","symbol":"GEK"},"GEL":{"displayName":"Lari Gruzia","displayName-count-other":"Lari Gruzia","symbol":"GEL","symbol-alt-narrow":"₾","symbol-alt-variant":"₾"},"GHC":{"displayName":"Cedi Ghana (1979–2007)","symbol":"GHC"},"GHS":{"displayName":"Cedi Ghana","displayName-count-other":"Cedi Ghana","symbol":"GHS"},"GIP":{"displayName":"Bảng Gibraltar","displayName-count-other":"Bảng Gibraltar","symbol":"GIP","symbol-alt-narrow":"£"},"GMD":{"displayName":"Dalasi Gambia","displayName-count-other":"Dalasi Gambia","symbol":"GMD"},"GNF":{"displayName":"Franc Guinea","displayName-count-other":"Franc Guinea","symbol":"GNF","symbol-alt-narrow":"FG"},"GNS":{"displayName":"Syli Guinea","symbol":"GNS"},"GQE":{"displayName":"Đồng Ekwele của Guinea Xích Đạo","symbol":"GQE"},"GRD":{"displayName":"Drachma Hy Lạp","symbol":"GRD"},"GTQ":{"displayName":"Quetzal Guatemala","displayName-count-other":"Quetzal Guatemala","symbol":"GTQ","symbol-alt-narrow":"Q"},"GWE":{"displayName":"Đồng Guinea Escudo Bồ Đào Nha","symbol":"GWE"},"GWP":{"displayName":"Peso Guinea-Bissau","symbol":"GWP"},"GYD":{"displayName":"Đô la Guyana","displayName-count-other":"Đô la Guyana","symbol":"GYD","symbol-alt-narrow":"$"},"HKD":{"displayName":"Đô la Hồng Kông","displayName-count-other":"Đô la Hồng Kông","symbol":"HK$","symbol-alt-narrow":"$"},"HNL":{"displayName":"Lempira Honduras","displayName-count-other":"Lempira Honduras","symbol":"HNL","symbol-alt-narrow":"L"},"HRD":{"displayName":"Đồng Dinar Croatia","symbol":"HRD"},"HRK":{"displayName":"Kuna Croatia","displayName-count-other":"Kuna Croatia","symbol":"HRK","symbol-alt-narrow":"kn"},"HTG":{"displayName":"Gourde Haiti","displayName-count-other":"Gourde Haiti","symbol":"HTG"},"HUF":{"displayName":"Forint Hungary","displayName-count-other":"forint Hungary","symbol":"HUF","symbol-alt-narrow":"Ft"},"IDR":{"displayName":"Rupiah Indonesia","displayName-count-other":"Rupiah Indonesia","symbol":"IDR","symbol-alt-narrow":"Rp"},"IEP":{"displayName":"Pao Ai-len","symbol":"IEP"},"ILP":{"displayName":"Pao Ixraen","symbol":"ILP"},"ILR":{"displayName":"ILR","symbol":"ILR"},"ILS":{"displayName":"Sheqel Israel mới","displayName-count-other":"Sheqel Israel mới","symbol":"₪","symbol-alt-narrow":"₪"},"INR":{"displayName":"Rupee Ấn Độ","displayName-count-other":"Rupee Ấn Độ","symbol":"₹","symbol-alt-narrow":"₹"},"IQD":{"displayName":"Dinar I-rắc","displayName-count-other":"Dinar I-rắc","symbol":"IQD"},"IRR":{"displayName":"Rial Iran","displayName-count-other":"Rial Iran","symbol":"IRR"},"ISJ":{"displayName":"ISJ","symbol":"ISJ"},"ISK":{"displayName":"Króna Iceland","displayName-count-other":"króna Iceland","symbol":"ISK","symbol-alt-narrow":"kr"},"ITL":{"displayName":"Lia Ý","symbol":"ITL"},"JMD":{"displayName":"Đô la Jamaica","displayName-count-other":"Đô la Jamaica","symbol":"JMD","symbol-alt-narrow":"$"},"JOD":{"displayName":"Dinar Jordan","displayName-count-other":"Dinar Jordan","symbol":"JOD"},"JPY":{"displayName":"Yên Nhật","displayName-count-other":"Yên Nhật","symbol":"JP¥","symbol-alt-narrow":"¥"},"KES":{"displayName":"Shilling Kenya","displayName-count-other":"Shilling Kenya","symbol":"KES"},"KGS":{"displayName":"Som Kyrgyzstan","displayName-count-other":"Som Kyrgyzstan","symbol":"KGS"},"KHR":{"displayName":"Riel Campuchia","displayName-count-other":"Riel Campuchia","symbol":"KHR","symbol-alt-narrow":"៛"},"KMF":{"displayName":"Franc Comoros","displayName-count-other":"Franc Comoros","symbol":"KMF","symbol-alt-narrow":"CF"},"KPW":{"displayName":"Won Triều Tiên","displayName-count-other":"Won Triều Tiên","symbol":"KPW","symbol-alt-narrow":"₩"},"KRH":{"displayName":"Đồng Hwan Hàn Quốc (1953–1962)","symbol":"KRH"},"KRO":{"displayName":"Đồng Won Hàn Quốc (1945–1953)","symbol":"KRO"},"KRW":{"displayName":"Won Hàn Quốc","displayName-count-other":"Won Hàn Quốc","symbol":"₩","symbol-alt-narrow":"₩"},"KWD":{"displayName":"Dinar Kuwait","displayName-count-other":"Dinar Kuwait","symbol":"KWD"},"KYD":{"displayName":"Đô la Quần đảo Cayman","displayName-count-other":"Đô la Quần đảo Cayman","symbol":"KYD","symbol-alt-narrow":"$"},"KZT":{"displayName":"Tenge Kazakhstan","displayName-count-other":"Tenge Kazakhstan","symbol":"KZT","symbol-alt-narrow":"₸"},"LAK":{"displayName":"Kip Lào","displayName-count-other":"Kip Lào","symbol":"LAK","symbol-alt-narrow":"₭"},"LBP":{"displayName":"Bảng Li-băng","displayName-count-other":"Bảng Li-băng","symbol":"LBP","symbol-alt-narrow":"L£"},"LKR":{"displayName":"Rupee Sri Lanka","displayName-count-other":"Rupee Sri Lanka","symbol":"LKR","symbol-alt-narrow":"Rs"},"LRD":{"displayName":"Đô la Liberia","displayName-count-other":"Đô la Liberia","symbol":"LRD","symbol-alt-narrow":"$"},"LSL":{"displayName":"Ioti Lesotho","symbol":"LSL"},"LTL":{"displayName":"Litas Lít-va","displayName-count-other":"litas Lít-va","symbol":"LTL","symbol-alt-narrow":"Lt"},"LTT":{"displayName":"Đồng Talonas Litva","symbol":"LTT"},"LUC":{"displayName":"Đồng Franc Luxembourg có thể chuyển đổi","symbol":"LUC"},"LUF":{"displayName":"Đồng Franc Luxembourg","symbol":"LUF"},"LUL":{"displayName":"Đồng Franc Luxembourg tài chính","symbol":"LUL"},"LVL":{"displayName":"Lats Latvia","displayName-count-other":"lats Lativia","symbol":"LVL","symbol-alt-narrow":"Ls"},"LVR":{"displayName":"Đồng Rúp Latvia","symbol":"LVR"},"LYD":{"displayName":"Dinar Libi","displayName-count-other":"Dinar Libi","symbol":"LYD"},"MAD":{"displayName":"Dirham Ma-rốc","displayName-count-other":"Dirham Ma-rốc","symbol":"MAD"},"MAF":{"displayName":"Đồng Franc Ma-rốc","symbol":"MAF"},"MCF":{"displayName":"Đồng Franc Monegasque","symbol":"MCF"},"MDC":{"displayName":"Đồng Cupon Moldova","symbol":"MDC"},"MDL":{"displayName":"Leu Moldova","displayName-count-other":"Leu Moldova","symbol":"MDL"},"MGA":{"displayName":"Ariary Malagasy","displayName-count-other":"Ariary Malagasy","symbol":"MGA","symbol-alt-narrow":"Ar"},"MGF":{"displayName":"Đồng Franc Magalasy","symbol":"MGF"},"MKD":{"displayName":"Denar Macedonia","displayName-count-other":"Denar Macedonia","symbol":"MKD"},"MKN":{"displayName":"Đồng Denar Macedonia (1992–1993)","symbol":"MKN"},"MLF":{"displayName":"Đồng Franc Mali","symbol":"MLF"},"MMK":{"displayName":"Kyat Myanma","displayName-count-other":"Kyat Myanma","symbol":"MMK","symbol-alt-narrow":"K"},"MNT":{"displayName":"Tugrik Mông Cổ","displayName-count-other":"Tugrik Mông Cổ","symbol":"MNT","symbol-alt-narrow":"₮"},"MOP":{"displayName":"Pataca Ma Cao","displayName-count-other":"Pataca Ma Cao","symbol":"MOP"},"MRO":{"displayName":"Ouguiya Mauritania","displayName-count-other":"Ouguiya Mauritania","symbol":"MRO"},"MTL":{"displayName":"Lia xứ Man-tơ","symbol":"MTL"},"MTP":{"displayName":"Đồng Bảng Malta","symbol":"MTP"},"MUR":{"displayName":"Rupee Mauritius","displayName-count-other":"Rupee Mauritius","symbol":"MUR","symbol-alt-narrow":"Rs"},"MVP":{"displayName":"MVP","symbol":"MVP"},"MVR":{"displayName":"Rufiyaa Maldives","displayName-count-other":"Rufiyaa Maldives","symbol":"MVR"},"MWK":{"displayName":"Kwacha Malawi","displayName-count-other":"Kwacha Malawi","symbol":"MWK"},"MXN":{"displayName":"Peso Mexico","displayName-count-other":"Peso Mexico","symbol":"MX$","symbol-alt-narrow":"$"},"MXP":{"displayName":"Đồng Peso Bạc Mê-hi-cô (1861–1992)","symbol":"MXP"},"MXV":{"displayName":"Đơn vị Đầu tư Mê-hi-cô","symbol":"MXV"},"MYR":{"displayName":"Ringgit Malaysia","displayName-count-other":"Ringgit Malaysia","symbol":"MYR","symbol-alt-narrow":"RM"},"MZE":{"displayName":"Escudo Mozambique","symbol":"MZE"},"MZM":{"displayName":"Đồng Metical Mozambique (1980–2006)","symbol":"MZM"},"MZN":{"displayName":"Metical Mozambique","displayName-count-other":"Metical Mozambique","symbol":"MZN"},"NAD":{"displayName":"Đô la Namibia","displayName-count-other":"Đô la Namibia","symbol":"NAD","symbol-alt-narrow":"$"},"NGN":{"displayName":"Naira Nigeria","displayName-count-other":"Naira Nigeria","symbol":"NGN","symbol-alt-narrow":"₦"},"NIC":{"displayName":"Đồng Córdoba Nicaragua (1988–1991)","symbol":"NIC"},"NIO":{"displayName":"Córdoba Nicaragua","displayName-count-other":"Córdoba Nicaragua","symbol":"NIO","symbol-alt-narrow":"C$"},"NLG":{"displayName":"Đồng Guilder Hà Lan","symbol":"NLG"},"NOK":{"displayName":"Krone Na Uy","displayName-count-other":"Krone Na Uy","symbol":"NOK","symbol-alt-narrow":"kr"},"NPR":{"displayName":"Rupee Nepal","displayName-count-other":"Rupee Nepal","symbol":"NPR","symbol-alt-narrow":"Rs"},"NZD":{"displayName":"Đô la New Zealand","displayName-count-other":"Đô la New Zealand","symbol":"NZ$","symbol-alt-narrow":"$"},"OMR":{"displayName":"Rial Oman","displayName-count-other":"Rial Oman","symbol":"OMR"},"PAB":{"displayName":"Balboa Panama","displayName-count-other":"Balboa Panama","symbol":"PAB"},"PEI":{"displayName":"Đồng Inti Peru","symbol":"PEI"},"PEN":{"displayName":"Sol Peru","displayName-count-other":"Sol Peru","symbol":"PEN"},"PES":{"displayName":"Đồng Sol Peru (1863–1965)","symbol":"PES"},"PGK":{"displayName":"Kina Papua New Guinean","displayName-count-other":"Kina Papua New Guinean","symbol":"PGK"},"PHP":{"displayName":"Peso Philipin","displayName-count-other":"Peso Philipin","symbol":"PHP","symbol-alt-narrow":"₱"},"PKR":{"displayName":"Rupee Pakistan","displayName-count-other":"Rupee Pakistan","symbol":"PKR","symbol-alt-narrow":"Rs"},"PLN":{"displayName":"Zloty Ba Lan","displayName-count-other":"Zloty Ba Lan","symbol":"PLN","symbol-alt-narrow":"zł"},"PLZ":{"displayName":"Đồng Zloty Ba Lan (1950–1995)","symbol":"PLZ"},"PTE":{"displayName":"Đồng Escudo Bồ Đào Nha","symbol":"PTE"},"PYG":{"displayName":"Guarani Paraguay","displayName-count-other":"Guarani Paraguay","symbol":"PYG","symbol-alt-narrow":"₲"},"QAR":{"displayName":"Rial Qatar","displayName-count-other":"Rial Qatar","symbol":"QAR"},"RHD":{"displayName":"Đồng Đô la Rhode","symbol":"RHD"},"ROL":{"displayName":"Đồng Leu Rumani (1952–2006)","symbol":"ROL"},"RON":{"displayName":"Leu Romania","displayName-count-other":"Leu Romania","symbol":"RON","symbol-alt-narrow":"lei"},"RSD":{"displayName":"Dinar Serbia","displayName-count-other":"Dinar Serbia","symbol":"RSD"},"RUB":{"displayName":"Rúp Nga","displayName-count-other":"Rúp Nga","symbol":"RUB","symbol-alt-narrow":"₽"},"RUR":{"displayName":"Đồng Rúp Nga (1991–1998)","symbol":"RUR","symbol-alt-narrow":"р."},"RWF":{"displayName":"Franc Rwanda","displayName-count-other":"Franc Rwanda","symbol":"RWF","symbol-alt-narrow":"RF"},"SAR":{"displayName":"Riyal Ả Rập Xê-út","displayName-count-other":"Riyal Ả Rập Xê-út","symbol":"SAR"},"SBD":{"displayName":"Đô la quần đảo Solomon","displayName-count-other":"Đô la quần đảo Solomon","symbol":"SBD","symbol-alt-narrow":"$"},"SCR":{"displayName":"Rupee Seychelles","displayName-count-other":"Rupee Seychelles","symbol":"SCR"},"SDD":{"displayName":"Đồng Dinar Sudan (1992–2007)","symbol":"SDD"},"SDG":{"displayName":"Bảng Sudan","displayName-count-other":"Bảng Sudan","symbol":"SDG"},"SDP":{"displayName":"Đồng Bảng Sudan (1957–1998)","symbol":"SDP"},"SEK":{"displayName":"Krona Thụy Điển","displayName-count-other":"Krona Thụy Điển","symbol":"SEK","symbol-alt-narrow":"kr"},"SGD":{"displayName":"Đô la Singapore","displayName-count-other":"Đô la Singapore","symbol":"SGD","symbol-alt-narrow":"$"},"SHP":{"displayName":"Bảng St. Helena","displayName-count-other":"bảng St. Helena","symbol":"SHP","symbol-alt-narrow":"£"},"SIT":{"displayName":"Tôla Xlôvênia","symbol":"SIT"},"SKK":{"displayName":"Cuaron Xlôvác","symbol":"SKK"},"SLL":{"displayName":"Leone Sierra Leone","displayName-count-other":"Leone Sierra Leone","symbol":"SLL"},"SOS":{"displayName":"Schilling Somali","displayName-count-other":"Schilling Somali","symbol":"SOS"},"SRD":{"displayName":"Đô la Suriname","displayName-count-other":"Đô la Suriname","symbol":"SRD","symbol-alt-narrow":"$"},"SRG":{"displayName":"Đồng Guilder Surinam","symbol":"SRG"},"SSP":{"displayName":"Bảng Nam Sudan","displayName-count-other":"Bảng Nam Sudan","symbol":"SSP","symbol-alt-narrow":"£"},"STD":{"displayName":"Dobra São Tomé và Príncipe","displayName-count-other":"Dobra São Tomé và Príncipe","symbol":"STD","symbol-alt-narrow":"Db"},"STN":{"displayName":"STN","symbol":"STN"},"SUR":{"displayName":"Đồng Rúp Sô viết","symbol":"SUR"},"SVC":{"displayName":"Colón El Salvador","symbol":"SVC"},"SYP":{"displayName":"Bảng Syria","displayName-count-other":"Bảng Syria","symbol":"SYP","symbol-alt-narrow":"£"},"SZL":{"displayName":"Lilangeni Swaziland","displayName-count-other":"Lilangeni Swaziland","symbol":"SZL"},"THB":{"displayName":"Bạt Thái Lan","displayName-count-other":"Bạt Thái Lan","symbol":"฿","symbol-alt-narrow":"฿"},"TJR":{"displayName":"Đồng Rúp Tajikistan","symbol":"TJR"},"TJS":{"displayName":"Somoni Tajikistan","displayName-count-other":"Somoni Tajikistan","symbol":"TJS"},"TMM":{"displayName":"Đồng Manat Turkmenistan (1993–2009)","symbol":"TMM"},"TMT":{"displayName":"Manat Turkmenistan","displayName-count-other":"Manat Turkmenistan","symbol":"TMT"},"TND":{"displayName":"Dinar Tunisia","displayName-count-other":"Dinar Tunisia","symbol":"TND"},"TOP":{"displayName":"Paʻanga Tonga","displayName-count-other":"Paʻanga Tonga","symbol":"TOP","symbol-alt-narrow":"T$"},"TPE":{"displayName":"Đồng Escudo Timor","symbol":"TPE"},"TRL":{"displayName":"Lia Thổ Nhĩ Kỳ (1922–2005)","displayName-count-other":"lia Thổ Nhĩ Kỳ (1922–2005)","symbol":"TRL"},"TRY":{"displayName":"Lia Thổ Nhĩ Kỳ","displayName-count-other":"Lia Thổ Nhĩ Kỳ","symbol":"TRY","symbol-alt-narrow":"₺","symbol-alt-variant":"TL"},"TTD":{"displayName":"Đô la Trinidad và Tobago","displayName-count-other":"Đô la Trinidad và Tobago","symbol":"TTD","symbol-alt-narrow":"$"},"TWD":{"displayName":"Đô la Đài Loan mới","displayName-count-other":"Đô la Đài Loan mới","symbol":"NT$","symbol-alt-narrow":"NT$"},"TZS":{"displayName":"Shilling Tanzania","displayName-count-other":"Shilling Tanzania","symbol":"TZS"},"UAH":{"displayName":"Hryvnia Ucraina","displayName-count-other":"Hryvnia Ucraina","symbol":"UAH","symbol-alt-narrow":"₴"},"UAK":{"displayName":"Đồng Karbovanets Ucraina","symbol":"UAK"},"UGS":{"displayName":"Đồng Shilling Uganda (1966–1987)","symbol":"UGS"},"UGX":{"displayName":"Shilling Uganda","displayName-count-other":"Shilling Uganda","symbol":"UGX"},"USD":{"displayName":"Đô la Mỹ","displayName-count-other":"Đô la Mỹ","symbol":"US$","symbol-alt-narrow":"$"},"USN":{"displayName":"Đô la Mỹ (Ngày tiếp theo)","symbol":"USN"},"USS":{"displayName":"Đô la Mỹ (Cùng ngày)","symbol":"USS"},"UYI":{"displayName":"Đồng Peso Uruguay (Đơn vị Theo chỉ số)","symbol":"UYI"},"UYP":{"displayName":"Đồng Peso Uruguay (1975–1993)","symbol":"UYP"},"UYU":{"displayName":"Peso Uruguay","displayName-count-other":"Peso Uruguay","symbol":"UYU","symbol-alt-narrow":"$"},"UZS":{"displayName":"Som Uzbekistan","displayName-count-other":"Som Uzbekistan","symbol":"UZS"},"VEB":{"displayName":"Đồng bolívar của Venezuela (1871–2008)","symbol":"VEB"},"VEF":{"displayName":"Bolívar Venezuela","displayName-count-other":"Bolívar Venezuela","symbol":"VEF","symbol-alt-narrow":"Bs"},"VND":{"displayName":"Đồng Việt Nam","displayName-count-other":"Đồng Việt Nam","symbol":"₫","symbol-alt-narrow":"₫"},"VNN":{"displayName":"Đồng Việt Nam (1978–1985)","symbol":"VNN"},"VUV":{"displayName":"Vatu Vanuatu","displayName-count-other":"Vatu Vanuatu","symbol":"VUV"},"WST":{"displayName":"Tala Samoa","displayName-count-other":"Tala Samoa","symbol":"WST"},"XAF":{"displayName":"Franc CFA Trung Phi","displayName-count-other":"franc CFA Trung Phi","symbol":"FCFA"},"XAG":{"displayName":"Bạc","symbol":"XAG"},"XAU":{"displayName":"Vàng","symbol":"XAU"},"XBA":{"displayName":"Đơn vị Tổng hợp Châu Âu","symbol":"XBA"},"XBB":{"displayName":"Đơn vị Tiền tệ Châu Âu","symbol":"XBB"},"XBC":{"displayName":"Đơn vị Kế toán Châu Âu (XBC)","symbol":"XBC"},"XBD":{"displayName":"Đơn vị Kế toán Châu Âu (XBD)","symbol":"XBD"},"XCD":{"displayName":"Đô la Đông Caribê","displayName-count-other":"Đô la Đông Caribê","symbol":"EC$","symbol-alt-narrow":"$"},"XDR":{"displayName":"Quyền Rút vốn Đặc biệt","symbol":"XDR"},"XEU":{"displayName":"Đơn vị Tiền Châu Âu","symbol":"XEU"},"XFO":{"displayName":"Đồng France Pháp Vàng","symbol":"XFO"},"XFU":{"displayName":"Đồng UIC-Franc Pháp","symbol":"XFU"},"XOF":{"displayName":"Franc CFA Tây Phi","displayName-count-other":"franc CFA Tây Phi","symbol":"CFA"},"XPD":{"displayName":"Paladi","symbol":"XPD"},"XPF":{"displayName":"Franc CFP","displayName-count-other":"Franc CFP","symbol":"CFPF"},"XPT":{"displayName":"Bạch kim","symbol":"XPT"},"XRE":{"displayName":"Quỹ RINET","symbol":"XRE"},"XSU":{"displayName":"XSU","symbol":"XSU"},"XTS":{"displayName":"Mã Tiền tệ Kiểm tra","symbol":"XTS"},"XUA":{"displayName":"XUA","symbol":"XUA"},"XXX":{"displayName":"Tiền tệ chưa biết","displayName-count-other":"(tiền tệ chưa biết)","symbol":"XXX"},"YDD":{"displayName":"Đồng Dinar Yemen","symbol":"YDD"},"YER":{"displayName":"Rial Yemen","displayName-count-other":"Rial Yemen","symbol":"YER"},"YUD":{"displayName":"Đồng Dinar Nam Tư Xu (1966–1990)","symbol":"YUD"},"YUM":{"displayName":"Đồng Dinar Nam Tư Mới (1994–2002)","symbol":"YUM"},"YUN":{"displayName":"Đồng Dinar Nam Tư Có thể chuyển đổi (1990–1992)","symbol":"YUN"},"YUR":{"displayName":"Đồng Dinar Nam Tư Tái cơ cấu (1992–1993)","symbol":"YUR"},"ZAL":{"displayName":"Đồng Rand Nam Phi (tài chính)","symbol":"ZAL"},"ZAR":{"displayName":"Rand Nam Phi","displayName-count-other":"Rand Nam Phi","symbol":"ZAR","symbol-alt-narrow":"R"},"ZMK":{"displayName":"Đồng kwacha của Zambia (1968–2012)","symbol":"ZMK"},"ZMW":{"displayName":"Kwacha Zambia","displayName-count-other":"Kwacha Zambia","symbol":"ZMW","symbol-alt-narrow":"ZK"},"ZRN":{"displayName":"Đồng Zaire Mới (1993–1998)","symbol":"ZRN"},"ZRZ":{"displayName":"Đồng Zaire (1971–1993)","symbol":"ZRZ"},"ZWD":{"displayName":"Đồng Đô la Zimbabwe (1980–2008)","symbol":"ZWD"},"ZWL":{"displayName":"Đồng Đô la Zimbabwe (2009)","symbol":"ZWL"},"ZWR":{"displayName":"Đồng Đô la Zimbabwe (2008)","symbol":"ZWR"}},"defaultNumberingSystem":"latn","otherNumberingSystems":{"native":"latn"},"minimumGroupingDigits":"1","symbols-numberSystem-latn":{"decimal":",","group":".","list":";","percentSign":"%","plusSign":"+","minusSign":"-","exponential":"E","superscriptingExponent":"×","perMille":"‰","infinity":"∞","nan":"NaN","timeSeparator":":"},"decimalFormats-numberSystem-latn":{"standard":"#,##0.###","long":{"decimalFormat":{"1000-count-other":"0 nghìn","10000-count-other":"00 nghìn","100000-count-other":"000 nghìn","1000000-count-other":"0 triệu","10000000-count-other":"00 triệu","100000000-count-other":"000 triệu","1000000000-count-other":"0 tỷ","10000000000-count-other":"00 tỷ","100000000000-count-other":"000 tỷ","1000000000000-count-other":"0 nghìn tỷ","10000000000000-count-other":"00 nghìn tỷ","100000000000000-count-other":"000 nghìn tỷ"}},"short":{"decimalFormat":{"1000-count-other":"0 N","10000-count-other":"00 N","100000-count-other":"000 N","1000000-count-other":"0 Tr","10000000-count-other":"00 Tr","100000000-count-other":"000 Tr","1000000000-count-other":"0 T","10000000000-count-other":"00 T","100000000000-count-other":"000 T","1000000000000-count-other":"0 NT","10000000000000-count-other":"00 NT","100000000000000-count-other":"000 NT"}}},"scientificFormats-numberSystem-latn":{"standard":"#E0"},"percentFormats-numberSystem-latn":{"standard":"#,##0%"},"currencyFormats-numberSystem-latn":{"currencySpacing":{"beforeCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "},"afterCurrency":{"currencyMatch":"[:^S:]","surroundingMatch":"[:digit:]","insertBetween":" "}},"standard":"#,##0.00 ¤","accounting":"#,##0.00 ¤","short":{"standard":{"1000-count-other":"0 N ¤","10000-count-other":"00 N ¤","100000-count-other":"000 N ¤","1000000-count-other":"0 Tr ¤","10000000-count-other":"00 Tr ¤","100000000-count-other":"000 Tr ¤","1000000000-count-other":"0 T ¤","10000000000-count-other":"00 T ¤","100000000000-count-other":"000 T ¤","1000000000000-count-other":"0 NT ¤","10000000000000-count-other":"00 NT ¤","100000000000000-count-other":"000 NT ¤"}},"unitPattern-count-other":"{0} {1}"},"miscPatterns-numberSystem-latn":{"atLeast":"{0}+","range":"{0}-{1}"},"minimalPairs":{"pluralMinimalPairs-count-one":"Rẽ vào lối rẽ thứ nhất bên phải.","pluralMinimalPairs-count-other":"Rẽ vào lối rẽ thứ {0} bên phải.","one":"Rẽ vào lối rẽ thứ nhất bên phải.","other":"Rẽ vào lối rẽ thứ {0} bên phải."}}}},"supplemental":{"version":{"_number":"$Revision: 13744 $","_unicodeVersion":"10.0.0","_cldrVersion":"32"},"likelySubtags":{"aa":"aa-Latn-ET","aai":"aai-Latn-ZZ","aak":"aak-Latn-ZZ","aau":"aau-Latn-ZZ","ab":"ab-Cyrl-GE","abi":"abi-Latn-ZZ","abq":"abq-Cyrl-ZZ","abr":"abr-Latn-GH","abt":"abt-Latn-ZZ","aby":"aby-Latn-ZZ","acd":"acd-Latn-ZZ","ace":"ace-Latn-ID","ach":"ach-Latn-UG","ada":"ada-Latn-GH","ade":"ade-Latn-ZZ","adj":"adj-Latn-ZZ","ady":"ady-Cyrl-RU","adz":"adz-Latn-ZZ","ae":"ae-Avst-IR","aeb":"aeb-Arab-TN","aey":"aey-Latn-ZZ","af":"af-Latn-ZA","agc":"agc-Latn-ZZ","agd":"agd-Latn-ZZ","agg":"agg-Latn-ZZ","agm":"agm-Latn-ZZ","ago":"ago-Latn-ZZ","agq":"agq-Latn-CM","aha":"aha-Latn-ZZ","ahl":"ahl-Latn-ZZ","aho":"aho-Ahom-IN","ajg":"ajg-Latn-ZZ","ak":"ak-Latn-GH","akk":"akk-Xsux-IQ","ala":"ala-Latn-ZZ","ali":"ali-Latn-ZZ","aln":"aln-Latn-XK","alt":"alt-Cyrl-RU","am":"am-Ethi-ET","amm":"amm-Latn-ZZ","amn":"amn-Latn-ZZ","amo":"amo-Latn-NG","amp":"amp-Latn-ZZ","anc":"anc-Latn-ZZ","ank":"ank-Latn-ZZ","ann":"ann-Latn-ZZ","any":"any-Latn-ZZ","aoj":"aoj-Latn-ZZ","aom":"aom-Latn-ZZ","aoz":"aoz-Latn-ID","apc":"apc-Arab-ZZ","apd":"apd-Arab-TG","ape":"ape-Latn-ZZ","apr":"apr-Latn-ZZ","aps":"aps-Latn-ZZ","apz":"apz-Latn-ZZ","ar":"ar-Arab-EG","arc":"arc-Armi-IR","arc-Nbat":"arc-Nbat-JO","arc-Palm":"arc-Palm-SY","arh":"arh-Latn-ZZ","arn":"arn-Latn-CL","aro":"aro-Latn-BO","arq":"arq-Arab-DZ","ary":"ary-Arab-MA","arz":"arz-Arab-EG","as":"as-Beng-IN","asa":"asa-Latn-TZ","ase":"ase-Sgnw-US","asg":"asg-Latn-ZZ","aso":"aso-Latn-ZZ","ast":"ast-Latn-ES","ata":"ata-Latn-ZZ","atg":"atg-Latn-ZZ","atj":"atj-Latn-CA","auy":"auy-Latn-ZZ","av":"av-Cyrl-RU","avl":"avl-Arab-ZZ","avn":"avn-Latn-ZZ","avt":"avt-Latn-ZZ","avu":"avu-Latn-ZZ","awa":"awa-Deva-IN","awb":"awb-Latn-ZZ","awo":"awo-Latn-ZZ","awx":"awx-Latn-ZZ","ay":"ay-Latn-BO","ayb":"ayb-Latn-ZZ","az":"az-Latn-AZ","az-Arab":"az-Arab-IR","az-IQ":"az-Arab-IQ","az-IR":"az-Arab-IR","az-RU":"az-Cyrl-RU","ba":"ba-Cyrl-RU","bal":"bal-Arab-PK","ban":"ban-Latn-ID","bap":"bap-Deva-NP","bar":"bar-Latn-AT","bas":"bas-Latn-CM","bav":"bav-Latn-ZZ","bax":"bax-Bamu-CM","bba":"bba-Latn-ZZ","bbb":"bbb-Latn-ZZ","bbc":"bbc-Latn-ID","bbd":"bbd-Latn-ZZ","bbj":"bbj-Latn-CM","bbp":"bbp-Latn-ZZ","bbr":"bbr-Latn-ZZ","bcf":"bcf-Latn-ZZ","bch":"bch-Latn-ZZ","bci":"bci-Latn-CI","bcm":"bcm-Latn-ZZ","bcn":"bcn-Latn-ZZ","bco":"bco-Latn-ZZ","bcq":"bcq-Ethi-ZZ","bcu":"bcu-Latn-ZZ","bdd":"bdd-Latn-ZZ","be":"be-Cyrl-BY","bef":"bef-Latn-ZZ","beh":"beh-Latn-ZZ","bej":"bej-Arab-SD","bem":"bem-Latn-ZM","bet":"bet-Latn-ZZ","bew":"bew-Latn-ID","bex":"bex-Latn-ZZ","bez":"bez-Latn-TZ","bfd":"bfd-Latn-CM","bfq":"bfq-Taml-IN","bft":"bft-Arab-PK","bfy":"bfy-Deva-IN","bg":"bg-Cyrl-BG","bgc":"bgc-Deva-IN","bgn":"bgn-Arab-PK","bgx":"bgx-Grek-TR","bhb":"bhb-Deva-IN","bhg":"bhg-Latn-ZZ","bhi":"bhi-Deva-IN","bhk":"bhk-Latn-PH","bhl":"bhl-Latn-ZZ","bho":"bho-Deva-IN","bhy":"bhy-Latn-ZZ","bi":"bi-Latn-VU","bib":"bib-Latn-ZZ","big":"big-Latn-ZZ","bik":"bik-Latn-PH","bim":"bim-Latn-ZZ","bin":"bin-Latn-NG","bio":"bio-Latn-ZZ","biq":"biq-Latn-ZZ","bjh":"bjh-Latn-ZZ","bji":"bji-Ethi-ZZ","bjj":"bjj-Deva-IN","bjn":"bjn-Latn-ID","bjo":"bjo-Latn-ZZ","bjr":"bjr-Latn-ZZ","bjt":"bjt-Latn-SN","bjz":"bjz-Latn-ZZ","bkc":"bkc-Latn-ZZ","bkm":"bkm-Latn-CM","bkq":"bkq-Latn-ZZ","bku":"bku-Latn-PH","bkv":"bkv-Latn-ZZ","blt":"blt-Tavt-VN","bm":"bm-Latn-ML","bmh":"bmh-Latn-ZZ","bmk":"bmk-Latn-ZZ","bmq":"bmq-Latn-ML","bmu":"bmu-Latn-ZZ","bn":"bn-Beng-BD","bng":"bng-Latn-ZZ","bnm":"bnm-Latn-ZZ","bnp":"bnp-Latn-ZZ","bo":"bo-Tibt-CN","boj":"boj-Latn-ZZ","bom":"bom-Latn-ZZ","bon":"bon-Latn-ZZ","bpy":"bpy-Beng-IN","bqc":"bqc-Latn-ZZ","bqi":"bqi-Arab-IR","bqp":"bqp-Latn-ZZ","bqv":"bqv-Latn-CI","br":"br-Latn-FR","bra":"bra-Deva-IN","brh":"brh-Arab-PK","brx":"brx-Deva-IN","brz":"brz-Latn-ZZ","bs":"bs-Latn-BA","bsj":"bsj-Latn-ZZ","bsq":"bsq-Bass-LR","bss":"bss-Latn-CM","bst":"bst-Ethi-ZZ","bto":"bto-Latn-PH","btt":"btt-Latn-ZZ","btv":"btv-Deva-PK","bua":"bua-Cyrl-RU","buc":"buc-Latn-YT","bud":"bud-Latn-ZZ","bug":"bug-Latn-ID","buk":"buk-Latn-ZZ","bum":"bum-Latn-CM","buo":"buo-Latn-ZZ","bus":"bus-Latn-ZZ","buu":"buu-Latn-ZZ","bvb":"bvb-Latn-GQ","bwd":"bwd-Latn-ZZ","bwr":"bwr-Latn-ZZ","bxh":"bxh-Latn-ZZ","bye":"bye-Latn-ZZ","byn":"byn-Ethi-ER","byr":"byr-Latn-ZZ","bys":"bys-Latn-ZZ","byv":"byv-Latn-CM","byx":"byx-Latn-ZZ","bza":"bza-Latn-ZZ","bze":"bze-Latn-ML","bzf":"bzf-Latn-ZZ","bzh":"bzh-Latn-ZZ","bzw":"bzw-Latn-ZZ","ca":"ca-Latn-ES","can":"can-Latn-ZZ","cbj":"cbj-Latn-ZZ","cch":"cch-Latn-NG","ccp":"ccp-Cakm-BD","ce":"ce-Cyrl-RU","ceb":"ceb-Latn-PH","cfa":"cfa-Latn-ZZ","cgg":"cgg-Latn-UG","ch":"ch-Latn-GU","chk":"chk-Latn-FM","chm":"chm-Cyrl-RU","cho":"cho-Latn-US","chp":"chp-Latn-CA","chr":"chr-Cher-US","cja":"cja-Arab-KH","cjm":"cjm-Cham-VN","cjv":"cjv-Latn-ZZ","ckb":"ckb-Arab-IQ","ckl":"ckl-Latn-ZZ","cko":"cko-Latn-ZZ","cky":"cky-Latn-ZZ","cla":"cla-Latn-ZZ","cme":"cme-Latn-ZZ","cmg":"cmg-Soyo-MN","co":"co-Latn-FR","cop":"cop-Copt-EG","cps":"cps-Latn-PH","cr":"cr-Cans-CA","crh":"crh-Cyrl-UA","crj":"crj-Cans-CA","crk":"crk-Cans-CA","crl":"crl-Cans-CA","crm":"crm-Cans-CA","crs":"crs-Latn-SC","cs":"cs-Latn-CZ","csb":"csb-Latn-PL","csw":"csw-Cans-CA","ctd":"ctd-Pauc-MM","cu":"cu-Cyrl-RU","cu-Glag":"cu-Glag-BG","cv":"cv-Cyrl-RU","cy":"cy-Latn-GB","da":"da-Latn-DK","dad":"dad-Latn-ZZ","daf":"daf-Latn-ZZ","dag":"dag-Latn-ZZ","dah":"dah-Latn-ZZ","dak":"dak-Latn-US","dar":"dar-Cyrl-RU","dav":"dav-Latn-KE","dbd":"dbd-Latn-ZZ","dbq":"dbq-Latn-ZZ","dcc":"dcc-Arab-IN","ddn":"ddn-Latn-ZZ","de":"de-Latn-DE","ded":"ded-Latn-ZZ","den":"den-Latn-CA","dga":"dga-Latn-ZZ","dgh":"dgh-Latn-ZZ","dgi":"dgi-Latn-ZZ","dgl":"dgl-Arab-ZZ","dgr":"dgr-Latn-CA","dgz":"dgz-Latn-ZZ","dia":"dia-Latn-ZZ","dje":"dje-Latn-NE","dnj":"dnj-Latn-CI","dob":"dob-Latn-ZZ","doi":"doi-Arab-IN","dop":"dop-Latn-ZZ","dow":"dow-Latn-ZZ","dri":"dri-Latn-ZZ","drs":"drs-Ethi-ZZ","dsb":"dsb-Latn-DE","dtm":"dtm-Latn-ML","dtp":"dtp-Latn-MY","dts":"dts-Latn-ZZ","dty":"dty-Deva-NP","dua":"dua-Latn-CM","duc":"duc-Latn-ZZ","dud":"dud-Latn-ZZ","dug":"dug-Latn-ZZ","dv":"dv-Thaa-MV","dva":"dva-Latn-ZZ","dww":"dww-Latn-ZZ","dyo":"dyo-Latn-SN","dyu":"dyu-Latn-BF","dz":"dz-Tibt-BT","dzg":"dzg-Latn-ZZ","ebu":"ebu-Latn-KE","ee":"ee-Latn-GH","efi":"efi-Latn-NG","egl":"egl-Latn-IT","egy":"egy-Egyp-EG","eka":"eka-Latn-ZZ","eky":"eky-Kali-MM","el":"el-Grek-GR","ema":"ema-Latn-ZZ","emi":"emi-Latn-ZZ","en":"en-Latn-US","en-Shaw":"en-Shaw-GB","enn":"enn-Latn-ZZ","enq":"enq-Latn-ZZ","eo":"eo-Latn-001","eri":"eri-Latn-ZZ","es":"es-Latn-ES","esu":"esu-Latn-US","et":"et-Latn-EE","etr":"etr-Latn-ZZ","ett":"ett-Ital-IT","etu":"etu-Latn-ZZ","etx":"etx-Latn-ZZ","eu":"eu-Latn-ES","ewo":"ewo-Latn-CM","ext":"ext-Latn-ES","fa":"fa-Arab-IR","faa":"faa-Latn-ZZ","fab":"fab-Latn-ZZ","fag":"fag-Latn-ZZ","fai":"fai-Latn-ZZ","fan":"fan-Latn-GQ","ff":"ff-Latn-SN","ff-Adlm":"ff-Adlm-GN","ffi":"ffi-Latn-ZZ","ffm":"ffm-Latn-ML","fi":"fi-Latn-FI","fia":"fia-Arab-SD","fil":"fil-Latn-PH","fit":"fit-Latn-SE","fj":"fj-Latn-FJ","flr":"flr-Latn-ZZ","fmp":"fmp-Latn-ZZ","fo":"fo-Latn-FO","fod":"fod-Latn-ZZ","fon":"fon-Latn-BJ","for":"for-Latn-ZZ","fpe":"fpe-Latn-ZZ","fqs":"fqs-Latn-ZZ","fr":"fr-Latn-FR","frc":"frc-Latn-US","frp":"frp-Latn-FR","frr":"frr-Latn-DE","frs":"frs-Latn-DE","fub":"fub-Arab-CM","fud":"fud-Latn-WF","fue":"fue-Latn-ZZ","fuf":"fuf-Latn-GN","fuh":"fuh-Latn-ZZ","fuq":"fuq-Latn-NE","fur":"fur-Latn-IT","fuv":"fuv-Latn-NG","fuy":"fuy-Latn-ZZ","fvr":"fvr-Latn-SD","fy":"fy-Latn-NL","ga":"ga-Latn-IE","gaa":"gaa-Latn-GH","gaf":"gaf-Latn-ZZ","gag":"gag-Latn-MD","gah":"gah-Latn-ZZ","gaj":"gaj-Latn-ZZ","gam":"gam-Latn-ZZ","gan":"gan-Hans-CN","gaw":"gaw-Latn-ZZ","gay":"gay-Latn-ID","gba":"gba-Latn-ZZ","gbf":"gbf-Latn-ZZ","gbm":"gbm-Deva-IN","gby":"gby-Latn-ZZ","gbz":"gbz-Arab-IR","gcr":"gcr-Latn-GF","gd":"gd-Latn-GB","gde":"gde-Latn-ZZ","gdn":"gdn-Latn-ZZ","gdr":"gdr-Latn-ZZ","geb":"geb-Latn-ZZ","gej":"gej-Latn-ZZ","gel":"gel-Latn-ZZ","gez":"gez-Ethi-ET","gfk":"gfk-Latn-ZZ","ggn":"ggn-Deva-NP","ghs":"ghs-Latn-ZZ","gil":"gil-Latn-KI","gim":"gim-Latn-ZZ","gjk":"gjk-Arab-PK","gjn":"gjn-Latn-ZZ","gju":"gju-Arab-PK","gkn":"gkn-Latn-ZZ","gkp":"gkp-Latn-ZZ","gl":"gl-Latn-ES","glk":"glk-Arab-IR","gmm":"gmm-Latn-ZZ","gmv":"gmv-Ethi-ZZ","gn":"gn-Latn-PY","gnd":"gnd-Latn-ZZ","gng":"gng-Latn-ZZ","god":"god-Latn-ZZ","gof":"gof-Ethi-ZZ","goi":"goi-Latn-ZZ","gom":"gom-Deva-IN","gon":"gon-Telu-IN","gor":"gor-Latn-ID","gos":"gos-Latn-NL","got":"got-Goth-UA","grb":"grb-Latn-ZZ","grc":"grc-Cprt-CY","grc-Linb":"grc-Linb-GR","grt":"grt-Beng-IN","grw":"grw-Latn-ZZ","gsw":"gsw-Latn-CH","gu":"gu-Gujr-IN","gub":"gub-Latn-BR","guc":"guc-Latn-CO","gud":"gud-Latn-ZZ","gur":"gur-Latn-GH","guw":"guw-Latn-ZZ","gux":"gux-Latn-ZZ","guz":"guz-Latn-KE","gv":"gv-Latn-IM","gvf":"gvf-Latn-ZZ","gvr":"gvr-Deva-NP","gvs":"gvs-Latn-ZZ","gwc":"gwc-Arab-ZZ","gwi":"gwi-Latn-CA","gwt":"gwt-Arab-ZZ","gyi":"gyi-Latn-ZZ","ha":"ha-Latn-NG","ha-CM":"ha-Arab-CM","ha-SD":"ha-Arab-SD","hag":"hag-Latn-ZZ","hak":"hak-Hans-CN","ham":"ham-Latn-ZZ","haw":"haw-Latn-US","haz":"haz-Arab-AF","hbb":"hbb-Latn-ZZ","hdy":"hdy-Ethi-ZZ","he":"he-Hebr-IL","hhy":"hhy-Latn-ZZ","hi":"hi-Deva-IN","hia":"hia-Latn-ZZ","hif":"hif-Latn-FJ","hig":"hig-Latn-ZZ","hih":"hih-Latn-ZZ","hil":"hil-Latn-PH","hla":"hla-Latn-ZZ","hlu":"hlu-Hluw-TR","hmd":"hmd-Plrd-CN","hmt":"hmt-Latn-ZZ","hnd":"hnd-Arab-PK","hne":"hne-Deva-IN","hnj":"hnj-Hmng-LA","hnn":"hnn-Latn-PH","hno":"hno-Arab-PK","ho":"ho-Latn-PG","hoc":"hoc-Deva-IN","hoj":"hoj-Deva-IN","hot":"hot-Latn-ZZ","hr":"hr-Latn-HR","hsb":"hsb-Latn-DE","hsn":"hsn-Hans-CN","ht":"ht-Latn-HT","hu":"hu-Latn-HU","hui":"hui-Latn-ZZ","hy":"hy-Armn-AM","hz":"hz-Latn-NA","ia":"ia-Latn-FR","ian":"ian-Latn-ZZ","iar":"iar-Latn-ZZ","iba":"iba-Latn-MY","ibb":"ibb-Latn-NG","iby":"iby-Latn-ZZ","ica":"ica-Latn-ZZ","ich":"ich-Latn-ZZ","id":"id-Latn-ID","idd":"idd-Latn-ZZ","idi":"idi-Latn-ZZ","idu":"idu-Latn-ZZ","ife":"ife-Latn-TG","ig":"ig-Latn-NG","igb":"igb-Latn-ZZ","ige":"ige-Latn-ZZ","ii":"ii-Yiii-CN","ijj":"ijj-Latn-ZZ","ik":"ik-Latn-US","ikk":"ikk-Latn-ZZ","ikt":"ikt-Latn-CA","ikw":"ikw-Latn-ZZ","ikx":"ikx-Latn-ZZ","ilo":"ilo-Latn-PH","imo":"imo-Latn-ZZ","in":"in-Latn-ID","inh":"inh-Cyrl-RU","io":"io-Latn-001","iou":"iou-Latn-ZZ","iri":"iri-Latn-ZZ","is":"is-Latn-IS","it":"it-Latn-IT","iu":"iu-Cans-CA","iw":"iw-Hebr-IL","iwm":"iwm-Latn-ZZ","iws":"iws-Latn-ZZ","izh":"izh-Latn-RU","izi":"izi-Latn-ZZ","ja":"ja-Jpan-JP","jab":"jab-Latn-ZZ","jam":"jam-Latn-JM","jbo":"jbo-Latn-001","jbu":"jbu-Latn-ZZ","jen":"jen-Latn-ZZ","jgk":"jgk-Latn-ZZ","jgo":"jgo-Latn-CM","ji":"ji-Hebr-UA","jib":"jib-Latn-ZZ","jmc":"jmc-Latn-TZ","jml":"jml-Deva-NP","jra":"jra-Latn-ZZ","jut":"jut-Latn-DK","jv":"jv-Latn-ID","jw":"jw-Latn-ID","ka":"ka-Geor-GE","kaa":"kaa-Cyrl-UZ","kab":"kab-Latn-DZ","kac":"kac-Latn-MM","kad":"kad-Latn-ZZ","kai":"kai-Latn-ZZ","kaj":"kaj-Latn-NG","kam":"kam-Latn-KE","kao":"kao-Latn-ML","kbd":"kbd-Cyrl-RU","kbm":"kbm-Latn-ZZ","kbp":"kbp-Latn-ZZ","kbq":"kbq-Latn-ZZ","kbx":"kbx-Latn-ZZ","kby":"kby-Arab-NE","kcg":"kcg-Latn-NG","kck":"kck-Latn-ZW","kcl":"kcl-Latn-ZZ","kct":"kct-Latn-ZZ","kde":"kde-Latn-TZ","kdh":"kdh-Arab-TG","kdl":"kdl-Latn-ZZ","kdt":"kdt-Thai-TH","kea":"kea-Latn-CV","ken":"ken-Latn-CM","kez":"kez-Latn-ZZ","kfo":"kfo-Latn-CI","kfr":"kfr-Deva-IN","kfy":"kfy-Deva-IN","kg":"kg-Latn-CD","kge":"kge-Latn-ID","kgf":"kgf-Latn-ZZ","kgp":"kgp-Latn-BR","kha":"kha-Latn-IN","khb":"khb-Talu-CN","khn":"khn-Deva-IN","khq":"khq-Latn-ML","khs":"khs-Latn-ZZ","kht":"kht-Mymr-IN","khw":"khw-Arab-PK","khz":"khz-Latn-ZZ","ki":"ki-Latn-KE","kij":"kij-Latn-ZZ","kiu":"kiu-Latn-TR","kiw":"kiw-Latn-ZZ","kj":"kj-Latn-NA","kjd":"kjd-Latn-ZZ","kjg":"kjg-Laoo-LA","kjs":"kjs-Latn-ZZ","kjy":"kjy-Latn-ZZ","kk":"kk-Cyrl-KZ","kk-AF":"kk-Arab-AF","kk-Arab":"kk-Arab-CN","kk-CN":"kk-Arab-CN","kk-IR":"kk-Arab-IR","kk-MN":"kk-Arab-MN","kkc":"kkc-Latn-ZZ","kkj":"kkj-Latn-CM","kl":"kl-Latn-GL","kln":"kln-Latn-KE","klq":"klq-Latn-ZZ","klt":"klt-Latn-ZZ","klx":"klx-Latn-ZZ","km":"km-Khmr-KH","kmb":"kmb-Latn-AO","kmh":"kmh-Latn-ZZ","kmo":"kmo-Latn-ZZ","kms":"kms-Latn-ZZ","kmu":"kmu-Latn-ZZ","kmw":"kmw-Latn-ZZ","kn":"kn-Knda-IN","knf":"knf-Latn-GW","knp":"knp-Latn-ZZ","ko":"ko-Kore-KR","koi":"koi-Cyrl-RU","kok":"kok-Deva-IN","kol":"kol-Latn-ZZ","kos":"kos-Latn-FM","koz":"koz-Latn-ZZ","kpe":"kpe-Latn-LR","kpf":"kpf-Latn-ZZ","kpo":"kpo-Latn-ZZ","kpr":"kpr-Latn-ZZ","kpx":"kpx-Latn-ZZ","kqb":"kqb-Latn-ZZ","kqf":"kqf-Latn-ZZ","kqs":"kqs-Latn-ZZ","kqy":"kqy-Ethi-ZZ","kr":"kr-Latn-ZZ","krc":"krc-Cyrl-RU","kri":"kri-Latn-SL","krj":"krj-Latn-PH","krl":"krl-Latn-RU","krs":"krs-Latn-ZZ","kru":"kru-Deva-IN","ks":"ks-Arab-IN","ksb":"ksb-Latn-TZ","ksd":"ksd-Latn-ZZ","ksf":"ksf-Latn-CM","ksh":"ksh-Latn-DE","ksj":"ksj-Latn-ZZ","ksr":"ksr-Latn-ZZ","ktb":"ktb-Ethi-ZZ","ktm":"ktm-Latn-ZZ","kto":"kto-Latn-ZZ","ku":"ku-Latn-TR","ku-Arab":"ku-Arab-IQ","ku-LB":"ku-Arab-LB","kub":"kub-Latn-ZZ","kud":"kud-Latn-ZZ","kue":"kue-Latn-ZZ","kuj":"kuj-Latn-ZZ","kum":"kum-Cyrl-RU","kun":"kun-Latn-ZZ","kup":"kup-Latn-ZZ","kus":"kus-Latn-ZZ","kv":"kv-Cyrl-RU","kvg":"kvg-Latn-ZZ","kvr":"kvr-Latn-ID","kvx":"kvx-Arab-PK","kw":"kw-Latn-GB","kwj":"kwj-Latn-ZZ","kwo":"kwo-Latn-ZZ","kxa":"kxa-Latn-ZZ","kxc":"kxc-Ethi-ZZ","kxm":"kxm-Thai-TH","kxp":"kxp-Arab-PK","kxw":"kxw-Latn-ZZ","kxz":"kxz-Latn-ZZ","ky":"ky-Cyrl-KG","ky-Arab":"ky-Arab-CN","ky-CN":"ky-Arab-CN","ky-Latn":"ky-Latn-TR","ky-TR":"ky-Latn-TR","kye":"kye-Latn-ZZ","kyx":"kyx-Latn-ZZ","kzr":"kzr-Latn-ZZ","la":"la-Latn-VA","lab":"lab-Lina-GR","lad":"lad-Hebr-IL","lag":"lag-Latn-TZ","lah":"lah-Arab-PK","laj":"laj-Latn-UG","las":"las-Latn-ZZ","lb":"lb-Latn-LU","lbe":"lbe-Cyrl-RU","lbu":"lbu-Latn-ZZ","lbw":"lbw-Latn-ID","lcm":"lcm-Latn-ZZ","lcp":"lcp-Thai-CN","ldb":"ldb-Latn-ZZ","led":"led-Latn-ZZ","lee":"lee-Latn-ZZ","lem":"lem-Latn-ZZ","lep":"lep-Lepc-IN","leq":"leq-Latn-ZZ","leu":"leu-Latn-ZZ","lez":"lez-Cyrl-RU","lg":"lg-Latn-UG","lgg":"lgg-Latn-ZZ","li":"li-Latn-NL","lia":"lia-Latn-ZZ","lid":"lid-Latn-ZZ","lif":"lif-Deva-NP","lif-Limb":"lif-Limb-IN","lig":"lig-Latn-ZZ","lih":"lih-Latn-ZZ","lij":"lij-Latn-IT","lis":"lis-Lisu-CN","ljp":"ljp-Latn-ID","lki":"lki-Arab-IR","lkt":"lkt-Latn-US","lle":"lle-Latn-ZZ","lln":"lln-Latn-ZZ","lmn":"lmn-Telu-IN","lmo":"lmo-Latn-IT","lmp":"lmp-Latn-ZZ","ln":"ln-Latn-CD","lns":"lns-Latn-ZZ","lnu":"lnu-Latn-ZZ","lo":"lo-Laoo-LA","loj":"loj-Latn-ZZ","lok":"lok-Latn-ZZ","lol":"lol-Latn-CD","lor":"lor-Latn-ZZ","los":"los-Latn-ZZ","loz":"loz-Latn-ZM","lrc":"lrc-Arab-IR","lt":"lt-Latn-LT","ltg":"ltg-Latn-LV","lu":"lu-Latn-CD","lua":"lua-Latn-CD","luo":"luo-Latn-KE","luy":"luy-Latn-KE","luz":"luz-Arab-IR","lv":"lv-Latn-LV","lwl":"lwl-Thai-TH","lzh":"lzh-Hans-CN","lzz":"lzz-Latn-TR","mad":"mad-Latn-ID","maf":"maf-Latn-CM","mag":"mag-Deva-IN","mai":"mai-Deva-IN","mak":"mak-Latn-ID","man":"man-Latn-GM","man-GN":"man-Nkoo-GN","man-Nkoo":"man-Nkoo-GN","mas":"mas-Latn-KE","maw":"maw-Latn-ZZ","maz":"maz-Latn-MX","mbh":"mbh-Latn-ZZ","mbo":"mbo-Latn-ZZ","mbq":"mbq-Latn-ZZ","mbu":"mbu-Latn-ZZ","mbw":"mbw-Latn-ZZ","mci":"mci-Latn-ZZ","mcp":"mcp-Latn-ZZ","mcq":"mcq-Latn-ZZ","mcr":"mcr-Latn-ZZ","mcu":"mcu-Latn-ZZ","mda":"mda-Latn-ZZ","mde":"mde-Arab-ZZ","mdf":"mdf-Cyrl-RU","mdh":"mdh-Latn-PH","mdj":"mdj-Latn-ZZ","mdr":"mdr-Latn-ID","mdx":"mdx-Ethi-ZZ","med":"med-Latn-ZZ","mee":"mee-Latn-ZZ","mek":"mek-Latn-ZZ","men":"men-Latn-SL","mer":"mer-Latn-KE","met":"met-Latn-ZZ","meu":"meu-Latn-ZZ","mfa":"mfa-Arab-TH","mfe":"mfe-Latn-MU","mfn":"mfn-Latn-ZZ","mfo":"mfo-Latn-ZZ","mfq":"mfq-Latn-ZZ","mg":"mg-Latn-MG","mgh":"mgh-Latn-MZ","mgl":"mgl-Latn-ZZ","mgo":"mgo-Latn-CM","mgp":"mgp-Deva-NP","mgy":"mgy-Latn-TZ","mh":"mh-Latn-MH","mhi":"mhi-Latn-ZZ","mhl":"mhl-Latn-ZZ","mi":"mi-Latn-NZ","mif":"mif-Latn-ZZ","min":"min-Latn-ID","mis":"mis-Hatr-IQ","miw":"miw-Latn-ZZ","mk":"mk-Cyrl-MK","mki":"mki-Arab-ZZ","mkl":"mkl-Latn-ZZ","mkp":"mkp-Latn-ZZ","mkw":"mkw-Latn-ZZ","ml":"ml-Mlym-IN","mle":"mle-Latn-ZZ","mlp":"mlp-Latn-ZZ","mls":"mls-Latn-SD","mmo":"mmo-Latn-ZZ","mmu":"mmu-Latn-ZZ","mmx":"mmx-Latn-ZZ","mn":"mn-Cyrl-MN","mn-CN":"mn-Mong-CN","mn-Mong":"mn-Mong-CN","mna":"mna-Latn-ZZ","mnf":"mnf-Latn-ZZ","mni":"mni-Beng-IN","mnw":"mnw-Mymr-MM","moa":"moa-Latn-ZZ","moe":"moe-Latn-CA","moh":"moh-Latn-CA","mos":"mos-Latn-BF","mox":"mox-Latn-ZZ","mpp":"mpp-Latn-ZZ","mps":"mps-Latn-ZZ","mpt":"mpt-Latn-ZZ","mpx":"mpx-Latn-ZZ","mql":"mql-Latn-ZZ","mr":"mr-Deva-IN","mrd":"mrd-Deva-NP","mrj":"mrj-Cyrl-RU","mro":"mro-Mroo-BD","ms":"ms-Latn-MY","ms-CC":"ms-Arab-CC","ms-ID":"ms-Arab-ID","mt":"mt-Latn-MT","mtc":"mtc-Latn-ZZ","mtf":"mtf-Latn-ZZ","mti":"mti-Latn-ZZ","mtr":"mtr-Deva-IN","mua":"mua-Latn-CM","mur":"mur-Latn-ZZ","mus":"mus-Latn-US","mva":"mva-Latn-ZZ","mvn":"mvn-Latn-ZZ","mvy":"mvy-Arab-PK","mwk":"mwk-Latn-ML","mwr":"mwr-Deva-IN","mwv":"mwv-Latn-ID","mxc":"mxc-Latn-ZW","mxm":"mxm-Latn-ZZ","my":"my-Mymr-MM","myk":"myk-Latn-ZZ","mym":"mym-Ethi-ZZ","myv":"myv-Cyrl-RU","myw":"myw-Latn-ZZ","myx":"myx-Latn-UG","myz":"myz-Mand-IR","mzk":"mzk-Latn-ZZ","mzm":"mzm-Latn-ZZ","mzn":"mzn-Arab-IR","mzp":"mzp-Latn-ZZ","mzw":"mzw-Latn-ZZ","mzz":"mzz-Latn-ZZ","na":"na-Latn-NR","nac":"nac-Latn-ZZ","naf":"naf-Latn-ZZ","nak":"nak-Latn-ZZ","nan":"nan-Hans-CN","nap":"nap-Latn-IT","naq":"naq-Latn-NA","nas":"nas-Latn-ZZ","nb":"nb-Latn-NO","nca":"nca-Latn-ZZ","nce":"nce-Latn-ZZ","ncf":"ncf-Latn-ZZ","nch":"nch-Latn-MX","nco":"nco-Latn-ZZ","ncu":"ncu-Latn-ZZ","nd":"nd-Latn-ZW","ndc":"ndc-Latn-MZ","nds":"nds-Latn-DE","ne":"ne-Deva-NP","neb":"neb-Latn-ZZ","new":"new-Deva-NP","nex":"nex-Latn-ZZ","nfr":"nfr-Latn-ZZ","ng":"ng-Latn-NA","nga":"nga-Latn-ZZ","ngb":"ngb-Latn-ZZ","ngl":"ngl-Latn-MZ","nhb":"nhb-Latn-ZZ","nhe":"nhe-Latn-MX","nhw":"nhw-Latn-MX","nif":"nif-Latn-ZZ","nii":"nii-Latn-ZZ","nij":"nij-Latn-ID","nin":"nin-Latn-ZZ","niu":"niu-Latn-NU","niy":"niy-Latn-ZZ","niz":"niz-Latn-ZZ","njo":"njo-Latn-IN","nkg":"nkg-Latn-ZZ","nko":"nko-Latn-ZZ","nl":"nl-Latn-NL","nmg":"nmg-Latn-CM","nmz":"nmz-Latn-ZZ","nn":"nn-Latn-NO","nnf":"nnf-Latn-ZZ","nnh":"nnh-Latn-CM","nnk":"nnk-Latn-ZZ","nnm":"nnm-Latn-ZZ","no":"no-Latn-NO","nod":"nod-Lana-TH","noe":"noe-Deva-IN","non":"non-Runr-SE","nop":"nop-Latn-ZZ","nou":"nou-Latn-ZZ","nqo":"nqo-Nkoo-GN","nr":"nr-Latn-ZA","nrb":"nrb-Latn-ZZ","nsk":"nsk-Cans-CA","nsn":"nsn-Latn-ZZ","nso":"nso-Latn-ZA","nss":"nss-Latn-ZZ","ntm":"ntm-Latn-ZZ","ntr":"ntr-Latn-ZZ","nui":"nui-Latn-ZZ","nup":"nup-Latn-ZZ","nus":"nus-Latn-SS","nuv":"nuv-Latn-ZZ","nux":"nux-Latn-ZZ","nv":"nv-Latn-US","nwb":"nwb-Latn-ZZ","nxq":"nxq-Latn-CN","nxr":"nxr-Latn-ZZ","ny":"ny-Latn-MW","nym":"nym-Latn-TZ","nyn":"nyn-Latn-UG","nzi":"nzi-Latn-GH","oc":"oc-Latn-FR","ogc":"ogc-Latn-ZZ","okr":"okr-Latn-ZZ","okv":"okv-Latn-ZZ","om":"om-Latn-ET","ong":"ong-Latn-ZZ","onn":"onn-Latn-ZZ","ons":"ons-Latn-ZZ","opm":"opm-Latn-ZZ","or":"or-Orya-IN","oro":"oro-Latn-ZZ","oru":"oru-Arab-ZZ","os":"os-Cyrl-GE","osa":"osa-Osge-US","ota":"ota-Arab-ZZ","otk":"otk-Orkh-MN","ozm":"ozm-Latn-ZZ","pa":"pa-Guru-IN","pa-Arab":"pa-Arab-PK","pa-PK":"pa-Arab-PK","pag":"pag-Latn-PH","pal":"pal-Phli-IR","pal-Phlp":"pal-Phlp-CN","pam":"pam-Latn-PH","pap":"pap-Latn-AW","pau":"pau-Latn-PW","pbi":"pbi-Latn-ZZ","pcd":"pcd-Latn-FR","pcm":"pcm-Latn-NG","pdc":"pdc-Latn-US","pdt":"pdt-Latn-CA","ped":"ped-Latn-ZZ","peo":"peo-Xpeo-IR","pex":"pex-Latn-ZZ","pfl":"pfl-Latn-DE","phl":"phl-Arab-ZZ","phn":"phn-Phnx-LB","pil":"pil-Latn-ZZ","pip":"pip-Latn-ZZ","pka":"pka-Brah-IN","pko":"pko-Latn-KE","pl":"pl-Latn-PL","pla":"pla-Latn-ZZ","pms":"pms-Latn-IT","png":"png-Latn-ZZ","pnn":"pnn-Latn-ZZ","pnt":"pnt-Grek-GR","pon":"pon-Latn-FM","ppo":"ppo-Latn-ZZ","pra":"pra-Khar-PK","prd":"prd-Arab-IR","prg":"prg-Latn-001","ps":"ps-Arab-AF","pss":"pss-Latn-ZZ","pt":"pt-Latn-BR","ptp":"ptp-Latn-ZZ","puu":"puu-Latn-GA","pwa":"pwa-Latn-ZZ","qu":"qu-Latn-PE","quc":"quc-Latn-GT","qug":"qug-Latn-EC","rai":"rai-Latn-ZZ","raj":"raj-Deva-IN","rao":"rao-Latn-ZZ","rcf":"rcf-Latn-RE","rej":"rej-Latn-ID","rel":"rel-Latn-ZZ","res":"res-Latn-ZZ","rgn":"rgn-Latn-IT","rhg":"rhg-Arab-ZZ","ria":"ria-Latn-IN","rif":"rif-Tfng-MA","rif-NL":"rif-Latn-NL","rjs":"rjs-Deva-NP","rkt":"rkt-Beng-BD","rm":"rm-Latn-CH","rmf":"rmf-Latn-FI","rmo":"rmo-Latn-CH","rmt":"rmt-Arab-IR","rmu":"rmu-Latn-SE","rn":"rn-Latn-BI","rna":"rna-Latn-ZZ","rng":"rng-Latn-MZ","ro":"ro-Latn-RO","rob":"rob-Latn-ID","rof":"rof-Latn-TZ","roo":"roo-Latn-ZZ","rro":"rro-Latn-ZZ","rtm":"rtm-Latn-FJ","ru":"ru-Cyrl-RU","rue":"rue-Cyrl-UA","rug":"rug-Latn-SB","rw":"rw-Latn-RW","rwk":"rwk-Latn-TZ","rwo":"rwo-Latn-ZZ","ryu":"ryu-Kana-JP","sa":"sa-Deva-IN","saf":"saf-Latn-GH","sah":"sah-Cyrl-RU","saq":"saq-Latn-KE","sas":"sas-Latn-ID","sat":"sat-Latn-IN","sav":"sav-Latn-SN","saz":"saz-Saur-IN","sba":"sba-Latn-ZZ","sbe":"sbe-Latn-ZZ","sbp":"sbp-Latn-TZ","sc":"sc-Latn-IT","sck":"sck-Deva-IN","scl":"scl-Arab-ZZ","scn":"scn-Latn-IT","sco":"sco-Latn-GB","scs":"scs-Latn-CA","sd":"sd-Arab-PK","sd-Deva":"sd-Deva-IN","sd-Khoj":"sd-Khoj-IN","sd-Sind":"sd-Sind-IN","sdc":"sdc-Latn-IT","sdh":"sdh-Arab-IR","se":"se-Latn-NO","sef":"sef-Latn-CI","seh":"seh-Latn-MZ","sei":"sei-Latn-MX","ses":"ses-Latn-ML","sg":"sg-Latn-CF","sga":"sga-Ogam-IE","sgs":"sgs-Latn-LT","sgw":"sgw-Ethi-ZZ","sgz":"sgz-Latn-ZZ","shi":"shi-Tfng-MA","shk":"shk-Latn-ZZ","shn":"shn-Mymr-MM","shu":"shu-Arab-ZZ","si":"si-Sinh-LK","sid":"sid-Latn-ET","sig":"sig-Latn-ZZ","sil":"sil-Latn-ZZ","sim":"sim-Latn-ZZ","sjr":"sjr-Latn-ZZ","sk":"sk-Latn-SK","skc":"skc-Latn-ZZ","skr":"skr-Arab-PK","sks":"sks-Latn-ZZ","sl":"sl-Latn-SI","sld":"sld-Latn-ZZ","sli":"sli-Latn-PL","sll":"sll-Latn-ZZ","sly":"sly-Latn-ID","sm":"sm-Latn-WS","sma":"sma-Latn-SE","smj":"smj-Latn-SE","smn":"smn-Latn-FI","smp":"smp-Samr-IL","smq":"smq-Latn-ZZ","sms":"sms-Latn-FI","sn":"sn-Latn-ZW","snc":"snc-Latn-ZZ","snk":"snk-Latn-ML","snp":"snp-Latn-ZZ","snx":"snx-Latn-ZZ","sny":"sny-Latn-ZZ","so":"so-Latn-SO","sok":"sok-Latn-ZZ","soq":"soq-Latn-ZZ","sou":"sou-Thai-TH","soy":"soy-Latn-ZZ","spd":"spd-Latn-ZZ","spl":"spl-Latn-ZZ","sps":"sps-Latn-ZZ","sq":"sq-Latn-AL","sr":"sr-Cyrl-RS","sr-ME":"sr-Latn-ME","sr-RO":"sr-Latn-RO","sr-RU":"sr-Latn-RU","sr-TR":"sr-Latn-TR","srb":"srb-Sora-IN","srn":"srn-Latn-SR","srr":"srr-Latn-SN","srx":"srx-Deva-IN","ss":"ss-Latn-ZA","ssd":"ssd-Latn-ZZ","ssg":"ssg-Latn-ZZ","ssy":"ssy-Latn-ER","st":"st-Latn-ZA","stk":"stk-Latn-ZZ","stq":"stq-Latn-DE","su":"su-Latn-ID","sua":"sua-Latn-ZZ","sue":"sue-Latn-ZZ","suk":"suk-Latn-TZ","sur":"sur-Latn-ZZ","sus":"sus-Latn-GN","sv":"sv-Latn-SE","sw":"sw-Latn-TZ","swb":"swb-Arab-YT","swc":"swc-Latn-CD","swg":"swg-Latn-DE","swp":"swp-Latn-ZZ","swv":"swv-Deva-IN","sxn":"sxn-Latn-ID","sxw":"sxw-Latn-ZZ","syl":"syl-Beng-BD","syr":"syr-Syrc-IQ","szl":"szl-Latn-PL","ta":"ta-Taml-IN","taj":"taj-Deva-NP","tal":"tal-Latn-ZZ","tan":"tan-Latn-ZZ","taq":"taq-Latn-ZZ","tbc":"tbc-Latn-ZZ","tbd":"tbd-Latn-ZZ","tbf":"tbf-Latn-ZZ","tbg":"tbg-Latn-ZZ","tbo":"tbo-Latn-ZZ","tbw":"tbw-Latn-PH","tbz":"tbz-Latn-ZZ","tci":"tci-Latn-ZZ","tcy":"tcy-Knda-IN","tdd":"tdd-Tale-CN","tdg":"tdg-Deva-NP","tdh":"tdh-Deva-NP","te":"te-Telu-IN","ted":"ted-Latn-ZZ","tem":"tem-Latn-SL","teo":"teo-Latn-UG","tet":"tet-Latn-TL","tfi":"tfi-Latn-ZZ","tg":"tg-Cyrl-TJ","tg-Arab":"tg-Arab-PK","tg-PK":"tg-Arab-PK","tgc":"tgc-Latn-ZZ","tgo":"tgo-Latn-ZZ","tgu":"tgu-Latn-ZZ","th":"th-Thai-TH","thl":"thl-Deva-NP","thq":"thq-Deva-NP","thr":"thr-Deva-NP","ti":"ti-Ethi-ET","tif":"tif-Latn-ZZ","tig":"tig-Ethi-ER","tik":"tik-Latn-ZZ","tim":"tim-Latn-ZZ","tio":"tio-Latn-ZZ","tiv":"tiv-Latn-NG","tk":"tk-Latn-TM","tkl":"tkl-Latn-TK","tkr":"tkr-Latn-AZ","tkt":"tkt-Deva-NP","tl":"tl-Latn-PH","tlf":"tlf-Latn-ZZ","tlx":"tlx-Latn-ZZ","tly":"tly-Latn-AZ","tmh":"tmh-Latn-NE","tmy":"tmy-Latn-ZZ","tn":"tn-Latn-ZA","tnh":"tnh-Latn-ZZ","to":"to-Latn-TO","tof":"tof-Latn-ZZ","tog":"tog-Latn-MW","toq":"toq-Latn-ZZ","tpi":"tpi-Latn-PG","tpm":"tpm-Latn-ZZ","tpz":"tpz-Latn-ZZ","tqo":"tqo-Latn-ZZ","tr":"tr-Latn-TR","tru":"tru-Latn-TR","trv":"trv-Latn-TW","trw":"trw-Arab-ZZ","ts":"ts-Latn-ZA","tsd":"tsd-Grek-GR","tsf":"tsf-Deva-NP","tsg":"tsg-Latn-PH","tsj":"tsj-Tibt-BT","tsw":"tsw-Latn-ZZ","tt":"tt-Cyrl-RU","ttd":"ttd-Latn-ZZ","tte":"tte-Latn-ZZ","ttj":"ttj-Latn-UG","ttr":"ttr-Latn-ZZ","tts":"tts-Thai-TH","ttt":"ttt-Latn-AZ","tuh":"tuh-Latn-ZZ","tul":"tul-Latn-ZZ","tum":"tum-Latn-MW","tuq":"tuq-Latn-ZZ","tvd":"tvd-Latn-ZZ","tvl":"tvl-Latn-TV","tvu":"tvu-Latn-ZZ","twh":"twh-Latn-ZZ","twq":"twq-Latn-NE","txg":"txg-Tang-CN","ty":"ty-Latn-PF","tya":"tya-Latn-ZZ","tyv":"tyv-Cyrl-RU","tzm":"tzm-Latn-MA","ubu":"ubu-Latn-ZZ","udm":"udm-Cyrl-RU","ug":"ug-Arab-CN","ug-Cyrl":"ug-Cyrl-KZ","ug-KZ":"ug-Cyrl-KZ","ug-MN":"ug-Cyrl-MN","uga":"uga-Ugar-SY","uk":"uk-Cyrl-UA","uli":"uli-Latn-FM","umb":"umb-Latn-AO","und":"en-Latn-US","und-002":"en-Latn-NG","und-003":"en-Latn-US","und-005":"pt-Latn-BR","und-009":"en-Latn-AU","und-011":"en-Latn-NG","und-013":"es-Latn-MX","und-014":"sw-Latn-TZ","und-015":"ar-Arab-EG","und-017":"sw-Latn-CD","und-018":"en-Latn-ZA","und-019":"en-Latn-US","und-021":"en-Latn-US","und-029":"es-Latn-CU","und-030":"zh-Hans-CN","und-034":"hi-Deva-IN","und-035":"id-Latn-ID","und-039":"it-Latn-IT","und-053":"en-Latn-AU","und-054":"en-Latn-PG","und-057":"en-Latn-GU","und-061":"sm-Latn-WS","und-142":"zh-Hans-CN","und-143":"uz-Latn-UZ","und-145":"ar-Arab-SA","und-150":"ru-Cyrl-RU","und-151":"ru-Cyrl-RU","und-154":"en-Latn-GB","und-155":"de-Latn-DE","und-202":"en-Latn-NG","und-419":"es-Latn-419","und-AD":"ca-Latn-AD","und-Adlm":"ff-Adlm-GN","und-AE":"ar-Arab-AE","und-AF":"fa-Arab-AF","und-Aghb":"lez-Aghb-RU","und-Ahom":"aho-Ahom-IN","und-AL":"sq-Latn-AL","und-AM":"hy-Armn-AM","und-AO":"pt-Latn-AO","und-AQ":"und-Latn-AQ","und-AR":"es-Latn-AR","und-Arab":"ar-Arab-EG","und-Arab-CC":"ms-Arab-CC","und-Arab-CN":"ug-Arab-CN","und-Arab-GB":"ks-Arab-GB","und-Arab-ID":"ms-Arab-ID","und-Arab-IN":"ur-Arab-IN","und-Arab-KH":"cja-Arab-KH","und-Arab-MN":"kk-Arab-MN","und-Arab-MU":"ur-Arab-MU","und-Arab-NG":"ha-Arab-NG","und-Arab-PK":"ur-Arab-PK","und-Arab-TG":"apd-Arab-TG","und-Arab-TH":"mfa-Arab-TH","und-Arab-TJ":"fa-Arab-TJ","und-Arab-TR":"az-Arab-TR","und-Arab-YT":"swb-Arab-YT","und-Armi":"arc-Armi-IR","und-Armn":"hy-Armn-AM","und-AS":"sm-Latn-AS","und-AT":"de-Latn-AT","und-Avst":"ae-Avst-IR","und-AW":"nl-Latn-AW","und-AX":"sv-Latn-AX","und-AZ":"az-Latn-AZ","und-BA":"bs-Latn-BA","und-Bali":"ban-Bali-ID","und-Bamu":"bax-Bamu-CM","und-Bass":"bsq-Bass-LR","und-Batk":"bbc-Batk-ID","und-BD":"bn-Beng-BD","und-BE":"nl-Latn-BE","und-Beng":"bn-Beng-BD","und-BF":"fr-Latn-BF","und-BG":"bg-Cyrl-BG","und-BH":"ar-Arab-BH","und-Bhks":"sa-Bhks-IN","und-BI":"rn-Latn-BI","und-BJ":"fr-Latn-BJ","und-BL":"fr-Latn-BL","und-BN":"ms-Latn-BN","und-BO":"es-Latn-BO","und-Bopo":"zh-Bopo-TW","und-BQ":"pap-Latn-BQ","und-BR":"pt-Latn-BR","und-Brah":"pka-Brah-IN","und-Brai":"fr-Brai-FR","und-BT":"dz-Tibt-BT","und-Bugi":"bug-Bugi-ID","und-Buhd":"bku-Buhd-PH","und-BV":"und-Latn-BV","und-BY":"be-Cyrl-BY","und-Cakm":"ccp-Cakm-BD","und-Cans":"cr-Cans-CA","und-Cari":"xcr-Cari-TR","und-CD":"sw-Latn-CD","und-CF":"fr-Latn-CF","und-CG":"fr-Latn-CG","und-CH":"de-Latn-CH","und-Cham":"cjm-Cham-VN","und-Cher":"chr-Cher-US","und-CI":"fr-Latn-CI","und-CL":"es-Latn-CL","und-CM":"fr-Latn-CM","und-CN":"zh-Hans-CN","und-CO":"es-Latn-CO","und-Copt":"cop-Copt-EG","und-CP":"und-Latn-CP","und-Cprt":"grc-Cprt-CY","und-CR":"es-Latn-CR","und-CU":"es-Latn-CU","und-CV":"pt-Latn-CV","und-CW":"pap-Latn-CW","und-CY":"el-Grek-CY","und-Cyrl":"ru-Cyrl-RU","und-Cyrl-AL":"mk-Cyrl-AL","und-Cyrl-BA":"sr-Cyrl-BA","und-Cyrl-GE":"ab-Cyrl-GE","und-Cyrl-GR":"mk-Cyrl-GR","und-Cyrl-MD":"uk-Cyrl-MD","und-Cyrl-RO":"bg-Cyrl-RO","und-Cyrl-SK":"uk-Cyrl-SK","und-Cyrl-TR":"kbd-Cyrl-TR","und-Cyrl-XK":"sr-Cyrl-XK","und-CZ":"cs-Latn-CZ","und-DE":"de-Latn-DE","und-Deva":"hi-Deva-IN","und-Deva-BT":"ne-Deva-BT","und-Deva-FJ":"hif-Deva-FJ","und-Deva-MU":"bho-Deva-MU","und-Deva-PK":"btv-Deva-PK","und-DJ":"aa-Latn-DJ","und-DK":"da-Latn-DK","und-DO":"es-Latn-DO","und-Dupl":"fr-Dupl-FR","und-DZ":"ar-Arab-DZ","und-EA":"es-Latn-EA","und-EC":"es-Latn-EC","und-EE":"et-Latn-EE","und-EG":"ar-Arab-EG","und-Egyp":"egy-Egyp-EG","und-EH":"ar-Arab-EH","und-Elba":"sq-Elba-AL","und-ER":"ti-Ethi-ER","und-ES":"es-Latn-ES","und-ET":"am-Ethi-ET","und-Ethi":"am-Ethi-ET","und-EU":"en-Latn-GB","und-EZ":"de-Latn-EZ","und-FI":"fi-Latn-FI","und-FO":"fo-Latn-FO","und-FR":"fr-Latn-FR","und-GA":"fr-Latn-GA","und-GE":"ka-Geor-GE","und-Geor":"ka-Geor-GE","und-GF":"fr-Latn-GF","und-GH":"ak-Latn-GH","und-GL":"kl-Latn-GL","und-Glag":"cu-Glag-BG","und-GN":"fr-Latn-GN","und-Gonm":"gon-Gonm-IN","und-Goth":"got-Goth-UA","und-GP":"fr-Latn-GP","und-GQ":"es-Latn-GQ","und-GR":"el-Grek-GR","und-Gran":"sa-Gran-IN","und-Grek":"el-Grek-GR","und-Grek-TR":"bgx-Grek-TR","und-GS":"und-Latn-GS","und-GT":"es-Latn-GT","und-Gujr":"gu-Gujr-IN","und-Guru":"pa-Guru-IN","und-GW":"pt-Latn-GW","und-Hanb":"zh-Hanb-TW","und-Hang":"ko-Hang-KR","und-Hani":"zh-Hani-CN","und-Hano":"hnn-Hano-PH","und-Hans":"zh-Hans-CN","und-Hant":"zh-Hant-TW","und-Hatr":"mis-Hatr-IQ","und-Hebr":"he-Hebr-IL","und-Hebr-CA":"yi-Hebr-CA","und-Hebr-GB":"yi-Hebr-GB","und-Hebr-SE":"yi-Hebr-SE","und-Hebr-UA":"yi-Hebr-UA","und-Hebr-US":"yi-Hebr-US","und-Hira":"ja-Hira-JP","und-HK":"zh-Hant-HK","und-Hluw":"hlu-Hluw-TR","und-HM":"und-Latn-HM","und-Hmng":"hnj-Hmng-LA","und-HN":"es-Latn-HN","und-HR":"hr-Latn-HR","und-HT":"ht-Latn-HT","und-HU":"hu-Latn-HU","und-Hung":"hu-Hung-HU","und-IC":"es-Latn-IC","und-ID":"id-Latn-ID","und-IL":"he-Hebr-IL","und-IN":"hi-Deva-IN","und-IQ":"ar-Arab-IQ","und-IR":"fa-Arab-IR","und-IS":"is-Latn-IS","und-IT":"it-Latn-IT","und-Ital":"ett-Ital-IT","und-Jamo":"ko-Jamo-KR","und-Java":"jv-Java-ID","und-JO":"ar-Arab-JO","und-JP":"ja-Jpan-JP","und-Jpan":"ja-Jpan-JP","und-Kali":"eky-Kali-MM","und-Kana":"ja-Kana-JP","und-KE":"sw-Latn-KE","und-KG":"ky-Cyrl-KG","und-KH":"km-Khmr-KH","und-Khar":"pra-Khar-PK","und-Khmr":"km-Khmr-KH","und-Khoj":"sd-Khoj-IN","und-KM":"ar-Arab-KM","und-Knda":"kn-Knda-IN","und-Kore":"ko-Kore-KR","und-KP":"ko-Kore-KP","und-KR":"ko-Kore-KR","und-Kthi":"bho-Kthi-IN","und-KW":"ar-Arab-KW","und-KZ":"ru-Cyrl-KZ","und-LA":"lo-Laoo-LA","und-Lana":"nod-Lana-TH","und-Laoo":"lo-Laoo-LA","und-Latn-AF":"tk-Latn-AF","und-Latn-AM":"ku-Latn-AM","und-Latn-CN":"za-Latn-CN","und-Latn-CY":"tr-Latn-CY","und-Latn-DZ":"fr-Latn-DZ","und-Latn-ET":"en-Latn-ET","und-Latn-GE":"ku-Latn-GE","und-Latn-IR":"tk-Latn-IR","und-Latn-KM":"fr-Latn-KM","und-Latn-MA":"fr-Latn-MA","und-Latn-MK":"sq-Latn-MK","und-Latn-MM":"kac-Latn-MM","und-Latn-MO":"pt-Latn-MO","und-Latn-MR":"fr-Latn-MR","und-Latn-RU":"krl-Latn-RU","und-Latn-SY":"fr-Latn-SY","und-Latn-TN":"fr-Latn-TN","und-Latn-TW":"trv-Latn-TW","und-Latn-UA":"pl-Latn-UA","und-LB":"ar-Arab-LB","und-Lepc":"lep-Lepc-IN","und-LI":"de-Latn-LI","und-Limb":"lif-Limb-IN","und-Lina":"lab-Lina-GR","und-Linb":"grc-Linb-GR","und-Lisu":"lis-Lisu-CN","und-LK":"si-Sinh-LK","und-LS":"st-Latn-LS","und-LT":"lt-Latn-LT","und-LU":"fr-Latn-LU","und-LV":"lv-Latn-LV","und-LY":"ar-Arab-LY","und-Lyci":"xlc-Lyci-TR","und-Lydi":"xld-Lydi-TR","und-MA":"ar-Arab-MA","und-Mahj":"hi-Mahj-IN","und-Mand":"myz-Mand-IR","und-Mani":"xmn-Mani-CN","und-Marc":"bo-Marc-CN","und-MC":"fr-Latn-MC","und-MD":"ro-Latn-MD","und-ME":"sr-Latn-ME","und-Mend":"men-Mend-SL","und-Merc":"xmr-Merc-SD","und-Mero":"xmr-Mero-SD","und-MF":"fr-Latn-MF","und-MG":"mg-Latn-MG","und-MK":"mk-Cyrl-MK","und-ML":"bm-Latn-ML","und-Mlym":"ml-Mlym-IN","und-MM":"my-Mymr-MM","und-MN":"mn-Cyrl-MN","und-MO":"zh-Hant-MO","und-Modi":"mr-Modi-IN","und-Mong":"mn-Mong-CN","und-MQ":"fr-Latn-MQ","und-MR":"ar-Arab-MR","und-Mroo":"mro-Mroo-BD","und-MT":"mt-Latn-MT","und-Mtei":"mni-Mtei-IN","und-MU":"mfe-Latn-MU","und-Mult":"skr-Mult-PK","und-MV":"dv-Thaa-MV","und-MX":"es-Latn-MX","und-MY":"ms-Latn-MY","und-Mymr":"my-Mymr-MM","und-Mymr-IN":"kht-Mymr-IN","und-Mymr-TH":"mnw-Mymr-TH","und-MZ":"pt-Latn-MZ","und-NA":"af-Latn-NA","und-Narb":"xna-Narb-SA","und-Nbat":"arc-Nbat-JO","und-NC":"fr-Latn-NC","und-NE":"ha-Latn-NE","und-Newa":"new-Newa-NP","und-NI":"es-Latn-NI","und-Nkoo":"man-Nkoo-GN","und-NL":"nl-Latn-NL","und-NO":"nb-Latn-NO","und-NP":"ne-Deva-NP","und-Nshu":"zhx-Nshu-CN","und-Ogam":"sga-Ogam-IE","und-Olck":"sat-Olck-IN","und-OM":"ar-Arab-OM","und-Orkh":"otk-Orkh-MN","und-Orya":"or-Orya-IN","und-Osge":"osa-Osge-US","und-Osma":"so-Osma-SO","und-PA":"es-Latn-PA","und-Palm":"arc-Palm-SY","und-Pauc":"ctd-Pauc-MM","und-PE":"es-Latn-PE","und-Perm":"kv-Perm-RU","und-PF":"fr-Latn-PF","und-PG":"tpi-Latn-PG","und-PH":"fil-Latn-PH","und-Phag":"lzh-Phag-CN","und-Phli":"pal-Phli-IR","und-Phlp":"pal-Phlp-CN","und-Phnx":"phn-Phnx-LB","und-PK":"ur-Arab-PK","und-PL":"pl-Latn-PL","und-Plrd":"hmd-Plrd-CN","und-PM":"fr-Latn-PM","und-PR":"es-Latn-PR","und-Prti":"xpr-Prti-IR","und-PS":"ar-Arab-PS","und-PT":"pt-Latn-PT","und-PW":"pau-Latn-PW","und-PY":"gn-Latn-PY","und-QA":"ar-Arab-QA","und-QO":"en-Latn-IO","und-RE":"fr-Latn-RE","und-Rjng":"rej-Rjng-ID","und-RO":"ro-Latn-RO","und-RS":"sr-Cyrl-RS","und-RU":"ru-Cyrl-RU","und-Runr":"non-Runr-SE","und-RW":"rw-Latn-RW","und-SA":"ar-Arab-SA","und-Samr":"smp-Samr-IL","und-Sarb":"xsa-Sarb-YE","und-Saur":"saz-Saur-IN","und-SC":"fr-Latn-SC","und-SD":"ar-Arab-SD","und-SE":"sv-Latn-SE","und-Sgnw":"ase-Sgnw-US","und-Shaw":"en-Shaw-GB","und-Shrd":"sa-Shrd-IN","und-SI":"sl-Latn-SI","und-Sidd":"sa-Sidd-IN","und-Sind":"sd-Sind-IN","und-Sinh":"si-Sinh-LK","und-SJ":"nb-Latn-SJ","und-SK":"sk-Latn-SK","und-SM":"it-Latn-SM","und-SN":"fr-Latn-SN","und-SO":"so-Latn-SO","und-Sora":"srb-Sora-IN","und-Soyo":"cmg-Soyo-MN","und-SR":"nl-Latn-SR","und-ST":"pt-Latn-ST","und-Sund":"su-Sund-ID","und-SV":"es-Latn-SV","und-SY":"ar-Arab-SY","und-Sylo":"syl-Sylo-BD","und-Syrc":"syr-Syrc-IQ","und-Tagb":"tbw-Tagb-PH","und-Takr":"doi-Takr-IN","und-Tale":"tdd-Tale-CN","und-Talu":"khb-Talu-CN","und-Taml":"ta-Taml-IN","und-Tang":"txg-Tang-CN","und-Tavt":"blt-Tavt-VN","und-TD":"fr-Latn-TD","und-Telu":"te-Telu-IN","und-TF":"fr-Latn-TF","und-Tfng":"zgh-Tfng-MA","und-TG":"fr-Latn-TG","und-Tglg":"fil-Tglg-PH","und-TH":"th-Thai-TH","und-Thaa":"dv-Thaa-MV","und-Thai":"th-Thai-TH","und-Thai-CN":"lcp-Thai-CN","und-Thai-KH":"kdt-Thai-KH","und-Thai-LA":"kdt-Thai-LA","und-Tibt":"bo-Tibt-CN","und-Tirh":"mai-Tirh-IN","und-TJ":"tg-Cyrl-TJ","und-TK":"tkl-Latn-TK","und-TL":"pt-Latn-TL","und-TM":"tk-Latn-TM","und-TN":"ar-Arab-TN","und-TO":"to-Latn-TO","und-TR":"tr-Latn-TR","und-TV":"tvl-Latn-TV","und-TW":"zh-Hant-TW","und-TZ":"sw-Latn-TZ","und-UA":"uk-Cyrl-UA","und-UG":"sw-Latn-UG","und-Ugar":"uga-Ugar-SY","und-UY":"es-Latn-UY","und-UZ":"uz-Latn-UZ","und-VA":"it-Latn-VA","und-Vaii":"vai-Vaii-LR","und-VE":"es-Latn-VE","und-VN":"vi-Latn-VN","und-VU":"bi-Latn-VU","und-Wara":"hoc-Wara-IN","und-WF":"fr-Latn-WF","und-WS":"sm-Latn-WS","und-XK":"sq-Latn-XK","und-Xpeo":"peo-Xpeo-IR","und-Xsux":"akk-Xsux-IQ","und-YE":"ar-Arab-YE","und-Yiii":"ii-Yiii-CN","und-YT":"fr-Latn-YT","und-Zanb":"cmg-Zanb-MN","und-ZW":"sn-Latn-ZW","unr":"unr-Beng-IN","unr-Deva":"unr-Deva-NP","unr-NP":"unr-Deva-NP","unx":"unx-Beng-IN","ur":"ur-Arab-PK","uri":"uri-Latn-ZZ","urt":"urt-Latn-ZZ","urw":"urw-Latn-ZZ","usa":"usa-Latn-ZZ","utr":"utr-Latn-ZZ","uvh":"uvh-Latn-ZZ","uvl":"uvl-Latn-ZZ","uz":"uz-Latn-UZ","uz-AF":"uz-Arab-AF","uz-Arab":"uz-Arab-AF","uz-CN":"uz-Cyrl-CN","vag":"vag-Latn-ZZ","vai":"vai-Vaii-LR","van":"van-Latn-ZZ","ve":"ve-Latn-ZA","vec":"vec-Latn-IT","vep":"vep-Latn-RU","vi":"vi-Latn-VN","vic":"vic-Latn-SX","viv":"viv-Latn-ZZ","vls":"vls-Latn-BE","vmf":"vmf-Latn-DE","vmw":"vmw-Latn-MZ","vo":"vo-Latn-001","vot":"vot-Latn-RU","vro":"vro-Latn-EE","vun":"vun-Latn-TZ","vut":"vut-Latn-ZZ","wa":"wa-Latn-BE","wae":"wae-Latn-CH","waj":"waj-Latn-ZZ","wal":"wal-Ethi-ET","wan":"wan-Latn-ZZ","war":"war-Latn-PH","wbp":"wbp-Latn-AU","wbq":"wbq-Telu-IN","wbr":"wbr-Deva-IN","wci":"wci-Latn-ZZ","wer":"wer-Latn-ZZ","wgi":"wgi-Latn-ZZ","whg":"whg-Latn-ZZ","wib":"wib-Latn-ZZ","wiu":"wiu-Latn-ZZ","wiv":"wiv-Latn-ZZ","wja":"wja-Latn-ZZ","wji":"wji-Latn-ZZ","wls":"wls-Latn-WF","wmo":"wmo-Latn-ZZ","wnc":"wnc-Latn-ZZ","wni":"wni-Arab-KM","wnu":"wnu-Latn-ZZ","wo":"wo-Latn-SN","wob":"wob-Latn-ZZ","wos":"wos-Latn-ZZ","wrs":"wrs-Latn-ZZ","wsk":"wsk-Latn-ZZ","wtm":"wtm-Deva-IN","wuu":"wuu-Hans-CN","wuv":"wuv-Latn-ZZ","wwa":"wwa-Latn-ZZ","xav":"xav-Latn-BR","xbi":"xbi-Latn-ZZ","xcr":"xcr-Cari-TR","xes":"xes-Latn-ZZ","xh":"xh-Latn-ZA","xla":"xla-Latn-ZZ","xlc":"xlc-Lyci-TR","xld":"xld-Lydi-TR","xmf":"xmf-Geor-GE","xmn":"xmn-Mani-CN","xmr":"xmr-Merc-SD","xna":"xna-Narb-SA","xnr":"xnr-Deva-IN","xog":"xog-Latn-UG","xon":"xon-Latn-ZZ","xpr":"xpr-Prti-IR","xrb":"xrb-Latn-ZZ","xsa":"xsa-Sarb-YE","xsi":"xsi-Latn-ZZ","xsm":"xsm-Latn-ZZ","xsr":"xsr-Deva-NP","xwe":"xwe-Latn-ZZ","yam":"yam-Latn-ZZ","yao":"yao-Latn-MZ","yap":"yap-Latn-FM","yas":"yas-Latn-ZZ","yat":"yat-Latn-ZZ","yav":"yav-Latn-CM","yay":"yay-Latn-ZZ","yaz":"yaz-Latn-ZZ","yba":"yba-Latn-ZZ","ybb":"ybb-Latn-CM","yby":"yby-Latn-ZZ","yer":"yer-Latn-ZZ","ygr":"ygr-Latn-ZZ","ygw":"ygw-Latn-ZZ","yi":"yi-Hebr-001","yko":"yko-Latn-ZZ","yle":"yle-Latn-ZZ","ylg":"ylg-Latn-ZZ","yll":"yll-Latn-ZZ","yml":"yml-Latn-ZZ","yo":"yo-Latn-NG","yon":"yon-Latn-ZZ","yrb":"yrb-Latn-ZZ","yre":"yre-Latn-ZZ","yrl":"yrl-Latn-BR","yss":"yss-Latn-ZZ","yua":"yua-Latn-MX","yue":"yue-Hant-HK","yue-CN":"yue-Hans-CN","yue-Hans":"yue-Hans-CN","yuj":"yuj-Latn-ZZ","yut":"yut-Latn-ZZ","yuw":"yuw-Latn-ZZ","za":"za-Latn-CN","zag":"zag-Latn-SD","zdj":"zdj-Arab-KM","zea":"zea-Latn-NL","zgh":"zgh-Tfng-MA","zh":"zh-Hans-CN","zh-AU":"zh-Hant-AU","zh-BN":"zh-Hant-BN","zh-Bopo":"zh-Bopo-TW","zh-GB":"zh-Hant-GB","zh-GF":"zh-Hant-GF","zh-Hanb":"zh-Hanb-TW","zh-Hant":"zh-Hant-TW","zh-HK":"zh-Hant-HK","zh-ID":"zh-Hant-ID","zh-MO":"zh-Hant-MO","zh-MY":"zh-Hant-MY","zh-PA":"zh-Hant-PA","zh-PF":"zh-Hant-PF","zh-PH":"zh-Hant-PH","zh-SR":"zh-Hant-SR","zh-TH":"zh-Hant-TH","zh-TW":"zh-Hant-TW","zh-US":"zh-Hant-US","zh-VN":"zh-Hant-VN","zhx":"zhx-Nshu-CN","zia":"zia-Latn-ZZ","zlm":"zlm-Latn-TG","zmi":"zmi-Latn-MY","zne":"zne-Latn-ZZ","zu":"zu-Latn-ZA","zza":"zza-Latn-TR"},"plurals-type-cardinal":{"af":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ak":{"pluralRule-count-one":"n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000","pluralRule-count-other":" @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"am":{"pluralRule-count-one":"i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04","pluralRule-count-other":" @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ar":{"pluralRule-count-zero":"n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000","pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-two":"n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000","pluralRule-count-few":"n % 100 = 3..10 @integer 3~10, 103~110, 1003, … @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 103.0, 1003.0, …","pluralRule-count-many":"n % 100 = 11..99 @integer 11~26, 111, 1011, … @decimal 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 111.0, 1011.0, …","pluralRule-count-other":" @integer 100~102, 200~202, 300~302, 400~402, 500~502, 600, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ars":{"pluralRule-count-zero":"n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000","pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-two":"n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000","pluralRule-count-few":"n % 100 = 3..10 @integer 3~10, 103~110, 1003, … @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 103.0, 1003.0, …","pluralRule-count-many":"n % 100 = 11..99 @integer 11~26, 111, 1011, … @decimal 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 111.0, 1011.0, …","pluralRule-count-other":" @integer 100~102, 200~202, 300~302, 400~402, 500~502, 600, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"as":{"pluralRule-count-one":"i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04","pluralRule-count-other":" @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"asa":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ast":{"pluralRule-count-one":"i = 1 and v = 0 @integer 1","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"az":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"be":{"pluralRule-count-one":"n % 10 = 1 and n % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, …","pluralRule-count-few":"n % 10 = 2..4 and n % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 2.0, 3.0, 4.0, 22.0, 23.0, 24.0, 32.0, 33.0, 102.0, 1002.0, …","pluralRule-count-many":"n % 10 = 0 or n % 10 = 5..9 or n % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …","pluralRule-count-other":" @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.1, 1000.1, …"},"bem":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"bez":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"bg":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"bh":{"pluralRule-count-one":"n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000","pluralRule-count-other":" @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"bm":{"pluralRule-count-other":" @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"bn":{"pluralRule-count-one":"i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04","pluralRule-count-other":" @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"bo":{"pluralRule-count-other":" @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"br":{"pluralRule-count-one":"n % 10 = 1 and n % 100 != 11,71,91 @integer 1, 21, 31, 41, 51, 61, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 81.0, 101.0, 1001.0, …","pluralRule-count-two":"n % 10 = 2 and n % 100 != 12,72,92 @integer 2, 22, 32, 42, 52, 62, 82, 102, 1002, … @decimal 2.0, 22.0, 32.0, 42.0, 52.0, 62.0, 82.0, 102.0, 1002.0, …","pluralRule-count-few":"n % 10 = 3..4,9 and n % 100 != 10..19,70..79,90..99 @integer 3, 4, 9, 23, 24, 29, 33, 34, 39, 43, 44, 49, 103, 1003, … @decimal 3.0, 4.0, 9.0, 23.0, 24.0, 29.0, 33.0, 34.0, 103.0, 1003.0, …","pluralRule-count-many":"n != 0 and n % 1000000 = 0 @integer 1000000, … @decimal 1000000.0, 1000000.00, 1000000.000, …","pluralRule-count-other":" @integer 0, 5~8, 10~20, 100, 1000, 10000, 100000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, …"},"brx":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"bs":{"pluralRule-count-one":"v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …","pluralRule-count-few":"v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …","pluralRule-count-other":" @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ca":{"pluralRule-count-one":"i = 1 and v = 0 @integer 1","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ce":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"cgg":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"chr":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ckb":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"cs":{"pluralRule-count-one":"i = 1 and v = 0 @integer 1","pluralRule-count-few":"i = 2..4 and v = 0 @integer 2~4","pluralRule-count-many":"v != 0 @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …","pluralRule-count-other":" @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …"},"cy":{"pluralRule-count-zero":"n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000","pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-two":"n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000","pluralRule-count-few":"n = 3 @integer 3 @decimal 3.0, 3.00, 3.000, 3.0000","pluralRule-count-many":"n = 6 @integer 6 @decimal 6.0, 6.00, 6.000, 6.0000","pluralRule-count-other":" @integer 4, 5, 7~20, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"da":{"pluralRule-count-one":"n = 1 or t != 0 and i = 0,1 @integer 1 @decimal 0.1~1.6","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 2.0~3.4, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"de":{"pluralRule-count-one":"i = 1 and v = 0 @integer 1","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"dsb":{"pluralRule-count-one":"v = 0 and i % 100 = 1 or f % 100 = 1 @integer 1, 101, 201, 301, 401, 501, 601, 701, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …","pluralRule-count-two":"v = 0 and i % 100 = 2 or f % 100 = 2 @integer 2, 102, 202, 302, 402, 502, 602, 702, 1002, … @decimal 0.2, 1.2, 2.2, 3.2, 4.2, 5.2, 6.2, 7.2, 10.2, 100.2, 1000.2, …","pluralRule-count-few":"v = 0 and i % 100 = 3..4 or f % 100 = 3..4 @integer 3, 4, 103, 104, 203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal 0.3, 0.4, 1.3, 1.4, 2.3, 2.4, 3.3, 3.4, 4.3, 4.4, 5.3, 5.4, 6.3, 6.4, 7.3, 7.4, 10.3, 100.3, 1000.3, …","pluralRule-count-other":" @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"dv":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"dz":{"pluralRule-count-other":" @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ee":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"el":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"en":{"pluralRule-count-one":"i = 1 and v = 0 @integer 1","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"eo":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"es":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"et":{"pluralRule-count-one":"i = 1 and v = 0 @integer 1","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"eu":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"fa":{"pluralRule-count-one":"i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04","pluralRule-count-other":" @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ff":{"pluralRule-count-one":"i = 0,1 @integer 0, 1 @decimal 0.0~1.5","pluralRule-count-other":" @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"fi":{"pluralRule-count-one":"i = 1 and v = 0 @integer 1","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"fil":{"pluralRule-count-one":"v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9 @integer 0~3, 5, 7, 8, 10~13, 15, 17, 18, 20, 21, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.3, 0.5, 0.7, 0.8, 1.0~1.3, 1.5, 1.7, 1.8, 2.0, 2.1, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …","pluralRule-count-other":" @integer 4, 6, 9, 14, 16, 19, 24, 26, 104, 1004, … @decimal 0.4, 0.6, 0.9, 1.4, 1.6, 1.9, 2.4, 2.6, 10.4, 100.4, 1000.4, …"},"fo":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"fr":{"pluralRule-count-one":"i = 0,1 @integer 0, 1 @decimal 0.0~1.5","pluralRule-count-other":" @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"fur":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"fy":{"pluralRule-count-one":"i = 1 and v = 0 @integer 1","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ga":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-two":"n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000","pluralRule-count-few":"n = 3..6 @integer 3~6 @decimal 3.0, 4.0, 5.0, 6.0, 3.00, 4.00, 5.00, 6.00, 3.000, 4.000, 5.000, 6.000, 3.0000, 4.0000, 5.0000, 6.0000","pluralRule-count-many":"n = 7..10 @integer 7~10 @decimal 7.0, 8.0, 9.0, 10.0, 7.00, 8.00, 9.00, 10.00, 7.000, 8.000, 9.000, 10.000, 7.0000, 8.0000, 9.0000, 10.0000","pluralRule-count-other":" @integer 0, 11~25, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"gd":{"pluralRule-count-one":"n = 1,11 @integer 1, 11 @decimal 1.0, 11.0, 1.00, 11.00, 1.000, 11.000, 1.0000","pluralRule-count-two":"n = 2,12 @integer 2, 12 @decimal 2.0, 12.0, 2.00, 12.00, 2.000, 12.000, 2.0000","pluralRule-count-few":"n = 3..10,13..19 @integer 3~10, 13~19 @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 3.00","pluralRule-count-other":" @integer 0, 20~34, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"gl":{"pluralRule-count-one":"i = 1 and v = 0 @integer 1","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"gsw":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"gu":{"pluralRule-count-one":"i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04","pluralRule-count-other":" @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"guw":{"pluralRule-count-one":"n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000","pluralRule-count-other":" @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"gv":{"pluralRule-count-one":"v = 0 and i % 10 = 1 @integer 1, 11, 21, 31, 41, 51, 61, 71, 101, 1001, …","pluralRule-count-two":"v = 0 and i % 10 = 2 @integer 2, 12, 22, 32, 42, 52, 62, 72, 102, 1002, …","pluralRule-count-few":"v = 0 and i % 100 = 0,20,40,60,80 @integer 0, 20, 40, 60, 80, 100, 120, 140, 1000, 10000, 100000, 1000000, …","pluralRule-count-many":"v != 0 @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …","pluralRule-count-other":" @integer 3~10, 13~19, 23, 103, 1003, …"},"ha":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"haw":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"he":{"pluralRule-count-one":"i = 1 and v = 0 @integer 1","pluralRule-count-two":"i = 2 and v = 0 @integer 2","pluralRule-count-many":"v = 0 and n != 0..10 and n % 10 = 0 @integer 20, 30, 40, 50, 60, 70, 80, 90, 100, 1000, 10000, 100000, 1000000, …","pluralRule-count-other":" @integer 0, 3~17, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"hi":{"pluralRule-count-one":"i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04","pluralRule-count-other":" @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"hr":{"pluralRule-count-one":"v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …","pluralRule-count-few":"v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …","pluralRule-count-other":" @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"hsb":{"pluralRule-count-one":"v = 0 and i % 100 = 1 or f % 100 = 1 @integer 1, 101, 201, 301, 401, 501, 601, 701, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …","pluralRule-count-two":"v = 0 and i % 100 = 2 or f % 100 = 2 @integer 2, 102, 202, 302, 402, 502, 602, 702, 1002, … @decimal 0.2, 1.2, 2.2, 3.2, 4.2, 5.2, 6.2, 7.2, 10.2, 100.2, 1000.2, …","pluralRule-count-few":"v = 0 and i % 100 = 3..4 or f % 100 = 3..4 @integer 3, 4, 103, 104, 203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal 0.3, 0.4, 1.3, 1.4, 2.3, 2.4, 3.3, 3.4, 4.3, 4.4, 5.3, 5.4, 6.3, 6.4, 7.3, 7.4, 10.3, 100.3, 1000.3, …","pluralRule-count-other":" @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"hu":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"hy":{"pluralRule-count-one":"i = 0,1 @integer 0, 1 @decimal 0.0~1.5","pluralRule-count-other":" @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"id":{"pluralRule-count-other":" @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ig":{"pluralRule-count-other":" @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ii":{"pluralRule-count-other":" @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"in":{"pluralRule-count-other":" @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"io":{"pluralRule-count-one":"i = 1 and v = 0 @integer 1","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"is":{"pluralRule-count-one":"t = 0 and i % 10 = 1 and i % 100 != 11 or t != 0 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1~1.6, 10.1, 100.1, 1000.1, …","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"it":{"pluralRule-count-one":"i = 1 and v = 0 @integer 1","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"iu":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-two":"n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000","pluralRule-count-other":" @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"iw":{"pluralRule-count-one":"i = 1 and v = 0 @integer 1","pluralRule-count-two":"i = 2 and v = 0 @integer 2","pluralRule-count-many":"v = 0 and n != 0..10 and n % 10 = 0 @integer 20, 30, 40, 50, 60, 70, 80, 90, 100, 1000, 10000, 100000, 1000000, …","pluralRule-count-other":" @integer 0, 3~17, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ja":{"pluralRule-count-other":" @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"jbo":{"pluralRule-count-other":" @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"jgo":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ji":{"pluralRule-count-one":"i = 1 and v = 0 @integer 1","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"jmc":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"jv":{"pluralRule-count-other":" @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"jw":{"pluralRule-count-other":" @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ka":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"kab":{"pluralRule-count-one":"i = 0,1 @integer 0, 1 @decimal 0.0~1.5","pluralRule-count-other":" @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"kaj":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"kcg":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"kde":{"pluralRule-count-other":" @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"kea":{"pluralRule-count-other":" @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"kk":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"kkj":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"kl":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"km":{"pluralRule-count-other":" @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"kn":{"pluralRule-count-one":"i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04","pluralRule-count-other":" @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ko":{"pluralRule-count-other":" @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ks":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ksb":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ksh":{"pluralRule-count-zero":"n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000","pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ku":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"kw":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-two":"n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000","pluralRule-count-other":" @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ky":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"lag":{"pluralRule-count-zero":"n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000","pluralRule-count-one":"i = 0,1 and n != 0 @integer 1 @decimal 0.1~1.6","pluralRule-count-other":" @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"lb":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"lg":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"lkt":{"pluralRule-count-other":" @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ln":{"pluralRule-count-one":"n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000","pluralRule-count-other":" @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"lo":{"pluralRule-count-other":" @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"lt":{"pluralRule-count-one":"n % 10 = 1 and n % 100 != 11..19 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, …","pluralRule-count-few":"n % 10 = 2..9 and n % 100 != 11..19 @integer 2~9, 22~29, 102, 1002, … @decimal 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 22.0, 102.0, 1002.0, …","pluralRule-count-many":"f != 0 @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.1, 1000.1, …","pluralRule-count-other":" @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"lv":{"pluralRule-count-zero":"n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19 @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …","pluralRule-count-one":"n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.0, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …","pluralRule-count-other":" @integer 2~9, 22~29, 102, 1002, … @decimal 0.2~0.9, 1.2~1.9, 10.2, 100.2, 1000.2, …"},"mas":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"mg":{"pluralRule-count-one":"n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000","pluralRule-count-other":" @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"mgo":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"mk":{"pluralRule-count-one":"v = 0 and i % 10 = 1 or f % 10 = 1 @integer 1, 11, 21, 31, 41, 51, 61, 71, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …","pluralRule-count-other":" @integer 0, 2~10, 12~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.2~1.0, 1.2~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ml":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"mn":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"mo":{"pluralRule-count-one":"i = 1 and v = 0 @integer 1","pluralRule-count-few":"v != 0 or n = 0 or n != 1 and n % 100 = 1..19 @integer 0, 2~16, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …","pluralRule-count-other":" @integer 20~35, 100, 1000, 10000, 100000, 1000000, …"},"mr":{"pluralRule-count-one":"i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04","pluralRule-count-other":" @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ms":{"pluralRule-count-other":" @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"mt":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-few":"n = 0 or n % 100 = 2..10 @integer 0, 2~10, 102~107, 1002, … @decimal 0.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 10.0, 102.0, 1002.0, …","pluralRule-count-many":"n % 100 = 11..19 @integer 11~19, 111~117, 1011, … @decimal 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 111.0, 1011.0, …","pluralRule-count-other":" @integer 20~35, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"my":{"pluralRule-count-other":" @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"nah":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"naq":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-two":"n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000","pluralRule-count-other":" @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"nb":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"nd":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ne":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"nl":{"pluralRule-count-one":"i = 1 and v = 0 @integer 1","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"nn":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"nnh":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"no":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"nqo":{"pluralRule-count-other":" @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"nr":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"nso":{"pluralRule-count-one":"n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000","pluralRule-count-other":" @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ny":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"nyn":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"om":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"or":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"os":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"pa":{"pluralRule-count-one":"n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000","pluralRule-count-other":" @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"pap":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"pl":{"pluralRule-count-one":"i = 1 and v = 0 @integer 1","pluralRule-count-few":"v = 0 and i % 10 = 2..4 and i % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, …","pluralRule-count-many":"v = 0 and i != 1 and i % 10 = 0..1 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 12..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …","pluralRule-count-other":" @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"prg":{"pluralRule-count-zero":"n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19 @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …","pluralRule-count-one":"n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.0, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …","pluralRule-count-other":" @integer 2~9, 22~29, 102, 1002, … @decimal 0.2~0.9, 1.2~1.9, 10.2, 100.2, 1000.2, …"},"ps":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"pt":{"pluralRule-count-one":"i = 0..1 @integer 0, 1 @decimal 0.0~1.5","pluralRule-count-other":" @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"pt-PT":{"pluralRule-count-one":"i = 1 and v = 0 @integer 1","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"rm":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ro":{"pluralRule-count-one":"i = 1 and v = 0 @integer 1","pluralRule-count-few":"v != 0 or n = 0 or n != 1 and n % 100 = 1..19 @integer 0, 2~16, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …","pluralRule-count-other":" @integer 20~35, 100, 1000, 10000, 100000, 1000000, …"},"rof":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"root":{"pluralRule-count-other":" @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ru":{"pluralRule-count-one":"v = 0 and i % 10 = 1 and i % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, …","pluralRule-count-few":"v = 0 and i % 10 = 2..4 and i % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, …","pluralRule-count-many":"v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …","pluralRule-count-other":" @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"rwk":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"sah":{"pluralRule-count-other":" @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"saq":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"sd":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"sdh":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"se":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-two":"n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000","pluralRule-count-other":" @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"seh":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ses":{"pluralRule-count-other":" @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"sg":{"pluralRule-count-other":" @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"sh":{"pluralRule-count-one":"v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …","pluralRule-count-few":"v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …","pluralRule-count-other":" @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"shi":{"pluralRule-count-one":"i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04","pluralRule-count-few":"n = 2..10 @integer 2~10 @decimal 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 2.00, 3.00, 4.00, 5.00, 6.00, 7.00, 8.00","pluralRule-count-other":" @integer 11~26, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~1.9, 2.1~2.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"si":{"pluralRule-count-one":"n = 0,1 or i = 0 and f = 1 @integer 0, 1 @decimal 0.0, 0.1, 1.0, 0.00, 0.01, 1.00, 0.000, 0.001, 1.000, 0.0000, 0.0001, 1.0000","pluralRule-count-other":" @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.2~0.9, 1.1~1.8, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"sk":{"pluralRule-count-one":"i = 1 and v = 0 @integer 1","pluralRule-count-few":"i = 2..4 and v = 0 @integer 2~4","pluralRule-count-many":"v != 0 @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …","pluralRule-count-other":" @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …"},"sl":{"pluralRule-count-one":"v = 0 and i % 100 = 1 @integer 1, 101, 201, 301, 401, 501, 601, 701, 1001, …","pluralRule-count-two":"v = 0 and i % 100 = 2 @integer 2, 102, 202, 302, 402, 502, 602, 702, 1002, …","pluralRule-count-few":"v = 0 and i % 100 = 3..4 or v != 0 @integer 3, 4, 103, 104, 203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …","pluralRule-count-other":" @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …"},"sma":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-two":"n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000","pluralRule-count-other":" @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"smi":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-two":"n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000","pluralRule-count-other":" @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"smj":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-two":"n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000","pluralRule-count-other":" @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"smn":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-two":"n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000","pluralRule-count-other":" @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"sms":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-two":"n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000","pluralRule-count-other":" @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"sn":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"so":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"sq":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"sr":{"pluralRule-count-one":"v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …","pluralRule-count-few":"v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …","pluralRule-count-other":" @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ss":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ssy":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"st":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"sv":{"pluralRule-count-one":"i = 1 and v = 0 @integer 1","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"sw":{"pluralRule-count-one":"i = 1 and v = 0 @integer 1","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"syr":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ta":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"te":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"teo":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"th":{"pluralRule-count-other":" @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ti":{"pluralRule-count-one":"n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000","pluralRule-count-other":" @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"tig":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"tk":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"tl":{"pluralRule-count-one":"v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9 @integer 0~3, 5, 7, 8, 10~13, 15, 17, 18, 20, 21, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.3, 0.5, 0.7, 0.8, 1.0~1.3, 1.5, 1.7, 1.8, 2.0, 2.1, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …","pluralRule-count-other":" @integer 4, 6, 9, 14, 16, 19, 24, 26, 104, 1004, … @decimal 0.4, 0.6, 0.9, 1.4, 1.6, 1.9, 2.4, 2.6, 10.4, 100.4, 1000.4, …"},"tn":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"to":{"pluralRule-count-other":" @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"tr":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ts":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"tzm":{"pluralRule-count-one":"n = 0..1 or n = 11..99 @integer 0, 1, 11~24 @decimal 0.0, 1.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0","pluralRule-count-other":" @integer 2~10, 100~106, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ug":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"uk":{"pluralRule-count-one":"v = 0 and i % 10 = 1 and i % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, …","pluralRule-count-few":"v = 0 and i % 10 = 2..4 and i % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, …","pluralRule-count-many":"v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …","pluralRule-count-other":" @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ur":{"pluralRule-count-one":"i = 1 and v = 0 @integer 1","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"uz":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"ve":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"vi":{"pluralRule-count-other":" @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"vo":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"vun":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"wa":{"pluralRule-count-one":"n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000","pluralRule-count-other":" @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"wae":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"wo":{"pluralRule-count-other":" @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"xh":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"xog":{"pluralRule-count-one":"n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"yi":{"pluralRule-count-one":"i = 1 and v = 0 @integer 1","pluralRule-count-other":" @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"yo":{"pluralRule-count-other":" @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"yue":{"pluralRule-count-other":" @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"zh":{"pluralRule-count-other":" @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"},"zu":{"pluralRule-count-one":"i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04","pluralRule-count-other":" @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …"}},"timeData":{"AX":{"_allowed":"H","_preferred":"H"},"BQ":{"_allowed":"H","_preferred":"H"},"CP":{"_allowed":"H","_preferred":"H"},"CZ":{"_allowed":"H","_preferred":"H"},"DK":{"_allowed":"H","_preferred":"H"},"FI":{"_allowed":"H","_preferred":"H"},"ID":{"_allowed":"H","_preferred":"H"},"IS":{"_allowed":"H","_preferred":"H"},"ML":{"_allowed":"H","_preferred":"H"},"NE":{"_allowed":"H","_preferred":"H"},"RU":{"_allowed":"H","_preferred":"H"},"SE":{"_allowed":"H","_preferred":"H"},"SJ":{"_allowed":"H","_preferred":"H"},"SK":{"_allowed":"H","_preferred":"H"},"AS":{"_allowed":"h H","_preferred":"h"},"BT":{"_allowed":"h H","_preferred":"h"},"DJ":{"_allowed":"h H","_preferred":"h"},"ER":{"_allowed":"h H","_preferred":"h"},"GH":{"_allowed":"h H","_preferred":"h"},"IN":{"_allowed":"h H","_preferred":"h"},"LS":{"_allowed":"h H","_preferred":"h"},"PG":{"_allowed":"h H","_preferred":"h"},"PW":{"_allowed":"h H","_preferred":"h"},"SO":{"_allowed":"h H","_preferred":"h"},"TO":{"_allowed":"h H","_preferred":"h"},"VU":{"_allowed":"h H","_preferred":"h"},"WS":{"_allowed":"h H","_preferred":"h"},"001":{"_allowed":"H h","_preferred":"H"},"AL":{"_allowed":"h H hB","_preferred":"h"},"fr_CA":{"_allowed":"h H hB","_preferred":"h"},"TD":{"_allowed":"h H hB","_preferred":"h"},"ca_ES":{"_allowed":"H h hB","_preferred":"H"},"CF":{"_allowed":"H h hB","_preferred":"H"},"CM":{"_allowed":"H h hB","_preferred":"H"},"gl_ES":{"_allowed":"H h hB","_preferred":"H"},"LU":{"_allowed":"H h hB","_preferred":"H"},"NP":{"_allowed":"H h hB","_preferred":"H"},"PF":{"_allowed":"H h hB","_preferred":"H"},"SC":{"_allowed":"H h hB","_preferred":"H"},"SN":{"_allowed":"H h hB","_preferred":"H"},"TF":{"_allowed":"H h hB","_preferred":"H"},"CY":{"_allowed":"h H hb hB","_preferred":"h"},"GR":{"_allowed":"h H hb hB","_preferred":"h"},"CO":{"_allowed":"h H hB hb","_preferred":"h"},"DO":{"_allowed":"h H hB hb","_preferred":"h"},"KP":{"_allowed":"h H hB hb","_preferred":"h"},"KR":{"_allowed":"h H hB hb","_preferred":"h"},"NA":{"_allowed":"h H hB hb","_preferred":"h"},"PA":{"_allowed":"h H hB hb","_preferred":"h"},"PR":{"_allowed":"h H hB hb","_preferred":"h"},"VE":{"_allowed":"h H hB hb","_preferred":"h"},"AC":{"_allowed":"H h hb hB","_preferred":"H"},"AI":{"_allowed":"H h hb hB","_preferred":"H"},"BW":{"_allowed":"H h hb hB","_preferred":"H"},"BZ":{"_allowed":"H h hb hB","_preferred":"H"},"CC":{"_allowed":"H h hb hB","_preferred":"H"},"CK":{"_allowed":"H h hb hB","_preferred":"H"},"CX":{"_allowed":"H h hb hB","_preferred":"H"},"DG":{"_allowed":"H h hb hB","_preferred":"H"},"FK":{"_allowed":"H h hb hB","_preferred":"H"},"GB":{"_allowed":"H h hb hB","_preferred":"H"},"GG":{"_allowed":"H h hb hB","_preferred":"H"},"GI":{"_allowed":"H h hb hB","_preferred":"H"},"IE":{"_allowed":"H h hb hB","_preferred":"H"},"IM":{"_allowed":"H h hb hB","_preferred":"H"},"IO":{"_allowed":"H h hb hB","_preferred":"H"},"JE":{"_allowed":"H h hb hB","_preferred":"H"},"LT":{"_allowed":"H h hb hB","_preferred":"H"},"MK":{"_allowed":"H h hb hB","_preferred":"H"},"MN":{"_allowed":"H h hb hB","_preferred":"H"},"MS":{"_allowed":"H h hb hB","_preferred":"H"},"NF":{"_allowed":"H h hb hB","_preferred":"H"},"NG":{"_allowed":"H h hb hB","_preferred":"H"},"NR":{"_allowed":"H h hb hB","_preferred":"H"},"NU":{"_allowed":"H h hb hB","_preferred":"H"},"PN":{"_allowed":"H h hb hB","_preferred":"H"},"SH":{"_allowed":"H h hb hB","_preferred":"H"},"SX":{"_allowed":"H h hb hB","_preferred":"H"},"TA":{"_allowed":"H h hb hB","_preferred":"H"},"ZA":{"_allowed":"H h hb hB","_preferred":"H"},"af_ZA":{"_allowed":"H h hB hb","_preferred":"H"},"KG":{"_allowed":"H h hB hb","_preferred":"H"},"KM":{"_allowed":"H h hB hb","_preferred":"H"},"LK":{"_allowed":"H h hB hb","_preferred":"H"},"MA":{"_allowed":"H h hB hb","_preferred":"H"},"JP":{"_allowed":"H h K","_preferred":"H"},"AD":{"_allowed":"H hB","_preferred":"H"},"AM":{"_allowed":"H hB","_preferred":"H"},"AO":{"_allowed":"H hB","_preferred":"H"},"AT":{"_allowed":"H hB","_preferred":"H"},"AW":{"_allowed":"H hB","_preferred":"H"},"BE":{"_allowed":"H hB","_preferred":"H"},"BF":{"_allowed":"H hB","_preferred":"H"},"BJ":{"_allowed":"H hB","_preferred":"H"},"BL":{"_allowed":"H hB","_preferred":"H"},"BR":{"_allowed":"H hB","_preferred":"H"},"CG":{"_allowed":"H hB","_preferred":"H"},"CI":{"_allowed":"H hB","_preferred":"H"},"CV":{"_allowed":"H hB","_preferred":"H"},"DE":{"_allowed":"H hB","_preferred":"H"},"EE":{"_allowed":"H hB","_preferred":"H"},"FR":{"_allowed":"H hB","_preferred":"H"},"GA":{"_allowed":"H hB","_preferred":"H"},"GF":{"_allowed":"H hB","_preferred":"H"},"GN":{"_allowed":"H hB","_preferred":"H"},"GP":{"_allowed":"H hB","_preferred":"H"},"GW":{"_allowed":"H hB","_preferred":"H"},"HR":{"_allowed":"H hB","_preferred":"H"},"IL":{"_allowed":"H hB","_preferred":"H"},"IT":{"_allowed":"H hB","_preferred":"H"},"KZ":{"_allowed":"H hB","_preferred":"H"},"MC":{"_allowed":"H hB","_preferred":"H"},"MD":{"_allowed":"H hB","_preferred":"H"},"MF":{"_allowed":"H hB","_preferred":"H"},"MQ":{"_allowed":"H hB","_preferred":"H"},"MZ":{"_allowed":"H hB","_preferred":"H"},"NC":{"_allowed":"H hB","_preferred":"H"},"NL":{"_allowed":"H hB","_preferred":"H"},"PM":{"_allowed":"H hB","_preferred":"H"},"PT":{"_allowed":"H hB","_preferred":"H"},"RE":{"_allowed":"H hB","_preferred":"H"},"RO":{"_allowed":"H hB","_preferred":"H"},"SI":{"_allowed":"H hB","_preferred":"H"},"SM":{"_allowed":"H hB","_preferred":"H"},"SR":{"_allowed":"H hB","_preferred":"H"},"ST":{"_allowed":"H hB","_preferred":"H"},"TG":{"_allowed":"H hB","_preferred":"H"},"TR":{"_allowed":"H hB","_preferred":"H"},"WF":{"_allowed":"H hB","_preferred":"H"},"YT":{"_allowed":"H hB","_preferred":"H"},"BD":{"_allowed":"h hB H","_preferred":"h"},"PK":{"_allowed":"h hB H","_preferred":"h"},"AZ":{"_allowed":"H hB h","_preferred":"H"},"BA":{"_allowed":"H hB h","_preferred":"H"},"BG":{"_allowed":"H hB h","_preferred":"H"},"CH":{"_allowed":"H hB h","_preferred":"H"},"GE":{"_allowed":"H hB h","_preferred":"H"},"LI":{"_allowed":"H hB h","_preferred":"H"},"ME":{"_allowed":"H hB h","_preferred":"H"},"RS":{"_allowed":"H hB h","_preferred":"H"},"UA":{"_allowed":"H hB h","_preferred":"H"},"UZ":{"_allowed":"H hB h","_preferred":"H"},"VA":{"_allowed":"H hB h","_preferred":"H"},"XK":{"_allowed":"H hB h","_preferred":"H"},"AG":{"_allowed":"h hb H hB","_preferred":"h"},"AU":{"_allowed":"h hb H hB","_preferred":"h"},"BB":{"_allowed":"h hb H hB","_preferred":"h"},"BM":{"_allowed":"h hb H hB","_preferred":"h"},"BS":{"_allowed":"h hb H hB","_preferred":"h"},"CA":{"_allowed":"h hb H hB","_preferred":"h"},"DM":{"_allowed":"h hb H hB","_preferred":"h"},"FJ":{"_allowed":"h hb H hB","_preferred":"h"},"FM":{"_allowed":"h hb H hB","_preferred":"h"},"GD":{"_allowed":"h hb H hB","_preferred":"h"},"GM":{"_allowed":"h hb H hB","_preferred":"h"},"GU":{"_allowed":"h hb H hB","_preferred":"h"},"GY":{"_allowed":"h hb H hB","_preferred":"h"},"JM":{"_allowed":"h hb H hB","_preferred":"h"},"KI":{"_allowed":"h hb H hB","_preferred":"h"},"KN":{"_allowed":"h hb H hB","_preferred":"h"},"KY":{"_allowed":"h hb H hB","_preferred":"h"},"LC":{"_allowed":"h hb H hB","_preferred":"h"},"LR":{"_allowed":"h hb H hB","_preferred":"h"},"MH":{"_allowed":"h hb H hB","_preferred":"h"},"MP":{"_allowed":"h hb H hB","_preferred":"h"},"MW":{"_allowed":"h hb H hB","_preferred":"h"},"NZ":{"_allowed":"h hb H hB","_preferred":"h"},"SB":{"_allowed":"h hb H hB","_preferred":"h"},"SG":{"_allowed":"h hb H hB","_preferred":"h"},"SL":{"_allowed":"h hb H hB","_preferred":"h"},"SS":{"_allowed":"h hb H hB","_preferred":"h"},"SZ":{"_allowed":"h hb H hB","_preferred":"h"},"TC":{"_allowed":"h hb H hB","_preferred":"h"},"TT":{"_allowed":"h hb H hB","_preferred":"h"},"UM":{"_allowed":"h hb H hB","_preferred":"h"},"US":{"_allowed":"h hb H hB","_preferred":"h"},"VC":{"_allowed":"h hb H hB","_preferred":"h"},"VG":{"_allowed":"h hb H hB","_preferred":"h"},"VI":{"_allowed":"h hb H hB","_preferred":"h"},"ZM":{"_allowed":"h hb H hB","_preferred":"h"},"AR":{"_allowed":"H hB h hb","_preferred":"H"},"BO":{"_allowed":"H hB h hb","_preferred":"H"},"CL":{"_allowed":"H hB h hb","_preferred":"H"},"CR":{"_allowed":"H hB h hb","_preferred":"H"},"CU":{"_allowed":"H hB h hb","_preferred":"H"},"EA":{"_allowed":"H hB h hb","_preferred":"H"},"EC":{"_allowed":"H hB h hb","_preferred":"H"},"ES":{"_allowed":"H hB h hb","_preferred":"H"},"GQ":{"_allowed":"H hB h hb","_preferred":"H"},"GT":{"_allowed":"H hB h hb","_preferred":"H"},"HN":{"_allowed":"H hB h hb","_preferred":"H"},"IC":{"_allowed":"H hB h hb","_preferred":"H"},"MX":{"_allowed":"H hB h hb","_preferred":"H"},"NI":{"_allowed":"H hB h hb","_preferred":"H"},"PE":{"_allowed":"H hB h hb","_preferred":"H"},"SV":{"_allowed":"H hB h hb","_preferred":"H"},"UY":{"_allowed":"H hB h hb","_preferred":"H"},"AE":{"_allowed":"h hB hb H","_preferred":"h"},"BH":{"_allowed":"h hB hb H","_preferred":"h"},"DZ":{"_allowed":"h hB hb H","_preferred":"h"},"EG":{"_allowed":"h hB hb H","_preferred":"h"},"EH":{"_allowed":"h hB hb H","_preferred":"h"},"IQ":{"_allowed":"h hB hb H","_preferred":"h"},"JO":{"_allowed":"h hB hb H","_preferred":"h"},"KW":{"_allowed":"h hB hb H","_preferred":"h"},"LB":{"_allowed":"h hB hb H","_preferred":"h"},"LY":{"_allowed":"h hB hb H","_preferred":"h"},"MR":{"_allowed":"h hB hb H","_preferred":"h"},"OM":{"_allowed":"h hB hb H","_preferred":"h"},"PH":{"_allowed":"h hB hb H","_preferred":"h"},"PS":{"_allowed":"h hB hb H","_preferred":"h"},"QA":{"_allowed":"h hB hb H","_preferred":"h"},"SA":{"_allowed":"h hB hb H","_preferred":"h"},"SD":{"_allowed":"h hB hb H","_preferred":"h"},"SY":{"_allowed":"h hB hb H","_preferred":"h"},"TN":{"_allowed":"h hB hb H","_preferred":"h"},"YE":{"_allowed":"h hB hb H","_preferred":"h"},"AF":{"_allowed":"H hb hB h","_preferred":"H"},"IR":{"_allowed":"H hb hB h","_preferred":"H"},"LA":{"_allowed":"H hb hB h","_preferred":"H"},"LV":{"_allowed":"H hB hb h","_preferred":"H"},"TL":{"_allowed":"H hB hb h","_preferred":"H"},"zu_ZA":{"_allowed":"H hB hb h","_preferred":"H"},"CD":{"_allowed":"hB H","_preferred":"H"},"kn_IN":{"_allowed":"hB h H","_preferred":"h"},"ml_IN":{"_allowed":"hB h H","_preferred":"h"},"te_IN":{"_allowed":"hB h H","_preferred":"h"},"KH":{"_allowed":"hB h H hb","_preferred":"h"},"ta_IN":{"_allowed":"hB h hb H","_preferred":"h"},"BN":{"_allowed":"hb hB H h","_preferred":"h"},"MY":{"_allowed":"hb hB H h","_preferred":"h"},"ET":{"_allowed":"hB hb h H","_preferred":"h"},"gu_IN":{"_allowed":"hB hb h H","_preferred":"h"},"mr_IN":{"_allowed":"hB hb h H","_preferred":"h"},"pa_IN":{"_allowed":"hB hb h H","_preferred":"h"},"KE":{"_allowed":"hB hb h H","_preferred":"H"},"MM":{"_allowed":"hB hb h H","_preferred":"H"},"TZ":{"_allowed":"hB hb h H","_preferred":"H"},"UG":{"_allowed":"hB hb h H","_preferred":"H"},"CN":{"_allowed":"hB hb H h","_preferred":"h"},"HK":{"_allowed":"hB hb H h","_preferred":"h"},"MO":{"_allowed":"hB hb H h","_preferred":"h"},"TW":{"_allowed":"hB hb H h","_preferred":"h"}},"weekData":{"minDays":{"001":"1","AD":"4","AN":"4","AT":"4","AX":"4","BE":"4","BG":"4","CH":"4","CZ":"4","DE":"4","DK":"4","EE":"4","ES":"4","FI":"4","FJ":"4","FO":"4","FR":"4","GB":"4","GF":"4","GG":"4","GI":"4","GP":"4","GR":"4","GU":"1","HU":"4","IE":"4","IM":"4","IS":"4","IT":"4","JE":"4","LI":"4","LT":"4","LU":"4","MC":"4","MQ":"4","NL":"4","NO":"4","PL":"4","PT":"4","RE":"4","RU":"4","SE":"4","SJ":"4","SK":"4","SM":"4","UM":"1","US":"1","VA":"4","VI":"1"},"firstDay":{"001":"mon","AD":"mon","AE":"sat","AF":"sat","AG":"sun","AI":"mon","AL":"mon","AM":"mon","AN":"mon","AR":"sun","AS":"sun","AT":"mon","AU":"sun","AX":"mon","AZ":"mon","BA":"mon","BD":"fri","BE":"mon","BG":"mon","BH":"sat","BM":"mon","BN":"mon","BR":"sun","BS":"sun","BT":"sun","BW":"sun","BY":"mon","BZ":"sun","CA":"sun","CH":"mon","CL":"mon","CM":"mon","CN":"sun","CO":"sun","CR":"mon","CY":"mon","CZ":"mon","DE":"mon","DJ":"sat","DK":"mon","DM":"sun","DO":"sun","DZ":"sat","EC":"mon","EE":"mon","EG":"sat","ES":"mon","ET":"sun","FI":"mon","FJ":"mon","FO":"mon","FR":"mon","GB":"mon","GB-alt-variant":"sun","GE":"mon","GF":"mon","GP":"mon","GR":"mon","GT":"sun","GU":"sun","HK":"sun","HN":"sun","HR":"mon","HU":"mon","ID":"sun","IE":"sun","IL":"sun","IN":"sun","IQ":"sat","IR":"sat","IS":"mon","IT":"mon","JM":"sun","JO":"sat","JP":"sun","KE":"sun","KG":"mon","KH":"sun","KR":"sun","KW":"sat","KZ":"mon","LA":"sun","LB":"mon","LI":"mon","LK":"mon","LT":"mon","LU":"mon","LV":"mon","LY":"sat","MA":"sat","MC":"mon","MD":"mon","ME":"mon","MH":"sun","MK":"mon","MM":"sun","MN":"mon","MO":"sun","MQ":"mon","MT":"sun","MV":"fri","MX":"sun","MY":"mon","MZ":"sun","NI":"sun","NL":"mon","NO":"mon","NP":"sun","NZ":"mon","OM":"sat","PA":"sun","PE":"sun","PH":"sun","PK":"sun","PL":"mon","PR":"sun","PT":"mon","PY":"sun","QA":"sat","RE":"mon","RO":"mon","RS":"mon","RU":"mon","SA":"sun","SD":"sat","SE":"mon","SG":"sun","SI":"mon","SK":"mon","SM":"mon","SV":"sun","SY":"sat","TH":"sun","TJ":"mon","TM":"mon","TN":"sun","TR":"mon","TT":"sun","TW":"sun","UA":"mon","UM":"sun","US":"sun","UY":"mon","UZ":"mon","VA":"mon","VE":"sun","VI":"sun","VN":"mon","WS":"sun","XK":"mon","YE":"sun","ZA":"sun","ZW":"sun"},"weekendStart":{"001":"sat","AE":"fri","AF":"thu","BH":"fri","DZ":"fri","EG":"fri","IL":"fri","IN":"sun","IQ":"fri","IR":"fri","JO":"fri","KW":"fri","LY":"fri","MA":"fri","OM":"fri","QA":"fri","SA":"fri","SD":"fri","SY":"fri","TN":"fri","YE":"fri"},"weekendEnd":{"001":"sun","AE":"sat","AF":"fri","BH":"sat","DZ":"sat","EG":"sat","IL":"sat","IQ":"sat","IR":"fri","JO":"sat","KW":"sat","LY":"sat","MA":"sat","OM":"sat","QA":"sat","SA":"sat","SD":"sat","SY":"sat","TN":"sat","YE":"sat"},"af":{"_ordering":"weekOfDate weekOfInterval weekOfMonth"},"am az bs cs cy da el et hi ky lt mk sk ta th":{"_ordering":"weekOfYear weekOfMonth"},"ar fil gu hu hy id kk ko":{"_ordering":"weekOfMonth"},"be ro ru":{"_ordering":"weekOfInterval weekOfMonth"},"bg de iw pt ur zh":{"_ordering":"weekOfDate weekOfMonth weekOfInterval"},"ca es fr gl":{"_ordering":"weekOfDate"},"en bn ja ka":{"_ordering":"weekOfDate weekOfMonth"},"eu":{"_ordering":"weekOfMonth weekOfDate"},"fa hr it lv pl si sr uk uz":{"_ordering":"weekOfMonth weekOfInterval"},"fi zh-TW":{"_ordering":"weekOfYear weekOfDate weekOfMonth"},"is mn no sv vi":{"_ordering":"weekOfYear weekOfMonth weekOfInterval"},"km mr":{"_ordering":"weekOfMonth weekOfYear"},"kn ml pa":{"_ordering":"weekOfMonth weekOfDate weekOfYear"},"lo sq":{"_ordering":"weekOfMonth weekOfInterval weekOfDate weekOfYear"},"ms tr":{"_ordering":"weekOfMonth weekOfYear weekOfInterval weekOfDate"},"nl":{"_ordering":"weekOfDate weekOfYear weekOfMonth"},"sl":{"_ordering":"weekOfInterval"},"sw te":{"_ordering":"weekOfMonth weekOfInterval weekOfYear"},"und":{"_ordering":"weekOfYear"},"zu":{"_ordering":"weekOfYear weekOfInterval"}},"currencyData":{"fractions":{"ADP":{"_rounding":"0","_digits":"0"},"AFN":{"_rounding":"0","_digits":"0"},"ALL":{"_rounding":"0","_digits":"0"},"AMD":{"_rounding":"0","_digits":"0"},"BHD":{"_rounding":"0","_digits":"3"},"BIF":{"_rounding":"0","_digits":"0"},"BYN":{"_rounding":"0","_digits":"2"},"BYR":{"_rounding":"0","_digits":"0"},"CAD":{"_rounding":"0","_digits":"2","_cashRounding":"5"},"CHF":{"_rounding":"0","_digits":"2","_cashRounding":"5"},"CLF":{"_rounding":"0","_digits":"4"},"CLP":{"_rounding":"0","_digits":"0"},"COP":{"_rounding":"0","_digits":"0"},"CRC":{"_rounding":"0","_digits":"2","_cashRounding":"0","_cashDigits":"0"},"CZK":{"_rounding":"0","_digits":"2","_cashRounding":"0","_cashDigits":"0"},"DEFAULT":{"_rounding":"0","_digits":"2"},"DJF":{"_rounding":"0","_digits":"0"},"DKK":{"_rounding":"0","_digits":"2","_cashRounding":"50"},"ESP":{"_rounding":"0","_digits":"0"},"GNF":{"_rounding":"0","_digits":"0"},"GYD":{"_rounding":"0","_digits":"0"},"HUF":{"_rounding":"0","_digits":"2","_cashRounding":"0","_cashDigits":"0"},"IDR":{"_rounding":"0","_digits":"0"},"IQD":{"_rounding":"0","_digits":"0"},"IRR":{"_rounding":"0","_digits":"0"},"ISK":{"_rounding":"0","_digits":"0"},"ITL":{"_rounding":"0","_digits":"0"},"JOD":{"_rounding":"0","_digits":"3"},"JPY":{"_rounding":"0","_digits":"0"},"KMF":{"_rounding":"0","_digits":"0"},"KPW":{"_rounding":"0","_digits":"0"},"KRW":{"_rounding":"0","_digits":"0"},"KWD":{"_rounding":"0","_digits":"3"},"LAK":{"_rounding":"0","_digits":"0"},"LBP":{"_rounding":"0","_digits":"0"},"LUF":{"_rounding":"0","_digits":"0"},"LYD":{"_rounding":"0","_digits":"3"},"MGA":{"_rounding":"0","_digits":"0"},"MGF":{"_rounding":"0","_digits":"0"},"MMK":{"_rounding":"0","_digits":"0"},"MNT":{"_rounding":"0","_digits":"0"},"MRO":{"_rounding":"0","_digits":"0"},"MUR":{"_rounding":"0","_digits":"0"},"NOK":{"_rounding":"0","_digits":"2","_cashRounding":"0","_cashDigits":"0"},"OMR":{"_rounding":"0","_digits":"3"},"PKR":{"_rounding":"0","_digits":"0"},"PYG":{"_rounding":"0","_digits":"0"},"RSD":{"_rounding":"0","_digits":"0"},"RWF":{"_rounding":"0","_digits":"0"},"SEK":{"_rounding":"0","_digits":"2","_cashRounding":"0","_cashDigits":"0"},"SLL":{"_rounding":"0","_digits":"0"},"SOS":{"_rounding":"0","_digits":"0"},"STD":{"_rounding":"0","_digits":"0"},"SYP":{"_rounding":"0","_digits":"0"},"TMM":{"_rounding":"0","_digits":"0"},"TND":{"_rounding":"0","_digits":"3"},"TRL":{"_rounding":"0","_digits":"0"},"TWD":{"_rounding":"0","_digits":"2","_cashRounding":"0","_cashDigits":"0"},"TZS":{"_rounding":"0","_digits":"0"},"UGX":{"_rounding":"0","_digits":"0"},"UYI":{"_rounding":"0","_digits":"0"},"UZS":{"_rounding":"0","_digits":"0"},"VND":{"_rounding":"0","_digits":"0"},"VUV":{"_rounding":"0","_digits":"0"},"XAF":{"_rounding":"0","_digits":"0"},"XOF":{"_rounding":"0","_digits":"0"},"XPF":{"_rounding":"0","_digits":"0"},"YER":{"_rounding":"0","_digits":"0"},"ZMK":{"_rounding":"0","_digits":"0"},"ZWD":{"_rounding":"0","_digits":"0"}},"region":{"AC":[{"SHP":{"_from":"1976-01-01"}}],"AD":[{"ESP":{"_from":"1873-01-01","_to":"2002-02-28"}},{"ADP":{"_from":"1936-01-01","_to":"2001-12-31"}},{"FRF":{"_from":"1960-01-01","_to":"2002-02-17"}},{"EUR":{"_from":"1999-01-01"}}],"AE":[{"AED":{"_from":"1973-05-19"}}],"AF":[{"AFA":{"_from":"1927-03-14","_to":"2002-12-31"}},{"AFN":{"_from":"2002-10-07"}}],"AG":[{"XCD":{"_from":"1965-10-06"}}],"AI":[{"XCD":{"_from":"1965-10-06"}}],"AL":[{"ALK":{"_from":"1946-11-01","_to":"1965-08-16"}},{"ALL":{"_from":"1965-08-16"}}],"AM":[{"SUR":{"_from":"1961-01-01","_to":"1991-12-25"}},{"RUR":{"_from":"1991-12-25","_to":"1993-11-22"}},{"AMD":{"_from":"1993-11-22"}}],"AO":[{"AOK":{"_from":"1977-01-08","_to":"1991-03-01"}},{"AON":{"_from":"1990-09-25","_to":"2000-02-01"}},{"AOR":{"_from":"1995-07-01","_to":"2000-02-01"}},{"AOA":{"_from":"1999-12-13"}}],"AQ":[{"XXX":{"_tender":"false"}}],"AR":[{"ARM":{"_from":"1881-11-05","_to":"1970-01-01"}},{"ARL":{"_from":"1970-01-01","_to":"1983-06-01"}},{"ARP":{"_from":"1983-06-01","_to":"1985-06-14"}},{"ARA":{"_from":"1985-06-14","_to":"1992-01-01"}},{"ARS":{"_from":"1992-01-01"}}],"AS":[{"USD":{"_from":"1904-07-16"}}],"AT":[{"ATS":{"_from":"1947-12-04","_to":"2002-02-28"}},{"EUR":{"_from":"1999-01-01"}}],"AU":[{"AUD":{"_from":"1966-02-14"}}],"AW":[{"ANG":{"_from":"1940-05-10","_to":"1986-01-01"}},{"AWG":{"_from":"1986-01-01"}}],"AX":[{"EUR":{"_from":"1999-01-01"}}],"AZ":[{"SUR":{"_from":"1961-01-01","_to":"1991-12-25"}},{"RUR":{"_from":"1991-12-25","_to":"1994-01-01"}},{"AZM":{"_from":"1993-11-22","_to":"2006-12-31"}},{"AZN":{"_from":"2006-01-01"}}],"BA":[{"YUD":{"_from":"1966-01-01","_to":"1990-01-01"}},{"YUN":{"_from":"1990-01-01","_to":"1992-07-01"}},{"YUR":{"_from":"1992-07-01","_to":"1993-10-01"}},{"BAD":{"_from":"1992-07-01","_to":"1994-08-15"}},{"BAN":{"_from":"1994-08-15","_to":"1997-07-01"}},{"BAM":{"_from":"1995-01-01"}}],"BB":[{"XCD":{"_from":"1965-10-06","_to":"1973-12-03"}},{"BBD":{"_from":"1973-12-03"}}],"BD":[{"INR":{"_from":"1835-08-17","_to":"1948-04-01"}},{"PKR":{"_from":"1948-04-01","_to":"1972-01-01"}},{"BDT":{"_from":"1972-01-01"}}],"BE":[{"NLG":{"_from":"1816-12-15","_to":"1831-02-07"}},{"BEF":{"_from":"1831-02-07","_to":"2002-02-28"}},{"BEC":{"_tender":"false","_from":"1970-01-01","_to":"1990-03-05"}},{"BEL":{"_tender":"false","_from":"1970-01-01","_to":"1990-03-05"}},{"EUR":{"_from":"1999-01-01"}}],"BF":[{"XOF":{"_from":"1984-08-04"}}],"BG":[{"BGO":{"_from":"1879-07-08","_to":"1952-05-12"}},{"BGM":{"_from":"1952-05-12","_to":"1962-01-01"}},{"BGL":{"_from":"1962-01-01","_to":"1999-07-05"}},{"BGN":{"_from":"1999-07-05"}}],"BH":[{"BHD":{"_from":"1965-10-16"}}],"BI":[{"BIF":{"_from":"1964-05-19"}}],"BJ":[{"XOF":{"_from":"1975-11-30"}}],"BL":[{"FRF":{"_from":"1960-01-01","_to":"2002-02-17"}},{"EUR":{"_from":"1999-01-01"}}],"BM":[{"BMD":{"_from":"1970-02-06"}}],"BN":[{"MYR":{"_from":"1963-09-16","_to":"1967-06-12"}},{"BND":{"_from":"1967-06-12"}}],"BO":[{"BOV":{"_tender":"false"}},{"BOL":{"_from":"1863-06-23","_to":"1963-01-01"}},{"BOP":{"_from":"1963-01-01","_to":"1986-12-31"}},{"BOB":{"_from":"1987-01-01"}}],"BQ":[{"ANG":{"_from":"2010-10-10","_to":"2011-01-01"}},{"USD":{"_from":"2011-01-01"}}],"BR":[{"BRZ":{"_from":"1942-11-01","_to":"1967-02-13"}},{"BRB":{"_from":"1967-02-13","_to":"1986-02-28"}},{"BRC":{"_from":"1986-02-28","_to":"1989-01-15"}},{"BRN":{"_from":"1989-01-15","_to":"1990-03-16"}},{"BRE":{"_from":"1990-03-16","_to":"1993-08-01"}},{"BRR":{"_from":"1993-08-01","_to":"1994-07-01"}},{"BRL":{"_from":"1994-07-01"}}],"BS":[{"BSD":{"_from":"1966-05-25"}}],"BT":[{"INR":{"_from":"1907-01-01"}},{"BTN":{"_from":"1974-04-16"}}],"BU":[{"BUK":{"_from":"1952-07-01","_to":"1989-06-18"}}],"BV":[{"NOK":{"_from":"1905-06-07"}}],"BW":[{"ZAR":{"_from":"1961-02-14","_to":"1976-08-23"}},{"BWP":{"_from":"1976-08-23"}}],"BY":[{"SUR":{"_from":"1961-01-01","_to":"1991-12-25"}},{"RUR":{"_from":"1991-12-25","_to":"1994-11-08"}},{"BYB":{"_from":"1994-08-01","_to":"2000-12-31"}},{"BYR":{"_from":"2000-01-01","_to":"2017-01-01"}},{"BYN":{"_from":"2016-07-01"}}],"BZ":[{"BZD":{"_from":"1974-01-01"}}],"CA":[{"CAD":{"_from":"1858-01-01"}}],"CC":[{"AUD":{"_from":"1966-02-14"}}],"CD":[{"ZRZ":{"_from":"1971-10-27","_to":"1993-11-01"}},{"ZRN":{"_from":"1993-11-01","_to":"1998-07-01"}},{"CDF":{"_from":"1998-07-01"}}],"CF":[{"XAF":{"_from":"1993-01-01"}}],"CG":[{"XAF":{"_from":"1993-01-01"}}],"CH":[{"CHE":{"_tender":"false"}},{"CHW":{"_tender":"false"}},{"CHF":{"_from":"1799-03-17"}}],"CI":[{"XOF":{"_from":"1958-12-04"}}],"CK":[{"NZD":{"_from":"1967-07-10"}}],"CL":[{"CLF":{"_tender":"false"}},{"CLE":{"_from":"1960-01-01","_to":"1975-09-29"}},{"CLP":{"_from":"1975-09-29"}}],"CM":[{"XAF":{"_from":"1973-04-01"}}],"CN":[{"CNY":{"_from":"1953-03-01"}},{"CNX":{"_tender":"false","_from":"1979-01-01","_to":"1998-12-31"}},{"CNH":{"_tender":"false","_from":"2010-07-19"}}],"CO":[{"COU":{"_tender":"false"}},{"COP":{"_from":"1905-01-01"}}],"CP":[{"XXX":{"_tender":"false"}}],"CR":[{"CRC":{"_from":"1896-10-26"}}],"CS":[{"YUM":{"_from":"1994-01-24","_to":"2002-05-15"}},{"CSD":{"_from":"2002-05-15","_to":"2006-06-03"}},{"EUR":{"_from":"2003-02-04","_to":"2006-06-03"}}],"CU":[{"CUP":{"_from":"1859-01-01"}},{"USD":{"_from":"1899-01-01","_to":"1959-01-01"}},{"CUC":{"_from":"1994-01-01"}}],"CV":[{"PTE":{"_from":"1911-05-22","_to":"1975-07-05"}},{"CVE":{"_from":"1914-01-01"}}],"CW":[{"ANG":{"_from":"2010-10-10"}}],"CX":[{"AUD":{"_from":"1966-02-14"}}],"CY":[{"CYP":{"_from":"1914-09-10","_to":"2008-01-31"}},{"EUR":{"_from":"2008-01-01"}}],"CZ":[{"CSK":{"_from":"1953-06-01","_to":"1993-03-01"}},{"CZK":{"_from":"1993-01-01"}}],"DD":[{"DDM":{"_from":"1948-07-20","_to":"1990-10-02"}}],"DE":[{"DEM":{"_from":"1948-06-20","_to":"2002-02-28"}},{"EUR":{"_from":"1999-01-01"}}],"DG":[{"USD":{"_from":"1965-11-08"}}],"DJ":[{"DJF":{"_from":"1977-06-27"}}],"DK":[{"DKK":{"_from":"1873-05-27"}}],"DM":[{"XCD":{"_from":"1965-10-06"}}],"DO":[{"USD":{"_from":"1905-06-21","_to":"1947-10-01"}},{"DOP":{"_from":"1947-10-01"}}],"DZ":[{"DZD":{"_from":"1964-04-01"}}],"EA":[{"EUR":{"_from":"1999-01-01"}}],"EC":[{"ECS":{"_from":"1884-04-01","_to":"2000-10-02"}},{"ECV":{"_tender":"false","_from":"1993-05-23","_to":"2000-01-09"}},{"USD":{"_from":"2000-10-02"}}],"EE":[{"SUR":{"_from":"1961-01-01","_to":"1992-06-20"}},{"EEK":{"_from":"1992-06-21","_to":"2010-12-31"}},{"EUR":{"_from":"2011-01-01"}}],"EG":[{"EGP":{"_from":"1885-11-14"}}],"EH":[{"MAD":{"_from":"1976-02-26"}}],"ER":[{"ETB":{"_from":"1993-05-24","_to":"1997-11-08"}},{"ERN":{"_from":"1997-11-08"}}],"ES":[{"ESP":{"_from":"1868-10-19","_to":"2002-02-28"}},{"ESB":{"_tender":"false","_from":"1975-01-01","_to":"1994-12-31"}},{"ESA":{"_tender":"false","_from":"1978-01-01","_to":"1981-12-31"}},{"EUR":{"_from":"1999-01-01"}}],"ET":[{"ETB":{"_from":"1976-09-15"}}],"EU":[{"XEU":{"_tender":"false","_from":"1979-01-01","_to":"1998-12-31"}},{"EUR":{"_from":"1999-01-01"}}],"FI":[{"FIM":{"_from":"1963-01-01","_to":"2002-02-28"}},{"EUR":{"_from":"1999-01-01"}}],"FJ":[{"FJD":{"_from":"1969-01-13"}}],"FK":[{"FKP":{"_from":"1901-01-01"}}],"FM":[{"JPY":{"_from":"1914-10-03","_to":"1944-01-01"}},{"USD":{"_from":"1944-01-01"}}],"FO":[{"DKK":{"_from":"1948-01-01"}}],"FR":[{"FRF":{"_from":"1960-01-01","_to":"2002-02-17"}},{"EUR":{"_from":"1999-01-01"}}],"GA":[{"XAF":{"_from":"1993-01-01"}}],"GB":[{"GBP":{"_from":"1694-07-27"}}],"GD":[{"XCD":{"_from":"1967-02-27"}}],"GE":[{"SUR":{"_from":"1961-01-01","_to":"1991-12-25"}},{"RUR":{"_from":"1991-12-25","_to":"1993-06-11"}},{"GEK":{"_from":"1993-04-05","_to":"1995-09-25"}},{"GEL":{"_from":"1995-09-23"}}],"GF":[{"FRF":{"_from":"1960-01-01","_to":"2002-02-17"}},{"EUR":{"_from":"1999-01-01"}}],"GG":[{"GBP":{"_from":"1830-01-01"}}],"GH":[{"GHC":{"_from":"1979-03-09","_to":"2007-12-31"}},{"GHS":{"_from":"2007-07-03"}}],"GI":[{"GIP":{"_from":"1713-01-01"}}],"GL":[{"DKK":{"_from":"1873-05-27"}}],"GM":[{"GMD":{"_from":"1971-07-01"}}],"GN":[{"GNS":{"_from":"1972-10-02","_to":"1986-01-06"}},{"GNF":{"_from":"1986-01-06"}}],"GP":[{"FRF":{"_from":"1960-01-01","_to":"2002-02-17"}},{"EUR":{"_from":"1999-01-01"}}],"GQ":[{"GQE":{"_from":"1975-07-07","_to":"1986-06-01"}},{"XAF":{"_from":"1993-01-01"}}],"GR":[{"GRD":{"_from":"1954-05-01","_to":"2002-02-28"}},{"EUR":{"_from":"2001-01-01"}}],"GS":[{"GBP":{"_from":"1908-01-01"}}],"GT":[{"GTQ":{"_from":"1925-05-27"}}],"GU":[{"USD":{"_from":"1944-08-21"}}],"GW":[{"GWE":{"_from":"1914-01-01","_to":"1976-02-28"}},{"GWP":{"_from":"1976-02-28","_to":"1997-03-31"}},{"XOF":{"_from":"1997-03-31"}}],"GY":[{"GYD":{"_from":"1966-05-26"}}],"HK":[{"HKD":{"_from":"1895-02-02"}}],"HM":[{"AUD":{"_from":"1967-02-16"}}],"HN":[{"HNL":{"_from":"1926-04-03"}}],"HR":[{"YUD":{"_from":"1966-01-01","_to":"1990-01-01"}},{"YUN":{"_from":"1990-01-01","_to":"1991-12-23"}},{"HRD":{"_from":"1991-12-23","_to":"1995-01-01"}},{"HRK":{"_from":"1994-05-30"}}],"HT":[{"HTG":{"_from":"1872-08-26"}},{"USD":{"_from":"1915-01-01"}}],"HU":[{"HUF":{"_from":"1946-07-23"}}],"IC":[{"EUR":{"_from":"1999-01-01"}}],"ID":[{"IDR":{"_from":"1965-12-13"}}],"IE":[{"GBP":{"_from":"1800-01-01","_to":"1922-01-01"}},{"IEP":{"_from":"1922-01-01","_to":"2002-02-09"}},{"EUR":{"_from":"1999-01-01"}}],"IL":[{"ILP":{"_from":"1948-08-16","_to":"1980-02-22"}},{"ILR":{"_from":"1980-02-22","_to":"1985-09-04"}},{"ILS":{"_from":"1985-09-04"}}],"IM":[{"GBP":{"_from":"1840-01-03"}}],"IN":[{"INR":{"_from":"1835-08-17"}}],"IO":[{"USD":{"_from":"1965-11-08"}}],"IQ":[{"EGP":{"_from":"1920-11-11","_to":"1931-04-19"}},{"INR":{"_from":"1920-11-11","_to":"1931-04-19"}},{"IQD":{"_from":"1931-04-19"}}],"IR":[{"IRR":{"_from":"1932-05-13"}}],"IS":[{"DKK":{"_from":"1873-05-27","_to":"1918-12-01"}},{"ISJ":{"_from":"1918-12-01","_to":"1981-01-01"}},{"ISK":{"_from":"1981-01-01"}}],"IT":[{"ITL":{"_from":"1862-08-24","_to":"2002-02-28"}},{"EUR":{"_from":"1999-01-01"}}],"JE":[{"GBP":{"_from":"1837-01-01"}}],"JM":[{"JMD":{"_from":"1969-09-08"}}],"JO":[{"JOD":{"_from":"1950-07-01"}}],"JP":[{"JPY":{"_from":"1871-06-01"}}],"KE":[{"KES":{"_from":"1966-09-14"}}],"KG":[{"SUR":{"_from":"1961-01-01","_to":"1991-12-25"}},{"RUR":{"_from":"1991-12-25","_to":"1993-05-10"}},{"KGS":{"_from":"1993-05-10"}}],"KH":[{"KHR":{"_from":"1980-03-20"}}],"KI":[{"AUD":{"_from":"1966-02-14"}}],"KM":[{"KMF":{"_from":"1975-07-06"}}],"KN":[{"XCD":{"_from":"1965-10-06"}}],"KP":[{"KPW":{"_from":"1959-04-17"}}],"KR":[{"KRO":{"_from":"1945-08-15","_to":"1953-02-15"}},{"KRH":{"_from":"1953-02-15","_to":"1962-06-10"}},{"KRW":{"_from":"1962-06-10"}}],"KW":[{"KWD":{"_from":"1961-04-01"}}],"KY":[{"JMD":{"_from":"1969-09-08","_to":"1971-01-01"}},{"KYD":{"_from":"1971-01-01"}}],"KZ":[{"KZT":{"_from":"1993-11-05"}}],"LA":[{"LAK":{"_from":"1979-12-10"}}],"LB":[{"LBP":{"_from":"1948-02-02"}}],"LC":[{"XCD":{"_from":"1965-10-06"}}],"LI":[{"CHF":{"_from":"1921-02-01"}}],"LK":[{"LKR":{"_from":"1978-05-22"}}],"LR":[{"LRD":{"_from":"1944-01-01"}}],"LS":[{"ZAR":{"_from":"1961-02-14"}},{"LSL":{"_from":"1980-01-22"}}],"LT":[{"SUR":{"_from":"1961-01-01","_to":"1992-10-01"}},{"LTT":{"_from":"1992-10-01","_to":"1993-06-25"}},{"LTL":{"_from":"1993-06-25","_to":"2014-12-31"}},{"EUR":{"_from":"2015-01-01"}}],"LU":[{"LUF":{"_from":"1944-09-04","_to":"2002-02-28"}},{"LUC":{"_tender":"false","_from":"1970-01-01","_to":"1990-03-05"}},{"LUL":{"_tender":"false","_from":"1970-01-01","_to":"1990-03-05"}},{"EUR":{"_from":"1999-01-01"}}],"LV":[{"SUR":{"_from":"1961-01-01","_to":"1992-07-20"}},{"LVR":{"_from":"1992-05-07","_to":"1993-10-17"}},{"LVL":{"_from":"1993-06-28","_to":"2013-12-31"}},{"EUR":{"_from":"2014-01-01"}}],"LY":[{"LYD":{"_from":"1971-09-01"}}],"MA":[{"MAF":{"_from":"1881-01-01","_to":"1959-10-17"}},{"MAD":{"_from":"1959-10-17"}}],"MC":[{"FRF":{"_from":"1960-01-01","_to":"2002-02-17"}},{"MCF":{"_from":"1960-01-01","_to":"2002-02-17"}},{"EUR":{"_from":"1999-01-01"}}],"MD":[{"MDC":{"_from":"1992-06-01","_to":"1993-11-29"}},{"MDL":{"_from":"1993-11-29"}}],"ME":[{"YUM":{"_from":"1994-01-24","_to":"2002-05-15"}},{"DEM":{"_from":"1999-10-02","_to":"2002-05-15"}},{"EUR":{"_from":"2002-01-01"}}],"MF":[{"FRF":{"_from":"1960-01-01","_to":"2002-02-17"}},{"EUR":{"_from":"1999-01-01"}}],"MG":[{"MGF":{"_from":"1963-07-01","_to":"2004-12-31"}},{"MGA":{"_from":"1983-11-01"}}],"MH":[{"USD":{"_from":"1944-01-01"}}],"MK":[{"MKN":{"_from":"1992-04-26","_to":"1993-05-20"}},{"MKD":{"_from":"1993-05-20"}}],"ML":[{"XOF":{"_from":"1958-11-24","_to":"1962-07-02"}},{"MLF":{"_from":"1962-07-02","_to":"1984-08-31"}},{"XOF":{"_from":"1984-06-01"}}],"MM":[{"BUK":{"_from":"1952-07-01","_to":"1989-06-18"}},{"MMK":{"_from":"1989-06-18"}}],"MN":[{"MNT":{"_from":"1915-03-01"}}],"MO":[{"MOP":{"_from":"1901-01-01"}}],"MP":[{"USD":{"_from":"1944-01-01"}}],"MQ":[{"FRF":{"_from":"1960-01-01","_to":"2002-02-17"}},{"EUR":{"_from":"1999-01-01"}}],"MR":[{"XOF":{"_from":"1958-11-28","_to":"1973-06-29"}},{"MRO":{"_from":"1973-06-29"}}],"MS":[{"XCD":{"_from":"1967-02-27"}}],"MT":[{"MTP":{"_from":"1914-08-13","_to":"1968-06-07"}},{"MTL":{"_from":"1968-06-07","_to":"2008-01-31"}},{"EUR":{"_from":"2008-01-01"}}],"MU":[{"MUR":{"_from":"1934-04-01"}}],"MV":[{"MVR":{"_from":"1981-07-01"}}],"MW":[{"MWK":{"_from":"1971-02-15"}}],"MX":[{"MXV":{"_tender":"false"}},{"MXP":{"_from":"1822-01-01","_to":"1992-12-31"}},{"MXN":{"_from":"1993-01-01"}}],"MY":[{"MYR":{"_from":"1963-09-16"}}],"MZ":[{"MZE":{"_from":"1975-06-25","_to":"1980-06-16"}},{"MZM":{"_from":"1980-06-16","_to":"2006-12-31"}},{"MZN":{"_from":"2006-07-01"}}],"NA":[{"ZAR":{"_from":"1961-02-14"}},{"NAD":{"_from":"1993-01-01"}}],"NC":[{"XPF":{"_from":"1985-01-01"}}],"NE":[{"XOF":{"_from":"1958-12-19"}}],"NF":[{"AUD":{"_from":"1966-02-14"}}],"NG":[{"NGN":{"_from":"1973-01-01"}}],"NI":[{"NIC":{"_from":"1988-02-15","_to":"1991-04-30"}},{"NIO":{"_from":"1991-04-30"}}],"NL":[{"NLG":{"_from":"1813-01-01","_to":"2002-02-28"}},{"EUR":{"_from":"1999-01-01"}}],"NO":[{"SEK":{"_from":"1873-05-27","_to":"1905-06-07"}},{"NOK":{"_from":"1905-06-07"}}],"NP":[{"INR":{"_from":"1870-01-01","_to":"1966-10-17"}},{"NPR":{"_from":"1933-01-01"}}],"NR":[{"AUD":{"_from":"1966-02-14"}}],"NU":[{"NZD":{"_from":"1967-07-10"}}],"NZ":[{"NZD":{"_from":"1967-07-10"}}],"OM":[{"OMR":{"_from":"1972-11-11"}}],"PA":[{"PAB":{"_from":"1903-11-04"}},{"USD":{"_from":"1903-11-18"}}],"PE":[{"PES":{"_from":"1863-02-14","_to":"1985-02-01"}},{"PEI":{"_from":"1985-02-01","_to":"1991-07-01"}},{"PEN":{"_from":"1991-07-01"}}],"PF":[{"XPF":{"_from":"1945-12-26"}}],"PG":[{"AUD":{"_from":"1966-02-14","_to":"1975-09-16"}},{"PGK":{"_from":"1975-09-16"}}],"PH":[{"PHP":{"_from":"1946-07-04"}}],"PK":[{"INR":{"_from":"1835-08-17","_to":"1947-08-15"}},{"PKR":{"_from":"1948-04-01"}}],"PL":[{"PLZ":{"_from":"1950-10-28","_to":"1994-12-31"}},{"PLN":{"_from":"1995-01-01"}}],"PM":[{"FRF":{"_from":"1972-12-21","_to":"2002-02-17"}},{"EUR":{"_from":"1999-01-01"}}],"PN":[{"NZD":{"_from":"1969-01-13"}}],"PR":[{"ESP":{"_from":"1800-01-01","_to":"1898-12-10"}},{"USD":{"_from":"1898-12-10"}}],"PS":[{"JOD":{"_from":"1950-07-01","_to":"1967-06-01"}},{"ILP":{"_from":"1967-06-01","_to":"1980-02-22"}},{"ILS":{"_from":"1985-09-04"}},{"JOD":{"_from":"1996-02-12"}}],"PT":[{"PTE":{"_from":"1911-05-22","_to":"2002-02-28"}},{"EUR":{"_from":"1999-01-01"}}],"PW":[{"USD":{"_from":"1944-01-01"}}],"PY":[{"PYG":{"_from":"1943-11-01"}}],"QA":[{"QAR":{"_from":"1973-05-19"}}],"RE":[{"FRF":{"_from":"1975-01-01","_to":"2002-02-17"}},{"EUR":{"_from":"1999-01-01"}}],"RO":[{"ROL":{"_from":"1952-01-28","_to":"2006-12-31"}},{"RON":{"_from":"2005-07-01"}}],"RS":[{"YUM":{"_from":"1994-01-24","_to":"2002-05-15"}},{"CSD":{"_from":"2002-05-15","_to":"2006-10-25"}},{"RSD":{"_from":"2006-10-25"}}],"RU":[{"RUR":{"_from":"1991-12-25","_to":"1998-12-31"}},{"RUB":{"_from":"1999-01-01"}}],"RW":[{"RWF":{"_from":"1964-05-19"}}],"SA":[{"SAR":{"_from":"1952-10-22"}}],"SB":[{"AUD":{"_from":"1966-02-14","_to":"1978-06-30"}},{"SBD":{"_from":"1977-10-24"}}],"SC":[{"SCR":{"_from":"1903-11-01"}}],"SD":[{"EGP":{"_from":"1889-01-19","_to":"1958-01-01"}},{"GBP":{"_from":"1889-01-19","_to":"1958-01-01"}},{"SDP":{"_from":"1957-04-08","_to":"1998-06-01"}},{"SDD":{"_from":"1992-06-08","_to":"2007-06-30"}},{"SDG":{"_from":"2007-01-10"}}],"SE":[{"SEK":{"_from":"1873-05-27"}}],"SG":[{"MYR":{"_from":"1963-09-16","_to":"1967-06-12"}},{"SGD":{"_from":"1967-06-12"}}],"SH":[{"SHP":{"_from":"1917-02-15"}}],"SI":[{"SIT":{"_from":"1992-10-07","_to":"2007-01-14"}},{"EUR":{"_from":"2007-01-01"}}],"SJ":[{"NOK":{"_from":"1905-06-07"}}],"SK":[{"CSK":{"_from":"1953-06-01","_to":"1992-12-31"}},{"SKK":{"_from":"1992-12-31","_to":"2009-01-01"}},{"EUR":{"_from":"2009-01-01"}}],"SL":[{"GBP":{"_from":"1808-11-30","_to":"1966-02-04"}},{"SLL":{"_from":"1964-08-04"}}],"SM":[{"ITL":{"_from":"1865-12-23","_to":"2001-02-28"}},{"EUR":{"_from":"1999-01-01"}}],"SN":[{"XOF":{"_from":"1959-04-04"}}],"SO":[{"SOS":{"_from":"1960-07-01"}}],"SR":[{"NLG":{"_from":"1815-11-20","_to":"1940-05-10"}},{"SRG":{"_from":"1940-05-10","_to":"2003-12-31"}},{"SRD":{"_from":"2004-01-01"}}],"SS":[{"SDG":{"_from":"2007-01-10","_to":"2011-09-01"}},{"SSP":{"_from":"2011-07-18"}}],"ST":[{"STD":{"_from":"1977-09-08","_to":"2017-12-31"}},{"STN":{"_from":"2018-01-01"}}],"SU":[{"SUR":{"_from":"1961-01-01","_to":"1991-12-25"}}],"SV":[{"SVC":{"_from":"1919-11-11","_to":"2001-01-01"}},{"USD":{"_from":"2001-01-01"}}],"SX":[{"ANG":{"_from":"2010-10-10"}}],"SY":[{"SYP":{"_from":"1948-01-01"}}],"SZ":[{"SZL":{"_from":"1974-09-06"}}],"TA":[{"GBP":{"_from":"1938-01-12"}}],"TC":[{"USD":{"_from":"1969-09-08"}}],"TD":[{"XAF":{"_from":"1993-01-01"}}],"TF":[{"FRF":{"_from":"1959-01-01","_to":"2002-02-17"}},{"EUR":{"_from":"1999-01-01"}}],"TG":[{"XOF":{"_from":"1958-11-28"}}],"TH":[{"THB":{"_from":"1928-04-15"}}],"TJ":[{"RUR":{"_from":"1991-12-25","_to":"1995-05-10"}},{"TJR":{"_from":"1995-05-10","_to":"2000-10-25"}},{"TJS":{"_from":"2000-10-26"}}],"TK":[{"NZD":{"_from":"1967-07-10"}}],"TL":[{"TPE":{"_from":"1959-01-02","_to":"2002-05-20"}},{"IDR":{"_from":"1975-12-07","_to":"2002-05-20"}},{"USD":{"_from":"1999-10-20"}}],"TM":[{"SUR":{"_from":"1961-01-01","_to":"1991-12-25"}},{"RUR":{"_from":"1991-12-25","_to":"1993-11-01"}},{"TMM":{"_from":"1993-11-01","_to":"2009-01-01"}},{"TMT":{"_from":"2009-01-01"}}],"TN":[{"TND":{"_from":"1958-11-01"}}],"TO":[{"TOP":{"_from":"1966-02-14"}}],"TP":[{"TPE":{"_from":"1959-01-02","_to":"2002-05-20"}},{"IDR":{"_from":"1975-12-07","_to":"2002-05-20"}}],"TR":[{"TRL":{"_from":"1922-11-01","_to":"2005-12-31"}},{"TRY":{"_from":"2005-01-01"}}],"TT":[{"TTD":{"_from":"1964-01-01"}}],"TV":[{"AUD":{"_from":"1966-02-14"}}],"TW":[{"TWD":{"_from":"1949-06-15"}}],"TZ":[{"TZS":{"_from":"1966-06-14"}}],"UA":[{"SUR":{"_from":"1961-01-01","_to":"1991-12-25"}},{"RUR":{"_from":"1991-12-25","_to":"1992-11-13"}},{"UAK":{"_from":"1992-11-13","_to":"1993-10-17"}},{"UAH":{"_from":"1996-09-02"}}],"UG":[{"UGS":{"_from":"1966-08-15","_to":"1987-05-15"}},{"UGX":{"_from":"1987-05-15"}}],"UM":[{"USD":{"_from":"1944-01-01"}}],"US":[{"USN":{"_tender":"false"}},{"USS":{"_tender":"false","_to":"2014-03-01"}},{"USD":{"_from":"1792-01-01"}}],"UY":[{"UYI":{"_tender":"false"}},{"UYP":{"_from":"1975-07-01","_to":"1993-03-01"}},{"UYU":{"_from":"1993-03-01"}}],"UZ":[{"UZS":{"_from":"1994-07-01"}}],"VA":[{"ITL":{"_from":"1870-10-19","_to":"2002-02-28"}},{"EUR":{"_from":"1999-01-01"}}],"VC":[{"XCD":{"_from":"1965-10-06"}}],"VE":[{"VEB":{"_from":"1871-05-11","_to":"2008-06-30"}},{"VEF":{"_from":"2008-01-01"}}],"VG":[{"USD":{"_from":"1833-01-01"}},{"GBP":{"_from":"1833-01-01","_to":"1959-01-01"}}],"VI":[{"USD":{"_from":"1837-01-01"}}],"VN":[{"VNN":{"_from":"1978-05-03","_to":"1985-09-14"}},{"VND":{"_from":"1985-09-14"}}],"VU":[{"VUV":{"_from":"1981-01-01"}}],"WF":[{"XPF":{"_from":"1961-07-30"}}],"WS":[{"WST":{"_from":"1967-07-10"}}],"XK":[{"YUM":{"_from":"1994-01-24","_to":"1999-09-30"}},{"DEM":{"_from":"1999-09-01","_to":"2002-03-09"}},{"EUR":{"_from":"2002-01-01"}}],"YD":[{"YDD":{"_from":"1965-04-01","_to":"1996-01-01"}}],"YE":[{"YER":{"_from":"1990-05-22"}}],"YT":[{"KMF":{"_from":"1975-01-01","_to":"1976-02-23"}},{"FRF":{"_from":"1976-02-23","_to":"2002-02-17"}},{"EUR":{"_from":"1999-01-01"}}],"YU":[{"YUD":{"_from":"1966-01-01","_to":"1990-01-01"}},{"YUN":{"_from":"1990-01-01","_to":"1992-07-24"}},{"YUM":{"_from":"1994-01-24","_to":"2002-05-15"}}],"ZA":[{"ZAR":{"_from":"1961-02-14"}},{"ZAL":{"_tender":"false","_from":"1985-09-01","_to":"1995-03-13"}}],"ZM":[{"ZMK":{"_from":"1968-01-16","_to":"2013-01-01"}},{"ZMW":{"_from":"2013-01-01"}}],"ZR":[{"ZRZ":{"_from":"1971-10-27","_to":"1993-11-01"}},{"ZRN":{"_from":"1993-11-01","_to":"1998-07-31"}}],"ZW":[{"RHD":{"_from":"1970-02-17","_to":"1980-04-18"}},{"ZWD":{"_from":"1980-04-18","_to":"2008-08-01"}},{"ZWR":{"_from":"2008-08-01","_to":"2009-02-02"}},{"ZWL":{"_from":"2009-02-02","_to":"2009-04-12"}},{"USD":{"_from":"2009-04-12"}}],"ZZ":[{"XAG":{"_tender":"false"}},{"XAU":{"_tender":"false"}},{"XBA":{"_tender":"false"}},{"XBB":{"_tender":"false"}},{"XBC":{"_tender":"false"}},{"XBD":{"_tender":"false"}},{"XDR":{"_tender":"false"}},{"XPD":{"_tender":"false"}},{"XPT":{"_tender":"false"}},{"XSU":{"_tender":"false"}},{"XTS":{"_tender":"false"}},{"XUA":{"_tender":"false"}},{"XXX":{"_tender":"false"}},{"XRE":{"_tender":"false","_to":"1999-11-30"}},{"XFU":{"_tender":"false","_to":"2013-11-30"}},{"XFO":{"_tender":"false","_from":"1930-01-01","_to":"2003-04-01"}}]}}}} \ No newline at end of file diff --git a/node_modules/strong-globalize/examples/gmain/index.js b/node_modules/strong-globalize/examples/gmain/index.js new file mode 100644 index 00000000..8637516a --- /dev/null +++ b/node_modules/strong-globalize/examples/gmain/index.js @@ -0,0 +1,37 @@ +// Copyright IBM Corp. 2015,2016. All Rights Reserved. +// Node module: strong-globalize +// This file is licensed under the Artistic License 2.0. +// License text available at https://opensource.org/licenses/Artistic-2.0 +'use strict'; + +var SG = require('strong-globalize'); +SG.SetRootDir(__dirname, {autonomousMsgLoading: 'all'}); +SG.SetDefaultLanguage(); +var g = new SG(); + +var express = require('express'); +var gsub = require('gsub'); +var request = require('request'); +var util = require('util'); + +var app = express(); + +app.get('/', function(req, res) { + var helloMessage = util.format('%s Hello %s', + g.d(new Date()), gsub.getUserName()); + res.end(helloMessage); +}); + +var amount = 1000; +var currency = g.c(amount, 'JPY'); +var port = 8080; +app.listen(port, function() { + g.log('Listening on %d by %s.', port, gsub.getUserName()); + g.log(gsub.getHelpText()); + g.log('Shipping cost is %s.', currency); +}); + +setInterval(function() { + request('http://localhost:' + port, + function(_error, response, body) { console.log(body); }); +}, 1000); diff --git a/node_modules/strong-globalize/examples/gmain/intl/en/messages.json b/node_modules/strong-globalize/examples/gmain/intl/en/messages.json new file mode 100644 index 00000000..0d981c8d --- /dev/null +++ b/node_modules/strong-globalize/examples/gmain/intl/en/messages.json @@ -0,0 +1,4 @@ +{ + "77decb50aa6360f0dc9c8ded9086b94e": "Shipping cost is {0}.", + "b5d4af08bf61e58d375923977290d67b": "Listening on {0} by {1}." +} diff --git a/node_modules/strong-globalize/examples/gmain/intl/zz/messages.json b/node_modules/strong-globalize/examples/gmain/intl/zz/messages.json new file mode 100644 index 00000000..756a5a3a --- /dev/null +++ b/node_modules/strong-globalize/examples/gmain/intl/zz/messages.json @@ -0,0 +1,14 @@ +{ + "77decb50aa6360f0dc9c8ded9086b94e": [ + "g.log:index.js:31" + ], + "b5d4af08bf61e58d375923977290d67b": [ + "g.log:index.js:29" + ], + "%s Hello %s": [ + "util.format:index.js:20" + ], + "http://localhost:": [ + "request:index.js:35" + ] +} diff --git a/node_modules/strong-globalize/examples/gmain/intl/zz/messages_inverted.json b/node_modules/strong-globalize/examples/gmain/intl/zz/messages_inverted.json new file mode 100644 index 00000000..1144e71b --- /dev/null +++ b/node_modules/strong-globalize/examples/gmain/intl/zz/messages_inverted.json @@ -0,0 +1,16 @@ +{ + "index.js": { + "20": [ + "util.format('%s Hello %s', ... )" + ], + "29": [ + "g.log('b5d4af08bf61e58d375923977290d67b')" + ], + "31": [ + "g.log('77decb50aa6360f0dc9c8ded9086b94e')" + ], + "35": [ + "request('http://localhost:')" + ] + } +} diff --git a/node_modules/strong-globalize/examples/gmain/package.json b/node_modules/strong-globalize/examples/gmain/package.json new file mode 100644 index 00000000..54294fe1 --- /dev/null +++ b/node_modules/strong-globalize/examples/gmain/package.json @@ -0,0 +1,13 @@ +{ + "name": "gmain", + "version": "1.0.0", + "main": "index.js", + "author": "Tetsuo Seto ", + "dependencies": { + "express": "^4.13.3", + "request": "^2.61.0", + "strong-globalize": "^2.4.0", + "gsub": "^1.0.0" + }, + "license": "MIT" +} diff --git a/node_modules/strong-globalize/examples/gsub/index.js b/node_modules/strong-globalize/examples/gsub/index.js new file mode 100644 index 00000000..02f686a3 --- /dev/null +++ b/node_modules/strong-globalize/examples/gsub/index.js @@ -0,0 +1,12 @@ +// Copyright IBM Corp. 2015,2016. All Rights Reserved. +// Node module: strong-globalize +// This file is licensed under the Artistic License 2.0. +// License text available at https://opensource.org/licenses/Artistic-2.0 +'use strict'; + +var SG = require('strong-globalize'); +SG.SetRootDir(__dirname); +var util = require('./lib/util'); + +exports.getHelpText = util.getHelpText; +exports.getUserName = util.getUserName; diff --git a/node_modules/strong-globalize/examples/gsub/intl/en/help.txt b/node_modules/strong-globalize/examples/gsub/intl/en/help.txt new file mode 100644 index 00000000..651ab8c3 --- /dev/null +++ b/node_modules/strong-globalize/examples/gsub/intl/en/help.txt @@ -0,0 +1 @@ +This is help. \ No newline at end of file diff --git a/node_modules/strong-globalize/examples/gsub/intl/en/messages.json b/node_modules/strong-globalize/examples/gsub/intl/en/messages.json new file mode 100644 index 00000000..1ee0ad53 --- /dev/null +++ b/node_modules/strong-globalize/examples/gsub/intl/en/messages.json @@ -0,0 +1,3 @@ +{ + "21610b057179c7177036c1719f8922cc": "user: {0}" +} diff --git a/node_modules/strong-globalize/examples/gsub/intl/zz/messages.json b/node_modules/strong-globalize/examples/gsub/intl/zz/messages.json new file mode 100644 index 00000000..b3634691 --- /dev/null +++ b/node_modules/strong-globalize/examples/gsub/intl/zz/messages.json @@ -0,0 +1,8 @@ +{ + "21610b057179c7177036c1719f8922cc": [ + "g.f:lib/util.js:4" + ], + "help.txt": [ + "g.t:lib/util.js:10" + ] +} diff --git a/node_modules/strong-globalize/examples/gsub/intl/zz/messages_inverted.json b/node_modules/strong-globalize/examples/gsub/intl/zz/messages_inverted.json new file mode 100644 index 00000000..cc700ae6 --- /dev/null +++ b/node_modules/strong-globalize/examples/gsub/intl/zz/messages_inverted.json @@ -0,0 +1,10 @@ +{ + "lib/util.js": { + "4": [ + "g.f('21610b057179c7177036c1719f8922cc')" + ], + "10": [ + "g.t('help.txt')" + ] + } +} diff --git a/node_modules/strong-globalize/examples/gsub/package.json b/node_modules/strong-globalize/examples/gsub/package.json new file mode 100644 index 00000000..113f35a1 --- /dev/null +++ b/node_modules/strong-globalize/examples/gsub/package.json @@ -0,0 +1,10 @@ +{ + "name": "gsub", + "version": "1.0.0", + "main": "index.js", + "author": "Tetsuo Seto ", + "dependencies": { + "strong-globalize": "^2.4.0" + }, + "license": "MIT" +} diff --git a/node_modules/strong-globalize/index.js b/node_modules/strong-globalize/index.js new file mode 100644 index 00000000..0b34bbb6 --- /dev/null +++ b/node_modules/strong-globalize/index.js @@ -0,0 +1,31 @@ +// Copyright IBM Corp. 2015,2018. All Rights Reserved. +// Node module: strong-globalize +// This file is licensed under the Artistic License 2.0. +// License text available at https://opensource.org/licenses/Artistic-2.0 + +'use strict'; + +const StrongGlobalize = require('./lib/index'); + +const util = require('util'); + +/** + * A facade constructor for `StrongGlobalize`. It allows both + * `const g = new SG(...)` and `const g = SG(...)` for backward compatibility. + * + * @param {*} args Constructor arguments for `StrongGlobalize` + */ +function SG(...args) { + if (!(this instanceof SG)) { + return new SG(...args); + } + return new StrongGlobalize(...args); +} + +Object.setPrototypeOf(SG, StrongGlobalize); +util.inherits(SG, StrongGlobalize); + +// Expose the original `StrongGlobalize` class +SG.StrongGlobalize = StrongGlobalize; + +module.exports = SG; diff --git a/node_modules/strong-globalize/lib/browser.d.ts b/node_modules/strong-globalize/lib/browser.d.ts new file mode 100644 index 00000000..7c983f77 --- /dev/null +++ b/node_modules/strong-globalize/lib/browser.d.ts @@ -0,0 +1,43 @@ +import { AnyObject } from './config'; +declare function noop(): void; +export = StrongGlobalize; +declare class StrongGlobalize { + static SetRootDir: typeof noop; + static SetDefaultLanguage: typeof noop; + static SetPersistentLogging: typeof noop; + setLanguage: typeof noop; + getLanguage(): string; + c(value: any, currencySymbol: string, options: AnyObject): string; + formatCurrency: (value: any, currencySymbol: string, options: AnyObject) => string; + d: (value: Date, options: AnyObject) => string; + formatDate: (value: Date, options: AnyObject) => string; + n: (value: number, options: AnyObject) => string; + formatNumber: (value: number, options: AnyObject) => string; + m: (path: string, variables: any) => any; + formatMessage: (path: string, variables: any) => any; + t: (path: string, variables: any) => any; + Error(...args: any[]): any; + f(...args: any[]): any; + format: (...args: any[]) => any; + ewrite(...args: any[]): void; + owrite(...args: any[]): void; + write: (...args: any[]) => void; + rfc5424(type: string, args: any[], fn: (...args: any[]) => void): any; + emergency(...args: any[]): any; + alert(...args: any[]): any; + critical(...args: any[]): any; + error(...args: any[]): any; + warning(...args: any[]): any; + notice(...args: any[]): any; + informational(...args: any[]): any; + debug(...args: any[]): any; + warn(...args: any[]): any; + info(...args: any[]): any; + log(...args: any[]): any; + help(...args: any[]): any; + data(...args: any[]): any; + prompt(...args: any[]): any; + verbose(...args: any[]): any; + input(...args: any[]): any; + silly(...args: any[]): any; +} diff --git a/node_modules/strong-globalize/lib/browser.js b/node_modules/strong-globalize/lib/browser.js new file mode 100644 index 00000000..106a7153 --- /dev/null +++ b/node_modules/strong-globalize/lib/browser.js @@ -0,0 +1,119 @@ +"use strict"; +// Copyright IBM Corp. 2015,2016. All Rights Reserved. +// Node module: strong-globalize +// This file is licensed under the Artistic License 2.0. +// License text available at https://opensource.org/licenses/Artistic-2.0 +// tslint:disable:no-any +const util = require("util"); +function noop() { } +class StrongGlobalize { + constructor() { + this.setLanguage = noop; + this.formatCurrency = this.c; + this.d = function (value, options) { + return value.toString(); + }; + this.formatDate = this.d; + this.n = function (value, options) { + return value.toString(); + }; + this.formatNumber = this.n; + this.m = function (path, variables) { + return util.format.apply(null, [path].concat(variables)); + }; + this.formatMessage = this.m; + this.t = this.m; + this.format = this.f; + this.write = this.owrite; + } + getLanguage() { + return 'en'; + } + c(value, currencySymbol, options) { + return currencySymbol + ' ' + value.toString(); + } + Error(...args) { + return Error.apply(null, args); + } + f(...args) { + return util.format.apply(null, args); + } + ewrite(...args) { + return console.error(args); + } + owrite(...args) { + return console.log(args); + } + rfc5424(type, args, fn) { + // Convert args from function args object to a regular array + args = Array.prototype.slice.call(args); + if (typeof args[0] === 'string') { + // The first argument may contain formatting instructions like %s + // which must be preserved. + args[0] = type + ': ' + args[0]; + } + else { + args = [type, ': '].concat(args); + } + return fn.apply(console, args); + } + // RFC 5424 Syslog Message Severities + emergency(...args) { + return this.rfc5424('emergency', args, console.error); + } + alert(...args) { + return this.rfc5424('alert', args, console.error); + } + critical(...args) { + return this.rfc5424('critical', args, console.error); + } + error(...args) { + return this.rfc5424('error', args, console.error); + } + warning(...args) { + return this.rfc5424('warning', args, console.warn); + } + notice(...args) { + return this.rfc5424('notice', args, console.log); + } + informational(...args) { + return this.rfc5424('informational', args, console.log); + } + debug(...args) { + return this.rfc5424('debug', args, console.log); + } + // Node.js console + warn(...args) { + return this.rfc5424('warn', args, console.warn); + } + info(...args) { + return this.rfc5424('info', args, console.log); + } + log(...args) { + return this.rfc5424('log', args, console.log); + } + // Misc Logging Levels + help(...args) { + return this.rfc5424('help', args, console.log); + } + data(...args) { + return this.rfc5424('data', args, console.log); + } + prompt(...args) { + return this.rfc5424('prompt', args, console.log); + } + verbose(...args) { + return this.rfc5424('verbose', args, console.log); + } + input(...args) { + return this.rfc5424('input', args, console.log); + } + silly(...args) { + return this.rfc5424('silly', args, console.log); + } +} +StrongGlobalize.SetRootDir = noop; +StrongGlobalize.SetDefaultLanguage = noop; +StrongGlobalize.SetPersistentLogging = noop; +module.exports = StrongGlobalize; +//# sourceMappingURL=browser.js.map \ No newline at end of file diff --git a/node_modules/strong-globalize/lib/browser.js.map b/node_modules/strong-globalize/lib/browser.js.map new file mode 100644 index 00000000..a74332c3 --- /dev/null +++ b/node_modules/strong-globalize/lib/browser.js.map @@ -0,0 +1 @@ +{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,gCAAgC;AAChC,wDAAwD;AACxD,yEAAyE;AAEzE,wBAAwB;AAExB,6BAA6B;AAG7B,SAAS,IAAI,KAAI,CAAC;AAIlB,MAAM,eAAe;IAArB;QAKE,gBAAW,GAAG,IAAI,CAAC;QASnB,mBAAc,GAAG,IAAI,CAAC,CAAC,CAAC;QAExB,MAAC,GAAG,UAAS,KAAW,EAAE,OAAkB;YAC1C,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC1B,CAAC,CAAC;QACF,eAAU,GAAG,IAAI,CAAC,CAAC,CAAC;QAEpB,MAAC,GAAG,UAAS,KAAa,EAAE,OAAkB;YAC5C,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC1B,CAAC,CAAC;QACF,iBAAY,GAAG,IAAI,CAAC,CAAC,CAAC;QAEtB,MAAC,GAAG,UAAS,IAAY,EAAE,SAAc;YACvC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC;QACF,kBAAa,GAAG,IAAI,CAAC,CAAC,CAAC;QACvB,MAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAUX,WAAM,GAAG,IAAI,CAAC,CAAC,CAAC;QAQhB,UAAK,GAAG,IAAI,CAAC,MAAM,CAAC;IAuEtB,CAAC;IAhHC,WAAW;QACT,OAAO,IAAI,CAAC;IACd,CAAC;IAED,CAAC,CAAC,KAAU,EAAE,cAAsB,EAAE,OAAkB;QACtD,OAAO,cAAc,GAAG,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IACjD,CAAC;IAmBD,KAAK,CAAC,GAAG,IAAW;QAClB,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,CAAC,CAAC,GAAG,IAAW;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;IAID,MAAM,CAAC,GAAG,IAAW;QACnB,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,MAAM,CAAC,GAAG,IAAW;QACnB,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAGD,OAAO,CAAC,IAAY,EAAE,IAAW,EAAE,EAA4B;QAC7D,4DAA4D;QAC5D,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;YAC/B,iEAAiE;YACjE,2BAA2B;YAC3B,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;SACjC;aAAM;YACL,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SAClC;QACD,OAAO,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,qCAAqC;IACrC,SAAS,CAAC,GAAG,IAAW;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC;IACD,KAAK,CAAC,GAAG,IAAW;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC;IACD,QAAQ,CAAC,GAAG,IAAW;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC;IACD,KAAK,CAAC,GAAG,IAAW;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,CAAC,GAAG,IAAW;QACpB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC;IACD,MAAM,CAAC,GAAG,IAAW;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACnD,CAAC;IACD,aAAa,CAAC,GAAG,IAAW;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1D,CAAC;IACD,KAAK,CAAC,GAAG,IAAW;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;IAED,kBAAkB;IAClB,IAAI,CAAC,GAAG,IAAW;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,CAAC,GAAG,IAAW;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACjD,CAAC;IACD,GAAG,CAAC,GAAG,IAAW;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAChD,CAAC;IAED,sBAAsB;IACtB,IAAI,CAAC,GAAG,IAAW;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,CAAC,GAAG,IAAW;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,CAAC,GAAG,IAAW;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,CAAC,GAAG,IAAW;QACpB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACpD,CAAC;IACD,KAAK,CAAC,GAAG,IAAW;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;IACD,KAAK,CAAC,GAAG,IAAW;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;;AArHM,0BAAU,GAAG,IAAI,CAAC;AAClB,kCAAkB,GAAG,IAAI,CAAC;AAC1B,oCAAoB,GAAG,IAAI,CAAC;AALrC,iBAAS,eAAe,CAAC"} \ No newline at end of file diff --git a/node_modules/strong-globalize/lib/config.d.ts b/node_modules/strong-globalize/lib/config.d.ts new file mode 100644 index 00000000..651be3a3 --- /dev/null +++ b/node_modules/strong-globalize/lib/config.d.ts @@ -0,0 +1,30 @@ +export declare type AnyObject = { + [name: string]: T; +}; +export declare type ResourceTag = { + fileIdHash: string; + fileName: string; + lang: string; + tagType: string; +}; +export interface GlobalizeConfig { + AUTO_MSG_LOADING?: string; + MASTER_ROOT_DIR?: string; + MSG_RES_LOADED?: ResourceTag[]; + APP_LANGS?: string[]; + loadMessages?(messages: AnyObject): void; + formatters?: Map; + locale?(lang?: string): void; + DEFAULT_LANG?: string; + bundles?: AnyObject; + DISABLE_CONSOLE?: boolean; + LOG_FN?: (level: string, message: any) => void; + load?(obj: AnyObject): void; + versionSG?: string; + versionG?: string; + getHash?(path: string): string; + PSEUDO_LOC_PREAMBLE?: string; + reset(): void; + initialized?: boolean; +} +export declare const STRONGLOOP_GLB: GlobalizeConfig; diff --git a/node_modules/strong-globalize/lib/config.js b/node_modules/strong-globalize/lib/config.js new file mode 100644 index 00000000..0f9d4295 --- /dev/null +++ b/node_modules/strong-globalize/lib/config.js @@ -0,0 +1,17 @@ +"use strict"; +// Copyright IBM Corp. 2015,2018. All Rights Reserved. +// Node module: strong-globalize +// This file is licensed under the Artistic License 2.0. +// License text available at https://opensource.org/licenses/Artistic-2.0 +Object.defineProperty(exports, "__esModule", { value: true }); +exports.STRONGLOOP_GLB = { + reset() { + // tslint:disable:no-invalid-this + const keys = Object.keys(this).filter(k => k !== 'reset'); + keys.forEach(k => { + // Clean up all properties except `reset` + delete this[k]; + }); + }, +}; +//# sourceMappingURL=config.js.map \ No newline at end of file diff --git a/node_modules/strong-globalize/lib/config.js.map b/node_modules/strong-globalize/lib/config.js.map new file mode 100644 index 00000000..171e96de --- /dev/null +++ b/node_modules/strong-globalize/lib/config.js.map @@ -0,0 +1 @@ +{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,gCAAgC;AAChC,wDAAwD;AACxD,yEAAyE;;AAoC5D,QAAA,cAAc,GAAoB;IAC7C,KAAK;QACH,iCAAiC;QACjC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACf,yCAAyC;YACzC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAC"} \ No newline at end of file diff --git a/node_modules/strong-globalize/lib/global.d.ts b/node_modules/strong-globalize/lib/global.d.ts new file mode 100644 index 00000000..cc461018 --- /dev/null +++ b/node_modules/strong-globalize/lib/global.d.ts @@ -0,0 +1,5 @@ +declare namespace NodeJS { + interface Process { + browser: boolean; + } +} diff --git a/node_modules/strong-globalize/lib/global.js b/node_modules/strong-globalize/lib/global.js new file mode 100644 index 00000000..60c5db75 --- /dev/null +++ b/node_modules/strong-globalize/lib/global.js @@ -0,0 +1,5 @@ +// Copyright IBM Corp. 2015,2018. All Rights Reserved. +// Node module: strong-globalize +// This file is licensed under the Artistic License 2.0. +// License text available at https://opensource.org/licenses/Artistic-2.0 +//# sourceMappingURL=global.js.map \ No newline at end of file diff --git a/node_modules/strong-globalize/lib/global.js.map b/node_modules/strong-globalize/lib/global.js.map new file mode 100644 index 00000000..4e2db1e9 --- /dev/null +++ b/node_modules/strong-globalize/lib/global.js.map @@ -0,0 +1 @@ +{"version":3,"file":"global.js","sourceRoot":"","sources":["../src/global.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,gCAAgC;AAChC,wDAAwD;AACxD,yEAAyE"} \ No newline at end of file diff --git a/node_modules/strong-globalize/lib/globalize.d.ts b/node_modules/strong-globalize/lib/globalize.d.ts new file mode 100644 index 00000000..2a936bc4 --- /dev/null +++ b/node_modules/strong-globalize/lib/globalize.d.ts @@ -0,0 +1,103 @@ +import { AnyObject } from './config'; +export { setRootDir } from './helper'; +export declare const c: typeof formatCurrency; +export declare const d: typeof formatDate; +export declare const n: typeof formatNumber; +export declare const t: typeof formatMessage; +export declare const m: typeof formatMessage; +export { STRONGLOOP_GLB } from './config'; +/** + * setDefaultLanguage + * + * @param {string} (optional, default: `'en'`) Language ID. + * It tries to use OS language, then falls back to 'en' + */ +export declare function setDefaultLanguage(lang?: string): string | undefined; +/** + * setAppLanguages + * + * @param {string} (optional, default: `[...]`) []. + * Sets the supported languages for the application. + * These should be a subset of the languages within the intl + * directory. + * + * If no argument is passed, the function uses the contents of + * the intl directory to determine the application languages. + * + */ +export declare function setAppLanguages(langs?: string[]): string[]; +/** + * Globalize.formatMessage wrapper returns a string. + * + * @param {string} path The message key + * @param {object} variables List of placeholder key and content value pair. + * @param {string} variables. The placeholder key. + * @param {string} variables. The content value. + * If the system locale is undefined, falls back to 'en' + */ +export declare function formatMessage(path: string, variables?: string[] | string, lang?: string): any; +export declare function formatJson(fullPath: string, variables: string[], lang?: string): any; +export declare function packMessage(args: any[], fn: null | ((msg: any) => any), withOriginalMsg: boolean, lang?: string): any; +export declare function rfc5424(level: string, args: any[], print: (...args: any[]) => void, lang?: string): any; +export declare function emergency(...args: any[]): any; +export declare function alert(...args: any[]): any; +export declare function critical(...args: any[]): any; +export declare function error(...args: any[]): any; +export declare function warning(...args: any[]): any; +export declare function notice(...args: any[]): any; +export declare function informational(...args: any[]): any; +export declare function debug(...args: any[]): any; +export declare function warn(...args: any[]): any; +export declare function info(...args: any[]): any; +export declare function log(...args: any[]): any; +export declare function help(...args: any[]): any; +export declare function data(...args: any[]): any; +export declare function prompt(...args: any[]): any; +export declare function verbose(...args: any[]): any; +export declare function input(...args: any[]): any; +export declare function silly(...args: any[]): any; +/** + * Globalize.formatNumber wrapper returns a string. + * + * @param {value} integer or float + * @param {object} The options (optional); if null, use the StrongLoop default. + * Strongly recommended to set NO options and let strong-globalize use + * the StrongLoop default for consistency across StrongLoop products. + * See https://www.npmjs.com/package/globalize#number-module + */ +export declare function formatNumber(value: number, options?: AnyObject, lang?: string): any; +/** + * Globalize.formatDate wrapper returns a string. + * + * @param {Date object} such as new Date() + * @param {object} The options (optional); if null, use the StrongLoop default. + * Strongly recommended to set NO options and let strong-globalize use + * the StrongLoop default for consistency across StrongLoop products. + * See https://www.npmjs.com/package/globalize#date-module + */ +export declare function formatDate(value: Date, options?: AnyObject, lang?: string): any; +/** + * Globalize.formatCurrency wrapper returns a string. + * + * @param {value} integer or float + * @param {string} three-letter currency symbol, ISO 4217 Currency Code + * @param {object} The options (optional); if null, use the StrongLoop default. + * Strongly recommended to set NO options and let strong-globalize use + * the StrongLoop default for consistency across StrongLoop products. + * See https://www.npmjs.com/package/globalize#curency-module + */ +export declare function formatCurrency(value: any, currencySymbol: string, options?: AnyObject, lang?: string): any; +export declare function loadGlobalize(lang?: string, enumerateNodeModules?: boolean): any; +/** + * + * Persistent logging + * + */ +export declare function consoleEnabled(): boolean; +/** + * + */ +export declare function setPersistentLogging(logFn: (level: string, message: { + [name: string]: any; +}) => void, disableConsole?: boolean): void; +export declare function logPersistent(level: string | undefined, message: any): void; diff --git a/node_modules/strong-globalize/lib/globalize.js b/node_modules/strong-globalize/lib/globalize.js new file mode 100644 index 00000000..347d58be --- /dev/null +++ b/node_modules/strong-globalize/lib/globalize.js @@ -0,0 +1,529 @@ +"use strict"; +// Copyright IBM Corp. 2015,2016. All Rights Reserved. +// Node module: strong-globalize +// This file is licensed under the Artistic License 2.0. +// License text available at https://opensource.org/licenses/Artistic-2.0 +Object.defineProperty(exports, "__esModule", { value: true }); +//tslint:disable:no-any +const assert = require("assert"); +const debugModule = require("debug"); +const fs = require("fs"); +const Globalize = require("globalize"); +const yamljs_1 = require("yamljs"); +const config_1 = require("./config"); +const helper = require("./helper"); +const dbg = debugModule('strong-globalize'); +const osLocale = require('os-locale'); +const MapCache = require('lodash/_MapCache'); +const md5 = require('md5'); +const memoize = require('lodash/memoize'); +const pathUtil = require('path'); +const util = require('util'); +var helper_1 = require("./helper"); +exports.setRootDir = helper_1.setRootDir; +exports.c = formatCurrency; +exports.d = formatDate; +exports.n = formatNumber; +exports.t = formatMessage; +exports.m = formatMessage; +var config_2 = require("./config"); +exports.STRONGLOOP_GLB = config_2.STRONGLOOP_GLB; +/** + * StrongLoop Defaults + */ +const SL_DEFAULT_DATETIME = { datetime: 'medium' }; +const SL_DEFAULT_NUMBER = { round: 'floor' }; +const SL_DEFAULT_CURRENCY = { style: 'name' }; +const OS_LANG = osLanguage(); +let MY_APP_LANG = process.env.STRONGLOOP_GLOBALIZE_APP_LANGUAGE; +MY_APP_LANG = helper.isSupportedLanguage(MY_APP_LANG) ? MY_APP_LANG : null; +function osLanguage() { + const locale = osLocale.sync(); + const lang = locale.substring(0, 2); + if (helper.isSupportedLanguage(lang)) + return lang; + if (lang === 'zh') { + const region = locale.substring(3); + if (region === 'CN') + return 'zh-Hans'; + if (region === 'TW') + return 'zh-Hant'; + if (region === 'Hans') + return 'zh-Hans'; + if (region === 'Hant') + return 'zh-Hant'; + } +} +/** + * setDefaultLanguage + * + * @param {string} (optional, default: `'en'`) Language ID. + * It tries to use OS language, then falls back to 'en' + */ +function setDefaultLanguage(lang) { + lang = helper.isSupportedLanguage(lang) ? lang : undefined; + lang = lang || MY_APP_LANG || OS_LANG || helper.ENGLISH; + loadGlobalize(lang); + if (lang !== helper.ENGLISH) { + loadGlobalize(helper.ENGLISH); + } + config_1.STRONGLOOP_GLB.locale(lang); + config_1.STRONGLOOP_GLB.DEFAULT_LANG = lang; + return lang; +} +exports.setDefaultLanguage = setDefaultLanguage; +/** + * setAppLanguages + * + * @param {string} (optional, default: `[...]`) []. + * Sets the supported languages for the application. + * These should be a subset of the languages within the intl + * directory. + * + * If no argument is passed, the function uses the contents of + * the intl directory to determine the application languages. + * + */ +function setAppLanguages(langs) { + langs = langs || readAppLanguagesSync() || []; + config_1.STRONGLOOP_GLB.APP_LANGS = langs; + return langs; +} +exports.setAppLanguages = setAppLanguages; +function readAppLanguagesSync() { + try { + const langs = fs.readdirSync(pathUtil.join(config_1.STRONGLOOP_GLB.MASTER_ROOT_DIR, 'intl')); + return langs; + } + catch (ex) { + return null; + } +} +/** + * Globalize.formatMessage wrapper returns a string. + * + * @param {string} path The message key + * @param {object} variables List of placeholder key and content value pair. + * @param {string} variables. The placeholder key. + * @param {string} variables. The content value. + * If the system locale is undefined, falls back to 'en' + */ +function formatMessage(path, variables, lang) { + assert(path); + if (!config_1.STRONGLOOP_GLB.DEFAULT_LANG) + setDefaultLanguage(); + let message = path; + if (helper.hashKeys(path)) { + if (!config_1.STRONGLOOP_GLB.getHash) { + config_1.STRONGLOOP_GLB.getHash = memoize(md5); + } + path = config_1.STRONGLOOP_GLB.getHash(path); + } + lang = lang || config_1.STRONGLOOP_GLB.DEFAULT_LANG; + dbg('~~~ lang = %s %s %j %s', lang, path, variables, __filename); + const trailer = helper.getTrailerAfterDot(path); + if (trailer === 'json' || trailer === 'yml' || trailer === 'yaml') { + const fullPath = pathUtil.join(helper.getRootDir(), path); + return formatJson(fullPath, JSON.parse(variables), lang); + } + function formatMsgInline(language) { + const g = config_1.STRONGLOOP_GLB.bundles[language]; + if (!config_1.STRONGLOOP_GLB.formatters) { + config_1.STRONGLOOP_GLB.formatters = new MapCache(); + } + const allFormatters = config_1.STRONGLOOP_GLB.formatters; + let langFormatters; + if (allFormatters.has(language)) { + langFormatters = allFormatters.get(language); + } + else { + langFormatters = new MapCache(); + allFormatters.set(language, langFormatters); + } + if (langFormatters.has(path)) + return langFormatters.get(path)(variables || {}); + const format = g.messageFormatter(path); + langFormatters.set(path, format); + return format(variables || {}); + } + try { + message = formatMsgInline(lang); + } + catch (e) { + if (lang === helper.ENGLISH) { + message = sanitizeMsg(message, variables); + dbg('*** %s not found for %s. Fall back to: "%s" *** %s', path, lang, message, e); + } + else { + dbg('*** %s for %s not localized. Fall back to English. *** %s', path, lang, e); + try { + message = formatMsgInline(helper.ENGLISH); + } + catch (e) { + message = sanitizeMsg(message, variables); + dbg('*** %s not found for %s. Fall back to: "%s" *** %s', path, lang, message, e); + } + } + } + if (config_1.STRONGLOOP_GLB.PSEUDO_LOC_PREAMBLE) { + message = config_1.STRONGLOOP_GLB.PSEUDO_LOC_PREAMBLE + message; + } + return message; +} +exports.formatMessage = formatMessage; +function formatJson(fullPath, variables, lang) { + assert(fullPath === pathUtil.resolve(helper.getRootDir(), fullPath), '*** full path is required to format json/yaml file: ' + fullPath); + const fileType = helper.getTrailerAfterDot(fullPath); + let jsonData = null; + try { + const contentStr = fs.readFileSync(fullPath, 'utf8'); + if (fileType === 'json') + jsonData = JSON.parse(contentStr); + if (fileType === 'yml' || fileType === 'yaml') + jsonData = yamljs_1.parse(contentStr); + } + catch (_e) { + return '*** read failure: ' + fullPath; + } + const msgs = helper.scanJson(variables, jsonData); + const transMsgs = []; + msgs.forEach(function (msg) { + const transMsg = formatMessage(msg, undefined, lang); + transMsgs.push(transMsg); + }); + helper.replaceJson(variables, jsonData, transMsgs); + return jsonData; +} +exports.formatJson = formatJson; +function sanitizeMsg(message, variables) { + message = message.replace(/}}/g, '').replace(/{{/g, ''); + if (typeof variables === 'string' || + (Array.isArray(variables) && variables.length > 0)) { + const sanitizedMsg = message.replace(/%[sdj]/g, '%s'); + message = util.format.apply(util, [sanitizedMsg].concat(variables)); + } + return message; +} +function packMessage(args, fn, withOriginalMsg, lang) { + const path = args[0]; + const percentInKey = helper.percent(path); + const txtWithTwoOrMoreArgs = helper.getTrailerAfterDot(path) === 'txt' && args.length > 2; + // If it comes from *.txt, there are no percent in the path, + // but there can be one or more %s in the message value. + const variables = percentInKey + ? helper.mapArgs(path, args) + : txtWithTwoOrMoreArgs + ? helper.repackArgs(args, 1) + : args[1]; + let message = formatMessage(path, variables, lang); + if (withOriginalMsg) + message = { + language: lang, + message: message, + orig: path, + vars: variables, + }; + if (fn) + return fn(message); + return message; +} +exports.packMessage = packMessage; +/* RFC 5424 Syslog Message Severities + * 0 Emergency: system is unusable + * 1 Alert: action must be taken immediately + * 2 Critical: critical conditions + * 3 Error: error conditions + * 4 Warning: warning conditions + * 5 Notice: normal but significant condition + * 6 Informational: informational messages + * 7 Debug: debug-level messages + */ +function rfc5424(level, args, print, lang) { + return packMessage(args, msg => { + logPersistent(level, msg); + if (consoleEnabled()) + print(msg.message); + return msg; + }, true, lang); +} +exports.rfc5424 = rfc5424; +function myError(...args) { + const msg = packMessage(args, null, true); + logPersistent('error', msg); + return new Error(msg.message); +} +module.exports.Error = myError; +// RFC 5424 Syslog Message Severities +function emergency(...args) { + return rfc5424('emergency', args, console.error); +} +exports.emergency = emergency; +function alert(...args) { + return rfc5424('alert', args, console.error); +} +exports.alert = alert; +function critical(...args) { + return rfc5424('critical', args, console.error); +} +exports.critical = critical; +function error(...args) { + return rfc5424('error', args, console.error); +} +exports.error = error; +function warning(...args) { + return rfc5424('warning', args, console.error); +} +exports.warning = warning; +function notice(...args) { + return rfc5424('notice', args, console.log); +} +exports.notice = notice; +function informational(...args) { + return rfc5424('informational', args, console.log); +} +exports.informational = informational; +function debug(...args) { + return rfc5424('debug', args, console.log); +} +exports.debug = debug; +function warn(...args) { + return rfc5424('warn', args, console.error); +} +exports.warn = warn; +function info(...args) { + return rfc5424('info', args, console.log); +} +exports.info = info; +function log(...args) { + return rfc5424('log', args, console.log); +} +exports.log = log; +function help(...args) { + return rfc5424('help', args, console.log); +} +exports.help = help; +function data(...args) { + return rfc5424('data', args, console.log); +} +exports.data = data; +function prompt(...args) { + return rfc5424('prompt', args, console.log); +} +exports.prompt = prompt; +function verbose(...args) { + return rfc5424('verbose', args, console.log); +} +exports.verbose = verbose; +function input(...args) { + return rfc5424('input', args, console.log); +} +exports.input = input; +function silly(...args) { + return rfc5424('silly', args, console.log); +} +exports.silly = silly; +/** + * Globalize.formatNumber wrapper returns a string. + * + * @param {value} integer or float + * @param {object} The options (optional); if null, use the StrongLoop default. + * Strongly recommended to set NO options and let strong-globalize use + * the StrongLoop default for consistency across StrongLoop products. + * See https://www.npmjs.com/package/globalize#number-module + */ +function formatNumber(value, options, lang) { + assert(value); + if (!config_1.STRONGLOOP_GLB.DEFAULT_LANG) + setDefaultLanguage(lang); + lang = (lang || config_1.STRONGLOOP_GLB.DEFAULT_LANG); + options = options || SL_DEFAULT_NUMBER; + const G = config_1.STRONGLOOP_GLB.bundles[lang]; + let msg = null; + try { + msg = G.formatNumber(value, options); + } + catch (e) { + msg = value.toString(); + dbg('*** formatNumber error: value:%s', msg); + } + return msg; +} +exports.formatNumber = formatNumber; +/** + * Globalize.formatDate wrapper returns a string. + * + * @param {Date object} such as new Date() + * @param {object} The options (optional); if null, use the StrongLoop default. + * Strongly recommended to set NO options and let strong-globalize use + * the StrongLoop default for consistency across StrongLoop products. + * See https://www.npmjs.com/package/globalize#date-module + */ +function formatDate(value, options, lang) { + assert(value); + if (!config_1.STRONGLOOP_GLB.DEFAULT_LANG) + setDefaultLanguage(lang); + lang = (lang || config_1.STRONGLOOP_GLB.DEFAULT_LANG); + options = options || SL_DEFAULT_DATETIME; + const G = config_1.STRONGLOOP_GLB.bundles[lang]; + let msg = null; + try { + msg = G.formatDate(value, options); + } + catch (e) { + msg = value.toString(); + dbg('*** formatDate error: value:%s', msg); + } + return msg; +} +exports.formatDate = formatDate; +/** + * Globalize.formatCurrency wrapper returns a string. + * + * @param {value} integer or float + * @param {string} three-letter currency symbol, ISO 4217 Currency Code + * @param {object} The options (optional); if null, use the StrongLoop default. + * Strongly recommended to set NO options and let strong-globalize use + * the StrongLoop default for consistency across StrongLoop products. + * See https://www.npmjs.com/package/globalize#curency-module + */ +function formatCurrency(value, currencySymbol, options, lang) { + assert(value && currencySymbol); + if (!config_1.STRONGLOOP_GLB.DEFAULT_LANG) + setDefaultLanguage(lang); + lang = lang || config_1.STRONGLOOP_GLB.DEFAULT_LANG; + options = options || SL_DEFAULT_CURRENCY; + const G = config_1.STRONGLOOP_GLB.bundles[lang]; + let msg = null; + try { + msg = G.formatCurrency(value, currencySymbol, options); + } + catch (e) { + msg = currencySymbol.toString() + value.toString(); + dbg('*** formatCurrency error: value:%s, currencySymbol:%s', value, currencySymbol); + } + return msg; +} +exports.formatCurrency = formatCurrency; +function loadGlobalize(lang, enumerateNodeModules) { + assert(helper.isSupportedLanguage(lang), 'Not supported: ' + lang); + if (!config_1.STRONGLOOP_GLB.versionSG) { + const versionSG = helper.getPackageVersion(pathUtil.join(__dirname, '..')); + const versionG = helper.getPackageVersion(pathUtil.join(__dirname, '..', 'node_modules', 'globalize')); + Object.assign(config_1.STRONGLOOP_GLB, { + versionSG: versionSG, + versionG: versionG, + bundles: {}, + formatters: new MapCache(), + getHash: memoize(md5), + load: Globalize.load, + locale: Globalize.locale, + loadMessages: Globalize.loadMessages, + DEFAULT_LANG: helper.ENGLISH, + APP_LANGS: readAppLanguagesSync(), + LOG_FN: null, + DISABLE_CONSOLE: false, + MASTER_ROOT_DIR: helper.getRootDir(), + MSG_RES_LOADED: [], + AUTO_MSG_LOADING: helper.AML_DEFAULT, + PSEUDO_LOC_PREAMBLE: process.env.STRONG_GLOBALIZE_PSEUDO_LOC_PREAMBLE || '', + }); + loadCldr(helper.ENGLISH); + config_1.STRONGLOOP_GLB.bundles[helper.ENGLISH] = new Globalize(helper.ENGLISH); + config_1.STRONGLOOP_GLB.locale(helper.ENGLISH); + helper.loadMsgFromFile(helper.ENGLISH, helper.getRootDir(), enumerateNodeModules); + } + if (!(lang in config_1.STRONGLOOP_GLB.bundles)) { + loadCldr(lang); + config_1.STRONGLOOP_GLB.bundles[lang] = new Globalize(lang); + config_1.STRONGLOOP_GLB.locale(lang); + helper.loadMsgFromFile(lang, helper.getRootDir(), enumerateNodeModules); + } + return config_1.STRONGLOOP_GLB.bundles[lang]; +} +exports.loadGlobalize = loadGlobalize; +function loadCldr(lang) { + assert(config_1.STRONGLOOP_GLB && + (!config_1.STRONGLOOP_GLB.bundles || !config_1.STRONGLOOP_GLB.bundles[lang]), 'CLDR already loaded for ' + lang); + const cldrDir = pathUtil.join(__dirname, '..', 'cldr'); + helper.enumerateFilesSync(cldrDir, null, ['json'], false, false, function (content, filePath) { + let cldr = null; + try { + cldr = JSON.parse(content); + } + catch (e) { + throw new Error('*** CLDR read error on ' + process.platform); + } + const cldrMain = { main: {} }; + cldrMain.main[lang] = cldr.main[lang]; + config_1.STRONGLOOP_GLB.load(cldrMain); + if (lang === helper.ENGLISH) { + const cldrSupplemental = { supplemental: cldr.supplemental }; + config_1.STRONGLOOP_GLB.load(cldrSupplemental); + } + }); +} +/** + * + * Persistent logging + * + */ +// const syslogLevels = { // RFC5424 +// emerg: 0, +// alert: 1, +// crit: 2, +// error: 3, +// warning: 4, +// notice: 5, +// info: 6, +// debug: 7, +// }; +// const npmLevels = { +// error: 0, +// warn: 1, +// info: 2, +// verbose: 3, +// debug: 4, +// silly: 5, +// }; +function consoleEnabled() { + if (!config_1.STRONGLOOP_GLB.DEFAULT_LANG) + setDefaultLanguage(); + return !config_1.STRONGLOOP_GLB.DISABLE_CONSOLE; +} +exports.consoleEnabled = consoleEnabled; +/** + * + */ +function setPersistentLogging(logFn, disableConsole) { + assert(logFn); + assert(typeof logFn === 'function'); + if (!config_1.STRONGLOOP_GLB.DEFAULT_LANG) + setDefaultLanguage(); + config_1.STRONGLOOP_GLB.DISABLE_CONSOLE = !!disableConsole; + try { + const message = 'StrongGlobalize persistent logging started at ' + new Date(); + logFn('info', { + language: helper.ENGLISH, + message: message, + orig: message, + vars: [], + }); + config_1.STRONGLOOP_GLB.LOG_FN = logFn; + } + catch (e) { + config_1.STRONGLOOP_GLB.LOG_FN = undefined; + } +} +exports.setPersistentLogging = setPersistentLogging; +function logPersistent(level = 'info', message) { + if (!config_1.STRONGLOOP_GLB.DEFAULT_LANG) + setDefaultLanguage(); + if (!config_1.STRONGLOOP_GLB.LOG_FN) + return; + level = level || 'info'; + if (typeof config_1.STRONGLOOP_GLB.LOG_FN === 'function') { + config_1.STRONGLOOP_GLB.LOG_FN(level, message); + } +} +exports.logPersistent = logPersistent; +//# sourceMappingURL=globalize.js.map \ No newline at end of file diff --git a/node_modules/strong-globalize/lib/globalize.js.map b/node_modules/strong-globalize/lib/globalize.js.map new file mode 100644 index 00000000..0f1f3bb9 --- /dev/null +++ b/node_modules/strong-globalize/lib/globalize.js.map @@ -0,0 +1 @@ +{"version":3,"file":"globalize.js","sourceRoot":"","sources":["../src/globalize.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,gCAAgC;AAChC,wDAAwD;AACxD,yEAAyE;;AAEzE,uBAAuB;AAEvB,iCAAiC;AACjC,qCAAqC;AACrC,yBAAyB;AACzB,uCAAuC;AACvC,mCAA6B;AAC7B,qCAAmD;AACnD,mCAAmC;AACnC,MAAM,GAAG,GAAG,WAAW,CAAC,kBAAkB,CAAC,CAAC;AAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AAC3B,MAAM,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AACjC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAE7B,mCAAoC;AAA5B,8BAAA,UAAU,CAAA;AAEL,QAAA,CAAC,GAAG,cAAc,CAAC;AACnB,QAAA,CAAC,GAAG,UAAU,CAAC;AACf,QAAA,CAAC,GAAG,YAAY,CAAC;AACjB,QAAA,CAAC,GAAG,aAAa,CAAC;AAClB,QAAA,CAAC,GAAG,aAAa,CAAC;AAE/B,mCAAwC;AAAhC,kCAAA,cAAc,CAAA;AAEtB;;GAEG;AAEH,MAAM,mBAAmB,GAAG,EAAC,QAAQ,EAAE,QAAQ,EAAC,CAAC;AACjD,MAAM,iBAAiB,GAAG,EAAC,KAAK,EAAE,OAAO,EAAC,CAAC;AAC3C,MAAM,mBAAmB,GAAG,EAAC,KAAK,EAAE,MAAM,EAAC,CAAC;AAE5C,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;AAC7B,IAAI,WAAW,GACb,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC;AAChD,WAAW,GAAG,MAAM,CAAC,mBAAmB,CAAC,WAAY,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;AAE5E,SAAS,UAAU;IACjB,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpC,IAAI,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAClD,IAAI,IAAI,KAAK,IAAI,EAAE;QACjB,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,SAAS,CAAC;QACtC,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,SAAS,CAAC;QACtC,IAAI,MAAM,KAAK,MAAM;YAAE,OAAO,SAAS,CAAC;QACxC,IAAI,MAAM,KAAK,MAAM;YAAE,OAAO,SAAS,CAAC;KACzC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAgB,kBAAkB,CAAC,IAAa;IAC9C,IAAI,GAAG,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3D,IAAI,GAAG,IAAI,IAAI,WAAW,IAAI,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC;IACxD,aAAa,CAAC,IAAI,CAAC,CAAC;IACpB,IAAI,IAAI,KAAK,MAAM,CAAC,OAAO,EAAE;QAC3B,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KAC/B;IACD,uBAAc,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,uBAAc,CAAC,YAAY,GAAG,IAAI,CAAC;IACnC,OAAO,IAAI,CAAC;AACd,CAAC;AAVD,gDAUC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,eAAe,CAAC,KAAgB;IAC9C,KAAK,GAAG,KAAK,IAAI,oBAAoB,EAAE,IAAI,EAAE,CAAC;IAC9C,uBAAc,CAAC,SAAS,GAAG,KAAK,CAAC;IACjC,OAAO,KAAK,CAAC;AACf,CAAC;AAJD,0CAIC;AAED,SAAS,oBAAoB;IAC3B,IAAI;QACF,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAC1B,QAAQ,CAAC,IAAI,CAAC,uBAAc,CAAC,eAAe,EAAE,MAAM,CAAC,CACtD,CAAC;QACF,OAAO,KAAK,CAAC;KACd;IAAC,OAAO,EAAE,EAAE;QACX,OAAO,IAAI,CAAC;KACb;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,aAAa,CAC3B,IAAY,EACZ,SAA6B,EAC7B,IAAa;IAEb,MAAM,CAAC,IAAI,CAAC,CAAC;IACb,IAAI,CAAC,uBAAc,CAAC,YAAY;QAAE,kBAAkB,EAAE,CAAC;IACvD,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;QACzB,IAAI,CAAC,uBAAc,CAAC,OAAO,EAAE;YAC3B,uBAAc,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;SACvC;QACD,IAAI,GAAG,uBAAc,CAAC,OAAQ,CAAC,IAAI,CAAC,CAAC;KACtC;IACD,IAAI,GAAG,IAAI,IAAI,uBAAc,CAAC,YAAY,CAAC;IAC3C,GAAG,CAAC,wBAAwB,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,MAAM,EAAE;QACjE,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,CAAC;QAC1D,OAAO,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,SAAmB,CAAC,EAAE,IAAI,CAAC,CAAC;KACpE;IAED,SAAS,eAAe,CAAC,QAAgB;QACvC,MAAM,CAAC,GAAG,uBAAc,CAAC,OAAQ,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,uBAAc,CAAC,UAAU,EAAE;YAC9B,uBAAc,CAAC,UAAU,GAAG,IAAI,QAAQ,EAAE,CAAC;SAC5C;QACD,MAAM,aAAa,GAAG,uBAAc,CAAC,UAAW,CAAC;QACjD,IAAI,cAAc,CAAC;QACnB,IAAI,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YAC/B,cAAc,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;SAC9C;aAAM;YACL,cAAc,GAAG,IAAI,QAAQ,EAAE,CAAC;YAChC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;SAC7C;QACD,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;YAC1B,OAAO,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACxC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACjC,OAAO,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IACjC,CAAC;IACD,IAAI;QACF,OAAO,GAAG,eAAe,CAAC,IAAK,CAAC,CAAC;KAClC;IAAC,OAAO,CAAC,EAAE;QACV,IAAI,IAAI,KAAK,MAAM,CAAC,OAAO,EAAE;YAC3B,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAC1C,GAAG,CACD,qDAAqD,EACrD,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,CAAC,CACF,CAAC;SACH;aAAM;YACL,GAAG,CACD,4DAA4D,EAC5D,IAAI,EACJ,IAAI,EACJ,CAAC,CACF,CAAC;YACF,IAAI;gBACF,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;aAC3C;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;gBAC1C,GAAG,CACD,qDAAqD,EACrD,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,CAAC,CACF,CAAC;aACH;SACF;KACF;IACD,IAAI,uBAAc,CAAC,mBAAmB,EAAE;QACtC,OAAO,GAAG,uBAAc,CAAC,mBAAmB,GAAG,OAAO,CAAC;KACxD;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AA9ED,sCA8EC;AAED,SAAgB,UAAU,CACxB,QAAgB,EAChB,SAAmB,EACnB,IAAa;IAEb,MAAM,CACJ,QAAQ,KAAK,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,QAAQ,CAAC,EAC5D,sDAAsD,GAAG,QAAQ,CAClE,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACrD,IAAI,QAAQ,GAAG,IAAI,CAAC;IACpB,IAAI;QACF,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACrD,IAAI,QAAQ,KAAK,MAAM;YAAE,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC3D,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,MAAM;YAAE,QAAQ,GAAG,cAAK,CAAC,UAAU,CAAC,CAAC;KAC7E;IAAC,OAAO,EAAE,EAAE;QACX,OAAO,oBAAoB,GAAG,QAAQ,CAAC;KACxC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAa,CAAC;IAC9D,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,CAAC,OAAO,CAAC,UAAS,GAAG;QACvB,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QACrD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IACnD,OAAO,QAAQ,CAAC;AAClB,CAAC;AA1BD,gCA0BC;AAED,SAAS,WAAW,CAAC,OAAe,EAAE,SAA6B;IACjE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACxD,IACE,OAAO,SAAS,KAAK,QAAQ;QAC7B,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,EAClD;QACA,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACtD,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;KACrE;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAgB,WAAW,CACzB,IAAW,EACX,EAA8B,EAC9B,eAAwB,EACxB,IAAa;IAEb,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACrB,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,oBAAoB,GACxB,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/D,4DAA4D;IAC5D,wDAAwD;IACxD,MAAM,SAAS,GAAG,YAAY;QAC5B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;QAC5B,CAAC,CAAC,oBAAoB;YACtB,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACZ,IAAI,OAAO,GAAG,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IACnD,IAAI,eAAe;QACjB,OAAO,GAAG;YACR,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,SAAS;SAChB,CAAC;IACJ,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC;IAC3B,OAAO,OAAO,CAAC;AACjB,CAAC;AA3BD,kCA2BC;AAED;;;;;;;;;GASG;AAEH,SAAgB,OAAO,CACrB,KAAa,EACb,IAAW,EACX,KAA+B,EAC/B,IAAa;IAEb,OAAO,WAAW,CAChB,IAAI,EACJ,GAAG,CAAC,EAAE;QACJ,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC1B,IAAI,cAAc,EAAE;YAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACzC,OAAO,GAAG,CAAC;IACb,CAAC,EACD,IAAI,EACJ,IAAI,CACL,CAAC;AACJ,CAAC;AAhBD,0BAgBC;AAED,SAAS,OAAO,CAAC,GAAG,IAAW;IAC7B,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1C,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC5B,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC;AAE/B,qCAAqC;AACrC,SAAgB,SAAS,CAAC,GAAG,IAAW;IACtC,OAAO,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;AACnD,CAAC;AAFD,8BAEC;AAED,SAAgB,KAAK,CAAC,GAAG,IAAW;IAClC,OAAO,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;AAC/C,CAAC;AAFD,sBAEC;AAED,SAAgB,QAAQ,CAAC,GAAG,IAAW;IACrC,OAAO,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;AAClD,CAAC;AAFD,4BAEC;AAED,SAAgB,KAAK,CAAC,GAAG,IAAW;IAClC,OAAO,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;AAC/C,CAAC;AAFD,sBAEC;AAED,SAAgB,OAAO,CAAC,GAAG,IAAW;IACpC,OAAO,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;AACjD,CAAC;AAFD,0BAEC;AAED,SAAgB,MAAM,CAAC,GAAG,IAAW;IACnC,OAAO,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;AAC9C,CAAC;AAFD,wBAEC;AAED,SAAgB,aAAa,CAAC,GAAG,IAAW;IAC1C,OAAO,OAAO,CAAC,eAAe,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;AACrD,CAAC;AAFD,sCAEC;AAED,SAAgB,KAAK,CAAC,GAAG,IAAW;IAClC,OAAO,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;AAC7C,CAAC;AAFD,sBAEC;AAED,SAAgB,IAAI,CAAC,GAAG,IAAW;IACjC,OAAO,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9C,CAAC;AAFD,oBAEC;AACD,SAAgB,IAAI,CAAC,GAAG,IAAW;IACjC,OAAO,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;AAC5C,CAAC;AAFD,oBAEC;AACD,SAAgB,GAAG,CAAC,GAAG,IAAW;IAChC,OAAO,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;AAC3C,CAAC;AAFD,kBAEC;AAED,SAAgB,IAAI,CAAC,GAAG,IAAW;IACjC,OAAO,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;AAC5C,CAAC;AAFD,oBAEC;AAED,SAAgB,IAAI,CAAC,GAAG,IAAW;IACjC,OAAO,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;AAC5C,CAAC;AAFD,oBAEC;AAED,SAAgB,MAAM,CAAC,GAAG,IAAW;IACnC,OAAO,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;AAC9C,CAAC;AAFD,wBAEC;AAED,SAAgB,OAAO,CAAC,GAAG,IAAW;IACpC,OAAO,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;AAC/C,CAAC;AAFD,0BAEC;AAED,SAAgB,KAAK,CAAC,GAAG,IAAW;IAClC,OAAO,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;AAC7C,CAAC;AAFD,sBAEC;AAED,SAAgB,KAAK,CAAC,GAAG,IAAW;IAClC,OAAO,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;AAC7C,CAAC;AAFD,sBAEC;AAED;;;;;;;;GAQG;AACH,SAAgB,YAAY,CAC1B,KAAa,EACb,OAAmB,EACnB,IAAa;IAEb,MAAM,CAAC,KAAK,CAAC,CAAC;IACd,IAAI,CAAC,uBAAc,CAAC,YAAY;QAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC3D,IAAI,GAAG,CAAC,IAAI,IAAI,uBAAc,CAAC,YAAY,CAAE,CAAC;IAC9C,OAAO,GAAG,OAAO,IAAI,iBAAiB,CAAC;IACvC,MAAM,CAAC,GAAG,uBAAc,CAAC,OAAQ,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,IAAI;QACF,GAAG,GAAG,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;KACtC;IAAC,OAAO,CAAC,EAAE;QACV,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QACvB,GAAG,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAC;KAC9C;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAlBD,oCAkBC;AAED;;;;;;;;GAQG;AACH,SAAgB,UAAU,CAAC,KAAW,EAAE,OAAmB,EAAE,IAAa;IACxE,MAAM,CAAC,KAAK,CAAC,CAAC;IACd,IAAI,CAAC,uBAAc,CAAC,YAAY;QAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC3D,IAAI,GAAG,CAAC,IAAI,IAAI,uBAAc,CAAC,YAAY,CAAE,CAAC;IAC9C,OAAO,GAAG,OAAO,IAAI,mBAAmB,CAAC;IACzC,MAAM,CAAC,GAAG,uBAAc,CAAC,OAAQ,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,IAAI;QACF,GAAG,GAAG,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;KACpC;IAAC,OAAO,CAAC,EAAE;QACV,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QACvB,GAAG,CAAC,gCAAgC,EAAE,GAAG,CAAC,CAAC;KAC5C;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAdD,gCAcC;AAED;;;;;;;;;GASG;AACH,SAAgB,cAAc,CAC5B,KAAU,EACV,cAAsB,EACtB,OAAmB,EACnB,IAAa;IAEb,MAAM,CAAC,KAAK,IAAI,cAAc,CAAC,CAAC;IAChC,IAAI,CAAC,uBAAc,CAAC,YAAY;QAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC3D,IAAI,GAAG,IAAI,IAAI,uBAAc,CAAC,YAAY,CAAC;IAC3C,OAAO,GAAG,OAAO,IAAI,mBAAmB,CAAC;IACzC,MAAM,CAAC,GAAG,uBAAc,CAAC,OAAQ,CAAC,IAAK,CAAC,CAAC;IACzC,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,IAAI;QACF,GAAG,GAAG,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;KACxD;IAAC,OAAO,CAAC,EAAE;QACV,GAAG,GAAG,cAAc,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnD,GAAG,CACD,uDAAuD,EACvD,KAAK,EACL,cAAc,CACf,CAAC;KACH;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAvBD,wCAuBC;AAED,SAAgB,aAAa,CAAC,IAAa,EAAE,oBAA8B;IACzE,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC,CAAC;IACnE,IAAI,CAAC,uBAAc,CAAC,SAAS,EAAE;QAC7B,MAAM,SAAS,GAAG,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;QAC3E,MAAM,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CACvC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,CAAC,CAC5D,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,uBAAc,EAAE;YAC5B,SAAS,EAAE,SAAS;YACpB,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,EAAE;YACX,UAAU,EAAE,IAAI,QAAQ,EAAE;YAC1B,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC;YACrB,IAAI,EAAE,SAAS,CAAC,IAAI;YACpB,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,YAAY,EAAE,SAAS,CAAC,YAAY;YACpC,YAAY,EAAE,MAAM,CAAC,OAAO;YAC5B,SAAS,EAAE,oBAAoB,EAAE;YACjC,MAAM,EAAE,IAAI;YACZ,eAAe,EAAE,KAAK;YACtB,eAAe,EAAE,MAAM,CAAC,UAAU,EAAE;YACpC,cAAc,EAAE,EAAE;YAClB,gBAAgB,EAAE,MAAM,CAAC,WAAW;YACpC,mBAAmB,EACjB,OAAO,CAAC,GAAG,CAAC,oCAAoC,IAAI,EAAE;SACzD,CAAC,CAAC;QACH,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzB,uBAAc,CAAC,OAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACxE,uBAAc,CAAC,MAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvC,MAAM,CAAC,eAAe,CACpB,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,UAAU,EAAE,EACnB,oBAAoB,CACrB,CAAC;KACH;IACD,IAAI,CAAC,CAAC,IAAK,IAAI,uBAAc,CAAC,OAAQ,CAAC,EAAE;QACvC,QAAQ,CAAC,IAAK,CAAC,CAAC;QAChB,uBAAc,CAAC,OAAQ,CAAC,IAAK,CAAC,GAAG,IAAI,SAAS,CAAC,IAAK,CAAC,CAAC;QACtD,uBAAc,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,CAAC,eAAe,CAAC,IAAK,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,oBAAoB,CAAC,CAAC;KAC1E;IACD,OAAO,uBAAc,CAAC,OAAQ,CAAC,IAAK,CAAC,CAAC;AACxC,CAAC;AA1CD,sCA0CC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,MAAM,CACJ,uBAAc;QACZ,CAAC,CAAC,uBAAc,CAAC,OAAO,IAAI,CAAC,uBAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAC5D,0BAA0B,GAAG,IAAI,CAClC,CAAC;IACF,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACvD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,UAC/D,OAAO,EACP,QAAQ;QAER,IAAI,IAAI,GAAG,IAAI,CAAC;QAChB,IAAI;YACF,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SAC5B;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;SAC/D;QACD,MAAM,QAAQ,GAAc,EAAC,IAAI,EAAE,EAAE,EAAC,CAAC;QACvC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,uBAAc,CAAC,IAAK,CAAC,QAAQ,CAAC,CAAC;QAC/B,IAAI,IAAI,KAAK,MAAM,CAAC,OAAO,EAAE;YAC3B,MAAM,gBAAgB,GAAG,EAAC,YAAY,EAAE,IAAI,CAAC,YAAY,EAAC,CAAC;YAC3D,uBAAc,CAAC,IAAK,CAAC,gBAAgB,CAAC,CAAC;SACxC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AAEH,oCAAoC;AACpC,cAAc;AACd,cAAc;AACd,aAAa;AACb,cAAc;AACd,gBAAgB;AAChB,eAAe;AACf,aAAa;AACb,cAAc;AACd,KAAK;AAEL,sBAAsB;AACtB,cAAc;AACd,aAAa;AACb,aAAa;AACb,gBAAgB;AAChB,cAAc;AACd,cAAc;AACd,KAAK;AAEL,SAAgB,cAAc;IAC5B,IAAI,CAAC,uBAAc,CAAC,YAAY;QAAE,kBAAkB,EAAE,CAAC;IACvD,OAAO,CAAC,uBAAc,CAAC,eAAe,CAAC;AACzC,CAAC;AAHD,wCAGC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAClC,KAA8D,EAC9D,cAAwB;IAExB,MAAM,CAAC,KAAK,CAAC,CAAC;IACd,MAAM,CAAC,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC;IACpC,IAAI,CAAC,uBAAc,CAAC,YAAY;QAAE,kBAAkB,EAAE,CAAC;IACvD,uBAAc,CAAC,eAAe,GAAG,CAAC,CAAC,cAAc,CAAC;IAClD,IAAI;QACF,MAAM,OAAO,GACX,gDAAgD,GAAG,IAAI,IAAI,EAAE,CAAC;QAChE,KAAK,CAAC,MAAM,EAAE;YACZ,QAAQ,EAAE,MAAM,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,EAAE;SACT,CAAC,CAAC;QACH,uBAAc,CAAC,MAAM,GAAG,KAAK,CAAC;KAC/B;IAAC,OAAO,CAAC,EAAE;QACV,uBAAc,CAAC,MAAM,GAAG,SAAS,CAAC;KACnC;AACH,CAAC;AArBD,oDAqBC;AAED,SAAgB,aAAa,CAAC,QAAgB,MAAM,EAAE,OAAY;IAChE,IAAI,CAAC,uBAAc,CAAC,YAAY;QAAE,kBAAkB,EAAE,CAAC;IACvD,IAAI,CAAC,uBAAc,CAAC,MAAM;QAAE,OAAO;IACnC,KAAK,GAAG,KAAK,IAAI,MAAM,CAAC;IACxB,IAAI,OAAO,uBAAc,CAAC,MAAM,KAAK,UAAU,EAAE;QAC/C,uBAAc,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;KACvC;AACH,CAAC;AAPD,sCAOC"} \ No newline at end of file diff --git a/node_modules/strong-globalize/lib/helper.d.ts b/node_modules/strong-globalize/lib/helper.d.ts new file mode 100644 index 00000000..ed66f0a7 --- /dev/null +++ b/node_modules/strong-globalize/lib/helper.d.ts @@ -0,0 +1,132 @@ +import { AnyObject } from './config'; +export declare const ENGLISH = "en"; +export declare const PSEUDO_LANG = "zz"; +export declare const PSEUDO_TAG = "\u265A\u265B\u265C\u265D\u265E\u265F"; +export declare const MSG_TAG = "message"; +export declare const HELPTXT_TAG = "helptxt"; +export declare const AML_ALL = "all"; +export declare const AML_NONE = "none"; +export declare const AML_DEFAULT = "none"; +export declare const BIG_NUM = 999999999999; +export declare const MSG_GPB_UNAVAILABLE = "*** Login to GPB failed or GPB.supportedTranslations error."; +export declare function hashKeys(p: string): boolean; +/** + * @param {string} Override the root directory path + */ +export declare function setRootDir(rootPath: string): void; +export declare function getRootDir(): string; +export declare function isRootPackage(): boolean; +export declare function initGlobForSltGlobalize(rootDir?: string): void; +export declare function isLoadMessages(rootDir: string): boolean; +export declare function validateAmlValue(aml: string | string[]): false | string[] | "all" | "none"; +export declare function msgFileIdHash(fileName: string, rootDir: string): string; +export declare function registerResTag(fileIdHash: string, fileName: string, lang: string, tagType: string): boolean; +export declare function resTagExists(fileIdHash: string, fileName: string, lang: string, tagType: string): boolean; +export declare function stripBom(str: string): string; +export declare function enumerateFilesSync(rootDir: string, blackList: string[] | null, targetFileType: string | string[], verbose: boolean, checkNodeModules: boolean, callback: (content: string, filePath: string) => void): void; +export declare function alreadyScanned(fileName: string): boolean; +export declare function enumerateFilesSyncPriv(currentPath: string, rootDir: string, blackList: string[] | null, targetFileType: string | string[], verbose: boolean, checkNodeModules: boolean, callback: (content: string, child: string) => void): void; +/** + * @param action A function to be invoked for each target language. + * If it returns `true`, the enumeration will be terminated. + */ +export declare function enumerateLanguageSync(action: (lang: string) => boolean | undefined): void; +/** + * @param {string} lang Supported languages in CLDR notation + * @param {Function} + * If callback returns err; if err, stop enumeration. + */ +export declare function cloneEnglishTxtSyncDeep(rootDir?: string): number; +export declare function enumerateMsgSync(rootDir: string, lang: string, checkNodeModules: boolean, callback: (jsonObj: AnyObject, filePath: string) => void): number; +export declare function enumerateMsgSyncPriv(currentPath: string, rootDir: string, lang: string, checkNodeModules: boolean, cloneEnglishTxt: boolean, clonedTxtCount: number, callback: (json: object, file: string) => void): number; +export declare function removeObsoleteFile(dir: string, fileNames: string[]): void; +export declare function directoryDepth(fullPath: string): number; +export declare function maxDirectoryDepth(): number; +export declare function requireResolve(depName: string, currentDir: string, rootDir: string): string | null; +export declare function unsymbolLink(filePath: string): string | null; +export declare function resolveDependencies(currentDir: string, rootDir: string, moduleRootPaths?: string[]): string[] | null; +export declare function readToJson(langDirPath: string, msgFile: string, lang: string): any; +export declare function normalizeKeyArrays(keyArrays?: string | string[]): string[][]; +export declare function scanJson(keys: string[], data: AnyObject, returnErrors?: boolean): string[] | AnyObject; +export declare function replaceJson(keys: string[], data: AnyObject, newValues: any[]): string[] | AnyObject; +export declare function scanJsonPriv(keys: string[], data: AnyObject, newValues: any[] | null, returnErrors?: boolean): string[] | AnyObject; +export declare function sortMsges(msgs: { + [name: string]: any; +}): { + [name: string]: any; +}; +/** + * Initialize intl directory structure for non-En languages + * intl/en must exist. + * it returns false if failed. + */ +export declare function initIntlDirs(): boolean; +/** + * @param {string} lang Supported languages in CLDR notation + * Returns true for 'en' and supported languages + * in CLDR notation. + */ +export declare function isSupportedLanguage(lang?: string): boolean; +/** + * Returns an array of locales supported by the local cldr data. + */ +export declare function getSupportedLanguages(): string[]; +export declare function getAppLanguages(): string[]; +/** + * Returns trailer of file name. + */ +export declare function getTrailerAfterDot(name: string): string | null; +/** + * Returns package name defined in package.json. + */ +export declare function getPackageName(root?: string): any; +export declare function getPackageVersion(root?: string): any; +export declare function getPackageItem(root: string | undefined, itemName: string): any; +/** + * @param {string} name to be checked + * @param {Array} headersAllowed a list of strings to check + * Returns directory path for the language. + */ +export declare function headerIncluded(name: string, headersAllowed: string[]): boolean; +/** + * @param {string} lang Supported languages in CLDR notation + * Returns directory path for the language. + */ +export declare function intlDir(lang: string): string; +/** + * %s is included in the string + */ +export declare function percent(msg: string): boolean; +/** + * %replace %s with {N} where N=0,1,2,... + */ +export declare function mapPercent(msg: string): string; +export declare function mapArgs(p: string, args: any[]): string[]; +export declare function repackArgs(args: any[] | { + [name: number]: any; +}, initIx: number): any[]; +/** + * Get the language (from the supported languages) that + * best matches the requested Accept-Language expression. + * + * @param req + * @param globalize + * @returns {*} + */ +export declare function getLanguageFromRequest(req: { + headers: { + [name: string]: string; + }; +}, appLanguages: string[], defaultLanguage: string): string; +export declare function myIntlDir(): string; +/** + * Load messages for the language from a given root directory + * @param lang Language for messages + * @param rootDir Root directory + * @param enumerateNodeModules A flag to control if node_modules will be checked + */ +export declare function loadMsgFromFile(lang: string, rootDir: string, enumerateNodeModules?: boolean): void; +/** + * Remove `{{` and `}}` + */ +export declare function removeDoubleCurlyBraces(json: AnyObject): void; diff --git a/node_modules/strong-globalize/lib/helper.js b/node_modules/strong-globalize/lib/helper.js new file mode 100644 index 00000000..36765cc2 --- /dev/null +++ b/node_modules/strong-globalize/lib/helper.js @@ -0,0 +1,898 @@ +"use strict"; +// Copyright IBM Corp. 2015,2016. All Rights Reserved. +// Node module: strong-globalize +// This file is licensed under the Artistic License 2.0. +// License text available at https://opensource.org/licenses/Artistic-2.0 +Object.defineProperty(exports, "__esModule", { value: true }); +const dbg = require("debug"); +const debug = dbg('strong-globalize'); +const acceptLanguage = require("accept-language"); +const assert = require("assert"); +const fs = require("fs"); +const _ = require("lodash"); +const md5 = require("md5"); +const mkdirp = require("mkdirp"); +const path = require("path"); +const config_1 = require("./config"); +exports.ENGLISH = 'en'; +exports.PSEUDO_LANG = 'zz'; +exports.PSEUDO_TAG = '♚♛♜♝♞♟'; +exports.MSG_TAG = 'message'; +exports.HELPTXT_TAG = 'helptxt'; +exports.AML_ALL = 'all'; +exports.AML_NONE = 'none'; +exports.AML_DEFAULT = exports.AML_NONE; +exports.BIG_NUM = 999999999999; +exports.MSG_GPB_UNAVAILABLE = '*** Login to GPB failed or GPB.supportedTranslations error.'; +const HASH_KEYS = false; +const KEY_HEADERS = ['msg']; +function hashKeys(p) { + let trailer = null; + return !(headerIncluded(p, KEY_HEADERS) || + (trailer = getTrailerAfterDot(p)) === 'txt' || + trailer === 'json' || + trailer === 'yml' || + trailer === 'yaml' || + p.indexOf(exports.PSEUDO_TAG) === 0); +} +exports.hashKeys = hashKeys; +// tslint:disable:no-any +/** + * Supported languages in CLDR notation + */ +let TARGET_LANGS = null; +let MY_ROOT = process.cwd(); +let INTL_DIR = path.join(MY_ROOT, 'intl'); +/** + * @param {string} Override the root directory path + */ +function setRootDir(rootPath) { + let validPath = true; + let rootStats = undefined; + try { + rootStats = fs.statSync(rootPath); + } + catch (e) { + validPath = false; + } + assert(validPath, '*** setRootDir: Root path invalid: ' + rootPath); + if (!rootStats.isDirectory()) + validPath = false; + assert(validPath, '*** setRootDir: Root path is not a directory: ' + rootPath.toString()); + let files = undefined; + try { + files = fs.readdirSync(rootPath); + } + catch (e) { + validPath = false; + } + validPath = validPath && !!files; + if (validPath) { + let intlDirFound = false; + files.forEach(function (item) { + if (intlDirFound) + return; + if (item === 'intl') + intlDirFound = true; + }); + validPath = intlDirFound; + } + assert(validPath, '*** setRootDir: Intl dir not found under: ' + rootPath.toString()); + MY_ROOT = rootPath; + INTL_DIR = path.join(MY_ROOT, 'intl'); +} +exports.setRootDir = setRootDir; +function getRootDir() { + return MY_ROOT; +} +exports.getRootDir = getRootDir; +function isRootPackage() { + return MY_ROOT === config_1.STRONGLOOP_GLB.MASTER_ROOT_DIR; +} +exports.isRootPackage = isRootPackage; +function initGlobForSltGlobalize(rootDir) { + if (config_1.STRONGLOOP_GLB.MASTER_ROOT_DIR) + return; + Object.assign(config_1.STRONGLOOP_GLB, { + MASTER_ROOT_DIR: rootDir || getRootDir(), + MSG_RES_LOADED: [], + }); +} +exports.initGlobForSltGlobalize = initGlobForSltGlobalize; +function isLoadMessages(rootDir) { + if (!config_1.STRONGLOOP_GLB.MASTER_ROOT_DIR) + return false; + if (path.resolve(rootDir) === path.resolve(config_1.STRONGLOOP_GLB.MASTER_ROOT_DIR)) + return true; + if (!config_1.STRONGLOOP_GLB.AUTO_MSG_LOADING) + return false; + if (config_1.STRONGLOOP_GLB.AUTO_MSG_LOADING === exports.AML_NONE) + return false; + if (config_1.STRONGLOOP_GLB.AUTO_MSG_LOADING === exports.AML_ALL) + return true; + const packagesToLoad = config_1.STRONGLOOP_GLB.AUTO_MSG_LOADING; + const packageName = getPackageName(rootDir); + const load = packagesToLoad.indexOf(packageName) >= 0; + return load; +} +exports.isLoadMessages = isLoadMessages; +function validateAmlValue(aml) { + if (aml === exports.AML_ALL || aml === exports.AML_NONE) + return aml; + if (Array.isArray(aml)) { + if (aml.length === 0) + return false; + aml.forEach(function (v) { + if (typeof aml !== 'string') + return false; + }); + return aml; + } + return false; +} +exports.validateAmlValue = validateAmlValue; +function msgFileIdHash(fileName, rootDir) { + assert(fileName); + rootDir = rootDir || getRootDir(); + const packageName = getPackageName(rootDir); + const packageVersion = getPackageVersion(rootDir); + const msgFileId = fileName + packageName + packageVersion; + return md5(msgFileId); +} +exports.msgFileIdHash = msgFileIdHash; +function registerResTag(fileIdHash, fileName, lang, tagType) { + assert(config_1.STRONGLOOP_GLB); + assert(fileIdHash); + assert(fileName); + assert(lang); + assert(tagType); + if (resTagExists(fileIdHash, fileName, lang, tagType)) + return false; + const resTag = { + fileIdHash: fileIdHash, + fileName: fileName, + lang: lang, + tagType: tagType, + }; + config_1.STRONGLOOP_GLB.MSG_RES_LOADED.push(resTag); + return true; +} +exports.registerResTag = registerResTag; +function resTagExists(fileIdHash, fileName, lang, tagType) { + assert(config_1.STRONGLOOP_GLB); + assert(fileIdHash); + assert(fileName); + assert(lang); + assert(tagType); + const resTag = { + fileIdHash: fileIdHash, + lang: lang, + tagType: tagType, + }; + const exists = _.find(config_1.STRONGLOOP_GLB.MSG_RES_LOADED, resTag) !== undefined; + return exists; +} +exports.resTagExists = resTagExists; +function stripBom(str) { + return str.charCodeAt(0) === 0xfeff ? str.slice(1) : str; +} +exports.stripBom = stripBom; +/** + * Enumerate all JS files in this application + * @param {Function} + * param.content is a UTF8 string of each JS source file. + */ +const showDotCount = 500; +const showCountCount = 10000; +let enumeratedFilesCount = 0; +let scannedFileNameHash = null; +function enumerateFilesSync(rootDir, blackList, targetFileType, verbose, checkNodeModules, callback) { + enumeratedFilesCount = 0; + scannedFileNameHash = []; + return enumerateFilesSyncPriv(rootDir, rootDir, blackList, targetFileType, verbose, checkNodeModules, callback); +} +exports.enumerateFilesSync = enumerateFilesSync; +function alreadyScanned(fileName) { + const realFileName = process.browser ? fileName : fs.realpathSync(fileName); + const fileNameHash = md5(realFileName); + if (scannedFileNameHash.indexOf(fileNameHash) >= 0) { + return true; + } + else { + scannedFileNameHash.push(fileNameHash); + return false; + } +} +exports.alreadyScanned = alreadyScanned; +function enumerateFilesSyncPriv(currentPath, rootDir, blackList, targetFileType, verbose, checkNodeModules, callback) { + if (!currentPath) + currentPath = MY_ROOT; + if (!rootDir) + rootDir = MY_ROOT; + currentPath = path.resolve(currentPath); + if (alreadyScanned(currentPath)) + return; + rootDir = path.resolve(rootDir); + blackList = Array.isArray(blackList) ? blackList : []; + if (!Array.isArray(targetFileType)) + targetFileType = [targetFileType]; + let skipDir = false; + blackList.forEach(function (part) { + if (typeof part !== 'string') + return; + if (currentPath.indexOf(part) >= 0) + skipDir = true; + }); + if (skipDir) { + if (verbose) + console.log('*** skipping directory:', currentPath); + return; + } + let files = null; + try { + files = fs.readdirSync(currentPath); + } + catch (e) { + return; + } + files.forEach(function (item) { + if (item.indexOf('.') === 0) + return; + const child = path.join(currentPath, item); + let stats = null; + try { + stats = fs.statSync(child); + } + catch (e) { + return; + } + if (stats.isDirectory()) { + item = item.toLowerCase(); + if (item === 'test' || item === 'node_modules' || item === 'coverage') + return; + enumerateFilesSyncPriv(child, rootDir, blackList, targetFileType, verbose, checkNodeModules, callback); + } + else { + const fileType = getTrailerAfterDot(item); + if (!fileType || targetFileType.indexOf(fileType) < 0) + return; + const content = stripBom(fs.readFileSync(child, 'utf8')); + if (verbose) + console.log('~~~ examining file:', child); + if (checkNodeModules) { + enumeratedFilesCount++; + if (enumeratedFilesCount % showDotCount === 0) { + process.stdout.write('.'); + if (enumeratedFilesCount % showCountCount === 0) { + process.stdout.write(' ' + enumeratedFilesCount.toString() + '\n'); + } + } + } + callback(content, child); + } + }); + if (checkNodeModules) { + const depthRoot = directoryDepth(rootDir); + const moduleRootPaths = resolveDependencies(currentPath, rootDir); + if (moduleRootPaths) { + moduleRootPaths.forEach(function (modulePath) { + const depthModule = directoryDepth(modulePath); + if (depthModule - depthRoot > maxDirectoryDepth()) + return; + enumerateFilesSyncPriv(modulePath, rootDir, blackList, targetFileType, verbose, checkNodeModules, callback); + }); + } + } +} +exports.enumerateFilesSyncPriv = enumerateFilesSyncPriv; +/** + * @param action A function to be invoked for each target language. + * If it returns `true`, the enumeration will be terminated. + */ +function enumerateLanguageSync(action) { + if (!TARGET_LANGS) + TARGET_LANGS = getSupportedLanguages(); + for (const lang of TARGET_LANGS) { + const stopEnumeration = action(lang); + if (stopEnumeration) + return; + } +} +exports.enumerateLanguageSync = enumerateLanguageSync; +/** + * @param {string} lang Supported languages in CLDR notation + * @param {Function} + * If callback returns err; if err, stop enumeration. + */ +function cloneEnglishTxtSyncDeep(rootDir) { + if (!rootDir) + rootDir = MY_ROOT; + const enDirPath = path.join(rootDir, 'intl', exports.ENGLISH); + mkdirp.sync(enDirPath); + return enumerateMsgSyncPriv(rootDir, rootDir, exports.ENGLISH, true, true, 0, function () { }); +} +exports.cloneEnglishTxtSyncDeep = cloneEnglishTxtSyncDeep; +function enumerateMsgSync(rootDir, lang, checkNodeModules, callback) { + return enumerateMsgSyncPriv(rootDir, rootDir, lang, checkNodeModules, false, 0, callback); +} +exports.enumerateMsgSync = enumerateMsgSync; +function enumerateMsgSyncPriv(currentPath, rootDir, lang, checkNodeModules, cloneEnglishTxt, clonedTxtCount, callback) { + assert(currentPath); + assert(rootDir); + assert(typeof callback === 'function'); + let intlDirectory = path.join(currentPath, 'intl'); + const langDirPath = path.join(intlDirectory, lang); + let msgFiles = null; + try { + msgFiles = fs.readdirSync(langDirPath); + } + catch (e) { + return clonedTxtCount; + } + const enDirPath = path.join(rootDir, 'intl', exports.ENGLISH); + const clonedFileNames = []; + msgFiles.forEach(function (msgFile) { + if (msgFile.indexOf('.') === 0) + return; + const stats = fs.lstatSync(path.join(langDirPath, msgFile)); + if (!stats.isFile()) + return; + // commented out to avoid interference with intercept-stdout in test + // debug('enumerating...', path.join(langDirPath, msgFile)); + if (cloneEnglishTxt && lang === exports.ENGLISH) { + if (currentPath === rootDir) + return; + if (getTrailerAfterDot(msgFile) !== 'txt') + return; + const sourceTxtFilePath = path.join(langDirPath, msgFile); + const filePathHash = msgFileIdHash(msgFile, currentPath); + if (resTagExists(filePathHash, msgFile, lang, exports.HELPTXT_TAG)) + return; + registerResTag(filePathHash, msgFile, lang, exports.HELPTXT_TAG); + const targetTxtFilePath = path.join(enDirPath, msgFile); + clonedFileNames.push(msgFile); + fs.writeFileSync(targetTxtFilePath, fs.readFileSync(sourceTxtFilePath)); + clonedTxtCount++; + console.log('--- cloned', sourceTxtFilePath); + } + else { + const jsonObj = readToJson(langDirPath, msgFile, lang); + if (jsonObj) { + callback(jsonObj, path.join(langDirPath, msgFile)); + } + } + }); + if (cloneEnglishTxt && lang === exports.ENGLISH && clonedFileNames.length > 0) { + removeObsoleteFile(enDirPath, clonedFileNames); + } + if (checkNodeModules) { + const depthRoot = directoryDepth(rootDir); + const moduleRootPaths = resolveDependencies(currentPath, rootDir); + if (moduleRootPaths) { + moduleRootPaths.forEach(function (modulePath) { + const depthModule = directoryDepth(modulePath); + if (depthModule - depthRoot > maxDirectoryDepth()) + return; + clonedTxtCount = enumerateMsgSyncPriv(modulePath, rootDir, lang, false, cloneEnglishTxt, clonedTxtCount, callback); + }); + } + } + return clonedTxtCount; +} +exports.enumerateMsgSyncPriv = enumerateMsgSyncPriv; +function removeObsoleteFile(dir, fileNames) { + const files = fs.readdirSync(dir); + files.forEach(function (file) { + const matched = file.match(/^([0-9a-f]{32})_(.*\.txt)$/); + if (!matched) + return; + if (fileNames.indexOf(matched[2]) >= 0) { + console.log('--- removed', path.join(dir, file)); + fs.unlinkSync(path.join(dir, file)); + } + }); +} +exports.removeObsoleteFile = removeObsoleteFile; +function directoryDepth(fullPath) { + assert(typeof fullPath === 'string'); + return _.compact(fullPath.split(path.sep)).length; +} +exports.directoryDepth = directoryDepth; +function maxDirectoryDepth() { + let depth = parseInt(process.env.STRONGLOOP_GLOBALIZE_MAX_DEPTH, 10); + if (isNaN(depth)) + depth = exports.BIG_NUM; + depth = Math.max(1, depth); + return depth; +} +exports.maxDirectoryDepth = maxDirectoryDepth; +function requireResolve(depName, currentDir, rootDir) { + // simulates npm v3 dependency resolution + let depPath = null; + let stats = null; + try { + depPath = path.join(currentDir, 'node_modules', depName); + stats = fs.lstatSync(depPath); + } + catch (e) { + stats = null; + try { + depPath = path.join(rootDir, 'node_modules', depName); + stats = fs.lstatSync(depPath); + } + catch (e) { + return null; + } + } + if (!stats) + return null; + return unsymbolLink(depPath); +} +exports.requireResolve = requireResolve; +function unsymbolLink(filePath) { + if (!filePath) + return null; + let stats = null; + try { + stats = fs.lstatSync(filePath); + } + catch (e) { + return null; + } + if (!stats) + return null; + if (stats.isSymbolicLink()) { + let realPath = null; + try { + realPath = process.browser ? filePath : fs.realpathSync(filePath); + } + catch (e) { + return null; + } + return unsymbolLink(realPath); + } + else { + return stats.isDirectory() ? filePath : null; + } +} +exports.unsymbolLink = unsymbolLink; +function resolveDependencies(currentDir, rootDir, moduleRootPaths) { + moduleRootPaths = moduleRootPaths || []; + const packageJson = path.join(currentDir, 'package.json'); + let deps = null; + try { + deps = require(packageJson).dependencies; + } + catch (e) { + return null; + } + if (deps === undefined || !deps) + return null; + deps = Object.keys(deps); + if (deps.length === 0) + return null; + deps.forEach(function (dep) { + const depPath = requireResolve(dep, currentDir, rootDir); + if (depPath && moduleRootPaths.indexOf(depPath) < 0) { + moduleRootPaths.push(depPath); + resolveDependencies(depPath, rootDir, moduleRootPaths); + } + }); + moduleRootPaths = _.uniq(_.compact(moduleRootPaths)); + return moduleRootPaths; +} +exports.resolveDependencies = resolveDependencies; +/** + * Read a txt or json file and convert to JSON + */ +const acceptableTrailers = ['json', 'txt']; +function readToJson(langDirPath, msgFile, lang) { + const fileType = getTrailerAfterDot(msgFile); + if (!fileType || acceptableTrailers.indexOf(fileType) < 0) + return null; + let jsonObj = null; + const sourceFilePath = path.join(langDirPath, msgFile); + if (fileType === 'json') { + jsonObj = JSON.parse(stripBom(fs.readFileSync(sourceFilePath, 'utf-8'))); + } + else { + // txt + const origStr = stripBom(fs.readFileSync(sourceFilePath, 'utf8')); + jsonObj = {}; + const re = /^([0-9a-f]{32})_(.*)\.txt/; + const results = re.exec(msgFile); + if (results && results.length === 3) { + // deep-extracted txt file ? + msgFile = results[2] + '.txt'; + } + jsonObj[msgFile] = mapPercent(JSON.parse(JSON.stringify(origStr))); + } + if (fileType === 'json' && HASH_KEYS && lang === exports.ENGLISH) { + const keys = Object.keys(jsonObj); + keys.forEach(function (key) { + const newKey = md5(key); + jsonObj[newKey] = jsonObj[key]; + delete jsonObj[key]; + }); + } + return jsonObj; +} +exports.readToJson = readToJson; +function normalizeKeyArrays(keyArrays) { + // keep 0 as "0" + if (keyArrays == null) + return []; + if (typeof keyArrays === 'string' && keyArrays.length === 0) + return []; + if (!Array.isArray(keyArrays)) + return [[keyArrays.toString()]]; + const retKeyArrays = []; + keyArrays.forEach(function (keyArray) { + if (keyArray === null) + return; + if (typeof keyArray === 'string' && keyArray.length === 0) + return; + if (!Array.isArray(keyArray)) { + retKeyArrays.push([keyArray.toString()]); + return; + } + const retKeyArray = []; + keyArray.forEach(function (key) { + if (key === null) + return; + if (typeof key === 'string' && key.length === 0) + return; + assert(typeof key === 'string' || typeof key === 'number', 'type of key must be a string or a number.'); + retKeyArray.push(key.toString()); + }); + if (retKeyArray.length > 0) + retKeyArrays.push(retKeyArray); + }); + return retKeyArrays; +} +exports.normalizeKeyArrays = normalizeKeyArrays; +function scanJson(keys, data, returnErrors) { + return scanJsonPriv(keys, data, null, returnErrors); +} +exports.scanJson = scanJson; +function replaceJson(keys, data, newValues) { + return scanJsonPriv(keys, data, newValues, false); +} +exports.replaceJson = replaceJson; +function scanJsonPriv(keys, data, newValues, returnErrors) { + if (!data || typeof data !== 'object') + return []; + if (newValues) + assert(keys.length === newValues.length); + const keyArrays = normalizeKeyArrays(keys); + const ret = []; + keyArrays.forEach((k, kix) => { + let d = null; + let err = null; + let prevObj = null; + let prevKey = null; + try { + for (let ix = 0; ix < k.length; ix++) { + if (ix === 0) + d = data; + if (typeof d === 'string') { + err = '*** unexpected string value ' + JSON.stringify(k); + if (returnErrors) + ret.push(err); + else + console.log(err); + return; + } + prevObj = d; + prevKey = k[ix]; + d = d[k[ix]]; + } + if (typeof d === 'string') { + if (newValues) + prevObj[prevKey] = newValues[kix]; + else + ret.push(d); + } + else { + err = '*** not a string value ' + JSON.stringify(k); + if (returnErrors) + ret.push(err); + else + console.log(err); + } + } + catch (e) { + err = '*** ' + e.toString() + ' ' + JSON.stringify(k); + if (returnErrors) + ret.push(err); + else + console.log(err); + } + }); + return newValues ? data : ret; +} +exports.scanJsonPriv = scanJsonPriv; +function sortMsges(msgs) { + const keys = Object.keys(msgs); + const msgKeys = _.remove(keys, function (key) { + return KEY_HEADERS.some(function (header) { + return key.indexOf(header) === 0; + }); + }); + const sorted = {}; + keys.sort().forEach(function (key) { + sorted[key] = msgs[key]; + }); + msgKeys.sort().forEach(function (key) { + sorted[key] = msgs[key]; + }); + return sorted; +} +exports.sortMsges = sortMsges; +/** + * Initialize intl directory structure for non-En languages + * intl/en must exist. + * it returns false if failed. + */ +function initIntlDirs() { + let intlEnStats; + try { + intlEnStats = fs.statSync(path.join(INTL_DIR, exports.ENGLISH)); + } + catch (e) { + return false; + } + if (!intlEnStats.isDirectory()) + return false; + if (!TARGET_LANGS) + TARGET_LANGS = getSupportedLanguages(); + TARGET_LANGS.forEach(function (lang) { + mkdirp.sync(path.join(INTL_DIR, lang)); + }); + return true; +} +exports.initIntlDirs = initIntlDirs; +/** + * @param {string} lang Supported languages in CLDR notation + * Returns true for 'en' and supported languages + * in CLDR notation. + */ +function isSupportedLanguage(lang) { + lang = lang || 'en'; + if (!TARGET_LANGS) + TARGET_LANGS = getSupportedLanguages(); + return TARGET_LANGS.indexOf(lang) >= 0 || getAppLanguages().indexOf(lang) > 0; +} +exports.isSupportedLanguage = isSupportedLanguage; +/** + * Returns an array of locales supported by the local cldr data. + */ +function getSupportedLanguages() { + const cldrDir = path.join(__dirname, '..', 'cldr'); + let langs = []; + enumerateFilesSync(cldrDir, null, ['json'], false, false, (content, filePath) => { + let cldr = null; + try { + cldr = JSON.parse(content); + } + catch (e) { + throw new Error('*** CLDR read error on ' + process.platform); + } + const theseLangs = Object.keys(cldr.main || {}); + langs = _.concat(langs, theseLangs); + }); + return _.uniq(langs); +} +exports.getSupportedLanguages = getSupportedLanguages; +function getAppLanguages() { + if (config_1.STRONGLOOP_GLB && config_1.STRONGLOOP_GLB.APP_LANGS) { + return config_1.STRONGLOOP_GLB.APP_LANGS; + } + return []; +} +exports.getAppLanguages = getAppLanguages; +/** + * Returns trailer of file name. + */ +function getTrailerAfterDot(name) { + if (typeof name !== 'string') + return null; + const parts = name.split('.'); + if (parts.length < 2) + return null; + return parts[parts.length - 1].toLowerCase(); +} +exports.getTrailerAfterDot = getTrailerAfterDot; +/** + * Returns package name defined in package.json. + */ +function getPackageName(root) { + return getPackageItem(root, 'name'); +} +exports.getPackageName = getPackageName; +function getPackageVersion(root) { + return getPackageItem(root, 'version'); +} +exports.getPackageVersion = getPackageVersion; +function getPackageItem(root, itemName) { + root = root || MY_ROOT; + let item = null; + try { + item = require(path.join(root, 'package.json'))[itemName]; + } + catch (e) { } + return item; +} +exports.getPackageItem = getPackageItem; +/** + * @param {string} name to be checked + * @param {Array} headersAllowed a list of strings to check + * Returns directory path for the language. + */ +function headerIncluded(name, headersAllowed) { + if (typeof name !== 'string') + return false; + let matched = false; + if (Array.isArray(headersAllowed)) { + headersAllowed.forEach(function (header) { + if (matched) + return; + matched = name.indexOf(header) === 0; + }); + } + else if (typeof headersAllowed === 'string') { + matched = name.indexOf(headersAllowed) === 0; + } + return matched; +} +exports.headerIncluded = headerIncluded; +/** + * @param {string} lang Supported languages in CLDR notation + * Returns directory path for the language. + */ +function intlDir(lang) { + lang = lang || exports.ENGLISH; + return path.join(INTL_DIR, lang); +} +exports.intlDir = intlDir; +/** + * %s is included in the string + */ +function percent(msg) { + return /\%[sdj\%]/.test(msg); +} +exports.percent = percent; +/** + * %replace %s with {N} where N=0,1,2,... + */ +function mapPercent(msg) { + let ix = 0; + const output = msg.replace(/\%[sdj\%]/g, match => { + if (match === '%%') + return ''; + const str = '{' + ix.toString() + '}'; + ix++; + return str; + }); + return output; +} +exports.mapPercent = mapPercent; +function mapArgs(p, args) { + let ix = 1; + const output = []; + p.replace(/\%[sdj\%]/g, match => { + if (match === '%%') + return ''; + let arg = args[ix++]; + if (arg === undefined) + arg = 'undefined'; + if (arg === null) + arg = 'null'; + output.push(match === '%j' ? JSON.stringify(arg) : arg.toString()); + return ''; + }); + return output; +} +exports.mapArgs = mapArgs; +function repackArgs(args, initIx) { + const argsLength = Array.isArray(args) + ? args.length + : Object.keys(args).length; + if (initIx >= argsLength) + return []; + const output = []; + for (let ix = initIx; ix < argsLength; ix++) { + output.push(args[ix]); + } + return output; +} +exports.repackArgs = repackArgs; +/** + * Get the language (from the supported languages) that + * best matches the requested Accept-Language expression. + * + * @param req + * @param globalize + * @returns {*} + */ +function getLanguageFromRequest(req, appLanguages, defaultLanguage) { + if (!req || !req.headers) { + return defaultLanguage; + } + const reqLanguage = req.headers['accept-language']; + if (!reqLanguage) { + return defaultLanguage; + } + acceptLanguage.languages(appLanguages); + const bestLanguage = acceptLanguage.get(reqLanguage); + return bestLanguage || defaultLanguage; +} +exports.getLanguageFromRequest = getLanguageFromRequest; +function myIntlDir() { + return INTL_DIR; +} +exports.myIntlDir = myIntlDir; +/** + * Load messages for the language from a given root directory + * @param lang Language for messages + * @param rootDir Root directory + * @param enumerateNodeModules A flag to control if node_modules will be checked + */ +function loadMsgFromFile(lang, rootDir, enumerateNodeModules) { + assert(lang); + rootDir = rootDir || getRootDir(); + if (!isLoadMessages(rootDir)) + return; + enumerateNodeModules = enumerateNodeModules || false; + const tagType = exports.MSG_TAG; + enumerateMsgSync(rootDir, lang, enumerateNodeModules, (jsonObj, filePath) => { + // writeAllToMsg(lang, jsonObj); + let fileName = path.basename(filePath); + const re = /^([0-9a-f]{32})_(.*)\.txt/; + const results = re.exec(fileName); + let fileIdHash; + if (results && results.length === 3) { + // deep-extracted txt file ? + fileIdHash = results[1]; + fileName = results[2] + '.txt'; + } + else { + fileIdHash = msgFileIdHash(fileName, rootDir); + fileName = fileName; + } + if (resTagExists(fileIdHash, fileName, lang, tagType)) { + debug('*** loadMsgFromFile(res tag exists): skipping:', lang, fileName); + return; + } + debug('*** loadMsgFromFile(new res tag): loading:', lang, fileName); + removeDoubleCurlyBraces(jsonObj); + const messages = {}; + messages[lang] = jsonObj; + config_1.STRONGLOOP_GLB.loadMessages(messages); + registerResTag(fileIdHash, fileName, lang, tagType); + if (config_1.STRONGLOOP_GLB.formatters.has(lang)) { + const formatters = config_1.STRONGLOOP_GLB.formatters.get(lang); + for (const key in jsonObj) { + formatters.delete(key); + } + } + }); +} +exports.loadMsgFromFile = loadMsgFromFile; +/** + * Remove `{{` and `}}` + */ +function removeDoubleCurlyBraces(json) { + let count = 0; + Object.keys(json).forEach(key => { + count++; + if (typeof json[key] !== 'string') { + // The value for `zz` pseudo code is an array, let's skip + return; + } + json[key] = json[key].replace(/}}/g, '').replace(/{{/g, ''); + debug(count, key + ' : ' + json[key]); + }); +} +exports.removeDoubleCurlyBraces = removeDoubleCurlyBraces; +//# sourceMappingURL=helper.js.map \ No newline at end of file diff --git a/node_modules/strong-globalize/lib/helper.js.map b/node_modules/strong-globalize/lib/helper.js.map new file mode 100644 index 00000000..b1535878 --- /dev/null +++ b/node_modules/strong-globalize/lib/helper.js.map @@ -0,0 +1 @@ +{"version":3,"file":"helper.js","sourceRoot":"","sources":["../src/helper.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,gCAAgC;AAChC,wDAAwD;AACxD,yEAAyE;;AAEzE,6BAA8B;AAC9B,MAAM,KAAK,GAAG,GAAG,CAAC,kBAAkB,CAAC,CAAC;AAEtC,kDAAkD;AAClD,iCAAiC;AACjC,yBAAyB;AACzB,4BAA4B;AAC5B,2BAA2B;AAC3B,iCAAiC;AACjC,6BAA6B;AAC7B,qCAAgE;AAEnD,QAAA,OAAO,GAAG,IAAI,CAAC;AACf,QAAA,WAAW,GAAG,IAAI,CAAC;AACnB,QAAA,UAAU,GAAG,QAAQ,CAAC;AACtB,QAAA,OAAO,GAAG,SAAS,CAAC;AACpB,QAAA,WAAW,GAAG,SAAS,CAAC;AACxB,QAAA,OAAO,GAAG,KAAK,CAAC;AAChB,QAAA,QAAQ,GAAG,MAAM,CAAC;AAClB,QAAA,WAAW,GAAG,gBAAQ,CAAC;AACvB,QAAA,OAAO,GAAG,YAAY,CAAC;AACvB,QAAA,mBAAmB,GAC9B,6DAA6D,CAAC;AAEhE,MAAM,SAAS,GAAG,KAAK,CAAC;AACxB,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,CAAC;AAE5B,SAAgB,QAAQ,CAAC,CAAS;IAChC,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,OAAO,CAAC,CACN,cAAc,CAAC,CAAC,EAAE,WAAW,CAAC;QAC9B,CAAC,OAAO,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK;QAC3C,OAAO,KAAK,MAAM;QAClB,OAAO,KAAK,KAAK;QACjB,OAAO,KAAK,MAAM;QAClB,CAAC,CAAC,OAAO,CAAC,kBAAU,CAAC,KAAK,CAAC,CAC5B,CAAC;AACJ,CAAC;AAVD,4BAUC;AAED,wBAAwB;AACxB;;GAEG;AACH,IAAI,YAAY,GAAoB,IAAI,CAAC;AACzC,IAAI,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AAC5B,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAE1C;;GAEG;AACH,SAAgB,UAAU,CAAC,QAAgB;IACzC,IAAI,SAAS,GAAG,IAAI,CAAC;IACrB,IAAI,SAAS,GAAyB,SAAS,CAAC;IAChD,IAAI;QACF,SAAS,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;KACnC;IAAC,OAAO,CAAC,EAAE;QACV,SAAS,GAAG,KAAK,CAAC;KACnB;IACD,MAAM,CAAC,SAAS,EAAE,qCAAqC,GAAG,QAAQ,CAAC,CAAC;IACpE,IAAI,CAAC,SAAU,CAAC,WAAW,EAAE;QAAE,SAAS,GAAG,KAAK,CAAC;IACjD,MAAM,CACJ,SAAS,EACT,gDAAgD,GAAG,QAAQ,CAAC,QAAQ,EAAE,CACvE,CAAC;IACF,IAAI,KAAK,GAAyB,SAAS,CAAC;IAC5C,IAAI;QACF,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;KAClC;IAAC,OAAO,CAAC,EAAE;QACV,SAAS,GAAG,KAAK,CAAC;KACnB;IACD,SAAS,GAAG,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC;IACjC,IAAI,SAAS,EAAE;QACb,IAAI,YAAY,GAAG,KAAK,CAAC;QACzB,KAAM,CAAC,OAAO,CAAC,UAAS,IAAI;YAC1B,IAAI,YAAY;gBAAE,OAAO;YACzB,IAAI,IAAI,KAAK,MAAM;gBAAE,YAAY,GAAG,IAAI,CAAC;QAC3C,CAAC,CAAC,CAAC;QACH,SAAS,GAAG,YAAY,CAAC;KAC1B;IACD,MAAM,CACJ,SAAS,EACT,4CAA4C,GAAG,QAAQ,CAAC,QAAQ,EAAE,CACnE,CAAC;IACF,OAAO,GAAG,QAAQ,CAAC;IACnB,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC;AAnCD,gCAmCC;AAED,SAAgB,UAAU;IACxB,OAAO,OAAO,CAAC;AACjB,CAAC;AAFD,gCAEC;AAED,SAAgB,aAAa;IAC3B,OAAO,OAAO,KAAK,uBAAc,CAAC,eAAe,CAAC;AACpD,CAAC;AAFD,sCAEC;AAED,SAAgB,uBAAuB,CAAC,OAAgB;IACtD,IAAI,uBAAc,CAAC,eAAe;QAAE,OAAO;IAC3C,MAAM,CAAC,MAAM,CAAC,uBAAc,EAAE;QAC5B,eAAe,EAAE,OAAO,IAAI,UAAU,EAAE;QACxC,cAAc,EAAE,EAAE;KACnB,CAAC,CAAC;AACL,CAAC;AAND,0DAMC;AAED,SAAgB,cAAc,CAAC,OAAe;IAC5C,IAAI,CAAC,uBAAc,CAAC,eAAe;QAAE,OAAO,KAAK,CAAC;IAClD,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,uBAAc,CAAC,eAAgB,CAAC;QACzE,OAAO,IAAI,CAAC;IACd,IAAI,CAAC,uBAAc,CAAC,gBAAgB;QAAE,OAAO,KAAK,CAAC;IACnD,IAAI,uBAAc,CAAC,gBAAgB,KAAK,gBAAQ;QAAE,OAAO,KAAK,CAAC;IAC/D,IAAI,uBAAc,CAAC,gBAAgB,KAAK,eAAO;QAAE,OAAO,IAAI,CAAC;IAC7D,MAAM,cAAc,GAAG,uBAAc,CAAC,gBAAgB,CAAC;IACvD,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACtD,OAAO,IAAI,CAAC;AACd,CAAC;AAXD,wCAWC;AAED,SAAgB,gBAAgB,CAAC,GAAsB;IACrD,IAAI,GAAG,KAAK,eAAO,IAAI,GAAG,KAAK,gBAAQ;QAAE,OAAO,GAAG,CAAC;IACpD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACtB,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACnC,GAAG,CAAC,OAAO,CAAC,UAAS,CAAC;YACpB,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAAE,OAAO,KAAK,CAAC;QAC5C,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;KACZ;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAVD,4CAUC;AAED,SAAgB,aAAa,CAAC,QAAgB,EAAE,OAAe;IAC7D,MAAM,CAAC,QAAQ,CAAC,CAAC;IACjB,OAAO,GAAG,OAAO,IAAI,UAAU,EAAE,CAAC;IAClC,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,cAAc,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,cAAc,CAAC;IAC1D,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC;AACxB,CAAC;AAPD,sCAOC;AAED,SAAgB,cAAc,CAC5B,UAAkB,EAClB,QAAgB,EAChB,IAAY,EACZ,OAAe;IAEf,MAAM,CAAC,uBAAc,CAAC,CAAC;IACvB,MAAM,CAAC,UAAU,CAAC,CAAC;IACnB,MAAM,CAAC,QAAQ,CAAC,CAAC;IACjB,MAAM,CAAC,IAAI,CAAC,CAAC;IACb,MAAM,CAAC,OAAO,CAAC,CAAC;IAChB,IAAI,YAAY,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACpE,MAAM,MAAM,GAAgB;QAC1B,UAAU,EAAE,UAAU;QACtB,QAAQ,EAAE,QAAQ;QAClB,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,OAAO;KACjB,CAAC;IACF,uBAAc,CAAC,cAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5C,OAAO,IAAI,CAAC;AACd,CAAC;AApBD,wCAoBC;AAED,SAAgB,YAAY,CAC1B,UAAkB,EAClB,QAAgB,EAChB,IAAY,EACZ,OAAe;IAEf,MAAM,CAAC,uBAAc,CAAC,CAAC;IACvB,MAAM,CAAC,UAAU,CAAC,CAAC;IACnB,MAAM,CAAC,QAAQ,CAAC,CAAC;IACjB,MAAM,CAAC,IAAI,CAAC,CAAC;IACb,MAAM,CAAC,OAAO,CAAC,CAAC;IAChB,MAAM,MAAM,GAAG;QACb,UAAU,EAAE,UAAU;QACtB,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,OAAO;KACjB,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,uBAAc,CAAC,cAAc,EAAE,MAAM,CAAC,KAAK,SAAS,CAAC;IAC3E,OAAO,MAAM,CAAC;AAChB,CAAC;AAlBD,oCAkBC;AAED,SAAgB,QAAQ,CAAC,GAAW;IAClC,OAAO,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC3D,CAAC;AAFD,4BAEC;AAED;;;;GAIG;AACH,MAAM,YAAY,GAAG,GAAG,CAAC;AACzB,MAAM,cAAc,GAAG,KAAK,CAAC;AAC7B,IAAI,oBAAoB,GAAG,CAAC,CAAC;AAC7B,IAAI,mBAAmB,GAAoB,IAAI,CAAC;AAEhD,SAAgB,kBAAkB,CAChC,OAAe,EACf,SAA0B,EAC1B,cAAiC,EACjC,OAAgB,EAChB,gBAAyB,EACzB,QAAqD;IAErD,oBAAoB,GAAG,CAAC,CAAC;IACzB,mBAAmB,GAAG,EAAE,CAAC;IACzB,OAAO,sBAAsB,CAC3B,OAAO,EACP,OAAO,EACP,SAAS,EACT,cAAc,EACd,OAAO,EACP,gBAAgB,EAChB,QAAQ,CACT,CAAC;AACJ,CAAC;AAnBD,gDAmBC;AAED,SAAgB,cAAc,CAAC,QAAgB;IAC7C,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC5E,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC;IACvC,IAAI,mBAAoB,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;QACnD,OAAO,IAAI,CAAC;KACb;SAAM;QACL,mBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACxC,OAAO,KAAK,CAAC;KACd;AACH,CAAC;AATD,wCASC;AAED,SAAgB,sBAAsB,CACpC,WAAmB,EACnB,OAAe,EACf,SAA0B,EAC1B,cAAiC,EACjC,OAAgB,EAChB,gBAAyB,EACzB,QAAkD;IAElD,IAAI,CAAC,WAAW;QAAE,WAAW,GAAG,OAAO,CAAC;IACxC,IAAI,CAAC,OAAO;QAAE,OAAO,GAAG,OAAO,CAAC;IAChC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACxC,IAAI,cAAc,CAAC,WAAW,CAAC;QAAE,OAAO;IACxC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IACtD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;QAAE,cAAc,GAAG,CAAC,cAAc,CAAC,CAAC;IACtE,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,SAAS,CAAC,OAAO,CAAC,UAAS,IAAI;QAC7B,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO;QACrC,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,GAAG,IAAI,CAAC;IACrD,CAAC,CAAC,CAAC;IACH,IAAI,OAAO,EAAE;QACX,IAAI,OAAO;YAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,WAAW,CAAC,CAAC;QAClE,OAAO;KACR;IACD,IAAI,KAAK,GAAG,IAAI,CAAC;IACjB,IAAI;QACF,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;KACrC;IAAC,OAAO,CAAC,EAAE;QACV,OAAO;KACR;IACD,KAAK,CAAC,OAAO,CAAC,UAAS,IAAI;QACzB,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC3C,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,IAAI;YACF,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SAC5B;QAAC,OAAO,CAAC,EAAE;YACV,OAAO;SACR;QACD,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE;YACvB,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAC1B,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,UAAU;gBACnE,OAAO;YACT,sBAAsB,CACpB,KAAK,EACL,OAAO,EACP,SAAS,EACT,cAAc,EACd,OAAO,EACP,gBAAgB,EAChB,QAAQ,CACT,CAAC;SACH;aAAM;YACL,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,CAAC,QAAQ,IAAI,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,OAAO;YAC9D,MAAM,OAAO,GAAG,QAAQ,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;YACzD,IAAI,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;YACvD,IAAI,gBAAgB,EAAE;gBACpB,oBAAoB,EAAE,CAAC;gBACvB,IAAI,oBAAoB,GAAG,YAAY,KAAK,CAAC,EAAE;oBAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAC1B,IAAI,oBAAoB,GAAG,cAAc,KAAK,CAAC,EAAE;wBAC/C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,oBAAoB,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC;qBACpE;iBACF;aACF;YACD,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;SAC1B;IACH,CAAC,CAAC,CAAC;IACH,IAAI,gBAAgB,EAAE;QACpB,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,eAAe,GAAG,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAClE,IAAI,eAAe,EAAE;YACnB,eAAe,CAAC,OAAO,CAAC,UAAS,UAAU;gBACzC,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;gBAC/C,IAAI,WAAW,GAAG,SAAS,GAAG,iBAAiB,EAAE;oBAAE,OAAO;gBAC1D,sBAAsB,CACpB,UAAU,EACV,OAAO,EACP,SAAS,EACT,cAAc,EACd,OAAO,EACP,gBAAgB,EAChB,QAAQ,CACT,CAAC;YACJ,CAAC,CAAC,CAAC;SACJ;KACF;AACH,CAAC;AAzFD,wDAyFC;AAED;;;GAGG;AACH,SAAgB,qBAAqB,CACnC,MAA6C;IAE7C,IAAI,CAAC,YAAY;QAAE,YAAY,GAAG,qBAAqB,EAAE,CAAC;IAC1D,KAAK,MAAM,IAAI,IAAI,YAAa,EAAE;QAChC,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,eAAe;YAAE,OAAO;KAC7B;AACH,CAAC;AARD,sDAQC;AAED;;;;GAIG;AACH,SAAgB,uBAAuB,CAAC,OAAgB;IACtD,IAAI,CAAC,OAAO;QAAE,OAAO,GAAG,OAAO,CAAC;IAChC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,eAAO,CAAC,CAAC;IACtD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvB,OAAO,oBAAoB,CACzB,OAAO,EACP,OAAO,EACP,eAAO,EACP,IAAI,EACJ,IAAI,EACJ,CAAC,EACD,cAAY,CAAC,CACd,CAAC;AACJ,CAAC;AAbD,0DAaC;AAED,SAAgB,gBAAgB,CAC9B,OAAe,EACf,IAAY,EACZ,gBAAyB,EACzB,QAAwD;IAExD,OAAO,oBAAoB,CACzB,OAAO,EACP,OAAO,EACP,IAAI,EACJ,gBAAgB,EAChB,KAAK,EACL,CAAC,EACD,QAAQ,CACT,CAAC;AACJ,CAAC;AAfD,4CAeC;AAED,SAAgB,oBAAoB,CAClC,WAAmB,EACnB,OAAe,EACf,IAAY,EACZ,gBAAyB,EACzB,eAAwB,EACxB,cAAsB,EACtB,QAA8C;IAE9C,MAAM,CAAC,WAAW,CAAC,CAAC;IACpB,MAAM,CAAC,OAAO,CAAC,CAAC;IAChB,MAAM,CAAC,OAAO,QAAQ,KAAK,UAAU,CAAC,CAAC;IACvC,IAAI,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IACnD,IAAI,QAAQ,GAAG,IAAI,CAAC;IACpB,IAAI;QACF,QAAQ,GAAG,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;KACxC;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,cAAc,CAAC;KACvB;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,eAAO,CAAC,CAAC;IACtD,MAAM,eAAe,GAAa,EAAE,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,UAAS,OAAO;QAC/B,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO;QACvC,MAAM,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YAAE,OAAO;QAC5B,oEAAoE;QACpE,4DAA4D;QAC5D,IAAI,eAAe,IAAI,IAAI,KAAK,eAAO,EAAE;YACvC,IAAI,WAAW,KAAK,OAAO;gBAAE,OAAO;YACpC,IAAI,kBAAkB,CAAC,OAAO,CAAC,KAAK,KAAK;gBAAE,OAAO;YAClD,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAC1D,MAAM,YAAY,GAAG,aAAa,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YACzD,IAAI,YAAY,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,mBAAW,CAAC;gBAAE,OAAO;YACnE,cAAc,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,mBAAW,CAAC,CAAC;YACzD,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACxD,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9B,EAAE,CAAC,aAAa,CAAC,iBAAiB,EAAE,EAAE,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACxE,cAAc,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;SAC9C;aAAM;YACL,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACvD,IAAI,OAAO,EAAE;gBACX,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;aACpD;SACF;IACH,CAAC,CAAC,CAAC;IACH,IAAI,eAAe,IAAI,IAAI,KAAK,eAAO,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;QACrE,kBAAkB,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;KAChD;IACD,IAAI,gBAAgB,EAAE;QACpB,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,eAAe,GAAG,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAClE,IAAI,eAAe,EAAE;YACnB,eAAe,CAAC,OAAO,CAAC,UAAS,UAAU;gBACzC,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;gBAC/C,IAAI,WAAW,GAAG,SAAS,GAAG,iBAAiB,EAAE;oBAAE,OAAO;gBAC1D,cAAc,GAAG,oBAAoB,CACnC,UAAU,EACV,OAAO,EACP,IAAI,EACJ,KAAK,EACL,eAAe,EACf,cAAc,EACd,QAAQ,CACT,CAAC;YACJ,CAAC,CAAC,CAAC;SACJ;KACF;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAtED,oDAsEC;AAED,SAAgB,kBAAkB,CAAC,GAAW,EAAE,SAAmB;IACjE,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,KAAK,CAAC,OAAO,CAAC,UAAS,IAAI;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QACzD,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,IAAI,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;YACtC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;YACjD,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;SACrC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAVD,gDAUC;AAED,SAAgB,cAAc,CAAC,QAAgB;IAC7C,MAAM,CAAC,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC;IACrC,OAAO,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;AACpD,CAAC;AAHD,wCAGC;AAED,SAAgB,iBAAiB;IAC/B,IAAI,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA+B,EAAE,EAAE,CAAC,CAAC;IACtE,IAAI,KAAK,CAAC,KAAK,CAAC;QAAE,KAAK,GAAG,eAAO,CAAC;IAClC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC3B,OAAO,KAAK,CAAC;AACf,CAAC;AALD,8CAKC;AAED,SAAgB,cAAc,CAC5B,OAAe,EACf,UAAkB,EAClB,OAAe;IAEf,yCAAyC;IACzC,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,KAAK,GAAG,IAAI,CAAC;IACjB,IAAI;QACF,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;QACzD,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;KAC/B;IAAC,OAAO,CAAC,EAAE;QACV,KAAK,GAAG,IAAI,CAAC;QACb,IAAI;YACF,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;YACtD,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;SAC/B;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,IAAI,CAAC;SACb;KACF;IACD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC;AAtBD,wCAsBC;AAED,SAAgB,YAAY,CAAC,QAAgB;IAC3C,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,IAAI,KAAK,GAAG,IAAI,CAAC;IACjB,IAAI;QACF,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;KAChC;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,IAAI,CAAC;KACb;IACD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE;QAC1B,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,IAAI;YACF,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;SACnE;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,IAAI,CAAC;SACb;QACD,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;KAC/B;SAAM;QACL,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;KAC9C;AACH,CAAC;AApBD,oCAoBC;AAED,SAAgB,mBAAmB,CACjC,UAAkB,EAClB,OAAe,EACf,eAA0B;IAE1B,eAAe,GAAG,eAAe,IAAI,EAAE,CAAC;IACxC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAC1D,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,IAAI;QACF,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC;KAC1C;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,IAAI,CAAC;KACb;IACD,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAC7C,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC,OAAO,CAAC,UAAS,GAAG;QACvB,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QACzD,IAAI,OAAO,IAAI,eAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACpD,eAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/B,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;SACxD;IACH,CAAC,CAAC,CAAC;IACH,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;IACrD,OAAO,eAAe,CAAC;AACzB,CAAC;AAzBD,kDAyBC;AAED;;GAEG;AACH,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAE3C,SAAgB,UAAU,CAAC,WAAmB,EAAE,OAAe,EAAE,IAAY;IAC3E,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,IAAI,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACvE,IAAI,OAAO,GAAQ,IAAI,CAAC;IACxB,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACvD,IAAI,QAAQ,KAAK,MAAM,EAAE;QACvB,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;KAC1E;SAAM;QACL,MAAM;QACN,MAAM,OAAO,GAAG,QAAQ,CAAC,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;QAClE,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,EAAE,GAAG,2BAA2B,CAAC;QACvC,MAAM,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEjC,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACnC,4BAA4B;YAC5B,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;SAC/B;QAED,OAAO,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;KACpE;IACD,IAAI,QAAQ,KAAK,MAAM,IAAI,SAAS,IAAI,IAAI,KAAK,eAAO,EAAE;QACxD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,OAAO,CAAC,UAAS,GAAG;YACvB,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YACxB,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YAC/B,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;KACJ;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AA9BD,gCA8BC;AAED,SAAgB,kBAAkB,CAAC,SAA6B;IAC9D,gBAAgB;IAChB,IAAI,SAAS,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC;IACjC,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACvE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;QAAE,OAAO,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC/D,MAAM,YAAY,GAAe,EAAE,CAAC;IACpC,SAAS,CAAC,OAAO,CAAC,UAAS,QAAQ;QACjC,IAAI,QAAQ,KAAK,IAAI;YAAE,OAAO;QAC9B,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAClE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YAC5B,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACzC,OAAO;SACR;QACD,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,QAAQ,CAAC,OAAO,CAAC,UAAS,GAAG;YAC3B,IAAI,GAAG,KAAK,IAAI;gBAAE,OAAO;YACzB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YACxD,MAAM,CACJ,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,EAClD,2CAA2C,CAC5C,CAAC;YACF,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QACH,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;YAAE,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IACH,OAAO,YAAY,CAAC;AACtB,CAAC;AA1BD,gDA0BC;AAED,SAAgB,QAAQ,CACtB,IAAc,EACd,IAAe,EACf,YAAsB;IAEtB,OAAO,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;AACtD,CAAC;AAND,4BAMC;AAED,SAAgB,WAAW,CAAC,IAAc,EAAE,IAAe,EAAE,SAAgB;IAC3E,OAAO,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AACpD,CAAC;AAFD,kCAEC;AAED,SAAgB,YAAY,CAC1B,IAAc,EACd,IAAe,EACf,SAAuB,EACvB,YAAsB;IAEtB,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACjD,IAAI,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;QAC3B,IAAI,CAAC,GAAG,IAAI,CAAC;QACb,IAAI,GAAG,GAAG,IAAI,CAAC;QACf,IAAI,OAAO,GAAiC,IAAI,CAAC;QACjD,IAAI,OAAO,GAAkB,IAAI,CAAC;QAClC,IAAI;YACF,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;gBACpC,IAAI,EAAE,KAAK,CAAC;oBAAE,CAAC,GAAG,IAAI,CAAC;gBACvB,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;oBACzB,GAAG,GAAG,8BAA8B,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBACzD,IAAI,YAAY;wBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;wBAC3B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACtB,OAAO;iBACR;gBACD,OAAO,GAAG,CAAC,CAAC;gBACZ,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;gBAChB,CAAC,GAAG,CAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aACf;YACD,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;gBACzB,IAAI,SAAS;oBAAE,OAAQ,CAAC,OAAQ,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;;oBAC9C,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aAClB;iBAAM;gBACL,GAAG,GAAG,yBAAyB,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACpD,IAAI,YAAY;oBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;oBAC3B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aACvB;SACF;QAAC,OAAO,CAAC,EAAE;YACV,GAAG,GAAG,MAAM,GAAG,CAAC,CAAC,QAAQ,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACtD,IAAI,YAAY;gBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;gBAC3B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SACvB;IACH,CAAC,CAAC,CAAC;IACH,OAAO,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;AAChC,CAAC;AA3CD,oCA2CC;AAED,SAAgB,SAAS,CAAC,IAA2B;IACnD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,UAAS,GAAG;QACzC,OAAO,WAAW,CAAC,IAAI,CAAC,UAAS,MAAM;YACrC,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,MAAM,MAAM,GAA0B,EAAE,CAAC;IACzC,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,UAAS,GAAG;QAC9B,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,UAAS,GAAG;QACjC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAfD,8BAeC;AAED;;;;GAIG;AACH,SAAgB,YAAY;IAC1B,IAAI,WAAW,CAAC;IAChB,IAAI;QACF,WAAW,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAO,CAAC,CAAC,CAAC;KACzD;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,KAAK,CAAC;KACd;IACD,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;QAAE,OAAO,KAAK,CAAC;IAC7C,IAAI,CAAC,YAAY;QAAE,YAAY,GAAG,qBAAqB,EAAE,CAAC;IAC1D,YAAY,CAAC,OAAO,CAAC,UAAS,IAAI;QAChC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC;AAbD,oCAaC;AAED;;;;GAIG;AACH,SAAgB,mBAAmB,CAAC,IAAa;IAC/C,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC;IACpB,IAAI,CAAC,YAAY;QAAE,YAAY,GAAG,qBAAqB,EAAE,CAAC;IAE1D,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,eAAe,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChF,CAAC;AALD,kDAKC;AAED;;GAEG;AACH,SAAgB,qBAAqB;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACnD,IAAI,KAAK,GAAa,EAAE,CAAC;IACzB,kBAAkB,CAChB,OAAO,EACP,IAAI,EACJ,CAAC,MAAM,CAAC,EACR,KAAK,EACL,KAAK,EACL,CAAC,OAAe,EAAE,QAAgB,EAAE,EAAE;QACpC,IAAI,IAAI,GAAG,IAAI,CAAC;QAChB,IAAI;YACF,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SAC5B;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;SAC/D;QACD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAChD,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACtC,CAAC,CACF,CAAC;IACF,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AArBD,sDAqBC;AAED,SAAgB,eAAe;IAC7B,IAAI,uBAAc,IAAI,uBAAc,CAAC,SAAS,EAAE;QAC9C,OAAO,uBAAc,CAAC,SAAS,CAAC;KACjC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AALD,0CAKC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,IAAY;IAC7C,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAClC,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AAC/C,CAAC;AALD,gDAKC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,IAAa;IAC1C,OAAO,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACtC,CAAC;AAFD,wCAEC;AAED,SAAgB,iBAAiB,CAAC,IAAa;IAC7C,OAAO,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACzC,CAAC;AAFD,8CAEC;AAED,SAAgB,cAAc,CAAC,IAAwB,EAAE,QAAgB;IACvE,IAAI,GAAG,IAAI,IAAI,OAAO,CAAC;IACvB,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,IAAI;QACF,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;KAC3D;IAAC,OAAO,CAAC,EAAE,GAAE;IACd,OAAO,IAAI,CAAC;AACd,CAAC;AAPD,wCAOC;AAED;;;;GAIG;AACH,SAAgB,cAAc,CAAC,IAAY,EAAE,cAAwB;IACnE,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC3C,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;QACjC,cAAc,CAAC,OAAO,CAAC,UAAS,MAAM;YACpC,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;KACJ;SAAM,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE;QAC7C,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;KAC9C;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAZD,wCAYC;AAED;;;GAGG;AACH,SAAgB,OAAO,CAAC,IAAY;IAClC,IAAI,GAAG,IAAI,IAAI,eAAO,CAAC;IACvB,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACnC,CAAC;AAHD,0BAGC;AAED;;GAEG;AACH,SAAgB,OAAO,CAAC,GAAW;IACjC,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC;AAFD,0BAEC;AAED;;GAEG;AACH,SAAgB,UAAU,CAAC,GAAW;IACpC,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE;QAC/C,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC;QACtC,EAAE,EAAE,CAAC;QACL,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AATD,gCASC;AAED,SAAgB,OAAO,CAAC,CAAS,EAAE,IAAW;IAC5C,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE;QAC9B,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;QAC9B,IAAI,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACrB,IAAI,GAAG,KAAK,SAAS;YAAE,GAAG,GAAG,WAAW,CAAC;QACzC,IAAI,GAAG,KAAK,IAAI;YAAE,GAAG,GAAG,MAAM,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnE,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAZD,0BAYC;AAED,SAAgB,UAAU,CACxB,IAAmC,EACnC,MAAc;IAEd,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QACpC,CAAC,CAAC,IAAI,CAAC,MAAM;QACb,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IAC7B,IAAI,MAAM,IAAI,UAAU;QAAE,OAAO,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,KAAK,IAAI,EAAE,GAAG,MAAM,EAAE,EAAE,GAAG,UAAU,EAAE,EAAE,EAAE,EAAE;QAC3C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;KACvB;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAbD,gCAaC;AAED;;;;;;;GAOG;AAEH,SAAgB,sBAAsB,CACpC,GAAwC,EACxC,YAAsB,EACtB,eAAuB;IAEvB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;QACxB,OAAO,eAAe,CAAC;KACxB;IAED,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACnD,IAAI,CAAC,WAAW,EAAE;QAChB,OAAO,eAAe,CAAC;KACxB;IAED,cAAc,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IACvC,MAAM,YAAY,GAAG,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACrD,OAAO,YAAY,IAAI,eAAe,CAAC;AACzC,CAAC;AAjBD,wDAiBC;AAED,SAAgB,SAAS;IACvB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAFD,8BAEC;AAED;;;;;GAKG;AACH,SAAgB,eAAe,CAC7B,IAAY,EACZ,OAAe,EACf,oBAA8B;IAE9B,MAAM,CAAC,IAAI,CAAC,CAAC;IACb,OAAO,GAAG,OAAO,IAAI,UAAU,EAAE,CAAC;IAClC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;QAAE,OAAO;IACrC,oBAAoB,GAAG,oBAAoB,IAAI,KAAK,CAAC;IACrD,MAAM,OAAO,GAAG,eAAO,CAAC;IACxB,gBAAgB,CACd,OAAO,EACP,IAAI,EACJ,oBAAoB,EACpB,CAAC,OAAkB,EAAE,QAAgB,EAAE,EAAE;QACvC,gCAAgC;QAChC,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,EAAE,GAAG,2BAA2B,CAAC;QACvC,MAAM,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,UAAU,CAAC;QACf,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACnC,4BAA4B;YAC5B,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACxB,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;SAChC;aAAM;YACL,UAAU,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC9C,QAAQ,GAAG,QAAQ,CAAC;SACrB;QACD,IAAI,YAAY,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE;YACrD,KAAK,CAAC,gDAAgD,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YACxE,OAAO;SACR;QACD,KAAK,CAAC,4CAA4C,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QACpE,uBAAuB,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,QAAQ,GAAc,EAAE,CAAC;QAC/B,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;QACzB,uBAAc,CAAC,YAAa,CAAC,QAAQ,CAAC,CAAC;QACvC,cAAc,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACpD,IAAI,uBAAc,CAAC,UAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACxC,MAAM,UAAU,GAAG,uBAAc,CAAC,UAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACxD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;gBACzB,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;aACxB;SACF;IACH,CAAC,CACF,CAAC;AACJ,CAAC;AA9CD,0CA8CC;AAED;;GAEG;AACH,SAAgB,uBAAuB,CAAC,IAAe;IACrD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QAC9B,KAAK,EAAE,CAAC;QACR,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE;YACjC,yDAAyD;YACzD,OAAO;SACR;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5D,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC;AAXD,0DAWC"} \ No newline at end of file diff --git a/node_modules/strong-globalize/lib/index.d.ts b/node_modules/strong-globalize/lib/index.d.ts new file mode 100644 index 00000000..b32273b3 --- /dev/null +++ b/node_modules/strong-globalize/lib/index.d.ts @@ -0,0 +1,2 @@ +import { StrongGlobalize } from './strong-globalize'; +export = StrongGlobalize; diff --git a/node_modules/strong-globalize/lib/index.js b/node_modules/strong-globalize/lib/index.js new file mode 100644 index 00000000..e73279cb --- /dev/null +++ b/node_modules/strong-globalize/lib/index.js @@ -0,0 +1,8 @@ +"use strict"; +// Copyright IBM Corp. 2018. All Rights Reserved. +// Node module: strong-globalize +// This file is licensed under the Artistic License 2.0. +// License text available at https://opensource.org/licenses/Artistic-2.0 +const strong_globalize_1 = require("./strong-globalize"); +module.exports = strong_globalize_1.StrongGlobalize; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/strong-globalize/lib/index.js.map b/node_modules/strong-globalize/lib/index.js.map new file mode 100644 index 00000000..61f7e05b --- /dev/null +++ b/node_modules/strong-globalize/lib/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,iDAAiD;AACjD,gCAAgC;AAChC,wDAAwD;AACxD,yEAAyE;AAEzE,yDAAmD;AACnD,iBAAS,kCAAe,CAAC"} \ No newline at end of file diff --git a/node_modules/strong-globalize/lib/strong-globalize.d.ts b/node_modules/strong-globalize/lib/strong-globalize.d.ts new file mode 100644 index 00000000..fef10287 --- /dev/null +++ b/node_modules/strong-globalize/lib/strong-globalize.d.ts @@ -0,0 +1,65 @@ +import * as globalize from './globalize'; +import * as helper from './helper'; +import { AnyObject } from './config'; +export declare class StrongGlobalize { + static readonly helper: typeof helper; + static readonly globalize: typeof globalize; + static readonly STRONGLOOP_GLB: AnyObject; + private _options; + constructor(options?: AnyObject); + static SetPersistentLogging: typeof globalize.setPersistentLogging; + static SetDefaultLanguage: typeof globalize.setDefaultLanguage; + static SetAppLanguages: typeof globalize.setAppLanguages; + static SetRootDir(rootDir: string, options?: AnyObject): void; + setLanguage(lang?: string): void; + getLanguage(): any; + c(value: any, currencySymbol: string, options?: AnyObject): any; + formatCurrency(value: any, currencySymbol: string, options?: AnyObject): any; + d(value: Date, options?: AnyObject): any; + formatDate(value: Date, options?: AnyObject): any; + n(value: number, options?: AnyObject): any; + formatNumber(value: number, options?: AnyObject): any; + m(msgPath: string, variables: string | string[]): any; + formatMessage(msgPath: string, variables: string | string[]): any; + t(msgPath: string, variables: string | string[]): any; + Error(...args: any[]): Error; + f(...args: any[]): any; + format(...args: any[]): any; + ewrite(...args: any[]): any; + owrite(...args: any[]): any; + write(...args: any[]): void; + emergency(...args: any[]): any; + alert(...args: any[]): any; + critical(...args: any[]): any; + error(...args: any[]): any; + warning(...args: any[]): any; + notice(...args: any[]): any; + informational(...args: any[]): any; + debug(...args: any[]): any; + warn(...args: any[]): any; + info(...args: any[]): any; + log(...args: any[]): any; + help(...args: any[]): any; + data(...args: any[]): any; + prompt(...args: any[]): any; + verbose(...args: any[]): any; + input(...args: any[]): any; + silly(...args: any[]): any; + /** + * This function is useful for applications (e.g. express) + * that have an HTTP Request object with headers. + * + * You can pass the request object, and it will negotiate + * the best matching language to globalize the message. + * + * The matching algorithm is done against the languages + * supported by the application. (those included in the intl dir) + * + * @param req + * @returns {*} + */ + static readonly sgCache: Map; + http(req: { + headers: AnyObject; + }): StrongGlobalize; +} diff --git a/node_modules/strong-globalize/lib/strong-globalize.js b/node_modules/strong-globalize/lib/strong-globalize.js new file mode 100644 index 00000000..89761bf9 --- /dev/null +++ b/node_modules/strong-globalize/lib/strong-globalize.js @@ -0,0 +1,252 @@ +"use strict"; +// Copyright IBM Corp. 2015,2018. All Rights Reserved. +// Node module: strong-globalize +// This file is licensed under the Artistic License 2.0. +// License text available at https://opensource.org/licenses/Artistic-2.0 +Object.defineProperty(exports, "__esModule", { value: true }); +// Multi-instance strong-globalize +const globalize = require("./globalize"); +const helper = require("./helper"); +const path = require("path"); +const config_1 = require("./config"); +// tslint:disable:no-any +/** + * FIXME: workaround for + * https://github.com/strongloop/strong-globalize/issues/127 + * + * Monkey-patching Cldr.prototype.get for `zz` + * See: + * https://github.com/rxaviers/cldrjs/blob/master/src/core/likely_subtags.js#L75 + */ +try { + const Cldr = require('cldrjs'); + const get = Cldr.prototype.get; + Cldr.prototype.get = function (paths) { + if (Array.isArray(paths)) { + paths = paths.map(function (p) { + return p === 'zz' ? 'en' : p; + }); + } + // tslint:disable-next-line:no-invalid-this + return get.call(this, paths); + }; +} +catch (e) { + // Ignore +} +class StrongGlobalize { + constructor(options) { + if (typeof options === 'string') { + StrongGlobalize.SetRootDir(options); + options = undefined; + } + if (!config_1.STRONGLOOP_GLB.DEFAULT_LANG) { + globalize.setDefaultLanguage(); + globalize.setAppLanguages(); + } + const defaults = { + language: config_1.STRONGLOOP_GLB.DEFAULT_LANG, + appLanguages: config_1.STRONGLOOP_GLB.APP_LANGS, + }; + this._options = options ? Object.assign(defaults, options) : defaults; + } + static SetRootDir(rootDir, options) { + const defaults = { + autonomousMsgLoading: helper.AML_DEFAULT, + }; + options = options ? Object.assign(defaults, options) : defaults; + options.autonomousMsgLoading = helper.validateAmlValue(options.autonomousMsgLoading); + if (!options.autonomousMsgLoading) { + options.autonomousMsgLoading = defaults.autonomousMsgLoading; + } + globalize.setRootDir(rootDir); + if (!config_1.STRONGLOOP_GLB.AUTO_MSG_LOADING) { + globalize.setDefaultLanguage(); + config_1.STRONGLOOP_GLB.AUTO_MSG_LOADING = options.autonomousMsgLoading; + } + if (path.resolve(rootDir) !== path.resolve(config_1.STRONGLOOP_GLB.MASTER_ROOT_DIR) && + helper.isLoadMessages(rootDir)) { + const langs = Object.keys(config_1.STRONGLOOP_GLB.bundles); + langs.forEach(function (lang) { + helper.loadMsgFromFile(lang, rootDir); + }); + } + } + setLanguage(lang) { + lang = helper.isSupportedLanguage(lang) + ? lang + : config_1.STRONGLOOP_GLB.DEFAULT_LANG; + this._options.language = lang; + } + getLanguage() { + return this._options.language; + } + c(value, currencySymbol, options) { + globalize.loadGlobalize(this._options.language); + return globalize.formatCurrency(value, currencySymbol, options, this._options.language); + } + formatCurrency(value, currencySymbol, options) { + return this.c(value, currencySymbol, options); + } + d(value, options) { + globalize.loadGlobalize(this._options.language); + return globalize.formatDate(value, options, this._options.language); + } + formatDate(value, options) { + return this.d(value, options); + } + n(value, options) { + globalize.loadGlobalize(this._options.language); + return globalize.formatNumber(value, options, this._options.language); + } + formatNumber(value, options) { + return this.n(value, options); + } + m(msgPath, variables) { + globalize.loadGlobalize(this._options.language); + return globalize.formatMessage(msgPath, variables, this._options.language); + } + formatMessage(msgPath, variables) { + return this.m(msgPath, variables); + } + t(msgPath, variables) { + return this.m(msgPath, variables); + } + Error(...args) { + globalize.loadGlobalize(this._options.language); + const msg = globalize.packMessage(args, null, true, this._options.language); + globalize.logPersistent('error', msg); + return Error(msg.message); + } + f(...args) { + globalize.loadGlobalize(this._options.language); + return globalize.packMessage(args, null, false, this._options.language); + } + format(...args) { + return this.f(...args); + } + ewrite(...args) { + globalize.loadGlobalize(this._options.language); + return globalize.packMessage(args, function (msg) { + globalize.logPersistent(msg, 'error'); + if (globalize.consoleEnabled()) + process.stderr.write(msg.message); + return msg; + }, true, this._options.language); + } + owrite(...args) { + globalize.loadGlobalize(this._options.language); + return globalize.packMessage(args, function (msg) { + globalize.logPersistent(msg, 'error'); + if (globalize.consoleEnabled()) + process.stdout.write(msg.message); + }, true, this._options.language); + } + write(...args) { + this.owrite(...args); + } + // RFC 5424 Syslog Message Severities + emergency(...args) { + globalize.loadGlobalize(this._options.language); + return globalize.rfc5424('emergency', args, console.error, this._options.language); + } + alert(...args) { + globalize.loadGlobalize(this._options.language); + return globalize.rfc5424('alert', args, console.error, this._options.language); + } + critical(...args) { + globalize.loadGlobalize(this._options.language); + return globalize.rfc5424('critical', args, console.error, this._options.language); + } + error(...args) { + globalize.loadGlobalize(this._options.language); + return globalize.rfc5424('error', args, console.error, this._options.language); + } + warning(...args) { + globalize.loadGlobalize(this._options.language); + return globalize.rfc5424('warning', args, console.error, this._options.language); + } + notice(...args) { + globalize.loadGlobalize(this._options.language); + return globalize.rfc5424('notice', args, console.log, this._options.language); + } + informational(...args) { + globalize.loadGlobalize(this._options.language); + return globalize.rfc5424('informational', args, console.log, this._options.language); + } + debug(...args) { + globalize.loadGlobalize(this._options.language); + return globalize.rfc5424('debug', args, console.log, this._options.language); + } + // Node.js console + warn(...args) { + globalize.loadGlobalize(this._options.language); + return globalize.rfc5424('warn', args, console.error, this._options.language); + } + info(...args) { + globalize.loadGlobalize(this._options.language); + return globalize.rfc5424('info', args, console.log, this._options.language); + } + log(...args) { + globalize.loadGlobalize(this._options.language); + return globalize.rfc5424('log', args, console.log, this._options.language); + } + // Misc Logging Levels + help(...args) { + globalize.loadGlobalize(this._options.language); + return globalize.rfc5424('help', args, console.log, this._options.language); + } + data(...args) { + globalize.loadGlobalize(this._options.language); + return globalize.rfc5424('data', args, console.log, this._options.language); + } + prompt(...args) { + globalize.loadGlobalize(this._options.language); + return globalize.rfc5424('prompt', args, console.log, this._options.language); + } + verbose(...args) { + globalize.loadGlobalize(this._options.language); + return globalize.rfc5424('verbose', args, console.log, this._options.language); + } + input(...args) { + globalize.loadGlobalize(this._options.language); + return globalize.rfc5424('input', args, console.log, this._options.language); + } + silly(...args) { + globalize.loadGlobalize(this._options.language); + return globalize.rfc5424('silly', args, console.log, this._options.language); + } + http(req) { + const matchingLang = helper.getLanguageFromRequest(req, this._options.appLanguages, this._options.language); + let sg = StrongGlobalize.sgCache.get(matchingLang); + if (sg) { + return sg; + } + sg = new StrongGlobalize(this._options); + sg.setLanguage(matchingLang); + StrongGlobalize.sgCache.set(matchingLang, sg); + return sg; + } +} +StrongGlobalize.helper = helper; +StrongGlobalize.globalize = globalize; +StrongGlobalize.STRONGLOOP_GLB = config_1.STRONGLOOP_GLB; +StrongGlobalize.SetPersistentLogging = globalize.setPersistentLogging; +StrongGlobalize.SetDefaultLanguage = globalize.setDefaultLanguage; +StrongGlobalize.SetAppLanguages = globalize.setAppLanguages; +/** + * This function is useful for applications (e.g. express) + * that have an HTTP Request object with headers. + * + * You can pass the request object, and it will negotiate + * the best matching language to globalize the message. + * + * The matching algorithm is done against the languages + * supported by the application. (those included in the intl dir) + * + * @param req + * @returns {*} + */ +StrongGlobalize.sgCache = new Map(); /* eslint-env es6 */ +exports.StrongGlobalize = StrongGlobalize; +//# sourceMappingURL=strong-globalize.js.map \ No newline at end of file diff --git a/node_modules/strong-globalize/lib/strong-globalize.js.map b/node_modules/strong-globalize/lib/strong-globalize.js.map new file mode 100644 index 00000000..e59c582e --- /dev/null +++ b/node_modules/strong-globalize/lib/strong-globalize.js.map @@ -0,0 +1 @@ +{"version":3,"file":"strong-globalize.js","sourceRoot":"","sources":["../src/strong-globalize.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,gCAAgC;AAChC,wDAAwD;AACxD,yEAAyE;;AAEzE,kCAAkC;AAClC,yCAAyC;AACzC,mCAAmC;AACnC,6BAA6B;AAE7B,qCAAmD;AAEnD,wBAAwB;AAExB;;;;;;;GAOG;AACH,IAAI;IACF,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;IAC/B,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,UAAS,KAAgB;QAC5C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,UAAS,CAAC;gBAC1B,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC;SACJ;QACD,2CAA2C;QAC3C,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC;CACH;AAAC,OAAO,CAAC,EAAE;IACV,SAAS;CACV;AAED,MAAa,eAAe;IAO1B,YAAY,OAAmB;QAC7B,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;YAC/B,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACpC,OAAO,GAAG,SAAS,CAAC;SACrB;QACD,IAAI,CAAC,uBAAc,CAAC,YAAY,EAAE;YAChC,SAAS,CAAC,kBAAkB,EAAE,CAAC;YAC/B,SAAS,CAAC,eAAe,EAAE,CAAC;SAC7B;QAED,MAAM,QAAQ,GAAG;YACf,QAAQ,EAAE,uBAAc,CAAC,YAAY;YACrC,YAAY,EAAE,uBAAc,CAAC,SAAS;SACvC,CAAC;QAEF,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACxE,CAAC;IAMD,MAAM,CAAC,UAAU,CAAC,OAAe,EAAE,OAAmB;QACpD,MAAM,QAAQ,GAAG;YACf,oBAAoB,EAAE,MAAM,CAAC,WAAW;SACzC,CAAC;QACF,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAChE,OAAO,CAAC,oBAAoB,GAAG,MAAM,CAAC,gBAAgB,CACpD,OAAO,CAAC,oBAAoB,CAC7B,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE;YACjC,OAAO,CAAC,oBAAoB,GAAG,QAAQ,CAAC,oBAAoB,CAAC;SAC9D;QACD,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,uBAAc,CAAC,gBAAgB,EAAE;YACpC,SAAS,CAAC,kBAAkB,EAAE,CAAC;YAC/B,uBAAc,CAAC,gBAAgB,GAAG,OAAO,CAAC,oBAA8B,CAAC;SAC1E;QACD,IACE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,uBAAc,CAAC,eAAgB,CAAC;YACvE,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,EAC9B;YACA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,uBAAc,CAAC,OAAQ,CAAC,CAAC;YACnD,KAAK,CAAC,OAAO,CAAC,UAAS,IAAI;gBACzB,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACxC,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAED,WAAW,CAAC,IAAa;QACvB,IAAI,GAAG,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC;YACrC,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,uBAAc,CAAC,YAAY,CAAC;QAChC,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;IAChC,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAChC,CAAC;IAED,CAAC,CAAC,KAAU,EAAE,cAAsB,EAAE,OAAmB;QACvD,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,SAAS,CAAC,cAAc,CAC7B,KAAK,EACL,cAAc,EACd,OAAO,EACP,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACvB,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,KAAU,EAAE,cAAsB,EAAE,OAAmB;QACpE,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,CAAC,CAAC,KAAW,EAAE,OAAmB;QAChC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACtE,CAAC;IAED,UAAU,CAAC,KAAW,EAAE,OAAmB;QACzC,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,CAAC,CAAC,KAAa,EAAE,OAAmB;QAClC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACxE,CAAC;IAED,YAAY,CAAC,KAAa,EAAE,OAAmB;QAC7C,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,CAAC,CAAC,OAAe,EAAE,SAA4B;QAC7C,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7E,CAAC;IAED,aAAa,CAAC,OAAe,EAAE,SAA4B;QACzD,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACpC,CAAC;IAED,CAAC,CAAC,OAAe,EAAE,SAA4B;QAC7C,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,GAAG,IAAW;QAClB,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC5E,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACtC,OAAO,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED,CAAC,CAAC,GAAG,IAAW;QACd,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,CAAC,GAAG,IAAW;QACnB,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,CAAC,GAAG,IAAW;QACnB,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,SAAS,CAAC,WAAW,CAC1B,IAAI,EACJ,UAAS,GAAG;YACV,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACtC,IAAI,SAAS,CAAC,cAAc,EAAE;gBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAClE,OAAO,GAAG,CAAC;QACb,CAAC,EACD,IAAI,EACJ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACvB,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,GAAG,IAAW;QACnB,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,SAAS,CAAC,WAAW,CAC1B,IAAI,EACJ,UAAS,GAAG;YACV,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACtC,IAAI,SAAS,CAAC,cAAc,EAAE;gBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACpE,CAAC,EACD,IAAI,EACJ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACvB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,GAAG,IAAW;QAClB,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;IACvB,CAAC;IAED,qCAAqC;IACrC,SAAS,CAAC,GAAG,IAAW;QACtB,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,SAAS,CAAC,OAAO,CACtB,WAAW,EACX,IAAI,EACJ,OAAO,CAAC,KAAK,EACb,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACvB,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,GAAG,IAAW;QAClB,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,SAAS,CAAC,OAAO,CACtB,OAAO,EACP,IAAI,EACJ,OAAO,CAAC,KAAK,EACb,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACvB,CAAC;IACJ,CAAC;IACD,QAAQ,CAAC,GAAG,IAAW;QACrB,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,SAAS,CAAC,OAAO,CACtB,UAAU,EACV,IAAI,EACJ,OAAO,CAAC,KAAK,EACb,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACvB,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,GAAG,IAAW;QAClB,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,SAAS,CAAC,OAAO,CACtB,OAAO,EACP,IAAI,EACJ,OAAO,CAAC,KAAK,EACb,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACvB,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,GAAG,IAAW;QACpB,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,SAAS,CAAC,OAAO,CACtB,SAAS,EACT,IAAI,EACJ,OAAO,CAAC,KAAK,EACb,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACvB,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,GAAG,IAAW;QACnB,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,SAAS,CAAC,OAAO,CACtB,QAAQ,EACR,IAAI,EACJ,OAAO,CAAC,GAAG,EACX,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACvB,CAAC;IACJ,CAAC;IACD,aAAa,CAAC,GAAG,IAAW;QAC1B,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,SAAS,CAAC,OAAO,CACtB,eAAe,EACf,IAAI,EACJ,OAAO,CAAC,GAAG,EACX,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACvB,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,GAAG,IAAW;QAClB,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,SAAS,CAAC,OAAO,CACtB,OAAO,EACP,IAAI,EACJ,OAAO,CAAC,GAAG,EACX,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACvB,CAAC;IACJ,CAAC;IAED,kBAAkB;IAClB,IAAI,CAAC,GAAG,IAAW;QACjB,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,SAAS,CAAC,OAAO,CACtB,MAAM,EACN,IAAI,EACJ,OAAO,CAAC,KAAK,EACb,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACvB,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,GAAG,IAAW;QACjB,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC9E,CAAC;IACD,GAAG,CAAC,GAAG,IAAW;QAChB,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7E,CAAC;IAED,sBAAsB;IACtB,IAAI,CAAC,GAAG,IAAW;QACjB,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,CAAC,GAAG,IAAW;QACjB,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC9E,CAAC;IACD,MAAM,CAAC,GAAG,IAAW;QACnB,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,SAAS,CAAC,OAAO,CACtB,QAAQ,EACR,IAAI,EACJ,OAAO,CAAC,GAAG,EACX,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACvB,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,GAAG,IAAW;QACpB,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,SAAS,CAAC,OAAO,CACtB,SAAS,EACT,IAAI,EACJ,OAAO,CAAC,GAAG,EACX,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACvB,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,GAAG,IAAW;QAClB,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,SAAS,CAAC,OAAO,CACtB,OAAO,EACP,IAAI,EACJ,OAAO,CAAC,GAAG,EACX,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACvB,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,GAAG,IAAW;QAClB,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,SAAS,CAAC,OAAO,CACtB,OAAO,EACP,IAAI,EACJ,OAAO,CAAC,GAAG,EACX,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACvB,CAAC;IACJ,CAAC;IAmBD,IAAI,CAAC,GAAyB;QAC5B,MAAM,YAAY,GAAG,MAAM,CAAC,sBAAsB,CAChD,GAAG,EACH,IAAI,CAAC,QAAQ,CAAC,YAAY,EAC1B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACvB,CAAC;QAEF,IAAI,EAAE,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACnD,IAAI,EAAE,EAAE;YACN,OAAO,EAAE,CAAC;SACX;QAED,EAAE,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAC7B,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAC9C,OAAO,EAAE,CAAC;IACZ,CAAC;;AA1Ue,sBAAM,GAAG,MAAM,CAAC;AAChB,yBAAS,GAAG,SAAS,CAAC;AACtB,8BAAc,GAAc,uBAAc,CAAC;AAsBpD,oCAAoB,GAAG,SAAS,CAAC,oBAAoB,CAAC;AACtD,kCAAkB,GAAG,SAAS,CAAC,kBAAkB,CAAC;AAClD,+BAAe,GAAG,SAAS,CAAC,eAAe,CAAC;AA+QnD;;;;;;;;;;;;GAYG;AACa,uBAAO,GAAG,IAAI,GAAG,EAG9B,CAAC,CAAC,oBAAoB;AA1T3B,0CA4UC"} \ No newline at end of file diff --git a/node_modules/strong-globalize/node_modules/debug/CHANGELOG.md b/node_modules/strong-globalize/node_modules/debug/CHANGELOG.md new file mode 100644 index 00000000..820d21e3 --- /dev/null +++ b/node_modules/strong-globalize/node_modules/debug/CHANGELOG.md @@ -0,0 +1,395 @@ + +3.1.0 / 2017-09-26 +================== + + * Add `DEBUG_HIDE_DATE` env var (#486) + * Remove ReDoS regexp in %o formatter (#504) + * Remove "component" from package.json + * Remove `component.json` + * Ignore package-lock.json + * Examples: fix colors printout + * Fix: browser detection + * Fix: spelling mistake (#496, @EdwardBetts) + +3.0.1 / 2017-08-24 +================== + + * Fix: Disable colors in Edge and Internet Explorer (#489) + +3.0.0 / 2017-08-08 +================== + + * Breaking: Remove DEBUG_FD (#406) + * Breaking: Use `Date#toISOString()` instead to `Date#toUTCString()` when output is not a TTY (#418) + * Breaking: Make millisecond timer namespace specific and allow 'always enabled' output (#408) + * Addition: document `enabled` flag (#465) + * Addition: add 256 colors mode (#481) + * Addition: `enabled()` updates existing debug instances, add `destroy()` function (#440) + * Update: component: update "ms" to v2.0.0 + * Update: separate the Node and Browser tests in Travis-CI + * Update: refactor Readme, fixed documentation, added "Namespace Colors" section, redid screenshots + * Update: separate Node.js and web browser examples for organization + * Update: update "browserify" to v14.4.0 + * Fix: fix Readme typo (#473) + +2.6.9 / 2017-09-22 +================== + + * remove ReDoS regexp in %o formatter (#504) + +2.6.8 / 2017-05-18 +================== + + * Fix: Check for undefined on browser globals (#462, @marbemac) + +2.6.7 / 2017-05-16 +================== + + * Fix: Update ms to 2.0.0 to fix regular expression denial of service vulnerability (#458, @hubdotcom) + * Fix: Inline extend function in node implementation (#452, @dougwilson) + * Docs: Fix typo (#455, @msasad) + +2.6.5 / 2017-04-27 +================== + + * Fix: null reference check on window.documentElement.style.WebkitAppearance (#447, @thebigredgeek) + * Misc: clean up browser reference checks (#447, @thebigredgeek) + * Misc: add npm-debug.log to .gitignore (@thebigredgeek) + + +2.6.4 / 2017-04-20 +================== + + * Fix: bug that would occur if process.env.DEBUG is a non-string value. (#444, @LucianBuzzo) + * Chore: ignore bower.json in npm installations. (#437, @joaovieira) + * Misc: update "ms" to v0.7.3 (@tootallnate) + +2.6.3 / 2017-03-13 +================== + + * Fix: Electron reference to `process.env.DEBUG` (#431, @paulcbetts) + * Docs: Changelog fix (@thebigredgeek) + +2.6.2 / 2017-03-10 +================== + + * Fix: DEBUG_MAX_ARRAY_LENGTH (#420, @slavaGanzin) + * Docs: Add backers and sponsors from Open Collective (#422, @piamancini) + * Docs: Add Slackin invite badge (@tootallnate) + +2.6.1 / 2017-02-10 +================== + + * Fix: Module's `export default` syntax fix for IE8 `Expected identifier` error + * Fix: Whitelist DEBUG_FD for values 1 and 2 only (#415, @pi0) + * Fix: IE8 "Expected identifier" error (#414, @vgoma) + * Fix: Namespaces would not disable once enabled (#409, @musikov) + +2.6.0 / 2016-12-28 +================== + + * Fix: added better null pointer checks for browser useColors (@thebigredgeek) + * Improvement: removed explicit `window.debug` export (#404, @tootallnate) + * Improvement: deprecated `DEBUG_FD` environment variable (#405, @tootallnate) + +2.5.2 / 2016-12-25 +================== + + * Fix: reference error on window within webworkers (#393, @KlausTrainer) + * Docs: fixed README typo (#391, @lurch) + * Docs: added notice about v3 api discussion (@thebigredgeek) + +2.5.1 / 2016-12-20 +================== + + * Fix: babel-core compatibility + +2.5.0 / 2016-12-20 +================== + + * Fix: wrong reference in bower file (@thebigredgeek) + * Fix: webworker compatibility (@thebigredgeek) + * Fix: output formatting issue (#388, @kribblo) + * Fix: babel-loader compatibility (#383, @escwald) + * Misc: removed built asset from repo and publications (@thebigredgeek) + * Misc: moved source files to /src (#378, @yamikuronue) + * Test: added karma integration and replaced babel with browserify for browser tests (#378, @yamikuronue) + * Test: coveralls integration (#378, @yamikuronue) + * Docs: simplified language in the opening paragraph (#373, @yamikuronue) + +2.4.5 / 2016-12-17 +================== + + * Fix: `navigator` undefined in Rhino (#376, @jochenberger) + * Fix: custom log function (#379, @hsiliev) + * Improvement: bit of cleanup + linting fixes (@thebigredgeek) + * Improvement: rm non-maintainted `dist/` dir (#375, @freewil) + * Docs: simplified language in the opening paragraph. (#373, @yamikuronue) + +2.4.4 / 2016-12-14 +================== + + * Fix: work around debug being loaded in preload scripts for electron (#368, @paulcbetts) + +2.4.3 / 2016-12-14 +================== + + * Fix: navigation.userAgent error for react native (#364, @escwald) + +2.4.2 / 2016-12-14 +================== + + * Fix: browser colors (#367, @tootallnate) + * Misc: travis ci integration (@thebigredgeek) + * Misc: added linting and testing boilerplate with sanity check (@thebigredgeek) + +2.4.1 / 2016-12-13 +================== + + * Fix: typo that broke the package (#356) + +2.4.0 / 2016-12-13 +================== + + * Fix: bower.json references unbuilt src entry point (#342, @justmatt) + * Fix: revert "handle regex special characters" (@tootallnate) + * Feature: configurable util.inspect()`options for NodeJS (#327, @tootallnate) + * Feature: %O`(big O) pretty-prints objects (#322, @tootallnate) + * Improvement: allow colors in workers (#335, @botverse) + * Improvement: use same color for same namespace. (#338, @lchenay) + +2.3.3 / 2016-11-09 +================== + + * Fix: Catch `JSON.stringify()` errors (#195, Jovan Alleyne) + * Fix: Returning `localStorage` saved values (#331, Levi Thomason) + * Improvement: Don't create an empty object when no `process` (Nathan Rajlich) + +2.3.2 / 2016-11-09 +================== + + * Fix: be super-safe in index.js as well (@TooTallNate) + * Fix: should check whether process exists (Tom Newby) + +2.3.1 / 2016-11-09 +================== + + * Fix: Added electron compatibility (#324, @paulcbetts) + * Improvement: Added performance optimizations (@tootallnate) + * Readme: Corrected PowerShell environment variable example (#252, @gimre) + * Misc: Removed yarn lock file from source control (#321, @fengmk2) + +2.3.0 / 2016-11-07 +================== + + * Fix: Consistent placement of ms diff at end of output (#215, @gorangajic) + * Fix: Escaping of regex special characters in namespace strings (#250, @zacronos) + * Fix: Fixed bug causing crash on react-native (#282, @vkarpov15) + * Feature: Enabled ES6+ compatible import via default export (#212 @bucaran) + * Feature: Added %O formatter to reflect Chrome's console.log capability (#279, @oncletom) + * Package: Update "ms" to 0.7.2 (#315, @DevSide) + * Package: removed superfluous version property from bower.json (#207 @kkirsche) + * Readme: fix USE_COLORS to DEBUG_COLORS + * Readme: Doc fixes for format string sugar (#269, @mlucool) + * Readme: Updated docs for DEBUG_FD and DEBUG_COLORS environment variables (#232, @mattlyons0) + * Readme: doc fixes for PowerShell (#271 #243, @exoticknight @unreadable) + * Readme: better docs for browser support (#224, @matthewmueller) + * Tooling: Added yarn integration for development (#317, @thebigredgeek) + * Misc: Renamed History.md to CHANGELOG.md (@thebigredgeek) + * Misc: Added license file (#226 #274, @CantemoInternal @sdaitzman) + * Misc: Updated contributors (@thebigredgeek) + +2.2.0 / 2015-05-09 +================== + + * package: update "ms" to v0.7.1 (#202, @dougwilson) + * README: add logging to file example (#193, @DanielOchoa) + * README: fixed a typo (#191, @amir-s) + * browser: expose `storage` (#190, @stephenmathieson) + * Makefile: add a `distclean` target (#189, @stephenmathieson) + +2.1.3 / 2015-03-13 +================== + + * Updated stdout/stderr example (#186) + * Updated example/stdout.js to match debug current behaviour + * Renamed example/stderr.js to stdout.js + * Update Readme.md (#184) + * replace high intensity foreground color for bold (#182, #183) + +2.1.2 / 2015-03-01 +================== + + * dist: recompile + * update "ms" to v0.7.0 + * package: update "browserify" to v9.0.3 + * component: fix "ms.js" repo location + * changed bower package name + * updated documentation about using debug in a browser + * fix: security error on safari (#167, #168, @yields) + +2.1.1 / 2014-12-29 +================== + + * browser: use `typeof` to check for `console` existence + * browser: check for `console.log` truthiness (fix IE 8/9) + * browser: add support for Chrome apps + * Readme: added Windows usage remarks + * Add `bower.json` to properly support bower install + +2.1.0 / 2014-10-15 +================== + + * node: implement `DEBUG_FD` env variable support + * package: update "browserify" to v6.1.0 + * package: add "license" field to package.json (#135, @panuhorsmalahti) + +2.0.0 / 2014-09-01 +================== + + * package: update "browserify" to v5.11.0 + * node: use stderr rather than stdout for logging (#29, @stephenmathieson) + +1.0.4 / 2014-07-15 +================== + + * dist: recompile + * example: remove `console.info()` log usage + * example: add "Content-Type" UTF-8 header to browser example + * browser: place %c marker after the space character + * browser: reset the "content" color via `color: inherit` + * browser: add colors support for Firefox >= v31 + * debug: prefer an instance `log()` function over the global one (#119) + * Readme: update documentation about styled console logs for FF v31 (#116, @wryk) + +1.0.3 / 2014-07-09 +================== + + * Add support for multiple wildcards in namespaces (#122, @seegno) + * browser: fix lint + +1.0.2 / 2014-06-10 +================== + + * browser: update color palette (#113, @gscottolson) + * common: make console logging function configurable (#108, @timoxley) + * node: fix %o colors on old node <= 0.8.x + * Makefile: find node path using shell/which (#109, @timoxley) + +1.0.1 / 2014-06-06 +================== + + * browser: use `removeItem()` to clear localStorage + * browser, node: don't set DEBUG if namespaces is undefined (#107, @leedm777) + * package: add "contributors" section + * node: fix comment typo + * README: list authors + +1.0.0 / 2014-06-04 +================== + + * make ms diff be global, not be scope + * debug: ignore empty strings in enable() + * node: make DEBUG_COLORS able to disable coloring + * *: export the `colors` array + * npmignore: don't publish the `dist` dir + * Makefile: refactor to use browserify + * package: add "browserify" as a dev dependency + * Readme: add Web Inspector Colors section + * node: reset terminal color for the debug content + * node: map "%o" to `util.inspect()` + * browser: map "%j" to `JSON.stringify()` + * debug: add custom "formatters" + * debug: use "ms" module for humanizing the diff + * Readme: add "bash" syntax highlighting + * browser: add Firebug color support + * browser: add colors for WebKit browsers + * node: apply log to `console` + * rewrite: abstract common logic for Node & browsers + * add .jshintrc file + +0.8.1 / 2014-04-14 +================== + + * package: re-add the "component" section + +0.8.0 / 2014-03-30 +================== + + * add `enable()` method for nodejs. Closes #27 + * change from stderr to stdout + * remove unnecessary index.js file + +0.7.4 / 2013-11-13 +================== + + * remove "browserify" key from package.json (fixes something in browserify) + +0.7.3 / 2013-10-30 +================== + + * fix: catch localStorage security error when cookies are blocked (Chrome) + * add debug(err) support. Closes #46 + * add .browser prop to package.json. Closes #42 + +0.7.2 / 2013-02-06 +================== + + * fix package.json + * fix: Mobile Safari (private mode) is broken with debug + * fix: Use unicode to send escape character to shell instead of octal to work with strict mode javascript + +0.7.1 / 2013-02-05 +================== + + * add repository URL to package.json + * add DEBUG_COLORED to force colored output + * add browserify support + * fix component. Closes #24 + +0.7.0 / 2012-05-04 +================== + + * Added .component to package.json + * Added debug.component.js build + +0.6.0 / 2012-03-16 +================== + + * Added support for "-" prefix in DEBUG [Vinay Pulim] + * Added `.enabled` flag to the node version [TooTallNate] + +0.5.0 / 2012-02-02 +================== + + * Added: humanize diffs. Closes #8 + * Added `debug.disable()` to the CS variant + * Removed padding. Closes #10 + * Fixed: persist client-side variant again. Closes #9 + +0.4.0 / 2012-02-01 +================== + + * Added browser variant support for older browsers [TooTallNate] + * Added `debug.enable('project:*')` to browser variant [TooTallNate] + * Added padding to diff (moved it to the right) + +0.3.0 / 2012-01-26 +================== + + * Added millisecond diff when isatty, otherwise UTC string + +0.2.0 / 2012-01-22 +================== + + * Added wildcard support + +0.1.0 / 2011-12-02 +================== + + * Added: remove colors unless stderr isatty [TooTallNate] + +0.0.1 / 2010-01-03 +================== + + * Initial release diff --git a/node_modules/strong-globalize/node_modules/debug/LICENSE b/node_modules/strong-globalize/node_modules/debug/LICENSE new file mode 100644 index 00000000..658c933d --- /dev/null +++ b/node_modules/strong-globalize/node_modules/debug/LICENSE @@ -0,0 +1,19 @@ +(The MIT License) + +Copyright (c) 2014 TJ Holowaychuk + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software +and associated documentation files (the 'Software'), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial +portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/node_modules/strong-globalize/node_modules/debug/README.md b/node_modules/strong-globalize/node_modules/debug/README.md new file mode 100644 index 00000000..88dae35d --- /dev/null +++ b/node_modules/strong-globalize/node_modules/debug/README.md @@ -0,0 +1,455 @@ +# debug +[![Build Status](https://travis-ci.org/visionmedia/debug.svg?branch=master)](https://travis-ci.org/visionmedia/debug) [![Coverage Status](https://coveralls.io/repos/github/visionmedia/debug/badge.svg?branch=master)](https://coveralls.io/github/visionmedia/debug?branch=master) [![Slack](https://visionmedia-community-slackin.now.sh/badge.svg)](https://visionmedia-community-slackin.now.sh/) [![OpenCollective](https://opencollective.com/debug/backers/badge.svg)](#backers) +[![OpenCollective](https://opencollective.com/debug/sponsors/badge.svg)](#sponsors) + + + +A tiny JavaScript debugging utility modelled after Node.js core's debugging +technique. Works in Node.js and web browsers. + +## Installation + +```bash +$ npm install debug +``` + +## Usage + +`debug` exposes a function; simply pass this function the name of your module, and it will return a decorated version of `console.error` for you to pass debug statements to. This will allow you to toggle the debug output for different parts of your module as well as the module as a whole. + +Example [_app.js_](./examples/node/app.js): + +```js +var debug = require('debug')('http') + , http = require('http') + , name = 'My App'; + +// fake app + +debug('booting %o', name); + +http.createServer(function(req, res){ + debug(req.method + ' ' + req.url); + res.end('hello\n'); +}).listen(3000, function(){ + debug('listening'); +}); + +// fake worker of some kind + +require('./worker'); +``` + +Example [_worker.js_](./examples/node/worker.js): + +```js +var a = require('debug')('worker:a') + , b = require('debug')('worker:b'); + +function work() { + a('doing lots of uninteresting work'); + setTimeout(work, Math.random() * 1000); +} + +work(); + +function workb() { + b('doing some work'); + setTimeout(workb, Math.random() * 2000); +} + +workb(); +``` + +The `DEBUG` environment variable is then used to enable these based on space or +comma-delimited names. + +Here are some examples: + +screen shot 2017-08-08 at 12 53 04 pm +screen shot 2017-08-08 at 12 53 38 pm +screen shot 2017-08-08 at 12 53 25 pm + +#### Windows command prompt notes + +##### CMD + +On Windows the environment variable is set using the `set` command. + +```cmd +set DEBUG=*,-not_this +``` + +Example: + +```cmd +set DEBUG=* & node app.js +``` + +##### PowerShell (VS Code default) + +PowerShell uses different syntax to set environment variables. + +```cmd +$env:DEBUG = "*,-not_this" +``` + +Example: + +```cmd +$env:DEBUG='app';node app.js +``` + +Then, run the program to be debugged as usual. + +npm script example: +```js + "windowsDebug": "@powershell -Command $env:DEBUG='*';node app.js", +``` + +## Namespace Colors + +Every debug instance has a color generated for it based on its namespace name. +This helps when visually parsing the debug output to identify which debug instance +a debug line belongs to. + +#### Node.js + +In Node.js, colors are enabled when stderr is a TTY. You also _should_ install +the [`supports-color`](https://npmjs.org/supports-color) module alongside debug, +otherwise debug will only use a small handful of basic colors. + + + +#### Web Browser + +Colors are also enabled on "Web Inspectors" that understand the `%c` formatting +option. These are WebKit web inspectors, Firefox ([since version +31](https://hacks.mozilla.org/2014/05/editable-box-model-multiple-selection-sublime-text-keys-much-more-firefox-developer-tools-episode-31/)) +and the Firebug plugin for Firefox (any version). + + + + +## Millisecond diff + +When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the "+NNNms" will show you how much time was spent between calls. + + + +When stdout is not a TTY, `Date#toISOString()` is used, making it more useful for logging the debug information as shown below: + + + + +## Conventions + +If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser". If you append a "*" to the end of your name, it will always be enabled regardless of the setting of the DEBUG environment variable. You can then use it for normal output as well as debug output. + +## Wildcards + +The `*` character may be used as a wildcard. Suppose for example your library has +debuggers named "connect:bodyParser", "connect:compress", "connect:session", +instead of listing all three with +`DEBUG=connect:bodyParser,connect:compress,connect:session`, you may simply do +`DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`. + +You can also exclude specific debuggers by prefixing them with a "-" character. +For example, `DEBUG=*,-connect:*` would include all debuggers except those +starting with "connect:". + +## Environment Variables + +When running through Node.js, you can set a few environment variables that will +change the behavior of the debug logging: + +| Name | Purpose | +|-----------|-------------------------------------------------| +| `DEBUG` | Enables/disables specific debugging namespaces. | +| `DEBUG_HIDE_DATE` | Hide date from debug output (non-TTY). | +| `DEBUG_COLORS`| Whether or not to use colors in the debug output. | +| `DEBUG_DEPTH` | Object inspection depth. | +| `DEBUG_SHOW_HIDDEN` | Shows hidden properties on inspected objects. | + + +__Note:__ The environment variables beginning with `DEBUG_` end up being +converted into an Options object that gets used with `%o`/`%O` formatters. +See the Node.js documentation for +[`util.inspect()`](https://nodejs.org/api/util.html#util_util_inspect_object_options) +for the complete list. + +## Formatters + +Debug uses [printf-style](https://wikipedia.org/wiki/Printf_format_string) formatting. +Below are the officially supported formatters: + +| Formatter | Representation | +|-----------|----------------| +| `%O` | Pretty-print an Object on multiple lines. | +| `%o` | Pretty-print an Object all on a single line. | +| `%s` | String. | +| `%d` | Number (both integer and float). | +| `%j` | JSON. Replaced with the string '[Circular]' if the argument contains circular references. | +| `%%` | Single percent sign ('%'). This does not consume an argument. | + + +### Custom formatters + +You can add custom formatters by extending the `debug.formatters` object. +For example, if you wanted to add support for rendering a Buffer as hex with +`%h`, you could do something like: + +```js +const createDebug = require('debug') +createDebug.formatters.h = (v) => { + return v.toString('hex') +} + +// …elsewhere +const debug = createDebug('foo') +debug('this is hex: %h', new Buffer('hello world')) +// foo this is hex: 68656c6c6f20776f726c6421 +0ms +``` + + +## Browser Support + +You can build a browser-ready script using [browserify](https://github.com/substack/node-browserify), +or just use the [browserify-as-a-service](https://wzrd.in/) [build](https://wzrd.in/standalone/debug@latest), +if you don't want to build it yourself. + +Debug's enable state is currently persisted by `localStorage`. +Consider the situation shown below where you have `worker:a` and `worker:b`, +and wish to debug both. You can enable this using `localStorage.debug`: + +```js +localStorage.debug = 'worker:*' +``` + +And then refresh the page. + +```js +a = debug('worker:a'); +b = debug('worker:b'); + +setInterval(function(){ + a('doing some work'); +}, 1000); + +setInterval(function(){ + b('doing some work'); +}, 1200); +``` + + +## Output streams + + By default `debug` will log to stderr, however this can be configured per-namespace by overriding the `log` method: + +Example [_stdout.js_](./examples/node/stdout.js): + +```js +var debug = require('debug'); +var error = debug('app:error'); + +// by default stderr is used +error('goes to stderr!'); + +var log = debug('app:log'); +// set this namespace to log via console.log +log.log = console.log.bind(console); // don't forget to bind to console! +log('goes to stdout'); +error('still goes to stderr!'); + +// set all output to go via console.info +// overrides all per-namespace log settings +debug.log = console.info.bind(console); +error('now goes to stdout via console.info'); +log('still goes to stdout, but via console.info now'); +``` + +## Extend +You can simply extend debugger +```js +const log = require('debug')('auth'); + +//creates new debug instance with extended namespace +const logSign = log.extend('sign'); +const logLogin = log.extend('login'); + +log('hello'); // auth hello +logSign('hello'); //auth:sign hello +logLogin('hello'); //auth:login hello +``` + +## Set dynamically + +You can also enable debug dynamically by calling the `enable()` method : + +```js +let debug = require('debug'); + +console.log(1, debug.enabled('test')); + +debug.enable('test'); +console.log(2, debug.enabled('test')); + +debug.disable(); +console.log(3, debug.enabled('test')); + +``` + +print : +``` +1 false +2 true +3 false +``` + +Usage : +`enable(namespaces)` +`namespaces` can include modes separated by a colon and wildcards. + +Note that calling `enable()` completely overrides previously set DEBUG variable : + +``` +$ DEBUG=foo node -e 'var dbg = require("debug"); dbg.enable("bar"); console.log(dbg.enabled("foo"))' +=> false +``` + +`disable()` + +Will disable all namespaces. The functions returns the namespaces currently +enabled (and skipped). This can be useful if you want to disable debugging +temporarily without knowing what was enabled to begin with. + +For example: + +```js +let debug = require('debug'); +debug.enable('foo:*,-foo:bar'); +let namespaces = debug.disable(); +debug.enable(namespaces); +``` + +Note: There is no guarantee that the string will be identical to the initial +enable string, but semantically they will be identical. + +## Checking whether a debug target is enabled + +After you've created a debug instance, you can determine whether or not it is +enabled by checking the `enabled` property: + +```javascript +const debug = require('debug')('http'); + +if (debug.enabled) { + // do stuff... +} +``` + +You can also manually toggle this property to force the debug instance to be +enabled or disabled. + + +## Authors + + - TJ Holowaychuk + - Nathan Rajlich + - Andrew Rhyne + +## Backers + +Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/debug#backer)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## Sponsors + +Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/debug#sponsor)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## License + +(The MIT License) + +Copyright (c) 2014-2017 TJ Holowaychuk <tj@vision-media.ca> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/strong-globalize/node_modules/debug/dist/debug.js b/node_modules/strong-globalize/node_modules/debug/dist/debug.js new file mode 100644 index 00000000..89ad0c21 --- /dev/null +++ b/node_modules/strong-globalize/node_modules/debug/dist/debug.js @@ -0,0 +1,912 @@ +"use strict"; + +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } + +function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } + +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +(function (f) { + if ((typeof exports === "undefined" ? "undefined" : _typeof(exports)) === "object" && typeof module !== "undefined") { + module.exports = f(); + } else if (typeof define === "function" && define.amd) { + define([], f); + } else { + var g; + + if (typeof window !== "undefined") { + g = window; + } else if (typeof global !== "undefined") { + g = global; + } else if (typeof self !== "undefined") { + g = self; + } else { + g = this; + } + + g.debug = f(); + } +})(function () { + var define, module, exports; + return function () { + function r(e, n, t) { + function o(i, f) { + if (!n[i]) { + if (!e[i]) { + var c = "function" == typeof require && require; + if (!f && c) return c(i, !0); + if (u) return u(i, !0); + var a = new Error("Cannot find module '" + i + "'"); + throw a.code = "MODULE_NOT_FOUND", a; + } + + var p = n[i] = { + exports: {} + }; + e[i][0].call(p.exports, function (r) { + var n = e[i][1][r]; + return o(n || r); + }, p, p.exports, r, e, n, t); + } + + return n[i].exports; + } + + for (var u = "function" == typeof require && require, i = 0; i < t.length; i++) { + o(t[i]); + } + + return o; + } + + return r; + }()({ + 1: [function (require, module, exports) { + /** + * Helpers. + */ + var s = 1000; + var m = s * 60; + var h = m * 60; + var d = h * 24; + var w = d * 7; + var y = d * 365.25; + /** + * Parse or format the given `val`. + * + * Options: + * + * - `long` verbose formatting [false] + * + * @param {String|Number} val + * @param {Object} [options] + * @throws {Error} throw an error if val is not a non-empty string or a number + * @return {String|Number} + * @api public + */ + + module.exports = function (val, options) { + options = options || {}; + + var type = _typeof(val); + + if (type === 'string' && val.length > 0) { + return parse(val); + } else if (type === 'number' && isNaN(val) === false) { + return options.long ? fmtLong(val) : fmtShort(val); + } + + throw new Error('val is not a non-empty string or a valid number. val=' + JSON.stringify(val)); + }; + /** + * Parse the given `str` and return milliseconds. + * + * @param {String} str + * @return {Number} + * @api private + */ + + + function parse(str) { + str = String(str); + + if (str.length > 100) { + return; + } + + var match = /^((?:\d+)?\-?\d?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(str); + + if (!match) { + return; + } + + var n = parseFloat(match[1]); + var type = (match[2] || 'ms').toLowerCase(); + + switch (type) { + case 'years': + case 'year': + case 'yrs': + case 'yr': + case 'y': + return n * y; + + case 'weeks': + case 'week': + case 'w': + return n * w; + + case 'days': + case 'day': + case 'd': + return n * d; + + case 'hours': + case 'hour': + case 'hrs': + case 'hr': + case 'h': + return n * h; + + case 'minutes': + case 'minute': + case 'mins': + case 'min': + case 'm': + return n * m; + + case 'seconds': + case 'second': + case 'secs': + case 'sec': + case 's': + return n * s; + + case 'milliseconds': + case 'millisecond': + case 'msecs': + case 'msec': + case 'ms': + return n; + + default: + return undefined; + } + } + /** + * Short format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + + + function fmtShort(ms) { + var msAbs = Math.abs(ms); + + if (msAbs >= d) { + return Math.round(ms / d) + 'd'; + } + + if (msAbs >= h) { + return Math.round(ms / h) + 'h'; + } + + if (msAbs >= m) { + return Math.round(ms / m) + 'm'; + } + + if (msAbs >= s) { + return Math.round(ms / s) + 's'; + } + + return ms + 'ms'; + } + /** + * Long format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + + + function fmtLong(ms) { + var msAbs = Math.abs(ms); + + if (msAbs >= d) { + return plural(ms, msAbs, d, 'day'); + } + + if (msAbs >= h) { + return plural(ms, msAbs, h, 'hour'); + } + + if (msAbs >= m) { + return plural(ms, msAbs, m, 'minute'); + } + + if (msAbs >= s) { + return plural(ms, msAbs, s, 'second'); + } + + return ms + ' ms'; + } + /** + * Pluralization helper. + */ + + + function plural(ms, msAbs, n, name) { + var isPlural = msAbs >= n * 1.5; + return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); + } + }, {}], + 2: [function (require, module, exports) { + // shim for using process in browser + var process = module.exports = {}; // cached from whatever global is present so that test runners that stub it + // don't break things. But we need to wrap it in a try catch in case it is + // wrapped in strict mode code which doesn't define any globals. It's inside a + // function because try/catches deoptimize in certain engines. + + var cachedSetTimeout; + var cachedClearTimeout; + + function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); + } + + function defaultClearTimeout() { + throw new Error('clearTimeout has not been defined'); + } + + (function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } + })(); + + function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } // if setTimeout wasn't available but was latter defined + + + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch (e) { + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch (e) { + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } + } + + function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } // if clearTimeout wasn't available but was latter defined + + + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e) { + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e) { + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } + } + + var queue = []; + var draining = false; + var currentQueue; + var queueIndex = -1; + + function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + + draining = false; + + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + + if (queue.length) { + drainQueue(); + } + } + + function drainQueue() { + if (draining) { + return; + } + + var timeout = runTimeout(cleanUpNextTick); + draining = true; + var len = queue.length; + + while (len) { + currentQueue = queue; + queue = []; + + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + + queueIndex = -1; + len = queue.length; + } + + currentQueue = null; + draining = false; + runClearTimeout(timeout); + } + + process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + + queue.push(new Item(fun, args)); + + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } + }; // v8 likes predictible objects + + + function Item(fun, array) { + this.fun = fun; + this.array = array; + } + + Item.prototype.run = function () { + this.fun.apply(null, this.array); + }; + + process.title = 'browser'; + process.browser = true; + process.env = {}; + process.argv = []; + process.version = ''; // empty string to avoid regexp issues + + process.versions = {}; + + function noop() {} + + process.on = noop; + process.addListener = noop; + process.once = noop; + process.off = noop; + process.removeListener = noop; + process.removeAllListeners = noop; + process.emit = noop; + process.prependListener = noop; + process.prependOnceListener = noop; + + process.listeners = function (name) { + return []; + }; + + process.binding = function (name) { + throw new Error('process.binding is not supported'); + }; + + process.cwd = function () { + return '/'; + }; + + process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); + }; + + process.umask = function () { + return 0; + }; + }, {}], + 3: [function (require, module, exports) { + /** + * This is the common logic for both the Node.js and web browser + * implementations of `debug()`. + */ + function setup(env) { + createDebug.debug = createDebug; + createDebug.default = createDebug; + createDebug.coerce = coerce; + createDebug.disable = disable; + createDebug.enable = enable; + createDebug.enabled = enabled; + createDebug.humanize = require('ms'); + Object.keys(env).forEach(function (key) { + createDebug[key] = env[key]; + }); + /** + * Active `debug` instances. + */ + + createDebug.instances = []; + /** + * The currently active debug mode names, and names to skip. + */ + + createDebug.names = []; + createDebug.skips = []; + /** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". + */ + + createDebug.formatters = {}; + /** + * Selects a color for a debug namespace + * @param {String} namespace The namespace string for the for the debug instance to be colored + * @return {Number|String} An ANSI color code for the given namespace + * @api private + */ + + function selectColor(namespace) { + var hash = 0; + + for (var i = 0; i < namespace.length; i++) { + hash = (hash << 5) - hash + namespace.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + + return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; + } + + createDebug.selectColor = selectColor; + /** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @return {Function} + * @api public + */ + + function createDebug(namespace) { + var prevTime; + + function debug() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + // Disabled? + if (!debug.enabled) { + return; + } + + var self = debug; // Set `diff` timestamp + + var curr = Number(new Date()); + var ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; + args[0] = createDebug.coerce(args[0]); + + if (typeof args[0] !== 'string') { + // Anything else let's inspect with %O + args.unshift('%O'); + } // Apply any `formatters` transformations + + + var index = 0; + args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) { + // If we encounter an escaped % then don't increase the array index + if (match === '%%') { + return match; + } + + index++; + var formatter = createDebug.formatters[format]; + + if (typeof formatter === 'function') { + var val = args[index]; + match = formatter.call(self, val); // Now we need to remove `args[index]` since it's inlined in the `format` + + args.splice(index, 1); + index--; + } + + return match; + }); // Apply env-specific formatting (colors, etc.) + + createDebug.formatArgs.call(self, args); + var logFn = self.log || createDebug.log; + logFn.apply(self, args); + } + + debug.namespace = namespace; + debug.enabled = createDebug.enabled(namespace); + debug.useColors = createDebug.useColors(); + debug.color = selectColor(namespace); + debug.destroy = destroy; + debug.extend = extend; // Debug.formatArgs = formatArgs; + // debug.rawLog = rawLog; + // env-specific initialization logic for debug instances + + if (typeof createDebug.init === 'function') { + createDebug.init(debug); + } + + createDebug.instances.push(debug); + return debug; + } + + function destroy() { + var index = createDebug.instances.indexOf(this); + + if (index !== -1) { + createDebug.instances.splice(index, 1); + return true; + } + + return false; + } + + function extend(namespace, delimiter) { + var newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); + newDebug.log = this.log; + return newDebug; + } + /** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + + + function enable(namespaces) { + createDebug.save(namespaces); + createDebug.names = []; + createDebug.skips = []; + var i; + var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); + var len = split.length; + + for (i = 0; i < len; i++) { + if (!split[i]) { + // ignore empty strings + continue; + } + + namespaces = split[i].replace(/\*/g, '.*?'); + + if (namespaces[0] === '-') { + createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); + } else { + createDebug.names.push(new RegExp('^' + namespaces + '$')); + } + } + + for (i = 0; i < createDebug.instances.length; i++) { + var instance = createDebug.instances[i]; + instance.enabled = createDebug.enabled(instance.namespace); + } + } + /** + * Disable debug output. + * + * @return {String} namespaces + * @api public + */ + + + function disable() { + var namespaces = [].concat(_toConsumableArray(createDebug.names.map(toNamespace)), _toConsumableArray(createDebug.skips.map(toNamespace).map(function (namespace) { + return '-' + namespace; + }))).join(','); + createDebug.enable(''); + return namespaces; + } + /** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + + + function enabled(name) { + if (name[name.length - 1] === '*') { + return true; + } + + var i; + var len; + + for (i = 0, len = createDebug.skips.length; i < len; i++) { + if (createDebug.skips[i].test(name)) { + return false; + } + } + + for (i = 0, len = createDebug.names.length; i < len; i++) { + if (createDebug.names[i].test(name)) { + return true; + } + } + + return false; + } + /** + * Convert regexp to namespace + * + * @param {RegExp} regxep + * @return {String} namespace + * @api private + */ + + + function toNamespace(regexp) { + return regexp.toString().substring(2, regexp.toString().length - 2).replace(/\.\*\?$/, '*'); + } + /** + * Coerce `val`. + * + * @param {Mixed} val + * @return {Mixed} + * @api private + */ + + + function coerce(val) { + if (val instanceof Error) { + return val.stack || val.message; + } + + return val; + } + + createDebug.enable(createDebug.load()); + return createDebug; + } + + module.exports = setup; + }, { + "ms": 1 + }], + 4: [function (require, module, exports) { + (function (process) { + /* eslint-env browser */ + + /** + * This is the web browser implementation of `debug()`. + */ + exports.log = log; + exports.formatArgs = formatArgs; + exports.save = save; + exports.load = load; + exports.useColors = useColors; + exports.storage = localstorage(); + /** + * Colors. + */ + + exports.colors = ['#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33']; + /** + * Currently only WebKit-based Web Inspectors, Firefox >= v31, + * and the Firebug extension (any Firefox version) are known + * to support "%c" CSS customizations. + * + * TODO: add a `localStorage` variable to explicitly enable/disable colors + */ + // eslint-disable-next-line complexity + + function useColors() { + // NB: In an Electron preload script, document will be defined but not fully + // initialized. Since we know we're in Chrome, we'll just detect this case + // explicitly + if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) { + return true; + } // Internet Explorer and Edge do not support colors. + + + if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { + return false; + } // Is webkit? http://stackoverflow.com/a/16459606/376773 + // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 + + + return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // Is firebug? http://stackoverflow.com/a/398120/376773 + typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) || // Is firefox >= v31? + // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages + typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 || // Double check webkit in userAgent just in case we are in a worker + typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/); + } + /** + * Colorize log arguments if enabled. + * + * @api public + */ + + + function formatArgs(args) { + args[0] = (this.useColors ? '%c' : '') + this.namespace + (this.useColors ? ' %c' : ' ') + args[0] + (this.useColors ? '%c ' : ' ') + '+' + module.exports.humanize(this.diff); + + if (!this.useColors) { + return; + } + + var c = 'color: ' + this.color; + args.splice(1, 0, c, 'color: inherit'); // The final "%c" is somewhat tricky, because there could be other + // arguments passed either before or after the %c, so we need to + // figure out the correct index to insert the CSS into + + var index = 0; + var lastC = 0; + args[0].replace(/%[a-zA-Z%]/g, function (match) { + if (match === '%%') { + return; + } + + index++; + + if (match === '%c') { + // We only are interested in the *last* %c + // (the user may have provided their own) + lastC = index; + } + }); + args.splice(lastC, 0, c); + } + /** + * Invokes `console.log()` when available. + * No-op when `console.log` is not a "function". + * + * @api public + */ + + + function log() { + var _console; + + // This hackery is required for IE8/9, where + // the `console.log` function doesn't have 'apply' + return (typeof console === "undefined" ? "undefined" : _typeof(console)) === 'object' && console.log && (_console = console).log.apply(_console, arguments); + } + /** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + + + function save(namespaces) { + try { + if (namespaces) { + exports.storage.setItem('debug', namespaces); + } else { + exports.storage.removeItem('debug'); + } + } catch (error) {// Swallow + // XXX (@Qix-) should we be logging these? + } + } + /** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + + + function load() { + var r; + + try { + r = exports.storage.getItem('debug'); + } catch (error) {} // Swallow + // XXX (@Qix-) should we be logging these? + // If debug isn't set in LS, and we're in Electron, try to load $DEBUG + + + if (!r && typeof process !== 'undefined' && 'env' in process) { + r = process.env.DEBUG; + } + + return r; + } + /** + * Localstorage attempts to return the localstorage. + * + * This is necessary because safari throws + * when a user disables cookies/localstorage + * and you attempt to access it. + * + * @return {LocalStorage} + * @api private + */ + + + function localstorage() { + try { + // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context + // The Browser also has localStorage in the global context. + return localStorage; + } catch (error) {// Swallow + // XXX (@Qix-) should we be logging these? + } + } + + module.exports = require('./common')(exports); + var formatters = module.exports.formatters; + /** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ + + formatters.j = function (v) { + try { + return JSON.stringify(v); + } catch (error) { + return '[UnexpectedJSONParseError]: ' + error.message; + } + }; + }).call(this, require('_process')); + }, { + "./common": 3, + "_process": 2 + }] + }, {}, [4])(4); +}); diff --git a/node_modules/strong-globalize/node_modules/debug/package.json b/node_modules/strong-globalize/node_modules/debug/package.json new file mode 100644 index 00000000..6a32d8f9 --- /dev/null +++ b/node_modules/strong-globalize/node_modules/debug/package.json @@ -0,0 +1,102 @@ +{ + "_from": "debug@^4.1.1", + "_id": "debug@4.1.1", + "_inBundle": false, + "_integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "_location": "/strong-globalize/debug", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "debug@^4.1.1", + "name": "debug", + "escapedName": "debug", + "rawSpec": "^4.1.1", + "saveSpec": null, + "fetchSpec": "^4.1.1" + }, + "_requiredBy": [ + "/strong-globalize" + ], + "_resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "_shasum": "3b72260255109c6b589cee050f1d516139664791", + "_spec": "debug@^4.1.1", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/strong-globalize", + "author": { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca" + }, + "browser": "./src/browser.js", + "bugs": { + "url": "https://github.com/visionmedia/debug/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Nathan Rajlich", + "email": "nathan@tootallnate.net", + "url": "http://n8.io" + }, + { + "name": "Andrew Rhyne", + "email": "rhyneandrew@gmail.com" + } + ], + "dependencies": { + "ms": "^2.1.1" + }, + "deprecated": false, + "description": "small debugging utility", + "devDependencies": { + "@babel/cli": "^7.0.0", + "@babel/core": "^7.0.0", + "@babel/preset-env": "^7.0.0", + "browserify": "14.4.0", + "chai": "^3.5.0", + "concurrently": "^3.1.0", + "coveralls": "^3.0.2", + "istanbul": "^0.4.5", + "karma": "^3.0.0", + "karma-chai": "^0.1.0", + "karma-mocha": "^1.3.0", + "karma-phantomjs-launcher": "^1.0.2", + "mocha": "^5.2.0", + "mocha-lcov-reporter": "^1.2.0", + "rimraf": "^2.5.4", + "xo": "^0.23.0" + }, + "files": [ + "src", + "dist/debug.js", + "LICENSE", + "README.md" + ], + "homepage": "https://github.com/visionmedia/debug#readme", + "keywords": [ + "debug", + "log", + "debugger" + ], + "license": "MIT", + "main": "./src/index.js", + "name": "debug", + "repository": { + "type": "git", + "url": "git://github.com/visionmedia/debug.git" + }, + "scripts": { + "build": "npm run build:debug && npm run build:test", + "build:debug": "babel -o dist/debug.js dist/debug.es6.js > dist/debug.js", + "build:test": "babel -d dist test.js", + "clean": "rimraf dist coverage", + "lint": "xo", + "prebuild:debug": "mkdir -p dist && browserify --standalone debug -o dist/debug.es6.js .", + "pretest:browser": "npm run build", + "test": "npm run test:node && npm run test:browser", + "test:browser": "karma start --single-run", + "test:coverage": "cat ./coverage/lcov.info | coveralls", + "test:node": "istanbul cover _mocha -- test.js" + }, + "unpkg": "./dist/debug.js", + "version": "4.1.1" +} diff --git a/node_modules/strong-globalize/node_modules/debug/src/browser.js b/node_modules/strong-globalize/node_modules/debug/src/browser.js new file mode 100644 index 00000000..5f34c0d0 --- /dev/null +++ b/node_modules/strong-globalize/node_modules/debug/src/browser.js @@ -0,0 +1,264 @@ +/* eslint-env browser */ + +/** + * This is the web browser implementation of `debug()`. + */ + +exports.log = log; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; +exports.storage = localstorage(); + +/** + * Colors. + */ + +exports.colors = [ + '#0000CC', + '#0000FF', + '#0033CC', + '#0033FF', + '#0066CC', + '#0066FF', + '#0099CC', + '#0099FF', + '#00CC00', + '#00CC33', + '#00CC66', + '#00CC99', + '#00CCCC', + '#00CCFF', + '#3300CC', + '#3300FF', + '#3333CC', + '#3333FF', + '#3366CC', + '#3366FF', + '#3399CC', + '#3399FF', + '#33CC00', + '#33CC33', + '#33CC66', + '#33CC99', + '#33CCCC', + '#33CCFF', + '#6600CC', + '#6600FF', + '#6633CC', + '#6633FF', + '#66CC00', + '#66CC33', + '#9900CC', + '#9900FF', + '#9933CC', + '#9933FF', + '#99CC00', + '#99CC33', + '#CC0000', + '#CC0033', + '#CC0066', + '#CC0099', + '#CC00CC', + '#CC00FF', + '#CC3300', + '#CC3333', + '#CC3366', + '#CC3399', + '#CC33CC', + '#CC33FF', + '#CC6600', + '#CC6633', + '#CC9900', + '#CC9933', + '#CCCC00', + '#CCCC33', + '#FF0000', + '#FF0033', + '#FF0066', + '#FF0099', + '#FF00CC', + '#FF00FF', + '#FF3300', + '#FF3333', + '#FF3366', + '#FF3399', + '#FF33CC', + '#FF33FF', + '#FF6600', + '#FF6633', + '#FF9900', + '#FF9933', + '#FFCC00', + '#FFCC33' +]; + +/** + * Currently only WebKit-based Web Inspectors, Firefox >= v31, + * and the Firebug extension (any Firefox version) are known + * to support "%c" CSS customizations. + * + * TODO: add a `localStorage` variable to explicitly enable/disable colors + */ + +// eslint-disable-next-line complexity +function useColors() { + // NB: In an Electron preload script, document will be defined but not fully + // initialized. Since we know we're in Chrome, we'll just detect this case + // explicitly + if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) { + return true; + } + + // Internet Explorer and Edge do not support colors. + if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { + return false; + } + + // Is webkit? http://stackoverflow.com/a/16459606/376773 + // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 + return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || + // Is firebug? http://stackoverflow.com/a/398120/376773 + (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || + // Is firefox >= v31? + // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || + // Double check webkit in userAgent just in case we are in a worker + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); +} + +/** + * Colorize log arguments if enabled. + * + * @api public + */ + +function formatArgs(args) { + args[0] = (this.useColors ? '%c' : '') + + this.namespace + + (this.useColors ? ' %c' : ' ') + + args[0] + + (this.useColors ? '%c ' : ' ') + + '+' + module.exports.humanize(this.diff); + + if (!this.useColors) { + return; + } + + const c = 'color: ' + this.color; + args.splice(1, 0, c, 'color: inherit'); + + // The final "%c" is somewhat tricky, because there could be other + // arguments passed either before or after the %c, so we need to + // figure out the correct index to insert the CSS into + let index = 0; + let lastC = 0; + args[0].replace(/%[a-zA-Z%]/g, match => { + if (match === '%%') { + return; + } + index++; + if (match === '%c') { + // We only are interested in the *last* %c + // (the user may have provided their own) + lastC = index; + } + }); + + args.splice(lastC, 0, c); +} + +/** + * Invokes `console.log()` when available. + * No-op when `console.log` is not a "function". + * + * @api public + */ +function log(...args) { + // This hackery is required for IE8/9, where + // the `console.log` function doesn't have 'apply' + return typeof console === 'object' && + console.log && + console.log(...args); +} + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ +function save(namespaces) { + try { + if (namespaces) { + exports.storage.setItem('debug', namespaces); + } else { + exports.storage.removeItem('debug'); + } + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ +function load() { + let r; + try { + r = exports.storage.getItem('debug'); + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } + + // If debug isn't set in LS, and we're in Electron, try to load $DEBUG + if (!r && typeof process !== 'undefined' && 'env' in process) { + r = process.env.DEBUG; + } + + return r; +} + +/** + * Localstorage attempts to return the localstorage. + * + * This is necessary because safari throws + * when a user disables cookies/localstorage + * and you attempt to access it. + * + * @return {LocalStorage} + * @api private + */ + +function localstorage() { + try { + // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context + // The Browser also has localStorage in the global context. + return localStorage; + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } +} + +module.exports = require('./common')(exports); + +const {formatters} = module.exports; + +/** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ + +formatters.j = function (v) { + try { + return JSON.stringify(v); + } catch (error) { + return '[UnexpectedJSONParseError]: ' + error.message; + } +}; diff --git a/node_modules/strong-globalize/node_modules/debug/src/common.js b/node_modules/strong-globalize/node_modules/debug/src/common.js new file mode 100644 index 00000000..2f82b8dc --- /dev/null +++ b/node_modules/strong-globalize/node_modules/debug/src/common.js @@ -0,0 +1,266 @@ + +/** + * This is the common logic for both the Node.js and web browser + * implementations of `debug()`. + */ + +function setup(env) { + createDebug.debug = createDebug; + createDebug.default = createDebug; + createDebug.coerce = coerce; + createDebug.disable = disable; + createDebug.enable = enable; + createDebug.enabled = enabled; + createDebug.humanize = require('ms'); + + Object.keys(env).forEach(key => { + createDebug[key] = env[key]; + }); + + /** + * Active `debug` instances. + */ + createDebug.instances = []; + + /** + * The currently active debug mode names, and names to skip. + */ + + createDebug.names = []; + createDebug.skips = []; + + /** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". + */ + createDebug.formatters = {}; + + /** + * Selects a color for a debug namespace + * @param {String} namespace The namespace string for the for the debug instance to be colored + * @return {Number|String} An ANSI color code for the given namespace + * @api private + */ + function selectColor(namespace) { + let hash = 0; + + for (let i = 0; i < namespace.length; i++) { + hash = ((hash << 5) - hash) + namespace.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + + return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; + } + createDebug.selectColor = selectColor; + + /** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @return {Function} + * @api public + */ + function createDebug(namespace) { + let prevTime; + + function debug(...args) { + // Disabled? + if (!debug.enabled) { + return; + } + + const self = debug; + + // Set `diff` timestamp + const curr = Number(new Date()); + const ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; + + args[0] = createDebug.coerce(args[0]); + + if (typeof args[0] !== 'string') { + // Anything else let's inspect with %O + args.unshift('%O'); + } + + // Apply any `formatters` transformations + let index = 0; + args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => { + // If we encounter an escaped % then don't increase the array index + if (match === '%%') { + return match; + } + index++; + const formatter = createDebug.formatters[format]; + if (typeof formatter === 'function') { + const val = args[index]; + match = formatter.call(self, val); + + // Now we need to remove `args[index]` since it's inlined in the `format` + args.splice(index, 1); + index--; + } + return match; + }); + + // Apply env-specific formatting (colors, etc.) + createDebug.formatArgs.call(self, args); + + const logFn = self.log || createDebug.log; + logFn.apply(self, args); + } + + debug.namespace = namespace; + debug.enabled = createDebug.enabled(namespace); + debug.useColors = createDebug.useColors(); + debug.color = selectColor(namespace); + debug.destroy = destroy; + debug.extend = extend; + // Debug.formatArgs = formatArgs; + // debug.rawLog = rawLog; + + // env-specific initialization logic for debug instances + if (typeof createDebug.init === 'function') { + createDebug.init(debug); + } + + createDebug.instances.push(debug); + + return debug; + } + + function destroy() { + const index = createDebug.instances.indexOf(this); + if (index !== -1) { + createDebug.instances.splice(index, 1); + return true; + } + return false; + } + + function extend(namespace, delimiter) { + const newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); + newDebug.log = this.log; + return newDebug; + } + + /** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + function enable(namespaces) { + createDebug.save(namespaces); + + createDebug.names = []; + createDebug.skips = []; + + let i; + const split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); + const len = split.length; + + for (i = 0; i < len; i++) { + if (!split[i]) { + // ignore empty strings + continue; + } + + namespaces = split[i].replace(/\*/g, '.*?'); + + if (namespaces[0] === '-') { + createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); + } else { + createDebug.names.push(new RegExp('^' + namespaces + '$')); + } + } + + for (i = 0; i < createDebug.instances.length; i++) { + const instance = createDebug.instances[i]; + instance.enabled = createDebug.enabled(instance.namespace); + } + } + + /** + * Disable debug output. + * + * @return {String} namespaces + * @api public + */ + function disable() { + const namespaces = [ + ...createDebug.names.map(toNamespace), + ...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace) + ].join(','); + createDebug.enable(''); + return namespaces; + } + + /** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + function enabled(name) { + if (name[name.length - 1] === '*') { + return true; + } + + let i; + let len; + + for (i = 0, len = createDebug.skips.length; i < len; i++) { + if (createDebug.skips[i].test(name)) { + return false; + } + } + + for (i = 0, len = createDebug.names.length; i < len; i++) { + if (createDebug.names[i].test(name)) { + return true; + } + } + + return false; + } + + /** + * Convert regexp to namespace + * + * @param {RegExp} regxep + * @return {String} namespace + * @api private + */ + function toNamespace(regexp) { + return regexp.toString() + .substring(2, regexp.toString().length - 2) + .replace(/\.\*\?$/, '*'); + } + + /** + * Coerce `val`. + * + * @param {Mixed} val + * @return {Mixed} + * @api private + */ + function coerce(val) { + if (val instanceof Error) { + return val.stack || val.message; + } + return val; + } + + createDebug.enable(createDebug.load()); + + return createDebug; +} + +module.exports = setup; diff --git a/node_modules/strong-globalize/node_modules/debug/src/index.js b/node_modules/strong-globalize/node_modules/debug/src/index.js new file mode 100644 index 00000000..bf4c57f2 --- /dev/null +++ b/node_modules/strong-globalize/node_modules/debug/src/index.js @@ -0,0 +1,10 @@ +/** + * Detect Electron renderer / nwjs process, which is node, but we should + * treat as a browser. + */ + +if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) { + module.exports = require('./browser.js'); +} else { + module.exports = require('./node.js'); +} diff --git a/node_modules/strong-globalize/node_modules/debug/src/node.js b/node_modules/strong-globalize/node_modules/debug/src/node.js new file mode 100644 index 00000000..5e1f1541 --- /dev/null +++ b/node_modules/strong-globalize/node_modules/debug/src/node.js @@ -0,0 +1,257 @@ +/** + * Module dependencies. + */ + +const tty = require('tty'); +const util = require('util'); + +/** + * This is the Node.js implementation of `debug()`. + */ + +exports.init = init; +exports.log = log; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; + +/** + * Colors. + */ + +exports.colors = [6, 2, 3, 4, 5, 1]; + +try { + // Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json) + // eslint-disable-next-line import/no-extraneous-dependencies + const supportsColor = require('supports-color'); + + if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) { + exports.colors = [ + 20, + 21, + 26, + 27, + 32, + 33, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 56, + 57, + 62, + 63, + 68, + 69, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 92, + 93, + 98, + 99, + 112, + 113, + 128, + 129, + 134, + 135, + 148, + 149, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 178, + 179, + 184, + 185, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 214, + 215, + 220, + 221 + ]; + } +} catch (error) { + // Swallow - we only care if `supports-color` is available; it doesn't have to be. +} + +/** + * Build up the default `inspectOpts` object from the environment variables. + * + * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js + */ + +exports.inspectOpts = Object.keys(process.env).filter(key => { + return /^debug_/i.test(key); +}).reduce((obj, key) => { + // Camel-case + const prop = key + .substring(6) + .toLowerCase() + .replace(/_([a-z])/g, (_, k) => { + return k.toUpperCase(); + }); + + // Coerce string value into JS value + let val = process.env[key]; + if (/^(yes|on|true|enabled)$/i.test(val)) { + val = true; + } else if (/^(no|off|false|disabled)$/i.test(val)) { + val = false; + } else if (val === 'null') { + val = null; + } else { + val = Number(val); + } + + obj[prop] = val; + return obj; +}, {}); + +/** + * Is stdout a TTY? Colored output is enabled when `true`. + */ + +function useColors() { + return 'colors' in exports.inspectOpts ? + Boolean(exports.inspectOpts.colors) : + tty.isatty(process.stderr.fd); +} + +/** + * Adds ANSI color escape codes if enabled. + * + * @api public + */ + +function formatArgs(args) { + const {namespace: name, useColors} = this; + + if (useColors) { + const c = this.color; + const colorCode = '\u001B[3' + (c < 8 ? c : '8;5;' + c); + const prefix = ` ${colorCode};1m${name} \u001B[0m`; + + args[0] = prefix + args[0].split('\n').join('\n' + prefix); + args.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\u001B[0m'); + } else { + args[0] = getDate() + name + ' ' + args[0]; + } +} + +function getDate() { + if (exports.inspectOpts.hideDate) { + return ''; + } + return new Date().toISOString() + ' '; +} + +/** + * Invokes `util.format()` with the specified arguments and writes to stderr. + */ + +function log(...args) { + return process.stderr.write(util.format(...args) + '\n'); +} + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ +function save(namespaces) { + if (namespaces) { + process.env.DEBUG = namespaces; + } else { + // If you set a process.env field to null or undefined, it gets cast to the + // string 'null' or 'undefined'. Just delete instead. + delete process.env.DEBUG; + } +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + +function load() { + return process.env.DEBUG; +} + +/** + * Init logic for `debug` instances. + * + * Create a new `inspectOpts` object in case `useColors` is set + * differently for a particular `debug` instance. + */ + +function init(debug) { + debug.inspectOpts = {}; + + const keys = Object.keys(exports.inspectOpts); + for (let i = 0; i < keys.length; i++) { + debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; + } +} + +module.exports = require('./common')(exports); + +const {formatters} = module.exports; + +/** + * Map %o to `util.inspect()`, all on a single line. + */ + +formatters.o = function (v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts) + .replace(/\s*\n\s*/g, ' '); +}; + +/** + * Map %O to `util.inspect()`, allowing multiple lines if needed. + */ + +formatters.O = function (v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts); +}; diff --git a/node_modules/strong-globalize/node_modules/ms/index.js b/node_modules/strong-globalize/node_modules/ms/index.js new file mode 100644 index 00000000..c4498bcc --- /dev/null +++ b/node_modules/strong-globalize/node_modules/ms/index.js @@ -0,0 +1,162 @@ +/** + * Helpers. + */ + +var s = 1000; +var m = s * 60; +var h = m * 60; +var d = h * 24; +var w = d * 7; +var y = d * 365.25; + +/** + * Parse or format the given `val`. + * + * Options: + * + * - `long` verbose formatting [false] + * + * @param {String|Number} val + * @param {Object} [options] + * @throws {Error} throw an error if val is not a non-empty string or a number + * @return {String|Number} + * @api public + */ + +module.exports = function(val, options) { + options = options || {}; + var type = typeof val; + if (type === 'string' && val.length > 0) { + return parse(val); + } else if (type === 'number' && isFinite(val)) { + return options.long ? fmtLong(val) : fmtShort(val); + } + throw new Error( + 'val is not a non-empty string or a valid number. val=' + + JSON.stringify(val) + ); +}; + +/** + * Parse the given `str` and return milliseconds. + * + * @param {String} str + * @return {Number} + * @api private + */ + +function parse(str) { + str = String(str); + if (str.length > 100) { + return; + } + var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( + str + ); + if (!match) { + return; + } + var n = parseFloat(match[1]); + var type = (match[2] || 'ms').toLowerCase(); + switch (type) { + case 'years': + case 'year': + case 'yrs': + case 'yr': + case 'y': + return n * y; + case 'weeks': + case 'week': + case 'w': + return n * w; + case 'days': + case 'day': + case 'd': + return n * d; + case 'hours': + case 'hour': + case 'hrs': + case 'hr': + case 'h': + return n * h; + case 'minutes': + case 'minute': + case 'mins': + case 'min': + case 'm': + return n * m; + case 'seconds': + case 'second': + case 'secs': + case 'sec': + case 's': + return n * s; + case 'milliseconds': + case 'millisecond': + case 'msecs': + case 'msec': + case 'ms': + return n; + default: + return undefined; + } +} + +/** + * Short format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtShort(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d) { + return Math.round(ms / d) + 'd'; + } + if (msAbs >= h) { + return Math.round(ms / h) + 'h'; + } + if (msAbs >= m) { + return Math.round(ms / m) + 'm'; + } + if (msAbs >= s) { + return Math.round(ms / s) + 's'; + } + return ms + 'ms'; +} + +/** + * Long format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtLong(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d) { + return plural(ms, msAbs, d, 'day'); + } + if (msAbs >= h) { + return plural(ms, msAbs, h, 'hour'); + } + if (msAbs >= m) { + return plural(ms, msAbs, m, 'minute'); + } + if (msAbs >= s) { + return plural(ms, msAbs, s, 'second'); + } + return ms + ' ms'; +} + +/** + * Pluralization helper. + */ + +function plural(ms, msAbs, n, name) { + var isPlural = msAbs >= n * 1.5; + return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); +} diff --git a/node_modules/strong-globalize/node_modules/ms/license.md b/node_modules/strong-globalize/node_modules/ms/license.md new file mode 100644 index 00000000..69b61253 --- /dev/null +++ b/node_modules/strong-globalize/node_modules/ms/license.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Zeit, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/strong-globalize/node_modules/ms/package.json b/node_modules/strong-globalize/node_modules/ms/package.json new file mode 100644 index 00000000..30950fdc --- /dev/null +++ b/node_modules/strong-globalize/node_modules/ms/package.json @@ -0,0 +1,69 @@ +{ + "_from": "ms@^2.1.1", + "_id": "ms@2.1.2", + "_inBundle": false, + "_integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "_location": "/strong-globalize/ms", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "ms@^2.1.1", + "name": "ms", + "escapedName": "ms", + "rawSpec": "^2.1.1", + "saveSpec": null, + "fetchSpec": "^2.1.1" + }, + "_requiredBy": [ + "/strong-globalize/debug" + ], + "_resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "_shasum": "d09d1f357b443f493382a8eb3ccd183872ae6009", + "_spec": "ms@^2.1.1", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/strong-globalize/node_modules/debug", + "bugs": { + "url": "https://github.com/zeit/ms/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Tiny millisecond conversion utility", + "devDependencies": { + "eslint": "4.12.1", + "expect.js": "0.3.1", + "husky": "0.14.3", + "lint-staged": "5.0.0", + "mocha": "4.0.1" + }, + "eslintConfig": { + "extends": "eslint:recommended", + "env": { + "node": true, + "es6": true + } + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/zeit/ms#readme", + "license": "MIT", + "lint-staged": { + "*.js": [ + "npm run lint", + "prettier --single-quote --write", + "git add" + ] + }, + "main": "./index", + "name": "ms", + "repository": { + "type": "git", + "url": "git+https://github.com/zeit/ms.git" + }, + "scripts": { + "lint": "eslint lib/* bin/*", + "precommit": "lint-staged", + "test": "mocha tests.js" + }, + "version": "2.1.2" +} diff --git a/node_modules/strong-globalize/node_modules/ms/readme.md b/node_modules/strong-globalize/node_modules/ms/readme.md new file mode 100644 index 00000000..9a1996b1 --- /dev/null +++ b/node_modules/strong-globalize/node_modules/ms/readme.md @@ -0,0 +1,60 @@ +# ms + +[![Build Status](https://travis-ci.org/zeit/ms.svg?branch=master)](https://travis-ci.org/zeit/ms) +[![Join the community on Spectrum](https://withspectrum.github.io/badge/badge.svg)](https://spectrum.chat/zeit) + +Use this package to easily convert various time formats to milliseconds. + +## Examples + +```js +ms('2 days') // 172800000 +ms('1d') // 86400000 +ms('10h') // 36000000 +ms('2.5 hrs') // 9000000 +ms('2h') // 7200000 +ms('1m') // 60000 +ms('5s') // 5000 +ms('1y') // 31557600000 +ms('100') // 100 +ms('-3 days') // -259200000 +ms('-1h') // -3600000 +ms('-200') // -200 +``` + +### Convert from Milliseconds + +```js +ms(60000) // "1m" +ms(2 * 60000) // "2m" +ms(-3 * 60000) // "-3m" +ms(ms('10 hours')) // "10h" +``` + +### Time Format Written-Out + +```js +ms(60000, { long: true }) // "1 minute" +ms(2 * 60000, { long: true }) // "2 minutes" +ms(-3 * 60000, { long: true }) // "-3 minutes" +ms(ms('10 hours'), { long: true }) // "10 hours" +``` + +## Features + +- Works both in [Node.js](https://nodejs.org) and in the browser +- If a number is supplied to `ms`, a string with a unit is returned +- If a string that contains the number is supplied, it returns it as a number (e.g.: it returns `100` for `'100'`) +- If you pass a string with a number and a valid unit, the number of equivalent milliseconds is returned + +## Related Packages + +- [ms.macro](https://github.com/knpwrs/ms.macro) - Run `ms` as a macro at build-time. + +## Caught a Bug? + +1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device +2. Link the package to the global module directory: `npm link` +3. Within the module you want to test your local development instance of ms, just link it to the dependencies: `npm link ms`. Instead of the default one from npm, Node.js will now use your clone of ms! + +As always, you can run the tests using: `npm test` diff --git a/node_modules/strong-globalize/package.json b/node_modules/strong-globalize/package.json new file mode 100644 index 00000000..084d683a --- /dev/null +++ b/node_modules/strong-globalize/package.json @@ -0,0 +1,89 @@ +{ + "_from": "strong-globalize@^4.1.3", + "_id": "strong-globalize@4.1.3", + "_inBundle": false, + "_integrity": "sha512-SJegV7w5D4AodEspZJtJ7rls3fmi+Zc0PdyJCqBsg4RN9B8TC80/uAI2fikC+s1Jp9FLvr2vDX8f0Fqc62M4OA==", + "_location": "/strong-globalize", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "strong-globalize@^4.1.3", + "name": "strong-globalize", + "escapedName": "strong-globalize", + "rawSpec": "^4.1.3", + "saveSpec": null, + "fetchSpec": "^4.1.3" + }, + "_requiredBy": [ + "/strong-soap" + ], + "_resolved": "https://registry.npmjs.org/strong-globalize/-/strong-globalize-4.1.3.tgz", + "_shasum": "7ee33da3b22cb867217a194bbb6d42d997fed2cd", + "_spec": "strong-globalize@^4.1.3", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/strong-soap", + "author": { + "name": "IBM Corp." + }, + "browser": "browser.js", + "bugs": { + "url": "https://github.com/strongloop/strong-globalize/issues" + }, + "bundleDependencies": false, + "dependencies": { + "accept-language": "^3.0.18", + "debug": "^4.1.1", + "globalize": "^1.4.2", + "lodash": "^4.17.4", + "md5": "^2.2.1", + "mkdirp": "^0.5.1", + "os-locale": "^3.1.0", + "yamljs": "^0.3.0" + }, + "deprecated": false, + "description": "StrongLoop Globalize - API", + "devDependencies": { + "@types/debug": "^4.1.2", + "@types/globalize": "0.0.34", + "@types/lodash": "^4.14.108", + "@types/md5": "^2.1.32", + "@types/mkdirp": "^0.5.2", + "@types/node": "^10.1.1", + "@types/yamljs": "^0.2.30", + "async": "^2.6.0", + "coveralls": "^3.0.3", + "intercept-stdout": "^0.1.2", + "mktmpdir": "^0.1.1", + "prettier": "^1.16.4", + "rimraf": "^2.6.3", + "shelljs": "^0.8.3", + "tap": "^12.6.0", + "typescript": "^3.3.4000" + }, + "engines": { + "node": ">=6" + }, + "gitHead": "5a78b914a35686ddb46d3ced1cb5ed0f68c81263", + "homepage": "https://github.com/strongloop/strong-globalize#readme", + "keywords": [ + "StrongLoop", + "globalize", + "cldr" + ], + "license": "Artistic-2.0", + "main": "index.js", + "name": "strong-globalize", + "repository": { + "type": "git", + "url": "git://github.com/strongloop/strong-globalize.git" + }, + "scripts": { + "build": "npm run clean && tsc -p tsconfig.json --outdir lib", + "clean": "rimraf lib", + "prepublishOnly": "npm run build", + "pretest": "npm run build", + "test": "tap --bail --timeout=200 test/test-*.*" + }, + "types": "lib/index.d.ts", + "version": "4.1.3" +} diff --git a/node_modules/strong-globalize/src/browser.ts b/node_modules/strong-globalize/src/browser.ts new file mode 100644 index 00000000..1fde6faf --- /dev/null +++ b/node_modules/strong-globalize/src/browser.ts @@ -0,0 +1,134 @@ +// Copyright IBM Corp. 2015,2016. All Rights Reserved. +// Node module: strong-globalize +// This file is licensed under the Artistic License 2.0. +// License text available at https://opensource.org/licenses/Artistic-2.0 + +// tslint:disable:no-any + +import * as util from 'util'; +import {AnyObject} from './config'; + +function noop() {} + +export = StrongGlobalize; + +class StrongGlobalize { + static SetRootDir = noop; + static SetDefaultLanguage = noop; + static SetPersistentLogging = noop; + + setLanguage = noop; + + getLanguage() { + return 'en'; + } + + c(value: any, currencySymbol: string, options: AnyObject) { + return currencySymbol + ' ' + value.toString(); + } + formatCurrency = this.c; + + d = function(value: Date, options: AnyObject) { + return value.toString(); + }; + formatDate = this.d; + + n = function(value: number, options: AnyObject) { + return value.toString(); + }; + formatNumber = this.n; + + m = function(path: string, variables: any) { + return util.format.apply(null, [path].concat(variables)); + }; + formatMessage = this.m; + t = this.m; + + Error(...args: any[]) { + return Error.apply(null, args); + } + + f(...args: any[]) { + return util.format.apply(null, args); + } + + format = this.f; + + ewrite(...args: any[]) { + return console.error(args); + } + owrite(...args: any[]) { + return console.log(args); + } + write = this.owrite; + + rfc5424(type: string, args: any[], fn: (...args: any[]) => void) { + // Convert args from function args object to a regular array + args = Array.prototype.slice.call(args); + if (typeof args[0] === 'string') { + // The first argument may contain formatting instructions like %s + // which must be preserved. + args[0] = type + ': ' + args[0]; + } else { + args = [type, ': '].concat(args); + } + return fn.apply(console, args); + } + + // RFC 5424 Syslog Message Severities + emergency(...args: any[]) { + return this.rfc5424('emergency', args, console.error); + } + alert(...args: any[]) { + return this.rfc5424('alert', args, console.error); + } + critical(...args: any[]) { + return this.rfc5424('critical', args, console.error); + } + error(...args: any[]) { + return this.rfc5424('error', args, console.error); + } + warning(...args: any[]) { + return this.rfc5424('warning', args, console.warn); + } + notice(...args: any[]) { + return this.rfc5424('notice', args, console.log); + } + informational(...args: any[]) { + return this.rfc5424('informational', args, console.log); + } + debug(...args: any[]) { + return this.rfc5424('debug', args, console.log); + } + + // Node.js console + warn(...args: any[]) { + return this.rfc5424('warn', args, console.warn); + } + info(...args: any[]) { + return this.rfc5424('info', args, console.log); + } + log(...args: any[]) { + return this.rfc5424('log', args, console.log); + } + + // Misc Logging Levels + help(...args: any[]) { + return this.rfc5424('help', args, console.log); + } + data(...args: any[]) { + return this.rfc5424('data', args, console.log); + } + prompt(...args: any[]) { + return this.rfc5424('prompt', args, console.log); + } + verbose(...args: any[]) { + return this.rfc5424('verbose', args, console.log); + } + input(...args: any[]) { + return this.rfc5424('input', args, console.log); + } + silly(...args: any[]) { + return this.rfc5424('silly', args, console.log); + } +} diff --git a/node_modules/strong-globalize/src/config.ts b/node_modules/strong-globalize/src/config.ts new file mode 100644 index 00000000..1592c3cb --- /dev/null +++ b/node_modules/strong-globalize/src/config.ts @@ -0,0 +1,49 @@ +// Copyright IBM Corp. 2015,2018. All Rights Reserved. +// Node module: strong-globalize +// This file is licensed under the Artistic License 2.0. +// License text available at https://opensource.org/licenses/Artistic-2.0 + +// tslint:disable:no-any + +export type AnyObject = { + [name: string]: T; +}; + +export type ResourceTag = { + fileIdHash: string; + fileName: string; + lang: string; + tagType: string; +}; + +export interface GlobalizeConfig { + AUTO_MSG_LOADING?: string; + MASTER_ROOT_DIR?: string; + MSG_RES_LOADED?: ResourceTag[]; + APP_LANGS?: string[]; + loadMessages?(messages: AnyObject): void; + formatters?: Map; + locale?(lang?: string): void; + DEFAULT_LANG?: string; + bundles?: AnyObject; + DISABLE_CONSOLE?: boolean; + LOG_FN?: (level: string, message: any) => void; + load?(obj: AnyObject): void; + versionSG?: string; + versionG?: string; + getHash?(path: string): string; + PSEUDO_LOC_PREAMBLE?: string; + reset(): void; + initialized?: boolean; +} + +export const STRONGLOOP_GLB: GlobalizeConfig = { + reset() { + // tslint:disable:no-invalid-this + const keys = Object.keys(this).filter(k => k !== 'reset'); + keys.forEach(k => { + // Clean up all properties except `reset` + delete this[k]; + }); + }, +}; diff --git a/node_modules/strong-globalize/src/global.ts b/node_modules/strong-globalize/src/global.ts new file mode 100644 index 00000000..a45f608a --- /dev/null +++ b/node_modules/strong-globalize/src/global.ts @@ -0,0 +1,10 @@ +// Copyright IBM Corp. 2015,2018. All Rights Reserved. +// Node module: strong-globalize +// This file is licensed under the Artistic License 2.0. +// License text available at https://opensource.org/licenses/Artistic-2.0 + +declare namespace NodeJS { + export interface Process { + browser: boolean; + } +} diff --git a/node_modules/strong-globalize/src/globalize.ts b/node_modules/strong-globalize/src/globalize.ts new file mode 100755 index 00000000..10c0a60e --- /dev/null +++ b/node_modules/strong-globalize/src/globalize.ts @@ -0,0 +1,592 @@ +// Copyright IBM Corp. 2015,2016. All Rights Reserved. +// Node module: strong-globalize +// This file is licensed under the Artistic License 2.0. +// License text available at https://opensource.org/licenses/Artistic-2.0 + +//tslint:disable:no-any + +import * as assert from 'assert'; +import * as debugModule from 'debug'; +import * as fs from 'fs'; +import * as Globalize from 'globalize'; +import {parse} from 'yamljs'; +import {AnyObject, STRONGLOOP_GLB} from './config'; +import * as helper from './helper'; +const dbg = debugModule('strong-globalize'); +const osLocale = require('os-locale'); +const MapCache = require('lodash/_MapCache'); +const md5 = require('md5'); +const memoize = require('lodash/memoize'); +const pathUtil = require('path'); +const util = require('util'); + +export {setRootDir} from './helper'; + +export const c = formatCurrency; +export const d = formatDate; +export const n = formatNumber; +export const t = formatMessage; +export const m = formatMessage; + +export {STRONGLOOP_GLB} from './config'; + +/** + * StrongLoop Defaults + */ + +const SL_DEFAULT_DATETIME = {datetime: 'medium'}; +const SL_DEFAULT_NUMBER = {round: 'floor'}; +const SL_DEFAULT_CURRENCY = {style: 'name'}; + +const OS_LANG = osLanguage(); +let MY_APP_LANG: string | null | undefined = + process.env.STRONGLOOP_GLOBALIZE_APP_LANGUAGE; +MY_APP_LANG = helper.isSupportedLanguage(MY_APP_LANG!) ? MY_APP_LANG : null; + +function osLanguage() { + const locale = osLocale.sync(); + const lang = locale.substring(0, 2); + if (helper.isSupportedLanguage(lang)) return lang; + if (lang === 'zh') { + const region = locale.substring(3); + if (region === 'CN') return 'zh-Hans'; + if (region === 'TW') return 'zh-Hant'; + if (region === 'Hans') return 'zh-Hans'; + if (region === 'Hant') return 'zh-Hant'; + } +} + +/** + * setDefaultLanguage + * + * @param {string} (optional, default: `'en'`) Language ID. + * It tries to use OS language, then falls back to 'en' + */ +export function setDefaultLanguage(lang?: string) { + lang = helper.isSupportedLanguage(lang) ? lang : undefined; + lang = lang || MY_APP_LANG || OS_LANG || helper.ENGLISH; + loadGlobalize(lang); + if (lang !== helper.ENGLISH) { + loadGlobalize(helper.ENGLISH); + } + STRONGLOOP_GLB.locale!(lang); + STRONGLOOP_GLB.DEFAULT_LANG = lang; + return lang; +} + +/** + * setAppLanguages + * + * @param {string} (optional, default: `[...]`) []. + * Sets the supported languages for the application. + * These should be a subset of the languages within the intl + * directory. + * + * If no argument is passed, the function uses the contents of + * the intl directory to determine the application languages. + * + */ +export function setAppLanguages(langs?: string[]) { + langs = langs || readAppLanguagesSync() || []; + STRONGLOOP_GLB.APP_LANGS = langs; + return langs; +} + +function readAppLanguagesSync() { + try { + const langs = fs.readdirSync( + pathUtil.join(STRONGLOOP_GLB.MASTER_ROOT_DIR, 'intl') + ); + return langs; + } catch (ex) { + return null; + } +} + +/** + * Globalize.formatMessage wrapper returns a string. + * + * @param {string} path The message key + * @param {object} variables List of placeholder key and content value pair. + * @param {string} variables. The placeholder key. + * @param {string} variables. The content value. + * If the system locale is undefined, falls back to 'en' + */ +export function formatMessage( + path: string, + variables?: string[] | string, + lang?: string +) { + assert(path); + if (!STRONGLOOP_GLB.DEFAULT_LANG) setDefaultLanguage(); + let message = path; + if (helper.hashKeys(path)) { + if (!STRONGLOOP_GLB.getHash) { + STRONGLOOP_GLB.getHash = memoize(md5); + } + path = STRONGLOOP_GLB.getHash!(path); + } + lang = lang || STRONGLOOP_GLB.DEFAULT_LANG; + dbg('~~~ lang = %s %s %j %s', lang, path, variables, __filename); + const trailer = helper.getTrailerAfterDot(path); + if (trailer === 'json' || trailer === 'yml' || trailer === 'yaml') { + const fullPath = pathUtil.join(helper.getRootDir(), path); + return formatJson(fullPath, JSON.parse(variables as string), lang); + } + + function formatMsgInline(language: string) { + const g = STRONGLOOP_GLB.bundles![language]; + if (!STRONGLOOP_GLB.formatters) { + STRONGLOOP_GLB.formatters = new MapCache(); + } + const allFormatters = STRONGLOOP_GLB.formatters!; + let langFormatters; + if (allFormatters.has(language)) { + langFormatters = allFormatters.get(language); + } else { + langFormatters = new MapCache(); + allFormatters.set(language, langFormatters); + } + if (langFormatters.has(path)) + return langFormatters.get(path)(variables || {}); + const format = g.messageFormatter(path); + langFormatters.set(path, format); + return format(variables || {}); + } + try { + message = formatMsgInline(lang!); + } catch (e) { + if (lang === helper.ENGLISH) { + message = sanitizeMsg(message, variables); + dbg( + '*** %s not found for %s. Fall back to: "%s" *** %s', + path, + lang, + message, + e + ); + } else { + dbg( + '*** %s for %s not localized. Fall back to English. *** %s', + path, + lang, + e + ); + try { + message = formatMsgInline(helper.ENGLISH); + } catch (e) { + message = sanitizeMsg(message, variables); + dbg( + '*** %s not found for %s. Fall back to: "%s" *** %s', + path, + lang, + message, + e + ); + } + } + } + if (STRONGLOOP_GLB.PSEUDO_LOC_PREAMBLE) { + message = STRONGLOOP_GLB.PSEUDO_LOC_PREAMBLE + message; + } + return message; +} + +export function formatJson( + fullPath: string, + variables: string[], + lang?: string +) { + assert( + fullPath === pathUtil.resolve(helper.getRootDir(), fullPath), + '*** full path is required to format json/yaml file: ' + fullPath + ); + const fileType = helper.getTrailerAfterDot(fullPath); + let jsonData = null; + try { + const contentStr = fs.readFileSync(fullPath, 'utf8'); + if (fileType === 'json') jsonData = JSON.parse(contentStr); + if (fileType === 'yml' || fileType === 'yaml') jsonData = parse(contentStr); + } catch (_e) { + return '*** read failure: ' + fullPath; + } + const msgs = helper.scanJson(variables, jsonData) as string[]; + const transMsgs: string[] = []; + msgs.forEach(function(msg) { + const transMsg = formatMessage(msg, undefined, lang); + transMsgs.push(transMsg); + }); + helper.replaceJson(variables, jsonData, transMsgs); + return jsonData; +} + +function sanitizeMsg(message: string, variables?: string | string[]) { + message = message.replace(/}}/g, '').replace(/{{/g, ''); + if ( + typeof variables === 'string' || + (Array.isArray(variables) && variables.length > 0) + ) { + const sanitizedMsg = message.replace(/%[sdj]/g, '%s'); + message = util.format.apply(util, [sanitizedMsg].concat(variables)); + } + return message; +} + +export function packMessage( + args: any[], + fn: null | ((msg: any) => any), + withOriginalMsg: boolean, + lang?: string +) { + const path = args[0]; + const percentInKey = helper.percent(path); + const txtWithTwoOrMoreArgs = + helper.getTrailerAfterDot(path) === 'txt' && args.length > 2; + // If it comes from *.txt, there are no percent in the path, + // but there can be one or more %s in the message value. + const variables = percentInKey + ? helper.mapArgs(path, args) + : txtWithTwoOrMoreArgs + ? helper.repackArgs(args, 1) + : args[1]; + let message = formatMessage(path, variables, lang); + if (withOriginalMsg) + message = { + language: lang, + message: message, + orig: path, + vars: variables, + }; + if (fn) return fn(message); + return message; +} + +/* RFC 5424 Syslog Message Severities + * 0 Emergency: system is unusable + * 1 Alert: action must be taken immediately + * 2 Critical: critical conditions + * 3 Error: error conditions + * 4 Warning: warning conditions + * 5 Notice: normal but significant condition + * 6 Informational: informational messages + * 7 Debug: debug-level messages + */ + +export function rfc5424( + level: string, + args: any[], + print: (...args: any[]) => void, + lang?: string +) { + return packMessage( + args, + msg => { + logPersistent(level, msg); + if (consoleEnabled()) print(msg.message); + return msg; + }, + true, + lang + ); +} + +function myError(...args: any[]) { + const msg = packMessage(args, null, true); + logPersistent('error', msg); + return new Error(msg.message); +} + +module.exports.Error = myError; + +// RFC 5424 Syslog Message Severities +export function emergency(...args: any[]) { + return rfc5424('emergency', args, console.error); +} + +export function alert(...args: any[]) { + return rfc5424('alert', args, console.error); +} + +export function critical(...args: any[]) { + return rfc5424('critical', args, console.error); +} + +export function error(...args: any[]) { + return rfc5424('error', args, console.error); +} + +export function warning(...args: any[]) { + return rfc5424('warning', args, console.error); +} + +export function notice(...args: any[]) { + return rfc5424('notice', args, console.log); +} + +export function informational(...args: any[]) { + return rfc5424('informational', args, console.log); +} + +export function debug(...args: any[]) { + return rfc5424('debug', args, console.log); +} + +export function warn(...args: any[]) { + return rfc5424('warn', args, console.error); +} +export function info(...args: any[]) { + return rfc5424('info', args, console.log); +} +export function log(...args: any[]) { + return rfc5424('log', args, console.log); +} + +export function help(...args: any[]) { + return rfc5424('help', args, console.log); +} + +export function data(...args: any[]) { + return rfc5424('data', args, console.log); +} + +export function prompt(...args: any[]) { + return rfc5424('prompt', args, console.log); +} + +export function verbose(...args: any[]) { + return rfc5424('verbose', args, console.log); +} + +export function input(...args: any[]) { + return rfc5424('input', args, console.log); +} + +export function silly(...args: any[]) { + return rfc5424('silly', args, console.log); +} + +/** + * Globalize.formatNumber wrapper returns a string. + * + * @param {value} integer or float + * @param {object} The options (optional); if null, use the StrongLoop default. + * Strongly recommended to set NO options and let strong-globalize use + * the StrongLoop default for consistency across StrongLoop products. + * See https://www.npmjs.com/package/globalize#number-module + */ +export function formatNumber( + value: number, + options?: AnyObject, + lang?: string +) { + assert(value); + if (!STRONGLOOP_GLB.DEFAULT_LANG) setDefaultLanguage(lang); + lang = (lang || STRONGLOOP_GLB.DEFAULT_LANG)!; + options = options || SL_DEFAULT_NUMBER; + const G = STRONGLOOP_GLB.bundles![lang]; + let msg = null; + try { + msg = G.formatNumber(value, options); + } catch (e) { + msg = value.toString(); + dbg('*** formatNumber error: value:%s', msg); + } + return msg; +} + +/** + * Globalize.formatDate wrapper returns a string. + * + * @param {Date object} such as new Date() + * @param {object} The options (optional); if null, use the StrongLoop default. + * Strongly recommended to set NO options and let strong-globalize use + * the StrongLoop default for consistency across StrongLoop products. + * See https://www.npmjs.com/package/globalize#date-module + */ +export function formatDate(value: Date, options?: AnyObject, lang?: string) { + assert(value); + if (!STRONGLOOP_GLB.DEFAULT_LANG) setDefaultLanguage(lang); + lang = (lang || STRONGLOOP_GLB.DEFAULT_LANG)!; + options = options || SL_DEFAULT_DATETIME; + const G = STRONGLOOP_GLB.bundles![lang]; + let msg = null; + try { + msg = G.formatDate(value, options); + } catch (e) { + msg = value.toString(); + dbg('*** formatDate error: value:%s', msg); + } + return msg; +} + +/** + * Globalize.formatCurrency wrapper returns a string. + * + * @param {value} integer or float + * @param {string} three-letter currency symbol, ISO 4217 Currency Code + * @param {object} The options (optional); if null, use the StrongLoop default. + * Strongly recommended to set NO options and let strong-globalize use + * the StrongLoop default for consistency across StrongLoop products. + * See https://www.npmjs.com/package/globalize#curency-module + */ +export function formatCurrency( + value: any, + currencySymbol: string, + options?: AnyObject, + lang?: string +) { + assert(value && currencySymbol); + if (!STRONGLOOP_GLB.DEFAULT_LANG) setDefaultLanguage(lang); + lang = lang || STRONGLOOP_GLB.DEFAULT_LANG; + options = options || SL_DEFAULT_CURRENCY; + const G = STRONGLOOP_GLB.bundles![lang!]; + let msg = null; + try { + msg = G.formatCurrency(value, currencySymbol, options); + } catch (e) { + msg = currencySymbol.toString() + value.toString(); + dbg( + '*** formatCurrency error: value:%s, currencySymbol:%s', + value, + currencySymbol + ); + } + return msg; +} + +export function loadGlobalize(lang?: string, enumerateNodeModules?: boolean) { + assert(helper.isSupportedLanguage(lang), 'Not supported: ' + lang); + if (!STRONGLOOP_GLB.versionSG) { + const versionSG = helper.getPackageVersion(pathUtil.join(__dirname, '..')); + const versionG = helper.getPackageVersion( + pathUtil.join(__dirname, '..', 'node_modules', 'globalize') + ); + Object.assign(STRONGLOOP_GLB, { + versionSG: versionSG, + versionG: versionG, + bundles: {}, + formatters: new MapCache(), + getHash: memoize(md5), + load: Globalize.load, + locale: Globalize.locale, + loadMessages: Globalize.loadMessages, + DEFAULT_LANG: helper.ENGLISH, + APP_LANGS: readAppLanguagesSync(), + LOG_FN: null, + DISABLE_CONSOLE: false, + MASTER_ROOT_DIR: helper.getRootDir(), + MSG_RES_LOADED: [], + AUTO_MSG_LOADING: helper.AML_DEFAULT, + PSEUDO_LOC_PREAMBLE: + process.env.STRONG_GLOBALIZE_PSEUDO_LOC_PREAMBLE || '', + }); + loadCldr(helper.ENGLISH); + STRONGLOOP_GLB.bundles![helper.ENGLISH] = new Globalize(helper.ENGLISH); + STRONGLOOP_GLB.locale!(helper.ENGLISH); + helper.loadMsgFromFile( + helper.ENGLISH, + helper.getRootDir(), + enumerateNodeModules + ); + } + if (!(lang! in STRONGLOOP_GLB.bundles!)) { + loadCldr(lang!); + STRONGLOOP_GLB.bundles![lang!] = new Globalize(lang!); + STRONGLOOP_GLB.locale!(lang); + helper.loadMsgFromFile(lang!, helper.getRootDir(), enumerateNodeModules); + } + return STRONGLOOP_GLB.bundles![lang!]; +} + +function loadCldr(lang: string) { + assert( + STRONGLOOP_GLB && + (!STRONGLOOP_GLB.bundles || !STRONGLOOP_GLB.bundles[lang]), + 'CLDR already loaded for ' + lang + ); + const cldrDir = pathUtil.join(__dirname, '..', 'cldr'); + helper.enumerateFilesSync(cldrDir, null, ['json'], false, false, function( + content, + filePath + ) { + let cldr = null; + try { + cldr = JSON.parse(content); + } catch (e) { + throw new Error('*** CLDR read error on ' + process.platform); + } + const cldrMain: AnyObject = {main: {}}; + cldrMain.main[lang] = cldr.main[lang]; + STRONGLOOP_GLB.load!(cldrMain); + if (lang === helper.ENGLISH) { + const cldrSupplemental = {supplemental: cldr.supplemental}; + STRONGLOOP_GLB.load!(cldrSupplemental); + } + }); +} + +/** + * + * Persistent logging + * + */ + +// const syslogLevels = { // RFC5424 +// emerg: 0, +// alert: 1, +// crit: 2, +// error: 3, +// warning: 4, +// notice: 5, +// info: 6, +// debug: 7, +// }; + +// const npmLevels = { +// error: 0, +// warn: 1, +// info: 2, +// verbose: 3, +// debug: 4, +// silly: 5, +// }; + +export function consoleEnabled() { + if (!STRONGLOOP_GLB.DEFAULT_LANG) setDefaultLanguage(); + return !STRONGLOOP_GLB.DISABLE_CONSOLE; +} + +/** + * + */ +export function setPersistentLogging( + logFn: (level: string, message: {[name: string]: any}) => void, + disableConsole?: boolean +) { + assert(logFn); + assert(typeof logFn === 'function'); + if (!STRONGLOOP_GLB.DEFAULT_LANG) setDefaultLanguage(); + STRONGLOOP_GLB.DISABLE_CONSOLE = !!disableConsole; + try { + const message = + 'StrongGlobalize persistent logging started at ' + new Date(); + logFn('info', { + language: helper.ENGLISH, + message: message, + orig: message, + vars: [], + }); + STRONGLOOP_GLB.LOG_FN = logFn; + } catch (e) { + STRONGLOOP_GLB.LOG_FN = undefined; + } +} + +export function logPersistent(level: string = 'info', message: any) { + if (!STRONGLOOP_GLB.DEFAULT_LANG) setDefaultLanguage(); + if (!STRONGLOOP_GLB.LOG_FN) return; + level = level || 'info'; + if (typeof STRONGLOOP_GLB.LOG_FN === 'function') { + STRONGLOOP_GLB.LOG_FN(level, message); + } +} diff --git a/node_modules/strong-globalize/src/helper.ts b/node_modules/strong-globalize/src/helper.ts new file mode 100755 index 00000000..f3d29dc4 --- /dev/null +++ b/node_modules/strong-globalize/src/helper.ts @@ -0,0 +1,954 @@ +// Copyright IBM Corp. 2015,2016. All Rights Reserved. +// Node module: strong-globalize +// This file is licensed under the Artistic License 2.0. +// License text available at https://opensource.org/licenses/Artistic-2.0 + +import dbg = require('debug'); +const debug = dbg('strong-globalize'); + +import * as acceptLanguage from 'accept-language'; +import * as assert from 'assert'; +import * as fs from 'fs'; +import * as _ from 'lodash'; +import * as md5 from 'md5'; +import * as mkdirp from 'mkdirp'; +import * as path from 'path'; +import {AnyObject, ResourceTag, STRONGLOOP_GLB} from './config'; + +export const ENGLISH = 'en'; +export const PSEUDO_LANG = 'zz'; +export const PSEUDO_TAG = '♚♛♜♝♞♟'; +export const MSG_TAG = 'message'; +export const HELPTXT_TAG = 'helptxt'; +export const AML_ALL = 'all'; +export const AML_NONE = 'none'; +export const AML_DEFAULT = AML_NONE; +export const BIG_NUM = 999999999999; +export const MSG_GPB_UNAVAILABLE = + '*** Login to GPB failed or GPB.supportedTranslations error.'; + +const HASH_KEYS = false; +const KEY_HEADERS = ['msg']; + +export function hashKeys(p: string) { + let trailer = null; + return !( + headerIncluded(p, KEY_HEADERS) || + (trailer = getTrailerAfterDot(p)) === 'txt' || + trailer === 'json' || + trailer === 'yml' || + trailer === 'yaml' || + p.indexOf(PSEUDO_TAG) === 0 + ); +} + +// tslint:disable:no-any +/** + * Supported languages in CLDR notation + */ +let TARGET_LANGS: string[] | null = null; +let MY_ROOT = process.cwd(); +let INTL_DIR = path.join(MY_ROOT, 'intl'); + +/** + * @param {string} Override the root directory path + */ +export function setRootDir(rootPath: string) { + let validPath = true; + let rootStats: fs.Stats | undefined = undefined; + try { + rootStats = fs.statSync(rootPath); + } catch (e) { + validPath = false; + } + assert(validPath, '*** setRootDir: Root path invalid: ' + rootPath); + if (!rootStats!.isDirectory()) validPath = false; + assert( + validPath, + '*** setRootDir: Root path is not a directory: ' + rootPath.toString() + ); + let files: string[] | undefined = undefined; + try { + files = fs.readdirSync(rootPath); + } catch (e) { + validPath = false; + } + validPath = validPath && !!files; + if (validPath) { + let intlDirFound = false; + files!.forEach(function(item) { + if (intlDirFound) return; + if (item === 'intl') intlDirFound = true; + }); + validPath = intlDirFound; + } + assert( + validPath, + '*** setRootDir: Intl dir not found under: ' + rootPath.toString() + ); + MY_ROOT = rootPath; + INTL_DIR = path.join(MY_ROOT, 'intl'); +} + +export function getRootDir() { + return MY_ROOT; +} + +export function isRootPackage() { + return MY_ROOT === STRONGLOOP_GLB.MASTER_ROOT_DIR; +} + +export function initGlobForSltGlobalize(rootDir?: string) { + if (STRONGLOOP_GLB.MASTER_ROOT_DIR) return; + Object.assign(STRONGLOOP_GLB, { + MASTER_ROOT_DIR: rootDir || getRootDir(), + MSG_RES_LOADED: [], + }); +} + +export function isLoadMessages(rootDir: string) { + if (!STRONGLOOP_GLB.MASTER_ROOT_DIR) return false; + if (path.resolve(rootDir) === path.resolve(STRONGLOOP_GLB.MASTER_ROOT_DIR!)) + return true; + if (!STRONGLOOP_GLB.AUTO_MSG_LOADING) return false; + if (STRONGLOOP_GLB.AUTO_MSG_LOADING === AML_NONE) return false; + if (STRONGLOOP_GLB.AUTO_MSG_LOADING === AML_ALL) return true; + const packagesToLoad = STRONGLOOP_GLB.AUTO_MSG_LOADING; + const packageName = getPackageName(rootDir); + const load = packagesToLoad.indexOf(packageName) >= 0; + return load; +} + +export function validateAmlValue(aml: string | string[]) { + if (aml === AML_ALL || aml === AML_NONE) return aml; + if (Array.isArray(aml)) { + if (aml.length === 0) return false; + aml.forEach(function(v) { + if (typeof aml !== 'string') return false; + }); + return aml; + } + return false; +} + +export function msgFileIdHash(fileName: string, rootDir: string) { + assert(fileName); + rootDir = rootDir || getRootDir(); + const packageName = getPackageName(rootDir); + const packageVersion = getPackageVersion(rootDir); + const msgFileId = fileName + packageName + packageVersion; + return md5(msgFileId); +} + +export function registerResTag( + fileIdHash: string, + fileName: string, + lang: string, + tagType: string +) { + assert(STRONGLOOP_GLB); + assert(fileIdHash); + assert(fileName); + assert(lang); + assert(tagType); + if (resTagExists(fileIdHash, fileName, lang, tagType)) return false; + const resTag: ResourceTag = { + fileIdHash: fileIdHash, + fileName: fileName, + lang: lang, + tagType: tagType, + }; + STRONGLOOP_GLB.MSG_RES_LOADED!.push(resTag); + return true; +} + +export function resTagExists( + fileIdHash: string, + fileName: string, + lang: string, + tagType: string +) { + assert(STRONGLOOP_GLB); + assert(fileIdHash); + assert(fileName); + assert(lang); + assert(tagType); + const resTag = { + fileIdHash: fileIdHash, + lang: lang, + tagType: tagType, + }; + const exists = _.find(STRONGLOOP_GLB.MSG_RES_LOADED, resTag) !== undefined; + return exists; +} + +export function stripBom(str: string) { + return str.charCodeAt(0) === 0xfeff ? str.slice(1) : str; +} + +/** + * Enumerate all JS files in this application + * @param {Function} + * param.content is a UTF8 string of each JS source file. + */ +const showDotCount = 500; +const showCountCount = 10000; +let enumeratedFilesCount = 0; +let scannedFileNameHash: string[] | null = null; + +export function enumerateFilesSync( + rootDir: string, + blackList: string[] | null, + targetFileType: string | string[], + verbose: boolean, + checkNodeModules: boolean, + callback: (content: string, filePath: string) => void +) { + enumeratedFilesCount = 0; + scannedFileNameHash = []; + return enumerateFilesSyncPriv( + rootDir, + rootDir, + blackList, + targetFileType, + verbose, + checkNodeModules, + callback + ); +} + +export function alreadyScanned(fileName: string) { + const realFileName = process.browser ? fileName : fs.realpathSync(fileName); + const fileNameHash = md5(realFileName); + if (scannedFileNameHash!.indexOf(fileNameHash) >= 0) { + return true; + } else { + scannedFileNameHash!.push(fileNameHash); + return false; + } +} + +export function enumerateFilesSyncPriv( + currentPath: string, + rootDir: string, + blackList: string[] | null, + targetFileType: string | string[], + verbose: boolean, + checkNodeModules: boolean, + callback: (content: string, child: string) => void +) { + if (!currentPath) currentPath = MY_ROOT; + if (!rootDir) rootDir = MY_ROOT; + currentPath = path.resolve(currentPath); + if (alreadyScanned(currentPath)) return; + rootDir = path.resolve(rootDir); + blackList = Array.isArray(blackList) ? blackList : []; + if (!Array.isArray(targetFileType)) targetFileType = [targetFileType]; + let skipDir = false; + blackList.forEach(function(part) { + if (typeof part !== 'string') return; + if (currentPath.indexOf(part) >= 0) skipDir = true; + }); + if (skipDir) { + if (verbose) console.log('*** skipping directory:', currentPath); + return; + } + let files = null; + try { + files = fs.readdirSync(currentPath); + } catch (e) { + return; + } + files.forEach(function(item) { + if (item.indexOf('.') === 0) return; + const child = path.join(currentPath, item); + let stats = null; + try { + stats = fs.statSync(child); + } catch (e) { + return; + } + if (stats.isDirectory()) { + item = item.toLowerCase(); + if (item === 'test' || item === 'node_modules' || item === 'coverage') + return; + enumerateFilesSyncPriv( + child, + rootDir, + blackList, + targetFileType, + verbose, + checkNodeModules, + callback + ); + } else { + const fileType = getTrailerAfterDot(item); + if (!fileType || targetFileType.indexOf(fileType) < 0) return; + const content = stripBom(fs.readFileSync(child, 'utf8')); + if (verbose) console.log('~~~ examining file:', child); + if (checkNodeModules) { + enumeratedFilesCount++; + if (enumeratedFilesCount % showDotCount === 0) { + process.stdout.write('.'); + if (enumeratedFilesCount % showCountCount === 0) { + process.stdout.write(' ' + enumeratedFilesCount.toString() + '\n'); + } + } + } + callback(content, child); + } + }); + if (checkNodeModules) { + const depthRoot = directoryDepth(rootDir); + const moduleRootPaths = resolveDependencies(currentPath, rootDir); + if (moduleRootPaths) { + moduleRootPaths.forEach(function(modulePath) { + const depthModule = directoryDepth(modulePath); + if (depthModule - depthRoot > maxDirectoryDepth()) return; + enumerateFilesSyncPriv( + modulePath, + rootDir, + blackList, + targetFileType, + verbose, + checkNodeModules, + callback + ); + }); + } + } +} + +/** + * @param action A function to be invoked for each target language. + * If it returns `true`, the enumeration will be terminated. + */ +export function enumerateLanguageSync( + action: (lang: string) => boolean | undefined +): void { + if (!TARGET_LANGS) TARGET_LANGS = getSupportedLanguages(); + for (const lang of TARGET_LANGS!) { + const stopEnumeration = action(lang); + if (stopEnumeration) return; + } +} + +/** + * @param {string} lang Supported languages in CLDR notation + * @param {Function} + * If callback returns err; if err, stop enumeration. + */ +export function cloneEnglishTxtSyncDeep(rootDir?: string) { + if (!rootDir) rootDir = MY_ROOT; + const enDirPath = path.join(rootDir, 'intl', ENGLISH); + mkdirp.sync(enDirPath); + return enumerateMsgSyncPriv( + rootDir, + rootDir, + ENGLISH, + true, + true, + 0, + function() {} + ); +} + +export function enumerateMsgSync( + rootDir: string, + lang: string, + checkNodeModules: boolean, + callback: (jsonObj: AnyObject, filePath: string) => void +) { + return enumerateMsgSyncPriv( + rootDir, + rootDir, + lang, + checkNodeModules, + false, + 0, + callback + ); +} + +export function enumerateMsgSyncPriv( + currentPath: string, + rootDir: string, + lang: string, + checkNodeModules: boolean, + cloneEnglishTxt: boolean, + clonedTxtCount: number, + callback: (json: object, file: string) => void +) { + assert(currentPath); + assert(rootDir); + assert(typeof callback === 'function'); + let intlDirectory = path.join(currentPath, 'intl'); + const langDirPath = path.join(intlDirectory, lang); + let msgFiles = null; + try { + msgFiles = fs.readdirSync(langDirPath); + } catch (e) { + return clonedTxtCount; + } + const enDirPath = path.join(rootDir, 'intl', ENGLISH); + const clonedFileNames: string[] = []; + msgFiles.forEach(function(msgFile) { + if (msgFile.indexOf('.') === 0) return; + const stats = fs.lstatSync(path.join(langDirPath, msgFile)); + if (!stats.isFile()) return; + // commented out to avoid interference with intercept-stdout in test + // debug('enumerating...', path.join(langDirPath, msgFile)); + if (cloneEnglishTxt && lang === ENGLISH) { + if (currentPath === rootDir) return; + if (getTrailerAfterDot(msgFile) !== 'txt') return; + const sourceTxtFilePath = path.join(langDirPath, msgFile); + const filePathHash = msgFileIdHash(msgFile, currentPath); + if (resTagExists(filePathHash, msgFile, lang, HELPTXT_TAG)) return; + registerResTag(filePathHash, msgFile, lang, HELPTXT_TAG); + const targetTxtFilePath = path.join(enDirPath, msgFile); + clonedFileNames.push(msgFile); + fs.writeFileSync(targetTxtFilePath, fs.readFileSync(sourceTxtFilePath)); + clonedTxtCount++; + console.log('--- cloned', sourceTxtFilePath); + } else { + const jsonObj = readToJson(langDirPath, msgFile, lang); + if (jsonObj) { + callback(jsonObj, path.join(langDirPath, msgFile)); + } + } + }); + if (cloneEnglishTxt && lang === ENGLISH && clonedFileNames.length > 0) { + removeObsoleteFile(enDirPath, clonedFileNames); + } + if (checkNodeModules) { + const depthRoot = directoryDepth(rootDir); + const moduleRootPaths = resolveDependencies(currentPath, rootDir); + if (moduleRootPaths) { + moduleRootPaths.forEach(function(modulePath) { + const depthModule = directoryDepth(modulePath); + if (depthModule - depthRoot > maxDirectoryDepth()) return; + clonedTxtCount = enumerateMsgSyncPriv( + modulePath, + rootDir, + lang, + false, + cloneEnglishTxt, + clonedTxtCount, + callback + ); + }); + } + } + return clonedTxtCount; +} + +export function removeObsoleteFile(dir: string, fileNames: string[]) { + const files = fs.readdirSync(dir); + files.forEach(function(file) { + const matched = file.match(/^([0-9a-f]{32})_(.*\.txt)$/); + if (!matched) return; + if (fileNames.indexOf(matched[2]) >= 0) { + console.log('--- removed', path.join(dir, file)); + fs.unlinkSync(path.join(dir, file)); + } + }); +} + +export function directoryDepth(fullPath: string) { + assert(typeof fullPath === 'string'); + return _.compact(fullPath.split(path.sep)).length; +} + +export function maxDirectoryDepth() { + let depth = parseInt(process.env.STRONGLOOP_GLOBALIZE_MAX_DEPTH!, 10); + if (isNaN(depth)) depth = BIG_NUM; + depth = Math.max(1, depth); + return depth; +} + +export function requireResolve( + depName: string, + currentDir: string, + rootDir: string +) { + // simulates npm v3 dependency resolution + let depPath = null; + let stats = null; + try { + depPath = path.join(currentDir, 'node_modules', depName); + stats = fs.lstatSync(depPath); + } catch (e) { + stats = null; + try { + depPath = path.join(rootDir, 'node_modules', depName); + stats = fs.lstatSync(depPath); + } catch (e) { + return null; + } + } + if (!stats) return null; + return unsymbolLink(depPath); +} + +export function unsymbolLink(filePath: string): string | null { + if (!filePath) return null; + let stats = null; + try { + stats = fs.lstatSync(filePath); + } catch (e) { + return null; + } + if (!stats) return null; + if (stats.isSymbolicLink()) { + let realPath = null; + try { + realPath = process.browser ? filePath : fs.realpathSync(filePath); + } catch (e) { + return null; + } + return unsymbolLink(realPath); + } else { + return stats.isDirectory() ? filePath : null; + } +} + +export function resolveDependencies( + currentDir: string, + rootDir: string, + moduleRootPaths?: string[] +) { + moduleRootPaths = moduleRootPaths || []; + const packageJson = path.join(currentDir, 'package.json'); + let deps = null; + try { + deps = require(packageJson).dependencies; + } catch (e) { + return null; + } + if (deps === undefined || !deps) return null; + deps = Object.keys(deps); + if (deps.length === 0) return null; + deps.forEach(function(dep) { + const depPath = requireResolve(dep, currentDir, rootDir); + if (depPath && moduleRootPaths!.indexOf(depPath) < 0) { + moduleRootPaths!.push(depPath); + resolveDependencies(depPath, rootDir, moduleRootPaths); + } + }); + moduleRootPaths = _.uniq(_.compact(moduleRootPaths)); + return moduleRootPaths; +} + +/** + * Read a txt or json file and convert to JSON + */ +const acceptableTrailers = ['json', 'txt']; + +export function readToJson(langDirPath: string, msgFile: string, lang: string) { + const fileType = getTrailerAfterDot(msgFile); + if (!fileType || acceptableTrailers.indexOf(fileType) < 0) return null; + let jsonObj: any = null; + const sourceFilePath = path.join(langDirPath, msgFile); + if (fileType === 'json') { + jsonObj = JSON.parse(stripBom(fs.readFileSync(sourceFilePath, 'utf-8'))); + } else { + // txt + const origStr = stripBom(fs.readFileSync(sourceFilePath, 'utf8')); + jsonObj = {}; + const re = /^([0-9a-f]{32})_(.*)\.txt/; + const results = re.exec(msgFile); + + if (results && results.length === 3) { + // deep-extracted txt file ? + msgFile = results[2] + '.txt'; + } + + jsonObj[msgFile] = mapPercent(JSON.parse(JSON.stringify(origStr))); + } + if (fileType === 'json' && HASH_KEYS && lang === ENGLISH) { + const keys = Object.keys(jsonObj); + keys.forEach(function(key) { + const newKey = md5(key); + jsonObj[newKey] = jsonObj[key]; + delete jsonObj[key]; + }); + } + return jsonObj; +} + +export function normalizeKeyArrays(keyArrays?: string | string[]) { + // keep 0 as "0" + if (keyArrays == null) return []; + if (typeof keyArrays === 'string' && keyArrays.length === 0) return []; + if (!Array.isArray(keyArrays)) return [[keyArrays.toString()]]; + const retKeyArrays: string[][] = []; + keyArrays.forEach(function(keyArray) { + if (keyArray === null) return; + if (typeof keyArray === 'string' && keyArray.length === 0) return; + if (!Array.isArray(keyArray)) { + retKeyArrays.push([keyArray.toString()]); + return; + } + const retKeyArray: string[] = []; + keyArray.forEach(function(key) { + if (key === null) return; + if (typeof key === 'string' && key.length === 0) return; + assert( + typeof key === 'string' || typeof key === 'number', + 'type of key must be a string or a number.' + ); + retKeyArray.push(key.toString()); + }); + if (retKeyArray.length > 0) retKeyArrays.push(retKeyArray); + }); + return retKeyArrays; +} + +export function scanJson( + keys: string[], + data: AnyObject, + returnErrors?: boolean +) { + return scanJsonPriv(keys, data, null, returnErrors); +} + +export function replaceJson(keys: string[], data: AnyObject, newValues: any[]) { + return scanJsonPriv(keys, data, newValues, false); +} + +export function scanJsonPriv( + keys: string[], + data: AnyObject, + newValues: any[] | null, + returnErrors?: boolean +): string[] | AnyObject { + if (!data || typeof data !== 'object') return []; + if (newValues) assert(keys.length === newValues.length); + const keyArrays = normalizeKeyArrays(keys); + const ret: string[] = []; + keyArrays.forEach((k, kix) => { + let d = null; + let err = null; + let prevObj: {[name: string]: any} | null = null; + let prevKey: string | null = null; + try { + for (let ix = 0; ix < k.length; ix++) { + if (ix === 0) d = data; + if (typeof d === 'string') { + err = '*** unexpected string value ' + JSON.stringify(k); + if (returnErrors) ret.push(err); + else console.log(err); + return; + } + prevObj = d; + prevKey = k[ix]; + d = d![k[ix]]; + } + if (typeof d === 'string') { + if (newValues) prevObj![prevKey!] = newValues[kix]; + else ret.push(d); + } else { + err = '*** not a string value ' + JSON.stringify(k); + if (returnErrors) ret.push(err); + else console.log(err); + } + } catch (e) { + err = '*** ' + e.toString() + ' ' + JSON.stringify(k); + if (returnErrors) ret.push(err); + else console.log(err); + } + }); + return newValues ? data : ret; +} + +export function sortMsges(msgs: {[name: string]: any}) { + const keys = Object.keys(msgs); + const msgKeys = _.remove(keys, function(key) { + return KEY_HEADERS.some(function(header) { + return key.indexOf(header) === 0; + }); + }); + const sorted: {[name: string]: any} = {}; + keys.sort().forEach(function(key) { + sorted[key] = msgs[key]; + }); + msgKeys.sort().forEach(function(key) { + sorted[key] = msgs[key]; + }); + return sorted; +} + +/** + * Initialize intl directory structure for non-En languages + * intl/en must exist. + * it returns false if failed. + */ +export function initIntlDirs() { + let intlEnStats; + try { + intlEnStats = fs.statSync(path.join(INTL_DIR, ENGLISH)); + } catch (e) { + return false; + } + if (!intlEnStats.isDirectory()) return false; + if (!TARGET_LANGS) TARGET_LANGS = getSupportedLanguages(); + TARGET_LANGS.forEach(function(lang) { + mkdirp.sync(path.join(INTL_DIR, lang)); + }); + return true; +} + +/** + * @param {string} lang Supported languages in CLDR notation + * Returns true for 'en' and supported languages + * in CLDR notation. + */ +export function isSupportedLanguage(lang?: string) { + lang = lang || 'en'; + if (!TARGET_LANGS) TARGET_LANGS = getSupportedLanguages(); + + return TARGET_LANGS.indexOf(lang) >= 0 || getAppLanguages().indexOf(lang) > 0; +} + +/** + * Returns an array of locales supported by the local cldr data. + */ +export function getSupportedLanguages() { + const cldrDir = path.join(__dirname, '..', 'cldr'); + let langs: string[] = []; + enumerateFilesSync( + cldrDir, + null, + ['json'], + false, + false, + (content: string, filePath: string) => { + let cldr = null; + try { + cldr = JSON.parse(content); + } catch (e) { + throw new Error('*** CLDR read error on ' + process.platform); + } + const theseLangs = Object.keys(cldr.main || {}); + langs = _.concat(langs, theseLangs); + } + ); + return _.uniq(langs); +} + +export function getAppLanguages() { + if (STRONGLOOP_GLB && STRONGLOOP_GLB.APP_LANGS) { + return STRONGLOOP_GLB.APP_LANGS; + } + return []; +} + +/** + * Returns trailer of file name. + */ +export function getTrailerAfterDot(name: string) { + if (typeof name !== 'string') return null; + const parts = name.split('.'); + if (parts.length < 2) return null; + return parts[parts.length - 1].toLowerCase(); +} + +/** + * Returns package name defined in package.json. + */ +export function getPackageName(root?: string) { + return getPackageItem(root, 'name'); +} + +export function getPackageVersion(root?: string) { + return getPackageItem(root, 'version'); +} + +export function getPackageItem(root: string | undefined, itemName: string) { + root = root || MY_ROOT; + let item = null; + try { + item = require(path.join(root, 'package.json'))[itemName]; + } catch (e) {} + return item; +} + +/** + * @param {string} name to be checked + * @param {Array} headersAllowed a list of strings to check + * Returns directory path for the language. + */ +export function headerIncluded(name: string, headersAllowed: string[]) { + if (typeof name !== 'string') return false; + let matched = false; + if (Array.isArray(headersAllowed)) { + headersAllowed.forEach(function(header) { + if (matched) return; + matched = name.indexOf(header) === 0; + }); + } else if (typeof headersAllowed === 'string') { + matched = name.indexOf(headersAllowed) === 0; + } + return matched; +} + +/** + * @param {string} lang Supported languages in CLDR notation + * Returns directory path for the language. + */ +export function intlDir(lang: string) { + lang = lang || ENGLISH; + return path.join(INTL_DIR, lang); +} + +/** + * %s is included in the string + */ +export function percent(msg: string) { + return /\%[sdj\%]/.test(msg); +} + +/** + * %replace %s with {N} where N=0,1,2,... + */ +export function mapPercent(msg: string) { + let ix = 0; + const output = msg.replace(/\%[sdj\%]/g, match => { + if (match === '%%') return ''; + const str = '{' + ix.toString() + '}'; + ix++; + return str; + }); + return output; +} + +export function mapArgs(p: string, args: any[]) { + let ix = 1; + const output: string[] = []; + p.replace(/\%[sdj\%]/g, match => { + if (match === '%%') return ''; + let arg = args[ix++]; + if (arg === undefined) arg = 'undefined'; + if (arg === null) arg = 'null'; + output.push(match === '%j' ? JSON.stringify(arg) : arg.toString()); + return ''; + }); + return output; +} + +export function repackArgs( + args: any[] | {[name: number]: any}, + initIx: number +) { + const argsLength = Array.isArray(args) + ? args.length + : Object.keys(args).length; + if (initIx >= argsLength) return []; + const output = []; + for (let ix = initIx; ix < argsLength; ix++) { + output.push(args[ix]); + } + return output; +} + +/** + * Get the language (from the supported languages) that + * best matches the requested Accept-Language expression. + * + * @param req + * @param globalize + * @returns {*} + */ + +export function getLanguageFromRequest( + req: {headers: {[name: string]: string}}, + appLanguages: string[], + defaultLanguage: string +): string { + if (!req || !req.headers) { + return defaultLanguage; + } + + const reqLanguage = req.headers['accept-language']; + if (!reqLanguage) { + return defaultLanguage; + } + + acceptLanguage.languages(appLanguages); + const bestLanguage = acceptLanguage.get(reqLanguage); + return bestLanguage || defaultLanguage; +} + +export function myIntlDir() { + return INTL_DIR; +} + +/** + * Load messages for the language from a given root directory + * @param lang Language for messages + * @param rootDir Root directory + * @param enumerateNodeModules A flag to control if node_modules will be checked + */ +export function loadMsgFromFile( + lang: string, + rootDir: string, + enumerateNodeModules?: boolean +) { + assert(lang); + rootDir = rootDir || getRootDir(); + if (!isLoadMessages(rootDir)) return; + enumerateNodeModules = enumerateNodeModules || false; + const tagType = MSG_TAG; + enumerateMsgSync( + rootDir, + lang, + enumerateNodeModules, + (jsonObj: AnyObject, filePath: string) => { + // writeAllToMsg(lang, jsonObj); + let fileName = path.basename(filePath); + const re = /^([0-9a-f]{32})_(.*)\.txt/; + const results = re.exec(fileName); + let fileIdHash; + if (results && results.length === 3) { + // deep-extracted txt file ? + fileIdHash = results[1]; + fileName = results[2] + '.txt'; + } else { + fileIdHash = msgFileIdHash(fileName, rootDir); + fileName = fileName; + } + if (resTagExists(fileIdHash, fileName, lang, tagType)) { + debug('*** loadMsgFromFile(res tag exists): skipping:', lang, fileName); + return; + } + debug('*** loadMsgFromFile(new res tag): loading:', lang, fileName); + removeDoubleCurlyBraces(jsonObj); + const messages: AnyObject = {}; + messages[lang] = jsonObj; + STRONGLOOP_GLB.loadMessages!(messages); + registerResTag(fileIdHash, fileName, lang, tagType); + if (STRONGLOOP_GLB.formatters!.has(lang)) { + const formatters = STRONGLOOP_GLB.formatters!.get(lang); + for (const key in jsonObj) { + formatters.delete(key); + } + } + } + ); +} + +/** + * Remove `{{` and `}}` + */ +export function removeDoubleCurlyBraces(json: AnyObject) { + let count = 0; + Object.keys(json).forEach(key => { + count++; + if (typeof json[key] !== 'string') { + // The value for `zz` pseudo code is an array, let's skip + return; + } + json[key] = json[key].replace(/}}/g, '').replace(/{{/g, ''); + debug(count, key + ' : ' + json[key]); + }); +} diff --git a/node_modules/strong-globalize/src/index.ts b/node_modules/strong-globalize/src/index.ts new file mode 100644 index 00000000..49b2fbb7 --- /dev/null +++ b/node_modules/strong-globalize/src/index.ts @@ -0,0 +1,7 @@ +// Copyright IBM Corp. 2018. All Rights Reserved. +// Node module: strong-globalize +// This file is licensed under the Artistic License 2.0. +// License text available at https://opensource.org/licenses/Artistic-2.0 + +import {StrongGlobalize} from './strong-globalize'; +export = StrongGlobalize; diff --git a/node_modules/strong-globalize/src/strong-globalize.ts b/node_modules/strong-globalize/src/strong-globalize.ts new file mode 100644 index 00000000..b3f6acf5 --- /dev/null +++ b/node_modules/strong-globalize/src/strong-globalize.ts @@ -0,0 +1,371 @@ +// Copyright IBM Corp. 2015,2018. All Rights Reserved. +// Node module: strong-globalize +// This file is licensed under the Artistic License 2.0. +// License text available at https://opensource.org/licenses/Artistic-2.0 + +// Multi-instance strong-globalize +import * as globalize from './globalize'; +import * as helper from './helper'; +import * as path from 'path'; + +import {AnyObject, STRONGLOOP_GLB} from './config'; + +// tslint:disable:no-any + +/** + * FIXME: workaround for + * https://github.com/strongloop/strong-globalize/issues/127 + * + * Monkey-patching Cldr.prototype.get for `zz` + * See: + * https://github.com/rxaviers/cldrjs/blob/master/src/core/likely_subtags.js#L75 + */ +try { + const Cldr = require('cldrjs'); + const get = Cldr.prototype.get; + Cldr.prototype.get = function(paths?: string[]) { + if (Array.isArray(paths)) { + paths = paths.map(function(p) { + return p === 'zz' ? 'en' : p; + }); + } + // tslint:disable-next-line:no-invalid-this + return get.call(this, paths); + }; +} catch (e) { + // Ignore +} + +export class StrongGlobalize { + static readonly helper = helper; + static readonly globalize = globalize; + static readonly STRONGLOOP_GLB: AnyObject = STRONGLOOP_GLB; + + private _options: AnyObject; + + constructor(options?: AnyObject) { + if (typeof options === 'string') { + StrongGlobalize.SetRootDir(options); + options = undefined; + } + if (!STRONGLOOP_GLB.DEFAULT_LANG) { + globalize.setDefaultLanguage(); + globalize.setAppLanguages(); + } + + const defaults = { + language: STRONGLOOP_GLB.DEFAULT_LANG, + appLanguages: STRONGLOOP_GLB.APP_LANGS, + }; + + this._options = options ? Object.assign(defaults, options) : defaults; + } + + static SetPersistentLogging = globalize.setPersistentLogging; + static SetDefaultLanguage = globalize.setDefaultLanguage; + static SetAppLanguages = globalize.setAppLanguages; + + static SetRootDir(rootDir: string, options?: AnyObject) { + const defaults = { + autonomousMsgLoading: helper.AML_DEFAULT, + }; + options = options ? Object.assign(defaults, options) : defaults; + options.autonomousMsgLoading = helper.validateAmlValue( + options.autonomousMsgLoading + ); + if (!options.autonomousMsgLoading) { + options.autonomousMsgLoading = defaults.autonomousMsgLoading; + } + globalize.setRootDir(rootDir); + if (!STRONGLOOP_GLB.AUTO_MSG_LOADING) { + globalize.setDefaultLanguage(); + STRONGLOOP_GLB.AUTO_MSG_LOADING = options.autonomousMsgLoading as string; + } + if ( + path.resolve(rootDir) !== path.resolve(STRONGLOOP_GLB.MASTER_ROOT_DIR!) && + helper.isLoadMessages(rootDir) + ) { + const langs = Object.keys(STRONGLOOP_GLB.bundles!); + langs.forEach(function(lang) { + helper.loadMsgFromFile(lang, rootDir); + }); + } + } + + setLanguage(lang?: string) { + lang = helper.isSupportedLanguage(lang) + ? lang + : STRONGLOOP_GLB.DEFAULT_LANG; + this._options.language = lang; + } + + getLanguage() { + return this._options.language; + } + + c(value: any, currencySymbol: string, options?: AnyObject) { + globalize.loadGlobalize(this._options.language); + return globalize.formatCurrency( + value, + currencySymbol, + options, + this._options.language + ); + } + + formatCurrency(value: any, currencySymbol: string, options?: AnyObject) { + return this.c(value, currencySymbol, options); + } + + d(value: Date, options?: AnyObject) { + globalize.loadGlobalize(this._options.language); + return globalize.formatDate(value, options, this._options.language); + } + + formatDate(value: Date, options?: AnyObject) { + return this.d(value, options); + } + + n(value: number, options?: AnyObject) { + globalize.loadGlobalize(this._options.language); + return globalize.formatNumber(value, options, this._options.language); + } + + formatNumber(value: number, options?: AnyObject) { + return this.n(value, options); + } + + m(msgPath: string, variables: string | string[]) { + globalize.loadGlobalize(this._options.language); + return globalize.formatMessage(msgPath, variables, this._options.language); + } + + formatMessage(msgPath: string, variables: string | string[]) { + return this.m(msgPath, variables); + } + + t(msgPath: string, variables: string | string[]) { + return this.m(msgPath, variables); + } + + Error(...args: any[]) { + globalize.loadGlobalize(this._options.language); + const msg = globalize.packMessage(args, null, true, this._options.language); + globalize.logPersistent('error', msg); + return Error(msg.message); + } + + f(...args: any[]) { + globalize.loadGlobalize(this._options.language); + return globalize.packMessage(args, null, false, this._options.language); + } + + format(...args: any[]) { + return this.f(...args); + } + + ewrite(...args: any[]) { + globalize.loadGlobalize(this._options.language); + return globalize.packMessage( + args, + function(msg) { + globalize.logPersistent(msg, 'error'); + if (globalize.consoleEnabled()) process.stderr.write(msg.message); + return msg; + }, + true, + this._options.language + ); + } + + owrite(...args: any[]) { + globalize.loadGlobalize(this._options.language); + return globalize.packMessage( + args, + function(msg) { + globalize.logPersistent(msg, 'error'); + if (globalize.consoleEnabled()) process.stdout.write(msg.message); + }, + true, + this._options.language + ); + } + + write(...args: any[]) { + this.owrite(...args); + } + + // RFC 5424 Syslog Message Severities + emergency(...args: any[]) { + globalize.loadGlobalize(this._options.language); + return globalize.rfc5424( + 'emergency', + args, + console.error, + this._options.language + ); + } + alert(...args: any[]) { + globalize.loadGlobalize(this._options.language); + return globalize.rfc5424( + 'alert', + args, + console.error, + this._options.language + ); + } + critical(...args: any[]) { + globalize.loadGlobalize(this._options.language); + return globalize.rfc5424( + 'critical', + args, + console.error, + this._options.language + ); + } + error(...args: any[]) { + globalize.loadGlobalize(this._options.language); + return globalize.rfc5424( + 'error', + args, + console.error, + this._options.language + ); + } + warning(...args: any[]) { + globalize.loadGlobalize(this._options.language); + return globalize.rfc5424( + 'warning', + args, + console.error, + this._options.language + ); + } + notice(...args: any[]) { + globalize.loadGlobalize(this._options.language); + return globalize.rfc5424( + 'notice', + args, + console.log, + this._options.language + ); + } + informational(...args: any[]) { + globalize.loadGlobalize(this._options.language); + return globalize.rfc5424( + 'informational', + args, + console.log, + this._options.language + ); + } + debug(...args: any[]) { + globalize.loadGlobalize(this._options.language); + return globalize.rfc5424( + 'debug', + args, + console.log, + this._options.language + ); + } + + // Node.js console + warn(...args: any[]) { + globalize.loadGlobalize(this._options.language); + return globalize.rfc5424( + 'warn', + args, + console.error, + this._options.language + ); + } + info(...args: any[]) { + globalize.loadGlobalize(this._options.language); + return globalize.rfc5424('info', args, console.log, this._options.language); + } + log(...args: any[]) { + globalize.loadGlobalize(this._options.language); + return globalize.rfc5424('log', args, console.log, this._options.language); + } + + // Misc Logging Levels + help(...args: any[]) { + globalize.loadGlobalize(this._options.language); + return globalize.rfc5424('help', args, console.log, this._options.language); + } + data(...args: any[]) { + globalize.loadGlobalize(this._options.language); + return globalize.rfc5424('data', args, console.log, this._options.language); + } + prompt(...args: any[]) { + globalize.loadGlobalize(this._options.language); + return globalize.rfc5424( + 'prompt', + args, + console.log, + this._options.language + ); + } + verbose(...args: any[]) { + globalize.loadGlobalize(this._options.language); + return globalize.rfc5424( + 'verbose', + args, + console.log, + this._options.language + ); + } + input(...args: any[]) { + globalize.loadGlobalize(this._options.language); + return globalize.rfc5424( + 'input', + args, + console.log, + this._options.language + ); + } + silly(...args: any[]) { + globalize.loadGlobalize(this._options.language); + return globalize.rfc5424( + 'silly', + args, + console.log, + this._options.language + ); + } + + /** + * This function is useful for applications (e.g. express) + * that have an HTTP Request object with headers. + * + * You can pass the request object, and it will negotiate + * the best matching language to globalize the message. + * + * The matching algorithm is done against the languages + * supported by the application. (those included in the intl dir) + * + * @param req + * @returns {*} + */ + static readonly sgCache = new Map< + string, + StrongGlobalize + >(); /* eslint-env es6 */ + http(req: {headers: AnyObject}) { + const matchingLang = helper.getLanguageFromRequest( + req, + this._options.appLanguages, + this._options.language + ); + + let sg = StrongGlobalize.sgCache.get(matchingLang); + if (sg) { + return sg; + } + + sg = new StrongGlobalize(this._options); + sg.setLanguage(matchingLang); + StrongGlobalize.sgCache.set(matchingLang, sg); + return sg; + } +} diff --git a/node_modules/strong-globalize/tsconfig.json b/node_modules/strong-globalize/tsconfig.json new file mode 100644 index 00000000..8f3a4b30 --- /dev/null +++ b/node_modules/strong-globalize/tsconfig.json @@ -0,0 +1,5 @@ +{ + "$schema": "http://json.schemastore.org/tsconfig", + "extends": "../../tsconfig.json", + "include": ["src"] +} diff --git a/node_modules/strong-globalize/tslint.json b/node_modules/strong-globalize/tslint.json new file mode 100644 index 00000000..df43539d --- /dev/null +++ b/node_modules/strong-globalize/tslint.json @@ -0,0 +1,28 @@ +{ + "$schema": "http://json.schemastore.org/tslint", + // See https://palantir.github.io/tslint/rules/ + "rules": { + // These rules find errors related to TypeScript features. + "adjacent-overload-signatures": true, + "prefer-for-of": true, + "unified-signatures": true, + "no-any": true, + + // These rules catch common errors in JS programming or otherwise + // confusing constructs that are prone to producing bugs. + + "label-position": true, + "no-arg": true, + "no-construct": true, + "no-duplicate-variable": true, + + "no-invalid-this": true, + "no-misused-new": true, + "no-shadowed-variable": true, + "no-string-throw": true, + "no-unused-expression": true, + "no-unused-variable": true, + "no-var-keyword": true, + "triple-equals": [true, "allow-null-check", "allow-undefined-check"] + } +} diff --git a/node_modules/strong-soap/.babelrc b/node_modules/strong-soap/.babelrc new file mode 100644 index 00000000..f1466a3e --- /dev/null +++ b/node_modules/strong-soap/.babelrc @@ -0,0 +1,12 @@ +{ + "presets": [ + [ + "env", + { + "targets": { + "node": "6.0.0" + } + } + ] + ] +} diff --git a/node_modules/strong-soap/.editorconfig b/node_modules/strong-soap/.editorconfig new file mode 100644 index 00000000..f67814db --- /dev/null +++ b/node_modules/strong-soap/.editorconfig @@ -0,0 +1,23 @@ +# EditorConfig for the node-soap library - head over to editorconfig.org to see if you editor supports this file. + +# this is the topmost .editorconfig file +root = true + +[*] +end_of_line = lf +insert_final_newline = true + +[*.xml] +insert_final_newline = false + +[*.js] +indent_style = space +indent_size = 2 + +[*.json] +indent_style = space +indent_size = 2 + +[{package.json,.travis.yml}] +indent_style = space +indent_size = 2 diff --git a/node_modules/strong-soap/.github/ISSUE_TEMPLATE.md b/node_modules/strong-soap/.github/ISSUE_TEMPLATE.md new file mode 100644 index 00000000..795176c4 --- /dev/null +++ b/node_modules/strong-soap/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,37 @@ + + +# Description/Steps to reproduce + + + +# Link to reproduction sandbox + + + +# Expected result + + + +# Additional information + + diff --git a/node_modules/strong-soap/.github/PULL_REQUEST_TEMPLATE.md b/node_modules/strong-soap/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000..368cb4cf --- /dev/null +++ b/node_modules/strong-soap/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,25 @@ +### Description + + +#### Related issues + + + +- connect to + +### Checklist + + + +- [ ] New tests added or existing tests modified to cover all changes +- [ ] Code conforms with the [style + guide](http://loopback.io/doc/en/contrib/style-guide.html) diff --git a/node_modules/strong-soap/.jshintrc b/node_modules/strong-soap/.jshintrc new file mode 100644 index 00000000..e7371228 --- /dev/null +++ b/node_modules/strong-soap/.jshintrc @@ -0,0 +1,29 @@ +{ + "bitwise":false, + "boss":true, + "expr":true, + "camelcase":false, + "curly":false, + "eqeqeq":true, + "freeze":true, + "immed":true, + "indent":2, + "latedef":"nofunc", + "laxbreak":true, + "laxcomma":true, + "newcap":true, + "noarg":true, + "node":true, + "strict": true, + "trailing":true, + "undef":true, + "predef": [ + "describe", // Used by mocha + "it", // Used by mocha + "xit", // Used by mocha + "before", // Used by mocha + "beforeEach", // Used by mocha + "after", // Used by mocha + "afterEach" // Used by mocha + ] +} diff --git a/node_modules/strong-soap/.nyc_output/459253b3-16b5-4785-9874-a6f80fa4214c.json b/node_modules/strong-soap/.nyc_output/459253b3-16b5-4785-9874-a6f80fa4214c.json new file mode 100644 index 00000000..75af0f55 --- /dev/null +++ b/node_modules/strong-soap/.nyc_output/459253b3-16b5-4785-9874-a6f80fa4214c.json @@ -0,0 +1 @@ +{"/Users/rfeng/Projects/loopback3/strong-soap/index.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/index.js","statementMap":{"0":{"start":{"line":8,"column":11},"end":{"line":8,"column":19}},"1":{"start":{"line":9,"column":18},"end":{"line":9,"column":39}},"2":{"start":{"line":10,"column":12},"end":{"line":10,"column":45}},"3":{"start":{"line":11,"column":0},"end":{"line":13,"column":1}},"4":{"start":{"line":12,"column":2},"end":{"line":12,"column":18}},"5":{"start":{"line":15,"column":22},"end":{"line":15,"column":54}},"6":{"start":{"line":17,"column":0},"end":{"line":22,"column":2}},"7":{"start":{"line":24,"column":0},"end":{"line":26,"column":1}},"8":{"start":{"line":25,"column":2},"end":{"line":25,"column":41}}},"fnMap":{},"branchMap":{"0":{"loc":{"start":{"line":11,"column":0},"end":{"line":13,"column":1}},"type":"if","locations":[{"start":{"line":11,"column":0},"end":{"line":13,"column":1}},{"start":{"line":11,"column":0},"end":{"line":13,"column":1}}],"line":11}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":8},"f":{},"b":{"0":[1,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"101f4c197e8e51ddb41a933d8b1f980ad5cb2ece","contentHash":"dbc60fe0aa2076e8f8d9b0a2d222220c5e85d702b2a44591757e96397226ca83"},"/Users/rfeng/Projects/loopback3/strong-soap/src/security/index.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/security/index.js","statementMap":{"0":{"start":{"line":9,"column":0},"end":{"line":13,"column":1}},"1":{"start":{"line":10,"column":2},"end":{"line":10,"column":47}},"2":{"start":{"line":12,"column":2},"end":{"line":12,"column":20}},"3":{"start":{"line":15,"column":0},"end":{"line":24,"column":2}}},"fnMap":{},"branchMap":{},"s":{"0":1,"1":1,"2":0,"3":1},"f":{},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"aa957db5726fafc409eddec1250dc2a71b3fd162","contentHash":"0584bb2ea209bb881eb71ca143e77b483554aecb808b74bdd2914bc9f314c309"},"/Users/rfeng/Projects/loopback3/strong-soap/src/security/WSSecurityCert.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/security/WSSecurityCert.js","statementMap":{"0":{"start":{"line":8,"column":14},"end":{"line":8,"column":33}},"1":{"start":{"line":9,"column":16},"end":{"line":9,"column":47}},"2":{"start":{"line":10,"column":11},"end":{"line":10,"column":26}},"3":{"start":{"line":11,"column":15},"end":{"line":11,"column":36}},"4":{"start":{"line":12,"column":17},"end":{"line":12,"column":48}},"5":{"start":{"line":14,"column":13},"end":{"line":14,"column":30}},"6":{"start":{"line":17,"column":2},"end":{"line":17,"column":52}},"7":{"start":{"line":21,"column":2},"end":{"line":26,"column":49}},"8":{"start":{"line":30,"column":2},"end":{"line":30,"column":39}},"9":{"start":{"line":34,"column":2},"end":{"line":34,"column":55}},"10":{"start":{"line":38,"column":2},"end":{"line":38,"column":38}},"11":{"start":{"line":43,"column":4},"end":{"line":43,"column":12}},"12":{"start":{"line":45,"column":4},"end":{"line":48,"column":37}},"13":{"start":{"line":50,"column":4},"end":{"line":50,"column":34}},"14":{"start":{"line":51,"column":4},"end":{"line":51,"column":70}},"15":{"start":{"line":52,"column":4},"end":{"line":52,"column":41}},"16":{"start":{"line":54,"column":21},"end":{"line":55,"column":48}},"17":{"start":{"line":57,"column":4},"end":{"line":57,"column":72}},"18":{"start":{"line":58,"column":4},"end":{"line":58,"column":77}},"19":{"start":{"line":60,"column":16},"end":{"line":60,"column":20}},"20":{"start":{"line":61,"column":4},"end":{"line":61,"column":37}},"21":{"start":{"line":62,"column":4},"end":{"line":69,"column":6}},"22":{"start":{"line":63,"column":19},"end":{"line":63,"column":31}},"23":{"start":{"line":65,"column":8},"end":{"line":67,"column":35}},"24":{"start":{"line":68,"column":6},"end":{"line":68,"column":17}},"25":{"start":{"line":73,"column":4},"end":{"line":82,"column":5}},"26":{"start":{"line":75,"column":6},"end":{"line":75,"column":89}},"27":{"start":{"line":76,"column":6},"end":{"line":76,"column":68}},"28":{"start":{"line":79,"column":6},"end":{"line":79,"column":80}},"29":{"start":{"line":79,"column":20},"end":{"line":79,"column":80}},"30":{"start":{"line":80,"column":6},"end":{"line":80,"column":48}},"31":{"start":{"line":81,"column":6},"end":{"line":81,"column":50}},"32":{"start":{"line":86,"column":4},"end":{"line":86,"column":37}},"33":{"start":{"line":87,"column":4},"end":{"line":87,"column":37}},"34":{"start":{"line":89,"column":22},"end":{"line":89,"column":39}},"35":{"start":{"line":90,"column":16},"end":{"line":90,"column":28}},"36":{"start":{"line":91,"column":16},"end":{"line":91,"column":28}},"37":{"start":{"line":92,"column":11},"end":{"line":92,"column":22}},"38":{"start":{"line":94,"column":21},"end":{"line":99,"column":44}},"39":{"start":{"line":100,"column":4},"end":{"line":106,"column":25}},"40":{"start":{"line":107,"column":20},"end":{"line":108,"column":32}},"41":{"start":{"line":109,"column":4},"end":{"line":109,"column":46}},"42":{"start":{"line":110,"column":4},"end":{"line":110,"column":46}},"43":{"start":{"line":112,"column":21},"end":{"line":112,"column":60}},"44":{"start":{"line":114,"column":4},"end":{"line":114,"column":45}},"45":{"start":{"line":115,"column":14},"end":{"line":115,"column":43}},"46":{"start":{"line":117,"column":4},"end":{"line":117,"column":41}},"47":{"start":{"line":121,"column":0},"end":{"line":121,"column":32}}},"fnMap":{"0":{"name":"addMinutes","decl":{"start":{"line":16,"column":9},"end":{"line":16,"column":19}},"loc":{"start":{"line":16,"column":35},"end":{"line":18,"column":1}},"line":16},"1":{"name":"dateStringForSOAP","decl":{"start":{"line":20,"column":9},"end":{"line":20,"column":26}},"loc":{"start":{"line":20,"column":33},"end":{"line":27,"column":1}},"line":20},"2":{"name":"generateCreated","decl":{"start":{"line":29,"column":9},"end":{"line":29,"column":24}},"loc":{"start":{"line":29,"column":27},"end":{"line":31,"column":1}},"line":29},"3":{"name":"generateExpires","decl":{"start":{"line":33,"column":9},"end":{"line":33,"column":24}},"loc":{"start":{"line":33,"column":27},"end":{"line":35,"column":1}},"line":33},"4":{"name":"generateId","decl":{"start":{"line":37,"column":9},"end":{"line":37,"column":19}},"loc":{"start":{"line":37,"column":22},"end":{"line":39,"column":1}},"line":37},"5":{"name":"(anonymous_5)","decl":{"start":{"line":42,"column":2},"end":{"line":42,"column":3}},"loc":{"start":{"line":42,"column":50},"end":{"line":70,"column":3}},"line":42},"6":{"name":"(anonymous_6)","decl":{"start":{"line":62,"column":45},"end":{"line":62,"column":46}},"loc":{"start":{"line":62,"column":59},"end":{"line":69,"column":5}},"line":62},"7":{"name":"(anonymous_7)","decl":{"start":{"line":72,"column":2},"end":{"line":72,"column":3}},"loc":{"start":{"line":72,"column":38},"end":{"line":83,"column":3}},"line":72},"8":{"name":"(anonymous_8)","decl":{"start":{"line":85,"column":2},"end":{"line":85,"column":3}},"loc":{"start":{"line":85,"column":42},"end":{"line":118,"column":3}},"line":85}},"branchMap":{"0":{"loc":{"start":{"line":73,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":73,"column":4},"end":{"line":82,"column":5}},{"start":{"line":73,"column":4},"end":{"line":82,"column":5}}],"line":73},"1":{"loc":{"start":{"line":79,"column":6},"end":{"line":79,"column":80}},"type":"if","locations":[{"start":{"line":79,"column":6},"end":{"line":79,"column":80}},{"start":{"line":79,"column":6},"end":{"line":79,"column":80}}],"line":79}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":2,"8":1,"9":1,"10":2,"11":3,"12":3,"13":3,"14":3,"15":2,"16":2,"17":2,"18":2,"19":2,"20":2,"21":2,"22":1,"23":1,"24":1,"25":3,"26":0,"27":0,"28":3,"29":0,"30":3,"31":2,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1},"f":{"0":1,"1":2,"2":1,"3":1,"4":2,"5":3,"6":1,"7":3,"8":1},"b":{"0":[0,3],"1":[0,3]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"d7ff6bb16b9b17a4e1bd093550c5a7fbcdfe59c3","contentHash":"8053635950faa90462f4b80782aafe955fa24ac383745c1afd30efd486ab68f4"},"/Users/rfeng/Projects/loopback3/strong-soap/src/security/security.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/security/security.js","statementMap":{"0":{"start":{"line":8,"column":8},"end":{"line":8,"column":25}},"1":{"start":{"line":15,"column":4},"end":{"line":15,"column":33}},"2":{"start":{"line":19,"column":4},"end":{"line":19,"column":35}},"3":{"start":{"line":32,"column":0},"end":{"line":32,"column":26}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":2},"end":{"line":14,"column":3}},"loc":{"start":{"line":14,"column":23},"end":{"line":16,"column":3}},"line":14},"1":{"name":"(anonymous_1)","decl":{"start":{"line":18,"column":2},"end":{"line":18,"column":3}},"loc":{"start":{"line":18,"column":22},"end":{"line":20,"column":3}},"line":18},"2":{"name":"(anonymous_2)","decl":{"start":{"line":22,"column":2},"end":{"line":22,"column":3}},"loc":{"start":{"line":22,"column":26},"end":{"line":23,"column":3}},"line":22},"3":{"name":"(anonymous_3)","decl":{"start":{"line":25,"column":2},"end":{"line":25,"column":3}},"loc":{"start":{"line":25,"column":32},"end":{"line":26,"column":3}},"line":25},"4":{"name":"(anonymous_4)","decl":{"start":{"line":28,"column":2},"end":{"line":28,"column":3}},"loc":{"start":{"line":28,"column":59},"end":{"line":29,"column":3}},"line":28}},"branchMap":{"0":{"loc":{"start":{"line":15,"column":19},"end":{"line":15,"column":32}},"type":"binary-expr","locations":[{"start":{"line":15,"column":19},"end":{"line":15,"column":26}},{"start":{"line":15,"column":30},"end":{"line":15,"column":32}}],"line":15}},"s":{"0":1,"1":29,"2":8,"3":1},"f":{"0":29,"1":8,"2":5,"3":0,"4":5},"b":{"0":[29,15]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"11113094843093f62161f531785cb05b64526249","contentHash":"22c93dacd146a0897e1f500e597a00812c3bdc4472999bb399ece0f1f134d9f6"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xmlHandler.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xmlHandler.js","statementMap":{"0":{"start":{"line":8,"column":17},"end":{"line":8,"column":38}},"1":{"start":{"line":9,"column":10},"end":{"line":9,"column":24}},"2":{"start":{"line":10,"column":13},"end":{"line":10,"column":30}},"3":{"start":{"line":11,"column":13},"end":{"line":11,"column":30}},"4":{"start":{"line":12,"column":14},"end":{"line":12,"column":32}},"5":{"start":{"line":13,"column":12},"end":{"line":13,"column":54}},"6":{"start":{"line":14,"column":17},"end":{"line":14,"column":44}},"7":{"start":{"line":15,"column":24},"end":{"line":15,"column":52}},"8":{"start":{"line":16,"column":26},"end":{"line":16,"column":56}},"9":{"start":{"line":17,"column":21},"end":{"line":17,"column":46}},"10":{"start":{"line":18,"column":12},"end":{"line":18,"column":30}},"11":{"start":{"line":19,"column":13},"end":{"line":19,"column":32}},"12":{"start":{"line":20,"column":23},"end":{"line":20,"column":45}},"13":{"start":{"line":25,"column":4},"end":{"line":25,"column":33}},"14":{"start":{"line":26,"column":4},"end":{"line":26,"column":33}},"15":{"start":{"line":27,"column":4},"end":{"line":27,"column":62}},"16":{"start":{"line":28,"column":4},"end":{"line":28,"column":56}},"17":{"start":{"line":29,"column":4},"end":{"line":29,"column":77}},"18":{"start":{"line":30,"column":4},"end":{"line":30,"column":68}},"19":{"start":{"line":34,"column":4},"end":{"line":37,"column":5}},"20":{"start":{"line":35,"column":6},"end":{"line":36,"column":63}},"21":{"start":{"line":38,"column":4},"end":{"line":40,"column":5}},"22":{"start":{"line":39,"column":6},"end":{"line":39,"column":41}},"23":{"start":{"line":43,"column":34},"end":{"line":43,"column":39}},"24":{"start":{"line":44,"column":4},"end":{"line":57,"column":5}},"25":{"start":{"line":45,"column":6},"end":{"line":45,"column":45}},"26":{"start":{"line":46,"column":6},"end":{"line":46,"column":35}},"27":{"start":{"line":47,"column":6},"end":{"line":55,"column":7}},"28":{"start":{"line":48,"column":8},"end":{"line":48,"column":34}},"29":{"start":{"line":49,"column":13},"end":{"line":55,"column":7}},"30":{"start":{"line":50,"column":22},"end":{"line":51,"column":33}},"31":{"start":{"line":52,"column":21},"end":{"line":52,"column":71}},"32":{"start":{"line":53,"column":23},"end":{"line":53,"column":58}},"33":{"start":{"line":54,"column":8},"end":{"line":54,"column":38}},"34":{"start":{"line":56,"column":6},"end":{"line":56,"column":18}},"35":{"start":{"line":59,"column":4},"end":{"line":211,"column":5}},"36":{"start":{"line":60,"column":6},"end":{"line":60,"column":35}},"37":{"start":{"line":61,"column":21},"end":{"line":61,"column":40}},"38":{"start":{"line":62,"column":18},"end":{"line":62,"column":22}},"39":{"start":{"line":63,"column":6},"end":{"line":70,"column":7}},"40":{"start":{"line":64,"column":8},"end":{"line":69,"column":9}},"41":{"start":{"line":65,"column":10},"end":{"line":67,"column":11}},"42":{"start":{"line":65,"column":23},"end":{"line":65,"column":24}},"43":{"start":{"line":65,"column":30},"end":{"line":65,"column":40}},"44":{"start":{"line":66,"column":12},"end":{"line":66,"column":71}},"45":{"start":{"line":68,"column":10},"end":{"line":68,"column":22}},"46":{"start":{"line":71,"column":6},"end":{"line":80,"column":7}},"47":{"start":{"line":73,"column":8},"end":{"line":75,"column":9}},"48":{"start":{"line":74,"column":10},"end":{"line":74,"column":50}},"49":{"start":{"line":77,"column":8},"end":{"line":79,"column":9}},"50":{"start":{"line":78,"column":10},"end":{"line":78,"column":43}},"51":{"start":{"line":84,"column":6},"end":{"line":107,"column":7}},"52":{"start":{"line":85,"column":8},"end":{"line":85,"column":27}},"53":{"start":{"line":86,"column":8},"end":{"line":86,"column":32}},"54":{"start":{"line":87,"column":8},"end":{"line":87,"column":39}},"55":{"start":{"line":88,"column":13},"end":{"line":107,"column":7}},"56":{"start":{"line":89,"column":8},"end":{"line":89,"column":32}},"57":{"start":{"line":90,"column":8},"end":{"line":90,"column":39}},"58":{"start":{"line":92,"column":22},"end":{"line":92,"column":72}},"59":{"start":{"line":93,"column":28},"end":{"line":93,"column":33}},"60":{"start":{"line":95,"column":8},"end":{"line":99,"column":9}},"61":{"start":{"line":96,"column":10},"end":{"line":96,"column":31}},"62":{"start":{"line":97,"column":10},"end":{"line":98,"column":59}},"63":{"start":{"line":101,"column":21},"end":{"line":101,"column":71}},"64":{"start":{"line":102,"column":8},"end":{"line":102,"column":58}},"65":{"start":{"line":104,"column":8},"end":{"line":106,"column":9}},"66":{"start":{"line":105,"column":10},"end":{"line":105,"column":55}},"67":{"start":{"line":110,"column":6},"end":{"line":137,"column":7}},"68":{"start":{"line":111,"column":8},"end":{"line":111,"column":44}},"69":{"start":{"line":112,"column":8},"end":{"line":112,"column":42}},"70":{"start":{"line":113,"column":8},"end":{"line":113,"column":36}},"71":{"start":{"line":114,"column":8},"end":{"line":114,"column":27}},"72":{"start":{"line":115,"column":12},"end":{"line":137,"column":7}},"73":{"start":{"line":117,"column":8},"end":{"line":117,"column":39}},"74":{"start":{"line":118,"column":8},"end":{"line":118,"column":44}},"75":{"start":{"line":119,"column":8},"end":{"line":119,"column":47}},"76":{"start":{"line":120,"column":8},"end":{"line":120,"column":25}},"77":{"start":{"line":123,"column":8},"end":{"line":134,"column":9}},"78":{"start":{"line":124,"column":25},"end":{"line":124,"column":60}},"79":{"start":{"line":125,"column":10},"end":{"line":133,"column":11}},"80":{"start":{"line":126,"column":25},"end":{"line":126,"column":65}},"81":{"start":{"line":127,"column":12},"end":{"line":132,"column":13}},"82":{"start":{"line":128,"column":34},"end":{"line":128,"column":50}},"83":{"start":{"line":129,"column":14},"end":{"line":131,"column":15}},"84":{"start":{"line":130,"column":16},"end":{"line":130,"column":47}},"85":{"start":{"line":135,"column":8},"end":{"line":135,"column":47}},"86":{"start":{"line":136,"column":8},"end":{"line":136,"column":88}},"87":{"start":{"line":139,"column":6},"end":{"line":143,"column":7}},"88":{"start":{"line":140,"column":8},"end":{"line":142,"column":9}},"89":{"start":{"line":141,"column":10},"end":{"line":141,"column":59}},"90":{"start":{"line":145,"column":6},"end":{"line":153,"column":7}},"91":{"start":{"line":146,"column":8},"end":{"line":152,"column":9}},"92":{"start":{"line":148,"column":10},"end":{"line":148,"column":77}},"93":{"start":{"line":149,"column":10},"end":{"line":151,"column":11}},"94":{"start":{"line":150,"column":12},"end":{"line":150,"column":47}},"95":{"start":{"line":155,"column":6},"end":{"line":189,"column":7}},"96":{"start":{"line":156,"column":8},"end":{"line":162,"column":9}},"97":{"start":{"line":158,"column":10},"end":{"line":161,"column":11}},"98":{"start":{"line":160,"column":12},"end":{"line":160,"column":75}},"99":{"start":{"line":163,"column":8},"end":{"line":165,"column":9}},"100":{"start":{"line":164,"column":10},"end":{"line":164,"column":33}},"101":{"start":{"line":166,"column":8},"end":{"line":166,"column":20}},"102":{"start":{"line":167,"column":13},"end":{"line":189,"column":7}},"103":{"start":{"line":169,"column":20},"end":{"line":169,"column":51}},"104":{"start":{"line":170,"column":8},"end":{"line":188,"column":9}},"105":{"start":{"line":171,"column":10},"end":{"line":187,"column":11}},"106":{"start":{"line":172,"column":24},"end":{"line":172,"column":32}},"107":{"start":{"line":173,"column":12},"end":{"line":186,"column":13}},"108":{"start":{"line":174,"column":14},"end":{"line":185,"column":15}},"109":{"start":{"line":175,"column":16},"end":{"line":184,"column":17}},"110":{"start":{"line":176,"column":18},"end":{"line":183,"column":19}},"111":{"start":{"line":177,"column":20},"end":{"line":182,"column":21}},"112":{"start":{"line":178,"column":38},"end":{"line":178,"column":99}},"113":{"start":{"line":179,"column":22},"end":{"line":181,"column":23}},"114":{"start":{"line":180,"column":24},"end":{"line":180,"column":93}},"115":{"start":{"line":191,"column":6},"end":{"line":204,"column":7}},"116":{"start":{"line":193,"column":8},"end":{"line":193,"column":47}},"117":{"start":{"line":194,"column":8},"end":{"line":194,"column":26}},"118":{"start":{"line":197,"column":8},"end":{"line":199,"column":9}},"119":{"start":{"line":198,"column":10},"end":{"line":198,"column":73}},"120":{"start":{"line":200,"column":8},"end":{"line":202,"column":9}},"121":{"start":{"line":201,"column":10},"end":{"line":201,"column":33}},"122":{"start":{"line":203,"column":8},"end":{"line":203,"column":20}},"123":{"start":{"line":206,"column":6},"end":{"line":206,"column":65}},"124":{"start":{"line":207,"column":6},"end":{"line":209,"column":7}},"125":{"start":{"line":208,"column":8},"end":{"line":208,"column":31}},"126":{"start":{"line":210,"column":6},"end":{"line":210,"column":18}},"127":{"start":{"line":213,"column":4},"end":{"line":216,"column":5}},"128":{"start":{"line":214,"column":6},"end":{"line":214,"column":55}},"129":{"start":{"line":215,"column":6},"end":{"line":215,"column":18}},"130":{"start":{"line":218,"column":4},"end":{"line":218,"column":16}},"131":{"start":{"line":228,"column":4},"end":{"line":252,"column":5}},"132":{"start":{"line":229,"column":6},"end":{"line":251,"column":7}},"133":{"start":{"line":230,"column":20},"end":{"line":230,"column":28}},"134":{"start":{"line":232,"column":8},"end":{"line":250,"column":9}},"135":{"start":{"line":234,"column":10},"end":{"line":239,"column":11}},"136":{"start":{"line":236,"column":12},"end":{"line":236,"column":59}},"137":{"start":{"line":238,"column":12},"end":{"line":238,"column":41}},"138":{"start":{"line":240,"column":23},"end":{"line":240,"column":50}},"139":{"start":{"line":241,"column":10},"end":{"line":248,"column":11}},"140":{"start":{"line":243,"column":14},"end":{"line":244,"column":46}},"141":{"start":{"line":247,"column":12},"end":{"line":247,"column":93}},"142":{"start":{"line":249,"column":10},"end":{"line":249,"column":16}},"143":{"start":{"line":253,"column":4},"end":{"line":253,"column":29}},"144":{"start":{"line":258,"column":15},"end":{"line":258,"column":32}},"145":{"start":{"line":259,"column":6},"end":{"line":259,"column":39}},"146":{"start":{"line":259,"column":21},"end":{"line":259,"column":39}},"147":{"start":{"line":260,"column":15},"end":{"line":260,"column":32}},"148":{"start":{"line":261,"column":6},"end":{"line":261,"column":39}},"149":{"start":{"line":261,"column":21},"end":{"line":261,"column":39}},"150":{"start":{"line":262,"column":6},"end":{"line":262,"column":21}},"151":{"start":{"line":264,"column":17},"end":{"line":264,"column":33}},"152":{"start":{"line":265,"column":16},"end":{"line":271,"column":6}},"153":{"start":{"line":266,"column":19},"end":{"line":266,"column":48}},"154":{"start":{"line":267,"column":6},"end":{"line":269,"column":7}},"155":{"start":{"line":268,"column":8},"end":{"line":268,"column":39}},"156":{"start":{"line":270,"column":6},"end":{"line":270,"column":20}},"157":{"start":{"line":272,"column":4},"end":{"line":272,"column":17}},"158":{"start":{"line":284,"column":4},"end":{"line":284,"column":33}},"159":{"start":{"line":284,"column":21},"end":{"line":284,"column":33}},"160":{"start":{"line":285,"column":4},"end":{"line":289,"column":5}},"161":{"start":{"line":286,"column":6},"end":{"line":286,"column":45}},"162":{"start":{"line":287,"column":6},"end":{"line":287,"column":21}},"163":{"start":{"line":288,"column":6},"end":{"line":288,"column":18}},"164":{"start":{"line":292,"column":18},"end":{"line":292,"column":52}},"165":{"start":{"line":293,"column":4},"end":{"line":293,"column":39}},"166":{"start":{"line":295,"column":19},"end":{"line":295,"column":21}},"167":{"start":{"line":295,"column":36},"end":{"line":295,"column":38}},"168":{"start":{"line":296,"column":23},"end":{"line":296,"column":25}},"169":{"start":{"line":297,"column":4},"end":{"line":304,"column":5}},"170":{"start":{"line":298,"column":6},"end":{"line":303,"column":7}},"171":{"start":{"line":298,"column":19},"end":{"line":298,"column":20}},"172":{"start":{"line":298,"column":26},"end":{"line":298,"column":52}},"173":{"start":{"line":299,"column":32},"end":{"line":299,"column":54}},"174":{"start":{"line":300,"column":26},"end":{"line":300,"column":54}},"175":{"start":{"line":301,"column":8},"end":{"line":301,"column":50}},"176":{"start":{"line":302,"column":8},"end":{"line":302,"column":39}},"177":{"start":{"line":306,"column":4},"end":{"line":312,"column":5}},"178":{"start":{"line":307,"column":6},"end":{"line":311,"column":7}},"179":{"start":{"line":308,"column":34},"end":{"line":308,"column":58}},"180":{"start":{"line":309,"column":28},"end":{"line":309,"column":58}},"181":{"start":{"line":310,"column":8},"end":{"line":310,"column":56}},"182":{"start":{"line":315,"column":4},"end":{"line":333,"column":5}},"183":{"start":{"line":316,"column":20},"end":{"line":316,"column":53}},"184":{"start":{"line":317,"column":6},"end":{"line":332,"column":6}},"185":{"start":{"line":318,"column":8},"end":{"line":319,"column":19}},"186":{"start":{"line":319,"column":10},"end":{"line":319,"column":19}},"187":{"start":{"line":320,"column":19},"end":{"line":320,"column":25}},"188":{"start":{"line":321,"column":29},"end":{"line":321,"column":57}},"189":{"start":{"line":322,"column":7},"end":{"line":328,"column":9}},"190":{"start":{"line":323,"column":9},"end":{"line":327,"column":73}},"191":{"start":{"line":324,"column":12},"end":{"line":324,"column":21}},"192":{"start":{"line":326,"column":12},"end":{"line":327,"column":73}},"193":{"start":{"line":329,"column":8},"end":{"line":331,"column":9}},"194":{"start":{"line":330,"column":10},"end":{"line":330,"column":66}},"195":{"start":{"line":335,"column":4},"end":{"line":335,"column":64}},"196":{"start":{"line":337,"column":4},"end":{"line":337,"column":16}},"197":{"start":{"line":341,"column":26},"end":{"line":341,"column":69}},"198":{"start":{"line":342,"column":21},"end":{"line":342,"column":23}},"199":{"start":{"line":343,"column":4},"end":{"line":346,"column":5}},"200":{"start":{"line":343,"column":17},"end":{"line":343,"column":18}},"201":{"start":{"line":344,"column":18},"end":{"line":344,"column":42}},"202":{"start":{"line":345,"column":6},"end":{"line":345,"column":50}},"203":{"start":{"line":347,"column":4},"end":{"line":377,"column":5}},"204":{"start":{"line":348,"column":6},"end":{"line":376,"column":7}},"205":{"start":{"line":349,"column":20},"end":{"line":349,"column":28}},"206":{"start":{"line":351,"column":8},"end":{"line":366,"column":9}},"207":{"start":{"line":353,"column":10},"end":{"line":358,"column":11}},"208":{"start":{"line":355,"column":12},"end":{"line":355,"column":59}},"209":{"start":{"line":357,"column":12},"end":{"line":357,"column":41}},"210":{"start":{"line":359,"column":10},"end":{"line":359,"column":74}},"211":{"start":{"line":360,"column":24},"end":{"line":361,"column":26}},"212":{"start":{"line":362,"column":23},"end":{"line":362,"column":64}},"213":{"start":{"line":363,"column":10},"end":{"line":364,"column":26}},"214":{"start":{"line":365,"column":10},"end":{"line":365,"column":19}},"215":{"start":{"line":367,"column":30},"end":{"line":367,"column":43}},"216":{"start":{"line":368,"column":8},"end":{"line":374,"column":9}},"217":{"start":{"line":369,"column":10},"end":{"line":373,"column":11}},"218":{"start":{"line":369,"column":52},"end":{"line":369,"column":61}},"219":{"start":{"line":371,"column":12},"end":{"line":372,"column":75}},"220":{"start":{"line":375,"column":8},"end":{"line":375,"column":64}},"221":{"start":{"line":381,"column":4},"end":{"line":381,"column":30}},"222":{"start":{"line":382,"column":14},"end":{"line":383,"column":60}},"223":{"start":{"line":384,"column":4},"end":{"line":384,"column":64}},"224":{"start":{"line":385,"column":4},"end":{"line":386,"column":13}},"225":{"start":{"line":387,"column":17},"end":{"line":387,"column":48}},"226":{"start":{"line":388,"column":15},"end":{"line":388,"column":44}},"227":{"start":{"line":389,"column":4},"end":{"line":393,"column":6}},"228":{"start":{"line":397,"column":4},"end":{"line":397,"column":30}},"229":{"start":{"line":398,"column":4},"end":{"line":398,"column":64}},"230":{"start":{"line":399,"column":21},"end":{"line":399,"column":41}},"231":{"start":{"line":401,"column":29},"end":{"line":402,"column":69}},"232":{"start":{"line":403,"column":4},"end":{"line":403,"column":46}},"233":{"start":{"line":405,"column":27},"end":{"line":406,"column":67}},"234":{"start":{"line":408,"column":25},"end":{"line":409,"column":65}},"235":{"start":{"line":411,"column":4},"end":{"line":411,"column":52}},"236":{"start":{"line":412,"column":4},"end":{"line":412,"column":50}},"237":{"start":{"line":414,"column":4},"end":{"line":416,"column":5}},"238":{"start":{"line":415,"column":6},"end":{"line":415,"column":51}},"239":{"start":{"line":418,"column":4},"end":{"line":420,"column":5}},"240":{"start":{"line":419,"column":6},"end":{"line":419,"column":54}},"241":{"start":{"line":422,"column":4},"end":{"line":439,"column":5}},"242":{"start":{"line":423,"column":19},"end":{"line":423,"column":68}},"243":{"start":{"line":424,"column":28},"end":{"line":425,"column":68}},"244":{"start":{"line":426,"column":6},"end":{"line":427,"column":79}},"245":{"start":{"line":428,"column":6},"end":{"line":429,"column":81}},"246":{"start":{"line":430,"column":6},"end":{"line":431,"column":80}},"247":{"start":{"line":433,"column":8},"end":{"line":433,"column":72}},"248":{"start":{"line":434,"column":6},"end":{"line":434,"column":51}},"249":{"start":{"line":436,"column":6},"end":{"line":438,"column":7}},"250":{"start":{"line":437,"column":8},"end":{"line":437,"column":60}},"251":{"start":{"line":441,"column":4},"end":{"line":441,"column":22}},"252":{"start":{"line":453,"column":21},"end":{"line":453,"column":25}},"253":{"start":{"line":454,"column":4},"end":{"line":454,"column":62}},"254":{"start":{"line":455,"column":4},"end":{"line":461,"column":5}},"255":{"start":{"line":456,"column":6},"end":{"line":456,"column":24}},"256":{"start":{"line":457,"column":6},"end":{"line":457,"column":54}},"257":{"start":{"line":458,"column":11},"end":{"line":461,"column":5}},"258":{"start":{"line":459,"column":6},"end":{"line":459,"column":25}},"259":{"start":{"line":460,"column":6},"end":{"line":460,"column":60}},"260":{"start":{"line":462,"column":4},"end":{"line":464,"column":5}},"261":{"start":{"line":463,"column":6},"end":{"line":463,"column":32}},"262":{"start":{"line":465,"column":18},"end":{"line":465,"column":22}},"263":{"start":{"line":466,"column":16},"end":{"line":466,"column":22}},"264":{"start":{"line":468,"column":4},"end":{"line":471,"column":6}},"265":{"start":{"line":470,"column":6},"end":{"line":470,"column":35}},"266":{"start":{"line":470,"column":14},"end":{"line":470,"column":35}},"267":{"start":{"line":473,"column":4},"end":{"line":480,"column":6}},"268":{"start":{"line":475,"column":6},"end":{"line":475,"column":37}},"269":{"start":{"line":475,"column":30},"end":{"line":475,"column":37}},"270":{"start":{"line":476,"column":6},"end":{"line":476,"column":25}},"271":{"start":{"line":477,"column":6},"end":{"line":479,"column":7}},"272":{"start":{"line":478,"column":8},"end":{"line":478,"column":27}},"273":{"start":{"line":482,"column":4},"end":{"line":488,"column":6}},"274":{"start":{"line":483,"column":6},"end":{"line":483,"column":37}},"275":{"start":{"line":483,"column":30},"end":{"line":483,"column":37}},"276":{"start":{"line":484,"column":6},"end":{"line":484,"column":25}},"277":{"start":{"line":485,"column":6},"end":{"line":487,"column":7}},"278":{"start":{"line":486,"column":8},"end":{"line":486,"column":28}},"279":{"start":{"line":490,"column":4},"end":{"line":498,"column":6}},"280":{"start":{"line":492,"column":20},"end":{"line":492,"column":46}},"281":{"start":{"line":493,"column":6},"end":{"line":495,"column":7}},"282":{"start":{"line":494,"column":8},"end":{"line":494,"column":43}},"283":{"start":{"line":496,"column":6},"end":{"line":496,"column":26}},"284":{"start":{"line":497,"column":6},"end":{"line":497,"column":24}},"285":{"start":{"line":500,"column":4},"end":{"line":505,"column":6}},"286":{"start":{"line":501,"column":16},"end":{"line":501,"column":27}},"287":{"start":{"line":502,"column":6},"end":{"line":502,"column":30}},"288":{"start":{"line":503,"column":6},"end":{"line":503,"column":34}},"289":{"start":{"line":504,"column":6},"end":{"line":504,"column":40}},"290":{"start":{"line":507,"column":4},"end":{"line":512,"column":6}},"291":{"start":{"line":508,"column":6},"end":{"line":511,"column":9}},"292":{"start":{"line":508,"column":14},"end":{"line":511,"column":9}},"293":{"start":{"line":510,"column":8},"end":{"line":510,"column":29}},"294":{"start":{"line":514,"column":4},"end":{"line":518,"column":5}},"295":{"start":{"line":515,"column":6},"end":{"line":515,"column":32}},"296":{"start":{"line":517,"column":6},"end":{"line":517,"column":23}},"297":{"start":{"line":519,"column":4},"end":{"line":519,"column":16}},"298":{"start":{"line":524,"column":4},"end":{"line":524,"column":36}},"299":{"start":{"line":524,"column":29},"end":{"line":524,"column":36}},"300":{"start":{"line":526,"column":4},"end":{"line":539,"column":5}},"301":{"start":{"line":527,"column":6},"end":{"line":527,"column":23}},"302":{"start":{"line":528,"column":11},"end":{"line":539,"column":5}},"303":{"start":{"line":530,"column":18},"end":{"line":530,"column":51}},"304":{"start":{"line":531,"column":6},"end":{"line":535,"column":7}},"305":{"start":{"line":532,"column":8},"end":{"line":532,"column":56}},"306":{"start":{"line":534,"column":8},"end":{"line":534,"column":48}},"307":{"start":{"line":538,"column":6},"end":{"line":538,"column":36}},"308":{"start":{"line":543,"column":15},"end":{"line":543,"column":19}},"309":{"start":{"line":544,"column":12},"end":{"line":544,"column":28}},"310":{"start":{"line":545,"column":4},"end":{"line":545,"column":52}},"311":{"start":{"line":546,"column":15},"end":{"line":546,"column":17}},"312":{"start":{"line":547,"column":15},"end":{"line":547,"column":17}},"313":{"start":{"line":548,"column":16},"end":{"line":548,"column":68}},"314":{"start":{"line":549,"column":18},"end":{"line":549,"column":30}},"315":{"start":{"line":551,"column":4},"end":{"line":640,"column":6}},"316":{"start":{"line":552,"column":6},"end":{"line":552,"column":30}},"317":{"start":{"line":553,"column":16},"end":{"line":553,"column":39}},"318":{"start":{"line":554,"column":23},"end":{"line":554,"column":37}},"319":{"start":{"line":555,"column":19},"end":{"line":555,"column":28}},"320":{"start":{"line":556,"column":18},"end":{"line":556,"column":33}},"321":{"start":{"line":557,"column":16},"end":{"line":557,"column":25}},"322":{"start":{"line":558,"column":30},"end":{"line":558,"column":34}},"323":{"start":{"line":561,"column":6},"end":{"line":566,"column":7}},"324":{"start":{"line":562,"column":8},"end":{"line":565,"column":9}},"325":{"start":{"line":563,"column":23},"end":{"line":563,"column":60}},"326":{"start":{"line":564,"column":10},"end":{"line":564,"column":51}},"327":{"start":{"line":569,"column":6},"end":{"line":608,"column":7}},"328":{"start":{"line":570,"column":8},"end":{"line":570,"column":48}},"329":{"start":{"line":570,"column":39},"end":{"line":570,"column":48}},"330":{"start":{"line":571,"column":20},"end":{"line":571,"column":34}},"331":{"start":{"line":572,"column":24},"end":{"line":572,"column":29}},"332":{"start":{"line":573,"column":22},"end":{"line":573,"column":26}},"333":{"start":{"line":574,"column":23},"end":{"line":574,"column":27}},"334":{"start":{"line":575,"column":8},"end":{"line":593,"column":9}},"335":{"start":{"line":577,"column":10},"end":{"line":592,"column":11}},"336":{"start":{"line":579,"column":12},"end":{"line":581,"column":13}},"337":{"start":{"line":580,"column":14},"end":{"line":580,"column":25}},"338":{"start":{"line":582,"column":12},"end":{"line":582,"column":21}},"339":{"start":{"line":583,"column":17},"end":{"line":592,"column":11}},"340":{"start":{"line":585,"column":12},"end":{"line":585,"column":29}},"341":{"start":{"line":586,"column":12},"end":{"line":586,"column":31}},"342":{"start":{"line":587,"column":12},"end":{"line":587,"column":43}},"343":{"start":{"line":588,"column":12},"end":{"line":588,"column":36}},"344":{"start":{"line":589,"column":12},"end":{"line":591,"column":13}},"345":{"start":{"line":590,"column":14},"end":{"line":590,"column":67}},"346":{"start":{"line":594,"column":23},"end":{"line":594,"column":33}},"347":{"start":{"line":595,"column":8},"end":{"line":595,"column":52}},"348":{"start":{"line":596,"column":29},"end":{"line":596,"column":79}},"349":{"start":{"line":597,"column":24},"end":{"line":597,"column":60}},"350":{"start":{"line":599,"column":8},"end":{"line":607,"column":9}},"351":{"start":{"line":601,"column":10},"end":{"line":601,"column":23}},"352":{"start":{"line":602,"column":10},"end":{"line":602,"column":34}},"353":{"start":{"line":603,"column":10},"end":{"line":603,"column":35}},"354":{"start":{"line":604,"column":10},"end":{"line":604,"column":58}},"355":{"start":{"line":606,"column":10},"end":{"line":606,"column":49}},"356":{"start":{"line":610,"column":6},"end":{"line":613,"column":7}},"357":{"start":{"line":611,"column":8},"end":{"line":611,"column":17}},"358":{"start":{"line":612,"column":8},"end":{"line":612,"column":60}},"359":{"start":{"line":615,"column":25},"end":{"line":615,"column":44}},"360":{"start":{"line":616,"column":6},"end":{"line":616,"column":74}},"361":{"start":{"line":619,"column":6},"end":{"line":627,"column":7}},"362":{"start":{"line":620,"column":8},"end":{"line":620,"column":34}},"363":{"start":{"line":621,"column":8},"end":{"line":623,"column":9}},"364":{"start":{"line":622,"column":10},"end":{"line":622,"column":47}},"365":{"start":{"line":624,"column":8},"end":{"line":626,"column":11}},"366":{"start":{"line":628,"column":6},"end":{"line":628,"column":20}},"367":{"start":{"line":629,"column":6},"end":{"line":632,"column":7}},"368":{"start":{"line":630,"column":8},"end":{"line":631,"column":47}},"369":{"start":{"line":631,"column":10},"end":{"line":631,"column":47}},"370":{"start":{"line":634,"column":6},"end":{"line":639,"column":9}},"371":{"start":{"line":642,"column":4},"end":{"line":668,"column":6}},"372":{"start":{"line":643,"column":24},"end":{"line":643,"column":48}},"373":{"start":{"line":644,"column":6},"end":{"line":644,"column":29}},"374":{"start":{"line":645,"column":20},"end":{"line":645,"column":31}},"375":{"start":{"line":646,"column":16},"end":{"line":646,"column":39}},"376":{"start":{"line":647,"column":6},"end":{"line":649,"column":7}},"377":{"start":{"line":648,"column":8},"end":{"line":648,"column":24}},"378":{"start":{"line":650,"column":6},"end":{"line":664,"column":7}},"379":{"start":{"line":651,"column":8},"end":{"line":663,"column":9}},"380":{"start":{"line":653,"column":20},"end":{"line":653,"column":43}},"381":{"start":{"line":654,"column":10},"end":{"line":660,"column":11}},"382":{"start":{"line":656,"column":12},"end":{"line":656,"column":37}},"383":{"start":{"line":659,"column":12},"end":{"line":659,"column":60}},"384":{"start":{"line":662,"column":10},"end":{"line":662,"column":51}},"385":{"start":{"line":665,"column":6},"end":{"line":667,"column":7}},"386":{"start":{"line":666,"column":8},"end":{"line":666,"column":49}},"387":{"start":{"line":670,"column":4},"end":{"line":680,"column":6}},"388":{"start":{"line":671,"column":6},"end":{"line":671,"column":33}},"389":{"start":{"line":672,"column":6},"end":{"line":673,"column":15}},"390":{"start":{"line":673,"column":8},"end":{"line":673,"column":15}},"391":{"start":{"line":675,"column":6},"end":{"line":677,"column":7}},"392":{"start":{"line":676,"column":8},"end":{"line":676,"column":42}},"393":{"start":{"line":679,"column":6},"end":{"line":679,"column":31}},"394":{"start":{"line":682,"column":4},"end":{"line":685,"column":6}},"395":{"start":{"line":683,"column":16},"end":{"line":683,"column":39}},"396":{"start":{"line":684,"column":6},"end":{"line":684,"column":35}},"397":{"start":{"line":687,"column":4},"end":{"line":696,"column":6}},"398":{"start":{"line":688,"column":6},"end":{"line":688,"column":33}},"399":{"start":{"line":689,"column":6},"end":{"line":690,"column":15}},"400":{"start":{"line":690,"column":8},"end":{"line":690,"column":15}},"401":{"start":{"line":692,"column":16},"end":{"line":692,"column":39}},"402":{"start":{"line":693,"column":23},"end":{"line":693,"column":37}},"403":{"start":{"line":694,"column":18},"end":{"line":694,"column":46}},"404":{"start":{"line":695,"column":6},"end":{"line":695,"column":36}},"405":{"start":{"line":698,"column":4},"end":{"line":698,"column":25}},"406":{"start":{"line":701,"column":16},"end":{"line":707,"column":5}},"407":{"start":{"line":702,"column":6},"end":{"line":706,"column":7}},"408":{"start":{"line":703,"column":8},"end":{"line":705,"column":9}},"409":{"start":{"line":704,"column":10},"end":{"line":704,"column":34}},"410":{"start":{"line":710,"column":4},"end":{"line":715,"column":5}},"411":{"start":{"line":711,"column":16},"end":{"line":711,"column":23}},"412":{"start":{"line":712,"column":6},"end":{"line":714,"column":7}},"413":{"start":{"line":712,"column":19},"end":{"line":712,"column":20}},"414":{"start":{"line":713,"column":8},"end":{"line":713,"column":40}},"415":{"start":{"line":717,"column":4},"end":{"line":737,"column":5}},"416":{"start":{"line":718,"column":17},"end":{"line":718,"column":35}},"417":{"start":{"line":719,"column":6},"end":{"line":735,"column":7}},"418":{"start":{"line":720,"column":8},"end":{"line":734,"column":9}},"419":{"start":{"line":722,"column":29},"end":{"line":722,"column":67}},"420":{"start":{"line":724,"column":10},"end":{"line":726,"column":11}},"421":{"start":{"line":725,"column":12},"end":{"line":725,"column":66}},"422":{"start":{"line":728,"column":10},"end":{"line":730,"column":11}},"423":{"start":{"line":729,"column":12},"end":{"line":729,"column":71}},"424":{"start":{"line":731,"column":22},"end":{"line":731,"column":45}},"425":{"start":{"line":732,"column":10},"end":{"line":732,"column":28}},"426":{"start":{"line":733,"column":10},"end":{"line":733,"column":22}},"427":{"start":{"line":736,"column":6},"end":{"line":736,"column":27}},"428":{"start":{"line":738,"column":4},"end":{"line":738,"column":16}},"429":{"start":{"line":744,"column":21},"end":{"line":744,"column":25}},"430":{"start":{"line":745,"column":18},"end":{"line":746,"column":35}},"431":{"start":{"line":747,"column":2},"end":{"line":772,"column":3}},"432":{"start":{"line":748,"column":4},"end":{"line":748,"column":23}},"433":{"start":{"line":750,"column":4},"end":{"line":752,"column":5}},"434":{"start":{"line":751,"column":6},"end":{"line":751,"column":48}},"435":{"start":{"line":753,"column":22},"end":{"line":754,"column":39}},"436":{"start":{"line":755,"column":4},"end":{"line":757,"column":5}},"437":{"start":{"line":756,"column":6},"end":{"line":756,"column":67}},"438":{"start":{"line":758,"column":21},"end":{"line":759,"column":38}},"439":{"start":{"line":760,"column":4},"end":{"line":762,"column":5}},"440":{"start":{"line":761,"column":6},"end":{"line":761,"column":65}},"441":{"start":{"line":763,"column":17},"end":{"line":764,"column":34}},"442":{"start":{"line":765,"column":4},"end":{"line":771,"column":5}},"443":{"start":{"line":766,"column":6},"end":{"line":770,"column":7}},"444":{"start":{"line":767,"column":8},"end":{"line":767,"column":59}},"445":{"start":{"line":769,"column":8},"end":{"line":769,"column":74}},"446":{"start":{"line":773,"column":2},"end":{"line":773,"column":22}},"447":{"start":{"line":777,"column":21},"end":{"line":777,"column":25}},"448":{"start":{"line":778,"column":13},"end":{"line":779,"column":30}},"449":{"start":{"line":780,"column":2},"end":{"line":818,"column":3}},"450":{"start":{"line":782,"column":4},"end":{"line":782,"column":23}},"451":{"start":{"line":783,"column":4},"end":{"line":783,"column":66}},"452":{"start":{"line":784,"column":16},"end":{"line":785,"column":33}},"453":{"start":{"line":786,"column":4},"end":{"line":788,"column":5}},"454":{"start":{"line":787,"column":6},"end":{"line":787,"column":76}},"455":{"start":{"line":789,"column":18},"end":{"line":790,"column":35}},"456":{"start":{"line":791,"column":4},"end":{"line":793,"column":5}},"457":{"start":{"line":792,"column":6},"end":{"line":792,"column":80}},"458":{"start":{"line":794,"column":17},"end":{"line":795,"column":34}},"459":{"start":{"line":796,"column":4},"end":{"line":798,"column":5}},"460":{"start":{"line":797,"column":6},"end":{"line":797,"column":78}},"461":{"start":{"line":799,"column":15},"end":{"line":800,"column":32}},"462":{"start":{"line":801,"column":4},"end":{"line":803,"column":5}},"463":{"start":{"line":802,"column":6},"end":{"line":802,"column":74}},"464":{"start":{"line":804,"column":15},"end":{"line":805,"column":32}},"465":{"start":{"line":806,"column":4},"end":{"line":808,"column":5}},"466":{"start":{"line":807,"column":6},"end":{"line":807,"column":74}},"467":{"start":{"line":809,"column":17},"end":{"line":810,"column":34}},"468":{"start":{"line":811,"column":4},"end":{"line":817,"column":5}},"469":{"start":{"line":812,"column":6},"end":{"line":816,"column":7}},"470":{"start":{"line":813,"column":8},"end":{"line":813,"column":59}},"471":{"start":{"line":815,"column":8},"end":{"line":815,"column":74}},"472":{"start":{"line":819,"column":2},"end":{"line":819,"column":22}},"473":{"start":{"line":824,"column":16},"end":{"line":824,"column":57}},"474":{"start":{"line":825,"column":2},"end":{"line":833,"column":3}},"475":{"start":{"line":826,"column":4},"end":{"line":826,"column":17}},"476":{"start":{"line":827,"column":9},"end":{"line":833,"column":3}},"477":{"start":{"line":828,"column":4},"end":{"line":831,"column":5}},"478":{"start":{"line":830,"column":6},"end":{"line":830,"column":61}},"479":{"start":{"line":832,"column":4},"end":{"line":832,"column":19}},"480":{"start":{"line":834,"column":2},"end":{"line":834,"column":17}},"481":{"start":{"line":838,"column":2},"end":{"line":838,"column":44}},"482":{"start":{"line":838,"column":32},"end":{"line":838,"column":44}},"483":{"start":{"line":839,"column":14},"end":{"line":839,"column":18}},"484":{"start":{"line":840,"column":15},"end":{"line":840,"column":46}},"485":{"start":{"line":841,"column":2},"end":{"line":858,"column":3}},"486":{"start":{"line":842,"column":19},"end":{"line":842,"column":23}},"487":{"start":{"line":846,"column":4},"end":{"line":848,"column":5}},"488":{"start":{"line":847,"column":6},"end":{"line":847,"column":36}},"489":{"start":{"line":849,"column":4},"end":{"line":849,"column":31}},"490":{"start":{"line":850,"column":9},"end":{"line":858,"column":3}},"491":{"start":{"line":851,"column":4},"end":{"line":855,"column":5}},"492":{"start":{"line":852,"column":6},"end":{"line":852,"column":19}},"493":{"start":{"line":854,"column":6},"end":{"line":854,"column":20}},"494":{"start":{"line":856,"column":9},"end":{"line":858,"column":3}},"495":{"start":{"line":857,"column":4},"end":{"line":857,"column":25}},"496":{"start":{"line":859,"column":2},"end":{"line":859,"column":15}},"497":{"start":{"line":863,"column":2},"end":{"line":863,"column":24}},"498":{"start":{"line":864,"column":15},"end":{"line":864,"column":33}},"499":{"start":{"line":865,"column":2},"end":{"line":865,"column":36}},"500":{"start":{"line":869,"column":2},"end":{"line":869,"column":24}},"501":{"start":{"line":870,"column":15},"end":{"line":870,"column":33}},"502":{"start":{"line":871,"column":2},"end":{"line":871,"column":30}},"503":{"start":{"line":875,"column":2},"end":{"line":875,"column":24}},"504":{"start":{"line":876,"column":15},"end":{"line":876,"column":33}},"505":{"start":{"line":877,"column":2},"end":{"line":877,"column":16}},"506":{"start":{"line":881,"column":2},"end":{"line":881,"column":50}},"507":{"start":{"line":881,"column":39},"end":{"line":881,"column":50}},"508":{"start":{"line":882,"column":2},"end":{"line":888,"column":3}},"509":{"start":{"line":883,"column":4},"end":{"line":883,"column":25}},"510":{"start":{"line":884,"column":9},"end":{"line":888,"column":3}},"511":{"start":{"line":885,"column":4},"end":{"line":885,"column":25}},"512":{"start":{"line":886,"column":9},"end":{"line":888,"column":3}},"513":{"start":{"line":887,"column":4},"end":{"line":887,"column":29}},"514":{"start":{"line":889,"column":2},"end":{"line":889,"column":13}},"515":{"start":{"line":892,"column":0},"end":{"line":892,"column":28}},"516":{"start":{"line":895,"column":0},"end":{"line":895,"column":39}},"517":{"start":{"line":896,"column":0},"end":{"line":896,"column":37}},"518":{"start":{"line":897,"column":0},"end":{"line":897,"column":37}},"519":{"start":{"line":898,"column":0},"end":{"line":898,"column":45}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":24,"column":2},"end":{"line":24,"column":3}},"loc":{"start":{"line":24,"column":32},"end":{"line":31,"column":3}},"line":24},"1":{"name":"(anonymous_1)","decl":{"start":{"line":33,"column":2},"end":{"line":33,"column":3}},"loc":{"start":{"line":33,"column":46},"end":{"line":219,"column":3}},"line":33},"2":{"name":"(anonymous_2)","decl":{"start":{"line":226,"column":2},"end":{"line":226,"column":3}},"loc":{"start":{"line":226,"column":32},"end":{"line":254,"column":3}},"line":226},"3":{"name":"(anonymous_3)","decl":{"start":{"line":256,"column":2},"end":{"line":256,"column":3}},"loc":{"start":{"line":256,"column":31},"end":{"line":273,"column":3}},"line":256},"4":{"name":"compare","decl":{"start":{"line":257,"column":13},"end":{"line":257,"column":20}},"loc":{"start":{"line":257,"column":36},"end":{"line":263,"column":5}},"line":257},"5":{"name":"(anonymous_5)","decl":{"start":{"line":265,"column":37},"end":{"line":265,"column":38}},"loc":{"start":{"line":265,"column":49},"end":{"line":271,"column":5}},"line":265},"6":{"name":"(anonymous_6)","decl":{"start":{"line":283,"column":2},"end":{"line":283,"column":3}},"loc":{"start":{"line":283,"column":53},"end":{"line":338,"column":3}},"line":283},"7":{"name":"(anonymous_7)","decl":{"start":{"line":340,"column":2},"end":{"line":340,"column":3}},"loc":{"start":{"line":340,"column":57},"end":{"line":378,"column":3}},"line":340},"8":{"name":"(anonymous_8)","decl":{"start":{"line":380,"column":2},"end":{"line":380,"column":3}},"loc":{"start":{"line":380,"column":43},"end":{"line":394,"column":3}},"line":380},"9":{"name":"(anonymous_9)","decl":{"start":{"line":396,"column":2},"end":{"line":396,"column":3}},"loc":{"start":{"line":396,"column":74},"end":{"line":442,"column":3}},"line":396},"10":{"name":"(anonymous_10)","decl":{"start":{"line":451,"column":2},"end":{"line":451,"column":3}},"loc":{"start":{"line":451,"column":33},"end":{"line":520,"column":3}},"line":451},"11":{"name":"(anonymous_11)","decl":{"start":{"line":468,"column":21},"end":{"line":468,"column":22}},"loc":{"start":{"line":468,"column":33},"end":{"line":471,"column":5}},"line":468},"12":{"name":"(anonymous_12)","decl":{"start":{"line":473,"column":20},"end":{"line":473,"column":21}},"loc":{"start":{"line":473,"column":35},"end":{"line":480,"column":5}},"line":473},"13":{"name":"(anonymous_13)","decl":{"start":{"line":482,"column":21},"end":{"line":482,"column":22}},"loc":{"start":{"line":482,"column":36},"end":{"line":488,"column":5}},"line":482},"14":{"name":"(anonymous_14)","decl":{"start":{"line":490,"column":23},"end":{"line":490,"column":24}},"loc":{"start":{"line":490,"column":38},"end":{"line":498,"column":5}},"line":490},"15":{"name":"(anonymous_15)","decl":{"start":{"line":500,"column":24},"end":{"line":500,"column":25}},"loc":{"start":{"line":500,"column":41},"end":{"line":505,"column":5}},"line":500},"16":{"name":"(anonymous_16)","decl":{"start":{"line":507,"column":19},"end":{"line":507,"column":20}},"loc":{"start":{"line":507,"column":30},"end":{"line":512,"column":5}},"line":507},"17":{"name":"(anonymous_17)","decl":{"start":{"line":508,"column":31},"end":{"line":508,"column":32}},"loc":{"start":{"line":508,"column":42},"end":{"line":511,"column":7}},"line":508},"18":{"name":"(anonymous_18)","decl":{"start":{"line":522,"column":2},"end":{"line":522,"column":3}},"loc":{"start":{"line":522,"column":25},"end":{"line":540,"column":3}},"line":522},"19":{"name":"(anonymous_19)","decl":{"start":{"line":542,"column":2},"end":{"line":542,"column":3}},"loc":{"start":{"line":542,"column":40},"end":{"line":739,"column":3}},"line":542},"20":{"name":"(anonymous_20)","decl":{"start":{"line":551,"column":18},"end":{"line":551,"column":19}},"loc":{"start":{"line":551,"column":33},"end":{"line":640,"column":5}},"line":551},"21":{"name":"(anonymous_21)","decl":{"start":{"line":642,"column":19},"end":{"line":642,"column":20}},"loc":{"start":{"line":642,"column":36},"end":{"line":668,"column":5}},"line":642},"22":{"name":"(anonymous_22)","decl":{"start":{"line":670,"column":16},"end":{"line":670,"column":17}},"loc":{"start":{"line":670,"column":31},"end":{"line":680,"column":5}},"line":670},"23":{"name":"(anonymous_23)","decl":{"start":{"line":682,"column":25},"end":{"line":682,"column":26}},"loc":{"start":{"line":682,"column":40},"end":{"line":685,"column":5}},"line":682},"24":{"name":"(anonymous_24)","decl":{"start":{"line":687,"column":15},"end":{"line":687,"column":16}},"loc":{"start":{"line":687,"column":30},"end":{"line":696,"column":5}},"line":687},"25":{"name":"(anonymous_25)","decl":{"start":{"line":701,"column":16},"end":{"line":701,"column":17}},"loc":{"start":{"line":701,"column":36},"end":{"line":707,"column":5}},"line":701},"26":{"name":"getSoap11FaultErrorMessage","decl":{"start":{"line":743,"column":9},"end":{"line":743,"column":35}},"loc":{"start":{"line":743,"column":47},"end":{"line":774,"column":1}},"line":743},"27":{"name":"getSoap12FaultErrorMessage","decl":{"start":{"line":776,"column":9},"end":{"line":776,"column":35}},"loc":{"start":{"line":776,"column":47},"end":{"line":820,"column":1}},"line":776},"28":{"name":"declareNamespace","decl":{"start":{"line":823,"column":9},"end":{"line":823,"column":25}},"loc":{"start":{"line":823,"column":58},"end":{"line":835,"column":1}},"line":823},"29":{"name":"parseValue","decl":{"start":{"line":837,"column":9},"end":{"line":837,"column":19}},"loc":{"start":{"line":837,"column":38},"end":{"line":860,"column":1}},"line":837},"30":{"name":"toXmlDate","decl":{"start":{"line":862,"column":9},"end":{"line":862,"column":18}},"loc":{"start":{"line":862,"column":25},"end":{"line":866,"column":1}},"line":862},"31":{"name":"toXmlTime","decl":{"start":{"line":868,"column":9},"end":{"line":868,"column":18}},"loc":{"start":{"line":868,"column":25},"end":{"line":872,"column":1}},"line":868},"32":{"name":"toXmlDateTime","decl":{"start":{"line":874,"column":9},"end":{"line":874,"column":22}},"loc":{"start":{"line":874,"column":29},"end":{"line":878,"column":1}},"line":874},"33":{"name":"toXmlDateOrTime","decl":{"start":{"line":880,"column":9},"end":{"line":880,"column":24}},"loc":{"start":{"line":880,"column":42},"end":{"line":890,"column":1}},"line":880}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":19},"end":{"line":25,"column":32}},"type":"binary-expr","locations":[{"start":{"line":25,"column":19},"end":{"line":25,"column":26}},{"start":{"line":25,"column":30},"end":{"line":25,"column":32}}],"line":25},"1":{"loc":{"start":{"line":26,"column":19},"end":{"line":26,"column":32}},"type":"binary-expr","locations":[{"start":{"line":26,"column":19},"end":{"line":26,"column":26}},{"start":{"line":26,"column":30},"end":{"line":26,"column":32}}],"line":26},"2":{"loc":{"start":{"line":27,"column":28},"end":{"line":27,"column":61}},"type":"binary-expr","locations":[{"start":{"line":27,"column":28},"end":{"line":27,"column":49}},{"start":{"line":27,"column":53},"end":{"line":27,"column":61}}],"line":27},"3":{"loc":{"start":{"line":28,"column":26},"end":{"line":28,"column":55}},"type":"binary-expr","locations":[{"start":{"line":28,"column":26},"end":{"line":28,"column":45}},{"start":{"line":28,"column":49},"end":{"line":28,"column":55}}],"line":28},"4":{"loc":{"start":{"line":29,"column":33},"end":{"line":29,"column":76}},"type":"binary-expr","locations":[{"start":{"line":29,"column":33},"end":{"line":29,"column":59}},{"start":{"line":29,"column":63},"end":{"line":29,"column":76}}],"line":29},"5":{"loc":{"start":{"line":30,"column":30},"end":{"line":30,"column":67}},"type":"binary-expr","locations":[{"start":{"line":30,"column":30},"end":{"line":30,"column":53}},{"start":{"line":30,"column":57},"end":{"line":30,"column":67}}],"line":30},"6":{"loc":{"start":{"line":34,"column":4},"end":{"line":37,"column":5}},"type":"if","locations":[{"start":{"line":34,"column":4},"end":{"line":37,"column":5}},{"start":{"line":34,"column":4},"end":{"line":37,"column":5}}],"line":34},"7":{"loc":{"start":{"line":38,"column":4},"end":{"line":40,"column":5}},"type":"if","locations":[{"start":{"line":38,"column":4},"end":{"line":40,"column":5}},{"start":{"line":38,"column":4},"end":{"line":40,"column":5}}],"line":38},"8":{"loc":{"start":{"line":44,"column":4},"end":{"line":57,"column":5}},"type":"if","locations":[{"start":{"line":44,"column":4},"end":{"line":57,"column":5}},{"start":{"line":44,"column":4},"end":{"line":57,"column":5}}],"line":44},"9":{"loc":{"start":{"line":47,"column":6},"end":{"line":55,"column":7}},"type":"if","locations":[{"start":{"line":47,"column":6},"end":{"line":55,"column":7}},{"start":{"line":47,"column":6},"end":{"line":55,"column":7}}],"line":47},"10":{"loc":{"start":{"line":49,"column":13},"end":{"line":55,"column":7}},"type":"if","locations":[{"start":{"line":49,"column":13},"end":{"line":55,"column":7}},{"start":{"line":49,"column":13},"end":{"line":55,"column":7}}],"line":49},"11":{"loc":{"start":{"line":52,"column":21},"end":{"line":52,"column":71}},"type":"cond-expr","locations":[{"start":{"line":52,"column":31},"end":{"line":52,"column":45}},{"start":{"line":52,"column":48},"end":{"line":52,"column":71}}],"line":52},"12":{"loc":{"start":{"line":53,"column":23},"end":{"line":53,"column":58}},"type":"cond-expr","locations":[{"start":{"line":53,"column":32},"end":{"line":53,"column":51}},{"start":{"line":53,"column":54},"end":{"line":53,"column":58}}],"line":53},"13":{"loc":{"start":{"line":59,"column":4},"end":{"line":211,"column":5}},"type":"if","locations":[{"start":{"line":59,"column":4},"end":{"line":211,"column":5}},{"start":{"line":59,"column":4},"end":{"line":211,"column":5}}],"line":59},"14":{"loc":{"start":{"line":63,"column":6},"end":{"line":70,"column":7}},"type":"if","locations":[{"start":{"line":63,"column":6},"end":{"line":70,"column":7}},{"start":{"line":63,"column":6},"end":{"line":70,"column":7}}],"line":63},"15":{"loc":{"start":{"line":64,"column":8},"end":{"line":69,"column":9}},"type":"if","locations":[{"start":{"line":64,"column":8},"end":{"line":69,"column":9}},{"start":{"line":64,"column":8},"end":{"line":69,"column":9}}],"line":64},"16":{"loc":{"start":{"line":71,"column":6},"end":{"line":80,"column":7}},"type":"if","locations":[{"start":{"line":71,"column":6},"end":{"line":80,"column":7}},{"start":{"line":71,"column":6},"end":{"line":80,"column":7}}],"line":71},"17":{"loc":{"start":{"line":71,"column":9},"end":{"line":71,"column":48}},"type":"binary-expr","locations":[{"start":{"line":71,"column":9},"end":{"line":71,"column":21}},{"start":{"line":71,"column":25},"end":{"line":71,"column":48}}],"line":71},"18":{"loc":{"start":{"line":73,"column":8},"end":{"line":75,"column":9}},"type":"if","locations":[{"start":{"line":73,"column":8},"end":{"line":75,"column":9}},{"start":{"line":73,"column":8},"end":{"line":75,"column":9}}],"line":73},"19":{"loc":{"start":{"line":77,"column":8},"end":{"line":79,"column":9}},"type":"if","locations":[{"start":{"line":77,"column":8},"end":{"line":79,"column":9}},{"start":{"line":77,"column":8},"end":{"line":79,"column":9}}],"line":77},"20":{"loc":{"start":{"line":84,"column":6},"end":{"line":107,"column":7}},"type":"if","locations":[{"start":{"line":84,"column":6},"end":{"line":107,"column":7}},{"start":{"line":84,"column":6},"end":{"line":107,"column":7}}],"line":84},"21":{"loc":{"start":{"line":88,"column":13},"end":{"line":107,"column":7}},"type":"if","locations":[{"start":{"line":88,"column":13},"end":{"line":107,"column":7}},{"start":{"line":88,"column":13},"end":{"line":107,"column":7}}],"line":88},"22":{"loc":{"start":{"line":95,"column":8},"end":{"line":99,"column":9}},"type":"if","locations":[{"start":{"line":95,"column":8},"end":{"line":99,"column":9}},{"start":{"line":95,"column":8},"end":{"line":99,"column":9}}],"line":95},"23":{"loc":{"start":{"line":95,"column":12},"end":{"line":95,"column":58}},"type":"binary-expr","locations":[{"start":{"line":95,"column":12},"end":{"line":95,"column":28}},{"start":{"line":95,"column":32},"end":{"line":95,"column":58}}],"line":95},"24":{"loc":{"start":{"line":101,"column":21},"end":{"line":101,"column":71}},"type":"cond-expr","locations":[{"start":{"line":101,"column":31},"end":{"line":101,"column":45}},{"start":{"line":101,"column":48},"end":{"line":101,"column":71}}],"line":101},"25":{"loc":{"start":{"line":102,"column":22},"end":{"line":102,"column":57}},"type":"cond-expr","locations":[{"start":{"line":102,"column":31},"end":{"line":102,"column":50}},{"start":{"line":102,"column":53},"end":{"line":102,"column":57}}],"line":102},"26":{"loc":{"start":{"line":104,"column":8},"end":{"line":106,"column":9}},"type":"if","locations":[{"start":{"line":104,"column":8},"end":{"line":106,"column":9}},{"start":{"line":104,"column":8},"end":{"line":106,"column":9}}],"line":104},"27":{"loc":{"start":{"line":105,"column":18},"end":{"line":105,"column":54}},"type":"cond-expr","locations":[{"start":{"line":105,"column":27},"end":{"line":105,"column":44}},{"start":{"line":105,"column":47},"end":{"line":105,"column":54}}],"line":105},"28":{"loc":{"start":{"line":110,"column":6},"end":{"line":137,"column":7}},"type":"if","locations":[{"start":{"line":110,"column":6},"end":{"line":137,"column":7}},{"start":{"line":110,"column":6},"end":{"line":137,"column":7}}],"line":110},"29":{"loc":{"start":{"line":110,"column":10},"end":{"line":110,"column":43}},"type":"binary-expr","locations":[{"start":{"line":110,"column":10},"end":{"line":110,"column":18}},{"start":{"line":110,"column":22},"end":{"line":110,"column":43}}],"line":110},"30":{"loc":{"start":{"line":115,"column":12},"end":{"line":137,"column":7}},"type":"if","locations":[{"start":{"line":115,"column":12},"end":{"line":137,"column":7}},{"start":{"line":115,"column":12},"end":{"line":137,"column":7}}],"line":115},"31":{"loc":{"start":{"line":115,"column":15},"end":{"line":116,"column":58}},"type":"binary-expr","locations":[{"start":{"line":115,"column":15},"end":{"line":115,"column":23}},{"start":{"line":115,"column":27},"end":{"line":115,"column":53}},{"start":{"line":115,"column":57},"end":{"line":115,"column":69}},{"start":{"line":116,"column":11},"end":{"line":116,"column":58}}],"line":115},"32":{"loc":{"start":{"line":123,"column":8},"end":{"line":134,"column":9}},"type":"if","locations":[{"start":{"line":123,"column":8},"end":{"line":134,"column":9}},{"start":{"line":123,"column":8},"end":{"line":134,"column":9}}],"line":123},"33":{"loc":{"start":{"line":123,"column":12},"end":{"line":123,"column":63}},"type":"binary-expr","locations":[{"start":{"line":123,"column":12},"end":{"line":123,"column":44}},{"start":{"line":123,"column":48},"end":{"line":123,"column":63}}],"line":123},"34":{"loc":{"start":{"line":125,"column":10},"end":{"line":133,"column":11}},"type":"if","locations":[{"start":{"line":125,"column":10},"end":{"line":133,"column":11}},{"start":{"line":125,"column":10},"end":{"line":133,"column":11}}],"line":125},"35":{"loc":{"start":{"line":127,"column":12},"end":{"line":132,"column":13}},"type":"if","locations":[{"start":{"line":127,"column":12},"end":{"line":132,"column":13}},{"start":{"line":127,"column":12},"end":{"line":132,"column":13}}],"line":127},"36":{"loc":{"start":{"line":129,"column":14},"end":{"line":131,"column":15}},"type":"if","locations":[{"start":{"line":129,"column":14},"end":{"line":131,"column":15}},{"start":{"line":129,"column":14},"end":{"line":131,"column":15}}],"line":129},"37":{"loc":{"start":{"line":136,"column":18},"end":{"line":136,"column":87}},"type":"cond-expr","locations":[{"start":{"line":136,"column":29},"end":{"line":136,"column":59}},{"start":{"line":136,"column":62},"end":{"line":136,"column":87}}],"line":136},"38":{"loc":{"start":{"line":139,"column":6},"end":{"line":143,"column":7}},"type":"if","locations":[{"start":{"line":139,"column":6},"end":{"line":143,"column":7}},{"start":{"line":139,"column":6},"end":{"line":143,"column":7}}],"line":139},"39":{"loc":{"start":{"line":139,"column":10},"end":{"line":139,"column":41}},"type":"binary-expr","locations":[{"start":{"line":139,"column":10},"end":{"line":139,"column":15}},{"start":{"line":139,"column":19},"end":{"line":139,"column":41}}],"line":139},"40":{"loc":{"start":{"line":140,"column":8},"end":{"line":142,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":8},"end":{"line":142,"column":9}},{"start":{"line":140,"column":8},"end":{"line":142,"column":9}}],"line":140},"41":{"loc":{"start":{"line":145,"column":6},"end":{"line":153,"column":7}},"type":"if","locations":[{"start":{"line":145,"column":6},"end":{"line":153,"column":7}},{"start":{"line":145,"column":6},"end":{"line":153,"column":7}}],"line":145},"42":{"loc":{"start":{"line":146,"column":8},"end":{"line":152,"column":9}},"type":"if","locations":[{"start":{"line":146,"column":8},"end":{"line":152,"column":9}},{"start":{"line":146,"column":8},"end":{"line":152,"column":9}}],"line":146},"43":{"loc":{"start":{"line":149,"column":10},"end":{"line":151,"column":11}},"type":"if","locations":[{"start":{"line":149,"column":10},"end":{"line":151,"column":11}},{"start":{"line":149,"column":10},"end":{"line":151,"column":11}}],"line":149},"44":{"loc":{"start":{"line":155,"column":6},"end":{"line":189,"column":7}},"type":"if","locations":[{"start":{"line":155,"column":6},"end":{"line":189,"column":7}},{"start":{"line":155,"column":6},"end":{"line":189,"column":7}}],"line":155},"45":{"loc":{"start":{"line":156,"column":8},"end":{"line":162,"column":9}},"type":"if","locations":[{"start":{"line":156,"column":8},"end":{"line":162,"column":9}},{"start":{"line":156,"column":8},"end":{"line":162,"column":9}}],"line":156},"46":{"loc":{"start":{"line":158,"column":10},"end":{"line":161,"column":11}},"type":"if","locations":[{"start":{"line":158,"column":10},"end":{"line":161,"column":11}},{"start":{"line":158,"column":10},"end":{"line":161,"column":11}}],"line":158},"47":{"loc":{"start":{"line":163,"column":8},"end":{"line":165,"column":9}},"type":"if","locations":[{"start":{"line":163,"column":8},"end":{"line":165,"column":9}},{"start":{"line":163,"column":8},"end":{"line":165,"column":9}}],"line":163},"48":{"loc":{"start":{"line":167,"column":13},"end":{"line":189,"column":7}},"type":"if","locations":[{"start":{"line":167,"column":13},"end":{"line":189,"column":7}},{"start":{"line":167,"column":13},"end":{"line":189,"column":7}}],"line":167},"49":{"loc":{"start":{"line":170,"column":8},"end":{"line":188,"column":9}},"type":"if","locations":[{"start":{"line":170,"column":8},"end":{"line":188,"column":9}},{"start":{"line":170,"column":8},"end":{"line":188,"column":9}}],"line":170},"50":{"loc":{"start":{"line":173,"column":12},"end":{"line":186,"column":13}},"type":"if","locations":[{"start":{"line":173,"column":12},"end":{"line":186,"column":13}},{"start":{"line":173,"column":12},"end":{"line":186,"column":13}}],"line":173},"51":{"loc":{"start":{"line":174,"column":14},"end":{"line":185,"column":15}},"type":"if","locations":[{"start":{"line":174,"column":14},"end":{"line":185,"column":15}},{"start":{"line":174,"column":14},"end":{"line":185,"column":15}}],"line":174},"52":{"loc":{"start":{"line":175,"column":16},"end":{"line":184,"column":17}},"type":"if","locations":[{"start":{"line":175,"column":16},"end":{"line":184,"column":17}},{"start":{"line":175,"column":16},"end":{"line":184,"column":17}}],"line":175},"53":{"loc":{"start":{"line":176,"column":18},"end":{"line":183,"column":19}},"type":"if","locations":[{"start":{"line":176,"column":18},"end":{"line":183,"column":19}},{"start":{"line":176,"column":18},"end":{"line":183,"column":19}}],"line":176},"54":{"loc":{"start":{"line":177,"column":20},"end":{"line":182,"column":21}},"type":"if","locations":[{"start":{"line":177,"column":20},"end":{"line":182,"column":21}},{"start":{"line":177,"column":20},"end":{"line":182,"column":21}}],"line":177},"55":{"loc":{"start":{"line":179,"column":22},"end":{"line":181,"column":23}},"type":"if","locations":[{"start":{"line":179,"column":22},"end":{"line":181,"column":23}},{"start":{"line":179,"column":22},"end":{"line":181,"column":23}}],"line":179},"56":{"loc":{"start":{"line":191,"column":6},"end":{"line":204,"column":7}},"type":"if","locations":[{"start":{"line":191,"column":6},"end":{"line":204,"column":7}},{"start":{"line":191,"column":6},"end":{"line":204,"column":7}}],"line":191},"57":{"loc":{"start":{"line":191,"column":10},"end":{"line":191,"column":74}},"type":"binary-expr","locations":[{"start":{"line":191,"column":10},"end":{"line":191,"column":21}},{"start":{"line":191,"column":27},"end":{"line":191,"column":50}},{"start":{"line":191,"column":54},"end":{"line":191,"column":73}}],"line":191},"58":{"loc":{"start":{"line":197,"column":8},"end":{"line":199,"column":9}},"type":"if","locations":[{"start":{"line":197,"column":8},"end":{"line":199,"column":9}},{"start":{"line":197,"column":8},"end":{"line":199,"column":9}}],"line":197},"59":{"loc":{"start":{"line":200,"column":8},"end":{"line":202,"column":9}},"type":"if","locations":[{"start":{"line":200,"column":8},"end":{"line":202,"column":9}},{"start":{"line":200,"column":8},"end":{"line":202,"column":9}}],"line":200},"60":{"loc":{"start":{"line":207,"column":6},"end":{"line":209,"column":7}},"type":"if","locations":[{"start":{"line":207,"column":6},"end":{"line":209,"column":7}},{"start":{"line":207,"column":6},"end":{"line":209,"column":7}}],"line":207},"61":{"loc":{"start":{"line":213,"column":4},"end":{"line":216,"column":5}},"type":"if","locations":[{"start":{"line":213,"column":4},"end":{"line":216,"column":5}},{"start":{"line":213,"column":4},"end":{"line":216,"column":5}}],"line":213},"62":{"loc":{"start":{"line":213,"column":8},"end":{"line":213,"column":95}},"type":"binary-expr","locations":[{"start":{"line":213,"column":8},"end":{"line":213,"column":26}},{"start":{"line":213,"column":31},"end":{"line":213,"column":55}},{"start":{"line":213,"column":59},"end":{"line":213,"column":95}}],"line":213},"63":{"loc":{"start":{"line":228,"column":4},"end":{"line":252,"column":5}},"type":"if","locations":[{"start":{"line":228,"column":4},"end":{"line":252,"column":5}},{"start":{"line":228,"column":4},"end":{"line":252,"column":5}}],"line":228},"64":{"loc":{"start":{"line":228,"column":8},"end":{"line":228,"column":50}},"type":"binary-expr","locations":[{"start":{"line":228,"column":8},"end":{"line":228,"column":21}},{"start":{"line":228,"column":25},"end":{"line":228,"column":50}}],"line":228},"65":{"loc":{"start":{"line":232,"column":8},"end":{"line":250,"column":9}},"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":250,"column":9}},{"start":{"line":232,"column":8},"end":{"line":250,"column":9}}],"line":232},"66":{"loc":{"start":{"line":234,"column":10},"end":{"line":239,"column":11}},"type":"if","locations":[{"start":{"line":234,"column":10},"end":{"line":239,"column":11}},{"start":{"line":234,"column":10},"end":{"line":239,"column":11}}],"line":234},"67":{"loc":{"start":{"line":234,"column":14},"end":{"line":234,"column":76}},"type":"binary-expr","locations":[{"start":{"line":234,"column":14},"end":{"line":234,"column":39}},{"start":{"line":234,"column":43},"end":{"line":234,"column":76}}],"line":234},"68":{"loc":{"start":{"line":241,"column":10},"end":{"line":248,"column":11}},"type":"if","locations":[{"start":{"line":241,"column":10},"end":{"line":248,"column":11}},{"start":{"line":241,"column":10},"end":{"line":248,"column":11}}],"line":241},"69":{"loc":{"start":{"line":243,"column":14},"end":{"line":244,"column":46}},"type":"binary-expr","locations":[{"start":{"line":243,"column":14},"end":{"line":243,"column":47}},{"start":{"line":244,"column":14},"end":{"line":244,"column":46}}],"line":243},"70":{"loc":{"start":{"line":247,"column":32},"end":{"line":247,"column":92}},"type":"binary-expr","locations":[{"start":{"line":247,"column":32},"end":{"line":247,"column":43}},{"start":{"line":247,"column":47},"end":{"line":247,"column":92}}],"line":247},"71":{"loc":{"start":{"line":259,"column":6},"end":{"line":259,"column":39}},"type":"if","locations":[{"start":{"line":259,"column":6},"end":{"line":259,"column":39}},{"start":{"line":259,"column":6},"end":{"line":259,"column":39}}],"line":259},"72":{"loc":{"start":{"line":261,"column":6},"end":{"line":261,"column":39}},"type":"if","locations":[{"start":{"line":261,"column":6},"end":{"line":261,"column":39}},{"start":{"line":261,"column":6},"end":{"line":261,"column":39}}],"line":261},"73":{"loc":{"start":{"line":267,"column":6},"end":{"line":269,"column":7}},"type":"if","locations":[{"start":{"line":267,"column":6},"end":{"line":269,"column":7}},{"start":{"line":267,"column":6},"end":{"line":269,"column":7}}],"line":267},"74":{"loc":{"start":{"line":284,"column":4},"end":{"line":284,"column":33}},"type":"if","locations":[{"start":{"line":284,"column":4},"end":{"line":284,"column":33}},{"start":{"line":284,"column":4},"end":{"line":284,"column":33}}],"line":284},"75":{"loc":{"start":{"line":285,"column":4},"end":{"line":289,"column":5}},"type":"if","locations":[{"start":{"line":285,"column":4},"end":{"line":289,"column":5}},{"start":{"line":285,"column":4},"end":{"line":289,"column":5}}],"line":285},"76":{"loc":{"start":{"line":285,"column":8},"end":{"line":285,"column":56}},"type":"binary-expr","locations":[{"start":{"line":285,"column":8},"end":{"line":285,"column":31}},{"start":{"line":285,"column":36},"end":{"line":285,"column":55}}],"line":285},"77":{"loc":{"start":{"line":293,"column":17},"end":{"line":293,"column":38}},"type":"binary-expr","locations":[{"start":{"line":293,"column":17},"end":{"line":293,"column":24}},{"start":{"line":293,"column":28},"end":{"line":293,"column":38}}],"line":293},"78":{"loc":{"start":{"line":297,"column":4},"end":{"line":304,"column":5}},"type":"if","locations":[{"start":{"line":297,"column":4},"end":{"line":304,"column":5}},{"start":{"line":297,"column":4},"end":{"line":304,"column":5}}],"line":297},"79":{"loc":{"start":{"line":306,"column":4},"end":{"line":312,"column":5}},"type":"if","locations":[{"start":{"line":306,"column":4},"end":{"line":312,"column":5}},{"start":{"line":306,"column":4},"end":{"line":312,"column":5}}],"line":306},"80":{"loc":{"start":{"line":315,"column":4},"end":{"line":333,"column":5}},"type":"if","locations":[{"start":{"line":315,"column":4},"end":{"line":333,"column":5}},{"start":{"line":315,"column":4},"end":{"line":333,"column":5}}],"line":315},"81":{"loc":{"start":{"line":318,"column":8},"end":{"line":319,"column":19}},"type":"if","locations":[{"start":{"line":318,"column":8},"end":{"line":319,"column":19}},{"start":{"line":318,"column":8},"end":{"line":319,"column":19}}],"line":318},"82":{"loc":{"start":{"line":321,"column":29},"end":{"line":321,"column":57}},"type":"binary-expr","locations":[{"start":{"line":321,"column":29},"end":{"line":321,"column":40}},{"start":{"line":321,"column":44},"end":{"line":321,"column":57}}],"line":321},"83":{"loc":{"start":{"line":322,"column":7},"end":{"line":328,"column":9}},"type":"if","locations":[{"start":{"line":322,"column":7},"end":{"line":328,"column":9}},{"start":{"line":322,"column":7},"end":{"line":328,"column":9}}],"line":322},"84":{"loc":{"start":{"line":323,"column":9},"end":{"line":327,"column":73}},"type":"if","locations":[{"start":{"line":323,"column":9},"end":{"line":327,"column":73}},{"start":{"line":323,"column":9},"end":{"line":327,"column":73}}],"line":323},"85":{"loc":{"start":{"line":329,"column":8},"end":{"line":331,"column":9}},"type":"if","locations":[{"start":{"line":329,"column":8},"end":{"line":331,"column":9}},{"start":{"line":329,"column":8},"end":{"line":331,"column":9}}],"line":329},"86":{"loc":{"start":{"line":341,"column":26},"end":{"line":341,"column":69}},"type":"binary-expr","locations":[{"start":{"line":341,"column":27},"end":{"line":341,"column":37}},{"start":{"line":341,"column":41},"end":{"line":341,"column":62}},{"start":{"line":341,"column":67},"end":{"line":341,"column":69}}],"line":341},"87":{"loc":{"start":{"line":347,"column":4},"end":{"line":377,"column":5}},"type":"if","locations":[{"start":{"line":347,"column":4},"end":{"line":377,"column":5}},{"start":{"line":347,"column":4},"end":{"line":377,"column":5}}],"line":347},"88":{"loc":{"start":{"line":347,"column":8},"end":{"line":347,"column":50}},"type":"binary-expr","locations":[{"start":{"line":347,"column":8},"end":{"line":347,"column":21}},{"start":{"line":347,"column":25},"end":{"line":347,"column":50}}],"line":347},"89":{"loc":{"start":{"line":351,"column":8},"end":{"line":366,"column":9}},"type":"if","locations":[{"start":{"line":351,"column":8},"end":{"line":366,"column":9}},{"start":{"line":351,"column":8},"end":{"line":366,"column":9}}],"line":351},"90":{"loc":{"start":{"line":353,"column":10},"end":{"line":358,"column":11}},"type":"if","locations":[{"start":{"line":353,"column":10},"end":{"line":358,"column":11}},{"start":{"line":353,"column":10},"end":{"line":358,"column":11}}],"line":353},"91":{"loc":{"start":{"line":353,"column":13},"end":{"line":353,"column":75}},"type":"binary-expr","locations":[{"start":{"line":353,"column":13},"end":{"line":353,"column":38}},{"start":{"line":353,"column":42},"end":{"line":353,"column":75}}],"line":353},"92":{"loc":{"start":{"line":362,"column":23},"end":{"line":362,"column":64}},"type":"cond-expr","locations":[{"start":{"line":362,"column":33},"end":{"line":362,"column":47}},{"start":{"line":362,"column":50},"end":{"line":362,"column":64}}],"line":362},"93":{"loc":{"start":{"line":363,"column":37},"end":{"line":364,"column":24}},"type":"cond-expr","locations":[{"start":{"line":363,"column":46},"end":{"line":363,"column":73}},{"start":{"line":364,"column":12},"end":{"line":364,"column":24}}],"line":363},"94":{"loc":{"start":{"line":368,"column":8},"end":{"line":374,"column":9}},"type":"if","locations":[{"start":{"line":368,"column":8},"end":{"line":374,"column":9}},{"start":{"line":368,"column":8},"end":{"line":374,"column":9}}],"line":368},"95":{"loc":{"start":{"line":369,"column":10},"end":{"line":373,"column":11}},"type":"if","locations":[{"start":{"line":369,"column":10},"end":{"line":373,"column":11}},{"start":{"line":369,"column":10},"end":{"line":373,"column":11}}],"line":369},"96":{"loc":{"start":{"line":381,"column":13},"end":{"line":381,"column":29}},"type":"binary-expr","locations":[{"start":{"line":381,"column":13},"end":{"line":381,"column":19}},{"start":{"line":381,"column":23},"end":{"line":381,"column":29}}],"line":381},"97":{"loc":{"start":{"line":384,"column":12},"end":{"line":384,"column":64}},"type":"binary-expr","locations":[{"start":{"line":384,"column":12},"end":{"line":384,"column":17}},{"start":{"line":384,"column":21},"end":{"line":384,"column":64}}],"line":384},"98":{"loc":{"start":{"line":397,"column":13},"end":{"line":397,"column":29}},"type":"binary-expr","locations":[{"start":{"line":397,"column":13},"end":{"line":397,"column":19}},{"start":{"line":397,"column":23},"end":{"line":397,"column":29}}],"line":397},"99":{"loc":{"start":{"line":398,"column":12},"end":{"line":398,"column":64}},"type":"binary-expr","locations":[{"start":{"line":398,"column":12},"end":{"line":398,"column":17}},{"start":{"line":398,"column":21},"end":{"line":398,"column":64}}],"line":398},"100":{"loc":{"start":{"line":414,"column":4},"end":{"line":416,"column":5}},"type":"if","locations":[{"start":{"line":414,"column":4},"end":{"line":416,"column":5}},{"start":{"line":414,"column":4},"end":{"line":416,"column":5}}],"line":414},"101":{"loc":{"start":{"line":414,"column":8},"end":{"line":414,"column":55}},"type":"binary-expr","locations":[{"start":{"line":414,"column":8},"end":{"line":414,"column":27}},{"start":{"line":414,"column":31},"end":{"line":414,"column":55}}],"line":414},"102":{"loc":{"start":{"line":418,"column":4},"end":{"line":420,"column":5}},"type":"if","locations":[{"start":{"line":418,"column":4},"end":{"line":420,"column":5}},{"start":{"line":418,"column":4},"end":{"line":420,"column":5}}],"line":418},"103":{"loc":{"start":{"line":418,"column":8},"end":{"line":418,"column":58}},"type":"binary-expr","locations":[{"start":{"line":418,"column":8},"end":{"line":418,"column":27}},{"start":{"line":418,"column":31},"end":{"line":418,"column":58}}],"line":418},"104":{"loc":{"start":{"line":422,"column":4},"end":{"line":439,"column":5}},"type":"if","locations":[{"start":{"line":422,"column":4},"end":{"line":439,"column":5}},{"start":{"line":422,"column":4},"end":{"line":439,"column":5}}],"line":422},"105":{"loc":{"start":{"line":422,"column":8},"end":{"line":422,"column":57}},"type":"binary-expr","locations":[{"start":{"line":422,"column":8},"end":{"line":422,"column":27}},{"start":{"line":422,"column":31},"end":{"line":422,"column":57}}],"line":422},"106":{"loc":{"start":{"line":455,"column":4},"end":{"line":461,"column":5}},"type":"if","locations":[{"start":{"line":455,"column":4},"end":{"line":461,"column":5}},{"start":{"line":455,"column":4},"end":{"line":461,"column":5}}],"line":455},"107":{"loc":{"start":{"line":458,"column":11},"end":{"line":461,"column":5}},"type":"if","locations":[{"start":{"line":458,"column":11},"end":{"line":461,"column":5}},{"start":{"line":458,"column":11},"end":{"line":461,"column":5}}],"line":458},"108":{"loc":{"start":{"line":462,"column":4},"end":{"line":464,"column":5}},"type":"if","locations":[{"start":{"line":462,"column":4},"end":{"line":464,"column":5}},{"start":{"line":462,"column":4},"end":{"line":464,"column":5}}],"line":462},"109":{"loc":{"start":{"line":470,"column":6},"end":{"line":470,"column":35}},"type":"if","locations":[{"start":{"line":470,"column":6},"end":{"line":470,"column":35}},{"start":{"line":470,"column":6},"end":{"line":470,"column":35}}],"line":470},"110":{"loc":{"start":{"line":475,"column":6},"end":{"line":475,"column":37}},"type":"if","locations":[{"start":{"line":475,"column":6},"end":{"line":475,"column":37}},{"start":{"line":475,"column":6},"end":{"line":475,"column":37}}],"line":475},"111":{"loc":{"start":{"line":477,"column":6},"end":{"line":479,"column":7}},"type":"if","locations":[{"start":{"line":477,"column":6},"end":{"line":479,"column":7}},{"start":{"line":477,"column":6},"end":{"line":479,"column":7}}],"line":477},"112":{"loc":{"start":{"line":483,"column":6},"end":{"line":483,"column":37}},"type":"if","locations":[{"start":{"line":483,"column":6},"end":{"line":483,"column":37}},{"start":{"line":483,"column":6},"end":{"line":483,"column":37}}],"line":483},"113":{"loc":{"start":{"line":485,"column":6},"end":{"line":487,"column":7}},"type":"if","locations":[{"start":{"line":485,"column":6},"end":{"line":487,"column":7}},{"start":{"line":485,"column":6},"end":{"line":487,"column":7}}],"line":485},"114":{"loc":{"start":{"line":493,"column":6},"end":{"line":495,"column":7}},"type":"if","locations":[{"start":{"line":493,"column":6},"end":{"line":495,"column":7}},{"start":{"line":493,"column":6},"end":{"line":495,"column":7}}],"line":493},"115":{"loc":{"start":{"line":508,"column":6},"end":{"line":511,"column":9}},"type":"if","locations":[{"start":{"line":508,"column":6},"end":{"line":511,"column":9}},{"start":{"line":508,"column":6},"end":{"line":511,"column":9}}],"line":508},"116":{"loc":{"start":{"line":510,"column":8},"end":{"line":510,"column":28}},"type":"binary-expr","locations":[{"start":{"line":510,"column":8},"end":{"line":510,"column":10}},{"start":{"line":510,"column":14},"end":{"line":510,"column":28}}],"line":510},"117":{"loc":{"start":{"line":514,"column":4},"end":{"line":518,"column":5}},"type":"if","locations":[{"start":{"line":514,"column":4},"end":{"line":518,"column":5}},{"start":{"line":514,"column":4},"end":{"line":518,"column":5}}],"line":514},"118":{"loc":{"start":{"line":524,"column":4},"end":{"line":524,"column":36}},"type":"if","locations":[{"start":{"line":524,"column":4},"end":{"line":524,"column":36}},{"start":{"line":524,"column":4},"end":{"line":524,"column":36}}],"line":524},"119":{"loc":{"start":{"line":526,"column":4},"end":{"line":539,"column":5}},"type":"if","locations":[{"start":{"line":526,"column":4},"end":{"line":539,"column":5}},{"start":{"line":526,"column":4},"end":{"line":539,"column":5}}],"line":526},"120":{"loc":{"start":{"line":528,"column":11},"end":{"line":539,"column":5}},"type":"if","locations":[{"start":{"line":528,"column":11},"end":{"line":539,"column":5}},{"start":{"line":528,"column":11},"end":{"line":539,"column":5}}],"line":528},"121":{"loc":{"start":{"line":531,"column":6},"end":{"line":535,"column":7}},"type":"if","locations":[{"start":{"line":531,"column":6},"end":{"line":535,"column":7}},{"start":{"line":531,"column":6},"end":{"line":535,"column":7}}],"line":531},"122":{"loc":{"start":{"line":545,"column":16},"end":{"line":545,"column":51}},"type":"binary-expr","locations":[{"start":{"line":545,"column":16},"end":{"line":545,"column":25}},{"start":{"line":545,"column":29},"end":{"line":545,"column":51}}],"line":545},"123":{"loc":{"start":{"line":562,"column":8},"end":{"line":565,"column":9}},"type":"if","locations":[{"start":{"line":562,"column":8},"end":{"line":565,"column":9}},{"start":{"line":562,"column":8},"end":{"line":565,"column":9}}],"line":562},"124":{"loc":{"start":{"line":563,"column":23},"end":{"line":563,"column":60}},"type":"cond-expr","locations":[{"start":{"line":563,"column":41},"end":{"line":563,"column":43}},{"start":{"line":563,"column":46},"end":{"line":563,"column":60}}],"line":563},"125":{"loc":{"start":{"line":570,"column":8},"end":{"line":570,"column":48}},"type":"if","locations":[{"start":{"line":570,"column":8},"end":{"line":570,"column":48}},{"start":{"line":570,"column":8},"end":{"line":570,"column":48}}],"line":570},"126":{"loc":{"start":{"line":575,"column":8},"end":{"line":593,"column":9}},"type":"if","locations":[{"start":{"line":575,"column":8},"end":{"line":593,"column":9}},{"start":{"line":575,"column":8},"end":{"line":593,"column":9}}],"line":575},"127":{"loc":{"start":{"line":577,"column":10},"end":{"line":592,"column":11}},"type":"if","locations":[{"start":{"line":577,"column":10},"end":{"line":592,"column":11}},{"start":{"line":577,"column":10},"end":{"line":592,"column":11}}],"line":577},"128":{"loc":{"start":{"line":579,"column":12},"end":{"line":581,"column":13}},"type":"if","locations":[{"start":{"line":579,"column":12},"end":{"line":581,"column":13}},{"start":{"line":579,"column":12},"end":{"line":581,"column":13}}],"line":579},"129":{"loc":{"start":{"line":583,"column":17},"end":{"line":592,"column":11}},"type":"if","locations":[{"start":{"line":583,"column":17},"end":{"line":592,"column":11}},{"start":{"line":583,"column":17},"end":{"line":592,"column":11}}],"line":583},"130":{"loc":{"start":{"line":589,"column":12},"end":{"line":591,"column":13}},"type":"if","locations":[{"start":{"line":589,"column":12},"end":{"line":591,"column":13}},{"start":{"line":589,"column":12},"end":{"line":591,"column":13}}],"line":589},"131":{"loc":{"start":{"line":595,"column":28},"end":{"line":595,"column":51}},"type":"binary-expr","locations":[{"start":{"line":595,"column":28},"end":{"line":595,"column":45}},{"start":{"line":595,"column":49},"end":{"line":595,"column":51}}],"line":595},"132":{"loc":{"start":{"line":596,"column":29},"end":{"line":596,"column":79}},"type":"binary-expr","locations":[{"start":{"line":596,"column":29},"end":{"line":596,"column":39}},{"start":{"line":596,"column":43},"end":{"line":596,"column":79}}],"line":596},"133":{"loc":{"start":{"line":599,"column":8},"end":{"line":607,"column":9}},"type":"if","locations":[{"start":{"line":599,"column":8},"end":{"line":607,"column":9}},{"start":{"line":599,"column":8},"end":{"line":607,"column":9}}],"line":599},"134":{"loc":{"start":{"line":610,"column":6},"end":{"line":613,"column":7}},"type":"if","locations":[{"start":{"line":610,"column":6},"end":{"line":613,"column":7}},{"start":{"line":610,"column":6},"end":{"line":613,"column":7}}],"line":610},"135":{"loc":{"start":{"line":619,"column":6},"end":{"line":627,"column":7}},"type":"if","locations":[{"start":{"line":619,"column":6},"end":{"line":627,"column":7}},{"start":{"line":619,"column":6},"end":{"line":627,"column":7}}],"line":619},"136":{"loc":{"start":{"line":621,"column":8},"end":{"line":623,"column":9}},"type":"if","locations":[{"start":{"line":621,"column":8},"end":{"line":623,"column":9}},{"start":{"line":621,"column":8},"end":{"line":623,"column":9}}],"line":621},"137":{"loc":{"start":{"line":629,"column":6},"end":{"line":632,"column":7}},"type":"if","locations":[{"start":{"line":629,"column":6},"end":{"line":632,"column":7}},{"start":{"line":629,"column":6},"end":{"line":632,"column":7}}],"line":629},"138":{"loc":{"start":{"line":630,"column":8},"end":{"line":631,"column":47}},"type":"if","locations":[{"start":{"line":630,"column":8},"end":{"line":631,"column":47}},{"start":{"line":630,"column":8},"end":{"line":631,"column":47}}],"line":630},"139":{"loc":{"start":{"line":637,"column":20},"end":{"line":637,"column":75}},"type":"binary-expr","locations":[{"start":{"line":637,"column":20},"end":{"line":637,"column":30}},{"start":{"line":637,"column":34},"end":{"line":637,"column":75}}],"line":637},"140":{"loc":{"start":{"line":647,"column":6},"end":{"line":649,"column":7}},"type":"if","locations":[{"start":{"line":647,"column":6},"end":{"line":649,"column":7}},{"start":{"line":647,"column":6},"end":{"line":649,"column":7}}],"line":647},"141":{"loc":{"start":{"line":650,"column":6},"end":{"line":664,"column":7}},"type":"if","locations":[{"start":{"line":650,"column":6},"end":{"line":664,"column":7}},{"start":{"line":650,"column":6},"end":{"line":664,"column":7}}],"line":650},"142":{"loc":{"start":{"line":651,"column":8},"end":{"line":663,"column":9}},"type":"if","locations":[{"start":{"line":651,"column":8},"end":{"line":663,"column":9}},{"start":{"line":651,"column":8},"end":{"line":663,"column":9}}],"line":651},"143":{"loc":{"start":{"line":651,"column":12},"end":{"line":651,"column":71}},"type":"binary-expr","locations":[{"start":{"line":651,"column":12},"end":{"line":651,"column":42}},{"start":{"line":651,"column":46},"end":{"line":651,"column":71}}],"line":651},"144":{"loc":{"start":{"line":654,"column":10},"end":{"line":660,"column":11}},"type":"if","locations":[{"start":{"line":654,"column":10},"end":{"line":660,"column":11}},{"start":{"line":654,"column":10},"end":{"line":660,"column":11}}],"line":654},"145":{"loc":{"start":{"line":665,"column":6},"end":{"line":667,"column":7}},"type":"if","locations":[{"start":{"line":665,"column":6},"end":{"line":667,"column":7}},{"start":{"line":665,"column":6},"end":{"line":667,"column":7}}],"line":665},"146":{"loc":{"start":{"line":671,"column":13},"end":{"line":671,"column":32}},"type":"binary-expr","locations":[{"start":{"line":671,"column":13},"end":{"line":671,"column":17}},{"start":{"line":671,"column":21},"end":{"line":671,"column":32}}],"line":671},"147":{"loc":{"start":{"line":672,"column":6},"end":{"line":673,"column":15}},"type":"if","locations":[{"start":{"line":672,"column":6},"end":{"line":673,"column":15}},{"start":{"line":672,"column":6},"end":{"line":673,"column":15}}],"line":672},"148":{"loc":{"start":{"line":675,"column":6},"end":{"line":677,"column":7}},"type":"if","locations":[{"start":{"line":675,"column":6},"end":{"line":677,"column":7}},{"start":{"line":675,"column":6},"end":{"line":677,"column":7}}],"line":675},"149":{"loc":{"start":{"line":688,"column":13},"end":{"line":688,"column":32}},"type":"binary-expr","locations":[{"start":{"line":688,"column":13},"end":{"line":688,"column":17}},{"start":{"line":688,"column":21},"end":{"line":688,"column":32}}],"line":688},"150":{"loc":{"start":{"line":689,"column":6},"end":{"line":690,"column":15}},"type":"if","locations":[{"start":{"line":689,"column":6},"end":{"line":690,"column":15}},{"start":{"line":689,"column":6},"end":{"line":690,"column":15}}],"line":689},"151":{"loc":{"start":{"line":703,"column":8},"end":{"line":705,"column":9}},"type":"if","locations":[{"start":{"line":703,"column":8},"end":{"line":705,"column":9}},{"start":{"line":703,"column":8},"end":{"line":705,"column":9}}],"line":703},"152":{"loc":{"start":{"line":717,"column":4},"end":{"line":737,"column":5}},"type":"if","locations":[{"start":{"line":717,"column":4},"end":{"line":737,"column":5}},{"start":{"line":717,"column":4},"end":{"line":737,"column":5}}],"line":717},"153":{"loc":{"start":{"line":719,"column":6},"end":{"line":735,"column":7}},"type":"if","locations":[{"start":{"line":719,"column":6},"end":{"line":735,"column":7}},{"start":{"line":719,"column":6},"end":{"line":735,"column":7}}],"line":719},"154":{"loc":{"start":{"line":719,"column":10},"end":{"line":719,"column":73}},"type":"binary-expr","locations":[{"start":{"line":719,"column":10},"end":{"line":719,"column":42}},{"start":{"line":719,"column":46},"end":{"line":719,"column":73}}],"line":719},"155":{"loc":{"start":{"line":720,"column":8},"end":{"line":734,"column":9}},"type":"if","locations":[{"start":{"line":720,"column":8},"end":{"line":734,"column":9}},{"start":{"line":720,"column":8},"end":{"line":734,"column":9}}],"line":720},"156":{"loc":{"start":{"line":720,"column":12},"end":{"line":720,"column":59}},"type":"binary-expr","locations":[{"start":{"line":720,"column":12},"end":{"line":720,"column":36}},{"start":{"line":720,"column":40},"end":{"line":720,"column":59}}],"line":720},"157":{"loc":{"start":{"line":724,"column":10},"end":{"line":726,"column":11}},"type":"if","locations":[{"start":{"line":724,"column":10},"end":{"line":726,"column":11}},{"start":{"line":724,"column":10},"end":{"line":726,"column":11}}],"line":724},"158":{"loc":{"start":{"line":728,"column":10},"end":{"line":730,"column":11}},"type":"if","locations":[{"start":{"line":728,"column":10},"end":{"line":730,"column":11}},{"start":{"line":728,"column":10},"end":{"line":730,"column":11}}],"line":728},"159":{"loc":{"start":{"line":745,"column":18},"end":{"line":746,"column":35}},"type":"binary-expr","locations":[{"start":{"line":745,"column":18},"end":{"line":745,"column":56}},{"start":{"line":746,"column":4},"end":{"line":746,"column":35}}],"line":745},"160":{"loc":{"start":{"line":747,"column":2},"end":{"line":772,"column":3}},"type":"if","locations":[{"start":{"line":747,"column":2},"end":{"line":772,"column":3}},{"start":{"line":747,"column":2},"end":{"line":772,"column":3}}],"line":747},"161":{"loc":{"start":{"line":750,"column":4},"end":{"line":752,"column":5}},"type":"if","locations":[{"start":{"line":750,"column":4},"end":{"line":752,"column":5}},{"start":{"line":750,"column":4},"end":{"line":752,"column":5}}],"line":750},"162":{"loc":{"start":{"line":753,"column":22},"end":{"line":754,"column":39}},"type":"binary-expr","locations":[{"start":{"line":753,"column":22},"end":{"line":753,"column":62}},{"start":{"line":754,"column":6},"end":{"line":754,"column":39}}],"line":753},"163":{"loc":{"start":{"line":755,"column":4},"end":{"line":757,"column":5}},"type":"if","locations":[{"start":{"line":755,"column":4},"end":{"line":757,"column":5}},{"start":{"line":755,"column":4},"end":{"line":757,"column":5}}],"line":755},"164":{"loc":{"start":{"line":755,"column":8},"end":{"line":755,"column":55}},"type":"binary-expr","locations":[{"start":{"line":755,"column":8},"end":{"line":755,"column":19}},{"start":{"line":755,"column":24},"end":{"line":755,"column":54}}],"line":755},"165":{"loc":{"start":{"line":758,"column":21},"end":{"line":759,"column":38}},"type":"binary-expr","locations":[{"start":{"line":758,"column":21},"end":{"line":758,"column":60}},{"start":{"line":759,"column":6},"end":{"line":759,"column":38}}],"line":758},"166":{"loc":{"start":{"line":760,"column":4},"end":{"line":762,"column":5}},"type":"if","locations":[{"start":{"line":760,"column":4},"end":{"line":762,"column":5}},{"start":{"line":760,"column":4},"end":{"line":762,"column":5}}],"line":760},"167":{"loc":{"start":{"line":760,"column":8},"end":{"line":760,"column":53}},"type":"binary-expr","locations":[{"start":{"line":760,"column":8},"end":{"line":760,"column":18}},{"start":{"line":760,"column":23},"end":{"line":760,"column":52}}],"line":760},"168":{"loc":{"start":{"line":763,"column":17},"end":{"line":764,"column":34}},"type":"binary-expr","locations":[{"start":{"line":763,"column":17},"end":{"line":763,"column":52}},{"start":{"line":764,"column":6},"end":{"line":764,"column":34}}],"line":763},"169":{"loc":{"start":{"line":765,"column":4},"end":{"line":771,"column":5}},"type":"if","locations":[{"start":{"line":765,"column":4},"end":{"line":771,"column":5}},{"start":{"line":765,"column":4},"end":{"line":771,"column":5}}],"line":765},"170":{"loc":{"start":{"line":766,"column":6},"end":{"line":770,"column":7}},"type":"if","locations":[{"start":{"line":766,"column":6},"end":{"line":770,"column":7}},{"start":{"line":766,"column":6},"end":{"line":770,"column":7}}],"line":766},"171":{"loc":{"start":{"line":778,"column":13},"end":{"line":779,"column":30}},"type":"binary-expr","locations":[{"start":{"line":778,"column":13},"end":{"line":778,"column":39}},{"start":{"line":779,"column":4},"end":{"line":779,"column":30}}],"line":778},"172":{"loc":{"start":{"line":780,"column":2},"end":{"line":818,"column":3}},"type":"if","locations":[{"start":{"line":780,"column":2},"end":{"line":818,"column":3}},{"start":{"line":780,"column":2},"end":{"line":818,"column":3}}],"line":780},"173":{"loc":{"start":{"line":784,"column":16},"end":{"line":785,"column":33}},"type":"binary-expr","locations":[{"start":{"line":784,"column":16},"end":{"line":784,"column":50}},{"start":{"line":785,"column":6},"end":{"line":785,"column":33}}],"line":784},"174":{"loc":{"start":{"line":786,"column":4},"end":{"line":788,"column":5}},"type":"if","locations":[{"start":{"line":786,"column":4},"end":{"line":788,"column":5}},{"start":{"line":786,"column":4},"end":{"line":788,"column":5}}],"line":786},"175":{"loc":{"start":{"line":789,"column":18},"end":{"line":790,"column":35}},"type":"binary-expr","locations":[{"start":{"line":789,"column":18},"end":{"line":789,"column":54}},{"start":{"line":790,"column":6},"end":{"line":790,"column":35}}],"line":789},"176":{"loc":{"start":{"line":791,"column":4},"end":{"line":793,"column":5}},"type":"if","locations":[{"start":{"line":791,"column":4},"end":{"line":793,"column":5}},{"start":{"line":791,"column":4},"end":{"line":793,"column":5}}],"line":791},"177":{"loc":{"start":{"line":794,"column":17},"end":{"line":795,"column":34}},"type":"binary-expr","locations":[{"start":{"line":794,"column":17},"end":{"line":794,"column":52}},{"start":{"line":795,"column":6},"end":{"line":795,"column":34}}],"line":794},"178":{"loc":{"start":{"line":796,"column":4},"end":{"line":798,"column":5}},"type":"if","locations":[{"start":{"line":796,"column":4},"end":{"line":798,"column":5}},{"start":{"line":796,"column":4},"end":{"line":798,"column":5}}],"line":796},"179":{"loc":{"start":{"line":799,"column":15},"end":{"line":800,"column":32}},"type":"binary-expr","locations":[{"start":{"line":799,"column":15},"end":{"line":799,"column":48}},{"start":{"line":800,"column":6},"end":{"line":800,"column":32}}],"line":799},"180":{"loc":{"start":{"line":801,"column":4},"end":{"line":803,"column":5}},"type":"if","locations":[{"start":{"line":801,"column":4},"end":{"line":803,"column":5}},{"start":{"line":801,"column":4},"end":{"line":803,"column":5}}],"line":801},"181":{"loc":{"start":{"line":804,"column":15},"end":{"line":805,"column":32}},"type":"binary-expr","locations":[{"start":{"line":804,"column":15},"end":{"line":804,"column":48}},{"start":{"line":805,"column":6},"end":{"line":805,"column":32}}],"line":804},"182":{"loc":{"start":{"line":806,"column":4},"end":{"line":808,"column":5}},"type":"if","locations":[{"start":{"line":806,"column":4},"end":{"line":808,"column":5}},{"start":{"line":806,"column":4},"end":{"line":808,"column":5}}],"line":806},"183":{"loc":{"start":{"line":809,"column":17},"end":{"line":810,"column":34}},"type":"binary-expr","locations":[{"start":{"line":809,"column":17},"end":{"line":809,"column":52}},{"start":{"line":810,"column":6},"end":{"line":810,"column":34}}],"line":809},"184":{"loc":{"start":{"line":811,"column":4},"end":{"line":817,"column":5}},"type":"if","locations":[{"start":{"line":811,"column":4},"end":{"line":817,"column":5}},{"start":{"line":811,"column":4},"end":{"line":817,"column":5}}],"line":811},"185":{"loc":{"start":{"line":812,"column":6},"end":{"line":816,"column":7}},"type":"if","locations":[{"start":{"line":812,"column":6},"end":{"line":816,"column":7}},{"start":{"line":812,"column":6},"end":{"line":816,"column":7}}],"line":812},"186":{"loc":{"start":{"line":825,"column":2},"end":{"line":833,"column":3}},"type":"if","locations":[{"start":{"line":825,"column":2},"end":{"line":833,"column":3}},{"start":{"line":825,"column":2},"end":{"line":833,"column":3}}],"line":825},"187":{"loc":{"start":{"line":827,"column":9},"end":{"line":833,"column":3}},"type":"if","locations":[{"start":{"line":827,"column":9},"end":{"line":833,"column":3}},{"start":{"line":827,"column":9},"end":{"line":833,"column":3}}],"line":827},"188":{"loc":{"start":{"line":828,"column":4},"end":{"line":831,"column":5}},"type":"if","locations":[{"start":{"line":828,"column":4},"end":{"line":831,"column":5}},{"start":{"line":828,"column":4},"end":{"line":831,"column":5}}],"line":828},"189":{"loc":{"start":{"line":838,"column":2},"end":{"line":838,"column":44}},"type":"if","locations":[{"start":{"line":838,"column":2},"end":{"line":838,"column":44}},{"start":{"line":838,"column":2},"end":{"line":838,"column":44}}],"line":838},"190":{"loc":{"start":{"line":840,"column":15},"end":{"line":840,"column":46}},"type":"binary-expr","locations":[{"start":{"line":840,"column":15},"end":{"line":840,"column":25}},{"start":{"line":840,"column":29},"end":{"line":840,"column":46}}],"line":840},"191":{"loc":{"start":{"line":841,"column":2},"end":{"line":858,"column":3}},"type":"if","locations":[{"start":{"line":841,"column":2},"end":{"line":858,"column":3}},{"start":{"line":841,"column":2},"end":{"line":858,"column":3}}],"line":841},"192":{"loc":{"start":{"line":846,"column":4},"end":{"line":848,"column":5}},"type":"if","locations":[{"start":{"line":846,"column":4},"end":{"line":848,"column":5}},{"start":{"line":846,"column":4},"end":{"line":848,"column":5}}],"line":846},"193":{"loc":{"start":{"line":850,"column":9},"end":{"line":858,"column":3}},"type":"if","locations":[{"start":{"line":850,"column":9},"end":{"line":858,"column":3}},{"start":{"line":850,"column":9},"end":{"line":858,"column":3}}],"line":850},"194":{"loc":{"start":{"line":851,"column":4},"end":{"line":855,"column":5}},"type":"if","locations":[{"start":{"line":851,"column":4},"end":{"line":855,"column":5}},{"start":{"line":851,"column":4},"end":{"line":855,"column":5}}],"line":851},"195":{"loc":{"start":{"line":851,"column":8},"end":{"line":851,"column":39}},"type":"binary-expr","locations":[{"start":{"line":851,"column":8},"end":{"line":851,"column":23}},{"start":{"line":851,"column":27},"end":{"line":851,"column":39}}],"line":851},"196":{"loc":{"start":{"line":856,"column":9},"end":{"line":858,"column":3}},"type":"if","locations":[{"start":{"line":856,"column":9},"end":{"line":858,"column":3}},{"start":{"line":856,"column":9},"end":{"line":858,"column":3}}],"line":856},"197":{"loc":{"start":{"line":881,"column":2},"end":{"line":881,"column":50}},"type":"if","locations":[{"start":{"line":881,"column":2},"end":{"line":881,"column":50}},{"start":{"line":881,"column":2},"end":{"line":881,"column":50}}],"line":881},"198":{"loc":{"start":{"line":881,"column":6},"end":{"line":881,"column":37}},"type":"binary-expr","locations":[{"start":{"line":881,"column":6},"end":{"line":881,"column":17}},{"start":{"line":881,"column":21},"end":{"line":881,"column":37}}],"line":881},"199":{"loc":{"start":{"line":882,"column":2},"end":{"line":888,"column":3}},"type":"if","locations":[{"start":{"line":882,"column":2},"end":{"line":888,"column":3}},{"start":{"line":882,"column":2},"end":{"line":888,"column":3}}],"line":882},"200":{"loc":{"start":{"line":884,"column":9},"end":{"line":888,"column":3}},"type":"if","locations":[{"start":{"line":884,"column":9},"end":{"line":888,"column":3}},{"start":{"line":884,"column":9},"end":{"line":888,"column":3}}],"line":884},"201":{"loc":{"start":{"line":886,"column":9},"end":{"line":888,"column":3}},"type":"if","locations":[{"start":{"line":886,"column":9},"end":{"line":888,"column":3}},{"start":{"line":886,"column":9},"end":{"line":888,"column":3}}],"line":886}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":228,"14":228,"15":228,"16":228,"17":228,"18":228,"19":806,"20":0,"21":806,"22":5,"23":806,"24":806,"25":49,"26":49,"27":49,"28":48,"29":1,"30":1,"31":1,"32":1,"33":1,"34":49,"35":757,"36":632,"37":632,"38":632,"39":632,"40":92,"41":29,"42":29,"43":29,"44":49,"45":29,"46":603,"47":300,"48":50,"49":300,"50":19,"51":603,"52":194,"53":194,"54":194,"55":409,"56":409,"57":409,"58":409,"59":409,"60":409,"61":208,"62":208,"63":409,"64":409,"65":409,"66":208,"67":603,"68":1,"69":1,"70":1,"71":1,"72":602,"73":1,"74":1,"75":1,"76":1,"77":601,"78":49,"79":49,"80":49,"81":49,"82":34,"83":34,"84":34,"85":587,"86":587,"87":589,"88":208,"89":208,"90":589,"91":5,"92":3,"93":3,"94":3,"95":589,"96":231,"97":17,"98":17,"99":231,"100":231,"101":231,"102":358,"103":356,"104":356,"105":31,"106":44,"107":44,"108":15,"109":15,"110":11,"111":11,"112":7,"113":7,"114":6,"115":358,"116":76,"117":76,"118":76,"119":2,"120":76,"121":76,"122":76,"123":282,"124":268,"125":268,"126":268,"127":125,"128":125,"129":111,"130":0,"131":405,"132":31,"133":44,"134":44,"135":15,"136":13,"137":2,"138":15,"139":15,"140":7,"141":7,"142":15,"143":405,"144":258,"145":258,"146":50,"147":258,"148":258,"149":32,"150":258,"151":405,"152":405,"153":233,"154":233,"155":25,"156":233,"157":405,"158":407,"159":2,"160":405,"161":0,"162":0,"163":0,"164":405,"165":405,"166":405,"167":405,"168":405,"169":405,"170":401,"171":401,"172":401,"173":991,"174":991,"175":991,"176":991,"177":405,"178":401,"179":60,"180":60,"181":60,"182":405,"183":405,"184":405,"185":564,"186":31,"187":533,"188":533,"189":533,"190":66,"191":0,"192":66,"193":533,"194":533,"195":377,"196":377,"197":396,"198":396,"199":396,"200":396,"201":69,"202":69,"203":396,"204":50,"205":65,"206":65,"207":16,"208":13,"209":3,"210":16,"211":16,"212":16,"213":16,"214":16,"215":49,"216":49,"217":11,"218":0,"219":11,"220":49,"221":26,"222":26,"223":26,"224":26,"225":26,"226":26,"227":26,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":6,"253":6,"254":6,"255":6,"256":6,"257":0,"258":0,"259":0,"260":6,"261":0,"262":6,"263":6,"264":6,"265":0,"266":0,"267":6,"268":11,"269":0,"270":11,"271":11,"272":9,"273":6,"274":0,"275":0,"276":0,"277":0,"278":0,"279":6,"280":28,"281":28,"282":28,"283":28,"284":28,"285":6,"286":28,"287":28,"288":28,"289":28,"290":6,"291":6,"292":0,"293":0,"294":6,"295":6,"296":0,"297":6,"298":699,"299":0,"300":699,"301":252,"302":447,"303":447,"304":447,"305":410,"306":37,"307":0,"308":149,"309":149,"310":149,"311":149,"312":149,"313":149,"314":149,"315":149,"316":978,"317":978,"318":978,"319":978,"320":978,"321":978,"322":978,"323":978,"324":508,"325":392,"326":392,"327":978,"328":508,"329":392,"330":116,"331":116,"332":116,"333":116,"334":116,"335":27,"336":10,"337":10,"338":10,"339":17,"340":17,"341":17,"342":17,"343":17,"344":17,"345":17,"346":106,"347":106,"348":106,"349":106,"350":106,"351":17,"352":17,"353":17,"354":17,"355":89,"356":978,"357":83,"358":83,"359":978,"360":978,"361":978,"362":0,"363":0,"364":0,"365":0,"366":978,"367":978,"368":1,"369":1,"370":978,"371":149,"372":977,"373":977,"374":977,"375":977,"376":977,"377":538,"378":977,"379":977,"380":13,"381":13,"382":0,"383":13,"384":964,"385":977,"386":1,"387":149,"388":2,"389":2,"390":0,"391":2,"392":1,"393":2,"394":149,"395":2,"396":2,"397":149,"398":2007,"399":2007,"400":1310,"401":697,"402":697,"403":697,"404":697,"405":149,"406":142,"407":0,"408":0,"409":0,"410":142,"411":1,"412":1,"413":1,"414":0,"415":142,"416":137,"417":137,"418":137,"419":18,"420":18,"421":12,"422":18,"423":0,"424":18,"425":18,"426":18,"427":119,"428":5,"429":18,"430":18,"431":18,"432":6,"433":6,"434":6,"435":6,"436":6,"437":6,"438":6,"439":6,"440":0,"441":6,"442":6,"443":5,"444":1,"445":4,"446":18,"447":12,"448":12,"449":12,"450":12,"451":12,"452":12,"453":12,"454":0,"455":12,"456":12,"457":0,"458":12,"459":12,"460":12,"461":12,"462":12,"463":5,"464":12,"465":12,"466":5,"467":12,"468":12,"469":9,"470":0,"471":9,"472":12,"473":244,"474":244,"475":0,"476":244,"477":36,"478":36,"479":36,"480":208,"481":813,"482":0,"483":813,"484":813,"485":813,"486":6,"487":6,"488":2,"489":6,"490":807,"491":33,"492":11,"493":22,"494":774,"495":49,"496":813,"497":3,"498":3,"499":3,"500":3,"501":3,"502":3,"503":4,"504":4,"505":4,"506":713,"507":316,"508":397,"509":1,"510":396,"511":1,"512":395,"513":2,"514":397,"515":1,"516":1,"517":1,"518":1,"519":1},"f":{"0":228,"1":806,"2":405,"3":405,"4":258,"5":233,"6":407,"7":396,"8":26,"9":0,"10":6,"11":0,"12":11,"13":0,"14":28,"15":28,"16":6,"17":0,"18":699,"19":149,"20":978,"21":977,"22":2,"23":2,"24":2007,"25":0,"26":18,"27":12,"28":244,"29":813,"30":3,"31":3,"32":4,"33":713},"b":{"0":[228,0],"1":[228,0],"2":[228,189],"3":[228,190],"4":[228,189],"5":[228,228],"6":[0,806],"7":[5,801],"8":[49,757],"9":[48,1],"10":[1,0],"11":[1,0],"12":[1,0],"13":[632,125],"14":[92,540],"15":[29,63],"16":[300,303],"17":[603,600],"18":[50,250],"19":[19,281],"20":[194,409],"21":[409,0],"22":[208,201],"23":[409,201],"24":[409,0],"25":[409,0],"26":[208,201],"27":[208,0],"28":[1,602],"29":[603,245],"30":[1,601],"31":[602,244,243,241],"32":[49,552],"33":[601,49],"34":[49,0],"35":[34,15],"36":[34,0],"37":[229,358],"38":[208,381],"39":[589,208],"40":[208,0],"41":[5,584],"42":[3,2],"43":[3,0],"44":[231,358],"45":[17,214],"46":[17,0],"47":[231,0],"48":[356,2],"49":[31,325],"50":[15,29],"51":[15,0],"52":[11,4],"53":[11,0],"54":[7,4],"55":[6,1],"56":[76,282],"57":[358,356,280],"58":[2,74],"59":[76,0],"60":[268,0],"61":[125,0],"62":[125,121,121],"63":[31,374],"64":[405,31],"65":[15,29],"66":[13,2],"67":[15,13],"68":[7,8],"69":[7,0],"70":[7,7],"71":[50,208],"72":[32,226],"73":[25,208],"74":[2,405],"75":[0,405],"76":[405,405],"77":[405,398],"78":[401,4],"79":[401,4],"80":[405,0],"81":[31,533],"82":[533,66],"83":[66,467],"84":[0,66],"85":[533,0],"86":[396,392,4],"87":[50,346],"88":[396,50],"89":[16,49],"90":[13,3],"91":[16,13],"92":[16,0],"93":[16,0],"94":[11,38],"95":[0,11],"96":[26,0],"97":[26,0],"98":[0,0],"99":[0,0],"100":[0,0],"101":[0,0],"102":[0,0],"103":[0,0],"104":[0,0],"105":[0,0],"106":[6,0],"107":[0,0],"108":[0,6],"109":[0,0],"110":[0,11],"111":[9,2],"112":[0,0],"113":[0,0],"114":[28,0],"115":[0,6],"116":[0,0],"117":[6,0],"118":[0,699],"119":[252,447],"120":[447,0],"121":[410,37],"122":[149,31],"123":[392,116],"124":[31,361],"125":[392,116],"126":[27,89],"127":[10,17],"128":[10,0],"129":[17,0],"130":[17,0],"131":[106,83],"132":[106,76],"133":[17,89],"134":[83,895],"135":[0,978],"136":[0,0],"137":[1,977],"138":[1,0],"139":[978,672],"140":[538,439],"141":[977,0],"142":[13,964],"143":[977,977],"144":[0,13],"145":[1,976],"146":[2,2],"147":[0,2],"148":[1,1],"149":[2007,2007],"150":[1310,697],"151":[0,0],"152":[137,5],"153":[137,0],"154":[137,137],"155":[18,119],"156":[137,18],"157":[12,6],"158":[0,18],"159":[18,17],"160":[6,12],"161":[6,0],"162":[6,5],"163":[6,0],"164":[6,6],"165":[6,6],"166":[0,6],"167":[6,1],"168":[6,5],"169":[5,1],"170":[1,4],"171":[12,0],"172":[12,0],"173":[12,12],"174":[0,12],"175":[12,12],"176":[0,12],"177":[12,12],"178":[12,0],"179":[12,12],"180":[5,7],"181":[12,12],"182":[5,7],"183":[12,12],"184":[9,3],"185":[0,9],"186":[0,244],"187":[36,208],"188":[36,0],"189":[0,813],"190":[813,554],"191":[6,807],"192":[2,4],"193":[33,774],"194":[11,22],"195":[33,23],"196":[49,725],"197":[316,397],"198":[713,713],"199":[1,396],"200":[1,395],"201":[2,393]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"36a9f73b420053b9db9c5185d696f97825887ae2","contentHash":"f151998e5c3112cc94131b1ee2bbe1e6b4aa71092ce1cc15ee6c435a86a3ac9a"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/descriptor.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/descriptor.js","statementMap":{"0":{"start":{"line":8,"column":13},"end":{"line":8,"column":30}},"1":{"start":{"line":9,"column":12},"end":{"line":9,"column":31}},"2":{"start":{"line":16,"column":4},"end":{"line":16,"column":79}},"3":{"start":{"line":17,"column":4},"end":{"line":17,"column":23}},"4":{"start":{"line":18,"column":4},"end":{"line":18,"column":21}},"5":{"start":{"line":19,"column":4},"end":{"line":19,"column":31}},"6":{"start":{"line":20,"column":4},"end":{"line":21,"column":31}},"7":{"start":{"line":22,"column":4},"end":{"line":22,"column":21}},"8":{"start":{"line":31,"column":4},"end":{"line":31,"column":23}},"9":{"start":{"line":32,"column":4},"end":{"line":32,"column":25}},"10":{"start":{"line":36,"column":4},"end":{"line":36,"column":49}},"11":{"start":{"line":37,"column":4},"end":{"line":37,"column":32}},"12":{"start":{"line":38,"column":4},"end":{"line":38,"column":19}},"13":{"start":{"line":42,"column":4},"end":{"line":42,"column":53}},"14":{"start":{"line":43,"column":4},"end":{"line":43,"column":36}},"15":{"start":{"line":44,"column":4},"end":{"line":44,"column":21}},"16":{"start":{"line":48,"column":4},"end":{"line":63,"column":5}},"17":{"start":{"line":49,"column":6},"end":{"line":49,"column":42}},"18":{"start":{"line":50,"column":11},"end":{"line":63,"column":5}},"19":{"start":{"line":51,"column":6},"end":{"line":51,"column":30}},"20":{"start":{"line":52,"column":11},"end":{"line":63,"column":5}},"21":{"start":{"line":54,"column":6},"end":{"line":56,"column":7}},"22":{"start":{"line":55,"column":8},"end":{"line":55,"column":42}},"23":{"start":{"line":57,"column":6},"end":{"line":59,"column":7}},"24":{"start":{"line":58,"column":8},"end":{"line":58,"column":46}},"25":{"start":{"line":60,"column":6},"end":{"line":62,"column":7}},"26":{"start":{"line":61,"column":10},"end":{"line":61,"column":42}},"27":{"start":{"line":67,"column":4},"end":{"line":71,"column":5}},"28":{"start":{"line":67,"column":17},"end":{"line":67,"column":18}},"29":{"start":{"line":67,"column":24},"end":{"line":67,"column":44}},"30":{"start":{"line":68,"column":6},"end":{"line":70,"column":7}},"31":{"start":{"line":69,"column":8},"end":{"line":69,"column":32}},"32":{"start":{"line":72,"column":4},"end":{"line":72,"column":16}},"33":{"start":{"line":76,"column":4},"end":{"line":80,"column":5}},"34":{"start":{"line":76,"column":17},"end":{"line":76,"column":18}},"35":{"start":{"line":76,"column":24},"end":{"line":76,"column":46}},"36":{"start":{"line":77,"column":6},"end":{"line":79,"column":7}},"37":{"start":{"line":78,"column":8},"end":{"line":78,"column":34}},"38":{"start":{"line":81,"column":4},"end":{"line":81,"column":16}},"39":{"start":{"line":85,"column":18},"end":{"line":85,"column":40}},"40":{"start":{"line":86,"column":4},"end":{"line":86,"column":32}},"41":{"start":{"line":86,"column":17},"end":{"line":86,"column":32}},"42":{"start":{"line":87,"column":20},"end":{"line":87,"column":44}},"43":{"start":{"line":88,"column":4},"end":{"line":88,"column":21}},"44":{"start":{"line":97,"column":4},"end":{"line":97,"column":12}},"45":{"start":{"line":98,"column":4},"end":{"line":98,"column":79}},"46":{"start":{"line":99,"column":4},"end":{"line":99,"column":23}},"47":{"start":{"line":100,"column":4},"end":{"line":100,"column":21}},"48":{"start":{"line":101,"column":4},"end":{"line":101,"column":31}},"49":{"start":{"line":102,"column":4},"end":{"line":103,"column":31}},"50":{"start":{"line":104,"column":4},"end":{"line":104,"column":21}},"51":{"start":{"line":105,"column":4},"end":{"line":105,"column":27}},"52":{"start":{"line":106,"column":4},"end":{"line":106,"column":26}},"53":{"start":{"line":111,"column":4},"end":{"line":111,"column":39}},"54":{"start":{"line":112,"column":15},"end":{"line":112,"column":78}},"55":{"start":{"line":113,"column":4},"end":{"line":113,"column":38}},"56":{"start":{"line":114,"column":4},"end":{"line":114,"column":34}},"57":{"start":{"line":115,"column":4},"end":{"line":115,"column":47}},"58":{"start":{"line":115,"column":21},"end":{"line":115,"column":47}},"59":{"start":{"line":116,"column":4},"end":{"line":116,"column":61}},"60":{"start":{"line":116,"column":31},"end":{"line":116,"column":61}},"61":{"start":{"line":117,"column":4},"end":{"line":117,"column":67}},"62":{"start":{"line":117,"column":33},"end":{"line":117,"column":67}},"63":{"start":{"line":118,"column":4},"end":{"line":118,"column":52}},"64":{"start":{"line":118,"column":28},"end":{"line":118,"column":52}},"65":{"start":{"line":119,"column":4},"end":{"line":119,"column":28}},"66":{"start":{"line":120,"column":4},"end":{"line":120,"column":16}},"67":{"start":{"line":124,"column":0},"end":{"line":128,"column":2}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":15,"column":2},"end":{"line":15,"column":3}},"loc":{"start":{"line":15,"column":33},"end":{"line":23,"column":3}},"line":15},"1":{"name":"(anonymous_1)","decl":{"start":{"line":30,"column":2},"end":{"line":30,"column":3}},"loc":{"start":{"line":30,"column":21},"end":{"line":33,"column":3}},"line":30},"2":{"name":"(anonymous_2)","decl":{"start":{"line":35,"column":2},"end":{"line":35,"column":3}},"loc":{"start":{"line":35,"column":22},"end":{"line":39,"column":3}},"line":35},"3":{"name":"(anonymous_3)","decl":{"start":{"line":41,"column":2},"end":{"line":41,"column":3}},"loc":{"start":{"line":41,"column":26},"end":{"line":45,"column":3}},"line":41},"4":{"name":"(anonymous_4)","decl":{"start":{"line":47,"column":2},"end":{"line":47,"column":3}},"loc":{"start":{"line":47,"column":20},"end":{"line":64,"column":3}},"line":47},"5":{"name":"(anonymous_5)","decl":{"start":{"line":66,"column":2},"end":{"line":66,"column":3}},"loc":{"start":{"line":66,"column":20},"end":{"line":73,"column":3}},"line":66},"6":{"name":"(anonymous_6)","decl":{"start":{"line":75,"column":2},"end":{"line":75,"column":3}},"loc":{"start":{"line":75,"column":22},"end":{"line":82,"column":3}},"line":75},"7":{"name":"(anonymous_7)","decl":{"start":{"line":84,"column":2},"end":{"line":84,"column":3}},"loc":{"start":{"line":84,"column":13},"end":{"line":89,"column":3}},"line":84},"8":{"name":"(anonymous_8)","decl":{"start":{"line":96,"column":2},"end":{"line":96,"column":3}},"loc":{"start":{"line":96,"column":41},"end":{"line":107,"column":3}},"line":96},"9":{"name":"(anonymous_9)","decl":{"start":{"line":109,"column":2},"end":{"line":109,"column":3}},"loc":{"start":{"line":109,"column":16},"end":{"line":121,"column":3}},"line":109}},"branchMap":{"0":{"loc":{"start":{"line":16,"column":11},"end":{"line":16,"column":50}},"type":"binary-expr","locations":[{"start":{"line":16,"column":11},"end":{"line":16,"column":24}},{"start":{"line":16,"column":28},"end":{"line":16,"column":50}}],"line":16},"1":{"loc":{"start":{"line":19,"column":11},"end":{"line":19,"column":30}},"type":"binary-expr","locations":[{"start":{"line":19,"column":11},"end":{"line":19,"column":15}},{"start":{"line":19,"column":19},"end":{"line":19,"column":30}}],"line":19},"2":{"loc":{"start":{"line":20,"column":11},"end":{"line":20,"column":57}},"type":"binary-expr","locations":[{"start":{"line":20,"column":11},"end":{"line":20,"column":31}},{"start":{"line":20,"column":35},"end":{"line":20,"column":57}}],"line":20},"3":{"loc":{"start":{"line":48,"column":4},"end":{"line":63,"column":5}},"type":"if","locations":[{"start":{"line":48,"column":4},"end":{"line":63,"column":5}},{"start":{"line":48,"column":4},"end":{"line":63,"column":5}}],"line":48},"4":{"loc":{"start":{"line":50,"column":11},"end":{"line":63,"column":5}},"type":"if","locations":[{"start":{"line":50,"column":11},"end":{"line":63,"column":5}},{"start":{"line":50,"column":11},"end":{"line":63,"column":5}}],"line":50},"5":{"loc":{"start":{"line":52,"column":11},"end":{"line":63,"column":5}},"type":"if","locations":[{"start":{"line":52,"column":11},"end":{"line":63,"column":5}},{"start":{"line":52,"column":11},"end":{"line":63,"column":5}}],"line":52},"6":{"loc":{"start":{"line":60,"column":6},"end":{"line":62,"column":7}},"type":"if","locations":[{"start":{"line":60,"column":6},"end":{"line":62,"column":7}},{"start":{"line":60,"column":6},"end":{"line":62,"column":7}}],"line":60},"7":{"loc":{"start":{"line":68,"column":6},"end":{"line":70,"column":7}},"type":"if","locations":[{"start":{"line":68,"column":6},"end":{"line":70,"column":7}},{"start":{"line":68,"column":6},"end":{"line":70,"column":7}}],"line":68},"8":{"loc":{"start":{"line":77,"column":6},"end":{"line":79,"column":7}},"type":"if","locations":[{"start":{"line":77,"column":6},"end":{"line":79,"column":7}},{"start":{"line":77,"column":6},"end":{"line":79,"column":7}}],"line":77},"9":{"loc":{"start":{"line":86,"column":4},"end":{"line":86,"column":32}},"type":"if","locations":[{"start":{"line":86,"column":4},"end":{"line":86,"column":32}},{"start":{"line":86,"column":4},"end":{"line":86,"column":32}}],"line":86},"10":{"loc":{"start":{"line":98,"column":11},"end":{"line":98,"column":50}},"type":"binary-expr","locations":[{"start":{"line":98,"column":11},"end":{"line":98,"column":24}},{"start":{"line":98,"column":28},"end":{"line":98,"column":50}}],"line":98},"11":{"loc":{"start":{"line":101,"column":11},"end":{"line":101,"column":30}},"type":"binary-expr","locations":[{"start":{"line":101,"column":11},"end":{"line":101,"column":15}},{"start":{"line":101,"column":19},"end":{"line":101,"column":30}}],"line":101},"12":{"loc":{"start":{"line":102,"column":11},"end":{"line":102,"column":57}},"type":"binary-expr","locations":[{"start":{"line":102,"column":11},"end":{"line":102,"column":31}},{"start":{"line":102,"column":35},"end":{"line":102,"column":57}}],"line":102},"13":{"loc":{"start":{"line":111,"column":13},"end":{"line":111,"column":38}},"type":"binary-expr","locations":[{"start":{"line":111,"column":14},"end":{"line":111,"column":22}},{"start":{"line":111,"column":27},"end":{"line":111,"column":38}}],"line":111},"14":{"loc":{"start":{"line":115,"column":4},"end":{"line":115,"column":47}},"type":"if","locations":[{"start":{"line":115,"column":4},"end":{"line":115,"column":47}},{"start":{"line":115,"column":4},"end":{"line":115,"column":47}}],"line":115},"15":{"loc":{"start":{"line":116,"column":4},"end":{"line":116,"column":61}},"type":"if","locations":[{"start":{"line":116,"column":4},"end":{"line":116,"column":61}},{"start":{"line":116,"column":4},"end":{"line":116,"column":61}}],"line":116},"16":{"loc":{"start":{"line":117,"column":4},"end":{"line":117,"column":67}},"type":"if","locations":[{"start":{"line":117,"column":4},"end":{"line":117,"column":67}},{"start":{"line":117,"column":4},"end":{"line":117,"column":67}}],"line":117},"17":{"loc":{"start":{"line":118,"column":4},"end":{"line":118,"column":52}},"type":"if","locations":[{"start":{"line":118,"column":4},"end":{"line":118,"column":52}},{"start":{"line":118,"column":4},"end":{"line":118,"column":52}}],"line":118}},"s":{"0":1,"1":1,"2":818,"3":818,"4":818,"5":818,"6":818,"7":818,"8":63093,"9":63093,"10":74898,"11":74898,"12":74898,"13":1785,"14":1785,"15":1785,"16":32878,"17":27147,"18":5731,"19":807,"20":4924,"21":4923,"22":46537,"23":4923,"24":978,"25":4923,"26":1430,"27":672,"28":672,"29":672,"30":915,"31":615,"32":57,"33":76,"34":76,"35":76,"36":0,"37":0,"38":76,"39":0,"40":0,"41":0,"42":0,"43":0,"44":55874,"45":55874,"46":55874,"47":55874,"48":55874,"49":55874,"50":55874,"51":55874,"52":55874,"53":27364,"54":27364,"55":27364,"56":27364,"57":27364,"58":3920,"59":27364,"60":27364,"61":27364,"62":27364,"63":27364,"64":1,"65":27364,"66":27364,"67":1},"f":{"0":818,"1":63093,"2":74898,"3":1785,"4":32878,"5":672,"6":76,"7":0,"8":55874,"9":27364},"b":{"0":[818,818],"1":[818,0],"2":[818,816],"3":[27147,5731],"4":[807,4924],"5":[4923,1],"6":[1430,3493],"7":[615,300],"8":[0,0],"9":[0,0],"10":[55874,55874],"11":[55874,54],"12":[55874,1567],"13":[27364,27359],"14":[3920,23444],"15":[27364,0],"16":[27364,0],"17":[1,27363]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"58da9c7569e807ab954d5c5bf77602de48fee579","contentHash":"c83479073c8d792bd2d326390246a75bd877836fef293faf426c64f9b40731d0"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/qname.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/qname.js","statementMap":{"0":{"start":{"line":8,"column":8},"end":{"line":8,"column":31}},"1":{"start":{"line":9,"column":13},"end":{"line":9,"column":30}},"2":{"start":{"line":10,"column":15},"end":{"line":10,"column":66}},"3":{"start":{"line":24,"column":4},"end":{"line":45,"column":5}},"4":{"start":{"line":25,"column":6},"end":{"line":26,"column":66}},"5":{"start":{"line":28,"column":6},"end":{"line":34,"column":7}},"6":{"start":{"line":29,"column":8},"end":{"line":29,"column":36}},"7":{"start":{"line":30,"column":8},"end":{"line":30,"column":37}},"8":{"start":{"line":31,"column":8},"end":{"line":31,"column":35}},"9":{"start":{"line":33,"column":8},"end":{"line":33,"column":57}},"10":{"start":{"line":36,"column":6},"end":{"line":36,"column":31}},"11":{"start":{"line":37,"column":6},"end":{"line":37,"column":29}},"12":{"start":{"line":38,"column":6},"end":{"line":44,"column":7}},"13":{"start":{"line":39,"column":20},"end":{"line":39,"column":40}},"14":{"start":{"line":40,"column":8},"end":{"line":40,"column":29}},"15":{"start":{"line":41,"column":8},"end":{"line":41,"column":31}},"16":{"start":{"line":43,"column":8},"end":{"line":43,"column":35}},"17":{"start":{"line":53,"column":14},"end":{"line":53,"column":16}},"18":{"start":{"line":54,"column":4},"end":{"line":56,"column":5}},"19":{"start":{"line":55,"column":6},"end":{"line":55,"column":35}},"20":{"start":{"line":57,"column":4},"end":{"line":59,"column":5}},"21":{"start":{"line":58,"column":6},"end":{"line":58,"column":31}},"22":{"start":{"line":60,"column":4},"end":{"line":60,"column":21}},"23":{"start":{"line":61,"column":4},"end":{"line":61,"column":15}},"24":{"start":{"line":71,"column":4},"end":{"line":71,"column":24}},"25":{"start":{"line":72,"column":17},"end":{"line":72,"column":33}},"26":{"start":{"line":74,"column":4},"end":{"line":82,"column":5}},"27":{"start":{"line":75,"column":6},"end":{"line":75,"column":15}},"28":{"start":{"line":76,"column":11},"end":{"line":82,"column":5}},"29":{"start":{"line":77,"column":6},"end":{"line":77,"column":18}},"30":{"start":{"line":78,"column":11},"end":{"line":82,"column":5}},"31":{"start":{"line":79,"column":6},"end":{"line":79,"column":49}},"32":{"start":{"line":81,"column":6},"end":{"line":81,"column":15}},"33":{"start":{"line":83,"column":4},"end":{"line":85,"column":5}},"34":{"start":{"line":84,"column":6},"end":{"line":84,"column":25}},"35":{"start":{"line":86,"column":4},"end":{"line":86,"column":18}},"36":{"start":{"line":90,"column":0},"end":{"line":90,"column":23}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":23,"column":2},"end":{"line":23,"column":3}},"loc":{"start":{"line":23,"column":35},"end":{"line":46,"column":3}},"line":23},"1":{"name":"(anonymous_1)","decl":{"start":{"line":52,"column":2},"end":{"line":52,"column":3}},"loc":{"start":{"line":52,"column":13},"end":{"line":62,"column":3}},"line":52},"2":{"name":"(anonymous_2)","decl":{"start":{"line":70,"column":2},"end":{"line":70,"column":3}},"loc":{"start":{"line":70,"column":29},"end":{"line":87,"column":3}},"line":70}},"branchMap":{"0":{"loc":{"start":{"line":24,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":24,"column":4},"end":{"line":45,"column":5}},{"start":{"line":24,"column":4},"end":{"line":45,"column":5}}],"line":24},"1":{"loc":{"start":{"line":28,"column":6},"end":{"line":34,"column":7}},"type":"if","locations":[{"start":{"line":28,"column":6},"end":{"line":34,"column":7}},{"start":{"line":28,"column":6},"end":{"line":34,"column":7}}],"line":28},"2":{"loc":{"start":{"line":29,"column":21},"end":{"line":29,"column":35}},"type":"binary-expr","locations":[{"start":{"line":29,"column":21},"end":{"line":29,"column":29}},{"start":{"line":29,"column":33},"end":{"line":29,"column":35}}],"line":29},"3":{"loc":{"start":{"line":30,"column":22},"end":{"line":30,"column":36}},"type":"binary-expr","locations":[{"start":{"line":30,"column":22},"end":{"line":30,"column":30}},{"start":{"line":30,"column":34},"end":{"line":30,"column":36}}],"line":30},"4":{"loc":{"start":{"line":31,"column":20},"end":{"line":31,"column":34}},"type":"binary-expr","locations":[{"start":{"line":31,"column":20},"end":{"line":31,"column":28}},{"start":{"line":31,"column":32},"end":{"line":31,"column":34}}],"line":31},"5":{"loc":{"start":{"line":36,"column":19},"end":{"line":36,"column":30}},"type":"binary-expr","locations":[{"start":{"line":36,"column":19},"end":{"line":36,"column":24}},{"start":{"line":36,"column":28},"end":{"line":36,"column":30}}],"line":36},"6":{"loc":{"start":{"line":37,"column":18},"end":{"line":37,"column":28}},"type":"binary-expr","locations":[{"start":{"line":37,"column":18},"end":{"line":37,"column":22}},{"start":{"line":37,"column":26},"end":{"line":37,"column":28}}],"line":37},"7":{"loc":{"start":{"line":38,"column":6},"end":{"line":44,"column":7}},"type":"if","locations":[{"start":{"line":38,"column":6},"end":{"line":44,"column":7}},{"start":{"line":38,"column":6},"end":{"line":44,"column":7}}],"line":38},"8":{"loc":{"start":{"line":43,"column":22},"end":{"line":43,"column":34}},"type":"binary-expr","locations":[{"start":{"line":43,"column":22},"end":{"line":43,"column":28}},{"start":{"line":43,"column":32},"end":{"line":43,"column":34}}],"line":43},"9":{"loc":{"start":{"line":54,"column":4},"end":{"line":56,"column":5}},"type":"if","locations":[{"start":{"line":54,"column":4},"end":{"line":56,"column":5}},{"start":{"line":54,"column":4},"end":{"line":56,"column":5}}],"line":54},"10":{"loc":{"start":{"line":57,"column":4},"end":{"line":59,"column":5}},"type":"if","locations":[{"start":{"line":57,"column":4},"end":{"line":59,"column":5}},{"start":{"line":57,"column":4},"end":{"line":59,"column":5}}],"line":57},"11":{"loc":{"start":{"line":71,"column":12},"end":{"line":71,"column":23}},"type":"binary-expr","locations":[{"start":{"line":71,"column":12},"end":{"line":71,"column":17}},{"start":{"line":71,"column":21},"end":{"line":71,"column":23}}],"line":71},"12":{"loc":{"start":{"line":74,"column":4},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":74,"column":4},"end":{"line":82,"column":5}},{"start":{"line":74,"column":4},"end":{"line":82,"column":5}}],"line":74},"13":{"loc":{"start":{"line":76,"column":11},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":76,"column":11},"end":{"line":82,"column":5}},{"start":{"line":76,"column":11},"end":{"line":82,"column":5}}],"line":76},"14":{"loc":{"start":{"line":78,"column":11},"end":{"line":82,"column":5}},"type":"if","locations":[{"start":{"line":78,"column":11},"end":{"line":82,"column":5}},{"start":{"line":78,"column":11},"end":{"line":82,"column":5}}],"line":78},"15":{"loc":{"start":{"line":83,"column":4},"end":{"line":85,"column":5}},"type":"if","locations":[{"start":{"line":83,"column":4},"end":{"line":85,"column":5}},{"start":{"line":83,"column":4},"end":{"line":85,"column":5}}],"line":83}},"s":{"0":1,"1":1,"2":1,"3":287235,"4":231411,"5":231411,"6":231411,"7":231411,"8":231411,"9":0,"10":55824,"11":55824,"12":55824,"13":53343,"14":53343,"15":53343,"16":2481,"17":56692,"18":56692,"19":56615,"20":56692,"21":3659,"22":56692,"23":56692,"24":231409,"25":231409,"26":231409,"27":231383,"28":26,"29":26,"30":0,"31":0,"32":0,"33":231409,"34":26,"35":231409,"36":1},"f":{"0":287235,"1":56692,"2":231409},"b":{"0":[231411,55824],"1":[231411,0],"2":[231411,231404],"3":[231411,167714],"4":[231411,0],"5":[55824,0],"6":[55824,222],"7":[53343,2481],"8":[2481,0],"9":[56615,77],"10":[3659,53033],"11":[231409,0],"12":[231383,26],"13":[26,0],"14":[0,0],"15":[26,231383]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"d818b12a75262c67d2b5eb16446f32acf39f1879","contentHash":"f0f3c21191d446ec3952ff2bd48151fb6468b5c7dfcb3909b99b44b1feb597b7"},"/Users/rfeng/Projects/loopback3/strong-soap/src/globalize.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/globalize.js","statementMap":{"0":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"1":{"start":{"line":9,"column":9},"end":{"line":9,"column":36}},"2":{"start":{"line":11,"column":0},"end":{"line":11,"column":73}},"3":{"start":{"line":12,"column":0},"end":{"line":12,"column":22}}},"fnMap":{},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1},"f":{},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"f89ab4cef0392465d59e0aa60379caffb68c8ec1","contentHash":"a8100f7138f1637c1f06596d68058472f8c8f13d5017bc71b09087671fae23f2"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/helper.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/helper.js","statementMap":{"0":{"start":{"line":9,"column":25},"end":{"line":29,"column":1}},"1":{"start":{"line":32,"column":23},"end":{"line":58,"column":1}},"2":{"start":{"line":61,"column":18},"end":{"line":61,"column":20}},"3":{"start":{"line":63,"column":0},"end":{"line":65,"column":1}},"4":{"start":{"line":64,"column":2},"end":{"line":64,"column":41}},"5":{"start":{"line":66,"column":0},"end":{"line":68,"column":1}},"6":{"start":{"line":67,"column":2},"end":{"line":67,"column":39}},"7":{"start":{"line":70,"column":17},"end":{"line":83,"column":1}},"8":{"start":{"line":86,"column":2},"end":{"line":96,"column":3}},"9":{"start":{"line":87,"column":4},"end":{"line":89,"column":5}},"10":{"start":{"line":88,"column":6},"end":{"line":88,"column":17}},"11":{"start":{"line":90,"column":4},"end":{"line":95,"column":31}},"12":{"start":{"line":98,"column":2},"end":{"line":98,"column":13}},"13":{"start":{"line":101,"column":13},"end":{"line":101,"column":30}},"14":{"start":{"line":102,"column":0},"end":{"line":108,"column":2}},"15":{"start":{"line":104,"column":15},"end":{"line":104,"column":40}},"16":{"start":{"line":105,"column":17},"end":{"line":105,"column":70}},"17":{"start":{"line":106,"column":2},"end":{"line":106,"column":47}},"18":{"start":{"line":107,"column":2},"end":{"line":107,"column":33}},"19":{"start":{"line":110,"column":19},"end":{"line":110,"column":21}},"20":{"start":{"line":112,"column":0},"end":{"line":112,"column":36}},"21":{"start":{"line":120,"column":0},"end":{"line":126,"column":2}},"22":{"start":{"line":121,"column":2},"end":{"line":125,"column":3}},"23":{"start":{"line":122,"column":4},"end":{"line":122,"column":37}},"24":{"start":{"line":122,"column":28},"end":{"line":122,"column":37}},"25":{"start":{"line":123,"column":4},"end":{"line":124,"column":15}},"26":{"start":{"line":124,"column":6},"end":{"line":124,"column":15}},"27":{"start":{"line":128,"column":0},"end":{"line":137,"column":2}},"28":{"start":{"line":129,"column":2},"end":{"line":135,"column":3}},"29":{"start":{"line":131,"column":4},"end":{"line":134,"column":7}},"30":{"start":{"line":132,"column":6},"end":{"line":133,"column":29}},"31":{"start":{"line":133,"column":8},"end":{"line":133,"column":29}},"32":{"start":{"line":136,"column":2},"end":{"line":136,"column":14}},"33":{"start":{"line":139,"column":0},"end":{"line":139,"column":34}},"34":{"start":{"line":140,"column":0},"end":{"line":140,"column":30}},"35":{"start":{"line":141,"column":0},"end":{"line":141,"column":32}},"36":{"start":{"line":145,"column":4},"end":{"line":145,"column":58}},"37":{"start":{"line":149,"column":4},"end":{"line":155,"column":5}},"38":{"start":{"line":150,"column":6},"end":{"line":152,"column":7}},"39":{"start":{"line":151,"column":8},"end":{"line":151,"column":27}},"40":{"start":{"line":154,"column":6},"end":{"line":154,"column":24}},"41":{"start":{"line":156,"column":4},"end":{"line":156,"column":16}},"42":{"start":{"line":160,"column":4},"end":{"line":164,"column":5}},"43":{"start":{"line":161,"column":6},"end":{"line":161,"column":42}},"44":{"start":{"line":163,"column":6},"end":{"line":163,"column":31}},"45":{"start":{"line":168,"column":0},"end":{"line":168,"column":19}}},"fnMap":{"0":{"name":"xmlEscape","decl":{"start":{"line":85,"column":9},"end":{"line":85,"column":18}},"loc":{"start":{"line":85,"column":24},"end":{"line":99,"column":1}},"line":85},"1":{"name":"passwordDigest","decl":{"start":{"line":102,"column":34},"end":{"line":102,"column":48}},"loc":{"start":{"line":102,"column":75},"end":{"line":108,"column":1}},"line":102},"2":{"name":"(anonymous_2)","decl":{"start":{"line":120,"column":21},"end":{"line":120,"column":22}},"loc":{"start":{"line":120,"column":51},"end":{"line":126,"column":1}},"line":120},"3":{"name":"extend","decl":{"start":{"line":128,"column":26},"end":{"line":128,"column":32}},"loc":{"start":{"line":128,"column":44},"end":{"line":137,"column":1}},"line":128},"4":{"name":"(anonymous_4)","decl":{"start":{"line":131,"column":29},"end":{"line":131,"column":30}},"loc":{"start":{"line":131,"column":43},"end":{"line":134,"column":5}},"line":131},"5":{"name":"(anonymous_5)","decl":{"start":{"line":144,"column":2},"end":{"line":144,"column":3}},"loc":{"start":{"line":144,"column":16},"end":{"line":146,"column":3}},"line":144},"6":{"name":"(anonymous_6)","decl":{"start":{"line":148,"column":2},"end":{"line":148,"column":3}},"loc":{"start":{"line":148,"column":11},"end":{"line":157,"column":3}},"line":148},"7":{"name":"(anonymous_7)","decl":{"start":{"line":159,"column":2},"end":{"line":159,"column":3}},"loc":{"start":{"line":159,"column":11},"end":{"line":165,"column":3}},"line":159}},"branchMap":{"0":{"loc":{"start":{"line":86,"column":2},"end":{"line":96,"column":3}},"type":"if","locations":[{"start":{"line":86,"column":2},"end":{"line":96,"column":3}},{"start":{"line":86,"column":2},"end":{"line":96,"column":3}}],"line":86},"1":{"loc":{"start":{"line":87,"column":4},"end":{"line":89,"column":5}},"type":"if","locations":[{"start":{"line":87,"column":4},"end":{"line":89,"column":5}},{"start":{"line":87,"column":4},"end":{"line":89,"column":5}}],"line":87},"2":{"loc":{"start":{"line":87,"column":8},"end":{"line":87,"column":68}},"type":"binary-expr","locations":[{"start":{"line":87,"column":8},"end":{"line":87,"column":40}},{"start":{"line":87,"column":44},"end":{"line":87,"column":68}}],"line":87},"3":{"loc":{"start":{"line":105,"column":29},"end":{"line":105,"column":40}},"type":"binary-expr","locations":[{"start":{"line":105,"column":29},"end":{"line":105,"column":34}},{"start":{"line":105,"column":38},"end":{"line":105,"column":40}}],"line":105},"4":{"loc":{"start":{"line":122,"column":4},"end":{"line":122,"column":37}},"type":"if","locations":[{"start":{"line":122,"column":4},"end":{"line":122,"column":37}},{"start":{"line":122,"column":4},"end":{"line":122,"column":37}}],"line":122},"5":{"loc":{"start":{"line":123,"column":4},"end":{"line":124,"column":15}},"type":"if","locations":[{"start":{"line":123,"column":4},"end":{"line":124,"column":15}},{"start":{"line":123,"column":4},"end":{"line":124,"column":15}}],"line":123},"6":{"loc":{"start":{"line":129,"column":2},"end":{"line":135,"column":3}},"type":"if","locations":[{"start":{"line":129,"column":2},"end":{"line":135,"column":3}},{"start":{"line":129,"column":2},"end":{"line":135,"column":3}}],"line":129},"7":{"loc":{"start":{"line":129,"column":6},"end":{"line":130,"column":43}},"type":"binary-expr","locations":[{"start":{"line":129,"column":6},"end":{"line":129,"column":19}},{"start":{"line":129,"column":23},"end":{"line":129,"column":47}},{"start":{"line":130,"column":4},"end":{"line":130,"column":16}},{"start":{"line":130,"column":20},"end":{"line":130,"column":43}}],"line":129},"8":{"loc":{"start":{"line":132,"column":6},"end":{"line":133,"column":29}},"type":"if","locations":[{"start":{"line":132,"column":6},"end":{"line":133,"column":29}},{"start":{"line":132,"column":6},"end":{"line":133,"column":29}}],"line":132},"9":{"loc":{"start":{"line":145,"column":15},"end":{"line":145,"column":57}},"type":"cond-expr","locations":[{"start":{"line":145,"column":43},"end":{"line":145,"column":52}},{"start":{"line":145,"column":55},"end":{"line":145,"column":57}}],"line":145},"10":{"loc":{"start":{"line":149,"column":4},"end":{"line":155,"column":5}},"type":"if","locations":[{"start":{"line":149,"column":4},"end":{"line":155,"column":5}},{"start":{"line":149,"column":4},"end":{"line":155,"column":5}}],"line":149},"11":{"loc":{"start":{"line":150,"column":6},"end":{"line":152,"column":7}},"type":"if","locations":[{"start":{"line":150,"column":6},"end":{"line":152,"column":7}},{"start":{"line":150,"column":6},"end":{"line":152,"column":7}}],"line":150},"12":{"loc":{"start":{"line":160,"column":4},"end":{"line":164,"column":5}},"type":"if","locations":[{"start":{"line":160,"column":4},"end":{"line":164,"column":5}},{"start":{"line":160,"column":4},"end":{"line":164,"column":5}}],"line":160}},"s":{"0":1,"1":1,"2":1,"3":1,"4":19,"5":1,"6":25,"7":1,"8":0,"9":0,"10":0,"11":0,"12":0,"13":1,"14":1,"15":0,"16":0,"17":0,"18":0,"19":1,"20":1,"21":1,"22":0,"23":0,"24":0,"25":0,"26":0,"27":1,"28":65849,"29":65849,"30":144,"31":96,"32":65849,"33":1,"34":1,"35":1,"36":766,"37":766,"38":0,"39":0,"40":766,"41":766,"42":68834,"43":0,"44":68834,"45":1},"f":{"0":0,"1":0,"2":0,"3":65849,"4":144,"5":766,"6":766,"7":68834},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[65849,0],"7":[65849,65849,65849,65849],"8":[96,48],"9":[766,0],"10":[0,766],"11":[0,0],"12":[0,68834]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"fc23c81d9ecd3f98da2b5d1db40f50112be8c829","contentHash":"23b301a1db7c603581b6f75daa61f32ea99cdcdaca44fe4149a60343a0af329c"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/nscontext.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/nscontext.js","statementMap":{"0":{"start":{"line":16,"column":4},"end":{"line":16,"column":25}},"1":{"start":{"line":17,"column":4},"end":{"line":17,"column":25}},"2":{"start":{"line":18,"column":4},"end":{"line":18,"column":25}},"3":{"start":{"line":28,"column":4},"end":{"line":43,"column":5}},"4":{"start":{"line":30,"column":8},"end":{"line":30,"column":54}},"5":{"start":{"line":32,"column":8},"end":{"line":32,"column":47}},"6":{"start":{"line":34,"column":20},"end":{"line":34,"column":43}},"7":{"start":{"line":36,"column":8},"end":{"line":42,"column":9}},"8":{"start":{"line":37,"column":10},"end":{"line":37,"column":27}},"9":{"start":{"line":38,"column":15},"end":{"line":42,"column":9}},"10":{"start":{"line":39,"column":10},"end":{"line":39,"column":53}},"11":{"start":{"line":41,"column":10},"end":{"line":41,"column":22}},"12":{"start":{"line":47,"column":4},"end":{"line":70,"column":5}},"13":{"start":{"line":49,"column":8},"end":{"line":53,"column":10}},"14":{"start":{"line":55,"column":8},"end":{"line":59,"column":10}},"15":{"start":{"line":61,"column":22},"end":{"line":61,"column":45}},"16":{"start":{"line":63,"column":8},"end":{"line":69,"column":9}},"17":{"start":{"line":64,"column":10},"end":{"line":64,"column":25}},"18":{"start":{"line":65,"column":15},"end":{"line":69,"column":9}},"19":{"start":{"line":66,"column":10},"end":{"line":66,"column":57}},"20":{"start":{"line":68,"column":10},"end":{"line":68,"column":22}},"21":{"start":{"line":80,"column":4},"end":{"line":96,"column":5}},"22":{"start":{"line":82,"column":8},"end":{"line":82,"column":21}},"23":{"start":{"line":84,"column":8},"end":{"line":84,"column":23}},"24":{"start":{"line":86,"column":8},"end":{"line":90,"column":9}},"25":{"start":{"line":87,"column":10},"end":{"line":89,"column":11}},"26":{"start":{"line":88,"column":12},"end":{"line":88,"column":21}},"27":{"start":{"line":91,"column":8},"end":{"line":95,"column":9}},"28":{"start":{"line":92,"column":10},"end":{"line":92,"column":46}},"29":{"start":{"line":94,"column":10},"end":{"line":94,"column":22}},"30":{"start":{"line":106,"column":4},"end":{"line":122,"column":5}},"31":{"start":{"line":108,"column":8},"end":{"line":108,"column":21}},"32":{"start":{"line":110,"column":8},"end":{"line":110,"column":23}},"33":{"start":{"line":112,"column":8},"end":{"line":116,"column":9}},"34":{"start":{"line":113,"column":10},"end":{"line":115,"column":11}},"35":{"start":{"line":114,"column":12},"end":{"line":114,"column":38}},"36":{"start":{"line":117,"column":8},"end":{"line":121,"column":9}},"37":{"start":{"line":118,"column":10},"end":{"line":118,"column":53}},"38":{"start":{"line":120,"column":10},"end":{"line":120,"column":22}},"39":{"start":{"line":131,"column":4},"end":{"line":131,"column":24}},"40":{"start":{"line":132,"column":4},"end":{"line":138,"column":5}},"41":{"start":{"line":133,"column":19},"end":{"line":133,"column":46}},"42":{"start":{"line":134,"column":6},"end":{"line":137,"column":7}},"43":{"start":{"line":136,"column":8},"end":{"line":136,"column":22}},"44":{"start":{"line":149,"column":4},"end":{"line":149,"column":21}},"45":{"start":{"line":150,"column":4},"end":{"line":150,"column":23}},"46":{"start":{"line":162,"column":4},"end":{"line":164,"column":5}},"47":{"start":{"line":163,"column":6},"end":{"line":163,"column":19}},"48":{"start":{"line":165,"column":4},"end":{"line":172,"column":5}},"49":{"start":{"line":166,"column":6},"end":{"line":170,"column":8}},"50":{"start":{"line":171,"column":6},"end":{"line":171,"column":18}},"51":{"start":{"line":173,"column":4},"end":{"line":173,"column":17}},"52":{"start":{"line":181,"column":16},"end":{"line":181,"column":53}},"53":{"start":{"line":182,"column":4},"end":{"line":182,"column":28}},"54":{"start":{"line":183,"column":4},"end":{"line":183,"column":30}},"55":{"start":{"line":184,"column":4},"end":{"line":184,"column":17}},"56":{"start":{"line":192,"column":16},"end":{"line":192,"column":33}},"57":{"start":{"line":193,"column":4},"end":{"line":197,"column":5}},"58":{"start":{"line":194,"column":6},"end":{"line":194,"column":39}},"59":{"start":{"line":196,"column":6},"end":{"line":196,"column":31}},"60":{"start":{"line":198,"column":4},"end":{"line":198,"column":17}},"61":{"start":{"line":208,"column":4},"end":{"line":209,"column":59}},"62":{"start":{"line":219,"column":4},"end":{"line":220,"column":52}},"63":{"start":{"line":229,"column":4},"end":{"line":230,"column":48}},"64":{"start":{"line":239,"column":4},"end":{"line":240,"column":45}},"65":{"start":{"line":251,"column":4},"end":{"line":259,"column":5}},"66":{"start":{"line":252,"column":6},"end":{"line":252,"column":37}},"67":{"start":{"line":254,"column":6},"end":{"line":254,"column":62}},"68":{"start":{"line":255,"column":6},"end":{"line":258,"column":7}},"69":{"start":{"line":257,"column":8},"end":{"line":257,"column":23}},"70":{"start":{"line":260,"column":4},"end":{"line":263,"column":5}},"71":{"start":{"line":262,"column":6},"end":{"line":262,"column":37}},"72":{"start":{"line":264,"column":4},"end":{"line":272,"column":5}},"73":{"start":{"line":265,"column":6},"end":{"line":269,"column":8}},"74":{"start":{"line":270,"column":6},"end":{"line":270,"column":53}},"75":{"start":{"line":271,"column":6},"end":{"line":271,"column":21}},"76":{"start":{"line":273,"column":4},"end":{"line":273,"column":16}},"77":{"start":{"line":283,"column":18},"end":{"line":283,"column":55}},"78":{"start":{"line":284,"column":4},"end":{"line":284,"column":30}},"79":{"start":{"line":284,"column":18},"end":{"line":284,"column":30}},"80":{"start":{"line":285,"column":4},"end":{"line":287,"column":5}},"81":{"start":{"line":286,"column":6},"end":{"line":286,"column":18}},"82":{"start":{"line":288,"column":4},"end":{"line":288,"column":59}},"83":{"start":{"line":289,"column":4},"end":{"line":298,"column":5}},"84":{"start":{"line":290,"column":6},"end":{"line":290,"column":30}},"85":{"start":{"line":292,"column":6},"end":{"line":296,"column":8}},"86":{"start":{"line":297,"column":6},"end":{"line":297,"column":61}},"87":{"start":{"line":299,"column":4},"end":{"line":299,"column":19}},"88":{"start":{"line":303,"column":0},"end":{"line":303,"column":34}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":15,"column":2},"end":{"line":15,"column":3}},"loc":{"start":{"line":15,"column":22},"end":{"line":19,"column":3}},"line":15},"1":{"name":"(anonymous_1)","decl":{"start":{"line":27,"column":2},"end":{"line":27,"column":3}},"loc":{"start":{"line":27,"column":37},"end":{"line":44,"column":3}},"line":27},"2":{"name":"(anonymous_2)","decl":{"start":{"line":46,"column":2},"end":{"line":46,"column":3}},"loc":{"start":{"line":46,"column":30},"end":{"line":71,"column":3}},"line":46},"3":{"name":"(anonymous_3)","decl":{"start":{"line":79,"column":2},"end":{"line":79,"column":3}},"loc":{"start":{"line":79,"column":30},"end":{"line":97,"column":3}},"line":79},"4":{"name":"(anonymous_4)","decl":{"start":{"line":105,"column":2},"end":{"line":105,"column":3}},"loc":{"start":{"line":105,"column":37},"end":{"line":123,"column":3}},"line":105},"5":{"name":"(anonymous_5)","decl":{"start":{"line":130,"column":2},"end":{"line":130,"column":3}},"loc":{"start":{"line":130,"column":23},"end":{"line":139,"column":3}},"line":130},"6":{"name":"(anonymous_6)","decl":{"start":{"line":148,"column":2},"end":{"line":148,"column":3}},"loc":{"start":{"line":148,"column":16},"end":{"line":151,"column":3}},"line":148},"7":{"name":"(anonymous_7)","decl":{"start":{"line":161,"column":2},"end":{"line":161,"column":3}},"loc":{"start":{"line":161,"column":41},"end":{"line":174,"column":3}},"line":161},"8":{"name":"(anonymous_8)","decl":{"start":{"line":180,"column":2},"end":{"line":180,"column":3}},"loc":{"start":{"line":180,"column":16},"end":{"line":185,"column":3}},"line":180},"9":{"name":"(anonymous_9)","decl":{"start":{"line":191,"column":2},"end":{"line":191,"column":3}},"loc":{"start":{"line":191,"column":15},"end":{"line":199,"column":3}},"line":191},"10":{"name":"(anonymous_10)","decl":{"start":{"line":207,"column":2},"end":{"line":207,"column":3}},"loc":{"start":{"line":207,"column":37},"end":{"line":210,"column":3}},"line":207},"11":{"name":"(anonymous_11)","decl":{"start":{"line":218,"column":2},"end":{"line":218,"column":3}},"loc":{"start":{"line":218,"column":30},"end":{"line":221,"column":3}},"line":218},"12":{"name":"(anonymous_12)","decl":{"start":{"line":228,"column":2},"end":{"line":228,"column":3}},"loc":{"start":{"line":228,"column":26},"end":{"line":231,"column":3}},"line":228},"13":{"name":"(anonymous_13)","decl":{"start":{"line":238,"column":2},"end":{"line":238,"column":3}},"loc":{"start":{"line":238,"column":23},"end":{"line":241,"column":3}},"line":238},"14":{"name":"(anonymous_14)","decl":{"start":{"line":249,"column":2},"end":{"line":249,"column":3}},"loc":{"start":{"line":249,"column":35},"end":{"line":274,"column":3}},"line":249},"15":{"name":"(anonymous_15)","decl":{"start":{"line":282,"column":2},"end":{"line":282,"column":3}},"loc":{"start":{"line":282,"column":34},"end":{"line":300,"column":3}},"line":282}},"branchMap":{"0":{"loc":{"start":{"line":28,"column":4},"end":{"line":43,"column":5}},"type":"switch","locations":[{"start":{"line":29,"column":6},"end":{"line":30,"column":54}},{"start":{"line":31,"column":6},"end":{"line":32,"column":47}},{"start":{"line":33,"column":6},"end":{"line":42,"column":9}}],"line":28},"1":{"loc":{"start":{"line":36,"column":8},"end":{"line":42,"column":9}},"type":"if","locations":[{"start":{"line":36,"column":8},"end":{"line":42,"column":9}},{"start":{"line":36,"column":8},"end":{"line":42,"column":9}}],"line":36},"2":{"loc":{"start":{"line":38,"column":15},"end":{"line":42,"column":9}},"type":"if","locations":[{"start":{"line":38,"column":15},"end":{"line":42,"column":9}},{"start":{"line":38,"column":15},"end":{"line":42,"column":9}}],"line":38},"3":{"loc":{"start":{"line":38,"column":19},"end":{"line":38,"column":44}},"type":"binary-expr","locations":[{"start":{"line":38,"column":19},"end":{"line":38,"column":29}},{"start":{"line":38,"column":33},"end":{"line":38,"column":44}}],"line":38},"4":{"loc":{"start":{"line":47,"column":4},"end":{"line":70,"column":5}},"type":"switch","locations":[{"start":{"line":48,"column":6},"end":{"line":53,"column":10}},{"start":{"line":54,"column":6},"end":{"line":59,"column":10}},{"start":{"line":60,"column":6},"end":{"line":69,"column":9}}],"line":47},"5":{"loc":{"start":{"line":63,"column":8},"end":{"line":69,"column":9}},"type":"if","locations":[{"start":{"line":63,"column":8},"end":{"line":69,"column":9}},{"start":{"line":63,"column":8},"end":{"line":69,"column":9}}],"line":63},"6":{"loc":{"start":{"line":65,"column":15},"end":{"line":69,"column":9}},"type":"if","locations":[{"start":{"line":65,"column":15},"end":{"line":69,"column":9}},{"start":{"line":65,"column":15},"end":{"line":69,"column":9}}],"line":65},"7":{"loc":{"start":{"line":80,"column":4},"end":{"line":96,"column":5}},"type":"switch","locations":[{"start":{"line":81,"column":6},"end":{"line":82,"column":21}},{"start":{"line":83,"column":6},"end":{"line":84,"column":23}},{"start":{"line":85,"column":6},"end":{"line":95,"column":9}}],"line":80},"8":{"loc":{"start":{"line":87,"column":10},"end":{"line":89,"column":11}},"type":"if","locations":[{"start":{"line":87,"column":10},"end":{"line":89,"column":11}},{"start":{"line":87,"column":10},"end":{"line":89,"column":11}}],"line":87},"9":{"loc":{"start":{"line":91,"column":8},"end":{"line":95,"column":9}},"type":"if","locations":[{"start":{"line":91,"column":8},"end":{"line":95,"column":9}},{"start":{"line":91,"column":8},"end":{"line":95,"column":9}}],"line":91},"10":{"loc":{"start":{"line":91,"column":12},"end":{"line":91,"column":37}},"type":"binary-expr","locations":[{"start":{"line":91,"column":12},"end":{"line":91,"column":22}},{"start":{"line":91,"column":26},"end":{"line":91,"column":37}}],"line":91},"11":{"loc":{"start":{"line":106,"column":4},"end":{"line":122,"column":5}},"type":"switch","locations":[{"start":{"line":107,"column":6},"end":{"line":108,"column":21}},{"start":{"line":109,"column":6},"end":{"line":110,"column":23}},{"start":{"line":111,"column":6},"end":{"line":121,"column":9}}],"line":106},"12":{"loc":{"start":{"line":113,"column":10},"end":{"line":115,"column":11}},"type":"if","locations":[{"start":{"line":113,"column":10},"end":{"line":115,"column":11}},{"start":{"line":113,"column":10},"end":{"line":115,"column":11}}],"line":113},"13":{"loc":{"start":{"line":113,"column":14},"end":{"line":113,"column":84}},"type":"binary-expr","locations":[{"start":{"line":113,"column":14},"end":{"line":113,"column":46}},{"start":{"line":113,"column":50},"end":{"line":113,"column":84}}],"line":113},"14":{"loc":{"start":{"line":117,"column":8},"end":{"line":121,"column":9}},"type":"if","locations":[{"start":{"line":117,"column":8},"end":{"line":121,"column":9}},{"start":{"line":117,"column":8},"end":{"line":121,"column":9}}],"line":117},"15":{"loc":{"start":{"line":117,"column":12},"end":{"line":117,"column":37}},"type":"binary-expr","locations":[{"start":{"line":117,"column":12},"end":{"line":117,"column":22}},{"start":{"line":117,"column":26},"end":{"line":117,"column":37}}],"line":117},"16":{"loc":{"start":{"line":131,"column":11},"end":{"line":131,"column":23}},"type":"binary-expr","locations":[{"start":{"line":131,"column":11},"end":{"line":131,"column":15}},{"start":{"line":131,"column":19},"end":{"line":131,"column":23}}],"line":131},"17":{"loc":{"start":{"line":134,"column":6},"end":{"line":137,"column":7}},"type":"if","locations":[{"start":{"line":134,"column":6},"end":{"line":137,"column":7}},{"start":{"line":134,"column":6},"end":{"line":137,"column":7}}],"line":134},"18":{"loc":{"start":{"line":162,"column":4},"end":{"line":164,"column":5}},"type":"if","locations":[{"start":{"line":162,"column":4},"end":{"line":164,"column":5}},{"start":{"line":162,"column":4},"end":{"line":164,"column":5}}],"line":162},"19":{"loc":{"start":{"line":165,"column":4},"end":{"line":172,"column":5}},"type":"if","locations":[{"start":{"line":165,"column":4},"end":{"line":172,"column":5}},{"start":{"line":165,"column":4},"end":{"line":172,"column":5}}],"line":165},"20":{"loc":{"start":{"line":193,"column":4},"end":{"line":197,"column":5}},"type":"if","locations":[{"start":{"line":193,"column":4},"end":{"line":197,"column":5}},{"start":{"line":193,"column":4},"end":{"line":197,"column":5}}],"line":193},"21":{"loc":{"start":{"line":208,"column":11},"end":{"line":209,"column":58}},"type":"binary-expr","locations":[{"start":{"line":208,"column":11},"end":{"line":208,"column":28}},{"start":{"line":209,"column":6},"end":{"line":209,"column":58}}],"line":208},"22":{"loc":{"start":{"line":219,"column":11},"end":{"line":220,"column":51}},"type":"binary-expr","locations":[{"start":{"line":219,"column":11},"end":{"line":219,"column":28}},{"start":{"line":220,"column":6},"end":{"line":220,"column":51}}],"line":219},"23":{"loc":{"start":{"line":229,"column":11},"end":{"line":230,"column":47}},"type":"binary-expr","locations":[{"start":{"line":229,"column":11},"end":{"line":229,"column":28}},{"start":{"line":230,"column":6},"end":{"line":230,"column":47}}],"line":229},"24":{"loc":{"start":{"line":239,"column":11},"end":{"line":240,"column":44}},"type":"binary-expr","locations":[{"start":{"line":239,"column":11},"end":{"line":239,"column":28}},{"start":{"line":240,"column":6},"end":{"line":240,"column":44}}],"line":239},"25":{"loc":{"start":{"line":251,"column":4},"end":{"line":259,"column":5}},"type":"if","locations":[{"start":{"line":251,"column":4},"end":{"line":259,"column":5}},{"start":{"line":251,"column":4},"end":{"line":259,"column":5}}],"line":251},"26":{"loc":{"start":{"line":255,"column":6},"end":{"line":258,"column":7}},"type":"if","locations":[{"start":{"line":255,"column":6},"end":{"line":258,"column":7}},{"start":{"line":255,"column":6},"end":{"line":258,"column":7}}],"line":255},"27":{"loc":{"start":{"line":255,"column":10},"end":{"line":255,"column":42}},"type":"binary-expr","locations":[{"start":{"line":255,"column":10},"end":{"line":255,"column":17}},{"start":{"line":255,"column":21},"end":{"line":255,"column":42}}],"line":255},"28":{"loc":{"start":{"line":260,"column":4},"end":{"line":263,"column":5}},"type":"if","locations":[{"start":{"line":260,"column":4},"end":{"line":263,"column":5}},{"start":{"line":260,"column":4},"end":{"line":263,"column":5}}],"line":260},"29":{"loc":{"start":{"line":264,"column":4},"end":{"line":272,"column":5}},"type":"if","locations":[{"start":{"line":264,"column":4},"end":{"line":272,"column":5}},{"start":{"line":264,"column":4},"end":{"line":272,"column":5}}],"line":264},"30":{"loc":{"start":{"line":284,"column":4},"end":{"line":284,"column":30}},"type":"if","locations":[{"start":{"line":284,"column":4},"end":{"line":284,"column":30}},{"start":{"line":284,"column":4},"end":{"line":284,"column":30}}],"line":284},"31":{"loc":{"start":{"line":285,"column":4},"end":{"line":287,"column":5}},"type":"if","locations":[{"start":{"line":285,"column":4},"end":{"line":287,"column":5}},{"start":{"line":285,"column":4},"end":{"line":287,"column":5}}],"line":285},"32":{"loc":{"start":{"line":289,"column":4},"end":{"line":298,"column":5}},"type":"if","locations":[{"start":{"line":289,"column":4},"end":{"line":298,"column":5}},{"start":{"line":289,"column":4},"end":{"line":298,"column":5}}],"line":289}},"s":{"0":1787,"1":1787,"2":1787,"3":6815,"4":11,"5":0,"6":6804,"7":6804,"8":1142,"9":5662,"10":4319,"11":1343,"12":241,"13":0,"14":0,"15":241,"16":241,"17":0,"18":241,"19":52,"20":189,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":1164,"31":0,"32":0,"33":1164,"34":917,"35":201,"36":963,"37":755,"38":208,"39":225,"40":225,"41":316,"42":316,"43":225,"44":206,"45":206,"46":655,"47":116,"48":539,"49":539,"50":539,"51":0,"52":1787,"53":1787,"54":1787,"55":1787,"56":1552,"57":1552,"58":1552,"59":0,"60":1552,"61":2180,"62":0,"63":409,"64":225,"65":414,"66":225,"67":189,"68":189,"69":0,"70":414,"71":0,"72":414,"73":414,"74":414,"75":414,"76":0,"77":414,"78":414,"79":0,"80":414,"81":0,"82":414,"83":414,"84":414,"85":0,"86":0,"87":414,"88":1},"f":{"0":1787,"1":6815,"2":241,"3":0,"4":1164,"5":225,"6":206,"7":655,"8":1787,"9":1552,"10":2180,"11":0,"12":409,"13":225,"14":414,"15":414},"b":{"0":[11,0,6804],"1":[1142,5662],"2":[4319,1343],"3":[5662,5662],"4":[0,0,241],"5":[0,241],"6":[52,189],"7":[0,0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0,1164],"12":[201,716],"13":[917,345],"14":[755,208],"15":[963,963],"16":[225,225],"17":[225,91],"18":[116,539],"19":[539,0],"20":[1552,0],"21":[2180,2180],"22":[0,0],"23":[409,409],"24":[225,225],"25":[225,189],"26":[0,189],"27":[189,0],"28":[0,414],"29":[414,0],"30":[0,414],"31":[0,414],"32":[414,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"de5f19feb82502e616ce4333917bd11c3b855ea7","contentHash":"1e6318971a2e68e3e9374505c12430f923738b6b1e1a30588d65634ac92bfb83"},"/Users/rfeng/Projects/loopback3/strong-soap/src/security/BasicAuthSecurity.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/security/BasicAuthSecurity.js","statementMap":{"0":{"start":{"line":8,"column":8},"end":{"line":8,"column":25}},"1":{"start":{"line":9,"column":15},"end":{"line":9,"column":36}},"2":{"start":{"line":13,"column":4},"end":{"line":13,"column":19}},"3":{"start":{"line":14,"column":4},"end":{"line":14,"column":29}},"4":{"start":{"line":15,"column":4},"end":{"line":15,"column":29}},"5":{"start":{"line":19,"column":15},"end":{"line":20,"column":25}},"6":{"start":{"line":21,"column":4},"end":{"line":21,"column":44}},"7":{"start":{"line":25,"column":0},"end":{"line":25,"column":35}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":2},"end":{"line":12,"column":3}},"loc":{"start":{"line":12,"column":43},"end":{"line":16,"column":3}},"line":12},"1":{"name":"(anonymous_1)","decl":{"start":{"line":18,"column":2},"end":{"line":18,"column":3}},"loc":{"start":{"line":18,"column":26},"end":{"line":22,"column":3}},"line":18}},"branchMap":{"0":{"loc":{"start":{"line":19,"column":27},"end":{"line":19,"column":70}},"type":"binary-expr","locations":[{"start":{"line":19,"column":28},"end":{"line":19,"column":63}},{"start":{"line":19,"column":68},"end":{"line":19,"column":70}}],"line":19}},"s":{"0":1,"1":1,"2":2,"3":2,"4":2,"5":0,"6":0,"7":1},"f":{"0":2,"1":0},"b":{"0":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"a223d6e08a8250993425b4ee99741ffbb10bdef8","contentHash":"2a86be160079b51d6d113422346d63b674b1b4c3834fa9d6e70be767c2a9fd1e"},"/Users/rfeng/Projects/loopback3/strong-soap/src/security/ClientSSLSecurity.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/security/ClientSSLSecurity.js","statementMap":{"0":{"start":{"line":8,"column":8},"end":{"line":8,"column":31}},"1":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"2":{"start":{"line":10,"column":12},"end":{"line":10,"column":28}},"3":{"start":{"line":11,"column":8},"end":{"line":11,"column":25}},"4":{"start":{"line":12,"column":15},"end":{"line":12,"column":36}},"5":{"start":{"line":27,"column":4},"end":{"line":27,"column":19}},"6":{"start":{"line":28,"column":4},"end":{"line":36,"column":5}},"7":{"start":{"line":29,"column":6},"end":{"line":35,"column":7}},"8":{"start":{"line":30,"column":8},"end":{"line":30,"column":23}},"9":{"start":{"line":31,"column":13},"end":{"line":35,"column":7}},"10":{"start":{"line":32,"column":8},"end":{"line":32,"column":40}},"11":{"start":{"line":34,"column":8},"end":{"line":34,"column":80}},"12":{"start":{"line":38,"column":4},"end":{"line":46,"column":5}},"13":{"start":{"line":39,"column":6},"end":{"line":45,"column":7}},"14":{"start":{"line":40,"column":8},"end":{"line":40,"column":25}},"15":{"start":{"line":41,"column":13},"end":{"line":45,"column":7}},"16":{"start":{"line":42,"column":8},"end":{"line":42,"column":42}},"17":{"start":{"line":44,"column":8},"end":{"line":44,"column":81}},"18":{"start":{"line":48,"column":4},"end":{"line":57,"column":5}},"19":{"start":{"line":49,"column":6},"end":{"line":56,"column":7}},"20":{"start":{"line":50,"column":8},"end":{"line":50,"column":21}},"21":{"start":{"line":51,"column":13},"end":{"line":56,"column":7}},"22":{"start":{"line":52,"column":8},"end":{"line":52,"column":38}},"23":{"start":{"line":54,"column":8},"end":{"line":54,"column":26}},"24":{"start":{"line":55,"column":8},"end":{"line":55,"column":23}},"25":{"start":{"line":61,"column":4},"end":{"line":61,"column":27}},"26":{"start":{"line":62,"column":4},"end":{"line":62,"column":29}},"27":{"start":{"line":63,"column":4},"end":{"line":63,"column":25}},"28":{"start":{"line":64,"column":4},"end":{"line":64,"column":35}},"29":{"start":{"line":65,"column":4},"end":{"line":65,"column":45}},"30":{"start":{"line":69,"column":0},"end":{"line":69,"column":35}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":26,"column":2},"end":{"line":26,"column":3}},"loc":{"start":{"line":26,"column":38},"end":{"line":58,"column":3}},"line":26},"1":{"name":"(anonymous_1)","decl":{"start":{"line":60,"column":2},"end":{"line":60,"column":3}},"loc":{"start":{"line":60,"column":22},"end":{"line":66,"column":3}},"line":60}},"branchMap":{"0":{"loc":{"start":{"line":28,"column":4},"end":{"line":36,"column":5}},"type":"if","locations":[{"start":{"line":28,"column":4},"end":{"line":36,"column":5}},{"start":{"line":28,"column":4},"end":{"line":36,"column":5}}],"line":28},"1":{"loc":{"start":{"line":29,"column":6},"end":{"line":35,"column":7}},"type":"if","locations":[{"start":{"line":29,"column":6},"end":{"line":35,"column":7}},{"start":{"line":29,"column":6},"end":{"line":35,"column":7}}],"line":29},"2":{"loc":{"start":{"line":31,"column":13},"end":{"line":35,"column":7}},"type":"if","locations":[{"start":{"line":31,"column":13},"end":{"line":35,"column":7}},{"start":{"line":31,"column":13},"end":{"line":35,"column":7}}],"line":31},"3":{"loc":{"start":{"line":38,"column":4},"end":{"line":46,"column":5}},"type":"if","locations":[{"start":{"line":38,"column":4},"end":{"line":46,"column":5}},{"start":{"line":38,"column":4},"end":{"line":46,"column":5}}],"line":38},"4":{"loc":{"start":{"line":39,"column":6},"end":{"line":45,"column":7}},"type":"if","locations":[{"start":{"line":39,"column":6},"end":{"line":45,"column":7}},{"start":{"line":39,"column":6},"end":{"line":45,"column":7}}],"line":39},"5":{"loc":{"start":{"line":41,"column":13},"end":{"line":45,"column":7}},"type":"if","locations":[{"start":{"line":41,"column":13},"end":{"line":45,"column":7}},{"start":{"line":41,"column":13},"end":{"line":45,"column":7}}],"line":41},"6":{"loc":{"start":{"line":48,"column":4},"end":{"line":57,"column":5}},"type":"if","locations":[{"start":{"line":48,"column":4},"end":{"line":57,"column":5}},{"start":{"line":48,"column":4},"end":{"line":57,"column":5}}],"line":48},"7":{"loc":{"start":{"line":49,"column":6},"end":{"line":56,"column":7}},"type":"if","locations":[{"start":{"line":49,"column":6},"end":{"line":56,"column":7}},{"start":{"line":49,"column":6},"end":{"line":56,"column":7}}],"line":49},"8":{"loc":{"start":{"line":49,"column":10},"end":{"line":49,"column":50}},"type":"binary-expr","locations":[{"start":{"line":49,"column":10},"end":{"line":49,"column":29}},{"start":{"line":49,"column":33},"end":{"line":49,"column":50}}],"line":49},"9":{"loc":{"start":{"line":51,"column":13},"end":{"line":56,"column":7}},"type":"if","locations":[{"start":{"line":51,"column":13},"end":{"line":56,"column":7}},{"start":{"line":51,"column":13},"end":{"line":56,"column":7}}],"line":51}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":5,"6":5,"7":1,"8":1,"9":0,"10":0,"11":0,"12":5,"13":2,"14":2,"15":0,"16":0,"17":0,"18":5,"19":4,"20":2,"21":2,"22":0,"23":2,"24":2,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1},"f":{"0":5,"1":1},"b":{"0":[1,4],"1":[1,0],"2":[0,0],"3":[2,3],"4":[2,0],"5":[0,0],"6":[4,1],"7":[2,2],"8":[4,3],"9":[0,2]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"71640871cfb2b4858d7a749496eaf2d242382e8f","contentHash":"0137191e516bcb2a3da83333cbf8bcfbefeb2415fb9f47925985009fa667dbfe"},"/Users/rfeng/Projects/loopback3/strong-soap/src/security/ClientSSLSecurityPFX.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/security/ClientSSLSecurityPFX.js","statementMap":{"0":{"start":{"line":8,"column":8},"end":{"line":8,"column":31}},"1":{"start":{"line":9,"column":9},"end":{"line":9,"column":22}},"2":{"start":{"line":10,"column":12},"end":{"line":10,"column":28}},"3":{"start":{"line":11,"column":8},"end":{"line":11,"column":25}},"4":{"start":{"line":12,"column":15},"end":{"line":12,"column":36}},"5":{"start":{"line":25,"column":4},"end":{"line":25,"column":19}},"6":{"start":{"line":27,"column":4},"end":{"line":29,"column":5}},"7":{"start":{"line":28,"column":6},"end":{"line":28,"column":27}},"8":{"start":{"line":30,"column":4},"end":{"line":39,"column":5}},"9":{"start":{"line":31,"column":6},"end":{"line":38,"column":7}},"10":{"start":{"line":32,"column":8},"end":{"line":32,"column":23}},"11":{"start":{"line":33,"column":13},"end":{"line":38,"column":7}},"12":{"start":{"line":34,"column":8},"end":{"line":34,"column":40}},"13":{"start":{"line":36,"column":8},"end":{"line":37,"column":78}},"14":{"start":{"line":41,"column":4},"end":{"line":45,"column":5}},"15":{"start":{"line":42,"column":6},"end":{"line":44,"column":7}},"16":{"start":{"line":43,"column":8},"end":{"line":43,"column":37}},"17":{"start":{"line":46,"column":4},"end":{"line":46,"column":22}},"18":{"start":{"line":47,"column":4},"end":{"line":47,"column":35}},"19":{"start":{"line":51,"column":4},"end":{"line":51,"column":27}},"20":{"start":{"line":52,"column":4},"end":{"line":54,"column":5}},"21":{"start":{"line":53,"column":6},"end":{"line":53,"column":43}},"22":{"start":{"line":55,"column":4},"end":{"line":55,"column":35}},"23":{"start":{"line":56,"column":4},"end":{"line":56,"column":45}},"24":{"start":{"line":60,"column":0},"end":{"line":60,"column":38}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":24,"column":2},"end":{"line":24,"column":3}},"loc":{"start":{"line":24,"column":40},"end":{"line":48,"column":3}},"line":24},"1":{"name":"(anonymous_1)","decl":{"start":{"line":50,"column":2},"end":{"line":50,"column":3}},"loc":{"start":{"line":50,"column":22},"end":{"line":57,"column":3}},"line":50}},"branchMap":{"0":{"loc":{"start":{"line":27,"column":4},"end":{"line":29,"column":5}},"type":"if","locations":[{"start":{"line":27,"column":4},"end":{"line":29,"column":5}},{"start":{"line":27,"column":4},"end":{"line":29,"column":5}}],"line":27},"1":{"loc":{"start":{"line":30,"column":4},"end":{"line":39,"column":5}},"type":"if","locations":[{"start":{"line":30,"column":4},"end":{"line":39,"column":5}},{"start":{"line":30,"column":4},"end":{"line":39,"column":5}}],"line":30},"2":{"loc":{"start":{"line":31,"column":6},"end":{"line":38,"column":7}},"type":"if","locations":[{"start":{"line":31,"column":6},"end":{"line":38,"column":7}},{"start":{"line":31,"column":6},"end":{"line":38,"column":7}}],"line":31},"3":{"loc":{"start":{"line":33,"column":13},"end":{"line":38,"column":7}},"type":"if","locations":[{"start":{"line":33,"column":13},"end":{"line":38,"column":7}},{"start":{"line":33,"column":13},"end":{"line":38,"column":7}}],"line":33},"4":{"loc":{"start":{"line":41,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":41,"column":4},"end":{"line":45,"column":5}},{"start":{"line":41,"column":4},"end":{"line":45,"column":5}}],"line":41},"5":{"loc":{"start":{"line":42,"column":6},"end":{"line":44,"column":7}},"type":"if","locations":[{"start":{"line":42,"column":6},"end":{"line":44,"column":7}},{"start":{"line":42,"column":6},"end":{"line":44,"column":7}}],"line":42},"6":{"loc":{"start":{"line":52,"column":4},"end":{"line":54,"column":5}},"type":"if","locations":[{"start":{"line":52,"column":4},"end":{"line":54,"column":5}},{"start":{"line":52,"column":4},"end":{"line":54,"column":5}}],"line":52}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":5,"6":5,"7":2,"8":5,"9":3,"10":2,"11":1,"12":0,"13":1,"14":4,"15":3,"16":1,"17":4,"18":4,"19":1,"20":1,"21":0,"22":1,"23":1,"24":1},"f":{"0":5,"1":1},"b":{"0":[2,3],"1":[3,2],"2":[2,1],"3":[0,1],"4":[3,1],"5":[1,2],"6":[0,1]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"b93b161637be05ddddcc2a9a1c4cc10d2a98b7d9","contentHash":"ba3f28c3fa448be009d6ad569e58f7aab209b2af027c4b2c5cf3b4a1d7a67430"},"/Users/rfeng/Projects/loopback3/strong-soap/src/security/CookieSecurity.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/security/CookieSecurity.js","statementMap":{"0":{"start":{"line":8,"column":15},"end":{"line":8,"column":36}},"1":{"start":{"line":11,"column":2},"end":{"line":11,"column":75}},"2":{"start":{"line":19,"column":4},"end":{"line":19,"column":19}},"3":{"start":{"line":21,"column":4},"end":{"line":21,"column":69}},"4":{"start":{"line":23,"column":4},"end":{"line":25,"column":18}},"5":{"start":{"line":24,"column":16},"end":{"line":24,"column":31}},"6":{"start":{"line":29,"column":4},"end":{"line":29,"column":33}},"7":{"start":{"line":33,"column":0},"end":{"line":33,"column":32}}},"fnMap":{"0":{"name":"hasCookieHeader","decl":{"start":{"line":10,"column":9},"end":{"line":10,"column":24}},"loc":{"start":{"line":10,"column":34},"end":{"line":12,"column":1}},"line":10},"1":{"name":"(anonymous_1)","decl":{"start":{"line":18,"column":2},"end":{"line":18,"column":3}},"loc":{"start":{"line":18,"column":31},"end":{"line":26,"column":3}},"line":18},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":11},"end":{"line":24,"column":12}},"loc":{"start":{"line":24,"column":16},"end":{"line":24,"column":31}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":28,"column":2},"end":{"line":28,"column":3}},"loc":{"start":{"line":28,"column":26},"end":{"line":30,"column":3}},"line":28}},"branchMap":{"0":{"loc":{"start":{"line":11,"column":9},"end":{"line":11,"column":74}},"type":"binary-expr","locations":[{"start":{"line":11,"column":9},"end":{"line":11,"column":35}},{"start":{"line":11,"column":39},"end":{"line":11,"column":74}}],"line":11},"1":{"loc":{"start":{"line":21,"column":13},"end":{"line":21,"column":68}},"type":"cond-expr","locations":[{"start":{"line":21,"column":39},"end":{"line":21,"column":59}},{"start":{"line":21,"column":62},"end":{"line":21,"column":68}}],"line":21},"2":{"loc":{"start":{"line":23,"column":19},"end":{"line":23,"column":60}},"type":"cond-expr","locations":[{"start":{"line":23,"column":43},"end":{"line":23,"column":49}},{"start":{"line":23,"column":52},"end":{"line":23,"column":60}}],"line":23}},"s":{"0":1,"1":4,"2":4,"3":4,"4":4,"5":4,"6":0,"7":1},"f":{"0":4,"1":4,"2":4,"3":0},"b":{"0":[4,1],"1":[1,3],"2":[1,3]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"a6c359eaa30fe71e600bb6e688b57641fd67f197","contentHash":"62e05573fd5874345072ff2e22d557c0d7fda5051f95d49d1f30e78c82f78b70"},"/Users/rfeng/Projects/loopback3/strong-soap/src/security/WSSecurity.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/security/WSSecurity.js","statementMap":{"0":{"start":{"line":8,"column":15},"end":{"line":8,"column":36}},"1":{"start":{"line":9,"column":13},"end":{"line":9,"column":30}},"2":{"start":{"line":10,"column":21},"end":{"line":10,"column":55}},"3":{"start":{"line":11,"column":25},"end":{"line":11,"column":59}},"4":{"start":{"line":12,"column":16},"end":{"line":12,"column":45}},"5":{"start":{"line":16,"column":4},"end":{"line":16,"column":28}},"6":{"start":{"line":17,"column":4},"end":{"line":17,"column":19}},"7":{"start":{"line":18,"column":4},"end":{"line":18,"column":30}},"8":{"start":{"line":19,"column":4},"end":{"line":19,"column":30}},"9":{"start":{"line":23,"column":4},"end":{"line":29,"column":5}},"10":{"start":{"line":24,"column":6},"end":{"line":24,"column":62}},"11":{"start":{"line":25,"column":6},"end":{"line":25,"column":19}},"12":{"start":{"line":27,"column":6},"end":{"line":28,"column":23}},"13":{"start":{"line":31,"column":4},"end":{"line":33,"column":5}},"14":{"start":{"line":32,"column":6},"end":{"line":32,"column":42}},"15":{"start":{"line":35,"column":4},"end":{"line":36,"column":78}},"16":{"start":{"line":37,"column":4},"end":{"line":39,"column":39}},"17":{"start":{"line":42,"column":4},"end":{"line":44,"column":5}},"18":{"start":{"line":43,"column":6},"end":{"line":43,"column":42}},"19":{"start":{"line":45,"column":4},"end":{"line":47,"column":39}},"20":{"start":{"line":48,"column":4},"end":{"line":50,"column":5}},"21":{"start":{"line":49,"column":6},"end":{"line":49,"column":34}},"22":{"start":{"line":51,"column":4},"end":{"line":53,"column":5}},"23":{"start":{"line":52,"column":6},"end":{"line":52,"column":54}},"24":{"start":{"line":57,"column":21},"end":{"line":57,"column":59}},"25":{"start":{"line":58,"column":4},"end":{"line":60,"column":5}},"26":{"start":{"line":59,"column":6},"end":{"line":59,"column":54}},"27":{"start":{"line":61,"column":4},"end":{"line":63,"column":5}},"28":{"start":{"line":62,"column":6},"end":{"line":62,"column":55}},"29":{"start":{"line":65,"column":4},"end":{"line":69,"column":55}},"30":{"start":{"line":71,"column":14},"end":{"line":71,"column":24}},"31":{"start":{"line":72,"column":18},"end":{"line":72,"column":32}},"32":{"start":{"line":73,"column":23},"end":{"line":73,"column":25}},"33":{"start":{"line":74,"column":4},"end":{"line":81,"column":5}},"34":{"start":{"line":75,"column":20},"end":{"line":75,"column":69}},"35":{"start":{"line":77,"column":22},"end":{"line":78,"column":52}},"36":{"start":{"line":79,"column":6},"end":{"line":79,"column":48}},"37":{"start":{"line":80,"column":6},"end":{"line":80,"column":48}},"38":{"start":{"line":83,"column":26},"end":{"line":84,"column":54}},"39":{"start":{"line":86,"column":4},"end":{"line":86,"column":61}},"40":{"start":{"line":87,"column":4},"end":{"line":89,"column":5}},"41":{"start":{"line":88,"column":6},"end":{"line":88,"column":54}},"42":{"start":{"line":92,"column":4},"end":{"line":97,"column":5}},"43":{"start":{"line":94,"column":18},"end":{"line":94,"column":43}},"44":{"start":{"line":95,"column":6},"end":{"line":95,"column":44}},"45":{"start":{"line":96,"column":6},"end":{"line":96,"column":37}},"46":{"start":{"line":100,"column":4},"end":{"line":122,"column":5}},"47":{"start":{"line":101,"column":6},"end":{"line":104,"column":30}},"48":{"start":{"line":106,"column":6},"end":{"line":111,"column":7}},"49":{"start":{"line":107,"column":8},"end":{"line":110,"column":23}},"50":{"start":{"line":113,"column":6},"end":{"line":116,"column":62}},"51":{"start":{"line":118,"column":6},"end":{"line":121,"column":21}},"52":{"start":{"line":127,"column":0},"end":{"line":127,"column":28}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":15,"column":2},"end":{"line":15,"column":3}},"loc":{"start":{"line":15,"column":43},"end":{"line":54,"column":3}},"line":15},"1":{"name":"(anonymous_1)","decl":{"start":{"line":56,"column":2},"end":{"line":56,"column":3}},"loc":{"start":{"line":56,"column":32},"end":{"line":124,"column":3}},"line":56}},"branchMap":{"0":{"loc":{"start":{"line":16,"column":14},"end":{"line":16,"column":27}},"type":"binary-expr","locations":[{"start":{"line":16,"column":14},"end":{"line":16,"column":21}},{"start":{"line":16,"column":25},"end":{"line":16,"column":27}}],"line":16},"1":{"loc":{"start":{"line":23,"column":4},"end":{"line":29,"column":5}},"type":"if","locations":[{"start":{"line":23,"column":4},"end":{"line":29,"column":5}},{"start":{"line":23,"column":4},"end":{"line":29,"column":5}}],"line":23},"2":{"loc":{"start":{"line":24,"column":27},"end":{"line":24,"column":61}},"type":"cond-expr","locations":[{"start":{"line":24,"column":37},"end":{"line":24,"column":44}},{"start":{"line":24,"column":47},"end":{"line":24,"column":61}}],"line":24},"3":{"loc":{"start":{"line":27,"column":27},"end":{"line":28,"column":22}},"type":"cond-expr","locations":[{"start":{"line":27,"column":50},"end":{"line":27,"column":70}},{"start":{"line":28,"column":8},"end":{"line":28,"column":22}}],"line":27},"4":{"loc":{"start":{"line":31,"column":4},"end":{"line":33,"column":5}},"type":"if","locations":[{"start":{"line":31,"column":4},"end":{"line":33,"column":5}},{"start":{"line":31,"column":4},"end":{"line":33,"column":5}}],"line":31},"5":{"loc":{"start":{"line":35,"column":25},"end":{"line":36,"column":77}},"type":"cond-expr","locations":[{"start":{"line":36,"column":48},"end":{"line":36,"column":70}},{"start":{"line":36,"column":73},"end":{"line":36,"column":77}}],"line":35},"6":{"loc":{"start":{"line":35,"column":25},"end":{"line":36,"column":45}},"type":"binary-expr","locations":[{"start":{"line":35,"column":25},"end":{"line":35,"column":45}},{"start":{"line":36,"column":4},"end":{"line":36,"column":45}}],"line":35},"7":{"loc":{"start":{"line":37,"column":28},"end":{"line":39,"column":38}},"type":"cond-expr","locations":[{"start":{"line":39,"column":6},"end":{"line":39,"column":31}},{"start":{"line":39,"column":34},"end":{"line":39,"column":38}}],"line":37},"8":{"loc":{"start":{"line":37,"column":28},"end":{"line":38,"column":48}},"type":"binary-expr","locations":[{"start":{"line":37,"column":28},"end":{"line":37,"column":51}},{"start":{"line":38,"column":4},"end":{"line":38,"column":48}}],"line":37},"9":{"loc":{"start":{"line":42,"column":4},"end":{"line":44,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":44,"column":5}},{"start":{"line":42,"column":4},"end":{"line":44,"column":5}}],"line":42},"10":{"loc":{"start":{"line":45,"column":28},"end":{"line":47,"column":38}},"type":"cond-expr","locations":[{"start":{"line":47,"column":6},"end":{"line":47,"column":31}},{"start":{"line":47,"column":34},"end":{"line":47,"column":38}}],"line":45},"11":{"loc":{"start":{"line":45,"column":28},"end":{"line":46,"column":48}},"type":"binary-expr","locations":[{"start":{"line":45,"column":28},"end":{"line":45,"column":51}},{"start":{"line":46,"column":4},"end":{"line":46,"column":48}}],"line":45},"12":{"loc":{"start":{"line":48,"column":4},"end":{"line":50,"column":5}},"type":"if","locations":[{"start":{"line":48,"column":4},"end":{"line":50,"column":5}},{"start":{"line":48,"column":4},"end":{"line":50,"column":5}}],"line":48},"13":{"loc":{"start":{"line":51,"column":4},"end":{"line":53,"column":5}},"type":"if","locations":[{"start":{"line":51,"column":4},"end":{"line":53,"column":5}},{"start":{"line":51,"column":4},"end":{"line":53,"column":5}}],"line":51},"14":{"loc":{"start":{"line":58,"column":4},"end":{"line":60,"column":5}},"type":"if","locations":[{"start":{"line":58,"column":4},"end":{"line":60,"column":5}},{"start":{"line":58,"column":4},"end":{"line":60,"column":5}}],"line":58},"15":{"loc":{"start":{"line":61,"column":4},"end":{"line":63,"column":5}},"type":"if","locations":[{"start":{"line":61,"column":4},"end":{"line":63,"column":5}},{"start":{"line":61,"column":4},"end":{"line":63,"column":5}}],"line":61},"16":{"loc":{"start":{"line":74,"column":4},"end":{"line":81,"column":5}},"type":"if","locations":[{"start":{"line":74,"column":4},"end":{"line":81,"column":5}},{"start":{"line":74,"column":4},"end":{"line":81,"column":5}}],"line":74},"17":{"loc":{"start":{"line":87,"column":4},"end":{"line":89,"column":5}},"type":"if","locations":[{"start":{"line":87,"column":4},"end":{"line":89,"column":5}},{"start":{"line":87,"column":4},"end":{"line":89,"column":5}}],"line":87},"18":{"loc":{"start":{"line":92,"column":4},"end":{"line":97,"column":5}},"type":"if","locations":[{"start":{"line":92,"column":4},"end":{"line":97,"column":5}},{"start":{"line":92,"column":4},"end":{"line":97,"column":5}}],"line":92},"19":{"loc":{"start":{"line":92,"column":7},"end":{"line":92,"column":62}},"type":"binary-expr","locations":[{"start":{"line":92,"column":7},"end":{"line":92,"column":21}},{"start":{"line":92,"column":25},"end":{"line":92,"column":62}}],"line":92},"20":{"loc":{"start":{"line":100,"column":4},"end":{"line":122,"column":5}},"type":"if","locations":[{"start":{"line":100,"column":4},"end":{"line":122,"column":5}},{"start":{"line":100,"column":4},"end":{"line":122,"column":5}}],"line":100},"21":{"loc":{"start":{"line":106,"column":6},"end":{"line":111,"column":7}},"type":"if","locations":[{"start":{"line":106,"column":6},"end":{"line":111,"column":7}},{"start":{"line":106,"column":6},"end":{"line":111,"column":7}}],"line":106}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":8,"6":8,"7":8,"8":8,"9":8,"10":2,"11":2,"12":6,"13":8,"14":2,"15":8,"16":8,"17":8,"18":2,"19":8,"20":8,"21":2,"22":8,"23":0,"24":6,"25":6,"26":1,"27":6,"28":0,"29":6,"30":6,"31":6,"32":6,"33":6,"34":5,"35":5,"36":5,"37":5,"38":6,"39":6,"40":6,"41":5,"42":6,"43":1,"44":1,"45":1,"46":6,"47":6,"48":6,"49":1,"50":0,"51":0,"52":1},"f":{"0":8,"1":6},"b":{"0":[8,1],"1":[2,6],"2":[2,0],"3":[3,3],"4":[2,6],"5":[1,7],"6":[8,8],"7":[1,7],"8":[8,8],"9":[2,6],"10":[1,7],"11":[8,8],"12":[2,6],"13":[0,8],"14":[1,5],"15":[0,6],"16":[5,1],"17":[5,1],"18":[1,5],"19":[6,5],"20":[6,0],"21":[1,5]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"47000217d2233d12f04469142562933e87c8b490","contentHash":"4872b3d123dbebb2151d429dad8086023e5bc526fd7f15e253729288cecc534f"},"/Users/rfeng/Projects/loopback3/strong-soap/src/utils.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/utils.js","statementMap":{"0":{"start":{"line":8,"column":13},"end":{"line":8,"column":30}},"1":{"start":{"line":9,"column":0},"end":{"line":15,"column":2}},"2":{"start":{"line":11,"column":15},"end":{"line":11,"column":40}},"3":{"start":{"line":12,"column":17},"end":{"line":12,"column":70}},"4":{"start":{"line":13,"column":2},"end":{"line":13,"column":47}},"5":{"start":{"line":14,"column":2},"end":{"line":14,"column":33}},"6":{"start":{"line":17,"column":0},"end":{"line":27,"column":2}},"7":{"start":{"line":19,"column":15},"end":{"line":19,"column":40}},"8":{"start":{"line":20,"column":17},"end":{"line":20,"column":51}},"9":{"start":{"line":21,"column":2},"end":{"line":25,"column":6}},"10":{"start":{"line":26,"column":2},"end":{"line":26,"column":33}},"11":{"start":{"line":29,"column":17},"end":{"line":29,"column":19}},"12":{"start":{"line":31,"column":0},"end":{"line":31,"column":32}},"13":{"start":{"line":39,"column":0},"end":{"line":46,"column":2}},"14":{"start":{"line":40,"column":2},"end":{"line":45,"column":3}},"15":{"start":{"line":41,"column":4},"end":{"line":41,"column":35}},"16":{"start":{"line":41,"column":26},"end":{"line":41,"column":35}},"17":{"start":{"line":42,"column":4},"end":{"line":44,"column":5}},"18":{"start":{"line":43,"column":6},"end":{"line":43,"column":15}},"19":{"start":{"line":48,"column":0},"end":{"line":57,"column":2}},"20":{"start":{"line":49,"column":2},"end":{"line":55,"column":3}},"21":{"start":{"line":51,"column":4},"end":{"line":54,"column":7}},"22":{"start":{"line":52,"column":6},"end":{"line":53,"column":29}},"23":{"start":{"line":53,"column":8},"end":{"line":53,"column":29}},"24":{"start":{"line":56,"column":2},"end":{"line":56,"column":14}},"25":{"start":{"line":59,"column":0},"end":{"line":70,"column":2}},"26":{"start":{"line":61,"column":4},"end":{"line":61,"column":32}},"27":{"start":{"line":64,"column":2},"end":{"line":69,"column":35}},"28":{"start":{"line":72,"column":0},"end":{"line":85,"column":1}},"29":{"start":{"line":74,"column":16},"end":{"line":82,"column":4}},"30":{"start":{"line":75,"column":4},"end":{"line":81,"column":5}},"31":{"start":{"line":76,"column":6},"end":{"line":80,"column":7}},"32":{"start":{"line":77,"column":8},"end":{"line":77,"column":20}},"33":{"start":{"line":79,"column":8},"end":{"line":79,"column":48}},"34":{"start":{"line":83,"column":2},"end":{"line":83,"column":23}},"35":{"start":{"line":84,"column":2},"end":{"line":84,"column":12}}},"fnMap":{"0":{"name":"passwordDigest","decl":{"start":{"line":9,"column":42},"end":{"line":9,"column":56}},"loc":{"start":{"line":9,"column":83},"end":{"line":15,"column":1}},"line":9},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":25},"end":{"line":17,"column":26}},"loc":{"start":{"line":17,"column":61},"end":{"line":27,"column":1}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":39,"column":21},"end":{"line":39,"column":22}},"loc":{"start":{"line":39,"column":51},"end":{"line":46,"column":1}},"line":39},"3":{"name":"extend","decl":{"start":{"line":48,"column":26},"end":{"line":48,"column":32}},"loc":{"start":{"line":48,"column":44},"end":{"line":57,"column":1}},"line":48},"4":{"name":"(anonymous_4)","decl":{"start":{"line":51,"column":29},"end":{"line":51,"column":30}},"loc":{"start":{"line":51,"column":43},"end":{"line":54,"column":5}},"line":51},"5":{"name":"(anonymous_5)","decl":{"start":{"line":59,"column":20},"end":{"line":59,"column":21}},"loc":{"start":{"line":59,"column":32},"end":{"line":70,"column":1}},"line":59},"6":{"name":"pad","decl":{"start":{"line":60,"column":11},"end":{"line":60,"column":14}},"loc":{"start":{"line":60,"column":18},"end":{"line":62,"column":3}},"line":60},"7":{"name":"createPromiseCallback","decl":{"start":{"line":72,"column":41},"end":{"line":72,"column":62}},"loc":{"start":{"line":72,"column":65},"end":{"line":85,"column":1}},"line":72},"8":{"name":"(anonymous_8)","decl":{"start":{"line":74,"column":28},"end":{"line":74,"column":29}},"loc":{"start":{"line":74,"column":54},"end":{"line":82,"column":3}},"line":74},"9":{"name":"(anonymous_9)","decl":{"start":{"line":75,"column":9},"end":{"line":75,"column":10}},"loc":{"start":{"line":75,"column":53},"end":{"line":81,"column":5}},"line":75}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":29},"end":{"line":12,"column":40}},"type":"binary-expr","locations":[{"start":{"line":12,"column":29},"end":{"line":12,"column":34}},{"start":{"line":12,"column":38},"end":{"line":12,"column":40}}],"line":12},"1":{"loc":{"start":{"line":20,"column":29},"end":{"line":20,"column":40}},"type":"binary-expr","locations":[{"start":{"line":20,"column":29},"end":{"line":20,"column":34}},{"start":{"line":20,"column":38},"end":{"line":20,"column":40}}],"line":20},"2":{"loc":{"start":{"line":41,"column":4},"end":{"line":41,"column":35}},"type":"if","locations":[{"start":{"line":41,"column":4},"end":{"line":41,"column":35}},{"start":{"line":41,"column":4},"end":{"line":41,"column":35}}],"line":41},"3":{"loc":{"start":{"line":42,"column":4},"end":{"line":44,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":44,"column":5}},{"start":{"line":42,"column":4},"end":{"line":44,"column":5}}],"line":42},"4":{"loc":{"start":{"line":49,"column":2},"end":{"line":55,"column":3}},"type":"if","locations":[{"start":{"line":49,"column":2},"end":{"line":55,"column":3}},{"start":{"line":49,"column":2},"end":{"line":55,"column":3}}],"line":49},"5":{"loc":{"start":{"line":49,"column":6},"end":{"line":50,"column":43}},"type":"binary-expr","locations":[{"start":{"line":49,"column":6},"end":{"line":49,"column":19}},{"start":{"line":49,"column":23},"end":{"line":49,"column":47}},{"start":{"line":50,"column":4},"end":{"line":50,"column":16}},{"start":{"line":50,"column":20},"end":{"line":50,"column":43}}],"line":49},"6":{"loc":{"start":{"line":52,"column":6},"end":{"line":53,"column":29}},"type":"if","locations":[{"start":{"line":52,"column":6},"end":{"line":53,"column":29}},{"start":{"line":52,"column":6},"end":{"line":53,"column":29}}],"line":52},"7":{"loc":{"start":{"line":61,"column":11},"end":{"line":61,"column":31}},"type":"cond-expr","locations":[{"start":{"line":61,"column":20},"end":{"line":61,"column":27}},{"start":{"line":61,"column":30},"end":{"line":61,"column":31}}],"line":61},"8":{"loc":{"start":{"line":76,"column":6},"end":{"line":80,"column":7}},"type":"if","locations":[{"start":{"line":76,"column":6},"end":{"line":80,"column":7}},{"start":{"line":76,"column":6},"end":{"line":80,"column":7}}],"line":76}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":2,"8":2,"9":2,"10":2,"11":1,"12":1,"13":1,"14":0,"15":0,"16":0,"17":0,"18":0,"19":1,"20":0,"21":0,"22":0,"23":0,"24":0,"25":1,"26":65,"27":13,"28":1,"29":4,"30":4,"31":4,"32":0,"33":4,"34":4,"35":4},"f":{"0":1,"1":2,"2":0,"3":0,"4":0,"5":13,"6":65,"7":4,"8":4,"9":4},"b":{"0":[1,0],"1":[2,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0,0,0],"6":[0,0],"7":[33,32],"8":[0,4]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"b8aed481b73538073476ae8eb57922f897809b1e","contentHash":"01e62e1c23fc47222269fe424fd1471f4ade3bd9fbcdbffc667c5e8b65544c9d"},"/Users/rfeng/Projects/loopback3/strong-soap/src/security/BearerSecurity.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/security/BearerSecurity.js","statementMap":{"0":{"start":{"line":8,"column":8},"end":{"line":8,"column":25}},"1":{"start":{"line":9,"column":15},"end":{"line":9,"column":36}},"2":{"start":{"line":13,"column":4},"end":{"line":13,"column":19}},"3":{"start":{"line":14,"column":4},"end":{"line":14,"column":23}},"4":{"start":{"line":18,"column":4},"end":{"line":18,"column":51}},"5":{"start":{"line":22,"column":0},"end":{"line":22,"column":32}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":2},"end":{"line":12,"column":3}},"loc":{"start":{"line":12,"column":30},"end":{"line":15,"column":3}},"line":12},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":2},"end":{"line":17,"column":3}},"loc":{"start":{"line":17,"column":26},"end":{"line":19,"column":3}},"line":17}},"branchMap":{},"s":{"0":1,"1":1,"2":2,"3":2,"4":0,"5":1},"f":{"0":2,"1":0},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"75c2cfb46ccb2cb444b0e6f138c260ff8f45bf65","contentHash":"0d8e591eefa7b51733d8bc7cc56fecb131cf666eae0f9db520d351e80e9095d6"},"/Users/rfeng/Projects/loopback3/strong-soap/src/security/NTLMSecurity.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/security/NTLMSecurity.js","statementMap":{"0":{"start":{"line":8,"column":8},"end":{"line":8,"column":25}},"1":{"start":{"line":9,"column":15},"end":{"line":9,"column":36}},"2":{"start":{"line":13,"column":4},"end":{"line":13,"column":19}},"3":{"start":{"line":14,"column":4},"end":{"line":14,"column":29}},"4":{"start":{"line":15,"column":4},"end":{"line":15,"column":29}},"5":{"start":{"line":16,"column":4},"end":{"line":16,"column":25}},"6":{"start":{"line":17,"column":4},"end":{"line":17,"column":35}},"7":{"start":{"line":19,"column":4},"end":{"line":19,"column":45}},"8":{"start":{"line":23,"column":4},"end":{"line":23,"column":37}},"9":{"start":{"line":24,"column":4},"end":{"line":24,"column":37}},"10":{"start":{"line":25,"column":4},"end":{"line":25,"column":33}},"11":{"start":{"line":26,"column":4},"end":{"line":26,"column":43}},"12":{"start":{"line":27,"column":4},"end":{"line":27,"column":53}},"13":{"start":{"line":28,"column":4},"end":{"line":28,"column":35}},"14":{"start":{"line":33,"column":0},"end":{"line":33,"column":30}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":2},"end":{"line":12,"column":3}},"loc":{"start":{"line":12,"column":82},"end":{"line":20,"column":3}},"line":12},"1":{"name":"(anonymous_1)","decl":{"start":{"line":22,"column":2},"end":{"line":22,"column":3}},"loc":{"start":{"line":22,"column":22},"end":{"line":29,"column":3}},"line":22}},"branchMap":{},"s":{"0":1,"1":1,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":1},"f":{"0":0,"1":0},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"22670776bc0dfb090ae34de30e8eb4bd1d9a7d69","contentHash":"0d9caa0cfab167ad4ed0300246e2b82c2df657aa492b27c67b3cc50190f3584c"},"/Users/rfeng/Projects/loopback3/strong-soap/src/soap.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/soap.js","statementMap":{"0":{"start":{"line":8,"column":13},"end":{"line":8,"column":32}},"1":{"start":{"line":9,"column":11},"end":{"line":9,"column":30}},"2":{"start":{"line":10,"column":15},"end":{"line":10,"column":32}},"3":{"start":{"line":11,"column":13},"end":{"line":11,"column":34}},"4":{"start":{"line":12,"column":19},"end":{"line":12,"column":52}},"5":{"start":{"line":13,"column":11},"end":{"line":13,"column":36}},"6":{"start":{"line":14,"column":13},"end":{"line":14,"column":29}},"7":{"start":{"line":15,"column":10},"end":{"line":15,"column":46}},"8":{"start":{"line":17,"column":17},"end":{"line":17,"column":19}},"9":{"start":{"line":20,"column":2},"end":{"line":23,"column":3}},"10":{"start":{"line":21,"column":4},"end":{"line":21,"column":23}},"11":{"start":{"line":22,"column":4},"end":{"line":22,"column":17}},"12":{"start":{"line":24,"column":2},"end":{"line":24,"column":48}},"13":{"start":{"line":26,"column":13},"end":{"line":26,"column":28}},"14":{"start":{"line":27,"column":2},"end":{"line":42,"column":3}},"15":{"start":{"line":28,"column":4},"end":{"line":28,"column":50}},"16":{"start":{"line":29,"column":4},"end":{"line":31,"column":7}},"17":{"start":{"line":30,"column":6},"end":{"line":30,"column":27}},"18":{"start":{"line":34,"column":4},"end":{"line":41,"column":7}},"19":{"start":{"line":35,"column":6},"end":{"line":39,"column":7}},"20":{"start":{"line":36,"column":8},"end":{"line":36,"column":29}},"21":{"start":{"line":38,"column":8},"end":{"line":38,"column":31}},"22":{"start":{"line":40,"column":6},"end":{"line":40,"column":27}},"23":{"start":{"line":46,"column":2},"end":{"line":50,"column":3}},"24":{"start":{"line":47,"column":4},"end":{"line":47,"column":24}},"25":{"start":{"line":48,"column":4},"end":{"line":48,"column":23}},"26":{"start":{"line":49,"column":4},"end":{"line":49,"column":17}},"27":{"start":{"line":51,"column":2},"end":{"line":51,"column":42}},"28":{"start":{"line":52,"column":2},"end":{"line":52,"column":78}},"29":{"start":{"line":53,"column":2},"end":{"line":55,"column":5}},"30":{"start":{"line":54,"column":4},"end":{"line":54,"column":63}},"31":{"start":{"line":59,"column":2},"end":{"line":59,"column":95}},"32":{"start":{"line":60,"column":16},"end":{"line":60,"column":18}},"33":{"start":{"line":61,"column":11},"end":{"line":61,"column":24}},"34":{"start":{"line":62,"column":10},"end":{"line":62,"column":14}},"35":{"start":{"line":64,"column":2},"end":{"line":70,"column":3}},"36":{"start":{"line":65,"column":4},"end":{"line":65,"column":28}},"37":{"start":{"line":66,"column":4},"end":{"line":66,"column":24}},"38":{"start":{"line":67,"column":4},"end":{"line":67,"column":32}},"39":{"start":{"line":68,"column":4},"end":{"line":68,"column":22}},"40":{"start":{"line":69,"column":4},"end":{"line":69,"column":22}},"41":{"start":{"line":72,"column":13},"end":{"line":72,"column":59}},"42":{"start":{"line":73,"column":2},"end":{"line":73,"column":59}},"43":{"start":{"line":76,"column":0},"end":{"line":76,"column":28}},"44":{"start":{"line":77,"column":0},"end":{"line":77,"column":55}},"45":{"start":{"line":78,"column":0},"end":{"line":78,"column":41}},"46":{"start":{"line":79,"column":0},"end":{"line":79,"column":49}},"47":{"start":{"line":80,"column":0},"end":{"line":80,"column":55}},"48":{"start":{"line":81,"column":0},"end":{"line":81,"column":61}},"49":{"start":{"line":82,"column":0},"end":{"line":82,"column":49}},"50":{"start":{"line":83,"column":0},"end":{"line":83,"column":36}},"51":{"start":{"line":84,"column":0},"end":{"line":84,"column":40}},"52":{"start":{"line":85,"column":0},"end":{"line":85,"column":24}},"53":{"start":{"line":86,"column":0},"end":{"line":86,"column":27}},"54":{"start":{"line":87,"column":0},"end":{"line":87,"column":39}},"55":{"start":{"line":88,"column":0},"end":{"line":88,"column":51}},"56":{"start":{"line":89,"column":0},"end":{"line":89,"column":29}},"57":{"start":{"line":92,"column":0},"end":{"line":92,"column":24}},"58":{"start":{"line":93,"column":0},"end":{"line":93,"column":24}},"59":{"start":{"line":94,"column":0},"end":{"line":94,"column":32}}},"fnMap":{"0":{"name":"_requestWSDL","decl":{"start":{"line":19,"column":9},"end":{"line":19,"column":21}},"loc":{"start":{"line":19,"column":46},"end":{"line":43,"column":1}},"line":19},"1":{"name":"(anonymous_1)","decl":{"start":{"line":29,"column":21},"end":{"line":29,"column":22}},"loc":{"start":{"line":29,"column":32},"end":{"line":31,"column":5}},"line":29},"2":{"name":"(anonymous_2)","decl":{"start":{"line":34,"column":27},"end":{"line":34,"column":28}},"loc":{"start":{"line":34,"column":47},"end":{"line":41,"column":5}},"line":34},"3":{"name":"createClient","decl":{"start":{"line":45,"column":9},"end":{"line":45,"column":21}},"loc":{"start":{"line":45,"column":56},"end":{"line":56,"column":1}},"line":45},"4":{"name":"(anonymous_4)","decl":{"start":{"line":53,"column":29},"end":{"line":53,"column":30}},"loc":{"start":{"line":53,"column":49},"end":{"line":55,"column":3}},"line":53},"5":{"name":"listen","decl":{"start":{"line":58,"column":9},"end":{"line":58,"column":15}},"loc":{"start":{"line":58,"column":54},"end":{"line":74,"column":1}},"line":58}},"branchMap":{"0":{"loc":{"start":{"line":20,"column":2},"end":{"line":23,"column":3}},"type":"if","locations":[{"start":{"line":20,"column":2},"end":{"line":23,"column":3}},{"start":{"line":20,"column":2},"end":{"line":23,"column":3}}],"line":20},"1":{"loc":{"start":{"line":24,"column":15},"end":{"line":24,"column":47}},"type":"binary-expr","locations":[{"start":{"line":24,"column":15},"end":{"line":24,"column":33}},{"start":{"line":24,"column":37},"end":{"line":24,"column":47}}],"line":24},"2":{"loc":{"start":{"line":27,"column":2},"end":{"line":42,"column":3}},"type":"if","locations":[{"start":{"line":27,"column":2},"end":{"line":42,"column":3}},{"start":{"line":27,"column":2},"end":{"line":42,"column":3}}],"line":27},"3":{"loc":{"start":{"line":35,"column":6},"end":{"line":39,"column":7}},"type":"if","locations":[{"start":{"line":35,"column":6},"end":{"line":39,"column":7}},{"start":{"line":35,"column":6},"end":{"line":39,"column":7}}],"line":35},"4":{"loc":{"start":{"line":46,"column":2},"end":{"line":50,"column":3}},"type":"if","locations":[{"start":{"line":46,"column":2},"end":{"line":50,"column":3}},{"start":{"line":46,"column":2},"end":{"line":50,"column":3}}],"line":46},"5":{"loc":{"start":{"line":51,"column":13},"end":{"line":51,"column":41}},"type":"binary-expr","locations":[{"start":{"line":51,"column":13},"end":{"line":51,"column":29}},{"start":{"line":51,"column":33},"end":{"line":51,"column":41}}],"line":51},"6":{"loc":{"start":{"line":54,"column":18},"end":{"line":54,"column":61}},"type":"binary-expr","locations":[{"start":{"line":54,"column":18},"end":{"line":54,"column":22}},{"start":{"line":54,"column":26},"end":{"line":54,"column":61}}],"line":54},"7":{"loc":{"start":{"line":64,"column":2},"end":{"line":70,"column":3}},"type":"if","locations":[{"start":{"line":64,"column":2},"end":{"line":70,"column":3}},{"start":{"line":64,"column":2},"end":{"line":70,"column":3}}],"line":64},"8":{"loc":{"start":{"line":72,"column":29},"end":{"line":72,"column":44}},"type":"binary-expr","locations":[{"start":{"line":72,"column":29},"end":{"line":72,"column":32}},{"start":{"line":72,"column":36},"end":{"line":72,"column":44}}],"line":72}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":193,"10":0,"11":0,"12":193,"13":193,"14":193,"15":78,"16":78,"17":78,"18":115,"19":115,"20":3,"21":112,"22":112,"23":193,"24":69,"25":69,"26":69,"27":193,"28":193,"29":193,"30":193,"31":38,"32":38,"33":38,"34":38,"35":38,"36":3,"37":3,"38":3,"39":3,"40":3,"41":38,"42":38,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1},"f":{"0":193,"1":78,"2":115,"3":193,"4":193,"5":38},"b":{"0":[0,193],"1":[193,192],"2":[78,115],"3":[3,112],"4":[69,124],"5":[193,193],"6":[193,190],"7":[3,35],"8":[38,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"474405accf56a746b2ada5dbc67d4cad5bac99f5","contentHash":"84211a5716b7cfd7039c30f2336e80b3e3fea68723cd848b16dae75b750926bd"},"/Users/rfeng/Projects/loopback3/strong-soap/src/client.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/client.js","statementMap":{"0":{"start":{"line":8,"column":8},"end":{"line":8,"column":30}},"1":{"start":{"line":9,"column":17},"end":{"line":9,"column":34}},"2":{"start":{"line":10,"column":11},"end":{"line":10,"column":28}},"3":{"start":{"line":11,"column":15},"end":{"line":11,"column":36}},"4":{"start":{"line":12,"column":15},"end":{"line":12,"column":45}},"5":{"start":{"line":13,"column":21},"end":{"line":13,"column":50}},"6":{"start":{"line":14,"column":14},"end":{"line":14,"column":48}},"7":{"start":{"line":15,"column":16},"end":{"line":15,"column":50}},"8":{"start":{"line":16,"column":9},"end":{"line":16,"column":26}},"9":{"start":{"line":17,"column":9},"end":{"line":17,"column":24}},"10":{"start":{"line":18,"column":6},"end":{"line":18,"column":23}},"11":{"start":{"line":19,"column":10},"end":{"line":19,"column":48}},"12":{"start":{"line":20,"column":16},"end":{"line":20,"column":61}},"13":{"start":{"line":21,"column":19},"end":{"line":21,"column":67}},"14":{"start":{"line":22,"column":10},"end":{"line":22,"column":28}},"15":{"start":{"line":26,"column":4},"end":{"line":26,"column":25}},"16":{"start":{"line":27,"column":4},"end":{"line":27,"column":28}},"17":{"start":{"line":28,"column":4},"end":{"line":28,"column":72}},"18":{"start":{"line":29,"column":4},"end":{"line":29,"column":39}},"19":{"start":{"line":30,"column":4},"end":{"line":30,"column":68}},"20":{"start":{"line":34,"column":4},"end":{"line":34,"column":29}},"21":{"start":{"line":35,"column":4},"end":{"line":35,"column":39}},"22":{"start":{"line":39,"column":4},"end":{"line":39,"column":40}},"23":{"start":{"line":43,"column":4},"end":{"line":43,"column":29}},"24":{"start":{"line":47,"column":4},"end":{"line":47,"column":33}},"25":{"start":{"line":51,"column":22},"end":{"line":51,"column":43}},"26":{"start":{"line":52,"column":19},"end":{"line":52,"column":39}},"27":{"start":{"line":53,"column":4},"end":{"line":55,"column":5}},"28":{"start":{"line":54,"column":6},"end":{"line":54,"column":65}},"29":{"start":{"line":59,"column":16},"end":{"line":59,"column":29}},"30":{"start":{"line":60,"column":14},"end":{"line":60,"column":16}},"31":{"start":{"line":61,"column":4},"end":{"line":64,"column":5}},"32":{"start":{"line":62,"column":6},"end":{"line":63,"column":52}},"33":{"start":{"line":65,"column":4},"end":{"line":65,"column":15}},"34":{"start":{"line":69,"column":19},"end":{"line":69,"column":27}},"35":{"start":{"line":70,"column":18},"end":{"line":70,"column":30}},"36":{"start":{"line":71,"column":21},"end":{"line":71,"column":39}},"37":{"start":{"line":72,"column":14},"end":{"line":72,"column":16}},"38":{"start":{"line":73,"column":4},"end":{"line":76,"column":5}},"39":{"start":{"line":74,"column":6},"end":{"line":74,"column":68}},"40":{"start":{"line":75,"column":6},"end":{"line":75,"column":29}},"41":{"start":{"line":77,"column":4},"end":{"line":77,"column":15}},"42":{"start":{"line":81,"column":15},"end":{"line":81,"column":19}},"43":{"start":{"line":83,"column":4},"end":{"line":105,"column":6}},"44":{"start":{"line":84,"column":6},"end":{"line":84,"column":27}},"45":{"start":{"line":84,"column":17},"end":{"line":84,"column":27}},"46":{"start":{"line":85,"column":6},"end":{"line":101,"column":7}},"47":{"start":{"line":86,"column":8},"end":{"line":86,"column":24}},"48":{"start":{"line":87,"column":8},"end":{"line":87,"column":18}},"49":{"start":{"line":88,"column":13},"end":{"line":101,"column":7}},"50":{"start":{"line":89,"column":8},"end":{"line":89,"column":24}},"51":{"start":{"line":90,"column":8},"end":{"line":90,"column":27}},"52":{"start":{"line":91,"column":8},"end":{"line":91,"column":23}},"53":{"start":{"line":92,"column":13},"end":{"line":101,"column":7}},"54":{"start":{"line":93,"column":8},"end":{"line":93,"column":24}},"55":{"start":{"line":94,"column":8},"end":{"line":94,"column":32}},"56":{"start":{"line":95,"column":8},"end":{"line":95,"column":31}},"57":{"start":{"line":96,"column":8},"end":{"line":96,"column":23}},"58":{"start":{"line":97,"column":13},"end":{"line":101,"column":7}},"59":{"start":{"line":98,"column":8},"end":{"line":98,"column":31}},"60":{"start":{"line":99,"column":8},"end":{"line":99,"column":27}},"61":{"start":{"line":100,"column":8},"end":{"line":100,"column":29}},"62":{"start":{"line":102,"column":6},"end":{"line":102,"column":59}},"63":{"start":{"line":103,"column":6},"end":{"line":103,"column":79}},"64":{"start":{"line":104,"column":6},"end":{"line":104,"column":30}},"65":{"start":{"line":111,"column":15},"end":{"line":111,"column":19}},"66":{"start":{"line":112,"column":13},"end":{"line":112,"column":28}},"67":{"start":{"line":113,"column":14},"end":{"line":113,"column":29}},"68":{"start":{"line":114,"column":15},"end":{"line":114,"column":31}},"69":{"start":{"line":115,"column":14},"end":{"line":115,"column":29}},"70":{"start":{"line":116,"column":13},"end":{"line":116,"column":34}},"71":{"start":{"line":117,"column":11},"end":{"line":117,"column":32}},"72":{"start":{"line":118,"column":17},"end":{"line":118,"column":19}},"73":{"start":{"line":119,"column":16},"end":{"line":119,"column":18}},"74":{"start":{"line":120,"column":12},"end":{"line":120,"column":16}},"75":{"start":{"line":121,"column":12},"end":{"line":121,"column":16}},"76":{"start":{"line":123,"column":16},"end":{"line":125,"column":7}},"77":{"start":{"line":127,"column":4},"end":{"line":127,"column":126}},"78":{"start":{"line":129,"column":20},"end":{"line":129,"column":63}},"79":{"start":{"line":130,"column":23},"end":{"line":130,"column":62}},"80":{"start":{"line":132,"column":22},"end":{"line":132,"column":81}},"81":{"start":{"line":134,"column":4},"end":{"line":137,"column":5}},"82":{"start":{"line":135,"column":6},"end":{"line":135,"column":70}},"83":{"start":{"line":136,"column":6},"end":{"line":136,"column":60}},"84":{"start":{"line":139,"column":4},"end":{"line":139,"column":86}},"85":{"start":{"line":141,"column":4},"end":{"line":147,"column":5}},"86":{"start":{"line":142,"column":6},"end":{"line":142,"column":35}},"87":{"start":{"line":143,"column":11},"end":{"line":147,"column":5}},"88":{"start":{"line":144,"column":6},"end":{"line":144,"column":40}},"89":{"start":{"line":146,"column":6},"end":{"line":146,"column":84}},"90":{"start":{"line":149,"column":4},"end":{"line":151,"column":5}},"91":{"start":{"line":150,"column":6},"end":{"line":150,"column":50}},"92":{"start":{"line":153,"column":4},"end":{"line":153,"column":56}},"93":{"start":{"line":155,"column":4},"end":{"line":155,"column":28}},"94":{"start":{"line":156,"column":4},"end":{"line":156,"column":59}},"95":{"start":{"line":159,"column":4},"end":{"line":161,"column":5}},"96":{"start":{"line":160,"column":6},"end":{"line":160,"column":49}},"97":{"start":{"line":162,"column":4},"end":{"line":164,"column":5}},"98":{"start":{"line":163,"column":6},"end":{"line":163,"column":41}},"99":{"start":{"line":166,"column":4},"end":{"line":166,"column":50}},"100":{"start":{"line":171,"column":4},"end":{"line":173,"column":5}},"101":{"start":{"line":172,"column":6},"end":{"line":172,"column":59}},"102":{"start":{"line":176,"column":4},"end":{"line":179,"column":5}},"103":{"start":{"line":177,"column":6},"end":{"line":177,"column":44}},"104":{"start":{"line":178,"column":6},"end":{"line":178,"column":61}},"105":{"start":{"line":180,"column":4},"end":{"line":183,"column":5}},"106":{"start":{"line":181,"column":6},"end":{"line":181,"column":40}},"107":{"start":{"line":182,"column":6},"end":{"line":182,"column":61}},"108":{"start":{"line":187,"column":20},"end":{"line":187,"column":72}},"109":{"start":{"line":188,"column":21},"end":{"line":188,"column":82}},"110":{"start":{"line":189,"column":19},"end":{"line":189,"column":69}},"111":{"start":{"line":191,"column":28},"end":{"line":191,"column":43}},"112":{"start":{"line":192,"column":26},"end":{"line":192,"column":39}},"113":{"start":{"line":194,"column":4},"end":{"line":194,"column":70}},"114":{"start":{"line":196,"column":4},"end":{"line":198,"column":5}},"115":{"start":{"line":197,"column":6},"end":{"line":197,"column":58}},"116":{"start":{"line":200,"column":18},"end":{"line":200,"column":30}},"117":{"start":{"line":203,"column":4},"end":{"line":210,"column":5}},"118":{"start":{"line":204,"column":25},"end":{"line":204,"column":50}},"119":{"start":{"line":205,"column":6},"end":{"line":209,"column":7}},"120":{"start":{"line":206,"column":8},"end":{"line":208,"column":9}},"121":{"start":{"line":207,"column":12},"end":{"line":207,"column":63}},"122":{"start":{"line":212,"column":4},"end":{"line":219,"column":5}},"123":{"start":{"line":213,"column":25},"end":{"line":213,"column":50}},"124":{"start":{"line":214,"column":6},"end":{"line":218,"column":7}},"125":{"start":{"line":215,"column":8},"end":{"line":217,"column":9}},"126":{"start":{"line":216,"column":10},"end":{"line":216,"column":69}},"127":{"start":{"line":221,"column":30},"end":{"line":221,"column":71}},"128":{"start":{"line":222,"column":4},"end":{"line":222,"column":80}},"129":{"start":{"line":224,"column":30},"end":{"line":224,"column":60}},"130":{"start":{"line":225,"column":4},"end":{"line":225,"column":74}},"131":{"start":{"line":227,"column":33},"end":{"line":227,"column":66}},"132":{"start":{"line":230,"column":4},"end":{"line":230,"column":63}},"133":{"start":{"line":231,"column":4},"end":{"line":231,"column":80}},"134":{"start":{"line":233,"column":4},"end":{"line":235,"column":5}},"135":{"start":{"line":234,"column":6},"end":{"line":234,"column":64}},"136":{"start":{"line":238,"column":22},"end":{"line":238,"column":26}},"137":{"start":{"line":240,"column":4},"end":{"line":242,"column":5}},"138":{"start":{"line":241,"column":6},"end":{"line":241,"column":56}},"139":{"start":{"line":244,"column":4},"end":{"line":244,"column":60}},"140":{"start":{"line":245,"column":4},"end":{"line":245,"column":50}},"141":{"start":{"line":247,"column":4},"end":{"line":247,"column":39}},"142":{"start":{"line":249,"column":4},"end":{"line":249,"column":31}},"143":{"start":{"line":250,"column":4},"end":{"line":250,"column":27}},"144":{"start":{"line":251,"column":4},"end":{"line":251,"column":33}},"145":{"start":{"line":253,"column":4},"end":{"line":253,"column":34}},"146":{"start":{"line":254,"column":4},"end":{"line":254,"column":30}},"147":{"start":{"line":256,"column":23},"end":{"line":263,"column":5}},"148":{"start":{"line":257,"column":6},"end":{"line":262,"column":7}},"149":{"start":{"line":258,"column":8},"end":{"line":258,"column":32}},"150":{"start":{"line":261,"column":8},"end":{"line":261,"column":25}},"151":{"start":{"line":265,"column":4},"end":{"line":346,"column":31}},"152":{"start":{"line":268,"column":6},"end":{"line":268,"column":31}},"153":{"start":{"line":269,"column":6},"end":{"line":269,"column":62}},"154":{"start":{"line":270,"column":6},"end":{"line":270,"column":62}},"155":{"start":{"line":271,"column":6},"end":{"line":271,"column":44}},"156":{"start":{"line":273,"column":6},"end":{"line":273,"column":70}},"157":{"start":{"line":275,"column":6},"end":{"line":345,"column":7}},"158":{"start":{"line":276,"column":8},"end":{"line":276,"column":22}},"159":{"start":{"line":282,"column":8},"end":{"line":286,"column":9}},"160":{"start":{"line":283,"column":36},"end":{"line":283,"column":69}},"161":{"start":{"line":285,"column":36},"end":{"line":285,"column":70}},"162":{"start":{"line":287,"column":8},"end":{"line":308,"column":9}},"163":{"start":{"line":288,"column":10},"end":{"line":288,"column":87}},"164":{"start":{"line":289,"column":10},"end":{"line":289,"column":75}},"165":{"start":{"line":293,"column":10},"end":{"line":293,"column":69}},"166":{"start":{"line":295,"column":10},"end":{"line":302,"column":11}},"167":{"start":{"line":296,"column":12},"end":{"line":296,"column":57}},"168":{"start":{"line":298,"column":23},"end":{"line":298,"column":67}},"169":{"start":{"line":299,"column":12},"end":{"line":301,"column":13}},"170":{"start":{"line":300,"column":14},"end":{"line":300,"column":52}},"171":{"start":{"line":304,"column":10},"end":{"line":304,"column":36}},"172":{"start":{"line":305,"column":10},"end":{"line":305,"column":28}},"173":{"start":{"line":306,"column":10},"end":{"line":306,"column":40}},"174":{"start":{"line":307,"column":10},"end":{"line":307,"column":49}},"175":{"start":{"line":310,"column":8},"end":{"line":313,"column":9}},"176":{"start":{"line":312,"column":10},"end":{"line":312,"column":56}},"177":{"start":{"line":314,"column":8},"end":{"line":319,"column":9}},"178":{"start":{"line":315,"column":22},"end":{"line":315,"column":61}},"179":{"start":{"line":316,"column":10},"end":{"line":316,"column":36}},"180":{"start":{"line":317,"column":10},"end":{"line":317,"column":28}},"181":{"start":{"line":318,"column":10},"end":{"line":318,"column":44}},"182":{"start":{"line":321,"column":35},"end":{"line":321,"column":66}},"183":{"start":{"line":322,"column":38},"end":{"line":322,"column":72}},"184":{"start":{"line":324,"column":8},"end":{"line":326,"column":9}},"185":{"start":{"line":325,"column":10},"end":{"line":325,"column":73}},"186":{"start":{"line":330,"column":8},"end":{"line":334,"column":9}},"187":{"start":{"line":331,"column":27},"end":{"line":332,"column":65}},"188":{"start":{"line":333,"column":10},"end":{"line":333,"column":40}},"189":{"start":{"line":335,"column":8},"end":{"line":341,"column":9}},"190":{"start":{"line":336,"column":10},"end":{"line":340,"column":13}},"191":{"start":{"line":337,"column":12},"end":{"line":339,"column":13}},"192":{"start":{"line":338,"column":14},"end":{"line":338,"column":52}},"193":{"start":{"line":342,"column":8},"end":{"line":342,"column":95}},"194":{"start":{"line":344,"column":8},"end":{"line":344,"column":49}},"195":{"start":{"line":349,"column":4},"end":{"line":351,"column":5}},"196":{"start":{"line":350,"column":6},"end":{"line":350,"column":44}},"197":{"start":{"line":352,"column":4},"end":{"line":352,"column":78}},"198":{"start":{"line":356,"column":0},"end":{"line":356,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":25,"column":2},"end":{"line":25,"column":3}},"loc":{"start":{"line":25,"column":39},"end":{"line":31,"column":3}},"line":25},"1":{"name":"(anonymous_1)","decl":{"start":{"line":33,"column":2},"end":{"line":33,"column":3}},"loc":{"start":{"line":33,"column":24},"end":{"line":36,"column":3}},"line":33},"2":{"name":"(anonymous_2)","decl":{"start":{"line":38,"column":2},"end":{"line":38,"column":3}},"loc":{"start":{"line":38,"column":13},"end":{"line":40,"column":3}},"line":38},"3":{"name":"(anonymous_3)","decl":{"start":{"line":42,"column":2},"end":{"line":42,"column":3}},"loc":{"start":{"line":42,"column":24},"end":{"line":44,"column":3}},"line":42},"4":{"name":"(anonymous_4)","decl":{"start":{"line":46,"column":2},"end":{"line":46,"column":3}},"loc":{"start":{"line":46,"column":28},"end":{"line":48,"column":3}},"line":46},"5":{"name":"(anonymous_5)","decl":{"start":{"line":50,"column":2},"end":{"line":50,"column":3}},"loc":{"start":{"line":50,"column":32},"end":{"line":56,"column":3}},"line":50},"6":{"name":"(anonymous_6)","decl":{"start":{"line":58,"column":2},"end":{"line":58,"column":3}},"loc":{"start":{"line":58,"column":36},"end":{"line":66,"column":3}},"line":58},"7":{"name":"(anonymous_7)","decl":{"start":{"line":68,"column":2},"end":{"line":68,"column":3}},"loc":{"start":{"line":68,"column":30},"end":{"line":78,"column":3}},"line":68},"8":{"name":"(anonymous_8)","decl":{"start":{"line":80,"column":2},"end":{"line":80,"column":3}},"loc":{"start":{"line":80,"column":40},"end":{"line":106,"column":3}},"line":80},"9":{"name":"(anonymous_9)","decl":{"start":{"line":83,"column":11},"end":{"line":83,"column":12}},"loc":{"start":{"line":83,"column":59},"end":{"line":105,"column":5}},"line":83},"10":{"name":"(anonymous_10)","decl":{"start":{"line":110,"column":2},"end":{"line":110,"column":3}},"loc":{"start":{"line":110,"column":70},"end":{"line":353,"column":3}},"line":110},"11":{"name":"(anonymous_11)","decl":{"start":{"line":256,"column":23},"end":{"line":256,"column":24}},"loc":{"start":{"line":256,"column":38},"end":{"line":263,"column":5}},"line":256},"12":{"name":"(anonymous_12)","decl":{"start":{"line":265,"column":49},"end":{"line":265,"column":50}},"loc":{"start":{"line":265,"column":79},"end":{"line":346,"column":5}},"line":265},"13":{"name":"(anonymous_13)","decl":{"start":{"line":336,"column":48},"end":{"line":336,"column":49}},"loc":{"start":{"line":336,"column":63},"end":{"line":340,"column":11}},"line":336}},"branchMap":{"0":{"loc":{"start":{"line":27,"column":14},"end":{"line":27,"column":27}},"type":"binary-expr","locations":[{"start":{"line":27,"column":14},"end":{"line":27,"column":21}},{"start":{"line":27,"column":25},"end":{"line":27,"column":27}}],"line":27},"1":{"loc":{"start":{"line":30,"column":22},"end":{"line":30,"column":67}},"type":"binary-expr","locations":[{"start":{"line":30,"column":22},"end":{"line":30,"column":40}},{"start":{"line":30,"column":44},"end":{"line":30,"column":67}}],"line":30},"2":{"loc":{"start":{"line":63,"column":8},"end":{"line":63,"column":50}},"type":"cond-expr","locations":[{"start":{"line":63,"column":19},"end":{"line":63,"column":27}},{"start":{"line":63,"column":30},"end":{"line":63,"column":50}}],"line":63},"3":{"loc":{"start":{"line":84,"column":6},"end":{"line":84,"column":27}},"type":"if","locations":[{"start":{"line":84,"column":6},"end":{"line":84,"column":27}},{"start":{"line":84,"column":6},"end":{"line":84,"column":27}}],"line":84},"4":{"loc":{"start":{"line":85,"column":6},"end":{"line":101,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":101,"column":7}},{"start":{"line":85,"column":6},"end":{"line":101,"column":7}}],"line":85},"5":{"loc":{"start":{"line":88,"column":13},"end":{"line":101,"column":7}},"type":"if","locations":[{"start":{"line":88,"column":13},"end":{"line":101,"column":7}},{"start":{"line":88,"column":13},"end":{"line":101,"column":7}}],"line":88},"6":{"loc":{"start":{"line":92,"column":13},"end":{"line":101,"column":7}},"type":"if","locations":[{"start":{"line":92,"column":13},"end":{"line":101,"column":7}},{"start":{"line":92,"column":13},"end":{"line":101,"column":7}}],"line":92},"7":{"loc":{"start":{"line":97,"column":13},"end":{"line":101,"column":7}},"type":"if","locations":[{"start":{"line":97,"column":13},"end":{"line":101,"column":7}},{"start":{"line":97,"column":13},"end":{"line":101,"column":7}}],"line":97},"8":{"loc":{"start":{"line":102,"column":17},"end":{"line":102,"column":58}},"type":"binary-expr","locations":[{"start":{"line":102,"column":17},"end":{"line":102,"column":25}},{"start":{"line":102,"column":29},"end":{"line":102,"column":58}}],"line":102},"9":{"loc":{"start":{"line":130,"column":23},"end":{"line":130,"column":62}},"type":"binary-expr","locations":[{"start":{"line":130,"column":23},"end":{"line":130,"column":52}},{"start":{"line":130,"column":56},"end":{"line":130,"column":62}}],"line":130},"10":{"loc":{"start":{"line":132,"column":22},"end":{"line":132,"column":81}},"type":"binary-expr","locations":[{"start":{"line":132,"column":22},"end":{"line":132,"column":56}},{"start":{"line":132,"column":60},"end":{"line":132,"column":81}}],"line":132},"11":{"loc":{"start":{"line":134,"column":4},"end":{"line":137,"column":5}},"type":"if","locations":[{"start":{"line":134,"column":4},"end":{"line":137,"column":5}},{"start":{"line":134,"column":4},"end":{"line":137,"column":5}}],"line":134},"12":{"loc":{"start":{"line":141,"column":4},"end":{"line":147,"column":5}},"type":"if","locations":[{"start":{"line":141,"column":4},"end":{"line":147,"column":5}},{"start":{"line":141,"column":4},"end":{"line":147,"column":5}}],"line":141},"13":{"loc":{"start":{"line":143,"column":11},"end":{"line":147,"column":5}},"type":"if","locations":[{"start":{"line":143,"column":11},"end":{"line":147,"column":5}},{"start":{"line":143,"column":11},"end":{"line":147,"column":5}}],"line":143},"14":{"loc":{"start":{"line":146,"column":20},"end":{"line":146,"column":75}},"type":"cond-expr","locations":[{"start":{"line":146,"column":62},"end":{"line":146,"column":70}},{"start":{"line":146,"column":73},"end":{"line":146,"column":75}}],"line":146},"15":{"loc":{"start":{"line":149,"column":4},"end":{"line":151,"column":5}},"type":"if","locations":[{"start":{"line":149,"column":4},"end":{"line":151,"column":5}},{"start":{"line":149,"column":4},"end":{"line":151,"column":5}}],"line":149},"16":{"loc":{"start":{"line":149,"column":8},"end":{"line":149,"column":61}},"type":"binary-expr","locations":[{"start":{"line":149,"column":8},"end":{"line":149,"column":29}},{"start":{"line":149,"column":33},"end":{"line":149,"column":61}}],"line":149},"17":{"loc":{"start":{"line":155,"column":14},"end":{"line":155,"column":27}},"type":"binary-expr","locations":[{"start":{"line":155,"column":14},"end":{"line":155,"column":21}},{"start":{"line":155,"column":25},"end":{"line":155,"column":27}}],"line":155},"18":{"loc":{"start":{"line":171,"column":4},"end":{"line":173,"column":5}},"type":"if","locations":[{"start":{"line":171,"column":4},"end":{"line":173,"column":5}},{"start":{"line":171,"column":4},"end":{"line":173,"column":5}}],"line":171},"19":{"loc":{"start":{"line":171,"column":8},"end":{"line":171,"column":71}},"type":"binary-expr","locations":[{"start":{"line":171,"column":8},"end":{"line":171,"column":31}},{"start":{"line":171,"column":35},"end":{"line":171,"column":71}}],"line":171},"20":{"loc":{"start":{"line":176,"column":4},"end":{"line":179,"column":5}},"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":179,"column":5}},{"start":{"line":176,"column":4},"end":{"line":179,"column":5}}],"line":176},"21":{"loc":{"start":{"line":176,"column":8},"end":{"line":176,"column":53}},"type":"binary-expr","locations":[{"start":{"line":176,"column":8},"end":{"line":176,"column":21}},{"start":{"line":176,"column":25},"end":{"line":176,"column":53}}],"line":176},"22":{"loc":{"start":{"line":180,"column":4},"end":{"line":183,"column":5}},"type":"if","locations":[{"start":{"line":180,"column":4},"end":{"line":183,"column":5}},{"start":{"line":180,"column":4},"end":{"line":183,"column":5}}],"line":180},"23":{"loc":{"start":{"line":180,"column":8},"end":{"line":180,"column":49}},"type":"binary-expr","locations":[{"start":{"line":180,"column":8},"end":{"line":180,"column":21}},{"start":{"line":180,"column":25},"end":{"line":180,"column":49}}],"line":180},"24":{"loc":{"start":{"line":188,"column":21},"end":{"line":188,"column":82}},"type":"binary-expr","locations":[{"start":{"line":188,"column":21},"end":{"line":188,"column":36}},{"start":{"line":188,"column":40},"end":{"line":188,"column":82}}],"line":188},"25":{"loc":{"start":{"line":196,"column":4},"end":{"line":198,"column":5}},"type":"if","locations":[{"start":{"line":196,"column":4},"end":{"line":198,"column":5}},{"start":{"line":196,"column":4},"end":{"line":198,"column":5}}],"line":196},"26":{"loc":{"start":{"line":196,"column":8},"end":{"line":196,"column":53}},"type":"binary-expr","locations":[{"start":{"line":196,"column":8},"end":{"line":196,"column":21}},{"start":{"line":196,"column":25},"end":{"line":196,"column":53}}],"line":196},"27":{"loc":{"start":{"line":205,"column":6},"end":{"line":209,"column":7}},"type":"if","locations":[{"start":{"line":205,"column":6},"end":{"line":209,"column":7}},{"start":{"line":205,"column":6},"end":{"line":209,"column":7}}],"line":205},"28":{"loc":{"start":{"line":214,"column":6},"end":{"line":218,"column":7}},"type":"if","locations":[{"start":{"line":214,"column":6},"end":{"line":218,"column":7}},{"start":{"line":214,"column":6},"end":{"line":218,"column":7}}],"line":214},"29":{"loc":{"start":{"line":233,"column":4},"end":{"line":235,"column":5}},"type":"if","locations":[{"start":{"line":233,"column":4},"end":{"line":235,"column":5}},{"start":{"line":233,"column":4},"end":{"line":235,"column":5}}],"line":233},"30":{"loc":{"start":{"line":233,"column":8},"end":{"line":233,"column":50}},"type":"binary-expr","locations":[{"start":{"line":233,"column":8},"end":{"line":233,"column":21}},{"start":{"line":233,"column":25},"end":{"line":233,"column":50}}],"line":233},"31":{"loc":{"start":{"line":240,"column":4},"end":{"line":242,"column":5}},"type":"if","locations":[{"start":{"line":240,"column":4},"end":{"line":242,"column":5}},{"start":{"line":240,"column":4},"end":{"line":242,"column":5}}],"line":240},"32":{"loc":{"start":{"line":240,"column":8},"end":{"line":240,"column":84}},"type":"binary-expr","locations":[{"start":{"line":240,"column":8},"end":{"line":240,"column":31}},{"start":{"line":240,"column":35},"end":{"line":240,"column":84}}],"line":240},"33":{"loc":{"start":{"line":269,"column":33},"end":{"line":269,"column":61}},"type":"binary-expr","locations":[{"start":{"line":269,"column":33},"end":{"line":269,"column":41}},{"start":{"line":269,"column":45},"end":{"line":269,"column":61}}],"line":269},"34":{"loc":{"start":{"line":270,"column":29},"end":{"line":270,"column":61}},"type":"binary-expr","locations":[{"start":{"line":270,"column":29},"end":{"line":270,"column":37}},{"start":{"line":270,"column":41},"end":{"line":270,"column":61}}],"line":270},"35":{"loc":{"start":{"line":275,"column":6},"end":{"line":345,"column":7}},"type":"if","locations":[{"start":{"line":275,"column":6},"end":{"line":345,"column":7}},{"start":{"line":275,"column":6},"end":{"line":345,"column":7}}],"line":275},"36":{"loc":{"start":{"line":282,"column":8},"end":{"line":286,"column":9}},"type":"if","locations":[{"start":{"line":282,"column":8},"end":{"line":286,"column":9}},{"start":{"line":282,"column":8},"end":{"line":286,"column":9}}],"line":282},"37":{"loc":{"start":{"line":282,"column":12},"end":{"line":282,"column":78}},"type":"binary-expr","locations":[{"start":{"line":282,"column":12},"end":{"line":282,"column":45}},{"start":{"line":282,"column":50},"end":{"line":282,"column":78}}],"line":282},"38":{"loc":{"start":{"line":295,"column":10},"end":{"line":302,"column":11}},"type":"if","locations":[{"start":{"line":295,"column":10},"end":{"line":302,"column":11}},{"start":{"line":295,"column":10},"end":{"line":302,"column":11}}],"line":295},"39":{"loc":{"start":{"line":298,"column":23},"end":{"line":298,"column":67}},"type":"cond-expr","locations":[{"start":{"line":298,"column":42},"end":{"line":298,"column":46}},{"start":{"line":298,"column":49},"end":{"line":298,"column":67}}],"line":298},"40":{"loc":{"start":{"line":299,"column":12},"end":{"line":301,"column":13}},"type":"if","locations":[{"start":{"line":299,"column":12},"end":{"line":301,"column":13}},{"start":{"line":299,"column":12},"end":{"line":301,"column":13}}],"line":299},"41":{"loc":{"start":{"line":310,"column":8},"end":{"line":313,"column":9}},"type":"if","locations":[{"start":{"line":310,"column":8},"end":{"line":313,"column":9}},{"start":{"line":310,"column":8},"end":{"line":313,"column":9}}],"line":310},"42":{"loc":{"start":{"line":314,"column":8},"end":{"line":319,"column":9}},"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":319,"column":9}},{"start":{"line":314,"column":8},"end":{"line":319,"column":9}}],"line":314},"43":{"loc":{"start":{"line":324,"column":8},"end":{"line":326,"column":9}},"type":"if","locations":[{"start":{"line":324,"column":8},"end":{"line":326,"column":9}},{"start":{"line":324,"column":8},"end":{"line":326,"column":9}}],"line":324},"44":{"loc":{"start":{"line":330,"column":8},"end":{"line":334,"column":9}},"type":"if","locations":[{"start":{"line":330,"column":8},"end":{"line":334,"column":9}},{"start":{"line":330,"column":8},"end":{"line":334,"column":9}}],"line":330},"45":{"loc":{"start":{"line":331,"column":27},"end":{"line":332,"column":65}},"type":"binary-expr","locations":[{"start":{"line":331,"column":27},"end":{"line":331,"column":39}},{"start":{"line":332,"column":12},"end":{"line":332,"column":65}}],"line":331},"46":{"loc":{"start":{"line":335,"column":8},"end":{"line":341,"column":9}},"type":"if","locations":[{"start":{"line":335,"column":8},"end":{"line":341,"column":9}},{"start":{"line":335,"column":8},"end":{"line":341,"column":9}}],"line":335},"47":{"loc":{"start":{"line":337,"column":12},"end":{"line":339,"column":13}},"type":"if","locations":[{"start":{"line":337,"column":12},"end":{"line":339,"column":13}},{"start":{"line":337,"column":12},"end":{"line":339,"column":13}}],"line":337},"48":{"loc":{"start":{"line":349,"column":4},"end":{"line":351,"column":5}},"type":"if","locations":[{"start":{"line":349,"column":4},"end":{"line":351,"column":5}},{"start":{"line":349,"column":4},"end":{"line":351,"column":5}}],"line":349}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":190,"16":190,"17":190,"18":190,"19":190,"20":1,"21":1,"22":38,"23":6,"24":0,"25":191,"26":191,"27":191,"28":192,"29":192,"30":192,"31":192,"32":201,"33":192,"34":201,"35":201,"36":201,"37":201,"38":201,"39":253,"40":253,"41":201,"42":253,"43":253,"44":144,"45":1,"46":144,"47":0,"48":0,"49":144,"50":1,"51":1,"52":1,"53":143,"54":1,"55":1,"56":1,"57":1,"58":142,"59":2,"60":2,"61":2,"62":144,"63":144,"64":130,"65":144,"66":144,"67":144,"68":144,"69":144,"70":144,"71":144,"72":144,"73":144,"74":144,"75":144,"76":144,"77":144,"78":144,"79":144,"80":144,"81":144,"82":11,"83":11,"84":144,"85":144,"86":0,"87":144,"88":144,"89":0,"90":144,"91":133,"92":144,"93":144,"94":144,"95":144,"96":0,"97":144,"98":14,"99":144,"100":144,"101":0,"102":144,"103":5,"104":5,"105":144,"106":6,"107":6,"108":144,"109":144,"110":144,"111":144,"112":144,"113":144,"114":144,"115":5,"116":144,"117":144,"118":268,"119":268,"120":268,"121":1987,"122":144,"123":268,"124":268,"125":268,"126":1987,"127":144,"128":144,"129":144,"130":144,"131":144,"132":144,"133":144,"134":130,"135":5,"136":130,"137":130,"138":2,"139":130,"140":130,"141":130,"142":130,"143":130,"144":130,"145":130,"146":130,"147":130,"148":0,"149":0,"150":0,"151":130,"152":126,"153":126,"154":126,"155":126,"156":126,"157":126,"158":8,"159":118,"160":10,"161":108,"162":118,"163":118,"164":118,"165":24,"166":24,"167":0,"168":0,"169":0,"170":0,"171":24,"172":24,"173":24,"174":24,"175":94,"176":2,"177":92,"178":2,"179":2,"180":2,"181":2,"182":90,"183":90,"184":90,"185":90,"186":90,"187":38,"188":38,"189":90,"190":38,"191":114,"192":28,"193":90,"194":90,"195":130,"196":130,"197":130,"198":1},"f":{"0":190,"1":1,"2":38,"3":6,"4":0,"5":191,"6":192,"7":201,"8":253,"9":144,"10":144,"11":0,"12":126,"13":114},"b":{"0":[190,0],"1":[190,187],"2":[113,88],"3":[1,143],"4":[0,144],"5":[1,143],"6":[1,142],"7":[2,140],"8":[144,4],"9":[144,0],"10":[144,143],"11":[11,133],"12":[0,144],"13":[144,0],"14":[0,0],"15":[133,11],"16":[144,11],"17":[144,76],"18":[0,144],"19":[144,144],"20":[5,139],"21":[144,6],"22":[6,138],"23":[144,6],"24":[144,0],"25":[5,139],"26":[144,6],"27":[268,0],"28":[268,0],"29":[5,125],"30":[130,6],"31":[2,128],"32":[130,130],"33":[126,118],"34":[126,118],"35":[8,118],"36":[10,108],"37":[118,108],"38":[0,24],"39":[0,0],"40":[0,0],"41":[2,92],"42":[2,90],"43":[90,0],"44":[38,52],"45":[38,12],"46":[38,52],"47":[28,86],"48":[130,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"e6fcd88a5aa44f14e1608176fbdd671483c19df5","contentHash":"2274295babbf2e3213f6c872eb32f6d1cc85e8c703b47771d931340c6077535c"},"/Users/rfeng/Projects/loopback3/strong-soap/src/http.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/http.js","statementMap":{"0":{"start":{"line":8,"column":10},"end":{"line":8,"column":24}},"1":{"start":{"line":9,"column":10},"end":{"line":9,"column":28}},"2":{"start":{"line":10,"column":12},"end":{"line":10,"column":48}},"3":{"start":{"line":11,"column":21},"end":{"line":11,"column":67}},"4":{"start":{"line":12,"column":15},"end":{"line":12,"column":34}},"5":{"start":{"line":15,"column":14},"end":{"line":15,"column":48}},"6":{"start":{"line":26,"column":4},"end":{"line":26,"column":33}},"7":{"start":{"line":27,"column":4},"end":{"line":27,"column":43}},"8":{"start":{"line":39,"column":15},"end":{"line":39,"column":30}},"9":{"start":{"line":40,"column":17},"end":{"line":40,"column":43}},"10":{"start":{"line":41,"column":15},"end":{"line":41,"column":28}},"11":{"start":{"line":42,"column":15},"end":{"line":42,"column":38}},"12":{"start":{"line":43,"column":15},"end":{"line":43,"column":82}},"13":{"start":{"line":44,"column":17},"end":{"line":44,"column":38}},"14":{"start":{"line":45,"column":18},"end":{"line":52,"column":5}},"15":{"start":{"line":55,"column":23},"end":{"line":55,"column":34}},"16":{"start":{"line":57,"column":4},"end":{"line":60,"column":5}},"17":{"start":{"line":58,"column":6},"end":{"line":58,"column":66}},"18":{"start":{"line":59,"column":6},"end":{"line":59,"column":68}},"19":{"start":{"line":62,"column":4},"end":{"line":62,"column":32}},"20":{"start":{"line":63,"column":4},"end":{"line":65,"column":5}},"21":{"start":{"line":64,"column":6},"end":{"line":64,"column":38}},"22":{"start":{"line":67,"column":18},"end":{"line":72,"column":5}},"23":{"start":{"line":74,"column":4},"end":{"line":74,"column":24}},"24":{"start":{"line":76,"column":4},"end":{"line":76,"column":32}},"25":{"start":{"line":77,"column":4},"end":{"line":85,"column":5}},"26":{"start":{"line":78,"column":6},"end":{"line":84,"column":7}},"27":{"start":{"line":79,"column":8},"end":{"line":81,"column":9}},"28":{"start":{"line":80,"column":10},"end":{"line":80,"column":58}},"29":{"start":{"line":83,"column":8},"end":{"line":83,"column":40}},"30":{"start":{"line":86,"column":4},"end":{"line":86,"column":39}},"31":{"start":{"line":87,"column":4},"end":{"line":87,"column":19}},"32":{"start":{"line":98,"column":4},"end":{"line":98,"column":42}},"33":{"start":{"line":99,"column":4},"end":{"line":107,"column":5}},"34":{"start":{"line":102,"column":18},"end":{"line":103,"column":74}},"35":{"start":{"line":104,"column":6},"end":{"line":106,"column":7}},"36":{"start":{"line":105,"column":8},"end":{"line":105,"column":24}},"37":{"start":{"line":108,"column":4},"end":{"line":108,"column":16}},"38":{"start":{"line":114,"column":4},"end":{"line":119,"column":5}},"39":{"start":{"line":115,"column":6},"end":{"line":115,"column":19}},"40":{"start":{"line":116,"column":11},"end":{"line":119,"column":5}},"41":{"start":{"line":118,"column":6},"end":{"line":118,"column":19}},"42":{"start":{"line":121,"column":4},"end":{"line":121,"column":16}},"43":{"start":{"line":125,"column":15},"end":{"line":125,"column":19}},"44":{"start":{"line":126,"column":18},"end":{"line":126,"column":69}},"45":{"start":{"line":127,"column":18},"end":{"line":127,"column":33}},"46":{"start":{"line":133,"column":23},"end":{"line":133,"column":48}},"47":{"start":{"line":134,"column":19},"end":{"line":134,"column":72}},"48":{"start":{"line":135,"column":4},"end":{"line":161,"column":7}},"49":{"start":{"line":136,"column":6},"end":{"line":142,"column":9}},"50":{"start":{"line":137,"column":8},"end":{"line":139,"column":9}},"51":{"start":{"line":138,"column":10},"end":{"line":138,"column":31}},"52":{"start":{"line":140,"column":8},"end":{"line":140,"column":51}},"53":{"start":{"line":141,"column":8},"end":{"line":141,"column":34}},"54":{"start":{"line":145,"column":8},"end":{"line":145,"column":27}},"55":{"start":{"line":146,"column":8},"end":{"line":146,"column":49}},"56":{"start":{"line":147,"column":8},"end":{"line":147,"column":49}},"57":{"start":{"line":148,"column":8},"end":{"line":148,"column":45}},"58":{"start":{"line":149,"column":8},"end":{"line":149,"column":55}},"59":{"start":{"line":151,"column":21},"end":{"line":151,"column":55}},"60":{"start":{"line":152,"column":8},"end":{"line":152,"column":75}},"61":{"start":{"line":153,"column":8},"end":{"line":153,"column":45}},"62":{"start":{"line":154,"column":8},"end":{"line":160,"column":11}},"63":{"start":{"line":155,"column":10},"end":{"line":157,"column":11}},"64":{"start":{"line":156,"column":12},"end":{"line":156,"column":33}},"65":{"start":{"line":158,"column":21},"end":{"line":158,"column":60}},"66":{"start":{"line":159,"column":10},"end":{"line":159,"column":36}},"67":{"start":{"line":163,"column":4},"end":{"line":163,"column":15}},"68":{"start":{"line":167,"column":0},"end":{"line":167,"column":28}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":25,"column":2},"end":{"line":25,"column":3}},"loc":{"start":{"line":25,"column":23},"end":{"line":28,"column":3}},"line":25},"1":{"name":"(anonymous_1)","decl":{"start":{"line":38,"column":2},"end":{"line":38,"column":3}},"loc":{"start":{"line":38,"column":49},"end":{"line":88,"column":3}},"line":38},"2":{"name":"(anonymous_2)","decl":{"start":{"line":97,"column":2},"end":{"line":97,"column":3}},"loc":{"start":{"line":97,"column":33},"end":{"line":109,"column":3}},"line":97},"3":{"name":"(anonymous_3)","decl":{"start":{"line":112,"column":2},"end":{"line":112,"column":3}},"loc":{"start":{"line":112,"column":47},"end":{"line":122,"column":3}},"line":112},"4":{"name":"(anonymous_4)","decl":{"start":{"line":124,"column":2},"end":{"line":124,"column":3}},"loc":{"start":{"line":124,"column":54},"end":{"line":164,"column":3}},"line":124},"5":{"name":"(anonymous_5)","decl":{"start":{"line":136,"column":35},"end":{"line":136,"column":36}},"loc":{"start":{"line":136,"column":61},"end":{"line":142,"column":7}},"line":136},"6":{"name":"(anonymous_6)","decl":{"start":{"line":154,"column":50},"end":{"line":154,"column":51}},"loc":{"start":{"line":154,"column":70},"end":{"line":160,"column":9}},"line":154}},"branchMap":{"0":{"loc":{"start":{"line":26,"column":19},"end":{"line":26,"column":32}},"type":"binary-expr","locations":[{"start":{"line":26,"column":19},"end":{"line":26,"column":26}},{"start":{"line":26,"column":30},"end":{"line":26,"column":32}}],"line":26},"1":{"loc":{"start":{"line":27,"column":20},"end":{"line":27,"column":42}},"type":"binary-expr","locations":[{"start":{"line":27,"column":20},"end":{"line":27,"column":35}},{"start":{"line":27,"column":39},"end":{"line":27,"column":42}}],"line":27},"2":{"loc":{"start":{"line":43,"column":16},"end":{"line":43,"column":36}},"type":"binary-expr","locations":[{"start":{"line":43,"column":16},"end":{"line":43,"column":29}},{"start":{"line":43,"column":33},"end":{"line":43,"column":36}}],"line":43},"3":{"loc":{"start":{"line":43,"column":38},"end":{"line":43,"column":55}},"type":"binary-expr","locations":[{"start":{"line":43,"column":38},"end":{"line":43,"column":49}},{"start":{"line":43,"column":53},"end":{"line":43,"column":55}}],"line":43},"4":{"loc":{"start":{"line":43,"column":57},"end":{"line":43,"column":72}},"type":"binary-expr","locations":[{"start":{"line":43,"column":57},"end":{"line":43,"column":66}},{"start":{"line":43,"column":70},"end":{"line":43,"column":72}}],"line":43},"5":{"loc":{"start":{"line":44,"column":17},"end":{"line":44,"column":38}},"type":"cond-expr","locations":[{"start":{"line":44,"column":24},"end":{"line":44,"column":30}},{"start":{"line":44,"column":33},"end":{"line":44,"column":38}}],"line":44},"6":{"loc":{"start":{"line":51,"column":22},"end":{"line":51,"column":51}},"type":"cond-expr","locations":[{"start":{"line":51,"column":36},"end":{"line":51,"column":38}},{"start":{"line":51,"column":41},"end":{"line":51,"column":51}}],"line":51},"7":{"loc":{"start":{"line":57,"column":4},"end":{"line":60,"column":5}},"type":"if","locations":[{"start":{"line":57,"column":4},"end":{"line":60,"column":5}},{"start":{"line":57,"column":4},"end":{"line":60,"column":5}}],"line":57},"8":{"loc":{"start":{"line":62,"column":16},"end":{"line":62,"column":31}},"type":"binary-expr","locations":[{"start":{"line":62,"column":16},"end":{"line":62,"column":25}},{"start":{"line":62,"column":29},"end":{"line":62,"column":31}}],"line":62},"9":{"loc":{"start":{"line":76,"column":16},"end":{"line":76,"column":31}},"type":"binary-expr","locations":[{"start":{"line":76,"column":16},"end":{"line":76,"column":25}},{"start":{"line":76,"column":29},"end":{"line":76,"column":31}}],"line":76},"10":{"loc":{"start":{"line":78,"column":6},"end":{"line":84,"column":7}},"type":"if","locations":[{"start":{"line":78,"column":6},"end":{"line":84,"column":7}},{"start":{"line":78,"column":6},"end":{"line":84,"column":7}}],"line":78},"11":{"loc":{"start":{"line":99,"column":4},"end":{"line":107,"column":5}},"type":"if","locations":[{"start":{"line":99,"column":4},"end":{"line":107,"column":5}},{"start":{"line":99,"column":4},"end":{"line":107,"column":5}}],"line":99},"12":{"loc":{"start":{"line":104,"column":6},"end":{"line":106,"column":7}},"type":"if","locations":[{"start":{"line":104,"column":6},"end":{"line":106,"column":7}},{"start":{"line":104,"column":6},"end":{"line":106,"column":7}}],"line":104},"13":{"loc":{"start":{"line":114,"column":4},"end":{"line":119,"column":5}},"type":"if","locations":[{"start":{"line":114,"column":4},"end":{"line":119,"column":5}},{"start":{"line":114,"column":4},"end":{"line":119,"column":5}}],"line":114},"14":{"loc":{"start":{"line":116,"column":11},"end":{"line":119,"column":5}},"type":"if","locations":[{"start":{"line":116,"column":11},"end":{"line":119,"column":5}},{"start":{"line":116,"column":11},"end":{"line":119,"column":5}}],"line":116},"15":{"loc":{"start":{"line":116,"column":15},"end":{"line":116,"column":121}},"type":"binary-expr","locations":[{"start":{"line":116,"column":15},"end":{"line":116,"column":35}},{"start":{"line":116,"column":40},"end":{"line":116,"column":77}},{"start":{"line":116,"column":81},"end":{"line":116,"column":120}}],"line":116},"16":{"loc":{"start":{"line":135,"column":4},"end":{"line":161,"column":7}},"type":"if","locations":[{"start":{"line":135,"column":4},"end":{"line":161,"column":7}},{"start":{"line":135,"column":4},"end":{"line":161,"column":7}}],"line":135},"17":{"loc":{"start":{"line":137,"column":8},"end":{"line":139,"column":9}},"type":"if","locations":[{"start":{"line":137,"column":8},"end":{"line":139,"column":9}},{"start":{"line":137,"column":8},"end":{"line":139,"column":9}}],"line":137},"18":{"loc":{"start":{"line":155,"column":10},"end":{"line":157,"column":11}},"type":"if","locations":[{"start":{"line":155,"column":10},"end":{"line":157,"column":11}},{"start":{"line":155,"column":10},"end":{"line":157,"column":11}}],"line":155}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":197,"7":197,"8":141,"9":141,"10":141,"11":141,"12":141,"13":141,"14":141,"15":141,"16":141,"17":130,"18":130,"19":141,"20":141,"21":263,"22":141,"23":141,"24":141,"25":141,"26":73,"27":6,"28":6,"29":67,"30":141,"31":141,"32":127,"33":127,"34":127,"35":127,"36":108,"37":127,"38":138,"39":138,"40":0,"41":0,"42":0,"43":138,"44":138,"45":138,"46":138,"47":138,"48":138,"49":138,"50":134,"51":10,"52":124,"53":124,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":138,"68":1},"f":{"0":197,"1":141,"2":127,"3":138,"4":138,"5":134,"6":0},"b":{"0":[197,0],"1":[197,196],"2":[141,0],"3":[141,71],"4":[141,141],"5":[130,11],"6":[4,137],"7":[130,11],"8":[141,11],"9":[141,11],"10":[6,67],"11":[127,0],"12":[108,19],"13":[138,0],"14":[0,0],"15":[0,0,0],"16":[138,0],"17":[10,124],"18":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"12b61780a9c3092db98515877be907400b63821c","contentHash":"e363e90dd6cbfac6bea834797f39fea4d5e047b87a7e08791c68b5e7e913f64a"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/operation.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/operation.js","statementMap":{"0":{"start":{"line":8,"column":8},"end":{"line":8,"column":34}},"1":{"start":{"line":9,"column":18},"end":{"line":9,"column":42}},"2":{"start":{"line":10,"column":17},"end":{"line":10,"column":45}},"3":{"start":{"line":11,"column":24},"end":{"line":11,"column":52}},"4":{"start":{"line":12,"column":21},"end":{"line":12,"column":46}},"5":{"start":{"line":13,"column":12},"end":{"line":13,"column":31}},"6":{"start":{"line":14,"column":13},"end":{"line":14,"column":33}},"7":{"start":{"line":15,"column":17},"end":{"line":15,"column":45}},"8":{"start":{"line":17,"column":13},"end":{"line":17,"column":30}},"9":{"start":{"line":19,"column":14},"end":{"line":25,"column":1}},"10":{"start":{"line":29,"column":4},"end":{"line":29,"column":34}},"11":{"start":{"line":32,"column":4},"end":{"line":32,"column":21}},"12":{"start":{"line":33,"column":4},"end":{"line":33,"column":21}},"13":{"start":{"line":37,"column":4},"end":{"line":60,"column":5}},"14":{"start":{"line":39,"column":8},"end":{"line":39,"column":27}},"15":{"start":{"line":40,"column":8},"end":{"line":40,"column":14}},"16":{"start":{"line":42,"column":8},"end":{"line":42,"column":28}},"17":{"start":{"line":43,"column":8},"end":{"line":43,"column":14}},"18":{"start":{"line":45,"column":8},"end":{"line":45,"column":32}},"19":{"start":{"line":46,"column":8},"end":{"line":46,"column":14}},"20":{"start":{"line":48,"column":8},"end":{"line":48,"column":50}},"21":{"start":{"line":49,"column":8},"end":{"line":49,"column":40}},"22":{"start":{"line":50,"column":8},"end":{"line":50,"column":117}},"23":{"start":{"line":52,"column":8},"end":{"line":58,"column":9}},"24":{"start":{"line":53,"column":10},"end":{"line":53,"column":34}},"25":{"start":{"line":54,"column":15},"end":{"line":58,"column":9}},"26":{"start":{"line":55,"column":10},"end":{"line":55,"column":34}},"27":{"start":{"line":57,"column":10},"end":{"line":57,"column":35}},"28":{"start":{"line":59,"column":8},"end":{"line":59,"column":14}},"29":{"start":{"line":64,"column":4},"end":{"line":77,"column":5}},"30":{"start":{"line":65,"column":6},"end":{"line":65,"column":34}},"31":{"start":{"line":65,"column":27},"end":{"line":65,"column":34}},"32":{"start":{"line":66,"column":6},"end":{"line":66,"column":58}},"33":{"start":{"line":66,"column":22},"end":{"line":66,"column":58}},"34":{"start":{"line":67,"column":6},"end":{"line":67,"column":60}},"35":{"start":{"line":67,"column":23},"end":{"line":67,"column":60}},"36":{"start":{"line":68,"column":6},"end":{"line":70,"column":7}},"37":{"start":{"line":68,"column":19},"end":{"line":68,"column":20}},"38":{"start":{"line":68,"column":26},"end":{"line":68,"column":44}},"39":{"start":{"line":69,"column":8},"end":{"line":69,"column":48}},"40":{"start":{"line":71,"column":6},"end":{"line":73,"column":7}},"41":{"start":{"line":72,"column":8},"end":{"line":72,"column":23}},"42":{"start":{"line":74,"column":6},"end":{"line":74,"column":29}},"43":{"start":{"line":76,"column":6},"end":{"line":76,"column":16}},"44":{"start":{"line":81,"column":4},"end":{"line":81,"column":35}},"45":{"start":{"line":81,"column":23},"end":{"line":81,"column":35}},"46":{"start":{"line":82,"column":18},"end":{"line":82,"column":49}},"47":{"start":{"line":83,"column":4},"end":{"line":83,"column":39}},"48":{"start":{"line":83,"column":24},"end":{"line":83,"column":39}},"49":{"start":{"line":84,"column":4},"end":{"line":93,"column":7}},"50":{"start":{"line":85,"column":17},"end":{"line":85,"column":28}},"51":{"start":{"line":86,"column":6},"end":{"line":92,"column":7}},"52":{"start":{"line":87,"column":8},"end":{"line":87,"column":63}},"53":{"start":{"line":88,"column":13},"end":{"line":92,"column":7}},"54":{"start":{"line":89,"column":8},"end":{"line":91,"column":34}},"55":{"start":{"line":94,"column":4},"end":{"line":94,"column":19}},"56":{"start":{"line":98,"column":17},"end":{"line":98,"column":19}},"57":{"start":{"line":99,"column":4},"end":{"line":109,"column":5}},"58":{"start":{"line":100,"column":18},"end":{"line":100,"column":32}},"59":{"start":{"line":101,"column":17},"end":{"line":101,"column":59}},"60":{"start":{"line":102,"column":6},"end":{"line":108,"column":7}},"61":{"start":{"line":103,"column":8},"end":{"line":103,"column":55}},"62":{"start":{"line":105,"column":8},"end":{"line":107,"column":34}},"63":{"start":{"line":110,"column":4},"end":{"line":110,"column":18}},"64":{"start":{"line":114,"column":4},"end":{"line":114,"column":48}},"65":{"start":{"line":114,"column":25},"end":{"line":114,"column":48}},"66":{"start":{"line":116,"column":4},"end":{"line":213,"column":5}},"67":{"start":{"line":118,"column":8},"end":{"line":126,"column":9}},"68":{"start":{"line":119,"column":10},"end":{"line":125,"column":11}},"69":{"start":{"line":120,"column":33},"end":{"line":120,"column":65}},"70":{"start":{"line":121,"column":12},"end":{"line":123,"column":13}},"71":{"start":{"line":122,"column":14},"end":{"line":122,"column":59}},"72":{"start":{"line":124,"column":12},"end":{"line":124,"column":18}},"73":{"start":{"line":127,"column":8},"end":{"line":135,"column":9}},"74":{"start":{"line":128,"column":10},"end":{"line":134,"column":11}},"75":{"start":{"line":129,"column":33},"end":{"line":129,"column":66}},"76":{"start":{"line":130,"column":12},"end":{"line":132,"column":13}},"77":{"start":{"line":131,"column":14},"end":{"line":131,"column":60}},"78":{"start":{"line":133,"column":12},"end":{"line":133,"column":18}},"79":{"start":{"line":136,"column":8},"end":{"line":136,"column":14}},"80":{"start":{"line":138,"column":8},"end":{"line":138,"column":48}},"81":{"start":{"line":139,"column":8},"end":{"line":139,"column":49}},"82":{"start":{"line":140,"column":8},"end":{"line":147,"column":9}},"83":{"start":{"line":141,"column":10},"end":{"line":146,"column":11}},"84":{"start":{"line":142,"column":26},"end":{"line":142,"column":58}},"85":{"start":{"line":143,"column":12},"end":{"line":145,"column":13}},"86":{"start":{"line":144,"column":14},"end":{"line":144,"column":62}},"87":{"start":{"line":148,"column":8},"end":{"line":155,"column":9}},"88":{"start":{"line":149,"column":10},"end":{"line":154,"column":11}},"89":{"start":{"line":150,"column":26},"end":{"line":150,"column":59}},"90":{"start":{"line":151,"column":12},"end":{"line":153,"column":13}},"91":{"start":{"line":152,"column":14},"end":{"line":152,"column":63}},"92":{"start":{"line":156,"column":8},"end":{"line":156,"column":14}},"93":{"start":{"line":160,"column":20},"end":{"line":161,"column":60}},"94":{"start":{"line":162,"column":8},"end":{"line":163,"column":66}},"95":{"start":{"line":164,"column":8},"end":{"line":165,"column":79}},"96":{"start":{"line":166,"column":25},"end":{"line":166,"column":56}},"97":{"start":{"line":167,"column":26},"end":{"line":167,"column":57}},"98":{"start":{"line":168,"column":8},"end":{"line":187,"column":9}},"99":{"start":{"line":169,"column":10},"end":{"line":186,"column":11}},"100":{"start":{"line":170,"column":23},"end":{"line":170,"column":47}},"101":{"start":{"line":172,"column":12},"end":{"line":185,"column":13}},"102":{"start":{"line":173,"column":14},"end":{"line":178,"column":15}},"103":{"start":{"line":174,"column":28},"end":{"line":174,"column":99}},"104":{"start":{"line":175,"column":16},"end":{"line":175,"column":29}},"105":{"start":{"line":177,"column":16},"end":{"line":177,"column":39}},"106":{"start":{"line":179,"column":28},"end":{"line":180,"column":64}},"107":{"start":{"line":181,"column":14},"end":{"line":181,"column":45}},"108":{"start":{"line":182,"column":19},"end":{"line":185,"column":13}},"109":{"start":{"line":183,"column":38},"end":{"line":183,"column":72}},"110":{"start":{"line":184,"column":14},"end":{"line":184,"column":55}},"111":{"start":{"line":188,"column":8},"end":{"line":207,"column":9}},"112":{"start":{"line":189,"column":10},"end":{"line":206,"column":11}},"113":{"start":{"line":190,"column":23},"end":{"line":190,"column":48}},"114":{"start":{"line":192,"column":12},"end":{"line":205,"column":13}},"115":{"start":{"line":193,"column":14},"end":{"line":198,"column":15}},"116":{"start":{"line":194,"column":28},"end":{"line":194,"column":99}},"117":{"start":{"line":195,"column":16},"end":{"line":195,"column":29}},"118":{"start":{"line":197,"column":16},"end":{"line":197,"column":39}},"119":{"start":{"line":199,"column":28},"end":{"line":200,"column":64}},"120":{"start":{"line":201,"column":14},"end":{"line":201,"column":46}},"121":{"start":{"line":202,"column":19},"end":{"line":205,"column":13}},"122":{"start":{"line":203,"column":38},"end":{"line":203,"column":72}},"123":{"start":{"line":204,"column":14},"end":{"line":204,"column":56}},"124":{"start":{"line":208,"column":8},"end":{"line":208,"column":45}},"125":{"start":{"line":209,"column":8},"end":{"line":209,"column":47}},"126":{"start":{"line":210,"column":8},"end":{"line":210,"column":14}},"127":{"start":{"line":212,"column":8},"end":{"line":212,"column":88}},"128":{"start":{"line":215,"column":17},"end":{"line":215,"column":49}},"129":{"start":{"line":216,"column":23},"end":{"line":216,"column":73}},"130":{"start":{"line":217,"column":24},"end":{"line":217,"column":75}},"131":{"start":{"line":219,"column":4},"end":{"line":235,"column":6}},"132":{"start":{"line":236,"column":4},"end":{"line":237,"column":89}},"133":{"start":{"line":238,"column":4},"end":{"line":239,"column":89}},"134":{"start":{"line":240,"column":4},"end":{"line":241,"column":89}},"135":{"start":{"line":243,"column":4},"end":{"line":243,"column":27}},"136":{"start":{"line":247,"column":4},"end":{"line":247,"column":30}},"137":{"start":{"line":249,"column":4},"end":{"line":253,"column":5}},"138":{"start":{"line":250,"column":6},"end":{"line":250,"column":62}},"139":{"start":{"line":251,"column":11},"end":{"line":253,"column":5}},"140":{"start":{"line":252,"column":6},"end":{"line":252,"column":60}},"141":{"start":{"line":255,"column":4},"end":{"line":255,"column":31}},"142":{"start":{"line":256,"column":21},"end":{"line":256,"column":41}},"143":{"start":{"line":258,"column":29},"end":{"line":259,"column":69}},"144":{"start":{"line":260,"column":4},"end":{"line":260,"column":39}},"145":{"start":{"line":262,"column":27},"end":{"line":263,"column":67}},"146":{"start":{"line":265,"column":25},"end":{"line":266,"column":65}},"147":{"start":{"line":268,"column":4},"end":{"line":268,"column":52}},"148":{"start":{"line":269,"column":4},"end":{"line":269,"column":50}},"149":{"start":{"line":273,"column":4},"end":{"line":275,"column":5}},"150":{"start":{"line":274,"column":6},"end":{"line":274,"column":51}},"151":{"start":{"line":277,"column":4},"end":{"line":279,"column":5}},"152":{"start":{"line":278,"column":6},"end":{"line":278,"column":54}},"153":{"start":{"line":296,"column":4},"end":{"line":344,"column":5}},"154":{"start":{"line":297,"column":19},"end":{"line":297,"column":68}},"155":{"start":{"line":299,"column":6},"end":{"line":303,"column":7}},"156":{"start":{"line":300,"column":8},"end":{"line":300,"column":29}},"157":{"start":{"line":301,"column":13},"end":{"line":303,"column":7}},"158":{"start":{"line":302,"column":8},"end":{"line":302,"column":27}},"159":{"start":{"line":305,"column":28},"end":{"line":306,"column":68}},"160":{"start":{"line":307,"column":6},"end":{"line":307,"column":42}},"161":{"start":{"line":309,"column":6},"end":{"line":339,"column":7}},"162":{"start":{"line":310,"column":8},"end":{"line":311,"column":91}},"163":{"start":{"line":312,"column":8},"end":{"line":313,"column":93}},"164":{"start":{"line":314,"column":8},"end":{"line":315,"column":92}},"165":{"start":{"line":316,"column":8},"end":{"line":317,"column":87}},"166":{"start":{"line":318,"column":8},"end":{"line":318,"column":46}},"167":{"start":{"line":319,"column":13},"end":{"line":339,"column":7}},"168":{"start":{"line":320,"column":19},"end":{"line":320,"column":74}},"169":{"start":{"line":321,"column":8},"end":{"line":322,"column":87}},"170":{"start":{"line":323,"column":22},"end":{"line":323,"column":99}},"171":{"start":{"line":324,"column":8},"end":{"line":324,"column":27}},"172":{"start":{"line":325,"column":8},"end":{"line":326,"column":87}},"173":{"start":{"line":327,"column":8},"end":{"line":327,"column":53}},"174":{"start":{"line":328,"column":21},"end":{"line":328,"column":78}},"175":{"start":{"line":329,"column":8},"end":{"line":330,"column":86}},"176":{"start":{"line":331,"column":8},"end":{"line":331,"column":55}},"177":{"start":{"line":332,"column":8},"end":{"line":333,"column":86}},"178":{"start":{"line":334,"column":8},"end":{"line":335,"column":86}},"179":{"start":{"line":336,"column":8},"end":{"line":337,"column":87}},"180":{"start":{"line":338,"column":8},"end":{"line":338,"column":46}},"181":{"start":{"line":341,"column":6},"end":{"line":343,"column":7}},"182":{"start":{"line":342,"column":8},"end":{"line":342,"column":71}},"183":{"start":{"line":346,"column":4},"end":{"line":346,"column":22}},"184":{"start":{"line":350,"column":14},"end":{"line":350,"column":79}},"185":{"start":{"line":351,"column":4},"end":{"line":393,"column":5}},"186":{"start":{"line":353,"column":20},"end":{"line":353,"column":24}},"187":{"start":{"line":354,"column":18},"end":{"line":354,"column":19}},"188":{"start":{"line":355,"column":6},"end":{"line":365,"column":7}},"189":{"start":{"line":356,"column":8},"end":{"line":364,"column":9}},"190":{"start":{"line":357,"column":21},"end":{"line":357,"column":45}},"191":{"start":{"line":358,"column":10},"end":{"line":358,"column":33}},"192":{"start":{"line":359,"column":10},"end":{"line":362,"column":11}},"193":{"start":{"line":360,"column":12},"end":{"line":360,"column":76}},"194":{"start":{"line":361,"column":12},"end":{"line":361,"column":72}},"195":{"start":{"line":363,"column":10},"end":{"line":363,"column":18}},"196":{"start":{"line":368,"column":6},"end":{"line":386,"column":7}},"197":{"start":{"line":369,"column":8},"end":{"line":369,"column":18}},"198":{"start":{"line":370,"column":8},"end":{"line":378,"column":9}},"199":{"start":{"line":371,"column":10},"end":{"line":377,"column":11}},"200":{"start":{"line":372,"column":23},"end":{"line":372,"column":48}},"201":{"start":{"line":373,"column":12},"end":{"line":373,"column":35}},"202":{"start":{"line":374,"column":12},"end":{"line":375,"column":58}},"203":{"start":{"line":376,"column":12},"end":{"line":376,"column":20}},"204":{"start":{"line":379,"column":8},"end":{"line":383,"column":9}},"205":{"start":{"line":380,"column":10},"end":{"line":380,"column":51}},"206":{"start":{"line":382,"column":10},"end":{"line":382,"column":44}},"207":{"start":{"line":385,"column":8},"end":{"line":385,"column":42}},"208":{"start":{"line":387,"column":11},"end":{"line":393,"column":5}},"209":{"start":{"line":388,"column":6},"end":{"line":388,"column":40}},"210":{"start":{"line":389,"column":11},"end":{"line":393,"column":5}},"211":{"start":{"line":390,"column":6},"end":{"line":390,"column":35}},"212":{"start":{"line":391,"column":11},"end":{"line":393,"column":5}},"213":{"start":{"line":392,"column":6},"end":{"line":392,"column":35}},"214":{"start":{"line":394,"column":4},"end":{"line":394,"column":21}},"215":{"start":{"line":399,"column":0},"end":{"line":399,"column":24}},"216":{"start":{"line":400,"column":0},"end":{"line":400,"column":36}},"217":{"start":{"line":401,"column":0},"end":{"line":402,"column":15}},"218":{"start":{"line":404,"column":0},"end":{"line":404,"column":27}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":28,"column":2},"end":{"line":28,"column":3}},"loc":{"start":{"line":28,"column":38},"end":{"line":34,"column":3}},"line":28},"1":{"name":"(anonymous_1)","decl":{"start":{"line":36,"column":2},"end":{"line":36,"column":3}},"loc":{"start":{"line":36,"column":18},"end":{"line":61,"column":3}},"line":36},"2":{"name":"(anonymous_2)","decl":{"start":{"line":63,"column":2},"end":{"line":63,"column":3}},"loc":{"start":{"line":63,"column":27},"end":{"line":78,"column":3}},"line":63},"3":{"name":"(anonymous_3)","decl":{"start":{"line":80,"column":2},"end":{"line":80,"column":3}},"loc":{"start":{"line":80,"column":45},"end":{"line":95,"column":3}},"line":80},"4":{"name":"(anonymous_4)","decl":{"start":{"line":84,"column":26},"end":{"line":84,"column":27}},"loc":{"start":{"line":84,"column":43},"end":{"line":93,"column":5}},"line":84},"5":{"name":"(anonymous_5)","decl":{"start":{"line":97,"column":2},"end":{"line":97,"column":3}},"loc":{"start":{"line":97,"column":30},"end":{"line":111,"column":3}},"line":97},"6":{"name":"(anonymous_6)","decl":{"start":{"line":113,"column":2},"end":{"line":113,"column":3}},"loc":{"start":{"line":113,"column":24},"end":{"line":244,"column":3}},"line":113},"7":{"name":"(anonymous_7)","decl":{"start":{"line":246,"column":2},"end":{"line":246,"column":3}},"loc":{"start":{"line":246,"column":93},"end":{"line":347,"column":3}},"line":246},"8":{"name":"(anonymous_8)","decl":{"start":{"line":349,"column":2},"end":{"line":349,"column":3}},"loc":{"start":{"line":349,"column":12},"end":{"line":395,"column":3}},"line":349}},"branchMap":{"0":{"loc":{"start":{"line":37,"column":4},"end":{"line":60,"column":5}},"type":"switch","locations":[{"start":{"line":38,"column":6},"end":{"line":40,"column":14}},{"start":{"line":41,"column":6},"end":{"line":43,"column":14}},{"start":{"line":44,"column":6},"end":{"line":46,"column":14}},{"start":{"line":47,"column":6},"end":{"line":59,"column":14}}],"line":37},"1":{"loc":{"start":{"line":48,"column":26},"end":{"line":48,"column":49}},"type":"binary-expr","locations":[{"start":{"line":48,"column":26},"end":{"line":48,"column":43}},{"start":{"line":48,"column":47},"end":{"line":48,"column":49}}],"line":48},"2":{"loc":{"start":{"line":49,"column":21},"end":{"line":49,"column":39}},"type":"binary-expr","locations":[{"start":{"line":49,"column":21},"end":{"line":49,"column":33}},{"start":{"line":49,"column":37},"end":{"line":49,"column":39}}],"line":49},"3":{"loc":{"start":{"line":50,"column":34},"end":{"line":50,"column":116}},"type":"binary-expr","locations":[{"start":{"line":50,"column":34},"end":{"line":50,"column":70}},{"start":{"line":50,"column":74},"end":{"line":50,"column":107}},{"start":{"line":50,"column":111},"end":{"line":50,"column":116}}],"line":50},"4":{"loc":{"start":{"line":52,"column":8},"end":{"line":58,"column":9}},"type":"if","locations":[{"start":{"line":52,"column":8},"end":{"line":58,"column":9}},{"start":{"line":52,"column":8},"end":{"line":58,"column":9}}],"line":52},"5":{"loc":{"start":{"line":54,"column":15},"end":{"line":58,"column":9}},"type":"if","locations":[{"start":{"line":54,"column":15},"end":{"line":58,"column":9}},{"start":{"line":54,"column":15},"end":{"line":58,"column":9}}],"line":54},"6":{"loc":{"start":{"line":65,"column":6},"end":{"line":65,"column":34}},"type":"if","locations":[{"start":{"line":65,"column":6},"end":{"line":65,"column":34}},{"start":{"line":65,"column":6},"end":{"line":65,"column":34}}],"line":65},"7":{"loc":{"start":{"line":66,"column":6},"end":{"line":66,"column":58}},"type":"if","locations":[{"start":{"line":66,"column":6},"end":{"line":66,"column":58}},{"start":{"line":66,"column":6},"end":{"line":66,"column":58}}],"line":66},"8":{"loc":{"start":{"line":67,"column":6},"end":{"line":67,"column":60}},"type":"if","locations":[{"start":{"line":67,"column":6},"end":{"line":67,"column":60}},{"start":{"line":67,"column":6},"end":{"line":67,"column":60}}],"line":67},"9":{"loc":{"start":{"line":71,"column":6},"end":{"line":73,"column":7}},"type":"if","locations":[{"start":{"line":71,"column":6},"end":{"line":73,"column":7}},{"start":{"line":71,"column":6},"end":{"line":73,"column":7}}],"line":71},"10":{"loc":{"start":{"line":81,"column":4},"end":{"line":81,"column":35}},"type":"if","locations":[{"start":{"line":81,"column":4},"end":{"line":81,"column":35}},{"start":{"line":81,"column":4},"end":{"line":81,"column":35}}],"line":81},"11":{"loc":{"start":{"line":83,"column":4},"end":{"line":83,"column":39}},"type":"if","locations":[{"start":{"line":83,"column":4},"end":{"line":83,"column":39}},{"start":{"line":83,"column":4},"end":{"line":83,"column":39}}],"line":83},"12":{"loc":{"start":{"line":86,"column":6},"end":{"line":92,"column":7}},"type":"if","locations":[{"start":{"line":86,"column":6},"end":{"line":92,"column":7}},{"start":{"line":86,"column":6},"end":{"line":92,"column":7}}],"line":86},"13":{"loc":{"start":{"line":86,"column":10},"end":{"line":86,"column":30}},"type":"binary-expr","locations":[{"start":{"line":86,"column":10},"end":{"line":86,"column":14}},{"start":{"line":86,"column":18},"end":{"line":86,"column":30}}],"line":86},"14":{"loc":{"start":{"line":88,"column":13},"end":{"line":92,"column":7}},"type":"if","locations":[{"start":{"line":88,"column":13},"end":{"line":92,"column":7}},{"start":{"line":88,"column":13},"end":{"line":92,"column":7}}],"line":88},"15":{"loc":{"start":{"line":88,"column":17},"end":{"line":88,"column":34}},"type":"binary-expr","locations":[{"start":{"line":88,"column":17},"end":{"line":88,"column":21}},{"start":{"line":88,"column":25},"end":{"line":88,"column":34}}],"line":88},"16":{"loc":{"start":{"line":101,"column":17},"end":{"line":101,"column":59}},"type":"binary-expr","locations":[{"start":{"line":101,"column":17},"end":{"line":101,"column":30}},{"start":{"line":101,"column":34},"end":{"line":101,"column":59}}],"line":101},"17":{"loc":{"start":{"line":102,"column":6},"end":{"line":108,"column":7}},"type":"if","locations":[{"start":{"line":102,"column":6},"end":{"line":108,"column":7}},{"start":{"line":102,"column":6},"end":{"line":108,"column":7}}],"line":102},"18":{"loc":{"start":{"line":102,"column":10},"end":{"line":102,"column":30}},"type":"binary-expr","locations":[{"start":{"line":102,"column":10},"end":{"line":102,"column":14}},{"start":{"line":102,"column":18},"end":{"line":102,"column":30}}],"line":102},"19":{"loc":{"start":{"line":114,"column":4},"end":{"line":114,"column":48}},"type":"if","locations":[{"start":{"line":114,"column":4},"end":{"line":114,"column":48}},{"start":{"line":114,"column":4},"end":{"line":114,"column":48}}],"line":114},"20":{"loc":{"start":{"line":116,"column":4},"end":{"line":213,"column":5}},"type":"switch","locations":[{"start":{"line":117,"column":6},"end":{"line":136,"column":14}},{"start":{"line":137,"column":6},"end":{"line":156,"column":14}},{"start":{"line":157,"column":6},"end":{"line":157,"column":28}},{"start":{"line":158,"column":6},"end":{"line":210,"column":14}},{"start":{"line":211,"column":6},"end":{"line":212,"column":88}}],"line":116},"21":{"loc":{"start":{"line":118,"column":8},"end":{"line":126,"column":9}},"type":"if","locations":[{"start":{"line":118,"column":8},"end":{"line":126,"column":9}},{"start":{"line":118,"column":8},"end":{"line":126,"column":9}}],"line":118},"22":{"loc":{"start":{"line":118,"column":12},"end":{"line":118,"column":41}},"type":"binary-expr","locations":[{"start":{"line":118,"column":12},"end":{"line":118,"column":22}},{"start":{"line":118,"column":26},"end":{"line":118,"column":41}}],"line":118},"23":{"loc":{"start":{"line":121,"column":12},"end":{"line":123,"column":13}},"type":"if","locations":[{"start":{"line":121,"column":12},"end":{"line":123,"column":13}},{"start":{"line":121,"column":12},"end":{"line":123,"column":13}}],"line":121},"24":{"loc":{"start":{"line":127,"column":8},"end":{"line":135,"column":9}},"type":"if","locations":[{"start":{"line":127,"column":8},"end":{"line":135,"column":9}},{"start":{"line":127,"column":8},"end":{"line":135,"column":9}}],"line":127},"25":{"loc":{"start":{"line":127,"column":12},"end":{"line":127,"column":43}},"type":"binary-expr","locations":[{"start":{"line":127,"column":12},"end":{"line":127,"column":23}},{"start":{"line":127,"column":27},"end":{"line":127,"column":43}}],"line":127},"26":{"loc":{"start":{"line":130,"column":12},"end":{"line":132,"column":13}},"type":"if","locations":[{"start":{"line":130,"column":12},"end":{"line":132,"column":13}},{"start":{"line":130,"column":12},"end":{"line":132,"column":13}}],"line":130},"27":{"loc":{"start":{"line":140,"column":8},"end":{"line":147,"column":9}},"type":"if","locations":[{"start":{"line":140,"column":8},"end":{"line":147,"column":9}},{"start":{"line":140,"column":8},"end":{"line":147,"column":9}}],"line":140},"28":{"loc":{"start":{"line":140,"column":12},"end":{"line":140,"column":41}},"type":"binary-expr","locations":[{"start":{"line":140,"column":12},"end":{"line":140,"column":22}},{"start":{"line":140,"column":26},"end":{"line":140,"column":41}}],"line":140},"29":{"loc":{"start":{"line":143,"column":12},"end":{"line":145,"column":13}},"type":"if","locations":[{"start":{"line":143,"column":12},"end":{"line":145,"column":13}},{"start":{"line":143,"column":12},"end":{"line":145,"column":13}}],"line":143},"30":{"loc":{"start":{"line":148,"column":8},"end":{"line":155,"column":9}},"type":"if","locations":[{"start":{"line":148,"column":8},"end":{"line":155,"column":9}},{"start":{"line":148,"column":8},"end":{"line":155,"column":9}}],"line":148},"31":{"loc":{"start":{"line":148,"column":12},"end":{"line":148,"column":43}},"type":"binary-expr","locations":[{"start":{"line":148,"column":12},"end":{"line":148,"column":23}},{"start":{"line":148,"column":27},"end":{"line":148,"column":43}}],"line":148},"32":{"loc":{"start":{"line":151,"column":12},"end":{"line":153,"column":13}},"type":"if","locations":[{"start":{"line":151,"column":12},"end":{"line":153,"column":13}},{"start":{"line":151,"column":12},"end":{"line":153,"column":13}}],"line":151},"33":{"loc":{"start":{"line":160,"column":20},"end":{"line":161,"column":60}},"type":"binary-expr","locations":[{"start":{"line":160,"column":21},"end":{"line":160,"column":31}},{"start":{"line":160,"column":35},"end":{"line":160,"column":50}},{"start":{"line":161,"column":10},"end":{"line":161,"column":35}},{"start":{"line":161,"column":40},"end":{"line":161,"column":60}}],"line":160},"34":{"loc":{"start":{"line":168,"column":8},"end":{"line":187,"column":9}},"type":"if","locations":[{"start":{"line":168,"column":8},"end":{"line":187,"column":9}},{"start":{"line":168,"column":8},"end":{"line":187,"column":9}}],"line":168},"35":{"loc":{"start":{"line":168,"column":12},"end":{"line":168,"column":41}},"type":"binary-expr","locations":[{"start":{"line":168,"column":12},"end":{"line":168,"column":22}},{"start":{"line":168,"column":26},"end":{"line":168,"column":41}}],"line":168},"36":{"loc":{"start":{"line":172,"column":12},"end":{"line":185,"column":13}},"type":"if","locations":[{"start":{"line":172,"column":12},"end":{"line":185,"column":13}},{"start":{"line":172,"column":12},"end":{"line":185,"column":13}}],"line":172},"37":{"loc":{"start":{"line":173,"column":14},"end":{"line":178,"column":15}},"type":"if","locations":[{"start":{"line":173,"column":14},"end":{"line":178,"column":15}},{"start":{"line":173,"column":14},"end":{"line":178,"column":15}}],"line":173},"38":{"loc":{"start":{"line":182,"column":19},"end":{"line":185,"column":13}},"type":"if","locations":[{"start":{"line":182,"column":19},"end":{"line":185,"column":13}},{"start":{"line":182,"column":19},"end":{"line":185,"column":13}}],"line":182},"39":{"loc":{"start":{"line":188,"column":8},"end":{"line":207,"column":9}},"type":"if","locations":[{"start":{"line":188,"column":8},"end":{"line":207,"column":9}},{"start":{"line":188,"column":8},"end":{"line":207,"column":9}}],"line":188},"40":{"loc":{"start":{"line":188,"column":12},"end":{"line":188,"column":43}},"type":"binary-expr","locations":[{"start":{"line":188,"column":12},"end":{"line":188,"column":23}},{"start":{"line":188,"column":27},"end":{"line":188,"column":43}}],"line":188},"41":{"loc":{"start":{"line":192,"column":12},"end":{"line":205,"column":13}},"type":"if","locations":[{"start":{"line":192,"column":12},"end":{"line":205,"column":13}},{"start":{"line":192,"column":12},"end":{"line":205,"column":13}}],"line":192},"42":{"loc":{"start":{"line":193,"column":14},"end":{"line":198,"column":15}},"type":"if","locations":[{"start":{"line":193,"column":14},"end":{"line":198,"column":15}},{"start":{"line":193,"column":14},"end":{"line":198,"column":15}}],"line":193},"43":{"loc":{"start":{"line":202,"column":19},"end":{"line":205,"column":13}},"type":"if","locations":[{"start":{"line":202,"column":19},"end":{"line":205,"column":13}},{"start":{"line":202,"column":19},"end":{"line":205,"column":13}}],"line":202},"44":{"loc":{"start":{"line":247,"column":13},"end":{"line":247,"column":29}},"type":"binary-expr","locations":[{"start":{"line":247,"column":13},"end":{"line":247,"column":19}},{"start":{"line":247,"column":23},"end":{"line":247,"column":29}}],"line":247},"45":{"loc":{"start":{"line":249,"column":4},"end":{"line":253,"column":5}},"type":"if","locations":[{"start":{"line":249,"column":4},"end":{"line":253,"column":5}},{"start":{"line":249,"column":4},"end":{"line":253,"column":5}}],"line":249},"46":{"loc":{"start":{"line":251,"column":11},"end":{"line":253,"column":5}},"type":"if","locations":[{"start":{"line":251,"column":11},"end":{"line":253,"column":5}},{"start":{"line":251,"column":11},"end":{"line":253,"column":5}}],"line":251},"47":{"loc":{"start":{"line":255,"column":12},"end":{"line":255,"column":30}},"type":"binary-expr","locations":[{"start":{"line":255,"column":12},"end":{"line":255,"column":17}},{"start":{"line":255,"column":21},"end":{"line":255,"column":30}}],"line":255},"48":{"loc":{"start":{"line":273,"column":4},"end":{"line":275,"column":5}},"type":"if","locations":[{"start":{"line":273,"column":4},"end":{"line":275,"column":5}},{"start":{"line":273,"column":4},"end":{"line":275,"column":5}}],"line":273},"49":{"loc":{"start":{"line":273,"column":8},"end":{"line":273,"column":90}},"type":"binary-expr","locations":[{"start":{"line":273,"column":8},"end":{"line":273,"column":27}},{"start":{"line":273,"column":31},"end":{"line":273,"column":55}},{"start":{"line":273,"column":59},"end":{"line":273,"column":90}}],"line":273},"50":{"loc":{"start":{"line":277,"column":4},"end":{"line":279,"column":5}},"type":"if","locations":[{"start":{"line":277,"column":4},"end":{"line":279,"column":5}},{"start":{"line":277,"column":4},"end":{"line":279,"column":5}}],"line":277},"51":{"loc":{"start":{"line":277,"column":8},"end":{"line":277,"column":58}},"type":"binary-expr","locations":[{"start":{"line":277,"column":8},"end":{"line":277,"column":27}},{"start":{"line":277,"column":31},"end":{"line":277,"column":58}}],"line":277},"52":{"loc":{"start":{"line":296,"column":4},"end":{"line":344,"column":5}},"type":"if","locations":[{"start":{"line":296,"column":4},"end":{"line":344,"column":5}},{"start":{"line":296,"column":4},"end":{"line":344,"column":5}}],"line":296},"53":{"loc":{"start":{"line":296,"column":8},"end":{"line":296,"column":73}},"type":"binary-expr","locations":[{"start":{"line":296,"column":8},"end":{"line":296,"column":16}},{"start":{"line":296,"column":20},"end":{"line":296,"column":39}},{"start":{"line":296,"column":43},"end":{"line":296,"column":73}}],"line":296},"54":{"loc":{"start":{"line":299,"column":6},"end":{"line":303,"column":7}},"type":"if","locations":[{"start":{"line":299,"column":6},"end":{"line":303,"column":7}},{"start":{"line":299,"column":6},"end":{"line":303,"column":7}}],"line":299},"55":{"loc":{"start":{"line":301,"column":13},"end":{"line":303,"column":7}},"type":"if","locations":[{"start":{"line":301,"column":13},"end":{"line":303,"column":7}},{"start":{"line":301,"column":13},"end":{"line":303,"column":7}}],"line":301},"56":{"loc":{"start":{"line":309,"column":6},"end":{"line":339,"column":7}},"type":"if","locations":[{"start":{"line":309,"column":6},"end":{"line":339,"column":7}},{"start":{"line":309,"column":6},"end":{"line":339,"column":7}}],"line":309},"57":{"loc":{"start":{"line":319,"column":13},"end":{"line":339,"column":7}},"type":"if","locations":[{"start":{"line":319,"column":13},"end":{"line":339,"column":7}},{"start":{"line":319,"column":13},"end":{"line":339,"column":7}}],"line":319},"58":{"loc":{"start":{"line":350,"column":14},"end":{"line":350,"column":79}},"type":"binary-expr","locations":[{"start":{"line":350,"column":14},"end":{"line":350,"column":24}},{"start":{"line":350,"column":28},"end":{"line":350,"column":43}},{"start":{"line":350,"column":47},"end":{"line":350,"column":66}},{"start":{"line":350,"column":70},"end":{"line":350,"column":79}}],"line":350},"59":{"loc":{"start":{"line":351,"column":4},"end":{"line":393,"column":5}},"type":"if","locations":[{"start":{"line":351,"column":4},"end":{"line":393,"column":5}},{"start":{"line":351,"column":4},"end":{"line":393,"column":5}}],"line":351},"60":{"loc":{"start":{"line":351,"column":8},"end":{"line":351,"column":54}},"type":"binary-expr","locations":[{"start":{"line":351,"column":8},"end":{"line":351,"column":33}},{"start":{"line":351,"column":37},"end":{"line":351,"column":54}}],"line":351},"61":{"loc":{"start":{"line":355,"column":6},"end":{"line":365,"column":7}},"type":"if","locations":[{"start":{"line":355,"column":6},"end":{"line":365,"column":7}},{"start":{"line":355,"column":6},"end":{"line":365,"column":7}}],"line":355},"62":{"loc":{"start":{"line":355,"column":10},"end":{"line":355,"column":39}},"type":"binary-expr","locations":[{"start":{"line":355,"column":10},"end":{"line":355,"column":20}},{"start":{"line":355,"column":24},"end":{"line":355,"column":39}}],"line":355},"63":{"loc":{"start":{"line":359,"column":10},"end":{"line":362,"column":11}},"type":"if","locations":[{"start":{"line":359,"column":10},"end":{"line":362,"column":11}},{"start":{"line":359,"column":10},"end":{"line":362,"column":11}}],"line":359},"64":{"loc":{"start":{"line":359,"column":16},"end":{"line":359,"column":42}},"type":"binary-expr","locations":[{"start":{"line":359,"column":16},"end":{"line":359,"column":28}},{"start":{"line":359,"column":32},"end":{"line":359,"column":42}}],"line":359},"65":{"loc":{"start":{"line":368,"column":6},"end":{"line":386,"column":7}},"type":"if","locations":[{"start":{"line":368,"column":6},"end":{"line":386,"column":7}},{"start":{"line":368,"column":6},"end":{"line":386,"column":7}}],"line":368},"66":{"loc":{"start":{"line":368,"column":10},"end":{"line":368,"column":53}},"type":"binary-expr","locations":[{"start":{"line":368,"column":10},"end":{"line":368,"column":21}},{"start":{"line":368,"column":25},"end":{"line":368,"column":53}}],"line":368},"67":{"loc":{"start":{"line":370,"column":8},"end":{"line":378,"column":9}},"type":"if","locations":[{"start":{"line":370,"column":8},"end":{"line":378,"column":9}},{"start":{"line":370,"column":8},"end":{"line":378,"column":9}}],"line":370},"68":{"loc":{"start":{"line":370,"column":12},"end":{"line":370,"column":43}},"type":"binary-expr","locations":[{"start":{"line":370,"column":12},"end":{"line":370,"column":23}},{"start":{"line":370,"column":27},"end":{"line":370,"column":43}}],"line":370},"69":{"loc":{"start":{"line":374,"column":19},"end":{"line":374,"column":45}},"type":"binary-expr","locations":[{"start":{"line":374,"column":19},"end":{"line":374,"column":31}},{"start":{"line":374,"column":35},"end":{"line":374,"column":45}}],"line":374},"70":{"loc":{"start":{"line":379,"column":8},"end":{"line":383,"column":9}},"type":"if","locations":[{"start":{"line":379,"column":8},"end":{"line":383,"column":9}},{"start":{"line":379,"column":8},"end":{"line":383,"column":9}}],"line":379},"71":{"loc":{"start":{"line":387,"column":11},"end":{"line":393,"column":5}},"type":"if","locations":[{"start":{"line":387,"column":11},"end":{"line":393,"column":5}},{"start":{"line":387,"column":11},"end":{"line":393,"column":5}}],"line":387},"72":{"loc":{"start":{"line":387,"column":15},"end":{"line":387,"column":61}},"type":"binary-expr","locations":[{"start":{"line":387,"column":15},"end":{"line":387,"column":40}},{"start":{"line":387,"column":44},"end":{"line":387,"column":61}}],"line":387},"73":{"loc":{"start":{"line":389,"column":11},"end":{"line":393,"column":5}},"type":"if","locations":[{"start":{"line":389,"column":11},"end":{"line":393,"column":5}},{"start":{"line":389,"column":11},"end":{"line":393,"column":5}}],"line":389},"74":{"loc":{"start":{"line":389,"column":15},"end":{"line":389,"column":56}},"type":"binary-expr","locations":[{"start":{"line":389,"column":15},"end":{"line":389,"column":35}},{"start":{"line":389,"column":39},"end":{"line":389,"column":56}}],"line":389},"75":{"loc":{"start":{"line":391,"column":11},"end":{"line":393,"column":5}},"type":"if","locations":[{"start":{"line":391,"column":11},"end":{"line":393,"column":5}},{"start":{"line":391,"column":11},"end":{"line":393,"column":5}}],"line":391},"76":{"loc":{"start":{"line":391,"column":15},"end":{"line":391,"column":56}},"type":"binary-expr","locations":[{"start":{"line":391,"column":15},"end":{"line":391,"column":35}},{"start":{"line":391,"column":39},"end":{"line":391,"column":56}}],"line":391}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":500,"11":500,"12":500,"13":1233,"14":494,"15":494,"16":412,"17":412,"18":63,"19":63,"20":258,"21":258,"22":258,"23":258,"24":227,"25":31,"26":28,"27":3,"28":258,"29":486,"30":486,"31":0,"32":486,"33":481,"34":486,"35":399,"36":486,"37":486,"38":486,"39":74,"40":486,"41":245,"42":485,"43":1,"44":308,"45":14,"46":294,"47":294,"48":283,"49":11,"50":12,"51":12,"52":5,"53":7,"54":0,"55":11,"56":154,"57":154,"58":28,"59":28,"60":28,"61":27,"62":1,"63":154,"64":228,"65":73,"66":155,"67":35,"68":35,"69":35,"70":35,"71":35,"72":35,"73":35,"74":35,"75":35,"76":35,"77":35,"78":35,"79":35,"80":89,"81":89,"82":89,"83":87,"84":134,"85":134,"86":134,"87":89,"88":83,"89":84,"90":84,"91":84,"92":89,"93":30,"94":30,"95":30,"96":30,"97":30,"98":30,"99":30,"100":39,"101":39,"102":37,"103":18,"104":18,"105":19,"106":37,"107":37,"108":2,"109":1,"110":1,"111":30,"112":24,"113":29,"114":29,"115":28,"116":18,"117":18,"118":10,"119":28,"120":28,"121":1,"122":1,"123":1,"124":30,"125":30,"126":30,"127":1,"128":154,"129":154,"130":154,"131":154,"132":154,"133":154,"134":154,"135":154,"136":462,"137":462,"138":381,"139":81,"140":81,"141":462,"142":462,"143":462,"144":462,"145":462,"146":462,"147":462,"148":462,"149":462,"150":308,"151":462,"152":294,"153":462,"154":154,"155":154,"156":127,"157":27,"158":27,"159":154,"160":154,"161":154,"162":127,"163":127,"164":127,"165":127,"166":127,"167":27,"168":27,"169":27,"170":27,"171":27,"172":27,"173":27,"174":27,"175":27,"176":27,"177":27,"178":27,"179":27,"180":27,"181":154,"182":27,"183":462,"184":245,"185":245,"186":213,"187":213,"188":213,"189":211,"190":257,"191":257,"192":257,"193":1,"194":1,"195":256,"196":212,"197":41,"198":41,"199":41,"200":41,"201":41,"202":41,"203":41,"204":41,"205":41,"206":0,"207":171,"208":32,"209":1,"210":31,"211":22,"212":9,"213":9,"214":244,"215":1,"216":1,"217":1,"218":1},"f":{"0":500,"1":1233,"2":486,"3":308,"4":12,"5":154,"6":228,"7":462,"8":245},"b":{"0":[494,412,63,258],"1":[258,33],"2":[258,179],"3":[258,258,258],"4":[227,31],"5":[28,3],"6":[0,486],"7":[481,5],"8":[399,87],"9":[245,241],"10":[14,294],"11":[283,11],"12":[5,7],"13":[12,7],"14":[0,7],"15":[7,2],"16":[28,28],"17":[27,1],"18":[28,28],"19":[73,155],"20":[35,89,8,30,1],"21":[35,0],"22":[35,35],"23":[35,0],"24":[35,0],"25":[35,35],"26":[35,0],"27":[87,2],"28":[89,87],"29":[134,0],"30":[83,6],"31":[89,83],"32":[84,0],"33":[30,30,30,8],"34":[30,0],"35":[30,30],"36":[37,2],"37":[18,19],"38":[1,1],"39":[24,6],"40":[30,24],"41":[28,1],"42":[18,10],"43":[1,0],"44":[462,462],"45":[381,81],"46":[81,0],"47":[462,462],"48":[308,154],"49":[462,462,462],"50":[294,168],"51":[462,462],"52":[154,308],"53":[462,308,308],"54":[127,27],"55":[27,0],"56":[127,27],"57":[27,0],"58":[245,243,243,4],"59":[213,32],"60":[245,214],"61":[211,2],"62":[213,211],"63":[1,256],"64":[257,256],"65":[41,171],"66":[212,204],"67":[41,0],"68":[41,41],"69":[41,41],"70":[41,0],"71":[1,31],"72":[32,1],"73":[22,9],"74":[31,31],"75":[9,0],"76":[9,9]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"40662b6a095e279d4726c87db5a1c12e59e6e64c","contentHash":"22ae52fc7343eccdf3be0e019231a86570e3ac83730ac20ccd495117cd820b13"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/wsdlElement.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/wsdlElement.js","statementMap":{"0":{"start":{"line":8,"column":14},"end":{"line":8,"column":35}},"1":{"start":{"line":12,"column":4},"end":{"line":12,"column":34}},"2":{"start":{"line":16,"column":0},"end":{"line":16,"column":54}},"3":{"start":{"line":17,"column":0},"end":{"line":17,"column":48}},"4":{"start":{"line":19,"column":0},"end":{"line":19,"column":29}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":11,"column":2},"end":{"line":11,"column":3}},"loc":{"start":{"line":11,"column":38},"end":{"line":13,"column":3}},"line":11}},"branchMap":{},"s":{"0":1,"1":3841,"2":1,"3":1,"4":1},"f":{"0":3841},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"4eb5c277bafb36482a207e1ab93a9c4ff23433b3","contentHash":"52ef82d53a1b3d1346d8963dbec1a0149b90e91035067b8b1718bd2579a08cc5"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/element.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/element.js","statementMap":{"0":{"start":{"line":8,"column":8},"end":{"line":8,"column":31}},"1":{"start":{"line":9,"column":13},"end":{"line":9,"column":30}},"2":{"start":{"line":10,"column":12},"end":{"line":10,"column":30}},"3":{"start":{"line":11,"column":19},"end":{"line":11,"column":44}},"4":{"start":{"line":12,"column":13},"end":{"line":12,"column":32}},"5":{"start":{"line":13,"column":10},"end":{"line":13,"column":26}},"6":{"start":{"line":14,"column":12},"end":{"line":14,"column":56}},"7":{"start":{"line":16,"column":19},"end":{"line":16,"column":38}},"8":{"start":{"line":17,"column":17},"end":{"line":17,"column":34}},"9":{"start":{"line":24,"column":16},"end":{"line":24,"column":35}},"10":{"start":{"line":26,"column":4},"end":{"line":26,"column":25}},"11":{"start":{"line":27,"column":4},"end":{"line":27,"column":31}},"12":{"start":{"line":28,"column":4},"end":{"line":28,"column":27}},"13":{"start":{"line":29,"column":4},"end":{"line":29,"column":20}},"14":{"start":{"line":30,"column":4},"end":{"line":30,"column":23}},"15":{"start":{"line":31,"column":4},"end":{"line":31,"column":23}},"16":{"start":{"line":32,"column":4},"end":{"line":32,"column":20}},"17":{"start":{"line":34,"column":4},"end":{"line":37,"column":5}},"18":{"start":{"line":35,"column":6},"end":{"line":36,"column":46}},"19":{"start":{"line":39,"column":4},"end":{"line":39,"column":37}},"20":{"start":{"line":41,"column":4},"end":{"line":61,"column":5}},"21":{"start":{"line":42,"column":18},"end":{"line":42,"column":43}},"22":{"start":{"line":43,"column":6},"end":{"line":60,"column":7}},"23":{"start":{"line":44,"column":8},"end":{"line":47,"column":9}},"24":{"start":{"line":46,"column":10},"end":{"line":46,"column":38}},"25":{"start":{"line":48,"column":8},"end":{"line":51,"column":9}},"26":{"start":{"line":50,"column":10},"end":{"line":50,"column":38}},"27":{"start":{"line":52,"column":8},"end":{"line":52,"column":68}},"28":{"start":{"line":55,"column":8},"end":{"line":59,"column":9}},"29":{"start":{"line":56,"column":10},"end":{"line":56,"column":43}},"30":{"start":{"line":58,"column":10},"end":{"line":58,"column":39}},"31":{"start":{"line":62,"column":4},"end":{"line":64,"column":5}},"32":{"start":{"line":63,"column":6},"end":{"line":63,"column":51}},"33":{"start":{"line":68,"column":4},"end":{"line":77,"column":5}},"34":{"start":{"line":69,"column":6},"end":{"line":69,"column":51}},"35":{"start":{"line":70,"column":6},"end":{"line":70,"column":45}},"36":{"start":{"line":71,"column":6},"end":{"line":71,"column":63}},"37":{"start":{"line":72,"column":6},"end":{"line":72,"column":55}},"38":{"start":{"line":74,"column":6},"end":{"line":74,"column":31}},"39":{"start":{"line":75,"column":6},"end":{"line":75,"column":27}},"40":{"start":{"line":76,"column":6},"end":{"line":76,"column":34}},"41":{"start":{"line":81,"column":4},"end":{"line":82,"column":13}},"42":{"start":{"line":82,"column":6},"end":{"line":82,"column":13}},"43":{"start":{"line":85,"column":17},"end":{"line":85,"column":40}},"44":{"start":{"line":87,"column":16},"end":{"line":87,"column":61}},"45":{"start":{"line":88,"column":22},"end":{"line":88,"column":56}},"46":{"start":{"line":89,"column":4},"end":{"line":92,"column":5}},"47":{"start":{"line":91,"column":6},"end":{"line":91,"column":71}},"48":{"start":{"line":94,"column":4},"end":{"line":103,"column":5}},"49":{"start":{"line":95,"column":6},"end":{"line":95,"column":54}},"50":{"start":{"line":96,"column":6},"end":{"line":96,"column":32}},"51":{"start":{"line":97,"column":6},"end":{"line":97,"column":81}},"52":{"start":{"line":98,"column":6},"end":{"line":98,"column":40}},"53":{"start":{"line":99,"column":6},"end":{"line":99,"column":28}},"54":{"start":{"line":100,"column":6},"end":{"line":100,"column":24}},"55":{"start":{"line":102,"column":6},"end":{"line":102,"column":30}},"56":{"start":{"line":107,"column":4},"end":{"line":117,"column":5}},"57":{"start":{"line":108,"column":6},"end":{"line":109,"column":15}},"58":{"start":{"line":109,"column":8},"end":{"line":109,"column":15}},"59":{"start":{"line":110,"column":19},"end":{"line":110,"column":42}},"60":{"start":{"line":111,"column":6},"end":{"line":115,"column":7}},"61":{"start":{"line":112,"column":8},"end":{"line":112,"column":50}},"62":{"start":{"line":113,"column":8},"end":{"line":113,"column":35}},"63":{"start":{"line":114,"column":8},"end":{"line":114,"column":30}},"64":{"start":{"line":116,"column":6},"end":{"line":116,"column":18}},"65":{"start":{"line":122,"column":16},"end":{"line":122,"column":51}},"66":{"start":{"line":123,"column":17},"end":{"line":123,"column":40}},"67":{"start":{"line":124,"column":4},"end":{"line":124,"column":26}},"68":{"start":{"line":126,"column":16},"end":{"line":126,"column":35}},"69":{"start":{"line":127,"column":4},"end":{"line":127,"column":54}},"70":{"start":{"line":128,"column":4},"end":{"line":128,"column":17}},"71":{"start":{"line":132,"column":4},"end":{"line":132,"column":11}},"72":{"start":{"line":136,"column":4},"end":{"line":136,"column":87}},"73":{"start":{"line":140,"column":4},"end":{"line":140,"column":35}},"74":{"start":{"line":149,"column":4},"end":{"line":149,"column":55}},"75":{"start":{"line":149,"column":26},"end":{"line":149,"column":55}},"76":{"start":{"line":150,"column":16},"end":{"line":150,"column":20}},"77":{"start":{"line":151,"column":4},"end":{"line":157,"column":5}},"78":{"start":{"line":152,"column":6},"end":{"line":152,"column":33}},"79":{"start":{"line":154,"column":6},"end":{"line":156,"column":7}},"80":{"start":{"line":155,"column":8},"end":{"line":155,"column":51}},"81":{"start":{"line":158,"column":4},"end":{"line":158,"column":17}},"82":{"start":{"line":166,"column":4},"end":{"line":170,"column":5}},"83":{"start":{"line":167,"column":6},"end":{"line":167,"column":34}},"84":{"start":{"line":168,"column":11},"end":{"line":170,"column":5}},"85":{"start":{"line":169,"column":6},"end":{"line":169,"column":46}},"86":{"start":{"line":171,"column":4},"end":{"line":171,"column":16}},"87":{"start":{"line":179,"column":4},"end":{"line":179,"column":55}},"88":{"start":{"line":190,"column":16},"end":{"line":190,"column":35}},"89":{"start":{"line":192,"column":4},"end":{"line":192,"column":44}},"90":{"start":{"line":192,"column":32},"end":{"line":192,"column":44}},"91":{"start":{"line":193,"column":4},"end":{"line":194,"column":43}},"92":{"start":{"line":193,"column":22},"end":{"line":193,"column":65}},"93":{"start":{"line":194,"column":9},"end":{"line":194,"column":43}},"94":{"start":{"line":195,"column":4},"end":{"line":195,"column":24}},"95":{"start":{"line":196,"column":15},"end":{"line":196,"column":25}},"96":{"start":{"line":197,"column":4},"end":{"line":200,"column":5}},"97":{"start":{"line":199,"column":6},"end":{"line":199,"column":38}},"98":{"start":{"line":201,"column":17},"end":{"line":201,"column":31}},"99":{"start":{"line":202,"column":4},"end":{"line":205,"column":5}},"100":{"start":{"line":203,"column":6},"end":{"line":203,"column":61}},"101":{"start":{"line":204,"column":6},"end":{"line":204,"column":18}},"102":{"start":{"line":206,"column":16},"end":{"line":206,"column":20}},"103":{"start":{"line":207,"column":4},"end":{"line":229,"column":5}},"104":{"start":{"line":209,"column":8},"end":{"line":209,"column":38}},"105":{"start":{"line":210,"column":8},"end":{"line":210,"column":14}},"106":{"start":{"line":212,"column":8},"end":{"line":212,"column":70}},"107":{"start":{"line":213,"column":8},"end":{"line":213,"column":14}},"108":{"start":{"line":215,"column":8},"end":{"line":215,"column":41}},"109":{"start":{"line":216,"column":8},"end":{"line":216,"column":14}},"110":{"start":{"line":218,"column":8},"end":{"line":218,"column":42}},"111":{"start":{"line":219,"column":8},"end":{"line":219,"column":14}},"112":{"start":{"line":221,"column":8},"end":{"line":221,"column":36}},"113":{"start":{"line":222,"column":8},"end":{"line":222,"column":14}},"114":{"start":{"line":224,"column":8},"end":{"line":224,"column":40}},"115":{"start":{"line":225,"column":8},"end":{"line":225,"column":14}},"116":{"start":{"line":227,"column":8},"end":{"line":227,"column":45}},"117":{"start":{"line":228,"column":8},"end":{"line":228,"column":14}},"118":{"start":{"line":230,"column":4},"end":{"line":233,"column":5}},"119":{"start":{"line":231,"column":6},"end":{"line":231,"column":70}},"120":{"start":{"line":232,"column":6},"end":{"line":232,"column":18}},"121":{"start":{"line":234,"column":4},"end":{"line":234,"column":17}},"122":{"start":{"line":238,"column":4},"end":{"line":238,"column":60}},"123":{"start":{"line":242,"column":0},"end":{"line":242,"column":36}},"124":{"start":{"line":243,"column":0},"end":{"line":243,"column":32}},"125":{"start":{"line":245,"column":0},"end":{"line":245,"column":25}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":23,"column":2},"end":{"line":23,"column":3}},"loc":{"start":{"line":23,"column":38},"end":{"line":65,"column":3}},"line":23},"1":{"name":"(anonymous_1)","decl":{"start":{"line":67,"column":2},"end":{"line":67,"column":3}},"loc":{"start":{"line":67,"column":30},"end":{"line":78,"column":3}},"line":67},"2":{"name":"(anonymous_2)","decl":{"start":{"line":80,"column":2},"end":{"line":80,"column":3}},"loc":{"start":{"line":80,"column":46},"end":{"line":104,"column":3}},"line":80},"3":{"name":"(anonymous_3)","decl":{"start":{"line":106,"column":2},"end":{"line":106,"column":3}},"loc":{"start":{"line":106,"column":28},"end":{"line":118,"column":3}},"line":106},"4":{"name":"(anonymous_4)","decl":{"start":{"line":120,"column":2},"end":{"line":120,"column":3}},"loc":{"start":{"line":120,"column":43},"end":{"line":129,"column":3}},"line":120},"5":{"name":"(anonymous_5)","decl":{"start":{"line":131,"column":2},"end":{"line":131,"column":3}},"loc":{"start":{"line":131,"column":18},"end":{"line":133,"column":3}},"line":131},"6":{"name":"(anonymous_6)","decl":{"start":{"line":135,"column":2},"end":{"line":135,"column":3}},"loc":{"start":{"line":135,"column":19},"end":{"line":137,"column":3}},"line":135},"7":{"name":"(anonymous_7)","decl":{"start":{"line":139,"column":2},"end":{"line":139,"column":3}},"loc":{"start":{"line":139,"column":24},"end":{"line":141,"column":3}},"line":139},"8":{"name":"(anonymous_8)","decl":{"start":{"line":148,"column":2},"end":{"line":148,"column":3}},"loc":{"start":{"line":148,"column":26},"end":{"line":159,"column":3}},"line":148},"9":{"name":"(anonymous_9)","decl":{"start":{"line":165,"column":2},"end":{"line":165,"column":3}},"loc":{"start":{"line":165,"column":23},"end":{"line":172,"column":3}},"line":165},"10":{"name":"(anonymous_10)","decl":{"start":{"line":178,"column":2},"end":{"line":178,"column":3}},"loc":{"start":{"line":178,"column":13},"end":{"line":180,"column":3}},"line":178},"11":{"name":"(anonymous_11)","decl":{"start":{"line":189,"column":2},"end":{"line":189,"column":3}},"loc":{"start":{"line":189,"column":52},"end":{"line":235,"column":3}},"line":189},"12":{"name":"(anonymous_12)","decl":{"start":{"line":237,"column":2},"end":{"line":237,"column":3}},"loc":{"start":{"line":237,"column":27},"end":{"line":239,"column":3}},"line":237}},"branchMap":{"0":{"loc":{"start":{"line":34,"column":4},"end":{"line":37,"column":5}},"type":"if","locations":[{"start":{"line":34,"column":4},"end":{"line":37,"column":5}},{"start":{"line":34,"column":4},"end":{"line":37,"column":5}}],"line":34},"1":{"loc":{"start":{"line":43,"column":6},"end":{"line":60,"column":7}},"type":"if","locations":[{"start":{"line":43,"column":6},"end":{"line":60,"column":7}},{"start":{"line":43,"column":6},"end":{"line":60,"column":7}}],"line":43},"2":{"loc":{"start":{"line":44,"column":8},"end":{"line":47,"column":9}},"type":"if","locations":[{"start":{"line":44,"column":8},"end":{"line":47,"column":9}},{"start":{"line":44,"column":8},"end":{"line":47,"column":9}}],"line":44},"3":{"loc":{"start":{"line":48,"column":8},"end":{"line":51,"column":9}},"type":"if","locations":[{"start":{"line":48,"column":8},"end":{"line":51,"column":9}},{"start":{"line":48,"column":8},"end":{"line":51,"column":9}}],"line":48},"4":{"loc":{"start":{"line":52,"column":19},"end":{"line":52,"column":53}},"type":"cond-expr","locations":[{"start":{"line":52,"column":30},"end":{"line":52,"column":38}},{"start":{"line":52,"column":41},"end":{"line":52,"column":53}}],"line":52},"5":{"loc":{"start":{"line":55,"column":8},"end":{"line":59,"column":9}},"type":"if","locations":[{"start":{"line":55,"column":8},"end":{"line":59,"column":9}},{"start":{"line":55,"column":8},"end":{"line":59,"column":9}}],"line":55},"6":{"loc":{"start":{"line":62,"column":4},"end":{"line":64,"column":5}},"type":"if","locations":[{"start":{"line":62,"column":4},"end":{"line":64,"column":5}},{"start":{"line":62,"column":4},"end":{"line":64,"column":5}}],"line":62},"7":{"loc":{"start":{"line":68,"column":4},"end":{"line":77,"column":5}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":77,"column":5}},{"start":{"line":68,"column":4},"end":{"line":77,"column":5}}],"line":68},"8":{"loc":{"start":{"line":69,"column":22},"end":{"line":69,"column":50}},"type":"binary-expr","locations":[{"start":{"line":69,"column":22},"end":{"line":69,"column":38}},{"start":{"line":69,"column":42},"end":{"line":69,"column":50}}],"line":69},"9":{"loc":{"start":{"line":70,"column":20},"end":{"line":70,"column":44}},"type":"binary-expr","locations":[{"start":{"line":70,"column":20},"end":{"line":70,"column":34}},{"start":{"line":70,"column":38},"end":{"line":70,"column":44}}],"line":70},"10":{"loc":{"start":{"line":71,"column":31},"end":{"line":71,"column":62}},"type":"binary-expr","locations":[{"start":{"line":71,"column":31},"end":{"line":71,"column":56}},{"start":{"line":71,"column":60},"end":{"line":71,"column":62}}],"line":71},"11":{"loc":{"start":{"line":81,"column":4},"end":{"line":82,"column":13}},"type":"if","locations":[{"start":{"line":81,"column":4},"end":{"line":82,"column":13}},{"start":{"line":81,"column":4},"end":{"line":82,"column":13}}],"line":81},"12":{"loc":{"start":{"line":89,"column":4},"end":{"line":92,"column":5}},"type":"if","locations":[{"start":{"line":89,"column":4},"end":{"line":92,"column":5}},{"start":{"line":89,"column":4},"end":{"line":92,"column":5}}],"line":89},"13":{"loc":{"start":{"line":89,"column":8},"end":{"line":90,"column":60}},"type":"binary-expr","locations":[{"start":{"line":89,"column":8},"end":{"line":89,"column":67}},{"start":{"line":90,"column":6},"end":{"line":90,"column":60}}],"line":89},"14":{"loc":{"start":{"line":94,"column":4},"end":{"line":103,"column":5}},"type":"if","locations":[{"start":{"line":94,"column":4},"end":{"line":103,"column":5}},{"start":{"line":94,"column":4},"end":{"line":103,"column":5}}],"line":94},"15":{"loc":{"start":{"line":97,"column":30},"end":{"line":97,"column":80}},"type":"binary-expr","locations":[{"start":{"line":97,"column":30},"end":{"line":97,"column":51}},{"start":{"line":97,"column":55},"end":{"line":97,"column":80}}],"line":97},"16":{"loc":{"start":{"line":107,"column":4},"end":{"line":117,"column":5}},"type":"if","locations":[{"start":{"line":107,"column":4},"end":{"line":117,"column":5}},{"start":{"line":107,"column":4},"end":{"line":117,"column":5}}],"line":107},"17":{"loc":{"start":{"line":108,"column":6},"end":{"line":109,"column":15}},"type":"if","locations":[{"start":{"line":108,"column":6},"end":{"line":109,"column":15}},{"start":{"line":108,"column":6},"end":{"line":109,"column":15}}],"line":108},"18":{"loc":{"start":{"line":111,"column":6},"end":{"line":115,"column":7}},"type":"if","locations":[{"start":{"line":111,"column":6},"end":{"line":115,"column":7}},{"start":{"line":111,"column":6},"end":{"line":115,"column":7}}],"line":111},"19":{"loc":{"start":{"line":140,"column":11},"end":{"line":140,"column":34}},"type":"binary-expr","locations":[{"start":{"line":140,"column":11},"end":{"line":140,"column":21}},{"start":{"line":140,"column":25},"end":{"line":140,"column":34}}],"line":140},"20":{"loc":{"start":{"line":149,"column":4},"end":{"line":149,"column":55}},"type":"if","locations":[{"start":{"line":149,"column":4},"end":{"line":149,"column":55}},{"start":{"line":149,"column":4},"end":{"line":149,"column":55}}],"line":149},"21":{"loc":{"start":{"line":151,"column":4},"end":{"line":157,"column":5}},"type":"if","locations":[{"start":{"line":151,"column":4},"end":{"line":157,"column":5}},{"start":{"line":151,"column":4},"end":{"line":157,"column":5}}],"line":151},"22":{"loc":{"start":{"line":151,"column":8},"end":{"line":151,"column":42}},"type":"binary-expr","locations":[{"start":{"line":151,"column":8},"end":{"line":151,"column":18}},{"start":{"line":151,"column":22},"end":{"line":151,"column":42}}],"line":151},"23":{"loc":{"start":{"line":154,"column":6},"end":{"line":156,"column":7}},"type":"if","locations":[{"start":{"line":154,"column":6},"end":{"line":156,"column":7}},{"start":{"line":154,"column":6},"end":{"line":156,"column":7}}],"line":154},"24":{"loc":{"start":{"line":166,"column":4},"end":{"line":170,"column":5}},"type":"if","locations":[{"start":{"line":166,"column":4},"end":{"line":170,"column":5}},{"start":{"line":166,"column":4},"end":{"line":170,"column":5}}],"line":166},"25":{"loc":{"start":{"line":168,"column":11},"end":{"line":170,"column":5}},"type":"if","locations":[{"start":{"line":168,"column":11},"end":{"line":170,"column":5}},{"start":{"line":168,"column":11},"end":{"line":170,"column":5}}],"line":168},"26":{"loc":{"start":{"line":192,"column":4},"end":{"line":192,"column":44}},"type":"if","locations":[{"start":{"line":192,"column":4},"end":{"line":192,"column":44}},{"start":{"line":192,"column":4},"end":{"line":192,"column":44}}],"line":192},"27":{"loc":{"start":{"line":193,"column":4},"end":{"line":194,"column":43}},"type":"if","locations":[{"start":{"line":193,"column":4},"end":{"line":194,"column":43}},{"start":{"line":193,"column":4},"end":{"line":194,"column":43}}],"line":193},"28":{"loc":{"start":{"line":197,"column":4},"end":{"line":200,"column":5}},"type":"if","locations":[{"start":{"line":197,"column":4},"end":{"line":200,"column":5}},{"start":{"line":197,"column":4},"end":{"line":200,"column":5}}],"line":197},"29":{"loc":{"start":{"line":197,"column":8},"end":{"line":198,"column":62}},"type":"binary-expr","locations":[{"start":{"line":197,"column":8},"end":{"line":197,"column":39}},{"start":{"line":198,"column":7},"end":{"line":198,"column":35}},{"start":{"line":198,"column":39},"end":{"line":198,"column":61}}],"line":197},"30":{"loc":{"start":{"line":202,"column":4},"end":{"line":205,"column":5}},"type":"if","locations":[{"start":{"line":202,"column":4},"end":{"line":205,"column":5}},{"start":{"line":202,"column":4},"end":{"line":205,"column":5}}],"line":202},"31":{"loc":{"start":{"line":207,"column":4},"end":{"line":229,"column":5}},"type":"switch","locations":[{"start":{"line":208,"column":6},"end":{"line":210,"column":14}},{"start":{"line":211,"column":6},"end":{"line":213,"column":14}},{"start":{"line":214,"column":6},"end":{"line":216,"column":14}},{"start":{"line":217,"column":6},"end":{"line":219,"column":14}},{"start":{"line":220,"column":6},"end":{"line":222,"column":14}},{"start":{"line":223,"column":6},"end":{"line":225,"column":14}},{"start":{"line":226,"column":6},"end":{"line":228,"column":14}}],"line":207},"32":{"loc":{"start":{"line":212,"column":16},"end":{"line":212,"column":69}},"type":"binary-expr","locations":[{"start":{"line":212,"column":16},"end":{"line":212,"column":41}},{"start":{"line":212,"column":45},"end":{"line":212,"column":69}}],"line":212},"33":{"loc":{"start":{"line":230,"column":4},"end":{"line":233,"column":5}},"type":"if","locations":[{"start":{"line":230,"column":4},"end":{"line":233,"column":5}},{"start":{"line":230,"column":4},"end":{"line":233,"column":5}}],"line":230}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":132427,"10":132427,"11":132427,"12":132427,"13":132427,"14":132427,"15":132427,"16":132427,"17":132427,"18":41454,"19":132427,"20":132427,"21":259163,"22":259163,"23":1951,"24":50,"25":1951,"26":0,"27":1951,"28":257212,"29":48978,"30":208234,"31":132427,"32":591,"33":132427,"34":132421,"35":132421,"36":132421,"37":132421,"38":6,"39":6,"40":6,"41":65868,"42":19,"43":65849,"44":65849,"45":65849,"46":65849,"47":18,"48":65849,"49":65849,"50":65849,"51":65849,"52":65849,"53":65849,"54":65849,"55":0,"56":66207,"57":66188,"58":339,"59":65849,"60":65849,"61":65849,"62":65849,"63":65849,"64":65849,"65":65849,"66":65849,"67":65849,"68":65849,"69":65849,"70":65849,"71":31991,"72":0,"73":1,"74":407697,"75":0,"76":407697,"77":407697,"78":95468,"79":312229,"80":312219,"81":95478,"82":70292,"83":70131,"84":161,"85":85,"86":76,"87":53218,"88":29732,"89":29732,"90":0,"91":29732,"92":29629,"93":103,"94":29732,"95":29732,"96":29732,"97":5553,"98":24179,"99":24179,"100":115,"101":115,"102":24064,"103":24064,"104":780,"105":780,"106":23284,"107":23284,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":24064,"119":33,"120":33,"121":24031,"122":1,"123":1,"124":1,"125":1},"f":{"0":132427,"1":132427,"2":65868,"3":66207,"4":65849,"5":31991,"6":0,"7":1,"8":407697,"9":70292,"10":53218,"11":29732,"12":1},"b":{"0":[41454,90973],"1":[1951,257212],"2":[50,1901],"3":[0,1951],"4":[1732,219],"5":[48978,208234],"6":[591,131836],"7":[132421,6],"8":[132421,384],"9":[132421,384],"10":[132421,384],"11":[19,65849],"12":[18,65831],"13":[65849,22],"14":[65849,0],"15":[65849,65723],"16":[66188,19],"17":[339,65849],"18":[65849,0],"19":[1,1],"20":[0,407697],"21":[95468,312229],"22":[407697,407697],"23":[312219,10],"24":[70131,161],"25":[85,76],"26":[0,29732],"27":[29629,103],"28":[5553,24179],"29":[29732,5553,5041],"30":[115,24064],"31":[780,23284,0,0,0,0,0],"32":[23284,929],"33":[33,24031]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"e61fac7f258f6750cdfdceebf034cb9085f515f1","contentHash":"234330d3ebe5cf1f7921c62be4fb9b8dc27b8ae291c1a702130d54a99690227f"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/typeRegistry.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/typeRegistry.js","statementMap":{"0":{"start":{"line":42,"column":13},"end":{"line":42,"column":32}},"1":{"start":{"line":44,"column":19},"end":{"line":92,"column":1}},"2":{"start":{"line":97,"column":2},"end":{"line":99,"column":3}},"3":{"start":{"line":98,"column":4},"end":{"line":98,"column":20}},"4":{"start":{"line":100,"column":2},"end":{"line":103,"column":4}},"5":{"start":{"line":104,"column":2},"end":{"line":108,"column":5}},"6":{"start":{"line":105,"column":15},"end":{"line":105,"column":25}},"7":{"start":{"line":106,"column":4},"end":{"line":106,"column":86}},"8":{"start":{"line":107,"column":4},"end":{"line":107,"column":57}},"9":{"start":{"line":109,"column":2},"end":{"line":109,"column":18}},"10":{"start":{"line":113,"column":17},"end":{"line":113,"column":30}},"11":{"start":{"line":115,"column":4},"end":{"line":115,"column":63}},"12":{"start":{"line":116,"column":2},"end":{"line":133,"column":3}},"13":{"start":{"line":117,"column":21},"end":{"line":117,"column":48}},"14":{"start":{"line":118,"column":22},"end":{"line":118,"column":51}},"15":{"start":{"line":119,"column":22},"end":{"line":119,"column":51}},"16":{"start":{"line":120,"column":24},"end":{"line":120,"column":55}},"17":{"start":{"line":121,"column":18},"end":{"line":121,"column":38}},"18":{"start":{"line":122,"column":4},"end":{"line":132,"column":5}},"19":{"start":{"line":123,"column":6},"end":{"line":123,"column":32}},"20":{"start":{"line":124,"column":11},"end":{"line":132,"column":5}},"21":{"start":{"line":125,"column":6},"end":{"line":125,"column":31}},"22":{"start":{"line":126,"column":11},"end":{"line":132,"column":5}},"23":{"start":{"line":127,"column":6},"end":{"line":127,"column":32}},"24":{"start":{"line":128,"column":11},"end":{"line":132,"column":5}},"25":{"start":{"line":129,"column":6},"end":{"line":129,"column":34}},"26":{"start":{"line":131,"column":6},"end":{"line":131,"column":28}},"27":{"start":{"line":134,"column":2},"end":{"line":134,"column":21}},"28":{"start":{"line":137,"column":0},"end":{"line":137,"column":34}},"29":{"start":{"line":138,"column":0},"end":{"line":138,"column":40}}},"fnMap":{"0":{"name":"getRegistry","decl":{"start":{"line":96,"column":9},"end":{"line":96,"column":20}},"loc":{"start":{"line":96,"column":23},"end":{"line":110,"column":1}},"line":96},"1":{"name":"(anonymous_1)","decl":{"start":{"line":104,"column":23},"end":{"line":104,"column":24}},"loc":{"start":{"line":104,"column":35},"end":{"line":108,"column":3}},"line":104},"2":{"name":"getElementType","decl":{"start":{"line":112,"column":9},"end":{"line":112,"column":23}},"loc":{"start":{"line":112,"column":31},"end":{"line":135,"column":1}},"line":112}},"branchMap":{"0":{"loc":{"start":{"line":97,"column":2},"end":{"line":99,"column":3}},"type":"if","locations":[{"start":{"line":97,"column":2},"end":{"line":99,"column":3}},{"start":{"line":97,"column":2},"end":{"line":99,"column":3}}],"line":97},"1":{"loc":{"start":{"line":116,"column":2},"end":{"line":133,"column":3}},"type":"if","locations":[{"start":{"line":116,"column":2},"end":{"line":133,"column":3}},{"start":{"line":116,"column":2},"end":{"line":133,"column":3}}],"line":116},"2":{"loc":{"start":{"line":122,"column":4},"end":{"line":132,"column":5}},"type":"if","locations":[{"start":{"line":122,"column":4},"end":{"line":132,"column":5}},{"start":{"line":122,"column":4},"end":{"line":132,"column":5}}],"line":122},"3":{"loc":{"start":{"line":124,"column":11},"end":{"line":132,"column":5}},"type":"if","locations":[{"start":{"line":124,"column":11},"end":{"line":132,"column":5}},{"start":{"line":124,"column":11},"end":{"line":132,"column":5}}],"line":124},"4":{"loc":{"start":{"line":126,"column":11},"end":{"line":132,"column":5}},"type":"if","locations":[{"start":{"line":126,"column":11},"end":{"line":132,"column":5}},{"start":{"line":126,"column":11},"end":{"line":132,"column":5}}],"line":126},"5":{"loc":{"start":{"line":128,"column":11},"end":{"line":132,"column":5}},"type":"if","locations":[{"start":{"line":128,"column":11},"end":{"line":132,"column":5}},{"start":{"line":128,"column":11},"end":{"line":132,"column":5}}],"line":128}},"s":{"0":1,"1":1,"2":65849,"3":65848,"4":1,"5":1,"6":47,"7":47,"8":47,"9":1,"10":65849,"11":65849,"12":65849,"13":25124,"14":25124,"15":25124,"16":25124,"17":25124,"18":25124,"19":2,"20":25122,"21":24502,"22":620,"23":534,"24":86,"25":62,"26":24,"27":65849,"28":1,"29":1},"f":{"0":65849,"1":47,"2":65849},"b":{"0":[65848,1],"1":[25124,40725],"2":[2,25122],"3":[24502,620],"4":[534,86],"5":[62,24]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"ae23638a35d7d6b6a69331598f9e12e5d19be660","contentHash":"db15d678fb6277cf44ecabe303835787c6c2dad28578bf1060e93875549e7f0a"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd.js","statementMap":{"0":{"start":{"line":8,"column":13},"end":{"line":8,"column":32}},"1":{"start":{"line":12,"column":2},"end":{"line":12,"column":40}},"2":{"start":{"line":12,"column":20},"end":{"line":12,"column":40}},"3":{"start":{"line":13,"column":2},"end":{"line":13,"column":20}},"4":{"start":{"line":14,"column":19},"end":{"line":14,"column":46}},"5":{"start":{"line":15,"column":2},"end":{"line":21,"column":3}},"6":{"start":{"line":16,"column":15},"end":{"line":17,"column":56}},"7":{"start":{"line":18,"column":4},"end":{"line":18,"column":49}},"8":{"start":{"line":19,"column":4},"end":{"line":19,"column":40}},"9":{"start":{"line":20,"column":4},"end":{"line":20,"column":27}},"10":{"start":{"line":22,"column":2},"end":{"line":22,"column":22}},"11":{"start":{"line":25,"column":0},"end":{"line":25,"column":42}},"12":{"start":{"line":27,"column":0},"end":{"line":29,"column":2}},"13":{"start":{"line":28,"column":2},"end":{"line":28,"column":33}},"14":{"start":{"line":33,"column":19},"end":{"line":33,"column":46}}},"fnMap":{"0":{"name":"getBuiltinTypes","decl":{"start":{"line":11,"column":9},"end":{"line":11,"column":24}},"loc":{"start":{"line":11,"column":27},"end":{"line":23,"column":1}},"line":11},"1":{"name":"(anonymous_1)","decl":{"start":{"line":27,"column":25},"end":{"line":27,"column":26}},"loc":{"start":{"line":27,"column":40},"end":{"line":29,"column":1}},"line":27},"2":{"name":"parse","decl":{"start":{"line":32,"column":9},"end":{"line":32,"column":14}},"loc":{"start":{"line":32,"column":28},"end":{"line":34,"column":1}},"line":32}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":2},"end":{"line":12,"column":40}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":12,"column":40}},{"start":{"line":12,"column":2},"end":{"line":12,"column":40}}],"line":12}},"s":{"0":1,"1":5559,"2":5558,"3":1,"4":1,"5":1,"6":44,"7":44,"8":44,"9":44,"10":1,"11":1,"12":1,"13":5559,"14":0},"f":{"0":5559,"1":5559,"2":0},"b":{"0":[5558,1]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"f189c9c15e8ee96caee060aa02a6b2b3aaf8085c","contentHash":"0ec4368e9dcc9ee3a65bbdd06fc286fa1dd2d08932f4a4b86286926c30934372"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/simpleType.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/simpleType.js","statementMap":{"0":{"start":{"line":8,"column":17},"end":{"line":8,"column":40}},"1":{"start":{"line":9,"column":17},"end":{"line":9,"column":40}},"2":{"start":{"line":10,"column":13},"end":{"line":10,"column":33}},"3":{"start":{"line":11,"column":10},"end":{"line":11,"column":27}},"4":{"start":{"line":15,"column":4},"end":{"line":15,"column":34}},"5":{"start":{"line":19,"column":4},"end":{"line":19,"column":29}},"6":{"start":{"line":23,"column":21},"end":{"line":23,"column":70}},"7":{"start":{"line":24,"column":4},"end":{"line":24,"column":46}},"8":{"start":{"line":25,"column":4},"end":{"line":25,"column":34}},"9":{"start":{"line":26,"column":4},"end":{"line":26,"column":31}},"10":{"start":{"line":27,"column":4},"end":{"line":27,"column":22}},"11":{"start":{"line":31,"column":4},"end":{"line":31,"column":40}},"12":{"start":{"line":31,"column":33},"end":{"line":31,"column":40}},"13":{"start":{"line":32,"column":4},"end":{"line":32,"column":23}},"14":{"start":{"line":33,"column":4},"end":{"line":36,"column":5}},"15":{"start":{"line":34,"column":6},"end":{"line":34,"column":56}},"16":{"start":{"line":35,"column":6},"end":{"line":35,"column":13}},"17":{"start":{"line":37,"column":4},"end":{"line":60,"column":5}},"18":{"start":{"line":38,"column":6},"end":{"line":38,"column":48}},"19":{"start":{"line":39,"column":6},"end":{"line":42,"column":7}},"20":{"start":{"line":41,"column":8},"end":{"line":41,"column":47}},"21":{"start":{"line":43,"column":11},"end":{"line":60,"column":5}},"22":{"start":{"line":44,"column":6},"end":{"line":44,"column":41}},"23":{"start":{"line":45,"column":6},"end":{"line":48,"column":7}},"24":{"start":{"line":46,"column":8},"end":{"line":46,"column":52}},"25":{"start":{"line":47,"column":8},"end":{"line":47,"column":46}},"26":{"start":{"line":49,"column":11},"end":{"line":60,"column":5}},"27":{"start":{"line":50,"column":24},"end":{"line":50,"column":26}},"28":{"start":{"line":51,"column":6},"end":{"line":51,"column":31}},"29":{"start":{"line":52,"column":6},"end":{"line":52,"column":42}},"30":{"start":{"line":53,"column":6},"end":{"line":59,"column":7}},"31":{"start":{"line":54,"column":8},"end":{"line":57,"column":11}},"32":{"start":{"line":55,"column":10},"end":{"line":55,"column":37}},"33":{"start":{"line":56,"column":10},"end":{"line":56,"column":35}},"34":{"start":{"line":58,"column":8},"end":{"line":58,"column":32}},"35":{"start":{"line":64,"column":0},"end":{"line":64,"column":38}},"36":{"start":{"line":65,"column":0},"end":{"line":65,"column":76}},"37":{"start":{"line":67,"column":0},"end":{"line":67,"column":28}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":2},"end":{"line":14,"column":3}},"loc":{"start":{"line":14,"column":38},"end":{"line":16,"column":3}},"line":14},"1":{"name":"(anonymous_1)","decl":{"start":{"line":18,"column":2},"end":{"line":18,"column":3}},"loc":{"start":{"line":18,"column":18},"end":{"line":20,"column":3}},"line":18},"2":{"name":"(anonymous_2)","decl":{"start":{"line":22,"column":2},"end":{"line":22,"column":3}},"loc":{"start":{"line":22,"column":24},"end":{"line":28,"column":3}},"line":22},"3":{"name":"(anonymous_3)","decl":{"start":{"line":30,"column":2},"end":{"line":30,"column":3}},"loc":{"start":{"line":30,"column":27},"end":{"line":61,"column":3}},"line":30},"4":{"name":"(anonymous_4)","decl":{"start":{"line":54,"column":39},"end":{"line":54,"column":40}},"loc":{"start":{"line":54,"column":51},"end":{"line":57,"column":9}},"line":54}},"branchMap":{"0":{"loc":{"start":{"line":24,"column":22},"end":{"line":24,"column":45}},"type":"binary-expr","locations":[{"start":{"line":24,"column":22},"end":{"line":24,"column":32}},{"start":{"line":24,"column":36},"end":{"line":24,"column":45}}],"line":24},"1":{"loc":{"start":{"line":31,"column":4},"end":{"line":31,"column":40}},"type":"if","locations":[{"start":{"line":31,"column":4},"end":{"line":31,"column":40}},{"start":{"line":31,"column":4},"end":{"line":31,"column":40}}],"line":31},"2":{"loc":{"start":{"line":33,"column":4},"end":{"line":36,"column":5}},"type":"if","locations":[{"start":{"line":33,"column":4},"end":{"line":36,"column":5}},{"start":{"line":33,"column":4},"end":{"line":36,"column":5}}],"line":33},"3":{"loc":{"start":{"line":37,"column":4},"end":{"line":60,"column":5}},"type":"if","locations":[{"start":{"line":37,"column":4},"end":{"line":60,"column":5}},{"start":{"line":37,"column":4},"end":{"line":60,"column":5}}],"line":37},"4":{"loc":{"start":{"line":39,"column":6},"end":{"line":42,"column":7}},"type":"if","locations":[{"start":{"line":39,"column":6},"end":{"line":42,"column":7}},{"start":{"line":39,"column":6},"end":{"line":42,"column":7}}],"line":39},"5":{"loc":{"start":{"line":43,"column":11},"end":{"line":60,"column":5}},"type":"if","locations":[{"start":{"line":43,"column":11},"end":{"line":60,"column":5}},{"start":{"line":43,"column":11},"end":{"line":60,"column":5}}],"line":43},"6":{"loc":{"start":{"line":45,"column":6},"end":{"line":48,"column":7}},"type":"if","locations":[{"start":{"line":45,"column":6},"end":{"line":48,"column":7}},{"start":{"line":45,"column":6},"end":{"line":48,"column":7}}],"line":45},"7":{"loc":{"start":{"line":49,"column":11},"end":{"line":60,"column":5}},"type":"if","locations":[{"start":{"line":49,"column":11},"end":{"line":60,"column":5}},{"start":{"line":49,"column":11},"end":{"line":60,"column":5}}],"line":49},"8":{"loc":{"start":{"line":53,"column":6},"end":{"line":59,"column":7}},"type":"if","locations":[{"start":{"line":53,"column":6},"end":{"line":59,"column":7}},{"start":{"line":53,"column":6},"end":{"line":59,"column":7}}],"line":53}},"s":{"0":1,"1":1,"2":1,"3":1,"4":557,"5":513,"6":25,"7":25,"8":25,"9":25,"10":25,"11":1025,"12":506,"13":519,"14":519,"15":6,"16":6,"17":513,"18":512,"19":512,"20":512,"21":1,"22":0,"23":0,"24":0,"25":0,"26":1,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":1,"36":1,"37":1},"f":{"0":557,"1":513,"2":25,"3":1025,"4":0},"b":{"0":[25,0],"1":[506,519],"2":[6,513],"3":[512,1],"4":[512,0],"5":[0,1],"6":[0,0],"7":[0,1],"8":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"0997ee2092fdce334ffe03ba86517a7446940686","contentHash":"7df8f35f2fe32d19fc85ed454ef15f1a33b8b596bd33484b33b8b53413b5a880"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/xsdElement.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/xsdElement.js","statementMap":{"0":{"start":{"line":8,"column":14},"end":{"line":8,"column":35}},"1":{"start":{"line":9,"column":13},"end":{"line":9,"column":33}},"2":{"start":{"line":10,"column":17},"end":{"line":10,"column":40}},"3":{"start":{"line":14,"column":4},"end":{"line":14,"column":34}},"4":{"start":{"line":18,"column":19},"end":{"line":18,"column":38}},"5":{"start":{"line":19,"column":4},"end":{"line":19,"column":49}},"6":{"start":{"line":19,"column":31},"end":{"line":19,"column":49}},"7":{"start":{"line":20,"column":4},"end":{"line":20,"column":63}},"8":{"start":{"line":22,"column":17},"end":{"line":22,"column":30}},"9":{"start":{"line":24,"column":4},"end":{"line":29,"column":5}},"10":{"start":{"line":24,"column":17},"end":{"line":24,"column":18}},"11":{"start":{"line":25,"column":6},"end":{"line":25,"column":52}},"12":{"start":{"line":26,"column":6},"end":{"line":28,"column":7}},"13":{"start":{"line":27,"column":8},"end":{"line":27,"column":48}},"14":{"start":{"line":30,"column":4},"end":{"line":30,"column":22}},"15":{"start":{"line":34,"column":4},"end":{"line":34,"column":46}},"16":{"start":{"line":46,"column":4},"end":{"line":46,"column":53}},"17":{"start":{"line":46,"column":41},"end":{"line":46,"column":53}},"18":{"start":{"line":47,"column":4},"end":{"line":47,"column":39}},"19":{"start":{"line":51,"column":0},"end":{"line":51,"column":52}},"20":{"start":{"line":52,"column":0},"end":{"line":52,"column":44}},"21":{"start":{"line":55,"column":0},"end":{"line":55,"column":60}},"22":{"start":{"line":56,"column":0},"end":{"line":56,"column":64}},"23":{"start":{"line":57,"column":0},"end":{"line":57,"column":54}},"24":{"start":{"line":59,"column":0},"end":{"line":59,"column":28}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":13,"column":2},"end":{"line":13,"column":3}},"loc":{"start":{"line":13,"column":38},"end":{"line":15,"column":3}},"line":13},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":2},"end":{"line":17,"column":3}},"loc":{"start":{"line":17,"column":44},"end":{"line":31,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":33,"column":2},"end":{"line":33,"column":3}},"loc":{"start":{"line":33,"column":24},"end":{"line":35,"column":3}},"line":33},"3":{"name":"(anonymous_3)","decl":{"start":{"line":37,"column":2},"end":{"line":37,"column":3}},"loc":{"start":{"line":37,"column":27},"end":{"line":39,"column":3}},"line":37},"4":{"name":"(anonymous_4)","decl":{"start":{"line":45,"column":2},"end":{"line":45,"column":3}},"loc":{"start":{"line":45,"column":11},"end":{"line":48,"column":3}},"line":45}},"branchMap":{"0":{"loc":{"start":{"line":18,"column":19},"end":{"line":18,"column":38}},"type":"binary-expr","locations":[{"start":{"line":18,"column":19},"end":{"line":18,"column":32}},{"start":{"line":18,"column":36},"end":{"line":18,"column":38}}],"line":18},"1":{"loc":{"start":{"line":19,"column":4},"end":{"line":19,"column":49}},"type":"if","locations":[{"start":{"line":19,"column":4},"end":{"line":19,"column":49}},{"start":{"line":19,"column":4},"end":{"line":19,"column":49}}],"line":19},"2":{"loc":{"start":{"line":20,"column":17},"end":{"line":20,"column":62}},"type":"binary-expr","locations":[{"start":{"line":20,"column":17},"end":{"line":20,"column":27}},{"start":{"line":20,"column":31},"end":{"line":20,"column":62}}],"line":20},"3":{"loc":{"start":{"line":26,"column":6},"end":{"line":28,"column":7}},"type":"if","locations":[{"start":{"line":26,"column":6},"end":{"line":28,"column":7}},{"start":{"line":26,"column":6},"end":{"line":28,"column":7}}],"line":26},"4":{"loc":{"start":{"line":46,"column":4},"end":{"line":46,"column":53}},"type":"if","locations":[{"start":{"line":46,"column":4},"end":{"line":46,"column":53}},{"start":{"line":46,"column":4},"end":{"line":46,"column":53}}],"line":46}},"s":{"0":1,"1":1,"2":1,"3":61612,"4":3090,"5":3090,"6":48,"7":3042,"8":3042,"9":3042,"10":3042,"11":26792,"12":26792,"13":26776,"14":3042,"15":2372,"16":29877,"17":10371,"18":19506,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1},"f":{"0":61612,"1":3090,"2":2372,"3":31271,"4":29877},"b":{"0":[3090,0],"1":[48,3042],"2":[3042,2325],"3":[26776,16],"4":[10371,19506]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"e13e08236b47c41a25ff2900fb7997f16c0a4207","contentHash":"ac6a2ddeedc35bf4a96044d6c153f3fec243ea693b0855fc58462ecadf5f5a21"},"/Users/rfeng/Projects/loopback3/strong-soap/src/soapModel.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/soapModel.js","statementMap":{"0":{"start":{"line":8,"column":13},"end":{"line":8,"column":30}},"1":{"start":{"line":9,"column":12},"end":{"line":9,"column":37}},"2":{"start":{"line":16,"column":4},"end":{"line":22,"column":5}},"3":{"start":{"line":17,"column":6},"end":{"line":17,"column":23}},"4":{"start":{"line":19,"column":6},"end":{"line":19,"column":25}},"5":{"start":{"line":20,"column":6},"end":{"line":20,"column":25}},"6":{"start":{"line":21,"column":6},"end":{"line":21,"column":35}},"7":{"start":{"line":32,"column":4},"end":{"line":32,"column":39}},"8":{"start":{"line":33,"column":4},"end":{"line":33,"column":31}},"9":{"start":{"line":34,"column":4},"end":{"line":34,"column":23}},"10":{"start":{"line":38,"column":16},"end":{"line":38,"column":60}},"11":{"start":{"line":39,"column":4},"end":{"line":44,"column":5}},"12":{"start":{"line":40,"column":17},"end":{"line":40,"column":58}},"13":{"start":{"line":41,"column":6},"end":{"line":41,"column":41}},"14":{"start":{"line":43,"column":6},"end":{"line":43,"column":70}},"15":{"start":{"line":48,"column":0},"end":{"line":48,"column":34}},"16":{"start":{"line":49,"column":0},"end":{"line":49,"column":38}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":15,"column":2},"end":{"line":15,"column":3}},"loc":{"start":{"line":15,"column":37},"end":{"line":23,"column":3}},"line":15},"1":{"name":"(anonymous_1)","decl":{"start":{"line":31,"column":2},"end":{"line":31,"column":3}},"loc":{"start":{"line":31,"column":28},"end":{"line":35,"column":3}},"line":31},"2":{"name":"(anonymous_2)","decl":{"start":{"line":37,"column":2},"end":{"line":37,"column":3}},"loc":{"start":{"line":37,"column":39},"end":{"line":45,"column":3}},"line":37}},"branchMap":{"0":{"loc":{"start":{"line":16,"column":4},"end":{"line":22,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":22,"column":5}},{"start":{"line":16,"column":4},"end":{"line":22,"column":5}}],"line":16},"1":{"loc":{"start":{"line":16,"column":8},"end":{"line":16,"column":43}},"type":"binary-expr","locations":[{"start":{"line":16,"column":8},"end":{"line":16,"column":33}},{"start":{"line":16,"column":37},"end":{"line":16,"column":43}}],"line":16},"2":{"loc":{"start":{"line":21,"column":21},"end":{"line":21,"column":34}},"type":"binary-expr","locations":[{"start":{"line":21,"column":21},"end":{"line":21,"column":28}},{"start":{"line":21,"column":32},"end":{"line":21,"column":34}}],"line":21},"3":{"loc":{"start":{"line":39,"column":4},"end":{"line":44,"column":5}},"type":"if","locations":[{"start":{"line":39,"column":4},"end":{"line":44,"column":5}},{"start":{"line":39,"column":4},"end":{"line":44,"column":5}}],"line":39}},"s":{"0":1,"1":1,"2":22,"3":17,"4":5,"5":5,"6":5,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":1,"16":1},"f":{"0":22,"1":0,"2":0},"b":{"0":[17,5],"1":[22,17],"2":[5,5],"3":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"e6f290c34823b209e2bc1bd5a55b04926f916b78","contentHash":"e737895a32f8907db3f1147eaec881c2837fac33a7643c66718088b31bce13f0"},"/Users/rfeng/Projects/loopback3/strong-soap/src/base.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/base.js","statementMap":{"0":{"start":{"line":8,"column":19},"end":{"line":8,"column":49}},"1":{"start":{"line":9,"column":23},"end":{"line":9,"column":52}},"2":{"start":{"line":10,"column":18},"end":{"line":10,"column":52}},"3":{"start":{"line":11,"column":17},"end":{"line":11,"column":38}},"4":{"start":{"line":12,"column":17},"end":{"line":12,"column":47}},"5":{"start":{"line":16,"column":4},"end":{"line":16,"column":12}},"6":{"start":{"line":17,"column":4},"end":{"line":17,"column":21}},"7":{"start":{"line":18,"column":4},"end":{"line":18,"column":37}},"8":{"start":{"line":19,"column":4},"end":{"line":19,"column":26}},"9":{"start":{"line":20,"column":4},"end":{"line":20,"column":26}},"10":{"start":{"line":21,"column":4},"end":{"line":21,"column":29}},"11":{"start":{"line":25,"column":17},"end":{"line":25,"column":52}},"12":{"start":{"line":26,"column":4},"end":{"line":26,"column":45}},"13":{"start":{"line":30,"column":17},"end":{"line":30,"column":52}},"14":{"start":{"line":31,"column":4},"end":{"line":31,"column":37}},"15":{"start":{"line":36,"column":4},"end":{"line":36,"column":28}},"16":{"start":{"line":40,"column":4},"end":{"line":40,"column":26}},"17":{"start":{"line":44,"column":4},"end":{"line":44,"column":43}},"18":{"start":{"line":48,"column":14},"end":{"line":48,"column":36}},"19":{"start":{"line":49,"column":4},"end":{"line":53,"column":5}},"20":{"start":{"line":50,"column":6},"end":{"line":50,"column":50}},"21":{"start":{"line":52,"column":6},"end":{"line":52,"column":45}},"22":{"start":{"line":57,"column":4},"end":{"line":57,"column":28}},"23":{"start":{"line":61,"column":4},"end":{"line":61,"column":26}},"24":{"start":{"line":65,"column":4},"end":{"line":65,"column":28}},"25":{"start":{"line":66,"column":4},"end":{"line":66,"column":76}},"26":{"start":{"line":67,"column":4},"end":{"line":67,"column":66}},"27":{"start":{"line":68,"column":4},"end":{"line":68,"column":66}},"28":{"start":{"line":72,"column":4},"end":{"line":72,"column":30}},"29":{"start":{"line":73,"column":4},"end":{"line":73,"column":65}},"30":{"start":{"line":74,"column":14},"end":{"line":75,"column":60}},"31":{"start":{"line":76,"column":4},"end":{"line":76,"column":44}},"32":{"start":{"line":77,"column":17},"end":{"line":77,"column":48}},"33":{"start":{"line":78,"column":15},"end":{"line":78,"column":44}},"34":{"start":{"line":79,"column":4},"end":{"line":83,"column":6}},"35":{"start":{"line":87,"column":18},"end":{"line":87,"column":47}},"36":{"start":{"line":88,"column":17},"end":{"line":88,"column":31}},"37":{"start":{"line":89,"column":4},"end":{"line":89,"column":43}},"38":{"start":{"line":93,"column":20},"end":{"line":93,"column":42}},"39":{"start":{"line":94,"column":4},"end":{"line":94,"column":56}},"40":{"start":{"line":96,"column":21},"end":{"line":96,"column":54}},"41":{"start":{"line":97,"column":4},"end":{"line":117,"column":5}},"42":{"start":{"line":98,"column":6},"end":{"line":99,"column":17}},"43":{"start":{"line":99,"column":8},"end":{"line":99,"column":17}},"44":{"start":{"line":100,"column":18},"end":{"line":100,"column":36}},"45":{"start":{"line":101,"column":6},"end":{"line":109,"column":7}},"46":{"start":{"line":108,"column":10},"end":{"line":108,"column":19}},"47":{"start":{"line":110,"column":6},"end":{"line":111,"column":17}},"48":{"start":{"line":111,"column":8},"end":{"line":111,"column":17}},"49":{"start":{"line":112,"column":6},"end":{"line":113,"column":17}},"50":{"start":{"line":113,"column":8},"end":{"line":113,"column":17}},"51":{"start":{"line":114,"column":6},"end":{"line":115,"column":17}},"52":{"start":{"line":115,"column":8},"end":{"line":115,"column":17}},"53":{"start":{"line":116,"column":6},"end":{"line":116,"column":44}},"54":{"start":{"line":118,"column":4},"end":{"line":118,"column":21}},"55":{"start":{"line":122,"column":4},"end":{"line":136,"column":5}},"56":{"start":{"line":122,"column":17},"end":{"line":122,"column":18}},"57":{"start":{"line":122,"column":24},"end":{"line":122,"column":47}},"58":{"start":{"line":123,"column":23},"end":{"line":123,"column":42}},"59":{"start":{"line":125,"column":6},"end":{"line":135,"column":7}},"60":{"start":{"line":126,"column":8},"end":{"line":130,"column":9}},"61":{"start":{"line":127,"column":26},"end":{"line":127,"column":89}},"62":{"start":{"line":128,"column":12},"end":{"line":129,"column":65}},"63":{"start":{"line":131,"column":8},"end":{"line":132,"column":28}},"64":{"start":{"line":134,"column":8},"end":{"line":134,"column":63}},"65":{"start":{"line":141,"column":0},"end":{"line":141,"column":22}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":15,"column":2},"end":{"line":15,"column":3}},"loc":{"start":{"line":15,"column":29},"end":{"line":22,"column":3}},"line":15},"1":{"name":"(anonymous_1)","decl":{"start":{"line":24,"column":2},"end":{"line":24,"column":3}},"loc":{"start":{"line":24,"column":30},"end":{"line":27,"column":3}},"line":24},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":2},"end":{"line":29,"column":3}},"loc":{"start":{"line":29,"column":40},"end":{"line":32,"column":3}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":35,"column":2},"end":{"line":35,"column":3}},"loc":{"start":{"line":35,"column":19},"end":{"line":37,"column":3}},"line":35},"4":{"name":"(anonymous_4)","decl":{"start":{"line":39,"column":2},"end":{"line":39,"column":3}},"loc":{"start":{"line":39,"column":21},"end":{"line":41,"column":3}},"line":39},"5":{"name":"(anonymous_5)","decl":{"start":{"line":43,"column":2},"end":{"line":43,"column":3}},"loc":{"start":{"line":43,"column":29},"end":{"line":45,"column":3}},"line":43},"6":{"name":"(anonymous_6)","decl":{"start":{"line":47,"column":2},"end":{"line":47,"column":3}},"loc":{"start":{"line":47,"column":29},"end":{"line":54,"column":3}},"line":47},"7":{"name":"(anonymous_7)","decl":{"start":{"line":56,"column":2},"end":{"line":56,"column":3}},"loc":{"start":{"line":56,"column":19},"end":{"line":58,"column":3}},"line":56},"8":{"name":"(anonymous_8)","decl":{"start":{"line":60,"column":2},"end":{"line":60,"column":3}},"loc":{"start":{"line":60,"column":21},"end":{"line":62,"column":3}},"line":60},"9":{"name":"(anonymous_9)","decl":{"start":{"line":64,"column":2},"end":{"line":64,"column":3}},"loc":{"start":{"line":64,"column":30},"end":{"line":69,"column":3}},"line":64},"10":{"name":"(anonymous_10)","decl":{"start":{"line":71,"column":2},"end":{"line":71,"column":3}},"loc":{"start":{"line":71,"column":43},"end":{"line":84,"column":3}},"line":71},"11":{"name":"(anonymous_11)","decl":{"start":{"line":86,"column":2},"end":{"line":86,"column":3}},"loc":{"start":{"line":86,"column":27},"end":{"line":90,"column":3}},"line":86},"12":{"name":"(anonymous_12)","decl":{"start":{"line":92,"column":2},"end":{"line":92,"column":3}},"loc":{"start":{"line":92,"column":50},"end":{"line":119,"column":3}},"line":92},"13":{"name":"(anonymous_13)","decl":{"start":{"line":121,"column":2},"end":{"line":121,"column":3}},"loc":{"start":{"line":121,"column":58},"end":{"line":137,"column":3}},"line":121}},"branchMap":{"0":{"loc":{"start":{"line":49,"column":4},"end":{"line":53,"column":5}},"type":"if","locations":[{"start":{"line":49,"column":4},"end":{"line":53,"column":5}},{"start":{"line":49,"column":4},"end":{"line":53,"column":5}}],"line":49},"1":{"loc":{"start":{"line":65,"column":14},"end":{"line":65,"column":27}},"type":"binary-expr","locations":[{"start":{"line":65,"column":14},"end":{"line":65,"column":21}},{"start":{"line":65,"column":25},"end":{"line":65,"column":27}}],"line":65},"2":{"loc":{"start":{"line":66,"column":38},"end":{"line":66,"column":75}},"type":"binary-expr","locations":[{"start":{"line":66,"column":38},"end":{"line":66,"column":59}},{"start":{"line":66,"column":63},"end":{"line":66,"column":75}}],"line":66},"3":{"loc":{"start":{"line":67,"column":36},"end":{"line":67,"column":65}},"type":"binary-expr","locations":[{"start":{"line":67,"column":36},"end":{"line":67,"column":55}},{"start":{"line":67,"column":59},"end":{"line":67,"column":65}}],"line":67},"4":{"loc":{"start":{"line":72,"column":13},"end":{"line":72,"column":29}},"type":"binary-expr","locations":[{"start":{"line":72,"column":13},"end":{"line":72,"column":19}},{"start":{"line":72,"column":23},"end":{"line":72,"column":29}}],"line":72},"5":{"loc":{"start":{"line":73,"column":12},"end":{"line":73,"column":64}},"type":"binary-expr","locations":[{"start":{"line":73,"column":12},"end":{"line":73,"column":17}},{"start":{"line":73,"column":21},"end":{"line":73,"column":64}}],"line":73},"6":{"loc":{"start":{"line":89,"column":11},"end":{"line":89,"column":42}},"type":"binary-expr","locations":[{"start":{"line":89,"column":11},"end":{"line":89,"column":17}},{"start":{"line":89,"column":21},"end":{"line":89,"column":42}}],"line":89},"7":{"loc":{"start":{"line":96,"column":21},"end":{"line":96,"column":54}},"type":"binary-expr","locations":[{"start":{"line":96,"column":21},"end":{"line":96,"column":48}},{"start":{"line":96,"column":52},"end":{"line":96,"column":54}}],"line":96},"8":{"loc":{"start":{"line":98,"column":6},"end":{"line":99,"column":17}},"type":"if","locations":[{"start":{"line":98,"column":6},"end":{"line":99,"column":17}},{"start":{"line":98,"column":6},"end":{"line":99,"column":17}}],"line":98},"9":{"loc":{"start":{"line":101,"column":6},"end":{"line":109,"column":7}},"type":"switch","locations":[{"start":{"line":102,"column":8},"end":{"line":102,"column":47}},{"start":{"line":103,"column":8},"end":{"line":103,"column":49}},{"start":{"line":104,"column":8},"end":{"line":104,"column":54}},{"start":{"line":105,"column":8},"end":{"line":105,"column":55}},{"start":{"line":106,"column":8},"end":{"line":106,"column":58}},{"start":{"line":107,"column":8},"end":{"line":108,"column":19}}],"line":101},"10":{"loc":{"start":{"line":110,"column":6},"end":{"line":111,"column":17}},"type":"if","locations":[{"start":{"line":110,"column":6},"end":{"line":111,"column":17}},{"start":{"line":110,"column":6},"end":{"line":111,"column":17}}],"line":110},"11":{"loc":{"start":{"line":112,"column":6},"end":{"line":113,"column":17}},"type":"if","locations":[{"start":{"line":112,"column":6},"end":{"line":113,"column":17}},{"start":{"line":112,"column":6},"end":{"line":113,"column":17}}],"line":112},"12":{"loc":{"start":{"line":114,"column":6},"end":{"line":115,"column":17}},"type":"if","locations":[{"start":{"line":114,"column":6},"end":{"line":115,"column":17}},{"start":{"line":114,"column":6},"end":{"line":115,"column":17}}],"line":114},"13":{"loc":{"start":{"line":125,"column":6},"end":{"line":135,"column":7}},"type":"if","locations":[{"start":{"line":125,"column":6},"end":{"line":135,"column":7}},{"start":{"line":125,"column":6},"end":{"line":135,"column":7}}],"line":125},"14":{"loc":{"start":{"line":126,"column":8},"end":{"line":130,"column":9}},"type":"if","locations":[{"start":{"line":126,"column":8},"end":{"line":130,"column":9}},{"start":{"line":126,"column":8},"end":{"line":130,"column":9}}],"line":126},"15":{"loc":{"start":{"line":126,"column":12},"end":{"line":126,"column":54}},"type":"binary-expr","locations":[{"start":{"line":126,"column":12},"end":{"line":126,"column":28}},{"start":{"line":126,"column":32},"end":{"line":126,"column":54}}],"line":126},"16":{"loc":{"start":{"line":129,"column":14},"end":{"line":129,"column":64}},"type":"binary-expr","locations":[{"start":{"line":129,"column":14},"end":{"line":129,"column":21}},{"start":{"line":129,"column":25},"end":{"line":129,"column":64}}],"line":129}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":228,"6":228,"7":228,"8":228,"9":228,"10":228,"11":15,"12":15,"13":7,"14":7,"15":17,"16":3,"17":0,"18":1,"19":1,"20":0,"21":1,"22":4,"23":1,"24":228,"25":228,"26":228,"27":228,"28":144,"29":144,"30":144,"31":144,"32":144,"33":144,"34":144,"35":2,"36":2,"37":2,"38":170,"39":170,"40":170,"41":170,"42":965,"43":77,"44":888,"45":888,"46":551,"47":337,"48":69,"49":268,"50":5,"51":263,"52":0,"53":263,"54":170,"55":170,"56":170,"57":170,"58":10,"59":10,"60":5,"61":2,"62":2,"63":5,"64":5,"65":1},"f":{"0":228,"1":15,"2":7,"3":17,"4":3,"5":0,"6":1,"7":4,"8":1,"9":228,"10":144,"11":2,"12":170,"13":170},"b":{"0":[0,1],"1":[228,0],"2":[228,227],"3":[228,227],"4":[144,0],"5":[144,0],"6":[2,2],"7":[170,0],"8":[77,888],"9":[0,154,312,330,380,551],"10":[69,268],"11":[5,263],"12":[0,263],"13":[5,5],"14":[2,3],"15":[5,4],"16":[2,1]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"3e2b8311aad09341e06aa716556da882b34a049d","contentHash":"67ba32394e573735edca07f674e02098ac33087055cf2bc9b7f8999b1a7d4c5d"},"/Users/rfeng/Projects/loopback3/strong-soap/src/server.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/server.js","statementMap":{"0":{"start":{"line":8,"column":8},"end":{"line":8,"column":30}},"1":{"start":{"line":9,"column":10},"end":{"line":9,"column":24}},"2":{"start":{"line":10,"column":13},"end":{"line":10,"column":17}},"3":{"start":{"line":11,"column":11},"end":{"line":11,"column":28}},"4":{"start":{"line":12,"column":15},"end":{"line":12,"column":45}},"5":{"start":{"line":13,"column":9},"end":{"line":13,"column":26}},"6":{"start":{"line":14,"column":14},"end":{"line":14,"column":42}},"7":{"start":{"line":15,"column":9},"end":{"line":15,"column":24}},"8":{"start":{"line":16,"column":10},"end":{"line":16,"column":48}},"9":{"start":{"line":17,"column":16},"end":{"line":17,"column":61}},"10":{"start":{"line":19,"column":0},"end":{"line":23,"column":1}},"11":{"start":{"line":20,"column":2},"end":{"line":20,"column":33}},"12":{"start":{"line":28,"column":4},"end":{"line":28,"column":25}},"13":{"start":{"line":29,"column":15},"end":{"line":29,"column":19}},"14":{"start":{"line":30,"column":4},"end":{"line":30,"column":28}},"15":{"start":{"line":31,"column":4},"end":{"line":31,"column":21}},"16":{"start":{"line":32,"column":4},"end":{"line":32,"column":29}},"17":{"start":{"line":34,"column":4},"end":{"line":34,"column":85}},"18":{"start":{"line":35,"column":4},"end":{"line":36,"column":18}},"19":{"start":{"line":36,"column":6},"end":{"line":36,"column":18}},"20":{"start":{"line":37,"column":4},"end":{"line":61,"column":7}},"21":{"start":{"line":38,"column":6},"end":{"line":38,"column":25}},"22":{"start":{"line":38,"column":15},"end":{"line":38,"column":25}},"23":{"start":{"line":39,"column":6},"end":{"line":39,"column":89}},"24":{"start":{"line":40,"column":22},"end":{"line":40,"column":57}},"25":{"start":{"line":42,"column":6},"end":{"line":42,"column":43}},"26":{"start":{"line":43,"column":6},"end":{"line":60,"column":9}},"27":{"start":{"line":44,"column":8},"end":{"line":49,"column":9}},"28":{"start":{"line":45,"column":10},"end":{"line":48,"column":11}},"29":{"start":{"line":46,"column":12},"end":{"line":46,"column":22}},"30":{"start":{"line":47,"column":12},"end":{"line":47,"column":19}},"31":{"start":{"line":50,"column":22},"end":{"line":50,"column":49}},"32":{"start":{"line":51,"column":8},"end":{"line":52,"column":25}},"33":{"start":{"line":52,"column":10},"end":{"line":52,"column":25}},"34":{"start":{"line":53,"column":8},"end":{"line":59,"column":9}},"35":{"start":{"line":54,"column":10},"end":{"line":54,"column":42}},"36":{"start":{"line":56,"column":10},"end":{"line":58,"column":11}},"37":{"start":{"line":56,"column":23},"end":{"line":56,"column":24}},"38":{"start":{"line":56,"column":32},"end":{"line":56,"column":48}},"39":{"start":{"line":57,"column":12},"end":{"line":57,"column":46}},"40":{"start":{"line":65,"column":15},"end":{"line":65,"column":19}},"41":{"start":{"line":66,"column":19},"end":{"line":66,"column":37}},"42":{"start":{"line":67,"column":18},"end":{"line":67,"column":35}},"43":{"start":{"line":68,"column":19},"end":{"line":68,"column":34}},"44":{"start":{"line":70,"column":4},"end":{"line":72,"column":5}},"45":{"start":{"line":71,"column":6},"end":{"line":71,"column":68}},"46":{"start":{"line":74,"column":4},"end":{"line":131,"column":5}},"47":{"start":{"line":75,"column":6},"end":{"line":81,"column":7}},"48":{"start":{"line":76,"column":8},"end":{"line":78,"column":9}},"49":{"start":{"line":77,"column":10},"end":{"line":77,"column":45}},"50":{"start":{"line":79,"column":8},"end":{"line":79,"column":57}},"51":{"start":{"line":80,"column":8},"end":{"line":80,"column":37}},"52":{"start":{"line":82,"column":6},"end":{"line":82,"column":16}},"53":{"start":{"line":83,"column":11},"end":{"line":131,"column":5}},"54":{"start":{"line":84,"column":6},"end":{"line":84,"column":65}},"55":{"start":{"line":85,"column":19},"end":{"line":85,"column":21}},"56":{"start":{"line":86,"column":6},"end":{"line":89,"column":7}},"57":{"start":{"line":87,"column":8},"end":{"line":87,"column":39}},"58":{"start":{"line":88,"column":8},"end":{"line":88,"column":22}},"59":{"start":{"line":90,"column":6},"end":{"line":94,"column":9}},"60":{"start":{"line":91,"column":8},"end":{"line":92,"column":50}},"61":{"start":{"line":92,"column":10},"end":{"line":92,"column":50}},"62":{"start":{"line":93,"column":8},"end":{"line":93,"column":27}},"63":{"start":{"line":95,"column":6},"end":{"line":127,"column":9}},"64":{"start":{"line":96,"column":18},"end":{"line":96,"column":33}},"65":{"start":{"line":99,"column":8},"end":{"line":102,"column":9}},"66":{"start":{"line":100,"column":10},"end":{"line":100,"column":23}},"67":{"start":{"line":101,"column":10},"end":{"line":101,"column":24}},"68":{"start":{"line":103,"column":8},"end":{"line":126,"column":9}},"69":{"start":{"line":104,"column":10},"end":{"line":106,"column":11}},"70":{"start":{"line":105,"column":12},"end":{"line":105,"column":38}},"71":{"start":{"line":107,"column":10},"end":{"line":116,"column":13}},"72":{"start":{"line":108,"column":12},"end":{"line":110,"column":13}},"73":{"start":{"line":109,"column":14},"end":{"line":109,"column":42}},"74":{"start":{"line":111,"column":12},"end":{"line":111,"column":30}},"75":{"start":{"line":112,"column":12},"end":{"line":112,"column":22}},"76":{"start":{"line":113,"column":12},"end":{"line":115,"column":13}},"77":{"start":{"line":114,"column":14},"end":{"line":114,"column":42}},"78":{"start":{"line":119,"column":10},"end":{"line":119,"column":35}},"79":{"start":{"line":120,"column":10},"end":{"line":120,"column":31}},"80":{"start":{"line":121,"column":10},"end":{"line":121,"column":27}},"81":{"start":{"line":122,"column":10},"end":{"line":122,"column":20}},"82":{"start":{"line":123,"column":10},"end":{"line":125,"column":11}},"83":{"start":{"line":124,"column":12},"end":{"line":124,"column":37}},"84":{"start":{"line":130,"column":6},"end":{"line":130,"column":16}},"85":{"start":{"line":135,"column":15},"end":{"line":135,"column":19}},"86":{"start":{"line":136,"column":17},"end":{"line":136,"column":63}},"87":{"start":{"line":137,"column":12},"end":{"line":137,"column":50}},"88":{"start":{"line":138,"column":13},"end":{"line":138,"column":21}},"89":{"start":{"line":139,"column":16},"end":{"line":139,"column":26}},"90":{"start":{"line":140,"column":17},"end":{"line":140,"column":47}},"91":{"start":{"line":143,"column":25},"end":{"line":144,"column":37}},"92":{"start":{"line":146,"column":4},"end":{"line":153,"column":5}},"93":{"start":{"line":147,"column":6},"end":{"line":149,"column":7}},"94":{"start":{"line":148,"column":8},"end":{"line":148,"column":51}},"95":{"start":{"line":150,"column":6},"end":{"line":152,"column":7}},"96":{"start":{"line":151,"column":8},"end":{"line":151,"column":61}},"97":{"start":{"line":155,"column":4},"end":{"line":157,"column":5}},"98":{"start":{"line":156,"column":6},"end":{"line":156,"column":60}},"99":{"start":{"line":160,"column":4},"end":{"line":187,"column":13}},"100":{"start":{"line":161,"column":21},"end":{"line":161,"column":51}},"101":{"start":{"line":164,"column":6},"end":{"line":185,"column":7}},"102":{"start":{"line":165,"column":8},"end":{"line":165,"column":27}},"103":{"start":{"line":166,"column":22},"end":{"line":166,"column":43}},"104":{"start":{"line":167,"column":20},"end":{"line":167,"column":33}},"105":{"start":{"line":168,"column":8},"end":{"line":184,"column":9}},"106":{"start":{"line":169,"column":10},"end":{"line":169,"column":26}},"107":{"start":{"line":170,"column":21},"end":{"line":170,"column":36}},"108":{"start":{"line":171,"column":29},"end":{"line":171,"column":81}},"109":{"start":{"line":173,"column":10},"end":{"line":175,"column":11}},"110":{"start":{"line":174,"column":12},"end":{"line":174,"column":82}},"111":{"start":{"line":177,"column":10},"end":{"line":178,"column":32}},"112":{"start":{"line":178,"column":12},"end":{"line":178,"column":32}},"113":{"start":{"line":181,"column":10},"end":{"line":183,"column":11}},"114":{"start":{"line":182,"column":12},"end":{"line":182,"column":29}},"115":{"start":{"line":186,"column":6},"end":{"line":186,"column":53}},"116":{"start":{"line":189,"column":4},"end":{"line":191,"column":5}},"117":{"start":{"line":190,"column":6},"end":{"line":190,"column":57}},"118":{"start":{"line":193,"column":4},"end":{"line":255,"column":5}},"119":{"start":{"line":194,"column":6},"end":{"line":248,"column":7}},"120":{"start":{"line":195,"column":8},"end":{"line":195,"column":45}},"121":{"start":{"line":197,"column":8},"end":{"line":197,"column":49}},"122":{"start":{"line":198,"column":8},"end":{"line":199,"column":55}},"123":{"start":{"line":199,"column":10},"end":{"line":199,"column":55}},"124":{"start":{"line":201,"column":8},"end":{"line":209,"column":26}},"125":{"start":{"line":211,"column":31},"end":{"line":212,"column":53}},"126":{"start":{"line":213,"column":19},"end":{"line":213,"column":55}},"127":{"start":{"line":216,"column":25},"end":{"line":216,"column":43}},"128":{"start":{"line":218,"column":8},"end":{"line":232,"column":9}},"129":{"start":{"line":219,"column":27},"end":{"line":219,"column":63}},"130":{"start":{"line":221,"column":28},"end":{"line":221,"column":66}},"131":{"start":{"line":222,"column":10},"end":{"line":231,"column":11}},"132":{"start":{"line":223,"column":12},"end":{"line":223,"column":51}},"133":{"start":{"line":224,"column":12},"end":{"line":229,"column":13}},"134":{"start":{"line":225,"column":28},"end":{"line":225,"column":65}},"135":{"start":{"line":227,"column":33},"end":{"line":227,"column":65}},"136":{"start":{"line":228,"column":14},"end":{"line":228,"column":54}},"137":{"start":{"line":230,"column":12},"end":{"line":230,"column":18}},"138":{"start":{"line":234,"column":8},"end":{"line":234,"column":49}},"139":{"start":{"line":235,"column":8},"end":{"line":236,"column":55}},"140":{"start":{"line":236,"column":10},"end":{"line":236,"column":55}},"141":{"start":{"line":238,"column":8},"end":{"line":247,"column":26}},"142":{"start":{"line":250,"column":6},"end":{"line":252,"column":7}},"143":{"start":{"line":251,"column":8},"end":{"line":251,"column":84}},"144":{"start":{"line":254,"column":6},"end":{"line":254,"column":18}},"145":{"start":{"line":259,"column":4},"end":{"line":259,"column":28}},"146":{"start":{"line":260,"column":15},"end":{"line":260,"column":19}},"147":{"start":{"line":262,"column":20},"end":{"line":262,"column":39}},"148":{"start":{"line":263,"column":17},"end":{"line":263,"column":33}},"149":{"start":{"line":264,"column":22},"end":{"line":264,"column":43}},"150":{"start":{"line":265,"column":19},"end":{"line":265,"column":37}},"151":{"start":{"line":266,"column":13},"end":{"line":266,"column":25}},"152":{"start":{"line":267,"column":14},"end":{"line":267,"column":27}},"153":{"start":{"line":268,"column":25},"end":{"line":268,"column":49}},"154":{"start":{"line":269,"column":16},"end":{"line":269,"column":21}},"155":{"start":{"line":271,"column":4},"end":{"line":279,"column":5}},"156":{"start":{"line":272,"column":6},"end":{"line":272,"column":70}},"157":{"start":{"line":273,"column":6},"end":{"line":273,"column":52}},"158":{"start":{"line":275,"column":6},"end":{"line":275,"column":63}},"159":{"start":{"line":278,"column":6},"end":{"line":278,"column":60}},"160":{"start":{"line":282,"column":6},"end":{"line":283,"column":15}},"161":{"start":{"line":283,"column":8},"end":{"line":283,"column":15}},"162":{"start":{"line":284,"column":6},"end":{"line":284,"column":21}},"163":{"start":{"line":286,"column":23},"end":{"line":287,"column":58}},"164":{"start":{"line":290,"column":6},"end":{"line":296,"column":7}},"165":{"start":{"line":291,"column":8},"end":{"line":291,"column":77}},"166":{"start":{"line":293,"column":11},"end":{"line":296,"column":7}},"167":{"start":{"line":295,"column":8},"end":{"line":295,"column":23}},"168":{"start":{"line":298,"column":20},"end":{"line":298,"column":36}},"169":{"start":{"line":300,"column":32},"end":{"line":300,"column":73}},"170":{"start":{"line":301,"column":6},"end":{"line":301,"column":88}},"171":{"start":{"line":303,"column":33},"end":{"line":303,"column":64}},"172":{"start":{"line":304,"column":6},"end":{"line":304,"column":90}},"173":{"start":{"line":306,"column":22},"end":{"line":306,"column":65}},"174":{"start":{"line":307,"column":25},"end":{"line":307,"column":64}},"175":{"start":{"line":309,"column":6},"end":{"line":311,"column":7}},"176":{"start":{"line":310,"column":8},"end":{"line":310,"column":62}},"177":{"start":{"line":313,"column":6},"end":{"line":313,"column":78}},"178":{"start":{"line":315,"column":22},"end":{"line":315,"column":74}},"179":{"start":{"line":316,"column":21},"end":{"line":316,"column":75}},"180":{"start":{"line":319,"column":6},"end":{"line":319,"column":88}},"181":{"start":{"line":321,"column":6},"end":{"line":321,"column":49}},"182":{"start":{"line":322,"column":20},"end":{"line":322,"column":58}},"183":{"start":{"line":323,"column":16},"end":{"line":323,"column":48}},"184":{"start":{"line":325,"column":6},"end":{"line":325,"column":50}},"185":{"start":{"line":326,"column":6},"end":{"line":326,"column":20}},"186":{"start":{"line":330,"column":4},"end":{"line":335,"column":5}},"187":{"start":{"line":333,"column":6},"end":{"line":333,"column":21}},"188":{"start":{"line":334,"column":6},"end":{"line":334,"column":19}},"189":{"start":{"line":337,"column":17},"end":{"line":337,"column":68}},"190":{"start":{"line":338,"column":4},"end":{"line":340,"column":5}},"191":{"start":{"line":339,"column":6},"end":{"line":339,"column":33}},"192":{"start":{"line":344,"column":21},"end":{"line":345,"column":44}},"193":{"start":{"line":347,"column":4},"end":{"line":351,"column":55}},"194":{"start":{"line":353,"column":14},"end":{"line":353,"column":24}},"195":{"start":{"line":354,"column":18},"end":{"line":354,"column":32}},"196":{"start":{"line":355,"column":23},"end":{"line":355,"column":25}},"197":{"start":{"line":357,"column":18},"end":{"line":357,"column":67}},"198":{"start":{"line":359,"column":20},"end":{"line":360,"column":50}},"199":{"start":{"line":361,"column":4},"end":{"line":361,"column":46}},"200":{"start":{"line":362,"column":4},"end":{"line":362,"column":46}},"201":{"start":{"line":367,"column":4},"end":{"line":367,"column":49}},"202":{"start":{"line":369,"column":4},"end":{"line":371,"column":5}},"203":{"start":{"line":370,"column":6},"end":{"line":370,"column":44}},"204":{"start":{"line":373,"column":28},"end":{"line":373,"column":38}},"205":{"start":{"line":375,"column":4},"end":{"line":375,"column":70}},"206":{"start":{"line":376,"column":4},"end":{"line":376,"column":15}},"207":{"start":{"line":380,"column":15},"end":{"line":380,"column":19}},"208":{"start":{"line":384,"column":4},"end":{"line":387,"column":5}},"209":{"start":{"line":385,"column":6},"end":{"line":385,"column":42}},"210":{"start":{"line":386,"column":6},"end":{"line":386,"column":41}},"211":{"start":{"line":389,"column":30},"end":{"line":389,"column":71}},"212":{"start":{"line":390,"column":4},"end":{"line":390,"column":83}},"213":{"start":{"line":393,"column":29},"end":{"line":393,"column":75}},"214":{"start":{"line":396,"column":20},"end":{"line":396,"column":63}},"215":{"start":{"line":397,"column":23},"end":{"line":397,"column":62}},"216":{"start":{"line":399,"column":4},"end":{"line":401,"column":5}},"217":{"start":{"line":400,"column":6},"end":{"line":400,"column":60}},"218":{"start":{"line":403,"column":20},"end":{"line":403,"column":72}},"219":{"start":{"line":404,"column":19},"end":{"line":404,"column":73}},"220":{"start":{"line":408,"column":25},"end":{"line":408,"column":55}},"221":{"start":{"line":411,"column":26},"end":{"line":411,"column":52}},"222":{"start":{"line":412,"column":4},"end":{"line":412,"column":75}},"223":{"start":{"line":414,"column":4},"end":{"line":414,"column":63}},"224":{"start":{"line":417,"column":4},"end":{"line":417,"column":86}},"225":{"start":{"line":419,"column":4},"end":{"line":419,"column":47}},"226":{"start":{"line":420,"column":18},"end":{"line":420,"column":56}},"227":{"start":{"line":421,"column":14},"end":{"line":421,"column":46}},"228":{"start":{"line":423,"column":4},"end":{"line":423,"column":59}},"229":{"start":{"line":424,"column":4},"end":{"line":424,"column":30}},"230":{"start":{"line":428,"column":0},"end":{"line":428,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":27,"column":2},"end":{"line":27,"column":3}},"loc":{"start":{"line":27,"column":53},"end":{"line":62,"column":3}},"line":27},"1":{"name":"(anonymous_1)","decl":{"start":{"line":37,"column":14},"end":{"line":37,"column":15}},"loc":{"start":{"line":37,"column":28},"end":{"line":61,"column":5}},"line":37},"2":{"name":"(anonymous_2)","decl":{"start":{"line":43,"column":36},"end":{"line":43,"column":37}},"loc":{"start":{"line":43,"column":55},"end":{"line":60,"column":7}},"line":43},"3":{"name":"(anonymous_3)","decl":{"start":{"line":64,"column":2},"end":{"line":64,"column":3}},"loc":{"start":{"line":64,"column":29},"end":{"line":132,"column":3}},"line":64},"4":{"name":"(anonymous_4)","decl":{"start":{"line":90,"column":21},"end":{"line":90,"column":22}},"loc":{"start":{"line":90,"column":37},"end":{"line":94,"column":7}},"line":90},"5":{"name":"(anonymous_5)","decl":{"start":{"line":95,"column":20},"end":{"line":95,"column":21}},"loc":{"start":{"line":95,"column":31},"end":{"line":127,"column":7}},"line":95},"6":{"name":"(anonymous_6)","decl":{"start":{"line":107,"column":34},"end":{"line":107,"column":35}},"loc":{"start":{"line":107,"column":63},"end":{"line":116,"column":11}},"line":107},"7":{"name":"(anonymous_7)","decl":{"start":{"line":134,"column":2},"end":{"line":134,"column":3}},"loc":{"start":{"line":134,"column":33},"end":{"line":256,"column":3}},"line":134},"8":{"name":"(anonymous_8)","decl":{"start":{"line":160,"column":15},"end":{"line":160,"column":16}},"loc":{"start":{"line":160,"column":30},"end":{"line":187,"column":5}},"line":160},"9":{"name":"(anonymous_9)","decl":{"start":{"line":258,"column":2},"end":{"line":258,"column":3}},"loc":{"start":{"line":258,"column":41},"end":{"line":341,"column":3}},"line":258},"10":{"name":"handleResult","decl":{"start":{"line":281,"column":13},"end":{"line":281,"column":25}},"loc":{"start":{"line":281,"column":41},"end":{"line":328,"column":5}},"line":281},"11":{"name":"(anonymous_11)","decl":{"start":{"line":343,"column":2},"end":{"line":343,"column":3}},"loc":{"start":{"line":343,"column":38},"end":{"line":364,"column":3}},"line":343},"12":{"name":"(anonymous_12)","decl":{"start":{"line":366,"column":2},"end":{"line":366,"column":3}},"loc":{"start":{"line":366,"column":35},"end":{"line":377,"column":3}},"line":366},"13":{"name":"(anonymous_13)","decl":{"start":{"line":379,"column":2},"end":{"line":379,"column":3}},"loc":{"start":{"line":379,"column":59},"end":{"line":425,"column":3}},"line":379}},"branchMap":{"0":{"loc":{"start":{"line":30,"column":14},"end":{"line":30,"column":27}},"type":"binary-expr","locations":[{"start":{"line":30,"column":14},"end":{"line":30,"column":21}},{"start":{"line":30,"column":25},"end":{"line":30,"column":27}}],"line":30},"1":{"loc":{"start":{"line":35,"column":4},"end":{"line":36,"column":18}},"type":"if","locations":[{"start":{"line":35,"column":4},"end":{"line":36,"column":18}},{"start":{"line":35,"column":4},"end":{"line":36,"column":18}}],"line":35},"2":{"loc":{"start":{"line":38,"column":6},"end":{"line":38,"column":25}},"type":"if","locations":[{"start":{"line":38,"column":6},"end":{"line":38,"column":25}},{"start":{"line":38,"column":6},"end":{"line":38,"column":25}}],"line":38},"3":{"loc":{"start":{"line":44,"column":8},"end":{"line":49,"column":9}},"type":"if","locations":[{"start":{"line":44,"column":8},"end":{"line":49,"column":9}},{"start":{"line":44,"column":8},"end":{"line":49,"column":9}}],"line":44},"4":{"loc":{"start":{"line":45,"column":10},"end":{"line":48,"column":11}},"type":"if","locations":[{"start":{"line":45,"column":10},"end":{"line":48,"column":11}},{"start":{"line":45,"column":10},"end":{"line":48,"column":11}}],"line":45},"5":{"loc":{"start":{"line":51,"column":8},"end":{"line":52,"column":25}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":52,"column":25}},{"start":{"line":51,"column":8},"end":{"line":52,"column":25}}],"line":51},"6":{"loc":{"start":{"line":53,"column":8},"end":{"line":59,"column":9}},"type":"if","locations":[{"start":{"line":53,"column":8},"end":{"line":59,"column":9}},{"start":{"line":53,"column":8},"end":{"line":59,"column":9}}],"line":53},"7":{"loc":{"start":{"line":70,"column":4},"end":{"line":72,"column":5}},"type":"if","locations":[{"start":{"line":70,"column":4},"end":{"line":72,"column":5}},{"start":{"line":70,"column":4},"end":{"line":72,"column":5}}],"line":70},"8":{"loc":{"start":{"line":74,"column":4},"end":{"line":131,"column":5}},"type":"if","locations":[{"start":{"line":74,"column":4},"end":{"line":131,"column":5}},{"start":{"line":74,"column":4},"end":{"line":131,"column":5}}],"line":74},"9":{"loc":{"start":{"line":75,"column":6},"end":{"line":81,"column":7}},"type":"if","locations":[{"start":{"line":75,"column":6},"end":{"line":81,"column":7}},{"start":{"line":75,"column":6},"end":{"line":81,"column":7}}],"line":75},"10":{"loc":{"start":{"line":75,"column":10},"end":{"line":75,"column":56}},"type":"binary-expr","locations":[{"start":{"line":75,"column":10},"end":{"line":75,"column":18}},{"start":{"line":75,"column":22},"end":{"line":75,"column":56}}],"line":75},"11":{"loc":{"start":{"line":76,"column":8},"end":{"line":78,"column":9}},"type":"if","locations":[{"start":{"line":76,"column":8},"end":{"line":78,"column":9}},{"start":{"line":76,"column":8},"end":{"line":78,"column":9}}],"line":76},"12":{"loc":{"start":{"line":83,"column":11},"end":{"line":131,"column":5}},"type":"if","locations":[{"start":{"line":83,"column":11},"end":{"line":131,"column":5}},{"start":{"line":83,"column":11},"end":{"line":131,"column":5}}],"line":83},"13":{"loc":{"start":{"line":86,"column":6},"end":{"line":89,"column":7}},"type":"if","locations":[{"start":{"line":86,"column":6},"end":{"line":89,"column":7}},{"start":{"line":86,"column":6},"end":{"line":89,"column":7}}],"line":86},"14":{"loc":{"start":{"line":86,"column":10},"end":{"line":86,"column":64}},"type":"binary-expr","locations":[{"start":{"line":86,"column":10},"end":{"line":86,"column":18}},{"start":{"line":86,"column":22},"end":{"line":86,"column":64}}],"line":86},"15":{"loc":{"start":{"line":91,"column":8},"end":{"line":92,"column":50}},"type":"if","locations":[{"start":{"line":91,"column":8},"end":{"line":92,"column":50}},{"start":{"line":91,"column":8},"end":{"line":92,"column":50}}],"line":91},"16":{"loc":{"start":{"line":99,"column":8},"end":{"line":102,"column":9}},"type":"if","locations":[{"start":{"line":99,"column":8},"end":{"line":102,"column":9}},{"start":{"line":99,"column":8},"end":{"line":102,"column":9}}],"line":99},"17":{"loc":{"start":{"line":104,"column":10},"end":{"line":106,"column":11}},"type":"if","locations":[{"start":{"line":104,"column":10},"end":{"line":106,"column":11}},{"start":{"line":104,"column":10},"end":{"line":106,"column":11}}],"line":104},"18":{"loc":{"start":{"line":108,"column":12},"end":{"line":110,"column":13}},"type":"if","locations":[{"start":{"line":108,"column":12},"end":{"line":110,"column":13}},{"start":{"line":108,"column":12},"end":{"line":110,"column":13}}],"line":108},"19":{"loc":{"start":{"line":113,"column":12},"end":{"line":115,"column":13}},"type":"if","locations":[{"start":{"line":113,"column":12},"end":{"line":115,"column":13}},{"start":{"line":113,"column":12},"end":{"line":115,"column":13}}],"line":113},"20":{"loc":{"start":{"line":119,"column":18},"end":{"line":119,"column":34}},"type":"binary-expr","locations":[{"start":{"line":119,"column":18},"end":{"line":119,"column":27}},{"start":{"line":119,"column":31},"end":{"line":119,"column":34}}],"line":119},"21":{"loc":{"start":{"line":123,"column":10},"end":{"line":125,"column":11}},"type":"if","locations":[{"start":{"line":123,"column":10},"end":{"line":125,"column":11}},{"start":{"line":123,"column":10},"end":{"line":125,"column":11}}],"line":123},"22":{"loc":{"start":{"line":143,"column":25},"end":{"line":144,"column":37}},"type":"binary-expr","locations":[{"start":{"line":143,"column":25},"end":{"line":143,"column":35}},{"start":{"line":143,"column":39},"end":{"line":143,"column":58}},{"start":{"line":144,"column":8},"end":{"line":144,"column":37}}],"line":143},"23":{"loc":{"start":{"line":146,"column":4},"end":{"line":153,"column":5}},"type":"if","locations":[{"start":{"line":146,"column":4},"end":{"line":153,"column":5}},{"start":{"line":146,"column":4},"end":{"line":153,"column":5}}],"line":146},"24":{"loc":{"start":{"line":147,"column":6},"end":{"line":149,"column":7}},"type":"if","locations":[{"start":{"line":147,"column":6},"end":{"line":149,"column":7}},{"start":{"line":147,"column":6},"end":{"line":149,"column":7}}],"line":147},"25":{"loc":{"start":{"line":147,"column":10},"end":{"line":147,"column":45}},"type":"binary-expr","locations":[{"start":{"line":147,"column":10},"end":{"line":147,"column":21}},{"start":{"line":147,"column":25},"end":{"line":147,"column":45}}],"line":147},"26":{"loc":{"start":{"line":150,"column":6},"end":{"line":152,"column":7}},"type":"if","locations":[{"start":{"line":150,"column":6},"end":{"line":152,"column":7}},{"start":{"line":150,"column":6},"end":{"line":152,"column":7}}],"line":150},"27":{"loc":{"start":{"line":155,"column":4},"end":{"line":157,"column":5}},"type":"if","locations":[{"start":{"line":155,"column":4},"end":{"line":157,"column":5}},{"start":{"line":155,"column":4},"end":{"line":157,"column":5}}],"line":155},"28":{"loc":{"start":{"line":173,"column":10},"end":{"line":175,"column":11}},"type":"if","locations":[{"start":{"line":173,"column":10},"end":{"line":175,"column":11}},{"start":{"line":173,"column":10},"end":{"line":175,"column":11}}],"line":173},"29":{"loc":{"start":{"line":177,"column":10},"end":{"line":178,"column":32}},"type":"if","locations":[{"start":{"line":177,"column":10},"end":{"line":178,"column":32}},{"start":{"line":177,"column":10},"end":{"line":178,"column":32}}],"line":177},"30":{"loc":{"start":{"line":181,"column":10},"end":{"line":183,"column":11}},"type":"if","locations":[{"start":{"line":181,"column":10},"end":{"line":183,"column":11}},{"start":{"line":181,"column":10},"end":{"line":183,"column":11}}],"line":181},"31":{"loc":{"start":{"line":186,"column":13},"end":{"line":186,"column":52}},"type":"cond-expr","locations":[{"start":{"line":186,"column":26},"end":{"line":186,"column":32}},{"start":{"line":186,"column":35},"end":{"line":186,"column":52}}],"line":186},"32":{"loc":{"start":{"line":189,"column":4},"end":{"line":191,"column":5}},"type":"if","locations":[{"start":{"line":189,"column":4},"end":{"line":191,"column":5}},{"start":{"line":189,"column":4},"end":{"line":191,"column":5}}],"line":189},"33":{"loc":{"start":{"line":194,"column":6},"end":{"line":248,"column":7}},"type":"if","locations":[{"start":{"line":194,"column":6},"end":{"line":248,"column":7}},{"start":{"line":194,"column":6},"end":{"line":248,"column":7}}],"line":194},"34":{"loc":{"start":{"line":198,"column":8},"end":{"line":199,"column":55}},"type":"if","locations":[{"start":{"line":198,"column":8},"end":{"line":199,"column":55}},{"start":{"line":198,"column":8},"end":{"line":199,"column":55}}],"line":198},"35":{"loc":{"start":{"line":211,"column":31},"end":{"line":212,"column":53}},"type":"cond-expr","locations":[{"start":{"line":212,"column":10},"end":{"line":212,"column":30}},{"start":{"line":212,"column":33},"end":{"line":212,"column":53}}],"line":211},"36":{"loc":{"start":{"line":222,"column":10},"end":{"line":231,"column":11}},"type":"if","locations":[{"start":{"line":222,"column":10},"end":{"line":231,"column":11}},{"start":{"line":222,"column":10},"end":{"line":231,"column":11}}],"line":222},"37":{"loc":{"start":{"line":224,"column":12},"end":{"line":229,"column":13}},"type":"if","locations":[{"start":{"line":224,"column":12},"end":{"line":229,"column":13}},{"start":{"line":224,"column":12},"end":{"line":229,"column":13}}],"line":224},"38":{"loc":{"start":{"line":235,"column":8},"end":{"line":236,"column":55}},"type":"if","locations":[{"start":{"line":235,"column":8},"end":{"line":236,"column":55}},{"start":{"line":235,"column":8},"end":{"line":236,"column":55}}],"line":235},"39":{"loc":{"start":{"line":250,"column":6},"end":{"line":252,"column":7}},"type":"if","locations":[{"start":{"line":250,"column":6},"end":{"line":252,"column":7}},{"start":{"line":250,"column":6},"end":{"line":252,"column":7}}],"line":250},"40":{"loc":{"start":{"line":259,"column":14},"end":{"line":259,"column":27}},"type":"binary-expr","locations":[{"start":{"line":259,"column":14},"end":{"line":259,"column":21}},{"start":{"line":259,"column":25},"end":{"line":259,"column":27}}],"line":259},"41":{"loc":{"start":{"line":282,"column":6},"end":{"line":283,"column":15}},"type":"if","locations":[{"start":{"line":282,"column":6},"end":{"line":283,"column":15}},{"start":{"line":282,"column":6},"end":{"line":283,"column":15}}],"line":282},"42":{"loc":{"start":{"line":290,"column":6},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":290,"column":6},"end":{"line":296,"column":7}},{"start":{"line":290,"column":6},"end":{"line":296,"column":7}}],"line":290},"43":{"loc":{"start":{"line":290,"column":10},"end":{"line":290,"column":44}},"type":"binary-expr","locations":[{"start":{"line":290,"column":10},"end":{"line":290,"column":15}},{"start":{"line":290,"column":19},"end":{"line":290,"column":44}}],"line":290},"44":{"loc":{"start":{"line":293,"column":11},"end":{"line":296,"column":7}},"type":"if","locations":[{"start":{"line":293,"column":11},"end":{"line":296,"column":7}},{"start":{"line":293,"column":11},"end":{"line":296,"column":7}}],"line":293},"45":{"loc":{"start":{"line":307,"column":25},"end":{"line":307,"column":64}},"type":"binary-expr","locations":[{"start":{"line":307,"column":25},"end":{"line":307,"column":54}},{"start":{"line":307,"column":58},"end":{"line":307,"column":64}}],"line":307},"46":{"loc":{"start":{"line":309,"column":6},"end":{"line":311,"column":7}},"type":"if","locations":[{"start":{"line":309,"column":6},"end":{"line":311,"column":7}},{"start":{"line":309,"column":6},"end":{"line":311,"column":7}}],"line":309},"47":{"loc":{"start":{"line":330,"column":4},"end":{"line":335,"column":5}},"type":"if","locations":[{"start":{"line":330,"column":4},"end":{"line":335,"column":5}},{"start":{"line":330,"column":4},"end":{"line":335,"column":5}}],"line":330},"48":{"loc":{"start":{"line":338,"column":4},"end":{"line":340,"column":5}},"type":"if","locations":[{"start":{"line":338,"column":4},"end":{"line":340,"column":5}},{"start":{"line":338,"column":4},"end":{"line":340,"column":5}}],"line":338},"49":{"loc":{"start":{"line":367,"column":10},"end":{"line":367,"column":48}},"type":"binary-expr","locations":[{"start":{"line":367,"column":10},"end":{"line":367,"column":13}},{"start":{"line":367,"column":17},"end":{"line":367,"column":48}}],"line":367},"50":{"loc":{"start":{"line":369,"column":4},"end":{"line":371,"column":5}},"type":"if","locations":[{"start":{"line":369,"column":4},"end":{"line":371,"column":5}},{"start":{"line":369,"column":4},"end":{"line":371,"column":5}}],"line":369},"51":{"loc":{"start":{"line":384,"column":4},"end":{"line":387,"column":5}},"type":"if","locations":[{"start":{"line":384,"column":4},"end":{"line":387,"column":5}},{"start":{"line":384,"column":4},"end":{"line":387,"column":5}}],"line":384},"52":{"loc":{"start":{"line":397,"column":23},"end":{"line":397,"column":62}},"type":"binary-expr","locations":[{"start":{"line":397,"column":23},"end":{"line":397,"column":52}},{"start":{"line":397,"column":56},"end":{"line":397,"column":62}}],"line":397},"53":{"loc":{"start":{"line":399,"column":4},"end":{"line":401,"column":5}},"type":"if","locations":[{"start":{"line":399,"column":4},"end":{"line":401,"column":5}},{"start":{"line":399,"column":4},"end":{"line":401,"column":5}}],"line":399}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":38,"13":38,"14":38,"15":38,"16":38,"17":38,"18":38,"19":38,"20":38,"21":38,"22":0,"23":38,"24":38,"25":38,"26":38,"27":42,"28":0,"29":0,"30":0,"31":42,"32":42,"33":38,"34":42,"35":37,"36":5,"37":5,"38":5,"39":5,"40":37,"41":37,"42":37,"43":37,"44":37,"45":0,"46":37,"47":7,"48":7,"49":0,"50":7,"51":7,"52":7,"53":30,"54":30,"55":30,"56":30,"57":0,"58":0,"59":30,"60":30,"61":0,"62":30,"63":30,"64":30,"65":30,"66":0,"67":0,"68":30,"69":30,"70":0,"71":30,"72":27,"73":1,"74":27,"75":27,"76":27,"77":0,"78":3,"79":3,"80":3,"81":3,"82":3,"83":0,"84":0,"85":30,"86":30,"87":30,"88":29,"89":29,"90":29,"91":29,"92":29,"93":0,"94":0,"95":0,"96":0,"97":29,"98":0,"99":29,"100":29,"101":29,"102":29,"103":29,"104":29,"105":29,"106":29,"107":29,"108":29,"109":29,"110":0,"111":29,"112":29,"113":0,"114":0,"115":0,"116":29,"117":0,"118":29,"119":29,"120":1,"121":1,"122":1,"123":0,"124":1,"125":28,"126":28,"127":28,"128":28,"129":37,"130":37,"131":37,"132":27,"133":27,"134":26,"135":26,"136":26,"137":27,"138":28,"139":28,"140":4,"141":27,"142":11,"143":9,"144":2,"145":28,"146":28,"147":28,"148":28,"149":28,"150":28,"151":28,"152":28,"153":28,"154":28,"155":28,"156":28,"157":28,"158":0,"159":0,"160":17,"161":0,"162":17,"163":17,"164":17,"165":1,"166":16,"167":1,"168":16,"169":16,"170":16,"171":16,"172":16,"173":16,"174":16,"175":16,"176":0,"177":16,"178":16,"179":16,"180":16,"181":16,"182":16,"183":16,"184":16,"185":16,"186":28,"187":1,"188":1,"189":27,"190":18,"191":13,"192":1,"193":1,"194":1,"195":1,"196":1,"197":1,"198":1,"199":1,"200":1,"201":26,"202":26,"203":1,"204":26,"205":26,"206":26,"207":10,"208":10,"209":1,"210":1,"211":10,"212":10,"213":10,"214":10,"215":10,"216":10,"217":4,"218":10,"219":10,"220":10,"221":10,"222":10,"223":10,"224":10,"225":10,"226":10,"227":10,"228":10,"229":10,"230":1},"f":{"0":38,"1":38,"2":42,"3":37,"4":30,"5":30,"6":27,"7":30,"8":29,"9":28,"10":17,"11":1,"12":26,"13":10},"b":{"0":[38,0],"1":[38,0],"2":[0,38],"3":[0,42],"4":[0,0],"5":[38,4],"6":[37,5],"7":[0,37],"8":[7,30],"9":[7,0],"10":[7,7],"11":[0,7],"12":[30,0],"13":[0,30],"14":[30,30],"15":[0,30],"16":[0,30],"17":[0,30],"18":[1,26],"19":[0,27],"20":[3,0],"21":[0,3],"22":[29,4,1],"23":[0,29],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,29],"28":[0,29],"29":[29,0],"30":[0,0],"31":[0,0],"32":[0,29],"33":[1,28],"34":[0,1],"35":[0,28],"36":[27,10],"37":[26,1],"38":[4,24],"39":[9,2],"40":[28,0],"41":[0,17],"42":[1,16],"43":[17,2],"44":[1,15],"45":[16,0],"46":[0,16],"47":[1,26],"48":[13,5],"49":[26,0],"50":[1,25],"51":[1,9],"52":[10,0],"53":[4,6]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"17632072c0d42ff94fb23f9a32f904c1f7c11816","contentHash":"3a2148b371446d10feeedd5dafa541c58f9115014e4e549a34112583704f6a40"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/index.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/index.js","statementMap":{"0":{"start":{"line":6,"column":0},"end":{"line":6,"column":35}},"1":{"start":{"line":7,"column":0},"end":{"line":7,"column":50}},"2":{"start":{"line":8,"column":0},"end":{"line":8,"column":33}},"3":{"start":{"line":9,"column":0},"end":{"line":9,"column":45}}},"fnMap":{},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1},"f":{},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"fb0f8717f4bb6c23bf9bf9b82367bdf208142a11","contentHash":"1dd5a9f564a48a9ebc7f1382bc6ec66aae06c61be959a14cb90b8cc1da90f1f2"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl.js","statementMap":{"0":{"start":{"line":8,"column":8},"end":{"line":8,"column":31}},"1":{"start":{"line":9,"column":10},"end":{"line":9,"column":24}},"2":{"start":{"line":10,"column":17},"end":{"line":10,"column":37}},"3":{"start":{"line":11,"column":9},"end":{"line":11,"column":22}},"4":{"start":{"line":12,"column":10},"end":{"line":12,"column":24}},"5":{"start":{"line":13,"column":11},"end":{"line":13,"column":26}},"6":{"start":{"line":14,"column":13},"end":{"line":14,"column":30}},"7":{"start":{"line":15,"column":15},"end":{"line":15,"column":38}},"8":{"start":{"line":16,"column":12},"end":{"line":16,"column":48}},"9":{"start":{"line":17,"column":19},"end":{"line":17,"column":63}},"10":{"start":{"line":18,"column":8},"end":{"line":18,"column":25}},"11":{"start":{"line":19,"column":14},"end":{"line":19,"column":32}},"12":{"start":{"line":20,"column":12},"end":{"line":20,"column":31}},"13":{"start":{"line":21,"column":19},"end":{"line":21,"column":37}},"14":{"start":{"line":23,"column":12},"end":{"line":23,"column":30}},"15":{"start":{"line":24,"column":18},"end":{"line":24,"column":47}},"16":{"start":{"line":25,"column":13},"end":{"line":25,"column":36}},"17":{"start":{"line":26,"column":12},"end":{"line":26,"column":35}},"18":{"start":{"line":27,"column":14},"end":{"line":27,"column":34}},"19":{"start":{"line":31,"column":4},"end":{"line":31,"column":30}},"20":{"start":{"line":32,"column":4},"end":{"line":34,"column":75}},"21":{"start":{"line":35,"column":4},"end":{"line":35,"column":19}},"22":{"start":{"line":36,"column":4},"end":{"line":36,"column":28}},"23":{"start":{"line":39,"column":4},"end":{"line":39,"column":55}},"24":{"start":{"line":40,"column":4},"end":{"line":40,"column":37}},"25":{"start":{"line":44,"column":4},"end":{"line":46,"column":7}},"26":{"start":{"line":45,"column":6},"end":{"line":45,"column":25}},"27":{"start":{"line":51,"column":4},"end":{"line":53,"column":7}},"28":{"start":{"line":52,"column":8},"end":{"line":52,"column":22}},"29":{"start":{"line":56,"column":4},"end":{"line":56,"column":18}},"30":{"start":{"line":60,"column":15},"end":{"line":60,"column":19}},"31":{"start":{"line":61,"column":21},"end":{"line":61,"column":33}},"32":{"start":{"line":63,"column":4},"end":{"line":69,"column":5}},"33":{"start":{"line":64,"column":6},"end":{"line":64,"column":40}},"34":{"start":{"line":65,"column":6},"end":{"line":65,"column":31}},"35":{"start":{"line":67,"column":9},"end":{"line":69,"column":5}},"36":{"start":{"line":68,"column":6},"end":{"line":68,"column":36}},"37":{"start":{"line":72,"column":4},"end":{"line":72,"column":25}},"38":{"start":{"line":74,"column":24},"end":{"line":132,"column":5}},"39":{"start":{"line":75,"column":6},"end":{"line":79,"column":7}},"40":{"start":{"line":76,"column":8},"end":{"line":76,"column":40}},"41":{"start":{"line":78,"column":8},"end":{"line":78,"column":27}},"42":{"start":{"line":81,"column":6},"end":{"line":131,"column":9}},"43":{"start":{"line":83,"column":8},"end":{"line":85,"column":9}},"44":{"start":{"line":84,"column":10},"end":{"line":84,"column":31}},"45":{"start":{"line":87,"column":22},"end":{"line":87,"column":46}},"46":{"start":{"line":88,"column":8},"end":{"line":90,"column":9}},"47":{"start":{"line":89,"column":10},"end":{"line":89,"column":51}},"48":{"start":{"line":91,"column":23},"end":{"line":91,"column":64}},"49":{"start":{"line":92,"column":8},"end":{"line":100,"column":9}},"50":{"start":{"line":93,"column":10},"end":{"line":99,"column":11}},"51":{"start":{"line":94,"column":12},"end":{"line":98,"column":13}},"52":{"start":{"line":95,"column":14},"end":{"line":95,"column":56}},"53":{"start":{"line":97,"column":14},"end":{"line":97,"column":35}},"54":{"start":{"line":104,"column":23},"end":{"line":104,"column":48}},"55":{"start":{"line":105,"column":8},"end":{"line":126,"column":9}},"56":{"start":{"line":106,"column":24},"end":{"line":106,"column":45}},"57":{"start":{"line":107,"column":10},"end":{"line":109,"column":11}},"58":{"start":{"line":108,"column":12},"end":{"line":108,"column":39}},"59":{"start":{"line":110,"column":10},"end":{"line":111,"column":21}},"60":{"start":{"line":111,"column":12},"end":{"line":111,"column":21}},"61":{"start":{"line":112,"column":27},"end":{"line":112,"column":45}},"62":{"start":{"line":113,"column":23},"end":{"line":113,"column":47}},"63":{"start":{"line":114,"column":10},"end":{"line":125,"column":11}},"64":{"start":{"line":115,"column":12},"end":{"line":124,"column":13}},"65":{"start":{"line":116,"column":30},"end":{"line":116,"column":64}},"66":{"start":{"line":117,"column":31},"end":{"line":117,"column":33}},"67":{"start":{"line":118,"column":14},"end":{"line":119,"column":65}},"68":{"start":{"line":119,"column":16},"end":{"line":119,"column":65}},"69":{"start":{"line":120,"column":14},"end":{"line":123,"column":16}},"70":{"start":{"line":129,"column":8},"end":{"line":129,"column":48}},"71":{"start":{"line":130,"column":8},"end":{"line":130,"column":28}},"72":{"start":{"line":134,"column":4},"end":{"line":138,"column":5}},"73":{"start":{"line":135,"column":6},"end":{"line":135,"column":26}},"74":{"start":{"line":137,"column":6},"end":{"line":137,"column":38}},"75":{"start":{"line":142,"column":4},"end":{"line":142,"column":72}},"76":{"start":{"line":143,"column":4},"end":{"line":143,"column":22}},"77":{"start":{"line":145,"column":28},"end":{"line":145,"column":70}},"78":{"start":{"line":147,"column":4},"end":{"line":158,"column":5}},"79":{"start":{"line":150,"column":6},"end":{"line":155,"column":7}},"80":{"start":{"line":151,"column":8},"end":{"line":151,"column":70}},"81":{"start":{"line":153,"column":8},"end":{"line":154,"column":70}},"82":{"start":{"line":157,"column":6},"end":{"line":157,"column":62}},"83":{"start":{"line":160,"column":4},"end":{"line":160,"column":61}},"84":{"start":{"line":162,"column":4},"end":{"line":162,"column":62}},"85":{"start":{"line":163,"column":4},"end":{"line":163,"column":56}},"86":{"start":{"line":166,"column":4},"end":{"line":166,"column":53}},"87":{"start":{"line":167,"column":4},"end":{"line":167,"column":53}},"88":{"start":{"line":169,"column":4},"end":{"line":171,"column":5}},"89":{"start":{"line":170,"column":6},"end":{"line":170,"column":51}},"90":{"start":{"line":173,"column":4},"end":{"line":175,"column":5}},"91":{"start":{"line":174,"column":6},"end":{"line":174,"column":45}},"92":{"start":{"line":177,"column":31},"end":{"line":177,"column":76}},"93":{"start":{"line":178,"column":4},"end":{"line":182,"column":68}},"94":{"start":{"line":180,"column":6},"end":{"line":180,"column":63}},"95":{"start":{"line":182,"column":6},"end":{"line":182,"column":68}},"96":{"start":{"line":184,"column":4},"end":{"line":186,"column":5}},"97":{"start":{"line":185,"column":6},"end":{"line":185,"column":55}},"98":{"start":{"line":190,"column":4},"end":{"line":190,"column":49}},"99":{"start":{"line":191,"column":15},"end":{"line":191,"column":19}},"100":{"start":{"line":192,"column":16},"end":{"line":192,"column":32}},"101":{"start":{"line":195,"column":4},"end":{"line":196,"column":24}},"102":{"start":{"line":196,"column":6},"end":{"line":196,"column":24}},"103":{"start":{"line":199,"column":4},"end":{"line":201,"column":5}},"104":{"start":{"line":200,"column":6},"end":{"line":200,"column":18}},"105":{"start":{"line":204,"column":4},"end":{"line":208,"column":5}},"106":{"start":{"line":205,"column":6},"end":{"line":205,"column":75}},"107":{"start":{"line":207,"column":6},"end":{"line":207,"column":60}},"108":{"start":{"line":210,"column":4},"end":{"line":210,"column":55}},"109":{"start":{"line":212,"column":4},"end":{"line":212,"column":41}},"110":{"start":{"line":214,"column":4},"end":{"line":214,"column":98}},"111":{"start":{"line":215,"column":4},"end":{"line":215,"column":41}},"112":{"start":{"line":217,"column":21},"end":{"line":248,"column":5}},"113":{"start":{"line":218,"column":6},"end":{"line":220,"column":7}},"114":{"start":{"line":219,"column":8},"end":{"line":219,"column":29}},"115":{"start":{"line":222,"column":6},"end":{"line":222,"column":36}},"116":{"start":{"line":224,"column":6},"end":{"line":244,"column":7}},"117":{"start":{"line":226,"column":8},"end":{"line":232,"column":9}},"118":{"start":{"line":227,"column":10},"end":{"line":231,"column":11}},"119":{"start":{"line":229,"column":12},"end":{"line":229,"column":94}},"120":{"start":{"line":230,"column":12},"end":{"line":230,"column":55}},"121":{"start":{"line":233,"column":8},"end":{"line":238,"column":11}},"122":{"start":{"line":234,"column":10},"end":{"line":236,"column":11}},"123":{"start":{"line":235,"column":12},"end":{"line":235,"column":21}},"124":{"start":{"line":237,"column":10},"end":{"line":237,"column":92}},"125":{"start":{"line":240,"column":8},"end":{"line":243,"column":64}},"126":{"start":{"line":245,"column":6},"end":{"line":247,"column":9}},"127":{"start":{"line":246,"column":8},"end":{"line":246,"column":22}},"128":{"start":{"line":250,"column":4},"end":{"line":258,"column":5}},"129":{"start":{"line":251,"column":17},"end":{"line":251,"column":52}},"130":{"start":{"line":252,"column":6},"end":{"line":252,"column":35}},"131":{"start":{"line":254,"column":6},"end":{"line":256,"column":9}},"132":{"start":{"line":255,"column":8},"end":{"line":255,"column":37}},"133":{"start":{"line":263,"column":18},"end":{"line":263,"column":42}},"134":{"start":{"line":264,"column":17},"end":{"line":264,"column":19}},"135":{"start":{"line":266,"column":4},"end":{"line":269,"column":5}},"136":{"start":{"line":267,"column":19},"end":{"line":267,"column":30}},"137":{"start":{"line":268,"column":6},"end":{"line":268,"column":56}},"138":{"start":{"line":271,"column":4},"end":{"line":271,"column":59}},"139":{"start":{"line":275,"column":19},"end":{"line":275,"column":21}},"140":{"start":{"line":276,"column":4},"end":{"line":279,"column":5}},"141":{"start":{"line":277,"column":20},"end":{"line":277,"column":39}},"142":{"start":{"line":278,"column":6},"end":{"line":278,"column":58}},"143":{"start":{"line":280,"column":4},"end":{"line":280,"column":20}},"144":{"start":{"line":284,"column":4},"end":{"line":284,"column":26}},"145":{"start":{"line":288,"column":4},"end":{"line":288,"column":16}},"146":{"start":{"line":292,"column":15},"end":{"line":292,"column":19}},"147":{"start":{"line":293,"column":10},"end":{"line":293,"column":40}},"148":{"start":{"line":294,"column":14},"end":{"line":294,"column":16}},"149":{"start":{"line":295,"column":13},"end":{"line":295,"column":17}},"150":{"start":{"line":296,"column":14},"end":{"line":296,"column":18}},"151":{"start":{"line":297,"column":15},"end":{"line":297,"column":19}},"152":{"start":{"line":298,"column":13},"end":{"line":298,"column":15}},"153":{"start":{"line":299,"column":16},"end":{"line":299,"column":28}},"154":{"start":{"line":301,"column":4},"end":{"line":338,"column":6}},"155":{"start":{"line":302,"column":6},"end":{"line":302,"column":39}},"156":{"start":{"line":303,"column":6},"end":{"line":303,"column":16}},"157":{"start":{"line":304,"column":19},"end":{"line":304,"column":28}},"158":{"start":{"line":305,"column":18},"end":{"line":305,"column":33}},"159":{"start":{"line":307,"column":16},"end":{"line":307,"column":39}},"160":{"start":{"line":309,"column":6},"end":{"line":337,"column":7}},"161":{"start":{"line":310,"column":8},"end":{"line":319,"column":9}},"162":{"start":{"line":311,"column":10},"end":{"line":311,"column":58}},"163":{"start":{"line":313,"column":10},"end":{"line":313,"column":46}},"164":{"start":{"line":314,"column":10},"end":{"line":318,"column":11}},"165":{"start":{"line":315,"column":12},"end":{"line":315,"column":20}},"166":{"start":{"line":317,"column":12},"end":{"line":317,"column":60}},"167":{"start":{"line":321,"column":8},"end":{"line":321,"column":40}},"168":{"start":{"line":322,"column":8},"end":{"line":336,"column":9}},"169":{"start":{"line":323,"column":10},"end":{"line":323,"column":57}},"170":{"start":{"line":324,"column":10},"end":{"line":324,"column":27}},"171":{"start":{"line":325,"column":15},"end":{"line":336,"column":9}},"172":{"start":{"line":328,"column":10},"end":{"line":328,"column":56}},"173":{"start":{"line":329,"column":10},"end":{"line":329,"column":45}},"174":{"start":{"line":330,"column":10},"end":{"line":330,"column":54}},"175":{"start":{"line":331,"column":10},"end":{"line":331,"column":33}},"176":{"start":{"line":332,"column":10},"end":{"line":332,"column":31}},"177":{"start":{"line":333,"column":10},"end":{"line":333,"column":29}},"178":{"start":{"line":335,"column":10},"end":{"line":335,"column":81}},"179":{"start":{"line":340,"column":4},"end":{"line":350,"column":6}},"180":{"start":{"line":341,"column":6},"end":{"line":341,"column":37}},"181":{"start":{"line":342,"column":16},"end":{"line":342,"column":39}},"182":{"start":{"line":343,"column":6},"end":{"line":343,"column":50}},"183":{"start":{"line":345,"column":6},"end":{"line":348,"column":7}},"184":{"start":{"line":346,"column":8},"end":{"line":346,"column":42}},"185":{"start":{"line":347,"column":8},"end":{"line":347,"column":18}},"186":{"start":{"line":349,"column":6},"end":{"line":349,"column":34}},"187":{"start":{"line":352,"column":4},"end":{"line":354,"column":5}},"188":{"start":{"line":353,"column":6},"end":{"line":353,"column":24}},"189":{"start":{"line":356,"column":4},"end":{"line":356,"column":31}},"190":{"start":{"line":357,"column":4},"end":{"line":357,"column":25}},"191":{"start":{"line":359,"column":4},"end":{"line":359,"column":16}},"192":{"start":{"line":363,"column":4},"end":{"line":363,"column":40}},"193":{"start":{"line":364,"column":4},"end":{"line":364,"column":19}},"194":{"start":{"line":371,"column":16},"end":{"line":371,"column":38}},"195":{"start":{"line":372,"column":14},"end":{"line":372,"column":16}},"196":{"start":{"line":373,"column":4},"end":{"line":393,"column":5}},"197":{"start":{"line":374,"column":6},"end":{"line":375,"column":17}},"198":{"start":{"line":375,"column":8},"end":{"line":375,"column":17}},"199":{"start":{"line":376,"column":15},"end":{"line":376,"column":28}},"200":{"start":{"line":377,"column":6},"end":{"line":385,"column":7}},"201":{"start":{"line":384,"column":10},"end":{"line":384,"column":19}},"202":{"start":{"line":386,"column":6},"end":{"line":387,"column":17}},"203":{"start":{"line":387,"column":8},"end":{"line":387,"column":17}},"204":{"start":{"line":388,"column":6},"end":{"line":389,"column":17}},"205":{"start":{"line":389,"column":8},"end":{"line":389,"column":17}},"206":{"start":{"line":390,"column":6},"end":{"line":391,"column":17}},"207":{"start":{"line":391,"column":8},"end":{"line":391,"column":17}},"208":{"start":{"line":392,"column":6},"end":{"line":392,"column":50}},"209":{"start":{"line":394,"column":4},"end":{"line":394,"column":15}},"210":{"start":{"line":419,"column":4},"end":{"line":422,"column":5}},"211":{"start":{"line":420,"column":6},"end":{"line":420,"column":25}},"212":{"start":{"line":421,"column":6},"end":{"line":421,"column":19}},"213":{"start":{"line":424,"column":4},"end":{"line":424,"column":36}},"214":{"start":{"line":426,"column":4},"end":{"line":435,"column":5}},"215":{"start":{"line":432,"column":6},"end":{"line":434,"column":7}},"216":{"start":{"line":433,"column":8},"end":{"line":433,"column":57}},"217":{"start":{"line":437,"column":4},"end":{"line":437,"column":45}},"218":{"start":{"line":441,"column":4},"end":{"line":444,"column":5}},"219":{"start":{"line":442,"column":6},"end":{"line":442,"column":25}},"220":{"start":{"line":443,"column":6},"end":{"line":443,"column":19}},"221":{"start":{"line":447,"column":21},"end":{"line":447,"column":45}},"222":{"start":{"line":448,"column":26},"end":{"line":448,"column":46}},"223":{"start":{"line":449,"column":26},"end":{"line":449,"column":46}},"224":{"start":{"line":451,"column":4},"end":{"line":451,"column":98}},"225":{"start":{"line":453,"column":20},"end":{"line":453,"column":35}},"226":{"start":{"line":458,"column":4},"end":{"line":491,"column":5}},"227":{"start":{"line":459,"column":6},"end":{"line":459,"column":31}},"228":{"start":{"line":461,"column":9},"end":{"line":491,"column":5}},"229":{"start":{"line":462,"column":6},"end":{"line":462,"column":37}},"230":{"start":{"line":463,"column":6},"end":{"line":473,"column":9}},"231":{"start":{"line":464,"column":8},"end":{"line":472,"column":9}},"232":{"start":{"line":465,"column":10},"end":{"line":465,"column":24}},"233":{"start":{"line":468,"column":10},"end":{"line":468,"column":52}},"234":{"start":{"line":469,"column":10},"end":{"line":469,"column":33}},"235":{"start":{"line":470,"column":10},"end":{"line":470,"column":39}},"236":{"start":{"line":471,"column":10},"end":{"line":471,"column":30}},"237":{"start":{"line":476,"column":23},"end":{"line":476,"column":68}},"238":{"start":{"line":477,"column":6},"end":{"line":490,"column":45}},"239":{"start":{"line":479,"column":10},"end":{"line":489,"column":11}},"240":{"start":{"line":480,"column":12},"end":{"line":480,"column":26}},"241":{"start":{"line":481,"column":17},"end":{"line":489,"column":11}},"242":{"start":{"line":482,"column":12},"end":{"line":482,"column":54}},"243":{"start":{"line":483,"column":12},"end":{"line":483,"column":35}},"244":{"start":{"line":484,"column":12},"end":{"line":484,"column":41}},"245":{"start":{"line":485,"column":12},"end":{"line":485,"column":32}},"246":{"start":{"line":487,"column":12},"end":{"line":488,"column":85}},"247":{"start":{"line":493,"column":4},"end":{"line":493,"column":16}},"248":{"start":{"line":500,"column":4},"end":{"line":502,"column":5}},"249":{"start":{"line":501,"column":6},"end":{"line":501,"column":19}},"250":{"start":{"line":504,"column":4},"end":{"line":504,"column":36}},"251":{"start":{"line":506,"column":4},"end":{"line":515,"column":5}},"252":{"start":{"line":512,"column":6},"end":{"line":514,"column":7}},"253":{"start":{"line":513,"column":8},"end":{"line":513,"column":25}},"254":{"start":{"line":517,"column":4},"end":{"line":517,"column":39}},"255":{"start":{"line":521,"column":4},"end":{"line":523,"column":5}},"256":{"start":{"line":522,"column":6},"end":{"line":522,"column":19}},"257":{"start":{"line":526,"column":21},"end":{"line":526,"column":45}},"258":{"start":{"line":527,"column":26},"end":{"line":527,"column":46}},"259":{"start":{"line":528,"column":26},"end":{"line":528,"column":46}},"260":{"start":{"line":530,"column":4},"end":{"line":530,"column":98}},"261":{"start":{"line":532,"column":20},"end":{"line":532,"column":35}},"262":{"start":{"line":538,"column":4},"end":{"line":542,"column":5}},"263":{"start":{"line":539,"column":6},"end":{"line":539,"column":34}},"264":{"start":{"line":541,"column":6},"end":{"line":541,"column":114}},"265":{"start":{"line":544,"column":4},"end":{"line":544,"column":16}},"266":{"start":{"line":548,"column":17},"end":{"line":548,"column":52}},"267":{"start":{"line":549,"column":15},"end":{"line":549,"column":20}},"268":{"start":{"line":550,"column":4},"end":{"line":571,"column":7}},"269":{"start":{"line":551,"column":6},"end":{"line":551,"column":36}},"270":{"start":{"line":551,"column":15},"end":{"line":551,"column":36}},"271":{"start":{"line":552,"column":20},"end":{"line":552,"column":22}},"272":{"start":{"line":553,"column":18},"end":{"line":553,"column":30}},"273":{"start":{"line":554,"column":6},"end":{"line":570,"column":9}},"274":{"start":{"line":555,"column":8},"end":{"line":569,"column":11}},"275":{"start":{"line":556,"column":10},"end":{"line":556,"column":27}},"276":{"start":{"line":556,"column":20},"end":{"line":556,"column":27}},"277":{"start":{"line":557,"column":10},"end":{"line":557,"column":18}},"278":{"start":{"line":558,"column":10},"end":{"line":561,"column":11}},"279":{"start":{"line":559,"column":12},"end":{"line":559,"column":24}},"280":{"start":{"line":560,"column":12},"end":{"line":560,"column":33}},"281":{"start":{"line":562,"column":10},"end":{"line":564,"column":11}},"282":{"start":{"line":563,"column":12},"end":{"line":563,"column":53}},"283":{"start":{"line":565,"column":10},"end":{"line":568,"column":11}},"284":{"start":{"line":566,"column":12},"end":{"line":566,"column":24}},"285":{"start":{"line":567,"column":12},"end":{"line":567,"column":36}},"286":{"start":{"line":575,"column":0},"end":{"line":575,"column":73}},"287":{"start":{"line":576,"column":0},"end":{"line":576,"column":44}},"288":{"start":{"line":577,"column":0},"end":{"line":577,"column":35}},"289":{"start":{"line":578,"column":0},"end":{"line":578,"column":31}},"290":{"start":{"line":580,"column":0},"end":{"line":580,"column":22}},"291":{"start":{"line":583,"column":2},"end":{"line":585,"column":5}},"292":{"start":{"line":584,"column":4},"end":{"line":584,"column":50}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":30,"column":2},"end":{"line":30,"column":3}},"loc":{"start":{"line":30,"column":40},"end":{"line":41,"column":3}},"line":30},"1":{"name":"(anonymous_1)","decl":{"start":{"line":43,"column":2},"end":{"line":43,"column":3}},"loc":{"start":{"line":43,"column":17},"end":{"line":47,"column":3}},"line":43},"2":{"name":"(anonymous_2)","decl":{"start":{"line":44,"column":33},"end":{"line":44,"column":34}},"loc":{"start":{"line":44,"column":54},"end":{"line":46,"column":5}},"line":44},"3":{"name":"(anonymous_3)","decl":{"start":{"line":49,"column":2},"end":{"line":49,"column":3}},"loc":{"start":{"line":49,"column":13},"end":{"line":57,"column":3}},"line":49},"4":{"name":"(anonymous_4)","decl":{"start":{"line":51,"column":32},"end":{"line":51,"column":33}},"loc":{"start":{"line":51,"column":53},"end":{"line":53,"column":5}},"line":51},"5":{"name":"(anonymous_5)","decl":{"start":{"line":59,"column":2},"end":{"line":59,"column":3}},"loc":{"start":{"line":59,"column":39},"end":{"line":139,"column":3}},"line":59},"6":{"name":"(anonymous_6)","decl":{"start":{"line":74,"column":24},"end":{"line":74,"column":25}},"loc":{"start":{"line":74,"column":43},"end":{"line":132,"column":5}},"line":74},"7":{"name":"(anonymous_7)","decl":{"start":{"line":81,"column":37},"end":{"line":81,"column":38}},"loc":{"start":{"line":81,"column":51},"end":{"line":131,"column":7}},"line":81},"8":{"name":"(anonymous_8)","decl":{"start":{"line":141,"column":2},"end":{"line":141,"column":3}},"loc":{"start":{"line":141,"column":30},"end":{"line":187,"column":3}},"line":141},"9":{"name":"(anonymous_9)","decl":{"start":{"line":189,"column":2},"end":{"line":189,"column":3}},"loc":{"start":{"line":189,"column":52},"end":{"line":260,"column":3}},"line":189},"10":{"name":"(anonymous_10)","decl":{"start":{"line":217,"column":21},"end":{"line":217,"column":22}},"loc":{"start":{"line":217,"column":51},"end":{"line":248,"column":5}},"line":217},"11":{"name":"(anonymous_11)","decl":{"start":{"line":233,"column":56},"end":{"line":233,"column":57}},"loc":{"start":{"line":233,"column":72},"end":{"line":238,"column":9}},"line":233},"12":{"name":"(anonymous_12)","decl":{"start":{"line":245,"column":51},"end":{"line":245,"column":52}},"loc":{"start":{"line":245,"column":66},"end":{"line":247,"column":7}},"line":245},"13":{"name":"(anonymous_13)","decl":{"start":{"line":254,"column":38},"end":{"line":254,"column":39}},"loc":{"start":{"line":254,"column":59},"end":{"line":256,"column":7}},"line":254},"14":{"name":"(anonymous_14)","decl":{"start":{"line":262,"column":2},"end":{"line":262,"column":3}},"loc":{"start":{"line":262,"column":38},"end":{"line":272,"column":3}},"line":262},"15":{"name":"(anonymous_15)","decl":{"start":{"line":274,"column":2},"end":{"line":274,"column":3}},"loc":{"start":{"line":274,"column":21},"end":{"line":281,"column":3}},"line":274},"16":{"name":"(anonymous_16)","decl":{"start":{"line":283,"column":2},"end":{"line":283,"column":3}},"loc":{"start":{"line":283,"column":10},"end":{"line":285,"column":3}},"line":283},"17":{"name":"(anonymous_17)","decl":{"start":{"line":287,"column":2},"end":{"line":287,"column":3}},"loc":{"start":{"line":287,"column":19},"end":{"line":289,"column":3}},"line":287},"18":{"name":"(anonymous_18)","decl":{"start":{"line":291,"column":2},"end":{"line":291,"column":3}},"loc":{"start":{"line":291,"column":14},"end":{"line":360,"column":3}},"line":291},"19":{"name":"(anonymous_19)","decl":{"start":{"line":301,"column":18},"end":{"line":301,"column":19}},"loc":{"start":{"line":301,"column":33},"end":{"line":338,"column":5}},"line":301},"20":{"name":"(anonymous_20)","decl":{"start":{"line":340,"column":19},"end":{"line":340,"column":20}},"loc":{"start":{"line":340,"column":34},"end":{"line":350,"column":5}},"line":340},"21":{"name":"(anonymous_21)","decl":{"start":{"line":352,"column":15},"end":{"line":352,"column":16}},"loc":{"start":{"line":352,"column":29},"end":{"line":354,"column":5}},"line":352},"22":{"name":"(anonymous_22)","decl":{"start":{"line":362,"column":2},"end":{"line":362,"column":3}},"loc":{"start":{"line":362,"column":16},"end":{"line":365,"column":3}},"line":362},"23":{"name":"(anonymous_23)","decl":{"start":{"line":367,"column":2},"end":{"line":367,"column":3}},"loc":{"start":{"line":367,"column":26},"end":{"line":368,"column":3}},"line":367},"24":{"name":"(anonymous_24)","decl":{"start":{"line":370,"column":2},"end":{"line":370,"column":3}},"loc":{"start":{"line":370,"column":14},"end":{"line":395,"column":3}},"line":370},"25":{"name":"(anonymous_25)","decl":{"start":{"line":415,"column":2},"end":{"line":415,"column":3}},"loc":{"start":{"line":415,"column":38},"end":{"line":438,"column":3}},"line":415},"26":{"name":"(anonymous_26)","decl":{"start":{"line":440,"column":2},"end":{"line":440,"column":3}},"loc":{"start":{"line":440,"column":38},"end":{"line":494,"column":3}},"line":440},"27":{"name":"(anonymous_27)","decl":{"start":{"line":463,"column":31},"end":{"line":463,"column":32}},"loc":{"start":{"line":463,"column":57},"end":{"line":473,"column":7}},"line":463},"28":{"name":"(anonymous_28)","decl":{"start":{"line":478,"column":8},"end":{"line":478,"column":9}},"loc":{"start":{"line":478,"column":44},"end":{"line":490,"column":9}},"line":478},"29":{"name":"(anonymous_29)","decl":{"start":{"line":496,"column":2},"end":{"line":496,"column":3}},"loc":{"start":{"line":496,"column":32},"end":{"line":518,"column":3}},"line":496},"30":{"name":"(anonymous_30)","decl":{"start":{"line":520,"column":2},"end":{"line":520,"column":3}},"loc":{"start":{"line":520,"column":32},"end":{"line":545,"column":3}},"line":520},"31":{"name":"(anonymous_31)","decl":{"start":{"line":547,"column":2},"end":{"line":547,"column":3}},"loc":{"start":{"line":547,"column":37},"end":{"line":572,"column":3}},"line":547},"32":{"name":"(anonymous_32)","decl":{"start":{"line":550,"column":23},"end":{"line":550,"column":24}},"loc":{"start":{"line":550,"column":44},"end":{"line":571,"column":5}},"line":550},"33":{"name":"(anonymous_33)","decl":{"start":{"line":554,"column":20},"end":{"line":554,"column":21}},"loc":{"start":{"line":554,"column":32},"end":{"line":570,"column":7}},"line":554},"34":{"name":"(anonymous_34)","decl":{"start":{"line":555,"column":44},"end":{"line":555,"column":45}},"loc":{"start":{"line":555,"column":64},"end":{"line":569,"column":9}},"line":555},"35":{"name":"deepMerge","decl":{"start":{"line":582,"column":9},"end":{"line":582,"column":18}},"loc":{"start":{"line":582,"column":40},"end":{"line":586,"column":1}},"line":582},"36":{"name":"(anonymous_36)","decl":{"start":{"line":583,"column":48},"end":{"line":583,"column":49}},"loc":{"start":{"line":583,"column":63},"end":{"line":585,"column":3}},"line":583}},"branchMap":{"0":{"loc":{"start":{"line":32,"column":11},"end":{"line":33,"column":39}},"type":"binary-expr","locations":[{"start":{"line":32,"column":11},"end":{"line":32,"column":31}},{"start":{"line":32,"column":36},"end":{"line":32,"column":68}},{"start":{"line":33,"column":6},"end":{"line":33,"column":38}}],"line":32},"1":{"loc":{"start":{"line":39,"column":22},"end":{"line":39,"column":54}},"type":"binary-expr","locations":[{"start":{"line":39,"column":22},"end":{"line":39,"column":48}},{"start":{"line":39,"column":52},"end":{"line":39,"column":54}}],"line":39},"2":{"loc":{"start":{"line":39,"column":23},"end":{"line":39,"column":36}},"type":"binary-expr","locations":[{"start":{"line":39,"column":23},"end":{"line":39,"column":30}},{"start":{"line":39,"column":34},"end":{"line":39,"column":36}}],"line":39},"3":{"loc":{"start":{"line":63,"column":4},"end":{"line":69,"column":5}},"type":"if","locations":[{"start":{"line":63,"column":4},"end":{"line":69,"column":5}},{"start":{"line":63,"column":4},"end":{"line":69,"column":5}}],"line":63},"4":{"loc":{"start":{"line":67,"column":9},"end":{"line":69,"column":5}},"type":"if","locations":[{"start":{"line":67,"column":9},"end":{"line":69,"column":5}},{"start":{"line":67,"column":9},"end":{"line":69,"column":5}}],"line":67},"5":{"loc":{"start":{"line":83,"column":8},"end":{"line":85,"column":9}},"type":"if","locations":[{"start":{"line":83,"column":8},"end":{"line":85,"column":9}},{"start":{"line":83,"column":8},"end":{"line":85,"column":9}}],"line":83},"6":{"loc":{"start":{"line":92,"column":8},"end":{"line":100,"column":9}},"type":"if","locations":[{"start":{"line":92,"column":8},"end":{"line":100,"column":9}},{"start":{"line":92,"column":8},"end":{"line":100,"column":9}}],"line":92},"7":{"loc":{"start":{"line":107,"column":10},"end":{"line":109,"column":11}},"type":"if","locations":[{"start":{"line":107,"column":10},"end":{"line":109,"column":11}},{"start":{"line":107,"column":10},"end":{"line":109,"column":11}}],"line":107},"8":{"loc":{"start":{"line":110,"column":10},"end":{"line":111,"column":21}},"type":"if","locations":[{"start":{"line":110,"column":10},"end":{"line":111,"column":21}},{"start":{"line":110,"column":10},"end":{"line":111,"column":21}}],"line":110},"9":{"loc":{"start":{"line":115,"column":12},"end":{"line":124,"column":13}},"type":"if","locations":[{"start":{"line":115,"column":12},"end":{"line":124,"column":13}},{"start":{"line":115,"column":12},"end":{"line":124,"column":13}}],"line":115},"10":{"loc":{"start":{"line":118,"column":14},"end":{"line":119,"column":65}},"type":"if","locations":[{"start":{"line":118,"column":14},"end":{"line":119,"column":65}},{"start":{"line":118,"column":14},"end":{"line":119,"column":65}}],"line":118},"11":{"loc":{"start":{"line":134,"column":4},"end":{"line":138,"column":5}},"type":"if","locations":[{"start":{"line":134,"column":4},"end":{"line":138,"column":5}},{"start":{"line":134,"column":4},"end":{"line":138,"column":5}}],"line":134},"12":{"loc":{"start":{"line":142,"column":39},"end":{"line":142,"column":52}},"type":"binary-expr","locations":[{"start":{"line":142,"column":39},"end":{"line":142,"column":46}},{"start":{"line":142,"column":50},"end":{"line":142,"column":52}}],"line":142},"13":{"loc":{"start":{"line":145,"column":28},"end":{"line":145,"column":70}},"type":"cond-expr","locations":[{"start":{"line":145,"column":38},"end":{"line":145,"column":63}},{"start":{"line":145,"column":66},"end":{"line":145,"column":70}}],"line":145},"14":{"loc":{"start":{"line":147,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":147,"column":4},"end":{"line":158,"column":5}},{"start":{"line":147,"column":4},"end":{"line":158,"column":5}}],"line":147},"15":{"loc":{"start":{"line":147,"column":8},"end":{"line":149,"column":55}},"type":"binary-expr","locations":[{"start":{"line":147,"column":8},"end":{"line":147,"column":25}},{"start":{"line":148,"column":7},"end":{"line":148,"column":50}},{"start":{"line":149,"column":6},"end":{"line":149,"column":54}}],"line":147},"16":{"loc":{"start":{"line":150,"column":6},"end":{"line":155,"column":7}},"type":"if","locations":[{"start":{"line":150,"column":6},"end":{"line":155,"column":7}},{"start":{"line":150,"column":6},"end":{"line":155,"column":7}}],"line":150},"17":{"loc":{"start":{"line":162,"column":28},"end":{"line":162,"column":61}},"type":"binary-expr","locations":[{"start":{"line":162,"column":28},"end":{"line":162,"column":44}},{"start":{"line":162,"column":48},"end":{"line":162,"column":61}}],"line":162},"18":{"loc":{"start":{"line":163,"column":26},"end":{"line":163,"column":55}},"type":"binary-expr","locations":[{"start":{"line":163,"column":26},"end":{"line":163,"column":40}},{"start":{"line":163,"column":44},"end":{"line":163,"column":55}}],"line":163},"19":{"loc":{"start":{"line":169,"column":4},"end":{"line":171,"column":5}},"type":"if","locations":[{"start":{"line":169,"column":4},"end":{"line":171,"column":5}},{"start":{"line":169,"column":4},"end":{"line":171,"column":5}}],"line":169},"20":{"loc":{"start":{"line":173,"column":4},"end":{"line":175,"column":5}},"type":"if","locations":[{"start":{"line":173,"column":4},"end":{"line":175,"column":5}},{"start":{"line":173,"column":4},"end":{"line":175,"column":5}}],"line":173},"21":{"loc":{"start":{"line":177,"column":31},"end":{"line":177,"column":76}},"type":"cond-expr","locations":[{"start":{"line":177,"column":41},"end":{"line":177,"column":69}},{"start":{"line":177,"column":72},"end":{"line":177,"column":76}}],"line":177},"22":{"loc":{"start":{"line":178,"column":4},"end":{"line":182,"column":68}},"type":"if","locations":[{"start":{"line":178,"column":4},"end":{"line":182,"column":68}},{"start":{"line":178,"column":4},"end":{"line":182,"column":68}}],"line":178},"23":{"loc":{"start":{"line":178,"column":8},"end":{"line":179,"column":49}},"type":"binary-expr","locations":[{"start":{"line":178,"column":8},"end":{"line":178,"column":37}},{"start":{"line":179,"column":6},"end":{"line":179,"column":49}}],"line":178},"24":{"loc":{"start":{"line":184,"column":4},"end":{"line":186,"column":5}},"type":"if","locations":[{"start":{"line":184,"column":4},"end":{"line":186,"column":5}},{"start":{"line":184,"column":4},"end":{"line":186,"column":5}}],"line":184},"25":{"loc":{"start":{"line":195,"column":4},"end":{"line":196,"column":24}},"type":"if","locations":[{"start":{"line":195,"column":4},"end":{"line":196,"column":24}},{"start":{"line":195,"column":4},"end":{"line":196,"column":24}}],"line":195},"26":{"loc":{"start":{"line":199,"column":4},"end":{"line":201,"column":5}},"type":"if","locations":[{"start":{"line":199,"column":4},"end":{"line":201,"column":5}},{"start":{"line":199,"column":4},"end":{"line":201,"column":5}}],"line":199},"27":{"loc":{"start":{"line":204,"column":4},"end":{"line":208,"column":5}},"type":"if","locations":[{"start":{"line":204,"column":4},"end":{"line":208,"column":5}},{"start":{"line":204,"column":4},"end":{"line":208,"column":5}}],"line":204},"28":{"loc":{"start":{"line":204,"column":8},"end":{"line":204,"column":72}},"type":"binary-expr","locations":[{"start":{"line":204,"column":8},"end":{"line":204,"column":34}},{"start":{"line":204,"column":38},"end":{"line":204,"column":72}}],"line":204},"29":{"loc":{"start":{"line":214,"column":32},"end":{"line":214,"column":97}},"type":"binary-expr","locations":[{"start":{"line":214,"column":32},"end":{"line":214,"column":63}},{"start":{"line":214,"column":67},"end":{"line":214,"column":97}}],"line":214},"30":{"loc":{"start":{"line":218,"column":6},"end":{"line":220,"column":7}},"type":"if","locations":[{"start":{"line":218,"column":6},"end":{"line":220,"column":7}},{"start":{"line":218,"column":6},"end":{"line":220,"column":7}}],"line":218},"31":{"loc":{"start":{"line":224,"column":6},"end":{"line":244,"column":7}},"type":"if","locations":[{"start":{"line":224,"column":6},"end":{"line":244,"column":7}},{"start":{"line":224,"column":6},"end":{"line":244,"column":7}}],"line":224},"32":{"loc":{"start":{"line":226,"column":8},"end":{"line":232,"column":9}},"type":"if","locations":[{"start":{"line":226,"column":8},"end":{"line":232,"column":9}},{"start":{"line":226,"column":8},"end":{"line":232,"column":9}}],"line":226},"33":{"loc":{"start":{"line":227,"column":10},"end":{"line":231,"column":11}},"type":"if","locations":[{"start":{"line":227,"column":10},"end":{"line":231,"column":11}},{"start":{"line":227,"column":10},"end":{"line":231,"column":11}}],"line":227},"34":{"loc":{"start":{"line":234,"column":10},"end":{"line":236,"column":11}},"type":"if","locations":[{"start":{"line":234,"column":10},"end":{"line":236,"column":11}},{"start":{"line":234,"column":10},"end":{"line":236,"column":11}}],"line":234},"35":{"loc":{"start":{"line":237,"column":17},"end":{"line":237,"column":91}},"type":"cond-expr","locations":[{"start":{"line":237,"column":41},"end":{"line":237,"column":79}},{"start":{"line":237,"column":82},"end":{"line":237,"column":91}}],"line":237},"36":{"loc":{"start":{"line":240,"column":33},"end":{"line":241,"column":41}},"type":"binary-expr","locations":[{"start":{"line":240,"column":33},"end":{"line":240,"column":50}},{"start":{"line":241,"column":8},"end":{"line":241,"column":41}}],"line":240},"37":{"loc":{"start":{"line":242,"column":45},"end":{"line":243,"column":43}},"type":"binary-expr","locations":[{"start":{"line":242,"column":45},"end":{"line":242,"column":62}},{"start":{"line":243,"column":10},"end":{"line":243,"column":43}}],"line":242},"38":{"loc":{"start":{"line":250,"column":4},"end":{"line":258,"column":5}},"type":"if","locations":[{"start":{"line":250,"column":4},"end":{"line":258,"column":5}},{"start":{"line":250,"column":4},"end":{"line":258,"column":5}}],"line":250},"39":{"loc":{"start":{"line":268,"column":33},"end":{"line":268,"column":54}},"type":"binary-expr","locations":[{"start":{"line":268,"column":33},"end":{"line":268,"column":48}},{"start":{"line":268,"column":52},"end":{"line":268,"column":54}}],"line":268},"40":{"loc":{"start":{"line":284,"column":11},"end":{"line":284,"column":25}},"type":"binary-expr","locations":[{"start":{"line":284,"column":11},"end":{"line":284,"column":19}},{"start":{"line":284,"column":23},"end":{"line":284,"column":25}}],"line":284},"41":{"loc":{"start":{"line":309,"column":6},"end":{"line":337,"column":7}},"type":"if","locations":[{"start":{"line":309,"column":6},"end":{"line":337,"column":7}},{"start":{"line":309,"column":6},"end":{"line":337,"column":7}}],"line":309},"42":{"loc":{"start":{"line":314,"column":10},"end":{"line":318,"column":11}},"type":"if","locations":[{"start":{"line":314,"column":10},"end":{"line":318,"column":11}},{"start":{"line":314,"column":10},"end":{"line":318,"column":11}}],"line":314},"43":{"loc":{"start":{"line":322,"column":8},"end":{"line":336,"column":9}},"type":"if","locations":[{"start":{"line":322,"column":8},"end":{"line":336,"column":9}},{"start":{"line":322,"column":8},"end":{"line":336,"column":9}}],"line":322},"44":{"loc":{"start":{"line":325,"column":15},"end":{"line":336,"column":9}},"type":"if","locations":[{"start":{"line":325,"column":15},"end":{"line":336,"column":9}},{"start":{"line":325,"column":15},"end":{"line":336,"column":9}}],"line":325},"45":{"loc":{"start":{"line":345,"column":6},"end":{"line":348,"column":7}},"type":"if","locations":[{"start":{"line":345,"column":6},"end":{"line":348,"column":7}},{"start":{"line":345,"column":6},"end":{"line":348,"column":7}}],"line":345},"46":{"loc":{"start":{"line":374,"column":6},"end":{"line":375,"column":17}},"type":"if","locations":[{"start":{"line":374,"column":6},"end":{"line":375,"column":17}},{"start":{"line":374,"column":6},"end":{"line":375,"column":17}}],"line":374},"47":{"loc":{"start":{"line":374,"column":10},"end":{"line":374,"column":50}},"type":"binary-expr","locations":[{"start":{"line":374,"column":10},"end":{"line":374,"column":23}},{"start":{"line":374,"column":27},"end":{"line":374,"column":50}}],"line":374},"48":{"loc":{"start":{"line":377,"column":6},"end":{"line":385,"column":7}},"type":"switch","locations":[{"start":{"line":378,"column":8},"end":{"line":378,"column":47}},{"start":{"line":379,"column":8},"end":{"line":379,"column":49}},{"start":{"line":380,"column":8},"end":{"line":380,"column":54}},{"start":{"line":381,"column":8},"end":{"line":381,"column":55}},{"start":{"line":382,"column":8},"end":{"line":382,"column":58}},{"start":{"line":383,"column":8},"end":{"line":384,"column":19}}],"line":377},"49":{"loc":{"start":{"line":386,"column":6},"end":{"line":387,"column":17}},"type":"if","locations":[{"start":{"line":386,"column":6},"end":{"line":387,"column":17}},{"start":{"line":386,"column":6},"end":{"line":387,"column":17}}],"line":386},"50":{"loc":{"start":{"line":388,"column":6},"end":{"line":389,"column":17}},"type":"if","locations":[{"start":{"line":388,"column":6},"end":{"line":389,"column":17}},{"start":{"line":388,"column":6},"end":{"line":389,"column":17}}],"line":388},"51":{"loc":{"start":{"line":390,"column":6},"end":{"line":391,"column":17}},"type":"if","locations":[{"start":{"line":390,"column":6},"end":{"line":391,"column":17}},{"start":{"line":390,"column":6},"end":{"line":391,"column":17}}],"line":390},"52":{"loc":{"start":{"line":419,"column":4},"end":{"line":422,"column":5}},"type":"if","locations":[{"start":{"line":419,"column":4},"end":{"line":422,"column":5}},{"start":{"line":419,"column":4},"end":{"line":422,"column":5}}],"line":419},"53":{"loc":{"start":{"line":426,"column":4},"end":{"line":435,"column":5}},"type":"if","locations":[{"start":{"line":426,"column":4},"end":{"line":435,"column":5}},{"start":{"line":426,"column":4},"end":{"line":435,"column":5}}],"line":426},"54":{"loc":{"start":{"line":432,"column":6},"end":{"line":434,"column":7}},"type":"if","locations":[{"start":{"line":432,"column":6},"end":{"line":434,"column":7}},{"start":{"line":432,"column":6},"end":{"line":434,"column":7}}],"line":432},"55":{"loc":{"start":{"line":441,"column":4},"end":{"line":444,"column":5}},"type":"if","locations":[{"start":{"line":441,"column":4},"end":{"line":444,"column":5}},{"start":{"line":441,"column":4},"end":{"line":444,"column":5}}],"line":441},"56":{"loc":{"start":{"line":447,"column":21},"end":{"line":447,"column":45}},"type":"binary-expr","locations":[{"start":{"line":447,"column":21},"end":{"line":447,"column":39}},{"start":{"line":447,"column":43},"end":{"line":447,"column":45}}],"line":447},"57":{"loc":{"start":{"line":458,"column":4},"end":{"line":491,"column":5}},"type":"if","locations":[{"start":{"line":458,"column":4},"end":{"line":491,"column":5}},{"start":{"line":458,"column":4},"end":{"line":491,"column":5}}],"line":458},"58":{"loc":{"start":{"line":458,"column":8},"end":{"line":458,"column":40}},"type":"binary-expr","locations":[{"start":{"line":458,"column":8},"end":{"line":458,"column":17}},{"start":{"line":458,"column":21},"end":{"line":458,"column":40}}],"line":458},"59":{"loc":{"start":{"line":461,"column":9},"end":{"line":491,"column":5}},"type":"if","locations":[{"start":{"line":461,"column":9},"end":{"line":491,"column":5}},{"start":{"line":461,"column":9},"end":{"line":491,"column":5}}],"line":461},"60":{"loc":{"start":{"line":464,"column":8},"end":{"line":472,"column":9}},"type":"if","locations":[{"start":{"line":464,"column":8},"end":{"line":472,"column":9}},{"start":{"line":464,"column":8},"end":{"line":472,"column":9}}],"line":464},"61":{"loc":{"start":{"line":476,"column":23},"end":{"line":476,"column":68}},"type":"binary-expr","locations":[{"start":{"line":476,"column":23},"end":{"line":476,"column":41}},{"start":{"line":476,"column":45},"end":{"line":476,"column":68}}],"line":476},"62":{"loc":{"start":{"line":479,"column":10},"end":{"line":489,"column":11}},"type":"if","locations":[{"start":{"line":479,"column":10},"end":{"line":489,"column":11}},{"start":{"line":479,"column":10},"end":{"line":489,"column":11}}],"line":479},"63":{"loc":{"start":{"line":481,"column":17},"end":{"line":489,"column":11}},"type":"if","locations":[{"start":{"line":481,"column":17},"end":{"line":489,"column":11}},{"start":{"line":481,"column":17},"end":{"line":489,"column":11}}],"line":481},"64":{"loc":{"start":{"line":481,"column":21},"end":{"line":481,"column":60}},"type":"binary-expr","locations":[{"start":{"line":481,"column":21},"end":{"line":481,"column":29}},{"start":{"line":481,"column":33},"end":{"line":481,"column":60}}],"line":481},"65":{"loc":{"start":{"line":500,"column":4},"end":{"line":502,"column":5}},"type":"if","locations":[{"start":{"line":500,"column":4},"end":{"line":502,"column":5}},{"start":{"line":500,"column":4},"end":{"line":502,"column":5}}],"line":500},"66":{"loc":{"start":{"line":506,"column":4},"end":{"line":515,"column":5}},"type":"if","locations":[{"start":{"line":506,"column":4},"end":{"line":515,"column":5}},{"start":{"line":506,"column":4},"end":{"line":515,"column":5}}],"line":506},"67":{"loc":{"start":{"line":512,"column":6},"end":{"line":514,"column":7}},"type":"if","locations":[{"start":{"line":512,"column":6},"end":{"line":514,"column":7}},{"start":{"line":512,"column":6},"end":{"line":514,"column":7}}],"line":512},"68":{"loc":{"start":{"line":521,"column":4},"end":{"line":523,"column":5}},"type":"if","locations":[{"start":{"line":521,"column":4},"end":{"line":523,"column":5}},{"start":{"line":521,"column":4},"end":{"line":523,"column":5}}],"line":521},"69":{"loc":{"start":{"line":526,"column":21},"end":{"line":526,"column":45}},"type":"binary-expr","locations":[{"start":{"line":526,"column":21},"end":{"line":526,"column":39}},{"start":{"line":526,"column":43},"end":{"line":526,"column":45}}],"line":526},"70":{"loc":{"start":{"line":538,"column":4},"end":{"line":542,"column":5}},"type":"if","locations":[{"start":{"line":538,"column":4},"end":{"line":542,"column":5}},{"start":{"line":538,"column":4},"end":{"line":542,"column":5}}],"line":538},"71":{"loc":{"start":{"line":538,"column":8},"end":{"line":538,"column":40}},"type":"binary-expr","locations":[{"start":{"line":538,"column":8},"end":{"line":538,"column":17}},{"start":{"line":538,"column":21},"end":{"line":538,"column":40}}],"line":538},"72":{"loc":{"start":{"line":551,"column":6},"end":{"line":551,"column":36}},"type":"if","locations":[{"start":{"line":551,"column":6},"end":{"line":551,"column":36}},{"start":{"line":551,"column":6},"end":{"line":551,"column":36}}],"line":551},"73":{"loc":{"start":{"line":556,"column":10},"end":{"line":556,"column":27}},"type":"if","locations":[{"start":{"line":556,"column":10},"end":{"line":556,"column":27}},{"start":{"line":556,"column":10},"end":{"line":556,"column":27}}],"line":556},"74":{"loc":{"start":{"line":558,"column":10},"end":{"line":561,"column":11}},"type":"if","locations":[{"start":{"line":558,"column":10},"end":{"line":561,"column":11}},{"start":{"line":558,"column":10},"end":{"line":561,"column":11}}],"line":558},"75":{"loc":{"start":{"line":565,"column":10},"end":{"line":568,"column":11}},"type":"if","locations":[{"start":{"line":565,"column":10},"end":{"line":568,"column":11}},{"start":{"line":565,"column":10},"end":{"line":568,"column":11}}],"line":565},"76":{"loc":{"start":{"line":583,"column":21},"end":{"line":583,"column":38}},"type":"binary-expr","locations":[{"start":{"line":583,"column":21},"end":{"line":583,"column":32}},{"start":{"line":583,"column":36},"end":{"line":583,"column":38}}],"line":583},"77":{"loc":{"start":{"line":584,"column":11},"end":{"line":584,"column":49}},"type":"cond-expr","locations":[{"start":{"line":584,"column":26},"end":{"line":584,"column":37}},{"start":{"line":584,"column":40},"end":{"line":584,"column":49}}],"line":584}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":342,"20":342,"21":342,"22":342,"23":342,"24":342,"25":335,"26":335,"27":5,"28":4,"29":4,"30":340,"31":340,"32":340,"33":340,"34":340,"35":0,"36":0,"37":340,"38":340,"39":340,"40":340,"41":1,"42":339,"43":338,"44":1,"45":337,"46":337,"47":766,"48":337,"49":337,"50":337,"51":165,"52":165,"53":1,"54":336,"55":336,"56":169,"57":169,"58":14,"59":169,"60":20,"61":149,"62":149,"63":149,"64":213,"65":211,"66":211,"67":211,"68":178,"69":211,"70":336,"71":336,"72":340,"73":5,"74":335,"75":342,"76":342,"77":342,"78":342,"79":6,"80":6,"81":0,"82":336,"83":342,"84":342,"85":342,"86":342,"87":342,"88":342,"89":3,"90":342,"91":0,"92":342,"93":342,"94":171,"95":171,"96":342,"97":0,"98":679,"99":679,"100":679,"101":679,"102":337,"103":342,"104":1,"105":342,"106":340,"107":2,"108":342,"109":342,"110":342,"111":342,"112":342,"113":341,"114":1,"115":340,"116":340,"117":340,"118":1,"119":1,"120":1,"121":340,"122":6646,"123":3340,"124":3306,"125":0,"126":340,"127":340,"128":342,"129":3,"130":2,"131":339,"132":339,"133":339,"134":339,"135":339,"136":338,"137":338,"138":339,"139":38,"140":38,"141":38,"142":38,"143":37,"144":7,"145":0,"146":340,"147":340,"148":340,"149":340,"150":340,"151":340,"152":340,"153":340,"154":340,"155":66207,"156":66207,"157":66207,"158":66207,"159":66207,"160":66207,"161":65868,"162":65868,"163":0,"164":0,"165":0,"166":0,"167":339,"168":339,"169":169,"170":169,"171":170,"172":170,"173":170,"174":170,"175":170,"176":170,"177":170,"178":0,"179":340,"180":66207,"181":66207,"182":66207,"183":66207,"184":33,"185":33,"186":66207,"187":340,"188":42,"189":340,"190":340,"191":339,"192":340,"193":339,"194":336,"195":336,"196":336,"197":1003,"198":65,"199":938,"200":938,"201":542,"202":396,"203":61,"204":335,"205":16,"206":319,"207":0,"208":319,"209":336,"210":339,"211":0,"212":0,"213":339,"214":339,"215":168,"216":166,"217":173,"218":296,"219":7,"220":7,"221":296,"222":296,"223":296,"224":296,"225":296,"226":296,"227":2,"228":294,"229":283,"230":283,"231":283,"232":0,"233":283,"234":283,"235":283,"236":283,"237":11,"238":11,"239":11,"240":2,"241":9,"242":9,"243":9,"244":9,"245":9,"246":0,"247":296,"248":3,"249":0,"250":3,"251":3,"252":2,"253":0,"254":3,"255":3,"256":0,"257":3,"258":3,"259":3,"260":3,"261":3,"262":3,"263":2,"264":1,"265":2,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":1,"287":1,"288":1,"289":1,"290":1,"291":0,"292":0},"f":{"0":342,"1":335,"2":335,"3":5,"4":4,"5":340,"6":340,"7":338,"8":342,"9":679,"10":341,"11":6646,"12":340,"13":339,"14":339,"15":38,"16":7,"17":0,"18":340,"19":66207,"20":66207,"21":42,"22":340,"23":0,"24":336,"25":339,"26":296,"27":283,"28":11,"29":3,"30":3,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0},"b":{"0":[342,342,0],"1":[342,161],"2":[342,0],"3":[340,0],"4":[0,0],"5":[1,337],"6":[337,0],"7":[14,155],"8":[20,149],"9":[211,2],"10":[178,33],"11":[5,335],"12":[342,0],"13":[342,0],"14":[6,336],"15":[342,174,168],"16":[6,0],"17":[342,171],"18":[342,172],"19":[3,339],"20":[0,342],"21":[342,0],"22":[171,171],"23":[342,342],"24":[0,342],"25":[337,342],"26":[1,341],"27":[340,2],"28":[342,341],"29":[342,120],"30":[1,340],"31":[340,0],"32":[1,339],"33":[1,0],"34":[3340,3306],"35":[27,3279],"36":[0,0],"37":[0,0],"38":[3,339],"39":[338,0],"40":[7,0],"41":[65868,339],"42":[0,0],"43":[169,170],"44":[170,0],"45":[33,66174],"46":[65,938],"47":[1003,938],"48":[2,145,297,317,367,542],"49":[61,335],"50":[16,319],"51":[0,319],"52":[0,339],"53":[168,171],"54":[166,2],"55":[7,289],"56":[296,123],"57":[2,294],"58":[296,2],"59":[283,11],"60":[0,283],"61":[11,8],"62":[2,9],"63":[9,0],"64":[9,9],"65":[0,3],"66":[2,1],"67":[0,2],"68":[0,3],"69":[3,0],"70":[2,1],"71":[3,2],"72":[0,0],"73":[0,0],"74":[0,0],"75":[0,0],"76":[0,0],"77":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"6588e7e842f8da391f59c4e40c729a51ffd229aa","contentHash":"4215c4cee5f078fb423a518c68bd60e5d49bdd9a2af361024e73157eae006321"},"/Users/rfeng/Projects/loopback3/strong-soap/src/strip-bom.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/strip-bom.js","statementMap":{"0":{"start":{"line":12,"column":0},"end":{"line":12,"column":26}},"1":{"start":{"line":16,"column":1},"end":{"line":18,"column":2}},"2":{"start":{"line":17,"column":2},"end":{"line":17,"column":56}},"3":{"start":{"line":19,"column":13},"end":{"line":19,"column":29}},"4":{"start":{"line":21,"column":13},"end":{"line":21,"column":16}},"5":{"start":{"line":22,"column":1},"end":{"line":24,"column":2}},"6":{"start":{"line":23,"column":2},"end":{"line":23,"column":31}},"7":{"start":{"line":25,"column":1},"end":{"line":27,"column":2}},"8":{"start":{"line":26,"column":2},"end":{"line":26,"column":31}},"9":{"start":{"line":28,"column":1},"end":{"line":30,"column":2}},"10":{"start":{"line":29,"column":2},"end":{"line":29,"column":33}},"11":{"start":{"line":31,"column":1},"end":{"line":31,"column":14}}},"fnMap":{"0":{"name":"stripBom","decl":{"start":{"line":14,"column":9},"end":{"line":14,"column":17}},"loc":{"start":{"line":14,"column":22},"end":{"line":32,"column":1}},"line":14}},"branchMap":{"0":{"loc":{"start":{"line":16,"column":1},"end":{"line":18,"column":2}},"type":"if","locations":[{"start":{"line":16,"column":1},"end":{"line":18,"column":2}},{"start":{"line":16,"column":1},"end":{"line":18,"column":2}}],"line":16},"1":{"loc":{"start":{"line":22,"column":1},"end":{"line":24,"column":2}},"type":"if","locations":[{"start":{"line":22,"column":1},"end":{"line":24,"column":2}},{"start":{"line":22,"column":1},"end":{"line":24,"column":2}}],"line":22},"2":{"loc":{"start":{"line":22,"column":5},"end":{"line":22,"column":43}},"type":"binary-expr","locations":[{"start":{"line":22,"column":5},"end":{"line":22,"column":22}},{"start":{"line":22,"column":26},"end":{"line":22,"column":43}}],"line":22},"3":{"loc":{"start":{"line":25,"column":1},"end":{"line":27,"column":2}},"type":"if","locations":[{"start":{"line":25,"column":1},"end":{"line":27,"column":2}},{"start":{"line":25,"column":1},"end":{"line":27,"column":2}}],"line":25},"4":{"loc":{"start":{"line":25,"column":5},"end":{"line":25,"column":61}},"type":"binary-expr","locations":[{"start":{"line":25,"column":5},"end":{"line":25,"column":21}},{"start":{"line":25,"column":25},"end":{"line":25,"column":41}},{"start":{"line":25,"column":45},"end":{"line":25,"column":61}}],"line":25},"5":{"loc":{"start":{"line":28,"column":1},"end":{"line":30,"column":2}},"type":"if","locations":[{"start":{"line":28,"column":1},"end":{"line":30,"column":2}},{"start":{"line":28,"column":1},"end":{"line":30,"column":2}}],"line":28}},"s":{"0":1,"1":340,"2":0,"3":340,"4":340,"5":340,"6":0,"7":340,"8":11,"9":340,"10":11,"11":340},"f":{"0":340},"b":{"0":[0,340],"1":[0,340],"2":[340,0],"3":[11,329],"4":[340,11,11],"5":[11,329]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"fc8c5b183326c36acb7f6a80a91ddbbcdd4f9553","contentHash":"5faa64601ef75b97d9168227ce4ec2a47d4ba57e15aefca446dd6a17cc067210"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/definitions.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/definitions.js","statementMap":{"0":{"start":{"line":8,"column":8},"end":{"line":8,"column":25}},"1":{"start":{"line":9,"column":18},"end":{"line":9,"column":42}},"2":{"start":{"line":10,"column":13},"end":{"line":10,"column":37}},"3":{"start":{"line":11,"column":12},"end":{"line":11,"column":30}},"4":{"start":{"line":12,"column":14},"end":{"line":12,"column":34}},"5":{"start":{"line":13,"column":15},"end":{"line":13,"column":36}},"6":{"start":{"line":14,"column":14},"end":{"line":14,"column":34}},"7":{"start":{"line":15,"column":14},"end":{"line":15,"column":34}},"8":{"start":{"line":16,"column":20},"end":{"line":16,"column":46}},"9":{"start":{"line":20,"column":4},"end":{"line":20,"column":34}},"10":{"start":{"line":21,"column":4},"end":{"line":21,"column":23}},"11":{"start":{"line":22,"column":4},"end":{"line":22,"column":24}},"12":{"start":{"line":23,"column":4},"end":{"line":23,"column":23}},"13":{"start":{"line":24,"column":4},"end":{"line":24,"column":23}},"14":{"start":{"line":25,"column":4},"end":{"line":25,"column":22}},"15":{"start":{"line":29,"column":15},"end":{"line":29,"column":19}},"16":{"start":{"line":30,"column":4},"end":{"line":54,"column":5}},"17":{"start":{"line":32,"column":6},"end":{"line":32,"column":43}},"18":{"start":{"line":34,"column":9},"end":{"line":54,"column":5}},"19":{"start":{"line":35,"column":6},"end":{"line":35,"column":41}},"20":{"start":{"line":37,"column":9},"end":{"line":54,"column":5}},"21":{"start":{"line":39,"column":6},"end":{"line":39,"column":99}},"22":{"start":{"line":40,"column":6},"end":{"line":40,"column":53}},"23":{"start":{"line":42,"column":9},"end":{"line":54,"column":5}},"24":{"start":{"line":43,"column":6},"end":{"line":43,"column":42}},"25":{"start":{"line":45,"column":9},"end":{"line":54,"column":5}},"26":{"start":{"line":46,"column":6},"end":{"line":48,"column":43}},"27":{"start":{"line":48,"column":8},"end":{"line":48,"column":43}},"28":{"start":{"line":50,"column":9},"end":{"line":54,"column":5}},"29":{"start":{"line":51,"column":6},"end":{"line":51,"column":41}},"30":{"start":{"line":53,"column":9},"end":{"line":54,"column":5}},"31":{"start":{"line":58,"column":0},"end":{"line":58,"column":40}},"32":{"start":{"line":59,"column":0},"end":{"line":60,"column":57}},"33":{"start":{"line":62,"column":0},"end":{"line":62,"column":29}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":19,"column":2},"end":{"line":19,"column":3}},"loc":{"start":{"line":19,"column":38},"end":{"line":26,"column":3}},"line":19},"1":{"name":"(anonymous_1)","decl":{"start":{"line":28,"column":2},"end":{"line":28,"column":3}},"loc":{"start":{"line":28,"column":18},"end":{"line":55,"column":3}},"line":28}},"branchMap":{"0":{"loc":{"start":{"line":30,"column":4},"end":{"line":54,"column":5}},"type":"if","locations":[{"start":{"line":30,"column":4},"end":{"line":54,"column":5}},{"start":{"line":30,"column":4},"end":{"line":54,"column":5}}],"line":30},"1":{"loc":{"start":{"line":34,"column":9},"end":{"line":54,"column":5}},"type":"if","locations":[{"start":{"line":34,"column":9},"end":{"line":54,"column":5}},{"start":{"line":34,"column":9},"end":{"line":54,"column":5}}],"line":34},"2":{"loc":{"start":{"line":37,"column":9},"end":{"line":54,"column":5}},"type":"if","locations":[{"start":{"line":37,"column":9},"end":{"line":54,"column":5}},{"start":{"line":37,"column":9},"end":{"line":54,"column":5}}],"line":37},"3":{"loc":{"start":{"line":42,"column":9},"end":{"line":54,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":9},"end":{"line":54,"column":5}},{"start":{"line":42,"column":9},"end":{"line":54,"column":5}}],"line":42},"4":{"loc":{"start":{"line":45,"column":9},"end":{"line":54,"column":5}},"type":"if","locations":[{"start":{"line":45,"column":9},"end":{"line":54,"column":5}},{"start":{"line":45,"column":9},"end":{"line":54,"column":5}}],"line":45},"5":{"loc":{"start":{"line":46,"column":6},"end":{"line":48,"column":43}},"type":"if","locations":[{"start":{"line":46,"column":6},"end":{"line":48,"column":43}},{"start":{"line":46,"column":6},"end":{"line":48,"column":43}}],"line":46},"6":{"loc":{"start":{"line":46,"column":10},"end":{"line":47,"column":75}},"type":"binary-expr","locations":[{"start":{"line":46,"column":10},"end":{"line":46,"column":68}},{"start":{"line":47,"column":8},"end":{"line":47,"column":75}}],"line":46},"7":{"loc":{"start":{"line":50,"column":9},"end":{"line":54,"column":5}},"type":"if","locations":[{"start":{"line":50,"column":9},"end":{"line":54,"column":5}},{"start":{"line":50,"column":9},"end":{"line":54,"column":5}}],"line":50},"8":{"loc":{"start":{"line":53,"column":9},"end":{"line":54,"column":5}},"type":"if","locations":[{"start":{"line":53,"column":9},"end":{"line":54,"column":5}},{"start":{"line":53,"column":9},"end":{"line":54,"column":5}}],"line":53}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":339,"10":339,"11":339,"12":339,"13":339,"14":339,"15":1315,"16":1315,"17":326,"18":989,"19":470,"20":519,"21":6,"22":6,"23":513,"24":165,"25":348,"26":173,"27":171,"28":175,"29":166,"30":9,"31":1,"32":1,"33":1},"f":{"0":339,"1":1315},"b":{"0":[326,989],"1":[470,519],"2":[6,513],"3":[165,348],"4":[173,175],"5":[171,2],"6":[173,2],"7":[166,9],"8":[0,9]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"2d6927230db964e787377a99a777c239c880dd15","contentHash":"64a01b84e255ee61344a87ee95d837387983465ca2e4b193a48e5b1a6b02d871"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/schema.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/schema.js","statementMap":{"0":{"start":{"line":8,"column":8},"end":{"line":8,"column":25}},"1":{"start":{"line":9,"column":13},"end":{"line":9,"column":30}},"2":{"start":{"line":10,"column":17},"end":{"line":10,"column":40}},"3":{"start":{"line":11,"column":13},"end":{"line":11,"column":35}},"4":{"start":{"line":12,"column":10},"end":{"line":12,"column":20}},"5":{"start":{"line":16,"column":4},"end":{"line":16,"column":34}},"6":{"start":{"line":17,"column":4},"end":{"line":17,"column":27}},"7":{"start":{"line":18,"column":4},"end":{"line":18,"column":26}},"8":{"start":{"line":19,"column":4},"end":{"line":19,"column":23}},"9":{"start":{"line":20,"column":4},"end":{"line":20,"column":23}},"10":{"start":{"line":21,"column":4},"end":{"line":21,"column":21}},"11":{"start":{"line":22,"column":4},"end":{"line":22,"column":25}},"12":{"start":{"line":23,"column":4},"end":{"line":23,"column":30}},"13":{"start":{"line":27,"column":4},"end":{"line":27,"column":37}},"14":{"start":{"line":27,"column":25},"end":{"line":27,"column":37}},"15":{"start":{"line":28,"column":4},"end":{"line":28,"column":37}},"16":{"start":{"line":29,"column":4},"end":{"line":42,"column":5}},"17":{"start":{"line":32,"column":6},"end":{"line":32,"column":54}},"18":{"start":{"line":33,"column":6},"end":{"line":33,"column":52}},"19":{"start":{"line":34,"column":6},"end":{"line":34,"column":46}},"20":{"start":{"line":35,"column":6},"end":{"line":35,"column":42}},"21":{"start":{"line":36,"column":6},"end":{"line":36,"column":50}},"22":{"start":{"line":37,"column":6},"end":{"line":37,"column":60}},"23":{"start":{"line":38,"column":6},"end":{"line":38,"column":40}},"24":{"start":{"line":39,"column":6},"end":{"line":41,"column":7}},"25":{"start":{"line":40,"column":8},"end":{"line":40,"column":70}},"26":{"start":{"line":43,"column":4},"end":{"line":43,"column":16}},"27":{"start":{"line":47,"column":15},"end":{"line":47,"column":26}},"28":{"start":{"line":48,"column":4},"end":{"line":50,"column":13}},"29":{"start":{"line":50,"column":6},"end":{"line":50,"column":13}},"30":{"start":{"line":51,"column":4},"end":{"line":82,"column":5}},"31":{"start":{"line":54,"column":23},"end":{"line":54,"column":63}},"32":{"start":{"line":55,"column":8},"end":{"line":62,"column":9}},"33":{"start":{"line":56,"column":10},"end":{"line":61,"column":13}},"34":{"start":{"line":63,"column":8},"end":{"line":63,"column":14}},"35":{"start":{"line":65,"column":8},"end":{"line":65,"column":40}},"36":{"start":{"line":66,"column":8},"end":{"line":66,"column":14}},"37":{"start":{"line":68,"column":8},"end":{"line":68,"column":39}},"38":{"start":{"line":69,"column":8},"end":{"line":69,"column":14}},"39":{"start":{"line":71,"column":8},"end":{"line":71,"column":36}},"40":{"start":{"line":72,"column":8},"end":{"line":72,"column":14}},"41":{"start":{"line":74,"column":8},"end":{"line":74,"column":34}},"42":{"start":{"line":75,"column":8},"end":{"line":75,"column":14}},"43":{"start":{"line":77,"column":8},"end":{"line":77,"column":38}},"44":{"start":{"line":78,"column":8},"end":{"line":78,"column":14}},"45":{"start":{"line":80,"column":8},"end":{"line":80,"column":43}},"46":{"start":{"line":81,"column":8},"end":{"line":81,"column":14}},"47":{"start":{"line":86,"column":18},"end":{"line":86,"column":27}},"48":{"start":{"line":87,"column":4},"end":{"line":87,"column":22}},"49":{"start":{"line":88,"column":4},"end":{"line":90,"column":7}},"50":{"start":{"line":89,"column":6},"end":{"line":89,"column":39}},"51":{"start":{"line":95,"column":16},"end":{"line":95,"column":31}},"52":{"start":{"line":96,"column":2},"end":{"line":103,"column":3}},"53":{"start":{"line":97,"column":4},"end":{"line":97,"column":33}},"54":{"start":{"line":98,"column":4},"end":{"line":98,"column":27}},"55":{"start":{"line":100,"column":4},"end":{"line":102,"column":7}},"56":{"start":{"line":101,"column":6},"end":{"line":101,"column":41}},"57":{"start":{"line":106,"column":0},"end":{"line":106,"column":30}},"58":{"start":{"line":107,"column":0},"end":{"line":108,"column":63}},"59":{"start":{"line":110,"column":0},"end":{"line":110,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":15,"column":2},"end":{"line":15,"column":3}},"loc":{"start":{"line":15,"column":38},"end":{"line":24,"column":3}},"line":15},"1":{"name":"(anonymous_1)","decl":{"start":{"line":26,"column":2},"end":{"line":26,"column":3}},"loc":{"start":{"line":26,"column":27},"end":{"line":44,"column":3}},"line":26},"2":{"name":"(anonymous_2)","decl":{"start":{"line":46,"column":2},"end":{"line":46,"column":3}},"loc":{"start":{"line":46,"column":18},"end":{"line":83,"column":3}},"line":46},"3":{"name":"(anonymous_3)","decl":{"start":{"line":85,"column":2},"end":{"line":85,"column":3}},"loc":{"start":{"line":85,"column":26},"end":{"line":91,"column":3}},"line":85},"4":{"name":"(anonymous_4)","decl":{"start":{"line":88,"column":26},"end":{"line":88,"column":27}},"loc":{"start":{"line":88,"column":38},"end":{"line":90,"column":5}},"line":88},"5":{"name":"visitDfs","decl":{"start":{"line":94,"column":9},"end":{"line":94,"column":17}},"loc":{"start":{"line":94,"column":43},"end":{"line":104,"column":1}},"line":94},"6":{"name":"(anonymous_6)","decl":{"start":{"line":100,"column":26},"end":{"line":100,"column":27}},"loc":{"start":{"line":100,"column":42},"end":{"line":102,"column":5}},"line":100}},"branchMap":{"0":{"loc":{"start":{"line":27,"column":4},"end":{"line":27,"column":37}},"type":"if","locations":[{"start":{"line":27,"column":4},"end":{"line":27,"column":37}},{"start":{"line":27,"column":4},"end":{"line":27,"column":37}}],"line":27},"1":{"loc":{"start":{"line":29,"column":4},"end":{"line":42,"column":5}},"type":"if","locations":[{"start":{"line":29,"column":4},"end":{"line":42,"column":5}},{"start":{"line":29,"column":4},"end":{"line":42,"column":5}}],"line":29},"2":{"loc":{"start":{"line":29,"column":8},"end":{"line":31,"column":58}},"type":"binary-expr","locations":[{"start":{"line":29,"column":8},"end":{"line":29,"column":57}},{"start":{"line":31,"column":7},"end":{"line":31,"column":16}},{"start":{"line":31,"column":20},"end":{"line":31,"column":57}}],"line":29},"3":{"loc":{"start":{"line":39,"column":6},"end":{"line":41,"column":7}},"type":"if","locations":[{"start":{"line":39,"column":6},"end":{"line":41,"column":7}},{"start":{"line":39,"column":6},"end":{"line":41,"column":7}}],"line":39},"4":{"loc":{"start":{"line":48,"column":4},"end":{"line":50,"column":13}},"type":"if","locations":[{"start":{"line":48,"column":4},"end":{"line":50,"column":13}},{"start":{"line":48,"column":4},"end":{"line":50,"column":13}}],"line":48},"5":{"loc":{"start":{"line":48,"column":8},"end":{"line":49,"column":32}},"type":"binary-expr","locations":[{"start":{"line":48,"column":8},"end":{"line":48,"column":60}},{"start":{"line":49,"column":6},"end":{"line":49,"column":32}}],"line":48},"6":{"loc":{"start":{"line":51,"column":4},"end":{"line":82,"column":5}},"type":"switch","locations":[{"start":{"line":52,"column":6},"end":{"line":52,"column":21}},{"start":{"line":53,"column":6},"end":{"line":63,"column":14}},{"start":{"line":64,"column":6},"end":{"line":66,"column":14}},{"start":{"line":67,"column":6},"end":{"line":69,"column":14}},{"start":{"line":70,"column":6},"end":{"line":72,"column":14}},{"start":{"line":73,"column":6},"end":{"line":75,"column":14}},{"start":{"line":76,"column":6},"end":{"line":78,"column":14}},{"start":{"line":79,"column":6},"end":{"line":81,"column":14}}],"line":51},"7":{"loc":{"start":{"line":54,"column":23},"end":{"line":54,"column":63}},"type":"binary-expr","locations":[{"start":{"line":54,"column":23},"end":{"line":54,"column":44}},{"start":{"line":54,"column":48},"end":{"line":54,"column":63}}],"line":54},"8":{"loc":{"start":{"line":55,"column":8},"end":{"line":62,"column":9}},"type":"if","locations":[{"start":{"line":55,"column":8},"end":{"line":62,"column":9}},{"start":{"line":55,"column":8},"end":{"line":62,"column":9}}],"line":55},"9":{"loc":{"start":{"line":57,"column":23},"end":{"line":58,"column":36}},"type":"binary-expr","locations":[{"start":{"line":57,"column":23},"end":{"line":57,"column":39}},{"start":{"line":57,"column":43},"end":{"line":57,"column":65}},{"start":{"line":58,"column":15},"end":{"line":58,"column":36}}],"line":57},"10":{"loc":{"start":{"line":96,"column":2},"end":{"line":103,"column":3}},"type":"if","locations":[{"start":{"line":96,"column":2},"end":{"line":103,"column":3}},{"start":{"line":96,"column":2},"end":{"line":103,"column":3}}],"line":96},"11":{"loc":{"start":{"line":96,"column":6},"end":{"line":96,"column":34}},"type":"binary-expr","locations":[{"start":{"line":96,"column":6},"end":{"line":96,"column":14}},{"start":{"line":96,"column":18},"end":{"line":96,"column":34}}],"line":96}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":340,"6":340,"7":340,"8":340,"9":340,"10":340,"11":340,"12":340,"13":29,"14":0,"15":29,"16":29,"17":29,"18":29,"19":29,"20":29,"21":29,"22":29,"23":29,"24":29,"25":29,"26":29,"27":4381,"28":4381,"29":0,"30":4381,"31":354,"32":354,"33":342,"34":354,"35":2633,"36":2633,"37":512,"38":512,"39":882,"40":882,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":766,"48":766,"49":766,"50":11987,"51":68834,"52":68834,"53":61217,"54":61217,"55":61217,"56":56847,"57":1,"58":1,"59":1},"f":{"0":340,"1":29,"2":4381,"3":766,"4":11987,"5":68834,"6":56847},"b":{"0":[0,29],"1":[29,0],"2":[29,1,1],"3":[29,0],"4":[0,4381],"5":[4381,0],"6":[5,354,2633,512,882,0,0,0],"7":[354,19],"8":[342,12],"9":[342,7,7],"10":[61217,7617],"11":[68834,68834]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"ccc28ba4b644b283aaf3e2c6bb032864f5359bc5","contentHash":"cb0d398fbc68c8cd98fa47345658d86b7147258bb1baed4cf49fdba2b97aa605"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/types.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/types.js","statementMap":{"0":{"start":{"line":8,"column":18},"end":{"line":8,"column":42}},"1":{"start":{"line":9,"column":13},"end":{"line":9,"column":30}},"2":{"start":{"line":10,"column":13},"end":{"line":10,"column":37}},"3":{"start":{"line":11,"column":20},"end":{"line":11,"column":46}},"4":{"start":{"line":15,"column":4},"end":{"line":15,"column":34}},"5":{"start":{"line":16,"column":4},"end":{"line":16,"column":22}},"6":{"start":{"line":20,"column":4},"end":{"line":20,"column":70}},"7":{"start":{"line":22,"column":4},"end":{"line":33,"column":5}},"8":{"start":{"line":24,"column":28},"end":{"line":24,"column":50}},"9":{"start":{"line":26,"column":6},"end":{"line":32,"column":7}},"10":{"start":{"line":27,"column":8},"end":{"line":27,"column":46}},"11":{"start":{"line":31,"column":8},"end":{"line":31,"column":57}},"12":{"start":{"line":37,"column":0},"end":{"line":37,"column":28}},"13":{"start":{"line":38,"column":0},"end":{"line":38,"column":52}},"14":{"start":{"line":40,"column":0},"end":{"line":40,"column":23}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":14,"column":2},"end":{"line":14,"column":3}},"loc":{"start":{"line":14,"column":38},"end":{"line":17,"column":3}},"line":14},"1":{"name":"(anonymous_1)","decl":{"start":{"line":19,"column":2},"end":{"line":19,"column":3}},"loc":{"start":{"line":19,"column":18},"end":{"line":34,"column":3}},"line":19}},"branchMap":{"0":{"loc":{"start":{"line":20,"column":11},"end":{"line":20,"column":68}},"type":"binary-expr","locations":[{"start":{"line":20,"column":11},"end":{"line":20,"column":34}},{"start":{"line":20,"column":38},"end":{"line":20,"column":68}}],"line":20},"1":{"loc":{"start":{"line":22,"column":4},"end":{"line":33,"column":5}},"type":"if","locations":[{"start":{"line":22,"column":4},"end":{"line":33,"column":5}},{"start":{"line":22,"column":4},"end":{"line":33,"column":5}}],"line":22},"2":{"loc":{"start":{"line":26,"column":6},"end":{"line":32,"column":7}},"type":"if","locations":[{"start":{"line":26,"column":6},"end":{"line":32,"column":7}},{"start":{"line":26,"column":6},"end":{"line":32,"column":7}}],"line":26}},"s":{"0":1,"1":1,"2":1,"3":1,"4":326,"5":326,"6":335,"7":335,"8":334,"9":334,"10":332,"11":2,"12":1,"13":1,"14":1},"f":{"0":326,"1":335},"b":{"0":[335,1],"1":[334,1],"2":[332,2]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"3ecaf0266cee03f28e184a47b0ec1cfcc813ae7d","contentHash":"f0e139104a2f2f4a1ca1c1bee27464d394483d749c0af911aa85e310fe01f003"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/documentation.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/documentation.js","statementMap":{"0":{"start":{"line":8,"column":18},"end":{"line":8,"column":42}},"1":{"start":{"line":12,"column":4},"end":{"line":12,"column":34}},"2":{"start":{"line":16,"column":0},"end":{"line":16,"column":44}},"3":{"start":{"line":17,"column":0},"end":{"line":17,"column":35}},"4":{"start":{"line":19,"column":0},"end":{"line":19,"column":31}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":11,"column":2},"end":{"line":11,"column":3}},"loc":{"start":{"line":11,"column":38},"end":{"line":13,"column":3}},"line":11}},"branchMap":{},"s":{"0":1,"1":14,"2":1,"3":1,"4":1},"f":{"0":14},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"db74e773680f3f1b3fea9c5c40dad07d2943561c","contentHash":"47c38a4fb6748fb78c2bf25f9b7c49e53d9abc1ac580bdc782ef476715c80978"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/message.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/message.js","statementMap":{"0":{"start":{"line":8,"column":18},"end":{"line":8,"column":42}},"1":{"start":{"line":9,"column":17},"end":{"line":9,"column":45}},"2":{"start":{"line":10,"column":13},"end":{"line":10,"column":33}},"3":{"start":{"line":11,"column":13},"end":{"line":11,"column":30}},"4":{"start":{"line":12,"column":12},"end":{"line":12,"column":31}},"5":{"start":{"line":16,"column":4},"end":{"line":16,"column":34}},"6":{"start":{"line":17,"column":4},"end":{"line":17,"column":20}},"7":{"start":{"line":21,"column":4},"end":{"line":23,"column":5}},"8":{"start":{"line":22,"column":6},"end":{"line":22,"column":38}},"9":{"start":{"line":27,"column":4},"end":{"line":29,"column":5}},"10":{"start":{"line":28,"column":6},"end":{"line":28,"column":45}},"11":{"start":{"line":33,"column":4},"end":{"line":33,"column":48}},"12":{"start":{"line":33,"column":25},"end":{"line":33,"column":48}},"13":{"start":{"line":34,"column":4},"end":{"line":34,"column":54}},"14":{"start":{"line":35,"column":4},"end":{"line":47,"column":5}},"15":{"start":{"line":36,"column":14},"end":{"line":36,"column":30}},"16":{"start":{"line":37,"column":27},"end":{"line":37,"column":50}},"17":{"start":{"line":38,"column":6},"end":{"line":46,"column":7}},"18":{"start":{"line":39,"column":20},"end":{"line":40,"column":52}},"19":{"start":{"line":41,"column":8},"end":{"line":41,"column":49}},"20":{"start":{"line":42,"column":8},"end":{"line":42,"column":53}},"21":{"start":{"line":43,"column":8},"end":{"line":43,"column":35}},"22":{"start":{"line":45,"column":8},"end":{"line":45,"column":44}},"23":{"start":{"line":51,"column":0},"end":{"line":51,"column":32}},"24":{"start":{"line":52,"column":0},"end":{"line":52,"column":52}},"25":{"start":{"line":54,"column":0},"end":{"line":54,"column":25}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":15,"column":2},"end":{"line":15,"column":3}},"loc":{"start":{"line":15,"column":38},"end":{"line":18,"column":3}},"line":15},"1":{"name":"(anonymous_1)","decl":{"start":{"line":20,"column":2},"end":{"line":20,"column":3}},"loc":{"start":{"line":20,"column":18},"end":{"line":24,"column":3}},"line":20},"2":{"name":"(anonymous_2)","decl":{"start":{"line":26,"column":2},"end":{"line":26,"column":3}},"loc":{"start":{"line":26,"column":27},"end":{"line":30,"column":3}},"line":26},"3":{"name":"(anonymous_3)","decl":{"start":{"line":32,"column":2},"end":{"line":32,"column":3}},"loc":{"start":{"line":32,"column":24},"end":{"line":48,"column":3}},"line":32}},"branchMap":{"0":{"loc":{"start":{"line":21,"column":4},"end":{"line":23,"column":5}},"type":"if","locations":[{"start":{"line":21,"column":4},"end":{"line":23,"column":5}},{"start":{"line":21,"column":4},"end":{"line":23,"column":5}}],"line":21},"1":{"loc":{"start":{"line":33,"column":4},"end":{"line":33,"column":48}},"type":"if","locations":[{"start":{"line":33,"column":4},"end":{"line":33,"column":48}},{"start":{"line":33,"column":4},"end":{"line":33,"column":48}}],"line":33},"2":{"loc":{"start":{"line":38,"column":6},"end":{"line":46,"column":7}},"type":"if","locations":[{"start":{"line":38,"column":6},"end":{"line":46,"column":7}},{"start":{"line":38,"column":6},"end":{"line":46,"column":7}}],"line":38}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":470,"6":470,"7":537,"8":536,"9":518,"10":588,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":1,"24":1,"25":1},"f":{"0":470,"1":537,"2":518,"3":0},"b":{"0":[536,1],"1":[0,0],"2":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"14b1bbd5b088a9c4aa03443615814ae4f848e641","contentHash":"d63c36d949bc6538ac80b5c289d105d3271c0fa3ef01db8bcf2d26de5eb6eb68"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/portType.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/portType.js","statementMap":{"0":{"start":{"line":8,"column":18},"end":{"line":8,"column":42}},"1":{"start":{"line":12,"column":4},"end":{"line":12,"column":34}},"2":{"start":{"line":16,"column":4},"end":{"line":16,"column":32}},"3":{"start":{"line":16,"column":25},"end":{"line":16,"column":32}},"4":{"start":{"line":17,"column":4},"end":{"line":17,"column":25}},"5":{"start":{"line":18,"column":19},"end":{"line":18,"column":32}},"6":{"start":{"line":19,"column":4},"end":{"line":20,"column":13}},"7":{"start":{"line":20,"column":6},"end":{"line":20,"column":13}},"8":{"start":{"line":21,"column":4},"end":{"line":26,"column":5}},"9":{"start":{"line":21,"column":17},"end":{"line":21,"column":18}},"10":{"start":{"line":22,"column":6},"end":{"line":23,"column":17}},"11":{"start":{"line":23,"column":8},"end":{"line":23,"column":17}},"12":{"start":{"line":24,"column":6},"end":{"line":24,"column":37}},"13":{"start":{"line":25,"column":6},"end":{"line":25,"column":43}},"14":{"start":{"line":30,"column":21},"end":{"line":30,"column":23}},"15":{"start":{"line":31,"column":4},"end":{"line":34,"column":5}},"16":{"start":{"line":32,"column":19},"end":{"line":32,"column":40}},"17":{"start":{"line":33,"column":6},"end":{"line":33,"column":54}},"18":{"start":{"line":35,"column":4},"end":{"line":35,"column":22}},"19":{"start":{"line":39,"column":0},"end":{"line":39,"column":34}},"20":{"start":{"line":40,"column":0},"end":{"line":40,"column":58}},"21":{"start":{"line":42,"column":0},"end":{"line":42,"column":26}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":11,"column":2},"end":{"line":11,"column":3}},"loc":{"start":{"line":11,"column":38},"end":{"line":13,"column":3}},"line":11},"1":{"name":"(anonymous_1)","decl":{"start":{"line":15,"column":2},"end":{"line":15,"column":3}},"loc":{"start":{"line":15,"column":27},"end":{"line":27,"column":3}},"line":15},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":2},"end":{"line":29,"column":3}},"loc":{"start":{"line":29,"column":24},"end":{"line":36,"column":3}},"line":29}},"branchMap":{"0":{"loc":{"start":{"line":16,"column":4},"end":{"line":16,"column":32}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":16,"column":32}},{"start":{"line":16,"column":4},"end":{"line":16,"column":32}}],"line":16},"1":{"loc":{"start":{"line":19,"column":4},"end":{"line":20,"column":13}},"type":"if","locations":[{"start":{"line":19,"column":4},"end":{"line":20,"column":13}},{"start":{"line":19,"column":4},"end":{"line":20,"column":13}}],"line":19},"2":{"loc":{"start":{"line":22,"column":6},"end":{"line":23,"column":17}},"type":"if","locations":[{"start":{"line":22,"column":6},"end":{"line":23,"column":17}},{"start":{"line":22,"column":6},"end":{"line":23,"column":17}}],"line":22}},"s":{"0":1,"1":165,"2":169,"3":5,"4":164,"5":164,"6":164,"7":0,"8":164,"9":164,"10":241,"11":0,"12":241,"13":241,"14":0,"15":0,"16":0,"17":0,"18":0,"19":1,"20":1,"21":1},"f":{"0":165,"1":169,"2":0},"b":{"0":[5,164],"1":[0,164],"2":[0,241]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"3094ee3b8c315d58045a85b61ae84f09c0ab4509","contentHash":"449485dce6526fe270bc3402d50d3e1945e399a527e787b7c79379f890dd379f"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/binding.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/binding.js","statementMap":{"0":{"start":{"line":8,"column":18},"end":{"line":8,"column":42}},"1":{"start":{"line":9,"column":12},"end":{"line":9,"column":31}},"2":{"start":{"line":13,"column":4},"end":{"line":13,"column":34}},"3":{"start":{"line":14,"column":4},"end":{"line":14,"column":24}},"4":{"start":{"line":15,"column":4},"end":{"line":15,"column":20}},"5":{"start":{"line":20,"column":4},"end":{"line":23,"column":5}},"6":{"start":{"line":21,"column":6},"end":{"line":21,"column":40}},"7":{"start":{"line":22,"column":6},"end":{"line":22,"column":32}},"8":{"start":{"line":27,"column":4},"end":{"line":27,"column":32}},"9":{"start":{"line":27,"column":25},"end":{"line":27,"column":32}},"10":{"start":{"line":28,"column":4},"end":{"line":72,"column":5}},"11":{"start":{"line":29,"column":6},"end":{"line":29,"column":27}},"12":{"start":{"line":30,"column":17},"end":{"line":30,"column":45}},"13":{"start":{"line":31,"column":19},"end":{"line":31,"column":46}},"14":{"start":{"line":32,"column":16},"end":{"line":32,"column":26}},"15":{"start":{"line":33,"column":19},"end":{"line":33,"column":32}},"16":{"start":{"line":34,"column":6},"end":{"line":69,"column":7}},"17":{"start":{"line":35,"column":8},"end":{"line":35,"column":42}},"18":{"start":{"line":36,"column":8},"end":{"line":36,"column":33}},"19":{"start":{"line":38,"column":8},"end":{"line":68,"column":9}},"20":{"start":{"line":38,"column":21},"end":{"line":38,"column":22}},"21":{"start":{"line":39,"column":10},"end":{"line":40,"column":21}},"22":{"start":{"line":40,"column":12},"end":{"line":40,"column":21}},"23":{"start":{"line":41,"column":26},"end":{"line":41,"column":63}},"24":{"start":{"line":42,"column":10},"end":{"line":67,"column":11}},"25":{"start":{"line":43,"column":12},"end":{"line":43,"column":49}},"26":{"start":{"line":44,"column":12},"end":{"line":44,"column":40}},"27":{"start":{"line":47,"column":12},"end":{"line":49,"column":13}},"28":{"start":{"line":48,"column":14},"end":{"line":48,"column":60}},"29":{"start":{"line":51,"column":12},"end":{"line":53,"column":13}},"30":{"start":{"line":52,"column":14},"end":{"line":52,"column":62}},"31":{"start":{"line":56,"column":12},"end":{"line":60,"column":13}},"32":{"start":{"line":57,"column":14},"end":{"line":59,"column":15}},"33":{"start":{"line":58,"column":16},"end":{"line":58,"column":54}},"34":{"start":{"line":61,"column":12},"end":{"line":64,"column":13}},"35":{"start":{"line":63,"column":14},"end":{"line":63,"column":76}},"36":{"start":{"line":65,"column":12},"end":{"line":65,"column":47}},"37":{"start":{"line":66,"column":12},"end":{"line":66,"column":43}},"38":{"start":{"line":71,"column":6},"end":{"line":71,"column":16}},"39":{"start":{"line":76,"column":4},"end":{"line":76,"column":48}},"40":{"start":{"line":76,"column":25},"end":{"line":76,"column":48}},"41":{"start":{"line":77,"column":21},"end":{"line":77,"column":41}},"42":{"start":{"line":78,"column":4},"end":{"line":81,"column":5}},"43":{"start":{"line":79,"column":22},"end":{"line":79,"column":43}},"44":{"start":{"line":80,"column":6},"end":{"line":80,"column":57}},"45":{"start":{"line":82,"column":4},"end":{"line":82,"column":22}},"46":{"start":{"line":86,"column":0},"end":{"line":86,"column":32}},"47":{"start":{"line":87,"column":0},"end":{"line":88,"column":19}},"48":{"start":{"line":90,"column":0},"end":{"line":90,"column":25}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":2},"end":{"line":12,"column":3}},"loc":{"start":{"line":12,"column":38},"end":{"line":16,"column":3}},"line":12},"1":{"name":"(anonymous_1)","decl":{"start":{"line":18,"column":2},"end":{"line":18,"column":3}},"loc":{"start":{"line":18,"column":18},"end":{"line":24,"column":3}},"line":18},"2":{"name":"(anonymous_2)","decl":{"start":{"line":26,"column":2},"end":{"line":26,"column":3}},"loc":{"start":{"line":26,"column":27},"end":{"line":73,"column":3}},"line":26},"3":{"name":"(anonymous_3)","decl":{"start":{"line":75,"column":2},"end":{"line":75,"column":3}},"loc":{"start":{"line":75,"column":24},"end":{"line":83,"column":3}},"line":75}},"branchMap":{"0":{"loc":{"start":{"line":20,"column":4},"end":{"line":23,"column":5}},"type":"if","locations":[{"start":{"line":20,"column":4},"end":{"line":23,"column":5}},{"start":{"line":20,"column":4},"end":{"line":23,"column":5}}],"line":20},"1":{"loc":{"start":{"line":27,"column":4},"end":{"line":27,"column":32}},"type":"if","locations":[{"start":{"line":27,"column":4},"end":{"line":27,"column":32}},{"start":{"line":27,"column":4},"end":{"line":27,"column":32}}],"line":27},"2":{"loc":{"start":{"line":34,"column":6},"end":{"line":69,"column":7}},"type":"if","locations":[{"start":{"line":34,"column":6},"end":{"line":69,"column":7}},{"start":{"line":34,"column":6},"end":{"line":69,"column":7}}],"line":34},"3":{"loc":{"start":{"line":39,"column":10},"end":{"line":40,"column":21}},"type":"if","locations":[{"start":{"line":39,"column":10},"end":{"line":40,"column":21}},{"start":{"line":39,"column":10},"end":{"line":40,"column":21}}],"line":39},"4":{"loc":{"start":{"line":42,"column":10},"end":{"line":67,"column":11}},"type":"if","locations":[{"start":{"line":42,"column":10},"end":{"line":67,"column":11}},{"start":{"line":42,"column":10},"end":{"line":67,"column":11}}],"line":42},"5":{"loc":{"start":{"line":47,"column":12},"end":{"line":49,"column":13}},"type":"if","locations":[{"start":{"line":47,"column":12},"end":{"line":49,"column":13}},{"start":{"line":47,"column":12},"end":{"line":49,"column":13}}],"line":47},"6":{"loc":{"start":{"line":47,"column":16},"end":{"line":47,"column":46}},"type":"binary-expr","locations":[{"start":{"line":47,"column":16},"end":{"line":47,"column":31}},{"start":{"line":47,"column":35},"end":{"line":47,"column":46}}],"line":47},"7":{"loc":{"start":{"line":51,"column":12},"end":{"line":53,"column":13}},"type":"if","locations":[{"start":{"line":51,"column":12},"end":{"line":53,"column":13}},{"start":{"line":51,"column":12},"end":{"line":53,"column":13}}],"line":51},"8":{"loc":{"start":{"line":51,"column":16},"end":{"line":51,"column":48}},"type":"binary-expr","locations":[{"start":{"line":51,"column":16},"end":{"line":51,"column":32}},{"start":{"line":51,"column":36},"end":{"line":51,"column":48}}],"line":51},"9":{"loc":{"start":{"line":57,"column":14},"end":{"line":59,"column":15}},"type":"if","locations":[{"start":{"line":57,"column":14},"end":{"line":59,"column":15}},{"start":{"line":57,"column":14},"end":{"line":59,"column":15}}],"line":57},"10":{"loc":{"start":{"line":61,"column":12},"end":{"line":64,"column":13}},"type":"if","locations":[{"start":{"line":61,"column":12},"end":{"line":64,"column":13}},{"start":{"line":61,"column":12},"end":{"line":64,"column":13}}],"line":61},"11":{"loc":{"start":{"line":65,"column":26},"end":{"line":65,"column":46}},"type":"binary-expr","locations":[{"start":{"line":65,"column":26},"end":{"line":65,"column":37}},{"start":{"line":65,"column":41},"end":{"line":65,"column":46}}],"line":65},"12":{"loc":{"start":{"line":76,"column":4},"end":{"line":76,"column":48}},"type":"if","locations":[{"start":{"line":76,"column":4},"end":{"line":76,"column":48}},{"start":{"line":76,"column":4},"end":{"line":76,"column":48}}],"line":76}},"s":{"0":1,"1":1,"2":173,"3":173,"4":173,"5":432,"6":174,"7":174,"8":171,"9":2,"10":169,"11":169,"12":169,"13":169,"14":169,"15":169,"16":169,"17":169,"18":169,"19":169,"20":169,"21":424,"22":170,"23":254,"24":254,"25":245,"26":245,"27":245,"28":243,"29":245,"30":202,"31":245,"32":37,"33":37,"34":245,"35":2,"36":245,"37":245,"38":1,"39":41,"40":1,"41":40,"42":40,"43":57,"44":57,"45":39,"46":1,"47":1,"48":1},"f":{"0":173,"1":432,"2":171,"3":41},"b":{"0":[174,258],"1":[2,169],"2":[169,0],"3":[170,254],"4":[245,9],"5":[243,2],"6":[245,243],"7":[202,43],"8":[245,202],"9":[37,0],"10":[2,243],"11":[245,175],"12":[1,40]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"459e50aa4f5a319ba4e56ca311afdd67f8f16d9c","contentHash":"68d2e6f6b63119fb3427674c329bbf0a2a3054155ef66cc315c2e6266a858f66"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/service.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/service.js","statementMap":{"0":{"start":{"line":8,"column":18},"end":{"line":8,"column":42}},"1":{"start":{"line":9,"column":12},"end":{"line":9,"column":31}},"2":{"start":{"line":13,"column":4},"end":{"line":13,"column":34}},"3":{"start":{"line":14,"column":4},"end":{"line":14,"column":20}},"4":{"start":{"line":18,"column":4},"end":{"line":39,"column":5}},"5":{"start":{"line":19,"column":21},"end":{"line":19,"column":34}},"6":{"start":{"line":20,"column":19},"end":{"line":20,"column":39}},"7":{"start":{"line":21,"column":6},"end":{"line":36,"column":7}},"8":{"start":{"line":22,"column":8},"end":{"line":35,"column":9}},"9":{"start":{"line":22,"column":21},"end":{"line":22,"column":22}},"10":{"start":{"line":23,"column":10},"end":{"line":24,"column":21}},"11":{"start":{"line":24,"column":12},"end":{"line":24,"column":21}},"12":{"start":{"line":25,"column":28},"end":{"line":25,"column":60}},"13":{"start":{"line":26,"column":24},"end":{"line":26,"column":45}},"14":{"start":{"line":27,"column":10},"end":{"line":34,"column":11}},"15":{"start":{"line":28,"column":12},"end":{"line":28,"column":45}},"16":{"start":{"line":29,"column":12},"end":{"line":32,"column":14}},"17":{"start":{"line":33,"column":12},"end":{"line":33,"column":36}},"18":{"start":{"line":38,"column":6},"end":{"line":38,"column":16}},"19":{"start":{"line":43,"column":4},"end":{"line":43,"column":48}},"20":{"start":{"line":43,"column":25},"end":{"line":43,"column":48}},"21":{"start":{"line":44,"column":16},"end":{"line":44,"column":18}},"22":{"start":{"line":45,"column":4},"end":{"line":48,"column":5}},"23":{"start":{"line":46,"column":17},"end":{"line":46,"column":33}},"24":{"start":{"line":47,"column":6},"end":{"line":47,"column":55}},"25":{"start":{"line":49,"column":4},"end":{"line":49,"column":28}},"26":{"start":{"line":50,"column":4},"end":{"line":50,"column":27}},"27":{"start":{"line":55,"column":0},"end":{"line":55,"column":32}},"28":{"start":{"line":56,"column":0},"end":{"line":56,"column":52}},"29":{"start":{"line":58,"column":0},"end":{"line":58,"column":25}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":2},"end":{"line":12,"column":3}},"loc":{"start":{"line":12,"column":38},"end":{"line":15,"column":3}},"line":12},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":2},"end":{"line":17,"column":3}},"loc":{"start":{"line":17,"column":27},"end":{"line":40,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":42,"column":2},"end":{"line":42,"column":3}},"loc":{"start":{"line":42,"column":24},"end":{"line":51,"column":3}},"line":42}},"branchMap":{"0":{"loc":{"start":{"line":21,"column":6},"end":{"line":36,"column":7}},"type":"if","locations":[{"start":{"line":21,"column":6},"end":{"line":36,"column":7}},{"start":{"line":21,"column":6},"end":{"line":36,"column":7}}],"line":21},"1":{"loc":{"start":{"line":21,"column":10},"end":{"line":21,"column":41}},"type":"binary-expr","locations":[{"start":{"line":21,"column":10},"end":{"line":21,"column":18}},{"start":{"line":21,"column":22},"end":{"line":21,"column":41}}],"line":21},"2":{"loc":{"start":{"line":23,"column":10},"end":{"line":24,"column":21}},"type":"if","locations":[{"start":{"line":23,"column":10},"end":{"line":24,"column":21}},{"start":{"line":23,"column":10},"end":{"line":24,"column":21}}],"line":23},"3":{"loc":{"start":{"line":27,"column":10},"end":{"line":34,"column":11}},"type":"if","locations":[{"start":{"line":27,"column":10},"end":{"line":34,"column":11}},{"start":{"line":27,"column":10},"end":{"line":34,"column":11}}],"line":27},"4":{"loc":{"start":{"line":43,"column":4},"end":{"line":43,"column":48}},"type":"if","locations":[{"start":{"line":43,"column":4},"end":{"line":43,"column":48}},{"start":{"line":43,"column":4},"end":{"line":43,"column":48}}],"line":43}},"s":{"0":1,"1":1,"2":166,"3":166,"4":165,"5":165,"6":165,"7":165,"8":164,"9":164,"10":179,"11":6,"12":173,"13":173,"14":173,"15":171,"16":170,"17":170,"18":1,"19":38,"20":0,"21":38,"22":38,"23":41,"24":41,"25":37,"26":37,"27":1,"28":1,"29":1},"f":{"0":166,"1":165,"2":38},"b":{"0":[164,1],"1":[165,165],"2":[6,173],"3":[171,2],"4":[0,38]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"8f660f877a5a2c8de1afdee3911561cf97ca6577","contentHash":"e4c72363f6673c46d23c178cedaf1e5da44e25d160ed59c42b53432fd0921321"},"/Users/rfeng/Projects/loopback3/strong-soap/lib/parser/xmlHandler.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/lib/parser/xmlHandler.js","statementMap":{"0":{"start":{"line":8,"column":17},"end":{"line":8,"column":38}},"1":{"start":{"line":9,"column":10},"end":{"line":9,"column":24}},"2":{"start":{"line":10,"column":13},"end":{"line":10,"column":30}},"3":{"start":{"line":11,"column":13},"end":{"line":11,"column":30}},"4":{"start":{"line":12,"column":14},"end":{"line":12,"column":32}},"5":{"start":{"line":13,"column":12},"end":{"line":13,"column":54}},"6":{"start":{"line":14,"column":17},"end":{"line":14,"column":44}},"7":{"start":{"line":15,"column":24},"end":{"line":15,"column":52}},"8":{"start":{"line":16,"column":26},"end":{"line":16,"column":56}},"9":{"start":{"line":17,"column":21},"end":{"line":17,"column":46}},"10":{"start":{"line":18,"column":12},"end":{"line":18,"column":30}},"11":{"start":{"line":19,"column":13},"end":{"line":19,"column":32}},"12":{"start":{"line":20,"column":23},"end":{"line":20,"column":45}},"13":{"start":{"line":24,"column":4},"end":{"line":24,"column":33}},"14":{"start":{"line":25,"column":4},"end":{"line":25,"column":33}},"15":{"start":{"line":26,"column":4},"end":{"line":26,"column":62}},"16":{"start":{"line":27,"column":4},"end":{"line":27,"column":56}},"17":{"start":{"line":28,"column":4},"end":{"line":28,"column":77}},"18":{"start":{"line":29,"column":4},"end":{"line":29,"column":68}},"19":{"start":{"line":33,"column":4},"end":{"line":35,"column":5}},"20":{"start":{"line":34,"column":6},"end":{"line":34,"column":87}},"21":{"start":{"line":36,"column":4},"end":{"line":38,"column":5}},"22":{"start":{"line":37,"column":6},"end":{"line":37,"column":41}},"23":{"start":{"line":41,"column":34},"end":{"line":41,"column":39}},"24":{"start":{"line":42,"column":4},"end":{"line":54,"column":5}},"25":{"start":{"line":43,"column":6},"end":{"line":43,"column":45}},"26":{"start":{"line":44,"column":6},"end":{"line":44,"column":35}},"27":{"start":{"line":45,"column":6},"end":{"line":52,"column":7}},"28":{"start":{"line":46,"column":8},"end":{"line":46,"column":34}},"29":{"start":{"line":47,"column":13},"end":{"line":52,"column":7}},"30":{"start":{"line":48,"column":22},"end":{"line":48,"column":104}},"31":{"start":{"line":49,"column":21},"end":{"line":49,"column":71}},"32":{"start":{"line":50,"column":23},"end":{"line":50,"column":58}},"33":{"start":{"line":51,"column":8},"end":{"line":51,"column":38}},"34":{"start":{"line":53,"column":6},"end":{"line":53,"column":18}},"35":{"start":{"line":56,"column":4},"end":{"line":206,"column":5}},"36":{"start":{"line":57,"column":6},"end":{"line":57,"column":35}},"37":{"start":{"line":58,"column":21},"end":{"line":58,"column":40}},"38":{"start":{"line":59,"column":18},"end":{"line":59,"column":22}},"39":{"start":{"line":60,"column":6},"end":{"line":67,"column":7}},"40":{"start":{"line":61,"column":8},"end":{"line":66,"column":9}},"41":{"start":{"line":62,"column":10},"end":{"line":64,"column":11}},"42":{"start":{"line":62,"column":23},"end":{"line":62,"column":24}},"43":{"start":{"line":62,"column":30},"end":{"line":62,"column":40}},"44":{"start":{"line":63,"column":12},"end":{"line":63,"column":71}},"45":{"start":{"line":65,"column":10},"end":{"line":65,"column":22}},"46":{"start":{"line":68,"column":6},"end":{"line":77,"column":7}},"47":{"start":{"line":70,"column":8},"end":{"line":72,"column":9}},"48":{"start":{"line":71,"column":10},"end":{"line":71,"column":50}},"49":{"start":{"line":74,"column":8},"end":{"line":76,"column":9}},"50":{"start":{"line":75,"column":10},"end":{"line":75,"column":43}},"51":{"start":{"line":81,"column":6},"end":{"line":103,"column":7}},"52":{"start":{"line":82,"column":8},"end":{"line":82,"column":27}},"53":{"start":{"line":83,"column":8},"end":{"line":83,"column":32}},"54":{"start":{"line":84,"column":8},"end":{"line":84,"column":39}},"55":{"start":{"line":85,"column":13},"end":{"line":103,"column":7}},"56":{"start":{"line":86,"column":8},"end":{"line":86,"column":32}},"57":{"start":{"line":87,"column":8},"end":{"line":87,"column":39}},"58":{"start":{"line":89,"column":22},"end":{"line":89,"column":72}},"59":{"start":{"line":90,"column":28},"end":{"line":90,"column":33}},"60":{"start":{"line":92,"column":8},"end":{"line":95,"column":9}},"61":{"start":{"line":93,"column":10},"end":{"line":93,"column":31}},"62":{"start":{"line":94,"column":10},"end":{"line":94,"column":103}},"63":{"start":{"line":97,"column":21},"end":{"line":97,"column":71}},"64":{"start":{"line":98,"column":8},"end":{"line":98,"column":58}},"65":{"start":{"line":100,"column":8},"end":{"line":102,"column":9}},"66":{"start":{"line":101,"column":10},"end":{"line":101,"column":55}},"67":{"start":{"line":106,"column":6},"end":{"line":132,"column":7}},"68":{"start":{"line":107,"column":8},"end":{"line":107,"column":44}},"69":{"start":{"line":108,"column":8},"end":{"line":108,"column":43}},"70":{"start":{"line":109,"column":8},"end":{"line":109,"column":37}},"71":{"start":{"line":110,"column":8},"end":{"line":110,"column":27}},"72":{"start":{"line":111,"column":13},"end":{"line":132,"column":7}},"73":{"start":{"line":112,"column":8},"end":{"line":112,"column":39}},"74":{"start":{"line":113,"column":8},"end":{"line":113,"column":44}},"75":{"start":{"line":114,"column":8},"end":{"line":114,"column":47}},"76":{"start":{"line":115,"column":8},"end":{"line":115,"column":25}},"77":{"start":{"line":118,"column":8},"end":{"line":129,"column":9}},"78":{"start":{"line":119,"column":25},"end":{"line":119,"column":60}},"79":{"start":{"line":120,"column":10},"end":{"line":128,"column":11}},"80":{"start":{"line":121,"column":25},"end":{"line":121,"column":65}},"81":{"start":{"line":122,"column":12},"end":{"line":127,"column":13}},"82":{"start":{"line":123,"column":34},"end":{"line":123,"column":50}},"83":{"start":{"line":124,"column":14},"end":{"line":126,"column":15}},"84":{"start":{"line":125,"column":16},"end":{"line":125,"column":47}},"85":{"start":{"line":130,"column":8},"end":{"line":130,"column":47}},"86":{"start":{"line":131,"column":8},"end":{"line":131,"column":88}},"87":{"start":{"line":134,"column":6},"end":{"line":138,"column":7}},"88":{"start":{"line":135,"column":8},"end":{"line":137,"column":9}},"89":{"start":{"line":136,"column":10},"end":{"line":136,"column":59}},"90":{"start":{"line":140,"column":6},"end":{"line":148,"column":7}},"91":{"start":{"line":141,"column":8},"end":{"line":147,"column":9}},"92":{"start":{"line":143,"column":10},"end":{"line":143,"column":77}},"93":{"start":{"line":144,"column":10},"end":{"line":146,"column":11}},"94":{"start":{"line":145,"column":12},"end":{"line":145,"column":47}},"95":{"start":{"line":150,"column":6},"end":{"line":184,"column":7}},"96":{"start":{"line":151,"column":8},"end":{"line":157,"column":9}},"97":{"start":{"line":153,"column":10},"end":{"line":156,"column":11}},"98":{"start":{"line":155,"column":12},"end":{"line":155,"column":75}},"99":{"start":{"line":158,"column":8},"end":{"line":160,"column":9}},"100":{"start":{"line":159,"column":10},"end":{"line":159,"column":33}},"101":{"start":{"line":161,"column":8},"end":{"line":161,"column":20}},"102":{"start":{"line":162,"column":13},"end":{"line":184,"column":7}},"103":{"start":{"line":164,"column":20},"end":{"line":164,"column":51}},"104":{"start":{"line":165,"column":8},"end":{"line":183,"column":9}},"105":{"start":{"line":166,"column":10},"end":{"line":182,"column":11}},"106":{"start":{"line":167,"column":24},"end":{"line":167,"column":32}},"107":{"start":{"line":168,"column":12},"end":{"line":181,"column":13}},"108":{"start":{"line":169,"column":14},"end":{"line":180,"column":15}},"109":{"start":{"line":170,"column":16},"end":{"line":179,"column":17}},"110":{"start":{"line":171,"column":18},"end":{"line":178,"column":19}},"111":{"start":{"line":172,"column":20},"end":{"line":177,"column":21}},"112":{"start":{"line":173,"column":38},"end":{"line":173,"column":99}},"113":{"start":{"line":174,"column":22},"end":{"line":176,"column":23}},"114":{"start":{"line":175,"column":24},"end":{"line":175,"column":93}},"115":{"start":{"line":186,"column":6},"end":{"line":199,"column":7}},"116":{"start":{"line":188,"column":8},"end":{"line":188,"column":47}},"117":{"start":{"line":189,"column":8},"end":{"line":189,"column":26}},"118":{"start":{"line":192,"column":8},"end":{"line":194,"column":9}},"119":{"start":{"line":193,"column":10},"end":{"line":193,"column":73}},"120":{"start":{"line":195,"column":8},"end":{"line":197,"column":9}},"121":{"start":{"line":196,"column":10},"end":{"line":196,"column":33}},"122":{"start":{"line":198,"column":8},"end":{"line":198,"column":20}},"123":{"start":{"line":201,"column":6},"end":{"line":201,"column":65}},"124":{"start":{"line":202,"column":6},"end":{"line":204,"column":7}},"125":{"start":{"line":203,"column":8},"end":{"line":203,"column":31}},"126":{"start":{"line":205,"column":6},"end":{"line":205,"column":18}},"127":{"start":{"line":208,"column":4},"end":{"line":211,"column":5}},"128":{"start":{"line":209,"column":6},"end":{"line":209,"column":55}},"129":{"start":{"line":210,"column":6},"end":{"line":210,"column":18}},"130":{"start":{"line":213,"column":4},"end":{"line":213,"column":16}},"131":{"start":{"line":223,"column":4},"end":{"line":245,"column":5}},"132":{"start":{"line":224,"column":6},"end":{"line":244,"column":7}},"133":{"start":{"line":225,"column":20},"end":{"line":225,"column":28}},"134":{"start":{"line":227,"column":8},"end":{"line":243,"column":9}},"135":{"start":{"line":229,"column":10},"end":{"line":234,"column":11}},"136":{"start":{"line":231,"column":12},"end":{"line":231,"column":59}},"137":{"start":{"line":233,"column":12},"end":{"line":233,"column":41}},"138":{"start":{"line":235,"column":23},"end":{"line":235,"column":50}},"139":{"start":{"line":236,"column":10},"end":{"line":241,"column":11}},"140":{"start":{"line":237,"column":30},"end":{"line":237,"column":99}},"141":{"start":{"line":240,"column":12},"end":{"line":240,"column":95}},"142":{"start":{"line":242,"column":10},"end":{"line":242,"column":16}},"143":{"start":{"line":246,"column":4},"end":{"line":246,"column":29}},"144":{"start":{"line":251,"column":15},"end":{"line":251,"column":32}},"145":{"start":{"line":252,"column":6},"end":{"line":252,"column":39}},"146":{"start":{"line":252,"column":21},"end":{"line":252,"column":39}},"147":{"start":{"line":253,"column":15},"end":{"line":253,"column":32}},"148":{"start":{"line":254,"column":6},"end":{"line":254,"column":39}},"149":{"start":{"line":254,"column":21},"end":{"line":254,"column":39}},"150":{"start":{"line":255,"column":6},"end":{"line":255,"column":21}},"151":{"start":{"line":257,"column":17},"end":{"line":257,"column":33}},"152":{"start":{"line":258,"column":16},"end":{"line":264,"column":6}},"153":{"start":{"line":259,"column":19},"end":{"line":259,"column":48}},"154":{"start":{"line":260,"column":6},"end":{"line":262,"column":7}},"155":{"start":{"line":261,"column":8},"end":{"line":261,"column":39}},"156":{"start":{"line":263,"column":6},"end":{"line":263,"column":20}},"157":{"start":{"line":265,"column":4},"end":{"line":265,"column":17}},"158":{"start":{"line":277,"column":4},"end":{"line":277,"column":33}},"159":{"start":{"line":277,"column":21},"end":{"line":277,"column":33}},"160":{"start":{"line":278,"column":4},"end":{"line":282,"column":5}},"161":{"start":{"line":279,"column":6},"end":{"line":279,"column":45}},"162":{"start":{"line":280,"column":6},"end":{"line":280,"column":21}},"163":{"start":{"line":281,"column":6},"end":{"line":281,"column":18}},"164":{"start":{"line":285,"column":18},"end":{"line":285,"column":52}},"165":{"start":{"line":286,"column":4},"end":{"line":286,"column":39}},"166":{"start":{"line":288,"column":19},"end":{"line":288,"column":21}},"167":{"start":{"line":289,"column":21},"end":{"line":289,"column":23}},"168":{"start":{"line":290,"column":23},"end":{"line":290,"column":25}},"169":{"start":{"line":291,"column":4},"end":{"line":298,"column":5}},"170":{"start":{"line":292,"column":6},"end":{"line":297,"column":7}},"171":{"start":{"line":292,"column":19},"end":{"line":292,"column":20}},"172":{"start":{"line":292,"column":26},"end":{"line":292,"column":52}},"173":{"start":{"line":293,"column":32},"end":{"line":293,"column":54}},"174":{"start":{"line":294,"column":26},"end":{"line":294,"column":54}},"175":{"start":{"line":295,"column":8},"end":{"line":295,"column":50}},"176":{"start":{"line":296,"column":8},"end":{"line":296,"column":39}},"177":{"start":{"line":300,"column":4},"end":{"line":306,"column":5}},"178":{"start":{"line":301,"column":6},"end":{"line":305,"column":7}},"179":{"start":{"line":302,"column":34},"end":{"line":302,"column":58}},"180":{"start":{"line":303,"column":28},"end":{"line":303,"column":58}},"181":{"start":{"line":304,"column":8},"end":{"line":304,"column":56}},"182":{"start":{"line":309,"column":4},"end":{"line":343,"column":5}},"183":{"start":{"line":310,"column":20},"end":{"line":310,"column":53}},"184":{"start":{"line":311,"column":38},"end":{"line":311,"column":42}},"185":{"start":{"line":312,"column":30},"end":{"line":312,"column":35}},"186":{"start":{"line":313,"column":27},"end":{"line":313,"column":36}},"187":{"start":{"line":315,"column":6},"end":{"line":342,"column":7}},"188":{"start":{"line":316,"column":8},"end":{"line":328,"column":9}},"189":{"start":{"line":316,"column":29},"end":{"line":316,"column":53}},"190":{"start":{"line":317,"column":18},"end":{"line":317,"column":29}},"191":{"start":{"line":319,"column":10},"end":{"line":319,"column":57}},"192":{"start":{"line":319,"column":48},"end":{"line":319,"column":57}},"193":{"start":{"line":320,"column":22},"end":{"line":320,"column":28}},"194":{"start":{"line":321,"column":32},"end":{"line":321,"column":60}},"195":{"start":{"line":322,"column":10},"end":{"line":324,"column":11}},"196":{"start":{"line":323,"column":12},"end":{"line":323,"column":167}},"197":{"start":{"line":323,"column":54},"end":{"line":323,"column":63}},"198":{"start":{"line":323,"column":68},"end":{"line":323,"column":167}},"199":{"start":{"line":325,"column":10},"end":{"line":327,"column":11}},"200":{"start":{"line":326,"column":12},"end":{"line":326,"column":68}},"201":{"start":{"line":330,"column":8},"end":{"line":330,"column":33}},"202":{"start":{"line":331,"column":8},"end":{"line":331,"column":29}},"203":{"start":{"line":333,"column":8},"end":{"line":341,"column":9}},"204":{"start":{"line":334,"column":10},"end":{"line":336,"column":11}},"205":{"start":{"line":335,"column":12},"end":{"line":335,"column":31}},"206":{"start":{"line":338,"column":10},"end":{"line":340,"column":11}},"207":{"start":{"line":339,"column":12},"end":{"line":339,"column":33}},"208":{"start":{"line":345,"column":4},"end":{"line":345,"column":64}},"209":{"start":{"line":347,"column":4},"end":{"line":347,"column":16}},"210":{"start":{"line":351,"column":26},"end":{"line":351,"column":67}},"211":{"start":{"line":352,"column":21},"end":{"line":352,"column":23}},"212":{"start":{"line":353,"column":4},"end":{"line":356,"column":5}},"213":{"start":{"line":353,"column":17},"end":{"line":353,"column":18}},"214":{"start":{"line":354,"column":18},"end":{"line":354,"column":42}},"215":{"start":{"line":355,"column":6},"end":{"line":355,"column":50}},"216":{"start":{"line":357,"column":4},"end":{"line":383,"column":5}},"217":{"start":{"line":358,"column":6},"end":{"line":382,"column":7}},"218":{"start":{"line":359,"column":20},"end":{"line":359,"column":28}},"219":{"start":{"line":361,"column":8},"end":{"line":374,"column":9}},"220":{"start":{"line":363,"column":10},"end":{"line":368,"column":11}},"221":{"start":{"line":365,"column":12},"end":{"line":365,"column":59}},"222":{"start":{"line":367,"column":12},"end":{"line":367,"column":41}},"223":{"start":{"line":369,"column":10},"end":{"line":369,"column":74}},"224":{"start":{"line":370,"column":24},"end":{"line":370,"column":88}},"225":{"start":{"line":371,"column":23},"end":{"line":371,"column":64}},"226":{"start":{"line":372,"column":10},"end":{"line":372,"column":90}},"227":{"start":{"line":373,"column":10},"end":{"line":373,"column":19}},"228":{"start":{"line":375,"column":30},"end":{"line":375,"column":43}},"229":{"start":{"line":376,"column":8},"end":{"line":380,"column":9}},"230":{"start":{"line":377,"column":10},"end":{"line":379,"column":11}},"231":{"start":{"line":377,"column":52},"end":{"line":377,"column":61}},"232":{"start":{"line":378,"column":12},"end":{"line":378,"column":91}},"233":{"start":{"line":381,"column":8},"end":{"line":381,"column":64}},"234":{"start":{"line":387,"column":4},"end":{"line":387,"column":30}},"235":{"start":{"line":388,"column":14},"end":{"line":388,"column":110}},"236":{"start":{"line":389,"column":4},"end":{"line":389,"column":65}},"237":{"start":{"line":390,"column":4},"end":{"line":390,"column":44}},"238":{"start":{"line":391,"column":17},"end":{"line":391,"column":48}},"239":{"start":{"line":392,"column":15},"end":{"line":392,"column":44}},"240":{"start":{"line":393,"column":4},"end":{"line":397,"column":6}},"241":{"start":{"line":401,"column":4},"end":{"line":401,"column":30}},"242":{"start":{"line":402,"column":4},"end":{"line":402,"column":65}},"243":{"start":{"line":403,"column":21},"end":{"line":403,"column":41}},"244":{"start":{"line":405,"column":29},"end":{"line":405,"column":114}},"245":{"start":{"line":406,"column":4},"end":{"line":406,"column":46}},"246":{"start":{"line":408,"column":27},"end":{"line":408,"column":110}},"247":{"start":{"line":410,"column":25},"end":{"line":410,"column":106}},"248":{"start":{"line":412,"column":4},"end":{"line":412,"column":52}},"249":{"start":{"line":413,"column":4},"end":{"line":413,"column":50}},"250":{"start":{"line":415,"column":4},"end":{"line":417,"column":5}},"251":{"start":{"line":416,"column":6},"end":{"line":416,"column":51}},"252":{"start":{"line":419,"column":4},"end":{"line":421,"column":5}},"253":{"start":{"line":420,"column":6},"end":{"line":420,"column":54}},"254":{"start":{"line":423,"column":4},"end":{"line":435,"column":5}},"255":{"start":{"line":424,"column":19},"end":{"line":424,"column":68}},"256":{"start":{"line":425,"column":28},"end":{"line":425,"column":110}},"257":{"start":{"line":426,"column":6},"end":{"line":426,"column":104}},"258":{"start":{"line":427,"column":6},"end":{"line":427,"column":106}},"259":{"start":{"line":428,"column":6},"end":{"line":428,"column":105}},"260":{"start":{"line":429,"column":29},"end":{"line":429,"column":93}},"261":{"start":{"line":430,"column":6},"end":{"line":430,"column":51}},"262":{"start":{"line":432,"column":6},"end":{"line":434,"column":7}},"263":{"start":{"line":433,"column":8},"end":{"line":433,"column":60}},"264":{"start":{"line":437,"column":4},"end":{"line":437,"column":22}},"265":{"start":{"line":449,"column":21},"end":{"line":449,"column":25}},"266":{"start":{"line":450,"column":4},"end":{"line":450,"column":62}},"267":{"start":{"line":451,"column":4},"end":{"line":457,"column":5}},"268":{"start":{"line":452,"column":6},"end":{"line":452,"column":24}},"269":{"start":{"line":453,"column":6},"end":{"line":453,"column":58}},"270":{"start":{"line":454,"column":11},"end":{"line":457,"column":5}},"271":{"start":{"line":455,"column":6},"end":{"line":455,"column":25}},"272":{"start":{"line":456,"column":6},"end":{"line":456,"column":64}},"273":{"start":{"line":458,"column":4},"end":{"line":460,"column":5}},"274":{"start":{"line":459,"column":6},"end":{"line":459,"column":32}},"275":{"start":{"line":461,"column":18},"end":{"line":461,"column":22}},"276":{"start":{"line":462,"column":16},"end":{"line":462,"column":22}},"277":{"start":{"line":464,"column":4},"end":{"line":467,"column":6}},"278":{"start":{"line":466,"column":6},"end":{"line":466,"column":35}},"279":{"start":{"line":466,"column":14},"end":{"line":466,"column":35}},"280":{"start":{"line":469,"column":4},"end":{"line":476,"column":6}},"281":{"start":{"line":471,"column":6},"end":{"line":471,"column":37}},"282":{"start":{"line":471,"column":30},"end":{"line":471,"column":37}},"283":{"start":{"line":472,"column":6},"end":{"line":472,"column":25}},"284":{"start":{"line":473,"column":6},"end":{"line":475,"column":7}},"285":{"start":{"line":474,"column":8},"end":{"line":474,"column":27}},"286":{"start":{"line":478,"column":4},"end":{"line":484,"column":6}},"287":{"start":{"line":479,"column":6},"end":{"line":479,"column":37}},"288":{"start":{"line":479,"column":30},"end":{"line":479,"column":37}},"289":{"start":{"line":480,"column":6},"end":{"line":480,"column":25}},"290":{"start":{"line":481,"column":6},"end":{"line":483,"column":7}},"291":{"start":{"line":482,"column":8},"end":{"line":482,"column":28}},"292":{"start":{"line":486,"column":4},"end":{"line":494,"column":6}},"293":{"start":{"line":488,"column":20},"end":{"line":488,"column":46}},"294":{"start":{"line":489,"column":6},"end":{"line":491,"column":7}},"295":{"start":{"line":490,"column":8},"end":{"line":490,"column":43}},"296":{"start":{"line":492,"column":6},"end":{"line":492,"column":26}},"297":{"start":{"line":493,"column":6},"end":{"line":493,"column":24}},"298":{"start":{"line":496,"column":4},"end":{"line":501,"column":6}},"299":{"start":{"line":497,"column":16},"end":{"line":497,"column":27}},"300":{"start":{"line":498,"column":6},"end":{"line":498,"column":30}},"301":{"start":{"line":499,"column":6},"end":{"line":499,"column":34}},"302":{"start":{"line":500,"column":6},"end":{"line":500,"column":40}},"303":{"start":{"line":503,"column":4},"end":{"line":508,"column":6}},"304":{"start":{"line":504,"column":6},"end":{"line":507,"column":9}},"305":{"start":{"line":504,"column":14},"end":{"line":507,"column":9}},"306":{"start":{"line":506,"column":8},"end":{"line":506,"column":29}},"307":{"start":{"line":510,"column":4},"end":{"line":514,"column":5}},"308":{"start":{"line":511,"column":6},"end":{"line":511,"column":32}},"309":{"start":{"line":513,"column":6},"end":{"line":513,"column":23}},"310":{"start":{"line":515,"column":4},"end":{"line":515,"column":16}},"311":{"start":{"line":520,"column":4},"end":{"line":520,"column":36}},"312":{"start":{"line":520,"column":29},"end":{"line":520,"column":36}},"313":{"start":{"line":522,"column":4},"end":{"line":535,"column":5}},"314":{"start":{"line":523,"column":6},"end":{"line":523,"column":23}},"315":{"start":{"line":524,"column":11},"end":{"line":535,"column":5}},"316":{"start":{"line":526,"column":18},"end":{"line":526,"column":51}},"317":{"start":{"line":527,"column":6},"end":{"line":531,"column":7}},"318":{"start":{"line":528,"column":8},"end":{"line":528,"column":56}},"319":{"start":{"line":530,"column":8},"end":{"line":530,"column":48}},"320":{"start":{"line":534,"column":6},"end":{"line":534,"column":36}},"321":{"start":{"line":539,"column":15},"end":{"line":539,"column":19}},"322":{"start":{"line":540,"column":12},"end":{"line":540,"column":28}},"323":{"start":{"line":541,"column":4},"end":{"line":541,"column":52}},"324":{"start":{"line":542,"column":15},"end":{"line":542,"column":17}},"325":{"start":{"line":543,"column":15},"end":{"line":543,"column":17}},"326":{"start":{"line":545,"column":16},"end":{"line":545,"column":70}},"327":{"start":{"line":546,"column":18},"end":{"line":546,"column":30}},"328":{"start":{"line":548,"column":4},"end":{"line":636,"column":6}},"329":{"start":{"line":549,"column":6},"end":{"line":549,"column":30}},"330":{"start":{"line":550,"column":16},"end":{"line":550,"column":39}},"331":{"start":{"line":551,"column":23},"end":{"line":551,"column":37}},"332":{"start":{"line":552,"column":19},"end":{"line":552,"column":28}},"333":{"start":{"line":553,"column":18},"end":{"line":553,"column":33}},"334":{"start":{"line":554,"column":16},"end":{"line":554,"column":25}},"335":{"start":{"line":555,"column":30},"end":{"line":555,"column":34}},"336":{"start":{"line":558,"column":6},"end":{"line":563,"column":7}},"337":{"start":{"line":559,"column":8},"end":{"line":562,"column":9}},"338":{"start":{"line":560,"column":23},"end":{"line":560,"column":58}},"339":{"start":{"line":561,"column":10},"end":{"line":561,"column":51}},"340":{"start":{"line":566,"column":6},"end":{"line":605,"column":7}},"341":{"start":{"line":567,"column":8},"end":{"line":567,"column":48}},"342":{"start":{"line":567,"column":39},"end":{"line":567,"column":48}},"343":{"start":{"line":568,"column":20},"end":{"line":568,"column":34}},"344":{"start":{"line":569,"column":24},"end":{"line":569,"column":29}},"345":{"start":{"line":570,"column":22},"end":{"line":570,"column":26}},"346":{"start":{"line":571,"column":23},"end":{"line":571,"column":27}},"347":{"start":{"line":572,"column":8},"end":{"line":590,"column":9}},"348":{"start":{"line":574,"column":10},"end":{"line":589,"column":11}},"349":{"start":{"line":576,"column":12},"end":{"line":578,"column":13}},"350":{"start":{"line":577,"column":14},"end":{"line":577,"column":25}},"351":{"start":{"line":579,"column":12},"end":{"line":579,"column":21}},"352":{"start":{"line":580,"column":17},"end":{"line":589,"column":11}},"353":{"start":{"line":582,"column":12},"end":{"line":582,"column":29}},"354":{"start":{"line":583,"column":12},"end":{"line":583,"column":31}},"355":{"start":{"line":584,"column":12},"end":{"line":584,"column":43}},"356":{"start":{"line":585,"column":12},"end":{"line":585,"column":36}},"357":{"start":{"line":586,"column":12},"end":{"line":588,"column":13}},"358":{"start":{"line":587,"column":14},"end":{"line":587,"column":67}},"359":{"start":{"line":591,"column":23},"end":{"line":591,"column":33}},"360":{"start":{"line":592,"column":8},"end":{"line":592,"column":52}},"361":{"start":{"line":593,"column":29},"end":{"line":593,"column":79}},"362":{"start":{"line":594,"column":24},"end":{"line":594,"column":60}},"363":{"start":{"line":596,"column":8},"end":{"line":604,"column":9}},"364":{"start":{"line":598,"column":10},"end":{"line":598,"column":23}},"365":{"start":{"line":599,"column":10},"end":{"line":599,"column":34}},"366":{"start":{"line":600,"column":10},"end":{"line":600,"column":35}},"367":{"start":{"line":601,"column":10},"end":{"line":601,"column":58}},"368":{"start":{"line":603,"column":10},"end":{"line":603,"column":49}},"369":{"start":{"line":607,"column":6},"end":{"line":610,"column":7}},"370":{"start":{"line":608,"column":8},"end":{"line":608,"column":17}},"371":{"start":{"line":609,"column":8},"end":{"line":609,"column":60}},"372":{"start":{"line":612,"column":25},"end":{"line":612,"column":44}},"373":{"start":{"line":613,"column":6},"end":{"line":613,"column":74}},"374":{"start":{"line":616,"column":6},"end":{"line":624,"column":7}},"375":{"start":{"line":617,"column":8},"end":{"line":617,"column":34}},"376":{"start":{"line":618,"column":8},"end":{"line":620,"column":9}},"377":{"start":{"line":619,"column":10},"end":{"line":619,"column":49}},"378":{"start":{"line":621,"column":8},"end":{"line":623,"column":11}},"379":{"start":{"line":625,"column":6},"end":{"line":625,"column":20}},"380":{"start":{"line":626,"column":6},"end":{"line":628,"column":7}},"381":{"start":{"line":627,"column":8},"end":{"line":627,"column":75}},"382":{"start":{"line":627,"column":36},"end":{"line":627,"column":75}},"383":{"start":{"line":630,"column":6},"end":{"line":635,"column":9}},"384":{"start":{"line":638,"column":4},"end":{"line":664,"column":6}},"385":{"start":{"line":639,"column":24},"end":{"line":639,"column":48}},"386":{"start":{"line":640,"column":6},"end":{"line":640,"column":29}},"387":{"start":{"line":641,"column":20},"end":{"line":641,"column":31}},"388":{"start":{"line":642,"column":16},"end":{"line":642,"column":39}},"389":{"start":{"line":643,"column":6},"end":{"line":645,"column":7}},"390":{"start":{"line":644,"column":8},"end":{"line":644,"column":24}},"391":{"start":{"line":646,"column":6},"end":{"line":660,"column":7}},"392":{"start":{"line":647,"column":8},"end":{"line":659,"column":9}},"393":{"start":{"line":649,"column":20},"end":{"line":649,"column":43}},"394":{"start":{"line":650,"column":10},"end":{"line":656,"column":11}},"395":{"start":{"line":652,"column":12},"end":{"line":652,"column":37}},"396":{"start":{"line":655,"column":12},"end":{"line":655,"column":60}},"397":{"start":{"line":658,"column":10},"end":{"line":658,"column":51}},"398":{"start":{"line":661,"column":6},"end":{"line":663,"column":7}},"399":{"start":{"line":662,"column":8},"end":{"line":662,"column":49}},"400":{"start":{"line":666,"column":4},"end":{"line":675,"column":6}},"401":{"start":{"line":667,"column":6},"end":{"line":667,"column":33}},"402":{"start":{"line":668,"column":6},"end":{"line":668,"column":31}},"403":{"start":{"line":668,"column":24},"end":{"line":668,"column":31}},"404":{"start":{"line":670,"column":6},"end":{"line":672,"column":7}},"405":{"start":{"line":671,"column":8},"end":{"line":671,"column":42}},"406":{"start":{"line":674,"column":6},"end":{"line":674,"column":31}},"407":{"start":{"line":677,"column":4},"end":{"line":680,"column":6}},"408":{"start":{"line":678,"column":16},"end":{"line":678,"column":39}},"409":{"start":{"line":679,"column":6},"end":{"line":679,"column":35}},"410":{"start":{"line":682,"column":4},"end":{"line":690,"column":6}},"411":{"start":{"line":683,"column":6},"end":{"line":683,"column":33}},"412":{"start":{"line":684,"column":6},"end":{"line":684,"column":31}},"413":{"start":{"line":684,"column":24},"end":{"line":684,"column":31}},"414":{"start":{"line":686,"column":16},"end":{"line":686,"column":39}},"415":{"start":{"line":687,"column":23},"end":{"line":687,"column":37}},"416":{"start":{"line":688,"column":18},"end":{"line":688,"column":46}},"417":{"start":{"line":689,"column":6},"end":{"line":689,"column":36}},"418":{"start":{"line":692,"column":4},"end":{"line":692,"column":25}},"419":{"start":{"line":695,"column":16},"end":{"line":701,"column":5}},"420":{"start":{"line":696,"column":6},"end":{"line":700,"column":7}},"421":{"start":{"line":697,"column":8},"end":{"line":699,"column":9}},"422":{"start":{"line":698,"column":10},"end":{"line":698,"column":34}},"423":{"start":{"line":704,"column":4},"end":{"line":709,"column":5}},"424":{"start":{"line":705,"column":16},"end":{"line":705,"column":23}},"425":{"start":{"line":706,"column":6},"end":{"line":708,"column":7}},"426":{"start":{"line":706,"column":19},"end":{"line":706,"column":20}},"427":{"start":{"line":707,"column":8},"end":{"line":707,"column":40}},"428":{"start":{"line":711,"column":4},"end":{"line":731,"column":5}},"429":{"start":{"line":712,"column":17},"end":{"line":712,"column":35}},"430":{"start":{"line":713,"column":6},"end":{"line":729,"column":7}},"431":{"start":{"line":714,"column":8},"end":{"line":728,"column":9}},"432":{"start":{"line":716,"column":29},"end":{"line":716,"column":67}},"433":{"start":{"line":718,"column":10},"end":{"line":720,"column":11}},"434":{"start":{"line":719,"column":12},"end":{"line":719,"column":66}},"435":{"start":{"line":722,"column":10},"end":{"line":724,"column":11}},"436":{"start":{"line":723,"column":12},"end":{"line":723,"column":71}},"437":{"start":{"line":725,"column":22},"end":{"line":725,"column":45}},"438":{"start":{"line":726,"column":10},"end":{"line":726,"column":28}},"439":{"start":{"line":727,"column":10},"end":{"line":727,"column":22}},"440":{"start":{"line":730,"column":6},"end":{"line":730,"column":27}},"441":{"start":{"line":732,"column":4},"end":{"line":732,"column":16}},"442":{"start":{"line":738,"column":21},"end":{"line":738,"column":25}},"443":{"start":{"line":739,"column":18},"end":{"line":739,"column":91}},"444":{"start":{"line":740,"column":2},"end":{"line":765,"column":3}},"445":{"start":{"line":742,"column":4},"end":{"line":742,"column":23}},"446":{"start":{"line":744,"column":4},"end":{"line":746,"column":5}},"447":{"start":{"line":745,"column":6},"end":{"line":745,"column":47}},"448":{"start":{"line":747,"column":22},"end":{"line":747,"column":99}},"449":{"start":{"line":748,"column":4},"end":{"line":750,"column":5}},"450":{"start":{"line":749,"column":6},"end":{"line":749,"column":67}},"451":{"start":{"line":751,"column":21},"end":{"line":751,"column":96}},"452":{"start":{"line":752,"column":4},"end":{"line":754,"column":5}},"453":{"start":{"line":753,"column":6},"end":{"line":753,"column":65}},"454":{"start":{"line":755,"column":17},"end":{"line":755,"column":84}},"455":{"start":{"line":756,"column":4},"end":{"line":764,"column":5}},"456":{"start":{"line":757,"column":6},"end":{"line":763,"column":7}},"457":{"start":{"line":759,"column":8},"end":{"line":759,"column":59}},"458":{"start":{"line":762,"column":8},"end":{"line":762,"column":75}},"459":{"start":{"line":766,"column":2},"end":{"line":766,"column":22}},"460":{"start":{"line":770,"column":21},"end":{"line":770,"column":25}},"461":{"start":{"line":771,"column":13},"end":{"line":771,"column":69}},"462":{"start":{"line":772,"column":2},"end":{"line":806,"column":3}},"463":{"start":{"line":774,"column":4},"end":{"line":774,"column":23}},"464":{"start":{"line":775,"column":4},"end":{"line":775,"column":66}},"465":{"start":{"line":776,"column":16},"end":{"line":776,"column":81}},"466":{"start":{"line":777,"column":4},"end":{"line":779,"column":5}},"467":{"start":{"line":778,"column":6},"end":{"line":778,"column":76}},"468":{"start":{"line":780,"column":18},"end":{"line":780,"column":87}},"469":{"start":{"line":781,"column":4},"end":{"line":783,"column":5}},"470":{"start":{"line":782,"column":6},"end":{"line":782,"column":80}},"471":{"start":{"line":784,"column":17},"end":{"line":784,"column":84}},"472":{"start":{"line":785,"column":4},"end":{"line":787,"column":5}},"473":{"start":{"line":786,"column":6},"end":{"line":786,"column":78}},"474":{"start":{"line":788,"column":15},"end":{"line":788,"column":78}},"475":{"start":{"line":789,"column":4},"end":{"line":791,"column":5}},"476":{"start":{"line":790,"column":6},"end":{"line":790,"column":74}},"477":{"start":{"line":792,"column":15},"end":{"line":792,"column":78}},"478":{"start":{"line":793,"column":4},"end":{"line":795,"column":5}},"479":{"start":{"line":794,"column":6},"end":{"line":794,"column":74}},"480":{"start":{"line":796,"column":17},"end":{"line":796,"column":84}},"481":{"start":{"line":797,"column":4},"end":{"line":805,"column":5}},"482":{"start":{"line":798,"column":6},"end":{"line":804,"column":7}},"483":{"start":{"line":800,"column":8},"end":{"line":800,"column":59}},"484":{"start":{"line":803,"column":8},"end":{"line":803,"column":75}},"485":{"start":{"line":807,"column":2},"end":{"line":807,"column":22}},"486":{"start":{"line":811,"column":16},"end":{"line":811,"column":57}},"487":{"start":{"line":812,"column":2},"end":{"line":820,"column":3}},"488":{"start":{"line":813,"column":4},"end":{"line":813,"column":17}},"489":{"start":{"line":814,"column":9},"end":{"line":820,"column":3}},"490":{"start":{"line":815,"column":4},"end":{"line":818,"column":5}},"491":{"start":{"line":817,"column":6},"end":{"line":817,"column":61}},"492":{"start":{"line":819,"column":4},"end":{"line":819,"column":19}},"493":{"start":{"line":821,"column":2},"end":{"line":821,"column":17}},"494":{"start":{"line":825,"column":2},"end":{"line":825,"column":44}},"495":{"start":{"line":825,"column":32},"end":{"line":825,"column":44}},"496":{"start":{"line":826,"column":14},"end":{"line":826,"column":18}},"497":{"start":{"line":827,"column":15},"end":{"line":827,"column":46}},"498":{"start":{"line":828,"column":2},"end":{"line":845,"column":3}},"499":{"start":{"line":829,"column":19},"end":{"line":829,"column":23}},"500":{"start":{"line":833,"column":4},"end":{"line":835,"column":5}},"501":{"start":{"line":834,"column":6},"end":{"line":834,"column":36}},"502":{"start":{"line":836,"column":4},"end":{"line":836,"column":31}},"503":{"start":{"line":837,"column":9},"end":{"line":845,"column":3}},"504":{"start":{"line":838,"column":4},"end":{"line":842,"column":5}},"505":{"start":{"line":839,"column":6},"end":{"line":839,"column":19}},"506":{"start":{"line":841,"column":6},"end":{"line":841,"column":20}},"507":{"start":{"line":843,"column":9},"end":{"line":845,"column":3}},"508":{"start":{"line":844,"column":4},"end":{"line":844,"column":25}},"509":{"start":{"line":846,"column":2},"end":{"line":846,"column":15}},"510":{"start":{"line":850,"column":2},"end":{"line":850,"column":24}},"511":{"start":{"line":851,"column":15},"end":{"line":851,"column":33}},"512":{"start":{"line":852,"column":2},"end":{"line":852,"column":36}},"513":{"start":{"line":856,"column":2},"end":{"line":856,"column":24}},"514":{"start":{"line":857,"column":15},"end":{"line":857,"column":33}},"515":{"start":{"line":858,"column":2},"end":{"line":858,"column":30}},"516":{"start":{"line":862,"column":2},"end":{"line":862,"column":24}},"517":{"start":{"line":863,"column":15},"end":{"line":863,"column":33}},"518":{"start":{"line":864,"column":2},"end":{"line":864,"column":16}},"519":{"start":{"line":868,"column":2},"end":{"line":868,"column":50}},"520":{"start":{"line":868,"column":39},"end":{"line":868,"column":50}},"521":{"start":{"line":869,"column":2},"end":{"line":875,"column":3}},"522":{"start":{"line":870,"column":4},"end":{"line":870,"column":25}},"523":{"start":{"line":871,"column":9},"end":{"line":875,"column":3}},"524":{"start":{"line":872,"column":4},"end":{"line":872,"column":25}},"525":{"start":{"line":873,"column":9},"end":{"line":875,"column":3}},"526":{"start":{"line":874,"column":4},"end":{"line":874,"column":29}},"527":{"start":{"line":876,"column":2},"end":{"line":876,"column":13}},"528":{"start":{"line":879,"column":0},"end":{"line":879,"column":28}},"529":{"start":{"line":882,"column":0},"end":{"line":882,"column":39}},"530":{"start":{"line":883,"column":0},"end":{"line":883,"column":37}},"531":{"start":{"line":884,"column":0},"end":{"line":884,"column":37}},"532":{"start":{"line":885,"column":0},"end":{"line":885,"column":45}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":23,"column":2},"end":{"line":23,"column":3}},"loc":{"start":{"line":23,"column":32},"end":{"line":30,"column":3}},"line":23},"1":{"name":"(anonymous_1)","decl":{"start":{"line":32,"column":2},"end":{"line":32,"column":3}},"loc":{"start":{"line":32,"column":46},"end":{"line":214,"column":3}},"line":32},"2":{"name":"(anonymous_2)","decl":{"start":{"line":221,"column":2},"end":{"line":221,"column":3}},"loc":{"start":{"line":221,"column":32},"end":{"line":247,"column":3}},"line":221},"3":{"name":"(anonymous_3)","decl":{"start":{"line":249,"column":2},"end":{"line":249,"column":3}},"loc":{"start":{"line":249,"column":31},"end":{"line":266,"column":3}},"line":249},"4":{"name":"compare","decl":{"start":{"line":250,"column":13},"end":{"line":250,"column":20}},"loc":{"start":{"line":250,"column":36},"end":{"line":256,"column":5}},"line":250},"5":{"name":"(anonymous_5)","decl":{"start":{"line":258,"column":37},"end":{"line":258,"column":38}},"loc":{"start":{"line":258,"column":49},"end":{"line":264,"column":5}},"line":258},"6":{"name":"(anonymous_6)","decl":{"start":{"line":276,"column":2},"end":{"line":276,"column":3}},"loc":{"start":{"line":276,"column":53},"end":{"line":348,"column":3}},"line":276},"7":{"name":"(anonymous_7)","decl":{"start":{"line":350,"column":2},"end":{"line":350,"column":3}},"loc":{"start":{"line":350,"column":57},"end":{"line":384,"column":3}},"line":350},"8":{"name":"(anonymous_8)","decl":{"start":{"line":386,"column":2},"end":{"line":386,"column":3}},"loc":{"start":{"line":386,"column":43},"end":{"line":398,"column":3}},"line":386},"9":{"name":"(anonymous_9)","decl":{"start":{"line":400,"column":2},"end":{"line":400,"column":3}},"loc":{"start":{"line":400,"column":74},"end":{"line":438,"column":3}},"line":400},"10":{"name":"(anonymous_10)","decl":{"start":{"line":447,"column":2},"end":{"line":447,"column":3}},"loc":{"start":{"line":447,"column":33},"end":{"line":516,"column":3}},"line":447},"11":{"name":"(anonymous_11)","decl":{"start":{"line":464,"column":21},"end":{"line":464,"column":22}},"loc":{"start":{"line":464,"column":34},"end":{"line":467,"column":5}},"line":464},"12":{"name":"(anonymous_12)","decl":{"start":{"line":469,"column":20},"end":{"line":469,"column":21}},"loc":{"start":{"line":469,"column":36},"end":{"line":476,"column":5}},"line":469},"13":{"name":"(anonymous_13)","decl":{"start":{"line":478,"column":21},"end":{"line":478,"column":22}},"loc":{"start":{"line":478,"column":37},"end":{"line":484,"column":5}},"line":478},"14":{"name":"(anonymous_14)","decl":{"start":{"line":486,"column":23},"end":{"line":486,"column":24}},"loc":{"start":{"line":486,"column":39},"end":{"line":494,"column":5}},"line":486},"15":{"name":"(anonymous_15)","decl":{"start":{"line":496,"column":24},"end":{"line":496,"column":25}},"loc":{"start":{"line":496,"column":42},"end":{"line":501,"column":5}},"line":496},"16":{"name":"(anonymous_16)","decl":{"start":{"line":503,"column":19},"end":{"line":503,"column":20}},"loc":{"start":{"line":503,"column":31},"end":{"line":508,"column":5}},"line":503},"17":{"name":"(anonymous_17)","decl":{"start":{"line":504,"column":31},"end":{"line":504,"column":32}},"loc":{"start":{"line":504,"column":43},"end":{"line":507,"column":7}},"line":504},"18":{"name":"(anonymous_18)","decl":{"start":{"line":518,"column":2},"end":{"line":518,"column":3}},"loc":{"start":{"line":518,"column":25},"end":{"line":536,"column":3}},"line":518},"19":{"name":"(anonymous_19)","decl":{"start":{"line":538,"column":2},"end":{"line":538,"column":3}},"loc":{"start":{"line":538,"column":40},"end":{"line":733,"column":3}},"line":538},"20":{"name":"(anonymous_20)","decl":{"start":{"line":548,"column":18},"end":{"line":548,"column":19}},"loc":{"start":{"line":548,"column":34},"end":{"line":636,"column":5}},"line":548},"21":{"name":"(anonymous_21)","decl":{"start":{"line":638,"column":19},"end":{"line":638,"column":20}},"loc":{"start":{"line":638,"column":37},"end":{"line":664,"column":5}},"line":638},"22":{"name":"(anonymous_22)","decl":{"start":{"line":666,"column":16},"end":{"line":666,"column":17}},"loc":{"start":{"line":666,"column":32},"end":{"line":675,"column":5}},"line":666},"23":{"name":"(anonymous_23)","decl":{"start":{"line":677,"column":25},"end":{"line":677,"column":26}},"loc":{"start":{"line":677,"column":41},"end":{"line":680,"column":5}},"line":677},"24":{"name":"(anonymous_24)","decl":{"start":{"line":682,"column":15},"end":{"line":682,"column":16}},"loc":{"start":{"line":682,"column":31},"end":{"line":690,"column":5}},"line":682},"25":{"name":"merge","decl":{"start":{"line":695,"column":25},"end":{"line":695,"column":30}},"loc":{"start":{"line":695,"column":42},"end":{"line":701,"column":5}},"line":695},"26":{"name":"getSoap11FaultErrorMessage","decl":{"start":{"line":737,"column":9},"end":{"line":737,"column":35}},"loc":{"start":{"line":737,"column":47},"end":{"line":767,"column":1}},"line":737},"27":{"name":"getSoap12FaultErrorMessage","decl":{"start":{"line":769,"column":9},"end":{"line":769,"column":35}},"loc":{"start":{"line":769,"column":47},"end":{"line":808,"column":1}},"line":769},"28":{"name":"declareNamespace","decl":{"start":{"line":810,"column":9},"end":{"line":810,"column":25}},"loc":{"start":{"line":810,"column":58},"end":{"line":822,"column":1}},"line":810},"29":{"name":"parseValue","decl":{"start":{"line":824,"column":9},"end":{"line":824,"column":19}},"loc":{"start":{"line":824,"column":38},"end":{"line":847,"column":1}},"line":824},"30":{"name":"toXmlDate","decl":{"start":{"line":849,"column":9},"end":{"line":849,"column":18}},"loc":{"start":{"line":849,"column":25},"end":{"line":853,"column":1}},"line":849},"31":{"name":"toXmlTime","decl":{"start":{"line":855,"column":9},"end":{"line":855,"column":18}},"loc":{"start":{"line":855,"column":25},"end":{"line":859,"column":1}},"line":855},"32":{"name":"toXmlDateTime","decl":{"start":{"line":861,"column":9},"end":{"line":861,"column":22}},"loc":{"start":{"line":861,"column":29},"end":{"line":865,"column":1}},"line":861},"33":{"name":"toXmlDateOrTime","decl":{"start":{"line":867,"column":9},"end":{"line":867,"column":24}},"loc":{"start":{"line":867,"column":42},"end":{"line":877,"column":1}},"line":867}},"branchMap":{"0":{"loc":{"start":{"line":24,"column":19},"end":{"line":24,"column":32}},"type":"binary-expr","locations":[{"start":{"line":24,"column":19},"end":{"line":24,"column":26}},{"start":{"line":24,"column":30},"end":{"line":24,"column":32}}],"line":24},"1":{"loc":{"start":{"line":25,"column":19},"end":{"line":25,"column":32}},"type":"binary-expr","locations":[{"start":{"line":25,"column":19},"end":{"line":25,"column":26}},{"start":{"line":25,"column":30},"end":{"line":25,"column":32}}],"line":25},"2":{"loc":{"start":{"line":26,"column":28},"end":{"line":26,"column":61}},"type":"binary-expr","locations":[{"start":{"line":26,"column":28},"end":{"line":26,"column":49}},{"start":{"line":26,"column":53},"end":{"line":26,"column":61}}],"line":26},"3":{"loc":{"start":{"line":27,"column":26},"end":{"line":27,"column":55}},"type":"binary-expr","locations":[{"start":{"line":27,"column":26},"end":{"line":27,"column":45}},{"start":{"line":27,"column":49},"end":{"line":27,"column":55}}],"line":27},"4":{"loc":{"start":{"line":28,"column":33},"end":{"line":28,"column":76}},"type":"binary-expr","locations":[{"start":{"line":28,"column":33},"end":{"line":28,"column":59}},{"start":{"line":28,"column":63},"end":{"line":28,"column":76}}],"line":28},"5":{"loc":{"start":{"line":29,"column":30},"end":{"line":29,"column":67}},"type":"binary-expr","locations":[{"start":{"line":29,"column":30},"end":{"line":29,"column":53}},{"start":{"line":29,"column":57},"end":{"line":29,"column":67}}],"line":29},"6":{"loc":{"start":{"line":33,"column":4},"end":{"line":35,"column":5}},"type":"if","locations":[{"start":{"line":33,"column":4},"end":{"line":35,"column":5}},{"start":{"line":33,"column":4},"end":{"line":35,"column":5}}],"line":33},"7":{"loc":{"start":{"line":36,"column":4},"end":{"line":38,"column":5}},"type":"if","locations":[{"start":{"line":36,"column":4},"end":{"line":38,"column":5}},{"start":{"line":36,"column":4},"end":{"line":38,"column":5}}],"line":36},"8":{"loc":{"start":{"line":42,"column":4},"end":{"line":54,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":54,"column":5}},{"start":{"line":42,"column":4},"end":{"line":54,"column":5}}],"line":42},"9":{"loc":{"start":{"line":45,"column":6},"end":{"line":52,"column":7}},"type":"if","locations":[{"start":{"line":45,"column":6},"end":{"line":52,"column":7}},{"start":{"line":45,"column":6},"end":{"line":52,"column":7}}],"line":45},"10":{"loc":{"start":{"line":47,"column":13},"end":{"line":52,"column":7}},"type":"if","locations":[{"start":{"line":47,"column":13},"end":{"line":52,"column":7}},{"start":{"line":47,"column":13},"end":{"line":52,"column":7}}],"line":47},"11":{"loc":{"start":{"line":49,"column":21},"end":{"line":49,"column":71}},"type":"cond-expr","locations":[{"start":{"line":49,"column":31},"end":{"line":49,"column":45}},{"start":{"line":49,"column":48},"end":{"line":49,"column":71}}],"line":49},"12":{"loc":{"start":{"line":50,"column":23},"end":{"line":50,"column":58}},"type":"cond-expr","locations":[{"start":{"line":50,"column":32},"end":{"line":50,"column":51}},{"start":{"line":50,"column":54},"end":{"line":50,"column":58}}],"line":50},"13":{"loc":{"start":{"line":56,"column":4},"end":{"line":206,"column":5}},"type":"if","locations":[{"start":{"line":56,"column":4},"end":{"line":206,"column":5}},{"start":{"line":56,"column":4},"end":{"line":206,"column":5}}],"line":56},"14":{"loc":{"start":{"line":60,"column":6},"end":{"line":67,"column":7}},"type":"if","locations":[{"start":{"line":60,"column":6},"end":{"line":67,"column":7}},{"start":{"line":60,"column":6},"end":{"line":67,"column":7}}],"line":60},"15":{"loc":{"start":{"line":61,"column":8},"end":{"line":66,"column":9}},"type":"if","locations":[{"start":{"line":61,"column":8},"end":{"line":66,"column":9}},{"start":{"line":61,"column":8},"end":{"line":66,"column":9}}],"line":61},"16":{"loc":{"start":{"line":68,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":68,"column":6},"end":{"line":77,"column":7}},{"start":{"line":68,"column":6},"end":{"line":77,"column":7}}],"line":68},"17":{"loc":{"start":{"line":68,"column":10},"end":{"line":68,"column":49}},"type":"binary-expr","locations":[{"start":{"line":68,"column":10},"end":{"line":68,"column":22}},{"start":{"line":68,"column":26},"end":{"line":68,"column":49}}],"line":68},"18":{"loc":{"start":{"line":70,"column":8},"end":{"line":72,"column":9}},"type":"if","locations":[{"start":{"line":70,"column":8},"end":{"line":72,"column":9}},{"start":{"line":70,"column":8},"end":{"line":72,"column":9}}],"line":70},"19":{"loc":{"start":{"line":74,"column":8},"end":{"line":76,"column":9}},"type":"if","locations":[{"start":{"line":74,"column":8},"end":{"line":76,"column":9}},{"start":{"line":74,"column":8},"end":{"line":76,"column":9}}],"line":74},"20":{"loc":{"start":{"line":81,"column":6},"end":{"line":103,"column":7}},"type":"if","locations":[{"start":{"line":81,"column":6},"end":{"line":103,"column":7}},{"start":{"line":81,"column":6},"end":{"line":103,"column":7}}],"line":81},"21":{"loc":{"start":{"line":85,"column":13},"end":{"line":103,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":13},"end":{"line":103,"column":7}},{"start":{"line":85,"column":13},"end":{"line":103,"column":7}}],"line":85},"22":{"loc":{"start":{"line":92,"column":8},"end":{"line":95,"column":9}},"type":"if","locations":[{"start":{"line":92,"column":8},"end":{"line":95,"column":9}},{"start":{"line":92,"column":8},"end":{"line":95,"column":9}}],"line":92},"23":{"loc":{"start":{"line":92,"column":12},"end":{"line":92,"column":58}},"type":"binary-expr","locations":[{"start":{"line":92,"column":12},"end":{"line":92,"column":28}},{"start":{"line":92,"column":32},"end":{"line":92,"column":58}}],"line":92},"24":{"loc":{"start":{"line":97,"column":21},"end":{"line":97,"column":71}},"type":"cond-expr","locations":[{"start":{"line":97,"column":31},"end":{"line":97,"column":45}},{"start":{"line":97,"column":48},"end":{"line":97,"column":71}}],"line":97},"25":{"loc":{"start":{"line":98,"column":22},"end":{"line":98,"column":57}},"type":"cond-expr","locations":[{"start":{"line":98,"column":31},"end":{"line":98,"column":50}},{"start":{"line":98,"column":53},"end":{"line":98,"column":57}}],"line":98},"26":{"loc":{"start":{"line":100,"column":8},"end":{"line":102,"column":9}},"type":"if","locations":[{"start":{"line":100,"column":8},"end":{"line":102,"column":9}},{"start":{"line":100,"column":8},"end":{"line":102,"column":9}}],"line":100},"27":{"loc":{"start":{"line":101,"column":18},"end":{"line":101,"column":54}},"type":"cond-expr","locations":[{"start":{"line":101,"column":27},"end":{"line":101,"column":44}},{"start":{"line":101,"column":47},"end":{"line":101,"column":54}}],"line":101},"28":{"loc":{"start":{"line":106,"column":6},"end":{"line":132,"column":7}},"type":"if","locations":[{"start":{"line":106,"column":6},"end":{"line":132,"column":7}},{"start":{"line":106,"column":6},"end":{"line":132,"column":7}}],"line":106},"29":{"loc":{"start":{"line":106,"column":10},"end":{"line":106,"column":43}},"type":"binary-expr","locations":[{"start":{"line":106,"column":10},"end":{"line":106,"column":18}},{"start":{"line":106,"column":22},"end":{"line":106,"column":43}}],"line":106},"30":{"loc":{"start":{"line":111,"column":13},"end":{"line":132,"column":7}},"type":"if","locations":[{"start":{"line":111,"column":13},"end":{"line":132,"column":7}},{"start":{"line":111,"column":13},"end":{"line":132,"column":7}}],"line":111},"31":{"loc":{"start":{"line":111,"column":17},"end":{"line":111,"column":122}},"type":"binary-expr","locations":[{"start":{"line":111,"column":17},"end":{"line":111,"column":25}},{"start":{"line":111,"column":29},"end":{"line":111,"column":55}},{"start":{"line":111,"column":59},"end":{"line":111,"column":71}},{"start":{"line":111,"column":75},"end":{"line":111,"column":122}}],"line":111},"32":{"loc":{"start":{"line":118,"column":8},"end":{"line":129,"column":9}},"type":"if","locations":[{"start":{"line":118,"column":8},"end":{"line":129,"column":9}},{"start":{"line":118,"column":8},"end":{"line":129,"column":9}}],"line":118},"33":{"loc":{"start":{"line":118,"column":12},"end":{"line":118,"column":63}},"type":"binary-expr","locations":[{"start":{"line":118,"column":12},"end":{"line":118,"column":44}},{"start":{"line":118,"column":48},"end":{"line":118,"column":63}}],"line":118},"34":{"loc":{"start":{"line":120,"column":10},"end":{"line":128,"column":11}},"type":"if","locations":[{"start":{"line":120,"column":10},"end":{"line":128,"column":11}},{"start":{"line":120,"column":10},"end":{"line":128,"column":11}}],"line":120},"35":{"loc":{"start":{"line":122,"column":12},"end":{"line":127,"column":13}},"type":"if","locations":[{"start":{"line":122,"column":12},"end":{"line":127,"column":13}},{"start":{"line":122,"column":12},"end":{"line":127,"column":13}}],"line":122},"36":{"loc":{"start":{"line":124,"column":14},"end":{"line":126,"column":15}},"type":"if","locations":[{"start":{"line":124,"column":14},"end":{"line":126,"column":15}},{"start":{"line":124,"column":14},"end":{"line":126,"column":15}}],"line":124},"37":{"loc":{"start":{"line":131,"column":18},"end":{"line":131,"column":87}},"type":"cond-expr","locations":[{"start":{"line":131,"column":29},"end":{"line":131,"column":59}},{"start":{"line":131,"column":62},"end":{"line":131,"column":87}}],"line":131},"38":{"loc":{"start":{"line":134,"column":6},"end":{"line":138,"column":7}},"type":"if","locations":[{"start":{"line":134,"column":6},"end":{"line":138,"column":7}},{"start":{"line":134,"column":6},"end":{"line":138,"column":7}}],"line":134},"39":{"loc":{"start":{"line":134,"column":10},"end":{"line":134,"column":41}},"type":"binary-expr","locations":[{"start":{"line":134,"column":10},"end":{"line":134,"column":15}},{"start":{"line":134,"column":19},"end":{"line":134,"column":41}}],"line":134},"40":{"loc":{"start":{"line":135,"column":8},"end":{"line":137,"column":9}},"type":"if","locations":[{"start":{"line":135,"column":8},"end":{"line":137,"column":9}},{"start":{"line":135,"column":8},"end":{"line":137,"column":9}}],"line":135},"41":{"loc":{"start":{"line":140,"column":6},"end":{"line":148,"column":7}},"type":"if","locations":[{"start":{"line":140,"column":6},"end":{"line":148,"column":7}},{"start":{"line":140,"column":6},"end":{"line":148,"column":7}}],"line":140},"42":{"loc":{"start":{"line":141,"column":8},"end":{"line":147,"column":9}},"type":"if","locations":[{"start":{"line":141,"column":8},"end":{"line":147,"column":9}},{"start":{"line":141,"column":8},"end":{"line":147,"column":9}}],"line":141},"43":{"loc":{"start":{"line":144,"column":10},"end":{"line":146,"column":11}},"type":"if","locations":[{"start":{"line":144,"column":10},"end":{"line":146,"column":11}},{"start":{"line":144,"column":10},"end":{"line":146,"column":11}}],"line":144},"44":{"loc":{"start":{"line":150,"column":6},"end":{"line":184,"column":7}},"type":"if","locations":[{"start":{"line":150,"column":6},"end":{"line":184,"column":7}},{"start":{"line":150,"column":6},"end":{"line":184,"column":7}}],"line":150},"45":{"loc":{"start":{"line":151,"column":8},"end":{"line":157,"column":9}},"type":"if","locations":[{"start":{"line":151,"column":8},"end":{"line":157,"column":9}},{"start":{"line":151,"column":8},"end":{"line":157,"column":9}}],"line":151},"46":{"loc":{"start":{"line":153,"column":10},"end":{"line":156,"column":11}},"type":"if","locations":[{"start":{"line":153,"column":10},"end":{"line":156,"column":11}},{"start":{"line":153,"column":10},"end":{"line":156,"column":11}}],"line":153},"47":{"loc":{"start":{"line":158,"column":8},"end":{"line":160,"column":9}},"type":"if","locations":[{"start":{"line":158,"column":8},"end":{"line":160,"column":9}},{"start":{"line":158,"column":8},"end":{"line":160,"column":9}}],"line":158},"48":{"loc":{"start":{"line":162,"column":13},"end":{"line":184,"column":7}},"type":"if","locations":[{"start":{"line":162,"column":13},"end":{"line":184,"column":7}},{"start":{"line":162,"column":13},"end":{"line":184,"column":7}}],"line":162},"49":{"loc":{"start":{"line":165,"column":8},"end":{"line":183,"column":9}},"type":"if","locations":[{"start":{"line":165,"column":8},"end":{"line":183,"column":9}},{"start":{"line":165,"column":8},"end":{"line":183,"column":9}}],"line":165},"50":{"loc":{"start":{"line":168,"column":12},"end":{"line":181,"column":13}},"type":"if","locations":[{"start":{"line":168,"column":12},"end":{"line":181,"column":13}},{"start":{"line":168,"column":12},"end":{"line":181,"column":13}}],"line":168},"51":{"loc":{"start":{"line":169,"column":14},"end":{"line":180,"column":15}},"type":"if","locations":[{"start":{"line":169,"column":14},"end":{"line":180,"column":15}},{"start":{"line":169,"column":14},"end":{"line":180,"column":15}}],"line":169},"52":{"loc":{"start":{"line":170,"column":16},"end":{"line":179,"column":17}},"type":"if","locations":[{"start":{"line":170,"column":16},"end":{"line":179,"column":17}},{"start":{"line":170,"column":16},"end":{"line":179,"column":17}}],"line":170},"53":{"loc":{"start":{"line":171,"column":18},"end":{"line":178,"column":19}},"type":"if","locations":[{"start":{"line":171,"column":18},"end":{"line":178,"column":19}},{"start":{"line":171,"column":18},"end":{"line":178,"column":19}}],"line":171},"54":{"loc":{"start":{"line":172,"column":20},"end":{"line":177,"column":21}},"type":"if","locations":[{"start":{"line":172,"column":20},"end":{"line":177,"column":21}},{"start":{"line":172,"column":20},"end":{"line":177,"column":21}}],"line":172},"55":{"loc":{"start":{"line":174,"column":22},"end":{"line":176,"column":23}},"type":"if","locations":[{"start":{"line":174,"column":22},"end":{"line":176,"column":23}},{"start":{"line":174,"column":22},"end":{"line":176,"column":23}}],"line":174},"56":{"loc":{"start":{"line":186,"column":6},"end":{"line":199,"column":7}},"type":"if","locations":[{"start":{"line":186,"column":6},"end":{"line":199,"column":7}},{"start":{"line":186,"column":6},"end":{"line":199,"column":7}}],"line":186},"57":{"loc":{"start":{"line":186,"column":10},"end":{"line":186,"column":73}},"type":"binary-expr","locations":[{"start":{"line":186,"column":10},"end":{"line":186,"column":21}},{"start":{"line":186,"column":26},"end":{"line":186,"column":49}},{"start":{"line":186,"column":53},"end":{"line":186,"column":72}}],"line":186},"58":{"loc":{"start":{"line":192,"column":8},"end":{"line":194,"column":9}},"type":"if","locations":[{"start":{"line":192,"column":8},"end":{"line":194,"column":9}},{"start":{"line":192,"column":8},"end":{"line":194,"column":9}}],"line":192},"59":{"loc":{"start":{"line":195,"column":8},"end":{"line":197,"column":9}},"type":"if","locations":[{"start":{"line":195,"column":8},"end":{"line":197,"column":9}},{"start":{"line":195,"column":8},"end":{"line":197,"column":9}}],"line":195},"60":{"loc":{"start":{"line":202,"column":6},"end":{"line":204,"column":7}},"type":"if","locations":[{"start":{"line":202,"column":6},"end":{"line":204,"column":7}},{"start":{"line":202,"column":6},"end":{"line":204,"column":7}}],"line":202},"61":{"loc":{"start":{"line":208,"column":4},"end":{"line":211,"column":5}},"type":"if","locations":[{"start":{"line":208,"column":4},"end":{"line":211,"column":5}},{"start":{"line":208,"column":4},"end":{"line":211,"column":5}}],"line":208},"62":{"loc":{"start":{"line":208,"column":8},"end":{"line":208,"column":94}},"type":"binary-expr","locations":[{"start":{"line":208,"column":8},"end":{"line":208,"column":26}},{"start":{"line":208,"column":30},"end":{"line":208,"column":54}},{"start":{"line":208,"column":58},"end":{"line":208,"column":94}}],"line":208},"63":{"loc":{"start":{"line":223,"column":4},"end":{"line":245,"column":5}},"type":"if","locations":[{"start":{"line":223,"column":4},"end":{"line":245,"column":5}},{"start":{"line":223,"column":4},"end":{"line":245,"column":5}}],"line":223},"64":{"loc":{"start":{"line":223,"column":8},"end":{"line":223,"column":50}},"type":"binary-expr","locations":[{"start":{"line":223,"column":8},"end":{"line":223,"column":21}},{"start":{"line":223,"column":25},"end":{"line":223,"column":50}}],"line":223},"65":{"loc":{"start":{"line":227,"column":8},"end":{"line":243,"column":9}},"type":"if","locations":[{"start":{"line":227,"column":8},"end":{"line":243,"column":9}},{"start":{"line":227,"column":8},"end":{"line":243,"column":9}}],"line":227},"66":{"loc":{"start":{"line":229,"column":10},"end":{"line":234,"column":11}},"type":"if","locations":[{"start":{"line":229,"column":10},"end":{"line":234,"column":11}},{"start":{"line":229,"column":10},"end":{"line":234,"column":11}}],"line":229},"67":{"loc":{"start":{"line":229,"column":14},"end":{"line":229,"column":76}},"type":"binary-expr","locations":[{"start":{"line":229,"column":14},"end":{"line":229,"column":39}},{"start":{"line":229,"column":43},"end":{"line":229,"column":76}}],"line":229},"68":{"loc":{"start":{"line":236,"column":10},"end":{"line":241,"column":11}},"type":"if","locations":[{"start":{"line":236,"column":10},"end":{"line":241,"column":11}},{"start":{"line":236,"column":10},"end":{"line":241,"column":11}}],"line":236},"69":{"loc":{"start":{"line":237,"column":30},"end":{"line":237,"column":99}},"type":"binary-expr","locations":[{"start":{"line":237,"column":30},"end":{"line":237,"column":63}},{"start":{"line":237,"column":67},"end":{"line":237,"column":99}}],"line":237},"70":{"loc":{"start":{"line":240,"column":32},"end":{"line":240,"column":94}},"type":"binary-expr","locations":[{"start":{"line":240,"column":32},"end":{"line":240,"column":43}},{"start":{"line":240,"column":47},"end":{"line":240,"column":94}}],"line":240},"71":{"loc":{"start":{"line":252,"column":6},"end":{"line":252,"column":39}},"type":"if","locations":[{"start":{"line":252,"column":6},"end":{"line":252,"column":39}},{"start":{"line":252,"column":6},"end":{"line":252,"column":39}}],"line":252},"72":{"loc":{"start":{"line":254,"column":6},"end":{"line":254,"column":39}},"type":"if","locations":[{"start":{"line":254,"column":6},"end":{"line":254,"column":39}},{"start":{"line":254,"column":6},"end":{"line":254,"column":39}}],"line":254},"73":{"loc":{"start":{"line":260,"column":6},"end":{"line":262,"column":7}},"type":"if","locations":[{"start":{"line":260,"column":6},"end":{"line":262,"column":7}},{"start":{"line":260,"column":6},"end":{"line":262,"column":7}}],"line":260},"74":{"loc":{"start":{"line":277,"column":4},"end":{"line":277,"column":33}},"type":"if","locations":[{"start":{"line":277,"column":4},"end":{"line":277,"column":33}},{"start":{"line":277,"column":4},"end":{"line":277,"column":33}}],"line":277},"75":{"loc":{"start":{"line":278,"column":4},"end":{"line":282,"column":5}},"type":"if","locations":[{"start":{"line":278,"column":4},"end":{"line":282,"column":5}},{"start":{"line":278,"column":4},"end":{"line":282,"column":5}}],"line":278},"76":{"loc":{"start":{"line":278,"column":8},"end":{"line":278,"column":54}},"type":"binary-expr","locations":[{"start":{"line":278,"column":8},"end":{"line":278,"column":31}},{"start":{"line":278,"column":35},"end":{"line":278,"column":54}}],"line":278},"77":{"loc":{"start":{"line":286,"column":17},"end":{"line":286,"column":38}},"type":"binary-expr","locations":[{"start":{"line":286,"column":17},"end":{"line":286,"column":24}},{"start":{"line":286,"column":28},"end":{"line":286,"column":38}}],"line":286},"78":{"loc":{"start":{"line":291,"column":4},"end":{"line":298,"column":5}},"type":"if","locations":[{"start":{"line":291,"column":4},"end":{"line":298,"column":5}},{"start":{"line":291,"column":4},"end":{"line":298,"column":5}}],"line":291},"79":{"loc":{"start":{"line":300,"column":4},"end":{"line":306,"column":5}},"type":"if","locations":[{"start":{"line":300,"column":4},"end":{"line":306,"column":5}},{"start":{"line":300,"column":4},"end":{"line":306,"column":5}}],"line":300},"80":{"loc":{"start":{"line":309,"column":4},"end":{"line":343,"column":5}},"type":"if","locations":[{"start":{"line":309,"column":4},"end":{"line":343,"column":5}},{"start":{"line":309,"column":4},"end":{"line":343,"column":5}}],"line":309},"81":{"loc":{"start":{"line":319,"column":10},"end":{"line":319,"column":57}},"type":"if","locations":[{"start":{"line":319,"column":10},"end":{"line":319,"column":57}},{"start":{"line":319,"column":10},"end":{"line":319,"column":57}}],"line":319},"82":{"loc":{"start":{"line":321,"column":32},"end":{"line":321,"column":60}},"type":"binary-expr","locations":[{"start":{"line":321,"column":32},"end":{"line":321,"column":43}},{"start":{"line":321,"column":47},"end":{"line":321,"column":60}}],"line":321},"83":{"loc":{"start":{"line":322,"column":10},"end":{"line":324,"column":11}},"type":"if","locations":[{"start":{"line":322,"column":10},"end":{"line":324,"column":11}},{"start":{"line":322,"column":10},"end":{"line":324,"column":11}}],"line":322},"84":{"loc":{"start":{"line":323,"column":12},"end":{"line":323,"column":167}},"type":"if","locations":[{"start":{"line":323,"column":12},"end":{"line":323,"column":167}},{"start":{"line":323,"column":12},"end":{"line":323,"column":167}}],"line":323},"85":{"loc":{"start":{"line":325,"column":10},"end":{"line":327,"column":11}},"type":"if","locations":[{"start":{"line":325,"column":10},"end":{"line":327,"column":11}},{"start":{"line":325,"column":10},"end":{"line":327,"column":11}}],"line":325},"86":{"loc":{"start":{"line":334,"column":10},"end":{"line":336,"column":11}},"type":"if","locations":[{"start":{"line":334,"column":10},"end":{"line":336,"column":11}},{"start":{"line":334,"column":10},"end":{"line":336,"column":11}}],"line":334},"87":{"loc":{"start":{"line":334,"column":14},"end":{"line":334,"column":60}},"type":"binary-expr","locations":[{"start":{"line":334,"column":14},"end":{"line":334,"column":40}},{"start":{"line":334,"column":44},"end":{"line":334,"column":60}}],"line":334},"88":{"loc":{"start":{"line":338,"column":10},"end":{"line":340,"column":11}},"type":"if","locations":[{"start":{"line":338,"column":10},"end":{"line":340,"column":11}},{"start":{"line":338,"column":10},"end":{"line":340,"column":11}}],"line":338},"89":{"loc":{"start":{"line":351,"column":26},"end":{"line":351,"column":67}},"type":"binary-expr","locations":[{"start":{"line":351,"column":26},"end":{"line":351,"column":36}},{"start":{"line":351,"column":40},"end":{"line":351,"column":61}},{"start":{"line":351,"column":65},"end":{"line":351,"column":67}}],"line":351},"90":{"loc":{"start":{"line":357,"column":4},"end":{"line":383,"column":5}},"type":"if","locations":[{"start":{"line":357,"column":4},"end":{"line":383,"column":5}},{"start":{"line":357,"column":4},"end":{"line":383,"column":5}}],"line":357},"91":{"loc":{"start":{"line":357,"column":8},"end":{"line":357,"column":50}},"type":"binary-expr","locations":[{"start":{"line":357,"column":8},"end":{"line":357,"column":21}},{"start":{"line":357,"column":25},"end":{"line":357,"column":50}}],"line":357},"92":{"loc":{"start":{"line":361,"column":8},"end":{"line":374,"column":9}},"type":"if","locations":[{"start":{"line":361,"column":8},"end":{"line":374,"column":9}},{"start":{"line":361,"column":8},"end":{"line":374,"column":9}}],"line":361},"93":{"loc":{"start":{"line":363,"column":10},"end":{"line":368,"column":11}},"type":"if","locations":[{"start":{"line":363,"column":10},"end":{"line":368,"column":11}},{"start":{"line":363,"column":10},"end":{"line":368,"column":11}}],"line":363},"94":{"loc":{"start":{"line":363,"column":14},"end":{"line":363,"column":76}},"type":"binary-expr","locations":[{"start":{"line":363,"column":14},"end":{"line":363,"column":39}},{"start":{"line":363,"column":43},"end":{"line":363,"column":76}}],"line":363},"95":{"loc":{"start":{"line":371,"column":23},"end":{"line":371,"column":64}},"type":"cond-expr","locations":[{"start":{"line":371,"column":33},"end":{"line":371,"column":47}},{"start":{"line":371,"column":50},"end":{"line":371,"column":64}}],"line":371},"96":{"loc":{"start":{"line":372,"column":37},"end":{"line":372,"column":88}},"type":"cond-expr","locations":[{"start":{"line":372,"column":46},"end":{"line":372,"column":73}},{"start":{"line":372,"column":76},"end":{"line":372,"column":88}}],"line":372},"97":{"loc":{"start":{"line":376,"column":8},"end":{"line":380,"column":9}},"type":"if","locations":[{"start":{"line":376,"column":8},"end":{"line":380,"column":9}},{"start":{"line":376,"column":8},"end":{"line":380,"column":9}}],"line":376},"98":{"loc":{"start":{"line":377,"column":10},"end":{"line":379,"column":11}},"type":"if","locations":[{"start":{"line":377,"column":10},"end":{"line":379,"column":11}},{"start":{"line":377,"column":10},"end":{"line":379,"column":11}}],"line":377},"99":{"loc":{"start":{"line":387,"column":13},"end":{"line":387,"column":29}},"type":"binary-expr","locations":[{"start":{"line":387,"column":13},"end":{"line":387,"column":19}},{"start":{"line":387,"column":23},"end":{"line":387,"column":29}}],"line":387},"100":{"loc":{"start":{"line":389,"column":12},"end":{"line":389,"column":64}},"type":"binary-expr","locations":[{"start":{"line":389,"column":12},"end":{"line":389,"column":17}},{"start":{"line":389,"column":21},"end":{"line":389,"column":64}}],"line":389},"101":{"loc":{"start":{"line":401,"column":13},"end":{"line":401,"column":29}},"type":"binary-expr","locations":[{"start":{"line":401,"column":13},"end":{"line":401,"column":19}},{"start":{"line":401,"column":23},"end":{"line":401,"column":29}}],"line":401},"102":{"loc":{"start":{"line":402,"column":12},"end":{"line":402,"column":64}},"type":"binary-expr","locations":[{"start":{"line":402,"column":12},"end":{"line":402,"column":17}},{"start":{"line":402,"column":21},"end":{"line":402,"column":64}}],"line":402},"103":{"loc":{"start":{"line":415,"column":4},"end":{"line":417,"column":5}},"type":"if","locations":[{"start":{"line":415,"column":4},"end":{"line":417,"column":5}},{"start":{"line":415,"column":4},"end":{"line":417,"column":5}}],"line":415},"104":{"loc":{"start":{"line":415,"column":8},"end":{"line":415,"column":55}},"type":"binary-expr","locations":[{"start":{"line":415,"column":8},"end":{"line":415,"column":27}},{"start":{"line":415,"column":31},"end":{"line":415,"column":55}}],"line":415},"105":{"loc":{"start":{"line":419,"column":4},"end":{"line":421,"column":5}},"type":"if","locations":[{"start":{"line":419,"column":4},"end":{"line":421,"column":5}},{"start":{"line":419,"column":4},"end":{"line":421,"column":5}}],"line":419},"106":{"loc":{"start":{"line":419,"column":8},"end":{"line":419,"column":58}},"type":"binary-expr","locations":[{"start":{"line":419,"column":8},"end":{"line":419,"column":27}},{"start":{"line":419,"column":31},"end":{"line":419,"column":58}}],"line":419},"107":{"loc":{"start":{"line":423,"column":4},"end":{"line":435,"column":5}},"type":"if","locations":[{"start":{"line":423,"column":4},"end":{"line":435,"column":5}},{"start":{"line":423,"column":4},"end":{"line":435,"column":5}}],"line":423},"108":{"loc":{"start":{"line":423,"column":8},"end":{"line":423,"column":57}},"type":"binary-expr","locations":[{"start":{"line":423,"column":8},"end":{"line":423,"column":27}},{"start":{"line":423,"column":31},"end":{"line":423,"column":57}}],"line":423},"109":{"loc":{"start":{"line":451,"column":4},"end":{"line":457,"column":5}},"type":"if","locations":[{"start":{"line":451,"column":4},"end":{"line":457,"column":5}},{"start":{"line":451,"column":4},"end":{"line":457,"column":5}}],"line":451},"110":{"loc":{"start":{"line":454,"column":11},"end":{"line":457,"column":5}},"type":"if","locations":[{"start":{"line":454,"column":11},"end":{"line":457,"column":5}},{"start":{"line":454,"column":11},"end":{"line":457,"column":5}}],"line":454},"111":{"loc":{"start":{"line":458,"column":4},"end":{"line":460,"column":5}},"type":"if","locations":[{"start":{"line":458,"column":4},"end":{"line":460,"column":5}},{"start":{"line":458,"column":4},"end":{"line":460,"column":5}}],"line":458},"112":{"loc":{"start":{"line":466,"column":6},"end":{"line":466,"column":35}},"type":"if","locations":[{"start":{"line":466,"column":6},"end":{"line":466,"column":35}},{"start":{"line":466,"column":6},"end":{"line":466,"column":35}}],"line":466},"113":{"loc":{"start":{"line":471,"column":6},"end":{"line":471,"column":37}},"type":"if","locations":[{"start":{"line":471,"column":6},"end":{"line":471,"column":37}},{"start":{"line":471,"column":6},"end":{"line":471,"column":37}}],"line":471},"114":{"loc":{"start":{"line":473,"column":6},"end":{"line":475,"column":7}},"type":"if","locations":[{"start":{"line":473,"column":6},"end":{"line":475,"column":7}},{"start":{"line":473,"column":6},"end":{"line":475,"column":7}}],"line":473},"115":{"loc":{"start":{"line":479,"column":6},"end":{"line":479,"column":37}},"type":"if","locations":[{"start":{"line":479,"column":6},"end":{"line":479,"column":37}},{"start":{"line":479,"column":6},"end":{"line":479,"column":37}}],"line":479},"116":{"loc":{"start":{"line":481,"column":6},"end":{"line":483,"column":7}},"type":"if","locations":[{"start":{"line":481,"column":6},"end":{"line":483,"column":7}},{"start":{"line":481,"column":6},"end":{"line":483,"column":7}}],"line":481},"117":{"loc":{"start":{"line":489,"column":6},"end":{"line":491,"column":7}},"type":"if","locations":[{"start":{"line":489,"column":6},"end":{"line":491,"column":7}},{"start":{"line":489,"column":6},"end":{"line":491,"column":7}}],"line":489},"118":{"loc":{"start":{"line":504,"column":6},"end":{"line":507,"column":9}},"type":"if","locations":[{"start":{"line":504,"column":6},"end":{"line":507,"column":9}},{"start":{"line":504,"column":6},"end":{"line":507,"column":9}}],"line":504},"119":{"loc":{"start":{"line":506,"column":8},"end":{"line":506,"column":28}},"type":"binary-expr","locations":[{"start":{"line":506,"column":8},"end":{"line":506,"column":10}},{"start":{"line":506,"column":14},"end":{"line":506,"column":28}}],"line":506},"120":{"loc":{"start":{"line":510,"column":4},"end":{"line":514,"column":5}},"type":"if","locations":[{"start":{"line":510,"column":4},"end":{"line":514,"column":5}},{"start":{"line":510,"column":4},"end":{"line":514,"column":5}}],"line":510},"121":{"loc":{"start":{"line":520,"column":4},"end":{"line":520,"column":36}},"type":"if","locations":[{"start":{"line":520,"column":4},"end":{"line":520,"column":36}},{"start":{"line":520,"column":4},"end":{"line":520,"column":36}}],"line":520},"122":{"loc":{"start":{"line":522,"column":4},"end":{"line":535,"column":5}},"type":"if","locations":[{"start":{"line":522,"column":4},"end":{"line":535,"column":5}},{"start":{"line":522,"column":4},"end":{"line":535,"column":5}}],"line":522},"123":{"loc":{"start":{"line":524,"column":11},"end":{"line":535,"column":5}},"type":"if","locations":[{"start":{"line":524,"column":11},"end":{"line":535,"column":5}},{"start":{"line":524,"column":11},"end":{"line":535,"column":5}}],"line":524},"124":{"loc":{"start":{"line":527,"column":6},"end":{"line":531,"column":7}},"type":"if","locations":[{"start":{"line":527,"column":6},"end":{"line":531,"column":7}},{"start":{"line":527,"column":6},"end":{"line":531,"column":7}}],"line":527},"125":{"loc":{"start":{"line":541,"column":16},"end":{"line":541,"column":51}},"type":"binary-expr","locations":[{"start":{"line":541,"column":16},"end":{"line":541,"column":25}},{"start":{"line":541,"column":29},"end":{"line":541,"column":51}}],"line":541},"126":{"loc":{"start":{"line":559,"column":8},"end":{"line":562,"column":9}},"type":"if","locations":[{"start":{"line":559,"column":8},"end":{"line":562,"column":9}},{"start":{"line":559,"column":8},"end":{"line":562,"column":9}}],"line":559},"127":{"loc":{"start":{"line":560,"column":23},"end":{"line":560,"column":58}},"type":"cond-expr","locations":[{"start":{"line":560,"column":39},"end":{"line":560,"column":41}},{"start":{"line":560,"column":44},"end":{"line":560,"column":58}}],"line":560},"128":{"loc":{"start":{"line":567,"column":8},"end":{"line":567,"column":48}},"type":"if","locations":[{"start":{"line":567,"column":8},"end":{"line":567,"column":48}},{"start":{"line":567,"column":8},"end":{"line":567,"column":48}}],"line":567},"129":{"loc":{"start":{"line":572,"column":8},"end":{"line":590,"column":9}},"type":"if","locations":[{"start":{"line":572,"column":8},"end":{"line":590,"column":9}},{"start":{"line":572,"column":8},"end":{"line":590,"column":9}}],"line":572},"130":{"loc":{"start":{"line":574,"column":10},"end":{"line":589,"column":11}},"type":"if","locations":[{"start":{"line":574,"column":10},"end":{"line":589,"column":11}},{"start":{"line":574,"column":10},"end":{"line":589,"column":11}}],"line":574},"131":{"loc":{"start":{"line":576,"column":12},"end":{"line":578,"column":13}},"type":"if","locations":[{"start":{"line":576,"column":12},"end":{"line":578,"column":13}},{"start":{"line":576,"column":12},"end":{"line":578,"column":13}}],"line":576},"132":{"loc":{"start":{"line":580,"column":17},"end":{"line":589,"column":11}},"type":"if","locations":[{"start":{"line":580,"column":17},"end":{"line":589,"column":11}},{"start":{"line":580,"column":17},"end":{"line":589,"column":11}}],"line":580},"133":{"loc":{"start":{"line":586,"column":12},"end":{"line":588,"column":13}},"type":"if","locations":[{"start":{"line":586,"column":12},"end":{"line":588,"column":13}},{"start":{"line":586,"column":12},"end":{"line":588,"column":13}}],"line":586},"134":{"loc":{"start":{"line":592,"column":28},"end":{"line":592,"column":51}},"type":"binary-expr","locations":[{"start":{"line":592,"column":28},"end":{"line":592,"column":45}},{"start":{"line":592,"column":49},"end":{"line":592,"column":51}}],"line":592},"135":{"loc":{"start":{"line":593,"column":29},"end":{"line":593,"column":79}},"type":"binary-expr","locations":[{"start":{"line":593,"column":29},"end":{"line":593,"column":39}},{"start":{"line":593,"column":43},"end":{"line":593,"column":79}}],"line":593},"136":{"loc":{"start":{"line":596,"column":8},"end":{"line":604,"column":9}},"type":"if","locations":[{"start":{"line":596,"column":8},"end":{"line":604,"column":9}},{"start":{"line":596,"column":8},"end":{"line":604,"column":9}}],"line":596},"137":{"loc":{"start":{"line":607,"column":6},"end":{"line":610,"column":7}},"type":"if","locations":[{"start":{"line":607,"column":6},"end":{"line":610,"column":7}},{"start":{"line":607,"column":6},"end":{"line":610,"column":7}}],"line":607},"138":{"loc":{"start":{"line":616,"column":6},"end":{"line":624,"column":7}},"type":"if","locations":[{"start":{"line":616,"column":6},"end":{"line":624,"column":7}},{"start":{"line":616,"column":6},"end":{"line":624,"column":7}}],"line":616},"139":{"loc":{"start":{"line":618,"column":8},"end":{"line":620,"column":9}},"type":"if","locations":[{"start":{"line":618,"column":8},"end":{"line":620,"column":9}},{"start":{"line":618,"column":8},"end":{"line":620,"column":9}}],"line":618},"140":{"loc":{"start":{"line":626,"column":6},"end":{"line":628,"column":7}},"type":"if","locations":[{"start":{"line":626,"column":6},"end":{"line":628,"column":7}},{"start":{"line":626,"column":6},"end":{"line":628,"column":7}}],"line":626},"141":{"loc":{"start":{"line":627,"column":8},"end":{"line":627,"column":75}},"type":"if","locations":[{"start":{"line":627,"column":8},"end":{"line":627,"column":75}},{"start":{"line":627,"column":8},"end":{"line":627,"column":75}}],"line":627},"142":{"loc":{"start":{"line":633,"column":20},"end":{"line":633,"column":75}},"type":"binary-expr","locations":[{"start":{"line":633,"column":20},"end":{"line":633,"column":30}},{"start":{"line":633,"column":34},"end":{"line":633,"column":75}}],"line":633},"143":{"loc":{"start":{"line":643,"column":6},"end":{"line":645,"column":7}},"type":"if","locations":[{"start":{"line":643,"column":6},"end":{"line":645,"column":7}},{"start":{"line":643,"column":6},"end":{"line":645,"column":7}}],"line":643},"144":{"loc":{"start":{"line":646,"column":6},"end":{"line":660,"column":7}},"type":"if","locations":[{"start":{"line":646,"column":6},"end":{"line":660,"column":7}},{"start":{"line":646,"column":6},"end":{"line":660,"column":7}}],"line":646},"145":{"loc":{"start":{"line":647,"column":8},"end":{"line":659,"column":9}},"type":"if","locations":[{"start":{"line":647,"column":8},"end":{"line":659,"column":9}},{"start":{"line":647,"column":8},"end":{"line":659,"column":9}}],"line":647},"146":{"loc":{"start":{"line":647,"column":12},"end":{"line":647,"column":71}},"type":"binary-expr","locations":[{"start":{"line":647,"column":12},"end":{"line":647,"column":42}},{"start":{"line":647,"column":46},"end":{"line":647,"column":71}}],"line":647},"147":{"loc":{"start":{"line":650,"column":10},"end":{"line":656,"column":11}},"type":"if","locations":[{"start":{"line":650,"column":10},"end":{"line":656,"column":11}},{"start":{"line":650,"column":10},"end":{"line":656,"column":11}}],"line":650},"148":{"loc":{"start":{"line":661,"column":6},"end":{"line":663,"column":7}},"type":"if","locations":[{"start":{"line":661,"column":6},"end":{"line":663,"column":7}},{"start":{"line":661,"column":6},"end":{"line":663,"column":7}}],"line":661},"149":{"loc":{"start":{"line":667,"column":13},"end":{"line":667,"column":32}},"type":"binary-expr","locations":[{"start":{"line":667,"column":13},"end":{"line":667,"column":17}},{"start":{"line":667,"column":21},"end":{"line":667,"column":32}}],"line":667},"150":{"loc":{"start":{"line":668,"column":6},"end":{"line":668,"column":31}},"type":"if","locations":[{"start":{"line":668,"column":6},"end":{"line":668,"column":31}},{"start":{"line":668,"column":6},"end":{"line":668,"column":31}}],"line":668},"151":{"loc":{"start":{"line":670,"column":6},"end":{"line":672,"column":7}},"type":"if","locations":[{"start":{"line":670,"column":6},"end":{"line":672,"column":7}},{"start":{"line":670,"column":6},"end":{"line":672,"column":7}}],"line":670},"152":{"loc":{"start":{"line":683,"column":13},"end":{"line":683,"column":32}},"type":"binary-expr","locations":[{"start":{"line":683,"column":13},"end":{"line":683,"column":17}},{"start":{"line":683,"column":21},"end":{"line":683,"column":32}}],"line":683},"153":{"loc":{"start":{"line":684,"column":6},"end":{"line":684,"column":31}},"type":"if","locations":[{"start":{"line":684,"column":6},"end":{"line":684,"column":31}},{"start":{"line":684,"column":6},"end":{"line":684,"column":31}}],"line":684},"154":{"loc":{"start":{"line":697,"column":8},"end":{"line":699,"column":9}},"type":"if","locations":[{"start":{"line":697,"column":8},"end":{"line":699,"column":9}},{"start":{"line":697,"column":8},"end":{"line":699,"column":9}}],"line":697},"155":{"loc":{"start":{"line":711,"column":4},"end":{"line":731,"column":5}},"type":"if","locations":[{"start":{"line":711,"column":4},"end":{"line":731,"column":5}},{"start":{"line":711,"column":4},"end":{"line":731,"column":5}}],"line":711},"156":{"loc":{"start":{"line":713,"column":6},"end":{"line":729,"column":7}},"type":"if","locations":[{"start":{"line":713,"column":6},"end":{"line":729,"column":7}},{"start":{"line":713,"column":6},"end":{"line":729,"column":7}}],"line":713},"157":{"loc":{"start":{"line":713,"column":10},"end":{"line":713,"column":73}},"type":"binary-expr","locations":[{"start":{"line":713,"column":10},"end":{"line":713,"column":42}},{"start":{"line":713,"column":46},"end":{"line":713,"column":73}}],"line":713},"158":{"loc":{"start":{"line":714,"column":8},"end":{"line":728,"column":9}},"type":"if","locations":[{"start":{"line":714,"column":8},"end":{"line":728,"column":9}},{"start":{"line":714,"column":8},"end":{"line":728,"column":9}}],"line":714},"159":{"loc":{"start":{"line":714,"column":12},"end":{"line":714,"column":59}},"type":"binary-expr","locations":[{"start":{"line":714,"column":12},"end":{"line":714,"column":36}},{"start":{"line":714,"column":40},"end":{"line":714,"column":59}}],"line":714},"160":{"loc":{"start":{"line":718,"column":10},"end":{"line":720,"column":11}},"type":"if","locations":[{"start":{"line":718,"column":10},"end":{"line":720,"column":11}},{"start":{"line":718,"column":10},"end":{"line":720,"column":11}}],"line":718},"161":{"loc":{"start":{"line":722,"column":10},"end":{"line":724,"column":11}},"type":"if","locations":[{"start":{"line":722,"column":10},"end":{"line":724,"column":11}},{"start":{"line":722,"column":10},"end":{"line":724,"column":11}}],"line":722},"162":{"loc":{"start":{"line":739,"column":18},"end":{"line":739,"column":91}},"type":"binary-expr","locations":[{"start":{"line":739,"column":18},"end":{"line":739,"column":56}},{"start":{"line":739,"column":60},"end":{"line":739,"column":91}}],"line":739},"163":{"loc":{"start":{"line":740,"column":2},"end":{"line":765,"column":3}},"type":"if","locations":[{"start":{"line":740,"column":2},"end":{"line":765,"column":3}},{"start":{"line":740,"column":2},"end":{"line":765,"column":3}}],"line":740},"164":{"loc":{"start":{"line":744,"column":4},"end":{"line":746,"column":5}},"type":"if","locations":[{"start":{"line":744,"column":4},"end":{"line":746,"column":5}},{"start":{"line":744,"column":4},"end":{"line":746,"column":5}}],"line":744},"165":{"loc":{"start":{"line":747,"column":22},"end":{"line":747,"column":99}},"type":"binary-expr","locations":[{"start":{"line":747,"column":22},"end":{"line":747,"column":62}},{"start":{"line":747,"column":66},"end":{"line":747,"column":99}}],"line":747},"166":{"loc":{"start":{"line":748,"column":4},"end":{"line":750,"column":5}},"type":"if","locations":[{"start":{"line":748,"column":4},"end":{"line":750,"column":5}},{"start":{"line":748,"column":4},"end":{"line":750,"column":5}}],"line":748},"167":{"loc":{"start":{"line":748,"column":8},"end":{"line":748,"column":53}},"type":"binary-expr","locations":[{"start":{"line":748,"column":8},"end":{"line":748,"column":19}},{"start":{"line":748,"column":23},"end":{"line":748,"column":53}}],"line":748},"168":{"loc":{"start":{"line":751,"column":21},"end":{"line":751,"column":96}},"type":"binary-expr","locations":[{"start":{"line":751,"column":21},"end":{"line":751,"column":60}},{"start":{"line":751,"column":64},"end":{"line":751,"column":96}}],"line":751},"169":{"loc":{"start":{"line":752,"column":4},"end":{"line":754,"column":5}},"type":"if","locations":[{"start":{"line":752,"column":4},"end":{"line":754,"column":5}},{"start":{"line":752,"column":4},"end":{"line":754,"column":5}}],"line":752},"170":{"loc":{"start":{"line":752,"column":8},"end":{"line":752,"column":51}},"type":"binary-expr","locations":[{"start":{"line":752,"column":8},"end":{"line":752,"column":18}},{"start":{"line":752,"column":22},"end":{"line":752,"column":51}}],"line":752},"171":{"loc":{"start":{"line":755,"column":17},"end":{"line":755,"column":84}},"type":"binary-expr","locations":[{"start":{"line":755,"column":17},"end":{"line":755,"column":52}},{"start":{"line":755,"column":56},"end":{"line":755,"column":84}}],"line":755},"172":{"loc":{"start":{"line":756,"column":4},"end":{"line":764,"column":5}},"type":"if","locations":[{"start":{"line":756,"column":4},"end":{"line":764,"column":5}},{"start":{"line":756,"column":4},"end":{"line":764,"column":5}}],"line":756},"173":{"loc":{"start":{"line":757,"column":6},"end":{"line":763,"column":7}},"type":"if","locations":[{"start":{"line":757,"column":6},"end":{"line":763,"column":7}},{"start":{"line":757,"column":6},"end":{"line":763,"column":7}}],"line":757},"174":{"loc":{"start":{"line":771,"column":13},"end":{"line":771,"column":69}},"type":"binary-expr","locations":[{"start":{"line":771,"column":13},"end":{"line":771,"column":39}},{"start":{"line":771,"column":43},"end":{"line":771,"column":69}}],"line":771},"175":{"loc":{"start":{"line":772,"column":2},"end":{"line":806,"column":3}},"type":"if","locations":[{"start":{"line":772,"column":2},"end":{"line":806,"column":3}},{"start":{"line":772,"column":2},"end":{"line":806,"column":3}}],"line":772},"176":{"loc":{"start":{"line":776,"column":16},"end":{"line":776,"column":81}},"type":"binary-expr","locations":[{"start":{"line":776,"column":16},"end":{"line":776,"column":50}},{"start":{"line":776,"column":54},"end":{"line":776,"column":81}}],"line":776},"177":{"loc":{"start":{"line":777,"column":4},"end":{"line":779,"column":5}},"type":"if","locations":[{"start":{"line":777,"column":4},"end":{"line":779,"column":5}},{"start":{"line":777,"column":4},"end":{"line":779,"column":5}}],"line":777},"178":{"loc":{"start":{"line":780,"column":18},"end":{"line":780,"column":87}},"type":"binary-expr","locations":[{"start":{"line":780,"column":18},"end":{"line":780,"column":54}},{"start":{"line":780,"column":58},"end":{"line":780,"column":87}}],"line":780},"179":{"loc":{"start":{"line":781,"column":4},"end":{"line":783,"column":5}},"type":"if","locations":[{"start":{"line":781,"column":4},"end":{"line":783,"column":5}},{"start":{"line":781,"column":4},"end":{"line":783,"column":5}}],"line":781},"180":{"loc":{"start":{"line":784,"column":17},"end":{"line":784,"column":84}},"type":"binary-expr","locations":[{"start":{"line":784,"column":17},"end":{"line":784,"column":52}},{"start":{"line":784,"column":56},"end":{"line":784,"column":84}}],"line":784},"181":{"loc":{"start":{"line":785,"column":4},"end":{"line":787,"column":5}},"type":"if","locations":[{"start":{"line":785,"column":4},"end":{"line":787,"column":5}},{"start":{"line":785,"column":4},"end":{"line":787,"column":5}}],"line":785},"182":{"loc":{"start":{"line":788,"column":15},"end":{"line":788,"column":78}},"type":"binary-expr","locations":[{"start":{"line":788,"column":15},"end":{"line":788,"column":48}},{"start":{"line":788,"column":52},"end":{"line":788,"column":78}}],"line":788},"183":{"loc":{"start":{"line":789,"column":4},"end":{"line":791,"column":5}},"type":"if","locations":[{"start":{"line":789,"column":4},"end":{"line":791,"column":5}},{"start":{"line":789,"column":4},"end":{"line":791,"column":5}}],"line":789},"184":{"loc":{"start":{"line":792,"column":15},"end":{"line":792,"column":78}},"type":"binary-expr","locations":[{"start":{"line":792,"column":15},"end":{"line":792,"column":48}},{"start":{"line":792,"column":52},"end":{"line":792,"column":78}}],"line":792},"185":{"loc":{"start":{"line":793,"column":4},"end":{"line":795,"column":5}},"type":"if","locations":[{"start":{"line":793,"column":4},"end":{"line":795,"column":5}},{"start":{"line":793,"column":4},"end":{"line":795,"column":5}}],"line":793},"186":{"loc":{"start":{"line":796,"column":17},"end":{"line":796,"column":84}},"type":"binary-expr","locations":[{"start":{"line":796,"column":17},"end":{"line":796,"column":52}},{"start":{"line":796,"column":56},"end":{"line":796,"column":84}}],"line":796},"187":{"loc":{"start":{"line":797,"column":4},"end":{"line":805,"column":5}},"type":"if","locations":[{"start":{"line":797,"column":4},"end":{"line":805,"column":5}},{"start":{"line":797,"column":4},"end":{"line":805,"column":5}}],"line":797},"188":{"loc":{"start":{"line":798,"column":6},"end":{"line":804,"column":7}},"type":"if","locations":[{"start":{"line":798,"column":6},"end":{"line":804,"column":7}},{"start":{"line":798,"column":6},"end":{"line":804,"column":7}}],"line":798},"189":{"loc":{"start":{"line":812,"column":2},"end":{"line":820,"column":3}},"type":"if","locations":[{"start":{"line":812,"column":2},"end":{"line":820,"column":3}},{"start":{"line":812,"column":2},"end":{"line":820,"column":3}}],"line":812},"190":{"loc":{"start":{"line":814,"column":9},"end":{"line":820,"column":3}},"type":"if","locations":[{"start":{"line":814,"column":9},"end":{"line":820,"column":3}},{"start":{"line":814,"column":9},"end":{"line":820,"column":3}}],"line":814},"191":{"loc":{"start":{"line":815,"column":4},"end":{"line":818,"column":5}},"type":"if","locations":[{"start":{"line":815,"column":4},"end":{"line":818,"column":5}},{"start":{"line":815,"column":4},"end":{"line":818,"column":5}}],"line":815},"192":{"loc":{"start":{"line":825,"column":2},"end":{"line":825,"column":44}},"type":"if","locations":[{"start":{"line":825,"column":2},"end":{"line":825,"column":44}},{"start":{"line":825,"column":2},"end":{"line":825,"column":44}}],"line":825},"193":{"loc":{"start":{"line":827,"column":15},"end":{"line":827,"column":46}},"type":"binary-expr","locations":[{"start":{"line":827,"column":15},"end":{"line":827,"column":25}},{"start":{"line":827,"column":29},"end":{"line":827,"column":46}}],"line":827},"194":{"loc":{"start":{"line":828,"column":2},"end":{"line":845,"column":3}},"type":"if","locations":[{"start":{"line":828,"column":2},"end":{"line":845,"column":3}},{"start":{"line":828,"column":2},"end":{"line":845,"column":3}}],"line":828},"195":{"loc":{"start":{"line":833,"column":4},"end":{"line":835,"column":5}},"type":"if","locations":[{"start":{"line":833,"column":4},"end":{"line":835,"column":5}},{"start":{"line":833,"column":4},"end":{"line":835,"column":5}}],"line":833},"196":{"loc":{"start":{"line":837,"column":9},"end":{"line":845,"column":3}},"type":"if","locations":[{"start":{"line":837,"column":9},"end":{"line":845,"column":3}},{"start":{"line":837,"column":9},"end":{"line":845,"column":3}}],"line":837},"197":{"loc":{"start":{"line":838,"column":4},"end":{"line":842,"column":5}},"type":"if","locations":[{"start":{"line":838,"column":4},"end":{"line":842,"column":5}},{"start":{"line":838,"column":4},"end":{"line":842,"column":5}}],"line":838},"198":{"loc":{"start":{"line":838,"column":8},"end":{"line":838,"column":39}},"type":"binary-expr","locations":[{"start":{"line":838,"column":8},"end":{"line":838,"column":23}},{"start":{"line":838,"column":27},"end":{"line":838,"column":39}}],"line":838},"199":{"loc":{"start":{"line":843,"column":9},"end":{"line":845,"column":3}},"type":"if","locations":[{"start":{"line":843,"column":9},"end":{"line":845,"column":3}},{"start":{"line":843,"column":9},"end":{"line":845,"column":3}}],"line":843},"200":{"loc":{"start":{"line":868,"column":2},"end":{"line":868,"column":50}},"type":"if","locations":[{"start":{"line":868,"column":2},"end":{"line":868,"column":50}},{"start":{"line":868,"column":2},"end":{"line":868,"column":50}}],"line":868},"201":{"loc":{"start":{"line":868,"column":6},"end":{"line":868,"column":37}},"type":"binary-expr","locations":[{"start":{"line":868,"column":6},"end":{"line":868,"column":17}},{"start":{"line":868,"column":21},"end":{"line":868,"column":37}}],"line":868},"202":{"loc":{"start":{"line":869,"column":2},"end":{"line":875,"column":3}},"type":"if","locations":[{"start":{"line":869,"column":2},"end":{"line":875,"column":3}},{"start":{"line":869,"column":2},"end":{"line":875,"column":3}}],"line":869},"203":{"loc":{"start":{"line":871,"column":9},"end":{"line":875,"column":3}},"type":"if","locations":[{"start":{"line":871,"column":9},"end":{"line":875,"column":3}},{"start":{"line":871,"column":9},"end":{"line":875,"column":3}}],"line":871},"204":{"loc":{"start":{"line":873,"column":9},"end":{"line":875,"column":3}},"type":"if","locations":[{"start":{"line":873,"column":9},"end":{"line":875,"column":3}},{"start":{"line":873,"column":9},"end":{"line":875,"column":3}}],"line":873}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":2,"235":2,"236":2,"237":2,"238":2,"239":2,"240":2,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":1,"266":1,"267":1,"268":1,"269":1,"270":0,"271":0,"272":0,"273":1,"274":1,"275":1,"276":1,"277":1,"278":0,"279":0,"280":1,"281":5,"282":0,"283":5,"284":5,"285":3,"286":1,"287":0,"288":0,"289":0,"290":0,"291":0,"292":1,"293":20,"294":20,"295":20,"296":20,"297":20,"298":1,"299":20,"300":20,"301":20,"302":20,"303":1,"304":1,"305":0,"306":0,"307":1,"308":1,"309":0,"310":1,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":0,"321":0,"322":0,"323":0,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0,"332":0,"333":0,"334":0,"335":0,"336":0,"337":0,"338":0,"339":0,"340":0,"341":0,"342":0,"343":0,"344":0,"345":0,"346":0,"347":0,"348":0,"349":0,"350":0,"351":0,"352":0,"353":0,"354":0,"355":0,"356":0,"357":0,"358":0,"359":0,"360":0,"361":0,"362":0,"363":0,"364":0,"365":0,"366":0,"367":0,"368":0,"369":0,"370":0,"371":0,"372":0,"373":0,"374":0,"375":0,"376":0,"377":0,"378":0,"379":0,"380":0,"381":0,"382":0,"383":0,"384":0,"385":0,"386":0,"387":0,"388":0,"389":0,"390":0,"391":0,"392":0,"393":0,"394":0,"395":0,"396":0,"397":0,"398":0,"399":0,"400":0,"401":0,"402":0,"403":0,"404":0,"405":0,"406":0,"407":0,"408":0,"409":0,"410":0,"411":0,"412":0,"413":0,"414":0,"415":0,"416":0,"417":0,"418":0,"419":0,"420":0,"421":0,"422":0,"423":0,"424":0,"425":0,"426":0,"427":0,"428":0,"429":0,"430":0,"431":0,"432":0,"433":0,"434":0,"435":0,"436":0,"437":0,"438":0,"439":0,"440":0,"441":0,"442":0,"443":0,"444":0,"445":0,"446":0,"447":0,"448":0,"449":0,"450":0,"451":0,"452":0,"453":0,"454":0,"455":0,"456":0,"457":0,"458":0,"459":0,"460":0,"461":0,"462":0,"463":0,"464":0,"465":0,"466":0,"467":0,"468":0,"469":0,"470":0,"471":0,"472":0,"473":0,"474":0,"475":0,"476":0,"477":0,"478":0,"479":0,"480":0,"481":0,"482":0,"483":0,"484":0,"485":0,"486":0,"487":0,"488":0,"489":0,"490":0,"491":0,"492":0,"493":0,"494":0,"495":0,"496":0,"497":0,"498":0,"499":0,"500":0,"501":0,"502":0,"503":0,"504":0,"505":0,"506":0,"507":0,"508":0,"509":0,"510":0,"511":0,"512":0,"513":0,"514":0,"515":0,"516":0,"517":0,"518":0,"519":0,"520":0,"521":0,"522":0,"523":0,"524":0,"525":0,"526":0,"527":0,"528":1,"529":1,"530":1,"531":1,"532":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":2,"9":0,"10":1,"11":0,"12":5,"13":0,"14":20,"15":20,"16":1,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0,0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0],"41":[0,0],"42":[0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[0,0],"50":[0,0],"51":[0,0],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0,0],"58":[0,0],"59":[0,0],"60":[0,0],"61":[0,0],"62":[0,0,0],"63":[0,0],"64":[0,0],"65":[0,0],"66":[0,0],"67":[0,0],"68":[0,0],"69":[0,0],"70":[0,0],"71":[0,0],"72":[0,0],"73":[0,0],"74":[0,0],"75":[0,0],"76":[0,0],"77":[0,0],"78":[0,0],"79":[0,0],"80":[0,0],"81":[0,0],"82":[0,0],"83":[0,0],"84":[0,0],"85":[0,0],"86":[0,0],"87":[0,0],"88":[0,0],"89":[0,0,0],"90":[0,0],"91":[0,0],"92":[0,0],"93":[0,0],"94":[0,0],"95":[0,0],"96":[0,0],"97":[0,0],"98":[0,0],"99":[2,2],"100":[2,2],"101":[0,0],"102":[0,0],"103":[0,0],"104":[0,0],"105":[0,0],"106":[0,0],"107":[0,0],"108":[0,0],"109":[1,0],"110":[0,0],"111":[1,0],"112":[0,0],"113":[0,5],"114":[3,2],"115":[0,0],"116":[0,0],"117":[20,0],"118":[0,1],"119":[0,0],"120":[1,0],"121":[0,0],"122":[0,0],"123":[0,0],"124":[0,0],"125":[0,0],"126":[0,0],"127":[0,0],"128":[0,0],"129":[0,0],"130":[0,0],"131":[0,0],"132":[0,0],"133":[0,0],"134":[0,0],"135":[0,0],"136":[0,0],"137":[0,0],"138":[0,0],"139":[0,0],"140":[0,0],"141":[0,0],"142":[0,0],"143":[0,0],"144":[0,0],"145":[0,0],"146":[0,0],"147":[0,0],"148":[0,0],"149":[0,0],"150":[0,0],"151":[0,0],"152":[0,0],"153":[0,0],"154":[0,0],"155":[0,0],"156":[0,0],"157":[0,0],"158":[0,0],"159":[0,0],"160":[0,0],"161":[0,0],"162":[0,0],"163":[0,0],"164":[0,0],"165":[0,0],"166":[0,0],"167":[0,0],"168":[0,0],"169":[0,0],"170":[0,0],"171":[0,0],"172":[0,0],"173":[0,0],"174":[0,0],"175":[0,0],"176":[0,0],"177":[0,0],"178":[0,0],"179":[0,0],"180":[0,0],"181":[0,0],"182":[0,0],"183":[0,0],"184":[0,0],"185":[0,0],"186":[0,0],"187":[0,0],"188":[0,0],"189":[0,0],"190":[0,0],"191":[0,0],"192":[0,0],"193":[0,0],"194":[0,0],"195":[0,0],"196":[0,0],"197":[0,0],"198":[0,0],"199":[0,0],"200":[0,0],"201":[0,0],"202":[0,0],"203":[0,0],"204":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"7043c65e6c6cbcae1357fb0bed98013807e9a0fe","contentHash":"3340ac07576b5c53313f9172139d6adedc416081971d93e67c5f5a223640705b"},"/Users/rfeng/Projects/loopback3/strong-soap/lib/parser/xsd/descriptor.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/lib/parser/xsd/descriptor.js","statementMap":{"0":{"start":{"line":8,"column":13},"end":{"line":8,"column":30}},"1":{"start":{"line":9,"column":12},"end":{"line":9,"column":31}},"2":{"start":{"line":16,"column":4},"end":{"line":16,"column":79}},"3":{"start":{"line":17,"column":4},"end":{"line":17,"column":23}},"4":{"start":{"line":18,"column":4},"end":{"line":18,"column":21}},"5":{"start":{"line":19,"column":4},"end":{"line":19,"column":31}},"6":{"start":{"line":20,"column":4},"end":{"line":20,"column":84}},"7":{"start":{"line":21,"column":4},"end":{"line":21,"column":21}},"8":{"start":{"line":30,"column":4},"end":{"line":30,"column":23}},"9":{"start":{"line":31,"column":4},"end":{"line":31,"column":25}},"10":{"start":{"line":35,"column":4},"end":{"line":35,"column":49}},"11":{"start":{"line":36,"column":4},"end":{"line":36,"column":32}},"12":{"start":{"line":37,"column":4},"end":{"line":37,"column":19}},"13":{"start":{"line":41,"column":4},"end":{"line":41,"column":53}},"14":{"start":{"line":42,"column":4},"end":{"line":42,"column":36}},"15":{"start":{"line":43,"column":4},"end":{"line":43,"column":21}},"16":{"start":{"line":47,"column":4},"end":{"line":62,"column":5}},"17":{"start":{"line":48,"column":6},"end":{"line":48,"column":42}},"18":{"start":{"line":49,"column":11},"end":{"line":62,"column":5}},"19":{"start":{"line":50,"column":6},"end":{"line":50,"column":30}},"20":{"start":{"line":51,"column":11},"end":{"line":62,"column":5}},"21":{"start":{"line":53,"column":6},"end":{"line":55,"column":7}},"22":{"start":{"line":54,"column":8},"end":{"line":54,"column":42}},"23":{"start":{"line":56,"column":6},"end":{"line":58,"column":7}},"24":{"start":{"line":57,"column":8},"end":{"line":57,"column":46}},"25":{"start":{"line":59,"column":6},"end":{"line":61,"column":7}},"26":{"start":{"line":60,"column":8},"end":{"line":60,"column":40}},"27":{"start":{"line":66,"column":4},"end":{"line":70,"column":5}},"28":{"start":{"line":66,"column":17},"end":{"line":66,"column":18}},"29":{"start":{"line":66,"column":24},"end":{"line":66,"column":44}},"30":{"start":{"line":67,"column":6},"end":{"line":69,"column":7}},"31":{"start":{"line":68,"column":8},"end":{"line":68,"column":32}},"32":{"start":{"line":71,"column":4},"end":{"line":71,"column":16}},"33":{"start":{"line":75,"column":4},"end":{"line":79,"column":5}},"34":{"start":{"line":75,"column":17},"end":{"line":75,"column":18}},"35":{"start":{"line":75,"column":24},"end":{"line":75,"column":46}},"36":{"start":{"line":76,"column":6},"end":{"line":78,"column":7}},"37":{"start":{"line":77,"column":8},"end":{"line":77,"column":34}},"38":{"start":{"line":80,"column":4},"end":{"line":80,"column":16}},"39":{"start":{"line":84,"column":18},"end":{"line":84,"column":40}},"40":{"start":{"line":85,"column":4},"end":{"line":85,"column":32}},"41":{"start":{"line":85,"column":17},"end":{"line":85,"column":32}},"42":{"start":{"line":86,"column":20},"end":{"line":86,"column":44}},"43":{"start":{"line":87,"column":4},"end":{"line":87,"column":21}},"44":{"start":{"line":96,"column":4},"end":{"line":96,"column":12}},"45":{"start":{"line":97,"column":4},"end":{"line":97,"column":79}},"46":{"start":{"line":98,"column":4},"end":{"line":98,"column":23}},"47":{"start":{"line":99,"column":4},"end":{"line":99,"column":21}},"48":{"start":{"line":100,"column":4},"end":{"line":100,"column":31}},"49":{"start":{"line":101,"column":4},"end":{"line":101,"column":84}},"50":{"start":{"line":102,"column":4},"end":{"line":102,"column":21}},"51":{"start":{"line":103,"column":4},"end":{"line":103,"column":27}},"52":{"start":{"line":104,"column":4},"end":{"line":104,"column":26}},"53":{"start":{"line":109,"column":4},"end":{"line":109,"column":37}},"54":{"start":{"line":110,"column":15},"end":{"line":110,"column":78}},"55":{"start":{"line":111,"column":4},"end":{"line":111,"column":38}},"56":{"start":{"line":112,"column":4},"end":{"line":112,"column":34}},"57":{"start":{"line":113,"column":4},"end":{"line":113,"column":47}},"58":{"start":{"line":113,"column":21},"end":{"line":113,"column":47}},"59":{"start":{"line":114,"column":4},"end":{"line":114,"column":61}},"60":{"start":{"line":114,"column":31},"end":{"line":114,"column":61}},"61":{"start":{"line":115,"column":4},"end":{"line":115,"column":67}},"62":{"start":{"line":115,"column":33},"end":{"line":115,"column":67}},"63":{"start":{"line":116,"column":4},"end":{"line":116,"column":52}},"64":{"start":{"line":116,"column":28},"end":{"line":116,"column":52}},"65":{"start":{"line":117,"column":4},"end":{"line":117,"column":28}},"66":{"start":{"line":118,"column":4},"end":{"line":118,"column":16}},"67":{"start":{"line":122,"column":0},"end":{"line":126,"column":2}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":15,"column":2},"end":{"line":15,"column":3}},"loc":{"start":{"line":15,"column":33},"end":{"line":22,"column":3}},"line":15},"1":{"name":"(anonymous_1)","decl":{"start":{"line":29,"column":2},"end":{"line":29,"column":3}},"loc":{"start":{"line":29,"column":21},"end":{"line":32,"column":3}},"line":29},"2":{"name":"(anonymous_2)","decl":{"start":{"line":34,"column":2},"end":{"line":34,"column":3}},"loc":{"start":{"line":34,"column":22},"end":{"line":38,"column":3}},"line":34},"3":{"name":"(anonymous_3)","decl":{"start":{"line":40,"column":2},"end":{"line":40,"column":3}},"loc":{"start":{"line":40,"column":26},"end":{"line":44,"column":3}},"line":40},"4":{"name":"(anonymous_4)","decl":{"start":{"line":46,"column":2},"end":{"line":46,"column":3}},"loc":{"start":{"line":46,"column":20},"end":{"line":63,"column":3}},"line":46},"5":{"name":"(anonymous_5)","decl":{"start":{"line":65,"column":2},"end":{"line":65,"column":3}},"loc":{"start":{"line":65,"column":20},"end":{"line":72,"column":3}},"line":65},"6":{"name":"(anonymous_6)","decl":{"start":{"line":74,"column":2},"end":{"line":74,"column":3}},"loc":{"start":{"line":74,"column":22},"end":{"line":81,"column":3}},"line":74},"7":{"name":"(anonymous_7)","decl":{"start":{"line":83,"column":2},"end":{"line":83,"column":3}},"loc":{"start":{"line":83,"column":13},"end":{"line":88,"column":3}},"line":83},"8":{"name":"(anonymous_8)","decl":{"start":{"line":95,"column":2},"end":{"line":95,"column":3}},"loc":{"start":{"line":95,"column":41},"end":{"line":105,"column":3}},"line":95},"9":{"name":"(anonymous_9)","decl":{"start":{"line":107,"column":2},"end":{"line":107,"column":3}},"loc":{"start":{"line":107,"column":16},"end":{"line":119,"column":3}},"line":107}},"branchMap":{"0":{"loc":{"start":{"line":16,"column":11},"end":{"line":16,"column":50}},"type":"binary-expr","locations":[{"start":{"line":16,"column":11},"end":{"line":16,"column":24}},{"start":{"line":16,"column":28},"end":{"line":16,"column":50}}],"line":16},"1":{"loc":{"start":{"line":19,"column":11},"end":{"line":19,"column":30}},"type":"binary-expr","locations":[{"start":{"line":19,"column":11},"end":{"line":19,"column":15}},{"start":{"line":19,"column":19},"end":{"line":19,"column":30}}],"line":19},"2":{"loc":{"start":{"line":20,"column":11},"end":{"line":20,"column":57}},"type":"binary-expr","locations":[{"start":{"line":20,"column":11},"end":{"line":20,"column":31}},{"start":{"line":20,"column":35},"end":{"line":20,"column":57}}],"line":20},"3":{"loc":{"start":{"line":47,"column":4},"end":{"line":62,"column":5}},"type":"if","locations":[{"start":{"line":47,"column":4},"end":{"line":62,"column":5}},{"start":{"line":47,"column":4},"end":{"line":62,"column":5}}],"line":47},"4":{"loc":{"start":{"line":49,"column":11},"end":{"line":62,"column":5}},"type":"if","locations":[{"start":{"line":49,"column":11},"end":{"line":62,"column":5}},{"start":{"line":49,"column":11},"end":{"line":62,"column":5}}],"line":49},"5":{"loc":{"start":{"line":51,"column":11},"end":{"line":62,"column":5}},"type":"if","locations":[{"start":{"line":51,"column":11},"end":{"line":62,"column":5}},{"start":{"line":51,"column":11},"end":{"line":62,"column":5}}],"line":51},"6":{"loc":{"start":{"line":59,"column":6},"end":{"line":61,"column":7}},"type":"if","locations":[{"start":{"line":59,"column":6},"end":{"line":61,"column":7}},{"start":{"line":59,"column":6},"end":{"line":61,"column":7}}],"line":59},"7":{"loc":{"start":{"line":67,"column":6},"end":{"line":69,"column":7}},"type":"if","locations":[{"start":{"line":67,"column":6},"end":{"line":69,"column":7}},{"start":{"line":67,"column":6},"end":{"line":69,"column":7}}],"line":67},"8":{"loc":{"start":{"line":76,"column":6},"end":{"line":78,"column":7}},"type":"if","locations":[{"start":{"line":76,"column":6},"end":{"line":78,"column":7}},{"start":{"line":76,"column":6},"end":{"line":78,"column":7}}],"line":76},"9":{"loc":{"start":{"line":85,"column":4},"end":{"line":85,"column":32}},"type":"if","locations":[{"start":{"line":85,"column":4},"end":{"line":85,"column":32}},{"start":{"line":85,"column":4},"end":{"line":85,"column":32}}],"line":85},"10":{"loc":{"start":{"line":97,"column":11},"end":{"line":97,"column":50}},"type":"binary-expr","locations":[{"start":{"line":97,"column":11},"end":{"line":97,"column":24}},{"start":{"line":97,"column":28},"end":{"line":97,"column":50}}],"line":97},"11":{"loc":{"start":{"line":100,"column":11},"end":{"line":100,"column":30}},"type":"binary-expr","locations":[{"start":{"line":100,"column":11},"end":{"line":100,"column":15}},{"start":{"line":100,"column":19},"end":{"line":100,"column":30}}],"line":100},"12":{"loc":{"start":{"line":101,"column":11},"end":{"line":101,"column":57}},"type":"binary-expr","locations":[{"start":{"line":101,"column":11},"end":{"line":101,"column":31}},{"start":{"line":101,"column":35},"end":{"line":101,"column":57}}],"line":101},"13":{"loc":{"start":{"line":109,"column":13},"end":{"line":109,"column":36}},"type":"binary-expr","locations":[{"start":{"line":109,"column":13},"end":{"line":109,"column":21}},{"start":{"line":109,"column":25},"end":{"line":109,"column":36}}],"line":109},"14":{"loc":{"start":{"line":113,"column":4},"end":{"line":113,"column":47}},"type":"if","locations":[{"start":{"line":113,"column":4},"end":{"line":113,"column":47}},{"start":{"line":113,"column":4},"end":{"line":113,"column":47}}],"line":113},"15":{"loc":{"start":{"line":114,"column":4},"end":{"line":114,"column":61}},"type":"if","locations":[{"start":{"line":114,"column":4},"end":{"line":114,"column":61}},{"start":{"line":114,"column":4},"end":{"line":114,"column":61}}],"line":114},"16":{"loc":{"start":{"line":115,"column":4},"end":{"line":115,"column":67}},"type":"if","locations":[{"start":{"line":115,"column":4},"end":{"line":115,"column":67}},{"start":{"line":115,"column":4},"end":{"line":115,"column":67}}],"line":115},"17":{"loc":{"start":{"line":116,"column":4},"end":{"line":116,"column":52}},"type":"if","locations":[{"start":{"line":116,"column":4},"end":{"line":116,"column":52}},{"start":{"line":116,"column":4},"end":{"line":116,"column":52}}],"line":116}},"s":{"0":1,"1":1,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"c94d882ee322ce60a72eefb6304d8f3236c44b5d","contentHash":"b4a4b8ab6e28dc5aae5e2c0ec58a9b77e35afe6bfe92754d9f51558e4e2bb706"},"/Users/rfeng/Projects/loopback3/strong-soap/lib/parser/qname.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/lib/parser/qname.js","statementMap":{"0":{"start":{"line":8,"column":8},"end":{"line":8,"column":31}},"1":{"start":{"line":9,"column":13},"end":{"line":9,"column":30}},"2":{"start":{"line":10,"column":15},"end":{"line":10,"column":66}},"3":{"start":{"line":24,"column":4},"end":{"line":44,"column":5}},"4":{"start":{"line":25,"column":6},"end":{"line":25,"column":101}},"5":{"start":{"line":27,"column":6},"end":{"line":33,"column":7}},"6":{"start":{"line":28,"column":8},"end":{"line":28,"column":36}},"7":{"start":{"line":29,"column":8},"end":{"line":29,"column":37}},"8":{"start":{"line":30,"column":8},"end":{"line":30,"column":35}},"9":{"start":{"line":32,"column":8},"end":{"line":32,"column":57}},"10":{"start":{"line":35,"column":6},"end":{"line":35,"column":31}},"11":{"start":{"line":36,"column":6},"end":{"line":36,"column":29}},"12":{"start":{"line":37,"column":6},"end":{"line":43,"column":7}},"13":{"start":{"line":38,"column":20},"end":{"line":38,"column":40}},"14":{"start":{"line":39,"column":8},"end":{"line":39,"column":29}},"15":{"start":{"line":40,"column":8},"end":{"line":40,"column":31}},"16":{"start":{"line":42,"column":8},"end":{"line":42,"column":35}},"17":{"start":{"line":52,"column":14},"end":{"line":52,"column":16}},"18":{"start":{"line":53,"column":4},"end":{"line":55,"column":5}},"19":{"start":{"line":54,"column":6},"end":{"line":54,"column":35}},"20":{"start":{"line":56,"column":4},"end":{"line":58,"column":5}},"21":{"start":{"line":57,"column":6},"end":{"line":57,"column":31}},"22":{"start":{"line":59,"column":4},"end":{"line":59,"column":21}},"23":{"start":{"line":60,"column":4},"end":{"line":60,"column":15}},"24":{"start":{"line":70,"column":4},"end":{"line":70,"column":24}},"25":{"start":{"line":71,"column":17},"end":{"line":71,"column":33}},"26":{"start":{"line":73,"column":4},"end":{"line":81,"column":5}},"27":{"start":{"line":74,"column":6},"end":{"line":74,"column":15}},"28":{"start":{"line":75,"column":11},"end":{"line":81,"column":5}},"29":{"start":{"line":76,"column":6},"end":{"line":76,"column":18}},"30":{"start":{"line":77,"column":11},"end":{"line":81,"column":5}},"31":{"start":{"line":78,"column":6},"end":{"line":78,"column":49}},"32":{"start":{"line":80,"column":6},"end":{"line":80,"column":15}},"33":{"start":{"line":82,"column":4},"end":{"line":84,"column":5}},"34":{"start":{"line":83,"column":6},"end":{"line":83,"column":25}},"35":{"start":{"line":85,"column":4},"end":{"line":85,"column":18}},"36":{"start":{"line":89,"column":0},"end":{"line":89,"column":23}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":23,"column":2},"end":{"line":23,"column":3}},"loc":{"start":{"line":23,"column":35},"end":{"line":45,"column":3}},"line":23},"1":{"name":"(anonymous_1)","decl":{"start":{"line":51,"column":2},"end":{"line":51,"column":3}},"loc":{"start":{"line":51,"column":13},"end":{"line":61,"column":3}},"line":51},"2":{"name":"(anonymous_2)","decl":{"start":{"line":69,"column":2},"end":{"line":69,"column":3}},"loc":{"start":{"line":69,"column":29},"end":{"line":86,"column":3}},"line":69}},"branchMap":{"0":{"loc":{"start":{"line":24,"column":4},"end":{"line":44,"column":5}},"type":"if","locations":[{"start":{"line":24,"column":4},"end":{"line":44,"column":5}},{"start":{"line":24,"column":4},"end":{"line":44,"column":5}}],"line":24},"1":{"loc":{"start":{"line":27,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":27,"column":6},"end":{"line":33,"column":7}},{"start":{"line":27,"column":6},"end":{"line":33,"column":7}}],"line":27},"2":{"loc":{"start":{"line":28,"column":21},"end":{"line":28,"column":35}},"type":"binary-expr","locations":[{"start":{"line":28,"column":21},"end":{"line":28,"column":29}},{"start":{"line":28,"column":33},"end":{"line":28,"column":35}}],"line":28},"3":{"loc":{"start":{"line":29,"column":22},"end":{"line":29,"column":36}},"type":"binary-expr","locations":[{"start":{"line":29,"column":22},"end":{"line":29,"column":30}},{"start":{"line":29,"column":34},"end":{"line":29,"column":36}}],"line":29},"4":{"loc":{"start":{"line":30,"column":20},"end":{"line":30,"column":34}},"type":"binary-expr","locations":[{"start":{"line":30,"column":20},"end":{"line":30,"column":28}},{"start":{"line":30,"column":32},"end":{"line":30,"column":34}}],"line":30},"5":{"loc":{"start":{"line":35,"column":19},"end":{"line":35,"column":30}},"type":"binary-expr","locations":[{"start":{"line":35,"column":19},"end":{"line":35,"column":24}},{"start":{"line":35,"column":28},"end":{"line":35,"column":30}}],"line":35},"6":{"loc":{"start":{"line":36,"column":18},"end":{"line":36,"column":28}},"type":"binary-expr","locations":[{"start":{"line":36,"column":18},"end":{"line":36,"column":22}},{"start":{"line":36,"column":26},"end":{"line":36,"column":28}}],"line":36},"7":{"loc":{"start":{"line":37,"column":6},"end":{"line":43,"column":7}},"type":"if","locations":[{"start":{"line":37,"column":6},"end":{"line":43,"column":7}},{"start":{"line":37,"column":6},"end":{"line":43,"column":7}}],"line":37},"8":{"loc":{"start":{"line":42,"column":22},"end":{"line":42,"column":34}},"type":"binary-expr","locations":[{"start":{"line":42,"column":22},"end":{"line":42,"column":28}},{"start":{"line":42,"column":32},"end":{"line":42,"column":34}}],"line":42},"9":{"loc":{"start":{"line":53,"column":4},"end":{"line":55,"column":5}},"type":"if","locations":[{"start":{"line":53,"column":4},"end":{"line":55,"column":5}},{"start":{"line":53,"column":4},"end":{"line":55,"column":5}}],"line":53},"10":{"loc":{"start":{"line":56,"column":4},"end":{"line":58,"column":5}},"type":"if","locations":[{"start":{"line":56,"column":4},"end":{"line":58,"column":5}},{"start":{"line":56,"column":4},"end":{"line":58,"column":5}}],"line":56},"11":{"loc":{"start":{"line":70,"column":12},"end":{"line":70,"column":23}},"type":"binary-expr","locations":[{"start":{"line":70,"column":12},"end":{"line":70,"column":17}},{"start":{"line":70,"column":21},"end":{"line":70,"column":23}}],"line":70},"12":{"loc":{"start":{"line":73,"column":4},"end":{"line":81,"column":5}},"type":"if","locations":[{"start":{"line":73,"column":4},"end":{"line":81,"column":5}},{"start":{"line":73,"column":4},"end":{"line":81,"column":5}}],"line":73},"13":{"loc":{"start":{"line":75,"column":11},"end":{"line":81,"column":5}},"type":"if","locations":[{"start":{"line":75,"column":11},"end":{"line":81,"column":5}},{"start":{"line":75,"column":11},"end":{"line":81,"column":5}}],"line":75},"14":{"loc":{"start":{"line":77,"column":11},"end":{"line":81,"column":5}},"type":"if","locations":[{"start":{"line":77,"column":11},"end":{"line":81,"column":5}},{"start":{"line":77,"column":11},"end":{"line":81,"column":5}}],"line":77},"15":{"loc":{"start":{"line":82,"column":4},"end":{"line":84,"column":5}},"type":"if","locations":[{"start":{"line":82,"column":4},"end":{"line":84,"column":5}},{"start":{"line":82,"column":4},"end":{"line":84,"column":5}}],"line":82}},"s":{"0":1,"1":1,"2":1,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":1},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"eee6fcc80c9648b4d0d347646119bfcd3c5df7ad","contentHash":"022cb7619fe5f7154462616893c83d24eb65e310fb9cf52d18e54a5fdb48ede8"},"/Users/rfeng/Projects/loopback3/strong-soap/lib/globalize.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/lib/globalize.js","statementMap":{"0":{"start":{"line":8,"column":11},"end":{"line":8,"column":26}},"1":{"start":{"line":9,"column":9},"end":{"line":9,"column":36}},"2":{"start":{"line":11,"column":0},"end":{"line":11,"column":75}},"3":{"start":{"line":12,"column":0},"end":{"line":12,"column":22}}},"fnMap":{},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1},"f":{},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"a74bc7055278e177a09860975a57645fda01e28c","contentHash":"b1a2680ba5a2627969a0375d1acabe9872df626293eba37d40051be6e9302c02"},"/Users/rfeng/Projects/loopback3/strong-soap/lib/parser/helper.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/lib/parser/helper.js","statementMap":{"0":{"start":{"line":10,"column":25},"end":{"line":30,"column":1}},"1":{"start":{"line":33,"column":23},"end":{"line":59,"column":1}},"2":{"start":{"line":62,"column":18},"end":{"line":62,"column":20}},"3":{"start":{"line":64,"column":0},"end":{"line":66,"column":1}},"4":{"start":{"line":65,"column":2},"end":{"line":65,"column":41}},"5":{"start":{"line":67,"column":0},"end":{"line":69,"column":1}},"6":{"start":{"line":68,"column":2},"end":{"line":68,"column":39}},"7":{"start":{"line":71,"column":17},"end":{"line":84,"column":1}},"8":{"start":{"line":87,"column":2},"end":{"line":92,"column":3}},"9":{"start":{"line":88,"column":4},"end":{"line":90,"column":5}},"10":{"start":{"line":89,"column":6},"end":{"line":89,"column":17}},"11":{"start":{"line":91,"column":4},"end":{"line":91,"column":130}},"12":{"start":{"line":94,"column":2},"end":{"line":94,"column":13}},"13":{"start":{"line":97,"column":13},"end":{"line":97,"column":30}},"14":{"start":{"line":98,"column":0},"end":{"line":104,"column":2}},"15":{"start":{"line":100,"column":15},"end":{"line":100,"column":40}},"16":{"start":{"line":101,"column":17},"end":{"line":101,"column":70}},"17":{"start":{"line":102,"column":2},"end":{"line":102,"column":47}},"18":{"start":{"line":103,"column":2},"end":{"line":103,"column":33}},"19":{"start":{"line":106,"column":19},"end":{"line":106,"column":21}},"20":{"start":{"line":108,"column":0},"end":{"line":108,"column":36}},"21":{"start":{"line":116,"column":0},"end":{"line":121,"column":2}},"22":{"start":{"line":117,"column":2},"end":{"line":120,"column":3}},"23":{"start":{"line":118,"column":4},"end":{"line":118,"column":37}},"24":{"start":{"line":118,"column":28},"end":{"line":118,"column":37}},"25":{"start":{"line":119,"column":4},"end":{"line":119,"column":44}},"26":{"start":{"line":119,"column":35},"end":{"line":119,"column":44}},"27":{"start":{"line":123,"column":0},"end":{"line":130,"column":2}},"28":{"start":{"line":124,"column":2},"end":{"line":128,"column":3}},"29":{"start":{"line":125,"column":4},"end":{"line":127,"column":7}},"30":{"start":{"line":126,"column":6},"end":{"line":126,"column":58}},"31":{"start":{"line":126,"column":37},"end":{"line":126,"column":58}},"32":{"start":{"line":129,"column":2},"end":{"line":129,"column":14}},"33":{"start":{"line":132,"column":0},"end":{"line":132,"column":34}},"34":{"start":{"line":133,"column":0},"end":{"line":133,"column":30}},"35":{"start":{"line":134,"column":0},"end":{"line":134,"column":32}},"36":{"start":{"line":138,"column":4},"end":{"line":138,"column":58}},"37":{"start":{"line":142,"column":4},"end":{"line":148,"column":5}},"38":{"start":{"line":143,"column":6},"end":{"line":145,"column":7}},"39":{"start":{"line":144,"column":8},"end":{"line":144,"column":27}},"40":{"start":{"line":147,"column":6},"end":{"line":147,"column":24}},"41":{"start":{"line":149,"column":4},"end":{"line":149,"column":16}},"42":{"start":{"line":153,"column":4},"end":{"line":157,"column":5}},"43":{"start":{"line":154,"column":6},"end":{"line":154,"column":42}},"44":{"start":{"line":156,"column":6},"end":{"line":156,"column":31}},"45":{"start":{"line":161,"column":0},"end":{"line":161,"column":19}}},"fnMap":{"0":{"name":"xmlEscape","decl":{"start":{"line":86,"column":9},"end":{"line":86,"column":18}},"loc":{"start":{"line":86,"column":24},"end":{"line":95,"column":1}},"line":86},"1":{"name":"passwordDigest","decl":{"start":{"line":98,"column":34},"end":{"line":98,"column":48}},"loc":{"start":{"line":98,"column":75},"end":{"line":104,"column":1}},"line":98},"2":{"name":"(anonymous_2)","decl":{"start":{"line":116,"column":21},"end":{"line":116,"column":22}},"loc":{"start":{"line":116,"column":52},"end":{"line":121,"column":1}},"line":116},"3":{"name":"extend","decl":{"start":{"line":123,"column":26},"end":{"line":123,"column":32}},"loc":{"start":{"line":123,"column":44},"end":{"line":130,"column":1}},"line":123},"4":{"name":"(anonymous_4)","decl":{"start":{"line":125,"column":29},"end":{"line":125,"column":30}},"loc":{"start":{"line":125,"column":44},"end":{"line":127,"column":5}},"line":125},"5":{"name":"(anonymous_5)","decl":{"start":{"line":137,"column":2},"end":{"line":137,"column":3}},"loc":{"start":{"line":137,"column":16},"end":{"line":139,"column":3}},"line":137},"6":{"name":"(anonymous_6)","decl":{"start":{"line":141,"column":2},"end":{"line":141,"column":3}},"loc":{"start":{"line":141,"column":11},"end":{"line":150,"column":3}},"line":141},"7":{"name":"(anonymous_7)","decl":{"start":{"line":152,"column":2},"end":{"line":152,"column":3}},"loc":{"start":{"line":152,"column":11},"end":{"line":158,"column":3}},"line":152}},"branchMap":{"0":{"loc":{"start":{"line":87,"column":2},"end":{"line":92,"column":3}},"type":"if","locations":[{"start":{"line":87,"column":2},"end":{"line":92,"column":3}},{"start":{"line":87,"column":2},"end":{"line":92,"column":3}}],"line":87},"1":{"loc":{"start":{"line":88,"column":4},"end":{"line":90,"column":5}},"type":"if","locations":[{"start":{"line":88,"column":4},"end":{"line":90,"column":5}},{"start":{"line":88,"column":4},"end":{"line":90,"column":5}}],"line":88},"2":{"loc":{"start":{"line":88,"column":8},"end":{"line":88,"column":68}},"type":"binary-expr","locations":[{"start":{"line":88,"column":8},"end":{"line":88,"column":40}},{"start":{"line":88,"column":44},"end":{"line":88,"column":68}}],"line":88},"3":{"loc":{"start":{"line":101,"column":29},"end":{"line":101,"column":40}},"type":"binary-expr","locations":[{"start":{"line":101,"column":29},"end":{"line":101,"column":34}},{"start":{"line":101,"column":38},"end":{"line":101,"column":40}}],"line":101},"4":{"loc":{"start":{"line":118,"column":4},"end":{"line":118,"column":37}},"type":"if","locations":[{"start":{"line":118,"column":4},"end":{"line":118,"column":37}},{"start":{"line":118,"column":4},"end":{"line":118,"column":37}}],"line":118},"5":{"loc":{"start":{"line":119,"column":4},"end":{"line":119,"column":44}},"type":"if","locations":[{"start":{"line":119,"column":4},"end":{"line":119,"column":44}},{"start":{"line":119,"column":4},"end":{"line":119,"column":44}}],"line":119},"6":{"loc":{"start":{"line":124,"column":2},"end":{"line":128,"column":3}},"type":"if","locations":[{"start":{"line":124,"column":2},"end":{"line":128,"column":3}},{"start":{"line":124,"column":2},"end":{"line":128,"column":3}}],"line":124},"7":{"loc":{"start":{"line":124,"column":6},"end":{"line":124,"column":90}},"type":"binary-expr","locations":[{"start":{"line":124,"column":6},"end":{"line":124,"column":19}},{"start":{"line":124,"column":23},"end":{"line":124,"column":47}},{"start":{"line":124,"column":51},"end":{"line":124,"column":63}},{"start":{"line":124,"column":67},"end":{"line":124,"column":90}}],"line":124},"8":{"loc":{"start":{"line":126,"column":6},"end":{"line":126,"column":58}},"type":"if","locations":[{"start":{"line":126,"column":6},"end":{"line":126,"column":58}},{"start":{"line":126,"column":6},"end":{"line":126,"column":58}}],"line":126},"9":{"loc":{"start":{"line":138,"column":15},"end":{"line":138,"column":57}},"type":"cond-expr","locations":[{"start":{"line":138,"column":43},"end":{"line":138,"column":52}},{"start":{"line":138,"column":55},"end":{"line":138,"column":57}}],"line":138},"10":{"loc":{"start":{"line":142,"column":4},"end":{"line":148,"column":5}},"type":"if","locations":[{"start":{"line":142,"column":4},"end":{"line":148,"column":5}},{"start":{"line":142,"column":4},"end":{"line":148,"column":5}}],"line":142},"11":{"loc":{"start":{"line":143,"column":6},"end":{"line":145,"column":7}},"type":"if","locations":[{"start":{"line":143,"column":6},"end":{"line":145,"column":7}},{"start":{"line":143,"column":6},"end":{"line":145,"column":7}}],"line":143},"12":{"loc":{"start":{"line":153,"column":4},"end":{"line":157,"column":5}},"type":"if","locations":[{"start":{"line":153,"column":4},"end":{"line":157,"column":5}},{"start":{"line":153,"column":4},"end":{"line":157,"column":5}}],"line":153}},"s":{"0":1,"1":1,"2":1,"3":1,"4":19,"5":1,"6":25,"7":1,"8":0,"9":0,"10":0,"11":0,"12":0,"13":1,"14":1,"15":0,"16":0,"17":0,"18":0,"19":1,"20":1,"21":1,"22":0,"23":0,"24":0,"25":0,"26":0,"27":1,"28":0,"29":0,"30":0,"31":0,"32":0,"33":1,"34":1,"35":1,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0,0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"dada6faf67de58ccab98caa5a9166b00c2dbe5e0","contentHash":"e98aeb7926acf8a88f13a7d64c6faf74a17cf973da9b43b2b43b076941ec98ea"},"/Users/rfeng/Projects/loopback3/strong-soap/lib/parser/nscontext.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/lib/parser/nscontext.js","statementMap":{"0":{"start":{"line":17,"column":4},"end":{"line":17,"column":25}},"1":{"start":{"line":18,"column":4},"end":{"line":18,"column":25}},"2":{"start":{"line":19,"column":4},"end":{"line":19,"column":25}},"3":{"start":{"line":29,"column":4},"end":{"line":44,"column":5}},"4":{"start":{"line":31,"column":8},"end":{"line":31,"column":54}},"5":{"start":{"line":33,"column":8},"end":{"line":33,"column":47}},"6":{"start":{"line":35,"column":20},"end":{"line":35,"column":43}},"7":{"start":{"line":37,"column":8},"end":{"line":43,"column":9}},"8":{"start":{"line":38,"column":10},"end":{"line":38,"column":27}},"9":{"start":{"line":39,"column":15},"end":{"line":43,"column":9}},"10":{"start":{"line":40,"column":10},"end":{"line":40,"column":53}},"11":{"start":{"line":42,"column":10},"end":{"line":42,"column":22}},"12":{"start":{"line":48,"column":4},"end":{"line":71,"column":5}},"13":{"start":{"line":50,"column":8},"end":{"line":54,"column":10}},"14":{"start":{"line":56,"column":8},"end":{"line":60,"column":10}},"15":{"start":{"line":62,"column":22},"end":{"line":62,"column":45}},"16":{"start":{"line":64,"column":8},"end":{"line":70,"column":9}},"17":{"start":{"line":65,"column":10},"end":{"line":65,"column":25}},"18":{"start":{"line":66,"column":15},"end":{"line":70,"column":9}},"19":{"start":{"line":67,"column":10},"end":{"line":67,"column":57}},"20":{"start":{"line":69,"column":10},"end":{"line":69,"column":22}},"21":{"start":{"line":81,"column":4},"end":{"line":97,"column":5}},"22":{"start":{"line":83,"column":8},"end":{"line":83,"column":21}},"23":{"start":{"line":85,"column":8},"end":{"line":85,"column":23}},"24":{"start":{"line":87,"column":8},"end":{"line":91,"column":9}},"25":{"start":{"line":88,"column":10},"end":{"line":90,"column":11}},"26":{"start":{"line":89,"column":12},"end":{"line":89,"column":21}},"27":{"start":{"line":92,"column":8},"end":{"line":96,"column":9}},"28":{"start":{"line":93,"column":10},"end":{"line":93,"column":46}},"29":{"start":{"line":95,"column":10},"end":{"line":95,"column":22}},"30":{"start":{"line":107,"column":4},"end":{"line":123,"column":5}},"31":{"start":{"line":109,"column":8},"end":{"line":109,"column":21}},"32":{"start":{"line":111,"column":8},"end":{"line":111,"column":23}},"33":{"start":{"line":113,"column":8},"end":{"line":117,"column":9}},"34":{"start":{"line":114,"column":10},"end":{"line":116,"column":11}},"35":{"start":{"line":115,"column":12},"end":{"line":115,"column":38}},"36":{"start":{"line":118,"column":8},"end":{"line":122,"column":9}},"37":{"start":{"line":119,"column":10},"end":{"line":119,"column":53}},"38":{"start":{"line":121,"column":10},"end":{"line":121,"column":22}},"39":{"start":{"line":132,"column":4},"end":{"line":132,"column":24}},"40":{"start":{"line":133,"column":4},"end":{"line":139,"column":5}},"41":{"start":{"line":134,"column":19},"end":{"line":134,"column":44}},"42":{"start":{"line":135,"column":6},"end":{"line":138,"column":7}},"43":{"start":{"line":137,"column":8},"end":{"line":137,"column":22}},"44":{"start":{"line":150,"column":4},"end":{"line":150,"column":21}},"45":{"start":{"line":151,"column":4},"end":{"line":151,"column":23}},"46":{"start":{"line":163,"column":4},"end":{"line":165,"column":5}},"47":{"start":{"line":164,"column":6},"end":{"line":164,"column":19}},"48":{"start":{"line":166,"column":4},"end":{"line":173,"column":5}},"49":{"start":{"line":167,"column":6},"end":{"line":171,"column":8}},"50":{"start":{"line":172,"column":6},"end":{"line":172,"column":18}},"51":{"start":{"line":174,"column":4},"end":{"line":174,"column":17}},"52":{"start":{"line":182,"column":16},"end":{"line":182,"column":53}},"53":{"start":{"line":183,"column":4},"end":{"line":183,"column":28}},"54":{"start":{"line":184,"column":4},"end":{"line":184,"column":30}},"55":{"start":{"line":185,"column":4},"end":{"line":185,"column":17}},"56":{"start":{"line":193,"column":16},"end":{"line":193,"column":33}},"57":{"start":{"line":194,"column":4},"end":{"line":198,"column":5}},"58":{"start":{"line":195,"column":6},"end":{"line":195,"column":39}},"59":{"start":{"line":197,"column":6},"end":{"line":197,"column":31}},"60":{"start":{"line":199,"column":4},"end":{"line":199,"column":17}},"61":{"start":{"line":209,"column":4},"end":{"line":209,"column":85}},"62":{"start":{"line":219,"column":4},"end":{"line":219,"column":78}},"63":{"start":{"line":228,"column":4},"end":{"line":228,"column":74}},"64":{"start":{"line":237,"column":4},"end":{"line":237,"column":71}},"65":{"start":{"line":248,"column":4},"end":{"line":256,"column":5}},"66":{"start":{"line":249,"column":6},"end":{"line":249,"column":37}},"67":{"start":{"line":251,"column":6},"end":{"line":251,"column":62}},"68":{"start":{"line":252,"column":6},"end":{"line":255,"column":7}},"69":{"start":{"line":254,"column":8},"end":{"line":254,"column":23}},"70":{"start":{"line":257,"column":4},"end":{"line":260,"column":5}},"71":{"start":{"line":259,"column":6},"end":{"line":259,"column":37}},"72":{"start":{"line":261,"column":4},"end":{"line":269,"column":5}},"73":{"start":{"line":262,"column":6},"end":{"line":266,"column":8}},"74":{"start":{"line":267,"column":6},"end":{"line":267,"column":53}},"75":{"start":{"line":268,"column":6},"end":{"line":268,"column":21}},"76":{"start":{"line":270,"column":4},"end":{"line":270,"column":16}},"77":{"start":{"line":280,"column":18},"end":{"line":280,"column":55}},"78":{"start":{"line":281,"column":4},"end":{"line":281,"column":30}},"79":{"start":{"line":281,"column":18},"end":{"line":281,"column":30}},"80":{"start":{"line":282,"column":4},"end":{"line":284,"column":5}},"81":{"start":{"line":283,"column":6},"end":{"line":283,"column":18}},"82":{"start":{"line":285,"column":4},"end":{"line":285,"column":59}},"83":{"start":{"line":286,"column":4},"end":{"line":295,"column":5}},"84":{"start":{"line":287,"column":6},"end":{"line":287,"column":30}},"85":{"start":{"line":289,"column":6},"end":{"line":293,"column":8}},"86":{"start":{"line":294,"column":6},"end":{"line":294,"column":61}},"87":{"start":{"line":296,"column":4},"end":{"line":296,"column":19}},"88":{"start":{"line":300,"column":0},"end":{"line":300,"column":34}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":2},"end":{"line":16,"column":3}},"loc":{"start":{"line":16,"column":22},"end":{"line":20,"column":3}},"line":16},"1":{"name":"(anonymous_1)","decl":{"start":{"line":28,"column":2},"end":{"line":28,"column":3}},"loc":{"start":{"line":28,"column":37},"end":{"line":45,"column":3}},"line":28},"2":{"name":"(anonymous_2)","decl":{"start":{"line":47,"column":2},"end":{"line":47,"column":3}},"loc":{"start":{"line":47,"column":30},"end":{"line":72,"column":3}},"line":47},"3":{"name":"(anonymous_3)","decl":{"start":{"line":80,"column":2},"end":{"line":80,"column":3}},"loc":{"start":{"line":80,"column":30},"end":{"line":98,"column":3}},"line":80},"4":{"name":"(anonymous_4)","decl":{"start":{"line":106,"column":2},"end":{"line":106,"column":3}},"loc":{"start":{"line":106,"column":37},"end":{"line":124,"column":3}},"line":106},"5":{"name":"(anonymous_5)","decl":{"start":{"line":131,"column":2},"end":{"line":131,"column":3}},"loc":{"start":{"line":131,"column":23},"end":{"line":140,"column":3}},"line":131},"6":{"name":"(anonymous_6)","decl":{"start":{"line":149,"column":2},"end":{"line":149,"column":3}},"loc":{"start":{"line":149,"column":16},"end":{"line":152,"column":3}},"line":149},"7":{"name":"(anonymous_7)","decl":{"start":{"line":162,"column":2},"end":{"line":162,"column":3}},"loc":{"start":{"line":162,"column":41},"end":{"line":175,"column":3}},"line":162},"8":{"name":"(anonymous_8)","decl":{"start":{"line":181,"column":2},"end":{"line":181,"column":3}},"loc":{"start":{"line":181,"column":16},"end":{"line":186,"column":3}},"line":181},"9":{"name":"(anonymous_9)","decl":{"start":{"line":192,"column":2},"end":{"line":192,"column":3}},"loc":{"start":{"line":192,"column":15},"end":{"line":200,"column":3}},"line":192},"10":{"name":"(anonymous_10)","decl":{"start":{"line":208,"column":2},"end":{"line":208,"column":3}},"loc":{"start":{"line":208,"column":37},"end":{"line":210,"column":3}},"line":208},"11":{"name":"(anonymous_11)","decl":{"start":{"line":218,"column":2},"end":{"line":218,"column":3}},"loc":{"start":{"line":218,"column":30},"end":{"line":220,"column":3}},"line":218},"12":{"name":"(anonymous_12)","decl":{"start":{"line":227,"column":2},"end":{"line":227,"column":3}},"loc":{"start":{"line":227,"column":26},"end":{"line":229,"column":3}},"line":227},"13":{"name":"(anonymous_13)","decl":{"start":{"line":236,"column":2},"end":{"line":236,"column":3}},"loc":{"start":{"line":236,"column":23},"end":{"line":238,"column":3}},"line":236},"14":{"name":"(anonymous_14)","decl":{"start":{"line":246,"column":2},"end":{"line":246,"column":3}},"loc":{"start":{"line":246,"column":35},"end":{"line":271,"column":3}},"line":246},"15":{"name":"(anonymous_15)","decl":{"start":{"line":279,"column":2},"end":{"line":279,"column":3}},"loc":{"start":{"line":279,"column":34},"end":{"line":297,"column":3}},"line":279}},"branchMap":{"0":{"loc":{"start":{"line":29,"column":4},"end":{"line":44,"column":5}},"type":"switch","locations":[{"start":{"line":30,"column":6},"end":{"line":31,"column":54}},{"start":{"line":32,"column":6},"end":{"line":33,"column":47}},{"start":{"line":34,"column":6},"end":{"line":43,"column":9}}],"line":29},"1":{"loc":{"start":{"line":37,"column":8},"end":{"line":43,"column":9}},"type":"if","locations":[{"start":{"line":37,"column":8},"end":{"line":43,"column":9}},{"start":{"line":37,"column":8},"end":{"line":43,"column":9}}],"line":37},"2":{"loc":{"start":{"line":39,"column":15},"end":{"line":43,"column":9}},"type":"if","locations":[{"start":{"line":39,"column":15},"end":{"line":43,"column":9}},{"start":{"line":39,"column":15},"end":{"line":43,"column":9}}],"line":39},"3":{"loc":{"start":{"line":39,"column":19},"end":{"line":39,"column":44}},"type":"binary-expr","locations":[{"start":{"line":39,"column":19},"end":{"line":39,"column":29}},{"start":{"line":39,"column":33},"end":{"line":39,"column":44}}],"line":39},"4":{"loc":{"start":{"line":48,"column":4},"end":{"line":71,"column":5}},"type":"switch","locations":[{"start":{"line":49,"column":6},"end":{"line":54,"column":10}},{"start":{"line":55,"column":6},"end":{"line":60,"column":10}},{"start":{"line":61,"column":6},"end":{"line":70,"column":9}}],"line":48},"5":{"loc":{"start":{"line":64,"column":8},"end":{"line":70,"column":9}},"type":"if","locations":[{"start":{"line":64,"column":8},"end":{"line":70,"column":9}},{"start":{"line":64,"column":8},"end":{"line":70,"column":9}}],"line":64},"6":{"loc":{"start":{"line":66,"column":15},"end":{"line":70,"column":9}},"type":"if","locations":[{"start":{"line":66,"column":15},"end":{"line":70,"column":9}},{"start":{"line":66,"column":15},"end":{"line":70,"column":9}}],"line":66},"7":{"loc":{"start":{"line":81,"column":4},"end":{"line":97,"column":5}},"type":"switch","locations":[{"start":{"line":82,"column":6},"end":{"line":83,"column":21}},{"start":{"line":84,"column":6},"end":{"line":85,"column":23}},{"start":{"line":86,"column":6},"end":{"line":96,"column":9}}],"line":81},"8":{"loc":{"start":{"line":88,"column":10},"end":{"line":90,"column":11}},"type":"if","locations":[{"start":{"line":88,"column":10},"end":{"line":90,"column":11}},{"start":{"line":88,"column":10},"end":{"line":90,"column":11}}],"line":88},"9":{"loc":{"start":{"line":92,"column":8},"end":{"line":96,"column":9}},"type":"if","locations":[{"start":{"line":92,"column":8},"end":{"line":96,"column":9}},{"start":{"line":92,"column":8},"end":{"line":96,"column":9}}],"line":92},"10":{"loc":{"start":{"line":92,"column":12},"end":{"line":92,"column":37}},"type":"binary-expr","locations":[{"start":{"line":92,"column":12},"end":{"line":92,"column":22}},{"start":{"line":92,"column":26},"end":{"line":92,"column":37}}],"line":92},"11":{"loc":{"start":{"line":107,"column":4},"end":{"line":123,"column":5}},"type":"switch","locations":[{"start":{"line":108,"column":6},"end":{"line":109,"column":21}},{"start":{"line":110,"column":6},"end":{"line":111,"column":23}},{"start":{"line":112,"column":6},"end":{"line":122,"column":9}}],"line":107},"12":{"loc":{"start":{"line":114,"column":10},"end":{"line":116,"column":11}},"type":"if","locations":[{"start":{"line":114,"column":10},"end":{"line":116,"column":11}},{"start":{"line":114,"column":10},"end":{"line":116,"column":11}}],"line":114},"13":{"loc":{"start":{"line":114,"column":14},"end":{"line":114,"column":86}},"type":"binary-expr","locations":[{"start":{"line":114,"column":14},"end":{"line":114,"column":46}},{"start":{"line":114,"column":50},"end":{"line":114,"column":86}}],"line":114},"14":{"loc":{"start":{"line":118,"column":8},"end":{"line":122,"column":9}},"type":"if","locations":[{"start":{"line":118,"column":8},"end":{"line":122,"column":9}},{"start":{"line":118,"column":8},"end":{"line":122,"column":9}}],"line":118},"15":{"loc":{"start":{"line":118,"column":12},"end":{"line":118,"column":37}},"type":"binary-expr","locations":[{"start":{"line":118,"column":12},"end":{"line":118,"column":22}},{"start":{"line":118,"column":26},"end":{"line":118,"column":37}}],"line":118},"16":{"loc":{"start":{"line":132,"column":11},"end":{"line":132,"column":23}},"type":"binary-expr","locations":[{"start":{"line":132,"column":11},"end":{"line":132,"column":15}},{"start":{"line":132,"column":19},"end":{"line":132,"column":23}}],"line":132},"17":{"loc":{"start":{"line":135,"column":6},"end":{"line":138,"column":7}},"type":"if","locations":[{"start":{"line":135,"column":6},"end":{"line":138,"column":7}},{"start":{"line":135,"column":6},"end":{"line":138,"column":7}}],"line":135},"18":{"loc":{"start":{"line":163,"column":4},"end":{"line":165,"column":5}},"type":"if","locations":[{"start":{"line":163,"column":4},"end":{"line":165,"column":5}},{"start":{"line":163,"column":4},"end":{"line":165,"column":5}}],"line":163},"19":{"loc":{"start":{"line":166,"column":4},"end":{"line":173,"column":5}},"type":"if","locations":[{"start":{"line":166,"column":4},"end":{"line":173,"column":5}},{"start":{"line":166,"column":4},"end":{"line":173,"column":5}}],"line":166},"20":{"loc":{"start":{"line":194,"column":4},"end":{"line":198,"column":5}},"type":"if","locations":[{"start":{"line":194,"column":4},"end":{"line":198,"column":5}},{"start":{"line":194,"column":4},"end":{"line":198,"column":5}}],"line":194},"21":{"loc":{"start":{"line":209,"column":11},"end":{"line":209,"column":84}},"type":"binary-expr","locations":[{"start":{"line":209,"column":11},"end":{"line":209,"column":28}},{"start":{"line":209,"column":32},"end":{"line":209,"column":84}}],"line":209},"22":{"loc":{"start":{"line":219,"column":11},"end":{"line":219,"column":77}},"type":"binary-expr","locations":[{"start":{"line":219,"column":11},"end":{"line":219,"column":28}},{"start":{"line":219,"column":32},"end":{"line":219,"column":77}}],"line":219},"23":{"loc":{"start":{"line":228,"column":11},"end":{"line":228,"column":73}},"type":"binary-expr","locations":[{"start":{"line":228,"column":11},"end":{"line":228,"column":28}},{"start":{"line":228,"column":32},"end":{"line":228,"column":73}}],"line":228},"24":{"loc":{"start":{"line":237,"column":11},"end":{"line":237,"column":70}},"type":"binary-expr","locations":[{"start":{"line":237,"column":11},"end":{"line":237,"column":28}},{"start":{"line":237,"column":32},"end":{"line":237,"column":70}}],"line":237},"25":{"loc":{"start":{"line":248,"column":4},"end":{"line":256,"column":5}},"type":"if","locations":[{"start":{"line":248,"column":4},"end":{"line":256,"column":5}},{"start":{"line":248,"column":4},"end":{"line":256,"column":5}}],"line":248},"26":{"loc":{"start":{"line":252,"column":6},"end":{"line":255,"column":7}},"type":"if","locations":[{"start":{"line":252,"column":6},"end":{"line":255,"column":7}},{"start":{"line":252,"column":6},"end":{"line":255,"column":7}}],"line":252},"27":{"loc":{"start":{"line":252,"column":10},"end":{"line":252,"column":42}},"type":"binary-expr","locations":[{"start":{"line":252,"column":10},"end":{"line":252,"column":17}},{"start":{"line":252,"column":21},"end":{"line":252,"column":42}}],"line":252},"28":{"loc":{"start":{"line":257,"column":4},"end":{"line":260,"column":5}},"type":"if","locations":[{"start":{"line":257,"column":4},"end":{"line":260,"column":5}},{"start":{"line":257,"column":4},"end":{"line":260,"column":5}}],"line":257},"29":{"loc":{"start":{"line":261,"column":4},"end":{"line":269,"column":5}},"type":"if","locations":[{"start":{"line":261,"column":4},"end":{"line":269,"column":5}},{"start":{"line":261,"column":4},"end":{"line":269,"column":5}}],"line":261},"30":{"loc":{"start":{"line":281,"column":4},"end":{"line":281,"column":30}},"type":"if","locations":[{"start":{"line":281,"column":4},"end":{"line":281,"column":30}},{"start":{"line":281,"column":4},"end":{"line":281,"column":30}}],"line":281},"31":{"loc":{"start":{"line":282,"column":4},"end":{"line":284,"column":5}},"type":"if","locations":[{"start":{"line":282,"column":4},"end":{"line":284,"column":5}},{"start":{"line":282,"column":4},"end":{"line":284,"column":5}}],"line":282},"32":{"loc":{"start":{"line":286,"column":4},"end":{"line":295,"column":5}},"type":"if","locations":[{"start":{"line":286,"column":4},"end":{"line":295,"column":5}},{"start":{"line":286,"column":4},"end":{"line":295,"column":5}}],"line":286}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":1},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0},"b":{"0":[0,0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0,0],"5":[0,0],"6":[0,0],"7":[0,0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"d38e9c7a708a7253b8a61ebd90d7b69e3617a52c","contentHash":"749b0cb9282571070bfbccf1df380d5e8e9f1a709a375182125d511b827df0d4"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/all.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/all.js","statementMap":{"0":{"start":{"line":8,"column":17},"end":{"line":8,"column":40}},"1":{"start":{"line":12,"column":4},"end":{"line":12,"column":34}},"2":{"start":{"line":16,"column":0},"end":{"line":16,"column":24}},"3":{"start":{"line":17,"column":0},"end":{"line":17,"column":48}},"4":{"start":{"line":19,"column":0},"end":{"line":19,"column":21}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":11,"column":2},"end":{"line":11,"column":3}},"loc":{"start":{"line":11,"column":38},"end":{"line":13,"column":3}},"line":11}},"branchMap":{},"s":{"0":1,"1":97,"2":1,"3":1,"4":1},"f":{"0":97},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"81e4c4d651ca8d0624b95cc2442710e9d64a802a","contentHash":"1d82d03599b5b99a0da6c1f5f4e69eb2f4eb15c0018ce2e68d7513f01430127b"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/annotation.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/annotation.js","statementMap":{"0":{"start":{"line":8,"column":17},"end":{"line":8,"column":40}},"1":{"start":{"line":12,"column":4},"end":{"line":12,"column":34}},"2":{"start":{"line":16,"column":0},"end":{"line":16,"column":38}},"3":{"start":{"line":17,"column":0},"end":{"line":17,"column":58}},"4":{"start":{"line":19,"column":0},"end":{"line":19,"column":28}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":11,"column":2},"end":{"line":11,"column":3}},"loc":{"start":{"line":11,"column":38},"end":{"line":13,"column":3}},"line":11}},"branchMap":{},"s":{"0":1,"1":19,"2":1,"3":1,"4":1},"f":{"0":19},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"922b75f1e63ef9a444e1ee790aea4171d0925bab","contentHash":"357d386d5ab5aff9941912da59e3e9d0f75d83b29056992ca507c7a6ba540181"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/any.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/any.js","statementMap":{"0":{"start":{"line":8,"column":17},"end":{"line":8,"column":40}},"1":{"start":{"line":12,"column":4},"end":{"line":12,"column":34}},"2":{"start":{"line":16,"column":0},"end":{"line":16,"column":24}},"3":{"start":{"line":18,"column":0},"end":{"line":18,"column":21}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":11,"column":2},"end":{"line":11,"column":3}},"loc":{"start":{"line":11,"column":38},"end":{"line":13,"column":3}},"line":11}},"branchMap":{},"s":{"0":1,"1":7,"2":1,"3":1},"f":{"0":7},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"17b517ef3b1dff1a2171fd80840a7b47a15d2fcb","contentHash":"fc8c5fae443b74a59537e60e3e981b78260bf3a8a76ef5b796be655907ef4a20"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/anyAttribute.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/anyAttribute.js","statementMap":{"0":{"start":{"line":8,"column":17},"end":{"line":8,"column":40}},"1":{"start":{"line":12,"column":4},"end":{"line":12,"column":34}},"2":{"start":{"line":16,"column":0},"end":{"line":16,"column":42}},"3":{"start":{"line":18,"column":0},"end":{"line":18,"column":30}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":11,"column":2},"end":{"line":11,"column":3}},"loc":{"start":{"line":11,"column":38},"end":{"line":13,"column":3}},"line":11}},"branchMap":{},"s":{"0":1,"1":0,"2":1,"3":1},"f":{"0":0},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"55bf77b7b89f9dd42de015c4fc141c6e3010d27d","contentHash":"feba7bebdce2eb88ac391d431dc8ee0c47bb99d92da5cc439f15ccd0f293a81b"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/attribute.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/attribute.js","statementMap":{"0":{"start":{"line":8,"column":17},"end":{"line":8,"column":40}},"1":{"start":{"line":9,"column":13},"end":{"line":9,"column":32}},"2":{"start":{"line":10,"column":12},"end":{"line":10,"column":31}},"3":{"start":{"line":14,"column":4},"end":{"line":14,"column":34}},"4":{"start":{"line":18,"column":17},"end":{"line":18,"column":28}},"5":{"start":{"line":19,"column":4},"end":{"line":22,"column":5}},"6":{"start":{"line":21,"column":6},"end":{"line":21,"column":25}},"7":{"start":{"line":23,"column":4},"end":{"line":25,"column":5}},"8":{"start":{"line":24,"column":6},"end":{"line":24,"column":24}},"9":{"start":{"line":26,"column":4},"end":{"line":31,"column":5}},"10":{"start":{"line":27,"column":6},"end":{"line":29,"column":7}},"11":{"start":{"line":28,"column":8},"end":{"line":28,"column":61}},"12":{"start":{"line":30,"column":6},"end":{"line":30,"column":29}},"13":{"start":{"line":32,"column":4},"end":{"line":32,"column":25}},"14":{"start":{"line":36,"column":4},"end":{"line":36,"column":48}},"15":{"start":{"line":36,"column":25},"end":{"line":36,"column":48}},"16":{"start":{"line":38,"column":4},"end":{"line":55,"column":5}},"17":{"start":{"line":40,"column":6},"end":{"line":40,"column":55}},"18":{"start":{"line":41,"column":6},"end":{"line":41,"column":41}},"19":{"start":{"line":43,"column":17},"end":{"line":43,"column":31}},"20":{"start":{"line":44,"column":18},"end":{"line":44,"column":33}},"21":{"start":{"line":45,"column":19},"end":{"line":45,"column":32}},"22":{"start":{"line":46,"column":17},"end":{"line":46,"column":26}},"23":{"start":{"line":48,"column":6},"end":{"line":52,"column":7}},"24":{"start":{"line":49,"column":8},"end":{"line":49,"column":25}},"25":{"start":{"line":50,"column":13},"end":{"line":52,"column":7}},"26":{"start":{"line":51,"column":8},"end":{"line":51,"column":36}},"27":{"start":{"line":53,"column":6},"end":{"line":54,"column":75}},"28":{"start":{"line":56,"column":4},"end":{"line":56,"column":27}},"29":{"start":{"line":61,"column":18},"end":{"line":61,"column":36}},"30":{"start":{"line":62,"column":4},"end":{"line":66,"column":5}},"31":{"start":{"line":63,"column":6},"end":{"line":63,"column":75}},"32":{"start":{"line":64,"column":11},"end":{"line":66,"column":5}},"33":{"start":{"line":65,"column":6},"end":{"line":65,"column":72}},"34":{"start":{"line":70,"column":0},"end":{"line":70,"column":36}},"35":{"start":{"line":71,"column":0},"end":{"line":71,"column":57}},"36":{"start":{"line":73,"column":0},"end":{"line":73,"column":27}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":13,"column":2},"end":{"line":13,"column":3}},"loc":{"start":{"line":13,"column":38},"end":{"line":15,"column":3}},"line":13},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":2},"end":{"line":17,"column":3}},"loc":{"start":{"line":17,"column":12},"end":{"line":33,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":35,"column":2},"end":{"line":35,"column":3}},"loc":{"start":{"line":35,"column":24},"end":{"line":58,"column":3}},"line":35},"3":{"name":"(anonymous_3)","decl":{"start":{"line":60,"column":2},"end":{"line":60,"column":3}},"loc":{"start":{"line":60,"column":26},"end":{"line":67,"column":3}},"line":60}},"branchMap":{"0":{"loc":{"start":{"line":19,"column":4},"end":{"line":22,"column":5}},"type":"if","locations":[{"start":{"line":19,"column":4},"end":{"line":22,"column":5}},{"start":{"line":19,"column":4},"end":{"line":22,"column":5}}],"line":19},"1":{"loc":{"start":{"line":23,"column":4},"end":{"line":25,"column":5}},"type":"if","locations":[{"start":{"line":23,"column":4},"end":{"line":25,"column":5}},{"start":{"line":23,"column":4},"end":{"line":25,"column":5}}],"line":23},"2":{"loc":{"start":{"line":27,"column":6},"end":{"line":29,"column":7}},"type":"if","locations":[{"start":{"line":27,"column":6},"end":{"line":29,"column":7}},{"start":{"line":27,"column":6},"end":{"line":29,"column":7}}],"line":27},"3":{"loc":{"start":{"line":28,"column":15},"end":{"line":28,"column":60}},"type":"binary-expr","locations":[{"start":{"line":28,"column":15},"end":{"line":28,"column":43}},{"start":{"line":28,"column":47},"end":{"line":28,"column":60}}],"line":28},"4":{"loc":{"start":{"line":36,"column":4},"end":{"line":36,"column":48}},"type":"if","locations":[{"start":{"line":36,"column":4},"end":{"line":36,"column":48}},{"start":{"line":36,"column":4},"end":{"line":36,"column":48}}],"line":36},"5":{"loc":{"start":{"line":38,"column":4},"end":{"line":55,"column":5}},"type":"if","locations":[{"start":{"line":38,"column":4},"end":{"line":55,"column":5}},{"start":{"line":38,"column":4},"end":{"line":55,"column":5}}],"line":38},"6":{"loc":{"start":{"line":48,"column":6},"end":{"line":52,"column":7}},"type":"if","locations":[{"start":{"line":48,"column":6},"end":{"line":52,"column":7}},{"start":{"line":48,"column":6},"end":{"line":52,"column":7}}],"line":48},"7":{"loc":{"start":{"line":50,"column":13},"end":{"line":52,"column":7}},"type":"if","locations":[{"start":{"line":50,"column":13},"end":{"line":52,"column":7}},{"start":{"line":50,"column":13},"end":{"line":52,"column":7}}],"line":50},"8":{"loc":{"start":{"line":62,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":62,"column":4},"end":{"line":66,"column":5}},{"start":{"line":62,"column":4},"end":{"line":66,"column":5}}],"line":62},"9":{"loc":{"start":{"line":64,"column":11},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":11},"end":{"line":66,"column":5}},{"start":{"line":64,"column":11},"end":{"line":66,"column":5}}],"line":64}},"s":{"0":1,"1":1,"2":1,"3":911,"4":807,"5":807,"6":0,"7":807,"8":0,"9":807,"10":2612,"11":807,"12":1805,"13":0,"14":807,"15":0,"16":807,"17":0,"18":0,"19":807,"20":807,"21":807,"22":807,"23":807,"24":0,"25":807,"26":801,"27":807,"28":807,"29":911,"30":911,"31":5,"32":906,"33":906,"34":1,"35":1,"36":1},"f":{"0":911,"1":807,"2":807,"3":911},"b":{"0":[0,807],"1":[0,807],"2":[807,1805],"3":[807,44],"4":[0,807],"5":[0,807],"6":[0,807],"7":[801,6],"8":[5,906],"9":[906,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"fda3bbb793fc5804041d3bf22139013bea308044","contentHash":"9bba6e5be688344b48d06ddc84c5bdc6c4cccc32ca9ed7df650d1ae85afa2ff5"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/attributeGroup.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/attributeGroup.js","statementMap":{"0":{"start":{"line":8,"column":17},"end":{"line":8,"column":40}},"1":{"start":{"line":12,"column":4},"end":{"line":12,"column":34}},"2":{"start":{"line":16,"column":4},"end":{"line":18,"column":5}},"3":{"start":{"line":17,"column":6},"end":{"line":17,"column":80}},"4":{"start":{"line":22,"column":4},"end":{"line":22,"column":48}},"5":{"start":{"line":22,"column":25},"end":{"line":22,"column":48}},"6":{"start":{"line":23,"column":4},"end":{"line":27,"column":5}},"7":{"start":{"line":24,"column":6},"end":{"line":24,"column":55}},"8":{"start":{"line":26,"column":6},"end":{"line":26,"column":59}},"9":{"start":{"line":28,"column":4},"end":{"line":28,"column":27}},"10":{"start":{"line":32,"column":0},"end":{"line":32,"column":46}},"11":{"start":{"line":33,"column":0},"end":{"line":34,"column":18}},"12":{"start":{"line":36,"column":0},"end":{"line":36,"column":32}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":11,"column":2},"end":{"line":11,"column":3}},"loc":{"start":{"line":11,"column":38},"end":{"line":13,"column":3}},"line":11},"1":{"name":"(anonymous_1)","decl":{"start":{"line":15,"column":2},"end":{"line":15,"column":3}},"loc":{"start":{"line":15,"column":19},"end":{"line":19,"column":3}},"line":15},"2":{"name":"(anonymous_2)","decl":{"start":{"line":21,"column":2},"end":{"line":21,"column":3}},"loc":{"start":{"line":21,"column":24},"end":{"line":29,"column":3}},"line":21}},"branchMap":{"0":{"loc":{"start":{"line":16,"column":4},"end":{"line":18,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":18,"column":5}},{"start":{"line":16,"column":4},"end":{"line":18,"column":5}}],"line":16},"1":{"loc":{"start":{"line":22,"column":4},"end":{"line":22,"column":48}},"type":"if","locations":[{"start":{"line":22,"column":4},"end":{"line":22,"column":48}},{"start":{"line":22,"column":4},"end":{"line":22,"column":48}}],"line":22},"2":{"loc":{"start":{"line":23,"column":4},"end":{"line":27,"column":5}},"type":"if","locations":[{"start":{"line":23,"column":4},"end":{"line":27,"column":5}},{"start":{"line":23,"column":4},"end":{"line":27,"column":5}}],"line":23}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":1,"11":1,"12":1},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"f233717152a32b28e73f44cdc0d94e8c87d49a47","contentHash":"70e0427f155109408eff1f7d55818a58d781dc9b85583f831faf08b9951be94e"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/choice.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/choice.js","statementMap":{"0":{"start":{"line":8,"column":17},"end":{"line":8,"column":40}},"1":{"start":{"line":12,"column":4},"end":{"line":12,"column":34}},"2":{"start":{"line":16,"column":0},"end":{"line":16,"column":30}},"3":{"start":{"line":17,"column":0},"end":{"line":18,"column":19}},"4":{"start":{"line":20,"column":0},"end":{"line":20,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":11,"column":2},"end":{"line":11,"column":3}},"loc":{"start":{"line":11,"column":38},"end":{"line":13,"column":3}},"line":11}},"branchMap":{},"s":{"0":1,"1":4,"2":1,"3":1,"4":1},"f":{"0":4},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"14a29e5482c0166bc0ae119c07d78c58d52bc311","contentHash":"e582ed60bc145e83e033aef0a8c4fc22715f893fd45af83c2460bb6adff62ed8"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/complexContent.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/complexContent.js","statementMap":{"0":{"start":{"line":8,"column":17},"end":{"line":8,"column":40}},"1":{"start":{"line":9,"column":16},"end":{"line":9,"column":38}},"2":{"start":{"line":13,"column":4},"end":{"line":13,"column":34}},"3":{"start":{"line":17,"column":4},"end":{"line":17,"column":48}},"4":{"start":{"line":17,"column":25},"end":{"line":17,"column":48}},"5":{"start":{"line":18,"column":21},"end":{"line":19,"column":37}},"6":{"start":{"line":20,"column":19},"end":{"line":20,"column":38}},"7":{"start":{"line":22,"column":4},"end":{"line":27,"column":5}},"8":{"start":{"line":22,"column":17},"end":{"line":22,"column":18}},"9":{"start":{"line":23,"column":6},"end":{"line":23,"column":52}},"10":{"start":{"line":24,"column":6},"end":{"line":26,"column":7}},"11":{"start":{"line":25,"column":8},"end":{"line":25,"column":40}},"12":{"start":{"line":28,"column":4},"end":{"line":28,"column":22}},"13":{"start":{"line":32,"column":0},"end":{"line":32,"column":46}},"14":{"start":{"line":33,"column":0},"end":{"line":33,"column":76}},"15":{"start":{"line":35,"column":0},"end":{"line":35,"column":32}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":2},"end":{"line":12,"column":3}},"loc":{"start":{"line":12,"column":38},"end":{"line":14,"column":3}},"line":12},"1":{"name":"(anonymous_1)","decl":{"start":{"line":16,"column":2},"end":{"line":16,"column":3}},"loc":{"start":{"line":16,"column":24},"end":{"line":29,"column":3}},"line":16}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":4},"end":{"line":17,"column":48}},"type":"if","locations":[{"start":{"line":17,"column":4},"end":{"line":17,"column":48}},{"start":{"line":17,"column":4},"end":{"line":17,"column":48}}],"line":17},"1":{"loc":{"start":{"line":20,"column":19},"end":{"line":20,"column":38}},"type":"binary-expr","locations":[{"start":{"line":20,"column":19},"end":{"line":20,"column":32}},{"start":{"line":20,"column":36},"end":{"line":20,"column":38}}],"line":20},"2":{"loc":{"start":{"line":24,"column":6},"end":{"line":26,"column":7}},"type":"if","locations":[{"start":{"line":24,"column":6},"end":{"line":26,"column":7}},{"start":{"line":24,"column":6},"end":{"line":26,"column":7}}],"line":24}},"s":{"0":1,"1":1,"2":750,"3":693,"4":0,"5":693,"6":693,"7":693,"8":693,"9":693,"10":693,"11":693,"12":693,"13":1,"14":1,"15":1},"f":{"0":750,"1":693},"b":{"0":[0,693],"1":[693,0],"2":[693,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"c6cf9fa35fc37357cdd76a0d62d8c79fa23f5805","contentHash":"1f799302f8e1957587bc82e21dc09ffc9ba094d1a000713da8f8d8949eff2a19"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/extension.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/extension.js","statementMap":{"0":{"start":{"line":8,"column":17},"end":{"line":8,"column":40}},"1":{"start":{"line":9,"column":13},"end":{"line":9,"column":33}},"2":{"start":{"line":10,"column":13},"end":{"line":10,"column":26}},"3":{"start":{"line":11,"column":15},"end":{"line":11,"column":36}},"4":{"start":{"line":12,"column":13},"end":{"line":12,"column":32}},"5":{"start":{"line":13,"column":12},"end":{"line":13,"column":31}},"6":{"start":{"line":17,"column":4},"end":{"line":17,"column":34}},"7":{"start":{"line":21,"column":4},"end":{"line":21,"column":48}},"8":{"start":{"line":21,"column":25},"end":{"line":21,"column":48}},"9":{"start":{"line":22,"column":21},"end":{"line":23,"column":37}},"10":{"start":{"line":24,"column":4},"end":{"line":31,"column":5}},"11":{"start":{"line":25,"column":27},"end":{"line":25,"column":58}},"12":{"start":{"line":26,"column":6},"end":{"line":26,"column":37}},"13":{"start":{"line":27,"column":6},"end":{"line":27,"column":32}},"14":{"start":{"line":28,"column":6},"end":{"line":28,"column":54}},"15":{"start":{"line":29,"column":6},"end":{"line":29,"column":56}},"16":{"start":{"line":30,"column":6},"end":{"line":30,"column":62}},"17":{"start":{"line":32,"column":4},"end":{"line":32,"column":58}},"18":{"start":{"line":36,"column":18},"end":{"line":36,"column":36}},"19":{"start":{"line":37,"column":4},"end":{"line":39,"column":5}},"20":{"start":{"line":38,"column":6},"end":{"line":38,"column":72}},"21":{"start":{"line":43,"column":0},"end":{"line":43,"column":36}},"22":{"start":{"line":44,"column":0},"end":{"line":45,"column":43}},"23":{"start":{"line":47,"column":0},"end":{"line":47,"column":27}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":2},"end":{"line":16,"column":3}},"loc":{"start":{"line":16,"column":38},"end":{"line":18,"column":3}},"line":16},"1":{"name":"(anonymous_1)","decl":{"start":{"line":20,"column":2},"end":{"line":20,"column":3}},"loc":{"start":{"line":20,"column":24},"end":{"line":33,"column":3}},"line":20},"2":{"name":"(anonymous_2)","decl":{"start":{"line":35,"column":2},"end":{"line":35,"column":3}},"loc":{"start":{"line":35,"column":26},"end":{"line":40,"column":3}},"line":35}},"branchMap":{"0":{"loc":{"start":{"line":21,"column":4},"end":{"line":21,"column":48}},"type":"if","locations":[{"start":{"line":21,"column":4},"end":{"line":21,"column":48}},{"start":{"line":21,"column":4},"end":{"line":21,"column":48}}],"line":21},"1":{"loc":{"start":{"line":24,"column":4},"end":{"line":31,"column":5}},"type":"if","locations":[{"start":{"line":24,"column":4},"end":{"line":31,"column":5}},{"start":{"line":24,"column":4},"end":{"line":31,"column":5}}],"line":24},"2":{"loc":{"start":{"line":37,"column":4},"end":{"line":39,"column":5}},"type":"if","locations":[{"start":{"line":37,"column":4},"end":{"line":39,"column":5}},{"start":{"line":37,"column":4},"end":{"line":39,"column":5}}],"line":37}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":772,"7":715,"8":0,"9":715,"10":715,"11":715,"12":715,"13":715,"14":715,"15":715,"16":715,"17":715,"18":772,"19":772,"20":772,"21":1,"22":1,"23":1},"f":{"0":772,"1":715,"2":772},"b":{"0":[0,715],"1":[715,0],"2":[772,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"3912e360db105310c5a15d406bd2ade0d24a4f43","contentHash":"8fe75f236296e3d97ed5c48090a4a18f5301613bf9c060a6398036d736bc7748"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/sequence.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/sequence.js","statementMap":{"0":{"start":{"line":8,"column":17},"end":{"line":8,"column":40}},"1":{"start":{"line":9,"column":10},"end":{"line":9,"column":26}},"2":{"start":{"line":13,"column":4},"end":{"line":13,"column":34}},"3":{"start":{"line":17,"column":0},"end":{"line":17,"column":34}},"4":{"start":{"line":18,"column":0},"end":{"line":19,"column":19}},"5":{"start":{"line":21,"column":0},"end":{"line":21,"column":26}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":2},"end":{"line":12,"column":3}},"loc":{"start":{"line":12,"column":38},"end":{"line":14,"column":3}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":2623,"3":1,"4":1,"5":1},"f":{"0":2623},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"35b6192467d7addefd8889b57882dc0a73eccfce","contentHash":"18eaac8a94474659a9a7793caa966083357e600e19bad9d3d60e77f35e98822d"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/complexType.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/complexType.js","statementMap":{"0":{"start":{"line":8,"column":17},"end":{"line":8,"column":40}},"1":{"start":{"line":9,"column":13},"end":{"line":9,"column":32}},"2":{"start":{"line":10,"column":15},"end":{"line":10,"column":36}},"3":{"start":{"line":11,"column":10},"end":{"line":11,"column":26}},"4":{"start":{"line":12,"column":20},"end":{"line":12,"column":46}},"5":{"start":{"line":13,"column":21},"end":{"line":13,"column":48}},"6":{"start":{"line":17,"column":4},"end":{"line":17,"column":34}},"7":{"start":{"line":21,"column":4},"end":{"line":21,"column":48}},"8":{"start":{"line":21,"column":25},"end":{"line":21,"column":48}},"9":{"start":{"line":22,"column":21},"end":{"line":23,"column":37}},"10":{"start":{"line":24,"column":4},"end":{"line":26,"column":5}},"11":{"start":{"line":25,"column":6},"end":{"line":25,"column":30}},"12":{"start":{"line":27,"column":19},"end":{"line":27,"column":38}},"13":{"start":{"line":29,"column":4},"end":{"line":34,"column":5}},"14":{"start":{"line":29,"column":17},"end":{"line":29,"column":18}},"15":{"start":{"line":30,"column":6},"end":{"line":30,"column":52}},"16":{"start":{"line":31,"column":6},"end":{"line":33,"column":7}},"17":{"start":{"line":32,"column":8},"end":{"line":32,"column":40}},"18":{"start":{"line":35,"column":4},"end":{"line":35,"column":46}},"19":{"start":{"line":36,"column":4},"end":{"line":36,"column":44}},"20":{"start":{"line":37,"column":4},"end":{"line":37,"column":32}},"21":{"start":{"line":38,"column":4},"end":{"line":38,"column":22}},"22":{"start":{"line":42,"column":4},"end":{"line":68,"column":5}},"23":{"start":{"line":43,"column":6},"end":{"line":67,"column":7}},"24":{"start":{"line":44,"column":24},"end":{"line":44,"column":49}},"25":{"start":{"line":45,"column":20},"end":{"line":45,"column":35}},"26":{"start":{"line":46,"column":19},"end":{"line":46,"column":33}},"27":{"start":{"line":47,"column":8},"end":{"line":66,"column":9}},"28":{"start":{"line":48,"column":24},"end":{"line":48,"column":43}},"29":{"start":{"line":49,"column":10},"end":{"line":65,"column":11}},"30":{"start":{"line":50,"column":25},"end":{"line":50,"column":39}},"31":{"start":{"line":51,"column":12},"end":{"line":64,"column":13}},"32":{"start":{"line":52,"column":33},"end":{"line":52,"column":52}},"33":{"start":{"line":53,"column":14},"end":{"line":63,"column":15}},"34":{"start":{"line":54,"column":27},"end":{"line":54,"column":45}},"35":{"start":{"line":55,"column":16},"end":{"line":62,"column":17}},"36":{"start":{"line":56,"column":18},"end":{"line":61,"column":19}},"37":{"start":{"line":57,"column":20},"end":{"line":59,"column":21}},"38":{"start":{"line":58,"column":22},"end":{"line":58,"column":55}},"39":{"start":{"line":60,"column":20},"end":{"line":60,"column":88}},"40":{"start":{"line":72,"column":0},"end":{"line":72,"column":40}},"41":{"start":{"line":73,"column":0},"end":{"line":75,"column":18}},"42":{"start":{"line":77,"column":0},"end":{"line":77,"column":29}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":2},"end":{"line":16,"column":3}},"loc":{"start":{"line":16,"column":38},"end":{"line":18,"column":3}},"line":16},"1":{"name":"(anonymous_1)","decl":{"start":{"line":20,"column":2},"end":{"line":20,"column":3}},"loc":{"start":{"line":20,"column":24},"end":{"line":39,"column":3}},"line":20},"2":{"name":"(anonymous_2)","decl":{"start":{"line":41,"column":2},"end":{"line":41,"column":3}},"loc":{"start":{"line":41,"column":32},"end":{"line":69,"column":3}},"line":41}},"branchMap":{"0":{"loc":{"start":{"line":21,"column":4},"end":{"line":21,"column":48}},"type":"if","locations":[{"start":{"line":21,"column":4},"end":{"line":21,"column":48}},{"start":{"line":21,"column":4},"end":{"line":21,"column":48}}],"line":21},"1":{"loc":{"start":{"line":24,"column":4},"end":{"line":26,"column":5}},"type":"if","locations":[{"start":{"line":24,"column":4},"end":{"line":26,"column":5}},{"start":{"line":24,"column":4},"end":{"line":26,"column":5}}],"line":24},"2":{"loc":{"start":{"line":27,"column":19},"end":{"line":27,"column":38}},"type":"binary-expr","locations":[{"start":{"line":27,"column":19},"end":{"line":27,"column":32}},{"start":{"line":27,"column":36},"end":{"line":27,"column":38}}],"line":27},"3":{"loc":{"start":{"line":31,"column":6},"end":{"line":33,"column":7}},"type":"if","locations":[{"start":{"line":31,"column":6},"end":{"line":33,"column":7}},{"start":{"line":31,"column":6},"end":{"line":33,"column":7}}],"line":31},"4":{"loc":{"start":{"line":35,"column":22},"end":{"line":35,"column":45}},"type":"binary-expr","locations":[{"start":{"line":35,"column":22},"end":{"line":35,"column":32}},{"start":{"line":35,"column":36},"end":{"line":35,"column":45}}],"line":35},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":68,"column":5}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":68,"column":5}},{"start":{"line":42,"column":4},"end":{"line":68,"column":5}}],"line":42},"6":{"loc":{"start":{"line":43,"column":6},"end":{"line":67,"column":7}},"type":"if","locations":[{"start":{"line":43,"column":6},"end":{"line":67,"column":7}},{"start":{"line":43,"column":6},"end":{"line":67,"column":7}}],"line":43},"7":{"loc":{"start":{"line":47,"column":8},"end":{"line":66,"column":9}},"type":"if","locations":[{"start":{"line":47,"column":8},"end":{"line":66,"column":9}},{"start":{"line":47,"column":8},"end":{"line":66,"column":9}}],"line":47},"8":{"loc":{"start":{"line":49,"column":10},"end":{"line":65,"column":11}},"type":"if","locations":[{"start":{"line":49,"column":10},"end":{"line":65,"column":11}},{"start":{"line":49,"column":10},"end":{"line":65,"column":11}}],"line":49},"9":{"loc":{"start":{"line":51,"column":12},"end":{"line":64,"column":13}},"type":"if","locations":[{"start":{"line":51,"column":12},"end":{"line":64,"column":13}},{"start":{"line":51,"column":12},"end":{"line":64,"column":13}}],"line":51},"10":{"loc":{"start":{"line":53,"column":14},"end":{"line":63,"column":15}},"type":"if","locations":[{"start":{"line":53,"column":14},"end":{"line":63,"column":15}},{"start":{"line":53,"column":14},"end":{"line":63,"column":15}}],"line":53},"11":{"loc":{"start":{"line":55,"column":16},"end":{"line":62,"column":17}},"type":"if","locations":[{"start":{"line":55,"column":16},"end":{"line":62,"column":17}},{"start":{"line":55,"column":16},"end":{"line":62,"column":17}}],"line":55},"12":{"loc":{"start":{"line":56,"column":18},"end":{"line":61,"column":19}},"type":"if","locations":[{"start":{"line":56,"column":18},"end":{"line":61,"column":19}},{"start":{"line":56,"column":18},"end":{"line":61,"column":19}}],"line":56},"13":{"loc":{"start":{"line":57,"column":20},"end":{"line":59,"column":21}},"type":"if","locations":[{"start":{"line":57,"column":20},"end":{"line":59,"column":21}},{"start":{"line":57,"column":20},"end":{"line":59,"column":21}}],"line":57}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":2884,"7":23942,"8":21478,"9":2464,"10":2464,"11":1,"12":2464,"13":2464,"14":2464,"15":2729,"16":2729,"17":2698,"18":2464,"19":2464,"20":2464,"21":2464,"22":1987,"23":1987,"24":708,"25":708,"26":708,"27":708,"28":689,"29":689,"30":689,"31":689,"32":689,"33":689,"34":689,"35":689,"36":689,"37":689,"38":92,"39":689,"40":1,"41":1,"42":1},"f":{"0":2884,"1":23942,"2":1987},"b":{"0":[21478,2464],"1":[1,2463],"2":[2464,0],"3":[2698,31],"4":[2464,176],"5":[1987,0],"6":[708,1279],"7":[689,19],"8":[689,0],"9":[689,0],"10":[689,0],"11":[689,0],"12":[689,0],"13":[92,597]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"fb2868af8d3fd8c2eb5eec3f5209614f13841594","contentHash":"ee74cc550071300068587a1d8971508aa37127eed8c475af1165326050053b98"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/simpleContent.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/simpleContent.js","statementMap":{"0":{"start":{"line":8,"column":17},"end":{"line":8,"column":40}},"1":{"start":{"line":9,"column":16},"end":{"line":9,"column":38}},"2":{"start":{"line":13,"column":4},"end":{"line":13,"column":34}},"3":{"start":{"line":17,"column":0},"end":{"line":17,"column":44}},"4":{"start":{"line":18,"column":0},"end":{"line":18,"column":75}},"5":{"start":{"line":20,"column":0},"end":{"line":20,"column":31}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":2},"end":{"line":12,"column":3}},"loc":{"start":{"line":12,"column":38},"end":{"line":14,"column":3}},"line":12}},"branchMap":{},"s":{"0":1,"1":1,"2":26,"3":1,"4":1,"5":1},"f":{"0":26},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"b839791a45b4853b4894fd2f161c685c7439923c","contentHash":"9f28d50f29e08390303256395c7845d46ab8e0b84a72838aca74050f6b9d43bd"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/documentation.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/documentation.js","statementMap":{"0":{"start":{"line":8,"column":17},"end":{"line":8,"column":40}},"1":{"start":{"line":12,"column":4},"end":{"line":12,"column":34}},"2":{"start":{"line":16,"column":0},"end":{"line":16,"column":44}},"3":{"start":{"line":17,"column":0},"end":{"line":17,"column":40}},"4":{"start":{"line":19,"column":0},"end":{"line":19,"column":31}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":11,"column":2},"end":{"line":11,"column":3}},"loc":{"start":{"line":11,"column":38},"end":{"line":13,"column":3}},"line":11}},"branchMap":{},"s":{"0":1,"1":19,"2":1,"3":1,"4":1},"f":{"0":19},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"20cca41b057e0b0045e33a9892ec04de4a7811ba","contentHash":"3fb6da775e774707eca77f4994a2c6ab82a00ea7ac80d0e3ea956d19df618aff"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/element.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/element.js","statementMap":{"0":{"start":{"line":8,"column":17},"end":{"line":8,"column":40}},"1":{"start":{"line":9,"column":12},"end":{"line":9,"column":31}},"2":{"start":{"line":10,"column":13},"end":{"line":10,"column":33}},"3":{"start":{"line":11,"column":13},"end":{"line":11,"column":32}},"4":{"start":{"line":12,"column":18},"end":{"line":12,"column":42}},"5":{"start":{"line":13,"column":17},"end":{"line":13,"column":40}},"6":{"start":{"line":17,"column":4},"end":{"line":17,"column":34}},"7":{"start":{"line":21,"column":4},"end":{"line":21,"column":29}},"8":{"start":{"line":25,"column":4},"end":{"line":25,"column":48}},"9":{"start":{"line":25,"column":25},"end":{"line":25,"column":48}},"10":{"start":{"line":26,"column":15},"end":{"line":26,"column":29}},"11":{"start":{"line":27,"column":16},"end":{"line":27,"column":31}},"12":{"start":{"line":28,"column":17},"end":{"line":28,"column":30}},"13":{"start":{"line":30,"column":15},"end":{"line":30,"column":24}},"14":{"start":{"line":32,"column":4},"end":{"line":36,"column":5}},"15":{"start":{"line":33,"column":6},"end":{"line":33,"column":23}},"16":{"start":{"line":34,"column":11},"end":{"line":36,"column":5}},"17":{"start":{"line":35,"column":6},"end":{"line":35,"column":34}},"18":{"start":{"line":37,"column":21},"end":{"line":38,"column":70}},"19":{"start":{"line":40,"column":4},"end":{"line":42,"column":5}},"20":{"start":{"line":41,"column":6},"end":{"line":41,"column":35}},"21":{"start":{"line":44,"column":4},"end":{"line":89,"column":5}},"22":{"start":{"line":46,"column":26},"end":{"line":46,"column":56}},"23":{"start":{"line":47,"column":6},"end":{"line":52,"column":7}},"24":{"start":{"line":48,"column":8},"end":{"line":48,"column":67}},"25":{"start":{"line":49,"column":8},"end":{"line":51,"column":9}},"26":{"start":{"line":50,"column":10},"end":{"line":50,"column":39}},"27":{"start":{"line":53,"column":11},"end":{"line":89,"column":5}},"28":{"start":{"line":54,"column":6},"end":{"line":70,"column":7}},"29":{"start":{"line":55,"column":8},"end":{"line":55,"column":36}},"30":{"start":{"line":56,"column":29},"end":{"line":56,"column":60}},"31":{"start":{"line":57,"column":8},"end":{"line":66,"column":9}},"32":{"start":{"line":58,"column":10},"end":{"line":58,"column":56}},"33":{"start":{"line":59,"column":10},"end":{"line":59,"column":60}},"34":{"start":{"line":60,"column":10},"end":{"line":60,"column":50}},"35":{"start":{"line":61,"column":10},"end":{"line":61,"column":58}},"36":{"start":{"line":62,"column":10},"end":{"line":64,"column":11}},"37":{"start":{"line":63,"column":12},"end":{"line":63,"column":39}},"38":{"start":{"line":65,"column":10},"end":{"line":65,"column":53}},"39":{"start":{"line":67,"column":13},"end":{"line":70,"column":7}},"40":{"start":{"line":68,"column":8},"end":{"line":68,"column":35}},"41":{"start":{"line":69,"column":8},"end":{"line":69,"column":45}},"42":{"start":{"line":73,"column":21},"end":{"line":73,"column":34}},"43":{"start":{"line":74,"column":6},"end":{"line":88,"column":7}},"44":{"start":{"line":74,"column":19},"end":{"line":74,"column":20}},"45":{"start":{"line":75,"column":8},"end":{"line":87,"column":9}},"46":{"start":{"line":76,"column":10},"end":{"line":76,"column":38}},"47":{"start":{"line":77,"column":32},"end":{"line":77,"column":59}},"48":{"start":{"line":78,"column":10},"end":{"line":82,"column":11}},"49":{"start":{"line":79,"column":12},"end":{"line":79,"column":59}},"50":{"start":{"line":80,"column":12},"end":{"line":80,"column":63}},"51":{"start":{"line":81,"column":12},"end":{"line":81,"column":53}},"52":{"start":{"line":83,"column":10},"end":{"line":83,"column":16}},"53":{"start":{"line":84,"column":15},"end":{"line":87,"column":9}},"54":{"start":{"line":85,"column":10},"end":{"line":85,"column":37}},"55":{"start":{"line":86,"column":10},"end":{"line":86,"column":43}},"56":{"start":{"line":90,"column":4},"end":{"line":90,"column":22}},"57":{"start":{"line":94,"column":18},"end":{"line":94,"column":36}},"58":{"start":{"line":95,"column":4},"end":{"line":99,"column":5}},"59":{"start":{"line":96,"column":6},"end":{"line":96,"column":73}},"60":{"start":{"line":97,"column":11},"end":{"line":99,"column":5}},"61":{"start":{"line":98,"column":6},"end":{"line":98,"column":72}},"62":{"start":{"line":100,"column":4},"end":{"line":103,"column":5}},"63":{"start":{"line":101,"column":6},"end":{"line":102,"column":53}},"64":{"start":{"line":107,"column":17},"end":{"line":107,"column":28}},"65":{"start":{"line":108,"column":4},"end":{"line":111,"column":5}},"66":{"start":{"line":110,"column":6},"end":{"line":110,"column":25}},"67":{"start":{"line":112,"column":4},"end":{"line":114,"column":5}},"68":{"start":{"line":113,"column":6},"end":{"line":113,"column":24}},"69":{"start":{"line":115,"column":4},"end":{"line":120,"column":5}},"70":{"start":{"line":116,"column":6},"end":{"line":118,"column":7}},"71":{"start":{"line":117,"column":8},"end":{"line":117,"column":59}},"72":{"start":{"line":119,"column":6},"end":{"line":119,"column":29}},"73":{"start":{"line":121,"column":4},"end":{"line":121,"column":25}},"74":{"start":{"line":125,"column":0},"end":{"line":125,"column":32}},"75":{"start":{"line":126,"column":0},"end":{"line":127,"column":29}},"76":{"start":{"line":129,"column":0},"end":{"line":129,"column":25}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":2},"end":{"line":16,"column":3}},"loc":{"start":{"line":16,"column":38},"end":{"line":18,"column":3}},"line":16},"1":{"name":"(anonymous_1)","decl":{"start":{"line":20,"column":2},"end":{"line":20,"column":3}},"loc":{"start":{"line":20,"column":18},"end":{"line":22,"column":3}},"line":20},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":2},"end":{"line":24,"column":3}},"loc":{"start":{"line":24,"column":24},"end":{"line":91,"column":3}},"line":24},"3":{"name":"(anonymous_3)","decl":{"start":{"line":93,"column":2},"end":{"line":93,"column":3}},"loc":{"start":{"line":93,"column":26},"end":{"line":104,"column":3}},"line":93},"4":{"name":"(anonymous_4)","decl":{"start":{"line":106,"column":2},"end":{"line":106,"column":3}},"loc":{"start":{"line":106,"column":12},"end":{"line":122,"column":3}},"line":106}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":4},"end":{"line":25,"column":48}},"type":"if","locations":[{"start":{"line":25,"column":4},"end":{"line":25,"column":48}},{"start":{"line":25,"column":4},"end":{"line":25,"column":48}}],"line":25},"1":{"loc":{"start":{"line":32,"column":4},"end":{"line":36,"column":5}},"type":"if","locations":[{"start":{"line":32,"column":4},"end":{"line":36,"column":5}},{"start":{"line":32,"column":4},"end":{"line":36,"column":5}}],"line":32},"2":{"loc":{"start":{"line":34,"column":11},"end":{"line":36,"column":5}},"type":"if","locations":[{"start":{"line":34,"column":11},"end":{"line":36,"column":5}},{"start":{"line":34,"column":11},"end":{"line":36,"column":5}}],"line":34},"3":{"loc":{"start":{"line":40,"column":4},"end":{"line":42,"column":5}},"type":"if","locations":[{"start":{"line":40,"column":4},"end":{"line":42,"column":5}},{"start":{"line":40,"column":4},"end":{"line":42,"column":5}}],"line":40},"4":{"loc":{"start":{"line":44,"column":4},"end":{"line":89,"column":5}},"type":"if","locations":[{"start":{"line":44,"column":4},"end":{"line":89,"column":5}},{"start":{"line":44,"column":4},"end":{"line":89,"column":5}}],"line":44},"5":{"loc":{"start":{"line":47,"column":6},"end":{"line":52,"column":7}},"type":"if","locations":[{"start":{"line":47,"column":6},"end":{"line":52,"column":7}},{"start":{"line":47,"column":6},"end":{"line":52,"column":7}}],"line":47},"6":{"loc":{"start":{"line":49,"column":8},"end":{"line":51,"column":9}},"type":"if","locations":[{"start":{"line":49,"column":8},"end":{"line":51,"column":9}},{"start":{"line":49,"column":8},"end":{"line":51,"column":9}}],"line":49},"7":{"loc":{"start":{"line":53,"column":11},"end":{"line":89,"column":5}},"type":"if","locations":[{"start":{"line":53,"column":11},"end":{"line":89,"column":5}},{"start":{"line":53,"column":11},"end":{"line":89,"column":5}}],"line":53},"8":{"loc":{"start":{"line":54,"column":6},"end":{"line":70,"column":7}},"type":"if","locations":[{"start":{"line":54,"column":6},"end":{"line":70,"column":7}},{"start":{"line":54,"column":6},"end":{"line":70,"column":7}}],"line":54},"9":{"loc":{"start":{"line":57,"column":8},"end":{"line":66,"column":9}},"type":"if","locations":[{"start":{"line":57,"column":8},"end":{"line":66,"column":9}},{"start":{"line":57,"column":8},"end":{"line":66,"column":9}}],"line":57},"10":{"loc":{"start":{"line":62,"column":10},"end":{"line":64,"column":11}},"type":"if","locations":[{"start":{"line":62,"column":10},"end":{"line":64,"column":11}},{"start":{"line":62,"column":10},"end":{"line":64,"column":11}}],"line":62},"11":{"loc":{"start":{"line":62,"column":13},"end":{"line":62,"column":75}},"type":"binary-expr","locations":[{"start":{"line":62,"column":13},"end":{"line":62,"column":33}},{"start":{"line":62,"column":37},"end":{"line":62,"column":75}}],"line":62},"12":{"loc":{"start":{"line":67,"column":13},"end":{"line":70,"column":7}},"type":"if","locations":[{"start":{"line":67,"column":13},"end":{"line":70,"column":7}},{"start":{"line":67,"column":13},"end":{"line":70,"column":7}}],"line":67},"13":{"loc":{"start":{"line":75,"column":8},"end":{"line":87,"column":9}},"type":"if","locations":[{"start":{"line":75,"column":8},"end":{"line":87,"column":9}},{"start":{"line":75,"column":8},"end":{"line":87,"column":9}}],"line":75},"14":{"loc":{"start":{"line":78,"column":10},"end":{"line":82,"column":11}},"type":"if","locations":[{"start":{"line":78,"column":10},"end":{"line":82,"column":11}},{"start":{"line":78,"column":10},"end":{"line":82,"column":11}}],"line":78},"15":{"loc":{"start":{"line":84,"column":15},"end":{"line":87,"column":9}},"type":"if","locations":[{"start":{"line":84,"column":15},"end":{"line":87,"column":9}},{"start":{"line":84,"column":15},"end":{"line":87,"column":9}}],"line":84},"16":{"loc":{"start":{"line":95,"column":4},"end":{"line":99,"column":5}},"type":"if","locations":[{"start":{"line":95,"column":4},"end":{"line":99,"column":5}},{"start":{"line":95,"column":4},"end":{"line":99,"column":5}}],"line":95},"17":{"loc":{"start":{"line":97,"column":11},"end":{"line":99,"column":5}},"type":"if","locations":[{"start":{"line":97,"column":11},"end":{"line":99,"column":5}},{"start":{"line":97,"column":11},"end":{"line":99,"column":5}}],"line":97},"18":{"loc":{"start":{"line":100,"column":4},"end":{"line":103,"column":5}},"type":"if","locations":[{"start":{"line":100,"column":4},"end":{"line":103,"column":5}},{"start":{"line":100,"column":4},"end":{"line":103,"column":5}}],"line":100},"19":{"loc":{"start":{"line":108,"column":4},"end":{"line":111,"column":5}},"type":"if","locations":[{"start":{"line":108,"column":4},"end":{"line":111,"column":5}},{"start":{"line":108,"column":4},"end":{"line":111,"column":5}}],"line":108},"20":{"loc":{"start":{"line":112,"column":4},"end":{"line":114,"column":5}},"type":"if","locations":[{"start":{"line":112,"column":4},"end":{"line":114,"column":5}},{"start":{"line":112,"column":4},"end":{"line":114,"column":5}}],"line":112},"21":{"loc":{"start":{"line":116,"column":6},"end":{"line":118,"column":7}},"type":"if","locations":[{"start":{"line":116,"column":6},"end":{"line":118,"column":7}},{"start":{"line":116,"column":6},"end":{"line":118,"column":7}}],"line":116},"22":{"loc":{"start":{"line":117,"column":15},"end":{"line":117,"column":58}},"type":"binary-expr","locations":[{"start":{"line":117,"column":15},"end":{"line":117,"column":41}},{"start":{"line":117,"column":45},"end":{"line":117,"column":58}}],"line":117}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":27230,"7":264,"8":26163,"9":135,"10":26028,"11":26028,"12":26028,"13":26028,"14":26028,"15":0,"16":26028,"17":25582,"18":26028,"19":26028,"20":32,"21":26028,"22":217,"23":217,"24":217,"25":217,"26":0,"27":25811,"28":25582,"29":21080,"30":21080,"31":21080,"32":21080,"33":21080,"34":21080,"35":21080,"36":21080,"37":25,"38":21080,"39":4502,"40":4502,"41":4502,"42":229,"43":229,"44":229,"45":179,"46":178,"47":178,"48":178,"49":178,"50":178,"51":178,"52":178,"53":1,"54":1,"55":1,"56":26028,"57":27226,"58":27226,"59":285,"60":26941,"61":26659,"62":27226,"63":0,"64":26028,"65":26028,"66":405,"67":25623,"68":1,"69":25622,"70":97076,"71":25622,"72":71454,"73":0,"74":1,"75":1,"76":1},"f":{"0":27230,"1":264,"2":26163,"3":27226,"4":26028},"b":{"0":[135,26028],"1":[0,26028],"2":[25582,446],"3":[32,25996],"4":[217,25811],"5":[217,0],"6":[0,217],"7":[25582,229],"8":[21080,4502],"9":[21080,0],"10":[25,21055],"11":[21080,10542],"12":[4502,0],"13":[178,1],"14":[178,0],"15":[1,0],"16":[285,26941],"17":[26659,282],"18":[0,27226],"19":[405,25623],"20":[1,25622],"21":[25622,71454],"22":[25622,141]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"ef12d379e9ad9ade3b592aa1d0852587694a2fae","contentHash":"32883a78445c7e0ba83b25ab0eab99b06990bc486c851f494c159ee251a62b16"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/unique.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/unique.js","statementMap":{"0":{"start":{"line":8,"column":14},"end":{"line":8,"column":34}},"1":{"start":{"line":12,"column":4},"end":{"line":12,"column":34}},"2":{"start":{"line":16,"column":0},"end":{"line":16,"column":30}},"3":{"start":{"line":18,"column":0},"end":{"line":18,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":11,"column":2},"end":{"line":11,"column":3}},"loc":{"start":{"line":11,"column":38},"end":{"line":13,"column":3}},"line":11}},"branchMap":{},"s":{"0":1,"1":6,"2":1,"3":1},"f":{"0":6},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"a8b83e897f34f36fc97a7869e14a7aec10b6dede","contentHash":"175b0042bd7bc8fe8e162bcdc5c8cb0af5723d2f355d8f9130c1787d3b67e841"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/keybase.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/keybase.js","statementMap":{"0":{"start":{"line":8,"column":8},"end":{"line":8,"column":34}},"1":{"start":{"line":9,"column":17},"end":{"line":9,"column":40}},"2":{"start":{"line":13,"column":4},"end":{"line":13,"column":34}},"3":{"start":{"line":14,"column":4},"end":{"line":14,"column":25}},"4":{"start":{"line":15,"column":4},"end":{"line":15,"column":21}},"5":{"start":{"line":19,"column":4},"end":{"line":28,"column":5}},"6":{"start":{"line":20,"column":6},"end":{"line":24,"column":7}},"7":{"start":{"line":21,"column":8},"end":{"line":23,"column":35}},"8":{"start":{"line":25,"column":6},"end":{"line":25,"column":35}},"9":{"start":{"line":26,"column":11},"end":{"line":28,"column":5}},"10":{"start":{"line":27,"column":6},"end":{"line":27,"column":37}},"11":{"start":{"line":32,"column":4},"end":{"line":36,"column":5}},"12":{"start":{"line":33,"column":6},"end":{"line":35,"column":33}},"13":{"start":{"line":37,"column":4},"end":{"line":41,"column":5}},"14":{"start":{"line":38,"column":6},"end":{"line":40,"column":33}},"15":{"start":{"line":45,"column":0},"end":{"line":45,"column":62}},"16":{"start":{"line":47,"column":0},"end":{"line":47,"column":25}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":2},"end":{"line":12,"column":3}},"loc":{"start":{"line":12,"column":38},"end":{"line":16,"column":3}},"line":12},"1":{"name":"(anonymous_1)","decl":{"start":{"line":18,"column":2},"end":{"line":18,"column":3}},"loc":{"start":{"line":18,"column":18},"end":{"line":29,"column":3}},"line":18},"2":{"name":"(anonymous_2)","decl":{"start":{"line":31,"column":2},"end":{"line":31,"column":3}},"loc":{"start":{"line":31,"column":27},"end":{"line":42,"column":3}},"line":31}},"branchMap":{"0":{"loc":{"start":{"line":19,"column":4},"end":{"line":28,"column":5}},"type":"if","locations":[{"start":{"line":19,"column":4},"end":{"line":28,"column":5}},{"start":{"line":19,"column":4},"end":{"line":28,"column":5}}],"line":19},"1":{"loc":{"start":{"line":20,"column":6},"end":{"line":24,"column":7}},"type":"if","locations":[{"start":{"line":20,"column":6},"end":{"line":24,"column":7}},{"start":{"line":20,"column":6},"end":{"line":24,"column":7}}],"line":20},"2":{"loc":{"start":{"line":26,"column":11},"end":{"line":28,"column":5}},"type":"if","locations":[{"start":{"line":26,"column":11},"end":{"line":28,"column":5}},{"start":{"line":26,"column":11},"end":{"line":28,"column":5}}],"line":26},"3":{"loc":{"start":{"line":32,"column":4},"end":{"line":36,"column":5}},"type":"if","locations":[{"start":{"line":32,"column":4},"end":{"line":36,"column":5}},{"start":{"line":32,"column":4},"end":{"line":36,"column":5}}],"line":32},"4":{"loc":{"start":{"line":37,"column":4},"end":{"line":41,"column":5}},"type":"if","locations":[{"start":{"line":37,"column":4},"end":{"line":41,"column":5}},{"start":{"line":37,"column":4},"end":{"line":41,"column":5}}],"line":37}},"s":{"0":1,"1":1,"2":6,"3":6,"4":6,"5":12,"6":6,"7":0,"8":6,"9":6,"10":6,"11":6,"12":0,"13":6,"14":0,"15":1,"16":1},"f":{"0":6,"1":12,"2":6},"b":{"0":[6,6],"1":[0,6],"2":[6,0],"3":[0,6],"4":[0,6]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"ebb2faea0b4c9134382f4ea361391624f44a2622","contentHash":"cffcf5fbc9cbde692b17091ba2d57d79fc9a2a7eb9b07636c2de6599871c9ff1"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/key.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/key.js","statementMap":{"0":{"start":{"line":8,"column":14},"end":{"line":8,"column":34}},"1":{"start":{"line":12,"column":4},"end":{"line":12,"column":34}},"2":{"start":{"line":16,"column":0},"end":{"line":16,"column":24}},"3":{"start":{"line":18,"column":0},"end":{"line":18,"column":21}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":11,"column":2},"end":{"line":11,"column":3}},"loc":{"start":{"line":11,"column":38},"end":{"line":13,"column":3}},"line":11}},"branchMap":{},"s":{"0":1,"1":0,"2":1,"3":1},"f":{"0":0},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"df0dcadcd0c4349be580d21f72ea6a8568247224","contentHash":"87110f454e03bfebace947bfe29bf3e0c7079278707654cdddb1941b71ff23ff"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/keyref.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/keyref.js","statementMap":{"0":{"start":{"line":8,"column":14},"end":{"line":8,"column":34}},"1":{"start":{"line":9,"column":12},"end":{"line":9,"column":31}},"2":{"start":{"line":13,"column":4},"end":{"line":13,"column":34}},"3":{"start":{"line":17,"column":4},"end":{"line":17,"column":35}},"4":{"start":{"line":18,"column":4},"end":{"line":25,"column":5}},"5":{"start":{"line":19,"column":18},"end":{"line":19,"column":42}},"6":{"start":{"line":20,"column":6},"end":{"line":24,"column":7}},"7":{"start":{"line":21,"column":8},"end":{"line":21,"column":48}},"8":{"start":{"line":23,"column":8},"end":{"line":23,"column":57}},"9":{"start":{"line":29,"column":0},"end":{"line":29,"column":30}},"10":{"start":{"line":31,"column":0},"end":{"line":31,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":12,"column":2},"end":{"line":12,"column":3}},"loc":{"start":{"line":12,"column":38},"end":{"line":14,"column":3}},"line":12},"1":{"name":"(anonymous_1)","decl":{"start":{"line":16,"column":2},"end":{"line":16,"column":3}},"loc":{"start":{"line":16,"column":27},"end":{"line":26,"column":3}},"line":16}},"branchMap":{"0":{"loc":{"start":{"line":18,"column":4},"end":{"line":25,"column":5}},"type":"if","locations":[{"start":{"line":18,"column":4},"end":{"line":25,"column":5}},{"start":{"line":18,"column":4},"end":{"line":25,"column":5}}],"line":18},"1":{"loc":{"start":{"line":20,"column":6},"end":{"line":24,"column":7}},"type":"if","locations":[{"start":{"line":20,"column":6},"end":{"line":24,"column":7}},{"start":{"line":20,"column":6},"end":{"line":24,"column":7}}],"line":20}},"s":{"0":1,"1":1,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":1,"10":1},"f":{"0":0,"1":0},"b":{"0":[0,0],"1":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"006fb5211a4961045f57caa2a2ee682db5c90f00","contentHash":"099b33602c1cd829d0d700f8aaaa3dbbe765e7410f29d914b449baedb6b29d99"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/group.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/group.js","statementMap":{"0":{"start":{"line":8,"column":17},"end":{"line":8,"column":40}},"1":{"start":{"line":12,"column":4},"end":{"line":12,"column":34}},"2":{"start":{"line":16,"column":18},"end":{"line":16,"column":36}},"3":{"start":{"line":17,"column":4},"end":{"line":19,"column":5}},"4":{"start":{"line":18,"column":6},"end":{"line":18,"column":71}},"5":{"start":{"line":23,"column":4},"end":{"line":23,"column":48}},"6":{"start":{"line":23,"column":25},"end":{"line":23,"column":48}},"7":{"start":{"line":24,"column":4},"end":{"line":28,"column":5}},"8":{"start":{"line":25,"column":6},"end":{"line":25,"column":55}},"9":{"start":{"line":27,"column":6},"end":{"line":27,"column":59}},"10":{"start":{"line":29,"column":4},"end":{"line":29,"column":27}},"11":{"start":{"line":33,"column":0},"end":{"line":33,"column":28}},"12":{"start":{"line":34,"column":0},"end":{"line":34,"column":68}},"13":{"start":{"line":36,"column":0},"end":{"line":36,"column":23}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":11,"column":2},"end":{"line":11,"column":3}},"loc":{"start":{"line":11,"column":38},"end":{"line":13,"column":3}},"line":11},"1":{"name":"(anonymous_1)","decl":{"start":{"line":15,"column":2},"end":{"line":15,"column":3}},"loc":{"start":{"line":15,"column":26},"end":{"line":20,"column":3}},"line":15},"2":{"name":"(anonymous_2)","decl":{"start":{"line":22,"column":2},"end":{"line":22,"column":3}},"loc":{"start":{"line":22,"column":24},"end":{"line":30,"column":3}},"line":22}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":4},"end":{"line":19,"column":5}},"type":"if","locations":[{"start":{"line":17,"column":4},"end":{"line":19,"column":5}},{"start":{"line":17,"column":4},"end":{"line":19,"column":5}}],"line":17},"1":{"loc":{"start":{"line":23,"column":4},"end":{"line":23,"column":48}},"type":"if","locations":[{"start":{"line":23,"column":4},"end":{"line":23,"column":48}},{"start":{"line":23,"column":4},"end":{"line":23,"column":48}}],"line":23},"2":{"loc":{"start":{"line":24,"column":4},"end":{"line":28,"column":5}},"type":"if","locations":[{"start":{"line":24,"column":4},"end":{"line":28,"column":5}},{"start":{"line":24,"column":4},"end":{"line":28,"column":5}}],"line":24}},"s":{"0":1,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1,"12":1,"13":1},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"615978bae054a39cf51ca3fbb8ad5119f48150c8","contentHash":"787c1c3e881a14007f2b7052b7c26fb2fe66ab3d02b564dddb2e50ed6d879817"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/import.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/import.js","statementMap":{"0":{"start":{"line":8,"column":17},"end":{"line":8,"column":40}},"1":{"start":{"line":12,"column":4},"end":{"line":12,"column":34}},"2":{"start":{"line":16,"column":0},"end":{"line":16,"column":30}},"3":{"start":{"line":18,"column":0},"end":{"line":18,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":11,"column":2},"end":{"line":11,"column":3}},"loc":{"start":{"line":11,"column":38},"end":{"line":13,"column":3}},"line":11}},"branchMap":{},"s":{"0":1,"1":343,"2":1,"3":1},"f":{"0":343},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"dca20698e8d4b31a84be077aad8afc568c5e16df","contentHash":"9091a75db6680f0261615de537bb61b2d62ccd58d143660df0ac492123e41fb6"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/include.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/include.js","statementMap":{"0":{"start":{"line":8,"column":17},"end":{"line":8,"column":40}},"1":{"start":{"line":12,"column":4},"end":{"line":12,"column":34}},"2":{"start":{"line":17,"column":0},"end":{"line":17,"column":32}},"3":{"start":{"line":19,"column":0},"end":{"line":19,"column":25}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":11,"column":2},"end":{"line":11,"column":3}},"loc":{"start":{"line":11,"column":38},"end":{"line":13,"column":3}},"line":11}},"branchMap":{},"s":{"0":1,"1":5,"2":1,"3":1},"f":{"0":5},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"ed3f814a204c4eeae279b35f76adf94233bfa2de","contentHash":"237df0445e3244d98d6f2db42bc792ade1cd39276195743ab6763438cfc2a51a"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/restriction.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/restriction.js","statementMap":{"0":{"start":{"line":8,"column":17},"end":{"line":8,"column":40}},"1":{"start":{"line":9,"column":15},"end":{"line":9,"column":36}},"2":{"start":{"line":10,"column":13},"end":{"line":10,"column":32}},"3":{"start":{"line":11,"column":12},"end":{"line":11,"column":31}},"4":{"start":{"line":12,"column":8},"end":{"line":12,"column":34}},"5":{"start":{"line":16,"column":4},"end":{"line":16,"column":34}},"6":{"start":{"line":34,"column":4},"end":{"line":52,"column":5}},"7":{"start":{"line":46,"column":8},"end":{"line":46,"column":40}},"8":{"start":{"line":47,"column":8},"end":{"line":47,"column":14}},"9":{"start":{"line":49,"column":8},"end":{"line":49,"column":50}},"10":{"start":{"line":50,"column":8},"end":{"line":50,"column":44}},"11":{"start":{"line":51,"column":8},"end":{"line":51,"column":14}},"12":{"start":{"line":53,"column":4},"end":{"line":57,"column":5}},"13":{"start":{"line":55,"column":11},"end":{"line":57,"column":5}},"14":{"start":{"line":61,"column":4},"end":{"line":61,"column":48}},"15":{"start":{"line":61,"column":25},"end":{"line":61,"column":48}},"16":{"start":{"line":62,"column":21},"end":{"line":63,"column":37}},"17":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"18":{"start":{"line":65,"column":6},"end":{"line":65,"column":54}},"19":{"start":{"line":67,"column":4},"end":{"line":67,"column":58}},"20":{"start":{"line":71,"column":4},"end":{"line":71,"column":25}},"21":{"start":{"line":71,"column":18},"end":{"line":71,"column":25}},"22":{"start":{"line":72,"column":18},"end":{"line":72,"column":36}},"23":{"start":{"line":73,"column":4},"end":{"line":81,"column":5}},"24":{"start":{"line":74,"column":6},"end":{"line":80,"column":7}},"25":{"start":{"line":76,"column":8},"end":{"line":76,"column":80}},"26":{"start":{"line":77,"column":13},"end":{"line":80,"column":7}},"27":{"start":{"line":78,"column":8},"end":{"line":78,"column":81}},"28":{"start":{"line":82,"column":4},"end":{"line":84,"column":5}},"29":{"start":{"line":83,"column":6},"end":{"line":83,"column":40}},"30":{"start":{"line":88,"column":21},"end":{"line":88,"column":41}},"31":{"start":{"line":89,"column":4},"end":{"line":91,"column":5}},"32":{"start":{"line":90,"column":6},"end":{"line":90,"column":41}},"33":{"start":{"line":93,"column":4},"end":{"line":93,"column":13}},"34":{"start":{"line":97,"column":19},"end":{"line":97,"column":63}},"35":{"start":{"line":98,"column":4},"end":{"line":98,"column":27}},"36":{"start":{"line":102,"column":21},"end":{"line":102,"column":23}},"37":{"start":{"line":104,"column":4},"end":{"line":110,"column":5}},"38":{"start":{"line":105,"column":6},"end":{"line":109,"column":7}},"39":{"start":{"line":106,"column":8},"end":{"line":106,"column":45}},"40":{"start":{"line":107,"column":13},"end":{"line":109,"column":7}},"41":{"start":{"line":108,"column":8},"end":{"line":108,"column":36}},"42":{"start":{"line":112,"column":4},"end":{"line":116,"column":5}},"43":{"start":{"line":113,"column":6},"end":{"line":115,"column":7}},"44":{"start":{"line":114,"column":8},"end":{"line":114,"column":111}},"45":{"start":{"line":118,"column":4},"end":{"line":122,"column":5}},"46":{"start":{"line":119,"column":6},"end":{"line":121,"column":7}},"47":{"start":{"line":120,"column":8},"end":{"line":120,"column":101}},"48":{"start":{"line":124,"column":4},"end":{"line":128,"column":5}},"49":{"start":{"line":125,"column":6},"end":{"line":127,"column":7}},"50":{"start":{"line":126,"column":8},"end":{"line":126,"column":114}},"51":{"start":{"line":130,"column":4},"end":{"line":134,"column":5}},"52":{"start":{"line":131,"column":6},"end":{"line":133,"column":7}},"53":{"start":{"line":132,"column":8},"end":{"line":132,"column":104}},"54":{"start":{"line":136,"column":4},"end":{"line":145,"column":5}},"55":{"start":{"line":137,"column":6},"end":{"line":144,"column":7}},"56":{"start":{"line":138,"column":33},"end":{"line":138,"column":65}},"57":{"start":{"line":139,"column":8},"end":{"line":141,"column":9}},"58":{"start":{"line":140,"column":10},"end":{"line":140,"column":131}},"59":{"start":{"line":142,"column":13},"end":{"line":144,"column":7}},"60":{"start":{"line":143,"column":8},"end":{"line":143,"column":47}},"61":{"start":{"line":147,"column":4},"end":{"line":161,"column":5}},"62":{"start":{"line":148,"column":6},"end":{"line":160,"column":7}},"63":{"start":{"line":149,"column":26},"end":{"line":149,"column":55}},"64":{"start":{"line":150,"column":8},"end":{"line":152,"column":9}},"65":{"start":{"line":151,"column":10},"end":{"line":151,"column":113}},"66":{"start":{"line":153,"column":13},"end":{"line":160,"column":7}},"67":{"start":{"line":154,"column":28},"end":{"line":154,"column":76}},"68":{"start":{"line":155,"column":8},"end":{"line":159,"column":9}},"69":{"start":{"line":156,"column":10},"end":{"line":156,"column":123}},"70":{"start":{"line":158,"column":10},"end":{"line":158,"column":62}},"71":{"start":{"line":163,"column":4},"end":{"line":167,"column":5}},"72":{"start":{"line":164,"column":6},"end":{"line":166,"column":7}},"73":{"start":{"line":165,"column":8},"end":{"line":165,"column":92}},"74":{"start":{"line":169,"column":4},"end":{"line":173,"column":5}},"75":{"start":{"line":170,"column":6},"end":{"line":172,"column":7}},"76":{"start":{"line":171,"column":8},"end":{"line":171,"column":105}},"77":{"start":{"line":175,"column":4},"end":{"line":179,"column":5}},"78":{"start":{"line":176,"column":6},"end":{"line":178,"column":7}},"79":{"start":{"line":177,"column":8},"end":{"line":177,"column":106}},"80":{"start":{"line":181,"column":4},"end":{"line":185,"column":5}},"81":{"start":{"line":182,"column":6},"end":{"line":182,"column":43}},"82":{"start":{"line":183,"column":11},"end":{"line":185,"column":5}},"83":{"start":{"line":184,"column":6},"end":{"line":184,"column":73}},"84":{"start":{"line":187,"column":4},"end":{"line":191,"column":5}},"85":{"start":{"line":188,"column":6},"end":{"line":190,"column":7}},"86":{"start":{"line":189,"column":8},"end":{"line":189,"column":111}},"87":{"start":{"line":193,"column":4},"end":{"line":197,"column":5}},"88":{"start":{"line":194,"column":6},"end":{"line":196,"column":7}},"89":{"start":{"line":195,"column":8},"end":{"line":195,"column":117}},"90":{"start":{"line":199,"column":4},"end":{"line":201,"column":5}},"91":{"start":{"line":200,"column":6},"end":{"line":200,"column":142}},"92":{"start":{"line":203,"column":4},"end":{"line":203,"column":15}},"93":{"start":{"line":207,"column":0},"end":{"line":207,"column":40}},"94":{"start":{"line":208,"column":0},"end":{"line":211,"column":71}},"95":{"start":{"line":213,"column":0},"end":{"line":213,"column":29}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":15,"column":2},"end":{"line":15,"column":3}},"loc":{"start":{"line":15,"column":38},"end":{"line":17,"column":3}},"line":15},"1":{"name":"(anonymous_1)","decl":{"start":{"line":19,"column":2},"end":{"line":19,"column":3}},"loc":{"start":{"line":19,"column":18},"end":{"line":58,"column":3}},"line":19},"2":{"name":"(anonymous_2)","decl":{"start":{"line":60,"column":2},"end":{"line":60,"column":3}},"loc":{"start":{"line":60,"column":24},"end":{"line":68,"column":3}},"line":60},"3":{"name":"(anonymous_3)","decl":{"start":{"line":70,"column":2},"end":{"line":70,"column":3}},"loc":{"start":{"line":70,"column":26},"end":{"line":85,"column":3}},"line":70},"4":{"name":"(anonymous_4)","decl":{"start":{"line":87,"column":2},"end":{"line":87,"column":3}},"loc":{"start":{"line":87,"column":30},"end":{"line":94,"column":3}},"line":87},"5":{"name":"(anonymous_5)","decl":{"start":{"line":96,"column":2},"end":{"line":96,"column":3}},"loc":{"start":{"line":96,"column":27},"end":{"line":99,"column":3}},"line":96},"6":{"name":"(anonymous_6)","decl":{"start":{"line":101,"column":2},"end":{"line":101,"column":3}},"loc":{"start":{"line":101,"column":15},"end":{"line":204,"column":3}},"line":101}},"branchMap":{"0":{"loc":{"start":{"line":34,"column":4},"end":{"line":52,"column":5}},"type":"switch","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":26}},{"start":{"line":36,"column":6},"end":{"line":36,"column":26}},{"start":{"line":37,"column":6},"end":{"line":37,"column":26}},{"start":{"line":38,"column":6},"end":{"line":38,"column":26}},{"start":{"line":39,"column":6},"end":{"line":39,"column":25}},{"start":{"line":40,"column":6},"end":{"line":40,"column":28}},{"start":{"line":41,"column":6},"end":{"line":41,"column":20}},{"start":{"line":42,"column":6},"end":{"line":42,"column":23}},{"start":{"line":43,"column":6},"end":{"line":43,"column":23}},{"start":{"line":44,"column":6},"end":{"line":44,"column":24}},{"start":{"line":45,"column":6},"end":{"line":47,"column":14}},{"start":{"line":48,"column":6},"end":{"line":51,"column":14}}],"line":34},"1":{"loc":{"start":{"line":49,"column":27},"end":{"line":49,"column":49}},"type":"binary-expr","locations":[{"start":{"line":49,"column":27},"end":{"line":49,"column":43}},{"start":{"line":49,"column":47},"end":{"line":49,"column":49}}],"line":49},"2":{"loc":{"start":{"line":53,"column":4},"end":{"line":57,"column":5}},"type":"if","locations":[{"start":{"line":53,"column":4},"end":{"line":57,"column":5}},{"start":{"line":53,"column":4},"end":{"line":57,"column":5}}],"line":53},"3":{"loc":{"start":{"line":55,"column":11},"end":{"line":57,"column":5}},"type":"if","locations":[{"start":{"line":55,"column":11},"end":{"line":57,"column":5}},{"start":{"line":55,"column":11},"end":{"line":57,"column":5}}],"line":55},"4":{"loc":{"start":{"line":61,"column":4},"end":{"line":61,"column":48}},"type":"if","locations":[{"start":{"line":61,"column":4},"end":{"line":61,"column":48}},{"start":{"line":61,"column":4},"end":{"line":61,"column":48}}],"line":61},"5":{"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},"type":"if","locations":[{"start":{"line":64,"column":4},"end":{"line":66,"column":5}},{"start":{"line":64,"column":4},"end":{"line":66,"column":5}}],"line":64},"6":{"loc":{"start":{"line":71,"column":4},"end":{"line":71,"column":25}},"type":"if","locations":[{"start":{"line":71,"column":4},"end":{"line":71,"column":25}},{"start":{"line":71,"column":4},"end":{"line":71,"column":25}}],"line":71},"7":{"loc":{"start":{"line":73,"column":4},"end":{"line":81,"column":5}},"type":"if","locations":[{"start":{"line":73,"column":4},"end":{"line":81,"column":5}},{"start":{"line":73,"column":4},"end":{"line":81,"column":5}}],"line":73},"8":{"loc":{"start":{"line":74,"column":6},"end":{"line":80,"column":7}},"type":"if","locations":[{"start":{"line":74,"column":6},"end":{"line":80,"column":7}},{"start":{"line":74,"column":6},"end":{"line":80,"column":7}}],"line":74},"9":{"loc":{"start":{"line":74,"column":10},"end":{"line":75,"column":41}},"type":"binary-expr","locations":[{"start":{"line":74,"column":10},"end":{"line":74,"column":46}},{"start":{"line":75,"column":8},"end":{"line":75,"column":41}}],"line":74},"10":{"loc":{"start":{"line":77,"column":13},"end":{"line":80,"column":7}},"type":"if","locations":[{"start":{"line":77,"column":13},"end":{"line":80,"column":7}},{"start":{"line":77,"column":13},"end":{"line":80,"column":7}}],"line":77},"11":{"loc":{"start":{"line":82,"column":4},"end":{"line":84,"column":5}},"type":"if","locations":[{"start":{"line":82,"column":4},"end":{"line":84,"column":5}},{"start":{"line":82,"column":4},"end":{"line":84,"column":5}}],"line":82},"12":{"loc":{"start":{"line":89,"column":4},"end":{"line":91,"column":5}},"type":"if","locations":[{"start":{"line":89,"column":4},"end":{"line":91,"column":5}},{"start":{"line":89,"column":4},"end":{"line":91,"column":5}}],"line":89},"13":{"loc":{"start":{"line":104,"column":4},"end":{"line":110,"column":5}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":110,"column":5}},{"start":{"line":104,"column":4},"end":{"line":110,"column":5}}],"line":104},"14":{"loc":{"start":{"line":105,"column":6},"end":{"line":109,"column":7}},"type":"if","locations":[{"start":{"line":105,"column":6},"end":{"line":109,"column":7}},{"start":{"line":105,"column":6},"end":{"line":109,"column":7}}],"line":105},"15":{"loc":{"start":{"line":106,"column":14},"end":{"line":106,"column":44}},"type":"binary-expr","locations":[{"start":{"line":106,"column":14},"end":{"line":106,"column":28}},{"start":{"line":106,"column":32},"end":{"line":106,"column":44}}],"line":106},"16":{"loc":{"start":{"line":107,"column":13},"end":{"line":109,"column":7}},"type":"if","locations":[{"start":{"line":107,"column":13},"end":{"line":109,"column":7}},{"start":{"line":107,"column":13},"end":{"line":109,"column":7}}],"line":107},"17":{"loc":{"start":{"line":107,"column":17},"end":{"line":107,"column":115}},"type":"binary-expr","locations":[{"start":{"line":107,"column":17},"end":{"line":107,"column":55}},{"start":{"line":107,"column":59},"end":{"line":107,"column":84}},{"start":{"line":107,"column":88},"end":{"line":107,"column":115}}],"line":107},"18":{"loc":{"start":{"line":112,"column":4},"end":{"line":116,"column":5}},"type":"if","locations":[{"start":{"line":112,"column":4},"end":{"line":116,"column":5}},{"start":{"line":112,"column":4},"end":{"line":116,"column":5}}],"line":112},"19":{"loc":{"start":{"line":113,"column":6},"end":{"line":115,"column":7}},"type":"if","locations":[{"start":{"line":113,"column":6},"end":{"line":115,"column":7}},{"start":{"line":113,"column":6},"end":{"line":115,"column":7}}],"line":113},"20":{"loc":{"start":{"line":118,"column":4},"end":{"line":122,"column":5}},"type":"if","locations":[{"start":{"line":118,"column":4},"end":{"line":122,"column":5}},{"start":{"line":118,"column":4},"end":{"line":122,"column":5}}],"line":118},"21":{"loc":{"start":{"line":119,"column":6},"end":{"line":121,"column":7}},"type":"if","locations":[{"start":{"line":119,"column":6},"end":{"line":121,"column":7}},{"start":{"line":119,"column":6},"end":{"line":121,"column":7}}],"line":119},"22":{"loc":{"start":{"line":124,"column":4},"end":{"line":128,"column":5}},"type":"if","locations":[{"start":{"line":124,"column":4},"end":{"line":128,"column":5}},{"start":{"line":124,"column":4},"end":{"line":128,"column":5}}],"line":124},"23":{"loc":{"start":{"line":125,"column":6},"end":{"line":127,"column":7}},"type":"if","locations":[{"start":{"line":125,"column":6},"end":{"line":127,"column":7}},{"start":{"line":125,"column":6},"end":{"line":127,"column":7}}],"line":125},"24":{"loc":{"start":{"line":130,"column":4},"end":{"line":134,"column":5}},"type":"if","locations":[{"start":{"line":130,"column":4},"end":{"line":134,"column":5}},{"start":{"line":130,"column":4},"end":{"line":134,"column":5}}],"line":130},"25":{"loc":{"start":{"line":131,"column":6},"end":{"line":133,"column":7}},"type":"if","locations":[{"start":{"line":131,"column":6},"end":{"line":133,"column":7}},{"start":{"line":131,"column":6},"end":{"line":133,"column":7}}],"line":131},"26":{"loc":{"start":{"line":136,"column":4},"end":{"line":145,"column":5}},"type":"if","locations":[{"start":{"line":136,"column":4},"end":{"line":145,"column":5}},{"start":{"line":136,"column":4},"end":{"line":145,"column":5}}],"line":136},"27":{"loc":{"start":{"line":137,"column":6},"end":{"line":144,"column":7}},"type":"if","locations":[{"start":{"line":137,"column":6},"end":{"line":144,"column":7}},{"start":{"line":137,"column":6},"end":{"line":144,"column":7}}],"line":137},"28":{"loc":{"start":{"line":139,"column":8},"end":{"line":141,"column":9}},"type":"if","locations":[{"start":{"line":139,"column":8},"end":{"line":141,"column":9}},{"start":{"line":139,"column":8},"end":{"line":141,"column":9}}],"line":139},"29":{"loc":{"start":{"line":142,"column":13},"end":{"line":144,"column":7}},"type":"if","locations":[{"start":{"line":142,"column":13},"end":{"line":144,"column":7}},{"start":{"line":142,"column":13},"end":{"line":144,"column":7}}],"line":142},"30":{"loc":{"start":{"line":147,"column":4},"end":{"line":161,"column":5}},"type":"if","locations":[{"start":{"line":147,"column":4},"end":{"line":161,"column":5}},{"start":{"line":147,"column":4},"end":{"line":161,"column":5}}],"line":147},"31":{"loc":{"start":{"line":148,"column":6},"end":{"line":160,"column":7}},"type":"if","locations":[{"start":{"line":148,"column":6},"end":{"line":160,"column":7}},{"start":{"line":148,"column":6},"end":{"line":160,"column":7}}],"line":148},"32":{"loc":{"start":{"line":150,"column":8},"end":{"line":152,"column":9}},"type":"if","locations":[{"start":{"line":150,"column":8},"end":{"line":152,"column":9}},{"start":{"line":150,"column":8},"end":{"line":152,"column":9}}],"line":150},"33":{"loc":{"start":{"line":153,"column":13},"end":{"line":160,"column":7}},"type":"if","locations":[{"start":{"line":153,"column":13},"end":{"line":160,"column":7}},{"start":{"line":153,"column":13},"end":{"line":160,"column":7}}],"line":153},"34":{"loc":{"start":{"line":155,"column":8},"end":{"line":159,"column":9}},"type":"if","locations":[{"start":{"line":155,"column":8},"end":{"line":159,"column":9}},{"start":{"line":155,"column":8},"end":{"line":159,"column":9}}],"line":155},"35":{"loc":{"start":{"line":163,"column":4},"end":{"line":167,"column":5}},"type":"if","locations":[{"start":{"line":163,"column":4},"end":{"line":167,"column":5}},{"start":{"line":163,"column":4},"end":{"line":167,"column":5}}],"line":163},"36":{"loc":{"start":{"line":164,"column":6},"end":{"line":166,"column":7}},"type":"if","locations":[{"start":{"line":164,"column":6},"end":{"line":166,"column":7}},{"start":{"line":164,"column":6},"end":{"line":166,"column":7}}],"line":164},"37":{"loc":{"start":{"line":169,"column":4},"end":{"line":173,"column":5}},"type":"if","locations":[{"start":{"line":169,"column":4},"end":{"line":173,"column":5}},{"start":{"line":169,"column":4},"end":{"line":173,"column":5}}],"line":169},"38":{"loc":{"start":{"line":170,"column":6},"end":{"line":172,"column":7}},"type":"if","locations":[{"start":{"line":170,"column":6},"end":{"line":172,"column":7}},{"start":{"line":170,"column":6},"end":{"line":172,"column":7}}],"line":170},"39":{"loc":{"start":{"line":175,"column":4},"end":{"line":179,"column":5}},"type":"if","locations":[{"start":{"line":175,"column":4},"end":{"line":179,"column":5}},{"start":{"line":175,"column":4},"end":{"line":179,"column":5}}],"line":175},"40":{"loc":{"start":{"line":176,"column":6},"end":{"line":178,"column":7}},"type":"if","locations":[{"start":{"line":176,"column":6},"end":{"line":178,"column":7}},{"start":{"line":176,"column":6},"end":{"line":178,"column":7}}],"line":176},"41":{"loc":{"start":{"line":181,"column":4},"end":{"line":185,"column":5}},"type":"if","locations":[{"start":{"line":181,"column":4},"end":{"line":185,"column":5}},{"start":{"line":181,"column":4},"end":{"line":185,"column":5}}],"line":181},"42":{"loc":{"start":{"line":183,"column":11},"end":{"line":185,"column":5}},"type":"if","locations":[{"start":{"line":183,"column":11},"end":{"line":185,"column":5}},{"start":{"line":183,"column":11},"end":{"line":185,"column":5}}],"line":183},"43":{"loc":{"start":{"line":187,"column":4},"end":{"line":191,"column":5}},"type":"if","locations":[{"start":{"line":187,"column":4},"end":{"line":191,"column":5}},{"start":{"line":187,"column":4},"end":{"line":191,"column":5}}],"line":187},"44":{"loc":{"start":{"line":188,"column":6},"end":{"line":190,"column":7}},"type":"if","locations":[{"start":{"line":188,"column":6},"end":{"line":190,"column":7}},{"start":{"line":188,"column":6},"end":{"line":190,"column":7}}],"line":188},"45":{"loc":{"start":{"line":193,"column":4},"end":{"line":197,"column":5}},"type":"if","locations":[{"start":{"line":193,"column":4},"end":{"line":197,"column":5}},{"start":{"line":193,"column":4},"end":{"line":197,"column":5}}],"line":193},"46":{"loc":{"start":{"line":194,"column":6},"end":{"line":196,"column":7}},"type":"if","locations":[{"start":{"line":194,"column":6},"end":{"line":196,"column":7}},{"start":{"line":194,"column":6},"end":{"line":196,"column":7}}],"line":194},"47":{"loc":{"start":{"line":199,"column":4},"end":{"line":201,"column":5}},"type":"if","locations":[{"start":{"line":199,"column":4},"end":{"line":201,"column":5}},{"start":{"line":199,"column":4},"end":{"line":201,"column":5}}],"line":199}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":517,"6":24498,"7":36,"8":36,"9":24453,"10":24453,"11":24453,"12":24498,"13":24498,"14":3,"15":0,"16":3,"17":3,"18":0,"19":3,"20":1029,"21":512,"22":517,"23":517,"24":517,"25":512,"26":5,"27":5,"28":517,"29":512,"30":2,"31":2,"32":1,"33":1,"34":3,"35":3,"36":34,"37":34,"38":34,"39":2,"40":32,"41":16,"42":34,"43":2,"44":1,"45":34,"46":2,"47":1,"48":34,"49":2,"50":1,"51":34,"52":2,"53":1,"54":34,"55":3,"56":2,"57":2,"58":1,"59":1,"60":1,"61":34,"62":5,"63":3,"64":3,"65":2,"66":2,"67":2,"68":2,"69":1,"70":1,"71":34,"72":3,"73":2,"74":34,"75":2,"76":1,"77":34,"78":2,"79":1,"80":34,"81":1,"82":33,"83":1,"84":34,"85":2,"86":1,"87":34,"88":5,"89":1,"90":34,"91":14,"92":20,"93":1,"94":1,"95":1},"f":{"0":517,"1":24498,"2":3,"3":1029,"4":2,"5":3,"6":34},"b":{"0":[2,6,8,11,13,15,17,21,26,30,36,24453],"1":[24453,468],"2":[0,24498],"3":[0,24498],"4":[0,3],"5":[0,3],"6":[512,517],"7":[517,0],"8":[512,5],"9":[517,517],"10":[5,0],"11":[512,5],"12":[1,1],"13":[34,0],"14":[2,32],"15":[2,1],"16":[16,16],"17":[32,32,32],"18":[2,32],"19":[1,1],"20":[2,32],"21":[1,1],"22":[2,32],"23":[1,1],"24":[2,32],"25":[1,1],"26":[3,31],"27":[2,1],"28":[1,1],"29":[1,0],"30":[5,29],"31":[3,2],"32":[2,1],"33":[2,0],"34":[1,1],"35":[3,31],"36":[2,1],"37":[2,32],"38":[1,1],"39":[2,32],"40":[1,1],"41":[1,33],"42":[1,32],"43":[2,32],"44":[1,1],"45":[5,29],"46":[1,4],"47":[14,20]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"e777e7f0f0e8dd4ed34f6fdcf641fb4b877d0a00","contentHash":"c2e332caf4ae1e640180c3283856dd5c51daedc12f384652666dea0203da1988"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/list.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/list.js","statementMap":{"0":{"start":{"line":8,"column":8},"end":{"line":8,"column":34}},"1":{"start":{"line":9,"column":17},"end":{"line":9,"column":40}},"2":{"start":{"line":10,"column":13},"end":{"line":10,"column":33}},"3":{"start":{"line":11,"column":12},"end":{"line":11,"column":31}},"4":{"start":{"line":12,"column":17},"end":{"line":12,"column":40}},"5":{"start":{"line":16,"column":4},"end":{"line":16,"column":34}},"6":{"start":{"line":20,"column":4},"end":{"line":22,"column":5}},"7":{"start":{"line":21,"column":6},"end":{"line":21,"column":13}},"8":{"start":{"line":23,"column":15},"end":{"line":23,"column":19}},"9":{"start":{"line":24,"column":4},"end":{"line":28,"column":5}},"10":{"start":{"line":25,"column":18},"end":{"line":25,"column":45}},"11":{"start":{"line":26,"column":6},"end":{"line":27,"column":38}},"12":{"start":{"line":29,"column":4},"end":{"line":39,"column":7}},"13":{"start":{"line":30,"column":6},"end":{"line":38,"column":7}},"14":{"start":{"line":31,"column":8},"end":{"line":36,"column":9}},"15":{"start":{"line":32,"column":10},"end":{"line":33,"column":49}},"16":{"start":{"line":34,"column":15},"end":{"line":36,"column":9}},"17":{"start":{"line":35,"column":10},"end":{"line":35,"column":69}},"18":{"start":{"line":37,"column":8},"end":{"line":37,"column":26}},"19":{"start":{"line":40,"column":4},"end":{"line":42,"column":5}},"20":{"start":{"line":41,"column":6},"end":{"line":41,"column":44}},"21":{"start":{"line":46,"column":0},"end":{"line":46,"column":26}},"22":{"start":{"line":47,"column":0},"end":{"line":47,"column":52}},"23":{"start":{"line":49,"column":0},"end":{"line":49,"column":22}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":15,"column":2},"end":{"line":15,"column":3}},"loc":{"start":{"line":15,"column":38},"end":{"line":17,"column":3}},"line":15},"1":{"name":"(anonymous_1)","decl":{"start":{"line":19,"column":2},"end":{"line":19,"column":3}},"loc":{"start":{"line":19,"column":27},"end":{"line":43,"column":3}},"line":19},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":26},"end":{"line":29,"column":27}},"loc":{"start":{"line":29,"column":38},"end":{"line":39,"column":5}},"line":29}},"branchMap":{"0":{"loc":{"start":{"line":20,"column":4},"end":{"line":22,"column":5}},"type":"if","locations":[{"start":{"line":20,"column":4},"end":{"line":22,"column":5}},{"start":{"line":20,"column":4},"end":{"line":22,"column":5}}],"line":20},"1":{"loc":{"start":{"line":24,"column":4},"end":{"line":28,"column":5}},"type":"if","locations":[{"start":{"line":24,"column":4},"end":{"line":28,"column":5}},{"start":{"line":24,"column":4},"end":{"line":28,"column":5}}],"line":24},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":38,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":38,"column":7}},{"start":{"line":30,"column":6},"end":{"line":38,"column":7}}],"line":30},"3":{"loc":{"start":{"line":31,"column":8},"end":{"line":36,"column":9}},"type":"if","locations":[{"start":{"line":31,"column":8},"end":{"line":36,"column":9}},{"start":{"line":31,"column":8},"end":{"line":36,"column":9}}],"line":31},"4":{"loc":{"start":{"line":34,"column":15},"end":{"line":36,"column":9}},"type":"if","locations":[{"start":{"line":34,"column":15},"end":{"line":36,"column":9}},{"start":{"line":34,"column":15},"end":{"line":36,"column":9}}],"line":34},"5":{"loc":{"start":{"line":40,"column":4},"end":{"line":42,"column":5}},"type":"if","locations":[{"start":{"line":40,"column":4},"end":{"line":42,"column":5}},{"start":{"line":40,"column":4},"end":{"line":42,"column":5}}],"line":40}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":1,"22":1,"23":1},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"341fc43493bc135d6d6c0fa8412a019154eeaeda","contentHash":"823920615fe83b4ef6d6ed0afd951ebb16e7cf27f13f96638b6fb33d50107aa4"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/union.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/union.js","statementMap":{"0":{"start":{"line":8,"column":17},"end":{"line":8,"column":40}},"1":{"start":{"line":9,"column":13},"end":{"line":9,"column":33}},"2":{"start":{"line":10,"column":17},"end":{"line":10,"column":40}},"3":{"start":{"line":14,"column":4},"end":{"line":14,"column":34}},"4":{"start":{"line":18,"column":4},"end":{"line":18,"column":33}},"5":{"start":{"line":18,"column":26},"end":{"line":18,"column":33}},"6":{"start":{"line":19,"column":15},"end":{"line":19,"column":19}},"7":{"start":{"line":20,"column":4},"end":{"line":20,"column":26}},"8":{"start":{"line":21,"column":4},"end":{"line":28,"column":5}},"9":{"start":{"line":22,"column":6},"end":{"line":27,"column":11}},"10":{"start":{"line":24,"column":21},"end":{"line":25,"column":36}},"11":{"start":{"line":26,"column":10},"end":{"line":26,"column":38}},"12":{"start":{"line":29,"column":4},"end":{"line":33,"column":7}},"13":{"start":{"line":30,"column":6},"end":{"line":32,"column":7}},"14":{"start":{"line":31,"column":8},"end":{"line":31,"column":33}},"15":{"start":{"line":37,"column":0},"end":{"line":37,"column":28}},"16":{"start":{"line":38,"column":0},"end":{"line":38,"column":53}},"17":{"start":{"line":40,"column":0},"end":{"line":40,"column":23}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":13,"column":2},"end":{"line":13,"column":3}},"loc":{"start":{"line":13,"column":38},"end":{"line":15,"column":3}},"line":13},"1":{"name":"(anonymous_1)","decl":{"start":{"line":17,"column":2},"end":{"line":17,"column":3}},"loc":{"start":{"line":17,"column":27},"end":{"line":34,"column":3}},"line":17},"2":{"name":"(anonymous_2)","decl":{"start":{"line":23,"column":8},"end":{"line":23,"column":9}},"loc":{"start":{"line":23,"column":28},"end":{"line":27,"column":9}},"line":23},"3":{"name":"(anonymous_3)","decl":{"start":{"line":29,"column":26},"end":{"line":29,"column":27}},"loc":{"start":{"line":29,"column":38},"end":{"line":33,"column":5}},"line":29}},"branchMap":{"0":{"loc":{"start":{"line":18,"column":4},"end":{"line":18,"column":33}},"type":"if","locations":[{"start":{"line":18,"column":4},"end":{"line":18,"column":33}},{"start":{"line":18,"column":4},"end":{"line":18,"column":33}}],"line":18},"1":{"loc":{"start":{"line":21,"column":4},"end":{"line":28,"column":5}},"type":"if","locations":[{"start":{"line":21,"column":4},"end":{"line":28,"column":5}},{"start":{"line":21,"column":4},"end":{"line":28,"column":5}}],"line":21},"2":{"loc":{"start":{"line":30,"column":6},"end":{"line":32,"column":7}},"type":"if","locations":[{"start":{"line":30,"column":6},"end":{"line":32,"column":7}},{"start":{"line":30,"column":6},"end":{"line":32,"column":7}}],"line":30}},"s":{"0":1,"1":1,"2":1,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":1,"16":1,"17":1},"f":{"0":0,"1":0,"2":0,"3":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"07f59beb820e4f3c53603129a115cbee7f95ff27","contentHash":"9bfbb794f4145fadba32c177fc873fda79e01257a98ba30deea1f95959161fcf"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/fault.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/fault.js","statementMap":{"0":{"start":{"line":8,"column":16},"end":{"line":8,"column":38}},"1":{"start":{"line":12,"column":4},"end":{"line":12,"column":34}},"2":{"start":{"line":16,"column":0},"end":{"line":16,"column":28}},"3":{"start":{"line":17,"column":0},"end":{"line":17,"column":51}},"4":{"start":{"line":19,"column":0},"end":{"line":19,"column":23}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":11,"column":2},"end":{"line":11,"column":3}},"loc":{"start":{"line":11,"column":38},"end":{"line":13,"column":3}},"line":11}},"branchMap":{},"s":{"0":1,"1":63,"2":1,"3":1,"4":1},"f":{"0":63},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"a9899de08ae2fab7ae7421ca9a581c06da42a39a","contentHash":"d3ccd6338ad072c745e904eb2be1a51d58c0c2cba9c46db9f23bfcb1624f3cf9"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/parameter.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/parameter.js","statementMap":{"0":{"start":{"line":8,"column":18},"end":{"line":8,"column":42}},"1":{"start":{"line":9,"column":12},"end":{"line":9,"column":31}},"2":{"start":{"line":10,"column":12},"end":{"line":10,"column":58}},"3":{"start":{"line":17,"column":4},"end":{"line":17,"column":34}},"4":{"start":{"line":22,"column":4},"end":{"line":31,"column":5}},"5":{"start":{"line":23,"column":6},"end":{"line":23,"column":24}},"6":{"start":{"line":24,"column":11},"end":{"line":31,"column":5}},"7":{"start":{"line":25,"column":6},"end":{"line":25,"column":40}},"8":{"start":{"line":27,"column":6},"end":{"line":27,"column":31}},"9":{"start":{"line":28,"column":11},"end":{"line":31,"column":5}},"10":{"start":{"line":30,"column":6},"end":{"line":30,"column":25}},"11":{"start":{"line":36,"column":4},"end":{"line":46,"column":5}},"12":{"start":{"line":38,"column":24},"end":{"line":38,"column":55}},"13":{"start":{"line":39,"column":20},"end":{"line":39,"column":53}},"14":{"start":{"line":40,"column":6},"end":{"line":43,"column":7}},"15":{"start":{"line":41,"column":8},"end":{"line":41,"column":79}},"16":{"start":{"line":42,"column":8},"end":{"line":42,"column":70}},"17":{"start":{"line":44,"column":6},"end":{"line":44,"column":39}},"18":{"start":{"line":45,"column":6},"end":{"line":45,"column":29}},"19":{"start":{"line":49,"column":4},"end":{"line":98,"column":5}},"20":{"start":{"line":50,"column":6},"end":{"line":62,"column":7}},"21":{"start":{"line":51,"column":8},"end":{"line":61,"column":9}},"22":{"start":{"line":52,"column":10},"end":{"line":52,"column":31}},"23":{"start":{"line":53,"column":22},"end":{"line":53,"column":51}},"24":{"start":{"line":54,"column":10},"end":{"line":56,"column":11}},"25":{"start":{"line":54,"column":23},"end":{"line":54,"column":24}},"26":{"start":{"line":54,"column":30},"end":{"line":54,"column":42}},"27":{"start":{"line":55,"column":12},"end":{"line":55,"column":69}},"28":{"start":{"line":58,"column":10},"end":{"line":60,"column":11}},"29":{"start":{"line":59,"column":12},"end":{"line":59,"column":49}},"30":{"start":{"line":63,"column":6},"end":{"line":82,"column":7}},"31":{"start":{"line":64,"column":8},"end":{"line":81,"column":9}},"32":{"start":{"line":64,"column":21},"end":{"line":64,"column":22}},"33":{"start":{"line":64,"column":28},"end":{"line":64,"column":47}},"34":{"start":{"line":65,"column":23},"end":{"line":65,"column":38}},"35":{"start":{"line":67,"column":10},"end":{"line":77,"column":11}},"36":{"start":{"line":68,"column":30},"end":{"line":68,"column":63}},"37":{"start":{"line":69,"column":12},"end":{"line":69,"column":56}},"38":{"start":{"line":70,"column":12},"end":{"line":74,"column":13}},"39":{"start":{"line":71,"column":14},"end":{"line":71,"column":47}},"40":{"start":{"line":73,"column":14},"end":{"line":73,"column":60}},"41":{"start":{"line":76,"column":12},"end":{"line":76,"column":35}},"42":{"start":{"line":78,"column":10},"end":{"line":80,"column":11}},"43":{"start":{"line":79,"column":12},"end":{"line":79,"column":54}},"44":{"start":{"line":85,"column":6},"end":{"line":97,"column":7}},"45":{"start":{"line":86,"column":22},"end":{"line":86,"column":47}},"46":{"start":{"line":87,"column":8},"end":{"line":96,"column":9}},"47":{"start":{"line":88,"column":10},"end":{"line":88,"column":43}},"48":{"start":{"line":89,"column":10},"end":{"line":93,"column":11}},"49":{"start":{"line":91,"column":12},"end":{"line":91,"column":47}},"50":{"start":{"line":92,"column":12},"end":{"line":92,"column":18}},"51":{"start":{"line":95,"column":10},"end":{"line":95,"column":60}},"52":{"start":{"line":102,"column":0},"end":{"line":107,"column":2}},"53":{"start":{"line":109,"column":0},"end":{"line":109,"column":27}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":2},"end":{"line":16,"column":3}},"loc":{"start":{"line":16,"column":38},"end":{"line":18,"column":3}},"line":16},"1":{"name":"(anonymous_1)","decl":{"start":{"line":20,"column":2},"end":{"line":20,"column":3}},"loc":{"start":{"line":20,"column":18},"end":{"line":32,"column":3}},"line":20},"2":{"name":"(anonymous_2)","decl":{"start":{"line":34,"column":2},"end":{"line":34,"column":3}},"loc":{"start":{"line":34,"column":27},"end":{"line":99,"column":3}},"line":34}},"branchMap":{"0":{"loc":{"start":{"line":22,"column":4},"end":{"line":31,"column":5}},"type":"if","locations":[{"start":{"line":22,"column":4},"end":{"line":31,"column":5}},{"start":{"line":22,"column":4},"end":{"line":31,"column":5}}],"line":22},"1":{"loc":{"start":{"line":24,"column":11},"end":{"line":31,"column":5}},"type":"if","locations":[{"start":{"line":24,"column":11},"end":{"line":31,"column":5}},{"start":{"line":24,"column":11},"end":{"line":31,"column":5}}],"line":24},"2":{"loc":{"start":{"line":25,"column":21},"end":{"line":25,"column":39}},"type":"binary-expr","locations":[{"start":{"line":25,"column":21},"end":{"line":25,"column":33}},{"start":{"line":25,"column":37},"end":{"line":25,"column":39}}],"line":25},"3":{"loc":{"start":{"line":28,"column":11},"end":{"line":31,"column":5}},"type":"if","locations":[{"start":{"line":28,"column":11},"end":{"line":31,"column":5}},{"start":{"line":28,"column":11},"end":{"line":31,"column":5}}],"line":28},"4":{"loc":{"start":{"line":36,"column":4},"end":{"line":46,"column":5}},"type":"if","locations":[{"start":{"line":36,"column":4},"end":{"line":46,"column":5}},{"start":{"line":36,"column":4},"end":{"line":46,"column":5}}],"line":36},"5":{"loc":{"start":{"line":40,"column":6},"end":{"line":43,"column":7}},"type":"if","locations":[{"start":{"line":40,"column":6},"end":{"line":43,"column":7}},{"start":{"line":40,"column":6},"end":{"line":43,"column":7}}],"line":40},"6":{"loc":{"start":{"line":49,"column":4},"end":{"line":98,"column":5}},"type":"if","locations":[{"start":{"line":49,"column":4},"end":{"line":98,"column":5}},{"start":{"line":49,"column":4},"end":{"line":98,"column":5}}],"line":49},"7":{"loc":{"start":{"line":50,"column":6},"end":{"line":62,"column":7}},"type":"if","locations":[{"start":{"line":50,"column":6},"end":{"line":62,"column":7}},{"start":{"line":50,"column":6},"end":{"line":62,"column":7}}],"line":50},"8":{"loc":{"start":{"line":51,"column":8},"end":{"line":61,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":61,"column":9}},{"start":{"line":51,"column":8},"end":{"line":61,"column":9}}],"line":51},"9":{"loc":{"start":{"line":58,"column":10},"end":{"line":60,"column":11}},"type":"if","locations":[{"start":{"line":58,"column":10},"end":{"line":60,"column":11}},{"start":{"line":58,"column":10},"end":{"line":60,"column":11}}],"line":58},"10":{"loc":{"start":{"line":58,"column":14},"end":{"line":58,"column":48}},"type":"binary-expr","locations":[{"start":{"line":58,"column":14},"end":{"line":58,"column":26}},{"start":{"line":58,"column":30},"end":{"line":58,"column":48}}],"line":58},"11":{"loc":{"start":{"line":63,"column":6},"end":{"line":82,"column":7}},"type":"if","locations":[{"start":{"line":63,"column":6},"end":{"line":82,"column":7}},{"start":{"line":63,"column":6},"end":{"line":82,"column":7}}],"line":63},"12":{"loc":{"start":{"line":67,"column":10},"end":{"line":77,"column":11}},"type":"if","locations":[{"start":{"line":67,"column":10},"end":{"line":77,"column":11}},{"start":{"line":67,"column":10},"end":{"line":77,"column":11}}],"line":67},"13":{"loc":{"start":{"line":70,"column":12},"end":{"line":74,"column":13}},"type":"if","locations":[{"start":{"line":70,"column":12},"end":{"line":74,"column":13}},{"start":{"line":70,"column":12},"end":{"line":74,"column":13}}],"line":70},"14":{"loc":{"start":{"line":78,"column":10},"end":{"line":80,"column":11}},"type":"if","locations":[{"start":{"line":78,"column":10},"end":{"line":80,"column":11}},{"start":{"line":78,"column":10},"end":{"line":80,"column":11}}],"line":78},"15":{"loc":{"start":{"line":78,"column":14},"end":{"line":78,"column":37}},"type":"binary-expr","locations":[{"start":{"line":78,"column":14},"end":{"line":78,"column":26}},{"start":{"line":78,"column":30},"end":{"line":78,"column":37}}],"line":78},"16":{"loc":{"start":{"line":85,"column":6},"end":{"line":97,"column":7}},"type":"if","locations":[{"start":{"line":85,"column":6},"end":{"line":97,"column":7}},{"start":{"line":85,"column":6},"end":{"line":97,"column":7}}],"line":85},"17":{"loc":{"start":{"line":87,"column":8},"end":{"line":96,"column":9}},"type":"if","locations":[{"start":{"line":87,"column":8},"end":{"line":96,"column":9}},{"start":{"line":87,"column":8},"end":{"line":96,"column":9}}],"line":87}},"s":{"0":1,"1":1,"2":1,"3":969,"4":510,"5":476,"6":34,"7":15,"8":15,"9":19,"10":15,"11":954,"12":509,"13":509,"14":509,"15":0,"16":0,"17":509,"18":509,"19":954,"20":445,"21":445,"22":4,"23":4,"24":4,"25":4,"26":4,"27":4,"28":441,"29":441,"30":445,"31":14,"32":14,"33":14,"34":15,"35":15,"36":15,"37":15,"38":15,"39":9,"40":6,"41":0,"42":15,"43":9,"44":445,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":1,"53":1},"f":{"0":969,"1":510,"2":954},"b":{"0":[476,34],"1":[15,19],"2":[15,14],"3":[15,4],"4":[509,445],"5":[0,509],"6":[445,509],"7":[445,0],"8":[4,441],"9":[441,0],"10":[441,441],"11":[14,431],"12":[15,0],"13":[9,6],"14":[9,6],"15":[15,15],"16":[0,445],"17":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"8ed25ceb60f288aa55d8a0cd44b30dbd44d5532a","contentHash":"fc39c65890d62a29ed68104755fca228468b824841958e2c06e60b91df80944f"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/import.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/import.js","statementMap":{"0":{"start":{"line":8,"column":18},"end":{"line":8,"column":42}},"1":{"start":{"line":12,"column":4},"end":{"line":12,"column":34}},"2":{"start":{"line":13,"column":4},"end":{"line":13,"column":22}},"3":{"start":{"line":17,"column":0},"end":{"line":17,"column":30}},"4":{"start":{"line":19,"column":0},"end":{"line":19,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":11,"column":2},"end":{"line":11,"column":3}},"loc":{"start":{"line":11,"column":38},"end":{"line":14,"column":3}},"line":11}},"branchMap":{},"s":{"0":1,"1":6,"2":6,"3":1,"4":1},"f":{"0":6},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"63a00979a8a3ab8853b8ed5e172156769092ef81","contentHash":"01fba71245b790f39b91cbb2cb9d9550cd79783db41e468c0de54e77e23a3327"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/input.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/input.js","statementMap":{"0":{"start":{"line":8,"column":16},"end":{"line":8,"column":38}},"1":{"start":{"line":12,"column":4},"end":{"line":12,"column":34}},"2":{"start":{"line":16,"column":0},"end":{"line":16,"column":28}},"3":{"start":{"line":18,"column":0},"end":{"line":18,"column":23}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":11,"column":2},"end":{"line":11,"column":3}},"loc":{"start":{"line":11,"column":38},"end":{"line":13,"column":3}},"line":11}},"branchMap":{},"s":{"0":1,"1":494,"2":1,"3":1},"f":{"0":494},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"5f684232326f3bb722a0963dd16e6d0b10858467","contentHash":"ec34367574adb2ff168f3602860ffddcd43b938f53e2f4058ab107e0f9d01b62"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/output.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/output.js","statementMap":{"0":{"start":{"line":8,"column":16},"end":{"line":8,"column":38}},"1":{"start":{"line":12,"column":4},"end":{"line":12,"column":34}},"2":{"start":{"line":16,"column":0},"end":{"line":16,"column":30}},"3":{"start":{"line":18,"column":0},"end":{"line":18,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":11,"column":2},"end":{"line":11,"column":3}},"loc":{"start":{"line":11,"column":38},"end":{"line":13,"column":3}},"line":11}},"branchMap":{},"s":{"0":1,"1":412,"2":1,"3":1},"f":{"0":412},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"b025d55795f6d386cd78c8b2cea54f00c4d00e82","contentHash":"5ab6c916a0b6b1b54eff3cd8d279e198bc493981aafeb64ae49357a9b5751e00"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/part.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/part.js","statementMap":{"0":{"start":{"line":8,"column":18},"end":{"line":8,"column":42}},"1":{"start":{"line":12,"column":4},"end":{"line":12,"column":34}},"2":{"start":{"line":16,"column":4},"end":{"line":22,"column":5}},"3":{"start":{"line":17,"column":6},"end":{"line":18,"column":55}},"4":{"start":{"line":19,"column":11},"end":{"line":22,"column":5}},"5":{"start":{"line":20,"column":6},"end":{"line":21,"column":49}},"6":{"start":{"line":26,"column":4},"end":{"line":26,"column":48}},"7":{"start":{"line":26,"column":25},"end":{"line":26,"column":48}},"8":{"start":{"line":27,"column":4},"end":{"line":33,"column":5}},"9":{"start":{"line":28,"column":6},"end":{"line":28,"column":59}},"10":{"start":{"line":29,"column":11},"end":{"line":33,"column":5}},"11":{"start":{"line":30,"column":6},"end":{"line":30,"column":56}},"12":{"start":{"line":32,"column":6},"end":{"line":32,"column":29}},"13":{"start":{"line":34,"column":4},"end":{"line":34,"column":27}},"14":{"start":{"line":38,"column":0},"end":{"line":38,"column":26}},"15":{"start":{"line":40,"column":0},"end":{"line":40,"column":22}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":11,"column":2},"end":{"line":11,"column":3}},"loc":{"start":{"line":11,"column":38},"end":{"line":13,"column":3}},"line":11},"1":{"name":"(anonymous_1)","decl":{"start":{"line":15,"column":2},"end":{"line":15,"column":3}},"loc":{"start":{"line":15,"column":27},"end":{"line":23,"column":3}},"line":15},"2":{"name":"(anonymous_2)","decl":{"start":{"line":25,"column":2},"end":{"line":25,"column":3}},"loc":{"start":{"line":25,"column":24},"end":{"line":35,"column":3}},"line":25}},"branchMap":{"0":{"loc":{"start":{"line":16,"column":4},"end":{"line":22,"column":5}},"type":"if","locations":[{"start":{"line":16,"column":4},"end":{"line":22,"column":5}},{"start":{"line":16,"column":4},"end":{"line":22,"column":5}}],"line":16},"1":{"loc":{"start":{"line":19,"column":11},"end":{"line":22,"column":5}},"type":"if","locations":[{"start":{"line":19,"column":11},"end":{"line":22,"column":5}},{"start":{"line":19,"column":11},"end":{"line":22,"column":5}}],"line":19},"2":{"loc":{"start":{"line":26,"column":4},"end":{"line":26,"column":48}},"type":"if","locations":[{"start":{"line":26,"column":4},"end":{"line":26,"column":48}},{"start":{"line":26,"column":4},"end":{"line":26,"column":48}}],"line":26},"3":{"loc":{"start":{"line":27,"column":4},"end":{"line":33,"column":5}},"type":"if","locations":[{"start":{"line":27,"column":4},"end":{"line":33,"column":5}},{"start":{"line":27,"column":4},"end":{"line":33,"column":5}}],"line":27},"4":{"loc":{"start":{"line":29,"column":11},"end":{"line":33,"column":5}},"type":"if","locations":[{"start":{"line":29,"column":11},"end":{"line":33,"column":5}},{"start":{"line":29,"column":11},"end":{"line":33,"column":5}}],"line":29}},"s":{"0":1,"1":536,"2":588,"3":518,"4":70,"5":70,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":1,"15":1},"f":{"0":536,"1":588,"2":0},"b":{"0":[518,70],"1":[70,0],"2":[0,0],"3":[0,0],"4":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"d78c930b3054ff54db3c534f7303c4edb9beb5d2","contentHash":"e97473403b7a672c4c463beb93e6c7c01f90050caa7ad00b83e156218b1dc90f"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/port.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/port.js","statementMap":{"0":{"start":{"line":8,"column":18},"end":{"line":8,"column":42}},"1":{"start":{"line":12,"column":4},"end":{"line":12,"column":34}},"2":{"start":{"line":13,"column":4},"end":{"line":13,"column":25}},"3":{"start":{"line":18,"column":4},"end":{"line":20,"column":5}},"4":{"start":{"line":19,"column":6},"end":{"line":19,"column":38}},"5":{"start":{"line":24,"column":0},"end":{"line":24,"column":26}},"6":{"start":{"line":25,"column":0},"end":{"line":25,"column":52}},"7":{"start":{"line":27,"column":0},"end":{"line":27,"column":22}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":11,"column":2},"end":{"line":11,"column":3}},"loc":{"start":{"line":11,"column":38},"end":{"line":14,"column":3}},"line":11},"1":{"name":"(anonymous_1)","decl":{"start":{"line":16,"column":2},"end":{"line":16,"column":3}},"loc":{"start":{"line":16,"column":18},"end":{"line":21,"column":3}},"line":16}},"branchMap":{"0":{"loc":{"start":{"line":18,"column":4},"end":{"line":20,"column":5}},"type":"if","locations":[{"start":{"line":18,"column":4},"end":{"line":20,"column":5}},{"start":{"line":18,"column":4},"end":{"line":20,"column":5}}],"line":18},"1":{"loc":{"start":{"line":18,"column":8},"end":{"line":18,"column":65}},"type":"binary-expr","locations":[{"start":{"line":18,"column":8},"end":{"line":18,"column":32}},{"start":{"line":18,"column":36},"end":{"line":18,"column":65}}],"line":18}},"s":{"0":1,"1":175,"2":175,"3":174,"4":174,"5":1,"6":1,"7":1},"f":{"0":175,"1":174},"b":{"0":[174,0],"1":[174,174]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"9fd4dd10c52aef1448e9ff713837b557f2bc4868","contentHash":"28e3043802f6ad985ab761fed3d7adb99e1dd11a5720425765938bff01ebd3ac"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap/body.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap/body.js","statementMap":{"0":{"start":{"line":8,"column":18},"end":{"line":8,"column":42}},"1":{"start":{"line":9,"column":13},"end":{"line":9,"column":33}},"2":{"start":{"line":17,"column":4},"end":{"line":17,"column":34}},"3":{"start":{"line":21,"column":0},"end":{"line":21,"column":26}},"4":{"start":{"line":22,"column":0},"end":{"line":22,"column":41}},"5":{"start":{"line":24,"column":0},"end":{"line":24,"column":22}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":2},"end":{"line":16,"column":3}},"loc":{"start":{"line":16,"column":38},"end":{"line":18,"column":3}},"line":16}},"branchMap":{},"s":{"0":1,"1":1,"2":416,"3":1,"4":1,"5":1},"f":{"0":416},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"4b864e58ad26b77f8f0830cbca20a985cf98f154","contentHash":"7849a98e05e61c08c77902a2ee2c70665c627b838f59fa3287e15c2078c3a45d"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap/soapElement.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap/soapElement.js","statementMap":{"0":{"start":{"line":8,"column":14},"end":{"line":8,"column":35}},"1":{"start":{"line":12,"column":4},"end":{"line":12,"column":34}},"2":{"start":{"line":14,"column":4},"end":{"line":23,"column":5}},"3":{"start":{"line":16,"column":6},"end":{"line":16,"column":27}},"4":{"start":{"line":17,"column":6},"end":{"line":19,"column":7}},"5":{"start":{"line":18,"column":8},"end":{"line":18,"column":49}},"6":{"start":{"line":22,"column":6},"end":{"line":22,"column":39}},"7":{"start":{"line":27,"column":0},"end":{"line":27,"column":54}},"8":{"start":{"line":28,"column":0},"end":{"line":28,"column":48}},"9":{"start":{"line":30,"column":0},"end":{"line":30,"column":29}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":11,"column":2},"end":{"line":11,"column":3}},"loc":{"start":{"line":11,"column":38},"end":{"line":24,"column":3}},"line":11}},"branchMap":{"0":{"loc":{"start":{"line":14,"column":4},"end":{"line":23,"column":5}},"type":"if","locations":[{"start":{"line":14,"column":4},"end":{"line":23,"column":5}},{"start":{"line":14,"column":4},"end":{"line":23,"column":5}}],"line":14},"1":{"loc":{"start":{"line":14,"column":7},"end":{"line":15,"column":58}},"type":"binary-expr","locations":[{"start":{"line":14,"column":7},"end":{"line":14,"column":27}},{"start":{"line":14,"column":31},"end":{"line":14,"column":53}},{"start":{"line":15,"column":6},"end":{"line":15,"column":27}},{"start":{"line":15,"column":31},"end":{"line":15,"column":58}}],"line":14},"2":{"loc":{"start":{"line":17,"column":6},"end":{"line":19,"column":7}},"type":"if","locations":[{"start":{"line":17,"column":6},"end":{"line":19,"column":7}},{"start":{"line":17,"column":6},"end":{"line":19,"column":7}}],"line":17}},"s":{"0":1,"1":980,"2":980,"3":446,"4":446,"5":20,"6":446,"7":1,"8":1,"9":1},"f":{"0":980},"b":{"0":[446,534],"1":[980,564,549,534],"2":[20,426]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"9501e1a903c1fc81210555db6acc6a687e073aeb","contentHash":"563d527d205ce1985e8ea56cc3710f6ad757bbb5233db09480fa04cb418be902"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap/header.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap/header.js","statementMap":{"0":{"start":{"line":8,"column":18},"end":{"line":8,"column":42}},"1":{"start":{"line":9,"column":13},"end":{"line":9,"column":33}},"2":{"start":{"line":20,"column":4},"end":{"line":20,"column":34}},"3":{"start":{"line":21,"column":4},"end":{"line":21,"column":22}},"4":{"start":{"line":25,"column":4},"end":{"line":27,"column":5}},"5":{"start":{"line":26,"column":6},"end":{"line":26,"column":25}},"6":{"start":{"line":31,"column":0},"end":{"line":31,"column":30}},"7":{"start":{"line":32,"column":0},"end":{"line":32,"column":58}},"8":{"start":{"line":34,"column":0},"end":{"line":34,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":19,"column":2},"end":{"line":19,"column":3}},"loc":{"start":{"line":19,"column":38},"end":{"line":22,"column":3}},"line":19},"1":{"name":"(anonymous_1)","decl":{"start":{"line":24,"column":2},"end":{"line":24,"column":3}},"loc":{"start":{"line":24,"column":18},"end":{"line":28,"column":3}},"line":24}},"branchMap":{"0":{"loc":{"start":{"line":25,"column":4},"end":{"line":27,"column":5}},"type":"if","locations":[{"start":{"line":25,"column":4},"end":{"line":27,"column":5}},{"start":{"line":25,"column":4},"end":{"line":27,"column":5}}],"line":25}},"s":{"0":1,"1":1,"2":15,"3":15,"4":0,"5":0,"6":1,"7":1,"8":1},"f":{"0":15,"1":0},"b":{"0":[0,0]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"be958f32caafdc7531277f5eba1b92e0131548dd","contentHash":"64f297408a01d59a0807c01a099e6812288c9d08cc957fdc052fe41b9fb89d97"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap/headerFault.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap/headerFault.js","statementMap":{"0":{"start":{"line":8,"column":18},"end":{"line":8,"column":42}},"1":{"start":{"line":9,"column":13},"end":{"line":9,"column":33}},"2":{"start":{"line":17,"column":4},"end":{"line":17,"column":34}},"3":{"start":{"line":21,"column":0},"end":{"line":21,"column":40}},"4":{"start":{"line":22,"column":0},"end":{"line":22,"column":48}},"5":{"start":{"line":24,"column":0},"end":{"line":24,"column":29}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":2},"end":{"line":16,"column":3}},"loc":{"start":{"line":16,"column":38},"end":{"line":18,"column":3}},"line":16}},"branchMap":{},"s":{"0":1,"1":1,"2":0,"3":1,"4":1,"5":1},"f":{"0":0},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"cddf7f91777eb156cd22fe0d16f9dc68fe0094d2","contentHash":"6ca0b36891af3a6c712a318f1c2caeb4a8c355ac1b4aa77efc3de9d5e9a402b9"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap/fault.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap/fault.js","statementMap":{"0":{"start":{"line":8,"column":18},"end":{"line":8,"column":42}},"1":{"start":{"line":9,"column":13},"end":{"line":9,"column":33}},"2":{"start":{"line":17,"column":4},"end":{"line":17,"column":34}},"3":{"start":{"line":21,"column":0},"end":{"line":21,"column":28}},"4":{"start":{"line":22,"column":0},"end":{"line":22,"column":42}},"5":{"start":{"line":24,"column":0},"end":{"line":24,"column":23}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":2},"end":{"line":16,"column":3}},"loc":{"start":{"line":16,"column":38},"end":{"line":18,"column":3}},"line":16}},"branchMap":{},"s":{"0":1,"1":1,"2":15,"3":1,"4":1,"5":1},"f":{"0":15},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"79fcdf4015ce9832ba781332668758ec54902774","contentHash":"d81bb80b8ab622e42386bfc823ac445a23f4dea6d320b39fed7cc7bb2266e742"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap12/body.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap12/body.js","statementMap":{"0":{"start":{"line":8,"column":18},"end":{"line":8,"column":42}},"1":{"start":{"line":9,"column":13},"end":{"line":9,"column":33}},"2":{"start":{"line":17,"column":4},"end":{"line":17,"column":34}},"3":{"start":{"line":21,"column":0},"end":{"line":21,"column":26}},"4":{"start":{"line":22,"column":0},"end":{"line":22,"column":41}},"5":{"start":{"line":24,"column":0},"end":{"line":24,"column":22}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":2},"end":{"line":16,"column":3}},"loc":{"start":{"line":16,"column":38},"end":{"line":18,"column":3}},"line":16}},"branchMap":{},"s":{"0":1,"1":1,"2":59,"3":1,"4":1,"5":1},"f":{"0":59},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"debd655670ed970e6bf8fb0a296896a944623c22","contentHash":"a6eeac5a6e5521e81b1b7c7cbc8bf87c04802ad08ab22d6dadd9357306a7c3c3"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap12/soapElement.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap12/soapElement.js","statementMap":{"0":{"start":{"line":8,"column":14},"end":{"line":8,"column":35}},"1":{"start":{"line":12,"column":4},"end":{"line":12,"column":34}},"2":{"start":{"line":14,"column":4},"end":{"line":23,"column":5}},"3":{"start":{"line":16,"column":6},"end":{"line":16,"column":27}},"4":{"start":{"line":17,"column":6},"end":{"line":19,"column":7}},"5":{"start":{"line":18,"column":8},"end":{"line":18,"column":49}},"6":{"start":{"line":22,"column":6},"end":{"line":22,"column":39}},"7":{"start":{"line":27,"column":0},"end":{"line":27,"column":56}},"8":{"start":{"line":28,"column":0},"end":{"line":28,"column":48}},"9":{"start":{"line":30,"column":0},"end":{"line":30,"column":29}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":11,"column":2},"end":{"line":11,"column":3}},"loc":{"start":{"line":11,"column":38},"end":{"line":24,"column":3}},"line":11}},"branchMap":{"0":{"loc":{"start":{"line":14,"column":4},"end":{"line":23,"column":5}},"type":"if","locations":[{"start":{"line":14,"column":4},"end":{"line":23,"column":5}},{"start":{"line":14,"column":4},"end":{"line":23,"column":5}}],"line":14},"1":{"loc":{"start":{"line":14,"column":7},"end":{"line":15,"column":58}},"type":"binary-expr","locations":[{"start":{"line":14,"column":7},"end":{"line":14,"column":27}},{"start":{"line":14,"column":31},"end":{"line":14,"column":53}},{"start":{"line":15,"column":6},"end":{"line":15,"column":27}},{"start":{"line":15,"column":31},"end":{"line":15,"column":58}}],"line":14},"2":{"loc":{"start":{"line":17,"column":6},"end":{"line":19,"column":7}},"type":"if","locations":[{"start":{"line":17,"column":6},"end":{"line":19,"column":7}},{"start":{"line":17,"column":6},"end":{"line":19,"column":7}}],"line":17}},"s":{"0":1,"1":121,"2":121,"3":59,"4":59,"5":23,"6":59,"7":1,"8":1,"9":1},"f":{"0":121},"b":{"0":[59,62],"1":[121,62,62,62],"2":[23,36]},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"ef260d1ec56ecb1d1d589be411508cfb64c76c60","contentHash":"19602170bd77d8d429adc5e3217b8be41867923c9efbc3fd03fb9d63637cd901"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap12/header.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap12/header.js","statementMap":{"0":{"start":{"line":8,"column":18},"end":{"line":8,"column":42}},"1":{"start":{"line":9,"column":13},"end":{"line":9,"column":33}},"2":{"start":{"line":20,"column":4},"end":{"line":20,"column":34}},"3":{"start":{"line":24,"column":0},"end":{"line":24,"column":30}},"4":{"start":{"line":25,"column":0},"end":{"line":25,"column":58}},"5":{"start":{"line":27,"column":0},"end":{"line":27,"column":24}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":19,"column":2},"end":{"line":19,"column":3}},"loc":{"start":{"line":19,"column":38},"end":{"line":21,"column":3}},"line":19}},"branchMap":{},"s":{"0":1,"1":1,"2":0,"3":1,"4":1,"5":1},"f":{"0":0},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"bf0d8a4b12ac2a84d104acf08527f2ffc6120f06","contentHash":"bd8084a94d0598870f8f21c613048e8b376a4ecd5b26bfa0a5e8c844f302b678"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap12/headerFault.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap12/headerFault.js","statementMap":{"0":{"start":{"line":8,"column":18},"end":{"line":8,"column":42}},"1":{"start":{"line":9,"column":13},"end":{"line":9,"column":33}},"2":{"start":{"line":17,"column":4},"end":{"line":17,"column":34}},"3":{"start":{"line":21,"column":0},"end":{"line":21,"column":40}},"4":{"start":{"line":22,"column":0},"end":{"line":22,"column":48}},"5":{"start":{"line":24,"column":0},"end":{"line":24,"column":29}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":2},"end":{"line":16,"column":3}},"loc":{"start":{"line":16,"column":38},"end":{"line":18,"column":3}},"line":16}},"branchMap":{},"s":{"0":1,"1":1,"2":0,"3":1,"4":1,"5":1},"f":{"0":0},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"d5a831dada1409bbc7074f63f1d5e0aea008d145","contentHash":"4c5c6d5499046c0156e47b3dff3a7fd7632290f8cd2ca561bef44a33ebc87463"},"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap12/fault.js":{"path":"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap12/fault.js","statementMap":{"0":{"start":{"line":8,"column":18},"end":{"line":8,"column":42}},"1":{"start":{"line":9,"column":13},"end":{"line":9,"column":33}},"2":{"start":{"line":17,"column":4},"end":{"line":17,"column":34}},"3":{"start":{"line":21,"column":0},"end":{"line":21,"column":28}},"4":{"start":{"line":22,"column":0},"end":{"line":22,"column":42}},"5":{"start":{"line":24,"column":0},"end":{"line":24,"column":23}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":16,"column":2},"end":{"line":16,"column":3}},"loc":{"start":{"line":16,"column":38},"end":{"line":18,"column":3}},"line":16}},"branchMap":{},"s":{"0":1,"1":1,"2":0,"3":1,"4":1,"5":1},"f":{"0":0},"b":{},"_coverageSchema":"43e27e138ebf9cfc5966b082cf9a028302ed4184","hash":"92a5fd730e12d7424c8d48457d6f961dfb21d92b","contentHash":"85d8856ee5b7acd2aad90675080e05be2fd46186405d4fa5bf63c4a68fc40bec"}} \ No newline at end of file diff --git a/node_modules/strong-soap/.nyc_output/89a27ff9-7743-4a55-992a-5bfaf52c8746.json b/node_modules/strong-soap/.nyc_output/89a27ff9-7743-4a55-992a-5bfaf52c8746.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/node_modules/strong-soap/.nyc_output/89a27ff9-7743-4a55-992a-5bfaf52c8746.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/node_modules/strong-soap/.nyc_output/processinfo/459253b3-16b5-4785-9874-a6f80fa4214c.json b/node_modules/strong-soap/.nyc_output/processinfo/459253b3-16b5-4785-9874-a6f80fa4214c.json new file mode 100644 index 00000000..b867e925 --- /dev/null +++ b/node_modules/strong-soap/.nyc_output/processinfo/459253b3-16b5-4785-9874-a6f80fa4214c.json @@ -0,0 +1 @@ +{"uuid":"459253b3-16b5-4785-9874-a6f80fa4214c","parent":"89a27ff9-7743-4a55-992a-5bfaf52c8746","pid":39142,"argv":["/Users/rfeng/.nvm/versions/node/v8.10.0/bin/node","/Users/rfeng/Projects/loopback3/strong-soap/node_modules/mocha/bin/_mocha","-R","spec","-u","exports","-r","should","--exit","--timeout","60000","test/client-customHttp-test.js","test/client-customHttp-xsdinclude-test.js","test/client-restrictions-test.js","test/client-test.js","test/doc-lit-part-err-returned-test.js","test/nillable-test.js","test/request-response-samples-test.js","test/server-client-document-test.js","test/server-client-rpc-test.js","test/server-options-test.js","test/server-test.js","test/ssl-test.js","test/wsdl-load-from-memory-test.js","test/wsdl-parse-test.js","test/wsdl-test.js","test/xs-boolean-format-test.js","test/xs-date-format-test.js","test/security/BasicAuthSecurity.js","test/security/BearerSecurity.js","test/security/ClientSSLSecurity.js","test/security/ClientSSLSecurityPFX.js","test/security/CookieSecurity.js","test/security/WSSecurity.js","test/security/WSSecurityCert.js"],"execArgv":[],"cwd":"/Users/rfeng/Projects/loopback3/strong-soap","time":1559584226113,"ppid":39141,"root":"b735a714-7527-4f93-9ef2-8043c425a1d4","coverageFilename":"/Users/rfeng/Projects/loopback3/strong-soap/.nyc_output/459253b3-16b5-4785-9874-a6f80fa4214c.json","files":["/Users/rfeng/Projects/loopback3/strong-soap/index.js","/Users/rfeng/Projects/loopback3/strong-soap/src/security/index.js","/Users/rfeng/Projects/loopback3/strong-soap/src/security/WSSecurityCert.js","/Users/rfeng/Projects/loopback3/strong-soap/src/security/security.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xmlHandler.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/descriptor.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/qname.js","/Users/rfeng/Projects/loopback3/strong-soap/src/globalize.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/helper.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/nscontext.js","/Users/rfeng/Projects/loopback3/strong-soap/src/security/BasicAuthSecurity.js","/Users/rfeng/Projects/loopback3/strong-soap/src/security/ClientSSLSecurity.js","/Users/rfeng/Projects/loopback3/strong-soap/src/security/ClientSSLSecurityPFX.js","/Users/rfeng/Projects/loopback3/strong-soap/src/security/CookieSecurity.js","/Users/rfeng/Projects/loopback3/strong-soap/src/security/WSSecurity.js","/Users/rfeng/Projects/loopback3/strong-soap/src/utils.js","/Users/rfeng/Projects/loopback3/strong-soap/src/security/BearerSecurity.js","/Users/rfeng/Projects/loopback3/strong-soap/src/security/NTLMSecurity.js","/Users/rfeng/Projects/loopback3/strong-soap/src/soap.js","/Users/rfeng/Projects/loopback3/strong-soap/src/client.js","/Users/rfeng/Projects/loopback3/strong-soap/src/http.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/operation.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/wsdlElement.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/element.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/typeRegistry.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/simpleType.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/xsdElement.js","/Users/rfeng/Projects/loopback3/strong-soap/src/soapModel.js","/Users/rfeng/Projects/loopback3/strong-soap/src/base.js","/Users/rfeng/Projects/loopback3/strong-soap/src/server.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/index.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl.js","/Users/rfeng/Projects/loopback3/strong-soap/src/strip-bom.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/definitions.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/schema.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/types.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/documentation.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/message.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/portType.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/binding.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/service.js","/Users/rfeng/Projects/loopback3/strong-soap/lib/parser/xmlHandler.js","/Users/rfeng/Projects/loopback3/strong-soap/lib/parser/xsd/descriptor.js","/Users/rfeng/Projects/loopback3/strong-soap/lib/parser/qname.js","/Users/rfeng/Projects/loopback3/strong-soap/lib/globalize.js","/Users/rfeng/Projects/loopback3/strong-soap/lib/parser/helper.js","/Users/rfeng/Projects/loopback3/strong-soap/lib/parser/nscontext.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/all.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/annotation.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/any.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/anyAttribute.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/attribute.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/attributeGroup.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/choice.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/complexContent.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/extension.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/sequence.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/complexType.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/simpleContent.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/documentation.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/element.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/unique.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/keybase.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/key.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/keyref.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/group.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/import.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/include.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/restriction.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/list.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/union.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/fault.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/parameter.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/import.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/input.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/output.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/part.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/port.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap/body.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap/soapElement.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap/header.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap/headerFault.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap/fault.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap12/body.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap12/soapElement.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap12/header.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap12/headerFault.js","/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap12/fault.js"]} \ No newline at end of file diff --git a/node_modules/strong-soap/.nyc_output/processinfo/89a27ff9-7743-4a55-992a-5bfaf52c8746.json b/node_modules/strong-soap/.nyc_output/processinfo/89a27ff9-7743-4a55-992a-5bfaf52c8746.json new file mode 100644 index 00000000..63d08dc4 --- /dev/null +++ b/node_modules/strong-soap/.nyc_output/processinfo/89a27ff9-7743-4a55-992a-5bfaf52c8746.json @@ -0,0 +1 @@ +{"uuid":"89a27ff9-7743-4a55-992a-5bfaf52c8746","parent":null,"pid":39141,"argv":["/Users/rfeng/.nvm/versions/node/v8.10.0/bin/node","/Users/rfeng/Projects/loopback3/strong-soap/node_modules/.bin/mocha","--exit","--timeout","60000","test/client-customHttp-test.js","test/client-customHttp-xsdinclude-test.js","test/client-restrictions-test.js","test/client-test.js","test/doc-lit-part-err-returned-test.js","test/nillable-test.js","test/request-response-samples-test.js","test/server-client-document-test.js","test/server-client-rpc-test.js","test/server-options-test.js","test/server-test.js","test/ssl-test.js","test/wsdl-load-from-memory-test.js","test/wsdl-parse-test.js","test/wsdl-test.js","test/xs-boolean-format-test.js","test/xs-date-format-test.js","test/security/BasicAuthSecurity.js","test/security/BearerSecurity.js","test/security/ClientSSLSecurity.js","test/security/ClientSSLSecurityPFX.js","test/security/CookieSecurity.js","test/security/WSSecurity.js","test/security/WSSecurityCert.js"],"execArgv":[],"cwd":"/Users/rfeng/Projects/loopback3/strong-soap","time":1559584225854,"ppid":39140,"root":"b735a714-7527-4f93-9ef2-8043c425a1d4","coverageFilename":"/Users/rfeng/Projects/loopback3/strong-soap/.nyc_output/89a27ff9-7743-4a55-992a-5bfaf52c8746.json","files":[]} \ No newline at end of file diff --git a/node_modules/strong-soap/.nyc_output/processinfo/index.json b/node_modules/strong-soap/.nyc_output/processinfo/index.json new file mode 100644 index 00000000..329eefb0 --- /dev/null +++ b/node_modules/strong-soap/.nyc_output/processinfo/index.json @@ -0,0 +1 @@ +{"processes":{"459253b3-16b5-4785-9874-a6f80fa4214c":{"parent":"89a27ff9-7743-4a55-992a-5bfaf52c8746","children":[]},"89a27ff9-7743-4a55-992a-5bfaf52c8746":{"parent":null,"children":["459253b3-16b5-4785-9874-a6f80fa4214c"]}},"files":{"/Users/rfeng/Projects/loopback3/strong-soap/index.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/security/index.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/security/WSSecurityCert.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/security/security.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xmlHandler.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/descriptor.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/qname.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/globalize.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/helper.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/nscontext.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/security/BasicAuthSecurity.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/security/ClientSSLSecurity.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/security/ClientSSLSecurityPFX.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/security/CookieSecurity.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/security/WSSecurity.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/utils.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/security/BearerSecurity.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/security/NTLMSecurity.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/soap.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/client.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/http.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/operation.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/wsdlElement.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/element.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/typeRegistry.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/simpleType.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/xsdElement.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/soapModel.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/base.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/server.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/index.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/strip-bom.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/definitions.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/schema.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/types.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/documentation.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/message.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/portType.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/binding.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/service.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/lib/parser/xmlHandler.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/lib/parser/xsd/descriptor.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/lib/parser/qname.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/lib/globalize.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/lib/parser/helper.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/lib/parser/nscontext.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/all.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/annotation.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/any.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/anyAttribute.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/attribute.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/attributeGroup.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/choice.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/complexContent.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/extension.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/sequence.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/complexType.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/simpleContent.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/documentation.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/element.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/unique.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/keybase.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/key.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/keyref.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/group.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/import.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/include.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/restriction.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/list.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/xsd/union.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/fault.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/parameter.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/import.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/input.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/output.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/part.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/wsdl/port.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap/body.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap/soapElement.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap/header.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap/headerFault.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap/fault.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap12/body.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap12/soapElement.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap12/header.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap12/headerFault.js":["459253b3-16b5-4785-9874-a6f80fa4214c"],"/Users/rfeng/Projects/loopback3/strong-soap/src/parser/soap12/fault.js":["459253b3-16b5-4785-9874-a6f80fa4214c"]},"externalIds":{}} \ No newline at end of file diff --git a/node_modules/strong-soap/.vscode/launch.json b/node_modules/strong-soap/.vscode/launch.json new file mode 100644 index 00000000..f091d25a --- /dev/null +++ b/node_modules/strong-soap/.vscode/launch.json @@ -0,0 +1,21 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + + { + "type": "node", + "request": "launch", + "name": "Launch Program workday", + "program": "${workspaceFolder}/example/workday" + }, + { + "type": "node", + "request": "launch", + "name": "Launch Program", + "program": "${workspaceFolder}/index.js" + } + ] +} \ No newline at end of file diff --git a/node_modules/strong-soap/CHANGES.md b/node_modules/strong-soap/CHANGES.md new file mode 100644 index 00000000..51573d36 --- /dev/null +++ b/node_modules/strong-soap/CHANGES.md @@ -0,0 +1,1029 @@ +2019-06-03, Version 1.20.0 +========================== + + * Replace ursa with node 12 core crypto or node-rsa (Raymond Feng) + + * chore: update copyrights years (Agnes Lin) + + * Add support for 1/0 booleans (Stefano Marotta) + + * fix: update lodash (jannyHou) + + +2019-05-02, Version 1.19.1 +========================== + + * Use Buffer.from to replace depreated new Buffer (Raymond Feng) + + * Fix xml date/time/dateTime conversion (Raymond Feng) + + * Replace deprecated Buffer api (Raymond Feng) + + * Add promise based stubs for testing (Rijnhard Hessel) + + +2019-04-29, Version 1.19.0 +========================== + + * Upgrade dependencies (Raymond Feng) + + +2019-03-28, Version 1.18.0 +========================== + + * chore: upgrade deps (Raymond Feng) + + * Tests for parseValue with xsd date dateTime (arthmoeros) + + * Fix for xs:date with tz format (arthmoeros) + + +2019-02-21, Version 1.17.0 +========================== + + * Fix use options.request in wsdl.js (JB) + + +2019-02-14, Version 1.16.0 +========================== + + * Update version of httpntlm (Jon Roberts) + + +2019-01-22, Version 1.15.0 +========================== + + * Adding enforce restrictions option (Romeu Palos de Gouvea) + + +2018-10-18, Version 1.14.0 +========================== + + * Update CODEOWNERS (Raymond Feng) + + * Rename test so it gets run (Jon Roberts) + + * Return error via callback (Jon Roberts) + + +2018-10-12, Version 1.13.2 +========================== + + * changed this.soapActionRequired to boolean (Vineet Jain) + + * Support of sending soapAction in v1.2 (Vineet Jain) + + +2018-09-24, Version 1.13.1 +========================== + + * Add tests to cover maxOccurs (Jon Roberts) + + * Change to isMany logic (Jon Roberts) + + +2018-09-17, Version 1.13.0 +========================== + + * Update ssl key/cert to pass node 10 (Raymond Feng) + + * Update` strong-globalize` to v4.1.1 (Runrioter Wung) + + * Switch to strong-ursa to support Node 10 (Raymond Feng) + + * Add ability to load in a sync way (DomStorey) + + * Add the ability to loadSync (DomStorey) + + * fix code blocks in readme.md with their type (Jiri Spac) + + * fix: use proper variable names (biniam) + + +2018-08-08, Version 1.12.1 +========================== + + * Allow documentation tag under types (Jon Roberts) + + +2018-08-06, Version 1.12.0 +========================== + + * Create client from cached wsdl (Jon Roberts) + + * add forgotten options to soap.listen(...) (Vladimir Latyshev) + + +2018-07-10, Version 1.11.0 +========================== + + * Load a wsdl with no imports from the cache (Jon Roberts) + + +2018-07-09, Version 1.10.0 +========================== + + * [WebFM] cs/pl/ru translation (candytangnb) + + * fix soap-stub example on README.md (Carlos Assis) + + +2018-05-08, Version 1.9.0 +========================= + + + +2018-05-07, Version 1.8.0 +========================= + + * feat: add promise support for client operation (shimks) + + +2018-04-12, Version 1.7.0 +========================= + + * fix: add element text value (Raymond Feng) + + +2018-03-26, Version 1.6.2 +========================= + + * fix xsd include/import recursive processing (Raymond Feng) + + +2018-03-19, Version 1.6.1 +========================= + + * fix: add array check for concat (Raymond Feng) + + * build: drop node 4.x support (Raymond Feng) + + +2018-03-16, Version 1.6.0 +========================= + + * fix: improve wsdl types processing for multiple schemas (Raymond Feng) + + * chore: clean up deps (Raymond Feng) + + +2018-01-31, Version 1.5.0 +========================= + + * fix: upgrade deps (Raymond Feng) + + * fix: make sure xml elements are mapped based the order of xsd (Raymond Feng) + + * Fix Typo: RPC Literal (Thomas Richter) + + * check the original passwordDigest method fails against SoapUI output (Tom Hodder) + + * revert formatting changes by format on save in vscode (Tom Hodder) + + * Updated passwordDigest method and related tests (Tom Hodder) + + * missing semi colons (Branden Horiuchi) + + * removed lodash dependency (Branden Horiuchi) + + * added CookieSecurity test (Branden Horiuchi) + + * better cookie parsing handle the case where the header for set-cookie is a string and not an array (Branden Horiuchi) + + * fixing header parse objects would not have been parsed (Branden Horiuchi) + + * added cookie security (Branden Horiuchi) + + +2018-01-24, Version 1.4.2 +========================= + + * fix: handle xsi:type for subtype mappng from json to xml (Raymond Feng) + + +2018-01-15, Version 1.4.1 +========================= + + * make sure attribute descriptors are honored to map json to xml (Raymond Feng) + + +2018-01-12, Version 1.4.0 +========================= + + * allow xsd:include to include a schema without target namespace (Raymond Feng) + + +2018-01-03, Version 1.3.0 +========================= + + * remove node 0.10/0.12 support (Raymond Feng) + + * fix soap version detection (Raymond Feng) + + * Create Issue and PR Templates (#124) (Sakib Hasan) + + * Add CODEOWNER file (Diana Lau) + + * update translation file (Diana Lau) + + +2017-06-28, Version 1.2.6 +========================= + + * removed process.env.PORT (rashmihunt) + + * fix ports (rashmihunt) + + * Fix multiRef merging (Daniel Escoz) + + * travis: expand node version testing (Ryan Graham) + + * test: always run tests with coverage (Ryan Graham) + + * test: replace istanbul with nyc (Ryan Graham) + + * pkg: use src for node 4 instead of transpiling (Ryan Graham) + + * src: enforce strict-mode on all JS (Ryan Graham) + + +2017-06-14, Version 1.2.5 +========================= + + + +2017-06-14, Version 1.2.4 +========================= + + * removed old npm-debug.log (rashmihunt) + + * removed before_install (rashmihunt) + + * nillable for complexType (rashmihunt) + + * Remove .DS_Store (Tetsuo Seto) + + +2017-03-28, Version 1.2.3 +========================= + + * Add type information to simpletype (rashmihunt) + + +2017-03-20, Version 1.2.2 +========================= + + + +2017-03-20, Version 1.2.1 +========================= + + * Readme changes to use stockquote (rashmihunt) + + +2017-02-03, Version 1.2.0 +========================= + + * more cleanup (crandmck) + + * Regenerate TOC and other cleanup (crandmck) + + * Create README.md (Rand McKinney) + + * Delete Readme.md (Rand McKinney) + + * Create docs.json (Rand McKinney) + + * Fix array loop in operation (rashmihunt) + + * Change capitalization of readme file (crandmck) + + * fix undefined descriptor in attribute (rashmihunt) + + * add stockquote example (rashmihunt) + + * some formating fix (rashmihunt) + + * assign http port dynamically in client-test.js (rashmihunt) + + * incresed timeout for tests (rashmihunt) + + * initialize NTLMSecurity option to wsdl option (rashmihunt) + + +2016-12-15, Version 1.1.0 +========================= + + * fixed a CI failure in downstream (rashmihunt) + + * updated debug statements (rashmihunt) + + * add prettyPrint to client options (rashmihunt) + + * fixed downstream failing test (rashmihunt) + + * fixed a testcase failure (rashmihunt) + + * support forcing soap version (rashmihunt) + + * Update tr translation file (Candy) + + * support correctly (rashmihunt) + + * Initial support for NTLM (#52) (Rashmi Hunt) + + * Update translation files (Candy) + + * removing CookieSecurity from this branch to keep PR's separate (Branden Horiuchi) + + * adding check for element length on outputBodyDescriptor (Branden Horiuchi) + + * * adding CookieSecurity to built-in security methods (Branden Horiuchi) + + * Add translation files (Candy) + + * added header to input operation (rashmihunt) + + * fix for #31 (rashmihunt) + + * Using targetNamespace of the attribute if present (#32) (Guatom) + + +2016-10-06, Version 1.0.2 +========================= + + * fixed debug level (rashmihunt) + + * debug support & fixed warning (rashmihunt) + + +2016-09-30, Version 1.0.1 +========================= + + * code review fixes (rashmihunt) + + * fixed wsdl-test failure (rashmihunt) + + * add babel script as prepublish (deepakrkris) + + * remove forceSoap12Headers wsdl option and reimplement (rashmihunt) + + +2016-09-27, Version 1.0.0 +========================= + + * Readme updates, cleanup of Examples & code (rashmihunt) + + * Add globalization (Candy) + + * fix for CI build errors (deepakrkris) + + * added code for soap 1.2 fault support, added a new test for soap 1.2 fault, fixed existing test cases (rashmihunt) + + * added support for soap 1.2 fault and added a test case for soap 1.2 fault (rashmihunt) + + * regression for server-test (deepakrkris) + + * regression fixes for wsdl-tests (deepakrkris) + + * fix regression errors for all test cases (deepakrkris) + + * Fixed soap 1.1 Fault path & enabled rest of the tests in wsdl-test.js (rashmihunt) + + * ignoring .DS_Store file (rashmihunt) + + * check soap version for fault processing (rashmihunt) + + * fix test fails for request-response-samples (deepakrkris) + + * Fixed support for imported wsdl scenario, converted wsdl-test.js to mocha test (rashmihunt) + + * Fixed support for Fault, added support for multiple faults in operation, added test cases (rashmihunt) + + * added another set of test casesand fixed issues with server.js and client.js (rashmihunt) + + * fixed rpc path, added rpc/literal test, fixed an issue with wsdl (rashmihunt) + + * fixed rpc path and added a test for rpc/literal style (rashmihunt) + + * Fixed test in ssl-test.js (rashmihunt) + + * enabled last set of tests from server-test.js (rashmihunt) + + * Enabled more tests from server-test.js (rashmihunt) + + * fixed code review comment (rashmihunt) + + * Enabled another set of test cases in server-test.js (rashmihunt) + + * code review fixes - reverted back mapObject change, removed jasonToXML call after parseXML (rashmihunt) + + * Make babel transpliation a pretest script (Raymond Feng) + + * proper header support for client and server (rashmihunt) + + * Fix exported modules (Raymond Feng) + + * derive soapHeader name from it's qname (rashmihunt) + + * fixes for remaining tests to run successfully in client-test.js (rashmihunt) + + * several fixes to enable failing tests in server-options-test and client-test (rashmihunt) + + * 1) Added missing function changeSoapHeader() in base.js and fixed assert logic in 2 tests in client-test.js (rashmihunt) + + * missing selectn module require() statement (rashmihunt) + + * Fixed null arg passing in client._invoke(), fixed server.js logic to derive operationName, outputName and fixed server-options-test to pass srapper oject in the request (rashmihunt) + + * fixed naming convention for module exports in index.js at the top level and added checks for null and undefined (rashmihunt) + + * added WSSecurity to module.export (rashmihunt) + + * Initial test case fixes for feature/wsdl-parser branch changes (rashmihunt) + + * Refactor wsdl parsing into ES6 classes (Raymond Feng) + + * Update README and package.json (Raymond Feng) + + * Fix mustUnderstand value (Raymond Feng) + + * Fix style warnings (Raymond Feng) + + * Mock up stream.destroy for Node 6.x (Raymond Feng) + + * Add nonce and soap:actor options for WSSecurity (Raymond Feng) + + * fixed the soap request envelop generation part when request has complex Type as root. (#849) (Phani Kiran Guttha) + + * gracefully handle errors while parsing xml in xmlToObject and resume the parser with p.resume() (#842) (Deepak Verma) + + * XSD import in WSDL files and relative path (server creation) - resubmit (#846) (Mark Bayfield) + + * Support array of certs for ClientSSLSecurity ca. (#841) (Albert J wong) + + * attribute value of body id in double quotes (#843) (Edwin van Meerendonk) + + * Bumping ursa to 0.9.4 (#836) (Michael) + + * Optionally add Created to wssecurity header (#833) (Jordan Klassen) + + * Clean up brace style (#835) (Jordan Klassen) + + * Fix custom http client not being used when fetching related resources (#834) (Jordan Klassen) + + * Release v0.15.0 (Heinz Romirer) + + * Make ursa an optional dependency. (#832) (Leo Liang) + + * Fix issue of reference element in another namespace. (#831) (Leo Liang) + + * Fix incorrect WSDL in CDATA test case. (#830) (Leo Liang) + + * Mock up cork/uncork to avoid test failure (#829) (Raymond Feng) + + * Fix issue from #787 (Leo Liang) + + * * Adding basic CDATA support. (David) + + * Add missing document about `Client.setEndpoint()` (Leo Liang) + + * Generate TOC in readme file. (Leo Liang) + + * Revert "Undo the changes which are refactoring." (Leo Liang) + + * Fix elementFormDefault handling. (#822) (Leo Liang) + + * Added missing compress node module in package.json (pgAdmin) + + * Add the incoming message object to the client 'response' event (Pattrick Hueper) + + * added note about keep-alive SOAP header workaround (kevincoleman) + + * Update http.js (volkmarbuehringer) + + * Release v0.14.0 (Heinz Romirer) + + * Allows calling methods with callback as last param (Gabriel Montes) + + * Re-enable ignore base namespace option and fixed expected result for its unit test. (eugene-frb) + + * Avoids overwriting request headers with options in method invocation (Gabriel Montes) + + * If {time: true} is passed as an option to request module, makeelapsedTime from response available as Client.lastElapsedTime (brycewjohnson) + + * Allow to set a custom envelop (Baptiste Lecocq) + + * Update soap.js (Liviu Seniuc) + + * Documents custom options and headers on WSDL reqs (Gabriel Montes) + + * Added support for XML rootNode namespace and xmlns definition parser overriding. (Jon Ciccone) + + * ignore whitespace only differences. make differences easier to spot. (CT Arrington) + + * Added support for WSSecurity XML signing with x509 certificates. updated readme updated package.json with latest ursa version change minimum node requirement to 0.10 since many dependencies break with engine-strict=true under node 0.8 (Jon Ciccone) + + * Remove assertions around location of BEGIN CERTIFICATE and END CERTIFICATE (Joseph Junker) + + * Release v0.13.0 (Heinz Romirer) + + * consider previous ignoredNamespaces option when processing includes (BJR Matos) + + * SOAP Headers for server response + a change method for both client & server (Michel D'HOOGE) + + * XML Declaration (Michel D'HOOGE) + + * Fixing wrong nsContext. (Mik13) + + * Adds server options hash example to Readme.md (Benjamin Albert) + + * Children may be empty resulting in a NPE (Tobias Neubert) + + * Releave v0.12.0 (jsdevel) + + * updating lodash to 3.x.x (jsdevel) + + * Fix schema overwrite when include a xsd with (Leo Liang) + + * Release v0.11.4 (jsdevel) + + * Adding coverage to .travis (jsdevel) + + * Release v0.11.3 (jsdevel) + + * Release v0.11.2 (jsdevel) + + * Closes #733 and Fixes #707: Return null instead of empty object. (jsdevel) + + * Overriding the namespace prefix with empty prefix (SunJang) + + * Adds commas and semicolons to listen(...) example (Benjamin Albert) + + * Temporarily skiping test from #768. (jsdevel) + + * Release v0.11.1 (jsdevel) + + * When a complexType and an element has the same name, and we set the element to a value, the element gets the wrong namespace (a new one, e.g. ns1), because the `findChildSchemaObject`-function returns the complexType, not the element. (Mik13) + + * improved 'https' pattern matching for local files with name starting with 'http' (Elijah Saounkine) + + * Handles SOAP result null output (Simon Elbaz) + + * Remove SOAPAction http header in SOAP 1.2, extra header was causing some servers to trip (Michael Szlapa) + + * When an error occur, send HTTP 500 status code (Iván López) + + * Adding ClientSSLSecurityPFX for use in requests (Tom Gallacher) + + * Fixed issue when an error was undefined: undefined (Tom Gallacher) + + * Add missing type attribute for PasswordText in WSSecurity and update related tests (wmcmurray) + + * Release v0.11.0 (jsdevel) + + * pass req to service (Evan Tahler) + + * removed console logs (Mike Borozdin) + + * added the ability to add HTTP headers to the client. (Mike Borozdin) + + * Release v0.10.3 (jsdevel) + + * Adding createErroringStub to soap-stub. (jsdevel) + + * Release v0.10.2 (jsdevel) + + * Adding security to soap-stub. (jsdevel) + + * Release v0.10.1 (jsdevel) + + * Adding soap-stub. (jsdevel) + + * add SOAP v1.2 support for client (Aleksey) + + * Release v0.10.0 (jsdevel) + + * Fix xml namespace/element/type handling (Raymond Feng) + + * Release v0.9.5 (jsdevel) + + * Fixes 743, Allow circular XSD files to be loaded (Fabian Cook) + + * Timestamp is now optional (Jason D. Harper) + + * Formatting History.md 0.9.4 notes. (jsdevel) + + * Release v0.9.4 (jsdevel) + + * Adding gitter badge in preparation of disabling issues. (jsdevel) + + * Adding node v4.0 to .travis.yml. (jsdevel) + + * Increasing mocha test timeout to 10 seconds. (jsdevel) + + * Resolve element references when other types are referenced (Raymond Feng) + + * Update Readme.md (Vinay Pulim) + + * Update Readme (laure) + + * add optional statusCode on soap fault (Gangstead) + + * Fix for wsdl retrieval using soap.createClient with special options.httpClient. Before this, the specified client was not used when fetching the wsdl file. This fix will force the wsdl to use the specified httpClient. (Kevin Forest) + + * Release v0.9.3 (jsdevel) + + * Allowing namespace overriding for elements. (jsdevel) + + * Turning off email notifications for travis. (jsdevel) + + * Release v0.9.2 (jsdevel) + + * Add support for xsd element ref (Raymond Feng) + + * Moving travis build to containers. (jsdevel) + + * Add request sample for an operation without any parameters. (Tom De Caluwé) + + * update spelling and formatting to clarify several sections of Readme (Dave Kerr) + + * Add the correct namespace alias for operations without parameters by simply removing the special case where input.parts is empty. If special logic is wanted for this case, it should be contained in objectToRpcXML in any case. (Tom De Caluwé) + + * Prevent sending Object prototype methods as XML (Claudia Hardman) + + * Allow WSDL to be loaded from HTTPS sites (Jimmy Jones) + + * Fix a typo in WSDL#findChildParameterObject (Arthur Schreiber) + + * Fixed SOAP Fault errors not being raised as errors (Ivan Erceg) + + * Use diffrent namespace styles for soap fault 1.1 and 1.2 (Johan Brodin) + + * Release 0.9.1 (herom) + + * fix for empty strings that were returnd as empty json objects (Sasha Vincic) + + * Get current namespace when parent namespace is empty string fixes vpulim/node-soap/issues/533 (Islam Sharabash) + + * Update readme (Raymond Feng) + + * Issue 537: Take namespaces that are configured to be ignored into account (Tobias Neubert) + + * Update license attribute (Peter deHaan) + + * Add ability to customize http client/request lib (Raymond Feng) + + * support xsi:type schema on element (bug #606) (pentode) + + * recursive element should work in wsdl (Semenov, Dmytro()) + + * Reformat & Update History.md for v0.9.0 release. (herom) + + * Release v0.9.0 (herom) + + * Make sure wsdl:import is not overwritten by xsd:import (Raymond Feng) + + * Ignore the `.idea` folder when pushing to npm (Arthur Schreiber) + + * Add last endpoint (Ryan Fink) + + * Support for async server errors by extending the callback with one argumnet (Johan Brodin) + + * Handle HTML answer from non-SOAP server (Michel D'HOOGE) + + * Hopefully last review comment fix attempt. (+8 squashed commits) Squashed commits: [e991d38] Still trying to fix review comments. [9627c08] Attempt at fixing review comments... [458ae0e] More review comment fixes. [2152212] Fixing a bunch of things from review comments. [6fb9b10] Fixed a large number of broken tests which were missing schema files. These had previously gone unnoticed because schema imports were not actually firing off. [bfbf338] If response is json, then error should not be thrown. Fix issue #580 [5ddb53f] Removed unnecessary code from testing. [be39fec] Fix to allow request options and headers to persist for all includes. Fix to properly handle when an import/include starts with a schema element. (Barry Dutton) + + * Do not end request for keep-alive connections (mgorczyca) + + * Client 'response' event (briandunnington) + + * If response is json, then error should not be thrown. Fix issue #580 (Himanshu Kansal) + + * sub namespace should be correct regardless of order of enumeration i.e. should not be overriden by other prop's namespace (Yang) + + * Read Me: Added a section about Server Events (Michel D'HOOGE) + + * Server 'request' event (Michel D'HOOGE) + + * Add support for One-Way Operations (Wim verreydt) + + * The extend function was throwing an error (#585). This null and typeof check will handle elements that are not objects. (z151514) + + * ClientSSLSecurity now accepts a `ca`-certificate. (Mik13) + + * ClientSSLSecurity should be able to take a Buffer as `key` and `cert` parameter. Additionally the certificates are checked whether they are correct or not (starting with `-----BEGIN`). (Mik13) + + * Add support for sending NULL values (Chase Sillevis) + + * Follow 302 redirects, don't mix quotes (Chase Sillevis) + + * Update CONTRIBUTING.md (Heinz Romirer) + + * Respond with security timestamp if request had one (Roie Kossover) + + * Release v0.8.0 (herom) + + * Fix strict mode errors for v0.12 compatibility (Andrew Branch) + + * Issue #386 This fix adds support for attributes in node body (Robert) + + * Update History.md (Heinz Romirer) + + * Release v0.7.0 (herom) + + * Server event to globally handle SOAP Headers (Michel D'HOOGE) + + * Server replies with SOAP Fault thrown from method (Michel D'HOOGE) + + * fix for issue #68. Fix the case where requests are in soap format and… … (Himanshu Kansal) + + * Added `['positiveInteger', 'nonPositiveInteger', 'negativeInteger', 'nonNegativeInteger']` to primitive types. (Anil Anar) + + * Client instances emit 'soapError' event when error is detected (Michel D'HOOGE) + + * Respect empty soap actions in operations (Akash Agrawal) + + * Add support for message and request events as per issue #545 (Evan Shortiss) + + * Issue #489: Soap header from incoming request (Michel D'HOOGE) + + * Added support for CDATA with text and CDATA with XML response (whoover) + + * Return the soapHeader (nguyenchr) + + * Allow logging of received XML prior to parsing and processing (Deividy Metheler) + + * add support for importing external wsdl (yuerwei) + + * Use correct namespaces for elements which consist of an array. (Mik13) + + * Use correct namespaces in for elements with base. (Mik13) + + * preventing error when typeElement is undefined (Antonio Terreno) + + * Fix typo in header, breaking heading. (Albert Engelbrecht) + + * Allow wsdl:documentation element under wsdl:message (Raymond Feng) + + * Added functionality to ignore default tns and disabled default tns specification in first element of the body (Ferry Kobus) + + * Use correct namespaces in sequences with imported elements. (Mik13) + + * only supply nonce when a password digest is used to avoid schema validation errors (lsalzman) + + * Updated 'extend' function. Refactored the function to copy properties from one object to another one and avoid properties overriding. This way we ensure the 'inheritance' of usage. (dun4n) + + * Define $xml to pass xml object (Damien Picard) + + * Adding PUBLISHING.md (jsdevel) + + * Removes automatic port appending to "Host" header. (herom) + + * Avoid creating soap:Header container when there are no children This time including the matching fixture changes to remove Added support for header and security fixtures in request/response tests, and added tests for header optionality (Shelby Sanders) + + * Updated CONTRIBUTING.md (herom) + + * Addresses #75 - Allowing a 'null' argument for WSDL methods that take no arguments (Chris Klosowski) + + * Fix for wrong initialization of xmlns array when handling rpc stype wsdl (ankush-garg) + + * Fixing fault handling (Diego Silveira) + + * Added checking if there is input and output for operations under bindings section (Krzysztof Gutkowski) + + * Fixing XSD conflict with same namespace (Diego Silveira) + + * Adding bearer security type Exporting security type for usage (Phil Hansen) + + * The qualified elementFormQualified must be respected only when the current element is not a global element. The namespace attribute is only needed if it's not included in the xmlnsInEnvelope collection. (frank) + + * updating History.md (jsdevel) + + * Add "defaults" parameter to BasicAuthSecurity's constructor (Luke Horvat) + + * added tests for HTTP Host header (John Sanderson) + + * don't append port 80 to Host if not needed (John Sanderson) + + * Add an .editorconfig file to improve the code formatting in contributors editor of choice. (herom) + + * Remove possible existing BOM characters from XML String before passing it to `WSDL#_fromXML()` and parsing it. (herom) + + * Added possibility to set a custom `valueKey` for the parsed values from XML SOAP Response as the current fixed "$value" key could collide with some policies (as it's the case when using MongoDB). (herom) + + * Handling nil attributes in response xml (Graham Hay) + + * Updating History (jsdevel) + + * Updated client.js; Created request-response-sample. (Lev Nazarenko) + + * Resolve namespaces correctly by ignoring "tns:", "targetNamespace", "typedNamespace:", ... prefixes in child elements by default. (herom) + + * adding default attributesKey to server and allowing the property to be configurable fixing issue #406 (Helder Rossa) + + * Remove extra characters before and after soap envelope (jkirkwood) + + * Fix: Allow operations to not have definitions (Chris Barton) + + * Update Readme.md (Tom Caflisch) + + * Ignore unknown elements (Graham Hay) + + * Keep ns from top-level (Graham Hay) + + * Check status code of invocation response (Graham Hay) + + * wsdl should handle more types (Dmytro Semenov) + + * Using jshint 2.3.0 for indentation. (jsdevel) + + * 0.4.7 release (jsdevel) + + * 0.4.6 release (jsdevel) + + * Added possiblity for request elements containing both content and attributes. (Jasper Woudenberg) + + * Fixup the `elementFormDefault` functionality. (Arthur Schreiber) + + * Fix determining the namespace for complex elements. (Arthur Schreiber) + + * Add support for the `elementFormDefault` schema attribute. (Arthur Schreiber) + + * Fixing duplicate code which had gotten introduced because of a merge. (ankush-garg) + + * Handle SOAP Response element value and attributes so that the attribu… …tes of an element don't get overwritten if also a value is given. (Heinz Romirer) + + * Allowing the property name "attributes" to be configurable. (Michael Hernandez) + + * Moving xsi type namespace processing to processAttributes method to handle xsiTypes for object of arrays. (ankush-garg) + + * Added the possibility to work with `wsdl` files which pull their `schema`s in through `import`s and declare their message `part` to have an `element` attribute instead of `type`. (herom) + + * Allowing response.xml to be optional in tests. (jsdevel) + + * Allowing request.xml and response.json to be optional for tests. (jsdevel) + + * Fix for adding an undefined XML namespace to the generated XML's child namespace (Abhijit Gaikwad) + + * Added some documentation on options object when calling createClient. (Golo Roden) + + * Patch for issue #150 (Ashvin) + + * Moving up guidelines for submitting Pull Requests. (Joseph Spencer) + + +2014-05-13, Version 0.4.5 +========================= + + * 0.4.5 release (jsdevel) + + * Consolidate commit, intended to supersede #208 PR. (H. Arnold Jones) + + * An exception raised while parsing XML now hands off to callback of createConnection() instead of throwing it into the ether (+tests) (Christopher Hiller) + + * Fixed `AssertionError: Invalid child type` when WSDL contains imports, fix #322 (Joe Wong) + + * Fix for `TargetNamespace not loaded when import in schema #325` with Test-WSDL(Dummy.wsdl) and Test-Schemas(Common.xsd, Name.xsd) and writes message to the console when an `targetNamespace` already exists for an specific Schema and skips the extra Schema (phGitUser) + + * Update Readme.md (Joseph Spencer) + + +2014-04-16, Version 0.4.4 +========================= + + * 0.4.4 release (jsdevel) + + * Updating security protocols, adding lodash. (jxspencer) + + * Fix and test for #257 (Peter Magnusson) + + * Fix to reset the generated namespace number. (ankush-garg) + + * Fixed issue when custom headers values are not sent correctly (Abhijit Gaikwad) + + +2014-04-07, Version 0.4.3 +========================= + + * 0.4.3 release (jsdevel) + + * Refactored WS-security. small modifications to pull #275 (Abhijit Gaikwad) + + * Updated readme to add documentation for passing options to a client request (Grant Shively) + + * Added null check for portType and methods[methodname].output (Abhijit Gaikwad) + + * Issue: Requests that included compex types led to invalid request XML. (Tomas Bartkus) + + * 1) Ability to add extra headers to the client request + two tests 2) Test to ensure that client has lastResponse and lastResponseHeaders after it returns (ankush-garg) + + * Support for attributes array elements and support for complex extensions with array elements. (ankush-garg) + + * Make sure callback is done asynchronously for a cached wsdl (Raymond Feng) + + * Fix for #133 - inheritance support. (ankush-garg) + + +2014-03-13, Version 0.4.2 +========================= + + * 0.4.2 release (jxspencer) + + * Adding ability to inspect and clear soap headers. (ankush-garg) + + * Reducing test wsdl size (ankush-garg) + + * don't prefix default namespace elements with 'xmlns:' (Oran Dennison) + + +2014-03-04, Version 0.4.1 +========================= + + * 0.4.1 release (jsdevel) + + * Add support for default namespace elements. Incorporated the changes from PR #173 and added a test WSDL. (Oran Dennison) + + * Attach root object to error on soap fault (ankush-garg) + + * Adding an npmignore on test/. (Joseph Spencer) + + * Update CONTRIBUTING.md (Joseph Spencer) + + * jshint is run on tests now, moved some tests over to mocha BDD format (Matt Broadstone) + + * Handle attributes in requests (ankush-garg) + + * add simple ssl-test.js, and example certs (Matt Broadstone) + + * move wsdl parsing tests to their own file (Matt Broadstone) + + * Fix for issue # 204. (ankush-garg) + + * makes node-soap ua matches package.json version (Nathan White) + + * Change OperationElement.prototype.describe to check for existence of input/output before adding them to the description. Unit test and sample WSDL file included. (Matt Broadstone) + + * Cleaning up vac and ip2tele directories under test/ (jsdevel) + + * minor grammar / markdown tweaks. (Joseph Spencer) + + * Moving attribute-parsing tests to request-response-samples and adding a README therein. (jsdevel) + + * Minor grammar fixes to CONTRIBUTING.md (Joseph Spencer) + + * Adding a CONTRIBUTING.md file (jsdevel) + + * travis project changed from milewise/node-soap to vpulim/node-soap (Vinay Pulim) + + +2014-02-15, Version 0.4.0 +========================= + + * release 0.4.0 (Vinay Pulim) + + * 1) Added stripped down test NetSuite wsdl which was failing on describe 2) Updated test to describe Wsdls (ankush-garg) + + * Fix for "Uncaught TypeError: Cannot read property '0' of undefined". (ankush) + + * remove expat as a dependency and add sax (Christiaan Westerbeek) + + * Fixing undefined value for json in client response (jsdevel) + + * Add non xmlns attributes to elements during response parsing (jsdevel) + + * travis badge (Aaron Heckmann) + + * tests; fixed linux which passes ECONNREFUSED (Aaron Heckmann) + + * Start a new server instance for each test in server-test (Juho Vähä-Herttua) + + * Fix a potential crash in the client handler (Juho Vähä-Herttua) + + * Add a failing tests to reproduce an uncaught error (Juho Vähä-Herttua) + + * Fix requests if SOAP service is not on port 80 (Juho Vähä-Herttua) + + * removing execute permissions on .gitignore (jsdevel) + + * add-jshint for wsdl.js (jsdevel) + + * add-jshint for lib/soap.js (jsdevel) + + * add-jshint for lib/server.js (jsdevel) + + * add-jshint for lib/client.js (jsdevel) + + * add-jshint for lib/https.js (jsdevel) + + * Adding jshint for index.js (jsdevel) + + * add travis (Aaron Heckmann) + + * Remove execute privileges on files. (jsdevel) + + +2014-01-21, Version 0.3.2 +========================= + + * First release! diff --git a/node_modules/strong-soap/CODEOWNERS b/node_modules/strong-soap/CODEOWNERS new file mode 100644 index 00000000..17ecc54d --- /dev/null +++ b/node_modules/strong-soap/CODEOWNERS @@ -0,0 +1,6 @@ +# Lines starting with '#' are comments. +# Each line is a file pattern followed by one or more owners, +# the last matching pattern has the most precendence. + +# Core team members from IBM +* @b-admike @raymondfeng diff --git a/node_modules/strong-soap/CONTRIBUTING.md b/node_modules/strong-soap/CONTRIBUTING.md new file mode 100644 index 00000000..e8e8fed2 --- /dev/null +++ b/node_modules/strong-soap/CONTRIBUTING.md @@ -0,0 +1,148 @@ +### Contributing ### + +Thank you for your interest in `strong-soap`, an open source project +administered by StrongLoop. + +Contributing to `strong-soap` is easy. In a few simple steps: + + * Ensure that your effort is aligned with the project's roadmap by + talking to the maintainers, especially if you are going to spend a + lot of time on it. + + * Make something better or fix a bug. + + * Adhere to code style outlined in the [Google C++ Style Guide][] and + [Google Javascript Style Guide][]. + + * Sign the [Contributor License Agreement](https://cla.strongloop.com/agreements/strongloop/strong-soap) + + * Submit a pull request through Github. + + +### Contributor License Agreement ### + +``` + Individual Contributor License Agreement + + By signing this Individual Contributor License Agreement + ("Agreement"), and making a Contribution (as defined below) to + StrongLoop, Inc. ("StrongLoop"), You (as defined below) accept and + agree to the following terms and conditions for Your present and + future Contributions submitted to StrongLoop. Except for the license + granted in this Agreement to StrongLoop and recipients of software + distributed by StrongLoop, You reserve all right, title, and interest + in and to Your Contributions. + + 1. Definitions + + "You" or "Your" shall mean the copyright owner or the individual + authorized by the copyright owner that is entering into this + Agreement with StrongLoop. + + "Contribution" shall mean any original work of authorship, + including any modifications or additions to an existing work, that + is intentionally submitted by You to StrongLoop for inclusion in, + or documentation of, any of the products owned or managed by + StrongLoop ("Work"). For purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication + sent to StrongLoop or its representatives, including but not + limited to communication or electronic mailing lists, source code + control systems, and issue tracking systems that are managed by, + or on behalf of, StrongLoop for the purpose of discussing and + improving the Work, but excluding communication that is + conspicuously marked or otherwise designated in writing by You as + "Not a Contribution." + + 2. You Grant a Copyright License to StrongLoop + + Subject to the terms and conditions of this Agreement, You hereby + grant to StrongLoop and recipients of software distributed by + StrongLoop, a perpetual, worldwide, non-exclusive, no-charge, + royalty-free, irrevocable copyright license to reproduce, prepare + derivative works of, publicly display, publicly perform, + sublicense, and distribute Your Contributions and such derivative + works under any license and without any restrictions. + + 3. You Grant a Patent License to StrongLoop + + Subject to the terms and conditions of this Agreement, You hereby + grant to StrongLoop and to recipients of software distributed by + StrongLoop a perpetual, worldwide, non-exclusive, no-charge, + royalty-free, irrevocable (except as stated in this Section) + patent license to make, have made, use, offer to sell, sell, + import, and otherwise transfer the Work under any license and + without any restrictions. The patent license You grant to + StrongLoop under this Section applies only to those patent claims + licensable by You that are necessarily infringed by Your + Contributions(s) alone or by combination of Your Contributions(s) + with the Work to which such Contribution(s) was submitted. If any + entity institutes a patent litigation against You or any other + entity (including a cross-claim or counterclaim in a lawsuit) + alleging that Your Contribution, or the Work to which You have + contributed, constitutes direct or contributory patent + infringement, any patent licenses granted to that entity under + this Agreement for that Contribution or Work shall terminate as + of the date such litigation is filed. + + 4. You Have the Right to Grant Licenses to StrongLoop + + You represent that You are legally entitled to grant the licenses + in this Agreement. + + If Your employer(s) has rights to intellectual property that You + create, You represent that You have received permission to make + the Contributions on behalf of that employer, that Your employer + has waived such rights for Your Contributions, or that Your + employer has executed a separate Corporate Contributor License + Agreement with StrongLoop. + + 5. The Contributions Are Your Original Work + + You represent that each of Your Contributions are Your original + works of authorship (see Section 8 (Submissions on Behalf of + Others) for submission on behalf of others). You represent that to + Your knowledge, no other person claims, or has the right to claim, + any right in any intellectual property right related to Your + Contributions. + + You also represent that You are not legally obligated, whether by + entering into an agreement or otherwise, in any way that conflicts + with the terms of this Agreement. + + You represent that Your Contribution submissions include complete + details of any third-party license or other restriction (including, + but not limited to, related patents and trademarks) of which You + are personally aware and which are associated with any part of + Your Contributions. + + 6. You Don't Have an Obligation to Provide Support for Your Contributions + + You are not expected to provide support for Your Contributions, + except to the extent You desire to provide support. You may provide + support for free, for a fee, or not at all. + + 6. No Warranties or Conditions + + StrongLoop acknowledges that unless required by applicable law or + agreed to in writing, You provide Your Contributions on an "AS IS" + BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER + EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES + OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY, OR + FITNESS FOR A PARTICULAR PURPOSE. + + 7. Submission on Behalf of Others + + If You wish to submit work that is not Your original creation, You + may submit it to StrongLoop separately from any Contribution, + identifying the complete details of its source and of any license + or other restriction (including, but not limited to, related + patents, trademarks, and license agreements) of which You are + personally aware, and conspicuously marking the work as + "Submitted on Behalf of a Third-Party: [named here]". + + 8. Agree to Notify of Change of Circumstances + + You agree to notify StrongLoop of any facts or circumstances of + which You become aware that would make these representations + inaccurate in any respect. Email us at callback@strongloop.com. +``` diff --git a/node_modules/strong-soap/LICENSE b/node_modules/strong-soap/LICENSE new file mode 100644 index 00000000..602e77b5 --- /dev/null +++ b/node_modules/strong-soap/LICENSE @@ -0,0 +1,25 @@ +Copyright (c) IBM Corp. 2016. All Rights Reserved. +Node module: strong-soap +This project is licensed under the MIT License, full text below. + +-------- + +MIT license + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/strong-soap/NOTICE b/node_modules/strong-soap/NOTICE new file mode 100644 index 00000000..921614be --- /dev/null +++ b/node_modules/strong-soap/NOTICE @@ -0,0 +1,23 @@ +This product includes software developed at https://github.com/vpulim/node-soap +under the following MIT license. + +Copyright (C) 2013 Vinay Pulim + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/node_modules/strong-soap/README.md b/node_modules/strong-soap/README.md new file mode 100644 index 00000000..ca375eb7 --- /dev/null +++ b/node_modules/strong-soap/README.md @@ -0,0 +1,936 @@ +# strong-soap + +This module provides a Node.js SOAP client for invoking web services and a mock-up SOAP server capability to create and test your web service. This module is based on `node-soap` module. + + + + + + +- [Overview](#overview) +- [Install](#install) +- [Client](#client) + - [Extra headers (optional)](#extra-headers-optional) + - [Client.describe()](#clientdescribe) + - [Client.setSecurity(security)](#clientsetsecuritysecurity) + - [Client.*method*(args, callback)](#clientmethodargs-callback) + - [Client.*service*.*port*.*method*(args, callback[, options[, extraHeaders]])](#clientserviceportmethodargs-callback-options-extraheaders) + - [Client.*lastRequest*](#clientlastrequest) + - [Client.setEndpoint(url)](#clientsetendpointurl) + - [Client Events](#client-events) + - [Security](#security) + - [BasicAuthSecurity](#basicauthsecurity) + - [BearerSecurity](#bearersecurity) + - [ClientSSLSecurity](#clientsslsecurity) + - [WSSecurity](#wssecurity) + - [WSSecurityCert](#wssecuritycert) +- [XML Attributes](#xml-attributes) + - [Handling XML Attributes, Value and XML (wsdlOptions)](#handling-xml-attributes-value-and-xml-wsdloptions) + - [Overriding the value key](#overriding-the-value-key) + - [Overriding the xml key](#overriding-the-xml-key) + - [Overriding the `attributes` key](#overriding-the-attributes-key) +- [XMLHandler](#xmlhandler) +- [WSDL](#wsdl) + - [wsdl.open(wsdlURL, options, callback(err, wsdl))](#wsdlopenwsdlurl-options-callbackerr-wsdl) +- [Server](#server) + - [soap.listen(*server*, *path*, *services*, *wsdl*)](#soaplistenserver-path-services-wsdl) + - [Options](#options) + - [Server logging](#server-logging) + - [Server events](#server-events) + - [SOAP Fault](#soap-fault) + - [Server security example using PasswordDigest](#server-security-example-using-passworddigest) + - [Server connection authorization](#server-connection-authorization) +- [SOAP headers](#soap-headers) + - [Received SOAP headers](#received-soap-headers) + - [Outgoing SOAP headers](#outgoing-soap-headers) +- [soap-stub](#soap-stub) + - [Example](#example) +- [Contributors](#contributors) + + + +## Overview + +Features: + +* Full SOAP Client capability and mock-up SOAP server capability +* Handles both RPC and Document styles +* Handles both SOAP 1.1 and SOAP 1.2 Fault +* APIs to parse XML into JSON and JSON into XML +* API to describe WSDL document +* Support for both synchronous and asynchronous method handlers +* WS-Security (currently only UsernameToken and PasswordText encoding is supported) + +## Install + +Install with [npm](http://github.com/isaacs/npm): + +``` + npm install strong-soap +``` + +## Client + +Start with the WSDL for the web service you want to invoke. For example, the stock quote service http://www.webservicex.net/stockquote.asmx and the WSDL is http://www.webservicex.net/stockquote.asmx?WSDL + +Create a new SOAP client from WSDL URL using `soap.createClient(url[, options], callback)`. Also supports a local file system path. An instance of `Client` is passed to the `soap.createClient` callback. It is used to execute methods on the soap service. + +```js +"use strict"; + +var soap = require('strong-soap').soap; +// wsdl of the web service this client is going to invoke. For local wsdl you can use, url = './wsdls/stockquote.wsdl' +var url = 'http://www.webservicex.net/stockquote.asmx?WSDL'; + +var requestArgs = { + symbol: 'IBM' +}; + +var options = {}; +soap.createClient(url, options, function(err, client) { + var method = client['StockQuote']['StockQuoteSoap']['GetQuote']; + method(requestArgs, function(err, result, envelope, soapHeader) { + //response envelope + console.log('Response Envelope: \n' + envelope); + //'result' is the response body + console.log('Result: \n' + JSON.stringify(result)); + }); +}); + +``` + +As well as creating a client via a `url`, an existing [WSDL](#wsdl) object can be passed in via `options.WSDL_CACHE`. + +```js +var soap = require('strong-soap').soap; +var WSDL = soap.WSDL; + +var url = 'http://www.webservicex.net/stockquote.asmx?WSDL'; + +// Pass in WSDL options if any + +var options = {}; +WSDL.open(url,options, + function(err, wsdl) { + // You should be able to get to any information of this WSDL from this object. Traverse + // the WSDL tree to get bindings, operations, services, portTypes, messages, + // parts, and XSD elements/Attributes. + + // Set the wsdl object in the cache. The key (e.g. 'stockquotewsdl') + // can be anything, but needs to match the parameter passed into soap.createClient() + var clientOptions = { + WSDL_CACHE : { + stockquotewsdl: wsdl + } + }; + soap.createClient('stockquotewsdl', clientOptions, function(err, client) { + var method = client['StockQuote']['StockQuoteSoap']['GetQuote']; + method(requestArgs, function(err, result, envelope, soapHeader) { + + //response envelope + console.log('Response Envelope: \n' + envelope); + //'result' is the response body + console.log('Result: \n' + JSON.stringify(result)); + }); + }); +}); +``` + + +The Request envelope created by above service invocation: + +```xml + + + + + + IBM + + + +``` + +This WSDL operation is defined as document/literal-wrapped style. Hence the request in soap is wrapped in operation name. Refer to test cases [server-client-document-test](https://github.com/strongloop/strong-soap/blob/master/test/server-client-document-test.js) and [server-client-rpc-test](https://github.com/strongloop/strong-soap/blob/master/test/server-client-rpc-test.js) to understand document and rpc styles and their +Request, Response and Fault samples. + +The `options` argument allows you to customize the client with the following properties: + +- `endpoint``: to override the SOAP service's host specified in the `.wsdl` file. +- `request`: to override the [request](https://github.com/request/request) module. +- `httpClient`: to provide your own http client that implements `request(rurl, data, callback, exheaders, exoptions)`. +- `envelopeKey`: to set specific key instead of
+- `wsdl_options`: custom options for the request module on WSDL requests. +- `wsdl_headers`: custom HTTP headers to be sent on WSDL requests. + +Note: for versions of node >0.10.X, you may need to specify `{connection: 'keep-alive'}` in SOAP headers to avoid truncation of longer chunked responses. + +### Extra headers (optional) + +User can define extra HTTP headers to be sent on the request. + +```js +var clientOptions = {}; +soap.createClient(url, clientOptions, function(err, client) { + var customRequestHeader = {customheader1: 'test1'}; + // Custom request header + client.GetQuote(requestArgs, function(err, result, envelope) { + // Result in SOAP envelope body which is the wrapper element. + // In this case, result object corresponds to GetCityForecastByZIPResponse. + console.log(JSON.stringify(result)); + }, null, customRequestHeader); +}); +``` + +### Client.describe() + +Describes services, ports and methods as a JavaScript object. + +```js +// Describes the entire WSDL in a JSON tree object form. +var description = client.describe(); +// Inspect GetQuote operation. You can inspect Service: {Port: {operation: { +console.log(JSON.stringify(description.StockQuote.StockQuoteSoap.GetQuote)); +``` + +### Client.setSecurity(security) + +Use the specified security protocol. + +Refer to test case [ssl-test](https://github.com/strongloop/strong-soap/blob/master/test/ssl-test.js) for an example of using this API. + +### Client.*method*(args, callback) + +Call *method* on the SOAP service. + +```js + client.MyFunction({name: 'value'}, function(err, result, envelope, soapHeader) { + // Result is a javascript object + // Envelope is the response envelope from the Web Service + // soapHeader is the response soap header as a JavaScript object + }) +``` + +A *method* can also be called as a promise. + +```js + client.MyFunction({name: 'value'}).then(function({result, envelope, soapHeader}){ + // ... + }, function(err) { + // ... + }); + + // in async/await flavor + try { + const {result, envelope, soapHeader} = await client.MyFunction({name: 'value'}); + } catch(err) { + // handle error + } +``` + +### Client.*service*.*port*.*method*(args, callback[, options[, extraHeaders]]) + +Call a *method* using a specific *service* and *port*. + +```js + client.MyService.MyPort.MyFunction({name: 'value'}, function(err, result) { + // Result is a JavaScript object + }) +``` + +#### Options (optional) + + Accepts any option that the request module accepts, see [request](https://github.com/request/request) module. + + For example, you could set a timeout of 5 seconds on the request like this: + +```js + client.MyService.MyPort.MyFunction({name: 'value'}, function(err, result) { + // result is a javascript object + }, {timeout: 5000}) +``` + +You can measure the elapsed time on the request by passing the time option: + +```js + client.MyService.MyPort.MyFunction({name: 'value'}, function(err, result) { + // client.lastElapsedTime - the elapsed time of the last request in milliseconds + }, {time: true}) +``` + +#### Alternative method call using callback-last pattern + +To align method call signature with Node's standard callback-last pattern and eventually allow promisification of method calls, the following method signatures are also supported: + +```js +client.MyService.MyPort.MyFunction({name: 'value'}, options, function (err, result) { + // result is a javascript object +}) + +client.MyService.MyPort.MyFunction({name: 'value'}, options, extraHeaders, function (err, result) { + // result is a javascript object +}) +``` + +### Client.*lastRequest* + +The property that contains last full soap request for client logging. + +### Client.setEndpoint(url) + +Overwrites the SOAP service endpoint address. + +### Client events +Client instances emit the following events: + +* request - Emitted before a request is sent. The event handler receives the +entire Soap request (Envelope) including headers. +* message - Emitted before a request is sent. The event handler receives the +Soap body contents. Useful if you don't want to log /store Soap headers. +* soapError - Emitted when an erroneous response is received. + Useful if you want to globally log errors. +* response - Emitted after a response is received. The event handler receives +the SOAP response body as well as the entire `IncomingMessage` response object. +This is emitted for all responses (both success and errors). + +For an example of using this API, see [ssl-test](https://github.com/strongloop/strong-soap/blob/master/test/client-test.js). + +Here is an example of 'soapError' event + +```js +soap.createClient(__dirname + '/wsdl/default_namespace.wsdl', function (err, client) { + var didEmitEvent = false; + client.on('soapError', function(err) { + didEmitEvent = true; + assert.ok(err.root.Envelope.Body.Fault); + }); + client.MyOperation({}, function(err, result) { + assert.ok(didEmitEvent); + done(); + }); +}, baseUrl); +``` + +### Security + +`strong-soap` has several default security protocols. You can easily add your own +as well. The interface is quite simple. Each protocol defines two methods: + +* `addOptions` - Method that accepts an options arg that is eventually passed directly to `request` +* `toXML` - Method that returns a string of XML. + +### BasicAuthSecurity + +```js + client.setSecurity(new soap.BasicAuthSecurity('username', 'password')); +``` + +### BearerSecurity + +```js + client.setSecurity(new soap.BearerSecurity('token')); +``` + +### ClientSSLSecurity + +_Note_: If you run into issues using this protocol, consider passing these options +as default request options to the constructor: +* `rejectUnauthorized: false` +* `strictSSL: false` +* `secureOptions: constants.SSL_OP_NO_TLSv1_2` (this is likely needed for node >= 10.0) + +```js + client.setSecurity(new soap.ClientSSLSecurity( + '/path/to/key' + , '/path/to/cert' + , {/*default request options*/} + )); +``` + +### WSSecurity + +`WSSecurity` implements WS-Security. UsernameToken and PasswordText/PasswordDigest is supported. + +```js + var wsSecurity = new WSSecurity(username, password, options) + //the 'options' object is optional and contains properties: + //passwordType: 'PasswordDigest' or 'PasswordText' default is PasswordText + //hasTimeStamp: true or false, default is true + //hasTokenCreated: true or false, default is true + client.setSecurity(wsSecurity); +``` + +### WSSecurityCert + +WS-Security X509 Certificate support. + +```js + var privateKey = fs.readFileSync(privateKeyPath); + var publicKey = fs.readFileSync(publicKeyPath); + var password = ''; // optional password + var wsSecurity = new soap.WSSecurityCert(privateKey, publicKey, password, 'utf8'); + client.setSecurity(wsSecurity); +``` + +_Note_: Optional dependency 'ursa' is required to be installed successfully when WSSecurityCert is used. + +## XML attributes + +### Handling XML attributes, value, and XML (wsdlOptions) + +To override the default behavior of `strong-soap`, use the `wsdlOptions` object, passed in the +`createClient()` method. The `wsdlOptions` has the following properties: + +```js +var wsdlOptions = { + attributesKey: 'theAttrs', + valueKey: 'theVal', + xmlKey: 'theXml' +} +``` + +If you call `createClient()` with no options (or an empty Object `{}`), `strong-soap` defaults +to the following: + +- `attributesKey` : `'$attributes'` +- `valueKey` : `'$value'` +- `xmlKey` : `'$xml'` + +### Overriding the value key + +By default, `strong-soap` uses `$value` as key for any parsed XML value which may interfere with your other code as it +could be some reserved word, or the `$` in general cannot be used for a key to start with. + +You can define your own `valueKey` by passing it in the `wsdl_options` to the createClient call like so: +```js +var wsdlOptions = { + valueKey: 'theVal' +}; + +soap.createClient(__dirname + '/wsdl/default_namespace.wsdl', wsdlOptions, function (err, client) { + // your code +}); +``` + +### Overriding the xml key +As `valueKey`, `strong-soap` uses `$xml` as key. The xml key is used to pass XML Object without adding namespace or parsing the string. + +Example : + +```js +dom = { + $xml: '' +}; +``` + +```xml + + + + + +``` + +You can define your own `xmlKey` by passing it in the `wsdl_options` to the createClient call like this: + +```js +var wsdlOptions = { + xmlKey: 'theXml' +}; + +soap.createClient(__dirname + '/wsdl/default_namespace.wsdl', wsdlOptions, function (err, client) { + // your code +}); +``` + +### Overriding the attributes key + +You can achieve attributes like: + +```xml + + + + +``` +By attaching an attributes object to a node. + +```js +{ + parentnode: { + childnode: { + $attributes: { + name: 'childsname' + } + } + } +} + +``` +However, "attributes" may be a reserved key for some systems that actually want a node: + +```xml + + +``` + +In this case you can configure the attributes key in the `wsdlOptions` like this: + +```js +var wsdlOptions = { + attributesKey: '$attributes' +}; +``` + +Adding xsiType + +```js +soap.createClient(__dirname + '/wsdl/default_namespace.wsdl', wsdlOptions, function (err, client) { + client.*method*({ + parentnode: { + childnode: { + $attributes: { + $xsiType: "{xmlnsTy}Ty" + } + } + } + }); +}); +``` + +Removing the xsiType. The resulting Request shouldn't have the attribute xsiType + +```js +soap.createClient(__dirname + '/wsdl/default_namespace.wsdl', wsdlOptions, function (err, client) { + client.*method*({ + parentnode: { + childnode: { + $attributes: { + + } + } + } + }); +}); +``` + +To see it in practice, consider the sample in: [test/request-response-samples/addPets__force_namespaces](https://github.com/strongloop/strong-soap/tree/master/test/request-response-samples/addPets__force_namespaces) + +## XMLHandler + +XMLHandler enables you to to convert a JSON object to XML and XML to a JSON object. It can also parse an XML string or stream into the XMLBuilder tree. + +API to convert JSON object to XML and XML to JSON object: + +```js +var soap = require('..').soap; +var XMLHandler = soap.XMLHandler; +var xmlHandler = new XMLHandler(); +var util = require('util'); +var url = 'http://www.webservicex.net/stockquote.asmx?WSDL'; + +var requestArgs = { + symbol: 'IBM' +}; + +var options = {}; +var clientOptions = {}; +soap.createClient(url, clientOptions, function(err, client) { + var customRequestHeader = {customheader1: 'test1'}; + client.GetQuote(requestArgs, function(err, result, envelope, soapHeader) { + // Convert 'result' JSON object to XML + var node = xmlHandler.jsonToXml(null, null, + XMLHandler.createSOAPEnvelopeDescriptor('soap'), result); + var xml = node.end({pretty: true}); + console.log(xml); + + // Convert XML to JSON object + var root = xmlHandler.xmlToJson(null, xml, null); + console.log('%s', util.inspect(root, {depth: null})); + + }, options, customRequestHeader); +}); +``` + +Parse XML string or stream into the XMLBuilder tree: + +```js +var root = XMLHandler.parseXml(null, xmlString); +``` + +## WSDL + +### wsdl.open(wsdlURL, options, callback(err, wsdl)) + +Loads WSDL into a tree form. Traverse through WSDL tree to get to bindings, services, ports, operations, and so on. + +Parameters: + +- `wsdlURL` WSDL url to load. +- `options` WSDL options +- `callback` Error and WSDL loaded into object tree. + +```js +var soap = require('..').soap; +var WSDL = soap.WSDL; +var path = require('path'); + +// Pass in WSDL options if any + +var options = {}; +WSDL.open('./wsdls/stockquote.wsdl',options, + function(err, wsdl) { + // You should be able to get to any information of this WSDL from this object. Traverse + // the WSDL tree to get bindings, operations, services, portTypes, messages, + // parts, and XSD elements/Attributes. + + var getQuoteOp = wsdl.definitions.bindings.StockQuoteSoap.operations.GetQuote; + // print operation name + console.log(getQuoteOp.$name); + var service = wsdl.definitions.services['StockQuote']; + //print service name + console.log(service.$name); +}); +``` + +### wsdl.openSync(wsdlURL, options) + +Loads WSDL into a tree form directly from memory. It traverses through WSDL tree to get to bindings, services, ports, operations, and so on as long as you have your dependent WSDLs and schemas are loaded and available in the `options.WSDL_CACHE`. If any I/O is required to retrieve any dependencies this call will throw an error. + +Parameters: + +- `wsdlURL` WSDL url to load as named in the cache. +- `options` WSDL options + +An example of loading WSDLs into your `options.WSDL_CACHE` and calling `wsdl.loadSync()` can be found in the test [test/wsdl-load-from-memory-test](https://github.com/strongloop/strong-soap/tree/master/test/wsdl-load-from-memory-test.js) + + +## Server + +### soap.listen(*server*, *path*, *services*, *wsdl*) + +Creates a new SOAP server that listens on *path* and provides *services*. + +*wsdl* is an xml string that defines the service. + +```js + var myService = { + MyService: { + MyPort: { + MyFunction: function(args) { + return { + name: args.name + }; + }, + + // This is how to define an asynchronous function. + MyAsyncFunction: function(args, callback) { + // do some work + callback({ + name: args.name + }); + }, + + // This is how to receive incoming headers + HeadersAwareFunction: function(args, cb, headers) { + return { + name: headers.Token + }; + }, + + // You can also inspect the original `req` + reallyDeatailedFunction: function(args, cb, headers, req) { + console.log('SOAP `reallyDeatailedFunction` request from ' + req.connection.remoteAddress); + return { + name: headers.Token + }; + } + } + } + }; + + var xml = require('fs').readFileSync('myservice.wsdl', 'utf8'), + server = http.createServer(function(request,response) { + response.end("404: Not Found: " + request.url); + }); + + server.listen(8000); + soap.listen(server, '/wsdl', myService, xml); +``` + +An example of using the SOAP server is in [test/server-client-document-test](https://github.com/strongloop/strong-soap/tree/master/test/server-client-document-test.js) + +### Options + +You can pass in server and [WSDL Options](#handling-xml-attributes-value-and-xml-wsdloptions) +using an options hash. + +```js +var xml = require('fs').readFileSync('myservice.wsdl', 'utf8'); + +soap.listen(server, { + // Server options. + path: '/wsdl', + services: myService, + xml: xml, + + // WSDL options. + attributesKey: 'theAttrs', + valueKey: 'theVal', + xmlKey: 'theXml' +}); +``` + +### Server logging + +If the `log` method is defined it will be called with 'received' and 'replied' +along with data. + +```js + server = soap.listen(...) + server.log = function(type, data) { + // type is 'received' or 'replied' + }; +``` + +### Server events + +Server instances emit the following events: + +* request - Emitted for every received messages. + The signature of the callback is `function(request, methodName)`. +* headers - Emitted when the SOAP Headers are not empty. + The signature of the callback is `function(headers, methodName)`. + +The sequence order of the calls is `request`, `headers` and then the dedicated +service method. + +```js + test.soapServer.on('request', function requestManager(request, methodName) { + assert.equal(methodName, 'GetLastTradePrice'); + done(); + }); + +``` + +An example of using the SOAP server is in [test/server-test](https://github.com/strongloop/strong-soap/tree/master/test/server-test.js) + +### SOAP Fault + +A service method can reply with a SOAP Fault to a client by `throw`ing an +object with a `Fault` property. + +Example SOAP 1.1 Fault: + +```js + test.service = { + DocLiteralWrappedService: { + DocLiteralWrappedPort: { + myMethod: function (args, cb, soapHeader) { + throw { + Fault: { + faultcode: "sampleFaultCode", + faultstring: "sampleFaultString", + detail: + { myMethodFault: + {errorMessage: 'MyMethod Business Exception message', value: 10} + } + } + } + } + } + } + } +``` + +SOAP 1.2 Fault: + +```js + test.service = { + DocLiteralWrappedService: { + DocLiteralWrappedPort: { + myMethod: function (args, cb, soapHeader) { + throw { + Fault: { + Code: { + Value: "soap:Sender", + Subcode: { Value: "rpc:BadArguments" } + }, + Reason: { Text: "Processing Error" }, + Detail: + {myMethodFault2: + {errorMessage2: 'MyMethod Business Exception message', value2: 10} + } + } + } + } + } + } + } +``` + + +Examples of SOAP 1.1/SOAP 1.2 Fault response can be found in test [test/server-client-document-test](https://github.com/strongloop/strong-soap/tree/master/test/server-client-document-test.js) + +### Server security example using PasswordDigest + +If `server.authenticate` is not defined then no authentication will take place. + +```js + server = soap.listen(...) + server.authenticate = function(security) { + var created, nonce, password, user, token; + token = security.UsernameToken, user = token.Username, + password = token.Password, nonce = token.Nonce, created = token.Created; + return user === 'user' && password === soap.passwordDigest(nonce, created, 'password'); + }; +``` + +### Server connection authorization + +The `server.authorizeConnection` method is called prior to the soap service method. +If the method is defined and returns `false` then the incoming connection is +terminated. + +```js + server = soap.listen(...) + server.authorizeConnection = function(req) { + return true; // or false + }; +``` + + +## SOAP headers + +### Received SOAP headers + +A service method can look at the SOAP headers by providing a third arguments. + +```js + { + HeadersAwareFunction: function(args, cb, headers) { + return { + name: headers.Token + }; + } + } +``` + +It is also possible to subscribe to the 'headers' event. +The event is triggered before the service method is called, and only when the +SOAP Headers are not empty. + +```js + server = soap.listen(...) + server.on('headers', function(headers, methodName) { + // It is possible to change the value of the headers + // before they are handed to the service method. + // It is also possible to throw a SOAP Fault + }); +``` + +First parameter is the Headers object; +second parameter is the name of the SOAP method that will called +(in case you need to handle the headers differently based on the method). + +### Outgoing SOAP headers + +Both client and server can define SOAP headers that will be added to what they send. +They provide the following methods to manage the headers. + +#### addSoapHeader(value, qname) + +Adds soapHeader to soap:Header node. + +Parameters: + +- `value` JSON object representing {headerName: headerValue} or XML string. +- `qname` qname used for the header + +``` +addSoapHeader(value, qname, options); +``` + +Returns the index where the header is inserted. + +#### changeSoapHeader(index, value, qname) + +Changes an existing soapHeader. + +Parameters: + +- `index` index of the header to replace with provided new value +- `value` JSON object representing {headerName: headerValue} or XML string. +- `qname` qname used for the header + +#### getSoapHeaders() + +Returns all defined headers. + +#### clearSoapHeaders() + +Removes all defined headers. + +Examples of using SOAP header API are in: [test/server-test](https://github.com/strongloop/strong-soap/tree/master/test/server-test.js) and [test/server-test](https://github.com/strongloop/strong-soap/tree/master/test/client-test.js) + +## soap-stub + +Unit testing services that use SOAP clients can be very cumbersome. To get +around this you can use `soap-stub` in conjunction with `sinon` to stub soap with +your clients. + +### Example + +```js +var sinon = require('sinon'); +var soapStub = require('strong-soap/soap-stub'); + +var urlMyApplicationWillUseWithCreateClient = './example/stockquote.wsdl'; +var clientStub = { + SomeOperation: sinon.stub() +}; + +clientStub.SomeOperation.respondWithError = soapStub.createRespondingStub({error: 'error'}); +clientStub.SomeOperation.respondWithSuccess = soapStub.createRespondingStub({success: 'success'}); +// or if you are using promises +clientStub.SomeOperation.respondWithError = soapStub.createRespondingStubAsync({error: 'error'}); +clientStub.SomeOperation.respondWithSuccess = soapStub.createRespondingStubAsync({success: 'success'}); + + +soapStub.registerClient('my client alias', urlMyApplicationWillUseWithCreateClient, clientStub); + + +var fs = require('fs'), + assert = require('assert'), + request = require('request'), + http = require('http'), + lastReqAddress; + +describe('myService', function() { + var clientStub; + var myService; + + beforeEach(function() { + clientStub = soapStub.getStub('my client alias'); + soapStub.reset(); + myService = clientStub; + }); + + describe('failures', function() { + beforeEach(function() { + clientStub.SomeOperation.respondWithError(); + }); + + it('should handle error responses', function() { + myService.SomeOperation(function(err, response) { + // handle the error response. + }); + }); + }); +}); + +``` + +## Contributors + + * [All Contributors](https://github.com/strongloop/strong-soap/graphs/contributors) diff --git a/node_modules/strong-soap/coverage/base.css b/node_modules/strong-soap/coverage/base.css new file mode 100644 index 00000000..f418035b --- /dev/null +++ b/node_modules/strong-soap/coverage/base.css @@ -0,0 +1,224 @@ +body, html { + margin:0; padding: 0; + height: 100%; +} +body { + font-family: Helvetica Neue, Helvetica, Arial; + font-size: 14px; + color:#333; +} +.small { font-size: 12px; } +*, *:after, *:before { + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + } +h1 { font-size: 20px; margin: 0;} +h2 { font-size: 14px; } +pre { + font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; + margin: 0; + padding: 0; + -moz-tab-size: 2; + -o-tab-size: 2; + tab-size: 2; +} +a { color:#0074D9; text-decoration:none; } +a:hover { text-decoration:underline; } +.strong { font-weight: bold; } +.space-top1 { padding: 10px 0 0 0; } +.pad2y { padding: 20px 0; } +.pad1y { padding: 10px 0; } +.pad2x { padding: 0 20px; } +.pad2 { padding: 20px; } +.pad1 { padding: 10px; } +.space-left2 { padding-left:55px; } +.space-right2 { padding-right:20px; } +.center { text-align:center; } +.clearfix { display:block; } +.clearfix:after { + content:''; + display:block; + height:0; + clear:both; + visibility:hidden; + } +.fl { float: left; } +@media only screen and (max-width:640px) { + .col3 { width:100%; max-width:100%; } + .hide-mobile { display:none!important; } +} + +.quiet { + color: #7f7f7f; + color: rgba(0,0,0,0.5); +} +.quiet a { opacity: 0.7; } + +.fraction { + font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; + font-size: 10px; + color: #555; + background: #E8E8E8; + padding: 4px 5px; + border-radius: 3px; + vertical-align: middle; +} + +div.path a:link, div.path a:visited { color: #333; } +table.coverage { + border-collapse: collapse; + margin: 10px 0 0 0; + padding: 0; +} + +table.coverage td { + margin: 0; + padding: 0; + vertical-align: top; +} +table.coverage td.line-count { + text-align: right; + padding: 0 5px 0 20px; +} +table.coverage td.line-coverage { + text-align: right; + padding-right: 10px; + min-width:20px; +} + +table.coverage td span.cline-any { + display: inline-block; + padding: 0 5px; + width: 100%; +} +.missing-if-branch { + display: inline-block; + margin-right: 5px; + border-radius: 3px; + position: relative; + padding: 0 4px; + background: #333; + color: yellow; +} + +.skip-if-branch { + display: none; + margin-right: 10px; + position: relative; + padding: 0 4px; + background: #ccc; + color: white; +} +.missing-if-branch .typ, .skip-if-branch .typ { + color: inherit !important; +} +.coverage-summary { + border-collapse: collapse; + width: 100%; +} +.coverage-summary tr { border-bottom: 1px solid #bbb; } +.keyline-all { border: 1px solid #ddd; } +.coverage-summary td, .coverage-summary th { padding: 10px; } +.coverage-summary tbody { border: 1px solid #bbb; } +.coverage-summary td { border-right: 1px solid #bbb; } +.coverage-summary td:last-child { border-right: none; } +.coverage-summary th { + text-align: left; + font-weight: normal; + white-space: nowrap; +} +.coverage-summary th.file { border-right: none !important; } +.coverage-summary th.pct { } +.coverage-summary th.pic, +.coverage-summary th.abs, +.coverage-summary td.pct, +.coverage-summary td.abs { text-align: right; } +.coverage-summary td.file { white-space: nowrap; } +.coverage-summary td.pic { min-width: 120px !important; } +.coverage-summary tfoot td { } + +.coverage-summary .sorter { + height: 10px; + width: 7px; + display: inline-block; + margin-left: 0.5em; + background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; +} +.coverage-summary .sorted .sorter { + background-position: 0 -20px; +} +.coverage-summary .sorted-desc .sorter { + background-position: 0 -10px; +} +.status-line { height: 10px; } +/* yellow */ +.cbranch-no { background: yellow !important; color: #111; } +/* dark red */ +.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } +.low .chart { border:1px solid #C21F39 } +.highlighted, +.highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{ + background: #C21F39 !important; +} +/* medium red */ +.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } +/* light red */ +.low, .cline-no { background:#FCE1E5 } +/* light green */ +.high, .cline-yes { background:rgb(230,245,208) } +/* medium green */ +.cstat-yes { background:rgb(161,215,106) } +/* dark green */ +.status-line.high, .high .cover-fill { background:rgb(77,146,33) } +.high .chart { border:1px solid rgb(77,146,33) } +/* dark yellow (gold) */ +.status-line.medium, .medium .cover-fill { background: #f9cd0b; } +.medium .chart { border:1px solid #f9cd0b; } +/* light yellow */ +.medium { background: #fff4c2; } + +.cstat-skip { background: #ddd; color: #111; } +.fstat-skip { background: #ddd; color: #111 !important; } +.cbranch-skip { background: #ddd !important; color: #111; } + +span.cline-neutral { background: #eaeaea; } + +.coverage-summary td.empty { + opacity: .5; + padding-top: 4px; + padding-bottom: 4px; + line-height: 1; + color: #888; +} + +.cover-fill, .cover-empty { + display:inline-block; + height: 12px; +} +.chart { + line-height: 0; +} +.cover-empty { + background: white; +} +.cover-full { + border-right: none !important; +} +pre.prettyprint { + border: none !important; + padding: 0 !important; + margin: 0 !important; +} +.com { color: #999 !important; } +.ignore-none { color: #999; font-weight: normal; } + +.wrapper { + min-height: 100%; + height: auto !important; + height: 100%; + margin: 0 auto -48px; +} +.footer, .push { + height: 48px; +} diff --git a/node_modules/strong-soap/coverage/block-navigation.js b/node_modules/strong-soap/coverage/block-navigation.js new file mode 100644 index 00000000..c7ff5a5c --- /dev/null +++ b/node_modules/strong-soap/coverage/block-navigation.js @@ -0,0 +1,79 @@ +/* eslint-disable */ +var jumpToCode = (function init() { + // Classes of code we would like to highlight in the file view + var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no']; + + // Elements to highlight in the file listing view + var fileListingElements = ['td.pct.low']; + + // We don't want to select elements that are direct descendants of another match + var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > ` + + // Selecter that finds elements on the page to which we can jump + var selector = + fileListingElements.join(', ') + + ', ' + + notSelector + + missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b` + + // The NodeList of matching elements + var missingCoverageElements = document.querySelectorAll(selector); + + var currentIndex; + + function toggleClass(index) { + missingCoverageElements + .item(currentIndex) + .classList.remove('highlighted'); + missingCoverageElements.item(index).classList.add('highlighted'); + } + + function makeCurrent(index) { + toggleClass(index); + currentIndex = index; + missingCoverageElements.item(index).scrollIntoView({ + behavior: 'smooth', + block: 'center', + inline: 'center' + }); + } + + function goToPrevious() { + var nextIndex = 0; + if (typeof currentIndex !== 'number' || currentIndex === 0) { + nextIndex = missingCoverageElements.length - 1; + } else if (missingCoverageElements.length > 1) { + nextIndex = currentIndex - 1; + } + + makeCurrent(nextIndex); + } + + function goToNext() { + var nextIndex = 0; + + if ( + typeof currentIndex === 'number' && + currentIndex < missingCoverageElements.length - 1 + ) { + nextIndex = currentIndex + 1; + } + + makeCurrent(nextIndex); + } + + return function jump(event) { + switch (event.which) { + case 78: // n + case 74: // j + goToNext(); + break; + case 66: // b + case 75: // k + case 80: // p + goToPrevious(); + break; + } + }; +})(); +window.addEventListener('keydown', jumpToCode); diff --git a/node_modules/strong-soap/coverage/index.html b/node_modules/strong-soap/coverage/index.html new file mode 100644 index 00000000..b483ad48 --- /dev/null +++ b/node_modules/strong-soap/coverage/index.html @@ -0,0 +1,227 @@ + + + + Code coverage report for All files + + + + + + + +
+
+

+ All files +

+
+
+ 72.2% + Statements + 2925/4051 +
+
+ 58.52% + Branches + 1443/2466 +
+
+ 69.76% + Functions + 293/420 +
+
+ 73.05% + Lines + 2871/3930 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
strong-soap
100%9/950%1/2100%0/0100%9/9
strong-soap/lib
100%4/4100%0/0100%0/0100%4/4
strong-soap/lib/parser
11.35%80/7052.2%12/5459.84%6/6111.83%80/676
strong-soap/lib/parser/xsd
4.41%3/680%0/360%0/105.08%3/59
strong-soap/src
87.61%608/69471.14%244/34386.96%60/6987.77%603/687
strong-soap/src/parser
85.43%991/116075.16%593/78982.91%97/11786.23%977/1133
strong-soap/src/parser/soap
91.89%34/3780%8/1066.67%4/691.89%34/37
strong-soap/src/parser/soap12
91.18%31/34100%8/840%2/591.18%31/34
strong-soap/src/parser/wsdl
91.82%460/50185.76%247/28892.68%38/4192.29%443/480
strong-soap/src/parser/xsd
84.14%536/63772.24%255/35376.54%62/8184.92%518/610
strong-soap/src/security
83.66%169/20281.52%75/9280%24/3084.08%169/201
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/prettify.css b/node_modules/strong-soap/coverage/prettify.css new file mode 100644 index 00000000..b317a7cd --- /dev/null +++ b/node_modules/strong-soap/coverage/prettify.css @@ -0,0 +1 @@ +.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/node_modules/strong-soap/coverage/prettify.js b/node_modules/strong-soap/coverage/prettify.js new file mode 100644 index 00000000..b3225238 --- /dev/null +++ b/node_modules/strong-soap/coverage/prettify.js @@ -0,0 +1,2 @@ +/* eslint-disable */ +window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/node_modules/strong-soap/coverage/sort-arrow-sprite.png b/node_modules/strong-soap/coverage/sort-arrow-sprite.png new file mode 100644 index 00000000..03f704a6 Binary files /dev/null and b/node_modules/strong-soap/coverage/sort-arrow-sprite.png differ diff --git a/node_modules/strong-soap/coverage/sorter.js b/node_modules/strong-soap/coverage/sorter.js new file mode 100644 index 00000000..16de10c4 --- /dev/null +++ b/node_modules/strong-soap/coverage/sorter.js @@ -0,0 +1,170 @@ +/* eslint-disable */ +var addSorting = (function() { + 'use strict'; + var cols, + currentSort = { + index: 0, + desc: false + }; + + // returns the summary table element + function getTable() { + return document.querySelector('.coverage-summary'); + } + // returns the thead element of the summary table + function getTableHeader() { + return getTable().querySelector('thead tr'); + } + // returns the tbody element of the summary table + function getTableBody() { + return getTable().querySelector('tbody'); + } + // returns the th element for nth column + function getNthColumn(n) { + return getTableHeader().querySelectorAll('th')[n]; + } + + // loads all columns + function loadColumns() { + var colNodes = getTableHeader().querySelectorAll('th'), + colNode, + cols = [], + col, + i; + + for (i = 0; i < colNodes.length; i += 1) { + colNode = colNodes[i]; + col = { + key: colNode.getAttribute('data-col'), + sortable: !colNode.getAttribute('data-nosort'), + type: colNode.getAttribute('data-type') || 'string' + }; + cols.push(col); + if (col.sortable) { + col.defaultDescSort = col.type === 'number'; + colNode.innerHTML = + colNode.innerHTML + ''; + } + } + return cols; + } + // attaches a data attribute to every tr element with an object + // of data values keyed by column name + function loadRowData(tableRow) { + var tableCols = tableRow.querySelectorAll('td'), + colNode, + col, + data = {}, + i, + val; + for (i = 0; i < tableCols.length; i += 1) { + colNode = tableCols[i]; + col = cols[i]; + val = colNode.getAttribute('data-value'); + if (col.type === 'number') { + val = Number(val); + } + data[col.key] = val; + } + return data; + } + // loads all row data + function loadData() { + var rows = getTableBody().querySelectorAll('tr'), + i; + + for (i = 0; i < rows.length; i += 1) { + rows[i].data = loadRowData(rows[i]); + } + } + // sorts the table using the data for the ith column + function sortByIndex(index, desc) { + var key = cols[index].key, + sorter = function(a, b) { + a = a.data[key]; + b = b.data[key]; + return a < b ? -1 : a > b ? 1 : 0; + }, + finalSorter = sorter, + tableBody = document.querySelector('.coverage-summary tbody'), + rowNodes = tableBody.querySelectorAll('tr'), + rows = [], + i; + + if (desc) { + finalSorter = function(a, b) { + return -1 * sorter(a, b); + }; + } + + for (i = 0; i < rowNodes.length; i += 1) { + rows.push(rowNodes[i]); + tableBody.removeChild(rowNodes[i]); + } + + rows.sort(finalSorter); + + for (i = 0; i < rows.length; i += 1) { + tableBody.appendChild(rows[i]); + } + } + // removes sort indicators for current column being sorted + function removeSortIndicators() { + var col = getNthColumn(currentSort.index), + cls = col.className; + + cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); + col.className = cls; + } + // adds sort indicators for current column being sorted + function addSortIndicators() { + getNthColumn(currentSort.index).className += currentSort.desc + ? ' sorted-desc' + : ' sorted'; + } + // adds event listeners for all sorter widgets + function enableUI() { + var i, + el, + ithSorter = function ithSorter(i) { + var col = cols[i]; + + return function() { + var desc = col.defaultDescSort; + + if (currentSort.index === i) { + desc = !currentSort.desc; + } + sortByIndex(i, desc); + removeSortIndicators(); + currentSort.index = i; + currentSort.desc = desc; + addSortIndicators(); + }; + }; + for (i = 0; i < cols.length; i += 1) { + if (cols[i].sortable) { + // add the click event handler on the th so users + // dont have to click on those tiny arrows + el = getNthColumn(i).querySelector('.sorter').parentElement; + if (el.addEventListener) { + el.addEventListener('click', ithSorter(i)); + } else { + el.attachEvent('onclick', ithSorter(i)); + } + } + } + } + // adds sorting functionality to the UI + return function() { + if (!getTable()) { + return; + } + cols = loadColumns(); + loadData(); + addSortIndicators(); + enableUI(); + }; +})(); + +window.addEventListener('load', addSorting); diff --git a/node_modules/strong-soap/coverage/strong-soap/index.html b/node_modules/strong-soap/coverage/strong-soap/index.html new file mode 100644 index 00000000..57422159 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/index.html @@ -0,0 +1,97 @@ + + + + Code coverage report for strong-soap + + + + + + + +
+
+

+ All files strong-soap +

+
+
+ 100% + Statements + 9/9 +
+
+ 50% + Branches + 1/2 +
+
+ 100% + Functions + 0/0 +
+
+ 100% + Lines + 9/9 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
index.js
100%9/950%1/2100%0/0100%9/9
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/index.js.html b/node_modules/strong-soap/coverage/strong-soap/index.js.html new file mode 100644 index 00000000..aed5335e --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/index.js.html @@ -0,0 +1,153 @@ + + + + Code coverage report for strong-soap/index.js + + + + + + + +
+
+

+ All files / strong-soap index.js +

+
+
+ 100% + Statements + 9/9 +
+
+ 50% + Branches + 1/2 +
+
+ 100% + Functions + 0/0 +
+
+ 100% + Lines + 9/9 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29  +  +  +  +  +  +  +1x +1x +1x +1x +1x +  +  +1x +  +1x +  +  +  +  +  +  +1x +8x +  +  +  + 
// Copyright IBM Corp. 2011,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var base = './lib/';
+var nodeVersion = process.versions.node;
+var major = Number(nodeVersion.split('.')[0]);
+Eif (major >= 4) {
+  base = './src/';
+}
+ 
+var securityModules = require(base + 'security/index');
+ 
+module.exports = {
+  'soap': require(base + 'soap'),
+  'http': require(base + 'http'),
+  'QName': require(base + 'parser/qname'),
+  'WSDL': require(base + 'parser/wsdl'),
+};
+ 
+for (var i in securityModules) {
+  module.exports[i] = securityModules[i];
+}
+ 
+ 
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/lib/globalize.js.html b/node_modules/strong-soap/coverage/strong-soap/lib/globalize.js.html new file mode 100644 index 00000000..b0924cc7 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/lib/globalize.js.html @@ -0,0 +1,102 @@ + + + + Code coverage report for strong-soap/lib/globalize.js + + + + + + + +
+
+

+ All files / strong-soap/lib globalize.js +

+
+
+ 100% + Statements + 4/4 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 0/0 +
+
+ 100% + Lines + 4/4 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12  +  +  +  +  +  +  +1x +1x +  +1x +1x
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var path = require('path');
+var SG = require('strong-globalize');
+ 
+SG.SetRootDir(path.join(__dirname, '..'), { autonomousMsgLoading: 'all' });
+module.exports = SG();
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/lib/index.html b/node_modules/strong-soap/coverage/strong-soap/lib/index.html new file mode 100644 index 00000000..fa24427f --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/lib/index.html @@ -0,0 +1,97 @@ + + + + Code coverage report for strong-soap/lib + + + + + + + +
+
+

+ All files strong-soap/lib +

+
+
+ 100% + Statements + 4/4 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 0/0 +
+
+ 100% + Lines + 4/4 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
globalize.js
100%4/4100%0/0100%0/0100%4/4
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/lib/parser/helper.js.html b/node_modules/strong-soap/coverage/strong-soap/lib/parser/helper.js.html new file mode 100644 index 00000000..196837b5 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/lib/parser/helper.js.html @@ -0,0 +1,549 @@ + + + + Code coverage report for strong-soap/lib/parser/helper.js + + + + + + + +
+
+

+ All files / strong-soap/lib/parser helper.js +

+
+
+ 39.13% + Statements + 18/46 +
+
+ 0% + Branches + 0/28 +
+
+ 0% + Functions + 0/8 +
+
+ 41.86% + Lines + 18/43 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +1x +19x +  +1x +25x +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +  +  +  +  +  +  +  +1x +  +1x +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +1x +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x
// Copyright IBM Corp. 2016,2019. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+// Primitive data types
+ 
+var primitiveDataTypes = {
+  string: String,
+  boolean: Boolean,
+  decimal: Number,
+  float: Number,
+  double: Number,
+  duration: Number,
+  dateTime: Date,
+  time: Date,
+  date: Date,
+  gYearMonth: Number,
+  gYear: Number,
+  gMonthDay: Number,
+  gDay: Number,
+  gMonth: Number,
+  hexBinary: String,
+  base64Binary: String,
+  anyURI: String,
+  QName: String,
+  NOTATION: String
+};
+ 
+// Derived data types
+var derivedDataTypes = {
+  normalizedString: String,
+  token: String,
+  language: String,
+  NMTOKEN: String,
+  NMTOKENS: String,
+  Name: String,
+  NCName: String,
+  ID: String,
+  IDREF: String,
+  IDREFS: String,
+  ENTITY: String,
+  ENTITIES: String,
+  integer: Number,
+  nonPositiveInteger: Number,
+  negativeInteger: Number,
+  long: Number,
+  int: Number,
+  short: Number,
+  byte: Number,
+  nonNegativeInteger: Number,
+  unsignedLong: Number,
+  unsignedInt: Number,
+  unsignedShort: Number,
+  unsignedByte: Number,
+  positiveInteger: Number
+};
+ 
+// Built-in data types
+var schemaTypes = {};
+ 
+for (let s in primitiveDataTypes) {
+  schemaTypes[s] = primitiveDataTypes[s];
+}
+for (let s in derivedDataTypes) {
+  schemaTypes[s] = derivedDataTypes[s];
+}
+ 
+var namespaces = {
+  wsdl: 'http://schemas.xmlsoap.org/wsdl/',
+  soap: 'http://schemas.xmlsoap.org/wsdl/soap/',
+  soap12: 'http://schemas.xmlsoap.org/wsdl/soap12/',
+  http: 'http://schemas.xmlsoap.org/wsdl/http/',
+  mime: 'http://schemas.xmlsoap.org/wsdl/mime/',
+  soapenc: 'http://schemas.xmlsoap.org/soap/encoding/',
+  soapenv: 'http://schemas.xmlsoap.org/soap/envelope/',
+  xsi_rc: 'http://www.w3.org/2000/10/XMLSchema-instance',
+  xsd_rc: 'http://www.w3.org/2000/10/XMLSchema',
+  xsd: 'http://www.w3.org/2001/XMLSchema',
+  xsi: 'http://www.w3.org/2001/XMLSchema-instance',
+  xml: 'http://www.w3.org/XML/1998/namespace'
+};
+ 
+function xmlEscape(obj) {
+  if (typeof obj === 'string') {
+    if (obj.substr(0, 9) === '<![CDATA[' && obj.substr(-3) === "]]>") {
+      return obj;
+    }
+    return obj.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&apos;');
+  }
+ 
+  return obj;
+}
+ 
+var crypto = require('crypto');
+exports.passwordDigest = function passwordDigest(nonce, created, password) {
+  // digest = base64 ( sha1 ( nonce + created + password ) )
+  var pwHash = crypto.createHash('sha1');
+  var rawNonce = Buffer.from(nonce || '', 'base64').toString('binary');
+  pwHash.update(rawNonce + created + password);
+  return pwHash.digest('base64');
+};
+ 
+var EMPTY_PREFIX = ''; // Prefix for targetNamespace
+ 
+exports.EMPTY_PREFIX = EMPTY_PREFIX;
+ 
+/**
+ * Find a key from an object based on the value
+ * @param {Object} Namespace prefix/uri mapping
+ * @param {*} nsURI value
+ * @returns {String} The matching key
+ */
+exports.findPrefix = function (xmlnsMapping, nsURI) {
+  for (var n in xmlnsMapping) {
+    if (n === EMPTY_PREFIX) continue;
+    if (xmlnsMapping[n] === nsURI) return n;
+  }
+};
+ 
+exports.extend = function extend(base, obj) {
+  if (base !== null && typeof base === "object" && obj !== null && typeof obj === "object") {
+    Object.keys(obj).forEach(function (key) {
+      if (!base.hasOwnProperty(key)) base[key] = obj[key];
+    });
+  }
+  return base;
+};
+ 
+exports.schemaTypes = schemaTypes;
+exports.xmlEscape = xmlEscape;
+exports.namespaces = namespaces;
+ 
+class _Set {
+  constructor() {
+    this.set = typeof Set === 'function' ? new Set() : [];
+  }
+ 
+  add(val) {
+    if (Array.isArray(this.set)) {
+      if (this.set.indexOf(val) === -1) {
+        this.set.push(val);
+      }
+    } else {
+      this.set.add(val);
+    }
+    return this;
+  }
+ 
+  has(val) {
+    if (Array.isArray(this.set)) {
+      return this.set.indexOf(val) !== -1;
+    } else {
+      return this.set.has(val);
+    }
+  }
+}
+ 
+exports.Set = _Set;
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/lib/parser/index.html b/node_modules/strong-soap/coverage/strong-soap/lib/parser/index.html new file mode 100644 index 00000000..ae862b62 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/lib/parser/index.html @@ -0,0 +1,136 @@ + + + + Code coverage report for strong-soap/lib/parser + + + + + + + +
+
+

+ All files strong-soap/lib/parser +

+
+
+ 11.35% + Statements + 80/705 +
+
+ 2.2% + Branches + 12/545 +
+
+ 9.84% + Functions + 6/61 +
+
+ 11.83% + Lines + 80/676 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
helper.js
39.13%18/460%0/280%0/841.86%18/43
nscontext.js
1.12%1/890%0/700%0/161.14%1/88
qname.js
10.81%4/370%0/320%0/310.81%4/37
xmlHandler.js
10.69%57/5332.89%12/41517.65%6/3411.22%57/508
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/lib/parser/nscontext.js.html b/node_modules/strong-soap/coverage/strong-soap/lib/parser/nscontext.js.html new file mode 100644 index 00000000..d63b1a7a --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/lib/parser/nscontext.js.html @@ -0,0 +1,966 @@ + + + + Code coverage report for strong-soap/lib/parser/nscontext.js + + + + + + + +
+
+

+ All files / strong-soap/lib/parser nscontext.js +

+
+
+ 1.12% + Statements + 1/89 +
+
+ 0% + Branches + 0/70 +
+
+ 0% + Functions + 0/16 +
+
+ 1.14% + Lines + 1/88 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x
// Copyright IBM Corp. 2016. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+/**
+ * Scope for XML namespaces
+ * @param {NamespaceScope} [parent] Parent scope
+ * @returns {NamespaceScope}
+ * @constructor
+ */
+ 
+class NamespaceScope {
+  constructor(parent) {
+    this.parent = parent;
+    this.namespaces = {};
+    this.prefixCount = 0;
+  }
+ 
+  /**
+   * Look up the namespace URI by prefix
+   * @param {String} prefix Namespace prefix
+   * @param {Boolean} [localOnly] Search current scope only
+   * @returns {String} Namespace URI
+   */
+  getNamespaceURI(prefix, localOnly) {
+    switch (prefix) {
+      case 'xml':
+        return 'http://www.w3.org/XML/1998/namespace';
+      case 'xmlns':
+        return 'http://www.w3.org/2000/xmlns/';
+      default:
+        var nsURI = this.namespaces[prefix];
+        /*jshint -W116 */
+        if (nsURI != null) {
+          return nsURI.uri;
+        } else if (!localOnly && this.parent) {
+          return this.parent.getNamespaceURI(prefix);
+        } else {
+          return null;
+        }
+    }
+  }
+ 
+  getNamespaceMapping(prefix) {
+    switch (prefix) {
+      case 'xml':
+        return {
+          uri: 'http://www.w3.org/XML/1998/namespace',
+          prefix: 'xml',
+          declared: true
+        };
+      case 'xmlns':
+        return {
+          uri: 'http://www.w3.org/2000/xmlns/',
+          prefix: 'xmlns',
+          declared: true
+        };
+      default:
+        var mapping = this.namespaces[prefix];
+        /*jshint -W116 */
+        if (mapping != null) {
+          return mapping;
+        } else if (this.parent) {
+          return this.parent.getNamespaceMapping(prefix);
+        } else {
+          return null;
+        }
+    }
+  }
+ 
+  /**
+   * Look up the namespace prefix by URI
+   * @param {String} nsURI Namespace URI
+   * @param {Boolean} [localOnly] Search current scope only
+   * @returns {String} Namespace prefix
+   */
+  getPrefix(nsURI, localOnly) {
+    switch (nsURI) {
+      case 'http://www.w3.org/XML/1998/namespace':
+        return 'xml';
+      case 'http://www.w3.org/2000/xmlns/':
+        return 'xmlns';
+      default:
+        for (var p in this.namespaces) {
+          if (this.namespaces[p].uri === nsURI) {
+            return p;
+          }
+        }
+        if (!localOnly && this.parent) {
+          return this.parent.getPrefix(nsURI);
+        } else {
+          return null;
+        }
+    }
+  }
+ 
+  /**
+   * Look up the namespace prefix by URI
+   * @param {String} nsURI Namespace URI
+   * @param {Boolean} [localOnly] Search current scope only
+   * @returns {String} Namespace prefix
+   */
+  getPrefixMapping(nsURI, localOnly) {
+    switch (nsURI) {
+      case 'http://www.w3.org/XML/1998/namespace':
+        return 'xml';
+      case 'http://www.w3.org/2000/xmlns/':
+        return 'xmlns';
+      default:
+        for (var p in this.namespaces) {
+          if (this.namespaces[p].uri === nsURI && this.namespaces[p].declared === true) {
+            return this.namespaces[p];
+          }
+        }
+        if (!localOnly && this.parent) {
+          return this.parent.getPrefixMapping(nsURI);
+        } else {
+          return null;
+        }
+    }
+  }
+ 
+  /**
+   * Generate a new prefix that is not mapped to any uris
+   * @param base {string} The base for prefix
+   * @returns {string}
+   */
+  generatePrefix(base) {
+    base = base || 'ns';
+    while (true) {
+      let prefix = 'ns' + ++this.prefixCount;
+      if (!this.getNamespaceURI(prefix)) {
+        // The prefix is not used
+        return prefix;
+      }
+    }
+  }
+}
+ 
+/**
+ * Namespace context that manages hierarchical scopes
+ * @returns {NamespaceContext}
+ * @constructor
+ */
+class NamespaceContext {
+  constructor() {
+    this.scopes = [];
+    this.pushContext();
+  }
+ 
+  /**
+   * Add a prefix/URI namespace mapping
+   * @param {String} prefix Namespace prefix
+   * @param {String} nsURI Namespace URI
+   * @param {Boolean} [localOnly] Search current scope only
+   * @returns {boolean} true if the mapping is added or false if the mapping
+   * already exists
+   */
+  addNamespace(prefix, nsURI, localOnly) {
+    if (this.getNamespaceURI(prefix, localOnly) === nsURI) {
+      return false;
+    }
+    if (this.currentScope) {
+      this.currentScope.namespaces[prefix] = {
+        uri: nsURI,
+        prefix: prefix,
+        declared: false
+      };
+      return true;
+    }
+    return false;
+  }
+ 
+  /**
+   * Push a scope into the context
+   * @returns {NamespaceScope} The current scope
+   */
+  pushContext() {
+    var scope = new NamespaceScope(this.currentScope);
+    this.scopes.push(scope);
+    this.currentScope = scope;
+    return scope;
+  }
+ 
+  /**
+   * Pop a scope out of the context
+   * @returns {NamespaceScope} The removed scope
+   */
+  popContext() {
+    var scope = this.scopes.pop();
+    if (scope) {
+      this.currentScope = scope.parent;
+    } else {
+      this.currentScope = null;
+    }
+    return scope;
+  }
+ 
+  /**
+   * Look up the namespace URI by prefix
+   * @param {String} prefix Namespace prefix
+   * @param {Boolean} [localOnly] Search current scope only
+   * @returns {String} Namespace URI
+   */
+  getNamespaceURI(prefix, localOnly) {
+    return this.currentScope && this.currentScope.getNamespaceURI(prefix, localOnly);
+  }
+ 
+  /**
+   * Look up the namespace prefix by URI
+   * @param {String} nsURI Namespace URI
+   * @param {Boolean} [localOnly] Search current scope only
+   * @returns {String} Namespace prefix
+   */
+  getPrefix(nsURI, localOnly) {
+    return this.currentScope && this.currentScope.getPrefix(nsURI, localOnly);
+  }
+ 
+  /**
+   * Look up the namespace mapping by nsURI
+   * @param {String} nsURI Namespace URI
+   * @returns {String} Namespace mapping
+   */
+  getPrefixMapping(nsURI) {
+    return this.currentScope && this.currentScope.getPrefixMapping(nsURI);
+  }
+ 
+  /**
+   * Generate a new prefix that is not mapped to any uris
+   * @param base {string} The base for prefix
+   * @returns {string}
+   */
+  generatePrefix(base) {
+    return this.currentScope && this.currentScope.generatePrefix(base);
+  }
+ 
+  /**
+   * Register a namespace
+   * @param {String} prefix Namespace prefix
+   * @param {String} nsURI Namespace URI
+   * @returns {Object} The matching or generated namespace mapping
+   */
+  registerNamespace(prefix, nsURI) {
+    var mapping;
+    if (!prefix) {
+      prefix = this.generatePrefix();
+    } else {
+      mapping = this.currentScope.getNamespaceMapping(prefix);
+      if (mapping && mapping.uri === nsURI) {
+        // Found an existing mapping
+        return mapping;
+      }
+    }
+    if (this.getNamespaceURI(prefix)) {
+      // The prefix is already mapped to a different namespace
+      prefix = this.generatePrefix();
+    }
+    if (this.currentScope) {
+      mapping = {
+        uri: nsURI,
+        prefix: prefix,
+        declared: false
+      };
+      this.currentScope.namespaces[prefix] = mapping;
+      return mapping;
+    }
+    return null;
+  }
+ 
+  /**
+   * Declare a namespace prefix/uri mapping
+   * @param {String} prefix Namespace prefix
+   * @param {String} nsURI Namespace URI
+   * @returns {Boolean} true if the declaration is created
+   */
+  declareNamespace(prefix, nsURI) {
+    var mapping = this.registerNamespace(prefix, nsURI);
+    if (!mapping) return null;
+    if (mapping.declared) {
+      return null;
+    }
+    mapping = this.currentScope.namespaces[mapping.prefix];
+    if (mapping) {
+      mapping.declared = true;
+    } else {
+      mapping = {
+        prefix: mapping.prefix,
+        uri: nsURI,
+        declared: true
+      };
+      this.currentScope.namespaces[mapping.prefix] = mapping;
+    }
+    return mapping;
+  }
+}
+ 
+module.exports = NamespaceContext;
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/lib/parser/qname.js.html b/node_modules/strong-soap/coverage/strong-soap/lib/parser/qname.js.html new file mode 100644 index 00000000..db1f12eb --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/lib/parser/qname.js.html @@ -0,0 +1,333 @@ + + + + Code coverage report for strong-soap/lib/parser/qname.js + + + + + + + +
+
+

+ All files / strong-soap/lib/parser qname.js +

+
+
+ 10.81% + Statements + 4/37 +
+
+ 0% + Branches + 0/32 +
+
+ 0% + Functions + 0/3 +
+
+ 10.81% + Lines + 4/37 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89  +  +  +  +  +  +  +1x +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var g = require('../globalize');
+var assert = require('assert');
+var qnameExp = /^(?:\{([^\{\}]*)\})?(?:([^\{\}]+):)?([^\{\}\:]+)$/;
+ 
+class QName {
+  /**
+   * Create a new QName
+   * - new QName(name)
+   * - new QName(nsURI, name)
+   * - new QName(nsURI, name, prefix)
+   *
+   * @param {string} nsURI Namespace URI
+   * @param {string} name Local name
+   * @param {string} prefix Namespace prefix
+   */
+  constructor(nsURI, name, prefix) {
+    if (arguments.length === 1) {
+      assert.equal(typeof nsURI, 'string', 'The qname must be string in form of {nsURI}prefix:name');
+      let qname;
+      if (qname = qnameExp.exec(nsURI)) {
+        this.nsURI = qname[1] || '';
+        this.prefix = qname[2] || '';
+        this.name = qname[3] || '';
+      } else {
+        throw new Error(g.f('Invalid qname: %s', nsURI));
+      }
+    } else {
+      this.nsURI = nsURI || '';
+      this.name = name || '';
+      if (!prefix) {
+        let parts = this.name.split(':');
+        this.name = parts[0];
+        this.prefix = parts[1];
+      } else {
+        this.prefix = prefix || '';
+      }
+    }
+  }
+ 
+  /**
+   * {nsURI}prefix:name
+   * @returns {string}
+   */
+  toString() {
+    var str = '';
+    if (this.nsURI) {
+      str = '{' + this.nsURI + '}';
+    }
+    if (this.prefix) {
+      str += this.prefix + ':';
+    }
+    str += this.name;
+    return str;
+  }
+ 
+  /**
+   * Parse a qualified name (prefix:name)
+   * @param {string} qname Qualified name
+   * @param {string|NamespaceContext} nsURI
+   * @returns {QName}
+   */
+  static parse(qname, nsURI) {
+    qname = qname || '';
+    var result = new QName(qname);
+    var uri;
+    if (nsURI == null) {
+      uri = '';
+    } else if (typeof nsURI === 'string') {
+      uri = nsURI;
+    } else if (typeof nsURI.getNamespaceURI === 'function') {
+      uri = nsURI.getNamespaceURI(result.prefix);
+    } else {
+      uri = '';
+    }
+    if (uri) {
+      result.nsURI = uri;
+    }
+    return result;
+  }
+}
+ 
+module.exports = QName;
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/lib/parser/xmlHandler.js.html b/node_modules/strong-soap/coverage/strong-soap/lib/parser/xmlHandler.js.html new file mode 100644 index 00000000..10f08efb --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/lib/parser/xmlHandler.js.html @@ -0,0 +1,2721 @@ + + + + Code coverage report for strong-soap/lib/parser/xmlHandler.js + + + + + + + +
+
+

+ All files / strong-soap/lib/parser xmlHandler.js +

+
+
+ 10.69% + Statements + 57/533 +
+
+ 2.89% + Branches + 12/415 +
+
+ 17.65% + Functions + 6/34 +
+
+ 11.22% + Lines + 57/508 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377 +378 +379 +380 +381 +382 +383 +384 +385 +386 +387 +388 +389 +390 +391 +392 +393 +394 +395 +396 +397 +398 +399 +400 +401 +402 +403 +404 +405 +406 +407 +408 +409 +410 +411 +412 +413 +414 +415 +416 +417 +418 +419 +420 +421 +422 +423 +424 +425 +426 +427 +428 +429 +430 +431 +432 +433 +434 +435 +436 +437 +438 +439 +440 +441 +442 +443 +444 +445 +446 +447 +448 +449 +450 +451 +452 +453 +454 +455 +456 +457 +458 +459 +460 +461 +462 +463 +464 +465 +466 +467 +468 +469 +470 +471 +472 +473 +474 +475 +476 +477 +478 +479 +480 +481 +482 +483 +484 +485 +486 +487 +488 +489 +490 +491 +492 +493 +494 +495 +496 +497 +498 +499 +500 +501 +502 +503 +504 +505 +506 +507 +508 +509 +510 +511 +512 +513 +514 +515 +516 +517 +518 +519 +520 +521 +522 +523 +524 +525 +526 +527 +528 +529 +530 +531 +532 +533 +534 +535 +536 +537 +538 +539 +540 +541 +542 +543 +544 +545 +546 +547 +548 +549 +550 +551 +552 +553 +554 +555 +556 +557 +558 +559 +560 +561 +562 +563 +564 +565 +566 +567 +568 +569 +570 +571 +572 +573 +574 +575 +576 +577 +578 +579 +580 +581 +582 +583 +584 +585 +586 +587 +588 +589 +590 +591 +592 +593 +594 +595 +596 +597 +598 +599 +600 +601 +602 +603 +604 +605 +606 +607 +608 +609 +610 +611 +612 +613 +614 +615 +616 +617 +618 +619 +620 +621 +622 +623 +624 +625 +626 +627 +628 +629 +630 +631 +632 +633 +634 +635 +636 +637 +638 +639 +640 +641 +642 +643 +644 +645 +646 +647 +648 +649 +650 +651 +652 +653 +654 +655 +656 +657 +658 +659 +660 +661 +662 +663 +664 +665 +666 +667 +668 +669 +670 +671 +672 +673 +674 +675 +676 +677 +678 +679 +680 +681 +682 +683 +684 +685 +686 +687 +688 +689 +690 +691 +692 +693 +694 +695 +696 +697 +698 +699 +700 +701 +702 +703 +704 +705 +706 +707 +708 +709 +710 +711 +712 +713 +714 +715 +716 +717 +718 +719 +720 +721 +722 +723 +724 +725 +726 +727 +728 +729 +730 +731 +732 +733 +734 +735 +736 +737 +738 +739 +740 +741 +742 +743 +744 +745 +746 +747 +748 +749 +750 +751 +752 +753 +754 +755 +756 +757 +758 +759 +760 +761 +762 +763 +764 +765 +766 +767 +768 +769 +770 +771 +772 +773 +774 +775 +776 +777 +778 +779 +780 +781 +782 +783 +784 +785 +786 +787 +788 +789 +790 +791 +792 +793 +794 +795 +796 +797 +798 +799 +800 +801 +802 +803 +804 +805 +806 +807 +808 +809 +810 +811 +812 +813 +814 +815 +816 +817 +818 +819 +820 +821 +822 +823 +824 +825 +826 +827 +828 +829 +830 +831 +832 +833 +834 +835 +836 +837 +838 +839 +840 +841 +842 +843 +844 +845 +846 +847 +848 +849 +850 +851 +852 +853 +854 +855 +856 +857 +858 +859 +860 +861 +862 +863 +864 +865 +866 +867 +868 +869 +870 +871 +872 +873 +874 +875 +876 +877 +878 +879 +880 +881 +882 +883 +884 +885  +  +  +  +  +  +  +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +2x +2x +2x +2x +2x +2x +2x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +1x +1x +1x +  +  +  +  +1x +1x +  +1x +1x +  +1x +  +  +  +  +1x +  +5x +5x +5x +3x +  +  +  +1x +  +  +  +  +  +  +  +1x +  +20x +20x +20x +  +20x +20x +  +  +1x +20x +20x +20x +20x +  +  +1x +1x +  +  +  +  +  +1x +1x +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +1x +1x +1x +1x
// Copyright IBM Corp. 2016,2019. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var xmlBuilder = require('xmlbuilder');
+var sax = require('sax');
+var stream = require('stream');
+var assert = require('assert');
+var selectn = require('selectn');
+var debug = require('debug')('strong-soap:xmlhandler');
+var descriptor = require('./xsd/descriptor');
+var ElementDescriptor = descriptor.ElementDescriptor;
+var AttributeDescriptor = descriptor.AttributeDescriptor;
+var TypeDescriptor = descriptor.TypeDescriptor;
+var QName = require('./qname');
+var helper = require('./helper');
+var NamespaceContext = require('./nscontext');
+ 
+class XMLHandler {
+  constructor(schemas, options) {
+    this.schemas = schemas || {};
+    this.options = options || {};
+    this.options.valueKey = this.options.valueKey || '$value';
+    this.options.xmlKey = this.options.xmlKey || '$xml';
+    this.options.attributesKey = this.options.attributesKey || '$attributes';
+    this.options.xsiTypeKey = this.options.xsiTypeKey || '$xsiType';
+  }
+ 
+  jsonToXml(node, nsContext, descriptor, val) {
+    if (node == null) {
+      node = xmlBuilder.begin({ version: '1.0', encoding: 'UTF-8', standalone: true });
+    }
+    if (nsContext == null) {
+      nsContext = new NamespaceContext();
+    }
+ 
+    var name;
+    let nameSpaceContextCreated = false;
+    if (descriptor instanceof AttributeDescriptor) {
+      val = toXmlDateOrTime(descriptor, val);
+      name = descriptor.qname.name;
+      if (descriptor.form === 'unqualified') {
+        node.attribute(name, val);
+      } else if (descriptor.qname) {
+        let mapping = declareNamespace(nsContext, node, descriptor.qname.prefix, descriptor.qname.nsURI);
+        let prefix = mapping ? mapping.prefix : descriptor.qname.prefix;
+        let attrName = prefix ? prefix + ':' + name : name;
+        node.attribute(attrName, val);
+      }
+      return node;
+    }
+ 
+    if (descriptor instanceof ElementDescriptor) {
+      name = descriptor.qname.name;
+      let isSimple = descriptor.isSimple;
+      let attrs = null;
+      if (descriptor.isMany) {
+        if (Array.isArray(val)) {
+          for (let i = 0, n = val.length; i < n; i++) {
+            node = this.jsonToXml(node, nsContext, descriptor, val[i]);
+          }
+          return node;
+        }
+      }
+      if (val !== null && typeof val === "object") {
+        // check for $attributes field
+        if (typeof val[this.options.attributesKey] !== "undefined") {
+          attrs = val[this.options.attributesKey];
+        }
+        // add any $value field as xml element value
+        if (typeof val[this.options.valueKey] !== "undefined") {
+          val = val[this.options.valueKey];
+        }
+      }
+      let element;
+      let elementName;
+      let xmlns;
+      if (descriptor.form === 'unqualified') {
+        elementName = name;
+        nsContext.pushContext();
+        nameSpaceContextCreated = true;
+      } else if (descriptor.qname) {
+        nsContext.pushContext();
+        nameSpaceContextCreated = true;
+        // get the mapping for the namespace uri
+        let mapping = nsContext.getPrefixMapping(descriptor.qname.nsURI);
+        let newlyDeclared = false;
+        // if namespace not declared, declare it
+        if (mapping === null || mapping.declared === false) {
+          newlyDeclared = true;
+          mapping = declareNamespace(nsContext, null, descriptor.qname.prefix, descriptor.qname.nsURI);
+        }
+        // add the element to a parent node
+        let prefix = mapping ? mapping.prefix : descriptor.qname.prefix;
+        elementName = prefix ? prefix + ':' + name : name;
+        // if namespace is newly declared add the xmlns attribute
+        if (newlyDeclared) {
+          xmlns = prefix ? 'xmlns:' + prefix : 'xmlns';
+        }
+      }
+ 
+      // add the element to a parent node
+      if (isSimple && /<!\[CDATA/.test(val)) {
+        element = node.element(elementName);
+        val = val.replace("<![CDATA[", "");
+        val = val.replace("]]>", "");
+        element.cdata(val);
+      } else if (isSimple && typeof val !== "undefined" && val !== null && typeof val[this.options.xmlKey] !== "undefined") {
+        val = val[this.options.xmlKey];
+        element = node.element(elementName);
+        val = toXmlDateOrTime(descriptor, val);
+        element.raw(val);
+      } else {
+        // Enforce the type restrictions if configured for such
+        if (this.options.enforceRestrictions && descriptor.type) {
+          const schema = this.schemas[descriptor.type.nsURI];
+          if (schema) {
+            const type = schema.simpleTypes[descriptor.type.name];
+            if (type) {
+              const restriction = type.restriction;
+              if (restriction) {
+                val = restriction.enforce(val);
+              }
+            }
+          }
+        }
+        val = toXmlDateOrTime(descriptor, val);
+        element = isSimple ? node.element(elementName, val) : node.element(elementName);
+      }
+ 
+      if (xmlns && descriptor.qname.nsURI) {
+        if (typeof element.attribute === 'function') {
+          element.attribute(xmlns, descriptor.qname.nsURI);
+        }
+      }
+ 
+      if (val == null) {
+        if (descriptor.isNillable) {
+          // Set xsi:nil = true
+          declareNamespace(nsContext, element, 'xsi', helper.namespaces.xsi);
+          if (typeof element.attribute === 'function') {
+            element.attribute('xsi:nil', true);
+          }
+        }
+      }
+ 
+      if (isSimple) {
+        if (attrs !== null) {
+          // add each field in $attributes object as xml element attribute
+          if (typeof attrs === "object") {
+            //add $attributes. Attribute can be an attribute defined in XSD or an xsi:type
+            this.addAttributes(element, nsContext, descriptor, val, attrs);
+          }
+        }
+        if (nameSpaceContextCreated) {
+          nsContext.popContext();
+        }
+        return node;
+      } else if (val != null) {
+ 
+        let attrs = val[this.options.attributesKey];
+        if (typeof attrs === 'object') {
+          for (let p in attrs) {
+            let child = attrs[p];
+            if (p === this.options.xsiTypeKey) {
+              if (descriptor instanceof ElementDescriptor) {
+                if (descriptor.refOriginal) {
+                  if (descriptor.refOriginal.typeDescriptor) {
+                    if (descriptor.refOriginal.typeDescriptor.inheritance) {
+                      let extension = descriptor.refOriginal.typeDescriptor.inheritance[child.type];
+                      if (extension) {
+                        descriptor.elements = descriptor.elements.concat(extension.elements);
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      //val is not an object - simple or date types
+      if (val != null && (typeof val !== 'object' || val instanceof Date)) {
+        // for adding a field value nsContext.popContext() shouldnt be called
+        val = toXmlDateOrTime(descriptor, val);
+        element.text(val);
+        //add $attributes. Attribute can be an attribute defined in XSD or an xsi:type.
+        //e.g of xsi:type <name xmlns=".." xmlns:xsi="..." xmlns:ns="..." xsi:type="ns:string">some name</name>
+        if (attrs != null) {
+          this.addAttributes(element, nsContext, descriptor, val, attrs);
+        }
+        if (nameSpaceContextCreated) {
+          nsContext.popContext();
+        }
+        return node;
+      }
+ 
+      this.mapObject(element, nsContext, descriptor, val, attrs);
+      if (nameSpaceContextCreated) {
+        nsContext.popContext();
+      }
+      return node;
+    }
+ 
+    if (descriptor == null || descriptor === undefined || descriptor instanceof TypeDescriptor) {
+      this.mapObject(node, nsContext, descriptor, val);
+      return node;
+    }
+ 
+    return node;
+  }
+ 
+  /**
+   * Check if the attributes have xsi:type and return the xsi type descriptor if exists
+   * @param {*} descriptor The current descriptor
+   * @param {*} attrs An object of attribute values
+   */
+  getXsiType(descriptor, attrs) {
+    var xsiTypeDescriptor;
+    if (attrs != null && typeof attrs === "object") {
+      for (let p in attrs) {
+        let child = attrs[p];
+        // if field is $xsiType add xsi:type attribute
+        if (p === this.options.xsiTypeKey) {
+          let xsiType;
+          if (typeof child === "object" && typeof child.type !== "undefined") {
+            // $xsiType has two fields - type, xmlns
+            xsiType = QName.parse(child.type, child.xmlns);
+          } else {
+            xsiType = QName.parse(child);
+          }
+          var schema = this.schemas[xsiType.nsURI];
+          if (schema) {
+            var xsiTypeInfo = schema.complexTypes[xsiType.name] || schema.simpleTypes[xsiType.name];
+            // The type might not be described
+            // describe() takes wsdl definitions
+            xsiTypeDescriptor = xsiTypeInfo && xsiTypeInfo.describe({ schemas: this.schemas });
+          }
+          break;
+        }
+      }
+    }
+    return xsiTypeDescriptor;
+  }
+ 
+  _sortKeys(val, elementOrder) {
+    function compare(n1, n2, order) {
+      let i1 = order.indexOf(n1);
+      if (i1 === -1) i1 = order.length;
+      let i2 = order.indexOf(n2);
+      if (i2 === -1) i2 = order.length;
+      return i1 - i2;
+    }
+    const keys = Object.keys(val);
+    var names = [].concat(keys).sort((n1, n2) => {
+      let result = compare(n1, n2, elementOrder);
+      if (result === 0) {
+        result = compare(n1, n2, keys);
+      }
+      return result;
+    });
+    return names;
+  }
+ 
+  /**
+   * Map a JSON object into an XML type
+   * @param {XMLElement} node The root node
+   * @param {NamespaceContext} nsContext Namespace context
+   * @param {TypeDescriptor|ElementDescriptor} descriptor
+   * @param {Object} val
+   * @returns {*}
+   */
+  mapObject(node, nsContext, descriptor, val, attrs) {
+    if (val == null) return node;
+    if (typeof val !== 'object' || val instanceof Date) {
+      val = toXmlDateOrTime(descriptor, val);
+      node.text(val);
+      return node;
+    }
+ 
+    // First try to see if a subtype should be used
+    var xsiType = this.getXsiType(descriptor, attrs);
+    descriptor = xsiType || descriptor;
+ 
+    var elements = {},
+        attributes = {};
+    var elementOrder = [];
+    if (descriptor != null) {
+      for (let i = 0, n = descriptor.elements.length; i < n; i++) {
+        let elementDescriptor = descriptor.elements[i];
+        let elementName = elementDescriptor.qname.name;
+        elements[elementName] = elementDescriptor;
+        elementOrder.push(elementName);
+      }
+    }
+ 
+    if (descriptor != null) {
+      for (let a in descriptor.attributes) {
+        let attributeDescriptor = descriptor.attributes[a];
+        let attributeName = attributeDescriptor.qname.name;
+        attributes[attributeName] = attributeDescriptor;
+      }
+    }
+ 
+    // handle later if value is an array
+    if (!Array.isArray(val)) {
+      const names = this._sortKeys(val, elementOrder);
+      var _iteratorNormalCompletion = true;
+      var _didIteratorError = false;
+      var _iteratorError = undefined;
+ 
+      try {
+        for (var _iterator = names[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+          let p = _step.value;
+ 
+          if (p === this.options.attributesKey) continue;
+          let child = val[p];
+          let childDescriptor = elements[p] || attributes[p];
+          if (childDescriptor == null) {
+            if (this.options.ignoreUnknownProperties) continue;else childDescriptor = new ElementDescriptor(QName.parse(p), null, 'unqualified', Array.isArray(child));
+          }
+          if (childDescriptor) {
+            this.jsonToXml(node, nsContext, childDescriptor, child);
+          }
+        }
+      } catch (err) {
+        _didIteratorError = true;
+        _iteratorError = err;
+      } finally {
+        try {
+          if (!_iteratorNormalCompletion && _iterator.return) {
+            _iterator.return();
+          }
+        } finally {
+          if (_didIteratorError) {
+            throw _iteratorError;
+          }
+        }
+      }
+    }
+ 
+    this.addAttributes(node, nsContext, descriptor, val, attrs);
+ 
+    return node;
+  }
+ 
+  addAttributes(node, nsContext, descriptor, val, attrs) {
+    var attrDescriptors = descriptor && descriptor.attributes || [];
+    var attributes = {};
+    for (var i = 0; i < attrDescriptors.length; i++) {
+      var qname = attrDescriptors[i].qname;
+      attributes[qname.name] = attrDescriptors[i];
+    }
+    if (attrs != null && typeof attrs === 'object') {
+      for (let p in attrs) {
+        let child = attrs[p];
+        // if field is $xsiType add xsi:type attribute
+        if (p === this.options.xsiTypeKey) {
+          let xsiType;
+          if (typeof child === 'object' && typeof child.type !== 'undefined') {
+            // $xsiType has two fields - type, xmlns
+            xsiType = QName.parse(child.type, child.xmlns);
+          } else {
+            xsiType = QName.parse(child);
+          }
+          declareNamespace(nsContext, node, 'xsi', helper.namespaces.xsi);
+          let mapping = declareNamespace(nsContext, node, xsiType.prefix, xsiType.nsURI);
+          let prefix = mapping ? mapping.prefix : xsiType.prefix;
+          node.attribute('xsi:type', prefix ? prefix + ':' + xsiType.name : xsiType.name);
+          continue;
+        }
+        let childDescriptor = attributes[p];
+        if (childDescriptor == null) {
+          if (this.options.ignoreUnknownProperties) continue;else {
+            childDescriptor = new AttributeDescriptor(QName.parse(p), null, 'unqualified');
+          }
+        }
+        this.jsonToXml(node, nsContext, childDescriptor, child);
+      }
+    }
+  }
+ 
+  static createSOAPEnvelope(prefix, nsURI) {
+    prefix = prefix || 'soap';
+    var doc = xmlBuilder.create(prefix + ':Envelope', { version: '1.0', encoding: 'UTF-8', standalone: true });
+    nsURI = nsURI || 'http://schemas.xmlsoap.org/soap/envelope/';
+    doc.attribute('xmlns:' + prefix, nsURI);
+    let header = doc.element(prefix + ':Header');
+    let body = doc.element(prefix + ':Body');
+    return {
+      body: body,
+      header: header,
+      doc: doc
+    };
+  }
+ 
+  static createSOAPEnvelopeDescriptor(prefix, nsURI, parameterDescriptor) {
+    prefix = prefix || 'soap';
+    nsURI = nsURI || 'http://schemas.xmlsoap.org/soap/envelope/';
+    var descriptor = new TypeDescriptor();
+ 
+    var envelopeDescriptor = new ElementDescriptor(new QName(nsURI, 'Envelope', prefix), null, 'qualified', false);
+    descriptor.addElement(envelopeDescriptor);
+ 
+    var headerDescriptor = new ElementDescriptor(new QName(nsURI, 'Header', prefix), null, 'qualified', false);
+ 
+    var bodyDescriptor = new ElementDescriptor(new QName(nsURI, 'Body', prefix), null, 'qualified', false);
+ 
+    envelopeDescriptor.addElement(headerDescriptor);
+    envelopeDescriptor.addElement(bodyDescriptor);
+ 
+    if (parameterDescriptor && parameterDescriptor.body) {
+      bodyDescriptor.add(parameterDescriptor.body);
+    }
+ 
+    if (parameterDescriptor && parameterDescriptor.headers) {
+      bodyDescriptor.add(parameterDescriptor.headers);
+    }
+ 
+    if (parameterDescriptor && parameterDescriptor.faults) {
+      var xsdStr = new QName(helper.namespaces.xsd, 'string', 'xsd');
+      var faultDescriptor = new ElementDescriptor(new QName(nsURI, 'Fault', prefix), null, 'qualified', false);
+      faultDescriptor.addElement(new ElementDescriptor(nsURI, 'faultcode', xsdStr, 'qualified', false));
+      faultDescriptor.addElement(new ElementDescriptor(nsURI, 'faultstring', xsdStr, 'qualified', false));
+      faultDescriptor.addElement(new ElementDescriptor(nsURI, 'faultactor', xsdStr, 'qualified', false));
+      var detailDescriptor = new ElementDescriptor(nsURI, 'detail', null, 'qualified', false);
+      faultDescriptor.addElement(detailDescriptor);
+ 
+      for (var f in parameterDescriptor.faults) {
+        detailDescriptor.add(parameterDescriptor.faults[f]);
+      }
+    }
+ 
+    return descriptor;
+  }
+ 
+  /**
+   * Parse XML string or stream into the XMLBuilder tree
+   * @param root The root node
+   * @param xml XML string or stream
+   * @param cb
+   * @returns {*}
+   */
+  static parseXml(root, xml, cb) {
+    let parser;
+    let stringMode = true;
+    debug('XMLHandler parseXML. root: %j xml: %j', root, xml);
+    Eif (typeof xml === 'string') {
+      stringMode = true;
+      parser = sax.parser(true, { opt: { xmlns: true } });
+    } else if (xml instanceof stream.Readable) {
+      stringMode = false;
+      parser = sax.createStream(true, { opt: { xmlns: true } });
+    }
+    Eif (!root) {
+      root = xmlBuilder.begin();
+    }
+    let current = root;
+    let stack = [root];
+ 
+    parser.onerror = function (e) {
+      // an error happened.
+      if (cb) process.nextTick(cb);
+    };
+ 
+    parser.ontext = function (text) {
+      // got some text.  t is the string of text.
+      Iif (current.isDocument) return;
+      text = text.trim();
+      if (text) {
+        current.text(text);
+      }
+    };
+ 
+    parser.oncdata = function (text) {
+      if (current.isDocument) return;
+      text = text.trim();
+      if (text) {
+        current.cdata(text);
+      }
+    };
+ 
+    parser.onopentag = function (node) {
+      // opened a tag.  node has "name" and "attributes"
+      let element = current.element(node.name);
+      Eif (node.attributes) {
+        element.attribute(node.attributes);
+      }
+      stack.push(element);
+      current = element;
+    };
+ 
+    parser.onclosetag = function (nsName) {
+      var top = stack.pop();
+      assert(top === current);
+      assert(top.name === nsName);
+      current = stack[stack.length - 1];
+    };
+ 
+    parser.onend = function () {
+      Iif (cb) process.nextTick(function () {
+        // parser stream is done, and ready to have more stuff written to it.
+        cb && cb(null, root);
+      });
+    };
+ 
+    Eif (stringMode) {
+      parser.write(xml).close();
+    } else {
+      xml.pipe(parser);
+    }
+    return root;
+  }
+ 
+  _processText(top, val) {
+    // The parent element has xsi:nil = true
+    if (top.object === null) return;
+    // Top object has no other elements or attributes
+    if (top.object === undefined) {
+      top.object = val;
+    } else if (top.object.constructor === Object) {
+      // Top object already has attributes or elements
+      let value = top.object[this.options.valueKey];
+      if (value !== undefined) {
+        top.object[this.options.valueKey] = value + val;
+      } else {
+        top.object[this.options.valueKey] = val;
+      }
+    } else {
+      // Top object is other simple types, such as string or date
+      top.object = top.object + val;
+    }
+  }
+ 
+  xmlToJson(nsContext, xml, descriptor) {
+    var self = this;
+    var p = sax.parser(true);
+    nsContext = nsContext || new NamespaceContext();
+    var root = {};
+    var refs = {},
+        id; // {id: {hrefs:[], obj:}, ...}
+    var stack = [{ name: null, object: root, descriptor: descriptor }];
+    var options = this.options;
+ 
+    p.onopentag = function (node) {
+      nsContext.pushContext();
+      var top = stack[stack.length - 1];
+      var descriptor = top.descriptor;
+      var nsName = node.name;
+      var attrs = node.attributes;
+      var obj = undefined;
+      var elementAttributes = null;
+ 
+      // Register namespaces 1st
+      for (let a in attrs) {
+        if (/^xmlns:|^xmlns$/.test(a)) {
+          let prefix = a === 'xmlns' ? '' : a.substring(6);
+          nsContext.addNamespace(prefix, attrs[a]);
+        }
+      }
+ 
+      // Handle regular attributes
+      for (let a in attrs) {
+        if (/^xmlns:|^xmlns$/.test(a)) continue;
+        let qname = QName.parse(a);
+        var isXsiType = false;
+        var xsiType = null;
+        var xsiXmlns = null;
+        if (nsContext.getNamespaceURI(qname.prefix) === helper.namespaces.xsi) {
+          // Handle xsi:*
+          if (qname.name == 'nil') {
+            // xsi:nil
+            if (attrs[a] === 'true') {
+              obj = null;
+            }
+            continue;
+          } else if (qname.name === 'type') {
+            // xsi:type
+            isXsiType = true;
+            xsiType = attrs[a];
+            xsiType = QName.parse(xsiType);
+            attrs[a] = xsiType.name;
+            if (xsiType.prefix) {
+              xsiXmlns = nsContext.getNamespaceURI(xsiType.prefix);
+            }
+          }
+        }
+        let attrName = qname.name;
+        elementAttributes = elementAttributes || {};
+        let attrDescriptor = descriptor && descriptor.findAttribute(qname.name);
+        let attrValue = parseValue(attrs[a], attrDescriptor);
+        // if element attribute is xsi:type add $xsiType field
+        if (isXsiType) {
+          // $xsiType object has two fields - type and xmlns
+          xsiType = {};
+          xsiType.type = attrs[a];
+          xsiType.xmlns = xsiXmlns;
+          elementAttributes[options.xsiTypeKey] = xsiType;
+        } else {
+          elementAttributes[attrName] = attrs[a];
+        }
+      }
+ 
+      if (elementAttributes) {
+        obj = {};
+        obj[self.options.attributesKey] = elementAttributes;
+      }
+ 
+      var elementQName = QName.parse(nsName);
+      elementQName.nsURI = nsContext.getNamespaceURI(elementQName.prefix);
+ 
+      // SOAP href (#id)
+      if (attrs.href != null) {
+        id = attrs.href.substr(1);
+        if (refs[id] === undefined) {
+          refs[id] = { hrefs: [], object: null };
+        }
+        refs[id].hrefs.push({
+          parent: top.object, key: elementQName.name, object: obj
+        });
+      }
+      id = attrs.id;
+      if (id != null) {
+        if (refs[id] === undefined) refs[id] = { hrefs: [], object: null };
+      }
+ 
+      stack.push({
+        name: elementQName.name,
+        object: obj,
+        descriptor: descriptor && descriptor.findElement(elementQName.name),
+        id: attrs.id
+      });
+    };
+ 
+    p.onclosetag = function (nsName) {
+      var elementName = QName.parse(nsName).name;
+      nsContext.popContext();
+      var current = stack.pop();
+      var top = stack[stack.length - 1];
+      if (top.object === undefined) {
+        top.object = {};
+      }
+      if (top.object !== null) {
+        if (typeof top.object === 'object' && elementName in top.object) {
+          // The element exist already, let's create an array
+          let val = top.object[elementName];
+          if (Array.isArray(val)) {
+            // Add to the existing array
+            val.push(current.object);
+          } else {
+            // Convert the element value to an array
+            top.object[elementName] = [val, current.object];
+          }
+        } else {
+          top.object[elementName] = current.object;
+        }
+      }
+      if (current.id != null) {
+        refs[current.id].object = current.object;
+      }
+    };
+ 
+    p.oncdata = function (text) {
+      text = text && text.trim();
+      if (!text.length) return;
+ 
+      if (/<\?xml[\s\S]+\?>/.test(text)) {
+        text = self.xmlToJson(null, text);
+      }
+      // add contents of CDATA to the xml output as a text
+      p.handleJsonObject(text);
+    };
+ 
+    p.handleJsonObject = function (text) {
+      var top = stack[stack.length - 1];
+      self._processText(top, text);
+    };
+ 
+    p.ontext = function (text) {
+      text = text && text.trim();
+      if (!text.length) return;
+ 
+      var top = stack[stack.length - 1];
+      var descriptor = top.descriptor;
+      var value = parseValue(text, descriptor);
+      self._processText(top, value);
+    };
+ 
+    p.write(xml).close();
+ 
+    // merge obj with href
+    var merge = function merge(href, obj) {
+      for (var j in obj) {
+        if (obj.hasOwnProperty(j)) {
+          href.object[j] = obj[j];
+        }
+      }
+    };
+ 
+    // MultiRef support: merge objects instead of replacing
+    for (let n in refs) {
+      var ref = refs[n];
+      for (var i = 0; i < ref.hrefs.length; i++) {
+        merge(ref.hrefs[i], ref.object);
+      }
+    }
+ 
+    if (root.Envelope) {
+      var body = root.Envelope.Body;
+      if (root.Envelope.Body !== undefined && root.Envelope.Body !== null) {
+        if (body.Fault !== undefined && body.Fault !== null) {
+          //check if fault is soap 1.1 fault
+          var errorMessage = getSoap11FaultErrorMessage(body.Fault);
+          //check if fault is soap 1.2 fault
+          if (errorMessage == null) {
+            errorMessage = getSoap12FaultErrorMessage(body.Fault);
+          }
+          //couldn't process error message for neither soap 1.1 nor soap 1.2 fault. Nothing else can be done at this point. Send a generic error message.
+          if (errorMessage == null) {
+            errorMessage = 'Error occurred processing Fault response.';
+          }
+          var error = new Error(errorMessage);
+          error.root = root;
+          throw error;
+        }
+      }
+      return root.Envelope;
+    }
+    return root;
+  }
+ 
+}
+ 
+function getSoap11FaultErrorMessage(faultBody) {
+  var errorMessage = null;
+  var faultcode = selectn('faultcode.$value', faultBody) || selectn('faultcode', faultBody);
+  if (faultcode) {
+    //soap 1.1 fault
+    errorMessage = ' ';
+    //All of the soap 1.1 fault elements should contain string value except detail element which may be a complex type or plain text (string)
+    if (typeof faultcode == 'string') {
+      errorMessage = 'faultcode: ' + faultcode;
+    }
+    var faultstring = selectn('faultstring.$value', faultBody) || selectn('faultstring', faultBody);
+    if (faultstring && typeof faultstring == 'string') {
+      errorMessage = errorMessage + ' faultstring: ' + faultstring;
+    }
+    var faultactor = selectn('faultactor.$value', faultBody) || selectn('faultactor', faultBody);
+    if (faultactor && typeof faultactor == 'string') {
+      errorMessage = errorMessage + ' faultactor: ' + faultactor;
+    }
+    var detail = selectn('detail.$value', faultBody) || selectn('detail', faultBody);
+    if (detail != null) {
+      if (typeof detail == 'string') {
+        //plain text
+        errorMessage = errorMessage + ' detail: ' + detail;
+      } else {
+        //XML type defined in wsdl
+        errorMessage = errorMessage + ' detail: ' + JSON.stringify(detail);
+      }
+    }
+  }
+  return errorMessage;
+}
+ 
+function getSoap12FaultErrorMessage(faultBody) {
+  var errorMessage = null;
+  let code = selectn('Code', faultBody) || selectn('Code', faultBody);
+  if (code) {
+    //soap 1.2 fault elements have child elements. Hence use JSON.stringify to formulate the error message.
+    errorMessage = ' ';
+    errorMessage = errorMessage + 'Code: ' + JSON.stringify(code);
+    var value = selectn('Value.$value', faultBody) || selectn('Value', faultBody);
+    if (value) {
+      errorMessage = errorMessage + ' ' + 'Value: ' + JSON.stringify(value);
+    }
+    var subCode = selectn('Subcode.$value', faultBody) || selectn('Subcode', faultBody);
+    if (subCode) {
+      errorMessage = errorMessage + ' ' + 'Subcode: ' + JSON.stringify(subCode);
+    }
+    var reason = selectn('reason.$value', faultBody) || selectn('Reason', faultBody);
+    if (reason) {
+      errorMessage = errorMessage + ' ' + 'Reason: ' + JSON.stringify(reason);
+    }
+    var node = selectn('Node.$value', faultBody) || selectn('Node', faultBody);
+    if (node) {
+      errorMessage = errorMessage + ' ' + 'Node: ' + JSON.stringify(node);
+    }
+    var role = selectn('Role.$value', faultBody) || selectn('Role', faultBody);
+    if (role) {
+      errorMessage = errorMessage + ' ' + 'Role: ' + JSON.stringify(role);
+    }
+    var detail = selectn('Detail.$value', faultBody) || selectn('Detail', faultBody);
+    if (detail != null) {
+      if (typeof detail == 'string') {
+        //plain text
+        errorMessage = errorMessage + ' Detail: ' + detail;
+      } else {
+        //XML type defined in wsdl
+        errorMessage = errorMessage + ' Detail: ' + JSON.stringify(detail);
+      }
+    }
+  }
+  return errorMessage;
+}
+ 
+function declareNamespace(nsContext, node, prefix, nsURI) {
+  var mapping = nsContext.declareNamespace(prefix, nsURI);
+  if (!mapping) {
+    return false;
+  } else if (node) {
+    if (typeof node.attribute === 'function') {
+      // Some types of node such as XMLDummy does not allow attribute
+      node.attribute('xmlns:' + mapping.prefix, mapping.uri);
+    }
+    return mapping;
+  }
+  return mapping;
+}
+ 
+function parseValue(text, descriptor) {
+  if (typeof text !== 'string') return text;
+  var value = text;
+  var jsType = descriptor && descriptor.jsType;
+  if (jsType === Date) {
+    var dateText = text;
+    // Checks for xs:date with tz, drops the tz 
+    // because xs:date doesn't have a time to offset
+    // and JS Date object doesn't store an arbitrary tz
+    if (dateText.length === 16) {
+      dateText = text.substr(0, 10);
+    }
+    value = new Date(dateText);
+  } else if (jsType === Boolean) {
+    if (text === 'true' || text === '1') {
+      value = true;
+    } else {
+      value = false;
+    }
+  } else if (typeof jsType === 'function') {
+    value = jsType(text);
+  }
+  return value;
+}
+ 
+function toXmlDate(date) {
+  date = new Date(date);
+  var isoStr = date.toISOString();
+  return isoStr.split('T')[0] + 'Z';
+}
+ 
+function toXmlTime(date) {
+  date = new Date(date);
+  var isoStr = date.toISOString();
+  return isoStr.split('T')[1];
+}
+ 
+function toXmlDateTime(date) {
+  date = new Date(date);
+  var isoStr = date.toISOString();
+  return isoStr;
+}
+ 
+function toXmlDateOrTime(descriptor, val) {
+  if (!descriptor || !descriptor.type) return val;
+  if (descriptor.type.name === 'date') {
+    val = toXmlDate(val);
+  } else if (descriptor.type.name === 'time') {
+    val = toXmlTime(val);
+  } else if (descriptor.type.name === 'dateTime') {
+    val = toXmlDateTime(val);
+  }
+  return val;
+}
+ 
+module.exports = XMLHandler;
+ 
+// Exported function for testing
+module.exports.parseValue = parseValue;
+module.exports.toXmlDate = toXmlDate;
+module.exports.toXmlTime = toXmlTime;
+module.exports.toXmlDateTime = toXmlDateTime;
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/lib/parser/xsd/descriptor.js.html b/node_modules/strong-soap/coverage/strong-soap/lib/parser/xsd/descriptor.js.html new file mode 100644 index 00000000..97bb2ad2 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/lib/parser/xsd/descriptor.js.html @@ -0,0 +1,444 @@ + + + + Code coverage report for strong-soap/lib/parser/xsd/descriptor.js + + + + + + + +
+
+

+ All files / strong-soap/lib/parser/xsd descriptor.js +

+
+
+ 4.41% + Statements + 3/68 +
+
+ 0% + Branches + 0/36 +
+
+ 0% + Functions + 0/10 +
+
+ 5.08% + Lines + 3/59 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126  +  +  +  +  +  +  +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var assert = require('assert');
+var QName = require('../qname');
+ 
+/**
+ * Descriptor for an XML attribute
+ */
+class AttributeDescriptor {
+  constructor(qname, type, form) {
+    assert(qname == null || qname instanceof QName, 'Invalid qname: ' + qname);
+    this.qname = qname;
+    this.type = type;
+    form = form || 'qualified';
+    assert(form === 'qualified' || form === 'unqualified', 'Invalid form: ' + form);
+    this.form = form;
+  }
+}
+ 
+/**
+ * Descriptor for an XML type
+ */
+class TypeDescriptor {
+  constructor(qname) {
+    this.elements = [];
+    this.attributes = [];
+  }
+ 
+  addElement(element) {
+    assert(element instanceof ElementDescriptor);
+    this.elements.push(element);
+    return element;
+  }
+ 
+  addAttribute(attribute) {
+    assert(attribute instanceof AttributeDescriptor);
+    this.attributes.push(attribute);
+    return attribute;
+  }
+ 
+  add(item, isMany) {
+    if (item instanceof ElementDescriptor) {
+      this.addElement(item.clone(isMany));
+    } else if (item instanceof AttributeDescriptor) {
+      this.addAttribute(item);
+    } else if (item instanceof TypeDescriptor) {
+      var i, n;
+      for (i = 0, n = item.elements.length; i < n; i++) {
+        this.addElement(item.elements[i]);
+      }
+      for (i = 0, n = item.attributes.length; i < n; i++) {
+        this.addAttribute(item.attributes[i]);
+      }
+      if (item.extension) {
+        this.extension = item.extension;
+      }
+    }
+  }
+ 
+  findElement(name) {
+    for (var i = 0, n = this.elements.length; i < n; i++) {
+      if (this.elements[i].qname.name === name) {
+        return this.elements[i];
+      }
+    }
+    return null;
+  }
+ 
+  findAttribute(name) {
+    for (var i = 0, n = this.attributes.length; i < n; i++) {
+      if (this.attributes[i].qname.name === name) {
+        return this.attributes[i];
+      }
+    }
+    return null;
+  }
+ 
+  find(name) {
+    var element = this.findElement(name);
+    if (element) return element;
+    var attribute = this.findAttribute(name);
+    return attribute;
+  }
+}
+ 
+/**
+ * Descriptor for an XML element
+ */
+class ElementDescriptor extends TypeDescriptor {
+  constructor(qname, type, form, isMany) {
+    super();
+    assert(qname == null || qname instanceof QName, 'Invalid qname: ' + qname);
+    this.qname = qname;
+    this.type = type;
+    form = form || 'qualified';
+    assert(form === 'qualified' || form === 'unqualified', 'Invalid form: ' + form);
+    this.form = form;
+    this.isMany = !!isMany;
+    this.isSimple = false;
+  }
+ 
+  clone(isMany) {
+    // Check if the referencing element or this element has 'maxOccurs>1'
+    isMany = !!isMany || this.isMany;
+    var copy = new ElementDescriptor(this.qname, this.type, this.form, isMany);
+    copy.isNillable = this.isNillable;
+    copy.isSimple = this.isSimple;
+    if (this.jsType) copy.jsType = this.jsType;
+    if (this.elements != null) copy.elements = this.elements;
+    if (this.attributes != null) copy.attributes = this.attributes;
+    if (this.mixed != null) copy.mixed = this.mixed;
+    copy.refOriginal = this;
+    return copy;
+  }
+}
+ 
+module.exports = {
+  ElementDescriptor: ElementDescriptor,
+  AttributeDescriptor: AttributeDescriptor,
+  TypeDescriptor: TypeDescriptor
+};
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/lib/parser/xsd/index.html b/node_modules/strong-soap/coverage/strong-soap/lib/parser/xsd/index.html new file mode 100644 index 00000000..af00184c --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/lib/parser/xsd/index.html @@ -0,0 +1,97 @@ + + + + Code coverage report for strong-soap/lib/parser/xsd + + + + + + + +
+
+

+ All files strong-soap/lib/parser/xsd +

+
+
+ 4.41% + Statements + 3/68 +
+
+ 0% + Branches + 0/36 +
+
+ 0% + Functions + 0/10 +
+
+ 5.08% + Lines + 3/59 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
descriptor.js
4.41%3/680%0/360%0/105.08%3/59
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/base.js.html b/node_modules/strong-soap/coverage/strong-soap/src/base.js.html new file mode 100644 index 00000000..7ebe2470 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/base.js.html @@ -0,0 +1,492 @@ + + + + Code coverage report for strong-soap/src/base.js + + + + + + + +
+
+

+ All files / strong-soap/src base.js +

+
+
+ 95.45% + Statements + 63/66 +
+
+ 81.58% + Branches + 31/38 +
+
+ 92.86% + Functions + 13/14 +
+
+ 95.31% + Lines + 61/64 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142  +  +  +  +  +  +  +1x +1x +1x +1x +1x +  +  +  +228x +228x +228x +228x +228x +228x +  +  +  +15x +15x +  +  +  +7x +7x +  +  +  +  +17x +  +  +  +3x +  +  +  +  +  +  +  +1x +1x +  +  +1x +  +  +  +  +4x +  +  +  +1x +  +  +  +228x +228x +228x +228x +  +  +  +144x +144x +144x +  +144x +144x +144x +144x +  +  +  +  +  +  +  +2x +2x +2x +  +  +  +170x +170x +  +170x +170x +965x +77x +888x +888x +  +  +  +  +  +  +551x +  +337x +69x +268x +5x +263x +  +263x +  +170x +  +  +  +170x +10x +  +10x +5x +2x +2x +  +  +5x +  +  +5x +  +  +  +  +  +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var EventEmitter = require('events').EventEmitter;
+var NamespaceContext = require('./parser/nscontext');
+var SOAPElement = require('./soapModel').SOAPElement;
+var xmlBuilder = require('xmlbuilder');
+var XMLHandler = require('./parser/xmlHandler');
+  
+class Base extends EventEmitter {
+  constructor(wsdl, options) {
+    super();
+    this.wsdl = wsdl;
+    this._initializeOptions(options);
+    this.soapHeaders = [];
+    this.httpHeaders = {};
+    this.bodyAttributes = [];
+  }
+ 
+  addSoapHeader(value, qname) {
+    var header = new SOAPElement(value, qname, null);
+    return this.soapHeaders.push(header) - 1;
+  }
+ 
+  changeSoapHeader(index, value, qname) {
+    var header = new SOAPElement(value, qname, null);
+    this.soapHeaders[index] = header;
+  }
+ 
+ 
+  getSoapHeaders() {
+    return this.soapHeaders;
+  }
+ 
+  clearSoapHeaders() {
+    this.soapHeaders = [];
+  }
+ 
+  setHttpHeader(name, value) {
+    this.httpHeaders[name] = String(value);
+  }
+ 
+  addHttpHeader(name, value) {
+    var val = this.httpHeaders[name];
+    Iif (val != null) {
+      this.httpHeaders[name] = val + ', ' + value;
+    } else {
+      this.httpHeaders[name] = String(value);
+    }
+  }
+ 
+  getHttpHeaders() {
+    return this.httpHeaders;
+  }
+ 
+  clearHttpHeaders() {
+    this.httpHeaders = {};
+  }
+ 
+  _initializeOptions(options) {
+    options = options || {};
+    this.wsdl.options.attributesKey = options.attributesKey || 'attributes';
+    this.wsdl.options.envelopeKey = options.envelopeKey || 'soap';
+    this.wsdl.options.forceSoapVersion = options.forceSoapVersion;
+  }
+ 
+  static createSOAPEnvelope(prefix, nsURI) {
+    prefix = prefix || 'soap';
+    nsURI = nsURI || 'http://schemas.xmlsoap.org/soap/envelope/';
+    var doc = xmlBuilder.create(prefix + ':Envelope',
+      {version: '1.0', encoding: 'UTF-8', standalone: true});
+    doc.attribute('xmlns:' + prefix, nsURI);
+    let header = doc.element(prefix + ':Header');
+    let body = doc.element(prefix + ':Body');
+    return {
+      body: body,
+      header: header,
+      doc: doc
+    };
+  }
+ 
+  findElement(nsURI, name) {
+    var schemas = this.wsdl.definitions.schemas;
+    var schema = schemas[nsURI];
+    return schema && schema.elements[name];
+  }
+ 
+  createNamespaceContext(soapNsPrefix, soapNsURI) {
+    var nsContext = new NamespaceContext();
+    nsContext.declareNamespace(soapNsPrefix, soapNsURI);
+ 
+    var namespaces = this.wsdl.definitions.xmlns || {};
+    for (var prefix in namespaces) {
+      if (prefix === '')
+        continue;
+      var nsURI = namespaces[prefix];
+      switch (nsURI) {
+        case "http://xml.apache.org/xml-soap" : // apachesoap
+        case "http://schemas.xmlsoap.org/wsdl/" : // wsdl
+        case "http://schemas.xmlsoap.org/wsdl/soap/" : // wsdlsoap
+        case "http://schemas.xmlsoap.org/wsdl/soap12/": // wsdlsoap12
+        case "http://schemas.xmlsoap.org/soap/encoding/" : // soapenc
+        case "http://www.w3.org/2001/XMLSchema" : // xsd
+          continue;
+      }
+      if (~nsURI.indexOf('http://schemas.xmlsoap.org/'))
+        continue;
+      if (~nsURI.indexOf('http://www.w3.org/'))
+        continue;
+      Iif (~nsURI.indexOf('http://xml.apache.org/'))
+        continue;
+      nsContext.addNamespace(prefix, nsURI);
+    }
+    return nsContext;
+  }
+ 
+  addSoapHeadersToEnvelope(soapHeaderElement, xmlHandler) {
+    for (let i = 0, n = this.soapHeaders.length; i < n; i++) {
+      let soapHeader = this.soapHeaders[i];
+      let elementDescriptor;
+      if (typeof soapHeader.value === 'object') {
+        if (soapHeader.qname && soapHeader.qname.nsURI) {
+            let element = this.findElement(soapHeader.qname.nsURI, soapHeader.qname.name);
+            elementDescriptor =
+              element && element.describe(this.wsdl.definitions);
+        }
+        xmlHandler.jsonToXml(soapHeaderElement, null, elementDescriptor,
+          soapHeader.value);
+      } else { //soapHeader has XML value
+        XMLHandler.parseXml(soapHeaderElement, soapHeader.xml);
+      }
+    }
+  }
+ 
+}
+ 
+module.exports = Base;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/client.js.html b/node_modules/strong-soap/coverage/strong-soap/src/client.js.html new file mode 100644 index 00000000..22ec6aed --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/client.js.html @@ -0,0 +1,1137 @@ + + + + Code coverage report for strong-soap/src/client.js + + + + + + + +
+
+

+ All files / strong-soap/src client.js +

+
+
+ 92.96% + Statements + 185/199 +
+
+ 81.63% + Branches + 80/98 +
+
+ 85.71% + Functions + 12/14 +
+
+ 92.93% + Lines + 184/198 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357  +  +  +  +  +  +  +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +  +  +  +190x +190x +190x +190x +190x +  +  +  +1x +1x +  +  +  +38x +  +  +  +6x +  +  +  +  +  +  +  +191x +191x +191x +192x +  +  +  +  +192x +192x +192x +201x +  +  +192x +  +  +  +201x +201x +201x +201x +201x +253x +253x +  +201x +  +  +  +253x +  +253x +144x +144x +  +  +144x +1x +1x +1x +143x +1x +1x +1x +1x +142x +2x +2x +2x +  +144x +144x +130x +  +  +  +  +  +  +144x +144x +144x +144x +144x +144x +144x +144x +144x +144x +144x +  +144x +  +  +  +144x +  +144x +144x +  +144x +  +144x +11x +11x +  +  +144x +  +144x +  +144x +144x +  +  +  +  +144x +133x +  +  +144x +  +144x +144x +  +  +144x +  +  +144x +14x +  +  +144x +  +  +  +  +144x +  +  +  +  +144x +5x +5x +  +144x +6x +6x +  +  +  +  +144x +144x +144x +  +144x +144x +  +144x +  +144x +5x +  +  +144x +  +  +144x +268x +268x +268x +1987x +  +  +  +  +144x +268x +268x +268x +1987x +  +  +  +  +144x +144x +  +144x +144x +  +144x +  +  +144x +144x +  +130x +5x +  +  +  +130x +  +130x +2x +  +  +130x +130x +  +130x +  +130x +130x +130x +  +130x +130x +  +130x +  +  +  +  +  +  +  +  +130x +  +  +126x +126x +126x +126x +  +126x +  +126x +8x +  +  +  +  +  +118x +10x +  +108x +  +118x +118x +118x +  +  +  +24x +  +24x +  +  +  +  +  +  +  +  +24x +24x +24x +24x +  +  +94x +  +2x +  +92x +2x +2x +2x +2x +  +  +90x +90x +  +90x +90x +  +  +  +  +90x +38x +  +38x +  +90x +38x +114x +28x +  +  +  +90x +  +90x +  +  +  +  +130x +130x +  +130x +  +  +  +1x + 
// Copyright IBM Corp. 2016,2019. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var g = require('./globalize');
+var HttpClient = require('./http'),
+  assert = require('assert'),
+  xmlBuilder = require('xmlbuilder'),
+  XMLHandler = require('./parser/xmlHandler'),
+  NamespaceContext = require('./parser/nscontext'),
+  Operation = require('./parser/wsdl/operation'),
+  SOAPElement = require('./soapModel').SOAPElement,
+  Base = require('./base'),
+  util = require('util'),
+  _ = require('lodash'),
+  debug = require('debug')('strong-soap:client'),
+  debugDetail = require('debug')('strong-soap:client:detail'),
+  debugSensitive = require('debug')('strong-soap:client:sensitive'),
+  utils = require('./utils');
+ 
+class Client extends Base {
+  constructor(wsdl, endpoint, options) {
+    super(wsdl, options);
+    options = options || {};
+    this.xmlHandler = new XMLHandler(wsdl.definitions.schemas, options);
+    this._initializeServices(endpoint);
+    this.httpClient = options.httpClient || new HttpClient(options);
+  }
+ 
+  setEndpoint(endpoint) {
+    this.endpoint = endpoint;
+    this._initializeServices(endpoint);
+  }
+ 
+  describe() {
+    return this.wsdl.describeServices();
+  }
+ 
+  setSecurity(security) {
+    this.security = security;
+  }
+ 
+  setSOAPAction(soapAction) {
+    this.SOAPAction = soapAction;
+  }
+ 
+  _initializeServices(endpoint) {
+    var definitions = this.wsdl.definitions;
+    var services = definitions.services;
+    for (var name in services) {
+      this[name] = this._defineService(services[name], endpoint);
+    }
+  }
+ 
+  _defineService(service, endpoint) {
+    var ports = service.ports;
+    var def = {};
+    for (var name in ports) {
+      def[name] = this._definePort(ports[name],
+        endpoint ? endpoint : ports[name].location);
+    }
+    return def;
+  }
+ 
+  _definePort(port, endpoint) {
+    var location = endpoint;
+    var binding = port.binding;
+    var operations = binding.operations;
+    var def = {};
+    for (var name in operations) {
+      def[name] = this._defineOperation(operations[name], location);
+      this[name] = def[name];
+    }
+    return def;
+  }
+ 
+  _defineOperation(operation, location) {
+    var self = this;
+    var temp;
+    return function(args, callback, options, extraHeaders) {
+      if (!args) args = {};
+      Iif (typeof args === 'function') {
+        callback = args;
+        args = {};
+      } else if (typeof options === 'function') {
+        temp = callback;
+        callback = options;
+        options = temp;
+      } else if (typeof extraHeaders === 'function') {
+        temp = callback;
+        callback = extraHeaders;
+        extraHeaders = options;
+        options = temp;
+      } else if (typeof callback === 'object') {
+        extraHeaders = options;
+        options = callback;
+        callback = undefined;
+      }
+      callback = callback || utils.createPromiseCallback();
+      self._invoke(operation, args, location, callback, options, extraHeaders);
+      return callback.promise;
+    };
+  }
+ 
+ 
+ 
+  _invoke(operation, args, location, callback, options, extraHeaders) {
+    var self = this,
+      name = operation.$name,
+      input = operation.input,
+      output = operation.output,
+      style = operation.style,
+      defs = this.wsdl.definitions,
+      ns = defs.$targetNamespace,
+      encoding = '',
+      message = '',
+      xml = null,
+      req = null,
+      soapAction,
+      headers = {
+        'Content-Type': 'text/xml; charset=utf-8'
+      };
+ 
+    debug('client request. operation: %s args: %j options: %j extraHeaders: %j', operation.name, args, options, extraHeaders);
+ 
+    var soapNsURI = 'http://schemas.xmlsoap.org/soap/envelope/';
+    var soapNsPrefix = this.wsdl.options.envelopeKey || 'soap';
+ 
+    var soapVersion = this.wsdl.options.forceSoapVersion || operation.soapVersion;
+ 
+    if (soapVersion === '1.2') {
+      headers['Content-Type'] = 'application/soap+xml; charset=utf-8';
+      soapNsURI = 'http://www.w3.org/2003/05/soap-envelope';
+    }
+ 
+    debug('client request. soapNsURI: %s soapNsPrefix: %s ', soapNsURI, soapNsPrefix);
+ 
+    Iif (this.SOAPAction) {
+      soapAction = this.SOAPAction;
+    } else Eif (operation.soapAction != null) {
+      soapAction = operation.soapAction;
+    } else {
+      soapAction = ((ns.lastIndexOf("/") !== ns.length - 1) ? ns + "/" : ns) + name;
+    }
+ 
+    if (soapVersion !== '1.2' || operation.soapActionRequired) {
+      headers.SOAPAction = '"' + soapAction + '"';
+    }
+ 
+    debug('client request. soapAction: %s', soapAction);
+ 
+    options = options || {};
+    debugSensitive('client request. options: %j', options);
+ 
+    //Add extra headers
+    for (var header in this.httpHeaders) {
+      headers[header] = this.httpHeaders[header];
+    }
+    for (var attr in extraHeaders) {
+      headers[attr] = extraHeaders[attr];
+    }
+ 
+    debug('client request. headers: %j', headers);
+ 
+    //Unlike other security objects, NTLMSecurity is passed in through client options rather than client.setSecurity(ntlmSecurity) as some
+    //remote wsdl retrieval needs NTLM authentication before client object gets created. Hence, set NTLMSecurity instance to the client object
+    //so that it will be similar to other security objects from this point onwards.
+    Iif (self.httpClient.options && self.httpClient.options.NTLMSecurity) {
+      self.security = self.httpClient.options.NTLMSecurity;
+    }
+ 
+    // Allow the security object to add headers
+    if (self.security && self.security.addHttpHeaders) {
+      self.security.addHttpHeaders(headers);
+      debugSensitive('client request. options: %j', options);
+    }
+    if (self.security && self.security.addOptions) {
+      self.security.addOptions(options);
+      debugSensitive('client request. options: %j', options);
+    }
+ 
+ 
+ 
+    var nsContext = this.createNamespaceContext(soapNsPrefix, soapNsURI);
+    var xmlHandler = this.xmlHandler || new XMLHandler(this.wsdl.schemas, options);
+    var envelope = Client.createSOAPEnvelope(soapNsPrefix, soapNsURI);
+ 
+    var soapHeaderElement = envelope.header;
+    var soapBodyElement = envelope.body;
+    //add soapHeaders to envelope. Header can be xml, or JSON object which may or may not be described in WSDL/XSD.
+    this.addSoapHeadersToEnvelope(soapHeaderElement, this.xmlHandler);
+ 
+    if (self.security && self.security.addSoapHeaders) {
+      xml = self.security.addSoapHeaders(envelope.header);
+    }
+ 
+    let schemas = defs.schemas;
+ 
+ 
+    for(let uri in schemas) {
+      let complexTypes = schemas[uri].complexTypes;
+      Eif(complexTypes) {
+        for (let type in complexTypes) {
+            complexTypes[type].describe(this.wsdl.definitions);
+        }
+      }
+    }
+ 
+    for(let uri in schemas) {
+      let complexTypes = schemas[uri].complexTypes;
+      Eif(complexTypes) {
+        for (let type in complexTypes) {
+          complexTypes[type].describeChildren(this.wsdl.definitions);
+        }
+      }
+    }
+ 
+    var operationDescriptor = operation.describe(this.wsdl.definitions);
+    debugDetail('client request. operationDescriptor: %j', operationDescriptor);
+ 
+    var inputBodyDescriptor = operationDescriptor.input.body;
+    debug('client request. inputBodyDescriptor: %j', inputBodyDescriptor);
+ 
+    var inputHeadersDescriptor = operationDescriptor.input.headers;
+ 
+ 
+    debug('client request, calling jsonToXml. args: %j', args);
+    xmlHandler.jsonToXml(soapBodyElement, nsContext, inputBodyDescriptor, args);
+ 
+    if (self.security && self.security.postProcess) {
+      self.security.postProcess(envelope.header, envelope.body);
+    }
+ 
+    //Bydefault pretty print is true and request envelope is created with newlines and indentations
+    var prettyPrint = true;
+    //some web services don't accept request envelope with newlines and indentations in which case user has to set {prettyPrint: false} as client option
+    if (self.httpClient.options && self.httpClient.options.prettyPrint !== undefined) {
+      prettyPrint = self.httpClient.options.prettyPrint;
+    }
+ 
+    message = envelope.body.toString({pretty: prettyPrint});
+    xml = envelope.doc.end({pretty: prettyPrint});
+ 
+    debug('Request envelope: %s', xml);
+ 
+    self.lastMessage = message;
+    self.lastRequest = xml;
+    self.lastEndpoint = location;
+ 
+    self.emit('message', message);
+    self.emit('request', xml);
+ 
+    var tryJSONparse = function(body) {
+      try {
+        return JSON.parse(body);
+      }
+      catch (err) {
+        return undefined;
+      }
+    };
+ 
+    req = self.httpClient.request(location, xml, function(err, response, body) {
+      var result;
+      var obj;
+      self.lastResponse = body;
+      self.lastResponseHeaders = response && response.headers;
+      self.lastElapsedTime = response && response.elapsedTime;
+      self.emit('response', body, response);
+ 
+      debug('client response. response: %j body: %j', response, body);
+ 
+      if (err) {
+        callback(err);
+      } else {
+ 
+        //figure out if this is a Fault response or normal output from the server.
+        //There seem to be no good way to figure this out other than
+        //checking for <Fault> element in server response.
+        if (body.indexOf('<soap:Fault>') > -1  || body.indexOf('<Fault>') > -1) {
+          var outputEnvDescriptor = operationDescriptor.faultEnvelope;
+        } else  {
+          var outputEnvDescriptor = operationDescriptor.outputEnvelope;
+        }
+        try {
+          debugDetail('client response. outputEnvDescriptor: %j', outputEnvDescriptor);
+          obj = xmlHandler.xmlToJson(nsContext, body, outputEnvDescriptor);
+        } catch (error) {
+          //  When the output element cannot be looked up in the wsdl and the body is JSON
+          //  instead of sending the error, we pass the body in the response.
+          debug('client response. error message: %s', error.message);
+ 
+          Iif (!output) {
+            debug('client response. output not present');
+            //  If the response is JSON then return it as-is.
+            var json = _.isObject(body) ? body : tryJSONparse(body);
+            if (json) {
+              return callback(null, response, json);
+            }
+          }
+          //Reaches here for Fault processing as well since Fault is thrown as an error in xmlHandler.xmlToJson(..) function.
+          error.response = response;
+          error.body = body;
+          self.emit('soapError', error);
+          return callback(error, response, body);
+        }
+ 
+        if (!output) {
+          // one-way, no output expected
+          return callback(null, null, body, obj.Header);
+        }
+        if (typeof obj.Body !== 'object') {
+          var error = new Error(g.f('Cannot parse response'));
+          error.response = response;
+          error.body = body;
+          return callback(error, obj, body);
+        }
+ 
+        var outputBodyDescriptor = operationDescriptor.output.body;
+        var outputHeadersDescriptor = operationDescriptor.output.headers;
+ 
+        Eif (outputBodyDescriptor.elements.length) {
+          result = obj.Body[outputBodyDescriptor.elements[0].qname.name];
+        }
+        // RPC/literal response body may contain elements with added suffixes I.E.
+        // 'Response', or 'Output', or 'Out'
+        // This doesn't necessarily equal the ouput message name. See WSDL 1.1 Section 2.4.5
+        if (!result) {
+          var outputName = output.$name &&
+            output.$name.replace(/(?:Out(?:put)?|Response)$/, '');
+          result = obj.Body[outputName];
+        }
+        if (!result) {
+          ['Response', 'Out', 'Output'].forEach(function(term) {
+            if (obj.Body.hasOwnProperty(name + term)) {
+              return result = obj.Body[name + term];
+            }
+          });
+        }
+        debug('client response. result: %j body: %j obj.Header: %j', result, body, obj.Header);
+ 
+        callback(null, result, body, obj.Header);
+      }
+    }, headers, options, self);
+ 
+    // Added mostly for testability, but possibly useful for debugging
+    Eif (req != null) {
+      self.lastRequestHeaders = req.headers;
+    }
+    debug('client response. lastRequestHeaders: %j', self.lastRequestHeaders);
+  }
+}
+ 
+module.exports = Client;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/globalize.js.html b/node_modules/strong-soap/coverage/strong-soap/src/globalize.js.html new file mode 100644 index 00000000..07088f5f --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/globalize.js.html @@ -0,0 +1,105 @@ + + + + Code coverage report for strong-soap/src/globalize.js + + + + + + + +
+
+

+ All files / strong-soap/src globalize.js +

+
+
+ 100% + Statements + 4/4 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 0/0 +
+
+ 100% + Lines + 4/4 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13  +  +  +  +  +  +  +1x +1x +  +1x +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var path = require('path');
+var SG = require('strong-globalize');
+ 
+SG.SetRootDir(path.join(__dirname, '..'), {autonomousMsgLoading: 'all'});
+module.exports = SG();
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/http.js.html b/node_modules/strong-soap/coverage/strong-soap/src/http.js.html new file mode 100644 index 00000000..61fb5868 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/http.js.html @@ -0,0 +1,570 @@ + + + + Code coverage report for strong-soap/src/http.js + + + + + + + +
+
+

+ All files / strong-soap/src http.js +

+
+
+ 76.81% + Statements + 53/69 +
+
+ 69.23% + Branches + 27/39 +
+
+ 85.71% + Functions + 6/7 +
+
+ 76.81% + Lines + 53/69 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168  +  +  +  +  +  +  +1x +1x +1x +1x +1x +  +  +1x +  +  +  +  +  +  +  +  +  +  +197x +197x +  +  +  +  +  +  +  +  +  +  +  +141x +141x +141x +141x +141x +141x +141x +  +  +  +  +  +  +  +  +  +141x +  +141x +130x +130x +  +  +141x +141x +263x +  +  +141x +  +  +  +  +  +  +141x +  +141x +141x +73x +6x +6x +  +  +67x +  +  +141x +141x +  +  +  +  +  +  +  +  +  +  +127x +127x +  +  +127x +  +127x +108x +  +  +127x +  +  +  +  +  +138x +138x +  +  +  +  +  +  +  +  +  +138x +138x +138x +  +  +  +  +  +138x +138x +138x +138x +134x +10x +  +124x +124x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +138x +  +  +  +1x + 
// Copyright IBM Corp. 2016. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var url = require('url');
+var req = require('request');
+var debug = require('debug')('strong-soap:http');
+var debugSensitive = require('debug')('strong-soap:http:sensitive');
+var httpntlm = require('httpntlm');
+ 
+ 
+var VERSION = require('../package.json').version;
+ 
+/**
+ * A class representing the http client
+ * @param {Object} [options] Options object. It allows the customization of
+ * `request` module
+ *
+ * @constructor
+ */
+class HttpClient {
+  constructor(options) {
+    this.options = options || {};
+    this._request = options.request || req;
+  }
+ 
+  /**
+   * Build the HTTP request (method, uri, headers, ...)
+   * @param {String} rurl The resource url
+   * @param {Object|String} data The payload
+   * @param {Object} exheaders Extra http headers
+   * @param {Object} exoptions Extra options
+   * @returns {Object} The http request object for the `request` module
+   */
+  buildRequest(rurl, data, exheaders, exoptions) {
+    var curl = url.parse(rurl);
+    var secure = curl.protocol === 'https:';
+    var host = curl.hostname;
+    var port = parseInt(curl.port, 10);
+    var path = [curl.pathname || '/', curl.search || '', curl.hash || ''].join('');
+    var method = data ? 'POST' : 'GET';
+    var headers = {
+      'User-Agent': 'strong-soap/' + VERSION,
+      'Accept': 'text/html,application/xhtml+xml,application/xml,text/xml;q=0.9,*/*;q=0.8',
+      'Accept-Encoding': 'none',
+      'Accept-Charset': 'utf-8',
+      'Connection': 'close',
+      'Host': host + (isNaN(port) ? '' : ':' + port)
+    };
+    var attr;
+    var header;
+    var mergeOptions = ['headers'];
+ 
+    if (typeof data === 'string') {
+      headers['Content-Length'] = Buffer.byteLength(data, 'utf8');
+      headers['Content-Type'] = 'application/x-www-form-urlencoded';
+    }
+ 
+    exheaders = exheaders || {};
+    for (attr in exheaders) {
+      headers[attr] = exheaders[attr];
+    }
+ 
+    var options = {
+      uri: curl,
+      method: method,
+      headers: headers,
+      followAllRedirects: true
+    };
+ 
+    options.body = data;
+ 
+    exoptions = exoptions || {};
+    for (attr in exoptions) {
+      if (mergeOptions.indexOf(attr) !== -1) {
+        for (header in exoptions[attr]) {
+          options[attr][header] = exoptions[attr][header];
+        }
+      } else {
+        options[attr] = exoptions[attr];
+      }
+    }
+    debug('Http request: %j', options);
+    return options;
+  }
+ 
+  /**
+   * Handle the http response
+   * @param {Object} The req object
+   * @param {Object} res The res object
+   * @param {Object} body The http body
+   * @param {Object} The parsed body
+   */
+  handleResponse(req, res, body) {
+    debug('Http response body: %j', body);
+    Eif (typeof body === 'string') {
+      // Remove any extra characters that appear before or after the SOAP
+      // envelope.
+      var match = body.match(
+        /(?:<\?[^?]*\?>[\s]*)?<([^:]*):Envelope([\S\s]*)<\/\1:Envelope>/i);
+      if (match) {
+        body = match[0];
+      }
+    }
+    return body;
+  }
+ 
+  //check if NTLM authentication needed
+  isNtlmAuthRequired(ntlmSecurity, methodName) {
+    //if ntlmSecurity is not set, then remote web service is not NTLM authenticated Web Service
+    Eif (ntlmSecurity == null) {
+      return false;
+    } else if (methodName === 'GET' && (ntlmSecurity.wsdlAuthRequired == null || ntlmSecurity.wsdlAuthRequired === false)) {
+      //In some WebServices, getting remote WSDL is not NTLM authenticated. Only WebService invocation is NTLM authenticated.
+      return false;
+    }
+    //need NTLM authentication for both 'GET' (remote wsdl retrieval) and 'POST' (Web Service invocation)
+    return true;
+  }
+ 
+  request(rurl, data, callback, exheaders, exoptions) {
+    var self = this;
+    var options = self.buildRequest(rurl, data, exheaders, exoptions);
+    var headers = options.headers;
+    var req;
+ 
+    //typically clint.js would do addOptions() if security is set in order to get all security options added to options{}. But client.js
+    //addOptions() code runs after this code is trying to contact server to load remote WSDL, hence we have NTLM authentication
+    //object passed in as option to createClient() call for now. Revisit.
+    var ntlmSecurity = this.options.NTLMSecurity;
+    var ntlmAuth = self.isNtlmAuthRequired(ntlmSecurity, options.method);
+    Eif (!ntlmAuth) {
+      req = self._request(options, function (err, res, body) {
+        if (err) {
+          return callback(err);
+        }
+        body = self.handleResponse(req, res, body);
+        callback(null, res, body);
+      });
+    } else {
+        //httpntlm code needs 'url' in options{}. It should be plain string, not parsed uri
+        options.url = rurl;
+        options.username = ntlmSecurity.username;
+        options.password = ntlmSecurity.password;
+        options.domain = ntlmSecurity.domain;
+        options.workstation = ntlmSecurity.workstation;
+        //httpntlm code uses lower case for method names - 'get', 'post' etc
+        var method = options.method.toLocaleLowerCase();
+        debugSensitive('NTLM options: %j for method: %s', options, method);
+        debug('httpntlm method: %s', method);
+        req = httpntlm['method'](method, options, function (err, res) {
+          if (err) {
+            return callback(err);
+          }
+          var body = self.handleResponse(req, res, res.body);
+          callback(null, res, body);
+        });
+      }
+ 
+    return req;
+  }
+}
+ 
+module.exports = HttpClient;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/index.html b/node_modules/strong-soap/coverage/strong-soap/src/index.html new file mode 100644 index 00000000..2b9e2bd7 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/index.html @@ -0,0 +1,201 @@ + + + + Code coverage report for strong-soap/src + + + + + + + +
+
+

+ All files strong-soap/src +

+
+
+ 87.61% + Statements + 608/694 +
+
+ 71.14% + Branches + 244/343 +
+
+ 86.96% + Functions + 60/69 +
+
+ 87.77% + Lines + 603/687 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
base.js
95.45%63/6681.58%31/3892.86%13/1495.31%61/64
client.js
92.96%185/19981.63%80/9885.71%12/1492.93%184/198
globalize.js
100%4/4100%0/0100%0/0100%4/4
http.js
76.81%53/6969.23%27/3985.71%6/776.81%53/69
server.js
87.01%201/23163.3%69/109100%14/1487.28%199/228
soap.js
96.67%58/6088.89%16/18100%6/696.67%58/60
soapModel.js
52.94%9/1775%6/833.33%1/352.94%9/17
strip-bom.js
83.33%10/1276.92%10/13100%1/183.33%10/12
utils.js
69.44%25/3625%5/2070%7/1071.43%25/35
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/element.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/element.js.html new file mode 100644 index 00000000..fcda119e --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/element.js.html @@ -0,0 +1,804 @@ + + + + Code coverage report for strong-soap/src/parser/element.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser element.js +

+
+
+ 88.1% + Statements + 111/126 +
+
+ 86.49% + Branches + 64/74 +
+
+ 92.31% + Functions + 12/13 +
+
+ 89.43% + Lines + 110/123 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246  +  +  +  +  +  +  +1x +1x +1x +1x +1x +1x +1x +  +1x +1x +  +  +  +  +  +  +132427x +  +132427x +132427x +132427x +132427x +132427x +132427x +132427x +  +132427x +41454x +  +  +  +132427x +  +132427x +259163x +259163x +1951x +  +50x +  +1951x +  +  +  +1951x +  +  +257212x +48978x +  +208234x +  +  +  +132427x +591x +  +  +  +  +132427x +132421x +132421x +132421x +132421x +  +6x +6x +6x +  +  +  +  +65868x +19x +  +  +65849x +  +65849x +65849x +65849x +  +18x +  +  +65849x +65849x +65849x +65849x +65849x +65849x +65849x +  +  +  +  +  +  +66207x +66188x +339x +65849x +65849x +65849x +65849x +65849x +  +65849x +  +  +  +  +  +65849x +65849x +65849x +  +65849x +65849x +65849x +  +  +  +31991x +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +407697x +407697x +407697x +95468x +  +312229x +312219x +  +  +95478x +  +  +  +  +  +  +  +70292x +70131x +161x +85x +  +76x +  +  +  +  +  +  +  +53218x +  +  +  +  +  +  +  +  +  +  +29732x +  +29732x +29732x +103x +29732x +29732x +29732x +  +5553x +  +24179x +24179x +115x +115x +  +24064x +24064x +  +780x +780x +  +23284x +23284x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +24064x +33x +33x +  +24031x +  +  +  +1x +  +  +  +1x +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var g = require('../globalize');
+var assert = require('assert');
+var QName = require('./qname');
+var typeRegistry = require('./typeRegistry');
+var helper = require('./helper');
+var xsd = require('./xsd');
+var debug = require('debug')('strong-soap:wsdl:element');
+ 
+var EMPTY_PREFIX = helper.EMPTY_PREFIX;
+var namespaces = helper.namespaces;
+ 
+/**
+ * Base class for all elements of WSDL/XSD
+ */
+class Element {
+  constructor(nsName, attrs, options) {
+    var qname = QName.parse(nsName);
+ 
+    this.nsName = nsName;
+    this.prefix = qname.prefix;
+    this.name = qname.name;
+    this.nsURI = '';
+    this.parent = null;
+    this.children = [];
+    this.xmlns = {};
+ 
+    if (this.constructor.elementName) {
+      assert(this.name === this.constructor.elementName,
+        'Invalid element name: ' + this.name);
+    }
+ 
+    this._initializeOptions(options);
+ 
+    for (var key in attrs) {
+      var match = /^xmlns:?(.*)$/.exec(key);
+      if (match) {
+        if (attrs[key] === namespaces.xsd_rc) {
+          // Handle http://www.w3.org/2000/10/XMLSchema
+          attrs[key] = namespaces.xsd;
+        }
+        Iif (attrs[key] === namespaces.xsi_rc) {
+          // Handle http://www.w3.org/2000/10/XMLSchema-instance
+          attrs[key] = namespaces.xsi;
+        }
+        this.xmlns[match[1] ? match[1] : EMPTY_PREFIX] = attrs[key];
+      }
+      else {
+        if (key === 'value') {
+          this[this.valueKey] = attrs[key];
+        } else {
+          this['$' + key] = attrs[key];
+        }
+      }
+    }
+    if (this.$targetNamespace) {
+      this.targetNamespace = this.$targetNamespace;
+    }
+  }
+ 
+  _initializeOptions(options) {
+    if (options) {
+      this.valueKey = options.valueKey || '$value';
+      this.xmlKey = options.xmlKey || '$xml';
+      this.ignoredNamespaces = options.ignoredNamespaces || [];
+      this.forceSoapVersion = options.forceSoapVersion;
+    } else {
+      this.valueKey = '$value';
+      this.xmlKey = '$xml';
+      this.ignoredNamespaces = [];
+    }
+  }
+ 
+  startElement(stack, nsName, attrs, options) {
+    if (!this.constructor.allowedChildren)
+      return;
+ 
+    var child;
+    var parent = stack[stack.length - 1];
+ 
+    var qname = this._qnameFor(stack, nsName, attrs, options);
+    var ElementType = typeRegistry.getElementType(qname);
+    if (this.constructor.allowedChildren.indexOf(qname.name) === -1 &&
+      this.constructor.allowedChildren.indexOf('any') === -1) {
+      debug('Element %s is not allowed within %j', qname, this.nsName);
+    }
+    
+    Eif (ElementType) {
+      child = new ElementType(nsName, attrs, options);
+      child.nsURI = qname.nsURI;
+      child.targetNamespace = attrs.targetNamespace || this.getTargetNamespace();
+      debug('Element created: ', child);
+      child.parent = parent;
+      stack.push(child);
+    } else {
+      this.unexpected(nsName);
+    }
+  }
+ 
+  endElement(stack, nsName) {
+    if (this.nsName === nsName) {
+      if (stack.length < 2)
+        return;
+      var parent = stack[stack.length - 2];
+      Eif (this !== stack[0]) {
+        helper.extend(stack[0].xmlns, this.xmlns);
+        parent.children.push(this);
+        parent.addChild(this);
+      }
+      stack.pop();
+    }
+  }
+ 
+  _qnameFor(stack, nsName, attrs, options) {
+    // Create a dummy element to help resolve the XML namespace
+    var child = new Element(nsName, attrs, options);
+    var parent = stack[stack.length - 1];
+    child.parent = parent;
+ 
+    var qname = QName.parse(nsName);
+    qname.nsURI = child.getNamespaceURI(qname.prefix);
+    return qname;
+  }
+ 
+  addChild(child) {
+    return;
+  }
+ 
+  unexpected(name) {
+    throw new Error(g.f('Found unexpected element (%s) inside %s', name, this.nsName));
+  }
+ 
+  describe(definitions) {
+    return this.$name || this.name;
+  }
+ 
+  /**
+   * Look up the namespace by prefix
+   * @param {string} prefix Namespace prefix
+   * @returns {string} Namespace
+   */
+  getNamespaceURI(prefix) {
+    Iif (prefix === 'xml') return helper.namespaces.xml;
+    var nsURI = null;
+    if (this.xmlns && prefix in this.xmlns) {
+      nsURI = this.xmlns[prefix];
+    } else {
+      if (this.parent) {
+        return this.parent.getNamespaceURI(prefix);
+      }
+    }
+    return nsURI;
+  }
+ 
+  /**
+   * Get the target namespace URI
+   * @returns {string} Target namespace URI
+   */
+  getTargetNamespace() {
+    if (this.targetNamespace) {
+      return this.targetNamespace;
+    } else if (this.parent) {
+      return this.parent.getTargetNamespace();
+    }
+    return null;
+  }
+ 
+  /**
+   * Get the qualified name
+   * @returns {QName} Qualified name
+   */
+  getQName() {
+    return new QName(this.targetNamespace, this.$name);
+  }
+ 
+  /**
+   * Resolve a schema object by qname
+   * @param schemas
+   * @param elementType
+   * @param nsName
+   * @returns {*}
+   */
+  resolveSchemaObject(schemas, elementType, nsName) {
+    var qname = QName.parse(nsName);
+    var nsURI;
+    Iif (qname.prefix === 'xml') return null;
+    if (qname.prefix) nsURI = this.getNamespaceURI(qname.prefix);
+    else nsURI = this.getTargetNamespace();
+    qname.nsURI = nsURI;
+    var name = qname.name;
+    if (nsURI === helper.namespaces.xsd &&
+      (elementType === 'simpleType' || elementType === 'type')) {
+      return xsd.getBuiltinType(name);
+    }
+    var schema = schemas[nsURI];
+    if (!schema) {
+      debug('Schema not found: %s (%s)', qname, elementType);
+      return null;
+    }
+    var found = null;
+    switch (elementType) {
+      case 'element':
+        found = schema.elements[name];
+        break;
+      case 'type':
+        found = schema.complexTypes[name] || schema.simpleTypes[name];
+        break;
+      case 'simpleType':
+        found = schema.simpleTypes[name];
+        break;
+      case 'complexType':
+        found = schema.complexTypes[name];
+        break;
+      case 'group':
+        found = schema.groups[name];
+        break;
+      case 'attribute':
+        found = schema.attributes[name];
+        break;
+      case 'attributeGroup':
+        found = schema.attributeGroups[name];
+        break;
+    }
+    if (!found) {
+      debug('Schema %s not found: %s %s', elementType, nsURI, nsName);
+      return null;
+    }
+    return found;
+  }
+ 
+  postProcess(definitions) {
+    debug('Unknown element: %s %s', this.nsURI, this.nsName)
+  }
+}
+ 
+Element.EMPTY_PREFIX = EMPTY_PREFIX;
+Element.namespaces = namespaces;
+ 
+module.exports = Element;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/helper.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/helper.js.html new file mode 100644 index 00000000..220bca25 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/helper.js.html @@ -0,0 +1,576 @@ + + + + Code coverage report for strong-soap/src/parser/helper.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser helper.js +

+
+
+ 63.04% + Statements + 29/46 +
+
+ 35.71% + Branches + 10/28 +
+
+ 62.5% + Functions + 5/8 +
+
+ 64.44% + Lines + 29/45 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +1x +19x +  +1x +25x +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +  +  +  +  +  +  +  +1x +  +1x +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +1x +65849x +  +65849x +144x +96x +  +  +65849x +  +  +1x +1x +1x +  +  +  +766x +  +  +  +766x +  +  +  +  +766x +  +766x +  +  +  +68834x +  +  +68834x +  +  +  +  +1x +  + 
// Copyright IBM Corp. 2016,2019. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+// Primitive data types
+var primitiveDataTypes = {
+  string: String,
+  boolean: Boolean,
+  decimal: Number,
+  float: Number,
+  double: Number,
+  duration: Number,
+  dateTime: Date,
+  time: Date,
+  date: Date,
+  gYearMonth: Number,
+  gYear: Number,
+  gMonthDay: Number,
+  gDay: Number,
+  gMonth: Number,
+  hexBinary: String,
+  base64Binary: String,
+  anyURI: String,
+  QName: String,
+  NOTATION: String
+};
+ 
+// Derived data types
+var derivedDataTypes = {
+  normalizedString: String,
+  token: String,
+  language: String,
+  NMTOKEN: String,
+  NMTOKENS: String,
+  Name: String,
+  NCName: String,
+  ID: String,
+  IDREF: String,
+  IDREFS: String,
+  ENTITY: String,
+  ENTITIES: String,
+  integer: Number,
+  nonPositiveInteger: Number,
+  negativeInteger: Number,
+  long: Number,
+  int: Number,
+  short: Number,
+  byte: Number,
+  nonNegativeInteger: Number,
+  unsignedLong: Number,
+  unsignedInt: Number,
+  unsignedShort: Number,
+  unsignedByte: Number,
+  positiveInteger: Number
+};
+ 
+// Built-in data types
+var schemaTypes = {};
+ 
+for (let s in primitiveDataTypes) {
+  schemaTypes[s] = primitiveDataTypes[s];
+}
+for (let s in derivedDataTypes) {
+  schemaTypes[s] = derivedDataTypes[s];
+}
+ 
+var namespaces = {
+  wsdl: 'http://schemas.xmlsoap.org/wsdl/',
+  soap: 'http://schemas.xmlsoap.org/wsdl/soap/',
+  soap12: 'http://schemas.xmlsoap.org/wsdl/soap12/',
+  http: 'http://schemas.xmlsoap.org/wsdl/http/',
+  mime: 'http://schemas.xmlsoap.org/wsdl/mime/',
+  soapenc: 'http://schemas.xmlsoap.org/soap/encoding/',
+  soapenv: 'http://schemas.xmlsoap.org/soap/envelope/',
+  xsi_rc: 'http://www.w3.org/2000/10/XMLSchema-instance',
+  xsd_rc: 'http://www.w3.org/2000/10/XMLSchema',
+  xsd: 'http://www.w3.org/2001/XMLSchema',
+  xsi: 'http://www.w3.org/2001/XMLSchema-instance',
+  xml: 'http://www.w3.org/XML/1998/namespace'
+};
+ 
+function xmlEscape(obj) {
+  if (typeof obj === 'string') {
+    if (obj.substr(0, 9) === '<![CDATA[' && obj.substr(-3) === "]]>") {
+      return obj;
+    }
+    return obj
+      .replace(/&/g, '&amp;')
+      .replace(/</g, '&lt;')
+      .replace(/>/g, '&gt;')
+      .replace(/"/g, '&quot;')
+      .replace(/'/g, '&apos;');
+  }
+ 
+  return obj;
+}
+ 
+var crypto = require('crypto');
+exports.passwordDigest = function passwordDigest(nonce, created, password) {
+  // digest = base64 ( sha1 ( nonce + created + password ) )
+  var pwHash = crypto.createHash('sha1');
+  var rawNonce = Buffer.from(nonce || '', 'base64').toString('binary');
+  pwHash.update(rawNonce + created + password);
+  return pwHash.digest('base64');
+};
+ 
+var EMPTY_PREFIX = ''; // Prefix for targetNamespace
+ 
+exports.EMPTY_PREFIX = EMPTY_PREFIX;
+ 
+/**
+ * Find a key from an object based on the value
+ * @param {Object} Namespace prefix/uri mapping
+ * @param {*} nsURI value
+ * @returns {String} The matching key
+ */
+exports.findPrefix = function(xmlnsMapping, nsURI) {
+  for (var n in xmlnsMapping) {
+    if (n === EMPTY_PREFIX) continue;
+    if (xmlnsMapping[n] === nsURI)
+      return n;
+  }
+};
+ 
+exports.extend = function extend(base, obj) {
+  Eif (base !== null && typeof base === "object" &&
+    obj !== null && typeof obj === "object") {
+    Object.keys(obj).forEach(function(key) {
+      if (!base.hasOwnProperty(key))
+        base[key] = obj[key];
+    });
+  }
+  return base;
+};
+ 
+exports.schemaTypes = schemaTypes;
+exports.xmlEscape = xmlEscape;
+exports.namespaces = namespaces;
+ 
+class _Set {
+  constructor() {
+    this.set = typeof Set === 'function' ? new Set() : [];
+  }
+ 
+  add(val) {
+    Iif (Array.isArray(this.set)) {
+      if (this.set.indexOf(val) === -1) {
+        this.set.push(val);
+      }
+    } else {
+      this.set.add(val);
+    }
+    return this;
+  }
+ 
+  has(val) {
+    Iif (Array.isArray(this.set)) {
+      return this.set.indexOf(val) !== -1;
+    } else {
+      return this.set.has(val);
+    }
+  }
+}
+ 
+exports.Set = _Set;
+ 
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/index.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/index.html new file mode 100644 index 00000000..4cddd683 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/index.html @@ -0,0 +1,201 @@ + + + + Code coverage report for strong-soap/src/parser + + + + + + + +
+
+

+ All files strong-soap/src/parser +

+
+
+ 85.43% + Statements + 991/1160 +
+
+ 75.16% + Branches + 593/789 +
+
+ 82.91% + Functions + 97/117 +
+
+ 86.23% + Lines + 977/1133 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
element.js
88.1%111/12686.49%64/7492.31%12/1389.43%110/123
helper.js
63.04%29/4635.71%10/2862.5%5/864.44%29/45
index.js
100%4/4100%0/0100%0/0100%4/4
nscontext.js
71.91%64/8962.86%44/7087.5%14/1672.73%64/88
qname.js
89.19%33/3775%24/32100%3/389.19%33/37
typeRegistry.js
100%30/30100%12/12100%3/3100%30/30
wsdl.js
85.67%251/29373.46%119/16278.38%29/3786.25%251/291
xmlHandler.js
87.5%455/52077.75%318/40985.29%29/3488.42%443/501
xsd.js
93.33%14/15100%2/266.67%2/392.86%13/14
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/index.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/index.js.html new file mode 100644 index 00000000..75924d89 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/index.js.html @@ -0,0 +1,96 @@ + + + + Code coverage report for strong-soap/src/parser/index.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser index.js +

+
+
+ 100% + Statements + 4/4 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 0/0 +
+
+ 100% + Lines + 4/4 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10  +  +  +  +  +1x +1x +1x +1x + 
// Copyright IBM Corp. 2016. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+exports.QName = require('./qname');
+exports.NamespaceContext = require('./nscontext');
+exports.WSDL = require('./wsdl');
+exports.XMLHandler = require('./xmlHandler');
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/nscontext.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/nscontext.js.html new file mode 100644 index 00000000..e3555bbc --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/nscontext.js.html @@ -0,0 +1,987 @@ + + + + Code coverage report for strong-soap/src/parser/nscontext.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser nscontext.js +

+
+
+ 71.91% + Statements + 64/89 +
+
+ 62.86% + Branches + 44/70 +
+
+ 87.5% + Functions + 14/16 +
+
+ 72.73% + Lines + 64/88 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1787x +1787x +1787x +  +  +  +  +  +  +  +  +  +6815x +  +11x +  +  +  +6804x +  +6804x +1142x +5662x +4319x +  +1343x +  +  +  +  +  +241x +  +  +  +  +  +  +  +  +  +  +  +  +  +241x +  +241x +  +241x +52x +  +189x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1164x +  +  +  +  +  +1164x +917x +201x +  +  +963x +755x +  +208x +  +  +  +  +  +  +  +  +  +  +225x +225x +316x +316x +  +225x +  +  +  +  +  +  +  +  +  +  +  +  +206x +206x +  +  +  +  +  +  +  +  +  +  +  +655x +116x +  +539x +539x +  +  +  +  +539x +  +  +  +  +  +  +  +  +  +1787x +1787x +1787x +1787x +  +  +  +  +  +  +  +1552x +1552x +1552x +  +  +  +1552x +  +  +  +  +  +  +  +  +  +2180x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +409x +  +  +  +  +  +  +  +  +  +225x +  +  +  +  +  +  +  +  +  +  +  +414x +225x +  +189x +189x +  +  +  +  +414x +  +  +  +414x +414x +  +  +  +  +414x +414x +  +  +  +  +  +  +  +  +  +  +  +414x +414x +414x +  +  +414x +414x +414x +  +  +  +  +  +  +  +  +414x +  +  +  +1x +  +  +  + 
// Copyright IBM Corp. 2016. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+/**
+ * Scope for XML namespaces
+ * @param {NamespaceScope} [parent] Parent scope
+ * @returns {NamespaceScope}
+ * @constructor
+ */
+class NamespaceScope {
+  constructor(parent) {
+    this.parent = parent;
+    this.namespaces = {};
+    this.prefixCount = 0;
+  }
+ 
+  /**
+   * Look up the namespace URI by prefix
+   * @param {String} prefix Namespace prefix
+   * @param {Boolean} [localOnly] Search current scope only
+   * @returns {String} Namespace URI
+   */
+  getNamespaceURI(prefix, localOnly) {
+    switch (prefix) {
+      case 'xml':
+        return 'http://www.w3.org/XML/1998/namespace';
+      case 'xmlns':
+        return 'http://www.w3.org/2000/xmlns/';
+      default:
+        var nsURI = this.namespaces[prefix];
+        /*jshint -W116 */
+        if (nsURI != null) {
+          return nsURI.uri;
+        } else if (!localOnly && this.parent) {
+          return this.parent.getNamespaceURI(prefix);
+        } else {
+          return null;
+        }
+    }
+  }
+ 
+  getNamespaceMapping(prefix) {
+    switch (prefix) {
+      case 'xml':
+        return {
+          uri: 'http://www.w3.org/XML/1998/namespace',
+          prefix: 'xml',
+          declared: true
+        };
+      case 'xmlns':
+        return {
+          uri: 'http://www.w3.org/2000/xmlns/',
+          prefix: 'xmlns',
+          declared: true
+        };
+      default:
+        var mapping = this.namespaces[prefix];
+        /*jshint -W116 */
+        Iif (mapping != null) {
+          return mapping;
+        } else if (this.parent) {
+          return this.parent.getNamespaceMapping(prefix);
+        } else {
+          return null;
+        }
+    }
+  }
+ 
+  /**
+   * Look up the namespace prefix by URI
+   * @param {String} nsURI Namespace URI
+   * @param {Boolean} [localOnly] Search current scope only
+   * @returns {String} Namespace prefix
+   */
+  getPrefix(nsURI, localOnly) {
+    switch (nsURI) {
+      case 'http://www.w3.org/XML/1998/namespace':
+        return 'xml';
+      case 'http://www.w3.org/2000/xmlns/':
+        return 'xmlns';
+      default:
+        for (var p in this.namespaces) {
+          if (this.namespaces[p].uri === nsURI) {
+            return p;
+          }
+        }
+        if (!localOnly && this.parent) {
+          return this.parent.getPrefix(nsURI);
+        } else {
+          return null;
+        }
+    }
+  }
+ 
+  /**
+   * Look up the namespace prefix by URI
+   * @param {String} nsURI Namespace URI
+   * @param {Boolean} [localOnly] Search current scope only
+   * @returns {String} Namespace prefix
+   */
+  getPrefixMapping(nsURI, localOnly) {
+    switch (nsURI) {
+      case 'http://www.w3.org/XML/1998/namespace':
+        return 'xml';
+      case 'http://www.w3.org/2000/xmlns/':
+        return 'xmlns';
+      default:
+        for (var p in this.namespaces) {
+          if (this.namespaces[p].uri === nsURI && this.namespaces[p].declared===true) {
+            return this.namespaces[p];
+          }
+        }
+        if (!localOnly && this.parent) {
+          return this.parent.getPrefixMapping(nsURI);
+        } else {
+          return null;
+        }
+    }
+  }
+ 
+  /**
+   * Generate a new prefix that is not mapped to any uris
+   * @param base {string} The base for prefix
+   * @returns {string}
+   */
+  generatePrefix(base) {
+    base = base || 'ns';
+    while (true) {
+      let prefix = 'ns' + (++this.prefixCount);
+      if (!this.getNamespaceURI(prefix)) {
+        // The prefix is not used
+        return prefix;
+      }
+    }
+  }
+}
+ 
+/**
+ * Namespace context that manages hierarchical scopes
+ * @returns {NamespaceContext}
+ * @constructor
+ */
+class NamespaceContext {
+  constructor() {
+    this.scopes = [];
+    this.pushContext();
+  }
+ 
+  /**
+   * Add a prefix/URI namespace mapping
+   * @param {String} prefix Namespace prefix
+   * @param {String} nsURI Namespace URI
+   * @param {Boolean} [localOnly] Search current scope only
+   * @returns {boolean} true if the mapping is added or false if the mapping
+   * already exists
+   */
+  addNamespace(prefix, nsURI, localOnly) {
+    if (this.getNamespaceURI(prefix, localOnly) === nsURI) {
+      return false;
+    }
+    Eif (this.currentScope) {
+      this.currentScope.namespaces[prefix] = {
+        uri: nsURI,
+        prefix: prefix,
+        declared: false
+      };
+      return true;
+    }
+    return false;
+  }
+ 
+  /**
+   * Push a scope into the context
+   * @returns {NamespaceScope} The current scope
+   */
+  pushContext() {
+    var scope = new NamespaceScope(this.currentScope);
+    this.scopes.push(scope);
+    this.currentScope = scope;
+    return scope;
+  }
+ 
+  /**
+   * Pop a scope out of the context
+   * @returns {NamespaceScope} The removed scope
+   */
+  popContext() {
+    var scope = this.scopes.pop();
+    Eif (scope) {
+      this.currentScope = scope.parent;
+    } else {
+      this.currentScope = null;
+    }
+    return scope;
+  }
+ 
+  /**
+   * Look up the namespace URI by prefix
+   * @param {String} prefix Namespace prefix
+   * @param {Boolean} [localOnly] Search current scope only
+   * @returns {String} Namespace URI
+   */
+  getNamespaceURI(prefix, localOnly) {
+    return this.currentScope &&
+      this.currentScope.getNamespaceURI(prefix, localOnly);
+  }
+ 
+  /**
+   * Look up the namespace prefix by URI
+   * @param {String} nsURI Namespace URI
+   * @param {Boolean} [localOnly] Search current scope only
+   * @returns {String} Namespace prefix
+   */
+  getPrefix(nsURI, localOnly) {
+    return this.currentScope &&
+      this.currentScope.getPrefix(nsURI, localOnly);
+  }
+ 
+  /**
+   * Look up the namespace mapping by nsURI
+   * @param {String} nsURI Namespace URI
+   * @returns {String} Namespace mapping
+   */
+  getPrefixMapping(nsURI) {
+    return this.currentScope &&
+      this.currentScope.getPrefixMapping(nsURI);
+  }
+ 
+  /**
+   * Generate a new prefix that is not mapped to any uris
+   * @param base {string} The base for prefix
+   * @returns {string}
+   */
+  generatePrefix(base) {
+    return this.currentScope &&
+      this.currentScope.generatePrefix(base);
+  }
+ 
+  /**
+   * Register a namespace
+   * @param {String} prefix Namespace prefix
+   * @param {String} nsURI Namespace URI
+   * @returns {Object} The matching or generated namespace mapping
+   */
+  registerNamespace(prefix, nsURI) {
+    var mapping;
+    if (!prefix) {
+      prefix = this.generatePrefix();
+    } else {
+      mapping = this.currentScope.getNamespaceMapping(prefix);
+      Iif (mapping && mapping.uri === nsURI) {
+        // Found an existing mapping
+        return mapping;
+      }
+    }
+    Iif (this.getNamespaceURI(prefix)) {
+      // The prefix is already mapped to a different namespace
+      prefix = this.generatePrefix();
+    }
+    Eif (this.currentScope) {
+      mapping = {
+        uri: nsURI,
+        prefix: prefix,
+        declared: false
+      };
+      this.currentScope.namespaces[prefix] = mapping;
+      return mapping;
+    }
+    return null;
+  }
+ 
+  /**
+   * Declare a namespace prefix/uri mapping
+   * @param {String} prefix Namespace prefix
+   * @param {String} nsURI Namespace URI
+   * @returns {Boolean} true if the declaration is created
+   */
+  declareNamespace(prefix, nsURI) {
+    var mapping = this.registerNamespace(prefix, nsURI);
+    Iif (!mapping) return null;
+    Iif (mapping.declared) {
+      return null;
+    }
+    mapping = this.currentScope.namespaces[mapping.prefix];
+    Eif (mapping) {
+      mapping.declared = true;
+    } else {
+      mapping = {
+        prefix: mapping.prefix,
+        uri: nsURI,
+        declared: true
+      };
+      this.currentScope.namespaces[mapping.prefix] = mapping;
+    }
+    return mapping;
+  };
+}
+ 
+module.exports = NamespaceContext;
+ 
+ 
+ 
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/qname.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/qname.js.html new file mode 100644 index 00000000..354ab447 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/qname.js.html @@ -0,0 +1,342 @@ + + + + Code coverage report for strong-soap/src/parser/qname.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser qname.js +

+
+
+ 89.19% + Statements + 33/37 +
+
+ 75% + Branches + 24/32 +
+
+ 100% + Functions + 3/3 +
+
+ 89.19% + Lines + 33/37 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92  +  +  +  +  +  +  +1x +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +287235x +231411x +  +  +231411x +231411x +231411x +231411x +  +  +  +  +55824x +55824x +55824x +53343x +53343x +53343x +  +2481x +  +  +  +  +  +  +  +  +  +56692x +56692x +56615x +  +56692x +3659x +  +56692x +56692x +  +  +  +  +  +  +  +  +  +231409x +231409x +  +231409x +231383x +26x +26x +  +  +  +  +  +231409x +26x +  +231409x +  +  +  +1x +  + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var g = require('../globalize');
+var assert = require('assert');
+var qnameExp = /^(?:\{([^\{\}]*)\})?(?:([^\{\}]+):)?([^\{\}\:]+)$/;
+ 
+class QName {
+  /**
+   * Create a new QName
+   * - new QName(name)
+   * - new QName(nsURI, name)
+   * - new QName(nsURI, name, prefix)
+   *
+   * @param {string} nsURI Namespace URI
+   * @param {string} name Local name
+   * @param {string} prefix Namespace prefix
+   */
+  constructor(nsURI, name, prefix) {
+    if (arguments.length === 1) {
+      assert.equal(typeof nsURI, 'string',
+        'The qname must be string in form of {nsURI}prefix:name');
+      let qname;
+      Eif (qname = qnameExp.exec(nsURI)) {
+        this.nsURI = qname[1] || '';
+        this.prefix = qname[2] || '';
+        this.name = qname[3] || '';
+      } else {
+        throw new Error(g.f('Invalid qname: %s', nsURI));
+      }
+    } else {
+      this.nsURI = nsURI || '';
+      this.name = name || '';
+      if (!prefix) {
+        let parts = this.name.split(':');
+        this.name = parts[0];
+        this.prefix = parts[1];
+      } else {
+        this.prefix = prefix || '';
+      }
+    }
+  }
+ 
+  /**
+   * {nsURI}prefix:name
+   * @returns {string}
+   */
+  toString() {
+    var str = '';
+    if (this.nsURI) {
+      str = '{' + this.nsURI + '}';
+    }
+    if (this.prefix) {
+      str += this.prefix + ':';
+    }
+    str += this.name;
+    return str;
+  }
+ 
+  /**
+   * Parse a qualified name (prefix:name)
+   * @param {string} qname Qualified name
+   * @param {string|NamespaceContext} nsURI
+   * @returns {QName}
+   */
+  static parse(qname, nsURI) {
+    qname = qname || '';
+    var result = new QName(qname);
+    var uri;
+    if (nsURI == null) {
+      uri = '';
+    } else Eif (typeof nsURI === 'string') {
+      uri = nsURI;
+    } else if (typeof nsURI.getNamespaceURI === 'function') {
+      uri = nsURI.getNamespaceURI(result.prefix);
+    } else {
+      uri = '';
+    }
+    if (uri) {
+      result.nsURI = uri;
+    }
+    return result;
+  }
+}
+ 
+module.exports = QName;
+ 
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/soap/body.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/soap/body.js.html new file mode 100644 index 00000000..8a543c9c --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/soap/body.js.html @@ -0,0 +1,141 @@ + + + + Code coverage report for strong-soap/src/parser/soap/body.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/soap body.js +

+
+
+ 100% + Statements + 6/6 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 6/6 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25  +  +  +  +  +  +  +1x +1x +  +  +  +  +  +  +  +416x +  +  +  +1x +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var SOAPElement = require('./soapElement');
+var helper = require('../helper');
+ 
+/**
+ * <soap:body parts="nmtokens"? use="literal|encoded"?
+ * encodingStyle="uri-list"? namespace="uri"?>
+ */
+class Body extends SOAPElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+}
+ 
+Body.elementName = 'body';
+Body.allowedChildren = ['documentation'];
+ 
+module.exports = Body;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/soap/fault.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/soap/fault.js.html new file mode 100644 index 00000000..6d48660b --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/soap/fault.js.html @@ -0,0 +1,141 @@ + + + + Code coverage report for strong-soap/src/parser/soap/fault.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/soap fault.js +

+
+
+ 100% + Statements + 6/6 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 6/6 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25  +  +  +  +  +  +  +1x +1x +  +  +  +  +  +  +  +15x +  +  +  +1x +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var SOAPElement = require('./soapElement');
+var helper = require('../helper');
+ 
+/**
+ * <soap:fault name="nmtoken" use="literal|encoded" 
+ * encodingStyle="uri-list"? namespace="uri"?>
+ */
+class Fault extends SOAPElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+}
+ 
+Fault.elementName = 'fault';
+Fault.allowedChildren = ['documentation'];
+ 
+module.exports = Fault;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/soap/header.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/soap/header.js.html new file mode 100644 index 00000000..96a41614 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/soap/header.js.html @@ -0,0 +1,171 @@ + + + + Code coverage report for strong-soap/src/parser/soap/header.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/soap header.js +

+
+
+ 77.78% + Statements + 7/9 +
+
+ 0% + Branches + 0/2 +
+
+ 50% + Functions + 1/2 +
+
+ 77.78% + Lines + 7/9 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35  +  +  +  +  +  +  +1x +1x +  +  +  +  +  +  +  +  +  +  +15x +15x +  +  +  +  +  +  +  +  +  +1x +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var SOAPElement = require('./soapElement');
+var helper = require('../helper');
+ 
+/**
+ * <soap:header message="qname" part="nmtoken" use="literal|encoded"
+ * encodingStyle="uri-list"? namespace="uri"?>*
+ *   <soap:headerfault message="qname" part="nmtoken" use="literal|encoded"
+ *   encodingStyle="uri-list"? namespace="uri"?/>*
+ * <soap:header>
+ */
+class Header extends SOAPElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+    this.fault = null;
+  }
+ 
+  addChild(child) {
+    if (child.name === 'headerfault') {
+      this.fault = child;
+    }
+  }
+}
+ 
+Header.elementName = 'header';
+Header.allowedChildren = ['documentation', 'headerFault'];
+ 
+module.exports = Header;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/soap/headerFault.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/soap/headerFault.js.html new file mode 100644 index 00000000..41a1d78d --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/soap/headerFault.js.html @@ -0,0 +1,141 @@ + + + + Code coverage report for strong-soap/src/parser/soap/headerFault.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/soap headerFault.js +

+
+
+ 83.33% + Statements + 5/6 +
+
+ 100% + Branches + 0/0 +
+
+ 0% + Functions + 0/1 +
+
+ 83.33% + Lines + 5/6 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25  +  +  +  +  +  +  +1x +1x +  +  +  +  +  +  +  +  +  +  +  +1x +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var SOAPElement = require('./soapElement');
+var helper = require('../helper');
+ 
+/**
+ * <soap:headerfault message="qname" part="nmtoken" use="literal|encoded"
+ * encodingStyle="uri-list"? namespace="uri"?/>*
+ */
+class HeaderFault extends SOAPElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+}
+ 
+HeaderFault.elementName = 'headerfault';
+HeaderFault.allowedChildren = ['documentation'];
+ 
+module.exports = HeaderFault;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/soap/index.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/soap/index.html new file mode 100644 index 00000000..4ba5355f --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/soap/index.html @@ -0,0 +1,149 @@ + + + + Code coverage report for strong-soap/src/parser/soap + + + + + + + +
+
+

+ All files strong-soap/src/parser/soap +

+
+
+ 91.89% + Statements + 34/37 +
+
+ 80% + Branches + 8/10 +
+
+ 66.67% + Functions + 4/6 +
+
+ 91.89% + Lines + 34/37 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
body.js
100%6/6100%0/0100%1/1100%6/6
fault.js
100%6/6100%0/0100%1/1100%6/6
header.js
77.78%7/90%0/250%1/277.78%7/9
headerFault.js
83.33%5/6100%0/00%0/183.33%5/6
soapElement.js
100%10/10100%8/8100%1/1100%10/10
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/soap/soapElement.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/soap/soapElement.js.html new file mode 100644 index 00000000..f53c6de6 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/soap/soapElement.js.html @@ -0,0 +1,159 @@ + + + + Code coverage report for strong-soap/src/parser/soap/soapElement.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/soap soapElement.js +

+
+
+ 100% + Statements + 10/10 +
+
+ 100% + Branches + 8/8 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 10/10 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31  +  +  +  +  +  +  +1x +  +  +  +980x +  +980x +  +446x +446x +20x +  +  +  +446x +  +  +  +  +1x +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var Element = require('../element');
+ 
+class SOAPElement extends Element {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+ 
+    if(this.name === 'body' || this.name === 'header' ||
+      this.name === 'fault' || this.name === 'headerfault') {
+      this.use = this.$use;
+      if (this.use === 'encoded') {
+        this.encodingStyle = this.$encodingStyle;
+      }
+      // The namespace attribute of soap:body will be used for RPC style
+      // operation
+      this.namespace = this.$namespace;
+    }
+  }
+}
+ 
+SOAPElement.targetNamespace = Element.namespaces.soap;
+SOAPElement.allowedChildren = ['documentation'];
+ 
+module.exports = SOAPElement;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/soap12/body.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/soap12/body.js.html new file mode 100644 index 00000000..cac5c592 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/soap12/body.js.html @@ -0,0 +1,141 @@ + + + + Code coverage report for strong-soap/src/parser/soap12/body.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/soap12 body.js +

+
+
+ 100% + Statements + 6/6 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 6/6 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25  +  +  +  +  +  +  +1x +1x +  +  +  +  +  +  +  +59x +  +  +  +1x +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var SOAPElement = require('./soapElement');
+var helper = require('../helper');
+ 
+/**
+ * <soap:body parts="nmtokens"? use="literal|encoded"?
+ * encodingStyle="uri"? namespace="uri"?>
+ */
+class Body extends SOAPElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+}
+ 
+Body.elementName = 'body';
+Body.allowedChildren = ['documentation'];
+ 
+module.exports = Body;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/soap12/fault.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/soap12/fault.js.html new file mode 100644 index 00000000..182f8915 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/soap12/fault.js.html @@ -0,0 +1,141 @@ + + + + Code coverage report for strong-soap/src/parser/soap12/fault.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/soap12 fault.js +

+
+
+ 83.33% + Statements + 5/6 +
+
+ 100% + Branches + 0/0 +
+
+ 0% + Functions + 0/1 +
+
+ 83.33% + Lines + 5/6 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25  +  +  +  +  +  +  +1x +1x +  +  +  +  +  +  +  +  +  +  +  +1x +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var SOAPElement = require('./soapElement');
+var helper = require('../helper');
+ 
+/**
+ * <soap:fault name="nmtoken" use="literal|encoded" 
+ * encodingStyle="uri"? namespace="uri"?>
+ */
+class Fault extends SOAPElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+}
+ 
+Fault.elementName = 'fault';
+Fault.allowedChildren = ['documentation'];
+ 
+module.exports = Fault;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/soap12/header.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/soap12/header.js.html new file mode 100644 index 00000000..eb75b560 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/soap12/header.js.html @@ -0,0 +1,150 @@ + + + + Code coverage report for strong-soap/src/parser/soap12/header.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/soap12 header.js +

+
+
+ 83.33% + Statements + 5/6 +
+
+ 100% + Branches + 0/0 +
+
+ 0% + Functions + 0/1 +
+
+ 83.33% + Lines + 5/6 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28  +  +  +  +  +  +  +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var SOAPElement = require('./soapElement');
+var helper = require('../helper');
+ 
+/**
+ * <soap:header message="qname" part="nmtoken" use="literal|encoded"
+ * encodingStyle="uri"? namespace="uri"?>*
+ *   <soap:headerfault message="qname" part="nmtoken" use="literal|encoded"
+ *   encodingStyle="uri"? namespace="uri"?/>*
+ * <soap:header>
+ */
+class Header extends SOAPElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+}
+ 
+Header.elementName = 'header';
+Header.allowedChildren = ['documentation', 'headerFault'];
+ 
+module.exports = Header;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/soap12/headerFault.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/soap12/headerFault.js.html new file mode 100644 index 00000000..c60efbc3 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/soap12/headerFault.js.html @@ -0,0 +1,141 @@ + + + + Code coverage report for strong-soap/src/parser/soap12/headerFault.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/soap12 headerFault.js +

+
+
+ 83.33% + Statements + 5/6 +
+
+ 100% + Branches + 0/0 +
+
+ 0% + Functions + 0/1 +
+
+ 83.33% + Lines + 5/6 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25  +  +  +  +  +  +  +1x +1x +  +  +  +  +  +  +  +  +  +  +  +1x +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var SOAPElement = require('./soapElement');
+var helper = require('../helper');
+ 
+/**
+ * <soap:headerfault message="qname" part="nmtoken" use="literal|encoded"
+ * encodingStyle="uri"? namespace="uri"?/>*
+ */
+class HeaderFault extends SOAPElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+}
+ 
+HeaderFault.elementName = 'headerfault';
+HeaderFault.allowedChildren = ['documentation'];
+ 
+module.exports = HeaderFault;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/soap12/index.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/soap12/index.html new file mode 100644 index 00000000..31b77e62 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/soap12/index.html @@ -0,0 +1,149 @@ + + + + Code coverage report for strong-soap/src/parser/soap12 + + + + + + + +
+
+

+ All files strong-soap/src/parser/soap12 +

+
+
+ 91.18% + Statements + 31/34 +
+
+ 100% + Branches + 8/8 +
+
+ 40% + Functions + 2/5 +
+
+ 91.18% + Lines + 31/34 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
body.js
100%6/6100%0/0100%1/1100%6/6
fault.js
83.33%5/6100%0/00%0/183.33%5/6
header.js
83.33%5/6100%0/00%0/183.33%5/6
headerFault.js
83.33%5/6100%0/00%0/183.33%5/6
soapElement.js
100%10/10100%8/8100%1/1100%10/10
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/soap12/soapElement.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/soap12/soapElement.js.html new file mode 100644 index 00000000..03552c3a --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/soap12/soapElement.js.html @@ -0,0 +1,159 @@ + + + + Code coverage report for strong-soap/src/parser/soap12/soapElement.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/soap12 soapElement.js +

+
+
+ 100% + Statements + 10/10 +
+
+ 100% + Branches + 8/8 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 10/10 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31  +  +  +  +  +  +  +1x +  +  +  +121x +  +121x +  +59x +59x +23x +  +  +  +59x +  +  +  +  +1x +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var Element = require('../element');
+ 
+class SOAPElement extends Element {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+ 
+    if(this.name === 'body' || this.name === 'header' ||
+      this.name === 'fault' || this.name === 'headerfault') {
+      this.use = this.$use;
+      if (this.use === 'encoded') {
+        this.encodingStyle = this.$encodingStyle;
+      }
+      // The namespace attribute of soap:body will be used for RPC style
+      // operation
+      this.namespace = this.$namespace;
+    }
+  }
+}
+ 
+SOAPElement.targetNamespace = Element.namespaces.soap12;
+SOAPElement.allowedChildren = ['documentation'];
+ 
+module.exports = SOAPElement;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/typeRegistry.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/typeRegistry.js.html new file mode 100644 index 00000000..28b559e0 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/typeRegistry.js.html @@ -0,0 +1,483 @@ + + + + Code coverage report for strong-soap/src/parser/typeRegistry.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser typeRegistry.js +

+
+
+ 100% + Statements + 30/30 +
+
+ 100% + Branches + 12/12 +
+
+ 100% + Functions + 3/3 +
+
+ 100% + Lines + 30/30 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +65849x +65848x +  +1x +  +  +  +1x +47x +47x +47x +  +1x +  +  +  +65849x +  +65849x +65849x +25124x +25124x +25124x +25124x +25124x +25124x +2x +25122x +24502x +620x +534x +86x +62x +  +24x +  +  +65849x +  +  +1x +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+/**
+ * XML Schema Elements
+ *
+ * element --> @name|@ref|@type|@maxOccurs|@minOccurs|
+ *             simpleType|complexType
+ * simpleType --> @name|restriction
+ * complexType --> @name|simpleContent|complexContent|
+ *                 group|all|choice|sequence|
+ *                 attribute|attributeGroup
+ * simpleContent --> restriction|extension
+ * complexContent --> restriction|extension
+ * restriction -->
+ *   simpleType: @base|minExclusive|minInclusive|maxExclusive|maxInclusive|
+ *               totalDigits|fractionDigits|length|minLength|maxLength|
+ *               enumeration|whiteSpace|pattern
+ *   simpleContent: @base|minExclusive|minInclusive|maxExclusive|maxInclusive|
+ *                  totalDigits|fractionDigits|length|minLength|maxLength|
+ *                  enumeration|whiteSpace|pattern|
+ *                  attribute|attributeGroup
+ *   complexContent: @base|minExclusive|minInclusive|maxExclusive|maxInclusive|
+ *                   totalDigits|fractionDigits|length|minLength|maxLength|
+ *                   enumeration|whiteSpace|pattern|
+ *                   group|all|choice|sequence|
+ *                   attribute|attributeGroup
+ * extension --> @base|group|all|choice|sequence|
+ *               attribute|attributeGroup
+ * group --> @name|@ref|all|choice|sequence
+ * attribute --> @name|@ref|@default|@fixed|@type|@use
+ * attributeGroup --> @name|@ref|attribute|attributeGroup
+ * all --> @maxOccurs|@minOccurs|element
+ * choice --> @maxOccurs|@minOccurs|element|group|choice|sequence|any
+ * sequence --> @maxOccurs|@minOccurs|element|group|choice|sequence|any
+ */
+ 
+var helper = require('./helper');
+ 
+var elementTypes = [
+  './xsd/all',
+  './xsd/annotation',
+  './xsd/any',
+  './xsd/anyAttribute',
+  './xsd/attribute',
+  './xsd/attributeGroup',
+  './xsd/choice',
+  './xsd/complexContent',
+  './xsd/complexType',
+  './xsd/documentation',
+  './xsd/element',
+  './xsd/unique',
+  './xsd/key',
+  './xsd/keyref',
+  './xsd/extension',
+  './xsd/group',
+  './xsd/import',
+  './xsd/include',
+  './xsd/restriction',
+  './xsd/sequence',
+  './xsd/simpleContent',
+  './xsd/simpleType',
+  './xsd/list',
+  './xsd/union',
+  './xsd/schema',
+  './wsdl/binding',
+  './wsdl/definitions',
+  './wsdl/fault',
+  './wsdl/import',
+  './wsdl/input',
+  './wsdl/message',
+  './wsdl/operation',
+  './wsdl/output',
+  './wsdl/part',
+  './wsdl/port',
+  './wsdl/portType',
+  './wsdl/service',
+  './wsdl/types',
+  './wsdl/documentation',
+  './soap/body',
+  './soap/header',
+  './soap/headerFault',
+  './soap/fault',
+  './soap12/body',
+  './soap12/header',
+  './soap12/headerFault',
+  './soap12/fault'
+];
+ 
+var registry;
+ 
+function getRegistry() {
+  if (registry) {
+    return registry;
+  }
+  registry = {
+    elementTypes: {},
+    elementTypesByName: {}
+  };
+  elementTypes.forEach(function(t) {
+    var type = require(t);
+    registry.elementTypes['{' + type.targetNamespace + '}' + type.elementName] = type;
+    registry.elementTypesByName[type.elementName] = type;
+  });
+  return registry;
+}
+ 
+function getElementType(qname) {
+  var registry = getRegistry();
+  var ElementType =
+    registry.elementTypes['{' + qname.nsURI + '}' + qname.name];
+  if (!ElementType) {
+    let XSDElement = require('./xsd/xsdElement');
+    let WSDLElement = require('./wsdl/wsdlElement');
+    let SOAPElement = require('./soap/soapElement');
+    let SOAP12Element = require('./soap12/soapElement');
+    let Element = require('./element');
+    if (qname.nsURI === helper.namespaces.wsdl) {
+      ElementType = WSDLElement;
+    } else if (qname.nsURI === helper.namespaces.xsd) {
+      ElementType = XSDElement;
+    } else if (qname.nsURI === helper.namespaces.soap) {
+      ElementType = SOAPElement;
+    } else if (qname.nsURI === helper.namespaces.soap12) {
+      ElementType = SOAP12Element;
+    } else {
+      ElementType = Element;
+    }
+  }
+  return ElementType;
+}
+ 
+exports.getRegistry = getRegistry;
+exports.getElementType = getElementType;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl.js.html new file mode 100644 index 00000000..a611dd15 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl.js.html @@ -0,0 +1,1827 @@ + + + + Code coverage report for strong-soap/src/parser/wsdl.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser wsdl.js +

+
+
+ 85.67% + Statements + 251/293 +
+
+ 73.46% + Branches + 119/162 +
+
+ 78.38% + Functions + 29/37 +
+
+ 86.25% + Lines + 251/291 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377 +378 +379 +380 +381 +382 +383 +384 +385 +386 +387 +388 +389 +390 +391 +392 +393 +394 +395 +396 +397 +398 +399 +400 +401 +402 +403 +404 +405 +406 +407 +408 +409 +410 +411 +412 +413 +414 +415 +416 +417 +418 +419 +420 +421 +422 +423 +424 +425 +426 +427 +428 +429 +430 +431 +432 +433 +434 +435 +436 +437 +438 +439 +440 +441 +442 +443 +444 +445 +446 +447 +448 +449 +450 +451 +452 +453 +454 +455 +456 +457 +458 +459 +460 +461 +462 +463 +464 +465 +466 +467 +468 +469 +470 +471 +472 +473 +474 +475 +476 +477 +478 +479 +480 +481 +482 +483 +484 +485 +486 +487 +488 +489 +490 +491 +492 +493 +494 +495 +496 +497 +498 +499 +500 +501 +502 +503 +504 +505 +506 +507 +508 +509 +510 +511 +512 +513 +514 +515 +516 +517 +518 +519 +520 +521 +522 +523 +524 +525 +526 +527 +528 +529 +530 +531 +532 +533 +534 +535 +536 +537 +538 +539 +540 +541 +542 +543 +544 +545 +546 +547 +548 +549 +550 +551 +552 +553 +554 +555 +556 +557 +558 +559 +560 +561 +562 +563 +564 +565 +566 +567 +568 +569 +570 +571 +572 +573 +574 +575 +576 +577 +578 +579 +580 +581 +582 +583 +584 +585 +586 +587  +  +  +  +  +  +  +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +  +1x +1x +1x +1x +1x +  +  +  +342x +342x +  +  +342x +342x +  +  +342x +342x +  +  +  +335x +335x +  +  +  +  +  +5x +4x +  +  +  +4x +  +  +  +340x +340x +  +340x +340x +340x +  +  +  +  +  +  +340x +  +340x +340x +340x +  +1x +  +  +339x +  +338x +1x +  +  +337x +337x +766x +  +337x +337x +337x +165x +165x +  +1x +  +  +  +  +  +  +336x +336x +169x +169x +14x +  +169x +20x +149x +149x +149x +213x +211x +211x +211x +178x +211x +  +  +  +  +  +  +  +  +336x +336x +  +  +  +340x +5x +  +335x +  +  +  +  +342x +342x +  +342x +  +342x +  +  +6x +6x +  +  +  +  +  +336x +  +  +342x +  +342x +342x +  +  +342x +342x +  +342x +3x +  +  +342x +  +  +  +342x +342x +  +171x +  +171x +  +342x +  +  +  +  +  +679x +679x +679x +  +  +679x +337x +  +  +342x +1x +  +  +  +342x +340x +  +2x +  +  +342x +  +342x +  +342x +342x +  +342x +341x +1x +  +  +340x +  +340x +  +340x +1x +  +1x +1x +  +  +340x +6646x +3340x +  +3306x +  +  +  +  +  +  +  +340x +340x +  +  +  +342x +3x +2x +  +339x +339x +  +  +  +  +  +  +  +339x +339x +  +339x +338x +338x +  +  +339x +  +  +  +38x +38x +38x +38x +  +37x +  +  +  +7x +  +  +  +  +  +  +  +340x +340x +340x +340x +340x +340x +340x +340x +  +340x +66207x +66207x +66207x +66207x +  +66207x +  +66207x +65868x +65868x +  +  +  +  +  +  +  +  +  +339x +339x +169x +169x +170x +  +  +170x +170x +170x +170x +170x +170x +  +  +  +  +  +  +340x +66207x +66207x +66207x +  +66207x +33x +33x +  +66207x +  +  +340x +42x +  +  +340x +340x +  +339x +  +  +  +340x +339x +  +  +  +  +  +  +336x +336x +336x +1003x +65x +938x +938x +  +  +  +  +  +  +542x +  +396x +61x +335x +16x +319x +  +319x +  +336x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +339x +  +  +  +  +339x +  +339x +  +  +  +  +  +168x +166x +  +  +  +173x +  +  +  +296x +7x +7x +  +  +  +296x +296x +296x +  +296x +  +296x +  +  +  +  +296x +2x +  +294x +283x +283x +283x +  +  +  +283x +283x +283x +283x +  +  +  +  +11x +11x +  +11x +2x +9x +9x +9x +9x +9x +  +  +  +  +  +  +  +296x +  +  +  +  +  +  +3x +  +  +  +3x +  +3x +  +  +  +  +  +2x +  +  +  +  +3x +  +  +  +3x +  +  +  +  +3x +3x +3x +  +3x +  +3x +  +  +  +  +  +3x +2x +  +1x +  +  +2x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +1x +1x +  +1x +  +  +  +  +  +  + 
// Copyright IBM Corp. 2016,2019. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var g = require('../globalize');
+var sax = require('sax');
+var HttpClient = require('./../http');
+var fs = require('fs');
+var url = require('url');
+var path = require('path');
+var assert = require('assert');
+var stripBom = require('../strip-bom');
+var debug = require('debug')('strong-soap:wsdl');
+var debugInclude = require('debug')('strong-soap:wsdl:include');
+var _ = require('lodash');
+var selectn = require('selectn');
+var utils = require('./helper');
+var EMPTY_PREFIX = utils.EMPTY_PREFIX;
+ 
+var QName = require('./qname');
+var Definitions = require('./wsdl/definitions');
+var Schema = require('./xsd/schema');
+var Types = require('./wsdl/types');
+var Element = require('./element');
+ 
+class WSDL {
+  constructor(definition, uri, options) {
+    this.content = definition;
+    assert(this.content != null && (typeof this.content === 'string' ||
+      typeof this.content === 'object'),
+      'WSDL constructor takes either an XML string or definitions object');
+    this.uri = uri;
+    this._includesWsdl = [];
+ 
+    // initialize WSDL cache
+    this.WSDL_CACHE = (options || {}).WSDL_CACHE || {};
+    this._initializeOptions(options);
+  }
+ 
+  load(callback) {
+    this._loadAsyncOrSync(false, function (err, wsdl) {
+      callback(err,wsdl);
+    });
+  }
+ 
+  loadSync() {
+    var result;
+    this._loadAsyncOrSync(true, function (err, wsdl) {
+        result = wsdl;
+    });
+    // This is not intuitive but works as the load function and its callback all are executed before the
+    // loadSync function returns. The outcome here is that the following result is always set correctly.
+    return result;
+  }
+ 
+  _loadAsyncOrSync(syncLoad, callback) {
+    var self = this;
+    var definition = this.content;
+    let fromFunc;
+    Eif (typeof definition === 'string') {
+      definition = stripBom(definition);
+      fromFunc = this._fromXML;
+    }
+    else if (typeof definition === 'object') {
+      fromFunc = this._fromServices;
+    }
+ 
+    // register that this WSDL has started loading
+    self.isLoaded = true;
+ 
+    var loadUpSchemas = function(syncLoad) {
+      try {
+        fromFunc.call(self, definition);
+      } catch (e) {
+        return callback(e);
+      }
+ 
+      self.processIncludes(syncLoad, function(err) {
+        var name;
+        if (err) {
+          return callback(err);
+        }
+ 
+        var schemas = self.definitions.schemas;
+        for (let s in schemas) {
+          schemas[s].postProcess(self.definitions);
+        }
+        var services = self.services = self.definitions.services;
+        Eif (services) {
+          for (let s in services) {
+            try {
+              services[s].postProcess(self.definitions);
+            } catch (err) {
+              return callback(err);
+            }
+          }
+        }
+ 
+        // for document style, for every binding, prepare input message
+        // element name to (methodName, output message element name) mapping
+        var bindings = self.definitions.bindings;
+        for (var bindingName in bindings) {
+          var binding = bindings[bindingName];
+          if (binding.style == null) {
+            binding.style = 'document';
+          }
+          if (binding.style !== 'document')
+            continue;
+          var operations = binding.operations;
+          var topEls = binding.topElements = {};
+          for (var methodName in operations) {
+            if (operations[methodName].input) {
+              var inputName = operations[methodName].input.$name;
+              var outputName = "";
+              if (operations[methodName].output)
+                outputName = operations[methodName].output.$name;
+              topEls[inputName] = {
+                "methodName": methodName,
+                "outputName": outputName
+              };
+            }
+          }
+        }
+ 
+        // prepare soap envelope xmlns definition string
+        self.xmlnsInEnvelope = self._xmlnsMap();
+        callback(err, self);
+      });
+    }
+ 
+    if (syncLoad) {
+      loadUpSchemas(true);
+    } else {
+      process.nextTick(loadUpSchemas);
+    }
+  }
+ 
+  _initializeOptions(options) {
+    this._originalIgnoredNamespaces = (options || {}).ignoredNamespaces;
+    this.options = {};
+ 
+    var ignoredNamespaces = options ? options.ignoredNamespaces : null;
+ 
+    if (ignoredNamespaces &&
+      (Array.isArray(ignoredNamespaces.namespaces) ||
+      typeof ignoredNamespaces.namespaces === 'string')) {
+      Eif (ignoredNamespaces.override) {
+        this.options.ignoredNamespaces = ignoredNamespaces.namespaces;
+      } else {
+        this.options.ignoredNamespaces =
+          this.ignoredNamespaces.concat(ignoredNamespaces.namespaces);
+      }
+    } else {
+      this.options.ignoredNamespaces = this.ignoredNamespaces;
+    }
+ 
+    this.options.forceSoapVersion = options.forceSoapVersion;
+ 
+    this.options.valueKey = options.valueKey || this.valueKey;
+    this.options.xmlKey = options.xmlKey || this.xmlKey;
+ 
+    // Allow any request headers to keep passing through
+    this.options.wsdl_headers = options.wsdl_headers;
+    this.options.wsdl_options = options.wsdl_options;
+ 
+    if (options.httpClient) {
+      this.options.httpClient = options.httpClient;
+    }
+    
+    Iif (options.request) {
+      this.options.request = options.request;
+    }
+ 
+    var ignoreBaseNameSpaces = options ? options.ignoreBaseNameSpaces : null;
+    if (ignoreBaseNameSpaces !== null &&
+      typeof ignoreBaseNameSpaces !== 'undefined')
+      this.options.ignoreBaseNameSpaces = ignoreBaseNameSpaces;
+    else
+      this.options.ignoreBaseNameSpaces = this.ignoreBaseNameSpaces;
+ 
+    Iif (options.NTLMSecurity) {
+      this.options.NTLMSecurity = options.NTLMSecurity;
+    }
+  }
+ 
+  _processNextInclude(syncLoad, includes, callback) {
+    debugInclude('includes/imports: ', includes);
+    var self = this,
+      include = includes.shift(),
+      options;
+ 
+    if (!include)
+      return callback();
+ 
+    // if undefined treat as "" to make path.dirname return '.' as errors on non string below
+    if (!self.uri) {
+      self.uri='';
+    }
+ 
+    var includePath;
+    if (!/^https?:/.test(self.uri) && !/^https?:/.test(include.location)) {
+      includePath = path.resolve(path.dirname(self.uri), include.location);
+    } else {
+      includePath = url.resolve(self.uri, include.location);
+    }
+ 
+    debugInclude('Processing: ', include, includePath);
+ 
+    options = _.assign({}, this.options);
+    // follow supplied ignoredNamespaces option
+    options.ignoredNamespaces = this._originalIgnoredNamespaces || this.options.ignoredNamespaces;
+    options.WSDL_CACHE = this.WSDL_CACHE;
+ 
+    var staticLoad = function(syncLoad, err, wsdl) {
+      if (err) {
+        return callback(err);
+      }
+ 
+      self._includesWsdl.push(wsdl);
+ 
+      Eif (wsdl.definitions instanceof Definitions) {
+        // Set namespace for included schema that does not have targetNamespace
+        if (undefined in wsdl.definitions.schemas) {
+          Eif (include.namespace != null) {
+            // If A includes B and B includes C, B & C can both have no targetNamespace
+            wsdl.definitions.schemas[include.namespace] = wsdl.definitions.schemas[undefined];
+            delete wsdl.definitions.schemas[undefined];
+          }
+        }
+        _.mergeWith(self.definitions, wsdl.definitions, function (a, b) {
+          if (a === b) {
+            return a;
+          }
+          return (a instanceof Schema) ? a.merge(b, include.type === 'include') : undefined;
+        });
+      } else {
+        self.definitions.schemas[include.namespace ||
+        wsdl.definitions.$targetNamespace] =
+          deepMerge(self.definitions.schemas[include.namespace ||
+          wsdl.definitions.$targetNamespace], wsdl.definitions);
+      }
+      self._processNextInclude(syncLoad, includes, function (err) {
+        callback(err);
+      });
+    };
+ 
+    if (syncLoad) {
+      var wsdl = WSDL.loadSync(includePath, options);
+      staticLoad(true, null, wsdl);
+    } else {
+      WSDL.load(includePath, options, function (err, wsdl) {
+        staticLoad(false, err, wsdl);
+      });
+ 
+    }
+ 
+  }
+ 
+  processIncludes(syncLoad, callback) {
+    var schemas = this.definitions.schemas,
+      includes = [];
+ 
+    for (var ns in schemas) {
+      var schema = schemas[ns];
+      includes = includes.concat(schema.includes || []);
+    }
+ 
+    this._processNextInclude(syncLoad, includes, callback);
+  }
+ 
+  describeServices() {
+    var services = {};
+    for (var name in this.services) {
+      var service = this.services[name];
+      services[name] = service.describe(this.definitions);
+    }
+    return services;
+  }
+ 
+  toXML() {
+    return this.xml || '';
+  }
+ 
+  xmlToObject(xml) {
+    return root;
+  }
+ 
+  _parse(xml) {
+    var self = this,
+      p = sax.parser(true, {trim: true}),
+      stack = [],
+      root = null,
+      types = null,
+      schema = null,
+      text = '',
+      options = self.options;
+ 
+    p.onopentag = function(node) {
+      debug('Start element: %j', node);
+      text = ''; // reset text
+      var nsName = node.name;
+      var attrs = node.attributes;
+ 
+      var top = stack[stack.length - 1];
+      var name;
+      if (top) {
+        try {
+          top.startElement(stack, nsName, attrs, options);
+        } catch (e) {
+          debug("WSDL error: %s ", e.message);
+          if (self.options.strict) {
+            throw e;
+          } else {
+            stack.push(new Element(nsName, attrs, options));
+          }
+        }
+      } else {
+        name = QName.parse(nsName).name;
+        if (name === 'definitions') {
+          root = new Definitions(nsName, attrs, options);
+          stack.push(root);
+        } else Eif (name === 'schema') {
+          // Shim a structure in here to allow the proper objects to be
+          // created when merging back.
+          root = new Definitions('definitions', {}, {});
+          types = new Types('types', {}, {});
+          schema = new Schema(nsName, attrs, options);
+          types.addChild(schema);
+          root.addChild(types);
+          stack.push(schema);
+        } else {
+          throw new Error(g.f('Unexpected root element of {{WSDL}} or include'));
+        }
+      }
+    };
+ 
+    p.onclosetag = function(name) {
+      debug('End element: %s', name);
+      var top = stack[stack.length - 1];
+      assert(top, 'Unmatched close tag: ' + name);
+ 
+      if (text) {
+        top[self.options.valueKey] = text;
+        text = '';
+      }
+      top.endElement(stack, name);
+    };
+ 
+    p.ontext = function(str) {
+      text = text + str;
+    }
+ 
+    debug('WSDL xml: %s', xml);
+    p.write(xml).close();
+ 
+    return root;
+  };
+ 
+  _fromXML(xml) {
+    this.definitions = this._parse(xml);
+    this.xml = xml;
+  }
+ 
+  _fromServices(services) {
+  }
+ 
+  _xmlnsMap() {
+    var xmlns = this.definitions.xmlns;
+    var str = '';
+    for (var prefix in xmlns) {
+      if (prefix === '' || prefix === EMPTY_PREFIX)
+        continue;
+      var ns = xmlns[prefix];
+      switch (ns) {
+        case "http://xml.apache.org/xml-soap" : // apachesoap
+        case "http://schemas.xmlsoap.org/wsdl/" : // wsdl
+        case "http://schemas.xmlsoap.org/wsdl/soap/" : // wsdlsoap
+        case "http://schemas.xmlsoap.org/wsdl/soap12/": // wsdlsoap12
+        case "http://schemas.xmlsoap.org/soap/encoding/" : // soapenc
+        case "http://www.w3.org/2001/XMLSchema" : // xsd
+          continue;
+      }
+      if (~ns.indexOf('http://schemas.xmlsoap.org/'))
+        continue;
+      if (~ns.indexOf('http://www.w3.org/'))
+        continue;
+      Iif (~ns.indexOf('http://xml.apache.org/'))
+        continue;
+      str += ' xmlns:' + prefix + '="' + ns + '"';
+    }
+    return str;
+  };
+ 
+  /*
+   * Have another function to load previous WSDLs as we
+   * don't want this to be invoked externally (expect for tests)
+   * This will attempt to fix circular dependencies with XSD files,
+   * Given
+   * - file.wsdl
+   *   - xs:import namespace="A" schemaLocation: A.xsd
+   * - A.xsd
+   *   - xs:import namespace="B" schemaLocation: B.xsd
+   * - B.xsd
+   *   - xs:import namespace="A" schemaLocation: A.xsd
+   * file.wsdl will start loading, import A, then A will import B, which will then import A
+   * Because A has already started to load previously it will be returned right away and
+   * have an internal circular reference
+   * B would then complete loading, then A, then file.wsdl
+   * By the time file A starts processing its includes its definitions will be already loaded,
+   * this is the only thing that B will depend on when "opening" A
+   */
+  static load(uri, options, callback) {
+    var fromCache,
+      WSDL_CACHE;
+ 
+    Iif (typeof options === 'function') {
+      callback = options;
+      options = {};
+    }
+ 
+    WSDL_CACHE = options.WSDL_CACHE;
+ 
+    if (fromCache = WSDL_CACHE[uri]) {
+      /**
+       * Only return from the cache is the document is fully (or partially)
+       * loaded. This allows the contents of a document to have been read
+       * into the cache, but with no processing performed on it yet.
+       */
+      if(fromCache.isLoaded){
+        return callback.call(fromCache, null, fromCache);
+      }
+    }
+ 
+    return WSDL.open(uri, options, callback);
+  }
+ 
+  static open(uri, options, callback) {
+    if (typeof options === 'function') {
+      callback = options;
+      options = {};
+    }
+ 
+    // initialize cache when calling open directly
+    var WSDL_CACHE = options.WSDL_CACHE || {};
+    var request_headers = options.wsdl_headers;
+    var request_options = options.wsdl_options;
+ 
+    debug('wsdl open. request_headers: %j request_options: %j', request_headers, request_options);
+    var wsdl;
+    var fromCache = WSDL_CACHE[uri];
+    /**
+     * If the file is fully loaded in the cache, return it.
+     * Otherwise load it from the file system or URL.
+     */
+    if (fromCache && !fromCache.isLoaded) {
+      fromCache.load(callback);
+    }
+    else if (!/^https?:/.test(uri)) {
+      debug('Reading file: %s', uri);
+      fs.readFile(uri, 'utf8', function(err, definition) {
+        Iif (err) {
+          callback(err);
+        }
+        else {
+          wsdl = new WSDL(definition, uri, options);
+          WSDL_CACHE[uri] = wsdl;
+          wsdl.WSDL_CACHE = WSDL_CACHE;
+          wsdl.load(callback);
+        }
+      });
+    }
+    else {
+      var httpClient = options.httpClient || new HttpClient(options);
+      httpClient.request(uri, null /* options */,
+        function(err, response, definition) {
+          if (err) {
+            callback(err);
+          } else Eif (response && response.statusCode === 200) {
+            wsdl = new WSDL(definition, uri, options);
+            WSDL_CACHE[uri] = wsdl;
+            wsdl.WSDL_CACHE = WSDL_CACHE;
+            wsdl.load(callback);
+          } else {
+            callback(new Error(g.f('Invalid {{WSDL URL}}: %s\n\n\r Code: %s' +
+              "\n\n\r Response Body: %j", uri, response.statusCode, response.body)));
+          }
+        }, request_headers, request_options);
+    }
+ 
+    return wsdl;
+  }
+ 
+  static loadSync(uri, options) {
+    var fromCache,
+      WSDL_CACHE;
+ 
+    Iif (!options) {
+      options = {};
+    }
+ 
+    WSDL_CACHE = options.WSDL_CACHE;
+ 
+    if (fromCache = WSDL_CACHE[uri]) {
+      /**
+       * Only return from the cache is the document is fully (or partially)
+       * loaded. This allows the contents of a document to have been read
+       * into the cache, but with no processing performed on it yet.
+       */
+      Iif(fromCache.isLoaded){
+        return fromCache;
+      }
+    }
+ 
+    return WSDL.openSync(uri, options);
+  }
+ 
+  static openSync(uri, options) {
+    Iif (!options) {
+      options = {};
+    }
+ 
+    // initialize cache when calling open directly
+    var WSDL_CACHE = options.WSDL_CACHE || {};
+    var request_headers = options.wsdl_headers;
+    var request_options = options.wsdl_options;
+ 
+    debug('wsdl open. request_headers: %j request_options: %j', request_headers, request_options);
+    var wsdl;
+    var fromCache = WSDL_CACHE[uri];
+    /**
+     * If the file is fully loaded in the cache, return it.
+     * Otherwise throw an error as we cannot load this in a sync way as we would need to perform IO
+     * either to the filesystem or http
+     */
+    if (fromCache && !fromCache.isLoaded) {
+      wsdl = fromCache.loadSync();
+    } else {
+      throw(uri+" was not found in the cache. For loadSync() calls all schemas must be preloaded into the cache");
+    }
+ 
+    return wsdl;
+  }
+ 
+  static loadSystemSchemas(callback) {
+    var xsdDir = path.join(__dirname, '../../xsds/');
+    var done = false;
+    fs.readdir(xsdDir, function(err, files) {
+      if (err) return callback(err);
+      var schemas = {};
+      var count = files.length;
+      files.forEach(function(f) {
+        WSDL.open(path.join(xsdDir, f), {}, function(err, wsdl) {
+          if (done) return;
+          count--;
+          if (err) {
+            done = true;
+            return callback(err);
+          }
+          for (var s in wsdl.definitions.schemas) {
+            schemas[s] = wsdl.definitions.schemas[s];
+          }
+          if (count === 0) {
+            done = true;
+            callback(null, schemas);
+          }
+        });
+      });
+    });
+  }
+}
+ 
+WSDL.prototype.ignoredNamespaces = ['targetNamespace', 'typedNamespace'];
+WSDL.prototype.ignoreBaseNameSpaces = false;
+WSDL.prototype.valueKey = '$value';
+WSDL.prototype.xmlKey = '$xml';
+ 
+module.exports = WSDL;
+ 
+function deepMerge(destination, source) {
+  return _.mergeWith(destination || {}, source, function(a, b) {
+    return _.isArray(a) ? a.concat(b) : undefined;
+  });
+}
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/binding.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/binding.js.html new file mode 100644 index 00000000..0afb510f --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/binding.js.html @@ -0,0 +1,339 @@ + + + + Code coverage report for strong-soap/src/parser/wsdl/binding.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/wsdl binding.js +

+
+
+ 100% + Statements + 49/49 +
+
+ 92.31% + Branches + 24/26 +
+
+ 100% + Functions + 4/4 +
+
+ 100% + Lines + 46/46 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91  +  +  +  +  +  +  +1x +1x +  +  +  +173x +173x +173x +  +  +  +  +432x +174x +174x +  +  +  +  +171x +169x +169x +169x +169x +169x +169x +169x +169x +169x +  +169x +424x +170x +254x +254x +245x +245x +  +  +245x +243x +  +  +245x +202x +  +  +  +245x +37x +37x +  +  +245x +  +2x +  +245x +245x +  +  +  +  +1x +  +  +  +  +41x +40x +40x +57x +57x +  +39x +  +  +  +1x +1x +  +  +1x + 
// Copyright IBM Corp. 2016,2018. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var WSDLElement = require('./wsdlElement');
+var QName = require('../qname');
+ 
+class Binding extends WSDLElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+    this.transport = '';
+    this.style = '';
+  }
+ 
+  addChild(child) {
+    // soap:binding
+    if (child.name === 'binding') {
+      this.transport = child.$transport;
+      this.style = child.$style;
+    }
+  }
+ 
+  postProcess(definitions) {
+    if (this.operations) return;
+    try {
+      this.operations = {};
+      var type = QName.parse(this.$type).name,
+        portType = definitions.portTypes[type],
+        style = this.style,
+        children = this.children;
+      Eif (portType) {
+        portType.postProcess(definitions);
+        this.portType = portType;
+ 
+        for (var i = 0, child; child = children[i]; i++) {
+          if (child.name !== 'operation')
+            continue;
+          var operation = this.portType.operations[child.$name];
+          if (operation) {
+            this.operations[child.$name] = child;
+            child.operation = operation;
+ 
+            // Set portType.operation.input.message to binding.operation.input
+            if (operation.input && child.input) {
+              child.input.message = operation.input.message;
+            }
+            // Set portType.operation.output.message to binding.operation.output
+            if (operation.output && child.output) {
+              child.output.message = operation.output.message;
+            }
+ 
+            //portType.operation.fault is fully processed with message etc. Hence set to binding.operation.fault
+            for (var f in operation.faults) {
+              Eif (operation.faults[f]) {
+                child.faults[f] = operation.faults[f];
+              }
+            }
+            if (operation.$parameterOrder) {
+              // For RPC style
+              child.parameterOrder = operation.$parameterOrder.split(/\s+/);
+            }
+            child.style = child.style || style;
+            child.postProcess(definitions);
+          }
+        }
+      }
+    } catch (err) {
+      throw err;
+    }
+  }
+ 
+  describe(definitions) {
+    if (this.descriptor) return this.descriptor;
+    var operations = this.descriptor = {};
+    for (var name in this.operations) {
+      var operation = this.operations[name];
+      operations[name] = operation.describe(definitions);
+    }
+    return operations;
+  };
+}
+ 
+Binding.elementName = 'binding';
+Binding.allowedChildren = ['binding', 'SecuritySpec', 'operation',
+  'documentation'];
+ 
+module.exports = Binding;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/definitions.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/definitions.js.html new file mode 100644 index 00000000..e428e273 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/definitions.js.html @@ -0,0 +1,255 @@ + + + + Code coverage report for strong-soap/src/parser/wsdl/definitions.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/wsdl definitions.js +

+
+
+ 100% + Statements + 34/34 +
+
+ 94.44% + Branches + 17/18 +
+
+ 100% + Functions + 2/2 +
+
+ 100% + Lines + 34/34 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63  +  +  +  +  +  +  +1x +1x +1x +1x +1x +1x +1x +1x +1x +  +  +  +339x +339x +339x +339x +339x +339x +  +  +  +1315x +1315x +  +326x +  +989x +470x +  +519x +  +6x +6x +  +513x +165x +  +348x +173x +  +171x +  +175x +166x +  +9x +  +  +  +  +1x +1x +  +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var _ = require('lodash');
+var WSDLElement = require('./wsdlElement');
+var Schema = require('../xsd/schema');
+var Types = require('./types');
+var Message = require('./message');
+var PortType = require('./portType');
+var Binding = require('./binding');
+var Service = require('./service');
+var Documentation = require('./documentation');
+ 
+class Definitions extends WSDLElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+    this.messages = {};
+    this.portTypes = {};
+    this.bindings = {};
+    this.services = {};
+    this.schemas = {};
+  }
+ 
+  addChild(child) {
+    var self = this;
+    if (child instanceof Types) {
+      // Merge types.schemas into definitions.schemas
+      _.merge(self.schemas, child.schemas);
+    }
+    else if (child instanceof Message) {
+      self.messages[child.$name] = child;
+    }
+    else if (child.name === 'import') {
+      //create a Schema element for the <import ../>. targetNamespace is the 'namespace' of the <import  />  element in the wsdl.
+      self.schemas[child.$namespace] = new Schema('xs:schema',{targetNamespace: child.$namespace});
+      self.schemas[child.$namespace].addChild(child);
+    }
+    else if (child instanceof PortType) {
+      self.portTypes[child.$name] = child;
+    }
+    else if (child instanceof Binding) {
+      if (child.transport === 'http://schemas.xmlsoap.org/soap/http' ||
+        child.transport === 'http://www.w3.org/2003/05/soap/bindings/HTTP/')
+        self.bindings[child.$name] = child;
+    }
+    else if (child instanceof Service) {
+      self.services[child.$name] = child;
+    }
+    else Iif (child instanceof Documentation) {
+    }
+  }
+}
+ 
+Definitions.elementName = 'definitions';
+Definitions.allowedChildren = ['types', 'message', 'portType', 'binding',
+  'service', 'import', 'documentation', 'import', 'any'];
+ 
+module.exports = Definitions;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/documentation.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/documentation.js.html new file mode 100644 index 00000000..0b3b70aa --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/documentation.js.html @@ -0,0 +1,126 @@ + + + + Code coverage report for strong-soap/src/parser/wsdl/documentation.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/wsdl documentation.js +

+
+
+ 100% + Statements + 5/5 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 5/5 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20  +  +  +  +  +  +  +1x +  +  +  +14x +  +  +  +1x +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var WSDLElement = require('./wsdlElement');
+ 
+class Documentation extends WSDLElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+}
+ 
+Documentation.elementName = 'documentation';
+Documentation.allowedChildren = [];
+ 
+module.exports = Documentation;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/fault.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/fault.js.html new file mode 100644 index 00000000..9e062d0b --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/fault.js.html @@ -0,0 +1,126 @@ + + + + Code coverage report for strong-soap/src/parser/wsdl/fault.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/wsdl fault.js +

+
+
+ 100% + Statements + 5/5 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 5/5 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20  +  +  +  +  +  +  +1x +  +  +  +63x +  +  +  +1x +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var Parameter = require('./parameter');
+ 
+class Fault extends Parameter {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+}
+ 
+Fault.elementName = 'fault';
+Fault.allowedChildren = ['documentation', 'fault'];
+ 
+module.exports = Fault;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/import.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/import.js.html new file mode 100644 index 00000000..9178a7f8 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/import.js.html @@ -0,0 +1,126 @@ + + + + Code coverage report for strong-soap/src/parser/wsdl/import.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/wsdl import.js +

+
+
+ 100% + Statements + 5/5 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 5/5 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20  +  +  +  +  +  +  +1x +  +  +  +6x +6x +  +  +  +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var WSDLElement = require('./wsdlElement');
+ 
+class Import extends WSDLElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+    this.schemas = {};
+  }
+}
+ 
+Import.elementName = 'import';
+ 
+module.exports = Import;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/index.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/index.html new file mode 100644 index 00000000..63cfe751 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/index.html @@ -0,0 +1,292 @@ + + + + Code coverage report for strong-soap/src/parser/wsdl + + + + + + + +
+
+

+ All files strong-soap/src/parser/wsdl +

+
+
+ 91.82% + Statements + 460/501 +
+
+ 85.76% + Branches + 247/288 +
+
+ 92.68% + Functions + 38/41 +
+
+ 92.29% + Lines + 443/480 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
binding.js
100%49/4992.31%24/26100%4/4100%46/46
definitions.js
100%34/3494.44%17/18100%2/2100%34/34
documentation.js
100%5/5100%0/0100%1/1100%5/5
fault.js
100%5/5100%0/0100%1/1100%5/5
import.js
100%5/5100%0/0100%1/1100%5/5
input.js
100%4/4100%0/0100%1/1100%4/4
message.js
53.85%14/2633.33%2/675%3/456%14/25
operation.js
98.63%216/21990.36%150/166100%9/999.05%209/211
output.js
100%4/4100%0/0100%1/1100%4/4
parameter.js
81.48%44/5480.56%29/36100%3/380%40/50
part.js
50%8/1630%3/1066.67%2/353.33%8/15
port.js
100%8/875%3/4100%2/2100%8/8
portType.js
68.18%15/2266.67%4/666.67%2/365%13/20
service.js
96.67%29/3090%9/10100%3/3100%28/28
types.js
100%15/15100%6/6100%2/2100%15/15
wsdlElement.js
100%5/5100%0/0100%1/1100%5/5
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/input.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/input.js.html new file mode 100644 index 00000000..a93a13a1 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/input.js.html @@ -0,0 +1,123 @@ + + + + Code coverage report for strong-soap/src/parser/wsdl/input.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/wsdl input.js +

+
+
+ 100% + Statements + 4/4 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 4/4 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19  +  +  +  +  +  +  +1x +  +  +  +494x +  +  +  +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var Parameter = require('./parameter');
+ 
+class Input extends Parameter {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+}
+ 
+Input.elementName = 'input';
+ 
+module.exports = Input;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/message.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/message.js.html new file mode 100644 index 00000000..925e5f32 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/message.js.html @@ -0,0 +1,234 @@ + + + + Code coverage report for strong-soap/src/parser/wsdl/message.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/wsdl message.js +

+
+
+ 53.85% + Statements + 14/26 +
+
+ 33.33% + Branches + 2/6 +
+
+ 75% + Functions + 3/4 +
+
+ 56% + Lines + 14/25 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56  +  +  +  +  +  +  +1x +1x +1x +1x +1x +  +  +  +470x +470x +  +  +  +537x +536x +  +  +  +  +518x +588x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +  +1x +  + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var WSDLElement = require('./wsdlElement');
+var descriptor = require('../xsd/descriptor');
+var helper = require('../helper');
+var assert = require('assert');
+var QName = require('../qname');
+ 
+class Message extends WSDLElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+    this.parts = {};
+  }
+ 
+  addChild(child) {
+    if (child.name === 'part') {
+      this.parts[child.$name] = child;
+    }
+  }
+ 
+  postProcess(definitions) {
+    for (var p in this.parts) {
+      this.parts[p].postProcess(definitions);
+    }
+  }
+ 
+  describe(definitions) {
+    if (this.descriptor) return this.descriptor;
+    this.descriptor = new descriptor.TypeDescriptor();
+    for (var part in this.parts) {
+      var p = this.parts[part];
+      var partDescriptor = p.describe(definitions);
+      if (partDescriptor instanceof descriptor.TypeDescriptor) {
+        var child = new descriptor.ElementDescriptor(new QName(p.$name),
+          partDescriptor.type, 'unqualified', false);
+        child.elements = partDescriptor.elements;
+        child.attributes = partDescriptor.attributes;
+        this.descriptor.add(child);
+      } else {
+        this.descriptor.add(partDescriptor);
+      }
+    }
+  }
+}
+ 
+Message.elementName = 'message';
+Message.allowedChildren = ['part', 'documentation'];
+ 
+module.exports = Message;
+ 
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/operation.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/operation.js.html new file mode 100644 index 00000000..2ceb840f --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/operation.js.html @@ -0,0 +1,1284 @@ + + + + Code coverage report for strong-soap/src/parser/wsdl/operation.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/wsdl operation.js +

+
+
+ 98.63% + Statements + 216/219 +
+
+ 90.36% + Branches + 150/166 +
+
+ 100% + Functions + 9/9 +
+
+ 99.05% + Lines + 209/211 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377 +378 +379 +380 +381 +382 +383 +384 +385 +386 +387 +388 +389 +390 +391 +392 +393 +394 +395 +396 +397 +398 +399 +400 +401 +402 +403 +404 +405 +406  +  +  +  +  +  +  +1x +1x +1x +1x +1x +1x +1x +1x +  +1x +  +1x +  +  +  +  +  +  +  +  +  +500x +  +  +500x +500x +  +  +  +1233x +  +494x +494x +  +412x +412x +  +63x +63x +  +258x +258x +258x +  +258x +227x +31x +28x +  +3x +  +258x +  +  +  +  +486x +486x +486x +486x +486x +74x +  +486x +245x +  +485x +  +1x +  +  +  +  +308x +294x +294x +11x +12x +12x +5x +7x +  +  +  +  +  +11x +  +  +  +154x +154x +28x +28x +28x +27x +  +1x +  +  +  +  +154x +  +  +  +228x +  +155x +  +35x +35x +35x +35x +35x +  +35x +  +  +35x +35x +35x +35x +35x +  +35x +  +  +35x +  +89x +89x +89x +87x +134x +134x +134x +  +  +  +89x +83x +84x +84x +84x +  +  +  +89x +  +  +  +30x +  +30x +  +30x +  +30x +30x +30x +30x +39x +  +39x +37x +18x +18x +  +19x +  +37x +  +37x +2x +1x +1x +  +  +  +30x +24x +29x +  +29x +28x +18x +18x +  +10x +  +28x +  +28x +1x +1x +1x +  +  +  +30x +30x +30x +  +1x +  +  +154x +154x +154x +  +154x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +154x +  +154x +  +154x +  +  +154x +  +  +  +462x +  +462x +381x +81x +81x +  +  +462x +462x +  +462x +  +462x +  +462x +  +  +462x +  +  +462x +462x +  +  +  +462x +308x +  +  +462x +294x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +462x +154x +  +154x +127x +27x +27x +  +  +154x +  +154x +  +154x +127x +  +127x +  +127x +  +127x +  +127x +27x +27x +27x +  +27x +27x +27x +  +27x +27x +27x +  +27x +27x +  +27x +  +27x +  +27x +  +  +154x +27x +  +  +  +462x +  +  +  +245x +245x +  +213x +213x +213x +211x +257x +257x +257x +1x +1x +  +256x +  +  +  +  +212x +41x +41x +41x +41x +41x +41x +  +41x +  +  +41x +41x +  +  +  +  +171x +  +32x +1x +31x +22x +9x +9x +  +244x +  +  +  +  +1x +1x +1x +  +  +1x +  + 
// Copyright IBM Corp. 2016,2018. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var g = require('../../globalize');
+var WSDLElement = require('./wsdlElement');
+var descriptor = require('../xsd/descriptor');
+var ElementDescriptor = descriptor.ElementDescriptor;
+var TypeDescriptor = descriptor.TypeDescriptor;
+var QName = require('../qname');
+var helper = require('../helper');
+var SimpleType = require('../xsd/simpleType');
+ 
+var assert = require('assert');
+ 
+const Style = {
+  documentLiteralWrapped: 'documentLiteralWrapped',
+  documentLiteral: 'documentLiteral',
+  rpcLiteral: 'rpcLiteral',
+  rpcEncoded: 'rpcEncoded',
+  documentEncoded: 'documentEncoded'
+};
+ 
+class Operation extends WSDLElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+    //there can be multiple faults defined in the operation. They all will have same type name 'fault'
+    //what differentiates them from each other is, the element/s which will get added under fault <detail> during runtime.
+    this.faults = [];
+    this.soapVersion;
+  }
+ 
+  addChild(child) {
+    switch (child.name) {
+      case 'input':
+        this.input = child;
+        break;
+      case 'output':
+        this.output = child;
+        break;
+      case 'fault':
+        this.faults.push(child);
+        break;
+      case 'operation': // soap:operation
+        this.soapAction = child.$soapAction || '';
+        this.style = child.$style || '';
+        this.soapActionRequired = child.$soapActionRequired === 'true' || child.$soapActionRequired === '1' || false;
+        //figure out from the binding operation soap version 1.1 or 1.2
+        if (child.nsURI === 'http://schemas.xmlsoap.org/wsdl/soap/') {
+          this.soapVersion ='1.1';
+        } else if(child.nsURI === 'http://schemas.xmlsoap.org/wsdl/soap12/') {
+          this.soapVersion ='1.2';
+        } else {
+          this.soapVersion = '1.1';
+        }
+        break;
+    }
+  }
+ 
+  postProcess(definitions) {
+    try {
+      Iif (this._processed) return; // Already processed
+      if (this.input) this.input.postProcess(definitions);
+      if (this.output) this.output.postProcess(definitions);
+      for (let i = 0, n = this.faults.length; i < n; i++) {
+        this.faults[i].postProcess(definitions);
+      }
+      if (this.parent.name === 'binding') {
+        this.getMode();
+      }
+      this._processed = true;
+    } catch (err) {
+      throw err;
+    }
+  }
+ 
+  static describeHeaders(param, definitions) {
+    if (param == null) return null;
+    var headers = new descriptor.TypeDescriptor();
+    if (!param.headers) return headers;
+    param.headers.forEach(function(header) {
+      var part = header.part;
+      if (part && part.element) {
+        headers.addElement(part.element.describe(definitions));
+      } else Iif (part && part.type) {
+        g.warn('{{WS-I}} violation: ' +
+          '{{http://ws-i.org/profiles/basicprofile-1.2-2010-11-09.html#BP2113}}' +
+          ' part %s', part.$name);
+      }
+    });
+    return headers;
+  }
+ 
+  describeFaults(definitions) {
+    var faults = {};
+    for (var f in this.faults) {
+      let fault = this.faults[f];
+      let part = fault.message && fault.message.children[0]; //find the part through Fault message. There is only one part in fault message
+      if (part && part.element) {
+        faults[f] = part.element.describe(definitions);
+      } else {
+        g.warn('{{WS-I}} violation: ' +
+          '{{http://ws-i.org/profiles/basicprofile-1.2-2010-11-09.html#BP2113}}' +
+          ' part %s', part.$name);
+      }
+    }
+    return faults;
+  }
+ 
+  describe(definitions) {
+    if (this.descriptor) return this.descriptor;
+    var input, output;
+    switch (this.mode) {
+      case Style.documentLiteralWrapped:
+        Eif (this.input && this.input.body) {
+          for (let p in this.input.body.parts) {
+            let wrapperElement = this.input.body.parts[p].element;
+            Eif (wrapperElement) {
+              input = wrapperElement.describe(definitions);
+            }
+            break;
+          }
+        }
+        Eif (this.output && this.output.body) {
+          for (let p in this.output.body.parts) {
+            let wrapperElement = this.output.body.parts[p].element;
+            Eif (wrapperElement) {
+              output = wrapperElement.describe(definitions);
+            }
+            break;
+          }
+        }
+        break;
+      case Style.documentLiteral:
+        input = new descriptor.TypeDescriptor();
+        output = new descriptor.TypeDescriptor();
+        if (this.input && this.input.body) {
+          for (let p in this.input.body.parts) {
+            let element = this.input.body.parts[p].element;
+            Eif (element) {
+              input.addElement(element.describe(definitions));
+            }
+          }
+        }
+        if (this.output && this.output.body) {
+          for (let p in this.output.body.parts) {
+            let element = this.output.body.parts[p].element;
+            Eif (element) {
+              output.addElement(element.describe(definitions));
+            }
+          }
+        }
+        break;
+      case Style.rpcLiteral:
+      case Style.rpcEncoded:
+        // The operation wrapper element
+        let nsURI = (this.input && this.input.body &&
+          this.input.body.namespace) || this.targetNamespace;
+        input = new descriptor.ElementDescriptor(
+          new QName(nsURI, this.$name), null, 'qualified', false);
+        output = new descriptor.ElementDescriptor(
+          new QName(nsURI, this.$name + 'Response'), null, 'qualified', false);
+        let inputParts = new descriptor.TypeDescriptor();
+        let outputParts = new descriptor.TypeDescriptor();
+        Eif (this.input && this.input.body) {
+          for (let p in this.input.body.parts) {
+            let part = this.input.body.parts[p];
+            let type;
+            if (part.type) {
+              if (part.type instanceof SimpleType) {
+                var qName = new QName(part.type.targetNamespace, part.type.$name, part.type.prefix);
+                type = qName;
+              } else {
+                type = part.type.qname;
+              }
+              let element = new descriptor.ElementDescriptor(
+                new QName(nsURI, p), type, 'unqualified', false);
+              inputParts.addElement(element);
+            } else if (part.element) {
+              var elementDescriptor = part.element.describe(definitions);
+              inputParts.addElement(elementDescriptor);
+            }
+          }
+        }
+        if (this.output && this.output.body) {
+          for (let p in this.output.body.parts) {
+            let part = this.output.body.parts[p];
+            let type;
+            if (part.type) {
+              if (part.type instanceof SimpleType) {
+                var qName = new QName(part.type.targetNamespace, part.type.$name, part.type.prefix);
+                type = qName;
+              } else {
+                type = part.type.qname;
+              }
+              let element = new descriptor.ElementDescriptor(
+                new QName(nsURI, p), type, 'unqualified', false);
+              outputParts.addElement(element);
+            } else Eif (part.element) {
+              let elementDescriptor = part.element.describe(definitions);
+              outputParts.addElement(elementDescriptor);
+            }
+          }
+        }
+        input.elements = inputParts.elements;
+        output.elements = outputParts.elements;
+        break;
+      case Style.documentEncoded:
+        throw new Error(g.f('{{WSDL}} style not supported: %s', Style.documentEncoded));
+    }
+ 
+    let faults = this.describeFaults(definitions);
+    let inputHeaders = Operation.describeHeaders(this.input, definitions);
+    let outputHeaders = Operation.describeHeaders(this.output, definitions);
+ 
+    this.descriptor = {
+      name: this.$name,
+      style: this.mode,
+      soapAction: this.soapAction,
+      soapVersion: this.soapVersion,
+      input: {
+        body: input,
+        headers: inputHeaders
+      },
+      output: {
+        body: output,
+        headers: outputHeaders
+      },
+      faults: {
+          body: {Fault : {faults}}
+      }
+    };
+    this.descriptor.inputEnvelope =
+      Operation.createEnvelopeDescriptor(this.descriptor.input, false, this.soapVersion);
+    this.descriptor.outputEnvelope =
+      Operation.createEnvelopeDescriptor(this.descriptor.output, true, this.soapVersion);
+    this.descriptor.faultEnvelope =
+      Operation.createEnvelopeDescriptor(this.descriptor.faults, true, this.soapVersion);
+ 
+    return this.descriptor;
+  }
+ 
+  static createEnvelopeDescriptor(parameterDescriptor, isOutput, soapVersion, prefix, nsURI) {
+    prefix = prefix || 'soap';
+    var soapNsURI;
+    if (soapVersion === '1.1') {
+      soapNsURI = 'http://schemas.xmlsoap.org/soap/envelope/';
+    } else Eif (soapVersion === '1.2') {
+      soapNsURI = 'http://www.w3.org/2003/05/soap-envelope';
+    }
+ 
+    nsURI = nsURI || soapNsURI;
+    var descriptor = new TypeDescriptor();
+ 
+    var envelopeDescriptor = new ElementDescriptor(
+      new QName(nsURI, 'Envelope', prefix), null, 'qualified', false);
+    descriptor.add(envelopeDescriptor);
+ 
+    var headerDescriptor = new ElementDescriptor(
+      new QName(nsURI, 'Header', prefix), null, 'qualified', false);
+ 
+    var bodyDescriptor = new ElementDescriptor(
+      new QName(nsURI, 'Body', prefix), null, 'qualified', false);
+ 
+    envelopeDescriptor.addElement(headerDescriptor);
+    envelopeDescriptor.addElement(bodyDescriptor);
+ 
+    //add only if input or output. Fault is list of faults unlike input/output element and fault needs further processing below,
+    //before it can be added to the <body>
+    if (parameterDescriptor && parameterDescriptor.body && !parameterDescriptor.body.Fault) {
+      bodyDescriptor.add(parameterDescriptor.body);
+    }
+ 
+    if (parameterDescriptor && parameterDescriptor.headers) {
+      bodyDescriptor.add(parameterDescriptor.headers);
+    }
+ 
+    //process faults. An example of resulting structure of the <Body> element with soap 1.1 <Fault> element descriptor:
+    /*
+     <soap:Body>
+       <soap:Fault>
+          <faultcode>sampleFaultCode</faultcode>
+          <faultstring>sampleFaultString</faultstring>
+          <detail>
+            <ns1:myMethodFault1 xmlns:ns1="http://example.com/doc_literal_wrapped_test.wsdl">
+              <errorMessage1>MyMethod Business Exception message</errorMessage1>
+              <value1>10</value1>
+            </ns1:myMethodFault1>
+          </detail>
+        </soap:Fault>
+     </soap:Body>
+     */
+    if (isOutput && parameterDescriptor && parameterDescriptor.body.Fault) {
+      let xsdStr = new QName(helper.namespaces.xsd, 'string', 'xsd');
+      var form;
+      if (soapVersion === '1.1') {
+        form = 'unqualified';
+      } else Eif (soapVersion === '1.2') {
+        form = 'qualified';
+      }
+ 
+      let faultDescriptor = new ElementDescriptor(
+        new QName(nsURI, 'Fault', prefix), null, 'qualified', false);
+      bodyDescriptor.add(faultDescriptor);
+      let detailDescriptor;
+      if (soapVersion === '1.1') {
+        faultDescriptor.add(
+          new ElementDescriptor(new QName(nsURI, 'faultcode', prefix), null, form, false));
+        faultDescriptor.add(
+          new ElementDescriptor(new QName(nsURI, 'faultstring', prefix), null, form, false));
+        faultDescriptor.add(
+          new ElementDescriptor(new QName(nsURI, 'faultactor', prefix), null, form, false));
+        detailDescriptor =
+          new ElementDescriptor(new QName(nsURI, 'detail', prefix), null, form, false);
+        faultDescriptor.add(detailDescriptor);
+      } else Eif (soapVersion === '1.2') {
+        let code = new ElementDescriptor(new QName(nsURI, 'Code', prefix));
+        code.add(
+          new ElementDescriptor(new QName(nsURI, 'Value', prefix), null, form, false));
+        let subCode = new ElementDescriptor(new QName(nsURI, 'Subcode', prefix), null, form, false);
+        code.add (subCode);
+        subCode.add(
+          new ElementDescriptor(new QName(nsURI, 'Value', prefix), null, form, false));
+        faultDescriptor.add(code, null, form, false);
+        let reason = new ElementDescriptor(new QName(nsURI, 'Reason', prefix));
+        reason.add(
+          new ElementDescriptor(new QName(nsURI, 'Text', prefix), null, form, false));
+        faultDescriptor.add(reason, null, form, false);
+        faultDescriptor.add(
+          new ElementDescriptor(new QName(nsURI, 'Node', prefix), null, form, false));
+        faultDescriptor.add(
+          new ElementDescriptor(new QName(nsURI, 'Role', prefix), null, form, false));
+        detailDescriptor =
+          new ElementDescriptor(new QName(nsURI, 'Detail', prefix), null, form, false);
+        faultDescriptor.add(detailDescriptor);
+      }
+      //multiple faults may be defined in wsdl for this operation. Go though every Fault and add it under <detail> element.
+      for (var f in parameterDescriptor.body.Fault.faults) {
+        detailDescriptor.add(parameterDescriptor.body.Fault.faults[f]);
+      }
+    }
+ 
+    return descriptor;
+  }
+ 
+  getMode() {
+    let use = this.input && this.input.body && this.input.body.use || 'literal';
+    if (this.style === 'document' && use === 'literal') {
+      // document literal
+      let element = null;
+      let count = 0;
+      if (this.input && this.input.body) {
+        for (let p in this.input.body.parts) {
+          let part = this.input.body.parts[p];
+          element = part.element;
+          if (!(part.element && !part.type)) {
+            console.error('Document/literal part should use element', part);
+            throw new Error('Document/literal part should use element');
+          }
+          count++;
+        }
+      }
+      // Only one part and the input wrapper element has the same name as
+      // operation
+      if (count === 1 && element.$name === this.$name) {
+        count = 0;
+        Eif (this.output && this.output.body) {
+          for (let p in this.output.body.parts) {
+            let part = this.output.body.parts[p];
+            element = part.element;
+            assert(part.element && !part.type,
+              'Document/literal part should use element');
+            count++;
+          }
+        }
+        Eif (count === 1) {
+          this.mode = Style.documentLiteralWrapped;
+        } else {
+          this.mode = Style.documentLiteral;
+        }
+      } else {
+        this.mode = Style.documentLiteral;
+      }
+    } else if (this.style === 'document' && use === 'encoded') {
+      this.mode = Style.documentEncoded;
+    } else if (this.style === 'rpc' && use === 'encoded') {
+      this.mode = Style.rpcEncoded;
+    } else Eif (this.style === 'rpc' && use === 'literal') {
+      this.mode = Style.rpcLiteral;
+    }
+    return this.mode;
+  }
+ 
+}
+ 
+Operation.Style = Style;
+Operation.elementName = 'operation';
+Operation.allowedChildren = ['documentation', 'input', 'output', 'fault',
+  'operation'];
+ 
+module.exports = Operation;
+ 
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/output.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/output.js.html new file mode 100644 index 00000000..6bd33599 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/output.js.html @@ -0,0 +1,123 @@ + + + + Code coverage report for strong-soap/src/parser/wsdl/output.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/wsdl output.js +

+
+
+ 100% + Statements + 4/4 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 4/4 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19  +  +  +  +  +  +  +1x +  +  +  +412x +  +  +  +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var Parameter = require('./parameter');
+ 
+class Output extends Parameter {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+}
+ 
+Output.elementName = 'output';
+ 
+module.exports = Output;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/parameter.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/parameter.js.html new file mode 100644 index 00000000..5fa29316 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/parameter.js.html @@ -0,0 +1,396 @@ + + + + Code coverage report for strong-soap/src/parser/wsdl/parameter.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/wsdl parameter.js +

+
+
+ 81.48% + Statements + 44/54 +
+
+ 80.56% + Branches + 29/36 +
+
+ 100% + Functions + 3/3 +
+
+ 80% + Lines + 40/50 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110  +  +  +  +  +  +  +1x +1x +1x +  +  +  +  +  +  +969x +  +  +  +  +510x +476x +34x +15x +  +15x +19x +  +15x +  +  +  +  +  +954x +  +509x +509x +509x +  +  +  +509x +509x +  +  +  +954x +445x +445x +4x +4x +4x +4x +  +  +441x +441x +  +  +  +445x +14x +15x +  +15x +15x +15x +15x +9x +  +6x +  +  +  +  +15x +9x +  +  +  +  +  +445x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +1x + 
// Copyright IBM Corp. 2016,2018. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var WSDLElement = require('./wsdlElement');
+var QName = require('../qname');
+var debug = require('debug')('strong-soap:wsdl:parameter');
+ 
+/**
+ * Base class for Input/Output
+ */
+class Parameter extends WSDLElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+ 
+  addChild(child) {
+    // soap:body
+    if (child.name === 'body') {
+      this.body = child;
+    } else if (child.name === 'header') {
+      this.headers = this.headers || [];
+      // soap:header
+      this.headers.push(child);
+    } else if (child.name === 'fault') {
+      //Revisit. Never gets executed.
+      this.fault = child;
+    }
+  }
+ 
+  postProcess(definitions) {
+    // portType.operation.*
+    if (this.parent.parent.name === 'portType') {
+      // Resolve $message
+      var messageName = QName.parse(this.$message).name;
+      var message = definitions.messages[messageName];
+      Iif (!message) {
+        console.error('Unable to resolve message %s for', this.$message, this);
+        throw new Error('Unable to resolve message ' + this.$message);
+      }
+      message.postProcess(definitions);
+      this.message = message;
+    }
+ 
+    // binding.operation.*
+    if (this.parent.parent.name === 'binding') {
+      Eif (this.body) {
+        if (this.body.$parts) {
+          this.body.parts = {};
+          let parts = this.body.$parts.split(/\s+/);
+          for (let i = 0, n = parts.length; i < n; i++) {
+            this.body.parts[parts[i]] = this.message.parts[parts[i]];
+          }
+        } else {
+          Eif (this.message && this.message.parts) {
+            this.body.parts = this.message.parts;
+          }
+        }
+      }
+      if (this.headers) {
+        for (let i = 0, n = this.headers.length; i < n; i++) {
+          let header = this.headers[i];
+          let message;
+          Eif (header.$message) {
+            let messageName = QName.parse(header.$message).name;
+            message = definitions.messages[messageName];
+            if (message) {
+              message.postProcess(definitions);
+            } else {
+              debug('Message not found: ', header.$message);
+            }
+          } else {
+            message = this.message;
+          }
+          if (header.$part && message) {
+            header.part = message.parts[header.$part];
+          }
+        }
+      }
+      //Revisit.. this.name is always undefined because there is no code which calls addChild(..) with child.name = 'fault.
+      //code works inspite of not executing this block. Remove it?
+      Iif (this.name === 'fault') {
+        let message = this.fault.parent.message;
+        if (message) {
+          message.postProcess(definitions);
+          for (let p in message.parts) {
+            // The fault message MUST have only one part per WSDL 1.1 spec
+            this.fault.part = message.parts[p];
+            break;
+          }
+        } else {
+          debug('Message not found: ', this.fault.$message);
+        }
+      }
+    }
+  }
+}
+ 
+Parameter.allowedChildren = [
+  'body',
+  'SecuritySpecRef',
+  'documentation',
+  'header'
+];
+ 
+module.exports = Parameter;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/part.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/part.js.html new file mode 100644 index 00000000..ee90dee5 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/part.js.html @@ -0,0 +1,189 @@ + + + + Code coverage report for strong-soap/src/parser/wsdl/part.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/wsdl part.js +

+
+
+ 50% + Statements + 8/16 +
+
+ 30% + Branches + 3/10 +
+
+ 66.67% + Functions + 2/3 +
+
+ 53.33% + Lines + 8/15 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41  +  +  +  +  +  +  +1x +  +  +  +536x +  +  +  +588x +518x +  +70x +70x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var WSDLElement = require('./wsdlElement');
+ 
+class Part extends WSDLElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+  
+  postProcess(definitions) {
+    if (this.$element) {
+      this.element = this.resolveSchemaObject(
+        definitions.schemas, 'element', this.$element);
+    } else Eif (this.$type) {
+      this.type = this.resolveSchemaObject(
+        definitions.schemas, 'type', this.$type);
+    }
+  }
+ 
+  describe(definitions) {
+    if (this.descriptor) return this.descriptor;
+    if (this.element) {
+      this.descriptor = this.element.describe(definitions);
+    } else if (this.type) {
+      this.descriptor = this.type.describe(definitions);
+    } else {
+      this.descriptor = null;
+    }
+    return this.descriptor;
+  }
+}
+ 
+Part.elementName = 'part';
+ 
+module.exports = Part;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/port.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/port.js.html new file mode 100644 index 00000000..0908be49 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/port.js.html @@ -0,0 +1,150 @@ + + + + Code coverage report for strong-soap/src/parser/wsdl/port.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/wsdl port.js +

+
+
+ 100% + Statements + 8/8 +
+
+ 75% + Branches + 3/4 +
+
+ 100% + Functions + 2/2 +
+
+ 100% + Lines + 8/8 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28  +  +  +  +  +  +  +1x +  +  +  +175x +175x +  +  +  +  +174x +174x +  +  +  +  +1x +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var WSDLElement = require('./wsdlElement');
+ 
+class Port extends WSDLElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+    this.location = null;
+  }
+ 
+  addChild(child) {
+    // soap:address
+    Eif (child.name === 'address' && child.$location !== undefined) {
+      this.location = child.$location;
+    }
+  }
+}
+ 
+Port.elementName = 'port';
+Port.allowedChildren = ['address', 'documentation'];
+ 
+module.exports = Port;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/portType.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/portType.js.html new file mode 100644 index 00000000..abad72d3 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/portType.js.html @@ -0,0 +1,195 @@ + + + + Code coverage report for strong-soap/src/parser/wsdl/portType.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/wsdl portType.js +

+
+
+ 68.18% + Statements + 15/22 +
+
+ 66.67% + Branches + 4/6 +
+
+ 66.67% + Functions + 2/3 +
+
+ 65% + Lines + 13/20 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43  +  +  +  +  +  +  +1x +  +  +  +165x +  +  +  +169x +164x +164x +164x +  +164x +241x +  +241x +241x +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var WSDLElement = require('./wsdlElement');
+ 
+class PortType extends WSDLElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+ 
+  postProcess(definitions) {
+    if (this.operations) return;
+    this.operations = {};
+    var children = this.children;
+    Iif (typeof children === 'undefined')
+      return;
+    for (var i = 0, child; child = children[i]; i++) {
+      Iif (child.name !== 'operation')
+        continue;
+      child.postProcess(definitions);
+      this.operations[child.$name] = child;
+    }
+  }
+ 
+  describe(definitions) {
+    var operations = {};
+    for (var name in this.operations) {
+      var method = this.operations[name];
+      operations[name] = method.describe(definitions);
+    }
+    return operations;
+  };
+}
+ 
+PortType.elementName = 'portType';
+PortType.allowedChildren = ['operation', 'documentation'];
+ 
+module.exports = PortType;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/service.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/service.js.html new file mode 100644 index 00000000..6894ba47 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/service.js.html @@ -0,0 +1,243 @@ + + + + Code coverage report for strong-soap/src/parser/wsdl/service.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/wsdl service.js +

+
+
+ 96.67% + Statements + 29/30 +
+
+ 90% + Branches + 9/10 +
+
+ 100% + Functions + 3/3 +
+
+ 100% + Lines + 28/28 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59  +  +  +  +  +  +  +1x +1x +  +  +  +166x +166x +  +  +  +165x +165x +165x +165x +164x +179x +6x +173x +173x +173x +171x +170x +  +  +  +170x +  +  +  +  +1x +  +  +  +  +38x +38x +38x +41x +41x +  +37x +37x +  +  +  +  +1x +1x +  +1x + 
// Copyright IBM Corp. 2016,2018. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var WSDLElement = require('./wsdlElement');
+var QName = require('../qname');
+ 
+class Service extends WSDLElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+    this.ports = {};
+  }
+ 
+  postProcess(definitions) {
+    try {
+      var children = this.children,
+        bindings = definitions.bindings;
+      if (children && children.length > 0) {
+        for (var i = 0, child; child = children[i]; i++) {
+          if (child.name !== 'port')
+            continue;
+          var bindingName = QName.parse(child.$binding).name;
+          var binding = bindings[bindingName];
+          if (binding) {
+            binding.postProcess(definitions);
+            this.ports[child.$name] = {
+              location: child.location,
+              binding: binding
+            };
+            children.splice(i--, 1);
+          }
+        }
+      }
+    } catch (err) {
+      throw err;
+    }
+  }
+ 
+  describe(definitions) {
+    Iif (this.descriptor) return this.descriptor;
+    var ports = {};
+    for (var name in this.ports) {
+      var port = this.ports[name];
+      ports[name] = port.binding.describe(definitions);
+    }
+    this.descriptor = ports;
+    return this.descriptor;
+  }
+ 
+}
+ 
+Service.elementName = 'service';
+Service.allowedChildren = ['port', 'documentation'];
+ 
+module.exports = Service;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/types.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/types.js.html new file mode 100644 index 00000000..cd009605 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/types.js.html @@ -0,0 +1,189 @@ + + + + Code coverage report for strong-soap/src/parser/wsdl/types.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/wsdl types.js +

+
+
+ 100% + Statements + 15/15 +
+
+ 100% + Branches + 6/6 +
+
+ 100% + Functions + 2/2 +
+
+ 100% + Lines + 15/15 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41  +  +  +  +  +  +  +1x +1x +1x +1x +  +  +  +326x +326x +  +  +  +335x +  +335x +  +334x +  +334x +332x +  +  +  +2x +  +  +  +  +  +1x +1x +  +1x + 
// Copyright IBM Corp. 2016,2018. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var WSDLElement = require('./wsdlElement');
+var assert = require('assert');
+var Schema = require('../xsd/schema');
+var Documentation = require('./documentation');
+ 
+class Types extends WSDLElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+    this.schemas = {};
+  }
+ 
+  addChild(child) {
+    assert(child instanceof Schema || child instanceof Documentation);
+ 
+    if (child instanceof Schema) {
+ 
+      var targetNamespace = child.$targetNamespace;
+ 
+      if (!this.schemas.hasOwnProperty(targetNamespace)) {
+        this.schemas[targetNamespace] = child;
+      } else {
+        // types might have multiple schemas with the same target namespace,
+        // including no target namespace
+        this.schemas[targetNamespace].merge(child, true);
+      }
+    }
+  };
+}
+ 
+Types.elementName = 'types';
+Types.allowedChildren = ['schema', 'documentation'];
+ 
+module.exports = Types;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/wsdlElement.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/wsdlElement.js.html new file mode 100644 index 00000000..54bc6983 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/wsdl/wsdlElement.js.html @@ -0,0 +1,126 @@ + + + + Code coverage report for strong-soap/src/parser/wsdl/wsdlElement.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/wsdl wsdlElement.js +

+
+
+ 100% + Statements + 5/5 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 5/5 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20  +  +  +  +  +  +  +1x +  +  +  +3841x +  +  +  +1x +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var Element = require('../element');
+ 
+class WSDLElement extends Element {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+}
+ 
+WSDLElement.targetNamespace = Element.namespaces.wsdl;
+WSDLElement.allowedChildren = ['documentation'];
+ 
+module.exports = WSDLElement;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/xmlHandler.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/xmlHandler.js.html new file mode 100644 index 00000000..d8f8eec8 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/xmlHandler.js.html @@ -0,0 +1,2763 @@ + + + + Code coverage report for strong-soap/src/parser/xmlHandler.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser xmlHandler.js +

+
+
+ 87.5% + Statements + 455/520 +
+
+ 77.75% + Branches + 318/409 +
+
+ 85.29% + Functions + 29/34 +
+
+ 88.42% + Lines + 443/501 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377 +378 +379 +380 +381 +382 +383 +384 +385 +386 +387 +388 +389 +390 +391 +392 +393 +394 +395 +396 +397 +398 +399 +400 +401 +402 +403 +404 +405 +406 +407 +408 +409 +410 +411 +412 +413 +414 +415 +416 +417 +418 +419 +420 +421 +422 +423 +424 +425 +426 +427 +428 +429 +430 +431 +432 +433 +434 +435 +436 +437 +438 +439 +440 +441 +442 +443 +444 +445 +446 +447 +448 +449 +450 +451 +452 +453 +454 +455 +456 +457 +458 +459 +460 +461 +462 +463 +464 +465 +466 +467 +468 +469 +470 +471 +472 +473 +474 +475 +476 +477 +478 +479 +480 +481 +482 +483 +484 +485 +486 +487 +488 +489 +490 +491 +492 +493 +494 +495 +496 +497 +498 +499 +500 +501 +502 +503 +504 +505 +506 +507 +508 +509 +510 +511 +512 +513 +514 +515 +516 +517 +518 +519 +520 +521 +522 +523 +524 +525 +526 +527 +528 +529 +530 +531 +532 +533 +534 +535 +536 +537 +538 +539 +540 +541 +542 +543 +544 +545 +546 +547 +548 +549 +550 +551 +552 +553 +554 +555 +556 +557 +558 +559 +560 +561 +562 +563 +564 +565 +566 +567 +568 +569 +570 +571 +572 +573 +574 +575 +576 +577 +578 +579 +580 +581 +582 +583 +584 +585 +586 +587 +588 +589 +590 +591 +592 +593 +594 +595 +596 +597 +598 +599 +600 +601 +602 +603 +604 +605 +606 +607 +608 +609 +610 +611 +612 +613 +614 +615 +616 +617 +618 +619 +620 +621 +622 +623 +624 +625 +626 +627 +628 +629 +630 +631 +632 +633 +634 +635 +636 +637 +638 +639 +640 +641 +642 +643 +644 +645 +646 +647 +648 +649 +650 +651 +652 +653 +654 +655 +656 +657 +658 +659 +660 +661 +662 +663 +664 +665 +666 +667 +668 +669 +670 +671 +672 +673 +674 +675 +676 +677 +678 +679 +680 +681 +682 +683 +684 +685 +686 +687 +688 +689 +690 +691 +692 +693 +694 +695 +696 +697 +698 +699 +700 +701 +702 +703 +704 +705 +706 +707 +708 +709 +710 +711 +712 +713 +714 +715 +716 +717 +718 +719 +720 +721 +722 +723 +724 +725 +726 +727 +728 +729 +730 +731 +732 +733 +734 +735 +736 +737 +738 +739 +740 +741 +742 +743 +744 +745 +746 +747 +748 +749 +750 +751 +752 +753 +754 +755 +756 +757 +758 +759 +760 +761 +762 +763 +764 +765 +766 +767 +768 +769 +770 +771 +772 +773 +774 +775 +776 +777 +778 +779 +780 +781 +782 +783 +784 +785 +786 +787 +788 +789 +790 +791 +792 +793 +794 +795 +796 +797 +798 +799 +800 +801 +802 +803 +804 +805 +806 +807 +808 +809 +810 +811 +812 +813 +814 +815 +816 +817 +818 +819 +820 +821 +822 +823 +824 +825 +826 +827 +828 +829 +830 +831 +832 +833 +834 +835 +836 +837 +838 +839 +840 +841 +842 +843 +844 +845 +846 +847 +848 +849 +850 +851 +852 +853 +854 +855 +856 +857 +858 +859 +860 +861 +862 +863 +864 +865 +866 +867 +868 +869 +870 +871 +872 +873 +874 +875 +876 +877 +878 +879 +880 +881 +882 +883 +884 +885 +886 +887 +888 +889 +890 +891 +892 +893 +894 +895 +896 +897 +898 +899  +  +  +  +  +  +  +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +  +  +  +  +228x +228x +228x +228x +228x +228x +  +  +  +806x +  +  +  +806x +5x +  +  +  +806x +806x +49x +49x +49x +48x +1x +1x +  +1x +1x +1x +  +49x +  +  +757x +632x +632x +632x +632x +92x +29x +49x +  +29x +  +  +603x +  +300x +50x +  +  +300x +19x +  +  +  +  +  +603x +194x +194x +194x +409x +409x +409x +  +409x +409x +  +409x +208x +208x +  +  +  +409x +409x +  +409x +208x +  +  +  +  +603x +1x +1x +1x +1x +602x +  +1x +1x +1x +1x +  +  +601x +49x +49x +49x +49x +34x +34x +34x +  +  +  +  +587x +587x +  +  +589x +208x +208x +  +  +  +589x +5x +  +3x +3x +3x +  +  +  +  +589x +231x +  +17x +  +17x +  +  +231x +231x +  +231x +358x +  +356x +356x +31x +44x +44x +15x +15x +11x +11x +7x +7x +6x +  +  +  +  +  +  +  +  +  +  +358x +  +76x +76x +  +  +76x +2x +  +76x +76x +  +76x +  +  +282x +268x +268x +  +268x +  +  +125x +125x +111x +  +  +  +  +  +  +  +  +  +  +  +  +405x +31x +44x +  +44x +  +15x +  +13x +  +2x +  +15x +15x +  +7x +  +  +  +7x +  +15x +  +  +  +405x +  +  +  +  +258x +258x +258x +258x +258x +  +405x +405x +233x +233x +25x +  +233x +  +405x +  +  +  +  +  +  +  +  +  +  +  +407x +405x +  +  +  +  +  +  +405x +405x +  +405x +405x +405x +401x +991x +991x +991x +991x +  +  +  +405x +401x +60x +60x +60x +  +  +  +  +405x +405x +405x +564x +31x +533x +533x +533x +66x +  +  +66x +  +  +533x +533x +  +  +  +  +377x +  +377x +  +  +  +396x +396x +396x +69x +69x +  +396x +50x +65x +  +65x +  +16x +  +13x +  +3x +  +16x +16x +  +16x +16x +  +16x +  +49x +49x +11x +  +11x +  +  +  +49x +  +  +  +  +  +26x +26x +  +26x +26x +  +26x +26x +26x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +6x +6x +6x +6x +6x +  +  +  +  +6x +  +  +6x +6x +  +6x +  +  +  +  +6x +  +11x +11x +11x +9x +  +  +  +6x +  +  +  +  +  +  +  +6x +  +28x +28x +28x +  +28x +28x +  +  +6x +28x +28x +28x +28x +  +  +6x +6x +  +  +  +  +  +6x +6x +  +  +  +6x +  +  +  +  +699x +  +699x +252x +447x +  +447x +447x +410x +  +37x +  +  +  +  +  +  +  +  +149x +149x +149x +149x +149x +149x +149x +  +149x +978x +978x +978x +978x +978x +978x +978x +  +  +978x +508x +392x +392x +  +  +  +  +978x +508x +116x +116x +116x +116x +116x +  +27x +  +10x +10x +  +10x +17x +  +17x +17x +17x +17x +17x +17x +  +  +  +106x +106x +106x +106x +  +106x +  +17x +17x +17x +17x +  +89x +  +  +  +978x +83x +83x +  +  +978x +978x +  +  +978x +  +  +  +  +  +  +  +  +978x +978x +1x +1x +  +  +978x +  +  +  +  +  +  +  +149x +977x +977x +977x +977x +977x +538x +  +977x +977x +  +13x +13x +  +  +  +  +13x +  +  +964x +  +  +977x +1x +  +  +  +149x +2x +2x +  +  +2x +1x +  +  +2x +  +  +149x +2x +2x +  +  +149x +2007x +2007x +1310x +  +697x +697x +697x +697x +  +  +149x +  +  +142x +  +  +  +  +  +  +  +  +142x +1x +1x +  +  +  +  +142x +137x +137x +137x +  +18x +  +18x +12x +  +  +18x +  +  +18x +18x +18x +  +  +119x +  +5x +  +  +  +  +  +18x +18x +  +18x +6x +  +6x +6x +  +6x +  +6x +6x +  +6x +  +6x +  +  +6x +  +6x +5x +1x +  +4x +  +  +  +18x +  +  +  +12x +12x +  +12x +  +12x +12x +12x +  +12x +  +  +12x +  +12x +  +  +12x +  +12x +12x +  +12x +  +12x +5x +  +12x +  +12x +5x +  +12x +  +12x +9x +  +  +9x +  +  +  +12x +  +  +  +  +244x +244x +  +244x +36x +  +36x +  +36x +  +208x +  +  +  +813x +813x +813x +813x +6x +  +  +  +6x +2x +  +6x +807x +33x +11x +  +22x +  +774x +49x +  +813x +  +  +  +3x +3x +3x +  +  +  +3x +3x +3x +  +  +  +4x +4x +4x +  +  +  +713x +397x +1x +396x +1x +395x +2x +  +397x +  +  +1x +  +  +1x +1x +1x +1x + 
// Copyright IBM Corp. 2016,2019. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var xmlBuilder = require('xmlbuilder');
+var sax = require('sax');
+var stream = require('stream');
+var assert = require('assert');
+var selectn = require('selectn');
+var debug = require('debug')('strong-soap:xmlhandler');
+var descriptor = require('./xsd/descriptor');
+var ElementDescriptor = descriptor.ElementDescriptor;
+var AttributeDescriptor = descriptor.AttributeDescriptor;
+var TypeDescriptor = descriptor.TypeDescriptor;
+var QName = require('./qname');
+var helper = require('./helper');
+var NamespaceContext = require('./nscontext');
+ 
+ 
+class XMLHandler {
+  constructor(schemas, options) {
+    this.schemas = schemas || {};
+    this.options = options || {};
+    this.options.valueKey = this.options.valueKey || '$value';
+    this.options.xmlKey = this.options.xmlKey || '$xml';
+    this.options.attributesKey = this.options.attributesKey || '$attributes';
+    this.options.xsiTypeKey = this.options.xsiTypeKey || '$xsiType';
+  }
+ 
+  jsonToXml(node, nsContext, descriptor, val) {
+    Iif (node == null) {
+      node = xmlBuilder.begin(
+        {version: '1.0', encoding: 'UTF-8', standalone: true});
+    }
+    if (nsContext == null) {
+      nsContext = new NamespaceContext();
+    }
+ 
+    var name;
+    let nameSpaceContextCreated = false;
+    if (descriptor instanceof AttributeDescriptor) {
+      val = toXmlDateOrTime(descriptor, val);
+      name = descriptor.qname.name;
+      if (descriptor.form === 'unqualified') {
+        node.attribute(name, val);
+      } else Eif (descriptor.qname) {
+        let mapping = declareNamespace(nsContext, node, descriptor.qname.prefix,
+          descriptor.qname.nsURI);
+        let prefix = mapping ? mapping.prefix : descriptor.qname.prefix;
+        let attrName = prefix ? prefix + ':' + name : name;
+        node.attribute(attrName, val);
+      }
+      return node;
+    }
+ 
+    if (descriptor instanceof ElementDescriptor) {
+      name = descriptor.qname.name;
+      let isSimple = descriptor.isSimple;
+      let attrs = null;
+      if (descriptor.isMany) {
+        if (Array.isArray(val)) {
+          for (let i = 0, n = val.length; i < n; i++) {
+            node = this.jsonToXml(node, nsContext, descriptor, val[i]);
+          }
+          return node;
+        }
+      }
+      if(val !== null && typeof val === "object"){
+        // check for $attributes field
+        if (typeof val[this.options.attributesKey] !== "undefined"){
+          attrs = val[this.options.attributesKey];
+        }
+        // add any $value field as xml element value
+        if (typeof val[this.options.valueKey] !== "undefined"){
+          val = val[this.options.valueKey];
+        }
+      }
+      let element;
+      let elementName;
+      let xmlns;
+      if (descriptor.form === 'unqualified') {
+        elementName = name;
+        nsContext.pushContext();
+        nameSpaceContextCreated = true;
+      } else Eif (descriptor.qname) {
+        nsContext.pushContext();
+        nameSpaceContextCreated = true;
+        // get the mapping for the namespace uri
+        let mapping = nsContext.getPrefixMapping(descriptor.qname.nsURI);
+        let newlyDeclared = false;
+        // if namespace not declared, declare it
+        if (mapping === null || mapping.declared === false) {
+          newlyDeclared = true;
+          mapping = declareNamespace(nsContext, null,
+          descriptor.qname.prefix, descriptor.qname.nsURI);
+        }
+        // add the element to a parent node
+        let prefix = mapping ? mapping.prefix : descriptor.qname.prefix;
+        elementName = prefix ? prefix + ':' + name : name;
+        // if namespace is newly declared add the xmlns attribute
+        if (newlyDeclared) {
+          xmlns = prefix ? 'xmlns:' + prefix : 'xmlns';
+        }
+      }
+ 
+      // add the element to a parent node
+      if (isSimple && /<!\[CDATA/.test(val)) {
+        element = node.element(elementName);
+        val = val.replace("<![CDATA[","");
+        val = val.replace("]]>","");
+        element.cdata(val);
+      }else if(isSimple && typeof val !== "undefined" && val !== null
+        && typeof val[this.options.xmlKey] !== "undefined") {
+        val = val[this.options.xmlKey];
+        element = node.element(elementName);
+        val = toXmlDateOrTime(descriptor, val);
+        element.raw(val);
+      } else {
+        // Enforce the type restrictions if configured for such
+        if (this.options.enforceRestrictions && descriptor.type) {
+          const schema = this.schemas[descriptor.type.nsURI];
+          Eif (schema) {
+            const type = schema.simpleTypes[descriptor.type.name];
+            if (type) {
+              const restriction = type.restriction;
+              Eif (restriction) {
+                val = restriction.enforce(val);
+              }
+            }
+          }
+        }
+        val = toXmlDateOrTime(descriptor, val);
+        element = isSimple ? node.element(elementName, val) : node.element(elementName);
+      }
+ 
+      if (xmlns && descriptor.qname.nsURI) {
+        Eif (typeof element.attribute === 'function') {
+          element.attribute(xmlns, descriptor.qname.nsURI);
+        }
+      }
+ 
+      if (val == null) {
+        if (descriptor.isNillable) {
+          // Set xsi:nil = true
+          declareNamespace(nsContext, element, 'xsi', helper.namespaces.xsi);
+          Eif (typeof element.attribute === 'function') {
+            element.attribute('xsi:nil', true);
+          }
+        }
+      }
+ 
+      if (isSimple) {
+        if (attrs !== null) {
+          // add each field in $attributes object as xml element attribute
+          Eif (typeof attrs === "object") {
+            //add $attributes. Attribute can be an attribute defined in XSD or an xsi:type
+            this.addAttributes(element, nsContext, descriptor, val, attrs);
+          }
+        }
+        Eif (nameSpaceContextCreated) {
+          nsContext.popContext();
+        }
+        return node;
+      } else if ( val != null) {
+ 
+        let attrs = val[this.options.attributesKey];
+        if (typeof attrs === 'object') {
+          for (let p in attrs) {
+            let child = attrs[p];
+            if (p === this.options.xsiTypeKey) {
+              Eif (descriptor instanceof ElementDescriptor) {
+                if (descriptor.refOriginal) {
+                  Eif (descriptor.refOriginal.typeDescriptor) {
+                    if (descriptor.refOriginal.typeDescriptor.inheritance){
+                      let extension = descriptor.refOriginal.typeDescriptor.inheritance[child.type];
+                      if (extension) {
+                        descriptor.elements = descriptor.elements.concat(extension.elements);
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      //val is not an object - simple or date types
+      if (val != null && ( typeof val !== 'object' || val instanceof Date)) {
+        // for adding a field value nsContext.popContext() shouldnt be called
+        val = toXmlDateOrTime(descriptor, val);
+        element.text(val);
+        //add $attributes. Attribute can be an attribute defined in XSD or an xsi:type.
+        //e.g of xsi:type <name xmlns=".." xmlns:xsi="..." xmlns:ns="..." xsi:type="ns:string">some name</name>
+        if (attrs != null) {
+          this.addAttributes(element, nsContext, descriptor, val, attrs);
+        }
+        Eif (nameSpaceContextCreated) {
+          nsContext.popContext();
+        }
+        return node;
+      }
+ 
+      this.mapObject(element, nsContext, descriptor, val, attrs);
+      Eif (nameSpaceContextCreated) {
+        nsContext.popContext();
+      }
+      return node;
+    }
+ 
+    Eif (descriptor == null  || descriptor === undefined || descriptor instanceof TypeDescriptor) {
+      this.mapObject(node, nsContext, descriptor, val);
+      return node;
+    }
+ 
+    return node;
+  }
+ 
+  /**
+   * Check if the attributes have xsi:type and return the xsi type descriptor if exists
+   * @param {*} descriptor The current descriptor
+   * @param {*} attrs An object of attribute values
+   */
+  getXsiType(descriptor, attrs) {
+    var xsiTypeDescriptor;
+    if (attrs != null && typeof attrs === "object") {
+      for (let p in attrs) {
+        let child = attrs[p];
+        // if field is $xsiType add xsi:type attribute
+        if (p === this.options.xsiTypeKey) {
+          let xsiType;
+          if (typeof child === "object" && typeof child.type !== "undefined") {
+            // $xsiType has two fields - type, xmlns
+            xsiType = QName.parse(child.type, child.xmlns);
+          } else {
+            xsiType = QName.parse(child);
+          }
+          var schema = this.schemas[xsiType.nsURI];
+          if (schema) {
+            var xsiTypeInfo =
+              schema.complexTypes[xsiType.name] ||
+              schema.simpleTypes[xsiType.name];
+            // The type might not be described
+            // describe() takes wsdl definitions
+            xsiTypeDescriptor = xsiTypeInfo && xsiTypeInfo.describe({schemas: this.schemas});
+          }
+          break;
+        }
+      }
+    }
+    return xsiTypeDescriptor;
+  }
+ 
+  _sortKeys(val, elementOrder) {
+    function compare(n1, n2, order) {
+      let i1 = order.indexOf(n1);
+      if (i1 === -1) i1 = order.length;
+      let i2 = order.indexOf(n2);
+      if (i2 === -1) i2 = order.length;
+      return i1 - i2;
+    }
+    const keys = Object.keys(val);
+    var names = [].concat(keys).sort((n1, n2) => {
+      let result = compare(n1, n2, elementOrder);
+      if (result ===0) {
+        result = compare(n1, n2, keys);
+      }
+      return result;
+    });
+    return names;
+  }
+ 
+  /**
+   * Map a JSON object into an XML type
+   * @param {XMLElement} node The root node
+   * @param {NamespaceContext} nsContext Namespace context
+   * @param {TypeDescriptor|ElementDescriptor} descriptor
+   * @param {Object} val
+   * @returns {*}
+   */
+  mapObject(node, nsContext, descriptor, val, attrs) {
+    if (val == null) return node;
+    Iif (typeof val !== 'object' || (val instanceof Date)) {
+      val = toXmlDateOrTime(descriptor, val);
+      node.text(val);
+      return node;
+    }
+ 
+    // First try to see if a subtype should be used
+    var xsiType = this.getXsiType(descriptor, attrs);
+    descriptor = xsiType || descriptor;
+ 
+    var elements = {}, attributes = {};
+    var elementOrder = [];
+    if (descriptor != null) {
+      for (let i = 0, n = descriptor.elements.length; i < n; i++) {
+        let elementDescriptor = descriptor.elements[i];
+        let elementName = elementDescriptor.qname.name;
+        elements[elementName] = elementDescriptor;
+        elementOrder.push(elementName);
+      }
+    }
+ 
+    if (descriptor != null) {
+      for (let a in descriptor.attributes) {
+        let attributeDescriptor = descriptor.attributes[a];
+        let attributeName = attributeDescriptor.qname.name;
+        attributes[attributeName] = attributeDescriptor;
+      }
+    }
+ 
+    // handle later if value is an array
+    Eif (!Array.isArray(val)) {
+      const names = this._sortKeys(val, elementOrder);
+      for (let p of names) {
+        if (p === this.options.attributesKey)
+          continue;
+	      let child = val[p];
+	      let childDescriptor = elements[p] || attributes[p];
+	      if (childDescriptor == null) {
+	        Iif (this.options.ignoreUnknownProperties)
+            continue;
+          else
+            childDescriptor = new ElementDescriptor(
+              QName.parse(p), null, 'unqualified', Array.isArray(child));
+        }
+        Eif (childDescriptor) {
+          this.jsonToXml(node, nsContext, childDescriptor, child);
+        }
+	    }
+    }
+ 
+    this.addAttributes(node, nsContext, descriptor, val, attrs);
+ 
+    return node;
+  }
+ 
+  addAttributes(node, nsContext, descriptor, val, attrs) {
+    var attrDescriptors = (descriptor && descriptor.attributes) || [];
+    var attributes = {};
+    for (var i = 0; i < attrDescriptors.length; i++) {
+      var qname = attrDescriptors[i].qname;
+      attributes[qname.name] = attrDescriptors[i];
+    }
+    if (attrs != null && typeof attrs === 'object') {
+      for (let p in attrs) {
+        let child = attrs[p];
+        // if field is $xsiType add xsi:type attribute
+        if (p === this.options.xsiTypeKey) {
+          let xsiType;
+          if(typeof child === 'object' && typeof child.type !== 'undefined') {
+            // $xsiType has two fields - type, xmlns
+            xsiType = QName.parse(child.type, child.xmlns);
+          } else {
+            xsiType = QName.parse(child);
+          }
+          declareNamespace(nsContext, node, 'xsi', helper.namespaces.xsi);
+          let mapping = declareNamespace(nsContext, node, xsiType.prefix,
+            xsiType.nsURI);
+          let prefix = mapping ? mapping.prefix : xsiType.prefix;
+          node.attribute('xsi:type', prefix ? prefix + ':' + xsiType.name :
+            xsiType.name);
+          continue;
+        }
+        let childDescriptor = attributes[p];
+        if (childDescriptor == null) {
+          Iif (this.options.ignoreUnknownProperties) continue;
+          else {
+            childDescriptor =
+              new AttributeDescriptor(QName.parse(p), null, 'unqualified');
+          }
+        }
+        this.jsonToXml(node, nsContext, childDescriptor, child);
+      }
+    }
+  }
+ 
+  static createSOAPEnvelope(prefix, nsURI) {
+    prefix = prefix || 'soap';
+    var doc = xmlBuilder.create(prefix + ':Envelope',
+      {version: '1.0', encoding: 'UTF-8', standalone: true});
+    nsURI = nsURI || 'http://schemas.xmlsoap.org/soap/envelope/'
+    doc.attribute('xmlns:' + prefix,
+      nsURI);
+    let header = doc.element(prefix + ':Header');
+    let body = doc.element(prefix + ':Body');
+    return {
+      body: body,
+      header: header,
+      doc: doc
+    };
+  }
+ 
+  static createSOAPEnvelopeDescriptor(prefix, nsURI, parameterDescriptor) {
+    prefix = prefix || 'soap';
+    nsURI = nsURI || 'http://schemas.xmlsoap.org/soap/envelope/'
+    var descriptor = new TypeDescriptor();
+ 
+    var envelopeDescriptor = new ElementDescriptor(
+      new QName(nsURI, 'Envelope', prefix), null, 'qualified', false);
+    descriptor.addElement(envelopeDescriptor);
+ 
+    var headerDescriptor = new ElementDescriptor(
+      new QName(nsURI, 'Header', prefix), null, 'qualified', false);
+ 
+    var bodyDescriptor = new ElementDescriptor(
+      new QName(nsURI, 'Body', prefix), null, 'qualified', false);
+ 
+    envelopeDescriptor.addElement(headerDescriptor);
+    envelopeDescriptor.addElement(bodyDescriptor);
+ 
+    if (parameterDescriptor && parameterDescriptor.body) {
+      bodyDescriptor.add(parameterDescriptor.body);
+    }
+ 
+    if (parameterDescriptor && parameterDescriptor.headers) {
+      bodyDescriptor.add(parameterDescriptor.headers);
+    }
+ 
+    if (parameterDescriptor && parameterDescriptor.faults) {
+      var xsdStr = new QName(helper.namespaces.xsd, 'string', 'xsd');
+      var faultDescriptor = new ElementDescriptor(
+        new QName(nsURI, 'Fault', prefix), null, 'qualified', false);
+      faultDescriptor.addElement(
+        new ElementDescriptor(nsURI, 'faultcode', xsdStr, 'qualified', false));
+      faultDescriptor.addElement(
+        new ElementDescriptor(nsURI, 'faultstring', xsdStr, 'qualified', false));
+      faultDescriptor.addElement(
+        new ElementDescriptor(nsURI, 'faultactor', xsdStr, 'qualified', false));
+      var detailDescriptor =
+        new ElementDescriptor(nsURI, 'detail', null, 'qualified', false);
+      faultDescriptor.addElement(detailDescriptor);
+ 
+      for (var f in parameterDescriptor.faults) {
+        detailDescriptor.add(parameterDescriptor.faults[f]);
+      }
+    }
+ 
+    return descriptor;
+  }
+ 
+  /**
+   * Parse XML string or stream into the XMLBuilder tree
+   * @param root The root node
+   * @param xml XML string or stream
+   * @param cb
+   * @returns {*}
+   */
+  static parseXml(root, xml, cb) {
+    let parser;
+    let stringMode = true;
+    debug('XMLHandler parseXML. root: %j xml: %j', root, xml);
+    Eif (typeof xml === 'string') {
+      stringMode = true;
+      parser = sax.parser(true, {opt: {xmlns: true}});
+    } else if (xml instanceof stream.Readable) {
+      stringMode = false;
+      parser = sax.createStream(true, {opt: {xmlns: true}});
+    }
+    Iif (!root) {
+      root = xmlBuilder.begin();
+    }
+    let current = root;
+    let stack = [root];
+ 
+    parser.onerror = function(e) {
+      // an error happened.
+      if (cb) process.nextTick(cb);
+    };
+ 
+    parser.ontext = function(text) {
+      // got some text.  t is the string of text.
+      Iif (current.isDocument) return;
+      text = text.trim();
+      if (text) {
+        current.text(text);
+      }
+    };
+ 
+    parser.oncdata = function(text) {
+      if (current.isDocument) return;
+      text = text.trim();
+      if (text) {
+        current.cdata(text);
+      }
+    };
+ 
+    parser.onopentag = function(node) {
+      // opened a tag.  node has "name" and "attributes"
+      let element = current.element(node.name);
+      Eif (node.attributes) {
+        element.attribute(node.attributes);
+      }
+      stack.push(element);
+      current = element;
+    };
+ 
+    parser.onclosetag = function(nsName) {
+      var top = stack.pop();
+      assert(top === current);
+      assert(top.name === nsName);
+      current = stack[stack.length - 1];
+    };
+ 
+    parser.onend = function() {
+      Iif (cb) process.nextTick(function() {
+        // parser stream is done, and ready to have more stuff written to it.
+        cb && cb(null, root);
+      });
+    };
+ 
+    Eif (stringMode) {
+      parser.write(xml).close();
+    } else {
+      xml.pipe(parser);
+    }
+    return root;
+  }
+ 
+  _processText(top, val) {
+    // The parent element has xsi:nil = true
+    Iif (top.object === null) return;
+    // Top object has no other elements or attributes
+    if (top.object === undefined) {
+      top.object = val;
+    } else Eif (top.object.constructor === Object) {
+      // Top object already has attributes or elements
+      let value = top.object[this.options.valueKey];
+      if (value !== undefined) {
+        top.object[this.options.valueKey] = value + val;
+      } else {
+        top.object[this.options.valueKey] = val;
+      }
+    } else {
+      // Top object is other simple types, such as string or date
+      top.object = top.object + val;
+    }
+  }
+ 
+  xmlToJson(nsContext, xml, descriptor) {
+    var self = this;
+    var p = sax.parser(true);
+    nsContext = nsContext || new NamespaceContext();
+    var root = {};
+    var refs = {}, id; // {id: {hrefs:[], obj:}, ...}
+    var stack = [{name: null, object: root, descriptor: descriptor}];
+    var options = this.options;
+ 
+    p.onopentag = function(node) {
+      nsContext.pushContext();
+      var top = stack[stack.length - 1];
+      var descriptor = top.descriptor;
+      var nsName = node.name;
+      var attrs = node.attributes;
+      var obj = undefined;
+      var elementAttributes = null;
+ 
+      // Register namespaces 1st
+      for (let a in attrs) {
+        if (/^xmlns:|^xmlns$/.test(a)) {
+          let prefix = (a === 'xmlns') ? '' : a.substring(6);
+          nsContext.addNamespace(prefix, attrs[a]);
+        }
+      }
+ 
+      // Handle regular attributes
+      for (let a in attrs) {
+        if (/^xmlns:|^xmlns$/.test(a)) continue;
+        let qname = QName.parse(a);
+        var isXsiType = false;
+        var xsiType = null;
+        var xsiXmlns = null;
+        if (nsContext.getNamespaceURI(qname.prefix) === helper.namespaces.xsi) {
+          // Handle xsi:*
+          if (qname.name == 'nil') {
+            // xsi:nil
+            Eif (attrs[a] === 'true') {
+              obj = null;
+            }
+            continue;
+          } else Eif (qname.name === 'type') {
+            // xsi:type
+            isXsiType = true;
+            xsiType = attrs[a];
+            xsiType = QName.parse(xsiType);
+            attrs[a] = xsiType.name;
+            Eif(xsiType.prefix){
+              xsiXmlns = nsContext.getNamespaceURI(xsiType.prefix);
+            }
+          }
+        }
+        let attrName = qname.name;
+        elementAttributes = elementAttributes || {};
+        let attrDescriptor = descriptor && descriptor.findAttribute(qname.name);
+        let attrValue = parseValue(attrs[a], attrDescriptor);
+        // if element attribute is xsi:type add $xsiType field
+        if (isXsiType) {
+          // $xsiType object has two fields - type and xmlns
+          xsiType = {};
+          xsiType.type = attrs[a];
+          xsiType.xmlns = xsiXmlns;
+          elementAttributes[options.xsiTypeKey] = xsiType;
+        } else {
+          elementAttributes[attrName] = attrs[a];
+        }
+      }
+ 
+      if (elementAttributes) {
+        obj = {};
+        obj[self.options.attributesKey] = elementAttributes;
+      }
+ 
+      var elementQName = QName.parse(nsName);
+      elementQName.nsURI = nsContext.getNamespaceURI(elementQName.prefix);
+ 
+      // SOAP href (#id)
+      Iif (attrs.href != null) {
+        id = attrs.href.substr(1);
+        if (refs[id] === undefined) {
+          refs[id] = {hrefs: [], object: null};
+        }
+        refs[id].hrefs.push({
+          parent: top.object, key: elementQName.name, object: obj
+        });
+      }
+      id = attrs.id;
+      if (id != null) {
+        Eif (refs[id] === undefined)
+          refs[id] = {hrefs: [], object: null};
+      }
+ 
+      stack.push({
+        name: elementQName.name,
+        object: obj,
+        descriptor: descriptor && descriptor.findElement(elementQName.name),
+        id: attrs.id,
+      });
+    };
+ 
+    p.onclosetag = function(nsName) {
+      var elementName = QName.parse(nsName).name;
+      nsContext.popContext();
+      var current = stack.pop();
+      var top = stack[stack.length - 1];
+      if (top.object === undefined) {
+        top.object = {};
+      }
+      Eif (top.object !== null) {
+        if (typeof top.object === 'object' && elementName in top.object) {
+          // The element exist already, let's create an array
+          let val = top.object[elementName];
+          Iif (Array.isArray(val)) {
+            // Add to the existing array
+            val.push(current.object);
+          } else {
+            // Convert the element value to an array
+            top.object[elementName] = [val, current.object];
+          }
+        } else {
+          top.object[elementName] = current.object;
+        }
+      }
+      if (current.id != null) {
+        refs[current.id].object = current.object;
+      }
+    };
+ 
+    p.oncdata = function(text) {
+      text = text && text.trim();
+      Iif (!text.length)
+        return;
+ 
+      if (/<\?xml[\s\S]+\?>/.test(text)) {
+        text = self.xmlToJson(null, text);
+      }
+      // add contents of CDATA to the xml output as a text
+      p.handleJsonObject(text);
+    };
+ 
+    p.handleJsonObject = function(text) {
+      var top = stack[stack.length - 1];
+      self._processText(top, text);
+    };
+ 
+    p.ontext = function(text) {
+      text = text && text.trim();
+      if (!text.length)
+        return;
+ 
+      var top = stack[stack.length - 1];
+      var descriptor = top.descriptor;
+      var value = parseValue(text, descriptor);
+      self._processText(top, value);
+    };
+ 
+    p.write(xml).close();
+ 
+    // merge obj with href
+    var merge = function(href, obj) {
+      for (var j in obj) {
+        if (obj.hasOwnProperty(j)) {
+          href.object[j] = obj[j];
+        }
+      }
+    };
+ 
+    // MultiRef support: merge objects instead of replacing
+    for (let n in refs) {
+      var ref = refs[n];
+      for (var i = 0; i < ref.hrefs.length; i++) {
+        merge(ref.hrefs[i], ref.object);
+      }
+    }
+ 
+    if (root.Envelope) {
+      var body = root.Envelope.Body;
+      Eif (root.Envelope.Body !== undefined && root.Envelope.Body !== null) {
+        if (body.Fault !== undefined && body.Fault !== null) {
+          //check if fault is soap 1.1 fault
+          var errorMessage = getSoap11FaultErrorMessage(body.Fault);
+          //check if fault is soap 1.2 fault
+          if (errorMessage == null) {
+            errorMessage = getSoap12FaultErrorMessage(body.Fault);
+          }
+          //couldn't process error message for neither soap 1.1 nor soap 1.2 fault. Nothing else can be done at this point. Send a generic error message.
+          Iif (errorMessage == null) {
+            errorMessage = 'Error occurred processing Fault response.';
+          }
+          var error = new Error(errorMessage);
+          error.root = root;
+          throw error;
+        }
+      }
+      return root.Envelope;
+    }
+    return root;
+  }
+ 
+}
+ 
+function getSoap11FaultErrorMessage(faultBody) {
+  var errorMessage = null;
+  var faultcode = selectn('faultcode.$value', faultBody)||
+    selectn('faultcode', faultBody);
+  if (faultcode) { //soap 1.1 fault
+    errorMessage = ' ';
+    //All of the soap 1.1 fault elements should contain string value except detail element which may be a complex type or plain text (string)
+    Eif (typeof faultcode == 'string') {
+      errorMessage =  'faultcode: ' + faultcode;
+    }
+    var faultstring = selectn('faultstring.$value', faultBody) ||
+      selectn('faultstring', faultBody);
+    Eif (faultstring && (typeof faultstring == 'string')) {
+      errorMessage = errorMessage + ' faultstring: ' + faultstring;
+    }
+    var faultactor = selectn('faultactor.$value', faultBody) ||
+      selectn('faultactor', faultBody);
+    Iif (faultactor && (typeof faultactor == 'string')) {
+      errorMessage = errorMessage + ' faultactor: ' + faultactor;
+    }
+    var detail = selectn('detail.$value', faultBody) ||
+      selectn('detail', faultBody);
+    if (detail != null) {
+      if (typeof detail == 'string') { //plain text
+        errorMessage = errorMessage + ' detail: ' + detail;
+      } else { //XML type defined in wsdl
+        errorMessage = errorMessage + ' detail: ' + JSON.stringify(detail)
+      }
+    }
+  }
+  return errorMessage;
+}
+ 
+function getSoap12FaultErrorMessage(faultBody) {
+  var errorMessage = null;
+  let code = selectn('Code', faultBody)||
+    selectn('Code', faultBody);
+  Eif (code) {
+    //soap 1.2 fault elements have child elements. Hence use JSON.stringify to formulate the error message.
+    errorMessage = ' ';
+    errorMessage = errorMessage + 'Code: ' + JSON.stringify(code);
+    var value = selectn('Value.$value', faultBody) ||
+      selectn('Value', faultBody);
+    Iif (value) {
+      errorMessage = errorMessage + ' ' + 'Value: ' + JSON.stringify(value);
+    }
+    var subCode = selectn('Subcode.$value', faultBody) ||
+      selectn('Subcode', faultBody);
+    Iif (subCode) {
+      errorMessage = errorMessage + ' ' + 'Subcode: ' + JSON.stringify(subCode);
+    }
+    var reason = selectn('reason.$value', faultBody) ||
+      selectn('Reason', faultBody);
+    Eif (reason) {
+      errorMessage = errorMessage + ' ' + 'Reason: ' + JSON.stringify(reason);
+    }
+    var node = selectn('Node.$value', faultBody) ||
+      selectn('Node', faultBody);
+    if (node) {
+      errorMessage = errorMessage + ' ' + 'Node: ' + JSON.stringify(node);
+    }
+    var role = selectn('Role.$value', faultBody) ||
+      selectn('Role', faultBody);
+    if (role) {
+      errorMessage = errorMessage + ' ' + 'Role: ' + JSON.stringify(role);
+    }
+    var detail = selectn('Detail.$value', faultBody) ||
+      selectn('Detail', faultBody);
+    if (detail != null) {
+      Iif (typeof detail == 'string') { //plain text
+        errorMessage = errorMessage + ' Detail: ' + detail;
+      } else { //XML type defined in wsdl
+        errorMessage = errorMessage + ' Detail: ' + JSON.stringify(detail)
+      }
+    }
+  }
+  return errorMessage;
+}
+ 
+ 
+function declareNamespace(nsContext, node, prefix, nsURI) {
+  var mapping = nsContext.declareNamespace(prefix, nsURI);
+  Iif (!mapping) {
+    return false;
+  } else if (node) {
+    Eif (typeof node.attribute === 'function') {
+      // Some types of node such as XMLDummy does not allow attribute
+      node.attribute('xmlns:' + mapping.prefix, mapping.uri);
+    }
+    return mapping;
+  }
+  return mapping;
+}
+ 
+function parseValue(text, descriptor) {
+  Iif (typeof text !== 'string') return text;
+  var value = text;
+  var jsType = descriptor && descriptor.jsType;
+  if (jsType === Date) {
+    var dateText = text;
+    // Checks for xs:date with tz, drops the tz 
+    // because xs:date doesn't have a time to offset
+    // and JS Date object doesn't store an arbitrary tz
+    if(dateText.length === 16){
+      dateText = text.substr(0, 10);
+    }
+    value = new Date(dateText);
+  } else if (jsType === Boolean) {
+    if (text === 'true' || text === '1') {
+      value = true;
+    } else {
+      value = false;
+    }
+  } else if (typeof jsType === 'function') {
+    value = jsType(text);
+  }
+  return value;
+}
+ 
+function toXmlDate(date) {
+  date = new Date(date);
+  var isoStr = date.toISOString();
+  return isoStr.split('T')[0] + 'Z';
+}
+ 
+function toXmlTime(date) {
+  date = new Date(date);
+  var isoStr = date.toISOString();
+  return isoStr.split('T')[1];
+}
+ 
+function toXmlDateTime(date) {
+  date = new Date(date);
+  var isoStr = date.toISOString();
+  return isoStr;
+}
+ 
+function toXmlDateOrTime(descriptor, val) {
+  if (!descriptor || !descriptor.type) return val;
+  if (descriptor.type.name === 'date') {
+    val = toXmlDate(val);
+  } else if (descriptor.type.name === 'time') {
+    val = toXmlTime(val);
+  } else if (descriptor.type.name === 'dateTime') {
+    val = toXmlDateTime(val);
+  }
+  return val;
+}
+ 
+module.exports = XMLHandler;
+ 
+// Exported function for testing
+module.exports.parseValue = parseValue;
+module.exports.toXmlDate = toXmlDate;
+module.exports.toXmlTime = toXmlTime;
+module.exports.toXmlDateTime = toXmlDateTime;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd.js.html new file mode 100644 index 00000000..a0495cb8 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd.js.html @@ -0,0 +1,171 @@ + + + + Code coverage report for strong-soap/src/parser/xsd.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser xsd.js +

+
+
+ 93.33% + Statements + 14/15 +
+
+ 100% + Branches + 2/2 +
+
+ 66.67% + Functions + 2/3 +
+
+ 92.86% + Lines + 13/14 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35  +  +  +  +  +  +  +1x +  +  +  +5559x +1x +1x +1x +44x +  +44x +44x +44x +  +1x +  +  +1x +  +1x +5559x +  +  +  +  +  +  + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var helper = require('./helper');
+var builtinTypes;
+ 
+function getBuiltinTypes() {
+  if (builtinTypes) return builtinTypes;
+  builtinTypes = {};
+  var SimpleType = require('./xsd/simpleType');
+  for (let t in helper.schemaTypes) {
+    let type = new SimpleType('xsd:simpleType',
+      {name: t, 'xmlns:xsd': helper.namespaces.xsd}, {});
+    type.targetNamespace = helper.namespaces.xsd;
+    type.jsType = helper.schemaTypes[t];
+    builtinTypes[t] = type;
+  }
+  return builtinTypes;
+}
+ 
+exports.getBuiltinTypes = getBuiltinTypes;
+ 
+exports.getBuiltinType = function(name) {
+  return getBuiltinTypes()[name];
+};
+ 
+ 
+function parse(value, type) {
+  var SimpleType = require('./xsd/simpleType');
+}
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/all.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/all.js.html new file mode 100644 index 00000000..b7ed2eb3 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/all.js.html @@ -0,0 +1,126 @@ + + + + Code coverage report for strong-soap/src/parser/xsd/all.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/xsd all.js +

+
+
+ 100% + Statements + 5/5 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 5/5 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20  +  +  +  +  +  +  +1x +  +  +  +97x +  +  +  +1x +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var XSDElement = require('./xsdElement');
+ 
+class All extends XSDElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+}
+ 
+All.elementName = 'all';
+All.allowedChildren = ['annotation', 'element'];
+ 
+module.exports = All;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/annotation.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/annotation.js.html new file mode 100644 index 00000000..adbf0d9a --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/annotation.js.html @@ -0,0 +1,126 @@ + + + + Code coverage report for strong-soap/src/parser/xsd/annotation.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/xsd annotation.js +

+
+
+ 100% + Statements + 5/5 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 5/5 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20  +  +  +  +  +  +  +1x +  +  +  +19x +  +  +  +1x +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var XSDElement = require('./xsdElement');
+ 
+class Annotation extends XSDElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+}
+ 
+Annotation.elementName = 'annotation';
+Annotation.allowedChildren = ['documentation', 'appinfo'];
+ 
+module.exports = Annotation;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/any.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/any.js.html new file mode 100644 index 00000000..855a2250 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/any.js.html @@ -0,0 +1,123 @@ + + + + Code coverage report for strong-soap/src/parser/xsd/any.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/xsd any.js +

+
+
+ 100% + Statements + 4/4 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 4/4 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19  +  +  +  +  +  +  +1x +  +  +  +7x +  +  +  +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var XSDElement = require('./xsdElement');
+ 
+class Any extends XSDElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+}
+ 
+Any.elementName = 'any';
+ 
+module.exports = Any;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/anyAttribute.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/anyAttribute.js.html new file mode 100644 index 00000000..99aea455 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/anyAttribute.js.html @@ -0,0 +1,123 @@ + + + + Code coverage report for strong-soap/src/parser/xsd/anyAttribute.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/xsd anyAttribute.js +

+
+
+ 75% + Statements + 3/4 +
+
+ 100% + Branches + 0/0 +
+
+ 0% + Functions + 0/1 +
+
+ 75% + Lines + 3/4 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var XSDElement = require('./xsdElement');
+ 
+class AnyAttribute extends XSDElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+}
+ 
+AnyAttribute.elementName = 'anyAttribute';
+ 
+module.exports = AnyAttribute;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/attribute.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/attribute.js.html new file mode 100644 index 00000000..816e537f --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/attribute.js.html @@ -0,0 +1,288 @@ + + + + Code coverage report for strong-soap/src/parser/xsd/attribute.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/xsd attribute.js +

+
+
+ 81.08% + Statements + 30/37 +
+
+ 70% + Branches + 14/20 +
+
+ 100% + Functions + 4/4 +
+
+ 83.33% + Lines + 30/36 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74  +  +  +  +  +  +  +1x +1x +1x +  +  +  +911x +  +  +  +807x +807x +  +  +  +807x +  +  +807x +2612x +807x +  +1805x +  +  +  +  +  +807x +  +807x +  +  +  +  +807x +807x +807x +807x +  +807x +  +807x +801x +  +807x +  +  +807x +  +  +  +  +911x +911x +5x +906x +906x +  +  +  +  +1x +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var XSDElement = require('./xsdElement');
+var Schema = require('./schema');
+var QName = require('../qname');
+ 
+class Attribute extends XSDElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+ 
+  getForm() {
+    var parent = this.parent;
+    Iif (parent instanceof Schema) {
+      // Global attribute
+      return 'qualified';
+    }
+    Iif (this.$form) {
+      return this.$form;
+    }
+    while (parent) {
+      if (parent instanceof Schema) {
+        return parent.$attributeFormDefault || 'unqualified';
+      }
+      parent = parent.parent;
+    }
+    return 'unqualified';
+  }
+ 
+  describe(definitions) {
+    Iif (this.descriptor) return this.descriptor;
+ 
+    Iif (this.ref) {
+      // Ref to a global attribute
+      this.descriptor = this.ref.describe(definitions);
+      this.descriptor.form = 'qualified';
+    } else {
+      var form = this.getForm();
+      var qname = this.getQName();
+      var isMany = this.isMany();
+      var type = this.type;
+      var typeQName;
+      Iif (type instanceof QName) {
+        typeQName = type;
+      } else if (type instanceof XSDElement) {
+        typeQName = type.getQName();
+      }
+      this.descriptor =
+        new XSDElement.AttributeDescriptor(qname, typeQName, form, isMany);
+    }
+    return this.descriptor;
+ 
+  }
+ 
+  postProcess(defintions) {
+    var schemas = defintions.schemas;
+    if (this.$ref) {
+      this.ref = this.resolveSchemaObject(schemas, 'attribute', this.$ref);
+    } else Eif (this.$type) {
+      this.type = this.resolveSchemaObject(schemas, 'type', this.$type);
+    }
+  }
+}
+ 
+Attribute.elementName = 'attribute';
+Attribute.allowedChildren = ['annotation', 'simpleType'];
+ 
+module.exports = Attribute;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/attributeGroup.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/attributeGroup.js.html new file mode 100644 index 00000000..63745f8e --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/attributeGroup.js.html @@ -0,0 +1,177 @@ + + + + Code coverage report for strong-soap/src/parser/xsd/attributeGroup.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/xsd attributeGroup.js +

+
+
+ 30.77% + Statements + 4/13 +
+
+ 0% + Branches + 0/6 +
+
+ 0% + Functions + 0/3 +
+
+ 33.33% + Lines + 4/12 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +  +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var XSDElement = require('./xsdElement');
+ 
+class AttributeGroup extends XSDElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+  
+  resolve(schemas) {
+    if (this.$ref) {
+      this.ref = this.resolveSchemaObject(schemas, 'attributeGroup', this.$ref);
+    }
+  }
+ 
+  describe(definitions) {
+    if (this.descriptor) return this.descriptor;
+    if (this.ref) {
+      this.descriptor = this.ref.describe(definitions);
+    } else {
+      this.descriptor = this.describeChildren(definitions);
+    }
+    return this.descriptor;
+  }
+}
+ 
+AttributeGroup.elementName = 'attributeGroup';
+AttributeGroup.allowedChildren = ['annotation', 'attribute', 'attributeGroup',
+  'anyAttribute'];
+ 
+module.exports = AttributeGroup;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/choice.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/choice.js.html new file mode 100644 index 00000000..38a48388 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/choice.js.html @@ -0,0 +1,129 @@ + + + + Code coverage report for strong-soap/src/parser/xsd/choice.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/xsd choice.js +

+
+
+ 100% + Statements + 5/5 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 5/5 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21  +  +  +  +  +  +  +1x +  +  +  +4x +  +  +  +1x +1x +  +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var XSDElement = require('./xsdElement');
+ 
+class Choice extends XSDElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+}
+ 
+Choice.elementName = 'choice';
+Choice.allowedChildren = ['annotation', 'element', 'group', 'sequence',
+  'choice', 'any'];
+ 
+module.exports = Choice;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/complexContent.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/complexContent.js.html new file mode 100644 index 00000000..4a3ab557 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/complexContent.js.html @@ -0,0 +1,174 @@ + + + + Code coverage report for strong-soap/src/parser/xsd/complexContent.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/xsd complexContent.js +

+
+
+ 93.75% + Statements + 15/16 +
+
+ 50% + Branches + 3/6 +
+
+ 100% + Functions + 2/2 +
+
+ 100% + Lines + 14/14 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36  +  +  +  +  +  +  +1x +1x +  +  +  +750x +  +  +  +693x +693x +  +693x +  +693x +693x +693x +693x +  +  +693x +  +  +  +1x +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var XSDElement = require('./xsdElement');
+var Extension = require('./extension');
+ 
+class ComplexContent extends XSDElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+ 
+  describe(definitions) {
+    Iif (this.descriptor) return this.descriptor;
+    var descriptor = this.descriptor =
+      new XSDElement.TypeDescriptor();
+    var children = this.children || [];
+    var childDescriptor;
+    for (var i = 0, child; child = children[i]; i++) {
+      childDescriptor = child.describe(definitions);
+      Eif (childDescriptor) {
+        descriptor.add(childDescriptor);
+      }
+    }
+    return descriptor;
+  }
+}
+ 
+ComplexContent.elementName = 'complexContent';
+ComplexContent.allowedChildren = ['annotation', 'extension', 'restriction'];
+ 
+module.exports = ComplexContent;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/complexType.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/complexType.js.html new file mode 100644 index 00000000..a68f7e94 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/complexType.js.html @@ -0,0 +1,300 @@ + + + + Code coverage report for strong-soap/src/parser/xsd/complexType.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/xsd complexType.js +

+
+
+ 100% + Statements + 43/43 +
+
+ 75% + Branches + 21/28 +
+
+ 100% + Functions + 3/3 +
+
+ 100% + Lines + 41/41 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78  +  +  +  +  +  +  +1x +1x +1x +1x +1x +1x +  +  +  +2884x +  +  +  +23942x +2464x +  +2464x +1x +  +2464x +  +2464x +2729x +2729x +2698x +  +  +2464x +2464x +2464x +2464x +  +  +  +1987x +1987x +708x +708x +708x +708x +689x +689x +689x +689x +689x +689x +689x +689x +689x +689x +92x +  +689x +  +  +  +  +  +  +  +  +  +  +  +1x +1x +  +  +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var XSDElement = require('./xsdElement');
+var Choice = require('./choice');
+var Sequence = require('./sequence');
+var All = require('./all');
+var SimpleContent = require('./simpleContent');
+var ComplexContent = require('./complexContent');
+ 
+class ComplexType extends XSDElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+ 
+  describe(definitions) {
+    if (this.descriptor) return this.descriptor;
+    var descriptor = this.descriptor =
+      new XSDElement.TypeDescriptor();
+    if (this.$mixed) {
+      descriptor.mixed = true;
+    }
+    var children = this.children || [];
+    var childDescriptor;
+    for (var i = 0, child; child = children[i]; i++) {
+      childDescriptor = child.describe(definitions);
+      if (childDescriptor) {
+        descriptor.add(childDescriptor);
+      }
+    }
+    descriptor.name = this.$name || this.name;
+    descriptor.xmlns = this.targetNamespace;
+    descriptor.isSimple = false;
+    return descriptor;
+  }
+ 
+  describeChildren(definitions) {
+    Eif (this.descriptor) {
+      if (this.descriptor.extension) {
+        let extension = this.descriptor.extension;
+        let xmlns = extension.xmlns;
+        let name = extension.name;
+        if (xmlns) {
+          let schemas = definitions.schemas;
+          Eif (schemas) {
+            let schema = schemas[xmlns];
+            Eif (schema) {
+              let complexTypes = schema.complexTypes;
+              Eif (complexTypes) {
+                let type = complexTypes[name];
+                Eif (type) {
+                  Eif (type.descriptor) {
+                    if(!type.descriptor.inheritance){
+                      type.descriptor.inheritance = {};
+                    }
+                    type.descriptor.inheritance[this.descriptor.name] = this.descriptor;
+                  }
+                }
+              }
+            }
+          }
+        }
+      }  
+    }
+  }
+}
+ 
+ComplexType.elementName = 'complexType';
+ComplexType.allowedChildren = ['annotation', 'group', 'sequence', 'all',
+  'complexContent', 'simpleContent', 'choice', 'attribute', 'attributeGroup',
+  'anyAttribute'];
+ 
+module.exports = ComplexType;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/descriptor.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/descriptor.js.html new file mode 100644 index 00000000..4520f64f --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/descriptor.js.html @@ -0,0 +1,456 @@ + + + + Code coverage report for strong-soap/src/parser/xsd/descriptor.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/xsd descriptor.js +

+
+
+ 89.71% + Statements + 61/68 +
+
+ 80.56% + Branches + 29/36 +
+
+ 90% + Functions + 9/10 +
+
+ 89.83% + Lines + 53/59 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130  +  +  +  +  +  +  +1x +1x +  +  +  +  +  +  +818x +818x +818x +818x +818x +  +818x +  +  +  +  +  +  +  +  +63093x +63093x +  +  +  +74898x +74898x +74898x +  +  +  +1785x +1785x +1785x +  +  +  +32878x +27147x +5731x +807x +4924x +  +4923x +46537x +  +4923x +978x +  +4923x +1430x +  +  +  +  +  +672x +915x +615x +  +  +57x +  +  +  +76x +  +  +  +  +76x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +55874x +55874x +55874x +55874x +55874x +55874x +  +55874x +55874x +55874x +  +  +  +  +27364x +27364x +27364x +27364x +27364x +27364x +27364x +27364x +27364x +27364x +  +  +  +1x +  +  +  +  +  + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var assert = require('assert');
+var QName = require('../qname');
+ 
+/**
+ * Descriptor for an XML attribute
+ */
+class AttributeDescriptor {
+  constructor(qname, type, form) {
+    assert(qname == null || qname instanceof QName, 'Invalid qname: ' + qname);
+    this.qname = qname;
+    this.type = type;
+    form = form || 'qualified';
+    assert(form === 'qualified' || form === 'unqualified',
+      'Invalid form: ' + form);
+    this.form = form;
+  }
+}
+ 
+/**
+ * Descriptor for an XML type
+ */
+class TypeDescriptor {
+  constructor(qname) {
+    this.elements = [];
+    this.attributes = [];
+  }
+ 
+  addElement(element) {
+    assert(element instanceof ElementDescriptor);
+    this.elements.push(element);
+    return element;
+  }
+ 
+  addAttribute(attribute) {
+    assert(attribute instanceof AttributeDescriptor);
+    this.attributes.push(attribute);
+    return attribute;
+  }
+ 
+  add(item, isMany) {
+    if (item instanceof ElementDescriptor) {
+      this.addElement(item.clone(isMany));
+    } else if (item instanceof AttributeDescriptor) {
+      this.addAttribute(item);
+    } else if (item instanceof TypeDescriptor) {
+      var i, n;
+      for (i = 0, n = item.elements.length; i < n; i++) {
+        this.addElement(item.elements[i]);
+      }
+      for (i = 0, n = item.attributes.length; i < n; i++) {
+        this.addAttribute(item.attributes[i]);
+      }
+      if (item.extension) {
+          this.extension = item.extension;
+      }
+    }
+  }
+ 
+  findElement(name) {
+    for (var i = 0, n = this.elements.length; i < n; i++) {
+      if (this.elements[i].qname.name === name) {
+        return this.elements[i];
+      }
+    }
+    return null;
+  }
+ 
+  findAttribute(name) {
+    for (var i = 0, n = this.attributes.length; i < n; i++) {
+      if (this.attributes[i].qname.name === name) {
+        return this.attributes[i];
+      }
+    }
+    return null;
+  }
+ 
+  find(name) {
+    var element = this.findElement(name);
+    if (element) return element;
+    var attribute = this.findAttribute(name);
+    return attribute;
+  }
+}
+ 
+/**
+ * Descriptor for an XML element
+ */
+class ElementDescriptor extends TypeDescriptor {
+  constructor(qname, type, form, isMany) {
+    super();
+    assert(qname == null || qname instanceof QName, 'Invalid qname: ' + qname);
+    this.qname = qname;
+    this.type = type;
+    form = form || 'qualified';
+    assert(form === 'qualified' || form === 'unqualified',
+      'Invalid form: ' + form);
+    this.form = form;
+    this.isMany = !!isMany;
+    this.isSimple = false;
+  }
+ 
+  clone(isMany) {
+    // Check if the referencing element or this element has 'maxOccurs>1'
+    isMany = (!!isMany) || this.isMany;
+    var copy = new ElementDescriptor(this.qname, this.type, this.form, isMany);
+    copy.isNillable = this.isNillable;
+    copy.isSimple = this.isSimple;
+    if (this.jsType) copy.jsType = this.jsType;
+    Eif (this.elements != null) copy.elements = this.elements;
+    Eif (this.attributes != null) copy.attributes = this.attributes;
+    if (this.mixed != null) copy.mixed = this.mixed;
+    copy.refOriginal = this;
+    return copy;
+  }
+}
+ 
+module.exports = {
+  ElementDescriptor: ElementDescriptor,
+  AttributeDescriptor: AttributeDescriptor,
+  TypeDescriptor: TypeDescriptor
+};
+ 
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/documentation.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/documentation.js.html new file mode 100644 index 00000000..aa7f6470 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/documentation.js.html @@ -0,0 +1,126 @@ + + + + Code coverage report for strong-soap/src/parser/xsd/documentation.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/xsd documentation.js +

+
+
+ 100% + Statements + 5/5 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 5/5 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20  +  +  +  +  +  +  +1x +  +  +  +19x +  +  +  +1x +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var XSDElement = require('./xsdElement');
+ 
+class Documentation extends XSDElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+}
+ 
+Documentation.elementName = 'documentation';
+Documentation.allowedChildren = ['any'];
+ 
+module.exports = Documentation;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/element.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/element.js.html new file mode 100644 index 00000000..e23112aa --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/element.js.html @@ -0,0 +1,456 @@ + + + + Code coverage report for strong-soap/src/parser/xsd/element.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/xsd element.js +

+
+
+ 94.81% + Statements + 73/77 +
+
+ 82.61% + Branches + 38/46 +
+
+ 100% + Functions + 5/5 +
+
+ 94.67% + Lines + 71/75 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130  +  +  +  +  +  +  +1x +1x +1x +1x +1x +1x +  +  +  +27230x +  +  +  +264x +  +  +  +26163x +26028x +26028x +26028x +  +26028x +  +26028x +  +26028x +25582x +  +26028x +  +  +26028x +32x +  +  +26028x +  +217x +217x +217x +217x +  +  +  +25811x +25582x +21080x +21080x +21080x +21080x +21080x +21080x +21080x +21080x +25x +  +21080x +  +4502x +4502x +4502x +  +  +  +229x +229x +179x +178x +178x +178x +178x +178x +178x +  +178x +1x +1x +1x +  +  +  +26028x +  +  +  +27226x +27226x +285x +26941x +26659x +  +27226x +  +  +  +  +  +  +26028x +26028x +  +405x +  +25623x +1x +  +25622x +97076x +25622x +  +71454x +  +  +  +  +  +1x +1x +  +  +1x + 
// Copyright IBM Corp. 2016,2018. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var XSDElement = require('./xsdElement');
+var QName = require('../qname');
+var helper = require('../helper');
+var Schema = require('./schema');
+var ComplexType = require('./complexType');
+var SimpleType = require('./simpleType');
+ 
+class Element extends XSDElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+ 
+  addChild(child) {
+    this[child.name] = child;
+  }
+ 
+  describe(definitions) {
+    if (this.descriptor) return this.descriptor;
+    var form = this.getForm();
+    var qname = this.getQName();
+    var isMany = this.isMany();
+ 
+    var type = this.type;
+    var typeQName;
+    Iif (type instanceof QName) {
+      typeQName = type;
+    } else if (type instanceof XSDElement) {
+      typeQName = type.getQName();
+    }
+    var descriptor = this.descriptor =
+      new XSDElement.ElementDescriptor(qname, typeQName, form, isMany);
+ 
+    if (this.$nillable) {
+      descriptor.isNillable = true;
+    }
+ 
+    if (this.ref) {
+      // Ref to a global element
+      var refDescriptor = this.ref.describe(definitions);
+      Eif (refDescriptor) {
+        this.descriptor = descriptor = refDescriptor.clone(isMany);
+        Iif (this.$nillable) {
+          descriptor.isNillable = true;
+        }
+      }
+    } else if (this.type) {
+      if (this.type instanceof ComplexType) {
+        descriptor.isSimple = false;
+        var typeDescriptor = this.type.describe(definitions);
+        Eif (typeDescriptor) {
+          descriptor.elements = typeDescriptor.elements;
+          descriptor.attributes = typeDescriptor.attributes;
+          descriptor.mixed = typeDescriptor.mixed;
+          descriptor.extension = typeDescriptor.extension;
+          if(descriptor.extension && descriptor.extension.isSimple === true) {
+            descriptor.isSimple = true;
+          }
+          descriptor.typeDescriptor = typeDescriptor;
+        }
+      } else Eif (this.type instanceof SimpleType) {
+        descriptor.isSimple = true;
+        descriptor.jsType = this.type.jsType;
+      }
+    } else {
+      // anonymous complexType or simpleType
+      var children = this.children;
+      for (var i = 0, child; child = children[i]; i++) {
+        if (child instanceof ComplexType) {
+          descriptor.isSimple = false;
+          var childDescriptor = child.describe(definitions);
+          Eif (childDescriptor) {
+            descriptor.elements = childDescriptor.elements;
+            descriptor.attributes = childDescriptor.attributes;
+            descriptor.mixed = childDescriptor.mixed;
+          }
+          break;
+        } else Eif (child instanceof SimpleType) {
+          descriptor.isSimple = true;
+          descriptor.jsType = child.jsType;
+        }
+      }
+    }
+    return descriptor;
+  }
+ 
+  postProcess(defintions) {
+    var schemas = defintions.schemas;
+    if (this.$ref) {
+      this.ref = this.resolveSchemaObject(schemas, 'element', this.$ref);
+    } else if (this.$type) {
+      this.type = this.resolveSchemaObject(schemas, 'type', this.$type);
+    }
+    Iif (this.substitutionGroup) {
+      this.substitutionGroup = this.resolveSchemaObject(
+        schemas, 'element', this.$substitutionGroup);
+    }
+  }
+ 
+  getForm() {
+    var parent = this.parent;
+    if (parent instanceof Schema) {
+      // Global element
+      return 'qualified';
+    }
+    if (this.$form) {
+      return this.$form;
+    }
+    while (parent) {
+      if (parent instanceof Schema) {
+        return parent.$elementFormDefault || 'unqualified';
+      }
+      parent = parent.parent;
+    }
+    return 'unqualified';
+  }
+}
+ 
+Element.elementName = 'element';
+Element.allowedChildren = ['annotation', 'complexType', 'simpleType',
+  'unique', 'key', 'keyref'];
+ 
+module.exports = Element;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/extension.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/extension.js.html new file mode 100644 index 00000000..7b6f2308 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/extension.js.html @@ -0,0 +1,210 @@ + + + + Code coverage report for strong-soap/src/parser/xsd/extension.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/xsd extension.js +

+
+
+ 95.83% + Statements + 23/24 +
+
+ 50% + Branches + 3/6 +
+
+ 100% + Functions + 3/3 +
+
+ 100% + Lines + 23/23 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48  +  +  +  +  +  +  +1x +1x +1x +1x +1x +1x +  +  +  +772x +  +  +  +715x +715x +  +715x +715x +715x +715x +715x +715x +715x +  +715x +  +  +  +772x +772x +772x +  +  +  +  +1x +1x +  +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var XSDElement = require('./xsdElement');
+var helper = require('../helper');
+var extend = helper.extend;
+var Sequence = require('./sequence');
+var Choice = require('./choice');
+var QName = require('../qname');
+ 
+class Extension extends XSDElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+ 
+  describe(definitions) {
+    Iif (this.descriptor) return this.descriptor;
+    var descriptor = this.descriptor =
+      new XSDElement.TypeDescriptor();
+    Eif (this.base) {
+      let baseDescriptor = this.base.describe(definitions);
+      descriptor.add(baseDescriptor);
+      descriptor.extension = {};
+      descriptor.extension.name = baseDescriptor.name;
+      descriptor.extension.xmlns = baseDescriptor.xmlns;
+      descriptor.extension.isSimple = baseDescriptor.isSimple;
+    }
+    return this.describeChildren(definitions, descriptor);
+  }
+ 
+  postProcess(defintions) {
+    var schemas = defintions.schemas;
+    Eif (this.$base) {
+      this.base = this.resolveSchemaObject(schemas, 'type', this.$base);
+    }
+  }
+}
+ 
+Extension.elementName = 'extension';
+Extension.allowedChildren = ['annotation', 'group', 'all', 'sequence',
+  'choice', 'attribute', 'attributeGroup'];
+ 
+module.exports = Extension;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/group.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/group.js.html new file mode 100644 index 00000000..9101938f --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/group.js.html @@ -0,0 +1,177 @@ + + + + Code coverage report for strong-soap/src/parser/xsd/group.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/xsd group.js +

+
+
+ 28.57% + Statements + 4/14 +
+
+ 0% + Branches + 0/6 +
+
+ 0% + Functions + 0/3 +
+
+ 30.77% + Lines + 4/13 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var XSDElement = require('./xsdElement');
+ 
+class Group extends XSDElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+ 
+  postProcess(defintions) {
+    var schemas = defintions.schemas;
+    if (this.$ref) {
+      this.ref = this.resolveSchemaObject(schemas, 'group', this.$ref);
+    }
+  }
+ 
+  describe(definitions) {
+    if (this.descriptor) return this.descriptor;
+    if (this.ref) {
+      this.descriptor = this.ref.describe(definitions);
+    } else {
+      this.descriptor = this.describeChildren(definitions);
+    }
+    return this.descriptor;
+  }
+}
+ 
+Group.elementName = 'group';
+Group.allowedChildren = ['annotation', 'all', 'choice', 'sequence'];
+ 
+module.exports = Group;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/import.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/import.js.html new file mode 100644 index 00000000..9cb7d309 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/import.js.html @@ -0,0 +1,123 @@ + + + + Code coverage report for strong-soap/src/parser/xsd/import.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/xsd import.js +

+
+
+ 100% + Statements + 4/4 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 4/4 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19  +  +  +  +  +  +  +1x +  +  +  +343x +  +  +  +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var XSDElement = require('./xsdElement');
+ 
+class Import extends XSDElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+}
+ 
+Import.elementName = 'import';
+ 
+module.exports = Import;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/include.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/include.js.html new file mode 100644 index 00000000..bbd90ccd --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/include.js.html @@ -0,0 +1,126 @@ + + + + Code coverage report for strong-soap/src/parser/xsd/include.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/xsd include.js +

+
+
+ 100% + Statements + 4/4 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 4/4 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20  +  +  +  +  +  +  +1x +  +  +  +5x +  +  +  +  +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var XSDElement = require('./xsdElement');
+ 
+class Include extends XSDElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+}
+ 
+ 
+Include.elementName = 'include';
+ 
+module.exports = Include;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/index.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/index.html new file mode 100644 index 00000000..c49a34db --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/index.html @@ -0,0 +1,448 @@ + + + + Code coverage report for strong-soap/src/parser/xsd + + + + + + + +
+
+

+ All files strong-soap/src/parser/xsd +

+
+
+ 84.14% + Statements + 536/637 +
+
+ 72.24% + Branches + 255/353 +
+
+ 76.54% + Functions + 62/81 +
+
+ 84.92% + Lines + 518/610 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
all.js
100%5/5100%0/0100%1/1100%5/5
annotation.js
100%5/5100%0/0100%1/1100%5/5
any.js
100%4/4100%0/0100%1/1100%4/4
anyAttribute.js
75%3/4100%0/00%0/175%3/4
attribute.js
81.08%30/3770%14/20100%4/483.33%30/36
attributeGroup.js
30.77%4/130%0/60%0/333.33%4/12
choice.js
100%5/5100%0/0100%1/1100%5/5
complexContent.js
93.75%15/1650%3/6100%2/2100%14/14
complexType.js
100%43/4375%21/28100%3/3100%41/41
descriptor.js
89.71%61/6880.56%29/3690%9/1089.83%53/59
documentation.js
100%5/5100%0/0100%1/1100%5/5
element.js
94.81%73/7782.61%38/46100%5/594.67%71/75
extension.js
95.83%23/2450%3/6100%3/3100%23/23
group.js
28.57%4/140%0/60%0/330.77%4/13
import.js
100%4/4100%0/0100%1/1100%4/4
include.js
100%4/4100%0/0100%1/1100%4/4
key.js
75%3/4100%0/00%0/175%3/4
keybase.js
82.35%14/1760%6/10100%3/382.35%14/17
keyref.js
36.36%4/110%0/40%0/236.36%4/11
list.js
33.33%8/240%0/120%0/333.33%8/24
restriction.js
97.92%94/9691.59%98/107100%7/798.94%93/94
schema.js
86.67%52/6075%24/32100%7/788.14%52/59
sequence.js
100%6/6100%0/0100%1/1100%6/6
simpleContent.js
100%6/6100%0/0100%1/1100%6/6
simpleType.js
68.42%26/3855.56%10/1880%4/567.57%25/37
union.js
33.33%6/180%0/60%0/435.29%6/17
unique.js
100%4/4100%0/0100%1/1100%4/4
xsdElement.js
100%25/2590%9/10100%5/5100%22/22
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/key.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/key.js.html new file mode 100644 index 00000000..0297ee26 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/key.js.html @@ -0,0 +1,123 @@ + + + + Code coverage report for strong-soap/src/parser/xsd/key.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/xsd key.js +

+
+
+ 75% + Statements + 3/4 +
+
+ 100% + Branches + 0/0 +
+
+ 0% + Functions + 0/1 +
+
+ 75% + Lines + 3/4 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var KeyBase = require('./keybase');
+ 
+class Key extends KeyBase {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+}
+ 
+Key.elementName = 'key';
+ 
+module.exports = Key;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/keybase.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/keybase.js.html new file mode 100644 index 00000000..3692b0c6 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/keybase.js.html @@ -0,0 +1,210 @@ + + + + Code coverage report for strong-soap/src/parser/xsd/keybase.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/xsd keybase.js +

+
+
+ 82.35% + Statements + 14/17 +
+
+ 60% + Branches + 6/10 +
+
+ 100% + Functions + 3/3 +
+
+ 82.35% + Lines + 14/17 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48  +  +  +  +  +  +  +1x +1x +  +  +  +6x +6x +6x +  +  +  +12x +6x +  +  +  +  +6x +6x +6x +  +  +  +  +6x +  +  +  +  +6x +  +  +  +  +  +  +  +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var g = require('../../globalize');
+var XSDElement = require('./xsdElement');
+ 
+class KeyBase extends XSDElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+    this.selector = null;
+    this.fields = [];
+  }
+ 
+  addChild(child) {
+    if (child.name === 'selector') {
+      Iif (this.selector) {
+        g.warn(
+          'The key element %s %s MUST contain one and only one selector element',
+          this.nsName, this.$name);
+      }
+      this.selector = child.$xpath;
+    } else Eif (child.name === 'field') {
+      this.fields.push(child.$xpath);
+    }
+  }
+ 
+  postProcess(definitions) {
+    Iif (!this.selector) {
+      g.warn(
+        'The key element %s %s MUST contain one and only one selector element',
+        this.nsName, this.$name);
+    }
+    Iif (!this.fields.length) {
+      g.warn(
+        'The key element %s %s MUST contain one or more field elements',
+        this.nsName, this.$name);
+    }
+  }
+}
+ 
+KeyBase.allowedChildren = ['annotation', 'selector', 'field'];
+ 
+module.exports = KeyBase;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/keyref.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/keyref.js.html new file mode 100644 index 00000000..f6256e9d --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/keyref.js.html @@ -0,0 +1,162 @@ + + + + Code coverage report for strong-soap/src/parser/xsd/keyref.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/xsd keyref.js +

+
+
+ 36.36% + Statements + 4/11 +
+
+ 0% + Branches + 0/4 +
+
+ 0% + Functions + 0/2 +
+
+ 36.36% + Lines + 4/11 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32  +  +  +  +  +  +  +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var KeyBase = require('./keybase');
+var QName = require('../qname');
+ 
+class KeyRef extends KeyBase {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+ 
+  postProcess(definitions) {
+    super.postProcess(definitions);
+    if (this.$refer) {
+      let qname = QName.parse(this.$refer);
+      if (qname.prefix === '') {
+        qname.nsURI = this.getTargetNamespace();
+      } else {
+        qname.nsURI = this.getNamespaceURI(qname.prefix);
+      }
+    }
+  }
+}
+ 
+KeyRef.elementName = 'keyref';
+ 
+module.exports = KeyRef;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/list.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/list.js.html new file mode 100644 index 00000000..6fc1d8bf --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/list.js.html @@ -0,0 +1,216 @@ + + + + Code coverage report for strong-soap/src/parser/xsd/list.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/xsd list.js +

+
+
+ 33.33% + Statements + 8/24 +
+
+ 0% + Branches + 0/12 +
+
+ 0% + Functions + 0/3 +
+
+ 33.33% + Lines + 8/24 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50  +  +  +  +  +  +  +1x +1x +1x +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var g = require('../../globalize');
+var XSDElement = require('./xsdElement');
+var helper = require('../helper');
+var QName = require('../qname');
+var SimpleType = require('./simpleType');
+ 
+class List extends XSDElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+ 
+  postProcess(definitions) {
+    if (this.itemType !== undefined) {
+      return;
+    }
+    var self = this;
+    if (this.$itemType) {
+      var qname = QName.parse(this.$itemType);
+      this.itemType = this.resolveSchemaObject(definitions.schemas,
+        'simpleType', this.$itemType);
+    }
+    this.children.forEach(function(c) {
+      if (c instanceof SimpleType) {
+        if (self.$itemType) {
+          g.warn('Attribute {{itemType}} is not allowed if the content ' +
+            'contains a {{simpleType}} element');
+        } else if (self.itemType) {
+          g.warn('List can only contain one {{simpleType}} element');
+        }
+        self.itemType = c;
+      }
+    });
+    if (!this.itemType) {
+      g.warn('List must have an item type');
+    }
+  }
+}
+ 
+List.elementName = 'list';
+List.allowedChildren = ['annotation', 'simpleType'];
+ 
+module.exports = List;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/restriction.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/restriction.js.html new file mode 100644 index 00000000..4ca18d0b --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/restriction.js.html @@ -0,0 +1,708 @@ + + + + Code coverage report for strong-soap/src/parser/xsd/restriction.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/xsd restriction.js +

+
+
+ 97.92% + Statements + 94/96 +
+
+ 91.59% + Branches + 98/107 +
+
+ 100% + Functions + 7/7 +
+
+ 98.94% + Lines + 93/94 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214  +  +  +  +  +  +  +1x +1x +1x +1x +1x +  +  +  +517x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +24498x +  +  +  +  +  +  +  +  +  +  +  +36x +36x +  +24453x +24453x +24453x +  +24498x +  +24498x +  +  +  +  +  +3x +3x +  +3x +  +  +3x +  +  +  +1029x +517x +517x +517x +  +512x +5x +5x +  +  +  +517x +512x +  +  +  +  +2x +2x +1x +  +  +1x +  +  +  +3x +3x +  +  +  +34x +  +34x +34x +2x +32x +16x +  +  +  +34x +2x +1x +  +  +  +34x +2x +1x +  +  +  +34x +2x +1x +  +  +  +34x +2x +1x +  +  +  +34x +3x +2x +2x +1x +  +1x +1x +  +  +  +34x +5x +3x +3x +2x +  +2x +2x +2x +1x +  +1x +  +  +  +  +34x +3x +2x +  +  +  +34x +2x +1x +  +  +  +34x +2x +1x +  +  +  +34x +1x +33x +1x +  +  +34x +2x +1x +  +  +  +34x +5x +1x +  +  +  +34x +14x +  +  +20x +  +  +  +1x +1x +  +  +  +  +1x + 
// Copyright IBM Corp. 2016,2019. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var XSDElement = require('./xsdElement');
+var Sequence = require('./sequence');
+var Choice = require('./choice');
+var QName = require('../qname');
+var g = require('../../globalize');
+ 
+class Restriction extends XSDElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+ 
+  addChild(child) {
+    /*
+     * simpleType: @base|minExclusive|minInclusive|maxExclusive|maxInclusive|
+     *             totalDigits|fractionDigits|length|minLength|maxLength|
+     *             enumeration|whiteSpace|pattern
+     * simpleContent: @base|minExclusive|minInclusive|maxExclusive|maxInclusive|
+     *                totalDigits|fractionDigits|length|minLength|maxLength|
+     *                enumeration|whiteSpace|pattern|
+     *                attribute|attributeGroup
+     * complexContent: @base|minExclusive|minInclusive|maxExclusive|maxInclusive|
+     *                 totalDigits|fractionDigits|length|minLength|maxLength|
+     *                 enumeration|whiteSpace|pattern|
+     *                 group|all|choice|sequence|
+     *                 attribute|attributeGroup
+     */
+    switch (child.name) {
+      case 'minExclusive':
+      case 'minInclusive':
+      case 'maxExclusive':
+      case 'maxInclusive':
+      case 'totalDigits':
+      case 'fractionDigits':
+      case 'length':
+      case 'minLength':
+      case 'maxLength':
+      case 'whiteSpace':
+      case 'pattern':
+        this[child.name] = child.$value;
+        break;
+      case 'enumeration':
+        this[child.name] = this[child.name] || [];
+        this[child.name].push(child.$value);
+        break;
+    }
+    Iif (this.parent.elementName === 'simpleContent') {
+      //
+    } else Iif (this.parent.elementName === 'complexContent') {
+      //
+    }
+  }
+ 
+  describe(definitions) {
+    Iif (this.descriptor) return this.descriptor;
+    var descriptor = this.descriptor =
+      new XSDElement.TypeDescriptor();
+    Iif (this.base) {
+      descriptor.add(this.base.describe(definitions));
+    }
+    return this.describeChildren(definitions, descriptor);
+  }
+ 
+  postProcess(defintions) {
+    if(this.base) return;
+    var schemas = defintions.schemas;
+    Eif (this.$base) {
+      if (this.parent.name === 'simpleContent' ||
+        this.parent.name === 'simpleType') {
+        this.base = this.resolveSchemaObject(schemas, 'simpleType', this.$base);
+      } else Eif (this.parent.name === 'complexContent') {
+        this.base = this.resolveSchemaObject(schemas, 'complexType', this.$base);
+        //
+      }
+    }
+    if(this.base) {
+      this.base.postProcess(defintions);
+    }
+  }
+ 
+  _getFractionDigitCount(val) {
+    var lastDotPos = val.lastIndexOf('.');
+    if (lastDotPos !== -1) {
+      return val.length - 1 - lastDotPos;
+    }
+ 
+    return 0;
+  }
+ 
+  _getTotalDigitCount(val) {
+    var stripped = val.replace('-', '').replace('.', '').trim();
+    return stripped.length;
+  }
+ 
+  enforce(val) {
+    var violations = [];
+ 
+    Eif (this.base) {
+      if (this.base.jsType === Boolean) {
+        val = val === 'true' || val === true;
+      } else if (typeof this.base.jsType === 'function' && this.base.jsType !== Date && this.base.jsType !== Number) {
+        val = this.base.jsType(val);
+      }
+    }
+ 
+    if (this.minExclusive !== undefined) {
+      if (val <= this.minExclusive) {
+        violations.push('value is less or equal than minExclusive (' + val + ' <= ' + this.minExclusive + ')');
+      }
+    }
+ 
+    if (this.minInclusive !== undefined) {
+      if (val < this.minInclusive) {
+        violations.push('value is less than minInclusive (' + val + ' < ' + this.minInclusive + ')');
+      }
+    }
+ 
+    if (this.maxExclusive !== undefined) {
+      if (val >= this.maxExclusive) {
+        violations.push('value is greater or equal than maxExclusive (' + val + ' >= ' + this.maxExclusive + ')');
+      }
+    }
+ 
+    if (this.maxInclusive !== undefined) {
+      if (val > this.maxInclusive) {
+        violations.push('value is greater than maxInclusive (' + val + ' > ' + this.maxInclusive + ')');
+      }
+    }
+ 
+    if (this.fractionDigits !== undefined) {
+      if (typeof val === 'string') {
+        var fractionDigitCount = this._getFractionDigitCount(val);
+        if (fractionDigitCount > this.fractionDigits) {
+          violations.push('value has more decimal places than allowed (' + fractionDigitCount + ' > ' + this.fractionDigits + ')');
+        }
+      } else Eif (typeof val === 'number') {
+        val = val.toFixed(this.fractionDigits);
+      }
+    }
+ 
+    if (this.totalDigits !== undefined) {
+      if (typeof val === 'string') {
+        var totalDigits = this._getTotalDigitCount(val);
+        if (totalDigits > this.totalDigits) {
+          violations.push('value has more digits than allowed (' + totalDigits + ' > ' + this.totalDigits + ')');
+        }
+      } else Eif (typeof val === 'number') {
+        var integerDigits = parseInt(val).toString().replace('-', '').length;
+        if (integerDigits > this.totalDigits) {
+          violations.push('value has more integer digits than allowed (' + integerDigits + ' > ' + this.totalDigits + ')');
+        } else {
+          val = val.toFixed(this.totalDigits - integerDigits);
+        }
+      }
+    }
+ 
+    if (this.length !== undefined) {
+      if (val.length !== parseInt(this.length)) {
+        violations.push('lengths don\'t match (' + val.length + ' != ' + this.length + ')');
+      }
+    }
+ 
+    if (this.maxLength !== undefined) {
+      if (val.length > this.maxLength) {
+        violations.push('length is bigger than maxLength (' + val.length + ' > ' + this.maxLength + ')');
+      }
+    }
+ 
+    if (this.minLength !== undefined) {
+      if (val.length < this.minLength) {
+        violations.push('length is smaller than minLength (' + val.length + ' < ' + this.minLength + ')');
+      }
+    }
+ 
+    if (this.whiteSpace === 'replace') {
+      val = val.replace(/[\n\r\t]/mg, ' ');
+    } else if (this.whiteSpace === 'collapse') {
+      val = val.replace(/[\n\r\t]/mg, ' ').replace(/[ ]+/mg, ' ').trim();
+    }
+ 
+    if (this.pattern) {
+      if (!new RegExp(this.pattern).test(val)) {
+        violations.push('value doesn\'t match the required pattern (' + val + ' !match ' + this.pattern + ')');
+      }
+    }
+ 
+    if (this.enumeration) {
+      if (this.enumeration.indexOf(val) === -1) {
+        violations.push('value is not in the list of valid values (' + val + ' is not in ' + this.enumeration + ')');
+      }
+    }
+ 
+    if (violations.length > 0) {
+      throw new Error(g.f('The field %s cannot have value %s due to the violations: %s', this.parent.$name, val, JSON.stringify(violations)));
+    }
+ 
+    return val;
+  }
+}
+ 
+Restriction.elementName = 'restriction';
+Restriction.allowedChildren = ['annotation', 'minExclusive', 'minInclusive',
+  'maxExclusive', 'maxInclusive', 'totalDigits', 'fractionDigits', 'length',
+  'minLength', 'maxLength', 'enumeration', 'whiteSpace', 'pattern',
+  'group', 'all', 'choice', 'sequence', 'attribute', 'attributeGroup'];
+ 
+module.exports = Restriction;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/schema.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/schema.js.html new file mode 100644 index 00000000..20a89adb --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/schema.js.html @@ -0,0 +1,399 @@ + + + + Code coverage report for strong-soap/src/parser/xsd/schema.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/xsd schema.js +

+
+
+ 86.67% + Statements + 52/60 +
+
+ 75% + Branches + 24/32 +
+
+ 100% + Functions + 7/7 +
+
+ 88.14% + Lines + 52/59 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111  +  +  +  +  +  +  +1x +1x +1x +1x +1x +  +  +  +340x +340x +340x +340x +340x +340x +340x +340x +  +  +  +29x +29x +29x +  +  +29x +29x +29x +29x +29x +29x +29x +29x +29x +  +  +29x +  +  +  +4381x +4381x +  +  +4381x +  +  +354x +354x +342x +  +  +  +  +  +  +354x +  +2633x +2633x +  +512x +512x +  +882x +882x +  +  +  +  +  +  +  +  +  +  +  +  +  +766x +766x +766x +11987x +  +  +  +  +  +68834x +68834x +61217x +61217x +  +61217x +56847x +  +  +  +  +1x +1x +  +  +1x + 
// Copyright IBM Corp. 2016,2018. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var _ = require('lodash');
+var assert = require('assert');
+var XSDElement = require('./xsdElement');
+var helper = require('./../helper');
+var Set = helper.Set;
+ 
+class Schema extends XSDElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+    this.complexTypes = {}; // complex types
+    this.simpleTypes = {}; // simple types
+    this.elements = {}; // elements
+    this.includes = []; // included or imported schemas
+    this.groups = {};
+    this.attributes = {};
+    this.attributeGroups = {};
+  }
+ 
+  merge(source, isInclude) {
+    Iif (source === this) return this;
+    assert(source instanceof Schema);
+    Eif (this.$targetNamespace === source.$targetNamespace ||
+      // xsd:include allows the target schema that does not have targetNamespace
+      (isInclude && source.$targetNamespace === undefined)) {
+      _.merge(this.complexTypes, source.complexTypes);
+      _.merge(this.simpleTypes, source.simpleTypes);
+      _.merge(this.elements, source.elements);
+      _.merge(this.groups, source.groups);
+      _.merge(this.attributes, source.attributes);
+      _.merge(this.attributeGroups, source.attributeGroups);
+      _.merge(this.xmlns, source.xmlns);
+      Eif (Array.isArray(source.includes)) {
+        this.includes = _.uniq(this.includes.concat(source.includes));
+      }
+    }
+    return this;
+  }
+ 
+  addChild(child) {
+    var name = child.$name;
+    Iif (child.getTargetNamespace() === helper.namespaces.xsd &&
+      name in helper.schemaTypes)
+      return;
+    switch (child.name) {
+      case 'include':
+      case 'import':
+        var location = child.$schemaLocation || child.$location;
+        if (location) {
+          this.includes.push({
+            namespace: child.$namespace || child.$targetNamespace
+            || this.$targetNamespace,
+            location: location,
+            type: child.name // include or import
+          });
+        }
+        break;
+      case 'complexType':
+        this.complexTypes[name] = child;
+        break;
+      case 'simpleType':
+        this.simpleTypes[name] = child;
+        break;
+      case 'element':
+        this.elements[name] = child;
+        break;
+      case 'group':
+        this.groups[name] = child;
+        break;
+      case 'attribute':
+        this.attributes[name] = child;
+        break;
+      case 'attributeGroup':
+        this.attributeGroups[name] = child;
+        break;
+    }
+  }
+ 
+  postProcess(defintions) {
+    var visited = new Set();
+    visited.add(this);
+    this.children.forEach(function(c) {
+      visitDfs(defintions, visited, c);
+    });
+  }
+}
+ 
+function visitDfs(defintions, nodes, node) {
+  let visited = nodes.has(node);
+  if (!visited && !node._processed) {
+    node.postProcess(defintions);
+    node._processed = true;
+ 
+    node.children.forEach(function(child) {
+      visitDfs(defintions, nodes, child);
+    });
+  }
+}
+ 
+Schema.elementName = 'schema';
+Schema.allowedChildren = ['annotation', 'element', 'complexType', 'simpleType',
+  'include', 'import', 'group', 'attribute', 'attributeGroup'];
+ 
+module.exports = Schema;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/sequence.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/sequence.js.html new file mode 100644 index 00000000..4a77af61 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/sequence.js.html @@ -0,0 +1,132 @@ + + + + Code coverage report for strong-soap/src/parser/xsd/sequence.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/xsd sequence.js +

+
+
+ 100% + Statements + 6/6 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 6/6 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22  +  +  +  +  +  +  +1x +1x +  +  +  +2623x +  +  +  +1x +1x +  +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var XSDElement = require('./xsdElement');
+var Any = require('./any');
+ 
+class Sequence extends XSDElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+}
+ 
+Sequence.elementName = 'sequence';
+Sequence.allowedChildren = ['annotation', 'element', 'group', 'sequence',
+  'choice', 'any'];
+ 
+module.exports = Sequence;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/simpleContent.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/simpleContent.js.html new file mode 100644 index 00000000..f979e8b0 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/simpleContent.js.html @@ -0,0 +1,129 @@ + + + + Code coverage report for strong-soap/src/parser/xsd/simpleContent.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/xsd simpleContent.js +

+
+
+ 100% + Statements + 6/6 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 6/6 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21  +  +  +  +  +  +  +1x +1x +  +  +  +26x +  +  +  +1x +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var XSDElement = require('./xsdElement');
+var Extension = require('./extension');
+ 
+class SimpleContent extends XSDElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+}
+ 
+SimpleContent.elementName = 'simpleContent';
+SimpleContent.allowedChildren = ['annotation', 'extension', 'restriction'];
+ 
+module.exports = SimpleContent;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/simpleType.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/simpleType.js.html new file mode 100644 index 00000000..e1dc0beb --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/simpleType.js.html @@ -0,0 +1,270 @@ + + + + Code coverage report for strong-soap/src/parser/xsd/simpleType.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/xsd simpleType.js +

+
+
+ 68.42% + Statements + 26/38 +
+
+ 55.56% + Branches + 10/18 +
+
+ 80% + Functions + 4/5 +
+
+ 67.57% + Lines + 25/37 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68  +  +  +  +  +  +  +1x +1x +1x +1x +  +  +  +557x +  +  +  +513x +  +  +  +25x +25x +25x +25x +25x +  +  +  +1025x +519x +519x +6x +6x +  +513x +512x +512x +  +512x +  +1x +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var XSDElement = require('./xsdElement');
+var descriptor = require('./descriptor');
+var helper = require('../helper');
+var xsd = require('../xsd');
+ 
+class SimpleType extends XSDElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+ 
+  addChild(child) {
+    this[child.name] = child;
+  }
+ 
+  describe(definitions) {
+    var descriptor = this.descriptor = new XSDElement.TypeDescriptor();
+    descriptor.name = this.$name || this.name;
+    descriptor.xmlns = this.nsURI;
+    descriptor.isSimple = true;
+    return descriptor;
+  }
+ 
+  postProcess(definitions) {
+    if (this.type !== undefined) return;
+    this.type = String; // Default to String
+    if (this.targetNamespace === helper.namespaces.xsd) {
+      this.type = xsd.getBuiltinType(this.$name).jsType;
+      return;
+    }
+    if (this.restriction) {
+      this.restriction.postProcess(definitions);
+      Eif (this.restriction.base) {
+        // Use the base type
+        this.type = this.restriction.base.type;
+      }
+    } else Iif (this.list) {
+      this.list.postProcess(definitions);
+      if (this.list.itemType) {
+        this.list.itemType.postProcess(definitions);
+        this.type = [this.list.itemType.type];
+      }
+    } else Iif (this.union) {
+      let memberTypes = [];
+      memberTypes.union = true; // Set the union flag to true
+      this.union.postProcess(definitions);
+      if (this.union.memberTypes) {
+        this.union.memberTypes.forEach(function(t) {
+          t.postProcess(definitions);
+          memberTypes.push(t.type);
+        });
+        this.type = memberTypes;
+      }
+    }
+  }
+}
+ 
+SimpleType.elementName = 'simpleType';
+SimpleType.allowedChildren = ['annotation', 'list', 'union', 'restriction'];
+ 
+module.exports = SimpleType;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/union.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/union.js.html new file mode 100644 index 00000000..a9912678 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/union.js.html @@ -0,0 +1,189 @@ + + + + Code coverage report for strong-soap/src/parser/xsd/union.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/xsd union.js +

+
+
+ 33.33% + Statements + 6/18 +
+
+ 0% + Branches + 0/6 +
+
+ 0% + Functions + 0/4 +
+
+ 35.29% + Lines + 6/17 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41  +  +  +  +  +  +  +1x +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var XSDElement = require('./xsdElement');
+var helper = require('../helper');
+var SimpleType = require('./simpleType');
+ 
+class Union extends XSDElement {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+ 
+  postProcess(definitions) {
+    if (this.memberTypes) return;
+    var self = this;
+    this.memberTypes = [];
+    if (this.$memberTypes) {
+      this.$memberTypes.split(/\s+/).filter(Boolean).forEach(
+        function(typeQName) {
+          var type = self.resolveSchemaObject(definitions.schemas,
+            'simpleType', typeQName);
+          self.memberTypes.push(type);
+        });
+    }
+    this.children.forEach(function(c) {
+      if (c instanceof SimpleType) {
+        self.memberTypes.push(c);
+      }
+    });
+  }
+}
+ 
+Union.elementName = 'union';
+Union.allowedChildren = ['annotation', 'simpleType'];
+ 
+module.exports = Union;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/unique.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/unique.js.html new file mode 100644 index 00000000..254964db --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/unique.js.html @@ -0,0 +1,123 @@ + + + + Code coverage report for strong-soap/src/parser/xsd/unique.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/xsd unique.js +

+
+
+ 100% + Statements + 4/4 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 1/1 +
+
+ 100% + Lines + 4/4 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19  +  +  +  +  +  +  +1x +  +  +  +6x +  +  +  +1x +  +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var KeyBase = require('./keybase');
+ 
+class Unique extends KeyBase {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+}
+ 
+Unique.elementName = 'unique';
+ 
+module.exports = Unique;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/xsdElement.js.html b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/xsdElement.js.html new file mode 100644 index 00000000..0cde18e4 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/parser/xsd/xsdElement.js.html @@ -0,0 +1,249 @@ + + + + Code coverage report for strong-soap/src/parser/xsd/xsdElement.js + + + + + + + +
+
+

+ All files / strong-soap/src/parser/xsd xsdElement.js +

+
+
+ 100% + Statements + 25/25 +
+
+ 90% + Branches + 9/10 +
+
+ 100% + Functions + 5/5 +
+
+ 100% + Lines + 22/22 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61  +  +  +  +  +  +  +1x +1x +1x +  +  +  +61612x +  +  +  +3090x +3090x +3042x +  +3042x +  +3042x +26792x +26792x +26776x +  +  +3042x +  +  +  +2372x +  +  +  +  +  +  +  +  +  +  +  +29877x +19506x +  +  +  +1x +1x +  +  +1x +1x +1x +  +1x +  + 
// Copyright IBM Corp. 2016,2018. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var Element = require('../element');
+var helper = require('../helper');
+var descriptor = require('./descriptor');
+ 
+class XSDElement extends Element {
+  constructor(nsName, attrs, options) {
+    super(nsName, attrs, options);
+  }
+ 
+  describeChildren(definitions, descriptor) {
+    var children = this.children || [];
+    if (children.length === 0) return descriptor;
+    descriptor = descriptor || new XSDElement.TypeDescriptor();
+ 
+    var isMany = this.isMany();
+    var childDescriptor;
+    for (var i = 0, child; child = children[i]; i++) {
+      childDescriptor = child.describe(definitions);
+      if (childDescriptor) {
+        descriptor.add(childDescriptor, isMany);
+      }
+    }
+    return descriptor;
+  }
+ 
+  describe(definitions) {
+    return this.describeChildren(definitions);
+  }
+ 
+  postProcess(definitions) {
+    // NO-OP
+  }
+ 
+  /**
+   * Check if the max occurrence is many
+   * @returns {boolean}
+   */
+  isMany() {
+    if (this.$maxOccurs === 'unbounded') return true;
+    return Number(this.$maxOccurs) > 1;
+  }
+}
+ 
+XSDElement.targetNamespace = Element.namespaces.xsd;
+XSDElement.allowedChildren = ['annotation'];
+ 
+// Descriptors
+XSDElement.ElementDescriptor = descriptor.ElementDescriptor;
+XSDElement.AttributeDescriptor = descriptor.AttributeDescriptor;
+XSDElement.TypeDescriptor = descriptor.TypeDescriptor;
+ 
+module.exports = XSDElement;
+ 
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/security/BasicAuthSecurity.js.html b/node_modules/strong-soap/coverage/strong-soap/src/security/BasicAuthSecurity.js.html new file mode 100644 index 00000000..106fe387 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/security/BasicAuthSecurity.js.html @@ -0,0 +1,144 @@ + + + + Code coverage report for strong-soap/src/security/BasicAuthSecurity.js + + + + + + + +
+
+

+ All files / strong-soap/src/security BasicAuthSecurity.js +

+
+
+ 75% + Statements + 6/8 +
+
+ 0% + Branches + 0/2 +
+
+ 50% + Functions + 1/2 +
+
+ 75% + Lines + 6/8 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26  +  +  +  +  +  +  +1x +1x +  +  +  +2x +2x +2x +  +  +  +  +  +  +  +  +  +1x + 
// Copyright IBM Corp. 2016,2019. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var _ = require('lodash');
+var Security = require('./security');
+ 
+class BasicAuthSecurity extends Security {
+  constructor(username, password, options) {
+    super(options);
+    this.username = username;
+    this.password = password;
+  }
+ 
+  addHttpHeaders(headers) {
+    var cred = Buffer.from((this.username + ':' + this.password) || '')
+      .toString('base64');
+    headers.Authorization = 'Basic ' + cred;
+  };
+}
+ 
+module.exports = BasicAuthSecurity;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/security/BearerSecurity.js.html b/node_modules/strong-soap/coverage/strong-soap/src/security/BearerSecurity.js.html new file mode 100644 index 00000000..b95bf54b --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/security/BearerSecurity.js.html @@ -0,0 +1,135 @@ + + + + Code coverage report for strong-soap/src/security/BearerSecurity.js + + + + + + + +
+
+

+ All files / strong-soap/src/security BearerSecurity.js +

+
+
+ 83.33% + Statements + 5/6 +
+
+ 100% + Branches + 0/0 +
+
+ 50% + Functions + 1/2 +
+
+ 83.33% + Lines + 5/6 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23  +  +  +  +  +  +  +1x +1x +  +  +  +2x +2x +  +  +  +  +  +  +  +1x + 
// Copyright IBM Corp. 2016. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var _ = require('lodash');
+var Security = require('./security');
+ 
+class BearerSecurity extends Security {
+  constructor(token, options) {
+    super(options);
+    this.token = token;
+  }
+ 
+  addHttpHeaders(headers) {
+    headers.Authorization = "Bearer " + this.token;
+  }
+}
+ 
+module.exports = BearerSecurity;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/security/ClientSSLSecurity.js.html b/node_modules/strong-soap/coverage/strong-soap/src/security/ClientSSLSecurity.js.html new file mode 100644 index 00000000..d0ceb546 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/security/ClientSSLSecurity.js.html @@ -0,0 +1,276 @@ + + + + Code coverage report for strong-soap/src/security/ClientSSLSecurity.js + + + + + + + +
+
+

+ All files / strong-soap/src/security ClientSSLSecurity.js +

+
+
+ 77.42% + Statements + 24/31 +
+
+ 65% + Branches + 13/20 +
+
+ 100% + Functions + 2/2 +
+
+ 77.42% + Lines + 24/31 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70  +  +  +  +  +  +  +1x +1x +1x +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +5x +5x +1x +1x +  +  +  +  +  +  +  +5x +2x +2x +  +  +  +  +  +  +  +5x +4x +2x +2x +  +  +2x +2x +  +  +  +  +  +1x +1x +1x +1x +1x +  +  +  +1x + 
// Copyright IBM Corp. 2016. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var g = require('../globalize');
+var fs = require('fs')
+  , https = require('https')
+  , _ = require('lodash')
+  , Security = require('./security');
+ 
+class ClientSSLSecurity extends Security {
+ 
+  /**
+   * activates SSL for an already existing client
+   *
+   * @module ClientSSLSecurity
+   * @param {Buffer|String}   key
+   * @param {Buffer|String}   cert
+   * @param {Buffer|String|Array}   [ca]
+   * @param {Object}          [options]
+   * @constructor
+   */
+  constructor(key, cert, ca, options) {
+    super(options);
+    if (key) {
+      Eif (Buffer.isBuffer(key)) {
+        this.key = key;
+      } else if (typeof key === 'string') {
+        this.key = fs.readFileSync(key);
+      } else {
+        throw new Error(g.f('{{key}} should be a {{buffer}} or a {{string}}!'));
+      }
+    }
+ 
+    if (cert) {
+      Eif (Buffer.isBuffer(cert)) {
+        this.cert = cert;
+      } else if (typeof cert === 'string') {
+        this.cert = fs.readFileSync(cert);
+      } else {
+        throw new Error(g.f('{{cert}} should be a {{buffer}} or a {{string}}!'));
+      }
+    }
+ 
+    if (ca) {
+      if (Buffer.isBuffer(ca) || Array.isArray(ca)) {
+        this.ca = ca;
+      } else Iif (typeof ca === 'string') {
+        this.ca = fs.readFileSync(ca);
+      } else {
+        this.options = ca;
+        this.ca = null;
+      }
+    }
+  }
+ 
+  addOptions(options) {
+    options.key = this.key;
+    options.cert = this.cert;
+    options.ca = this.ca;
+    _.merge(options, this.options);
+    options.agent = new https.Agent(options);
+  };
+}
+ 
+module.exports = ClientSSLSecurity;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/security/ClientSSLSecurityPFX.js.html b/node_modules/strong-soap/coverage/strong-soap/src/security/ClientSSLSecurityPFX.js.html new file mode 100644 index 00000000..64e7271a --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/security/ClientSSLSecurityPFX.js.html @@ -0,0 +1,249 @@ + + + + Code coverage report for strong-soap/src/security/ClientSSLSecurityPFX.js + + + + + + + +
+
+

+ All files / strong-soap/src/security ClientSSLSecurityPFX.js +

+
+
+ 92% + Statements + 23/25 +
+
+ 85.71% + Branches + 12/14 +
+
+ 100% + Functions + 2/2 +
+
+ 92% + Lines + 23/25 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61  +  +  +  +  +  +  +1x +1x +1x +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +5x +  +5x +2x +  +5x +3x +2x +1x +  +  +1x +  +  +  +  +4x +3x +1x +  +  +4x +4x +  +  +  +1x +1x +  +  +1x +1x +  +  +  +1x + 
// Copyright IBM Corp. 2016. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var g = require('../globalize');
+var fs = require('fs')
+  , https = require('https')
+  , _ = require('lodash')
+  , Security = require('./security');
+ 
+class ClientSSLSecurityPFX extends Security {
+ 
+  /**
+   * activates SSL for an already existing client using a PFX cert
+   *
+   * @module ClientSSLSecurityPFX
+   * @param {Buffer|String}   pfx
+   * @param {String}   passphrase
+   * @constructor
+   */
+  constructor(pfx, passphrase, options) {
+    super(options);
+ 
+    if (typeof passphrase === 'object') {
+      options = passphrase;
+    }
+    if (pfx) {
+      if (Buffer.isBuffer(pfx)) {
+        this.pfx = pfx;
+      } else Iif (typeof pfx === 'string') {
+        this.pfx = fs.readFileSync(pfx);
+      } else {
+        throw new Error(g.f(
+          'supplied {{pfx}} file should be a {{buffer}} or a file location'));
+      }
+    }
+ 
+    if (passphrase) {
+      if (typeof passphrase === 'string') {
+        this.passphrase = passphrase;
+      }
+    }
+    this.options = {};
+    _.merge(this.options, options);
+  }
+ 
+  addOptions(options) {
+    options.pfx = this.pfx;
+    Iif (this.passphrase) {
+      options.passphrase = this.passphrase;
+    }
+    _.merge(options, this.options);
+    options.agent = new https.Agent(options);
+  }
+}
+ 
+module.exports = ClientSSLSecurityPFX;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/security/CookieSecurity.js.html b/node_modules/strong-soap/coverage/strong-soap/src/security/CookieSecurity.js.html new file mode 100644 index 00000000..1a3141e7 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/security/CookieSecurity.js.html @@ -0,0 +1,168 @@ + + + + Code coverage report for strong-soap/src/security/CookieSecurity.js + + + + + + + +
+
+

+ All files / strong-soap/src/security CookieSecurity.js +

+
+
+ 87.5% + Statements + 7/8 +
+
+ 100% + Branches + 6/6 +
+
+ 75% + Functions + 3/4 +
+
+ 87.5% + Lines + 7/8 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34  +  +  +  +  +  +  +1x +  +  +4x +  +  +  +  +  +  +  +4x +  +4x +  +4x +4x +  +  +  +  +  +  +  +  +1x + 
// Copyright IBM Corp. 2016. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var Security = require('./security');
+ 
+function hasCookieHeader (cookie) {
+  return typeof cookie === 'object' && cookie.hasOwnProperty('set-cookie');
+}
+ 
+/*
+ * Accepts either a cookie or lastResponseHeaders
+ */
+class CookieSecurity extends Security {
+  constructor(cookie, options) {
+    super(options);
+ 
+    cookie = hasCookieHeader(cookie) ? cookie['set-cookie'] : cookie;
+ 
+    this.cookie = (Array.isArray(cookie) ? cookie : [cookie])
+      .map(c => c.split(';')[0])
+      .join('; ');
+  }
+ 
+  addHttpHeaders(headers) {
+    headers.Cookie = this.cookie;
+  }
+}
+ 
+module.exports = CookieSecurity;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/security/NTLMSecurity.js.html b/node_modules/strong-soap/coverage/strong-soap/src/security/NTLMSecurity.js.html new file mode 100644 index 00000000..61b8368f --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/security/NTLMSecurity.js.html @@ -0,0 +1,168 @@ + + + + Code coverage report for strong-soap/src/security/NTLMSecurity.js + + + + + + + +
+
+

+ All files / strong-soap/src/security NTLMSecurity.js +

+
+
+ 20% + Statements + 3/15 +
+
+ 100% + Branches + 0/0 +
+
+ 0% + Functions + 0/2 +
+
+ 20% + Lines + 3/15 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34  +  +  +  +  +  +  +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x + 
// Copyright IBM Corp. 2016. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var _ = require('lodash');
+var Security = require('./security');
+ 
+class NTLMSecurity extends Security {
+  constructor(username, password, domain, workstation, wsdlAuthRequired, options) {
+    super(options);
+    this.username = username;
+    this.password = password;
+    this.domain = domain;
+    this.workstation = workstation;
+    //set this to true/false if remote WSDL retrieval needs NTLM authentication or not
+    this.wsdlAuthRequired = wsdlAuthRequired;
+  }
+ 
+  addOptions(options) {
+    options.username = this.username;
+    options.password = this.password;
+    options.domain = this.domain;
+    options.workstation = this.workstation;
+    options.wsdlAuthRequired = this.wsdlAuthRequired;
+    _.merge(options, this.options);
+  }
+}
+ 
+ 
+module.exports = NTLMSecurity;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/security/WSSecurity.js.html b/node_modules/strong-soap/coverage/strong-soap/src/security/WSSecurity.js.html new file mode 100644 index 00000000..b7c12ef9 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/security/WSSecurity.js.html @@ -0,0 +1,450 @@ + + + + Code coverage report for strong-soap/src/security/WSSecurity.js + + + + + + + +
+
+

+ All files / strong-soap/src/security WSSecurity.js +

+
+
+ 92.45% + Statements + 49/53 +
+
+ 90.91% + Branches + 40/44 +
+
+ 100% + Functions + 2/2 +
+
+ 92.45% + Lines + 49/53 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128  +  +  +  +  +  +  +1x +1x +1x +1x +1x +  +  +  +8x +8x +8x +8x +  +  +  +8x +2x +2x +  +6x +  +  +  +8x +2x +  +  +8x +  +8x +  +  +  +  +8x +2x +  +8x +  +  +8x +2x +  +8x +  +  +  +  +  +6x +6x +1x +  +6x +  +  +  +6x +  +  +  +  +  +6x +6x +6x +6x +5x +  +5x +  +5x +5x +  +  +6x +  +  +6x +6x +5x +  +  +  +6x +  +1x +1x +1x +  +  +  +6x +6x +  +  +  +  +6x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x + 
// Copyright IBM Corp. 2016. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+"use strict";
+ 
+var Security = require('./security');
+var crypto = require('crypto');
+var passwordDigest = require('../utils').passwordDigest;
+var validPasswordTypes = ['PasswordDigest', 'PasswordText'];
+var toXMLDate = require('../utils').toXMLDate;
+ 
+class WSSecurity extends Security {
+  constructor(username, password, options) {
+    options = options || {};
+    super(options);
+    this._username = username;
+    this._password = password;
+    //must account for backward compatibility for passwordType String param as 
+    // well as object options defaults: passwordType = 'PasswordText', 
+    // hasTimeStamp = true   
+    if (typeof options === 'string') {
+      this._passwordType = options ? options : 'PasswordText';
+      options = {};
+    } else {
+      this._passwordType = options.passwordType ? options.passwordType :
+        'PasswordText';
+    }
+ 
+    if (validPasswordTypes.indexOf(this._passwordType) === -1) {
+      this._passwordType = 'PasswordText';
+    }
+ 
+    this._hasTimeStamp = options.hasTimeStamp ||
+    typeof options.hasTimeStamp === 'boolean' ? !!options.hasTimeStamp : true;
+    this._hasTokenCreated = options.hasTokenCreated ||
+    typeof options.hasTokenCreated === 'boolean' ?
+      !!options.hasTokenCreated : true;
+ 
+    /*jshint eqnull:true */
+    if (options.hasNonce != null) {
+      this._hasNonce = !!options.hasNonce;
+    }
+    this._hasTokenCreated = options.hasTokenCreated ||
+    typeof options.hasTokenCreated === 'boolean' ?
+      !!options.hasTokenCreated : true;
+    if (options.actor != null) {
+      this._actor = options.actor;
+    }
+    Iif (options.mustUnderstand != null) {
+      this._mustUnderstand = !!options.mustUnderstand;
+    }
+  }
+ 
+  addSoapHeaders(headerElement) {
+    var secElement = headerElement.element('wsse:Security');
+    if (this._actor) {
+      secElement.attribute('soap:actor', this._actor);
+    }
+    Iif (this._mustUnderstand) {
+      secElement.attribute('soap:mustUnderstand', '1');
+    }
+ 
+    secElement
+      .attribute('xmlns:wsse', 'http://docs.oasis-open.org/wss/2004/01/' +
+        'oasis-200401-wss-wssecurity-secext-1.0.xsd')
+      .attribute('xmlns:wsu', 'http://docs.oasis-open.org/wss/2004/01/' +
+        'oasis-200401-wss-wssecurity-utility-1.0.xsd');
+ 
+    var now = new Date();
+    var created = toXMLDate(now);
+    var timeStampXml = '';
+    if (this._hasTimeStamp) {
+      var expires = toXMLDate(new Date(now.getTime() + (1000 * 600)));
+ 
+      var tsElement = secElement.element('wsu:Timestamp')
+        .attribute('wsu:Id', 'Timestamp-' + created);
+      tsElement.element('wsu:Created', created);
+      tsElement.element('wsu:Expires', expires);
+    }
+ 
+    var userNameElement = secElement.element('wsse:UsernameToken')
+      .attribute('wsu:Id', 'SecurityToken-' + created);
+ 
+    userNameElement.element('wsse:Username', this._username);
+    if (this._hasTokenCreated) {
+      userNameElement.element('wsu:Created', created);
+    }
+ 
+    var nonce;
+    if(this._hasNonce || this._passwordType !== 'PasswordText') {
+      // nonce = base64 ( sha1 ( created + random ) )
+      var nHash = crypto.createHash('sha1');
+      nHash.update(created + Math.random());
+      nonce = nHash.digest('base64');
+    }
+ 
+    var password;
+    Eif (this._passwordType === 'PasswordText') {
+      userNameElement.element('wsse:Password')
+        .attribute('Type', 'http://docs.oasis-open.org/wss/2004/01/' +
+        'oasis-200401-wss-username-token-profile-1.0#PasswordText')
+        .text(this._password);
+ 
+      if (nonce) {
+        userNameElement.element('wsse:Nonce')
+          .attribute('EncodingType', 'http://docs.oasis-open.org/wss/2004/01/' +
+            'oasis-200401-wss-soap-message-security-1.0#Base64Binary')
+          .text(nonce);
+      }
+    } else {
+      userNameElement.element('wsse:Password')
+        .attribute('Type', 'http://docs.oasis-open.org/wss/2004/01/' +
+          'oasis-200401-wss-username-token-profile-1.0#PasswordDigest')
+        .text(passwordDigest(nonce, created, this._password));
+ 
+      userNameElement.element('wsse:Nonce')
+        .attribute('EncodingType', 'http://docs.oasis-open.org/wss/2004/01/' +
+          'oasis-200401-wss-soap-message-security-1.0#Base64Binary')
+        .text(nonce);
+    }
+ 
+  }
+}
+ 
+module.exports = WSSecurity;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/security/WSSecurityCert.js.html b/node_modules/strong-soap/coverage/strong-soap/src/security/WSSecurityCert.js.html new file mode 100644 index 00000000..ed29804b --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/security/WSSecurityCert.js.html @@ -0,0 +1,432 @@ + + + + Code coverage report for strong-soap/src/security/WSSecurityCert.js + + + + + + + +
+
+

+ All files / strong-soap/src/security WSSecurityCert.js +

+
+
+ 93.75% + Statements + 45/48 +
+
+ 50% + Branches + 2/4 +
+
+ 100% + Functions + 9/9 +
+
+ 95.74% + Lines + 45/47 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122  +  +  +  +  +  +  +1x +1x +1x +1x +1x +  +1x +  +  +1x +  +  +  +2x +  +  +  +  +  +  +  +  +1x +  +  +  +1x +  +  +  +2x +  +  +  +  +3x +  +3x +  +  +  +  +3x +3x +2x +  +2x +  +  +2x +2x +  +2x +2x +2x +1x +  +1x +  +  +1x +  +  +  +  +3x +  +  +  +  +  +3x +3x +2x +  +  +  +  +1x +1x +  +1x +1x +1x +1x +  +1x +  +  +  +  +  +1x +  +  +  +  +  +  +1x +  +1x +1x +  +1x +  +1x +1x +  +1x +  +  +  +1x + 
// Copyright IBM Corp. 2016,2018. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var NodeRsa = require('node-rsa');
+var SignedXml = require('xml-crypto').SignedXml;
+var uuid = require('uuid');
+var Security = require('./security');
+var xmlHandler = require('../parser/xmlHandler');
+ 
+var crypto = require('crypto');
+ 
+function addMinutes(date, minutes) {
+  return new Date(date.getTime() + minutes * 60000);
+}
+ 
+function dateStringForSOAP(date) {
+  return date.getUTCFullYear() + '-' +
+    ('0' + (date.getUTCMonth() + 1)).slice(-2) + '-' +
+    ('0' + date.getUTCDate()).slice(-2) + 'T' +
+    ('0' + date.getUTCHours()).slice(-2) + ":" +
+    ('0' + date.getUTCMinutes()).slice(-2) + ":" +
+    ('0' + date.getUTCSeconds()).slice(-2) + "Z";
+}
+ 
+function generateCreated() {
+  return dateStringForSOAP(new Date());
+}
+ 
+function generateExpires() {
+  return dateStringForSOAP(addMinutes(new Date(), 10));
+}
+ 
+function generateId() {
+  return uuid.v4().replace(/-/gm, '');
+}
+ 
+class WSSecurityCert extends Security {
+  constructor(privatePEM, publicP12PEM, password) {
+    super();
+    
+    this.publicP12PEM = publicP12PEM.toString()
+      .replace('-----BEGIN CERTIFICATE-----', '')
+      .replace('-----END CERTIFICATE-----', '')
+      .replace(/(\r\n|\n|\r)/gm, '');
+ 
+    this.signer = new SignedXml();
+    this.signer.signingKey = this.getSigningKey(privatePEM, password);
+    this.x509Id = 'x509-' + generateId();
+ 
+    var references = ['http://www.w3.org/2000/09/xmldsig#enveloped-signature',
+      'http://www.w3.org/2001/10/xml-exc-c14n#'];
+ 
+    this.signer.addReference('//*[local-name(.)=\'Body\']', references);
+    this.signer.addReference('//*[local-name(.)=\'Timestamp\']', references);
+ 
+    var _this = this;
+    this.signer.keyInfoProvider = {};
+    this.signer.keyInfoProvider.getKeyInfo = function(key) {
+      var x509Id = _this.x509Id;
+      var xml =
+        `<wsse:SecurityTokenReference>
+    <wsse:Reference URI="${x509Id}" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/>
+    </wsse:SecurityTokenReference>`;
+      return xml;
+    };
+  }
+ 
+  getSigningKey(privatePEM, password) {
+    Iif (typeof crypto.createPrivateKey === 'function') {
+      // Node 11 or above
+      this.privateKey = crypto.createPrivateKey({key: privatePEM, passphrase: password});
+      return this.privateKey.export({type: 'pkcs1', format: 'pem'});
+    } else {
+      // Node 10 or below, fall back to https://github.com/rzcoder/node-rsa
+      Iif (password) throw new Error('Passphrase is not supported by node-rsa.');
+      this.privateKey = new NodeRsa(privatePEM);
+      return this.privateKey.exportKey('private');
+    }
+  }
+ 
+  postProcess(headerElement, bodyElement) {
+    this.created = generateCreated();
+    this.expires = generateExpires();
+ 
+    var binaryToken = this.publicP12PEM,
+      created = this.created,
+      expires = this.expires,
+      id = this.x509Id;
+ 
+    var secElement = headerElement.element('wsse:Security')
+      .attribute('xmlns:wsse', 'http://docs.oasis-open.org/wss/2004/01/' +
+        'oasis-200401-wss-wssecurity-secext-1.0.xsd')
+      .attribute('xmlns:wsu', 'http://docs.oasis-open.org/wss/2004/01/' +
+        'oasis-200401-wss-wssecurity-utility-1.0.xsd')
+      .attribute('soap:mustUnderstand', '1');
+    secElement.element('wsse:BinarySecurityToken')
+      .attribute('EncodingType', 'http://docs.oasis-open.org/wss/2004/01/' +
+        'oasis-200401-wss-soap-message-security-1.0#Base64Binary')
+      .attribute('ValueType', 'http://docs.oasis-open.org/wss/2004/01/' +
+        'oasis-200401-wss-x509-token-profile-1.0#X509v3')
+      .attribute('wsu:Id', id)
+      .text(binaryToken);
+    var tsElement = secElement.element('wsu:Timestamp')
+      .attribute('wsu:Id', '_1');
+    tsElement.element('wsu:Created', created);
+    tsElement.element('wsu:Expires', expires);
+ 
+    var xmlWithSec = headerElement.doc().end({pretty: true});
+ 
+    this.signer.computeSignature(xmlWithSec);
+    var sig = this.signer.getSignatureXml();
+ 
+    xmlHandler.parseXml(secElement, sig);
+  }
+}
+ 
+module.exports = WSSecurityCert;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/security/index.html b/node_modules/strong-soap/coverage/strong-soap/src/security/index.html new file mode 100644 index 00000000..741e1157 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/security/index.html @@ -0,0 +1,214 @@ + + + + Code coverage report for strong-soap/src/security + + + + + + + +
+
+

+ All files strong-soap/src/security +

+
+
+ 83.66% + Statements + 169/202 +
+
+ 81.52% + Branches + 75/92 +
+
+ 80% + Functions + 24/30 +
+
+ 84.08% + Lines + 169/201 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
BasicAuthSecurity.js
75%6/80%0/250%1/275%6/8
BearerSecurity.js
83.33%5/6100%0/050%1/283.33%5/6
ClientSSLSecurity.js
77.42%24/3165%13/20100%2/277.42%24/31
ClientSSLSecurityPFX.js
92%23/2585.71%12/14100%2/292%23/25
CookieSecurity.js
87.5%7/8100%6/675%3/487.5%7/8
NTLMSecurity.js
20%3/15100%0/00%0/220%3/15
WSSecurity.js
92.45%49/5390.91%40/44100%2/292.45%49/53
WSSecurityCert.js
93.75%45/4850%2/4100%9/995.74%45/47
index.js
75%3/4100%0/0100%0/075%3/4
security.js
100%4/4100%2/280%4/5100%4/4
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/security/index.js.html b/node_modules/strong-soap/coverage/strong-soap/src/security/index.js.html new file mode 100644 index 00000000..c382f980 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/security/index.js.html @@ -0,0 +1,141 @@ + + + + Code coverage report for strong-soap/src/security/index.js + + + + + + + +
+
+

+ All files / strong-soap/src/security index.js +

+
+
+ 75% + Statements + 3/4 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 0/0 +
+
+ 75% + Lines + 3/4 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25  +  +  +  +  +  +  +  +1x +1x +  +  +  +  +1x +  +  +  +  +  +  +  +  +  + 
// Copyright IBM Corp. 2016,2018. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+"use strict";
+ 
+var WSSecurityCert;
+try {
+  WSSecurityCert = require('./WSSecurityCert');
+} catch (err) {
+  console.warn(err);
+}
+ 
+module.exports = {
+  BasicAuthSecurity: require('./BasicAuthSecurity'),
+  ClientSSLSecurity: require('./ClientSSLSecurity'),
+  ClientSSLSecurityPFX: require('./ClientSSLSecurityPFX'),
+  CookieSecurity: require('./CookieSecurity'),
+  WSSecurity: require('./WSSecurity'),
+  BearerSecurity: require('./BearerSecurity'),
+  WSSecurityCert: WSSecurityCert,
+  NTLMSecurity: require('./NTLMSecurity')
+};
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/security/security.js.html b/node_modules/strong-soap/coverage/strong-soap/src/security/security.js.html new file mode 100644 index 00000000..3cc7cfea --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/security/security.js.html @@ -0,0 +1,165 @@ + + + + Code coverage report for strong-soap/src/security/security.js + + + + + + + +
+
+

+ All files / strong-soap/src/security security.js +

+
+
+ 100% + Statements + 4/4 +
+
+ 100% + Branches + 2/2 +
+
+ 80% + Functions + 4/5 +
+
+ 100% + Lines + 4/4 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33  +  +  +  +  +  +  +1x +  +  +  +  +  +  +29x +  +  +  +8x +  +  +  +  +  +  +  +  +  +  +  +  +1x + 
// Copyright IBM Corp. 2016. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var _ = require('lodash');
+ 
+/**
+ * Base class for Web Services Security
+ */
+class Security {
+  constructor(options) {
+    this.options = options || {};
+  }
+ 
+  addOptions(options) {
+    _.merge(options, this.options);
+  };
+ 
+  addHttpHeaders(headers) {
+  }
+ 
+  addSoapHeaders(headerElement) {
+  }
+ 
+  postProcess(envelopeElement, headerElement, bodyElement) {
+  }
+}
+ 
+module.exports = Security;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/server.js.html b/node_modules/strong-soap/coverage/strong-soap/src/server.js.html new file mode 100644 index 00000000..0cd6ade9 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/server.js.html @@ -0,0 +1,1353 @@ + + + + Code coverage report for strong-soap/src/server.js + + + + + + + +
+
+

+ All files / strong-soap/src server.js +

+
+
+ 87.01% + Statements + 201/231 +
+
+ 63.3% + Branches + 69/109 +
+
+ 100% + Functions + 14/14 +
+
+ 87.28% + Lines + 199/228 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377 +378 +379 +380 +381 +382 +383 +384 +385 +386 +387 +388 +389 +390 +391 +392 +393 +394 +395 +396 +397 +398 +399 +400 +401 +402 +403 +404 +405 +406 +407 +408 +409 +410 +411 +412 +413 +414 +415 +416 +417 +418 +419 +420 +421 +422 +423 +424 +425 +426 +427 +428 +429  +  +  +  +  +  +  +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +  +1x +1x +  +  +  +  +  +  +  +38x +38x +38x +38x +38x +  +38x +38x +38x +38x +38x +38x +38x +  +38x +38x +42x +  +  +  +  +  +42x +42x +38x +42x +37x +  +5x +5x +  +  +  +  +  +  +  +37x +37x +37x +37x +  +37x +  +  +  +37x +7x +7x +  +  +7x +7x +  +7x +30x +30x +30x +30x +  +  +  +30x +30x +  +30x +  +30x +30x +  +  +30x +  +  +  +30x +30x +  +  +30x +27x +1x +  +27x +27x +27x +  +  +  +  +  +3x +3x +3x +3x +3x +  +  +  +  +  +  +  +  +  +  +  +30x +30x +30x +29x +29x +29x +  +  +29x +  +  +29x +  +  +  +  +  +  +  +  +29x +  +  +  +  +29x +29x +  +  +29x +29x +29x +29x +29x +29x +29x +29x +  +29x +  +  +  +29x +29x +  +  +  +  +  +  +  +  +  +  +29x +  +  +  +29x +29x +1x +  +1x +1x +  +  +1x +  +  +  +  +  +  +  +  +  +28x +  +28x +  +  +28x +  +28x +37x +  +37x +37x +27x +27x +26x +  +26x +26x +  +27x +  +  +  +28x +28x +4x +  +27x +  +  +  +  +  +  +  +  +  +  +  +11x +9x +  +  +2x +  +  +  +  +28x +28x +  +28x +28x +28x +28x +28x +28x +28x +28x +  +28x +28x +28x +  +  +  +  +  +  +  +  +17x +  +17x +  +17x +  +  +  +17x +1x +  +16x +  +1x +  +  +16x +  +16x +16x +  +16x +16x +  +16x +16x +  +16x +  +  +  +16x +  +16x +16x +  +  +16x +  +16x +16x +16x +  +16x +16x +  +  +  +28x +  +  +1x +1x +  +  +27x +18x +13x +  +  +  +  +1x +  +  +1x +  +  +  +  +  +1x +1x +1x +  +1x +  +1x +  +1x +1x +  +  +  +  +26x +  +26x +1x +  +  +26x +  +26x +26x +  +  +  +10x +  +  +  +10x +1x +1x +  +  +10x +10x +  +  +10x +  +  +10x +10x +  +10x +4x +  +  +10x +10x +  +  +  +10x +  +  +10x +10x +  +10x +  +  +10x +  +10x +10x +10x +  +10x +10x +  +  +  +1x + 
// Copyright IBM Corp. 2016,2018. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var g = require('./globalize');
+var url = require('url'),
+  compress = null,
+  events = require('events'),
+  XMLHandler = require('./parser/xmlHandler'),
+  Base = require('./base'),
+  toXMLDate = require('./utils').toXMLDate,
+  util = require('util'),
+  debug = require('debug')('strong-soap:server'),
+  debugDetail = require('debug')('strong-soap:server:detail');
+ 
+try {
+  compress = require('compress');
+} catch (error) {
+  // Ignore error
+}
+ 
+class Server extends Base {
+ 
+  constructor(server, path, services, wsdl, options) {
+    super(wsdl, options);
+    var self = this;
+    options = options || {};
+    this.path = path;
+    this.services = services;
+ 
+    debug('Server parameters: path: %s services: %j wsdl: %j', path, services, wsdl);
+    Eif (path[path.length - 1] !== '/')
+      path += '/';
+    wsdl.load(function(err) {
+      Iif (err) throw err;
+      self.xmlHandler = new XMLHandler(self.wsdl.definitions.schemas, self.wsdl.options);
+      var listeners = server.listeners('request').slice();
+ 
+      server.removeAllListeners('request');
+      server.addListener('request', function(req, res) {
+        Iif (typeof self.authorizeConnection === 'function') {
+          if (!self.authorizeConnection(req.connection.remoteAddress)) {
+            res.end();
+            return;
+          }
+        }
+        var reqPath = url.parse(req.url).pathname;
+        if (reqPath[reqPath.length - 1] !== '/')
+          reqPath += '/';
+        if (path === reqPath) {
+          self._requestListener(req, res);
+        } else {
+          for (var i = 0, len = listeners.length; i < len; i++) {
+            listeners[i].call(this, req, res);
+          }
+        }
+      });
+    });
+  }
+ 
+  _requestListener(req, res) {
+    var self = this;
+    var reqParse = url.parse(req.url);
+    var reqPath = reqParse.pathname;
+    var reqQuery = reqParse.search;
+ 
+    Iif (typeof self.log === 'function') {
+      self.log('info', 'Handling ' + req.method + ' on ' + req.url);
+    }
+ 
+    if (req.method === 'GET') {
+      Eif (reqQuery && reqQuery.toLowerCase() === '?wsdl') {
+        Iif (typeof self.log === 'function') {
+          self.log('info', 'Wants the WSDL');
+        }
+        res.setHeader('Content-Type', 'application/xml');
+        res.write(self.wsdl.toXML());
+      }
+      res.end();
+    } else Eif (req.method === 'POST') {
+      res.setHeader('Content-Type', req.headers['content-type']);
+      var chunks = [], gunzip;
+      Iif (compress && req.headers['content-encoding'] === 'gzip') {
+        gunzip = new compress.Gunzip();
+        gunzip.init();
+      }
+      req.on('data', function(chunk) {
+        Iif (gunzip)
+          chunk = gunzip.inflate(chunk, 'binary');
+        chunks.push(chunk);
+      });
+      req.on('end', function() {
+        var xml = chunks.join('');
+        var result;
+        var error;
+        Iif (gunzip) {
+          gunzip.end();
+          gunzip = null;
+        }
+        try {
+          Iif (typeof self.log === 'function') {
+            self.log('received', xml);
+          }
+          self._process(xml, req, function(result, statusCode) {
+            if (statusCode) {
+              res.statusCode = statusCode;
+            }
+            res.write(result);
+            res.end();
+            Iif (typeof self.log === 'function') {
+              self.log('replied', result);
+            }
+          });
+        }
+        catch (err) {
+          error = err.stack || err;
+          res.statusCode = 500;
+          res.write(error);
+          res.end();
+          Iif (typeof self.log === 'function') {
+            self.log('error', error);
+          }
+        }
+      });
+    }
+    else {
+      res.end();
+    }
+  };
+ 
+  _process(input, req, callback) {
+    var self = this,
+      pathname = url.parse(req.url).pathname.replace(/\/$/, ''),
+      obj = this.xmlHandler.xmlToJson(null, input),
+      body = obj.Body,
+      headers = obj.Header,
+      bindings = this.wsdl.definitions.bindings, binding,
+      operation, operationName,
+      serviceName, portName,
+      includeTimestamp = obj.Header && obj.Header.Security &&
+        obj.Header.Security.Timestamp;
+ 
+    Iif (typeof self.authenticate === 'function') {
+      if (!obj.Header || !obj.Header.Security) {
+        throw new Error(g.f('No security header'));
+      }
+      if (!self.authenticate(obj.Header.Security)) {
+        throw new Error(g.f('Invalid username or password'));
+      }
+    }
+ 
+    Iif (typeof self.log === 'function') {
+      self.log('info', 'Attempting to bind to ' + pathname);
+    }
+ 
+    // use port.location and current url to find the right binding
+    binding = (function(self) {
+      var services = self.wsdl.definitions.services;
+      var firstPort;
+      var name;
+      for (name in services) {
+        serviceName = name;
+        var service = services[serviceName];
+        var ports = service.ports;
+        for (name in ports) {
+          portName = name;
+          var port = ports[portName];
+          var portPathname = url.parse(port.location).pathname.replace(/\/$/, '');
+ 
+          Iif (typeof self.log === 'function') {
+            self.log('info', 'Trying ' + portName + ' from path ' + portPathname);
+          }
+ 
+          Eif (portPathname === pathname)
+            return port.binding;
+ 
+          // The port path is almost always wrong for generated WSDLs
+          if (!firstPort) {
+            firstPort = port;
+          }
+        }
+      }
+      return !firstPort ? void 0 : firstPort.binding;
+    })(this);
+ 
+    Iif (!binding) {
+      throw new Error(g.f('Failed to bind to {{WSDL}}'));
+    }
+ 
+    try {
+      if (binding.style === 'rpc') {
+        operationName = Object.keys(body)[0];
+ 
+        self.emit('request', obj, operationName);
+        Iif (headers)
+          self.emit('headers', headers, operationName);
+ 
+        self._executeMethod({
+          serviceName: serviceName,
+          portName: portName,
+          operationName: operationName,
+          outputName: operationName + 'Response',
+          args: body[operationName],
+          headers: headers,
+          style: 'rpc'
+        }, req, callback);
+      } else { //document style
+        var messageElemName = (Object.keys(body)[0] === 'attributes' ?
+          Object.keys(body)[1] : Object.keys(body)[0]);
+        var pair = binding.topElements[messageElemName];
+ 
+        var operationName, outputName;
+        var operations = binding.operations;
+        //figure out the output name
+        for (var name in operations) {
+          var inputParts = operations[name].input.message.parts;
+          //find the first part of the input message. There could be more than one parts in input message.
+          var firstInPart = inputParts[Object.keys(inputParts)[0]];
+          if(firstInPart.element.$name === messageElemName) {
+            operationName = operations[name].$name;
+            if (operations[name].output != null) {
+              var outPart = operations[name].output.message.parts;
+              //there will be only one output part
+              var firstOutPart = outPart[Object.keys(outPart)[0]];
+              outputName = firstOutPart.element.$name;
+            }
+            break;
+          }
+        }
+ 
+        self.emit('request', obj, operationName);
+        if (headers)
+          self.emit('headers', headers, operationName);
+ 
+        self._executeMethod({
+          serviceName: serviceName,
+          portName: portName,
+          operationName: operationName,
+          outputName: outputName,
+          args: body[messageElemName],
+          headers: headers,
+          style: 'document',
+          includeTimestamp: includeTimestamp
+        }, req, callback);
+      }
+    } catch (error) {
+      if (error.Fault !== undefined) {
+        return self._sendError(operations[name], error, callback, includeTimestamp);
+      }
+      //Revisit - is this needed?
+      throw error;
+    }
+  };
+ 
+  _executeMethod(options, req, callback) {
+    options = options || {};
+    var self = this,
+      operation, body,
+      serviceName = options.serviceName,
+      portName = options.portName,
+      operationName = options.operationName,
+      outputName = options.outputName,
+      args = options.args,
+      style = options.style,
+      includeTimestamp = options.includeTimestamp,
+      handled = false;
+ 
+    try {
+      operation = this.services[serviceName][portName][operationName];
+      debug('Server operation: %s ', operationName);
+    } catch (error) {
+      debug('Server executeMethod: error: %s ', error.message);
+      //fix - should create a fault and call sendError (..) so that this error is not lost and will be sent as Fault in soap envelope
+      //to the client?
+      return callback(this._envelope('', includeTimestamp));
+    }
+ 
+    function handleResult(error, result) {
+      Iif (handled)
+        return;
+      handled = true;
+ 
+      var operation  = self.wsdl.definitions.services[serviceName]
+        .ports[portName].binding.operations[operationName];
+ 
+ 
+      if (error && error.Fault !== undefined) {
+        return self._sendError(operation, error, callback, includeTimestamp);
+      }
+      else if (result === undefined) {
+        // Backward compatibility to support one argument callback style
+        result = error;
+      }
+ 
+      var element = operation.output;
+ 
+      var operationDescriptor = operation.describe(self.wsdl.definitions);
+      debugDetail('Server handleResult. operationDescriptor: %j ', operationDescriptor);
+ 
+      var outputBodyDescriptor = operationDescriptor.output.body;
+      debugDetail('Server handleResult. outputBodyDescriptor: %j ', outputBodyDescriptor);
+ 
+      var soapNsURI = 'http://schemas.xmlsoap.org/soap/envelope/';
+      var soapNsPrefix = self.wsdl.options.envelopeKey || 'soap';
+ 
+      Iif (operation.soapVersion === '1.2') {
+        soapNsURI = 'http://www.w3.org/2003/05/soap-envelope';
+      }
+ 
+      debug('Server soapNsURI: %s soapNsPrefix: %s', soapNsURI, soapNsPrefix);
+ 
+      var nsContext = self.createNamespaceContext(soapNsPrefix, soapNsURI);
+      var envelope = XMLHandler.createSOAPEnvelope(soapNsPrefix, soapNsURI);
+ 
+ 
+      self.xmlHandler.jsonToXml(envelope.body, nsContext, outputBodyDescriptor, result);
+ 
+      self._envelope(envelope, includeTimestamp);
+      var message = envelope.body.toString({pretty: true});
+      var xml = envelope.doc.end({pretty: true});
+ 
+      debug('Server handleResult. xml: %s ', xml);
+      callback(xml);
+ 
+    }
+ 
+    if (!self.wsdl.definitions.services[serviceName].ports[portName]
+        .binding.operations[operationName].output) {
+      // no output defined = one-way operation so return empty response
+      handled = true;
+      callback('');
+    }
+ 
+    var result = operation(args, handleResult, options.headers, req);
+    if (typeof result !== 'undefined') {
+      handleResult(null, result);
+    }
+  };
+ 
+  _addWSSecurityHeader(headerElement) {
+    var secElement = headerElement.element('wsse:Security')
+      .attribute('soap:mustUnderstand', '1');
+ 
+    secElement
+      .attribute('xmlns:wsse', 'http://docs.oasis-open.org/wss/2004/01/' +
+        'oasis-200401-wss-wssecurity-secext-1.0.xsd')
+      .attribute('xmlns:wsu', 'http://docs.oasis-open.org/wss/2004/01/' +
+        'oasis-200401-wss-wssecurity-utility-1.0.xsd');
+ 
+    var now = new Date();
+    var created = toXMLDate(now);
+    var timeStampXml = '';
+ 
+    var expires = toXMLDate(new Date(now.getTime() + (1000 * 600)));
+ 
+    var tsElement = secElement.element('wsu:Timestamp')
+      .attribute('wsu:Id', 'Timestamp-' + created);
+    tsElement.element('wsu:Created', created);
+    tsElement.element('wsu:Expires', expires);
+ 
+  }
+ 
+  _envelope(env, includeTimestamp) {
+    env = env || XMLHandler.createSOAPEnvelope();
+ 
+    if (includeTimestamp) {
+      this._addWSSecurityHeader(env.header);
+    }
+ 
+    var soapHeaderElement = env.header;
+    //add soapHeaders to envelope. Header can be xml, or JSON object which may or may not be described in WSDL/XSD.
+    this.addSoapHeadersToEnvelope(soapHeaderElement, this.xmlHandler);
+    return env;
+  };
+ 
+  _sendError(operation, error, callback, includeTimestamp) {
+    var self = this,
+      fault;
+ 
+    var statusCode;
+    if (error.Fault.statusCode) {
+      statusCode = error.Fault.statusCode;
+      error.Fault.statusCode = undefined;
+    }
+ 
+    var operationDescriptor = operation.describe(this.wsdl.definitions);
+    debugDetail('Server sendError. operationDescriptor: %j ', operationDescriptor);
+ 
+    //get envelope descriptor
+    var faultEnvDescriptor = operation.descriptor.faultEnvelope.elements[0];
+ 
+ 
+    var soapNsURI = 'http://schemas.xmlsoap.org/soap/envelope/';
+    var soapNsPrefix = self.wsdl.options.envelopeKey || 'soap';
+ 
+    if (operation.soapVersion === '1.2') {
+      soapNsURI = 'http://www.w3.org/2003/05/soap-envelope';
+    }
+ 
+    var nsContext = self.createNamespaceContext(soapNsPrefix, soapNsURI);
+    var envelope = XMLHandler.createSOAPEnvelope(soapNsPrefix, soapNsURI);
+ 
+ 
+    //find the envelope body descriptor
+    var bodyDescriptor = faultEnvDescriptor.elements[1];
+ 
+    //there will be only one <Fault> element descriptor under <Body>
+    var faultDescriptor = bodyDescriptor.elements[0];
+    debugDetail('Server sendError. faultDescriptor: %j ', faultDescriptor);
+ 
+    debug('Server sendError.  error.Fault: %j ',  error.Fault);
+ 
+    //serialize Fault object into XML as per faultDescriptor
+    this.xmlHandler.jsonToXml(envelope.body, nsContext, faultDescriptor, error.Fault);
+ 
+    self._envelope(envelope, includeTimestamp);
+    var message = envelope.body.toString({pretty: true});
+    var xml = envelope.doc.end({pretty: true});
+ 
+    debug('Server sendError. Response envelope: %s ', xml);
+    callback(xml, statusCode);
+  }
+}
+ 
+module.exports = Server;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/soap.js.html b/node_modules/strong-soap/coverage/strong-soap/src/soap.js.html new file mode 100644 index 00000000..c4b16407 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/soap.js.html @@ -0,0 +1,351 @@ + + + + Code coverage report for strong-soap/src/soap.js + + + + + + + +
+
+

+ All files / strong-soap/src soap.js +

+
+
+ 96.67% + Statements + 58/60 +
+
+ 88.89% + Branches + 16/18 +
+
+ 100% + Functions + 6/6 +
+
+ 96.67% + Lines + 58/60 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95  +  +  +  +  +  +  +1x +1x +1x +1x +1x +1x +1x +1x +  +1x +  +  +193x +  +  +  +193x +  +193x +193x +78x +78x +78x +  +  +  +115x +115x +3x +  +112x +  +112x +  +  +  +  +  +193x +69x +69x +69x +  +193x +193x +193x +193x +  +  +  +  +38x +38x +38x +38x +  +38x +3x +3x +3x +3x +3x +  +  +38x +38x +  +  +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +  +  +1x +1x +1x + 
// Copyright IBM Corp. 2016,2018. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+"use strict";
+ 
+var Client = require('./client'),
+  Server = require('./server'),
+  HttpClient = require('./http'),
+  security = require('./security'),
+  passwordDigest = require('./utils').passwordDigest,
+  parser = require('./parser/index'),
+  openWSDL = parser.WSDL.open,
+  debug = require('debug')('strong-soap:soap');
+ 
+var _wsdlCache = {};
+ 
+function _requestWSDL(url, options, callback) {
+  Iif (typeof options === 'function') {
+    callback = options;
+    options = {};
+  }
+  _wsdlCache = options.WSDL_CACHE || _wsdlCache;
+ 
+  var wsdl = _wsdlCache[url];
+  if (wsdl) {
+    debug('_requestWSDL, wsdl in cache %s', wsdl);
+    process.nextTick(function() {
+      callback(null, wsdl);
+    });
+  }
+  else {
+    openWSDL(url, options, function(err, wsdl) {
+      if (err) {
+        return callback(err);
+      } else {
+        _wsdlCache[url] = wsdl;
+      }
+      callback(null, wsdl);
+    });
+  }
+}
+ 
+function createClient(url, options, callback, endpoint) {
+  if (typeof options === 'function') {
+    endpoint = callback;
+    callback = options;
+    options = {};
+  }
+  endpoint = options.endpoint || endpoint;
+  debug('createClient params: wsdl url: %s client options: %j', url, options);
+  _requestWSDL(url, options, function(err, wsdl) {
+    callback(err, wsdl && new Client(wsdl, endpoint, options));
+  });
+}
+ 
+function listen(server, pathOrOptions, services, xml) {
+  debug('listen params: pathOrOptions: %j services: %j xml: %j', pathOrOptions, services, xml);
+  var options = {},
+    path = pathOrOptions,
+    uri = null;
+ 
+  if (typeof pathOrOptions === 'object') {
+    options = pathOrOptions;
+    path = options.path;
+    services = options.services;
+    xml = options.xml;
+    uri = options.uri;
+  }
+ 
+  var wsdl = new parser.WSDL(xml || services, uri, options);
+  return new Server(server, path, services, wsdl, options);
+}
+ 
+exports.security = security;
+exports.BasicAuthSecurity = security.BasicAuthSecurity;
+exports.WSSecurity = security.WSSecurity;
+exports.WSSecurityCert = security.WSSecurityCert;
+exports.ClientSSLSecurity = security.ClientSSLSecurity;
+exports.ClientSSLSecurityPFX = security.ClientSSLSecurityPFX;
+exports.BearerSecurity = security.BearerSecurity;
+exports.createClient = createClient;
+exports.passwordDigest = passwordDigest;
+exports.listen = listen;
+exports.WSDL = parser.WSDL;
+exports.XMLHandler = parser.XMLHandler;
+exports.NamespaceContext = parser.NamespaceContext;
+exports.QName = parser.QName;
+ 
+// Export Client and Server to allow customization
+exports.Server = Server;
+exports.Client = Client;
+exports.HttpClient = HttpClient;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/soapModel.js.html b/node_modules/strong-soap/coverage/strong-soap/src/soapModel.js.html new file mode 100644 index 00000000..ac8a51ae --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/soapModel.js.html @@ -0,0 +1,216 @@ + + + + Code coverage report for strong-soap/src/soapModel.js + + + + + + + +
+
+

+ All files / strong-soap/src soapModel.js +

+
+
+ 52.94% + Statements + 9/17 +
+
+ 75% + Branches + 6/8 +
+
+ 33.33% + Functions + 1/3 +
+
+ 52.94% + Lines + 9/17 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50  +  +  +  +  +  +  +1x +1x +  +  +  +  +  +  +22x +17x +  +5x +5x +5x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x + 
// Copyright IBM Corp. 2016,2017. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var assert = require('assert');
+var QName = require('./parser/qname');
+ 
+/**
+ * Representation for soap elements
+ */
+class SOAPElement {
+  constructor(value, qname, options) {
+    if (typeof value === 'string' && !qname) {
+      this.xml = value;
+    } else {
+      this.value = value;
+      this.qname = qname;
+      this.options = options || {};
+    }
+  }
+ 
+}
+ 
+/**
+ * Representation for soap attributes
+ */
+class SOAPAttribute {
+  constructor(value, qname) {
+    assert(qname, 'qname is required');
+    this.value = String(value);
+    this.qname = qname;
+  }
+ 
+  addTo(parent, nsContext, xmlHandler) {
+    var nsURI = nsContext.getNamespaceURI(this.qname.prefix);
+    if(nsURI === this.qname.nsURI) {
+      var name = this.qname.prefix + ':' + this.qname.name;
+      parent.attribute(name, this.value);
+    } else {
+      nsContext.declareNamespace(this.qname.prefix, this.qname.nsURI);
+    }
+  }
+}
+ 
+exports.SOAPElement = SOAPElement;
+exports.SOAPAttribute = SOAPAttribute;
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/strip-bom.js.html b/node_modules/strong-soap/coverage/strong-soap/src/strip-bom.js.html new file mode 100644 index 00000000..f148b234 --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/strip-bom.js.html @@ -0,0 +1,165 @@ + + + + Code coverage report for strong-soap/src/strip-bom.js + + + + + + + +
+
+

+ All files / strong-soap/src strip-bom.js +

+
+
+ 83.33% + Statements + 10/12 +
+
+ 76.92% + Branches + 10/13 +
+
+ 100% + Functions + 1/1 +
+
+ 83.33% + Lines + 10/12 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +340x +  +  +340x +  +340x +340x +  +  +340x +11x +  +340x +11x +  +340x +  + 
// Copyright IBM Corp. 2016,2019. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+/*
+strip the BOM characters in the beginning of UTF-8 
+or other unicode encoded strings
+http://en.wikipedia.org/wiki/Byte_order_mark 
+*/
+'use strict';
+module.exports = stripBom;
+ 
+function stripBom(str){
+ 
+	Iif (typeof str !== 'string') {
+		throw new Error('Invalid input, only string allowed');
+	}
+	var chunk = Buffer.from(str);
+	var transformed;
+	var value = str;
+	Iif (chunk[0] === 0xFE && chunk[1] === 0XFF) {
+		transformed = chunk.slice(2);
+	}
+	if (chunk[0] == 0xEF && chunk[1] == 0xBB && chunk[2] == 0xBF) {
+		transformed = chunk.slice(3);
+	}
+	if (transformed) {
+		value = transformed.toString();
+	}
+	return value;
+};
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/coverage/strong-soap/src/utils.js.html b/node_modules/strong-soap/coverage/strong-soap/src/utils.js.html new file mode 100644 index 00000000..68ddf24e --- /dev/null +++ b/node_modules/strong-soap/coverage/strong-soap/src/utils.js.html @@ -0,0 +1,327 @@ + + + + Code coverage report for strong-soap/src/utils.js + + + + + + + +
+
+

+ All files / strong-soap/src utils.js +

+
+
+ 69.44% + Statements + 25/36 +
+
+ 25% + Branches + 5/20 +
+
+ 70% + Functions + 7/10 +
+
+ 71.43% + Lines + 25/35 +
+
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87  +  +  +  +  +  +  +1x +1x +  +1x +1x +1x +1x +  +  +1x +  +2x +2x +2x +  +  +  +  +2x +  +  +1x +  +1x +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +  +  +  +1x +  +65x +  +  +13x +  +  +  +  +  +  +  +1x +  +4x +4x +4x +  +  +4x +  +  +  +4x +4x +  +  + 
// Copyright IBM Corp. 2016,2019. All Rights Reserved.
+// Node module: strong-soap
+// This file is licensed under the MIT License.
+// License text available at https://opensource.org/licenses/MIT
+ 
+'use strict';
+ 
+var crypto = require('crypto');
+exports.passwordDigestOriginal = function passwordDigest(nonce, created, password) {
+  // digest = base64 ( sha1 ( nonce + created + password ) )
+  var pwHash = crypto.createHash('sha1');
+  var rawNonce = Buffer.from(nonce || '', 'base64').toString('binary');
+  pwHash.update(rawNonce + created + password);
+  return pwHash.digest('base64');
+};
+ 
+exports.passwordDigest = function (nonce, created, password) {
+  // digest = base64 ( sha1 ( nonce + created + password ) )
+  var pwHash = crypto.createHash('sha1');
+  var rawNonce = Buffer.from(nonce || '', 'base64');
+  pwHash.update(Buffer.concat([
+    rawNonce,
+    Buffer.from(created),
+    Buffer.from(password)
+  ]));
+  return pwHash.digest('base64');
+};
+ 
+var TNS_PREFIX = ''; // Prefix for targetNamespace
+ 
+exports.TNS_PREFIX = TNS_PREFIX;
+ 
+/**
+ * Find a key from an object based on the value
+ * @param {Object} Namespace prefix/uri mapping
+ * @param {*} nsURI value
+ * @returns {String} The matching key
+ */
+exports.findPrefix = function(xmlnsMapping, nsURI) {
+  for (var n in xmlnsMapping) {
+    if (n === TNS_PREFIX) continue;
+    if (xmlnsMapping[n] === nsURI) {
+      return n;
+    }
+  }
+};
+ 
+exports.extend = function extend(base, obj) {
+  if (base !== null && typeof base === "object" &&
+    obj !== null && typeof obj === "object") {
+    Object.keys(obj).forEach(function(key) {
+      if (!base.hasOwnProperty(key))
+        base[key] = obj[key];
+    });
+  }
+  return base;
+};
+ 
+exports.toXMLDate = function(d) {
+  function pad(n) {
+    return n < 10 ? '0' + n : n;
+  }
+ 
+  return d.getUTCFullYear() + '-'
+    + pad(d.getUTCMonth() + 1) + '-'
+    + pad(d.getUTCDate()) + 'T'
+    + pad(d.getUTCHours()) + ':'
+    + pad(d.getUTCMinutes()) + ':'
+    + pad(d.getUTCSeconds()) + 'Z';
+};
+ 
+exports.createPromiseCallback = function createPromiseCallback() {
+  var cb;
+  var promise = new Promise(function(resolve, reject) {
+    cb = function(err, result, envelope, soapHeader) {
+      Iif (err) {
+        reject(err);
+      } else {
+        resolve({result, envelope, soapHeader});
+      }
+    }
+  });
+  cb.promise = promise;
+  return cb;
+}
+ 
+ 
+
+
+ + + + + + + + diff --git a/node_modules/strong-soap/docs.json b/node_modules/strong-soap/docs.json new file mode 100644 index 00000000..d1693252 --- /dev/null +++ b/node_modules/strong-soap/docs.json @@ -0,0 +1,5 @@ +{ + "content": [ + "README.md" + ] +} diff --git a/node_modules/strong-soap/example/json2xml.js b/node_modules/strong-soap/example/json2xml.js new file mode 100644 index 00000000..d31c1f58 --- /dev/null +++ b/node_modules/strong-soap/example/json2xml.js @@ -0,0 +1,65 @@ +// Copyright IBM Corp. 2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +var soap = require('..').soap; +var XMLHandler = soap.XMLHandler; + +var xmlHandler = new XMLHandler(); +var util = require('util'); + +var json = { + Envelope: { + Header: undefined, + Body: { + BookStore: { + Detail: {StoreDetail: {Name: 'Modern Book Store', Address: '1001 Lane'}}, + Genre: [{ + '$attributes': {Id: 'id1'}, + Aisle: '1', + Name: {Fiction: '11'} + }, + { + '$attributes': {Id: 'id2'}, + Aisle: '2', + Name: {NonFiction: '22'} + }] + } + } + } +}; + +var node = xmlHandler.jsonToXml(null, null, + XMLHandler.createSOAPEnvelopeDescriptor('soap'), json); +var xml = node.end({pretty: true}); +console.log(xml); + +var xmlString = ` + + + + + + + Modern Book Store + 1001 Lane + + + + 1 + + 11 + + + + 2 + + 22 + + + + +`; + + diff --git a/node_modules/strong-soap/example/ntlm.js b/node_modules/strong-soap/example/ntlm.js new file mode 100644 index 00000000..f8fb4de1 --- /dev/null +++ b/node_modules/strong-soap/example/ntlm.js @@ -0,0 +1,57 @@ +// Copyright IBM Corp. 2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +"use strict"; + +var fs = require('fs'); +var assert = require('assert'); +var request = require('request'); +var http = require('http'); +var lastReqAddress; +var soap = require('..').soap; +var XMLHandler = soap.XMLHandler; +var xmlHandler = new XMLHandler(); +var util = require('util'); +var NTLMSecurity = require('..').NTLMSecurity; + +//example to show how to authenticate + +//wsdl of the NTLM authenticated Web Service this client is going to invoke. +//var url = 'http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL'; +var url = './wsdls/weather.wsdl'; +//JSON request +var requestArgs = { + //Fill in based on your wsdl + ZIP: '94306' +}; + +//FILL_IN +var username = "fill_in"; +var password = "fill_in"; +var domain = "fill_in"; +var workstation = "fill_in"; +//change it to 'false' or don't set this param, if you don't want WSDL 'GET' from remote NTLM webservice doesn't require NTLM authentication +var wsdlAuthRequired = true; +var ntlmSecurity = new NTLMSecurity(username, password, domain, workstation, wsdlAuthRequired); +var clientOptions = {}; +clientOptions.NTLMSecurity = ntlmSecurity; + + +soap.createClient(url, clientOptions, function(err, client) { + var service = 'service_name'; + var port = 'port_name'; + var operation = 'operation_name'; + //navigate to the correct operation in the client using [service][port][operation] since GetCityWeatherByZIP operation is used + //by more than one port. + var method = client[service][port][operation]; + + //you can also call + method(requestArgs, function(err, result, envelope, soapHeader) { + console.log('Response envelope:'); + //response envelope + console.log(envelope); + + }, null, null); +}); diff --git a/node_modules/strong-soap/example/stockquote.js b/node_modules/strong-soap/example/stockquote.js new file mode 100644 index 00000000..de851045 --- /dev/null +++ b/node_modules/strong-soap/example/stockquote.js @@ -0,0 +1,25 @@ +// Copyright IBM Corp. 2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +"use strict"; + +var soap = require('..').soap; +// wsdl of the web service this client is going to invoke. For local wsdl you can use, url = './wsdls/stockquote.wsdl' +var url = 'http://www.webservicex.net/stockquote.asmx?WSDL'; + +var requestArgs = { + symbol: 'IBM' +}; + +var options = {}; +soap.createClient(url, options, function(err, client) { + var method = client['StockQuote']['StockQuoteSoap']['GetQuote']; + method(requestArgs, function(err, result, envelope, soapHeader) { + //response envelope + console.log('Response Envelope: \n' + envelope); + //'result' is the response body + console.log('Result: \n' + JSON.stringify(result)); + }); +}); diff --git a/node_modules/strong-soap/example/weather.js b/node_modules/strong-soap/example/weather.js new file mode 100644 index 00000000..914c1f32 --- /dev/null +++ b/node_modules/strong-soap/example/weather.js @@ -0,0 +1,76 @@ +// Copyright IBM Corp. 2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +"use strict"; + +var fs = require('fs'), + assert = require('assert'), + request = require('request'), + http = require('http'), + lastReqAddress; +var soap = require('..').soap; +var XMLHandler = soap.XMLHandler; +var xmlHandler = new XMLHandler(); +var util = require('util'); + +//wsdl of the Web Service this client is going to invoke. This can point to local wsdl as well. +var url = 'http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL'; +var requestArgs = { + ZIP: '94306' +}; +var clientOptions = {}; + + +soap.createClient(url, clientOptions, function(err, client) { + //custom request header + var customRequestHeader = {timeout: 5000}; + var options = {}; + //navigate to the correct operation in the client using [service][port][operation] since GetCityWeatherByZIP operation is used + //by more than one port. + var method = client['Weather']['WeatherSoap']['GetCityWeatherByZIP']; + //this describes the entire WSDL in a tree form. + var description = client.describe(); + //inspect GetCityWeatherByZIP operation + var operation = description.Weather.WeatherSoap.GetCityWeatherByZIP; + console.log('Invoking operation: ' + operation.name); + + //you can also call + method(requestArgs, function(err, result, envelope, soapHeader) { + console.log('Response envelope:'); + //response envelope + console.log(envelope); + + var response; + if (!err) { + console.log('Result:'); + //result in SOAP envelope body which is the wrapper element. In this case, result object corresponds to GetCityForecastByZIPResponse + console.log(JSON.stringify(result)); + response = result; + } else { + response = err.root; + } + + var node = xmlHandler.jsonToXml(null, null, + XMLHandler.createSOAPEnvelopeDescriptor('soap'), response); + + var xml = node.end({pretty: true}); + console.log('jsonToXml:'); + console.log(xml); + + var root; + try { + root = xmlHandler.xmlToJson(null, xml, null); + } catch (error) { + //do nothing + } + + var root = XMLHandler.parseXml(null, xml); + var result = root.end({pretty: true}); + console.log('parseXml:'); + console.log(result); + + + }, null, customRequestHeader); +}); diff --git a/node_modules/strong-soap/example/wsdls/stockquote.wsdl b/node_modules/strong-soap/example/wsdls/stockquote.wsdl new file mode 100644 index 00000000..5c74ad63 --- /dev/null +++ b/node_modules/strong-soap/example/wsdls/stockquote.wsdl @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Get Stock quote for a company Symbol + + + + + + + Get Stock quote for a company Symbol + + + + + + + Get Stock quote for a company Symbol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/node_modules/strong-soap/example/wsdls/weather.wsdl b/node_modules/strong-soap/example/wsdls/weather.wsdl new file mode 100644 index 00000000..8ff97bb4 --- /dev/null +++ b/node_modules/strong-soap/example/wsdls/weather.wsdl @@ -0,0 +1,447 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gets Information for each WeatherID + + + + + + + Allows you to get your City Forecast Over the Next 7 Days, which + is updated hourly. U.S. Only + + + + + + + Allows you to get your City's Weather, which is updated hourly. + U.S. Only + + + + + + + + + Gets Information for each WeatherID + + + + + + + Allows you to get your City Forecast Over the Next 7 Days, which + is updated hourly. U.S. Only + + + + + + + Allows you to get your City's Weather, which is updated hourly. + U.S. Only + + + + + + + + + Gets Information for each WeatherID + + + + + + + Allows you to get your City Forecast Over the Next 7 Days, which + is updated hourly. U.S. Only + + + + + + + Allows you to get your City's Weather, which is updated hourly. + U.S. Only + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/node_modules/strong-soap/example/xml.js b/node_modules/strong-soap/example/xml.js new file mode 100644 index 00000000..cbcf806f --- /dev/null +++ b/node_modules/strong-soap/example/xml.js @@ -0,0 +1,53 @@ +// Copyright IBM Corp. 2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +var soap = require('..').soap; +var XMLHandler = soap.XMLHandler; + +var xmlString = ` + + + + + + + Modern Book Store + 1001 Lane + + + + 1 + + 11 + + + + 2 + + 22 + + + + +`; + +var root = XMLHandler.parseXml(null, xmlString); +var result = root.end({pretty: true}); +console.log(result); + +/* +var stream = require('stream'); +var xmlStream = new stream.Readable(); + +xmlHandler.parseXml(null, xmlStream, function(err, root) { + var result = root.end({pretty: true}); + console.log('Stream', result); +}); + +xmlStream.push(xmlString); // the string you want +xmlStream.push(null); +*/ + + diff --git a/node_modules/strong-soap/example/xml2json.js b/node_modules/strong-soap/example/xml2json.js new file mode 100644 index 00000000..cf308cb3 --- /dev/null +++ b/node_modules/strong-soap/example/xml2json.js @@ -0,0 +1,56 @@ +// Copyright IBM Corp. 2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +var soap = require('..').soap; +var XMLHandler = soap.XMLHandler; + +var xmlHandler = new XMLHandler(); +var util = require('util'); + +var xmlString = ` + + + + + + + Modern Book Store + 1001 Lane + + + + 1 + + 11 + + + + 2 + + 22 + + + + +`; + +var xmlString1 = '' +var root = xmlHandler.xmlToJson(null, xmlString, null); +console.log('%s', util.inspect(root, {depth: null})); + +/* +var stream = require('stream'); +var xmlStream = new stream.Readable(); + +xmlHandler.parseXml(null, xmlStream, function(err, root) { + var result = root.end({pretty: true}); + console.log('Stream', result); +}); + +xmlStream.push(xmlString); // the string you want +xmlStream.push(null); +*/ + + diff --git a/node_modules/strong-soap/example/xsds.js b/node_modules/strong-soap/example/xsds.js new file mode 100644 index 00000000..191aec3e --- /dev/null +++ b/node_modules/strong-soap/example/xsds.js @@ -0,0 +1,21 @@ +// Copyright IBM Corp. 2016,2018. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +var soap = require('..').soap; +var WSDL = soap.WSDL; +var path = require('path'); + + +//user can pass in WSDL options +var options = {}; + +WSDL.open(path.resolve(__dirname, 'wsdls/weather.wsdl'), options, + //User can traverse the WSDL tree and get to bindings - > operations, services, portTypes, messages, parts and XSD elements/Attributes + function(err, wsdl) { + var getCityForecastOp = wsdl.definitions.bindings.WeatherSoap.operations.GetCityForecastByZIP; + console.log(getCityForecastOp.$name); + var service = wsdl.definitions.services['Weather']; + console.log(service.$name); + }); diff --git a/node_modules/strong-soap/index.js b/node_modules/strong-soap/index.js new file mode 100644 index 00000000..701ff009 --- /dev/null +++ b/node_modules/strong-soap/index.js @@ -0,0 +1,28 @@ +// Copyright IBM Corp. 2011,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var base = './lib/'; +var nodeVersion = process.versions.node; +var major = Number(nodeVersion.split('.')[0]); +if (major >= 4) { + base = './src/'; +} + +var securityModules = require(base + 'security/index'); + +module.exports = { + 'soap': require(base + 'soap'), + 'http': require(base + 'http'), + 'QName': require(base + 'parser/qname'), + 'WSDL': require(base + 'parser/wsdl'), +}; + +for (var i in securityModules) { + module.exports[i] = securityModules[i]; +} + + diff --git a/node_modules/strong-soap/intl/cs/messages.json b/node_modules/strong-soap/intl/cs/messages.json new file mode 100644 index 00000000..f511c307 --- /dev/null +++ b/node_modules/strong-soap/intl/cs/messages.json @@ -0,0 +1,23 @@ +{ + "1b12432ead1b2b9902c4b9801aa0317b": "Zadaný soubor {{pfx}} by měl být {{buffer}} nebo umístění souboru", + "1f2c65133b5bb463e7d1fceda5b31156": "Klíčový prvek {0} {1} MUSÍ obsahovat jeden a pouze jeden prvek selektoru", + "28c828192eb440b64b8efd7f08cc37b3": "Atribut {{itemType}} není povolen, pokud obsah obsahuje prvek {{simpleType}}", + "2d6dbd73e7a3abc468b95ca530caca9b": "Cílový obor názvů \"{0}\" je již používán jiným schématem", + "37e4bf66d90c313e7adb3317345be046": "Styl {{WSDL}} není podporován: {0}", + "39e07c5a6797c4923d6a924999b62f8c": "Neplatný název qname: {0}", + "46ad858fdf2e460aa3b626d6455362f2": "Klíčový prvek {0} {1} MUSÍ obsahovat jeden nebo více prvků pole", + "49569f279dd1e347fd90d448fdafbb93": "Neočekávaný kořenový prvek pro {{WSDL}} nebo zahrnutí", + "552f3502256707b8c5b12ddb64e3f74e": "Modul {{ursa}} musí být nainstalován pro použití {{WSSecurityCert}}", + "61b096fd390a169fc86698a3fe30387f": "Byl nalezen neočekávaný prvek ({0}) uvnitř {1}", + "6623e372e766ea11d932836035404a2b": "{{key}} by měl být {{buffer}} nebo {{string}}!", + "738cd872b93488bfd87f26224d09e26d": "Nelze analyzovat odezvu", + "7f7cb47259df769f2d3b3f7133f1a1ea": "{{cert}} by měl být {{buffer}} nebo {{string}}!", + "97ed6b53b9b594fb90c6bfb2e0ba0286": "Seznam musí mít typ položky", + "bcb4356ee2e7a196b9671acf3989741d": "Neplatné jméno uživatele nebo heslo", + "d40b6f905bf039c4d627ecafb7fdcac5": "Žádné záhlaví zabezpečení", + "d7bda8e2c3faafdf0988f8cb4719a01d": "Seznam může obsahovat pouze jeden prvek {{simpleType}}", + "da96ad47da6be6a613f921b260a33ce0": "Narušení {{WS-I}}: Část {{http://ws-i.org/profiles/basicprofile-1.2-2010-11-09.html#BP2113}} {0}", + "e158dd1d250f1cc3df497728da556be1": "Nezdařilo se svázat s {{WSDL}}", + "fab749587c48e724a661d77a44084214": "Neplatná {{WSDL URL}}: {0}\n\n\r Kód: {1}\n\n\r Tělo odezvy: {2}" +} + diff --git a/node_modules/strong-soap/intl/de/messages.json b/node_modules/strong-soap/intl/de/messages.json new file mode 100644 index 00000000..01c5daee --- /dev/null +++ b/node_modules/strong-soap/intl/de/messages.json @@ -0,0 +1,29 @@ +{ + "1b12432ead1b2b9902c4b9801aa0317b": "die angegebene Datei {{pfx}} sollte ein {{buffer}} oder eine Dateiposition sein", + "1f2c65133b5bb463e7d1fceda5b31156": "Das Schlüsselelement {0} {1} MUSS ein (und nur ein) Auswahlelement enthalten", + "28c828192eb440b64b8efd7f08cc37b3": "Attribut {{itemType}} ist nicht zulässig, wenn der Inhalt ein {{simpleType}}-Element enthält", + "2d6dbd73e7a3abc468b95ca530caca9b": "Zielnamensbereich \"{0}\" wird bereits von einem anderen Schema verwendet", + "37e4bf66d90c313e7adb3317345be046": "{{WSDL}}-Stil wird nicht untersützt: {0}", + "39e07c5a6797c4923d6a924999b62f8c": "Ungültiger qname: {0}", + "3ab7c6dbb4e0c38f80e360957b0c8c82": "Schema {0} nicht gefunden: {1} {2}", + "46ad858fdf2e460aa3b626d6455362f2": "Das Schlüsselelement {0} {1} MUSS mindestens ein Feldelement enthalten", + "49569f279dd1e347fd90d448fdafbb93": "Unerwartetes Stammelement von {{WSDL}} oder 'include'", + "552f3502256707b8c5b12ddb64e3f74e": "Modul {{ursa}} muss für die Verwendung von {{WSSecurityCert}} installiert sein", + "5dbe5d24686aa4e6d0cac19636b26cad": "kein Client-Stub für {0}", + "61b096fd390a169fc86698a3fe30387f": "Unerwartetes Element ({0}) in {1} gefunden", + "6623e372e766ea11d932836035404a2b": "{{key}} sollte ein {{buffer}} oder eine {{string}} sein!", + "738cd872b93488bfd87f26224d09e26d": "Antwort kann nicht geparst werden", + "7f7cb47259df769f2d3b3f7133f1a1ea": "{{cert}} sollte ein {{buffer}} oder eine {{string}} sein!", + "902622149b2525f3d802f7c9ace5d312": " {{operationName}}: {0} {{outputName}}: {1}", + "97ed6b53b9b594fb90c6bfb2e0ba0286": "Die Liste muss einen Elementtyp aufweisen", + "9d1255b943657eca7c1a17eac8da02d0": "Schema nicht gefunden: {0} ({1})", + "b85a3a174c41fd29d1459ef484c985e3": "Element {0} ist nicht zulässig in {1}", + "bcb4356ee2e7a196b9671acf3989741d": "Ungültiger Benutzername oder ungültiges Kennwort", + "d40b6f905bf039c4d627ecafb7fdcac5": "Kein Sicherheitsheader", + "d7bda8e2c3faafdf0988f8cb4719a01d": "Die Liste kann nur ein {{simpleType}}-Element enthalten", + "da96ad47da6be6a613f921b260a33ce0": "{{WS-I}}-Verletzung: {{http://ws-i.org/profiles/basicprofile-1.2-2010-11-09.html#BP2113}} Teil {0}", + "e158dd1d250f1cc3df497728da556be1": "Fehler beim Binden an {{WSDL}}", + "e5c6b66d41ec0037a6322c5b0dd8da0b": "Fehler erzwungen bei {{createClient}}", + "fab749587c48e724a661d77a44084214": "Ungültige {{WSDL URL}}: {0}\n\n\r Code: {1}\n\n\r Antworthauptteil: {2}" +} + diff --git a/node_modules/strong-soap/intl/en/messages.json b/node_modules/strong-soap/intl/en/messages.json new file mode 100644 index 00000000..12b502ce --- /dev/null +++ b/node_modules/strong-soap/intl/en/messages.json @@ -0,0 +1,22 @@ +{ + "1b12432ead1b2b9902c4b9801aa0317b": "supplied {{pfx}} file should be a {{buffer}} or a file location", + "1f2c65133b5bb463e7d1fceda5b31156": "The key element {0} {1} MUST contain one and only one selector element", + "28c828192eb440b64b8efd7f08cc37b3": "Attribute {{itemType}} is not allowed if the content contains a {{simpleType}} element", + "37e4bf66d90c313e7adb3317345be046": "{{WSDL}} style not supported: {0}", + "39e07c5a6797c4923d6a924999b62f8c": "Invalid qname: {0}", + "46ad858fdf2e460aa3b626d6455362f2": "The key element {0} {1} MUST contain one or more field elements", + "49569f279dd1e347fd90d448fdafbb93": "Unexpected root element of {{WSDL}} or include", + "552f3502256707b8c5b12ddb64e3f74e": "Module {{ursa}} must be installed to use {{WSSecurityCert}}", + "61b096fd390a169fc86698a3fe30387f": "Found unexpected element ({0}) inside {1}", + "6623e372e766ea11d932836035404a2b": "{{key}} should be a {{buffer}} or a {{string}}!", + "738cd872b93488bfd87f26224d09e26d": "Cannot parse response", + "7f7cb47259df769f2d3b3f7133f1a1ea": "{{cert}} should be a {{buffer}} or a {{string}}!", + "97ed6b53b9b594fb90c6bfb2e0ba0286": "List must have an item type", + "ad16b1c54d1a687cb4efc849e918816c": "The field {0} cannot have value {1} due to the violations: {2}", + "bcb4356ee2e7a196b9671acf3989741d": "Invalid username or password", + "d40b6f905bf039c4d627ecafb7fdcac5": "No security header", + "d7bda8e2c3faafdf0988f8cb4719a01d": "List can only contain one {{simpleType}} element", + "da96ad47da6be6a613f921b260a33ce0": "{{WS-I}} violation: {{http://ws-i.org/profiles/basicprofile-1.2-2010-11-09.html#BP2113}} part {0}", + "e158dd1d250f1cc3df497728da556be1": "Failed to bind to {{WSDL}}", + "fab749587c48e724a661d77a44084214": "Invalid {{WSDL URL}}: {0}\n\n\r Code: {1}\n\n\r Response Body: {2}" +} diff --git a/node_modules/strong-soap/intl/es/messages.json b/node_modules/strong-soap/intl/es/messages.json new file mode 100644 index 00000000..df2a2cf5 --- /dev/null +++ b/node_modules/strong-soap/intl/es/messages.json @@ -0,0 +1,29 @@ +{ + "1b12432ead1b2b9902c4b9801aa0317b": "el archivo {{pfx}} suministrado debe ser un {{buffer}} o una ubicación de archivo", + "1f2c65133b5bb463e7d1fceda5b31156": "El elemento key {0} {1} DEBE contener únicamente un elemento selector", + "28c828192eb440b64b8efd7f08cc37b3": "El atributo {{itemType}} no está permitido si el contenido contiene un elemento {{simpleType}}", + "2d6dbd73e7a3abc468b95ca530caca9b": "El espacio de nombres de destino \"{0}\" ya se utiliza en otro esquema", + "37e4bf66d90c313e7adb3317345be046": "Estilo {{WSDL}} no soportado: {0}", + "39e07c5a6797c4923d6a924999b62f8c": "qname no válido: {0}", + "3ab7c6dbb4e0c38f80e360957b0c8c82": "Esquema {0} no encontrado: {1} {2}", + "46ad858fdf2e460aa3b626d6455362f2": "El elemento key {0} {1} contiene uno o más elementos field", + "49569f279dd1e347fd90d448fdafbb93": "Elemento raíz inesperado de {{WSDL}} o inclusión", + "552f3502256707b8c5b12ddb64e3f74e": "Debe estar instalado el módulo {{ursa}} para poder utilizar {{WSSecurityCert}}", + "5dbe5d24686aa4e6d0cac19636b26cad": "no hay ningún cliente en índice para {0}", + "61b096fd390a169fc86698a3fe30387f": "Se ha encontrado un elemento inesperado ({0}) dentro de {1}", + "6623e372e766ea11d932836035404a2b": "{{key}} debe ser un {{buffer}} o un {{string}}.", + "738cd872b93488bfd87f26224d09e26d": "No se puede analizar la respuesta", + "7f7cb47259df769f2d3b3f7133f1a1ea": "{{cert}} debe ser un {{buffer}} o un {{string}}.", + "902622149b2525f3d802f7c9ace5d312": " {{operationName}}: {0} {{outputName}}: {1}", + "97ed6b53b9b594fb90c6bfb2e0ba0286": "La lista debe tener un tipo de elemento", + "9d1255b943657eca7c1a17eac8da02d0": "Esquema no encontrado: {0} ({1})", + "b85a3a174c41fd29d1459ef484c985e3": "El elemento {0} no está permitido dentro de {1}", + "bcb4356ee2e7a196b9671acf3989741d": "Nombre de usuario o contraseña no válidos", + "d40b6f905bf039c4d627ecafb7fdcac5": "No hay ninguna cabecera de seguridad", + "d7bda8e2c3faafdf0988f8cb4719a01d": "La lista sólo puede contener un elemento {{simpleType}}", + "da96ad47da6be6a613f921b260a33ce0": "Violación de {{WS-I}}: {{http://ws-i.org/profiles/basicprofile-1.2-2010-11-09.html#BP2113}} parte {0}", + "e158dd1d250f1cc3df497728da556be1": "No se ha podido enlazar a {{WSDL}}", + "e5c6b66d41ec0037a6322c5b0dd8da0b": "error forzado en {{createClient}}", + "fab749587c48e724a661d77a44084214": "{{WSDL URL}} no válido: {0}\n\n\r Código: {1}\n\n\r Cuerpo de respuesta: {2}" +} + diff --git a/node_modules/strong-soap/intl/fr/messages.json b/node_modules/strong-soap/intl/fr/messages.json new file mode 100644 index 00000000..5db77692 --- /dev/null +++ b/node_modules/strong-soap/intl/fr/messages.json @@ -0,0 +1,29 @@ +{ + "1b12432ead1b2b9902c4b9801aa0317b": "le fichier {{pfx}} fourni doit correspondre à un {{buffer}} ou un emplacement de fichier", + "1f2c65133b5bb463e7d1fceda5b31156": "L'élément clé {0} {1} DOIT contenir un et un seul élément de sélecteur", + "28c828192eb440b64b8efd7f08cc37b3": "L'attribut {{itemType}} n'est pas autorisé si le contenu contient un élément {{simpleType}}", + "2d6dbd73e7a3abc468b95ca530caca9b": "L'espace de nom cible \"{0}\" est déjà utilisé par un autre schéma", + "37e4bf66d90c313e7adb3317345be046": "Style {{WSDL}} non pris en charge : {0}", + "39e07c5a6797c4923d6a924999b62f8c": "Nom qualifié non valide : {0}", + "3ab7c6dbb4e0c38f80e360957b0c8c82": "Schéma {0} introuvable : {1} {2}", + "46ad858fdf2e460aa3b626d6455362f2": "L'élément clé {0} {1} DOIT contenir un ou plusieurs éléments de zone", + "49569f279dd1e347fd90d448fdafbb93": "Elément racine inattendu de {{WSDL}} ou inclut", + "552f3502256707b8c5b12ddb64e3f74e": "Le module {{ursa}} doit être installé pour utiliser {{WSSecurityCert}}", + "5dbe5d24686aa4e6d0cac19636b26cad": "aucun client remplacé pour {0}", + "61b096fd390a169fc86698a3fe30387f": "Elément inattendu ({0}) détecté dans {1}", + "6623e372e766ea11d932836035404a2b": "{{key}} doit être un {{buffer}} ou un {{string}}!", + "738cd872b93488bfd87f26224d09e26d": "Impossible d'analyser la réponse", + "7f7cb47259df769f2d3b3f7133f1a1ea": "{{cert}} doit être un {{buffer}} ou un {{string}}!", + "902622149b2525f3d802f7c9ace5d312": " {{operationName}} : {0} {{outputName}} : {1}", + "97ed6b53b9b594fb90c6bfb2e0ba0286": "La liste doit posséder un type d'élément", + "9d1255b943657eca7c1a17eac8da02d0": "Schéma introuvable : {0} ({1})", + "b85a3a174c41fd29d1459ef484c985e3": "L'élément {0} n'est pas autorisé dans {1}", + "bcb4356ee2e7a196b9671acf3989741d": "Nom d'utilisateur ou mot de passe non valide", + "d40b6f905bf039c4d627ecafb7fdcac5": "Aucun en-tête de sécurité", + "d7bda8e2c3faafdf0988f8cb4719a01d": "La liste ne peut contenir qu'un élément {{simpleType}}", + "da96ad47da6be6a613f921b260a33ce0": "{{WS-I}} violation : composant {0} de {{http://ws-i.org/profiles/basicprofile-1.2-2010-11-09.html#BP2113}}", + "e158dd1d250f1cc3df497728da556be1": "Echec de la liaison à {{WSDL}}", + "e5c6b66d41ec0037a6322c5b0dd8da0b": "erreur forcée sur {{createClient}}", + "fab749587c48e724a661d77a44084214": "{{WSDL URL}} non valide : {0}\n\n\r Code : {1}\n\n\r Corps de la réponse : {2}" +} + diff --git a/node_modules/strong-soap/intl/it/messages.json b/node_modules/strong-soap/intl/it/messages.json new file mode 100644 index 00000000..6297c757 --- /dev/null +++ b/node_modules/strong-soap/intl/it/messages.json @@ -0,0 +1,29 @@ +{ + "1b12432ead1b2b9902c4b9801aa0317b": "Il file {{pfx}} fornito dovrebbe essere un {{buffer}} o un'ubicazione file", + "1f2c65133b5bb463e7d1fceda5b31156": "L'elemento chiave {0} {1} DEVE contenere uno e solo uno elemento selettore", + "28c828192eb440b64b8efd7f08cc37b3": "L'attributo {{itemType}} non è consentito se il contenuto contiene un elemento {{simpleType}}", + "2d6dbd73e7a3abc468b95ca530caca9b": "Lo spazio dei nomi di destinazione \"{0}\" già è utilizzato da un altro schema", + "37e4bf66d90c313e7adb3317345be046": "Stile {{WSDL}} non supportato: {0}", + "39e07c5a6797c4923d6a924999b62f8c": "Qname non valido: {0}", + "3ab7c6dbb4e0c38f80e360957b0c8c82": "Schema {0} non trovato: {1} {2}", + "46ad858fdf2e460aa3b626d6455362f2": "L'elemento chiave {0} {1} DEVE contenere uno o più elementi campo", + "49569f279dd1e347fd90d448fdafbb93": "Elemento root di {{WSDL}} non previsto o include", + "552f3502256707b8c5b12ddb64e3f74e": "Il modulo {{ursa}} deve essere installato per utilizzare {{WSSecurityCert}}", + "5dbe5d24686aa4e6d0cac19636b26cad": "nessun client con stub per {0}", + "61b096fd390a169fc86698a3fe30387f": "Trovato un elemento imprevisto ({0}) all'interno di {1}", + "6623e372e766ea11d932836035404a2b": "{{key}} dovrebbe essere un {{buffer}} o un {{string}}!", + "738cd872b93488bfd87f26224d09e26d": "Impossibile analizzare la risposta", + "7f7cb47259df769f2d3b3f7133f1a1ea": "{{cert}} dovrebbe essere un {{buffer}} o un {{string}}!", + "902622149b2525f3d802f7c9ace5d312": " {{operationName}}: {0} {{outputName}}: {1}", + "97ed6b53b9b594fb90c6bfb2e0ba0286": "L'elenco deve contenere un tipo di elemento", + "9d1255b943657eca7c1a17eac8da02d0": "Schema non trovato: {0} ({1})", + "b85a3a174c41fd29d1459ef484c985e3": "L'elemento {0} non è consentito all'interno di {1}", + "bcb4356ee2e7a196b9671acf3989741d": "Nome utente o password non validi", + "d40b6f905bf039c4d627ecafb7fdcac5": "Nessuna intestazione di sicurezza", + "d7bda8e2c3faafdf0988f8cb4719a01d": "L'elenco può contenere solo un elemento {{simpleType}}", + "da96ad47da6be6a613f921b260a33ce0": "Violazione {{WS-I}}: {{http://ws-i.org/profiles/basicprofile-1.2-2010-11-09.html#BP2113}} parte {0}", + "e158dd1d250f1cc3df497728da556be1": "Impossibile collegare a {{WSDL}}", + "e5c6b66d41ec0037a6322c5b0dd8da0b": "errore forzato su {{createClient}}", + "fab749587c48e724a661d77a44084214": "{{WSDL URL}} non valido: {0}\n\n\r Codice: {1}\n\n\r Corpo risposta: {2}" +} + diff --git a/node_modules/strong-soap/intl/ja/messages.json b/node_modules/strong-soap/intl/ja/messages.json new file mode 100644 index 00000000..0cdfcd47 --- /dev/null +++ b/node_modules/strong-soap/intl/ja/messages.json @@ -0,0 +1,29 @@ +{ + "1b12432ead1b2b9902c4b9801aa0317b": "指定する {{pfx}} ファイルは、{{buffer}} またはファイル・ロケーションにしてください", + "1f2c65133b5bb463e7d1fceda5b31156": "キー・エレメント {0} {1} に含めるセレクター・エレメントは、1 つのみにしてください", + "28c828192eb440b64b8efd7f08cc37b3": "コンテンツに {{simpleType}} エレメントが含まれる場合、属性 {{itemType}} は許可されません", + "2d6dbd73e7a3abc468b95ca530caca9b": "ターゲット名前空間 \"{0}\" は、別のスキーマで既に使用されています", + "37e4bf66d90c313e7adb3317345be046": "{{WSDL}} スタイルは、サポートされていません: {0}", + "39e07c5a6797c4923d6a924999b62f8c": "qname が無効です: {0}", + "3ab7c6dbb4e0c38f80e360957b0c8c82": "スキーマ {0} が見つかりません: {1} {2}", + "46ad858fdf2e460aa3b626d6455362f2": "キー・エレメント {0} {1} には、1 つ以上のフィールド・エレメントを含めてください", + "49569f279dd1e347fd90d448fdafbb93": "予期しない {{WSDL}} のルート・エレメントまたはインクルードです", + "552f3502256707b8c5b12ddb64e3f74e": "{{WSSecurityCert}} を使用するには、モジュール {{ursa}} をインストールしてください", + "5dbe5d24686aa4e6d0cac19636b26cad": "{0} 用にスタブされたクライアントがありません", + "61b096fd390a169fc86698a3fe30387f": "{1} 内に予期しないエレメント ({0}) が見つかりました", + "6623e372e766ea11d932836035404a2b": "{{key}} は、{{buffer}} または {{string}} にしてください。", + "738cd872b93488bfd87f26224d09e26d": "応答を解析できません", + "7f7cb47259df769f2d3b3f7133f1a1ea": "{{cert}} は、{{buffer}} または {{string}} にしてください。", + "902622149b2525f3d802f7c9ace5d312": " {{operationName}}: {0} {{outputName}}: {1}", + "97ed6b53b9b594fb90c6bfb2e0ba0286": "リストには項目タイプが必要です", + "9d1255b943657eca7c1a17eac8da02d0": "スキーマが見つかりません: {0} ({1})", + "b85a3a174c41fd29d1459ef484c985e3": "エレメント {0} は、{1} 内では許可されません", + "bcb4356ee2e7a196b9671acf3989741d": "ユーザー名またはパスワードが無効です", + "d40b6f905bf039c4d627ecafb7fdcac5": "セキュリティー・ヘッダーがありません", + "d7bda8e2c3faafdf0988f8cb4719a01d": "リストに含めることができる {{simpleType}} エレメントは 1 つのみです", + "da96ad47da6be6a613f921b260a33ce0": "{{WS-I}} 違反: {{http://ws-i.org/profiles/basicprofile-1.2-2010-11-09.html#BP2113}} パート {0}", + "e158dd1d250f1cc3df497728da556be1": "{{WSDL}} にバインドできませんでした", + "e5c6b66d41ec0037a6322c5b0dd8da0b": "{{createClient}} で強制エラーが発生しました", + "fab749587c48e724a661d77a44084214": "{{WSDL URL}} が無効です: {0}\n\n\r コード: {1}\n\n\r 応答の本文: {2}" +} + diff --git a/node_modules/strong-soap/intl/ko/messages.json b/node_modules/strong-soap/intl/ko/messages.json new file mode 100644 index 00000000..6268a9c9 --- /dev/null +++ b/node_modules/strong-soap/intl/ko/messages.json @@ -0,0 +1,29 @@ +{ + "1b12432ead1b2b9902c4b9801aa0317b": "제공된 {{pfx}} 파일은 {{buffer}} 또는 파일 위치여야 함", + "1f2c65133b5bb463e7d1fceda5b31156": "키 요소 {0} {1}에는 반드시 한 개의 선택기 요소만 포함해야 함", + "28c828192eb440b64b8efd7f08cc37b3": "컨텐츠에 {{simpleType}} 요소가 있으면 속성 {{itemType}}을(를) 사용할 수 없음", + "2d6dbd73e7a3abc468b95ca530caca9b": "대상 네임스페이스 \"{0}\"을(를) 이미 다른 스키마에서 사용 중임", + "37e4bf66d90c313e7adb3317345be046": "{{WSDL}} 스타일이 지원되지 않음: {0}", + "39e07c5a6797c4923d6a924999b62f8c": "올바르지 않은 qname: {0}", + "3ab7c6dbb4e0c38f80e360957b0c8c82": "{0} 스키마를 찾을 수 없음: {1} {2}", + "46ad858fdf2e460aa3b626d6455362f2": "키 요소 {0} {1}에는 반드시 한 개 이상의 필드 요소가 있어야 함", + "49569f279dd1e347fd90d448fdafbb93": "{{WSDL}}의 예기치 못한 루트 요소 또는 포함이 있음", + "552f3502256707b8c5b12ddb64e3f74e": "{{WSSecurityCert}}을(를) 사용하려면 {{ursa}} 모듈을 설치해야 함", + "5dbe5d24686aa4e6d0cac19636b26cad": "{0}의 클라이언트 스텁이 없음", + "61b096fd390a169fc86698a3fe30387f": "{1}에서 예기치 못한 요소({0})를 발견함", + "6623e372e766ea11d932836035404a2b": "{{key}}이(가) {{buffer}} 또는 {{string}}(이)어야 합니다!", + "738cd872b93488bfd87f26224d09e26d": "응답을 구문 분석할 수 없음", + "7f7cb47259df769f2d3b3f7133f1a1ea": "{{cert}}이(가) {{buffer}} 또는 {{string}}(이)어야 합니다!", + "902622149b2525f3d802f7c9ace5d312": " {{operationName}}: {0} {{outputName}}: {1}", + "97ed6b53b9b594fb90c6bfb2e0ba0286": "목록에 항목 유형이 있어야 함", + "9d1255b943657eca7c1a17eac8da02d0": "스키마를 찾을 수 없음: {0} ({1})", + "b85a3a174c41fd29d1459ef484c985e3": "{1} 내에서 {0} 요소가 허용되지 않음", + "bcb4356ee2e7a196b9671acf3989741d": "사용자 이름 또는 비밀번호가 올바르지 않음", + "d40b6f905bf039c4d627ecafb7fdcac5": "보안 헤더가 없음", + "d7bda8e2c3faafdf0988f8cb4719a01d": "목록에는 한 개의 {{simpleType}} 요소만 포함할 수 있음", + "da96ad47da6be6a613f921b260a33ce0": "{{WS-I}} 위반: {{http://ws-i.org/profiles/basicprofile-1.2-2010-11-09.html#BP2113}} 파트 {0}", + "e158dd1d250f1cc3df497728da556be1": "{{WSDL}}에 바인드할 수 없음", + "e5c6b66d41ec0037a6322c5b0dd8da0b": "{{createClient}}에 대한 오류 강제 실행", + "fab749587c48e724a661d77a44084214": "올바르지 않은 {{WSDL URL}}: {0}\n\n\r 코드: {1}\n\n\r 응답 본문: {2}" +} + diff --git a/node_modules/strong-soap/intl/nl/messages.json b/node_modules/strong-soap/intl/nl/messages.json new file mode 100644 index 00000000..2035dd70 --- /dev/null +++ b/node_modules/strong-soap/intl/nl/messages.json @@ -0,0 +1,29 @@ +{ + "1b12432ead1b2b9902c4b9801aa0317b": "aangeleverd {{pfx}}-bestand moet een {{buffer}} of een bestandslocatie zijn", + "1f2c65133b5bb463e7d1fceda5b31156": "Het sleutelelement {0} {1} MOET precies één selectorelement bevatten", + "28c828192eb440b64b8efd7f08cc37b3": "Kenmerk {{itemType}} is niet toegestaan als de content een element {{simpleType}} bevat", + "2d6dbd73e7a3abc468b95ca530caca9b": "Doelnaamruimte \"{0}\" is al in gebruik in een ander Schema", + "37e4bf66d90c313e7adb3317345be046": "{{WSDL}}-stijl wordt niet ondersteund: {0}", + "39e07c5a6797c4923d6a924999b62f8c": "Ongeldige qname: {0}", + "3ab7c6dbb4e0c38f80e360957b0c8c82": "Schema {0} is niet gevonden: {1} {2}", + "46ad858fdf2e460aa3b626d6455362f2": "Het sleutelelement {0} {1} MOET één of meer veldelementen bevatten", + "49569f279dd1e347fd90d448fdafbb93": "Onverwacht hoofd- (root-) element van {{WSDL}} of include", + "552f3502256707b8c5b12ddb64e3f74e": "Module {{ursa}} moet geïnstalleerd zijn om {{WSSecurityCert}} te kunnen gebruiken", + "5dbe5d24686aa4e6d0cac19636b26cad": "geen client gestubd voor {0}", + "61b096fd390a169fc86698a3fe30387f": "Onverwacht element ({0}) aangetroffen binnen {1}", + "6623e372e766ea11d932836035404a2b": "{{key}} moet een {{buffer}} of een {{string}} zijn!", + "738cd872b93488bfd87f26224d09e26d": "Respons kan niet worden ontleed", + "7f7cb47259df769f2d3b3f7133f1a1ea": "{{cert}} moet een {{buffer}} of een {{string}} zijn!", + "902622149b2525f3d802f7c9ace5d312": " {{operationName}}: {0} {{outputName}}: {1}", + "97ed6b53b9b594fb90c6bfb2e0ba0286": "Lijst moet een itemtype hebben", + "9d1255b943657eca7c1a17eac8da02d0": "Schema is niet gevonden: {0} ({1})", + "b85a3a174c41fd29d1459ef484c985e3": "Element {0} is niet toegestaan binnen {1}", + "bcb4356ee2e7a196b9671acf3989741d": "Gebruikersnaam of wachtwoord ongeldig", + "d40b6f905bf039c4d627ecafb7fdcac5": "Geen beveiligingsheader", + "d7bda8e2c3faafdf0988f8cb4719a01d": "Lijst kan slechts één {{simpleType}} element bevatten", + "da96ad47da6be6a613f921b260a33ce0": "Overtreding van {{WS-I}}: {{http://ws-i.org/profiles/basicprofile-1.2-2010-11-09.html#BP2113}} Deel {0}", + "e158dd1d250f1cc3df497728da556be1": "Uitvoeren van bind met {{WSDL}} is mislukt", + "e5c6b66d41ec0037a6322c5b0dd8da0b": "geforceerde fout op {{createClient}}", + "fab749587c48e724a661d77a44084214": "Ongeldige {{WSDL URL}}: {0}\n\n\r Code: {1}\n\n\r Tekst van respons: {2}" +} + diff --git a/node_modules/strong-soap/intl/pl/messages.json b/node_modules/strong-soap/intl/pl/messages.json new file mode 100644 index 00000000..575f418b --- /dev/null +++ b/node_modules/strong-soap/intl/pl/messages.json @@ -0,0 +1,23 @@ +{ + "1b12432ead1b2b9902c4b9801aa0317b": "podany plik {{pfx}} powinien być {{buffer}} lub lokalizacją pliku", + "1f2c65133b5bb463e7d1fceda5b31156": "Element klucza {0} {1} musi zawierać jeden i tylko jeden element selektora", + "28c828192eb440b64b8efd7f08cc37b3": "Atrybut {{itemType}} jest niedozwolony, jeśli treść zawiera element {{simpleType}}", + "2d6dbd73e7a3abc468b95ca530caca9b": "Docelowa przestrzeń nazw \"{0}\" jest już używana przez inny schemat", + "37e4bf66d90c313e7adb3317345be046": "Styl {{WSDL}} nie jest obsługiwany: {0}", + "39e07c5a6797c4923d6a924999b62f8c": "Niepoprawna nazwa qname: {0}", + "46ad858fdf2e460aa3b626d6455362f2": "Element klucza {0} {1} musi zawierać co najmniej jeden element pola", + "49569f279dd1e347fd90d448fdafbb93": "Nieoczekiwany element główny {{WSDL}} lub include", + "552f3502256707b8c5b12ddb64e3f74e": "Moduł {{ursa}} musi być zainstalowany, aby można było używać {{WSSecurityCert}}", + "61b096fd390a169fc86698a3fe30387f": "Znaleziono nieoczekiwany element ({0}) w {1}", + "6623e372e766ea11d932836035404a2b": "{{key}} powinien mieć wartość {{buffer}} lub {{string}}!", + "738cd872b93488bfd87f26224d09e26d": "Nie można przeanalizować odpowiedzi", + "7f7cb47259df769f2d3b3f7133f1a1ea": "{{cert}} powinien mieć wartość {{buffer}} lub {{string}}!", + "97ed6b53b9b594fb90c6bfb2e0ba0286": "Lista musi mieć typ elementu", + "bcb4356ee2e7a196b9671acf3989741d": "Niepoprawna nazwa użytkownika lub hasło", + "d40b6f905bf039c4d627ecafb7fdcac5": "Brak nagłówka zabezpieczeń", + "d7bda8e2c3faafdf0988f8cb4719a01d": "Lista może zawierać tylko jeden element {{simpleType}}", + "da96ad47da6be6a613f921b260a33ce0": "Naruszenie {{WS-I}}: {{http://ws-i.org/profiles/basicprofile-1.2-2010-11-09.html#BP2113}} część {0}", + "e158dd1d250f1cc3df497728da556be1": "Nie powiodło się powiązanie z {{WSDL}}", + "fab749587c48e724a661d77a44084214": "Niepoprawny {{WSDL URL}}: {0}\n\n\r Kod: {1}\n\n\r Treść odpowiedzi: {2}" +} + diff --git a/node_modules/strong-soap/intl/pt/messages.json b/node_modules/strong-soap/intl/pt/messages.json new file mode 100644 index 00000000..f3ed1622 --- /dev/null +++ b/node_modules/strong-soap/intl/pt/messages.json @@ -0,0 +1,29 @@ +{ + "1b12432ead1b2b9902c4b9801aa0317b": "Arquivo {{pfx}} fornecido deve ser um {{buffer}} ou local do arquivo", + "1f2c65133b5bb463e7d1fceda5b31156": "O elemento chave {0} {1} DEVE conter um, e apenas um, elemento seletor", + "28c828192eb440b64b8efd7f08cc37b3": "O atributo {{itemType}} não será permitido se o conteúdo tiver um elemento {{simpleType}}", + "2d6dbd73e7a3abc468b95ca530caca9b": "O namespace de destino \"{0}\" já está em uso por outro Esquema", + "37e4bf66d90c313e7adb3317345be046": "Estilo {{WSDL}} não suportado: {0}", + "39e07c5a6797c4923d6a924999b62f8c": "qname inválido: {0}", + "3ab7c6dbb4e0c38f80e360957b0c8c82": "Esquema {0} não localizado: {1} {2}", + "46ad858fdf2e460aa3b626d6455362f2": "O elemento chave {0} {1} DEVE conter um ou mais elementos de campo", + "49569f279dd1e347fd90d448fdafbb93": "Elemento raiz inesperado de {{WSDL}} ou inclusão", + "552f3502256707b8c5b12ddb64e3f74e": "O módulo {{ursa}} deve estar instalado para uso do {{WSSecurityCert}}", + "5dbe5d24686aa4e6d0cac19636b26cad": "Nenhum stub de cliente para {0}", + "61b096fd390a169fc86698a3fe30387f": "Elemento inesperado ({0}) localizado dentro de {1}", + "6623e372e766ea11d932836035404a2b": "{{key}} deve ser um {{buffer}} ou uma {{string}}!", + "738cd872b93488bfd87f26224d09e26d": "Não é possível analisar a resposta", + "7f7cb47259df769f2d3b3f7133f1a1ea": "{{cert}} deve ser um {{buffer}} ou uma {{string}}!", + "902622149b2525f3d802f7c9ace5d312": " {{operationName}}: {0} {{outputName}}: {1}", + "97ed6b53b9b594fb90c6bfb2e0ba0286": "A lista deve ter um tipo de item", + "9d1255b943657eca7c1a17eac8da02d0": "Esquema não localizado: {0} ({1})", + "b85a3a174c41fd29d1459ef484c985e3": "Elemento {0} não permitido dentro de {1}", + "bcb4356ee2e7a196b9671acf3989741d": "Nome do Usuário ou Senha Inválida", + "d40b6f905bf039c4d627ecafb7fdcac5": "Nenhum cabeçalho de segurança", + "d7bda8e2c3faafdf0988f8cb4719a01d": "A lista só pode conter um elemento {{simpleType}}", + "da96ad47da6be6a613f921b260a33ce0": "Violação de {{WS-I}}: {{http://ws-i.org/profiles/basicprofile-1.2-2010-11-09.html#BP2113}} parte {0}", + "e158dd1d250f1cc3df497728da556be1": "Falha ao ligar ao {{WSDL}}", + "e5c6b66d41ec0037a6322c5b0dd8da0b": "Erro forçado em {{createClient}}", + "fab749587c48e724a661d77a44084214": "{{WSDL URL}} inválida: {0}\n\n\r Código: {1}\n\n\r Corpo de Resposta: {2}" +} + diff --git a/node_modules/strong-soap/intl/ru/messages.json b/node_modules/strong-soap/intl/ru/messages.json new file mode 100644 index 00000000..de4c04f1 --- /dev/null +++ b/node_modules/strong-soap/intl/ru/messages.json @@ -0,0 +1,23 @@ +{ + "1b12432ead1b2b9902c4b9801aa0317b": "Указанный файл {{pfx}} должен быть расположением файла или {{buffer}}", + "1f2c65133b5bb463e7d1fceda5b31156": "Элемент ключа {0} {1} ДОЛЖЕН содержать один и только один элемент selector", + "28c828192eb440b64b8efd7f08cc37b3": "Атрибут {{itemType}} не разрешен, если в материалах содержится элемент {{simpleType}}", + "2d6dbd73e7a3abc468b95ca530caca9b": "Целевое пространство имен \"{0}\" уже используется в другой схеме", + "37e4bf66d90c313e7adb3317345be046": "Стиль {{WSDL}} не поддерживается: {0}", + "39e07c5a6797c4923d6a924999b62f8c": "Недопустимое значение qname: {0}", + "46ad858fdf2e460aa3b626d6455362f2": "Элемент ключа {0} {1} ДОЛЖЕН содержать хотя бы один элемент field", + "49569f279dd1e347fd90d448fdafbb93": "Непредвиденный корневой элемент в {{WSDL}} или в объекте include", + "552f3502256707b8c5b12ddb64e3f74e": "Необходимо установить модуль {{ursa}} для использования {{WSSecurityCert}}", + "61b096fd390a169fc86698a3fe30387f": "Обнаружен непредвиденный элемент ({0}) в {1}", + "6623e372e766ea11d932836035404a2b": "{{key}} должен быть {{buffer}} или {{string}}!", + "738cd872b93488bfd87f26224d09e26d": "Не удалось проанализировать ответ", + "7f7cb47259df769f2d3b3f7133f1a1ea": "Для {{cert}} требуется тип {{buffer}} или {{string}}!", + "97ed6b53b9b594fb90c6bfb2e0ba0286": "Список должен иметь тип элементов", + "bcb4356ee2e7a196b9671acf3989741d": "Недопустимое имя пользователя или недопустимый пароль", + "d40b6f905bf039c4d627ecafb7fdcac5": "Нет заголовка защиты", + "d7bda8e2c3faafdf0988f8cb4719a01d": "Список может содержать только один элемент {{simpleType}}", + "da96ad47da6be6a613f921b260a33ce0": "Нарушение {{WS-I}}: {{http://ws-i.org/profiles/basicprofile-1.2-2010-11-09.html#BP2113}}, часть {0}", + "e158dd1d250f1cc3df497728da556be1": "Не удалось выполнить привязку к {{WSDL}}", + "fab749587c48e724a661d77a44084214": "Недопустимый {{WSDL URL}}: {0}\n\n\r Код: {1}\n\n\r Тело ответа: {2}" +} + diff --git a/node_modules/strong-soap/intl/tr/messages.json b/node_modules/strong-soap/intl/tr/messages.json new file mode 100644 index 00000000..30d0bacc --- /dev/null +++ b/node_modules/strong-soap/intl/tr/messages.json @@ -0,0 +1,29 @@ +{ + "1b12432ead1b2b9902c4b9801aa0317b": "sağlanan {{pfx}} dosyası bir {{buffer}} ya da dosya konumu olmalıdır", + "1f2c65133b5bb463e7d1fceda5b31156": "{0} {1} temel öğesi yalnızca bir seçici öğe İÇERMELİDİR", + "28c828192eb440b64b8efd7f08cc37b3": "İçerik bir {{simpleType}} öğesi içeriyorsa {{itemType}} özniteliğine izin verilmez", + "2d6dbd73e7a3abc468b95ca530caca9b": "\"{0}\" hedef ad alanı zaten başka bir Şema tarafından kullanılıyor", + "37e4bf66d90c313e7adb3317345be046": "{{WSDL}} stili desteklenmiyor: {0}", + "39e07c5a6797c4923d6a924999b62f8c": "Geçersiz qname: {0}", + "3ab7c6dbb4e0c38f80e360957b0c8c82": "{0} şeması bulunamadı: {1} {2}", + "46ad858fdf2e460aa3b626d6455362f2": "{0} {1} temel öğesi bir ya da daha fazla alan öğesi İÇERMELİDİR", + "49569f279dd1e347fd90d448fdafbb93": "Beklenmeyen {{WSDL}} kök öğesi ya da ekleme", + "552f3502256707b8c5b12ddb64e3f74e": "{{WSSecurityCert}} öğesini kullanmak için {{ursa}} modülü kurulmalıdır", + "5dbe5d24686aa4e6d0cac19636b26cad": "{0} için bir istemci saplaması bulunamadı", + "61b096fd390a169fc86698a3fe30387f": "{1} içinde beklenmeyen öğe ({0}) bulundu", + "6623e372e766ea11d932836035404a2b": "{{key}}, {{buffer}} ya da {{string}} olmalıdır!", + "738cd872b93488bfd87f26224d09e26d": "Yanıt ayrıştırılamıyor", + "7f7cb47259df769f2d3b3f7133f1a1ea": "{{cert}}, {{buffer}} ya da {{string}} olmalıdır!", + "902622149b2525f3d802f7c9ace5d312": " {{operationName}}: {0} {{outputName}}: {1}", + "97ed6b53b9b594fb90c6bfb2e0ba0286": "Liste bir öğe tipine sahip olmalıdır", + "9d1255b943657eca7c1a17eac8da02d0": "Şema bulunamadı: {0} ({1})", + "b85a3a174c41fd29d1459ef484c985e3": "{1} içinde {0} öğesine izin verilmez", + "bcb4356ee2e7a196b9671acf3989741d": "Kullanıcı adı ya da parola geçersiz", + "d40b6f905bf039c4d627ecafb7fdcac5": "Güvenlik üstbilgisi yok", + "d7bda8e2c3faafdf0988f8cb4719a01d": "Liste yalnızca bir {{simpleType}} öğesi içerebilir", + "da96ad47da6be6a613f921b260a33ce0": "{{WS-I}} ihlali: {{http://ws-i.org/profiles/basicprofile-1.2-2010-11-09.html#BP2113}} bölüm {0}", + "e158dd1d250f1cc3df497728da556be1": "{{WSDL}} ile bağlanamadı", + "e5c6b66d41ec0037a6322c5b0dd8da0b": "{{createClient}} üzerinde hata uygulandı", + "fab749587c48e724a661d77a44084214": "Geçersiz {{WSDL URL}}: {0}\n\n\r Kod: {1}\n\n\r Yanıt Gövdesi: {2}" +} + diff --git a/node_modules/strong-soap/intl/zh-Hans/messages.json b/node_modules/strong-soap/intl/zh-Hans/messages.json new file mode 100644 index 00000000..874ab15e --- /dev/null +++ b/node_modules/strong-soap/intl/zh-Hans/messages.json @@ -0,0 +1,29 @@ +{ + "1b12432ead1b2b9902c4b9801aa0317b": "提供的 {{pfx}} 文件应当是 {{buffer}} 或文件位置", + "1f2c65133b5bb463e7d1fceda5b31156": "密钥元素 {0} {1} 必须包含一个且只能包含一个选择器元素", + "28c828192eb440b64b8efd7f08cc37b3": "如果内容中包含 {{simpleType}} 元素,那么将不允许属性 {{itemType}}", + "2d6dbd73e7a3abc468b95ca530caca9b": "另一个模式已在使用目标名称空间“{0}”", + "37e4bf66d90c313e7adb3317345be046": "{{WSDL}} 样式不受支持:{0}", + "39e07c5a6797c4923d6a924999b62f8c": "无效的 qname:{0}", + "3ab7c6dbb4e0c38f80e360957b0c8c82": "未找到模式 {0}:{1} {2}", + "46ad858fdf2e460aa3b626d6455362f2": "密钥元素 {0} {1} 必须包含一个或多个字段元素", + "49569f279dd1e347fd90d448fdafbb93": "意外的 {{WSDL}} 根元素或包含", + "552f3502256707b8c5b12ddb64e3f74e": "必须安装模块 {{ursa}} 才能使用 {{WSSecurityCert}}", + "5dbe5d24686aa4e6d0cac19636b26cad": "未针对 {0} 保存任何客户机存根", + "61b096fd390a169fc86698a3fe30387f": "在 {1} 中发现意外元素 ({0})", + "6623e372e766ea11d932836035404a2b": "{{key}} 应当为 {{buffer}} 或 {{string}}!", + "738cd872b93488bfd87f26224d09e26d": "无法解析响应", + "7f7cb47259df769f2d3b3f7133f1a1ea": "{{cert}} 应当为 {{buffer}} 或 {{string}}!", + "902622149b2525f3d802f7c9ace5d312": " {{operationName}}:{0} {{outputName}}:{1}", + "97ed6b53b9b594fb90c6bfb2e0ba0286": "列表中必须包含项类型", + "9d1255b943657eca7c1a17eac8da02d0": "未找到模式:{0} ({1})", + "b85a3a174c41fd29d1459ef484c985e3": "{1} 中不允许元素 {0}", + "bcb4356ee2e7a196b9671acf3989741d": "无效的用户名或密码", + "d40b6f905bf039c4d627ecafb7fdcac5": "无安全头", + "d7bda8e2c3faafdf0988f8cb4719a01d": "列表中只能包含一个 {{simpleType}} 元素", + "da96ad47da6be6a613f921b260a33ce0": "{{WS-I}} 违例:{{http://ws-i.org/profiles/basicprofile-1.2-2010-11-09.html#BP2113}} {0} 部分", + "e158dd1d250f1cc3df497728da556be1": "无法绑定到 {{WSDL}}", + "e5c6b66d41ec0037a6322c5b0dd8da0b": "{{createClient}} 时出现强制错误", + "fab749587c48e724a661d77a44084214": "无效 {{WSDL URL}}:{0}\n\n\r 代码:{1}\n\n\r 响应主体:{2}" +} + diff --git a/node_modules/strong-soap/intl/zh-Hant/messages.json b/node_modules/strong-soap/intl/zh-Hant/messages.json new file mode 100644 index 00000000..c5f058c9 --- /dev/null +++ b/node_modules/strong-soap/intl/zh-Hant/messages.json @@ -0,0 +1,29 @@ +{ + "1b12432ead1b2b9902c4b9801aa0317b": "提供的 {{pfx}} 檔案應該為 {{buffer}} 或檔案位置", + "1f2c65133b5bb463e7d1fceda5b31156": "key 元素 {0} {1}「必須」包含一個且只有一個 selector 元素", + "28c828192eb440b64b8efd7f08cc37b3": "如果內容包含 {{simpleType}} 元素,則不容許屬性 {{itemType}}", + "2d6dbd73e7a3abc468b95ca530caca9b": "另一個綱目已使用目標名稱空間 \"{0}\"", + "37e4bf66d90c313e7adb3317345be046": "不支援 {{WSDL}} 樣式:{0}", + "39e07c5a6797c4923d6a924999b62f8c": "無效的完整名稱:{0}", + "3ab7c6dbb4e0c38f80e360957b0c8c82": "找不到綱目 {0}:{1} {2}", + "46ad858fdf2e460aa3b626d6455362f2": "key 元素 {0} {1}「必須」包含一或多個 field 元素", + "49569f279dd1e347fd90d448fdafbb93": "非預期的 {{WSDL}} 根元素或 include", + "552f3502256707b8c5b12ddb64e3f74e": "必須安裝模組 {{ursa}} 才能使用 {{WSSecurityCert}}", + "5dbe5d24686aa4e6d0cac19636b26cad": "沒有清除 {0} 的用戶端", + "61b096fd390a169fc86698a3fe30387f": "在 {1} 內發現非預期的元素 ({0})", + "6623e372e766ea11d932836035404a2b": "{{key}} 應該為 {{buffer}} 或 {{string}}!", + "738cd872b93488bfd87f26224d09e26d": "無法剖析回應", + "7f7cb47259df769f2d3b3f7133f1a1ea": "{{cert}} 應該為 {{buffer}} 或 {{string}}!", + "902622149b2525f3d802f7c9ace5d312": " {{operationName}}:{0} {{outputName}}:{1}", + "97ed6b53b9b594fb90c6bfb2e0ba0286": "清單必須有項目類型", + "9d1255b943657eca7c1a17eac8da02d0": "找不到綱目:{0} ({1})", + "b85a3a174c41fd29d1459ef484c985e3": "{1} 內不容許元素 {0}", + "bcb4356ee2e7a196b9671acf3989741d": "無效的使用者名稱或密碼", + "d40b6f905bf039c4d627ecafb7fdcac5": "沒有安全標頭", + "d7bda8e2c3faafdf0988f8cb4719a01d": "清單只能包含一個 {{simpleType}} 元素", + "da96ad47da6be6a613f921b260a33ce0": "{{WS-I}} 違規:{{http://ws-i.org/profiles/basicprofile-1.2-2010-11-09.html#BP2113}} 部分 {0}", + "e158dd1d250f1cc3df497728da556be1": "無法連結至 {{WSDL}}", + "e5c6b66d41ec0037a6322c5b0dd8da0b": "{{createClient}} 發生強制錯誤", + "fab749587c48e724a661d77a44084214": "無效的 {{WSDL URL}}:{0}\n\n\r 錯誤碼:{1}\n\n\r 回應內文:{2}" +} + diff --git a/node_modules/strong-soap/intl/zz/messages.json b/node_modules/strong-soap/intl/zz/messages.json new file mode 100644 index 00000000..e429a48b --- /dev/null +++ b/node_modules/strong-soap/intl/zz/messages.json @@ -0,0 +1,813 @@ +{ + "soap": [ + "XMLHandler.createSOAPEnvelopeDescriptor:example/json2xml.js:29", + "XMLHandler.createSOAPEnvelopeDescriptor:example/weather.js:52" + ], + "Response envelope:": [ + "console.log:example/ntlm.js:48", + "console.log:example/weather.js:37" + ], + "Response Envelope: \n": [ + "console.log:example/stockquote.js:16" + ], + "Result: \n": [ + "console.log:example/stockquote.js:18" + ], + "Invoking operation: ": [ + "console.log:example/weather.js:33" + ], + "Result:": [ + "console.log:example/weather.js:43" + ], + "jsonToXml:": [ + "console.log:example/weather.js:55" + ], + "parseXml:": [ + "console.log:example/weather.js:67" + ], + "%s": [ + "console.log:example/xml2json.js:36" + ], + ":Body": [ + "doc.element:lib/base.js:71", + "doc.element:lib/parser/xmlHandler.js:379", + "doc.element:src/base.js:73", + "doc.element:src/parser/xmlHandler.js:375" + ], + ":Envelope": [ + "xmlBuilder.create:lib/base.js:68", + "xmlBuilder.create:lib/parser/xmlHandler.js:375", + "xmlBuilder.create:src/base.js:69", + "xmlBuilder.create:src/parser/xmlHandler.js:369" + ], + ":Header": [ + "doc.element:lib/base.js:70", + "doc.element:lib/parser/xmlHandler.js:378", + "doc.element:src/base.js:72", + "doc.element:src/parser/xmlHandler.js:374" + ], + "http://schemas.xmlsoap.org/": [ + "nsURI.indexOf:lib/base.js:103", + "ns.indexOf:lib/parser/wsdl.js:358", + "nsURI.indexOf:src/base.js:105", + "ns.indexOf:src/parser/wsdl.js:377" + ], + "http://www.w3.org/": [ + "nsURI.indexOf:lib/base.js:104", + "ns.indexOf:lib/parser/wsdl.js:359", + "nsURI.indexOf:src/base.js:107", + "ns.indexOf:src/parser/wsdl.js:379" + ], + "http://xml.apache.org/": [ + "nsURI.indexOf:lib/base.js:105", + "ns.indexOf:lib/parser/wsdl.js:360", + "nsURI.indexOf:src/base.js:109", + "ns.indexOf:src/parser/wsdl.js:381" + ], + "xmlns:": [ + "doc.attribute:lib/base.js:69", + "doc.attribute:lib/parser/xmlHandler.js:377", + "node.attribute:lib/parser/xmlHandler.js:802", + "doc.attribute:src/base.js:71", + "doc.attribute:src/parser/xmlHandler.js:372", + "node.attribute:src/parser/xmlHandler.js:815" + ], + "738cd872b93488bfd87f26224d09e26d": [ + "g.f:lib/client.js:302", + "g.f:src/client.js:310" + ], + "": [ + "body.indexOf:lib/client.js:269", + "body.indexOf:src/client.js:277" + ], + "": [ + "body.indexOf:lib/client.js:269", + "body.indexOf:src/client.js:277" + ], + "Request envelope: %s": [ + "debug:lib/client.js:235", + "debug:src/client.js:242" + ], + "client request, calling jsonToXml. args: %j": [ + "debug:lib/client.js:218", + "debug:src/client.js:225" + ], + "client request. headers: %j": [ + "debug:lib/client.js:158", + "debug:src/client.js:161" + ], + "client request. inputBodyDescriptor: %j": [ + "debug:lib/client.js:214", + "debug:src/client.js:220" + ], + "client request. operation: %s args: %j options: %j extraHeaders: %j": [ + "debug:lib/client.js:119", + "debug:src/client.js:122" + ], + "client request. operationDescriptor: %j": [ + "debugDetail:lib/client.js:211", + "debugDetail:src/client.js:217" + ], + "client request. options: %j": [ + "debugSensitive:lib/client.js:148", + "debugSensitive:lib/client.js:170", + "debugSensitive:lib/client.js:174", + "debugSensitive:src/client.js:151", + "debugSensitive:src/client.js:173", + "debugSensitive:src/client.js:177" + ], + "client request. soapAction: %s": [ + "debug:lib/client.js:145", + "debug:src/client.js:148" + ], + "client request. soapNsURI: %s soapNsPrefix: %s ": [ + "debug:lib/client.js:131", + "debug:src/client.js:134" + ], + "client response. error message: %s": [ + "debug:lib/client.js:280", + "debug:src/client.js:288" + ], + "client response. lastRequestHeaders: %j": [ + "debug:lib/client.js:338", + "debug:src/client.js:347" + ], + "client response. output not present": [ + "debug:lib/client.js:283", + "debug:src/client.js:291" + ], + "client response. outputEnvDescriptor: %j": [ + "debugDetail:lib/client.js:275", + "debugDetail:src/client.js:283" + ], + "client response. response: %j body: %j": [ + "debug:lib/client.js:260", + "debug:src/client.js:268" + ], + "client response. result: %j body: %j obj.Header: %j": [ + "debug:lib/client.js:328", + "debug:src/client.js:337" + ], + "message": [ + "self.emit:lib/client.js:241", + "self.emit:src/client.js:248" + ], + "request": [ + "self.emit:lib/client.js:242", + "server.listeners:lib/server.js:34", + "server.removeAllListeners:lib/server.js:36", + "server.addListener:lib/server.js:37", + "self.emit:lib/server.js:189", + "self.emit:lib/server.js:225", + "self.emit:src/client.js:249", + "server.listeners:src/server.js:35", + "server.removeAllListeners:src/server.js:37", + "server.addListener:src/server.js:38", + "self.emit:src/server.js:192", + "self.emit:src/server.js:229" + ], + "response": [ + "self.emit:lib/client.js:258", + "self.emit:src/client.js:266" + ], + "soapError": [ + "self.emit:lib/client.js:293", + "self.emit:src/client.js:301" + ], + "Http request: %j": [ + "debug:lib/http.js:80", + "debug:src/http.js:81" + ], + "Http response body: %j": [ + "debug:lib/http.js:92", + "debug:src/http.js:93" + ], + "NTLM options: %j for method: %s": [ + "debugSensitive:lib/http.js:145", + "debugSensitive:src/http.js:147" + ], + "httpntlm method: %s": [ + "debug:lib/http.js:146", + "debug:src/http.js:148" + ], + "61b096fd390a169fc86698a3fe30387f": [ + "g.f:lib/parser/element.js:126", + "g.f:src/parser/element.js:131" + ], + "Element %s is not allowed within %j": [ + "debug:lib/parser/element.js:82", + "debug:src/parser/element.js:86" + ], + "Element created: ": [ + "debug:lib/parser/element.js:89", + "debug:src/parser/element.js:93" + ], + "Schema %s not found: %s %s": [ + "debug:lib/parser/element.js:219", + "debug:src/parser/element.js:226" + ], + "Schema not found: %s (%s)": [ + "debug:lib/parser/element.js:191", + "debug:src/parser/element.js:198" + ], + "Unknown element: %s %s": [ + "debug:lib/parser/element.js:226", + "debug:src/parser/element.js:233" + ], + "any": [ + "indexOf:lib/parser/element.js:81", + "indexOf:src/parser/element.js:85" + ], + "base64": [ + "pwHash.digest:lib/parser/helper.js:98", + "nHash.digest:lib/security/WSSecurity.js:79", + "pwHash.digest:lib/utils.js:9", + "pwHash.digest:lib/utils.js:17", + "pwHash.digest:src/parser/helper.js:102", + "nHash.digest:src/security/WSSecurity.js:91", + "pwHash.digest:src/utils.js:9", + "pwHash.digest:src/utils.js:21" + ], + "sha1": [ + "crypto.createHash:lib/parser/helper.js:95", + "crypto.createHash:lib/security/WSSecurity.js:77", + "crypto.createHash:lib/utils.js:6", + "crypto.createHash:lib/utils.js:14", + "crypto.createHash:src/parser/helper.js:99", + "crypto.createHash:src/security/WSSecurity.js:89", + "crypto.createHash:src/utils.js:6", + "crypto.createHash:src/utils.js:14" + ], + "39e07c5a6797c4923d6a924999b62f8c": [ + "g.f:lib/parser/qname.js:27", + "g.f:src/parser/qname.js:28" + ], + "xs:schema": [ + "Schema:lib/parser/wsdl/definitions.js:32", + "Schema:src/parser/wsdl/definitions.js:34" + ], + "37e4bf66d90c313e7adb3317345be046": [ + "g.f:lib/parser/wsdl/operation.js:199", + "g.f:src/parser/wsdl/operation.js:207" + ], + "da96ad47da6be6a613f921b260a33ce0": [ + "g.warn:lib/parser/wsdl/operation.js:85", + "g.warn:lib/parser/wsdl/operation.js:99", + "g.warn:src/parser/wsdl/operation.js:84", + "g.warn:src/parser/wsdl/operation.js:100" + ], + "Document/literal part should use element": [ + "console.error:lib/parser/wsdl/operation.js:330", + "Error:lib/parser/wsdl/operation.js:331", + "console.error:src/parser/wsdl/operation.js:355", + "Error:src/parser/wsdl/operation.js:356" + ], + "Message not found: ": [ + "debug:lib/parser/wsdl/parameter.js:68", + "debug:lib/parser/wsdl/parameter.js:90", + "debug:src/parser/wsdl/parameter.js:68", + "debug:src/parser/wsdl/parameter.js:90" + ], + "Unable to resolve message ": [ + "Error:lib/parser/wsdl/parameter.js:37", + "Error:src/parser/wsdl/parameter.js:37" + ], + "Unable to resolve message %s for": [ + "console.error:lib/parser/wsdl/parameter.js:36", + "console.error:src/parser/wsdl/parameter.js:36" + ], + "49569f279dd1e347fd90d448fdafbb93": [ + "g.f:lib/parser/wsdl.js:308", + "g.f:src/parser/wsdl.js:326" + ], + "fab749587c48e724a661d77a44084214": [ + "g.f:lib/parser/wsdl.js:452", + "g.f:src/parser/wsdl.js:478" + ], + "End element: %s": [ + "debug:lib/parser/wsdl.js:314", + "debug:src/parser/wsdl.js:332" + ], + "Processing: ": [ + "debugInclude:lib/parser/wsdl.js:188", + "debugInclude:src/parser/wsdl.js:201" + ], + "Reading file: %s": [ + "debug:lib/parser/wsdl.js:429", + "debug:src/parser/wsdl.js:453" + ], + "Start element: %j": [ + "debug:lib/parser/wsdl.js:275", + "debug:src/parser/wsdl.js:293" + ], + "WSDL error: %s ": [ + "debug:lib/parser/wsdl.js:286", + "debug:src/parser/wsdl.js:304" + ], + "WSDL xml: %s": [ + "debug:lib/parser/wsdl.js:329", + "debug:src/parser/wsdl.js:347" + ], + "definitions": [ + "Definitions:lib/parser/wsdl.js:301", + "Definitions:src/parser/wsdl.js:319" + ], + "includes/imports: ": [ + "debugInclude:lib/parser/wsdl.js:169", + "debugInclude:src/parser/wsdl.js:181" + ], + "types": [ + "Types:lib/parser/wsdl.js:302", + "Types:src/parser/wsdl.js:320" + ], + "wsdl open. request_headers: %j request_options: %j": [ + "debug:lib/parser/wsdl.js:419", + "debug:lib/parser/wsdl.js:493", + "debug:src/parser/wsdl.js:442", + "debug:src/parser/wsdl.js:521" + ], + "": [ + "val.replace:lib/parser/xmlHandler.js:104", + "val.replace:src/parser/xmlHandler.js:108" + ], + "detail": [ + "selectn:lib/parser/xmlHandler.js:742", + "selectn:src/parser/xmlHandler.js:751" + ], + "detail.$value": [ + "selectn:lib/parser/xmlHandler.js:742", + "selectn:src/parser/xmlHandler.js:750" + ], + "faultactor": [ + "selectn:lib/parser/xmlHandler.js:738", + "selectn:src/parser/xmlHandler.js:746" + ], + "faultactor.$value": [ + "selectn:lib/parser/xmlHandler.js:738", + "selectn:src/parser/xmlHandler.js:745" + ], + "faultcode": [ + "selectn:lib/parser/xmlHandler.js:726", + "selectn:src/parser/xmlHandler.js:733" + ], + "faultcode.$value": [ + "selectn:lib/parser/xmlHandler.js:726", + "selectn:src/parser/xmlHandler.js:732" + ], + "faultstring": [ + "selectn:lib/parser/xmlHandler.js:734", + "selectn:src/parser/xmlHandler.js:741" + ], + "faultstring.$value": [ + "selectn:lib/parser/xmlHandler.js:734", + "selectn:src/parser/xmlHandler.js:740" + ], + "reason.$value": [ + "selectn:lib/parser/xmlHandler.js:771", + "selectn:src/parser/xmlHandler.js:781" + ], + "xsi:nil": [ + "element.attribute:lib/parser/xmlHandler.js:135", + "element.attribute:src/parser/xmlHandler.js:140" + ], + "xsi:type": [ + "node.attribute:lib/parser/xmlHandler.js:359", + "node.attribute:src/parser/xmlHandler.js:350" + ], + "1f2c65133b5bb463e7d1fceda5b31156": [ + "g.warn:lib/parser/xsd/keybase.js:16", + "g.warn:lib/parser/xsd/keybase.js:26", + "g.warn:src/parser/xsd/keybase.js:16", + "g.warn:src/parser/xsd/keybase.js:28" + ], + "46ad858fdf2e460aa3b626d6455362f2": [ + "g.warn:lib/parser/xsd/keybase.js:29", + "g.warn:src/parser/xsd/keybase.js:33" + ], + "28c828192eb440b64b8efd7f08cc37b3": [ + "g.warn:lib/parser/xsd/list.js:26", + "g.warn:src/parser/xsd/list.js:27" + ], + "97ed6b53b9b594fb90c6bfb2e0ba0286": [ + "g.warn:lib/parser/xsd/list.js:34", + "g.warn:src/parser/xsd/list.js:36" + ], + "d7bda8e2c3faafdf0988f8cb4719a01d": [ + "g.warn:lib/parser/xsd/list.js:28", + "g.warn:src/parser/xsd/list.js:30" + ], + "ad16b1c54d1a687cb4efc849e918816c": [ + "g.f:lib/parser/xsd/restriction.js:193", + "g.f:src/parser/xsd/restriction.js:195" + ], + " != ": [ + "violations.push:lib/parser/xsd/restriction.js:158", + "violations.push:src/parser/xsd/restriction.js:160" + ], + " !match ": [ + "violations.push:lib/parser/xsd/restriction.js:182", + "violations.push:src/parser/xsd/restriction.js:184" + ], + " < ": [ + "violations.push:lib/parser/xsd/restriction.js:113", + "violations.push:lib/parser/xsd/restriction.js:170", + "violations.push:src/parser/xsd/restriction.js:115", + "violations.push:src/parser/xsd/restriction.js:172" + ], + " <= ": [ + "violations.push:lib/parser/xsd/restriction.js:107", + "violations.push:src/parser/xsd/restriction.js:109" + ], + " > ": [ + "violations.push:lib/parser/xsd/restriction.js:125", + "violations.push:lib/parser/xsd/restriction.js:133", + "violations.push:lib/parser/xsd/restriction.js:144", + "violations.push:lib/parser/xsd/restriction.js:149", + "violations.push:lib/parser/xsd/restriction.js:164", + "violations.push:src/parser/xsd/restriction.js:127", + "violations.push:src/parser/xsd/restriction.js:135", + "violations.push:src/parser/xsd/restriction.js:146", + "violations.push:src/parser/xsd/restriction.js:151", + "violations.push:src/parser/xsd/restriction.js:166" + ], + " >= ": [ + "violations.push:lib/parser/xsd/restriction.js:119", + "violations.push:src/parser/xsd/restriction.js:121" + ], + " is not in ": [ + "violations.push:lib/parser/xsd/restriction.js:188", + "violations.push:src/parser/xsd/restriction.js:190" + ], + "length is bigger than maxLength (": [ + "violations.push:lib/parser/xsd/restriction.js:164", + "violations.push:src/parser/xsd/restriction.js:166" + ], + "length is smaller than minLength (": [ + "violations.push:lib/parser/xsd/restriction.js:170", + "violations.push:src/parser/xsd/restriction.js:172" + ], + "lengths don't match (": [ + "violations.push:lib/parser/xsd/restriction.js:158", + "violations.push:src/parser/xsd/restriction.js:160" + ], + "value doesn't match the required pattern (": [ + "violations.push:lib/parser/xsd/restriction.js:182", + "violations.push:src/parser/xsd/restriction.js:184" + ], + "value has more decimal places than allowed (": [ + "violations.push:lib/parser/xsd/restriction.js:133", + "violations.push:src/parser/xsd/restriction.js:135" + ], + "value has more digits than allowed (": [ + "violations.push:lib/parser/xsd/restriction.js:144", + "violations.push:src/parser/xsd/restriction.js:146" + ], + "value has more integer digits than allowed (": [ + "violations.push:lib/parser/xsd/restriction.js:149", + "violations.push:src/parser/xsd/restriction.js:151" + ], + "value is greater or equal than maxExclusive (": [ + "violations.push:lib/parser/xsd/restriction.js:119", + "violations.push:src/parser/xsd/restriction.js:121" + ], + "value is greater than maxInclusive (": [ + "violations.push:lib/parser/xsd/restriction.js:125", + "violations.push:src/parser/xsd/restriction.js:127" + ], + "value is less or equal than minExclusive (": [ + "violations.push:lib/parser/xsd/restriction.js:107", + "violations.push:src/parser/xsd/restriction.js:109" + ], + "value is less than minInclusive (": [ + "violations.push:lib/parser/xsd/restriction.js:113", + "violations.push:src/parser/xsd/restriction.js:115" + ], + "value is not in the list of valid values (": [ + "violations.push:lib/parser/xsd/restriction.js:188", + "violations.push:src/parser/xsd/restriction.js:190" + ], + "xsd:simpleType": [ + "SimpleType:lib/parser/xsd.js:11", + "SimpleType:src/parser/xsd.js:11" + ], + "6623e372e766ea11d932836035404a2b": [ + "g.f:lib/security/ClientSSLSecurity.js:29", + "g.f:src/security/ClientSSLSecurity.js:29" + ], + "7f7cb47259df769f2d3b3f7133f1a1ea": [ + "g.f:lib/security/ClientSSLSecurity.js:39", + "g.f:src/security/ClientSSLSecurity.js:39" + ], + "1b12432ead1b2b9902c4b9801aa0317b": [ + "g.f:lib/security/ClientSSLSecurityPFX.js:31", + "g.f:src/security/ClientSSLSecurityPFX.js:31" + ], + "set-cookie": [ + "cookie.hasOwnProperty:lib/security/CookieSecurity.js:6", + "cookie.hasOwnProperty:src/security/CookieSecurity.js:6" + ], + "EncodingType": [ + "userNameElement.attribute:lib/security/WSSecurity.js:87", + "userNameElement.attribute:lib/security/WSSecurity.js:92", + "secElement.attribute:lib/security/WSSecurityCert.js:76", + "userNameElement.attribute:src/security/WSSecurity.js:103", + "userNameElement.attribute:src/security/WSSecurity.js:114", + "secElement.attribute:src/security/WSSecurityCert.js:92" + ], + "Type": [ + "userNameElement.attribute:lib/security/WSSecurity.js:84", + "userNameElement.attribute:lib/security/WSSecurity.js:90", + "userNameElement.attribute:src/security/WSSecurity.js:97", + "userNameElement.attribute:src/security/WSSecurity.js:109" + ], + "soap:actor": [ + "secElement.attribute:lib/security/WSSecurity.js:48", + "secElement.attribute:src/security/WSSecurity.js:54" + ], + "soap:mustUnderstand": [ + "secElement.attribute:lib/security/WSSecurity.js:51", + "headerElement.attribute:lib/server.js:328", + "secElement.attribute:src/security/WSSecurity.js:57", + "headerElement.attribute:src/server.js:340" + ], + "wsse:Nonce": [ + "userNameElement.element:lib/security/WSSecurity.js:87", + "userNameElement.element:lib/security/WSSecurity.js:92", + "userNameElement.element:src/security/WSSecurity.js:102", + "userNameElement.element:src/security/WSSecurity.js:113" + ], + "wsse:Password": [ + "userNameElement.element:lib/security/WSSecurity.js:84", + "userNameElement.element:lib/security/WSSecurity.js:90", + "userNameElement.element:src/security/WSSecurity.js:96", + "userNameElement.element:src/security/WSSecurity.js:108" + ], + "wsse:Security": [ + "headerElement.element:lib/security/WSSecurity.js:46", + "headerElement.element:lib/security/WSSecurityCert.js:75", + "headerElement.element:lib/server.js:328", + "headerElement.element:src/security/WSSecurity.js:52", + "headerElement.element:src/security/WSSecurityCert.js:85", + "headerElement.element:src/server.js:339" + ], + "wsse:Username": [ + "userNameElement.element:lib/security/WSSecurity.js:69", + "userNameElement.element:src/security/WSSecurity.js:81" + ], + "wsse:UsernameToken": [ + "secElement.element:lib/security/WSSecurity.js:67", + "secElement.element:src/security/WSSecurity.js:78" + ], + "wsu:Created": [ + "tsElement.element:lib/security/WSSecurity.js:63", + "userNameElement.element:lib/security/WSSecurity.js:71", + "tsElement.element:lib/security/WSSecurityCert.js:78", + "tsElement.element:lib/server.js:339", + "tsElement.element:src/security/WSSecurity.js:74", + "userNameElement.element:src/security/WSSecurity.js:83", + "tsElement.element:src/security/WSSecurityCert.js:100", + "tsElement.element:src/server.js:356" + ], + "wsu:Expires": [ + "tsElement.element:lib/security/WSSecurity.js:64", + "tsElement.element:lib/security/WSSecurityCert.js:79", + "tsElement.element:lib/server.js:340", + "tsElement.element:src/security/WSSecurity.js:75", + "tsElement.element:src/security/WSSecurityCert.js:101", + "tsElement.element:src/server.js:357" + ], + "wsu:Id": [ + "secElement.attribute:lib/security/WSSecurity.js:62", + "secElement.attribute:lib/security/WSSecurity.js:67", + "secElement.attribute:lib/security/WSSecurityCert.js:77", + "secElement.attribute:lib/server.js:338", + "secElement.attribute:src/security/WSSecurity.js:73", + "secElement.attribute:src/security/WSSecurity.js:79", + "secElement.attribute:src/security/WSSecurityCert.js:99", + "secElement.attribute:src/server.js:355" + ], + "wsu:Timestamp": [ + "secElement.element:lib/security/WSSecurity.js:62", + "secElement.element:lib/security/WSSecurityCert.js:77", + "secElement.element:lib/server.js:338", + "secElement.element:src/security/WSSecurity.js:72", + "secElement.element:src/security/WSSecurityCert.js:98", + "secElement.element:src/server.js:354" + ], + "xmlns:wsse": [ + "secElement.attribute:lib/security/WSSecurity.js:54", + "headerElement.attribute:lib/security/WSSecurityCert.js:75", + "secElement.attribute:lib/server.js:330", + "secElement.attribute:src/security/WSSecurity.js:61", + "headerElement.attribute:src/security/WSSecurityCert.js:86", + "secElement.attribute:src/server.js:343" + ], + "xmlns:wsu": [ + "secElement.attribute:lib/security/WSSecurity.js:54", + "secElement.attribute:lib/server.js:330", + "secElement.attribute:src/security/WSSecurity.js:63", + "secElement.attribute:src/server.js:345" + ], + "552f3502256707b8c5b12ddb64e3f74e": [ + "g.f:lib/security/WSSecurityCert.js:41", + "g.f:src/security/WSSecurityCert.js:46" + ], + "-----BEGIN CERTIFICATE-----": [ + "publicP12PEM.replace:lib/security/WSSecurityCert.js:44", + "publicP12PEM.replace:src/security/WSSecurityCert.js:50" + ], + "//*[local-name(.)='Body']": [ + "addReference:lib/security/WSSecurityCert.js:52", + "addReference:src/security/WSSecurityCert.js:61" + ], + "//*[local-name(.)='Timestamp']": [ + "addReference:lib/security/WSSecurityCert.js:53", + "addReference:src/security/WSSecurityCert.js:62" + ], + "strong-ursa": [ + "optional:lib/security/WSSecurityCert.js:5", + "optional:src/security/WSSecurityCert.js:5" + ], + "wsse:BinarySecurityToken": [ + "secElement.element:lib/security/WSSecurityCert.js:76", + "secElement.element:src/security/WSSecurityCert.js:91" + ], + "bcb4356ee2e7a196b9671acf3989741d": [ + "g.f:lib/server.js:144", + "g.f:src/server.js:146" + ], + "d40b6f905bf039c4d627ecafb7fdcac5": [ + "g.f:lib/server.js:141", + "g.f:src/server.js:143" + ], + "e158dd1d250f1cc3df497728da556be1": [ + "g.f:lib/server.js:182", + "g.f:src/server.js:185" + ], + "Content-Type": [ + "res.setHeader:lib/server.js:72", + "res.setHeader:lib/server.js:77", + "res.setHeader:src/server.js:74", + "res.setHeader:src/server.js:79" + ], + "Server executeMethod: error: %s ": [ + "debug:lib/server.js:266", + "debug:src/server.js:270" + ], + "Server handleResult. operationDescriptor: %j ": [ + "debugDetail:lib/server.js:288", + "debugDetail:src/server.js:296" + ], + "Server handleResult. outputBodyDescriptor: %j ": [ + "debugDetail:lib/server.js:291", + "debugDetail:src/server.js:299" + ], + "Server handleResult. xml: %s ": [ + "debug:lib/server.js:311", + "debug:src/server.js:320" + ], + "Server operation: %s ": [ + "debug:lib/server.js:264", + "debug:src/server.js:268" + ], + "Server parameters: path: %s services: %j wsdl: %j": [ + "debug:lib/server.js:29", + "debug:src/server.js:29" + ], + "Server sendError. error.Fault: %j ": [ + "debug:lib/server.js:389", + "debug:src/server.js:409" + ], + "Server sendError. Response envelope: %s ": [ + "debug:lib/server.js:398", + "debug:src/server.js:418" + ], + "Server sendError. faultDescriptor: %j ": [ + "debugDetail:lib/server.js:387", + "debugDetail:src/server.js:407" + ], + "Server sendError. operationDescriptor: %j ": [ + "debugDetail:lib/server.js:367", + "debugDetail:src/server.js:385" + ], + "Server soapNsURI: %s soapNsPrefix: %s": [ + "debug:lib/server.js:300", + "debug:src/server.js:308" + ], + "data": [ + "req.on:lib/server.js:84", + "req.on:src/server.js:85" + ], + "end": [ + "req.on:lib/server.js:88", + "req.on:src/server.js:90" + ], + "error": [ + "self.log:lib/server.js:116", + "self.log:src/server.js:119" + ], + "headers": [ + "self.emit:lib/server.js:190", + "self.emit:lib/server.js:226", + "self.emit:src/server.js:194", + "self.emit:src/server.js:231" + ], + "info": [ + "self.log:lib/server.js:64", + "self.log:lib/server.js:70", + "self.log:lib/server.js:149", + "self.log:lib/server.js:167", + "self.log:src/server.js:66", + "self.log:src/server.js:72", + "self.log:src/server.js:151", + "self.log:src/server.js:169" + ], + "received": [ + "self.log:lib/server.js:98", + "self.log:src/server.js:100" + ], + "replied": [ + "self.log:lib/server.js:107", + "self.log:src/server.js:109" + ], + "_requestWSDL, wsdl in cache %s": [ + "debug:lib/soap.js:23", + "debug:src/soap.js:23" + ], + "createClient params: wsdl url: %s client options: %j": [ + "debug:lib/soap.js:46", + "debug:src/soap.js:47" + ], + "listen params: pathOrOptions: %j services: %j xml: %j": [ + "debug:lib/soap.js:53", + "debug:src/soap.js:54" + ], + "Invalid input, only string allowed": [ + "Error:lib/strip-bom.js:13", + "Error:src/strip-bom.js:12" + ], + "forced error on {{createClient}}": [ + "g.f:soap-stub.js:48" + ], + "no client stubbed for %s": [ + "g.f:soap-stub.js:57" + ] +} diff --git a/node_modules/strong-soap/intl/zz/messages_inverted.json b/node_modules/strong-soap/intl/zz/messages_inverted.json new file mode 100644 index 00000000..eef227d4 --- /dev/null +++ b/node_modules/strong-soap/intl/zz/messages_inverted.json @@ -0,0 +1,1387 @@ +{ + "example/json2xml.js": { + "29": [ + "XMLHandler.createSOAPEnvelopeDescriptor('soap')" + ] + }, + "example/weather.js": { + "33": [ + "console.log('Invoking operation: ')" + ], + "37": [ + "console.log('Response envelope:')" + ], + "43": [ + "console.log('Result:')" + ], + "52": [ + "XMLHandler.createSOAPEnvelopeDescriptor('soap')" + ], + "55": [ + "console.log('jsonToXml:')" + ], + "67": [ + "console.log('parseXml:')" + ] + }, + "example/ntlm.js": { + "48": [ + "console.log('Response envelope:')" + ] + }, + "example/stockquote.js": { + "16": [ + "console.log('Response Envelope: \n')" + ], + "18": [ + "console.log('Result: \n')" + ] + }, + "example/xml2json.js": { + "36": [ + "console.log('%s', ... )" + ] + }, + "lib/base.js": { + "68": [ + "xmlBuilder.create(':Envelope')" + ], + "69": [ + "doc.attribute('xmlns:')" + ], + "70": [ + "doc.element(':Header')" + ], + "71": [ + "doc.element(':Body')" + ], + "103": [ + "nsURI.indexOf('http://schemas.xmlsoap.org/')" + ], + "104": [ + "nsURI.indexOf('http://www.w3.org/')" + ], + "105": [ + "nsURI.indexOf('http://xml.apache.org/')" + ] + }, + "lib/parser/xmlHandler.js": { + "103": [ + "val.replace('')" + ], + "135": [ + "element.attribute('xsi:nil')" + ], + "359": [ + "node.attribute('xsi:type')" + ], + "375": [ + "xmlBuilder.create(':Envelope')" + ], + "377": [ + "doc.attribute('xmlns:')" + ], + "378": [ + "doc.element(':Header')" + ], + "379": [ + "doc.element(':Body')" + ], + "437": [ + "debug('XMLHandler parseXML. root: %j xml: %j', ... )" + ], + "726": [ + "selectn('faultcode')", + "selectn('faultcode.$value')" + ], + "734": [ + "selectn('faultstring')", + "selectn('faultstring.$value')" + ], + "738": [ + "selectn('faultactor')", + "selectn('faultactor.$value')" + ], + "742": [ + "selectn('detail')", + "selectn('detail.$value')" + ], + "758": [ + "selectn('Code')", + "selectn('Code')" + ], + "763": [ + "selectn('Value')", + "selectn('Value.$value')" + ], + "767": [ + "selectn('Subcode')", + "selectn('Subcode.$value')" + ], + "771": [ + "selectn('Reason')", + "selectn('reason.$value')" + ], + "775": [ + "selectn('Node')", + "selectn('Node.$value')" + ], + "779": [ + "selectn('Role')", + "selectn('Role.$value')" + ], + "783": [ + "selectn('Detail')", + "selectn('Detail.$value')" + ], + "802": [ + "node.attribute('xmlns:')" + ] + }, + "src/base.js": { + "69": [ + "xmlBuilder.create(':Envelope')" + ], + "71": [ + "doc.attribute('xmlns:')" + ], + "72": [ + "doc.element(':Header')" + ], + "73": [ + "doc.element(':Body')" + ], + "105": [ + "nsURI.indexOf('http://schemas.xmlsoap.org/')" + ], + "107": [ + "nsURI.indexOf('http://www.w3.org/')" + ], + "109": [ + "nsURI.indexOf('http://xml.apache.org/')" + ] + }, + "src/parser/xmlHandler.js": { + "107": [ + "val.replace('')" + ], + "140": [ + "element.attribute('xsi:nil')" + ], + "350": [ + "node.attribute('xsi:type')" + ], + "369": [ + "xmlBuilder.create(':Envelope')" + ], + "372": [ + "doc.attribute('xmlns:')" + ], + "374": [ + "doc.element(':Header')" + ], + "375": [ + "doc.element(':Body')" + ], + "441": [ + "debug('XMLHandler parseXML. root: %j xml: %j', ... )" + ], + "732": [ + "selectn('faultcode.$value')" + ], + "733": [ + "selectn('faultcode')" + ], + "740": [ + "selectn('faultstring.$value')" + ], + "741": [ + "selectn('faultstring')" + ], + "745": [ + "selectn('faultactor.$value')" + ], + "746": [ + "selectn('faultactor')" + ], + "750": [ + "selectn('detail.$value')" + ], + "751": [ + "selectn('detail')" + ], + "765": [ + "selectn('Code')" + ], + "766": [ + "selectn('Code')" + ], + "771": [ + "selectn('Value.$value')" + ], + "772": [ + "selectn('Value')" + ], + "776": [ + "selectn('Subcode.$value')" + ], + "777": [ + "selectn('Subcode')" + ], + "781": [ + "selectn('reason.$value')" + ], + "782": [ + "selectn('Reason')" + ], + "786": [ + "selectn('Node.$value')" + ], + "787": [ + "selectn('Node')" + ], + "791": [ + "selectn('Role.$value')" + ], + "792": [ + "selectn('Role')" + ], + "796": [ + "selectn('Detail.$value')" + ], + "797": [ + "selectn('Detail')" + ], + "815": [ + "node.attribute('xmlns:')" + ] + }, + "lib/parser/wsdl.js": { + "169": [ + "debugInclude('includes/imports: ')" + ], + "188": [ + "debugInclude('Processing: ')" + ], + "275": [ + "debug('Start element: %j', ... )" + ], + "286": [ + "debug('WSDL error: %s ', ... )" + ], + "301": [ + "Definitions('definitions')" + ], + "302": [ + "Types('types')" + ], + "308": [ + "g.f('49569f279dd1e347fd90d448fdafbb93')" + ], + "314": [ + "debug('End element: %s', ... )" + ], + "329": [ + "debug('WSDL xml: %s', ... )" + ], + "358": [ + "ns.indexOf('http://schemas.xmlsoap.org/')" + ], + "359": [ + "ns.indexOf('http://www.w3.org/')" + ], + "360": [ + "ns.indexOf('http://xml.apache.org/')" + ], + "419": [ + "debug('wsdl open. request_headers: %j request_options: %j', ... )" + ], + "429": [ + "debug('Reading file: %s', ... )" + ], + "452": [ + "g.f('fab749587c48e724a661d77a44084214')" + ], + "493": [ + "debug('wsdl open. request_headers: %j request_options: %j', ... )" + ] + }, + "src/parser/wsdl.js": { + "181": [ + "debugInclude('includes/imports: ')" + ], + "201": [ + "debugInclude('Processing: ')" + ], + "293": [ + "debug('Start element: %j', ... )" + ], + "304": [ + "debug('WSDL error: %s ', ... )" + ], + "319": [ + "Definitions('definitions')" + ], + "320": [ + "Types('types')" + ], + "326": [ + "g.f('49569f279dd1e347fd90d448fdafbb93')" + ], + "332": [ + "debug('End element: %s', ... )" + ], + "347": [ + "debug('WSDL xml: %s', ... )" + ], + "377": [ + "ns.indexOf('http://schemas.xmlsoap.org/')" + ], + "379": [ + "ns.indexOf('http://www.w3.org/')" + ], + "381": [ + "ns.indexOf('http://xml.apache.org/')" + ], + "442": [ + "debug('wsdl open. request_headers: %j request_options: %j', ... )" + ], + "453": [ + "debug('Reading file: %s', ... )" + ], + "478": [ + "g.f('fab749587c48e724a661d77a44084214')" + ], + "521": [ + "debug('wsdl open. request_headers: %j request_options: %j', ... )" + ] + }, + "lib/client.js": { + "119": [ + "debug('client request. operation: %s args: %j options: %j extraHeaders: %j', ... )" + ], + "131": [ + "debug('client request. soapNsURI: %s soapNsPrefix: %s ', ... )" + ], + "145": [ + "debug('client request. soapAction: %s', ... )" + ], + "148": [ + "debugSensitive('client request. options: %j', ... )" + ], + "158": [ + "debug('client request. headers: %j', ... )" + ], + "170": [ + "debugSensitive('client request. options: %j', ... )" + ], + "174": [ + "debugSensitive('client request. options: %j', ... )" + ], + "211": [ + "debugDetail('client request. operationDescriptor: %j', ... )" + ], + "214": [ + "debug('client request. inputBodyDescriptor: %j', ... )" + ], + "218": [ + "debug('client request, calling jsonToXml. args: %j', ... )" + ], + "235": [ + "debug('Request envelope: %s', ... )" + ], + "241": [ + "self.emit('message')" + ], + "242": [ + "self.emit('request')" + ], + "258": [ + "self.emit('response')" + ], + "260": [ + "debug('client response. response: %j body: %j', ... )" + ], + "269": [ + "body.indexOf('')", + "body.indexOf('')" + ], + "275": [ + "debugDetail('client response. outputEnvDescriptor: %j', ... )" + ], + "280": [ + "debug('client response. error message: %s', ... )" + ], + "283": [ + "debug('client response. output not present')" + ], + "293": [ + "self.emit('soapError')" + ], + "302": [ + "g.f('738cd872b93488bfd87f26224d09e26d')" + ], + "328": [ + "debug('client response. result: %j body: %j obj.Header: %j', ... )" + ], + "338": [ + "debug('client response. lastRequestHeaders: %j', ... )" + ] + }, + "src/client.js": { + "122": [ + "debug('client request. operation: %s args: %j options: %j extraHeaders: %j', ... )" + ], + "134": [ + "debug('client request. soapNsURI: %s soapNsPrefix: %s ', ... )" + ], + "148": [ + "debug('client request. soapAction: %s', ... )" + ], + "151": [ + "debugSensitive('client request. options: %j', ... )" + ], + "161": [ + "debug('client request. headers: %j', ... )" + ], + "173": [ + "debugSensitive('client request. options: %j', ... )" + ], + "177": [ + "debugSensitive('client request. options: %j', ... )" + ], + "217": [ + "debugDetail('client request. operationDescriptor: %j', ... )" + ], + "220": [ + "debug('client request. inputBodyDescriptor: %j', ... )" + ], + "225": [ + "debug('client request, calling jsonToXml. args: %j', ... )" + ], + "242": [ + "debug('Request envelope: %s', ... )" + ], + "248": [ + "self.emit('message')" + ], + "249": [ + "self.emit('request')" + ], + "266": [ + "self.emit('response')" + ], + "268": [ + "debug('client response. response: %j body: %j', ... )" + ], + "277": [ + "body.indexOf('')", + "body.indexOf('')" + ], + "283": [ + "debugDetail('client response. outputEnvDescriptor: %j', ... )" + ], + "288": [ + "debug('client response. error message: %s', ... )" + ], + "291": [ + "debug('client response. output not present')" + ], + "301": [ + "self.emit('soapError')" + ], + "310": [ + "g.f('738cd872b93488bfd87f26224d09e26d')" + ], + "337": [ + "debug('client response. result: %j body: %j obj.Header: %j', ... )" + ], + "347": [ + "debug('client response. lastRequestHeaders: %j', ... )" + ] + }, + "lib/server.js": { + "29": [ + "debug('Server parameters: path: %s services: %j wsdl: %j', ... )" + ], + "34": [ + "server.listeners('request')" + ], + "36": [ + "server.removeAllListeners('request')" + ], + "37": [ + "server.addListener('request')" + ], + "64": [ + "self.log('info')" + ], + "70": [ + "self.log('info')" + ], + "72": [ + "res.setHeader('Content-Type')" + ], + "77": [ + "res.setHeader('Content-Type')" + ], + "84": [ + "req.on('data')" + ], + "88": [ + "req.on('end')" + ], + "98": [ + "self.log('received')" + ], + "107": [ + "self.log('replied')" + ], + "116": [ + "self.log('error')" + ], + "141": [ + "g.f('d40b6f905bf039c4d627ecafb7fdcac5')" + ], + "144": [ + "g.f('bcb4356ee2e7a196b9671acf3989741d')" + ], + "149": [ + "self.log('info')" + ], + "167": [ + "self.log('info')" + ], + "182": [ + "g.f('e158dd1d250f1cc3df497728da556be1')" + ], + "189": [ + "self.emit('request')" + ], + "190": [ + "self.emit('headers')" + ], + "225": [ + "self.emit('request')" + ], + "226": [ + "self.emit('headers')" + ], + "264": [ + "debug('Server operation: %s ', ... )" + ], + "266": [ + "debug('Server executeMethod: error: %s ', ... )" + ], + "288": [ + "debugDetail('Server handleResult. operationDescriptor: %j ', ... )" + ], + "291": [ + "debugDetail('Server handleResult. outputBodyDescriptor: %j ', ... )" + ], + "300": [ + "debug('Server soapNsURI: %s soapNsPrefix: %s', ... )" + ], + "311": [ + "debug('Server handleResult. xml: %s ', ... )" + ], + "328": [ + "headerElement.attribute('soap:mustUnderstand')", + "headerElement.element('wsse:Security')" + ], + "330": [ + "secElement.attribute('xmlns:wsse')", + "secElement.attribute('xmlns:wsu')" + ], + "338": [ + "secElement.attribute('wsu:Id')", + "secElement.element('wsu:Timestamp')" + ], + "339": [ + "tsElement.element('wsu:Created')" + ], + "340": [ + "tsElement.element('wsu:Expires')" + ], + "367": [ + "debugDetail('Server sendError. operationDescriptor: %j ', ... )" + ], + "387": [ + "debugDetail('Server sendError. faultDescriptor: %j ', ... )" + ], + "389": [ + "debug('Server sendError. error.Fault: %j ', ... )" + ], + "398": [ + "debug('Server sendError. Response envelope: %s ', ... )" + ] + }, + "src/server.js": { + "29": [ + "debug('Server parameters: path: %s services: %j wsdl: %j', ... )" + ], + "35": [ + "server.listeners('request')" + ], + "37": [ + "server.removeAllListeners('request')" + ], + "38": [ + "server.addListener('request')" + ], + "66": [ + "self.log('info')" + ], + "72": [ + "self.log('info')" + ], + "74": [ + "res.setHeader('Content-Type')" + ], + "79": [ + "res.setHeader('Content-Type')" + ], + "85": [ + "req.on('data')" + ], + "90": [ + "req.on('end')" + ], + "100": [ + "self.log('received')" + ], + "109": [ + "self.log('replied')" + ], + "119": [ + "self.log('error')" + ], + "143": [ + "g.f('d40b6f905bf039c4d627ecafb7fdcac5')" + ], + "146": [ + "g.f('bcb4356ee2e7a196b9671acf3989741d')" + ], + "151": [ + "self.log('info')" + ], + "169": [ + "self.log('info')" + ], + "185": [ + "g.f('e158dd1d250f1cc3df497728da556be1')" + ], + "192": [ + "self.emit('request')" + ], + "194": [ + "self.emit('headers')" + ], + "229": [ + "self.emit('request')" + ], + "231": [ + "self.emit('headers')" + ], + "268": [ + "debug('Server operation: %s ', ... )" + ], + "270": [ + "debug('Server executeMethod: error: %s ', ... )" + ], + "296": [ + "debugDetail('Server handleResult. operationDescriptor: %j ', ... )" + ], + "299": [ + "debugDetail('Server handleResult. outputBodyDescriptor: %j ', ... )" + ], + "308": [ + "debug('Server soapNsURI: %s soapNsPrefix: %s', ... )" + ], + "320": [ + "debug('Server handleResult. xml: %s ', ... )" + ], + "339": [ + "headerElement.element('wsse:Security')" + ], + "340": [ + "headerElement.attribute('soap:mustUnderstand')" + ], + "343": [ + "secElement.attribute('xmlns:wsse')" + ], + "345": [ + "secElement.attribute('xmlns:wsu')" + ], + "354": [ + "secElement.element('wsu:Timestamp')" + ], + "355": [ + "secElement.attribute('wsu:Id')" + ], + "356": [ + "tsElement.element('wsu:Created')" + ], + "357": [ + "tsElement.element('wsu:Expires')" + ], + "385": [ + "debugDetail('Server sendError. operationDescriptor: %j ', ... )" + ], + "407": [ + "debugDetail('Server sendError. faultDescriptor: %j ', ... )" + ], + "409": [ + "debug('Server sendError. error.Fault: %j ', ... )" + ], + "418": [ + "debug('Server sendError. Response envelope: %s ', ... )" + ] + }, + "lib/http.js": { + "80": [ + "debug('Http request: %j', ... )" + ], + "92": [ + "debug('Http response body: %j', ... )" + ], + "145": [ + "debugSensitive('NTLM options: %j for method: %s', ... )" + ], + "146": [ + "debug('httpntlm method: %s', ... )" + ] + }, + "src/http.js": { + "81": [ + "debug('Http request: %j', ... )" + ], + "93": [ + "debug('Http response body: %j', ... )" + ], + "147": [ + "debugSensitive('NTLM options: %j for method: %s', ... )" + ], + "148": [ + "debug('httpntlm method: %s', ... )" + ] + }, + "lib/parser/element.js": { + "81": [ + "indexOf('any')" + ], + "82": [ + "debug('Element %s is not allowed within %j', ... )" + ], + "89": [ + "debug('Element created: ')" + ], + "126": [ + "g.f('61b096fd390a169fc86698a3fe30387f')" + ], + "191": [ + "debug('Schema not found: %s (%s)', ... )" + ], + "219": [ + "debug('Schema %s not found: %s %s', ... )" + ], + "226": [ + "debug('Unknown element: %s %s', ... )" + ] + }, + "src/parser/element.js": { + "85": [ + "indexOf('any')" + ], + "86": [ + "debug('Element %s is not allowed within %j', ... )" + ], + "93": [ + "debug('Element created: ')" + ], + "131": [ + "g.f('61b096fd390a169fc86698a3fe30387f')" + ], + "198": [ + "debug('Schema not found: %s (%s)', ... )" + ], + "226": [ + "debug('Schema %s not found: %s %s', ... )" + ], + "233": [ + "debug('Unknown element: %s %s', ... )" + ] + }, + "lib/parser/helper.js": { + "95": [ + "crypto.createHash('sha1')" + ], + "98": [ + "pwHash.digest('base64')" + ] + }, + "lib/security/WSSecurity.js": { + "46": [ + "headerElement.element('wsse:Security')" + ], + "48": [ + "secElement.attribute('soap:actor')" + ], + "51": [ + "secElement.attribute('soap:mustUnderstand')" + ], + "54": [ + "secElement.attribute('xmlns:wsse')", + "secElement.attribute('xmlns:wsu')" + ], + "62": [ + "secElement.attribute('wsu:Id')", + "secElement.element('wsu:Timestamp')" + ], + "63": [ + "tsElement.element('wsu:Created')" + ], + "64": [ + "tsElement.element('wsu:Expires')" + ], + "67": [ + "secElement.element('wsse:UsernameToken')", + "secElement.attribute('wsu:Id')" + ], + "69": [ + "userNameElement.element('wsse:Username')" + ], + "71": [ + "userNameElement.element('wsu:Created')" + ], + "77": [ + "crypto.createHash('sha1')" + ], + "79": [ + "nHash.digest('base64')" + ], + "84": [ + "userNameElement.attribute('Type')", + "userNameElement.element('wsse:Password')" + ], + "87": [ + "userNameElement.attribute('EncodingType')", + "userNameElement.element('wsse:Nonce')" + ], + "90": [ + "userNameElement.attribute('Type')", + "userNameElement.element('wsse:Password')" + ], + "92": [ + "userNameElement.attribute('EncodingType')", + "userNameElement.element('wsse:Nonce')" + ] + }, + "lib/utils.js": { + "6": [ + "crypto.createHash('sha1')" + ], + "9": [ + "pwHash.digest('base64')" + ], + "14": [ + "crypto.createHash('sha1')" + ], + "17": [ + "pwHash.digest('base64')" + ] + }, + "src/parser/helper.js": { + "99": [ + "crypto.createHash('sha1')" + ], + "102": [ + "pwHash.digest('base64')" + ] + }, + "src/security/WSSecurity.js": { + "52": [ + "headerElement.element('wsse:Security')" + ], + "54": [ + "secElement.attribute('soap:actor')" + ], + "57": [ + "secElement.attribute('soap:mustUnderstand')" + ], + "61": [ + "secElement.attribute('xmlns:wsse')" + ], + "63": [ + "secElement.attribute('xmlns:wsu')" + ], + "72": [ + "secElement.element('wsu:Timestamp')" + ], + "73": [ + "secElement.attribute('wsu:Id')" + ], + "74": [ + "tsElement.element('wsu:Created')" + ], + "75": [ + "tsElement.element('wsu:Expires')" + ], + "78": [ + "secElement.element('wsse:UsernameToken')" + ], + "79": [ + "secElement.attribute('wsu:Id')" + ], + "81": [ + "userNameElement.element('wsse:Username')" + ], + "83": [ + "userNameElement.element('wsu:Created')" + ], + "89": [ + "crypto.createHash('sha1')" + ], + "91": [ + "nHash.digest('base64')" + ], + "96": [ + "userNameElement.element('wsse:Password')" + ], + "97": [ + "userNameElement.attribute('Type')" + ], + "102": [ + "userNameElement.element('wsse:Nonce')" + ], + "103": [ + "userNameElement.attribute('EncodingType')" + ], + "108": [ + "userNameElement.element('wsse:Password')" + ], + "109": [ + "userNameElement.attribute('Type')" + ], + "113": [ + "userNameElement.element('wsse:Nonce')" + ], + "114": [ + "userNameElement.attribute('EncodingType')" + ] + }, + "src/utils.js": { + "6": [ + "crypto.createHash('sha1')" + ], + "9": [ + "pwHash.digest('base64')" + ], + "14": [ + "crypto.createHash('sha1')" + ], + "21": [ + "pwHash.digest('base64')" + ] + }, + "lib/parser/qname.js": { + "27": [ + "g.f('39e07c5a6797c4923d6a924999b62f8c')" + ] + }, + "src/parser/qname.js": { + "28": [ + "g.f('39e07c5a6797c4923d6a924999b62f8c')" + ] + }, + "lib/parser/wsdl/definitions.js": { + "32": [ + "Schema('xs:schema')" + ] + }, + "src/parser/wsdl/definitions.js": { + "34": [ + "Schema('xs:schema')" + ] + }, + "lib/parser/wsdl/operation.js": { + "85": [ + "g.warn('da96ad47da6be6a613f921b260a33ce0')" + ], + "99": [ + "g.warn('da96ad47da6be6a613f921b260a33ce0')" + ], + "199": [ + "g.f('37e4bf66d90c313e7adb3317345be046')" + ], + "330": [ + "console.error('Document/literal part should use element')" + ], + "331": [ + "Error('Document/literal part should use element')" + ] + }, + "src/parser/wsdl/operation.js": { + "84": [ + "g.warn('da96ad47da6be6a613f921b260a33ce0')" + ], + "100": [ + "g.warn('da96ad47da6be6a613f921b260a33ce0')" + ], + "207": [ + "g.f('37e4bf66d90c313e7adb3317345be046')" + ], + "355": [ + "console.error('Document/literal part should use element')" + ], + "356": [ + "Error('Document/literal part should use element')" + ] + }, + "lib/parser/wsdl/parameter.js": { + "36": [ + "console.error('Unable to resolve message %s for', ... )" + ], + "37": [ + "Error('Unable to resolve message ')" + ], + "68": [ + "debug('Message not found: ')" + ], + "90": [ + "debug('Message not found: ')" + ] + }, + "src/parser/wsdl/parameter.js": { + "36": [ + "console.error('Unable to resolve message %s for', ... )" + ], + "37": [ + "Error('Unable to resolve message ')" + ], + "68": [ + "debug('Message not found: ')" + ], + "90": [ + "debug('Message not found: ')" + ] + }, + "lib/parser/xsd/keybase.js": { + "16": [ + "g.warn('1f2c65133b5bb463e7d1fceda5b31156')" + ], + "26": [ + "g.warn('1f2c65133b5bb463e7d1fceda5b31156')" + ], + "29": [ + "g.warn('46ad858fdf2e460aa3b626d6455362f2')" + ] + }, + "src/parser/xsd/keybase.js": { + "16": [ + "g.warn('1f2c65133b5bb463e7d1fceda5b31156')" + ], + "28": [ + "g.warn('1f2c65133b5bb463e7d1fceda5b31156')" + ], + "33": [ + "g.warn('46ad858fdf2e460aa3b626d6455362f2')" + ] + }, + "lib/parser/xsd/list.js": { + "26": [ + "g.warn('28c828192eb440b64b8efd7f08cc37b3')" + ], + "28": [ + "g.warn('d7bda8e2c3faafdf0988f8cb4719a01d')" + ], + "34": [ + "g.warn('97ed6b53b9b594fb90c6bfb2e0ba0286')" + ] + }, + "src/parser/xsd/list.js": { + "27": [ + "g.warn('28c828192eb440b64b8efd7f08cc37b3')" + ], + "30": [ + "g.warn('d7bda8e2c3faafdf0988f8cb4719a01d')" + ], + "36": [ + "g.warn('97ed6b53b9b594fb90c6bfb2e0ba0286')" + ] + }, + "lib/parser/xsd/restriction.js": { + "107": [ + "violations.push(' <= ')", + "violations.push('value is less or equal than minExclusive (')" + ], + "113": [ + "violations.push(' < ')", + "violations.push('value is less than minInclusive (')" + ], + "119": [ + "violations.push(' >= ')", + "violations.push('value is greater or equal than maxExclusive (')" + ], + "125": [ + "violations.push(' > ')", + "violations.push('value is greater than maxInclusive (')" + ], + "133": [ + "violations.push(' > ')", + "violations.push('value has more decimal places than allowed (')" + ], + "144": [ + "violations.push(' > ')", + "violations.push('value has more digits than allowed (')" + ], + "149": [ + "violations.push(' > ')", + "violations.push('value has more integer digits than allowed (')" + ], + "158": [ + "violations.push(' != ')", + "violations.push('lengths don't match (')" + ], + "164": [ + "violations.push(' > ')", + "violations.push('length is bigger than maxLength (')" + ], + "170": [ + "violations.push(' < ')", + "violations.push('length is smaller than minLength (')" + ], + "182": [ + "violations.push(' !match ')", + "violations.push('value doesn't match the required pattern (')" + ], + "188": [ + "violations.push(' is not in ')", + "violations.push('value is not in the list of valid values (')" + ], + "193": [ + "g.f('ad16b1c54d1a687cb4efc849e918816c')" + ] + }, + "src/parser/xsd/restriction.js": { + "109": [ + "violations.push(' <= ')", + "violations.push('value is less or equal than minExclusive (')" + ], + "115": [ + "violations.push(' < ')", + "violations.push('value is less than minInclusive (')" + ], + "121": [ + "violations.push(' >= ')", + "violations.push('value is greater or equal than maxExclusive (')" + ], + "127": [ + "violations.push(' > ')", + "violations.push('value is greater than maxInclusive (')" + ], + "135": [ + "violations.push(' > ')", + "violations.push('value has more decimal places than allowed (')" + ], + "146": [ + "violations.push(' > ')", + "violations.push('value has more digits than allowed (')" + ], + "151": [ + "violations.push(' > ')", + "violations.push('value has more integer digits than allowed (')" + ], + "160": [ + "violations.push(' != ')", + "violations.push('lengths don't match (')" + ], + "166": [ + "violations.push(' > ')", + "violations.push('length is bigger than maxLength (')" + ], + "172": [ + "violations.push(' < ')", + "violations.push('length is smaller than minLength (')" + ], + "184": [ + "violations.push(' !match ')", + "violations.push('value doesn't match the required pattern (')" + ], + "190": [ + "violations.push(' is not in ')", + "violations.push('value is not in the list of valid values (')" + ], + "195": [ + "g.f('ad16b1c54d1a687cb4efc849e918816c')" + ] + }, + "lib/parser/xsd.js": { + "11": [ + "SimpleType('xsd:simpleType')" + ] + }, + "src/parser/xsd.js": { + "11": [ + "SimpleType('xsd:simpleType')" + ] + }, + "lib/security/ClientSSLSecurity.js": { + "29": [ + "g.f('6623e372e766ea11d932836035404a2b')" + ], + "39": [ + "g.f('7f7cb47259df769f2d3b3f7133f1a1ea')" + ] + }, + "src/security/ClientSSLSecurity.js": { + "29": [ + "g.f('6623e372e766ea11d932836035404a2b')" + ], + "39": [ + "g.f('7f7cb47259df769f2d3b3f7133f1a1ea')" + ] + }, + "lib/security/ClientSSLSecurityPFX.js": { + "31": [ + "g.f('1b12432ead1b2b9902c4b9801aa0317b')" + ] + }, + "src/security/ClientSSLSecurityPFX.js": { + "31": [ + "g.f('1b12432ead1b2b9902c4b9801aa0317b')" + ] + }, + "lib/security/CookieSecurity.js": { + "6": [ + "cookie.hasOwnProperty('set-cookie')" + ] + }, + "src/security/CookieSecurity.js": { + "6": [ + "cookie.hasOwnProperty('set-cookie')" + ] + }, + "lib/security/WSSecurityCert.js": { + "5": [ + "optional('strong-ursa')" + ], + "41": [ + "g.f('552f3502256707b8c5b12ddb64e3f74e')" + ], + "44": [ + "publicP12PEM.replace('-----BEGIN CERTIFICATE-----')" + ], + "52": [ + "addReference('//*[local-name(.)='Body']')" + ], + "53": [ + "addReference('//*[local-name(.)='Timestamp']')" + ], + "75": [ + "headerElement.element('wsse:Security')", + "headerElement.attribute('xmlns:wsse')" + ], + "76": [ + "secElement.attribute('EncodingType')", + "secElement.element('wsse:BinarySecurityToken')" + ], + "77": [ + "secElement.attribute('wsu:Id')", + "secElement.element('wsu:Timestamp')" + ], + "78": [ + "tsElement.element('wsu:Created')" + ], + "79": [ + "tsElement.element('wsu:Expires')" + ] + }, + "src/security/WSSecurityCert.js": { + "5": [ + "optional('strong-ursa')" + ], + "46": [ + "g.f('552f3502256707b8c5b12ddb64e3f74e')" + ], + "50": [ + "publicP12PEM.replace('-----BEGIN CERTIFICATE-----')" + ], + "61": [ + "addReference('//*[local-name(.)='Body']')" + ], + "62": [ + "addReference('//*[local-name(.)='Timestamp']')" + ], + "85": [ + "headerElement.element('wsse:Security')" + ], + "86": [ + "headerElement.attribute('xmlns:wsse')" + ], + "91": [ + "secElement.element('wsse:BinarySecurityToken')" + ], + "92": [ + "secElement.attribute('EncodingType')" + ], + "98": [ + "secElement.element('wsu:Timestamp')" + ], + "99": [ + "secElement.attribute('wsu:Id')" + ], + "100": [ + "tsElement.element('wsu:Created')" + ], + "101": [ + "tsElement.element('wsu:Expires')" + ] + }, + "lib/soap.js": { + "23": [ + "debug('_requestWSDL, wsdl in cache %s', ... )" + ], + "46": [ + "debug('createClient params: wsdl url: %s client options: %j', ... )" + ], + "53": [ + "debug('listen params: pathOrOptions: %j services: %j xml: %j', ... )" + ] + }, + "src/soap.js": { + "23": [ + "debug('_requestWSDL, wsdl in cache %s', ... )" + ], + "47": [ + "debug('createClient params: wsdl url: %s client options: %j', ... )" + ], + "54": [ + "debug('listen params: pathOrOptions: %j services: %j xml: %j', ... )" + ] + }, + "lib/strip-bom.js": { + "13": [ + "Error('Invalid input, only string allowed')" + ] + }, + "src/strip-bom.js": { + "12": [ + "Error('Invalid input, only string allowed')" + ] + }, + "soap-stub.js": { + "48": [ + "g.f('forced error on {{createClient}}')" + ], + "57": [ + "g.f('no client stubbed for %s', ... )" + ] + } +} diff --git a/node_modules/strong-soap/lib/base.js b/node_modules/strong-soap/lib/base.js new file mode 100644 index 00000000..e842bcd9 --- /dev/null +++ b/node_modules/strong-soap/lib/base.js @@ -0,0 +1,135 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var EventEmitter = require('events').EventEmitter; +var NamespaceContext = require('./parser/nscontext'); +var SOAPElement = require('./soapModel').SOAPElement; +var xmlBuilder = require('xmlbuilder'); +var XMLHandler = require('./parser/xmlHandler'); + +class Base extends EventEmitter { + constructor(wsdl, options) { + super(); + this.wsdl = wsdl; + this._initializeOptions(options); + this.soapHeaders = []; + this.httpHeaders = {}; + this.bodyAttributes = []; + } + + addSoapHeader(value, qname) { + var header = new SOAPElement(value, qname, null); + return this.soapHeaders.push(header) - 1; + } + + changeSoapHeader(index, value, qname) { + var header = new SOAPElement(value, qname, null); + this.soapHeaders[index] = header; + } + + getSoapHeaders() { + return this.soapHeaders; + } + + clearSoapHeaders() { + this.soapHeaders = []; + } + + setHttpHeader(name, value) { + this.httpHeaders[name] = String(value); + } + + addHttpHeader(name, value) { + var val = this.httpHeaders[name]; + if (val != null) { + this.httpHeaders[name] = val + ', ' + value; + } else { + this.httpHeaders[name] = String(value); + } + } + + getHttpHeaders() { + return this.httpHeaders; + } + + clearHttpHeaders() { + this.httpHeaders = {}; + } + + _initializeOptions(options) { + options = options || {}; + this.wsdl.options.attributesKey = options.attributesKey || 'attributes'; + this.wsdl.options.envelopeKey = options.envelopeKey || 'soap'; + this.wsdl.options.forceSoapVersion = options.forceSoapVersion; + } + + static createSOAPEnvelope(prefix, nsURI) { + prefix = prefix || 'soap'; + nsURI = nsURI || 'http://schemas.xmlsoap.org/soap/envelope/'; + var doc = xmlBuilder.create(prefix + ':Envelope', { version: '1.0', encoding: 'UTF-8', standalone: true }); + doc.attribute('xmlns:' + prefix, nsURI); + let header = doc.element(prefix + ':Header'); + let body = doc.element(prefix + ':Body'); + return { + body: body, + header: header, + doc: doc + }; + } + + findElement(nsURI, name) { + var schemas = this.wsdl.definitions.schemas; + var schema = schemas[nsURI]; + return schema && schema.elements[name]; + } + + createNamespaceContext(soapNsPrefix, soapNsURI) { + var nsContext = new NamespaceContext(); + nsContext.declareNamespace(soapNsPrefix, soapNsURI); + + var namespaces = this.wsdl.definitions.xmlns || {}; + for (var prefix in namespaces) { + if (prefix === '') continue; + var nsURI = namespaces[prefix]; + switch (nsURI) { + case "http://xml.apache.org/xml-soap": // apachesoap + case "http://schemas.xmlsoap.org/wsdl/": // wsdl + case "http://schemas.xmlsoap.org/wsdl/soap/": // wsdlsoap + case "http://schemas.xmlsoap.org/wsdl/soap12/": // wsdlsoap12 + case "http://schemas.xmlsoap.org/soap/encoding/": // soapenc + case "http://www.w3.org/2001/XMLSchema": + // xsd + continue; + } + if (~nsURI.indexOf('http://schemas.xmlsoap.org/')) continue; + if (~nsURI.indexOf('http://www.w3.org/')) continue; + if (~nsURI.indexOf('http://xml.apache.org/')) continue; + nsContext.addNamespace(prefix, nsURI); + } + return nsContext; + } + + addSoapHeadersToEnvelope(soapHeaderElement, xmlHandler) { + for (let i = 0, n = this.soapHeaders.length; i < n; i++) { + let soapHeader = this.soapHeaders[i]; + let elementDescriptor; + if (typeof soapHeader.value === 'object') { + if (soapHeader.qname && soapHeader.qname.nsURI) { + let element = this.findElement(soapHeader.qname.nsURI, soapHeader.qname.name); + elementDescriptor = element && element.describe(this.wsdl.definitions); + } + xmlHandler.jsonToXml(soapHeaderElement, null, elementDescriptor, soapHeader.value); + } else { + //soapHeader has XML value + XMLHandler.parseXml(soapHeaderElement, soapHeader.xml); + } + } + } + +} + +module.exports = Base; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/client.js b/node_modules/strong-soap/lib/client.js new file mode 100644 index 00000000..d036055b --- /dev/null +++ b/node_modules/strong-soap/lib/client.js @@ -0,0 +1,347 @@ +// Copyright IBM Corp. 2016,2019. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var g = require('./globalize'); +var HttpClient = require('./http'), + assert = require('assert'), + xmlBuilder = require('xmlbuilder'), + XMLHandler = require('./parser/xmlHandler'), + NamespaceContext = require('./parser/nscontext'), + Operation = require('./parser/wsdl/operation'), + SOAPElement = require('./soapModel').SOAPElement, + Base = require('./base'), + util = require('util'), + _ = require('lodash'), + debug = require('debug')('strong-soap:client'), + debugDetail = require('debug')('strong-soap:client:detail'), + debugSensitive = require('debug')('strong-soap:client:sensitive'), + utils = require('./utils'); + +class Client extends Base { + constructor(wsdl, endpoint, options) { + super(wsdl, options); + options = options || {}; + this.xmlHandler = new XMLHandler(wsdl.definitions.schemas, options); + this._initializeServices(endpoint); + this.httpClient = options.httpClient || new HttpClient(options); + } + + setEndpoint(endpoint) { + this.endpoint = endpoint; + this._initializeServices(endpoint); + } + + describe() { + return this.wsdl.describeServices(); + } + + setSecurity(security) { + this.security = security; + } + + setSOAPAction(soapAction) { + this.SOAPAction = soapAction; + } + + _initializeServices(endpoint) { + var definitions = this.wsdl.definitions; + var services = definitions.services; + for (var name in services) { + this[name] = this._defineService(services[name], endpoint); + } + } + + _defineService(service, endpoint) { + var ports = service.ports; + var def = {}; + for (var name in ports) { + def[name] = this._definePort(ports[name], endpoint ? endpoint : ports[name].location); + } + return def; + } + + _definePort(port, endpoint) { + var location = endpoint; + var binding = port.binding; + var operations = binding.operations; + var def = {}; + for (var name in operations) { + def[name] = this._defineOperation(operations[name], location); + this[name] = def[name]; + } + return def; + } + + _defineOperation(operation, location) { + var self = this; + var temp; + return function (args, callback, options, extraHeaders) { + if (!args) args = {}; + if (typeof args === 'function') { + callback = args; + args = {}; + } else if (typeof options === 'function') { + temp = callback; + callback = options; + options = temp; + } else if (typeof extraHeaders === 'function') { + temp = callback; + callback = extraHeaders; + extraHeaders = options; + options = temp; + } else if (typeof callback === 'object') { + extraHeaders = options; + options = callback; + callback = undefined; + } + callback = callback || utils.createPromiseCallback(); + self._invoke(operation, args, location, callback, options, extraHeaders); + return callback.promise; + }; + } + + _invoke(operation, args, location, callback, options, extraHeaders) { + var self = this, + name = operation.$name, + input = operation.input, + output = operation.output, + style = operation.style, + defs = this.wsdl.definitions, + ns = defs.$targetNamespace, + encoding = '', + message = '', + xml = null, + req = null, + soapAction, + headers = { + 'Content-Type': 'text/xml; charset=utf-8' + }; + + debug('client request. operation: %s args: %j options: %j extraHeaders: %j', operation.name, args, options, extraHeaders); + + var soapNsURI = 'http://schemas.xmlsoap.org/soap/envelope/'; + var soapNsPrefix = this.wsdl.options.envelopeKey || 'soap'; + + var soapVersion = this.wsdl.options.forceSoapVersion || operation.soapVersion; + + if (soapVersion === '1.2') { + headers['Content-Type'] = 'application/soap+xml; charset=utf-8'; + soapNsURI = 'http://www.w3.org/2003/05/soap-envelope'; + } + + debug('client request. soapNsURI: %s soapNsPrefix: %s ', soapNsURI, soapNsPrefix); + + if (this.SOAPAction) { + soapAction = this.SOAPAction; + } else if (operation.soapAction != null) { + soapAction = operation.soapAction; + } else { + soapAction = (ns.lastIndexOf("/") !== ns.length - 1 ? ns + "/" : ns) + name; + } + + if (soapVersion !== '1.2' || operation.soapActionRequired) { + headers.SOAPAction = '"' + soapAction + '"'; + } + + debug('client request. soapAction: %s', soapAction); + + options = options || {}; + debugSensitive('client request. options: %j', options); + + //Add extra headers + for (var header in this.httpHeaders) { + headers[header] = this.httpHeaders[header]; + } + for (var attr in extraHeaders) { + headers[attr] = extraHeaders[attr]; + } + + debug('client request. headers: %j', headers); + + //Unlike other security objects, NTLMSecurity is passed in through client options rather than client.setSecurity(ntlmSecurity) as some + //remote wsdl retrieval needs NTLM authentication before client object gets created. Hence, set NTLMSecurity instance to the client object + //so that it will be similar to other security objects from this point onwards. + if (self.httpClient.options && self.httpClient.options.NTLMSecurity) { + self.security = self.httpClient.options.NTLMSecurity; + } + + // Allow the security object to add headers + if (self.security && self.security.addHttpHeaders) { + self.security.addHttpHeaders(headers); + debugSensitive('client request. options: %j', options); + } + if (self.security && self.security.addOptions) { + self.security.addOptions(options); + debugSensitive('client request. options: %j', options); + } + + var nsContext = this.createNamespaceContext(soapNsPrefix, soapNsURI); + var xmlHandler = this.xmlHandler || new XMLHandler(this.wsdl.schemas, options); + var envelope = Client.createSOAPEnvelope(soapNsPrefix, soapNsURI); + + var soapHeaderElement = envelope.header; + var soapBodyElement = envelope.body; + //add soapHeaders to envelope. Header can be xml, or JSON object which may or may not be described in WSDL/XSD. + this.addSoapHeadersToEnvelope(soapHeaderElement, this.xmlHandler); + + if (self.security && self.security.addSoapHeaders) { + xml = self.security.addSoapHeaders(envelope.header); + } + + let schemas = defs.schemas; + + for (let uri in schemas) { + let complexTypes = schemas[uri].complexTypes; + if (complexTypes) { + for (let type in complexTypes) { + complexTypes[type].describe(this.wsdl.definitions); + } + } + } + + for (let uri in schemas) { + let complexTypes = schemas[uri].complexTypes; + if (complexTypes) { + for (let type in complexTypes) { + complexTypes[type].describeChildren(this.wsdl.definitions); + } + } + } + + var operationDescriptor = operation.describe(this.wsdl.definitions); + debugDetail('client request. operationDescriptor: %j', operationDescriptor); + + var inputBodyDescriptor = operationDescriptor.input.body; + debug('client request. inputBodyDescriptor: %j', inputBodyDescriptor); + + var inputHeadersDescriptor = operationDescriptor.input.headers; + + debug('client request, calling jsonToXml. args: %j', args); + xmlHandler.jsonToXml(soapBodyElement, nsContext, inputBodyDescriptor, args); + + if (self.security && self.security.postProcess) { + self.security.postProcess(envelope.header, envelope.body); + } + + //Bydefault pretty print is true and request envelope is created with newlines and indentations + var prettyPrint = true; + //some web services don't accept request envelope with newlines and indentations in which case user has to set {prettyPrint: false} as client option + if (self.httpClient.options && self.httpClient.options.prettyPrint !== undefined) { + prettyPrint = self.httpClient.options.prettyPrint; + } + + message = envelope.body.toString({ pretty: prettyPrint }); + xml = envelope.doc.end({ pretty: prettyPrint }); + + debug('Request envelope: %s', xml); + + self.lastMessage = message; + self.lastRequest = xml; + self.lastEndpoint = location; + + self.emit('message', message); + self.emit('request', xml); + + var tryJSONparse = function tryJSONparse(body) { + try { + return JSON.parse(body); + } catch (err) { + return undefined; + } + }; + + req = self.httpClient.request(location, xml, function (err, response, body) { + var result; + var obj; + self.lastResponse = body; + self.lastResponseHeaders = response && response.headers; + self.lastElapsedTime = response && response.elapsedTime; + self.emit('response', body, response); + + debug('client response. response: %j body: %j', response, body); + + if (err) { + callback(err); + } else { + + //figure out if this is a Fault response or normal output from the server. + //There seem to be no good way to figure this out other than + //checking for element in server response. + if (body.indexOf('') > -1 || body.indexOf('') > -1) { + var outputEnvDescriptor = operationDescriptor.faultEnvelope; + } else { + var outputEnvDescriptor = operationDescriptor.outputEnvelope; + } + try { + debugDetail('client response. outputEnvDescriptor: %j', outputEnvDescriptor); + obj = xmlHandler.xmlToJson(nsContext, body, outputEnvDescriptor); + } catch (error) { + // When the output element cannot be looked up in the wsdl and the body is JSON + // instead of sending the error, we pass the body in the response. + debug('client response. error message: %s', error.message); + + if (!output) { + debug('client response. output not present'); + // If the response is JSON then return it as-is. + var json = _.isObject(body) ? body : tryJSONparse(body); + if (json) { + return callback(null, response, json); + } + } + //Reaches here for Fault processing as well since Fault is thrown as an error in xmlHandler.xmlToJson(..) function. + error.response = response; + error.body = body; + self.emit('soapError', error); + return callback(error, response, body); + } + + if (!output) { + // one-way, no output expected + return callback(null, null, body, obj.Header); + } + if (typeof obj.Body !== 'object') { + var error = new Error(g.f('Cannot parse response')); + error.response = response; + error.body = body; + return callback(error, obj, body); + } + + var outputBodyDescriptor = operationDescriptor.output.body; + var outputHeadersDescriptor = operationDescriptor.output.headers; + + if (outputBodyDescriptor.elements.length) { + result = obj.Body[outputBodyDescriptor.elements[0].qname.name]; + } + // RPC/literal response body may contain elements with added suffixes I.E. + // 'Response', or 'Output', or 'Out' + // This doesn't necessarily equal the ouput message name. See WSDL 1.1 Section 2.4.5 + if (!result) { + var outputName = output.$name && output.$name.replace(/(?:Out(?:put)?|Response)$/, ''); + result = obj.Body[outputName]; + } + if (!result) { + ['Response', 'Out', 'Output'].forEach(function (term) { + if (obj.Body.hasOwnProperty(name + term)) { + return result = obj.Body[name + term]; + } + }); + } + debug('client response. result: %j body: %j obj.Header: %j', result, body, obj.Header); + + callback(null, result, body, obj.Header); + } + }, headers, options, self); + + // Added mostly for testability, but possibly useful for debugging + if (req != null) { + self.lastRequestHeaders = req.headers; + } + debug('client response. lastRequestHeaders: %j', self.lastRequestHeaders); + } +} + +module.exports = Client; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/globalize.js b/node_modules/strong-soap/lib/globalize.js new file mode 100644 index 00000000..54e86ecd --- /dev/null +++ b/node_modules/strong-soap/lib/globalize.js @@ -0,0 +1,12 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var path = require('path'); +var SG = require('strong-globalize'); + +SG.SetRootDir(path.join(__dirname, '..'), { autonomousMsgLoading: 'all' }); +module.exports = SG(); \ No newline at end of file diff --git a/node_modules/strong-soap/lib/http.js b/node_modules/strong-soap/lib/http.js new file mode 100644 index 00000000..0556c099 --- /dev/null +++ b/node_modules/strong-soap/lib/http.js @@ -0,0 +1,165 @@ +// Copyright IBM Corp. 2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var url = require('url'); +var req = require('request'); +var debug = require('debug')('strong-soap:http'); +var debugSensitive = require('debug')('strong-soap:http:sensitive'); +var httpntlm = require('httpntlm'); + +var VERSION = require('../package.json').version; + +/** + * A class representing the http client + * @param {Object} [options] Options object. It allows the customization of + * `request` module + * + * @constructor + */ +class HttpClient { + constructor(options) { + this.options = options || {}; + this._request = options.request || req; + } + + /** + * Build the HTTP request (method, uri, headers, ...) + * @param {String} rurl The resource url + * @param {Object|String} data The payload + * @param {Object} exheaders Extra http headers + * @param {Object} exoptions Extra options + * @returns {Object} The http request object for the `request` module + */ + buildRequest(rurl, data, exheaders, exoptions) { + var curl = url.parse(rurl); + var secure = curl.protocol === 'https:'; + var host = curl.hostname; + var port = parseInt(curl.port, 10); + var path = [curl.pathname || '/', curl.search || '', curl.hash || ''].join(''); + var method = data ? 'POST' : 'GET'; + var headers = { + 'User-Agent': 'strong-soap/' + VERSION, + 'Accept': 'text/html,application/xhtml+xml,application/xml,text/xml;q=0.9,*/*;q=0.8', + 'Accept-Encoding': 'none', + 'Accept-Charset': 'utf-8', + 'Connection': 'close', + 'Host': host + (isNaN(port) ? '' : ':' + port) + }; + var attr; + var header; + var mergeOptions = ['headers']; + + if (typeof data === 'string') { + headers['Content-Length'] = Buffer.byteLength(data, 'utf8'); + headers['Content-Type'] = 'application/x-www-form-urlencoded'; + } + + exheaders = exheaders || {}; + for (attr in exheaders) { + headers[attr] = exheaders[attr]; + } + + var options = { + uri: curl, + method: method, + headers: headers, + followAllRedirects: true + }; + + options.body = data; + + exoptions = exoptions || {}; + for (attr in exoptions) { + if (mergeOptions.indexOf(attr) !== -1) { + for (header in exoptions[attr]) { + options[attr][header] = exoptions[attr][header]; + } + } else { + options[attr] = exoptions[attr]; + } + } + debug('Http request: %j', options); + return options; + } + + /** + * Handle the http response + * @param {Object} The req object + * @param {Object} res The res object + * @param {Object} body The http body + * @param {Object} The parsed body + */ + handleResponse(req, res, body) { + debug('Http response body: %j', body); + if (typeof body === 'string') { + // Remove any extra characters that appear before or after the SOAP + // envelope. + var match = body.match(/(?:<\?[^?]*\?>[\s]*)?<([^:]*):Envelope([\S\s]*)<\/\1:Envelope>/i); + if (match) { + body = match[0]; + } + } + return body; + } + + //check if NTLM authentication needed + isNtlmAuthRequired(ntlmSecurity, methodName) { + //if ntlmSecurity is not set, then remote web service is not NTLM authenticated Web Service + if (ntlmSecurity == null) { + return false; + } else if (methodName === 'GET' && (ntlmSecurity.wsdlAuthRequired == null || ntlmSecurity.wsdlAuthRequired === false)) { + //In some WebServices, getting remote WSDL is not NTLM authenticated. Only WebService invocation is NTLM authenticated. + return false; + } + //need NTLM authentication for both 'GET' (remote wsdl retrieval) and 'POST' (Web Service invocation) + return true; + } + + request(rurl, data, callback, exheaders, exoptions) { + var self = this; + var options = self.buildRequest(rurl, data, exheaders, exoptions); + var headers = options.headers; + var req; + + //typically clint.js would do addOptions() if security is set in order to get all security options added to options{}. But client.js + //addOptions() code runs after this code is trying to contact server to load remote WSDL, hence we have NTLM authentication + //object passed in as option to createClient() call for now. Revisit. + var ntlmSecurity = this.options.NTLMSecurity; + var ntlmAuth = self.isNtlmAuthRequired(ntlmSecurity, options.method); + if (!ntlmAuth) { + req = self._request(options, function (err, res, body) { + if (err) { + return callback(err); + } + body = self.handleResponse(req, res, body); + callback(null, res, body); + }); + } else { + //httpntlm code needs 'url' in options{}. It should be plain string, not parsed uri + options.url = rurl; + options.username = ntlmSecurity.username; + options.password = ntlmSecurity.password; + options.domain = ntlmSecurity.domain; + options.workstation = ntlmSecurity.workstation; + //httpntlm code uses lower case for method names - 'get', 'post' etc + var method = options.method.toLocaleLowerCase(); + debugSensitive('NTLM options: %j for method: %s', options, method); + debug('httpntlm method: %s', method); + req = httpntlm['method'](method, options, function (err, res) { + if (err) { + return callback(err); + } + var body = self.handleResponse(req, res, res.body); + callback(null, res, body); + }); + } + + return req; + } +} + +module.exports = HttpClient; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/element.js b/node_modules/strong-soap/lib/parser/element.js new file mode 100644 index 00000000..ec258839 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/element.js @@ -0,0 +1,238 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var g = require('../globalize'); +var assert = require('assert'); +var QName = require('./qname'); +var typeRegistry = require('./typeRegistry'); +var helper = require('./helper'); +var xsd = require('./xsd'); +var debug = require('debug')('strong-soap:wsdl:element'); + +var EMPTY_PREFIX = helper.EMPTY_PREFIX; +var namespaces = helper.namespaces; + +/** + * Base class for all elements of WSDL/XSD + */ +class Element { + constructor(nsName, attrs, options) { + var qname = QName.parse(nsName); + + this.nsName = nsName; + this.prefix = qname.prefix; + this.name = qname.name; + this.nsURI = ''; + this.parent = null; + this.children = []; + this.xmlns = {}; + + if (this.constructor.elementName) { + assert(this.name === this.constructor.elementName, 'Invalid element name: ' + this.name); + } + + this._initializeOptions(options); + + for (var key in attrs) { + var match = /^xmlns:?(.*)$/.exec(key); + if (match) { + if (attrs[key] === namespaces.xsd_rc) { + // Handle http://www.w3.org/2000/10/XMLSchema + attrs[key] = namespaces.xsd; + } + if (attrs[key] === namespaces.xsi_rc) { + // Handle http://www.w3.org/2000/10/XMLSchema-instance + attrs[key] = namespaces.xsi; + } + this.xmlns[match[1] ? match[1] : EMPTY_PREFIX] = attrs[key]; + } else { + if (key === 'value') { + this[this.valueKey] = attrs[key]; + } else { + this['$' + key] = attrs[key]; + } + } + } + if (this.$targetNamespace) { + this.targetNamespace = this.$targetNamespace; + } + } + + _initializeOptions(options) { + if (options) { + this.valueKey = options.valueKey || '$value'; + this.xmlKey = options.xmlKey || '$xml'; + this.ignoredNamespaces = options.ignoredNamespaces || []; + this.forceSoapVersion = options.forceSoapVersion; + } else { + this.valueKey = '$value'; + this.xmlKey = '$xml'; + this.ignoredNamespaces = []; + } + } + + startElement(stack, nsName, attrs, options) { + if (!this.constructor.allowedChildren) return; + + var child; + var parent = stack[stack.length - 1]; + + var qname = this._qnameFor(stack, nsName, attrs, options); + var ElementType = typeRegistry.getElementType(qname); + if (this.constructor.allowedChildren.indexOf(qname.name) === -1 && this.constructor.allowedChildren.indexOf('any') === -1) { + debug('Element %s is not allowed within %j', qname, this.nsName); + } + + if (ElementType) { + child = new ElementType(nsName, attrs, options); + child.nsURI = qname.nsURI; + child.targetNamespace = attrs.targetNamespace || this.getTargetNamespace(); + debug('Element created: ', child); + child.parent = parent; + stack.push(child); + } else { + this.unexpected(nsName); + } + } + + endElement(stack, nsName) { + if (this.nsName === nsName) { + if (stack.length < 2) return; + var parent = stack[stack.length - 2]; + if (this !== stack[0]) { + helper.extend(stack[0].xmlns, this.xmlns); + parent.children.push(this); + parent.addChild(this); + } + stack.pop(); + } + } + + _qnameFor(stack, nsName, attrs, options) { + // Create a dummy element to help resolve the XML namespace + var child = new Element(nsName, attrs, options); + var parent = stack[stack.length - 1]; + child.parent = parent; + + var qname = QName.parse(nsName); + qname.nsURI = child.getNamespaceURI(qname.prefix); + return qname; + } + + addChild(child) { + return; + } + + unexpected(name) { + throw new Error(g.f('Found unexpected element (%s) inside %s', name, this.nsName)); + } + + describe(definitions) { + return this.$name || this.name; + } + + /** + * Look up the namespace by prefix + * @param {string} prefix Namespace prefix + * @returns {string} Namespace + */ + getNamespaceURI(prefix) { + if (prefix === 'xml') return helper.namespaces.xml; + var nsURI = null; + if (this.xmlns && prefix in this.xmlns) { + nsURI = this.xmlns[prefix]; + } else { + if (this.parent) { + return this.parent.getNamespaceURI(prefix); + } + } + return nsURI; + } + + /** + * Get the target namespace URI + * @returns {string} Target namespace URI + */ + getTargetNamespace() { + if (this.targetNamespace) { + return this.targetNamespace; + } else if (this.parent) { + return this.parent.getTargetNamespace(); + } + return null; + } + + /** + * Get the qualified name + * @returns {QName} Qualified name + */ + getQName() { + return new QName(this.targetNamespace, this.$name); + } + + /** + * Resolve a schema object by qname + * @param schemas + * @param elementType + * @param nsName + * @returns {*} + */ + resolveSchemaObject(schemas, elementType, nsName) { + var qname = QName.parse(nsName); + var nsURI; + if (qname.prefix === 'xml') return null; + if (qname.prefix) nsURI = this.getNamespaceURI(qname.prefix);else nsURI = this.getTargetNamespace(); + qname.nsURI = nsURI; + var name = qname.name; + if (nsURI === helper.namespaces.xsd && (elementType === 'simpleType' || elementType === 'type')) { + return xsd.getBuiltinType(name); + } + var schema = schemas[nsURI]; + if (!schema) { + debug('Schema not found: %s (%s)', qname, elementType); + return null; + } + var found = null; + switch (elementType) { + case 'element': + found = schema.elements[name]; + break; + case 'type': + found = schema.complexTypes[name] || schema.simpleTypes[name]; + break; + case 'simpleType': + found = schema.simpleTypes[name]; + break; + case 'complexType': + found = schema.complexTypes[name]; + break; + case 'group': + found = schema.groups[name]; + break; + case 'attribute': + found = schema.attributes[name]; + break; + case 'attributeGroup': + found = schema.attributeGroups[name]; + break; + } + if (!found) { + debug('Schema %s not found: %s %s', elementType, nsURI, nsName); + return null; + } + return found; + } + + postProcess(definitions) { + debug('Unknown element: %s %s', this.nsURI, this.nsName); + } +} + +Element.EMPTY_PREFIX = EMPTY_PREFIX; +Element.namespaces = namespaces; + +module.exports = Element; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/helper.js b/node_modules/strong-soap/lib/parser/helper.js new file mode 100644 index 00000000..9b8bc136 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/helper.js @@ -0,0 +1,161 @@ +// Copyright IBM Corp. 2016,2019. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +// Primitive data types + +var primitiveDataTypes = { + string: String, + boolean: Boolean, + decimal: Number, + float: Number, + double: Number, + duration: Number, + dateTime: Date, + time: Date, + date: Date, + gYearMonth: Number, + gYear: Number, + gMonthDay: Number, + gDay: Number, + gMonth: Number, + hexBinary: String, + base64Binary: String, + anyURI: String, + QName: String, + NOTATION: String +}; + +// Derived data types +var derivedDataTypes = { + normalizedString: String, + token: String, + language: String, + NMTOKEN: String, + NMTOKENS: String, + Name: String, + NCName: String, + ID: String, + IDREF: String, + IDREFS: String, + ENTITY: String, + ENTITIES: String, + integer: Number, + nonPositiveInteger: Number, + negativeInteger: Number, + long: Number, + int: Number, + short: Number, + byte: Number, + nonNegativeInteger: Number, + unsignedLong: Number, + unsignedInt: Number, + unsignedShort: Number, + unsignedByte: Number, + positiveInteger: Number +}; + +// Built-in data types +var schemaTypes = {}; + +for (let s in primitiveDataTypes) { + schemaTypes[s] = primitiveDataTypes[s]; +} +for (let s in derivedDataTypes) { + schemaTypes[s] = derivedDataTypes[s]; +} + +var namespaces = { + wsdl: 'http://schemas.xmlsoap.org/wsdl/', + soap: 'http://schemas.xmlsoap.org/wsdl/soap/', + soap12: 'http://schemas.xmlsoap.org/wsdl/soap12/', + http: 'http://schemas.xmlsoap.org/wsdl/http/', + mime: 'http://schemas.xmlsoap.org/wsdl/mime/', + soapenc: 'http://schemas.xmlsoap.org/soap/encoding/', + soapenv: 'http://schemas.xmlsoap.org/soap/envelope/', + xsi_rc: 'http://www.w3.org/2000/10/XMLSchema-instance', + xsd_rc: 'http://www.w3.org/2000/10/XMLSchema', + xsd: 'http://www.w3.org/2001/XMLSchema', + xsi: 'http://www.w3.org/2001/XMLSchema-instance', + xml: 'http://www.w3.org/XML/1998/namespace' +}; + +function xmlEscape(obj) { + if (typeof obj === 'string') { + if (obj.substr(0, 9) === '") { + return obj; + } + return obj.replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"').replace(/'/g, '''); + } + + return obj; +} + +var crypto = require('crypto'); +exports.passwordDigest = function passwordDigest(nonce, created, password) { + // digest = base64 ( sha1 ( nonce + created + password ) ) + var pwHash = crypto.createHash('sha1'); + var rawNonce = Buffer.from(nonce || '', 'base64').toString('binary'); + pwHash.update(rawNonce + created + password); + return pwHash.digest('base64'); +}; + +var EMPTY_PREFIX = ''; // Prefix for targetNamespace + +exports.EMPTY_PREFIX = EMPTY_PREFIX; + +/** + * Find a key from an object based on the value + * @param {Object} Namespace prefix/uri mapping + * @param {*} nsURI value + * @returns {String} The matching key + */ +exports.findPrefix = function (xmlnsMapping, nsURI) { + for (var n in xmlnsMapping) { + if (n === EMPTY_PREFIX) continue; + if (xmlnsMapping[n] === nsURI) return n; + } +}; + +exports.extend = function extend(base, obj) { + if (base !== null && typeof base === "object" && obj !== null && typeof obj === "object") { + Object.keys(obj).forEach(function (key) { + if (!base.hasOwnProperty(key)) base[key] = obj[key]; + }); + } + return base; +}; + +exports.schemaTypes = schemaTypes; +exports.xmlEscape = xmlEscape; +exports.namespaces = namespaces; + +class _Set { + constructor() { + this.set = typeof Set === 'function' ? new Set() : []; + } + + add(val) { + if (Array.isArray(this.set)) { + if (this.set.indexOf(val) === -1) { + this.set.push(val); + } + } else { + this.set.add(val); + } + return this; + } + + has(val) { + if (Array.isArray(this.set)) { + return this.set.indexOf(val) !== -1; + } else { + return this.set.has(val); + } + } +} + +exports.Set = _Set; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/index.js b/node_modules/strong-soap/lib/parser/index.js new file mode 100644 index 00000000..f53dae2a --- /dev/null +++ b/node_modules/strong-soap/lib/parser/index.js @@ -0,0 +1,11 @@ +'use strict'; + +// Copyright IBM Corp. 2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +exports.QName = require('./qname'); +exports.NamespaceContext = require('./nscontext'); +exports.WSDL = require('./wsdl'); +exports.XMLHandler = require('./xmlHandler'); \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/nscontext.js b/node_modules/strong-soap/lib/parser/nscontext.js new file mode 100644 index 00000000..b3905c3f --- /dev/null +++ b/node_modules/strong-soap/lib/parser/nscontext.js @@ -0,0 +1,300 @@ +// Copyright IBM Corp. 2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +/** + * Scope for XML namespaces + * @param {NamespaceScope} [parent] Parent scope + * @returns {NamespaceScope} + * @constructor + */ + +class NamespaceScope { + constructor(parent) { + this.parent = parent; + this.namespaces = {}; + this.prefixCount = 0; + } + + /** + * Look up the namespace URI by prefix + * @param {String} prefix Namespace prefix + * @param {Boolean} [localOnly] Search current scope only + * @returns {String} Namespace URI + */ + getNamespaceURI(prefix, localOnly) { + switch (prefix) { + case 'xml': + return 'http://www.w3.org/XML/1998/namespace'; + case 'xmlns': + return 'http://www.w3.org/2000/xmlns/'; + default: + var nsURI = this.namespaces[prefix]; + /*jshint -W116 */ + if (nsURI != null) { + return nsURI.uri; + } else if (!localOnly && this.parent) { + return this.parent.getNamespaceURI(prefix); + } else { + return null; + } + } + } + + getNamespaceMapping(prefix) { + switch (prefix) { + case 'xml': + return { + uri: 'http://www.w3.org/XML/1998/namespace', + prefix: 'xml', + declared: true + }; + case 'xmlns': + return { + uri: 'http://www.w3.org/2000/xmlns/', + prefix: 'xmlns', + declared: true + }; + default: + var mapping = this.namespaces[prefix]; + /*jshint -W116 */ + if (mapping != null) { + return mapping; + } else if (this.parent) { + return this.parent.getNamespaceMapping(prefix); + } else { + return null; + } + } + } + + /** + * Look up the namespace prefix by URI + * @param {String} nsURI Namespace URI + * @param {Boolean} [localOnly] Search current scope only + * @returns {String} Namespace prefix + */ + getPrefix(nsURI, localOnly) { + switch (nsURI) { + case 'http://www.w3.org/XML/1998/namespace': + return 'xml'; + case 'http://www.w3.org/2000/xmlns/': + return 'xmlns'; + default: + for (var p in this.namespaces) { + if (this.namespaces[p].uri === nsURI) { + return p; + } + } + if (!localOnly && this.parent) { + return this.parent.getPrefix(nsURI); + } else { + return null; + } + } + } + + /** + * Look up the namespace prefix by URI + * @param {String} nsURI Namespace URI + * @param {Boolean} [localOnly] Search current scope only + * @returns {String} Namespace prefix + */ + getPrefixMapping(nsURI, localOnly) { + switch (nsURI) { + case 'http://www.w3.org/XML/1998/namespace': + return 'xml'; + case 'http://www.w3.org/2000/xmlns/': + return 'xmlns'; + default: + for (var p in this.namespaces) { + if (this.namespaces[p].uri === nsURI && this.namespaces[p].declared === true) { + return this.namespaces[p]; + } + } + if (!localOnly && this.parent) { + return this.parent.getPrefixMapping(nsURI); + } else { + return null; + } + } + } + + /** + * Generate a new prefix that is not mapped to any uris + * @param base {string} The base for prefix + * @returns {string} + */ + generatePrefix(base) { + base = base || 'ns'; + while (true) { + let prefix = 'ns' + ++this.prefixCount; + if (!this.getNamespaceURI(prefix)) { + // The prefix is not used + return prefix; + } + } + } +} + +/** + * Namespace context that manages hierarchical scopes + * @returns {NamespaceContext} + * @constructor + */ +class NamespaceContext { + constructor() { + this.scopes = []; + this.pushContext(); + } + + /** + * Add a prefix/URI namespace mapping + * @param {String} prefix Namespace prefix + * @param {String} nsURI Namespace URI + * @param {Boolean} [localOnly] Search current scope only + * @returns {boolean} true if the mapping is added or false if the mapping + * already exists + */ + addNamespace(prefix, nsURI, localOnly) { + if (this.getNamespaceURI(prefix, localOnly) === nsURI) { + return false; + } + if (this.currentScope) { + this.currentScope.namespaces[prefix] = { + uri: nsURI, + prefix: prefix, + declared: false + }; + return true; + } + return false; + } + + /** + * Push a scope into the context + * @returns {NamespaceScope} The current scope + */ + pushContext() { + var scope = new NamespaceScope(this.currentScope); + this.scopes.push(scope); + this.currentScope = scope; + return scope; + } + + /** + * Pop a scope out of the context + * @returns {NamespaceScope} The removed scope + */ + popContext() { + var scope = this.scopes.pop(); + if (scope) { + this.currentScope = scope.parent; + } else { + this.currentScope = null; + } + return scope; + } + + /** + * Look up the namespace URI by prefix + * @param {String} prefix Namespace prefix + * @param {Boolean} [localOnly] Search current scope only + * @returns {String} Namespace URI + */ + getNamespaceURI(prefix, localOnly) { + return this.currentScope && this.currentScope.getNamespaceURI(prefix, localOnly); + } + + /** + * Look up the namespace prefix by URI + * @param {String} nsURI Namespace URI + * @param {Boolean} [localOnly] Search current scope only + * @returns {String} Namespace prefix + */ + getPrefix(nsURI, localOnly) { + return this.currentScope && this.currentScope.getPrefix(nsURI, localOnly); + } + + /** + * Look up the namespace mapping by nsURI + * @param {String} nsURI Namespace URI + * @returns {String} Namespace mapping + */ + getPrefixMapping(nsURI) { + return this.currentScope && this.currentScope.getPrefixMapping(nsURI); + } + + /** + * Generate a new prefix that is not mapped to any uris + * @param base {string} The base for prefix + * @returns {string} + */ + generatePrefix(base) { + return this.currentScope && this.currentScope.generatePrefix(base); + } + + /** + * Register a namespace + * @param {String} prefix Namespace prefix + * @param {String} nsURI Namespace URI + * @returns {Object} The matching or generated namespace mapping + */ + registerNamespace(prefix, nsURI) { + var mapping; + if (!prefix) { + prefix = this.generatePrefix(); + } else { + mapping = this.currentScope.getNamespaceMapping(prefix); + if (mapping && mapping.uri === nsURI) { + // Found an existing mapping + return mapping; + } + } + if (this.getNamespaceURI(prefix)) { + // The prefix is already mapped to a different namespace + prefix = this.generatePrefix(); + } + if (this.currentScope) { + mapping = { + uri: nsURI, + prefix: prefix, + declared: false + }; + this.currentScope.namespaces[prefix] = mapping; + return mapping; + } + return null; + } + + /** + * Declare a namespace prefix/uri mapping + * @param {String} prefix Namespace prefix + * @param {String} nsURI Namespace URI + * @returns {Boolean} true if the declaration is created + */ + declareNamespace(prefix, nsURI) { + var mapping = this.registerNamespace(prefix, nsURI); + if (!mapping) return null; + if (mapping.declared) { + return null; + } + mapping = this.currentScope.namespaces[mapping.prefix]; + if (mapping) { + mapping.declared = true; + } else { + mapping = { + prefix: mapping.prefix, + uri: nsURI, + declared: true + }; + this.currentScope.namespaces[mapping.prefix] = mapping; + } + return mapping; + } +} + +module.exports = NamespaceContext; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/qname.js b/node_modules/strong-soap/lib/parser/qname.js new file mode 100644 index 00000000..940eb21c --- /dev/null +++ b/node_modules/strong-soap/lib/parser/qname.js @@ -0,0 +1,89 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var g = require('../globalize'); +var assert = require('assert'); +var qnameExp = /^(?:\{([^\{\}]*)\})?(?:([^\{\}]+):)?([^\{\}\:]+)$/; + +class QName { + /** + * Create a new QName + * - new QName(name) + * - new QName(nsURI, name) + * - new QName(nsURI, name, prefix) + * + * @param {string} nsURI Namespace URI + * @param {string} name Local name + * @param {string} prefix Namespace prefix + */ + constructor(nsURI, name, prefix) { + if (arguments.length === 1) { + assert.equal(typeof nsURI, 'string', 'The qname must be string in form of {nsURI}prefix:name'); + let qname; + if (qname = qnameExp.exec(nsURI)) { + this.nsURI = qname[1] || ''; + this.prefix = qname[2] || ''; + this.name = qname[3] || ''; + } else { + throw new Error(g.f('Invalid qname: %s', nsURI)); + } + } else { + this.nsURI = nsURI || ''; + this.name = name || ''; + if (!prefix) { + let parts = this.name.split(':'); + this.name = parts[0]; + this.prefix = parts[1]; + } else { + this.prefix = prefix || ''; + } + } + } + + /** + * {nsURI}prefix:name + * @returns {string} + */ + toString() { + var str = ''; + if (this.nsURI) { + str = '{' + this.nsURI + '}'; + } + if (this.prefix) { + str += this.prefix + ':'; + } + str += this.name; + return str; + } + + /** + * Parse a qualified name (prefix:name) + * @param {string} qname Qualified name + * @param {string|NamespaceContext} nsURI + * @returns {QName} + */ + static parse(qname, nsURI) { + qname = qname || ''; + var result = new QName(qname); + var uri; + if (nsURI == null) { + uri = ''; + } else if (typeof nsURI === 'string') { + uri = nsURI; + } else if (typeof nsURI.getNamespaceURI === 'function') { + uri = nsURI.getNamespaceURI(result.prefix); + } else { + uri = ''; + } + if (uri) { + result.nsURI = uri; + } + return result; + } +} + +module.exports = QName; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/soap/body.js b/node_modules/strong-soap/lib/parser/soap/body.js new file mode 100644 index 00000000..04b08ab9 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/soap/body.js @@ -0,0 +1,24 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var SOAPElement = require('./soapElement'); +var helper = require('../helper'); + +/** + * + */ +class Body extends SOAPElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } +} + +Body.elementName = 'body'; +Body.allowedChildren = ['documentation']; + +module.exports = Body; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/soap/fault.js b/node_modules/strong-soap/lib/parser/soap/fault.js new file mode 100644 index 00000000..788b372b --- /dev/null +++ b/node_modules/strong-soap/lib/parser/soap/fault.js @@ -0,0 +1,24 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var SOAPElement = require('./soapElement'); +var helper = require('../helper'); + +/** + * + */ +class Fault extends SOAPElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } +} + +Fault.elementName = 'fault'; +Fault.allowedChildren = ['documentation']; + +module.exports = Fault; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/soap/header.js b/node_modules/strong-soap/lib/parser/soap/header.js new file mode 100644 index 00000000..f40022e7 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/soap/header.js @@ -0,0 +1,34 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var SOAPElement = require('./soapElement'); +var helper = require('../helper'); + +/** + * * + * * + * + */ +class Header extends SOAPElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + this.fault = null; + } + + addChild(child) { + if (child.name === 'headerfault') { + this.fault = child; + } + } +} + +Header.elementName = 'header'; +Header.allowedChildren = ['documentation', 'headerFault']; + +module.exports = Header; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/soap/headerFault.js b/node_modules/strong-soap/lib/parser/soap/headerFault.js new file mode 100644 index 00000000..edb99879 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/soap/headerFault.js @@ -0,0 +1,24 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var SOAPElement = require('./soapElement'); +var helper = require('../helper'); + +/** + * * + */ +class HeaderFault extends SOAPElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } +} + +HeaderFault.elementName = 'headerfault'; +HeaderFault.allowedChildren = ['documentation']; + +module.exports = HeaderFault; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/soap/soapElement.js b/node_modules/strong-soap/lib/parser/soap/soapElement.js new file mode 100644 index 00000000..1330091f --- /dev/null +++ b/node_modules/strong-soap/lib/parser/soap/soapElement.js @@ -0,0 +1,29 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var Element = require('../element'); + +class SOAPElement extends Element { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + + if (this.name === 'body' || this.name === 'header' || this.name === 'fault' || this.name === 'headerfault') { + this.use = this.$use; + if (this.use === 'encoded') { + this.encodingStyle = this.$encodingStyle; + } + // The namespace attribute of soap:body will be used for RPC style + // operation + this.namespace = this.$namespace; + } + } +} + +SOAPElement.targetNamespace = Element.namespaces.soap; +SOAPElement.allowedChildren = ['documentation']; + +module.exports = SOAPElement; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/soap12/body.js b/node_modules/strong-soap/lib/parser/soap12/body.js new file mode 100644 index 00000000..e6ae95a9 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/soap12/body.js @@ -0,0 +1,24 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var SOAPElement = require('./soapElement'); +var helper = require('../helper'); + +/** + * + */ +class Body extends SOAPElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } +} + +Body.elementName = 'body'; +Body.allowedChildren = ['documentation']; + +module.exports = Body; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/soap12/fault.js b/node_modules/strong-soap/lib/parser/soap12/fault.js new file mode 100644 index 00000000..a79ec4fe --- /dev/null +++ b/node_modules/strong-soap/lib/parser/soap12/fault.js @@ -0,0 +1,24 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var SOAPElement = require('./soapElement'); +var helper = require('../helper'); + +/** + * + */ +class Fault extends SOAPElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } +} + +Fault.elementName = 'fault'; +Fault.allowedChildren = ['documentation']; + +module.exports = Fault; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/soap12/header.js b/node_modules/strong-soap/lib/parser/soap12/header.js new file mode 100644 index 00000000..8e623bc5 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/soap12/header.js @@ -0,0 +1,27 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var SOAPElement = require('./soapElement'); +var helper = require('../helper'); + +/** + * * + * * + * + */ +class Header extends SOAPElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } +} + +Header.elementName = 'header'; +Header.allowedChildren = ['documentation', 'headerFault']; + +module.exports = Header; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/soap12/headerFault.js b/node_modules/strong-soap/lib/parser/soap12/headerFault.js new file mode 100644 index 00000000..2f1ae0b9 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/soap12/headerFault.js @@ -0,0 +1,24 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var SOAPElement = require('./soapElement'); +var helper = require('../helper'); + +/** + * * + */ +class HeaderFault extends SOAPElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } +} + +HeaderFault.elementName = 'headerfault'; +HeaderFault.allowedChildren = ['documentation']; + +module.exports = HeaderFault; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/soap12/soapElement.js b/node_modules/strong-soap/lib/parser/soap12/soapElement.js new file mode 100644 index 00000000..f6e77be3 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/soap12/soapElement.js @@ -0,0 +1,29 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var Element = require('../element'); + +class SOAPElement extends Element { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + + if (this.name === 'body' || this.name === 'header' || this.name === 'fault' || this.name === 'headerfault') { + this.use = this.$use; + if (this.use === 'encoded') { + this.encodingStyle = this.$encodingStyle; + } + // The namespace attribute of soap:body will be used for RPC style + // operation + this.namespace = this.$namespace; + } + } +} + +SOAPElement.targetNamespace = Element.namespaces.soap12; +SOAPElement.allowedChildren = ['documentation']; + +module.exports = SOAPElement; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/typeRegistry.js b/node_modules/strong-soap/lib/parser/typeRegistry.js new file mode 100644 index 00000000..a948f6d2 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/typeRegistry.js @@ -0,0 +1,89 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +/** + * XML Schema Elements + * + * element --> @name|@ref|@type|@maxOccurs|@minOccurs| + * simpleType|complexType + * simpleType --> @name|restriction + * complexType --> @name|simpleContent|complexContent| + * group|all|choice|sequence| + * attribute|attributeGroup + * simpleContent --> restriction|extension + * complexContent --> restriction|extension + * restriction --> + * simpleType: @base|minExclusive|minInclusive|maxExclusive|maxInclusive| + * totalDigits|fractionDigits|length|minLength|maxLength| + * enumeration|whiteSpace|pattern + * simpleContent: @base|minExclusive|minInclusive|maxExclusive|maxInclusive| + * totalDigits|fractionDigits|length|minLength|maxLength| + * enumeration|whiteSpace|pattern| + * attribute|attributeGroup + * complexContent: @base|minExclusive|minInclusive|maxExclusive|maxInclusive| + * totalDigits|fractionDigits|length|minLength|maxLength| + * enumeration|whiteSpace|pattern| + * group|all|choice|sequence| + * attribute|attributeGroup + * extension --> @base|group|all|choice|sequence| + * attribute|attributeGroup + * group --> @name|@ref|all|choice|sequence + * attribute --> @name|@ref|@default|@fixed|@type|@use + * attributeGroup --> @name|@ref|attribute|attributeGroup + * all --> @maxOccurs|@minOccurs|element + * choice --> @maxOccurs|@minOccurs|element|group|choice|sequence|any + * sequence --> @maxOccurs|@minOccurs|element|group|choice|sequence|any + */ + +var helper = require('./helper'); + +var elementTypes = ['./xsd/all', './xsd/annotation', './xsd/any', './xsd/anyAttribute', './xsd/attribute', './xsd/attributeGroup', './xsd/choice', './xsd/complexContent', './xsd/complexType', './xsd/documentation', './xsd/element', './xsd/unique', './xsd/key', './xsd/keyref', './xsd/extension', './xsd/group', './xsd/import', './xsd/include', './xsd/restriction', './xsd/sequence', './xsd/simpleContent', './xsd/simpleType', './xsd/list', './xsd/union', './xsd/schema', './wsdl/binding', './wsdl/definitions', './wsdl/fault', './wsdl/import', './wsdl/input', './wsdl/message', './wsdl/operation', './wsdl/output', './wsdl/part', './wsdl/port', './wsdl/portType', './wsdl/service', './wsdl/types', './wsdl/documentation', './soap/body', './soap/header', './soap/headerFault', './soap/fault', './soap12/body', './soap12/header', './soap12/headerFault', './soap12/fault']; + +var registry; + +function getRegistry() { + if (registry) { + return registry; + } + registry = { + elementTypes: {}, + elementTypesByName: {} + }; + elementTypes.forEach(function (t) { + var type = require(t); + registry.elementTypes['{' + type.targetNamespace + '}' + type.elementName] = type; + registry.elementTypesByName[type.elementName] = type; + }); + return registry; +} + +function getElementType(qname) { + var registry = getRegistry(); + var ElementType = registry.elementTypes['{' + qname.nsURI + '}' + qname.name]; + if (!ElementType) { + let XSDElement = require('./xsd/xsdElement'); + let WSDLElement = require('./wsdl/wsdlElement'); + let SOAPElement = require('./soap/soapElement'); + let SOAP12Element = require('./soap12/soapElement'); + let Element = require('./element'); + if (qname.nsURI === helper.namespaces.wsdl) { + ElementType = WSDLElement; + } else if (qname.nsURI === helper.namespaces.xsd) { + ElementType = XSDElement; + } else if (qname.nsURI === helper.namespaces.soap) { + ElementType = SOAPElement; + } else if (qname.nsURI === helper.namespaces.soap12) { + ElementType = SOAP12Element; + } else { + ElementType = Element; + } + } + return ElementType; +} + +exports.getRegistry = getRegistry; +exports.getElementType = getElementType; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/wsdl.js b/node_modules/strong-soap/lib/parser/wsdl.js new file mode 100644 index 00000000..5ef5de16 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/wsdl.js @@ -0,0 +1,558 @@ +// Copyright IBM Corp. 2016,2019. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var g = require('../globalize'); +var sax = require('sax'); +var HttpClient = require('./../http'); +var fs = require('fs'); +var url = require('url'); +var path = require('path'); +var assert = require('assert'); +var stripBom = require('../strip-bom'); +var debug = require('debug')('strong-soap:wsdl'); +var debugInclude = require('debug')('strong-soap:wsdl:include'); +var _ = require('lodash'); +var selectn = require('selectn'); +var utils = require('./helper'); +var EMPTY_PREFIX = utils.EMPTY_PREFIX; + +var QName = require('./qname'); +var Definitions = require('./wsdl/definitions'); +var Schema = require('./xsd/schema'); +var Types = require('./wsdl/types'); +var Element = require('./element'); + +class WSDL { + constructor(definition, uri, options) { + this.content = definition; + assert(this.content != null && (typeof this.content === 'string' || typeof this.content === 'object'), 'WSDL constructor takes either an XML string or definitions object'); + this.uri = uri; + this._includesWsdl = []; + + // initialize WSDL cache + this.WSDL_CACHE = (options || {}).WSDL_CACHE || {}; + this._initializeOptions(options); + } + + load(callback) { + this._loadAsyncOrSync(false, function (err, wsdl) { + callback(err, wsdl); + }); + } + + loadSync() { + var result; + this._loadAsyncOrSync(true, function (err, wsdl) { + result = wsdl; + }); + // This is not intuitive but works as the load function and its callback all are executed before the + // loadSync function returns. The outcome here is that the following result is always set correctly. + return result; + } + + _loadAsyncOrSync(syncLoad, callback) { + var self = this; + var definition = this.content; + let fromFunc; + if (typeof definition === 'string') { + definition = stripBom(definition); + fromFunc = this._fromXML; + } else if (typeof definition === 'object') { + fromFunc = this._fromServices; + } + + // register that this WSDL has started loading + self.isLoaded = true; + + var loadUpSchemas = function loadUpSchemas(syncLoad) { + try { + fromFunc.call(self, definition); + } catch (e) { + return callback(e); + } + + self.processIncludes(syncLoad, function (err) { + var name; + if (err) { + return callback(err); + } + + var schemas = self.definitions.schemas; + for (let s in schemas) { + schemas[s].postProcess(self.definitions); + } + var services = self.services = self.definitions.services; + if (services) { + for (let s in services) { + try { + services[s].postProcess(self.definitions); + } catch (err) { + return callback(err); + } + } + } + + // for document style, for every binding, prepare input message + // element name to (methodName, output message element name) mapping + var bindings = self.definitions.bindings; + for (var bindingName in bindings) { + var binding = bindings[bindingName]; + if (binding.style == null) { + binding.style = 'document'; + } + if (binding.style !== 'document') continue; + var operations = binding.operations; + var topEls = binding.topElements = {}; + for (var methodName in operations) { + if (operations[methodName].input) { + var inputName = operations[methodName].input.$name; + var outputName = ""; + if (operations[methodName].output) outputName = operations[methodName].output.$name; + topEls[inputName] = { + "methodName": methodName, + "outputName": outputName + }; + } + } + } + + // prepare soap envelope xmlns definition string + self.xmlnsInEnvelope = self._xmlnsMap(); + callback(err, self); + }); + }; + + if (syncLoad) { + loadUpSchemas(true); + } else { + process.nextTick(loadUpSchemas); + } + } + + _initializeOptions(options) { + this._originalIgnoredNamespaces = (options || {}).ignoredNamespaces; + this.options = {}; + + var ignoredNamespaces = options ? options.ignoredNamespaces : null; + + if (ignoredNamespaces && (Array.isArray(ignoredNamespaces.namespaces) || typeof ignoredNamespaces.namespaces === 'string')) { + if (ignoredNamespaces.override) { + this.options.ignoredNamespaces = ignoredNamespaces.namespaces; + } else { + this.options.ignoredNamespaces = this.ignoredNamespaces.concat(ignoredNamespaces.namespaces); + } + } else { + this.options.ignoredNamespaces = this.ignoredNamespaces; + } + + this.options.forceSoapVersion = options.forceSoapVersion; + + this.options.valueKey = options.valueKey || this.valueKey; + this.options.xmlKey = options.xmlKey || this.xmlKey; + + // Allow any request headers to keep passing through + this.options.wsdl_headers = options.wsdl_headers; + this.options.wsdl_options = options.wsdl_options; + + if (options.httpClient) { + this.options.httpClient = options.httpClient; + } + + if (options.request) { + this.options.request = options.request; + } + + var ignoreBaseNameSpaces = options ? options.ignoreBaseNameSpaces : null; + if (ignoreBaseNameSpaces !== null && typeof ignoreBaseNameSpaces !== 'undefined') this.options.ignoreBaseNameSpaces = ignoreBaseNameSpaces;else this.options.ignoreBaseNameSpaces = this.ignoreBaseNameSpaces; + + if (options.NTLMSecurity) { + this.options.NTLMSecurity = options.NTLMSecurity; + } + } + + _processNextInclude(syncLoad, includes, callback) { + debugInclude('includes/imports: ', includes); + var self = this, + include = includes.shift(), + options; + + if (!include) return callback(); + + // if undefined treat as "" to make path.dirname return '.' as errors on non string below + if (!self.uri) { + self.uri = ''; + } + + var includePath; + if (!/^https?:/.test(self.uri) && !/^https?:/.test(include.location)) { + includePath = path.resolve(path.dirname(self.uri), include.location); + } else { + includePath = url.resolve(self.uri, include.location); + } + + debugInclude('Processing: ', include, includePath); + + options = _.assign({}, this.options); + // follow supplied ignoredNamespaces option + options.ignoredNamespaces = this._originalIgnoredNamespaces || this.options.ignoredNamespaces; + options.WSDL_CACHE = this.WSDL_CACHE; + + var staticLoad = function staticLoad(syncLoad, err, wsdl) { + if (err) { + return callback(err); + } + + self._includesWsdl.push(wsdl); + + if (wsdl.definitions instanceof Definitions) { + // Set namespace for included schema that does not have targetNamespace + if (undefined in wsdl.definitions.schemas) { + if (include.namespace != null) { + // If A includes B and B includes C, B & C can both have no targetNamespace + wsdl.definitions.schemas[include.namespace] = wsdl.definitions.schemas[undefined]; + delete wsdl.definitions.schemas[undefined]; + } + } + _.mergeWith(self.definitions, wsdl.definitions, function (a, b) { + if (a === b) { + return a; + } + return a instanceof Schema ? a.merge(b, include.type === 'include') : undefined; + }); + } else { + self.definitions.schemas[include.namespace || wsdl.definitions.$targetNamespace] = deepMerge(self.definitions.schemas[include.namespace || wsdl.definitions.$targetNamespace], wsdl.definitions); + } + self._processNextInclude(syncLoad, includes, function (err) { + callback(err); + }); + }; + + if (syncLoad) { + var wsdl = WSDL.loadSync(includePath, options); + staticLoad(true, null, wsdl); + } else { + WSDL.load(includePath, options, function (err, wsdl) { + staticLoad(false, err, wsdl); + }); + } + } + + processIncludes(syncLoad, callback) { + var schemas = this.definitions.schemas, + includes = []; + + for (var ns in schemas) { + var schema = schemas[ns]; + includes = includes.concat(schema.includes || []); + } + + this._processNextInclude(syncLoad, includes, callback); + } + + describeServices() { + var services = {}; + for (var name in this.services) { + var service = this.services[name]; + services[name] = service.describe(this.definitions); + } + return services; + } + + toXML() { + return this.xml || ''; + } + + xmlToObject(xml) { + return root; + } + + _parse(xml) { + var self = this, + p = sax.parser(true, { trim: true }), + stack = [], + root = null, + types = null, + schema = null, + text = '', + options = self.options; + + p.onopentag = function (node) { + debug('Start element: %j', node); + text = ''; // reset text + var nsName = node.name; + var attrs = node.attributes; + + var top = stack[stack.length - 1]; + var name; + if (top) { + try { + top.startElement(stack, nsName, attrs, options); + } catch (e) { + debug("WSDL error: %s ", e.message); + if (self.options.strict) { + throw e; + } else { + stack.push(new Element(nsName, attrs, options)); + } + } + } else { + name = QName.parse(nsName).name; + if (name === 'definitions') { + root = new Definitions(nsName, attrs, options); + stack.push(root); + } else if (name === 'schema') { + // Shim a structure in here to allow the proper objects to be + // created when merging back. + root = new Definitions('definitions', {}, {}); + types = new Types('types', {}, {}); + schema = new Schema(nsName, attrs, options); + types.addChild(schema); + root.addChild(types); + stack.push(schema); + } else { + throw new Error(g.f('Unexpected root element of {{WSDL}} or include')); + } + } + }; + + p.onclosetag = function (name) { + debug('End element: %s', name); + var top = stack[stack.length - 1]; + assert(top, 'Unmatched close tag: ' + name); + + if (text) { + top[self.options.valueKey] = text; + text = ''; + } + top.endElement(stack, name); + }; + + p.ontext = function (str) { + text = text + str; + }; + + debug('WSDL xml: %s', xml); + p.write(xml).close(); + + return root; + } + + _fromXML(xml) { + this.definitions = this._parse(xml); + this.xml = xml; + } + + _fromServices(services) {} + + _xmlnsMap() { + var xmlns = this.definitions.xmlns; + var str = ''; + for (var prefix in xmlns) { + if (prefix === '' || prefix === EMPTY_PREFIX) continue; + var ns = xmlns[prefix]; + switch (ns) { + case "http://xml.apache.org/xml-soap": // apachesoap + case "http://schemas.xmlsoap.org/wsdl/": // wsdl + case "http://schemas.xmlsoap.org/wsdl/soap/": // wsdlsoap + case "http://schemas.xmlsoap.org/wsdl/soap12/": // wsdlsoap12 + case "http://schemas.xmlsoap.org/soap/encoding/": // soapenc + case "http://www.w3.org/2001/XMLSchema": + // xsd + continue; + } + if (~ns.indexOf('http://schemas.xmlsoap.org/')) continue; + if (~ns.indexOf('http://www.w3.org/')) continue; + if (~ns.indexOf('http://xml.apache.org/')) continue; + str += ' xmlns:' + prefix + '="' + ns + '"'; + } + return str; + } + + /* + * Have another function to load previous WSDLs as we + * don't want this to be invoked externally (expect for tests) + * This will attempt to fix circular dependencies with XSD files, + * Given + * - file.wsdl + * - xs:import namespace="A" schemaLocation: A.xsd + * - A.xsd + * - xs:import namespace="B" schemaLocation: B.xsd + * - B.xsd + * - xs:import namespace="A" schemaLocation: A.xsd + * file.wsdl will start loading, import A, then A will import B, which will then import A + * Because A has already started to load previously it will be returned right away and + * have an internal circular reference + * B would then complete loading, then A, then file.wsdl + * By the time file A starts processing its includes its definitions will be already loaded, + * this is the only thing that B will depend on when "opening" A + */ + static load(uri, options, callback) { + var fromCache, WSDL_CACHE; + + if (typeof options === 'function') { + callback = options; + options = {}; + } + + WSDL_CACHE = options.WSDL_CACHE; + + if (fromCache = WSDL_CACHE[uri]) { + /** + * Only return from the cache is the document is fully (or partially) + * loaded. This allows the contents of a document to have been read + * into the cache, but with no processing performed on it yet. + */ + if (fromCache.isLoaded) { + return callback.call(fromCache, null, fromCache); + } + } + + return WSDL.open(uri, options, callback); + } + + static open(uri, options, callback) { + if (typeof options === 'function') { + callback = options; + options = {}; + } + + // initialize cache when calling open directly + var WSDL_CACHE = options.WSDL_CACHE || {}; + var request_headers = options.wsdl_headers; + var request_options = options.wsdl_options; + + debug('wsdl open. request_headers: %j request_options: %j', request_headers, request_options); + var wsdl; + var fromCache = WSDL_CACHE[uri]; + /** + * If the file is fully loaded in the cache, return it. + * Otherwise load it from the file system or URL. + */ + if (fromCache && !fromCache.isLoaded) { + fromCache.load(callback); + } else if (!/^https?:/.test(uri)) { + debug('Reading file: %s', uri); + fs.readFile(uri, 'utf8', function (err, definition) { + if (err) { + callback(err); + } else { + wsdl = new WSDL(definition, uri, options); + WSDL_CACHE[uri] = wsdl; + wsdl.WSDL_CACHE = WSDL_CACHE; + wsdl.load(callback); + } + }); + } else { + var httpClient = options.httpClient || new HttpClient(options); + httpClient.request(uri, null /* options */ + , function (err, response, definition) { + if (err) { + callback(err); + } else if (response && response.statusCode === 200) { + wsdl = new WSDL(definition, uri, options); + WSDL_CACHE[uri] = wsdl; + wsdl.WSDL_CACHE = WSDL_CACHE; + wsdl.load(callback); + } else { + callback(new Error(g.f('Invalid {{WSDL URL}}: %s\n\n\r Code: %s' + "\n\n\r Response Body: %j", uri, response.statusCode, response.body))); + } + }, request_headers, request_options); + } + + return wsdl; + } + + static loadSync(uri, options) { + var fromCache, WSDL_CACHE; + + if (!options) { + options = {}; + } + + WSDL_CACHE = options.WSDL_CACHE; + + if (fromCache = WSDL_CACHE[uri]) { + /** + * Only return from the cache is the document is fully (or partially) + * loaded. This allows the contents of a document to have been read + * into the cache, but with no processing performed on it yet. + */ + if (fromCache.isLoaded) { + return fromCache; + } + } + + return WSDL.openSync(uri, options); + } + + static openSync(uri, options) { + if (!options) { + options = {}; + } + + // initialize cache when calling open directly + var WSDL_CACHE = options.WSDL_CACHE || {}; + var request_headers = options.wsdl_headers; + var request_options = options.wsdl_options; + + debug('wsdl open. request_headers: %j request_options: %j', request_headers, request_options); + var wsdl; + var fromCache = WSDL_CACHE[uri]; + /** + * If the file is fully loaded in the cache, return it. + * Otherwise throw an error as we cannot load this in a sync way as we would need to perform IO + * either to the filesystem or http + */ + if (fromCache && !fromCache.isLoaded) { + wsdl = fromCache.loadSync(); + } else { + throw uri + " was not found in the cache. For loadSync() calls all schemas must be preloaded into the cache"; + } + + return wsdl; + } + + static loadSystemSchemas(callback) { + var xsdDir = path.join(__dirname, '../../xsds/'); + var done = false; + fs.readdir(xsdDir, function (err, files) { + if (err) return callback(err); + var schemas = {}; + var count = files.length; + files.forEach(function (f) { + WSDL.open(path.join(xsdDir, f), {}, function (err, wsdl) { + if (done) return; + count--; + if (err) { + done = true; + return callback(err); + } + for (var s in wsdl.definitions.schemas) { + schemas[s] = wsdl.definitions.schemas[s]; + } + if (count === 0) { + done = true; + callback(null, schemas); + } + }); + }); + }); + } +} + +WSDL.prototype.ignoredNamespaces = ['targetNamespace', 'typedNamespace']; +WSDL.prototype.ignoreBaseNameSpaces = false; +WSDL.prototype.valueKey = '$value'; +WSDL.prototype.xmlKey = '$xml'; + +module.exports = WSDL; + +function deepMerge(destination, source) { + return _.mergeWith(destination || {}, source, function (a, b) { + return _.isArray(a) ? a.concat(b) : undefined; + }); +} \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/wsdl/binding.js b/node_modules/strong-soap/lib/parser/wsdl/binding.js new file mode 100644 index 00000000..8a37e68f --- /dev/null +++ b/node_modules/strong-soap/lib/parser/wsdl/binding.js @@ -0,0 +1,88 @@ +// Copyright IBM Corp. 2016,2018. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var WSDLElement = require('./wsdlElement'); +var QName = require('../qname'); + +class Binding extends WSDLElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + this.transport = ''; + this.style = ''; + } + + addChild(child) { + // soap:binding + if (child.name === 'binding') { + this.transport = child.$transport; + this.style = child.$style; + } + } + + postProcess(definitions) { + if (this.operations) return; + try { + this.operations = {}; + var type = QName.parse(this.$type).name, + portType = definitions.portTypes[type], + style = this.style, + children = this.children; + if (portType) { + portType.postProcess(definitions); + this.portType = portType; + + for (var i = 0, child; child = children[i]; i++) { + if (child.name !== 'operation') continue; + var operation = this.portType.operations[child.$name]; + if (operation) { + this.operations[child.$name] = child; + child.operation = operation; + + // Set portType.operation.input.message to binding.operation.input + if (operation.input && child.input) { + child.input.message = operation.input.message; + } + // Set portType.operation.output.message to binding.operation.output + if (operation.output && child.output) { + child.output.message = operation.output.message; + } + + //portType.operation.fault is fully processed with message etc. Hence set to binding.operation.fault + for (var f in operation.faults) { + if (operation.faults[f]) { + child.faults[f] = operation.faults[f]; + } + } + if (operation.$parameterOrder) { + // For RPC style + child.parameterOrder = operation.$parameterOrder.split(/\s+/); + } + child.style = child.style || style; + child.postProcess(definitions); + } + } + } + } catch (err) { + throw err; + } + } + + describe(definitions) { + if (this.descriptor) return this.descriptor; + var operations = this.descriptor = {}; + for (var name in this.operations) { + var operation = this.operations[name]; + operations[name] = operation.describe(definitions); + } + return operations; + } +} + +Binding.elementName = 'binding'; +Binding.allowedChildren = ['binding', 'SecuritySpec', 'operation', 'documentation']; + +module.exports = Binding; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/wsdl/definitions.js b/node_modules/strong-soap/lib/parser/wsdl/definitions.js new file mode 100644 index 00000000..0fb702dc --- /dev/null +++ b/node_modules/strong-soap/lib/parser/wsdl/definitions.js @@ -0,0 +1,52 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var _ = require('lodash'); +var WSDLElement = require('./wsdlElement'); +var Schema = require('../xsd/schema'); +var Types = require('./types'); +var Message = require('./message'); +var PortType = require('./portType'); +var Binding = require('./binding'); +var Service = require('./service'); +var Documentation = require('./documentation'); + +class Definitions extends WSDLElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + this.messages = {}; + this.portTypes = {}; + this.bindings = {}; + this.services = {}; + this.schemas = {}; + } + + addChild(child) { + var self = this; + if (child instanceof Types) { + // Merge types.schemas into definitions.schemas + _.merge(self.schemas, child.schemas); + } else if (child instanceof Message) { + self.messages[child.$name] = child; + } else if (child.name === 'import') { + //create a Schema element for the . targetNamespace is the 'namespace' of the element in the wsdl. + self.schemas[child.$namespace] = new Schema('xs:schema', { targetNamespace: child.$namespace }); + self.schemas[child.$namespace].addChild(child); + } else if (child instanceof PortType) { + self.portTypes[child.$name] = child; + } else if (child instanceof Binding) { + if (child.transport === 'http://schemas.xmlsoap.org/soap/http' || child.transport === 'http://www.w3.org/2003/05/soap/bindings/HTTP/') self.bindings[child.$name] = child; + } else if (child instanceof Service) { + self.services[child.$name] = child; + } else if (child instanceof Documentation) {} + } +} + +Definitions.elementName = 'definitions'; +Definitions.allowedChildren = ['types', 'message', 'portType', 'binding', 'service', 'import', 'documentation', 'import', 'any']; + +module.exports = Definitions; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/wsdl/documentation.js b/node_modules/strong-soap/lib/parser/wsdl/documentation.js new file mode 100644 index 00000000..52aa37a9 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/wsdl/documentation.js @@ -0,0 +1,19 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var WSDLElement = require('./wsdlElement'); + +class Documentation extends WSDLElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } +} + +Documentation.elementName = 'documentation'; +Documentation.allowedChildren = []; + +module.exports = Documentation; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/wsdl/fault.js b/node_modules/strong-soap/lib/parser/wsdl/fault.js new file mode 100644 index 00000000..5acffe10 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/wsdl/fault.js @@ -0,0 +1,19 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var Parameter = require('./parameter'); + +class Fault extends Parameter { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } +} + +Fault.elementName = 'fault'; +Fault.allowedChildren = ['documentation', 'fault']; + +module.exports = Fault; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/wsdl/import.js b/node_modules/strong-soap/lib/parser/wsdl/import.js new file mode 100644 index 00000000..06a1fdc4 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/wsdl/import.js @@ -0,0 +1,19 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var WSDLElement = require('./wsdlElement'); + +class Import extends WSDLElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + this.schemas = {}; + } +} + +Import.elementName = 'import'; + +module.exports = Import; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/wsdl/input.js b/node_modules/strong-soap/lib/parser/wsdl/input.js new file mode 100644 index 00000000..d6b1647c --- /dev/null +++ b/node_modules/strong-soap/lib/parser/wsdl/input.js @@ -0,0 +1,18 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var Parameter = require('./parameter'); + +class Input extends Parameter { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } +} + +Input.elementName = 'input'; + +module.exports = Input; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/wsdl/message.js b/node_modules/strong-soap/lib/parser/wsdl/message.js new file mode 100644 index 00000000..c4df1b51 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/wsdl/message.js @@ -0,0 +1,53 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var WSDLElement = require('./wsdlElement'); +var descriptor = require('../xsd/descriptor'); +var helper = require('../helper'); +var assert = require('assert'); +var QName = require('../qname'); + +class Message extends WSDLElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + this.parts = {}; + } + + addChild(child) { + if (child.name === 'part') { + this.parts[child.$name] = child; + } + } + + postProcess(definitions) { + for (var p in this.parts) { + this.parts[p].postProcess(definitions); + } + } + + describe(definitions) { + if (this.descriptor) return this.descriptor; + this.descriptor = new descriptor.TypeDescriptor(); + for (var part in this.parts) { + var p = this.parts[part]; + var partDescriptor = p.describe(definitions); + if (partDescriptor instanceof descriptor.TypeDescriptor) { + var child = new descriptor.ElementDescriptor(new QName(p.$name), partDescriptor.type, 'unqualified', false); + child.elements = partDescriptor.elements; + child.attributes = partDescriptor.attributes; + this.descriptor.add(child); + } else { + this.descriptor.add(partDescriptor); + } + } + } +} + +Message.elementName = 'message'; +Message.allowedChildren = ['part', 'documentation']; + +module.exports = Message; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/wsdl/operation.js b/node_modules/strong-soap/lib/parser/wsdl/operation.js new file mode 100644 index 00000000..378239ee --- /dev/null +++ b/node_modules/strong-soap/lib/parser/wsdl/operation.js @@ -0,0 +1,377 @@ +// Copyright IBM Corp. 2016,2018. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var g = require('../../globalize'); +var WSDLElement = require('./wsdlElement'); +var descriptor = require('../xsd/descriptor'); +var ElementDescriptor = descriptor.ElementDescriptor; +var TypeDescriptor = descriptor.TypeDescriptor; +var QName = require('../qname'); +var helper = require('../helper'); +var SimpleType = require('../xsd/simpleType'); + +var assert = require('assert'); + +const Style = { + documentLiteralWrapped: 'documentLiteralWrapped', + documentLiteral: 'documentLiteral', + rpcLiteral: 'rpcLiteral', + rpcEncoded: 'rpcEncoded', + documentEncoded: 'documentEncoded' +}; + +class Operation extends WSDLElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + //there can be multiple faults defined in the operation. They all will have same type name 'fault' + //what differentiates them from each other is, the element/s which will get added under fault during runtime. + this.faults = []; + this.soapVersion; + } + + addChild(child) { + switch (child.name) { + case 'input': + this.input = child; + break; + case 'output': + this.output = child; + break; + case 'fault': + this.faults.push(child); + break; + case 'operation': + // soap:operation + this.soapAction = child.$soapAction || ''; + this.style = child.$style || ''; + this.soapActionRequired = child.$soapActionRequired === 'true' || child.$soapActionRequired === '1' || false; + //figure out from the binding operation soap version 1.1 or 1.2 + if (child.nsURI === 'http://schemas.xmlsoap.org/wsdl/soap/') { + this.soapVersion = '1.1'; + } else if (child.nsURI === 'http://schemas.xmlsoap.org/wsdl/soap12/') { + this.soapVersion = '1.2'; + } else { + this.soapVersion = '1.1'; + } + break; + } + } + + postProcess(definitions) { + try { + if (this._processed) return; // Already processed + if (this.input) this.input.postProcess(definitions); + if (this.output) this.output.postProcess(definitions); + for (let i = 0, n = this.faults.length; i < n; i++) { + this.faults[i].postProcess(definitions); + } + if (this.parent.name === 'binding') { + this.getMode(); + } + this._processed = true; + } catch (err) { + throw err; + } + } + + static describeHeaders(param, definitions) { + if (param == null) return null; + var headers = new descriptor.TypeDescriptor(); + if (!param.headers) return headers; + param.headers.forEach(function (header) { + var part = header.part; + if (part && part.element) { + headers.addElement(part.element.describe(definitions)); + } else if (part && part.type) { + g.warn('{{WS-I}} violation: ' + '{{http://ws-i.org/profiles/basicprofile-1.2-2010-11-09.html#BP2113}}' + ' part %s', part.$name); + } + }); + return headers; + } + + describeFaults(definitions) { + var faults = {}; + for (var f in this.faults) { + let fault = this.faults[f]; + let part = fault.message && fault.message.children[0]; //find the part through Fault message. There is only one part in fault message + if (part && part.element) { + faults[f] = part.element.describe(definitions); + } else { + g.warn('{{WS-I}} violation: ' + '{{http://ws-i.org/profiles/basicprofile-1.2-2010-11-09.html#BP2113}}' + ' part %s', part.$name); + } + } + return faults; + } + + describe(definitions) { + if (this.descriptor) return this.descriptor; + var input, output; + switch (this.mode) { + case Style.documentLiteralWrapped: + if (this.input && this.input.body) { + for (let p in this.input.body.parts) { + let wrapperElement = this.input.body.parts[p].element; + if (wrapperElement) { + input = wrapperElement.describe(definitions); + } + break; + } + } + if (this.output && this.output.body) { + for (let p in this.output.body.parts) { + let wrapperElement = this.output.body.parts[p].element; + if (wrapperElement) { + output = wrapperElement.describe(definitions); + } + break; + } + } + break; + case Style.documentLiteral: + input = new descriptor.TypeDescriptor(); + output = new descriptor.TypeDescriptor(); + if (this.input && this.input.body) { + for (let p in this.input.body.parts) { + let element = this.input.body.parts[p].element; + if (element) { + input.addElement(element.describe(definitions)); + } + } + } + if (this.output && this.output.body) { + for (let p in this.output.body.parts) { + let element = this.output.body.parts[p].element; + if (element) { + output.addElement(element.describe(definitions)); + } + } + } + break; + case Style.rpcLiteral: + case Style.rpcEncoded: + // The operation wrapper element + let nsURI = this.input && this.input.body && this.input.body.namespace || this.targetNamespace; + input = new descriptor.ElementDescriptor(new QName(nsURI, this.$name), null, 'qualified', false); + output = new descriptor.ElementDescriptor(new QName(nsURI, this.$name + 'Response'), null, 'qualified', false); + let inputParts = new descriptor.TypeDescriptor(); + let outputParts = new descriptor.TypeDescriptor(); + if (this.input && this.input.body) { + for (let p in this.input.body.parts) { + let part = this.input.body.parts[p]; + let type; + if (part.type) { + if (part.type instanceof SimpleType) { + var qName = new QName(part.type.targetNamespace, part.type.$name, part.type.prefix); + type = qName; + } else { + type = part.type.qname; + } + let element = new descriptor.ElementDescriptor(new QName(nsURI, p), type, 'unqualified', false); + inputParts.addElement(element); + } else if (part.element) { + var elementDescriptor = part.element.describe(definitions); + inputParts.addElement(elementDescriptor); + } + } + } + if (this.output && this.output.body) { + for (let p in this.output.body.parts) { + let part = this.output.body.parts[p]; + let type; + if (part.type) { + if (part.type instanceof SimpleType) { + var qName = new QName(part.type.targetNamespace, part.type.$name, part.type.prefix); + type = qName; + } else { + type = part.type.qname; + } + let element = new descriptor.ElementDescriptor(new QName(nsURI, p), type, 'unqualified', false); + outputParts.addElement(element); + } else if (part.element) { + let elementDescriptor = part.element.describe(definitions); + outputParts.addElement(elementDescriptor); + } + } + } + input.elements = inputParts.elements; + output.elements = outputParts.elements; + break; + case Style.documentEncoded: + throw new Error(g.f('{{WSDL}} style not supported: %s', Style.documentEncoded)); + } + + let faults = this.describeFaults(definitions); + let inputHeaders = Operation.describeHeaders(this.input, definitions); + let outputHeaders = Operation.describeHeaders(this.output, definitions); + + this.descriptor = { + name: this.$name, + style: this.mode, + soapAction: this.soapAction, + soapVersion: this.soapVersion, + input: { + body: input, + headers: inputHeaders + }, + output: { + body: output, + headers: outputHeaders + }, + faults: { + body: { Fault: { faults } } + } + }; + this.descriptor.inputEnvelope = Operation.createEnvelopeDescriptor(this.descriptor.input, false, this.soapVersion); + this.descriptor.outputEnvelope = Operation.createEnvelopeDescriptor(this.descriptor.output, true, this.soapVersion); + this.descriptor.faultEnvelope = Operation.createEnvelopeDescriptor(this.descriptor.faults, true, this.soapVersion); + + return this.descriptor; + } + + static createEnvelopeDescriptor(parameterDescriptor, isOutput, soapVersion, prefix, nsURI) { + prefix = prefix || 'soap'; + var soapNsURI; + if (soapVersion === '1.1') { + soapNsURI = 'http://schemas.xmlsoap.org/soap/envelope/'; + } else if (soapVersion === '1.2') { + soapNsURI = 'http://www.w3.org/2003/05/soap-envelope'; + } + + nsURI = nsURI || soapNsURI; + var descriptor = new TypeDescriptor(); + + var envelopeDescriptor = new ElementDescriptor(new QName(nsURI, 'Envelope', prefix), null, 'qualified', false); + descriptor.add(envelopeDescriptor); + + var headerDescriptor = new ElementDescriptor(new QName(nsURI, 'Header', prefix), null, 'qualified', false); + + var bodyDescriptor = new ElementDescriptor(new QName(nsURI, 'Body', prefix), null, 'qualified', false); + + envelopeDescriptor.addElement(headerDescriptor); + envelopeDescriptor.addElement(bodyDescriptor); + + //add only if input or output. Fault is list of faults unlike input/output element and fault needs further processing below, + //before it can be added to the + if (parameterDescriptor && parameterDescriptor.body && !parameterDescriptor.body.Fault) { + bodyDescriptor.add(parameterDescriptor.body); + } + + if (parameterDescriptor && parameterDescriptor.headers) { + bodyDescriptor.add(parameterDescriptor.headers); + } + + //process faults. An example of resulting structure of the element with soap 1.1 element descriptor: + /* + + + sampleFaultCode + sampleFaultString + + + MyMethod Business Exception message + 10 + + + + + */ + if (isOutput && parameterDescriptor && parameterDescriptor.body.Fault) { + let xsdStr = new QName(helper.namespaces.xsd, 'string', 'xsd'); + var form; + if (soapVersion === '1.1') { + form = 'unqualified'; + } else if (soapVersion === '1.2') { + form = 'qualified'; + } + + let faultDescriptor = new ElementDescriptor(new QName(nsURI, 'Fault', prefix), null, 'qualified', false); + bodyDescriptor.add(faultDescriptor); + let detailDescriptor; + if (soapVersion === '1.1') { + faultDescriptor.add(new ElementDescriptor(new QName(nsURI, 'faultcode', prefix), null, form, false)); + faultDescriptor.add(new ElementDescriptor(new QName(nsURI, 'faultstring', prefix), null, form, false)); + faultDescriptor.add(new ElementDescriptor(new QName(nsURI, 'faultactor', prefix), null, form, false)); + detailDescriptor = new ElementDescriptor(new QName(nsURI, 'detail', prefix), null, form, false); + faultDescriptor.add(detailDescriptor); + } else if (soapVersion === '1.2') { + let code = new ElementDescriptor(new QName(nsURI, 'Code', prefix)); + code.add(new ElementDescriptor(new QName(nsURI, 'Value', prefix), null, form, false)); + let subCode = new ElementDescriptor(new QName(nsURI, 'Subcode', prefix), null, form, false); + code.add(subCode); + subCode.add(new ElementDescriptor(new QName(nsURI, 'Value', prefix), null, form, false)); + faultDescriptor.add(code, null, form, false); + let reason = new ElementDescriptor(new QName(nsURI, 'Reason', prefix)); + reason.add(new ElementDescriptor(new QName(nsURI, 'Text', prefix), null, form, false)); + faultDescriptor.add(reason, null, form, false); + faultDescriptor.add(new ElementDescriptor(new QName(nsURI, 'Node', prefix), null, form, false)); + faultDescriptor.add(new ElementDescriptor(new QName(nsURI, 'Role', prefix), null, form, false)); + detailDescriptor = new ElementDescriptor(new QName(nsURI, 'Detail', prefix), null, form, false); + faultDescriptor.add(detailDescriptor); + } + //multiple faults may be defined in wsdl for this operation. Go though every Fault and add it under element. + for (var f in parameterDescriptor.body.Fault.faults) { + detailDescriptor.add(parameterDescriptor.body.Fault.faults[f]); + } + } + + return descriptor; + } + + getMode() { + let use = this.input && this.input.body && this.input.body.use || 'literal'; + if (this.style === 'document' && use === 'literal') { + // document literal + let element = null; + let count = 0; + if (this.input && this.input.body) { + for (let p in this.input.body.parts) { + let part = this.input.body.parts[p]; + element = part.element; + if (!(part.element && !part.type)) { + console.error('Document/literal part should use element', part); + throw new Error('Document/literal part should use element'); + } + count++; + } + } + // Only one part and the input wrapper element has the same name as + // operation + if (count === 1 && element.$name === this.$name) { + count = 0; + if (this.output && this.output.body) { + for (let p in this.output.body.parts) { + let part = this.output.body.parts[p]; + element = part.element; + assert(part.element && !part.type, 'Document/literal part should use element'); + count++; + } + } + if (count === 1) { + this.mode = Style.documentLiteralWrapped; + } else { + this.mode = Style.documentLiteral; + } + } else { + this.mode = Style.documentLiteral; + } + } else if (this.style === 'document' && use === 'encoded') { + this.mode = Style.documentEncoded; + } else if (this.style === 'rpc' && use === 'encoded') { + this.mode = Style.rpcEncoded; + } else if (this.style === 'rpc' && use === 'literal') { + this.mode = Style.rpcLiteral; + } + return this.mode; + } + +} + +Operation.Style = Style; +Operation.elementName = 'operation'; +Operation.allowedChildren = ['documentation', 'input', 'output', 'fault', 'operation']; + +module.exports = Operation; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/wsdl/output.js b/node_modules/strong-soap/lib/parser/wsdl/output.js new file mode 100644 index 00000000..9c87f1d7 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/wsdl/output.js @@ -0,0 +1,18 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var Parameter = require('./parameter'); + +class Output extends Parameter { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } +} + +Output.elementName = 'output'; + +module.exports = Output; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/wsdl/parameter.js b/node_modules/strong-soap/lib/parser/wsdl/parameter.js new file mode 100644 index 00000000..86e1616d --- /dev/null +++ b/node_modules/strong-soap/lib/parser/wsdl/parameter.js @@ -0,0 +1,104 @@ +// Copyright IBM Corp. 2016,2018. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var WSDLElement = require('./wsdlElement'); +var QName = require('../qname'); +var debug = require('debug')('strong-soap:wsdl:parameter'); + +/** + * Base class for Input/Output + */ +class Parameter extends WSDLElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } + + addChild(child) { + // soap:body + if (child.name === 'body') { + this.body = child; + } else if (child.name === 'header') { + this.headers = this.headers || []; + // soap:header + this.headers.push(child); + } else if (child.name === 'fault') { + //Revisit. Never gets executed. + this.fault = child; + } + } + + postProcess(definitions) { + // portType.operation.* + if (this.parent.parent.name === 'portType') { + // Resolve $message + var messageName = QName.parse(this.$message).name; + var message = definitions.messages[messageName]; + if (!message) { + console.error('Unable to resolve message %s for', this.$message, this); + throw new Error('Unable to resolve message ' + this.$message); + } + message.postProcess(definitions); + this.message = message; + } + + // binding.operation.* + if (this.parent.parent.name === 'binding') { + if (this.body) { + if (this.body.$parts) { + this.body.parts = {}; + let parts = this.body.$parts.split(/\s+/); + for (let i = 0, n = parts.length; i < n; i++) { + this.body.parts[parts[i]] = this.message.parts[parts[i]]; + } + } else { + if (this.message && this.message.parts) { + this.body.parts = this.message.parts; + } + } + } + if (this.headers) { + for (let i = 0, n = this.headers.length; i < n; i++) { + let header = this.headers[i]; + let message; + if (header.$message) { + let messageName = QName.parse(header.$message).name; + message = definitions.messages[messageName]; + if (message) { + message.postProcess(definitions); + } else { + debug('Message not found: ', header.$message); + } + } else { + message = this.message; + } + if (header.$part && message) { + header.part = message.parts[header.$part]; + } + } + } + //Revisit.. this.name is always undefined because there is no code which calls addChild(..) with child.name = 'fault. + //code works inspite of not executing this block. Remove it? + if (this.name === 'fault') { + let message = this.fault.parent.message; + if (message) { + message.postProcess(definitions); + for (let p in message.parts) { + // The fault message MUST have only one part per WSDL 1.1 spec + this.fault.part = message.parts[p]; + break; + } + } else { + debug('Message not found: ', this.fault.$message); + } + } + } + } +} + +Parameter.allowedChildren = ['body', 'SecuritySpecRef', 'documentation', 'header']; + +module.exports = Parameter; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/wsdl/part.js b/node_modules/strong-soap/lib/parser/wsdl/part.js new file mode 100644 index 00000000..b119fb4b --- /dev/null +++ b/node_modules/strong-soap/lib/parser/wsdl/part.js @@ -0,0 +1,38 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var WSDLElement = require('./wsdlElement'); + +class Part extends WSDLElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } + + postProcess(definitions) { + if (this.$element) { + this.element = this.resolveSchemaObject(definitions.schemas, 'element', this.$element); + } else if (this.$type) { + this.type = this.resolveSchemaObject(definitions.schemas, 'type', this.$type); + } + } + + describe(definitions) { + if (this.descriptor) return this.descriptor; + if (this.element) { + this.descriptor = this.element.describe(definitions); + } else if (this.type) { + this.descriptor = this.type.describe(definitions); + } else { + this.descriptor = null; + } + return this.descriptor; + } +} + +Part.elementName = 'part'; + +module.exports = Part; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/wsdl/port.js b/node_modules/strong-soap/lib/parser/wsdl/port.js new file mode 100644 index 00000000..85b0ad11 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/wsdl/port.js @@ -0,0 +1,27 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var WSDLElement = require('./wsdlElement'); + +class Port extends WSDLElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + this.location = null; + } + + addChild(child) { + // soap:address + if (child.name === 'address' && child.$location !== undefined) { + this.location = child.$location; + } + } +} + +Port.elementName = 'port'; +Port.allowedChildren = ['address', 'documentation']; + +module.exports = Port; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/wsdl/portType.js b/node_modules/strong-soap/lib/parser/wsdl/portType.js new file mode 100644 index 00000000..3a24a9ed --- /dev/null +++ b/node_modules/strong-soap/lib/parser/wsdl/portType.js @@ -0,0 +1,40 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var WSDLElement = require('./wsdlElement'); + +class PortType extends WSDLElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } + + postProcess(definitions) { + if (this.operations) return; + this.operations = {}; + var children = this.children; + if (typeof children === 'undefined') return; + for (var i = 0, child; child = children[i]; i++) { + if (child.name !== 'operation') continue; + child.postProcess(definitions); + this.operations[child.$name] = child; + } + } + + describe(definitions) { + var operations = {}; + for (var name in this.operations) { + var method = this.operations[name]; + operations[name] = method.describe(definitions); + } + return operations; + } +} + +PortType.elementName = 'portType'; +PortType.allowedChildren = ['operation', 'documentation']; + +module.exports = PortType; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/wsdl/service.js b/node_modules/strong-soap/lib/parser/wsdl/service.js new file mode 100644 index 00000000..115ea69c --- /dev/null +++ b/node_modules/strong-soap/lib/parser/wsdl/service.js @@ -0,0 +1,57 @@ +// Copyright IBM Corp. 2016,2018. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var WSDLElement = require('./wsdlElement'); +var QName = require('../qname'); + +class Service extends WSDLElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + this.ports = {}; + } + + postProcess(definitions) { + try { + var children = this.children, + bindings = definitions.bindings; + if (children && children.length > 0) { + for (var i = 0, child; child = children[i]; i++) { + if (child.name !== 'port') continue; + var bindingName = QName.parse(child.$binding).name; + var binding = bindings[bindingName]; + if (binding) { + binding.postProcess(definitions); + this.ports[child.$name] = { + location: child.location, + binding: binding + }; + children.splice(i--, 1); + } + } + } + } catch (err) { + throw err; + } + } + + describe(definitions) { + if (this.descriptor) return this.descriptor; + var ports = {}; + for (var name in this.ports) { + var port = this.ports[name]; + ports[name] = port.binding.describe(definitions); + } + this.descriptor = ports; + return this.descriptor; + } + +} + +Service.elementName = 'service'; +Service.allowedChildren = ['port', 'documentation']; + +module.exports = Service; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/wsdl/types.js b/node_modules/strong-soap/lib/parser/wsdl/types.js new file mode 100644 index 00000000..9561f0e0 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/wsdl/types.js @@ -0,0 +1,40 @@ +// Copyright IBM Corp. 2016,2018. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var WSDLElement = require('./wsdlElement'); +var assert = require('assert'); +var Schema = require('../xsd/schema'); +var Documentation = require('./documentation'); + +class Types extends WSDLElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + this.schemas = {}; + } + + addChild(child) { + assert(child instanceof Schema || child instanceof Documentation); + + if (child instanceof Schema) { + + var targetNamespace = child.$targetNamespace; + + if (!this.schemas.hasOwnProperty(targetNamespace)) { + this.schemas[targetNamespace] = child; + } else { + // types might have multiple schemas with the same target namespace, + // including no target namespace + this.schemas[targetNamespace].merge(child, true); + } + } + } +} + +Types.elementName = 'types'; +Types.allowedChildren = ['schema', 'documentation']; + +module.exports = Types; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/wsdl/wsdlElement.js b/node_modules/strong-soap/lib/parser/wsdl/wsdlElement.js new file mode 100644 index 00000000..2422f014 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/wsdl/wsdlElement.js @@ -0,0 +1,19 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var Element = require('../element'); + +class WSDLElement extends Element { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } +} + +WSDLElement.targetNamespace = Element.namespaces.wsdl; +WSDLElement.allowedChildren = ['documentation']; + +module.exports = WSDLElement; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/xmlHandler.js b/node_modules/strong-soap/lib/parser/xmlHandler.js new file mode 100644 index 00000000..893697f8 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/xmlHandler.js @@ -0,0 +1,885 @@ +// Copyright IBM Corp. 2016,2019. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var xmlBuilder = require('xmlbuilder'); +var sax = require('sax'); +var stream = require('stream'); +var assert = require('assert'); +var selectn = require('selectn'); +var debug = require('debug')('strong-soap:xmlhandler'); +var descriptor = require('./xsd/descriptor'); +var ElementDescriptor = descriptor.ElementDescriptor; +var AttributeDescriptor = descriptor.AttributeDescriptor; +var TypeDescriptor = descriptor.TypeDescriptor; +var QName = require('./qname'); +var helper = require('./helper'); +var NamespaceContext = require('./nscontext'); + +class XMLHandler { + constructor(schemas, options) { + this.schemas = schemas || {}; + this.options = options || {}; + this.options.valueKey = this.options.valueKey || '$value'; + this.options.xmlKey = this.options.xmlKey || '$xml'; + this.options.attributesKey = this.options.attributesKey || '$attributes'; + this.options.xsiTypeKey = this.options.xsiTypeKey || '$xsiType'; + } + + jsonToXml(node, nsContext, descriptor, val) { + if (node == null) { + node = xmlBuilder.begin({ version: '1.0', encoding: 'UTF-8', standalone: true }); + } + if (nsContext == null) { + nsContext = new NamespaceContext(); + } + + var name; + let nameSpaceContextCreated = false; + if (descriptor instanceof AttributeDescriptor) { + val = toXmlDateOrTime(descriptor, val); + name = descriptor.qname.name; + if (descriptor.form === 'unqualified') { + node.attribute(name, val); + } else if (descriptor.qname) { + let mapping = declareNamespace(nsContext, node, descriptor.qname.prefix, descriptor.qname.nsURI); + let prefix = mapping ? mapping.prefix : descriptor.qname.prefix; + let attrName = prefix ? prefix + ':' + name : name; + node.attribute(attrName, val); + } + return node; + } + + if (descriptor instanceof ElementDescriptor) { + name = descriptor.qname.name; + let isSimple = descriptor.isSimple; + let attrs = null; + if (descriptor.isMany) { + if (Array.isArray(val)) { + for (let i = 0, n = val.length; i < n; i++) { + node = this.jsonToXml(node, nsContext, descriptor, val[i]); + } + return node; + } + } + if (val !== null && typeof val === "object") { + // check for $attributes field + if (typeof val[this.options.attributesKey] !== "undefined") { + attrs = val[this.options.attributesKey]; + } + // add any $value field as xml element value + if (typeof val[this.options.valueKey] !== "undefined") { + val = val[this.options.valueKey]; + } + } + let element; + let elementName; + let xmlns; + if (descriptor.form === 'unqualified') { + elementName = name; + nsContext.pushContext(); + nameSpaceContextCreated = true; + } else if (descriptor.qname) { + nsContext.pushContext(); + nameSpaceContextCreated = true; + // get the mapping for the namespace uri + let mapping = nsContext.getPrefixMapping(descriptor.qname.nsURI); + let newlyDeclared = false; + // if namespace not declared, declare it + if (mapping === null || mapping.declared === false) { + newlyDeclared = true; + mapping = declareNamespace(nsContext, null, descriptor.qname.prefix, descriptor.qname.nsURI); + } + // add the element to a parent node + let prefix = mapping ? mapping.prefix : descriptor.qname.prefix; + elementName = prefix ? prefix + ':' + name : name; + // if namespace is newly declared add the xmlns attribute + if (newlyDeclared) { + xmlns = prefix ? 'xmlns:' + prefix : 'xmlns'; + } + } + + // add the element to a parent node + if (isSimple && /", ""); + element.cdata(val); + } else if (isSimple && typeof val !== "undefined" && val !== null && typeof val[this.options.xmlKey] !== "undefined") { + val = val[this.options.xmlKey]; + element = node.element(elementName); + val = toXmlDateOrTime(descriptor, val); + element.raw(val); + } else { + // Enforce the type restrictions if configured for such + if (this.options.enforceRestrictions && descriptor.type) { + const schema = this.schemas[descriptor.type.nsURI]; + if (schema) { + const type = schema.simpleTypes[descriptor.type.name]; + if (type) { + const restriction = type.restriction; + if (restriction) { + val = restriction.enforce(val); + } + } + } + } + val = toXmlDateOrTime(descriptor, val); + element = isSimple ? node.element(elementName, val) : node.element(elementName); + } + + if (xmlns && descriptor.qname.nsURI) { + if (typeof element.attribute === 'function') { + element.attribute(xmlns, descriptor.qname.nsURI); + } + } + + if (val == null) { + if (descriptor.isNillable) { + // Set xsi:nil = true + declareNamespace(nsContext, element, 'xsi', helper.namespaces.xsi); + if (typeof element.attribute === 'function') { + element.attribute('xsi:nil', true); + } + } + } + + if (isSimple) { + if (attrs !== null) { + // add each field in $attributes object as xml element attribute + if (typeof attrs === "object") { + //add $attributes. Attribute can be an attribute defined in XSD or an xsi:type + this.addAttributes(element, nsContext, descriptor, val, attrs); + } + } + if (nameSpaceContextCreated) { + nsContext.popContext(); + } + return node; + } else if (val != null) { + + let attrs = val[this.options.attributesKey]; + if (typeof attrs === 'object') { + for (let p in attrs) { + let child = attrs[p]; + if (p === this.options.xsiTypeKey) { + if (descriptor instanceof ElementDescriptor) { + if (descriptor.refOriginal) { + if (descriptor.refOriginal.typeDescriptor) { + if (descriptor.refOriginal.typeDescriptor.inheritance) { + let extension = descriptor.refOriginal.typeDescriptor.inheritance[child.type]; + if (extension) { + descriptor.elements = descriptor.elements.concat(extension.elements); + } + } + } + } + } + } + } + } + } + //val is not an object - simple or date types + if (val != null && (typeof val !== 'object' || val instanceof Date)) { + // for adding a field value nsContext.popContext() shouldnt be called + val = toXmlDateOrTime(descriptor, val); + element.text(val); + //add $attributes. Attribute can be an attribute defined in XSD or an xsi:type. + //e.g of xsi:type some name + if (attrs != null) { + this.addAttributes(element, nsContext, descriptor, val, attrs); + } + if (nameSpaceContextCreated) { + nsContext.popContext(); + } + return node; + } + + this.mapObject(element, nsContext, descriptor, val, attrs); + if (nameSpaceContextCreated) { + nsContext.popContext(); + } + return node; + } + + if (descriptor == null || descriptor === undefined || descriptor instanceof TypeDescriptor) { + this.mapObject(node, nsContext, descriptor, val); + return node; + } + + return node; + } + + /** + * Check if the attributes have xsi:type and return the xsi type descriptor if exists + * @param {*} descriptor The current descriptor + * @param {*} attrs An object of attribute values + */ + getXsiType(descriptor, attrs) { + var xsiTypeDescriptor; + if (attrs != null && typeof attrs === "object") { + for (let p in attrs) { + let child = attrs[p]; + // if field is $xsiType add xsi:type attribute + if (p === this.options.xsiTypeKey) { + let xsiType; + if (typeof child === "object" && typeof child.type !== "undefined") { + // $xsiType has two fields - type, xmlns + xsiType = QName.parse(child.type, child.xmlns); + } else { + xsiType = QName.parse(child); + } + var schema = this.schemas[xsiType.nsURI]; + if (schema) { + var xsiTypeInfo = schema.complexTypes[xsiType.name] || schema.simpleTypes[xsiType.name]; + // The type might not be described + // describe() takes wsdl definitions + xsiTypeDescriptor = xsiTypeInfo && xsiTypeInfo.describe({ schemas: this.schemas }); + } + break; + } + } + } + return xsiTypeDescriptor; + } + + _sortKeys(val, elementOrder) { + function compare(n1, n2, order) { + let i1 = order.indexOf(n1); + if (i1 === -1) i1 = order.length; + let i2 = order.indexOf(n2); + if (i2 === -1) i2 = order.length; + return i1 - i2; + } + const keys = Object.keys(val); + var names = [].concat(keys).sort((n1, n2) => { + let result = compare(n1, n2, elementOrder); + if (result === 0) { + result = compare(n1, n2, keys); + } + return result; + }); + return names; + } + + /** + * Map a JSON object into an XML type + * @param {XMLElement} node The root node + * @param {NamespaceContext} nsContext Namespace context + * @param {TypeDescriptor|ElementDescriptor} descriptor + * @param {Object} val + * @returns {*} + */ + mapObject(node, nsContext, descriptor, val, attrs) { + if (val == null) return node; + if (typeof val !== 'object' || val instanceof Date) { + val = toXmlDateOrTime(descriptor, val); + node.text(val); + return node; + } + + // First try to see if a subtype should be used + var xsiType = this.getXsiType(descriptor, attrs); + descriptor = xsiType || descriptor; + + var elements = {}, + attributes = {}; + var elementOrder = []; + if (descriptor != null) { + for (let i = 0, n = descriptor.elements.length; i < n; i++) { + let elementDescriptor = descriptor.elements[i]; + let elementName = elementDescriptor.qname.name; + elements[elementName] = elementDescriptor; + elementOrder.push(elementName); + } + } + + if (descriptor != null) { + for (let a in descriptor.attributes) { + let attributeDescriptor = descriptor.attributes[a]; + let attributeName = attributeDescriptor.qname.name; + attributes[attributeName] = attributeDescriptor; + } + } + + // handle later if value is an array + if (!Array.isArray(val)) { + const names = this._sortKeys(val, elementOrder); + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = names[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + let p = _step.value; + + if (p === this.options.attributesKey) continue; + let child = val[p]; + let childDescriptor = elements[p] || attributes[p]; + if (childDescriptor == null) { + if (this.options.ignoreUnknownProperties) continue;else childDescriptor = new ElementDescriptor(QName.parse(p), null, 'unqualified', Array.isArray(child)); + } + if (childDescriptor) { + this.jsonToXml(node, nsContext, childDescriptor, child); + } + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + } + + this.addAttributes(node, nsContext, descriptor, val, attrs); + + return node; + } + + addAttributes(node, nsContext, descriptor, val, attrs) { + var attrDescriptors = descriptor && descriptor.attributes || []; + var attributes = {}; + for (var i = 0; i < attrDescriptors.length; i++) { + var qname = attrDescriptors[i].qname; + attributes[qname.name] = attrDescriptors[i]; + } + if (attrs != null && typeof attrs === 'object') { + for (let p in attrs) { + let child = attrs[p]; + // if field is $xsiType add xsi:type attribute + if (p === this.options.xsiTypeKey) { + let xsiType; + if (typeof child === 'object' && typeof child.type !== 'undefined') { + // $xsiType has two fields - type, xmlns + xsiType = QName.parse(child.type, child.xmlns); + } else { + xsiType = QName.parse(child); + } + declareNamespace(nsContext, node, 'xsi', helper.namespaces.xsi); + let mapping = declareNamespace(nsContext, node, xsiType.prefix, xsiType.nsURI); + let prefix = mapping ? mapping.prefix : xsiType.prefix; + node.attribute('xsi:type', prefix ? prefix + ':' + xsiType.name : xsiType.name); + continue; + } + let childDescriptor = attributes[p]; + if (childDescriptor == null) { + if (this.options.ignoreUnknownProperties) continue;else { + childDescriptor = new AttributeDescriptor(QName.parse(p), null, 'unqualified'); + } + } + this.jsonToXml(node, nsContext, childDescriptor, child); + } + } + } + + static createSOAPEnvelope(prefix, nsURI) { + prefix = prefix || 'soap'; + var doc = xmlBuilder.create(prefix + ':Envelope', { version: '1.0', encoding: 'UTF-8', standalone: true }); + nsURI = nsURI || 'http://schemas.xmlsoap.org/soap/envelope/'; + doc.attribute('xmlns:' + prefix, nsURI); + let header = doc.element(prefix + ':Header'); + let body = doc.element(prefix + ':Body'); + return { + body: body, + header: header, + doc: doc + }; + } + + static createSOAPEnvelopeDescriptor(prefix, nsURI, parameterDescriptor) { + prefix = prefix || 'soap'; + nsURI = nsURI || 'http://schemas.xmlsoap.org/soap/envelope/'; + var descriptor = new TypeDescriptor(); + + var envelopeDescriptor = new ElementDescriptor(new QName(nsURI, 'Envelope', prefix), null, 'qualified', false); + descriptor.addElement(envelopeDescriptor); + + var headerDescriptor = new ElementDescriptor(new QName(nsURI, 'Header', prefix), null, 'qualified', false); + + var bodyDescriptor = new ElementDescriptor(new QName(nsURI, 'Body', prefix), null, 'qualified', false); + + envelopeDescriptor.addElement(headerDescriptor); + envelopeDescriptor.addElement(bodyDescriptor); + + if (parameterDescriptor && parameterDescriptor.body) { + bodyDescriptor.add(parameterDescriptor.body); + } + + if (parameterDescriptor && parameterDescriptor.headers) { + bodyDescriptor.add(parameterDescriptor.headers); + } + + if (parameterDescriptor && parameterDescriptor.faults) { + var xsdStr = new QName(helper.namespaces.xsd, 'string', 'xsd'); + var faultDescriptor = new ElementDescriptor(new QName(nsURI, 'Fault', prefix), null, 'qualified', false); + faultDescriptor.addElement(new ElementDescriptor(nsURI, 'faultcode', xsdStr, 'qualified', false)); + faultDescriptor.addElement(new ElementDescriptor(nsURI, 'faultstring', xsdStr, 'qualified', false)); + faultDescriptor.addElement(new ElementDescriptor(nsURI, 'faultactor', xsdStr, 'qualified', false)); + var detailDescriptor = new ElementDescriptor(nsURI, 'detail', null, 'qualified', false); + faultDescriptor.addElement(detailDescriptor); + + for (var f in parameterDescriptor.faults) { + detailDescriptor.add(parameterDescriptor.faults[f]); + } + } + + return descriptor; + } + + /** + * Parse XML string or stream into the XMLBuilder tree + * @param root The root node + * @param xml XML string or stream + * @param cb + * @returns {*} + */ + static parseXml(root, xml, cb) { + let parser; + let stringMode = true; + debug('XMLHandler parseXML. root: %j xml: %j', root, xml); + if (typeof xml === 'string') { + stringMode = true; + parser = sax.parser(true, { opt: { xmlns: true } }); + } else if (xml instanceof stream.Readable) { + stringMode = false; + parser = sax.createStream(true, { opt: { xmlns: true } }); + } + if (!root) { + root = xmlBuilder.begin(); + } + let current = root; + let stack = [root]; + + parser.onerror = function (e) { + // an error happened. + if (cb) process.nextTick(cb); + }; + + parser.ontext = function (text) { + // got some text. t is the string of text. + if (current.isDocument) return; + text = text.trim(); + if (text) { + current.text(text); + } + }; + + parser.oncdata = function (text) { + if (current.isDocument) return; + text = text.trim(); + if (text) { + current.cdata(text); + } + }; + + parser.onopentag = function (node) { + // opened a tag. node has "name" and "attributes" + let element = current.element(node.name); + if (node.attributes) { + element.attribute(node.attributes); + } + stack.push(element); + current = element; + }; + + parser.onclosetag = function (nsName) { + var top = stack.pop(); + assert(top === current); + assert(top.name === nsName); + current = stack[stack.length - 1]; + }; + + parser.onend = function () { + if (cb) process.nextTick(function () { + // parser stream is done, and ready to have more stuff written to it. + cb && cb(null, root); + }); + }; + + if (stringMode) { + parser.write(xml).close(); + } else { + xml.pipe(parser); + } + return root; + } + + _processText(top, val) { + // The parent element has xsi:nil = true + if (top.object === null) return; + // Top object has no other elements or attributes + if (top.object === undefined) { + top.object = val; + } else if (top.object.constructor === Object) { + // Top object already has attributes or elements + let value = top.object[this.options.valueKey]; + if (value !== undefined) { + top.object[this.options.valueKey] = value + val; + } else { + top.object[this.options.valueKey] = val; + } + } else { + // Top object is other simple types, such as string or date + top.object = top.object + val; + } + } + + xmlToJson(nsContext, xml, descriptor) { + var self = this; + var p = sax.parser(true); + nsContext = nsContext || new NamespaceContext(); + var root = {}; + var refs = {}, + id; // {id: {hrefs:[], obj:}, ...} + var stack = [{ name: null, object: root, descriptor: descriptor }]; + var options = this.options; + + p.onopentag = function (node) { + nsContext.pushContext(); + var top = stack[stack.length - 1]; + var descriptor = top.descriptor; + var nsName = node.name; + var attrs = node.attributes; + var obj = undefined; + var elementAttributes = null; + + // Register namespaces 1st + for (let a in attrs) { + if (/^xmlns:|^xmlns$/.test(a)) { + let prefix = a === 'xmlns' ? '' : a.substring(6); + nsContext.addNamespace(prefix, attrs[a]); + } + } + + // Handle regular attributes + for (let a in attrs) { + if (/^xmlns:|^xmlns$/.test(a)) continue; + let qname = QName.parse(a); + var isXsiType = false; + var xsiType = null; + var xsiXmlns = null; + if (nsContext.getNamespaceURI(qname.prefix) === helper.namespaces.xsi) { + // Handle xsi:* + if (qname.name == 'nil') { + // xsi:nil + if (attrs[a] === 'true') { + obj = null; + } + continue; + } else if (qname.name === 'type') { + // xsi:type + isXsiType = true; + xsiType = attrs[a]; + xsiType = QName.parse(xsiType); + attrs[a] = xsiType.name; + if (xsiType.prefix) { + xsiXmlns = nsContext.getNamespaceURI(xsiType.prefix); + } + } + } + let attrName = qname.name; + elementAttributes = elementAttributes || {}; + let attrDescriptor = descriptor && descriptor.findAttribute(qname.name); + let attrValue = parseValue(attrs[a], attrDescriptor); + // if element attribute is xsi:type add $xsiType field + if (isXsiType) { + // $xsiType object has two fields - type and xmlns + xsiType = {}; + xsiType.type = attrs[a]; + xsiType.xmlns = xsiXmlns; + elementAttributes[options.xsiTypeKey] = xsiType; + } else { + elementAttributes[attrName] = attrs[a]; + } + } + + if (elementAttributes) { + obj = {}; + obj[self.options.attributesKey] = elementAttributes; + } + + var elementQName = QName.parse(nsName); + elementQName.nsURI = nsContext.getNamespaceURI(elementQName.prefix); + + // SOAP href (#id) + if (attrs.href != null) { + id = attrs.href.substr(1); + if (refs[id] === undefined) { + refs[id] = { hrefs: [], object: null }; + } + refs[id].hrefs.push({ + parent: top.object, key: elementQName.name, object: obj + }); + } + id = attrs.id; + if (id != null) { + if (refs[id] === undefined) refs[id] = { hrefs: [], object: null }; + } + + stack.push({ + name: elementQName.name, + object: obj, + descriptor: descriptor && descriptor.findElement(elementQName.name), + id: attrs.id + }); + }; + + p.onclosetag = function (nsName) { + var elementName = QName.parse(nsName).name; + nsContext.popContext(); + var current = stack.pop(); + var top = stack[stack.length - 1]; + if (top.object === undefined) { + top.object = {}; + } + if (top.object !== null) { + if (typeof top.object === 'object' && elementName in top.object) { + // The element exist already, let's create an array + let val = top.object[elementName]; + if (Array.isArray(val)) { + // Add to the existing array + val.push(current.object); + } else { + // Convert the element value to an array + top.object[elementName] = [val, current.object]; + } + } else { + top.object[elementName] = current.object; + } + } + if (current.id != null) { + refs[current.id].object = current.object; + } + }; + + p.oncdata = function (text) { + text = text && text.trim(); + if (!text.length) return; + + if (/<\?xml[\s\S]+\?>/.test(text)) { + text = self.xmlToJson(null, text); + } + // add contents of CDATA to the xml output as a text + p.handleJsonObject(text); + }; + + p.handleJsonObject = function (text) { + var top = stack[stack.length - 1]; + self._processText(top, text); + }; + + p.ontext = function (text) { + text = text && text.trim(); + if (!text.length) return; + + var top = stack[stack.length - 1]; + var descriptor = top.descriptor; + var value = parseValue(text, descriptor); + self._processText(top, value); + }; + + p.write(xml).close(); + + // merge obj with href + var merge = function merge(href, obj) { + for (var j in obj) { + if (obj.hasOwnProperty(j)) { + href.object[j] = obj[j]; + } + } + }; + + // MultiRef support: merge objects instead of replacing + for (let n in refs) { + var ref = refs[n]; + for (var i = 0; i < ref.hrefs.length; i++) { + merge(ref.hrefs[i], ref.object); + } + } + + if (root.Envelope) { + var body = root.Envelope.Body; + if (root.Envelope.Body !== undefined && root.Envelope.Body !== null) { + if (body.Fault !== undefined && body.Fault !== null) { + //check if fault is soap 1.1 fault + var errorMessage = getSoap11FaultErrorMessage(body.Fault); + //check if fault is soap 1.2 fault + if (errorMessage == null) { + errorMessage = getSoap12FaultErrorMessage(body.Fault); + } + //couldn't process error message for neither soap 1.1 nor soap 1.2 fault. Nothing else can be done at this point. Send a generic error message. + if (errorMessage == null) { + errorMessage = 'Error occurred processing Fault response.'; + } + var error = new Error(errorMessage); + error.root = root; + throw error; + } + } + return root.Envelope; + } + return root; + } + +} + +function getSoap11FaultErrorMessage(faultBody) { + var errorMessage = null; + var faultcode = selectn('faultcode.$value', faultBody) || selectn('faultcode', faultBody); + if (faultcode) { + //soap 1.1 fault + errorMessage = ' '; + //All of the soap 1.1 fault elements should contain string value except detail element which may be a complex type or plain text (string) + if (typeof faultcode == 'string') { + errorMessage = 'faultcode: ' + faultcode; + } + var faultstring = selectn('faultstring.$value', faultBody) || selectn('faultstring', faultBody); + if (faultstring && typeof faultstring == 'string') { + errorMessage = errorMessage + ' faultstring: ' + faultstring; + } + var faultactor = selectn('faultactor.$value', faultBody) || selectn('faultactor', faultBody); + if (faultactor && typeof faultactor == 'string') { + errorMessage = errorMessage + ' faultactor: ' + faultactor; + } + var detail = selectn('detail.$value', faultBody) || selectn('detail', faultBody); + if (detail != null) { + if (typeof detail == 'string') { + //plain text + errorMessage = errorMessage + ' detail: ' + detail; + } else { + //XML type defined in wsdl + errorMessage = errorMessage + ' detail: ' + JSON.stringify(detail); + } + } + } + return errorMessage; +} + +function getSoap12FaultErrorMessage(faultBody) { + var errorMessage = null; + let code = selectn('Code', faultBody) || selectn('Code', faultBody); + if (code) { + //soap 1.2 fault elements have child elements. Hence use JSON.stringify to formulate the error message. + errorMessage = ' '; + errorMessage = errorMessage + 'Code: ' + JSON.stringify(code); + var value = selectn('Value.$value', faultBody) || selectn('Value', faultBody); + if (value) { + errorMessage = errorMessage + ' ' + 'Value: ' + JSON.stringify(value); + } + var subCode = selectn('Subcode.$value', faultBody) || selectn('Subcode', faultBody); + if (subCode) { + errorMessage = errorMessage + ' ' + 'Subcode: ' + JSON.stringify(subCode); + } + var reason = selectn('reason.$value', faultBody) || selectn('Reason', faultBody); + if (reason) { + errorMessage = errorMessage + ' ' + 'Reason: ' + JSON.stringify(reason); + } + var node = selectn('Node.$value', faultBody) || selectn('Node', faultBody); + if (node) { + errorMessage = errorMessage + ' ' + 'Node: ' + JSON.stringify(node); + } + var role = selectn('Role.$value', faultBody) || selectn('Role', faultBody); + if (role) { + errorMessage = errorMessage + ' ' + 'Role: ' + JSON.stringify(role); + } + var detail = selectn('Detail.$value', faultBody) || selectn('Detail', faultBody); + if (detail != null) { + if (typeof detail == 'string') { + //plain text + errorMessage = errorMessage + ' Detail: ' + detail; + } else { + //XML type defined in wsdl + errorMessage = errorMessage + ' Detail: ' + JSON.stringify(detail); + } + } + } + return errorMessage; +} + +function declareNamespace(nsContext, node, prefix, nsURI) { + var mapping = nsContext.declareNamespace(prefix, nsURI); + if (!mapping) { + return false; + } else if (node) { + if (typeof node.attribute === 'function') { + // Some types of node such as XMLDummy does not allow attribute + node.attribute('xmlns:' + mapping.prefix, mapping.uri); + } + return mapping; + } + return mapping; +} + +function parseValue(text, descriptor) { + if (typeof text !== 'string') return text; + var value = text; + var jsType = descriptor && descriptor.jsType; + if (jsType === Date) { + var dateText = text; + // Checks for xs:date with tz, drops the tz + // because xs:date doesn't have a time to offset + // and JS Date object doesn't store an arbitrary tz + if (dateText.length === 16) { + dateText = text.substr(0, 10); + } + value = new Date(dateText); + } else if (jsType === Boolean) { + if (text === 'true' || text === '1') { + value = true; + } else { + value = false; + } + } else if (typeof jsType === 'function') { + value = jsType(text); + } + return value; +} + +function toXmlDate(date) { + date = new Date(date); + var isoStr = date.toISOString(); + return isoStr.split('T')[0] + 'Z'; +} + +function toXmlTime(date) { + date = new Date(date); + var isoStr = date.toISOString(); + return isoStr.split('T')[1]; +} + +function toXmlDateTime(date) { + date = new Date(date); + var isoStr = date.toISOString(); + return isoStr; +} + +function toXmlDateOrTime(descriptor, val) { + if (!descriptor || !descriptor.type) return val; + if (descriptor.type.name === 'date') { + val = toXmlDate(val); + } else if (descriptor.type.name === 'time') { + val = toXmlTime(val); + } else if (descriptor.type.name === 'dateTime') { + val = toXmlDateTime(val); + } + return val; +} + +module.exports = XMLHandler; + +// Exported function for testing +module.exports.parseValue = parseValue; +module.exports.toXmlDate = toXmlDate; +module.exports.toXmlTime = toXmlTime; +module.exports.toXmlDateTime = toXmlDateTime; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/xsd.js b/node_modules/strong-soap/lib/parser/xsd.js new file mode 100644 index 00000000..94447001 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/xsd.js @@ -0,0 +1,32 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var helper = require('./helper'); +var builtinTypes; + +function getBuiltinTypes() { + if (builtinTypes) return builtinTypes; + builtinTypes = {}; + var SimpleType = require('./xsd/simpleType'); + for (let t in helper.schemaTypes) { + let type = new SimpleType('xsd:simpleType', { name: t, 'xmlns:xsd': helper.namespaces.xsd }, {}); + type.targetNamespace = helper.namespaces.xsd; + type.jsType = helper.schemaTypes[t]; + builtinTypes[t] = type; + } + return builtinTypes; +} + +exports.getBuiltinTypes = getBuiltinTypes; + +exports.getBuiltinType = function (name) { + return getBuiltinTypes()[name]; +}; + +function parse(value, type) { + var SimpleType = require('./xsd/simpleType'); +} \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/xsd/all.js b/node_modules/strong-soap/lib/parser/xsd/all.js new file mode 100644 index 00000000..2d28fb72 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/xsd/all.js @@ -0,0 +1,19 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var XSDElement = require('./xsdElement'); + +class All extends XSDElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } +} + +All.elementName = 'all'; +All.allowedChildren = ['annotation', 'element']; + +module.exports = All; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/xsd/annotation.js b/node_modules/strong-soap/lib/parser/xsd/annotation.js new file mode 100644 index 00000000..e13006b1 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/xsd/annotation.js @@ -0,0 +1,19 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var XSDElement = require('./xsdElement'); + +class Annotation extends XSDElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } +} + +Annotation.elementName = 'annotation'; +Annotation.allowedChildren = ['documentation', 'appinfo']; + +module.exports = Annotation; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/xsd/any.js b/node_modules/strong-soap/lib/parser/xsd/any.js new file mode 100644 index 00000000..4ae9257b --- /dev/null +++ b/node_modules/strong-soap/lib/parser/xsd/any.js @@ -0,0 +1,18 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var XSDElement = require('./xsdElement'); + +class Any extends XSDElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } +} + +Any.elementName = 'any'; + +module.exports = Any; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/xsd/anyAttribute.js b/node_modules/strong-soap/lib/parser/xsd/anyAttribute.js new file mode 100644 index 00000000..32efc125 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/xsd/anyAttribute.js @@ -0,0 +1,18 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var XSDElement = require('./xsdElement'); + +class AnyAttribute extends XSDElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } +} + +AnyAttribute.elementName = 'anyAttribute'; + +module.exports = AnyAttribute; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/xsd/attribute.js b/node_modules/strong-soap/lib/parser/xsd/attribute.js new file mode 100644 index 00000000..5dd28851 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/xsd/attribute.js @@ -0,0 +1,71 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var XSDElement = require('./xsdElement'); +var Schema = require('./schema'); +var QName = require('../qname'); + +class Attribute extends XSDElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } + + getForm() { + var parent = this.parent; + if (parent instanceof Schema) { + // Global attribute + return 'qualified'; + } + if (this.$form) { + return this.$form; + } + while (parent) { + if (parent instanceof Schema) { + return parent.$attributeFormDefault || 'unqualified'; + } + parent = parent.parent; + } + return 'unqualified'; + } + + describe(definitions) { + if (this.descriptor) return this.descriptor; + + if (this.ref) { + // Ref to a global attribute + this.descriptor = this.ref.describe(definitions); + this.descriptor.form = 'qualified'; + } else { + var form = this.getForm(); + var qname = this.getQName(); + var isMany = this.isMany(); + var type = this.type; + var typeQName; + if (type instanceof QName) { + typeQName = type; + } else if (type instanceof XSDElement) { + typeQName = type.getQName(); + } + this.descriptor = new XSDElement.AttributeDescriptor(qname, typeQName, form, isMany); + } + return this.descriptor; + } + + postProcess(defintions) { + var schemas = defintions.schemas; + if (this.$ref) { + this.ref = this.resolveSchemaObject(schemas, 'attribute', this.$ref); + } else if (this.$type) { + this.type = this.resolveSchemaObject(schemas, 'type', this.$type); + } + } +} + +Attribute.elementName = 'attribute'; +Attribute.allowedChildren = ['annotation', 'simpleType']; + +module.exports = Attribute; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/xsd/attributeGroup.js b/node_modules/strong-soap/lib/parser/xsd/attributeGroup.js new file mode 100644 index 00000000..c48e4056 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/xsd/attributeGroup.js @@ -0,0 +1,35 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var XSDElement = require('./xsdElement'); + +class AttributeGroup extends XSDElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } + + resolve(schemas) { + if (this.$ref) { + this.ref = this.resolveSchemaObject(schemas, 'attributeGroup', this.$ref); + } + } + + describe(definitions) { + if (this.descriptor) return this.descriptor; + if (this.ref) { + this.descriptor = this.ref.describe(definitions); + } else { + this.descriptor = this.describeChildren(definitions); + } + return this.descriptor; + } +} + +AttributeGroup.elementName = 'attributeGroup'; +AttributeGroup.allowedChildren = ['annotation', 'attribute', 'attributeGroup', 'anyAttribute']; + +module.exports = AttributeGroup; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/xsd/choice.js b/node_modules/strong-soap/lib/parser/xsd/choice.js new file mode 100644 index 00000000..251e6524 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/xsd/choice.js @@ -0,0 +1,19 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var XSDElement = require('./xsdElement'); + +class Choice extends XSDElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } +} + +Choice.elementName = 'choice'; +Choice.allowedChildren = ['annotation', 'element', 'group', 'sequence', 'choice', 'any']; + +module.exports = Choice; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/xsd/complexContent.js b/node_modules/strong-soap/lib/parser/xsd/complexContent.js new file mode 100644 index 00000000..32cbf892 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/xsd/complexContent.js @@ -0,0 +1,34 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var XSDElement = require('./xsdElement'); +var Extension = require('./extension'); + +class ComplexContent extends XSDElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } + + describe(definitions) { + if (this.descriptor) return this.descriptor; + var descriptor = this.descriptor = new XSDElement.TypeDescriptor(); + var children = this.children || []; + var childDescriptor; + for (var i = 0, child; child = children[i]; i++) { + childDescriptor = child.describe(definitions); + if (childDescriptor) { + descriptor.add(childDescriptor); + } + } + return descriptor; + } +} + +ComplexContent.elementName = 'complexContent'; +ComplexContent.allowedChildren = ['annotation', 'extension', 'restriction']; + +module.exports = ComplexContent; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/xsd/complexType.js b/node_modules/strong-soap/lib/parser/xsd/complexType.js new file mode 100644 index 00000000..26d2c35f --- /dev/null +++ b/node_modules/strong-soap/lib/parser/xsd/complexType.js @@ -0,0 +1,74 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var XSDElement = require('./xsdElement'); +var Choice = require('./choice'); +var Sequence = require('./sequence'); +var All = require('./all'); +var SimpleContent = require('./simpleContent'); +var ComplexContent = require('./complexContent'); + +class ComplexType extends XSDElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } + + describe(definitions) { + if (this.descriptor) return this.descriptor; + var descriptor = this.descriptor = new XSDElement.TypeDescriptor(); + if (this.$mixed) { + descriptor.mixed = true; + } + var children = this.children || []; + var childDescriptor; + for (var i = 0, child; child = children[i]; i++) { + childDescriptor = child.describe(definitions); + if (childDescriptor) { + descriptor.add(childDescriptor); + } + } + descriptor.name = this.$name || this.name; + descriptor.xmlns = this.targetNamespace; + descriptor.isSimple = false; + return descriptor; + } + + describeChildren(definitions) { + if (this.descriptor) { + if (this.descriptor.extension) { + let extension = this.descriptor.extension; + let xmlns = extension.xmlns; + let name = extension.name; + if (xmlns) { + let schemas = definitions.schemas; + if (schemas) { + let schema = schemas[xmlns]; + if (schema) { + let complexTypes = schema.complexTypes; + if (complexTypes) { + let type = complexTypes[name]; + if (type) { + if (type.descriptor) { + if (!type.descriptor.inheritance) { + type.descriptor.inheritance = {}; + } + type.descriptor.inheritance[this.descriptor.name] = this.descriptor; + } + } + } + } + } + } + } + } + } +} + +ComplexType.elementName = 'complexType'; +ComplexType.allowedChildren = ['annotation', 'group', 'sequence', 'all', 'complexContent', 'simpleContent', 'choice', 'attribute', 'attributeGroup', 'anyAttribute']; + +module.exports = ComplexType; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/xsd/descriptor.js b/node_modules/strong-soap/lib/parser/xsd/descriptor.js new file mode 100644 index 00000000..f345ecf7 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/xsd/descriptor.js @@ -0,0 +1,126 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var assert = require('assert'); +var QName = require('../qname'); + +/** + * Descriptor for an XML attribute + */ +class AttributeDescriptor { + constructor(qname, type, form) { + assert(qname == null || qname instanceof QName, 'Invalid qname: ' + qname); + this.qname = qname; + this.type = type; + form = form || 'qualified'; + assert(form === 'qualified' || form === 'unqualified', 'Invalid form: ' + form); + this.form = form; + } +} + +/** + * Descriptor for an XML type + */ +class TypeDescriptor { + constructor(qname) { + this.elements = []; + this.attributes = []; + } + + addElement(element) { + assert(element instanceof ElementDescriptor); + this.elements.push(element); + return element; + } + + addAttribute(attribute) { + assert(attribute instanceof AttributeDescriptor); + this.attributes.push(attribute); + return attribute; + } + + add(item, isMany) { + if (item instanceof ElementDescriptor) { + this.addElement(item.clone(isMany)); + } else if (item instanceof AttributeDescriptor) { + this.addAttribute(item); + } else if (item instanceof TypeDescriptor) { + var i, n; + for (i = 0, n = item.elements.length; i < n; i++) { + this.addElement(item.elements[i]); + } + for (i = 0, n = item.attributes.length; i < n; i++) { + this.addAttribute(item.attributes[i]); + } + if (item.extension) { + this.extension = item.extension; + } + } + } + + findElement(name) { + for (var i = 0, n = this.elements.length; i < n; i++) { + if (this.elements[i].qname.name === name) { + return this.elements[i]; + } + } + return null; + } + + findAttribute(name) { + for (var i = 0, n = this.attributes.length; i < n; i++) { + if (this.attributes[i].qname.name === name) { + return this.attributes[i]; + } + } + return null; + } + + find(name) { + var element = this.findElement(name); + if (element) return element; + var attribute = this.findAttribute(name); + return attribute; + } +} + +/** + * Descriptor for an XML element + */ +class ElementDescriptor extends TypeDescriptor { + constructor(qname, type, form, isMany) { + super(); + assert(qname == null || qname instanceof QName, 'Invalid qname: ' + qname); + this.qname = qname; + this.type = type; + form = form || 'qualified'; + assert(form === 'qualified' || form === 'unqualified', 'Invalid form: ' + form); + this.form = form; + this.isMany = !!isMany; + this.isSimple = false; + } + + clone(isMany) { + // Check if the referencing element or this element has 'maxOccurs>1' + isMany = !!isMany || this.isMany; + var copy = new ElementDescriptor(this.qname, this.type, this.form, isMany); + copy.isNillable = this.isNillable; + copy.isSimple = this.isSimple; + if (this.jsType) copy.jsType = this.jsType; + if (this.elements != null) copy.elements = this.elements; + if (this.attributes != null) copy.attributes = this.attributes; + if (this.mixed != null) copy.mixed = this.mixed; + copy.refOriginal = this; + return copy; + } +} + +module.exports = { + ElementDescriptor: ElementDescriptor, + AttributeDescriptor: AttributeDescriptor, + TypeDescriptor: TypeDescriptor +}; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/xsd/documentation.js b/node_modules/strong-soap/lib/parser/xsd/documentation.js new file mode 100644 index 00000000..f2285118 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/xsd/documentation.js @@ -0,0 +1,19 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var XSDElement = require('./xsdElement'); + +class Documentation extends XSDElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } +} + +Documentation.elementName = 'documentation'; +Documentation.allowedChildren = ['any']; + +module.exports = Documentation; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/xsd/element.js b/node_modules/strong-soap/lib/parser/xsd/element.js new file mode 100644 index 00000000..80811630 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/xsd/element.js @@ -0,0 +1,126 @@ +// Copyright IBM Corp. 2016,2018. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var XSDElement = require('./xsdElement'); +var QName = require('../qname'); +var helper = require('../helper'); +var Schema = require('./schema'); +var ComplexType = require('./complexType'); +var SimpleType = require('./simpleType'); + +class Element extends XSDElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } + + addChild(child) { + this[child.name] = child; + } + + describe(definitions) { + if (this.descriptor) return this.descriptor; + var form = this.getForm(); + var qname = this.getQName(); + var isMany = this.isMany(); + + var type = this.type; + var typeQName; + if (type instanceof QName) { + typeQName = type; + } else if (type instanceof XSDElement) { + typeQName = type.getQName(); + } + var descriptor = this.descriptor = new XSDElement.ElementDescriptor(qname, typeQName, form, isMany); + + if (this.$nillable) { + descriptor.isNillable = true; + } + + if (this.ref) { + // Ref to a global element + var refDescriptor = this.ref.describe(definitions); + if (refDescriptor) { + this.descriptor = descriptor = refDescriptor.clone(isMany); + if (this.$nillable) { + descriptor.isNillable = true; + } + } + } else if (this.type) { + if (this.type instanceof ComplexType) { + descriptor.isSimple = false; + var typeDescriptor = this.type.describe(definitions); + if (typeDescriptor) { + descriptor.elements = typeDescriptor.elements; + descriptor.attributes = typeDescriptor.attributes; + descriptor.mixed = typeDescriptor.mixed; + descriptor.extension = typeDescriptor.extension; + if (descriptor.extension && descriptor.extension.isSimple === true) { + descriptor.isSimple = true; + } + descriptor.typeDescriptor = typeDescriptor; + } + } else if (this.type instanceof SimpleType) { + descriptor.isSimple = true; + descriptor.jsType = this.type.jsType; + } + } else { + // anonymous complexType or simpleType + var children = this.children; + for (var i = 0, child; child = children[i]; i++) { + if (child instanceof ComplexType) { + descriptor.isSimple = false; + var childDescriptor = child.describe(definitions); + if (childDescriptor) { + descriptor.elements = childDescriptor.elements; + descriptor.attributes = childDescriptor.attributes; + descriptor.mixed = childDescriptor.mixed; + } + break; + } else if (child instanceof SimpleType) { + descriptor.isSimple = true; + descriptor.jsType = child.jsType; + } + } + } + return descriptor; + } + + postProcess(defintions) { + var schemas = defintions.schemas; + if (this.$ref) { + this.ref = this.resolveSchemaObject(schemas, 'element', this.$ref); + } else if (this.$type) { + this.type = this.resolveSchemaObject(schemas, 'type', this.$type); + } + if (this.substitutionGroup) { + this.substitutionGroup = this.resolveSchemaObject(schemas, 'element', this.$substitutionGroup); + } + } + + getForm() { + var parent = this.parent; + if (parent instanceof Schema) { + // Global element + return 'qualified'; + } + if (this.$form) { + return this.$form; + } + while (parent) { + if (parent instanceof Schema) { + return parent.$elementFormDefault || 'unqualified'; + } + parent = parent.parent; + } + return 'unqualified'; + } +} + +Element.elementName = 'element'; +Element.allowedChildren = ['annotation', 'complexType', 'simpleType', 'unique', 'key', 'keyref']; + +module.exports = Element; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/xsd/extension.js b/node_modules/strong-soap/lib/parser/xsd/extension.js new file mode 100644 index 00000000..272925a1 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/xsd/extension.js @@ -0,0 +1,45 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var XSDElement = require('./xsdElement'); +var helper = require('../helper'); +var extend = helper.extend; +var Sequence = require('./sequence'); +var Choice = require('./choice'); +var QName = require('../qname'); + +class Extension extends XSDElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } + + describe(definitions) { + if (this.descriptor) return this.descriptor; + var descriptor = this.descriptor = new XSDElement.TypeDescriptor(); + if (this.base) { + let baseDescriptor = this.base.describe(definitions); + descriptor.add(baseDescriptor); + descriptor.extension = {}; + descriptor.extension.name = baseDescriptor.name; + descriptor.extension.xmlns = baseDescriptor.xmlns; + descriptor.extension.isSimple = baseDescriptor.isSimple; + } + return this.describeChildren(definitions, descriptor); + } + + postProcess(defintions) { + var schemas = defintions.schemas; + if (this.$base) { + this.base = this.resolveSchemaObject(schemas, 'type', this.$base); + } + } +} + +Extension.elementName = 'extension'; +Extension.allowedChildren = ['annotation', 'group', 'all', 'sequence', 'choice', 'attribute', 'attributeGroup']; + +module.exports = Extension; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/xsd/group.js b/node_modules/strong-soap/lib/parser/xsd/group.js new file mode 100644 index 00000000..c5def3e6 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/xsd/group.js @@ -0,0 +1,36 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var XSDElement = require('./xsdElement'); + +class Group extends XSDElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } + + postProcess(defintions) { + var schemas = defintions.schemas; + if (this.$ref) { + this.ref = this.resolveSchemaObject(schemas, 'group', this.$ref); + } + } + + describe(definitions) { + if (this.descriptor) return this.descriptor; + if (this.ref) { + this.descriptor = this.ref.describe(definitions); + } else { + this.descriptor = this.describeChildren(definitions); + } + return this.descriptor; + } +} + +Group.elementName = 'group'; +Group.allowedChildren = ['annotation', 'all', 'choice', 'sequence']; + +module.exports = Group; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/xsd/import.js b/node_modules/strong-soap/lib/parser/xsd/import.js new file mode 100644 index 00000000..267cd1f8 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/xsd/import.js @@ -0,0 +1,18 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var XSDElement = require('./xsdElement'); + +class Import extends XSDElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } +} + +Import.elementName = 'import'; + +module.exports = Import; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/xsd/include.js b/node_modules/strong-soap/lib/parser/xsd/include.js new file mode 100644 index 00000000..71f840c1 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/xsd/include.js @@ -0,0 +1,18 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var XSDElement = require('./xsdElement'); + +class Include extends XSDElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } +} + +Include.elementName = 'include'; + +module.exports = Include; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/xsd/key.js b/node_modules/strong-soap/lib/parser/xsd/key.js new file mode 100644 index 00000000..c448a397 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/xsd/key.js @@ -0,0 +1,18 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var KeyBase = require('./keybase'); + +class Key extends KeyBase { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } +} + +Key.elementName = 'key'; + +module.exports = Key; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/xsd/keybase.js b/node_modules/strong-soap/lib/parser/xsd/keybase.js new file mode 100644 index 00000000..e12f2d04 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/xsd/keybase.js @@ -0,0 +1,41 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var g = require('../../globalize'); +var XSDElement = require('./xsdElement'); + +class KeyBase extends XSDElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + this.selector = null; + this.fields = []; + } + + addChild(child) { + if (child.name === 'selector') { + if (this.selector) { + g.warn('The key element %s %s MUST contain one and only one selector element', this.nsName, this.$name); + } + this.selector = child.$xpath; + } else if (child.name === 'field') { + this.fields.push(child.$xpath); + } + } + + postProcess(definitions) { + if (!this.selector) { + g.warn('The key element %s %s MUST contain one and only one selector element', this.nsName, this.$name); + } + if (!this.fields.length) { + g.warn('The key element %s %s MUST contain one or more field elements', this.nsName, this.$name); + } + } +} + +KeyBase.allowedChildren = ['annotation', 'selector', 'field']; + +module.exports = KeyBase; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/xsd/keyref.js b/node_modules/strong-soap/lib/parser/xsd/keyref.js new file mode 100644 index 00000000..844e706a --- /dev/null +++ b/node_modules/strong-soap/lib/parser/xsd/keyref.js @@ -0,0 +1,31 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var KeyBase = require('./keybase'); +var QName = require('../qname'); + +class KeyRef extends KeyBase { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } + + postProcess(definitions) { + super.postProcess(definitions); + if (this.$refer) { + let qname = QName.parse(this.$refer); + if (qname.prefix === '') { + qname.nsURI = this.getTargetNamespace(); + } else { + qname.nsURI = this.getNamespaceURI(qname.prefix); + } + } + } +} + +KeyRef.elementName = 'keyref'; + +module.exports = KeyRef; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/xsd/list.js b/node_modules/strong-soap/lib/parser/xsd/list.js new file mode 100644 index 00000000..e82fd458 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/xsd/list.js @@ -0,0 +1,47 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var g = require('../../globalize'); +var XSDElement = require('./xsdElement'); +var helper = require('../helper'); +var QName = require('../qname'); +var SimpleType = require('./simpleType'); + +class List extends XSDElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } + + postProcess(definitions) { + if (this.itemType !== undefined) { + return; + } + var self = this; + if (this.$itemType) { + var qname = QName.parse(this.$itemType); + this.itemType = this.resolveSchemaObject(definitions.schemas, 'simpleType', this.$itemType); + } + this.children.forEach(function (c) { + if (c instanceof SimpleType) { + if (self.$itemType) { + g.warn('Attribute {{itemType}} is not allowed if the content ' + 'contains a {{simpleType}} element'); + } else if (self.itemType) { + g.warn('List can only contain one {{simpleType}} element'); + } + self.itemType = c; + } + }); + if (!this.itemType) { + g.warn('List must have an item type'); + } + } +} + +List.elementName = 'list'; +List.allowedChildren = ['annotation', 'simpleType']; + +module.exports = List; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/xsd/restriction.js b/node_modules/strong-soap/lib/parser/xsd/restriction.js new file mode 100644 index 00000000..872adea6 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/xsd/restriction.js @@ -0,0 +1,208 @@ +// Copyright IBM Corp. 2016,2019. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var XSDElement = require('./xsdElement'); +var Sequence = require('./sequence'); +var Choice = require('./choice'); +var QName = require('../qname'); +var g = require('../../globalize'); + +class Restriction extends XSDElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } + + addChild(child) { + /* + * simpleType: @base|minExclusive|minInclusive|maxExclusive|maxInclusive| + * totalDigits|fractionDigits|length|minLength|maxLength| + * enumeration|whiteSpace|pattern + * simpleContent: @base|minExclusive|minInclusive|maxExclusive|maxInclusive| + * totalDigits|fractionDigits|length|minLength|maxLength| + * enumeration|whiteSpace|pattern| + * attribute|attributeGroup + * complexContent: @base|minExclusive|minInclusive|maxExclusive|maxInclusive| + * totalDigits|fractionDigits|length|minLength|maxLength| + * enumeration|whiteSpace|pattern| + * group|all|choice|sequence| + * attribute|attributeGroup + */ + switch (child.name) { + case 'minExclusive': + case 'minInclusive': + case 'maxExclusive': + case 'maxInclusive': + case 'totalDigits': + case 'fractionDigits': + case 'length': + case 'minLength': + case 'maxLength': + case 'whiteSpace': + case 'pattern': + this[child.name] = child.$value; + break; + case 'enumeration': + this[child.name] = this[child.name] || []; + this[child.name].push(child.$value); + break; + } + if (this.parent.elementName === 'simpleContent') { + // + } else if (this.parent.elementName === 'complexContent') { + // + } + } + + describe(definitions) { + if (this.descriptor) return this.descriptor; + var descriptor = this.descriptor = new XSDElement.TypeDescriptor(); + if (this.base) { + descriptor.add(this.base.describe(definitions)); + } + return this.describeChildren(definitions, descriptor); + } + + postProcess(defintions) { + if (this.base) return; + var schemas = defintions.schemas; + if (this.$base) { + if (this.parent.name === 'simpleContent' || this.parent.name === 'simpleType') { + this.base = this.resolveSchemaObject(schemas, 'simpleType', this.$base); + } else if (this.parent.name === 'complexContent') { + this.base = this.resolveSchemaObject(schemas, 'complexType', this.$base); + // + } + } + if (this.base) { + this.base.postProcess(defintions); + } + } + + _getFractionDigitCount(val) { + var lastDotPos = val.lastIndexOf('.'); + if (lastDotPos !== -1) { + return val.length - 1 - lastDotPos; + } + + return 0; + } + + _getTotalDigitCount(val) { + var stripped = val.replace('-', '').replace('.', '').trim(); + return stripped.length; + } + + enforce(val) { + var violations = []; + + if (this.base) { + if (this.base.jsType === Boolean) { + val = val === 'true' || val === true; + } else if (typeof this.base.jsType === 'function' && this.base.jsType !== Date && this.base.jsType !== Number) { + val = this.base.jsType(val); + } + } + + if (this.minExclusive !== undefined) { + if (val <= this.minExclusive) { + violations.push('value is less or equal than minExclusive (' + val + ' <= ' + this.minExclusive + ')'); + } + } + + if (this.minInclusive !== undefined) { + if (val < this.minInclusive) { + violations.push('value is less than minInclusive (' + val + ' < ' + this.minInclusive + ')'); + } + } + + if (this.maxExclusive !== undefined) { + if (val >= this.maxExclusive) { + violations.push('value is greater or equal than maxExclusive (' + val + ' >= ' + this.maxExclusive + ')'); + } + } + + if (this.maxInclusive !== undefined) { + if (val > this.maxInclusive) { + violations.push('value is greater than maxInclusive (' + val + ' > ' + this.maxInclusive + ')'); + } + } + + if (this.fractionDigits !== undefined) { + if (typeof val === 'string') { + var fractionDigitCount = this._getFractionDigitCount(val); + if (fractionDigitCount > this.fractionDigits) { + violations.push('value has more decimal places than allowed (' + fractionDigitCount + ' > ' + this.fractionDigits + ')'); + } + } else if (typeof val === 'number') { + val = val.toFixed(this.fractionDigits); + } + } + + if (this.totalDigits !== undefined) { + if (typeof val === 'string') { + var totalDigits = this._getTotalDigitCount(val); + if (totalDigits > this.totalDigits) { + violations.push('value has more digits than allowed (' + totalDigits + ' > ' + this.totalDigits + ')'); + } + } else if (typeof val === 'number') { + var integerDigits = parseInt(val).toString().replace('-', '').length; + if (integerDigits > this.totalDigits) { + violations.push('value has more integer digits than allowed (' + integerDigits + ' > ' + this.totalDigits + ')'); + } else { + val = val.toFixed(this.totalDigits - integerDigits); + } + } + } + + if (this.length !== undefined) { + if (val.length !== parseInt(this.length)) { + violations.push('lengths don\'t match (' + val.length + ' != ' + this.length + ')'); + } + } + + if (this.maxLength !== undefined) { + if (val.length > this.maxLength) { + violations.push('length is bigger than maxLength (' + val.length + ' > ' + this.maxLength + ')'); + } + } + + if (this.minLength !== undefined) { + if (val.length < this.minLength) { + violations.push('length is smaller than minLength (' + val.length + ' < ' + this.minLength + ')'); + } + } + + if (this.whiteSpace === 'replace') { + val = val.replace(/[\n\r\t]/mg, ' '); + } else if (this.whiteSpace === 'collapse') { + val = val.replace(/[\n\r\t]/mg, ' ').replace(/[ ]+/mg, ' ').trim(); + } + + if (this.pattern) { + if (!new RegExp(this.pattern).test(val)) { + violations.push('value doesn\'t match the required pattern (' + val + ' !match ' + this.pattern + ')'); + } + } + + if (this.enumeration) { + if (this.enumeration.indexOf(val) === -1) { + violations.push('value is not in the list of valid values (' + val + ' is not in ' + this.enumeration + ')'); + } + } + + if (violations.length > 0) { + throw new Error(g.f('The field %s cannot have value %s due to the violations: %s', this.parent.$name, val, JSON.stringify(violations))); + } + + return val; + } +} + +Restriction.elementName = 'restriction'; +Restriction.allowedChildren = ['annotation', 'minExclusive', 'minInclusive', 'maxExclusive', 'maxInclusive', 'totalDigits', 'fractionDigits', 'length', 'minLength', 'maxLength', 'enumeration', 'whiteSpace', 'pattern', 'group', 'all', 'choice', 'sequence', 'attribute', 'attributeGroup']; + +module.exports = Restriction; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/xsd/schema.js b/node_modules/strong-soap/lib/parser/xsd/schema.js new file mode 100644 index 00000000..10f90ae8 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/xsd/schema.js @@ -0,0 +1,106 @@ +// Copyright IBM Corp. 2016,2018. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var _ = require('lodash'); +var assert = require('assert'); +var XSDElement = require('./xsdElement'); +var helper = require('./../helper'); +var Set = helper.Set; + +class Schema extends XSDElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + this.complexTypes = {}; // complex types + this.simpleTypes = {}; // simple types + this.elements = {}; // elements + this.includes = []; // included or imported schemas + this.groups = {}; + this.attributes = {}; + this.attributeGroups = {}; + } + + merge(source, isInclude) { + if (source === this) return this; + assert(source instanceof Schema); + if (this.$targetNamespace === source.$targetNamespace || + // xsd:include allows the target schema that does not have targetNamespace + isInclude && source.$targetNamespace === undefined) { + _.merge(this.complexTypes, source.complexTypes); + _.merge(this.simpleTypes, source.simpleTypes); + _.merge(this.elements, source.elements); + _.merge(this.groups, source.groups); + _.merge(this.attributes, source.attributes); + _.merge(this.attributeGroups, source.attributeGroups); + _.merge(this.xmlns, source.xmlns); + if (Array.isArray(source.includes)) { + this.includes = _.uniq(this.includes.concat(source.includes)); + } + } + return this; + } + + addChild(child) { + var name = child.$name; + if (child.getTargetNamespace() === helper.namespaces.xsd && name in helper.schemaTypes) return; + switch (child.name) { + case 'include': + case 'import': + var location = child.$schemaLocation || child.$location; + if (location) { + this.includes.push({ + namespace: child.$namespace || child.$targetNamespace || this.$targetNamespace, + location: location, + type: child.name // include or import + }); + } + break; + case 'complexType': + this.complexTypes[name] = child; + break; + case 'simpleType': + this.simpleTypes[name] = child; + break; + case 'element': + this.elements[name] = child; + break; + case 'group': + this.groups[name] = child; + break; + case 'attribute': + this.attributes[name] = child; + break; + case 'attributeGroup': + this.attributeGroups[name] = child; + break; + } + } + + postProcess(defintions) { + var visited = new Set(); + visited.add(this); + this.children.forEach(function (c) { + visitDfs(defintions, visited, c); + }); + } +} + +function visitDfs(defintions, nodes, node) { + let visited = nodes.has(node); + if (!visited && !node._processed) { + node.postProcess(defintions); + node._processed = true; + + node.children.forEach(function (child) { + visitDfs(defintions, nodes, child); + }); + } +} + +Schema.elementName = 'schema'; +Schema.allowedChildren = ['annotation', 'element', 'complexType', 'simpleType', 'include', 'import', 'group', 'attribute', 'attributeGroup']; + +module.exports = Schema; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/xsd/sequence.js b/node_modules/strong-soap/lib/parser/xsd/sequence.js new file mode 100644 index 00000000..6c22e957 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/xsd/sequence.js @@ -0,0 +1,20 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var XSDElement = require('./xsdElement'); +var Any = require('./any'); + +class Sequence extends XSDElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } +} + +Sequence.elementName = 'sequence'; +Sequence.allowedChildren = ['annotation', 'element', 'group', 'sequence', 'choice', 'any']; + +module.exports = Sequence; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/xsd/simpleContent.js b/node_modules/strong-soap/lib/parser/xsd/simpleContent.js new file mode 100644 index 00000000..8f1bfef6 --- /dev/null +++ b/node_modules/strong-soap/lib/parser/xsd/simpleContent.js @@ -0,0 +1,20 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var XSDElement = require('./xsdElement'); +var Extension = require('./extension'); + +class SimpleContent extends XSDElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } +} + +SimpleContent.elementName = 'simpleContent'; +SimpleContent.allowedChildren = ['annotation', 'extension', 'restriction']; + +module.exports = SimpleContent; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/xsd/simpleType.js b/node_modules/strong-soap/lib/parser/xsd/simpleType.js new file mode 100644 index 00000000..60c9ce9b --- /dev/null +++ b/node_modules/strong-soap/lib/parser/xsd/simpleType.js @@ -0,0 +1,67 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var XSDElement = require('./xsdElement'); +var descriptor = require('./descriptor'); +var helper = require('../helper'); +var xsd = require('../xsd'); + +class SimpleType extends XSDElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } + + addChild(child) { + this[child.name] = child; + } + + describe(definitions) { + var descriptor = this.descriptor = new XSDElement.TypeDescriptor(); + descriptor.name = this.$name || this.name; + descriptor.xmlns = this.nsURI; + descriptor.isSimple = true; + return descriptor; + } + + postProcess(definitions) { + if (this.type !== undefined) return; + this.type = String; // Default to String + if (this.targetNamespace === helper.namespaces.xsd) { + this.type = xsd.getBuiltinType(this.$name).jsType; + return; + } + if (this.restriction) { + this.restriction.postProcess(definitions); + if (this.restriction.base) { + // Use the base type + this.type = this.restriction.base.type; + } + } else if (this.list) { + this.list.postProcess(definitions); + if (this.list.itemType) { + this.list.itemType.postProcess(definitions); + this.type = [this.list.itemType.type]; + } + } else if (this.union) { + let memberTypes = []; + memberTypes.union = true; // Set the union flag to true + this.union.postProcess(definitions); + if (this.union.memberTypes) { + this.union.memberTypes.forEach(function (t) { + t.postProcess(definitions); + memberTypes.push(t.type); + }); + this.type = memberTypes; + } + } + } +} + +SimpleType.elementName = 'simpleType'; +SimpleType.allowedChildren = ['annotation', 'list', 'union', 'restriction']; + +module.exports = SimpleType; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/xsd/union.js b/node_modules/strong-soap/lib/parser/xsd/union.js new file mode 100644 index 00000000..09c8110a --- /dev/null +++ b/node_modules/strong-soap/lib/parser/xsd/union.js @@ -0,0 +1,38 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var XSDElement = require('./xsdElement'); +var helper = require('../helper'); +var SimpleType = require('./simpleType'); + +class Union extends XSDElement { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } + + postProcess(definitions) { + if (this.memberTypes) return; + var self = this; + this.memberTypes = []; + if (this.$memberTypes) { + this.$memberTypes.split(/\s+/).filter(Boolean).forEach(function (typeQName) { + var type = self.resolveSchemaObject(definitions.schemas, 'simpleType', typeQName); + self.memberTypes.push(type); + }); + } + this.children.forEach(function (c) { + if (c instanceof SimpleType) { + self.memberTypes.push(c); + } + }); + } +} + +Union.elementName = 'union'; +Union.allowedChildren = ['annotation', 'simpleType']; + +module.exports = Union; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/xsd/unique.js b/node_modules/strong-soap/lib/parser/xsd/unique.js new file mode 100644 index 00000000..9e07039c --- /dev/null +++ b/node_modules/strong-soap/lib/parser/xsd/unique.js @@ -0,0 +1,18 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var KeyBase = require('./keybase'); + +class Unique extends KeyBase { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } +} + +Unique.elementName = 'unique'; + +module.exports = Unique; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/parser/xsd/xsdElement.js b/node_modules/strong-soap/lib/parser/xsd/xsdElement.js new file mode 100644 index 00000000..9917812b --- /dev/null +++ b/node_modules/strong-soap/lib/parser/xsd/xsdElement.js @@ -0,0 +1,59 @@ +// Copyright IBM Corp. 2016,2018. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var Element = require('../element'); +var helper = require('../helper'); +var descriptor = require('./descriptor'); + +class XSDElement extends Element { + constructor(nsName, attrs, options) { + super(nsName, attrs, options); + } + + describeChildren(definitions, descriptor) { + var children = this.children || []; + if (children.length === 0) return descriptor; + descriptor = descriptor || new XSDElement.TypeDescriptor(); + + var isMany = this.isMany(); + var childDescriptor; + for (var i = 0, child; child = children[i]; i++) { + childDescriptor = child.describe(definitions); + if (childDescriptor) { + descriptor.add(childDescriptor, isMany); + } + } + return descriptor; + } + + describe(definitions) { + return this.describeChildren(definitions); + } + + postProcess(definitions) {} + // NO-OP + + + /** + * Check if the max occurrence is many + * @returns {boolean} + */ + isMany() { + if (this.$maxOccurs === 'unbounded') return true; + return Number(this.$maxOccurs) > 1; + } +} + +XSDElement.targetNamespace = Element.namespaces.xsd; +XSDElement.allowedChildren = ['annotation']; + +// Descriptors +XSDElement.ElementDescriptor = descriptor.ElementDescriptor; +XSDElement.AttributeDescriptor = descriptor.AttributeDescriptor; +XSDElement.TypeDescriptor = descriptor.TypeDescriptor; + +module.exports = XSDElement; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/security/BasicAuthSecurity.js b/node_modules/strong-soap/lib/security/BasicAuthSecurity.js new file mode 100644 index 00000000..84c2d9ea --- /dev/null +++ b/node_modules/strong-soap/lib/security/BasicAuthSecurity.js @@ -0,0 +1,24 @@ +// Copyright IBM Corp. 2016,2019. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var _ = require('lodash'); +var Security = require('./security'); + +class BasicAuthSecurity extends Security { + constructor(username, password, options) { + super(options); + this.username = username; + this.password = password; + } + + addHttpHeaders(headers) { + var cred = Buffer.from(this.username + ':' + this.password || '').toString('base64'); + headers.Authorization = 'Basic ' + cred; + } +} + +module.exports = BasicAuthSecurity; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/security/BearerSecurity.js b/node_modules/strong-soap/lib/security/BearerSecurity.js new file mode 100644 index 00000000..9e4dbd47 --- /dev/null +++ b/node_modules/strong-soap/lib/security/BearerSecurity.js @@ -0,0 +1,22 @@ +// Copyright IBM Corp. 2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var _ = require('lodash'); +var Security = require('./security'); + +class BearerSecurity extends Security { + constructor(token, options) { + super(options); + this.token = token; + } + + addHttpHeaders(headers) { + headers.Authorization = "Bearer " + this.token; + } +} + +module.exports = BearerSecurity; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/security/ClientSSLSecurity.js b/node_modules/strong-soap/lib/security/ClientSSLSecurity.js new file mode 100644 index 00000000..896be7b1 --- /dev/null +++ b/node_modules/strong-soap/lib/security/ClientSSLSecurity.js @@ -0,0 +1,69 @@ +// Copyright IBM Corp. 2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var g = require('../globalize'); +var fs = require('fs'), + https = require('https'), + _ = require('lodash'), + Security = require('./security'); + +class ClientSSLSecurity extends Security { + + /** + * activates SSL for an already existing client + * + * @module ClientSSLSecurity + * @param {Buffer|String} key + * @param {Buffer|String} cert + * @param {Buffer|String|Array} [ca] + * @param {Object} [options] + * @constructor + */ + constructor(key, cert, ca, options) { + super(options); + if (key) { + if (Buffer.isBuffer(key)) { + this.key = key; + } else if (typeof key === 'string') { + this.key = fs.readFileSync(key); + } else { + throw new Error(g.f('{{key}} should be a {{buffer}} or a {{string}}!')); + } + } + + if (cert) { + if (Buffer.isBuffer(cert)) { + this.cert = cert; + } else if (typeof cert === 'string') { + this.cert = fs.readFileSync(cert); + } else { + throw new Error(g.f('{{cert}} should be a {{buffer}} or a {{string}}!')); + } + } + + if (ca) { + if (Buffer.isBuffer(ca) || Array.isArray(ca)) { + this.ca = ca; + } else if (typeof ca === 'string') { + this.ca = fs.readFileSync(ca); + } else { + this.options = ca; + this.ca = null; + } + } + } + + addOptions(options) { + options.key = this.key; + options.cert = this.cert; + options.ca = this.ca; + _.merge(options, this.options); + options.agent = new https.Agent(options); + } +} + +module.exports = ClientSSLSecurity; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/security/ClientSSLSecurityPFX.js b/node_modules/strong-soap/lib/security/ClientSSLSecurityPFX.js new file mode 100644 index 00000000..37c61416 --- /dev/null +++ b/node_modules/strong-soap/lib/security/ClientSSLSecurityPFX.js @@ -0,0 +1,59 @@ +// Copyright IBM Corp. 2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var g = require('../globalize'); +var fs = require('fs'), + https = require('https'), + _ = require('lodash'), + Security = require('./security'); + +class ClientSSLSecurityPFX extends Security { + + /** + * activates SSL for an already existing client using a PFX cert + * + * @module ClientSSLSecurityPFX + * @param {Buffer|String} pfx + * @param {String} passphrase + * @constructor + */ + constructor(pfx, passphrase, options) { + super(options); + + if (typeof passphrase === 'object') { + options = passphrase; + } + if (pfx) { + if (Buffer.isBuffer(pfx)) { + this.pfx = pfx; + } else if (typeof pfx === 'string') { + this.pfx = fs.readFileSync(pfx); + } else { + throw new Error(g.f('supplied {{pfx}} file should be a {{buffer}} or a file location')); + } + } + + if (passphrase) { + if (typeof passphrase === 'string') { + this.passphrase = passphrase; + } + } + this.options = {}; + _.merge(this.options, options); + } + + addOptions(options) { + options.pfx = this.pfx; + if (this.passphrase) { + options.passphrase = this.passphrase; + } + _.merge(options, this.options); + options.agent = new https.Agent(options); + } +} + +module.exports = ClientSSLSecurityPFX; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/security/CookieSecurity.js b/node_modules/strong-soap/lib/security/CookieSecurity.js new file mode 100644 index 00000000..35c5fcf2 --- /dev/null +++ b/node_modules/strong-soap/lib/security/CookieSecurity.js @@ -0,0 +1,31 @@ +// Copyright IBM Corp. 2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var Security = require('./security'); + +function hasCookieHeader(cookie) { + return typeof cookie === 'object' && cookie.hasOwnProperty('set-cookie'); +} + +/* + * Accepts either a cookie or lastResponseHeaders + */ +class CookieSecurity extends Security { + constructor(cookie, options) { + super(options); + + cookie = hasCookieHeader(cookie) ? cookie['set-cookie'] : cookie; + + this.cookie = (Array.isArray(cookie) ? cookie : [cookie]).map(c => c.split(';')[0]).join('; '); + } + + addHttpHeaders(headers) { + headers.Cookie = this.cookie; + } +} + +module.exports = CookieSecurity; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/security/NTLMSecurity.js b/node_modules/strong-soap/lib/security/NTLMSecurity.js new file mode 100644 index 00000000..24a308f2 --- /dev/null +++ b/node_modules/strong-soap/lib/security/NTLMSecurity.js @@ -0,0 +1,32 @@ +// Copyright IBM Corp. 2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var _ = require('lodash'); +var Security = require('./security'); + +class NTLMSecurity extends Security { + constructor(username, password, domain, workstation, wsdlAuthRequired, options) { + super(options); + this.username = username; + this.password = password; + this.domain = domain; + this.workstation = workstation; + //set this to true/false if remote WSDL retrieval needs NTLM authentication or not + this.wsdlAuthRequired = wsdlAuthRequired; + } + + addOptions(options) { + options.username = this.username; + options.password = this.password; + options.domain = this.domain; + options.workstation = this.workstation; + options.wsdlAuthRequired = this.wsdlAuthRequired; + _.merge(options, this.options); + } +} + +module.exports = NTLMSecurity; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/security/WSSecurity.js b/node_modules/strong-soap/lib/security/WSSecurity.js new file mode 100644 index 00000000..22ad7d75 --- /dev/null +++ b/node_modules/strong-soap/lib/security/WSSecurity.js @@ -0,0 +1,102 @@ +// Copyright IBM Corp. 2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +"use strict"; + +var Security = require('./security'); +var crypto = require('crypto'); +var passwordDigest = require('../utils').passwordDigest; +var validPasswordTypes = ['PasswordDigest', 'PasswordText']; +var toXMLDate = require('../utils').toXMLDate; + +class WSSecurity extends Security { + constructor(username, password, options) { + options = options || {}; + super(options); + this._username = username; + this._password = password; + //must account for backward compatibility for passwordType String param as + // well as object options defaults: passwordType = 'PasswordText', + // hasTimeStamp = true + if (typeof options === 'string') { + this._passwordType = options ? options : 'PasswordText'; + options = {}; + } else { + this._passwordType = options.passwordType ? options.passwordType : 'PasswordText'; + } + + if (validPasswordTypes.indexOf(this._passwordType) === -1) { + this._passwordType = 'PasswordText'; + } + + this._hasTimeStamp = options.hasTimeStamp || typeof options.hasTimeStamp === 'boolean' ? !!options.hasTimeStamp : true; + this._hasTokenCreated = options.hasTokenCreated || typeof options.hasTokenCreated === 'boolean' ? !!options.hasTokenCreated : true; + + /*jshint eqnull:true */ + if (options.hasNonce != null) { + this._hasNonce = !!options.hasNonce; + } + this._hasTokenCreated = options.hasTokenCreated || typeof options.hasTokenCreated === 'boolean' ? !!options.hasTokenCreated : true; + if (options.actor != null) { + this._actor = options.actor; + } + if (options.mustUnderstand != null) { + this._mustUnderstand = !!options.mustUnderstand; + } + } + + addSoapHeaders(headerElement) { + var secElement = headerElement.element('wsse:Security'); + if (this._actor) { + secElement.attribute('soap:actor', this._actor); + } + if (this._mustUnderstand) { + secElement.attribute('soap:mustUnderstand', '1'); + } + + secElement.attribute('xmlns:wsse', 'http://docs.oasis-open.org/wss/2004/01/' + 'oasis-200401-wss-wssecurity-secext-1.0.xsd').attribute('xmlns:wsu', 'http://docs.oasis-open.org/wss/2004/01/' + 'oasis-200401-wss-wssecurity-utility-1.0.xsd'); + + var now = new Date(); + var created = toXMLDate(now); + var timeStampXml = ''; + if (this._hasTimeStamp) { + var expires = toXMLDate(new Date(now.getTime() + 1000 * 600)); + + var tsElement = secElement.element('wsu:Timestamp').attribute('wsu:Id', 'Timestamp-' + created); + tsElement.element('wsu:Created', created); + tsElement.element('wsu:Expires', expires); + } + + var userNameElement = secElement.element('wsse:UsernameToken').attribute('wsu:Id', 'SecurityToken-' + created); + + userNameElement.element('wsse:Username', this._username); + if (this._hasTokenCreated) { + userNameElement.element('wsu:Created', created); + } + + var nonce; + if (this._hasNonce || this._passwordType !== 'PasswordText') { + // nonce = base64 ( sha1 ( created + random ) ) + var nHash = crypto.createHash('sha1'); + nHash.update(created + Math.random()); + nonce = nHash.digest('base64'); + } + + var password; + if (this._passwordType === 'PasswordText') { + userNameElement.element('wsse:Password').attribute('Type', 'http://docs.oasis-open.org/wss/2004/01/' + 'oasis-200401-wss-username-token-profile-1.0#PasswordText').text(this._password); + + if (nonce) { + userNameElement.element('wsse:Nonce').attribute('EncodingType', 'http://docs.oasis-open.org/wss/2004/01/' + 'oasis-200401-wss-soap-message-security-1.0#Base64Binary').text(nonce); + } + } else { + userNameElement.element('wsse:Password').attribute('Type', 'http://docs.oasis-open.org/wss/2004/01/' + 'oasis-200401-wss-username-token-profile-1.0#PasswordDigest').text(passwordDigest(nonce, created, this._password)); + + userNameElement.element('wsse:Nonce').attribute('EncodingType', 'http://docs.oasis-open.org/wss/2004/01/' + 'oasis-200401-wss-soap-message-security-1.0#Base64Binary').text(nonce); + } + } +} + +module.exports = WSSecurity; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/security/WSSecurityCert.js b/node_modules/strong-soap/lib/security/WSSecurityCert.js new file mode 100644 index 00000000..8b32e8dd --- /dev/null +++ b/node_modules/strong-soap/lib/security/WSSecurityCert.js @@ -0,0 +1,99 @@ +// Copyright IBM Corp. 2016,2018. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var NodeRsa = require('node-rsa'); +var SignedXml = require('xml-crypto').SignedXml; +var uuid = require('uuid'); +var Security = require('./security'); +var xmlHandler = require('../parser/xmlHandler'); + +var crypto = require('crypto'); + +function addMinutes(date, minutes) { + return new Date(date.getTime() + minutes * 60000); +} + +function dateStringForSOAP(date) { + return date.getUTCFullYear() + '-' + ('0' + (date.getUTCMonth() + 1)).slice(-2) + '-' + ('0' + date.getUTCDate()).slice(-2) + 'T' + ('0' + date.getUTCHours()).slice(-2) + ":" + ('0' + date.getUTCMinutes()).slice(-2) + ":" + ('0' + date.getUTCSeconds()).slice(-2) + "Z"; +} + +function generateCreated() { + return dateStringForSOAP(new Date()); +} + +function generateExpires() { + return dateStringForSOAP(addMinutes(new Date(), 10)); +} + +function generateId() { + return uuid.v4().replace(/-/gm, ''); +} + +class WSSecurityCert extends Security { + constructor(privatePEM, publicP12PEM, password) { + super(); + + this.publicP12PEM = publicP12PEM.toString().replace('-----BEGIN CERTIFICATE-----', '').replace('-----END CERTIFICATE-----', '').replace(/(\r\n|\n|\r)/gm, ''); + + this.signer = new SignedXml(); + this.signer.signingKey = this.getSigningKey(privatePEM, password); + this.x509Id = 'x509-' + generateId(); + + var references = ['http://www.w3.org/2000/09/xmldsig#enveloped-signature', 'http://www.w3.org/2001/10/xml-exc-c14n#']; + + this.signer.addReference('//*[local-name(.)=\'Body\']', references); + this.signer.addReference('//*[local-name(.)=\'Timestamp\']', references); + + var _this = this; + this.signer.keyInfoProvider = {}; + this.signer.keyInfoProvider.getKeyInfo = function (key) { + var x509Id = _this.x509Id; + var xml = ` + + `; + return xml; + }; + } + + getSigningKey(privatePEM, password) { + if (typeof crypto.createPrivateKey === 'function') { + // Node 11 or above + this.privateKey = crypto.createPrivateKey({ key: privatePEM, passphrase: password }); + return this.privateKey.export({ type: 'pkcs1', format: 'pem' }); + } else { + // Node 10 or below, fall back to https://github.com/rzcoder/node-rsa + if (password) throw new Error('Passphrase is not supported by node-rsa.'); + this.privateKey = new NodeRsa(privatePEM); + return this.privateKey.exportKey('private'); + } + } + + postProcess(headerElement, bodyElement) { + this.created = generateCreated(); + this.expires = generateExpires(); + + var binaryToken = this.publicP12PEM, + created = this.created, + expires = this.expires, + id = this.x509Id; + + var secElement = headerElement.element('wsse:Security').attribute('xmlns:wsse', 'http://docs.oasis-open.org/wss/2004/01/' + 'oasis-200401-wss-wssecurity-secext-1.0.xsd').attribute('xmlns:wsu', 'http://docs.oasis-open.org/wss/2004/01/' + 'oasis-200401-wss-wssecurity-utility-1.0.xsd').attribute('soap:mustUnderstand', '1'); + secElement.element('wsse:BinarySecurityToken').attribute('EncodingType', 'http://docs.oasis-open.org/wss/2004/01/' + 'oasis-200401-wss-soap-message-security-1.0#Base64Binary').attribute('ValueType', 'http://docs.oasis-open.org/wss/2004/01/' + 'oasis-200401-wss-x509-token-profile-1.0#X509v3').attribute('wsu:Id', id).text(binaryToken); + var tsElement = secElement.element('wsu:Timestamp').attribute('wsu:Id', '_1'); + tsElement.element('wsu:Created', created); + tsElement.element('wsu:Expires', expires); + + var xmlWithSec = headerElement.doc().end({ pretty: true }); + + this.signer.computeSignature(xmlWithSec); + var sig = this.signer.getSignatureXml(); + + xmlHandler.parseXml(secElement, sig); + } +} + +module.exports = WSSecurityCert; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/security/index.js b/node_modules/strong-soap/lib/security/index.js new file mode 100644 index 00000000..0851e0ab --- /dev/null +++ b/node_modules/strong-soap/lib/security/index.js @@ -0,0 +1,24 @@ +// Copyright IBM Corp. 2016,2018. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +"use strict"; + +var WSSecurityCert; +try { + WSSecurityCert = require('./WSSecurityCert'); +} catch (err) { + console.warn(err); +} + +module.exports = { + BasicAuthSecurity: require('./BasicAuthSecurity'), + ClientSSLSecurity: require('./ClientSSLSecurity'), + ClientSSLSecurityPFX: require('./ClientSSLSecurityPFX'), + CookieSecurity: require('./CookieSecurity'), + WSSecurity: require('./WSSecurity'), + BearerSecurity: require('./BearerSecurity'), + WSSecurityCert: WSSecurityCert, + NTLMSecurity: require('./NTLMSecurity') +}; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/security/security.js b/node_modules/strong-soap/lib/security/security.js new file mode 100644 index 00000000..c26c922d --- /dev/null +++ b/node_modules/strong-soap/lib/security/security.js @@ -0,0 +1,29 @@ +// Copyright IBM Corp. 2016. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var _ = require('lodash'); + +/** + * Base class for Web Services Security + */ +class Security { + constructor(options) { + this.options = options || {}; + } + + addOptions(options) { + _.merge(options, this.options); + } + + addHttpHeaders(headers) {} + + addSoapHeaders(headerElement) {} + + postProcess(envelopeElement, headerElement, bodyElement) {} +} + +module.exports = Security; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/server.js b/node_modules/strong-soap/lib/server.js new file mode 100644 index 00000000..b40e09b8 --- /dev/null +++ b/node_modules/strong-soap/lib/server.js @@ -0,0 +1,408 @@ +// Copyright IBM Corp. 2016,2018. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var g = require('./globalize'); +var url = require('url'), + compress = null, + events = require('events'), + XMLHandler = require('./parser/xmlHandler'), + Base = require('./base'), + toXMLDate = require('./utils').toXMLDate, + util = require('util'), + debug = require('debug')('strong-soap:server'), + debugDetail = require('debug')('strong-soap:server:detail'); + +try { + compress = require('compress'); +} catch (error) { + // Ignore error +} + +class Server extends Base { + + constructor(server, path, services, wsdl, options) { + super(wsdl, options); + var self = this; + options = options || {}; + this.path = path; + this.services = services; + + debug('Server parameters: path: %s services: %j wsdl: %j', path, services, wsdl); + if (path[path.length - 1] !== '/') path += '/'; + wsdl.load(function (err) { + if (err) throw err; + self.xmlHandler = new XMLHandler(self.wsdl.definitions.schemas, self.wsdl.options); + var listeners = server.listeners('request').slice(); + + server.removeAllListeners('request'); + server.addListener('request', function (req, res) { + if (typeof self.authorizeConnection === 'function') { + if (!self.authorizeConnection(req.connection.remoteAddress)) { + res.end(); + return; + } + } + var reqPath = url.parse(req.url).pathname; + if (reqPath[reqPath.length - 1] !== '/') reqPath += '/'; + if (path === reqPath) { + self._requestListener(req, res); + } else { + for (var i = 0, len = listeners.length; i < len; i++) { + listeners[i].call(this, req, res); + } + } + }); + }); + } + + _requestListener(req, res) { + var self = this; + var reqParse = url.parse(req.url); + var reqPath = reqParse.pathname; + var reqQuery = reqParse.search; + + if (typeof self.log === 'function') { + self.log('info', 'Handling ' + req.method + ' on ' + req.url); + } + + if (req.method === 'GET') { + if (reqQuery && reqQuery.toLowerCase() === '?wsdl') { + if (typeof self.log === 'function') { + self.log('info', 'Wants the WSDL'); + } + res.setHeader('Content-Type', 'application/xml'); + res.write(self.wsdl.toXML()); + } + res.end(); + } else if (req.method === 'POST') { + res.setHeader('Content-Type', req.headers['content-type']); + var chunks = [], + gunzip; + if (compress && req.headers['content-encoding'] === 'gzip') { + gunzip = new compress.Gunzip(); + gunzip.init(); + } + req.on('data', function (chunk) { + if (gunzip) chunk = gunzip.inflate(chunk, 'binary'); + chunks.push(chunk); + }); + req.on('end', function () { + var xml = chunks.join(''); + var result; + var error; + if (gunzip) { + gunzip.end(); + gunzip = null; + } + try { + if (typeof self.log === 'function') { + self.log('received', xml); + } + self._process(xml, req, function (result, statusCode) { + if (statusCode) { + res.statusCode = statusCode; + } + res.write(result); + res.end(); + if (typeof self.log === 'function') { + self.log('replied', result); + } + }); + } catch (err) { + error = err.stack || err; + res.statusCode = 500; + res.write(error); + res.end(); + if (typeof self.log === 'function') { + self.log('error', error); + } + } + }); + } else { + res.end(); + } + } + + _process(input, req, callback) { + var self = this, + pathname = url.parse(req.url).pathname.replace(/\/$/, ''), + obj = this.xmlHandler.xmlToJson(null, input), + body = obj.Body, + headers = obj.Header, + bindings = this.wsdl.definitions.bindings, + binding, + operation, + operationName, + serviceName, + portName, + includeTimestamp = obj.Header && obj.Header.Security && obj.Header.Security.Timestamp; + + if (typeof self.authenticate === 'function') { + if (!obj.Header || !obj.Header.Security) { + throw new Error(g.f('No security header')); + } + if (!self.authenticate(obj.Header.Security)) { + throw new Error(g.f('Invalid username or password')); + } + } + + if (typeof self.log === 'function') { + self.log('info', 'Attempting to bind to ' + pathname); + } + + // use port.location and current url to find the right binding + binding = function (self) { + var services = self.wsdl.definitions.services; + var firstPort; + var name; + for (name in services) { + serviceName = name; + var service = services[serviceName]; + var ports = service.ports; + for (name in ports) { + portName = name; + var port = ports[portName]; + var portPathname = url.parse(port.location).pathname.replace(/\/$/, ''); + + if (typeof self.log === 'function') { + self.log('info', 'Trying ' + portName + ' from path ' + portPathname); + } + + if (portPathname === pathname) return port.binding; + + // The port path is almost always wrong for generated WSDLs + if (!firstPort) { + firstPort = port; + } + } + } + return !firstPort ? void 0 : firstPort.binding; + }(this); + + if (!binding) { + throw new Error(g.f('Failed to bind to {{WSDL}}')); + } + + try { + if (binding.style === 'rpc') { + operationName = Object.keys(body)[0]; + + self.emit('request', obj, operationName); + if (headers) self.emit('headers', headers, operationName); + + self._executeMethod({ + serviceName: serviceName, + portName: portName, + operationName: operationName, + outputName: operationName + 'Response', + args: body[operationName], + headers: headers, + style: 'rpc' + }, req, callback); + } else { + //document style + var messageElemName = Object.keys(body)[0] === 'attributes' ? Object.keys(body)[1] : Object.keys(body)[0]; + var pair = binding.topElements[messageElemName]; + + var operationName, outputName; + var operations = binding.operations; + //figure out the output name + for (var name in operations) { + var inputParts = operations[name].input.message.parts; + //find the first part of the input message. There could be more than one parts in input message. + var firstInPart = inputParts[Object.keys(inputParts)[0]]; + if (firstInPart.element.$name === messageElemName) { + operationName = operations[name].$name; + if (operations[name].output != null) { + var outPart = operations[name].output.message.parts; + //there will be only one output part + var firstOutPart = outPart[Object.keys(outPart)[0]]; + outputName = firstOutPart.element.$name; + } + break; + } + } + + self.emit('request', obj, operationName); + if (headers) self.emit('headers', headers, operationName); + + self._executeMethod({ + serviceName: serviceName, + portName: portName, + operationName: operationName, + outputName: outputName, + args: body[messageElemName], + headers: headers, + style: 'document', + includeTimestamp: includeTimestamp + }, req, callback); + } + } catch (error) { + if (error.Fault !== undefined) { + return self._sendError(operations[name], error, callback, includeTimestamp); + } + //Revisit - is this needed? + throw error; + } + } + + _executeMethod(options, req, callback) { + options = options || {}; + var self = this, + operation, + body, + serviceName = options.serviceName, + portName = options.portName, + operationName = options.operationName, + outputName = options.outputName, + args = options.args, + style = options.style, + includeTimestamp = options.includeTimestamp, + handled = false; + + try { + operation = this.services[serviceName][portName][operationName]; + debug('Server operation: %s ', operationName); + } catch (error) { + debug('Server executeMethod: error: %s ', error.message); + //fix - should create a fault and call sendError (..) so that this error is not lost and will be sent as Fault in soap envelope + //to the client? + return callback(this._envelope('', includeTimestamp)); + } + + function handleResult(error, result) { + if (handled) return; + handled = true; + + var operation = self.wsdl.definitions.services[serviceName].ports[portName].binding.operations[operationName]; + + if (error && error.Fault !== undefined) { + return self._sendError(operation, error, callback, includeTimestamp); + } else if (result === undefined) { + // Backward compatibility to support one argument callback style + result = error; + } + + var element = operation.output; + + var operationDescriptor = operation.describe(self.wsdl.definitions); + debugDetail('Server handleResult. operationDescriptor: %j ', operationDescriptor); + + var outputBodyDescriptor = operationDescriptor.output.body; + debugDetail('Server handleResult. outputBodyDescriptor: %j ', outputBodyDescriptor); + + var soapNsURI = 'http://schemas.xmlsoap.org/soap/envelope/'; + var soapNsPrefix = self.wsdl.options.envelopeKey || 'soap'; + + if (operation.soapVersion === '1.2') { + soapNsURI = 'http://www.w3.org/2003/05/soap-envelope'; + } + + debug('Server soapNsURI: %s soapNsPrefix: %s', soapNsURI, soapNsPrefix); + + var nsContext = self.createNamespaceContext(soapNsPrefix, soapNsURI); + var envelope = XMLHandler.createSOAPEnvelope(soapNsPrefix, soapNsURI); + + self.xmlHandler.jsonToXml(envelope.body, nsContext, outputBodyDescriptor, result); + + self._envelope(envelope, includeTimestamp); + var message = envelope.body.toString({ pretty: true }); + var xml = envelope.doc.end({ pretty: true }); + + debug('Server handleResult. xml: %s ', xml); + callback(xml); + } + + if (!self.wsdl.definitions.services[serviceName].ports[portName].binding.operations[operationName].output) { + // no output defined = one-way operation so return empty response + handled = true; + callback(''); + } + + var result = operation(args, handleResult, options.headers, req); + if (typeof result !== 'undefined') { + handleResult(null, result); + } + } + + _addWSSecurityHeader(headerElement) { + var secElement = headerElement.element('wsse:Security').attribute('soap:mustUnderstand', '1'); + + secElement.attribute('xmlns:wsse', 'http://docs.oasis-open.org/wss/2004/01/' + 'oasis-200401-wss-wssecurity-secext-1.0.xsd').attribute('xmlns:wsu', 'http://docs.oasis-open.org/wss/2004/01/' + 'oasis-200401-wss-wssecurity-utility-1.0.xsd'); + + var now = new Date(); + var created = toXMLDate(now); + var timeStampXml = ''; + + var expires = toXMLDate(new Date(now.getTime() + 1000 * 600)); + + var tsElement = secElement.element('wsu:Timestamp').attribute('wsu:Id', 'Timestamp-' + created); + tsElement.element('wsu:Created', created); + tsElement.element('wsu:Expires', expires); + } + + _envelope(env, includeTimestamp) { + env = env || XMLHandler.createSOAPEnvelope(); + + if (includeTimestamp) { + this._addWSSecurityHeader(env.header); + } + + var soapHeaderElement = env.header; + //add soapHeaders to envelope. Header can be xml, or JSON object which may or may not be described in WSDL/XSD. + this.addSoapHeadersToEnvelope(soapHeaderElement, this.xmlHandler); + return env; + } + + _sendError(operation, error, callback, includeTimestamp) { + var self = this, + fault; + + var statusCode; + if (error.Fault.statusCode) { + statusCode = error.Fault.statusCode; + error.Fault.statusCode = undefined; + } + + var operationDescriptor = operation.describe(this.wsdl.definitions); + debugDetail('Server sendError. operationDescriptor: %j ', operationDescriptor); + + //get envelope descriptor + var faultEnvDescriptor = operation.descriptor.faultEnvelope.elements[0]; + + var soapNsURI = 'http://schemas.xmlsoap.org/soap/envelope/'; + var soapNsPrefix = self.wsdl.options.envelopeKey || 'soap'; + + if (operation.soapVersion === '1.2') { + soapNsURI = 'http://www.w3.org/2003/05/soap-envelope'; + } + + var nsContext = self.createNamespaceContext(soapNsPrefix, soapNsURI); + var envelope = XMLHandler.createSOAPEnvelope(soapNsPrefix, soapNsURI); + + //find the envelope body descriptor + var bodyDescriptor = faultEnvDescriptor.elements[1]; + + //there will be only one element descriptor under + var faultDescriptor = bodyDescriptor.elements[0]; + debugDetail('Server sendError. faultDescriptor: %j ', faultDescriptor); + + debug('Server sendError. error.Fault: %j ', error.Fault); + + //serialize Fault object into XML as per faultDescriptor + this.xmlHandler.jsonToXml(envelope.body, nsContext, faultDescriptor, error.Fault); + + self._envelope(envelope, includeTimestamp); + var message = envelope.body.toString({ pretty: true }); + var xml = envelope.doc.end({ pretty: true }); + + debug('Server sendError. Response envelope: %s ', xml); + callback(xml, statusCode); + } +} + +module.exports = Server; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/soap.js b/node_modules/strong-soap/lib/soap.js new file mode 100644 index 00000000..4e82d6ac --- /dev/null +++ b/node_modules/strong-soap/lib/soap.js @@ -0,0 +1,93 @@ +// Copyright IBM Corp. 2016,2018. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +"use strict"; + +var Client = require('./client'), + Server = require('./server'), + HttpClient = require('./http'), + security = require('./security'), + passwordDigest = require('./utils').passwordDigest, + parser = require('./parser/index'), + openWSDL = parser.WSDL.open, + debug = require('debug')('strong-soap:soap'); + +var _wsdlCache = {}; + +function _requestWSDL(url, options, callback) { + if (typeof options === 'function') { + callback = options; + options = {}; + } + _wsdlCache = options.WSDL_CACHE || _wsdlCache; + + var wsdl = _wsdlCache[url]; + if (wsdl) { + debug('_requestWSDL, wsdl in cache %s', wsdl); + process.nextTick(function () { + callback(null, wsdl); + }); + } else { + openWSDL(url, options, function (err, wsdl) { + if (err) { + return callback(err); + } else { + _wsdlCache[url] = wsdl; + } + callback(null, wsdl); + }); + } +} + +function createClient(url, options, callback, endpoint) { + if (typeof options === 'function') { + endpoint = callback; + callback = options; + options = {}; + } + endpoint = options.endpoint || endpoint; + debug('createClient params: wsdl url: %s client options: %j', url, options); + _requestWSDL(url, options, function (err, wsdl) { + callback(err, wsdl && new Client(wsdl, endpoint, options)); + }); +} + +function listen(server, pathOrOptions, services, xml) { + debug('listen params: pathOrOptions: %j services: %j xml: %j', pathOrOptions, services, xml); + var options = {}, + path = pathOrOptions, + uri = null; + + if (typeof pathOrOptions === 'object') { + options = pathOrOptions; + path = options.path; + services = options.services; + xml = options.xml; + uri = options.uri; + } + + var wsdl = new parser.WSDL(xml || services, uri, options); + return new Server(server, path, services, wsdl, options); +} + +exports.security = security; +exports.BasicAuthSecurity = security.BasicAuthSecurity; +exports.WSSecurity = security.WSSecurity; +exports.WSSecurityCert = security.WSSecurityCert; +exports.ClientSSLSecurity = security.ClientSSLSecurity; +exports.ClientSSLSecurityPFX = security.ClientSSLSecurityPFX; +exports.BearerSecurity = security.BearerSecurity; +exports.createClient = createClient; +exports.passwordDigest = passwordDigest; +exports.listen = listen; +exports.WSDL = parser.WSDL; +exports.XMLHandler = parser.XMLHandler; +exports.NamespaceContext = parser.NamespaceContext; +exports.QName = parser.QName; + +// Export Client and Server to allow customization +exports.Server = Server; +exports.Client = Client; +exports.HttpClient = HttpClient; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/soapModel.js b/node_modules/strong-soap/lib/soapModel.js new file mode 100644 index 00000000..6f7e0548 --- /dev/null +++ b/node_modules/strong-soap/lib/soapModel.js @@ -0,0 +1,49 @@ +// Copyright IBM Corp. 2016,2017. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var assert = require('assert'); +var QName = require('./parser/qname'); + +/** + * Representation for soap elements + */ +class SOAPElement { + constructor(value, qname, options) { + if (typeof value === 'string' && !qname) { + this.xml = value; + } else { + this.value = value; + this.qname = qname; + this.options = options || {}; + } + } + +} + +/** + * Representation for soap attributes + */ +class SOAPAttribute { + constructor(value, qname) { + assert(qname, 'qname is required'); + this.value = String(value); + this.qname = qname; + } + + addTo(parent, nsContext, xmlHandler) { + var nsURI = nsContext.getNamespaceURI(this.qname.prefix); + if (nsURI === this.qname.nsURI) { + var name = this.qname.prefix + ':' + this.qname.name; + parent.attribute(name, this.value); + } else { + nsContext.declareNamespace(this.qname.prefix, this.qname.nsURI); + } + } +} + +exports.SOAPElement = SOAPElement; +exports.SOAPAttribute = SOAPAttribute; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/strip-bom.js b/node_modules/strong-soap/lib/strip-bom.js new file mode 100644 index 00000000..c2020b2e --- /dev/null +++ b/node_modules/strong-soap/lib/strip-bom.js @@ -0,0 +1,33 @@ +// Copyright IBM Corp. 2016,2019. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +/* +strip the BOM characters in the beginning of UTF-8 +or other unicode encoded strings +http://en.wikipedia.org/wiki/Byte_order_mark +*/ +'use strict'; + +module.exports = stripBom; + +function stripBom(str) { + + if (typeof str !== 'string') { + throw new Error('Invalid input, only string allowed'); + } + var chunk = Buffer.from(str); + var transformed; + var value = str; + if (chunk[0] === 0xFE && chunk[1] === 0XFF) { + transformed = chunk.slice(2); + } + if (chunk[0] == 0xEF && chunk[1] == 0xBB && chunk[2] == 0xBF) { + transformed = chunk.slice(3); + } + if (transformed) { + value = transformed.toString(); + } + return value; +}; \ No newline at end of file diff --git a/node_modules/strong-soap/lib/utils.js b/node_modules/strong-soap/lib/utils.js new file mode 100644 index 00000000..bd26c866 --- /dev/null +++ b/node_modules/strong-soap/lib/utils.js @@ -0,0 +1,74 @@ +// Copyright IBM Corp. 2016,2019. All Rights Reserved. +// Node module: strong-soap +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +var crypto = require('crypto'); +exports.passwordDigestOriginal = function passwordDigest(nonce, created, password) { + // digest = base64 ( sha1 ( nonce + created + password ) ) + var pwHash = crypto.createHash('sha1'); + var rawNonce = Buffer.from(nonce || '', 'base64').toString('binary'); + pwHash.update(rawNonce + created + password); + return pwHash.digest('base64'); +}; + +exports.passwordDigest = function (nonce, created, password) { + // digest = base64 ( sha1 ( nonce + created + password ) ) + var pwHash = crypto.createHash('sha1'); + var rawNonce = Buffer.from(nonce || '', 'base64'); + pwHash.update(Buffer.concat([rawNonce, Buffer.from(created), Buffer.from(password)])); + return pwHash.digest('base64'); +}; + +var TNS_PREFIX = ''; // Prefix for targetNamespace + +exports.TNS_PREFIX = TNS_PREFIX; + +/** + * Find a key from an object based on the value + * @param {Object} Namespace prefix/uri mapping + * @param {*} nsURI value + * @returns {String} The matching key + */ +exports.findPrefix = function (xmlnsMapping, nsURI) { + for (var n in xmlnsMapping) { + if (n === TNS_PREFIX) continue; + if (xmlnsMapping[n] === nsURI) { + return n; + } + } +}; + +exports.extend = function extend(base, obj) { + if (base !== null && typeof base === "object" && obj !== null && typeof obj === "object") { + Object.keys(obj).forEach(function (key) { + if (!base.hasOwnProperty(key)) base[key] = obj[key]; + }); + } + return base; +}; + +exports.toXMLDate = function (d) { + function pad(n) { + return n < 10 ? '0' + n : n; + } + + return d.getUTCFullYear() + '-' + pad(d.getUTCMonth() + 1) + '-' + pad(d.getUTCDate()) + 'T' + pad(d.getUTCHours()) + ':' + pad(d.getUTCMinutes()) + ':' + pad(d.getUTCSeconds()) + 'Z'; +}; + +exports.createPromiseCallback = function createPromiseCallback() { + var cb; + var promise = new Promise(function (resolve, reject) { + cb = function cb(err, result, envelope, soapHeader) { + if (err) { + reject(err); + } else { + resolve({ result, envelope, soapHeader }); + } + }; + }); + cb.promise = promise; + return cb; +}; \ No newline at end of file diff --git a/node_modules/strong-soap/node_modules/debug/CHANGELOG.md b/node_modules/strong-soap/node_modules/debug/CHANGELOG.md new file mode 100644 index 00000000..820d21e3 --- /dev/null +++ b/node_modules/strong-soap/node_modules/debug/CHANGELOG.md @@ -0,0 +1,395 @@ + +3.1.0 / 2017-09-26 +================== + + * Add `DEBUG_HIDE_DATE` env var (#486) + * Remove ReDoS regexp in %o formatter (#504) + * Remove "component" from package.json + * Remove `component.json` + * Ignore package-lock.json + * Examples: fix colors printout + * Fix: browser detection + * Fix: spelling mistake (#496, @EdwardBetts) + +3.0.1 / 2017-08-24 +================== + + * Fix: Disable colors in Edge and Internet Explorer (#489) + +3.0.0 / 2017-08-08 +================== + + * Breaking: Remove DEBUG_FD (#406) + * Breaking: Use `Date#toISOString()` instead to `Date#toUTCString()` when output is not a TTY (#418) + * Breaking: Make millisecond timer namespace specific and allow 'always enabled' output (#408) + * Addition: document `enabled` flag (#465) + * Addition: add 256 colors mode (#481) + * Addition: `enabled()` updates existing debug instances, add `destroy()` function (#440) + * Update: component: update "ms" to v2.0.0 + * Update: separate the Node and Browser tests in Travis-CI + * Update: refactor Readme, fixed documentation, added "Namespace Colors" section, redid screenshots + * Update: separate Node.js and web browser examples for organization + * Update: update "browserify" to v14.4.0 + * Fix: fix Readme typo (#473) + +2.6.9 / 2017-09-22 +================== + + * remove ReDoS regexp in %o formatter (#504) + +2.6.8 / 2017-05-18 +================== + + * Fix: Check for undefined on browser globals (#462, @marbemac) + +2.6.7 / 2017-05-16 +================== + + * Fix: Update ms to 2.0.0 to fix regular expression denial of service vulnerability (#458, @hubdotcom) + * Fix: Inline extend function in node implementation (#452, @dougwilson) + * Docs: Fix typo (#455, @msasad) + +2.6.5 / 2017-04-27 +================== + + * Fix: null reference check on window.documentElement.style.WebkitAppearance (#447, @thebigredgeek) + * Misc: clean up browser reference checks (#447, @thebigredgeek) + * Misc: add npm-debug.log to .gitignore (@thebigredgeek) + + +2.6.4 / 2017-04-20 +================== + + * Fix: bug that would occur if process.env.DEBUG is a non-string value. (#444, @LucianBuzzo) + * Chore: ignore bower.json in npm installations. (#437, @joaovieira) + * Misc: update "ms" to v0.7.3 (@tootallnate) + +2.6.3 / 2017-03-13 +================== + + * Fix: Electron reference to `process.env.DEBUG` (#431, @paulcbetts) + * Docs: Changelog fix (@thebigredgeek) + +2.6.2 / 2017-03-10 +================== + + * Fix: DEBUG_MAX_ARRAY_LENGTH (#420, @slavaGanzin) + * Docs: Add backers and sponsors from Open Collective (#422, @piamancini) + * Docs: Add Slackin invite badge (@tootallnate) + +2.6.1 / 2017-02-10 +================== + + * Fix: Module's `export default` syntax fix for IE8 `Expected identifier` error + * Fix: Whitelist DEBUG_FD for values 1 and 2 only (#415, @pi0) + * Fix: IE8 "Expected identifier" error (#414, @vgoma) + * Fix: Namespaces would not disable once enabled (#409, @musikov) + +2.6.0 / 2016-12-28 +================== + + * Fix: added better null pointer checks for browser useColors (@thebigredgeek) + * Improvement: removed explicit `window.debug` export (#404, @tootallnate) + * Improvement: deprecated `DEBUG_FD` environment variable (#405, @tootallnate) + +2.5.2 / 2016-12-25 +================== + + * Fix: reference error on window within webworkers (#393, @KlausTrainer) + * Docs: fixed README typo (#391, @lurch) + * Docs: added notice about v3 api discussion (@thebigredgeek) + +2.5.1 / 2016-12-20 +================== + + * Fix: babel-core compatibility + +2.5.0 / 2016-12-20 +================== + + * Fix: wrong reference in bower file (@thebigredgeek) + * Fix: webworker compatibility (@thebigredgeek) + * Fix: output formatting issue (#388, @kribblo) + * Fix: babel-loader compatibility (#383, @escwald) + * Misc: removed built asset from repo and publications (@thebigredgeek) + * Misc: moved source files to /src (#378, @yamikuronue) + * Test: added karma integration and replaced babel with browserify for browser tests (#378, @yamikuronue) + * Test: coveralls integration (#378, @yamikuronue) + * Docs: simplified language in the opening paragraph (#373, @yamikuronue) + +2.4.5 / 2016-12-17 +================== + + * Fix: `navigator` undefined in Rhino (#376, @jochenberger) + * Fix: custom log function (#379, @hsiliev) + * Improvement: bit of cleanup + linting fixes (@thebigredgeek) + * Improvement: rm non-maintainted `dist/` dir (#375, @freewil) + * Docs: simplified language in the opening paragraph. (#373, @yamikuronue) + +2.4.4 / 2016-12-14 +================== + + * Fix: work around debug being loaded in preload scripts for electron (#368, @paulcbetts) + +2.4.3 / 2016-12-14 +================== + + * Fix: navigation.userAgent error for react native (#364, @escwald) + +2.4.2 / 2016-12-14 +================== + + * Fix: browser colors (#367, @tootallnate) + * Misc: travis ci integration (@thebigredgeek) + * Misc: added linting and testing boilerplate with sanity check (@thebigredgeek) + +2.4.1 / 2016-12-13 +================== + + * Fix: typo that broke the package (#356) + +2.4.0 / 2016-12-13 +================== + + * Fix: bower.json references unbuilt src entry point (#342, @justmatt) + * Fix: revert "handle regex special characters" (@tootallnate) + * Feature: configurable util.inspect()`options for NodeJS (#327, @tootallnate) + * Feature: %O`(big O) pretty-prints objects (#322, @tootallnate) + * Improvement: allow colors in workers (#335, @botverse) + * Improvement: use same color for same namespace. (#338, @lchenay) + +2.3.3 / 2016-11-09 +================== + + * Fix: Catch `JSON.stringify()` errors (#195, Jovan Alleyne) + * Fix: Returning `localStorage` saved values (#331, Levi Thomason) + * Improvement: Don't create an empty object when no `process` (Nathan Rajlich) + +2.3.2 / 2016-11-09 +================== + + * Fix: be super-safe in index.js as well (@TooTallNate) + * Fix: should check whether process exists (Tom Newby) + +2.3.1 / 2016-11-09 +================== + + * Fix: Added electron compatibility (#324, @paulcbetts) + * Improvement: Added performance optimizations (@tootallnate) + * Readme: Corrected PowerShell environment variable example (#252, @gimre) + * Misc: Removed yarn lock file from source control (#321, @fengmk2) + +2.3.0 / 2016-11-07 +================== + + * Fix: Consistent placement of ms diff at end of output (#215, @gorangajic) + * Fix: Escaping of regex special characters in namespace strings (#250, @zacronos) + * Fix: Fixed bug causing crash on react-native (#282, @vkarpov15) + * Feature: Enabled ES6+ compatible import via default export (#212 @bucaran) + * Feature: Added %O formatter to reflect Chrome's console.log capability (#279, @oncletom) + * Package: Update "ms" to 0.7.2 (#315, @DevSide) + * Package: removed superfluous version property from bower.json (#207 @kkirsche) + * Readme: fix USE_COLORS to DEBUG_COLORS + * Readme: Doc fixes for format string sugar (#269, @mlucool) + * Readme: Updated docs for DEBUG_FD and DEBUG_COLORS environment variables (#232, @mattlyons0) + * Readme: doc fixes for PowerShell (#271 #243, @exoticknight @unreadable) + * Readme: better docs for browser support (#224, @matthewmueller) + * Tooling: Added yarn integration for development (#317, @thebigredgeek) + * Misc: Renamed History.md to CHANGELOG.md (@thebigredgeek) + * Misc: Added license file (#226 #274, @CantemoInternal @sdaitzman) + * Misc: Updated contributors (@thebigredgeek) + +2.2.0 / 2015-05-09 +================== + + * package: update "ms" to v0.7.1 (#202, @dougwilson) + * README: add logging to file example (#193, @DanielOchoa) + * README: fixed a typo (#191, @amir-s) + * browser: expose `storage` (#190, @stephenmathieson) + * Makefile: add a `distclean` target (#189, @stephenmathieson) + +2.1.3 / 2015-03-13 +================== + + * Updated stdout/stderr example (#186) + * Updated example/stdout.js to match debug current behaviour + * Renamed example/stderr.js to stdout.js + * Update Readme.md (#184) + * replace high intensity foreground color for bold (#182, #183) + +2.1.2 / 2015-03-01 +================== + + * dist: recompile + * update "ms" to v0.7.0 + * package: update "browserify" to v9.0.3 + * component: fix "ms.js" repo location + * changed bower package name + * updated documentation about using debug in a browser + * fix: security error on safari (#167, #168, @yields) + +2.1.1 / 2014-12-29 +================== + + * browser: use `typeof` to check for `console` existence + * browser: check for `console.log` truthiness (fix IE 8/9) + * browser: add support for Chrome apps + * Readme: added Windows usage remarks + * Add `bower.json` to properly support bower install + +2.1.0 / 2014-10-15 +================== + + * node: implement `DEBUG_FD` env variable support + * package: update "browserify" to v6.1.0 + * package: add "license" field to package.json (#135, @panuhorsmalahti) + +2.0.0 / 2014-09-01 +================== + + * package: update "browserify" to v5.11.0 + * node: use stderr rather than stdout for logging (#29, @stephenmathieson) + +1.0.4 / 2014-07-15 +================== + + * dist: recompile + * example: remove `console.info()` log usage + * example: add "Content-Type" UTF-8 header to browser example + * browser: place %c marker after the space character + * browser: reset the "content" color via `color: inherit` + * browser: add colors support for Firefox >= v31 + * debug: prefer an instance `log()` function over the global one (#119) + * Readme: update documentation about styled console logs for FF v31 (#116, @wryk) + +1.0.3 / 2014-07-09 +================== + + * Add support for multiple wildcards in namespaces (#122, @seegno) + * browser: fix lint + +1.0.2 / 2014-06-10 +================== + + * browser: update color palette (#113, @gscottolson) + * common: make console logging function configurable (#108, @timoxley) + * node: fix %o colors on old node <= 0.8.x + * Makefile: find node path using shell/which (#109, @timoxley) + +1.0.1 / 2014-06-06 +================== + + * browser: use `removeItem()` to clear localStorage + * browser, node: don't set DEBUG if namespaces is undefined (#107, @leedm777) + * package: add "contributors" section + * node: fix comment typo + * README: list authors + +1.0.0 / 2014-06-04 +================== + + * make ms diff be global, not be scope + * debug: ignore empty strings in enable() + * node: make DEBUG_COLORS able to disable coloring + * *: export the `colors` array + * npmignore: don't publish the `dist` dir + * Makefile: refactor to use browserify + * package: add "browserify" as a dev dependency + * Readme: add Web Inspector Colors section + * node: reset terminal color for the debug content + * node: map "%o" to `util.inspect()` + * browser: map "%j" to `JSON.stringify()` + * debug: add custom "formatters" + * debug: use "ms" module for humanizing the diff + * Readme: add "bash" syntax highlighting + * browser: add Firebug color support + * browser: add colors for WebKit browsers + * node: apply log to `console` + * rewrite: abstract common logic for Node & browsers + * add .jshintrc file + +0.8.1 / 2014-04-14 +================== + + * package: re-add the "component" section + +0.8.0 / 2014-03-30 +================== + + * add `enable()` method for nodejs. Closes #27 + * change from stderr to stdout + * remove unnecessary index.js file + +0.7.4 / 2013-11-13 +================== + + * remove "browserify" key from package.json (fixes something in browserify) + +0.7.3 / 2013-10-30 +================== + + * fix: catch localStorage security error when cookies are blocked (Chrome) + * add debug(err) support. Closes #46 + * add .browser prop to package.json. Closes #42 + +0.7.2 / 2013-02-06 +================== + + * fix package.json + * fix: Mobile Safari (private mode) is broken with debug + * fix: Use unicode to send escape character to shell instead of octal to work with strict mode javascript + +0.7.1 / 2013-02-05 +================== + + * add repository URL to package.json + * add DEBUG_COLORED to force colored output + * add browserify support + * fix component. Closes #24 + +0.7.0 / 2012-05-04 +================== + + * Added .component to package.json + * Added debug.component.js build + +0.6.0 / 2012-03-16 +================== + + * Added support for "-" prefix in DEBUG [Vinay Pulim] + * Added `.enabled` flag to the node version [TooTallNate] + +0.5.0 / 2012-02-02 +================== + + * Added: humanize diffs. Closes #8 + * Added `debug.disable()` to the CS variant + * Removed padding. Closes #10 + * Fixed: persist client-side variant again. Closes #9 + +0.4.0 / 2012-02-01 +================== + + * Added browser variant support for older browsers [TooTallNate] + * Added `debug.enable('project:*')` to browser variant [TooTallNate] + * Added padding to diff (moved it to the right) + +0.3.0 / 2012-01-26 +================== + + * Added millisecond diff when isatty, otherwise UTC string + +0.2.0 / 2012-01-22 +================== + + * Added wildcard support + +0.1.0 / 2011-12-02 +================== + + * Added: remove colors unless stderr isatty [TooTallNate] + +0.0.1 / 2010-01-03 +================== + + * Initial release diff --git a/node_modules/strong-soap/node_modules/debug/LICENSE b/node_modules/strong-soap/node_modules/debug/LICENSE new file mode 100644 index 00000000..658c933d --- /dev/null +++ b/node_modules/strong-soap/node_modules/debug/LICENSE @@ -0,0 +1,19 @@ +(The MIT License) + +Copyright (c) 2014 TJ Holowaychuk + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software +and associated documentation files (the 'Software'), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial +portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/node_modules/strong-soap/node_modules/debug/README.md b/node_modules/strong-soap/node_modules/debug/README.md new file mode 100644 index 00000000..88dae35d --- /dev/null +++ b/node_modules/strong-soap/node_modules/debug/README.md @@ -0,0 +1,455 @@ +# debug +[![Build Status](https://travis-ci.org/visionmedia/debug.svg?branch=master)](https://travis-ci.org/visionmedia/debug) [![Coverage Status](https://coveralls.io/repos/github/visionmedia/debug/badge.svg?branch=master)](https://coveralls.io/github/visionmedia/debug?branch=master) [![Slack](https://visionmedia-community-slackin.now.sh/badge.svg)](https://visionmedia-community-slackin.now.sh/) [![OpenCollective](https://opencollective.com/debug/backers/badge.svg)](#backers) +[![OpenCollective](https://opencollective.com/debug/sponsors/badge.svg)](#sponsors) + + + +A tiny JavaScript debugging utility modelled after Node.js core's debugging +technique. Works in Node.js and web browsers. + +## Installation + +```bash +$ npm install debug +``` + +## Usage + +`debug` exposes a function; simply pass this function the name of your module, and it will return a decorated version of `console.error` for you to pass debug statements to. This will allow you to toggle the debug output for different parts of your module as well as the module as a whole. + +Example [_app.js_](./examples/node/app.js): + +```js +var debug = require('debug')('http') + , http = require('http') + , name = 'My App'; + +// fake app + +debug('booting %o', name); + +http.createServer(function(req, res){ + debug(req.method + ' ' + req.url); + res.end('hello\n'); +}).listen(3000, function(){ + debug('listening'); +}); + +// fake worker of some kind + +require('./worker'); +``` + +Example [_worker.js_](./examples/node/worker.js): + +```js +var a = require('debug')('worker:a') + , b = require('debug')('worker:b'); + +function work() { + a('doing lots of uninteresting work'); + setTimeout(work, Math.random() * 1000); +} + +work(); + +function workb() { + b('doing some work'); + setTimeout(workb, Math.random() * 2000); +} + +workb(); +``` + +The `DEBUG` environment variable is then used to enable these based on space or +comma-delimited names. + +Here are some examples: + +screen shot 2017-08-08 at 12 53 04 pm +screen shot 2017-08-08 at 12 53 38 pm +screen shot 2017-08-08 at 12 53 25 pm + +#### Windows command prompt notes + +##### CMD + +On Windows the environment variable is set using the `set` command. + +```cmd +set DEBUG=*,-not_this +``` + +Example: + +```cmd +set DEBUG=* & node app.js +``` + +##### PowerShell (VS Code default) + +PowerShell uses different syntax to set environment variables. + +```cmd +$env:DEBUG = "*,-not_this" +``` + +Example: + +```cmd +$env:DEBUG='app';node app.js +``` + +Then, run the program to be debugged as usual. + +npm script example: +```js + "windowsDebug": "@powershell -Command $env:DEBUG='*';node app.js", +``` + +## Namespace Colors + +Every debug instance has a color generated for it based on its namespace name. +This helps when visually parsing the debug output to identify which debug instance +a debug line belongs to. + +#### Node.js + +In Node.js, colors are enabled when stderr is a TTY. You also _should_ install +the [`supports-color`](https://npmjs.org/supports-color) module alongside debug, +otherwise debug will only use a small handful of basic colors. + + + +#### Web Browser + +Colors are also enabled on "Web Inspectors" that understand the `%c` formatting +option. These are WebKit web inspectors, Firefox ([since version +31](https://hacks.mozilla.org/2014/05/editable-box-model-multiple-selection-sublime-text-keys-much-more-firefox-developer-tools-episode-31/)) +and the Firebug plugin for Firefox (any version). + + + + +## Millisecond diff + +When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the "+NNNms" will show you how much time was spent between calls. + + + +When stdout is not a TTY, `Date#toISOString()` is used, making it more useful for logging the debug information as shown below: + + + + +## Conventions + +If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser". If you append a "*" to the end of your name, it will always be enabled regardless of the setting of the DEBUG environment variable. You can then use it for normal output as well as debug output. + +## Wildcards + +The `*` character may be used as a wildcard. Suppose for example your library has +debuggers named "connect:bodyParser", "connect:compress", "connect:session", +instead of listing all three with +`DEBUG=connect:bodyParser,connect:compress,connect:session`, you may simply do +`DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`. + +You can also exclude specific debuggers by prefixing them with a "-" character. +For example, `DEBUG=*,-connect:*` would include all debuggers except those +starting with "connect:". + +## Environment Variables + +When running through Node.js, you can set a few environment variables that will +change the behavior of the debug logging: + +| Name | Purpose | +|-----------|-------------------------------------------------| +| `DEBUG` | Enables/disables specific debugging namespaces. | +| `DEBUG_HIDE_DATE` | Hide date from debug output (non-TTY). | +| `DEBUG_COLORS`| Whether or not to use colors in the debug output. | +| `DEBUG_DEPTH` | Object inspection depth. | +| `DEBUG_SHOW_HIDDEN` | Shows hidden properties on inspected objects. | + + +__Note:__ The environment variables beginning with `DEBUG_` end up being +converted into an Options object that gets used with `%o`/`%O` formatters. +See the Node.js documentation for +[`util.inspect()`](https://nodejs.org/api/util.html#util_util_inspect_object_options) +for the complete list. + +## Formatters + +Debug uses [printf-style](https://wikipedia.org/wiki/Printf_format_string) formatting. +Below are the officially supported formatters: + +| Formatter | Representation | +|-----------|----------------| +| `%O` | Pretty-print an Object on multiple lines. | +| `%o` | Pretty-print an Object all on a single line. | +| `%s` | String. | +| `%d` | Number (both integer and float). | +| `%j` | JSON. Replaced with the string '[Circular]' if the argument contains circular references. | +| `%%` | Single percent sign ('%'). This does not consume an argument. | + + +### Custom formatters + +You can add custom formatters by extending the `debug.formatters` object. +For example, if you wanted to add support for rendering a Buffer as hex with +`%h`, you could do something like: + +```js +const createDebug = require('debug') +createDebug.formatters.h = (v) => { + return v.toString('hex') +} + +// …elsewhere +const debug = createDebug('foo') +debug('this is hex: %h', new Buffer('hello world')) +// foo this is hex: 68656c6c6f20776f726c6421 +0ms +``` + + +## Browser Support + +You can build a browser-ready script using [browserify](https://github.com/substack/node-browserify), +or just use the [browserify-as-a-service](https://wzrd.in/) [build](https://wzrd.in/standalone/debug@latest), +if you don't want to build it yourself. + +Debug's enable state is currently persisted by `localStorage`. +Consider the situation shown below where you have `worker:a` and `worker:b`, +and wish to debug both. You can enable this using `localStorage.debug`: + +```js +localStorage.debug = 'worker:*' +``` + +And then refresh the page. + +```js +a = debug('worker:a'); +b = debug('worker:b'); + +setInterval(function(){ + a('doing some work'); +}, 1000); + +setInterval(function(){ + b('doing some work'); +}, 1200); +``` + + +## Output streams + + By default `debug` will log to stderr, however this can be configured per-namespace by overriding the `log` method: + +Example [_stdout.js_](./examples/node/stdout.js): + +```js +var debug = require('debug'); +var error = debug('app:error'); + +// by default stderr is used +error('goes to stderr!'); + +var log = debug('app:log'); +// set this namespace to log via console.log +log.log = console.log.bind(console); // don't forget to bind to console! +log('goes to stdout'); +error('still goes to stderr!'); + +// set all output to go via console.info +// overrides all per-namespace log settings +debug.log = console.info.bind(console); +error('now goes to stdout via console.info'); +log('still goes to stdout, but via console.info now'); +``` + +## Extend +You can simply extend debugger +```js +const log = require('debug')('auth'); + +//creates new debug instance with extended namespace +const logSign = log.extend('sign'); +const logLogin = log.extend('login'); + +log('hello'); // auth hello +logSign('hello'); //auth:sign hello +logLogin('hello'); //auth:login hello +``` + +## Set dynamically + +You can also enable debug dynamically by calling the `enable()` method : + +```js +let debug = require('debug'); + +console.log(1, debug.enabled('test')); + +debug.enable('test'); +console.log(2, debug.enabled('test')); + +debug.disable(); +console.log(3, debug.enabled('test')); + +``` + +print : +``` +1 false +2 true +3 false +``` + +Usage : +`enable(namespaces)` +`namespaces` can include modes separated by a colon and wildcards. + +Note that calling `enable()` completely overrides previously set DEBUG variable : + +``` +$ DEBUG=foo node -e 'var dbg = require("debug"); dbg.enable("bar"); console.log(dbg.enabled("foo"))' +=> false +``` + +`disable()` + +Will disable all namespaces. The functions returns the namespaces currently +enabled (and skipped). This can be useful if you want to disable debugging +temporarily without knowing what was enabled to begin with. + +For example: + +```js +let debug = require('debug'); +debug.enable('foo:*,-foo:bar'); +let namespaces = debug.disable(); +debug.enable(namespaces); +``` + +Note: There is no guarantee that the string will be identical to the initial +enable string, but semantically they will be identical. + +## Checking whether a debug target is enabled + +After you've created a debug instance, you can determine whether or not it is +enabled by checking the `enabled` property: + +```javascript +const debug = require('debug')('http'); + +if (debug.enabled) { + // do stuff... +} +``` + +You can also manually toggle this property to force the debug instance to be +enabled or disabled. + + +## Authors + + - TJ Holowaychuk + - Nathan Rajlich + - Andrew Rhyne + +## Backers + +Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/debug#backer)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## Sponsors + +Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/debug#sponsor)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## License + +(The MIT License) + +Copyright (c) 2014-2017 TJ Holowaychuk <tj@vision-media.ca> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/strong-soap/node_modules/debug/dist/debug.js b/node_modules/strong-soap/node_modules/debug/dist/debug.js new file mode 100644 index 00000000..89ad0c21 --- /dev/null +++ b/node_modules/strong-soap/node_modules/debug/dist/debug.js @@ -0,0 +1,912 @@ +"use strict"; + +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } + +function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } + +function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +(function (f) { + if ((typeof exports === "undefined" ? "undefined" : _typeof(exports)) === "object" && typeof module !== "undefined") { + module.exports = f(); + } else if (typeof define === "function" && define.amd) { + define([], f); + } else { + var g; + + if (typeof window !== "undefined") { + g = window; + } else if (typeof global !== "undefined") { + g = global; + } else if (typeof self !== "undefined") { + g = self; + } else { + g = this; + } + + g.debug = f(); + } +})(function () { + var define, module, exports; + return function () { + function r(e, n, t) { + function o(i, f) { + if (!n[i]) { + if (!e[i]) { + var c = "function" == typeof require && require; + if (!f && c) return c(i, !0); + if (u) return u(i, !0); + var a = new Error("Cannot find module '" + i + "'"); + throw a.code = "MODULE_NOT_FOUND", a; + } + + var p = n[i] = { + exports: {} + }; + e[i][0].call(p.exports, function (r) { + var n = e[i][1][r]; + return o(n || r); + }, p, p.exports, r, e, n, t); + } + + return n[i].exports; + } + + for (var u = "function" == typeof require && require, i = 0; i < t.length; i++) { + o(t[i]); + } + + return o; + } + + return r; + }()({ + 1: [function (require, module, exports) { + /** + * Helpers. + */ + var s = 1000; + var m = s * 60; + var h = m * 60; + var d = h * 24; + var w = d * 7; + var y = d * 365.25; + /** + * Parse or format the given `val`. + * + * Options: + * + * - `long` verbose formatting [false] + * + * @param {String|Number} val + * @param {Object} [options] + * @throws {Error} throw an error if val is not a non-empty string or a number + * @return {String|Number} + * @api public + */ + + module.exports = function (val, options) { + options = options || {}; + + var type = _typeof(val); + + if (type === 'string' && val.length > 0) { + return parse(val); + } else if (type === 'number' && isNaN(val) === false) { + return options.long ? fmtLong(val) : fmtShort(val); + } + + throw new Error('val is not a non-empty string or a valid number. val=' + JSON.stringify(val)); + }; + /** + * Parse the given `str` and return milliseconds. + * + * @param {String} str + * @return {Number} + * @api private + */ + + + function parse(str) { + str = String(str); + + if (str.length > 100) { + return; + } + + var match = /^((?:\d+)?\-?\d?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(str); + + if (!match) { + return; + } + + var n = parseFloat(match[1]); + var type = (match[2] || 'ms').toLowerCase(); + + switch (type) { + case 'years': + case 'year': + case 'yrs': + case 'yr': + case 'y': + return n * y; + + case 'weeks': + case 'week': + case 'w': + return n * w; + + case 'days': + case 'day': + case 'd': + return n * d; + + case 'hours': + case 'hour': + case 'hrs': + case 'hr': + case 'h': + return n * h; + + case 'minutes': + case 'minute': + case 'mins': + case 'min': + case 'm': + return n * m; + + case 'seconds': + case 'second': + case 'secs': + case 'sec': + case 's': + return n * s; + + case 'milliseconds': + case 'millisecond': + case 'msecs': + case 'msec': + case 'ms': + return n; + + default: + return undefined; + } + } + /** + * Short format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + + + function fmtShort(ms) { + var msAbs = Math.abs(ms); + + if (msAbs >= d) { + return Math.round(ms / d) + 'd'; + } + + if (msAbs >= h) { + return Math.round(ms / h) + 'h'; + } + + if (msAbs >= m) { + return Math.round(ms / m) + 'm'; + } + + if (msAbs >= s) { + return Math.round(ms / s) + 's'; + } + + return ms + 'ms'; + } + /** + * Long format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + + + function fmtLong(ms) { + var msAbs = Math.abs(ms); + + if (msAbs >= d) { + return plural(ms, msAbs, d, 'day'); + } + + if (msAbs >= h) { + return plural(ms, msAbs, h, 'hour'); + } + + if (msAbs >= m) { + return plural(ms, msAbs, m, 'minute'); + } + + if (msAbs >= s) { + return plural(ms, msAbs, s, 'second'); + } + + return ms + ' ms'; + } + /** + * Pluralization helper. + */ + + + function plural(ms, msAbs, n, name) { + var isPlural = msAbs >= n * 1.5; + return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); + } + }, {}], + 2: [function (require, module, exports) { + // shim for using process in browser + var process = module.exports = {}; // cached from whatever global is present so that test runners that stub it + // don't break things. But we need to wrap it in a try catch in case it is + // wrapped in strict mode code which doesn't define any globals. It's inside a + // function because try/catches deoptimize in certain engines. + + var cachedSetTimeout; + var cachedClearTimeout; + + function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); + } + + function defaultClearTimeout() { + throw new Error('clearTimeout has not been defined'); + } + + (function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } + })(); + + function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } // if setTimeout wasn't available but was latter defined + + + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch (e) { + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch (e) { + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } + } + + function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } // if clearTimeout wasn't available but was latter defined + + + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e) { + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e) { + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } + } + + var queue = []; + var draining = false; + var currentQueue; + var queueIndex = -1; + + function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + + draining = false; + + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + + if (queue.length) { + drainQueue(); + } + } + + function drainQueue() { + if (draining) { + return; + } + + var timeout = runTimeout(cleanUpNextTick); + draining = true; + var len = queue.length; + + while (len) { + currentQueue = queue; + queue = []; + + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + + queueIndex = -1; + len = queue.length; + } + + currentQueue = null; + draining = false; + runClearTimeout(timeout); + } + + process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + + queue.push(new Item(fun, args)); + + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } + }; // v8 likes predictible objects + + + function Item(fun, array) { + this.fun = fun; + this.array = array; + } + + Item.prototype.run = function () { + this.fun.apply(null, this.array); + }; + + process.title = 'browser'; + process.browser = true; + process.env = {}; + process.argv = []; + process.version = ''; // empty string to avoid regexp issues + + process.versions = {}; + + function noop() {} + + process.on = noop; + process.addListener = noop; + process.once = noop; + process.off = noop; + process.removeListener = noop; + process.removeAllListeners = noop; + process.emit = noop; + process.prependListener = noop; + process.prependOnceListener = noop; + + process.listeners = function (name) { + return []; + }; + + process.binding = function (name) { + throw new Error('process.binding is not supported'); + }; + + process.cwd = function () { + return '/'; + }; + + process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); + }; + + process.umask = function () { + return 0; + }; + }, {}], + 3: [function (require, module, exports) { + /** + * This is the common logic for both the Node.js and web browser + * implementations of `debug()`. + */ + function setup(env) { + createDebug.debug = createDebug; + createDebug.default = createDebug; + createDebug.coerce = coerce; + createDebug.disable = disable; + createDebug.enable = enable; + createDebug.enabled = enabled; + createDebug.humanize = require('ms'); + Object.keys(env).forEach(function (key) { + createDebug[key] = env[key]; + }); + /** + * Active `debug` instances. + */ + + createDebug.instances = []; + /** + * The currently active debug mode names, and names to skip. + */ + + createDebug.names = []; + createDebug.skips = []; + /** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". + */ + + createDebug.formatters = {}; + /** + * Selects a color for a debug namespace + * @param {String} namespace The namespace string for the for the debug instance to be colored + * @return {Number|String} An ANSI color code for the given namespace + * @api private + */ + + function selectColor(namespace) { + var hash = 0; + + for (var i = 0; i < namespace.length; i++) { + hash = (hash << 5) - hash + namespace.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + + return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; + } + + createDebug.selectColor = selectColor; + /** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @return {Function} + * @api public + */ + + function createDebug(namespace) { + var prevTime; + + function debug() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + // Disabled? + if (!debug.enabled) { + return; + } + + var self = debug; // Set `diff` timestamp + + var curr = Number(new Date()); + var ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; + args[0] = createDebug.coerce(args[0]); + + if (typeof args[0] !== 'string') { + // Anything else let's inspect with %O + args.unshift('%O'); + } // Apply any `formatters` transformations + + + var index = 0; + args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) { + // If we encounter an escaped % then don't increase the array index + if (match === '%%') { + return match; + } + + index++; + var formatter = createDebug.formatters[format]; + + if (typeof formatter === 'function') { + var val = args[index]; + match = formatter.call(self, val); // Now we need to remove `args[index]` since it's inlined in the `format` + + args.splice(index, 1); + index--; + } + + return match; + }); // Apply env-specific formatting (colors, etc.) + + createDebug.formatArgs.call(self, args); + var logFn = self.log || createDebug.log; + logFn.apply(self, args); + } + + debug.namespace = namespace; + debug.enabled = createDebug.enabled(namespace); + debug.useColors = createDebug.useColors(); + debug.color = selectColor(namespace); + debug.destroy = destroy; + debug.extend = extend; // Debug.formatArgs = formatArgs; + // debug.rawLog = rawLog; + // env-specific initialization logic for debug instances + + if (typeof createDebug.init === 'function') { + createDebug.init(debug); + } + + createDebug.instances.push(debug); + return debug; + } + + function destroy() { + var index = createDebug.instances.indexOf(this); + + if (index !== -1) { + createDebug.instances.splice(index, 1); + return true; + } + + return false; + } + + function extend(namespace, delimiter) { + var newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); + newDebug.log = this.log; + return newDebug; + } + /** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + + + function enable(namespaces) { + createDebug.save(namespaces); + createDebug.names = []; + createDebug.skips = []; + var i; + var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); + var len = split.length; + + for (i = 0; i < len; i++) { + if (!split[i]) { + // ignore empty strings + continue; + } + + namespaces = split[i].replace(/\*/g, '.*?'); + + if (namespaces[0] === '-') { + createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); + } else { + createDebug.names.push(new RegExp('^' + namespaces + '$')); + } + } + + for (i = 0; i < createDebug.instances.length; i++) { + var instance = createDebug.instances[i]; + instance.enabled = createDebug.enabled(instance.namespace); + } + } + /** + * Disable debug output. + * + * @return {String} namespaces + * @api public + */ + + + function disable() { + var namespaces = [].concat(_toConsumableArray(createDebug.names.map(toNamespace)), _toConsumableArray(createDebug.skips.map(toNamespace).map(function (namespace) { + return '-' + namespace; + }))).join(','); + createDebug.enable(''); + return namespaces; + } + /** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + + + function enabled(name) { + if (name[name.length - 1] === '*') { + return true; + } + + var i; + var len; + + for (i = 0, len = createDebug.skips.length; i < len; i++) { + if (createDebug.skips[i].test(name)) { + return false; + } + } + + for (i = 0, len = createDebug.names.length; i < len; i++) { + if (createDebug.names[i].test(name)) { + return true; + } + } + + return false; + } + /** + * Convert regexp to namespace + * + * @param {RegExp} regxep + * @return {String} namespace + * @api private + */ + + + function toNamespace(regexp) { + return regexp.toString().substring(2, regexp.toString().length - 2).replace(/\.\*\?$/, '*'); + } + /** + * Coerce `val`. + * + * @param {Mixed} val + * @return {Mixed} + * @api private + */ + + + function coerce(val) { + if (val instanceof Error) { + return val.stack || val.message; + } + + return val; + } + + createDebug.enable(createDebug.load()); + return createDebug; + } + + module.exports = setup; + }, { + "ms": 1 + }], + 4: [function (require, module, exports) { + (function (process) { + /* eslint-env browser */ + + /** + * This is the web browser implementation of `debug()`. + */ + exports.log = log; + exports.formatArgs = formatArgs; + exports.save = save; + exports.load = load; + exports.useColors = useColors; + exports.storage = localstorage(); + /** + * Colors. + */ + + exports.colors = ['#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33']; + /** + * Currently only WebKit-based Web Inspectors, Firefox >= v31, + * and the Firebug extension (any Firefox version) are known + * to support "%c" CSS customizations. + * + * TODO: add a `localStorage` variable to explicitly enable/disable colors + */ + // eslint-disable-next-line complexity + + function useColors() { + // NB: In an Electron preload script, document will be defined but not fully + // initialized. Since we know we're in Chrome, we'll just detect this case + // explicitly + if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) { + return true; + } // Internet Explorer and Edge do not support colors. + + + if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { + return false; + } // Is webkit? http://stackoverflow.com/a/16459606/376773 + // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 + + + return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // Is firebug? http://stackoverflow.com/a/398120/376773 + typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) || // Is firefox >= v31? + // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages + typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 || // Double check webkit in userAgent just in case we are in a worker + typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/); + } + /** + * Colorize log arguments if enabled. + * + * @api public + */ + + + function formatArgs(args) { + args[0] = (this.useColors ? '%c' : '') + this.namespace + (this.useColors ? ' %c' : ' ') + args[0] + (this.useColors ? '%c ' : ' ') + '+' + module.exports.humanize(this.diff); + + if (!this.useColors) { + return; + } + + var c = 'color: ' + this.color; + args.splice(1, 0, c, 'color: inherit'); // The final "%c" is somewhat tricky, because there could be other + // arguments passed either before or after the %c, so we need to + // figure out the correct index to insert the CSS into + + var index = 0; + var lastC = 0; + args[0].replace(/%[a-zA-Z%]/g, function (match) { + if (match === '%%') { + return; + } + + index++; + + if (match === '%c') { + // We only are interested in the *last* %c + // (the user may have provided their own) + lastC = index; + } + }); + args.splice(lastC, 0, c); + } + /** + * Invokes `console.log()` when available. + * No-op when `console.log` is not a "function". + * + * @api public + */ + + + function log() { + var _console; + + // This hackery is required for IE8/9, where + // the `console.log` function doesn't have 'apply' + return (typeof console === "undefined" ? "undefined" : _typeof(console)) === 'object' && console.log && (_console = console).log.apply(_console, arguments); + } + /** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + + + function save(namespaces) { + try { + if (namespaces) { + exports.storage.setItem('debug', namespaces); + } else { + exports.storage.removeItem('debug'); + } + } catch (error) {// Swallow + // XXX (@Qix-) should we be logging these? + } + } + /** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + + + function load() { + var r; + + try { + r = exports.storage.getItem('debug'); + } catch (error) {} // Swallow + // XXX (@Qix-) should we be logging these? + // If debug isn't set in LS, and we're in Electron, try to load $DEBUG + + + if (!r && typeof process !== 'undefined' && 'env' in process) { + r = process.env.DEBUG; + } + + return r; + } + /** + * Localstorage attempts to return the localstorage. + * + * This is necessary because safari throws + * when a user disables cookies/localstorage + * and you attempt to access it. + * + * @return {LocalStorage} + * @api private + */ + + + function localstorage() { + try { + // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context + // The Browser also has localStorage in the global context. + return localStorage; + } catch (error) {// Swallow + // XXX (@Qix-) should we be logging these? + } + } + + module.exports = require('./common')(exports); + var formatters = module.exports.formatters; + /** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ + + formatters.j = function (v) { + try { + return JSON.stringify(v); + } catch (error) { + return '[UnexpectedJSONParseError]: ' + error.message; + } + }; + }).call(this, require('_process')); + }, { + "./common": 3, + "_process": 2 + }] + }, {}, [4])(4); +}); diff --git a/node_modules/strong-soap/node_modules/debug/package.json b/node_modules/strong-soap/node_modules/debug/package.json new file mode 100644 index 00000000..9e9ac5ea --- /dev/null +++ b/node_modules/strong-soap/node_modules/debug/package.json @@ -0,0 +1,102 @@ +{ + "_from": "debug@^4.1.1", + "_id": "debug@4.1.1", + "_inBundle": false, + "_integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "_location": "/strong-soap/debug", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "debug@^4.1.1", + "name": "debug", + "escapedName": "debug", + "rawSpec": "^4.1.1", + "saveSpec": null, + "fetchSpec": "^4.1.1" + }, + "_requiredBy": [ + "/strong-soap" + ], + "_resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "_shasum": "3b72260255109c6b589cee050f1d516139664791", + "_spec": "debug@^4.1.1", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/strong-soap", + "author": { + "name": "TJ Holowaychuk", + "email": "tj@vision-media.ca" + }, + "browser": "./src/browser.js", + "bugs": { + "url": "https://github.com/visionmedia/debug/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Nathan Rajlich", + "email": "nathan@tootallnate.net", + "url": "http://n8.io" + }, + { + "name": "Andrew Rhyne", + "email": "rhyneandrew@gmail.com" + } + ], + "dependencies": { + "ms": "^2.1.1" + }, + "deprecated": false, + "description": "small debugging utility", + "devDependencies": { + "@babel/cli": "^7.0.0", + "@babel/core": "^7.0.0", + "@babel/preset-env": "^7.0.0", + "browserify": "14.4.0", + "chai": "^3.5.0", + "concurrently": "^3.1.0", + "coveralls": "^3.0.2", + "istanbul": "^0.4.5", + "karma": "^3.0.0", + "karma-chai": "^0.1.0", + "karma-mocha": "^1.3.0", + "karma-phantomjs-launcher": "^1.0.2", + "mocha": "^5.2.0", + "mocha-lcov-reporter": "^1.2.0", + "rimraf": "^2.5.4", + "xo": "^0.23.0" + }, + "files": [ + "src", + "dist/debug.js", + "LICENSE", + "README.md" + ], + "homepage": "https://github.com/visionmedia/debug#readme", + "keywords": [ + "debug", + "log", + "debugger" + ], + "license": "MIT", + "main": "./src/index.js", + "name": "debug", + "repository": { + "type": "git", + "url": "git://github.com/visionmedia/debug.git" + }, + "scripts": { + "build": "npm run build:debug && npm run build:test", + "build:debug": "babel -o dist/debug.js dist/debug.es6.js > dist/debug.js", + "build:test": "babel -d dist test.js", + "clean": "rimraf dist coverage", + "lint": "xo", + "prebuild:debug": "mkdir -p dist && browserify --standalone debug -o dist/debug.es6.js .", + "pretest:browser": "npm run build", + "test": "npm run test:node && npm run test:browser", + "test:browser": "karma start --single-run", + "test:coverage": "cat ./coverage/lcov.info | coveralls", + "test:node": "istanbul cover _mocha -- test.js" + }, + "unpkg": "./dist/debug.js", + "version": "4.1.1" +} diff --git a/node_modules/strong-soap/node_modules/debug/src/browser.js b/node_modules/strong-soap/node_modules/debug/src/browser.js new file mode 100644 index 00000000..5f34c0d0 --- /dev/null +++ b/node_modules/strong-soap/node_modules/debug/src/browser.js @@ -0,0 +1,264 @@ +/* eslint-env browser */ + +/** + * This is the web browser implementation of `debug()`. + */ + +exports.log = log; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; +exports.storage = localstorage(); + +/** + * Colors. + */ + +exports.colors = [ + '#0000CC', + '#0000FF', + '#0033CC', + '#0033FF', + '#0066CC', + '#0066FF', + '#0099CC', + '#0099FF', + '#00CC00', + '#00CC33', + '#00CC66', + '#00CC99', + '#00CCCC', + '#00CCFF', + '#3300CC', + '#3300FF', + '#3333CC', + '#3333FF', + '#3366CC', + '#3366FF', + '#3399CC', + '#3399FF', + '#33CC00', + '#33CC33', + '#33CC66', + '#33CC99', + '#33CCCC', + '#33CCFF', + '#6600CC', + '#6600FF', + '#6633CC', + '#6633FF', + '#66CC00', + '#66CC33', + '#9900CC', + '#9900FF', + '#9933CC', + '#9933FF', + '#99CC00', + '#99CC33', + '#CC0000', + '#CC0033', + '#CC0066', + '#CC0099', + '#CC00CC', + '#CC00FF', + '#CC3300', + '#CC3333', + '#CC3366', + '#CC3399', + '#CC33CC', + '#CC33FF', + '#CC6600', + '#CC6633', + '#CC9900', + '#CC9933', + '#CCCC00', + '#CCCC33', + '#FF0000', + '#FF0033', + '#FF0066', + '#FF0099', + '#FF00CC', + '#FF00FF', + '#FF3300', + '#FF3333', + '#FF3366', + '#FF3399', + '#FF33CC', + '#FF33FF', + '#FF6600', + '#FF6633', + '#FF9900', + '#FF9933', + '#FFCC00', + '#FFCC33' +]; + +/** + * Currently only WebKit-based Web Inspectors, Firefox >= v31, + * and the Firebug extension (any Firefox version) are known + * to support "%c" CSS customizations. + * + * TODO: add a `localStorage` variable to explicitly enable/disable colors + */ + +// eslint-disable-next-line complexity +function useColors() { + // NB: In an Electron preload script, document will be defined but not fully + // initialized. Since we know we're in Chrome, we'll just detect this case + // explicitly + if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) { + return true; + } + + // Internet Explorer and Edge do not support colors. + if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { + return false; + } + + // Is webkit? http://stackoverflow.com/a/16459606/376773 + // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 + return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || + // Is firebug? http://stackoverflow.com/a/398120/376773 + (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || + // Is firefox >= v31? + // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || + // Double check webkit in userAgent just in case we are in a worker + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); +} + +/** + * Colorize log arguments if enabled. + * + * @api public + */ + +function formatArgs(args) { + args[0] = (this.useColors ? '%c' : '') + + this.namespace + + (this.useColors ? ' %c' : ' ') + + args[0] + + (this.useColors ? '%c ' : ' ') + + '+' + module.exports.humanize(this.diff); + + if (!this.useColors) { + return; + } + + const c = 'color: ' + this.color; + args.splice(1, 0, c, 'color: inherit'); + + // The final "%c" is somewhat tricky, because there could be other + // arguments passed either before or after the %c, so we need to + // figure out the correct index to insert the CSS into + let index = 0; + let lastC = 0; + args[0].replace(/%[a-zA-Z%]/g, match => { + if (match === '%%') { + return; + } + index++; + if (match === '%c') { + // We only are interested in the *last* %c + // (the user may have provided their own) + lastC = index; + } + }); + + args.splice(lastC, 0, c); +} + +/** + * Invokes `console.log()` when available. + * No-op when `console.log` is not a "function". + * + * @api public + */ +function log(...args) { + // This hackery is required for IE8/9, where + // the `console.log` function doesn't have 'apply' + return typeof console === 'object' && + console.log && + console.log(...args); +} + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ +function save(namespaces) { + try { + if (namespaces) { + exports.storage.setItem('debug', namespaces); + } else { + exports.storage.removeItem('debug'); + } + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ +function load() { + let r; + try { + r = exports.storage.getItem('debug'); + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } + + // If debug isn't set in LS, and we're in Electron, try to load $DEBUG + if (!r && typeof process !== 'undefined' && 'env' in process) { + r = process.env.DEBUG; + } + + return r; +} + +/** + * Localstorage attempts to return the localstorage. + * + * This is necessary because safari throws + * when a user disables cookies/localstorage + * and you attempt to access it. + * + * @return {LocalStorage} + * @api private + */ + +function localstorage() { + try { + // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context + // The Browser also has localStorage in the global context. + return localStorage; + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } +} + +module.exports = require('./common')(exports); + +const {formatters} = module.exports; + +/** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ + +formatters.j = function (v) { + try { + return JSON.stringify(v); + } catch (error) { + return '[UnexpectedJSONParseError]: ' + error.message; + } +}; diff --git a/node_modules/strong-soap/node_modules/debug/src/common.js b/node_modules/strong-soap/node_modules/debug/src/common.js new file mode 100644 index 00000000..2f82b8dc --- /dev/null +++ b/node_modules/strong-soap/node_modules/debug/src/common.js @@ -0,0 +1,266 @@ + +/** + * This is the common logic for both the Node.js and web browser + * implementations of `debug()`. + */ + +function setup(env) { + createDebug.debug = createDebug; + createDebug.default = createDebug; + createDebug.coerce = coerce; + createDebug.disable = disable; + createDebug.enable = enable; + createDebug.enabled = enabled; + createDebug.humanize = require('ms'); + + Object.keys(env).forEach(key => { + createDebug[key] = env[key]; + }); + + /** + * Active `debug` instances. + */ + createDebug.instances = []; + + /** + * The currently active debug mode names, and names to skip. + */ + + createDebug.names = []; + createDebug.skips = []; + + /** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". + */ + createDebug.formatters = {}; + + /** + * Selects a color for a debug namespace + * @param {String} namespace The namespace string for the for the debug instance to be colored + * @return {Number|String} An ANSI color code for the given namespace + * @api private + */ + function selectColor(namespace) { + let hash = 0; + + for (let i = 0; i < namespace.length; i++) { + hash = ((hash << 5) - hash) + namespace.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + + return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; + } + createDebug.selectColor = selectColor; + + /** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @return {Function} + * @api public + */ + function createDebug(namespace) { + let prevTime; + + function debug(...args) { + // Disabled? + if (!debug.enabled) { + return; + } + + const self = debug; + + // Set `diff` timestamp + const curr = Number(new Date()); + const ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; + + args[0] = createDebug.coerce(args[0]); + + if (typeof args[0] !== 'string') { + // Anything else let's inspect with %O + args.unshift('%O'); + } + + // Apply any `formatters` transformations + let index = 0; + args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => { + // If we encounter an escaped % then don't increase the array index + if (match === '%%') { + return match; + } + index++; + const formatter = createDebug.formatters[format]; + if (typeof formatter === 'function') { + const val = args[index]; + match = formatter.call(self, val); + + // Now we need to remove `args[index]` since it's inlined in the `format` + args.splice(index, 1); + index--; + } + return match; + }); + + // Apply env-specific formatting (colors, etc.) + createDebug.formatArgs.call(self, args); + + const logFn = self.log || createDebug.log; + logFn.apply(self, args); + } + + debug.namespace = namespace; + debug.enabled = createDebug.enabled(namespace); + debug.useColors = createDebug.useColors(); + debug.color = selectColor(namespace); + debug.destroy = destroy; + debug.extend = extend; + // Debug.formatArgs = formatArgs; + // debug.rawLog = rawLog; + + // env-specific initialization logic for debug instances + if (typeof createDebug.init === 'function') { + createDebug.init(debug); + } + + createDebug.instances.push(debug); + + return debug; + } + + function destroy() { + const index = createDebug.instances.indexOf(this); + if (index !== -1) { + createDebug.instances.splice(index, 1); + return true; + } + return false; + } + + function extend(namespace, delimiter) { + const newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); + newDebug.log = this.log; + return newDebug; + } + + /** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + function enable(namespaces) { + createDebug.save(namespaces); + + createDebug.names = []; + createDebug.skips = []; + + let i; + const split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); + const len = split.length; + + for (i = 0; i < len; i++) { + if (!split[i]) { + // ignore empty strings + continue; + } + + namespaces = split[i].replace(/\*/g, '.*?'); + + if (namespaces[0] === '-') { + createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); + } else { + createDebug.names.push(new RegExp('^' + namespaces + '$')); + } + } + + for (i = 0; i < createDebug.instances.length; i++) { + const instance = createDebug.instances[i]; + instance.enabled = createDebug.enabled(instance.namespace); + } + } + + /** + * Disable debug output. + * + * @return {String} namespaces + * @api public + */ + function disable() { + const namespaces = [ + ...createDebug.names.map(toNamespace), + ...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace) + ].join(','); + createDebug.enable(''); + return namespaces; + } + + /** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + function enabled(name) { + if (name[name.length - 1] === '*') { + return true; + } + + let i; + let len; + + for (i = 0, len = createDebug.skips.length; i < len; i++) { + if (createDebug.skips[i].test(name)) { + return false; + } + } + + for (i = 0, len = createDebug.names.length; i < len; i++) { + if (createDebug.names[i].test(name)) { + return true; + } + } + + return false; + } + + /** + * Convert regexp to namespace + * + * @param {RegExp} regxep + * @return {String} namespace + * @api private + */ + function toNamespace(regexp) { + return regexp.toString() + .substring(2, regexp.toString().length - 2) + .replace(/\.\*\?$/, '*'); + } + + /** + * Coerce `val`. + * + * @param {Mixed} val + * @return {Mixed} + * @api private + */ + function coerce(val) { + if (val instanceof Error) { + return val.stack || val.message; + } + return val; + } + + createDebug.enable(createDebug.load()); + + return createDebug; +} + +module.exports = setup; diff --git a/node_modules/strong-soap/node_modules/debug/src/index.js b/node_modules/strong-soap/node_modules/debug/src/index.js new file mode 100644 index 00000000..bf4c57f2 --- /dev/null +++ b/node_modules/strong-soap/node_modules/debug/src/index.js @@ -0,0 +1,10 @@ +/** + * Detect Electron renderer / nwjs process, which is node, but we should + * treat as a browser. + */ + +if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) { + module.exports = require('./browser.js'); +} else { + module.exports = require('./node.js'); +} diff --git a/node_modules/strong-soap/node_modules/debug/src/node.js b/node_modules/strong-soap/node_modules/debug/src/node.js new file mode 100644 index 00000000..5e1f1541 --- /dev/null +++ b/node_modules/strong-soap/node_modules/debug/src/node.js @@ -0,0 +1,257 @@ +/** + * Module dependencies. + */ + +const tty = require('tty'); +const util = require('util'); + +/** + * This is the Node.js implementation of `debug()`. + */ + +exports.init = init; +exports.log = log; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; + +/** + * Colors. + */ + +exports.colors = [6, 2, 3, 4, 5, 1]; + +try { + // Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json) + // eslint-disable-next-line import/no-extraneous-dependencies + const supportsColor = require('supports-color'); + + if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) { + exports.colors = [ + 20, + 21, + 26, + 27, + 32, + 33, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 56, + 57, + 62, + 63, + 68, + 69, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 92, + 93, + 98, + 99, + 112, + 113, + 128, + 129, + 134, + 135, + 148, + 149, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 178, + 179, + 184, + 185, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 214, + 215, + 220, + 221 + ]; + } +} catch (error) { + // Swallow - we only care if `supports-color` is available; it doesn't have to be. +} + +/** + * Build up the default `inspectOpts` object from the environment variables. + * + * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js + */ + +exports.inspectOpts = Object.keys(process.env).filter(key => { + return /^debug_/i.test(key); +}).reduce((obj, key) => { + // Camel-case + const prop = key + .substring(6) + .toLowerCase() + .replace(/_([a-z])/g, (_, k) => { + return k.toUpperCase(); + }); + + // Coerce string value into JS value + let val = process.env[key]; + if (/^(yes|on|true|enabled)$/i.test(val)) { + val = true; + } else if (/^(no|off|false|disabled)$/i.test(val)) { + val = false; + } else if (val === 'null') { + val = null; + } else { + val = Number(val); + } + + obj[prop] = val; + return obj; +}, {}); + +/** + * Is stdout a TTY? Colored output is enabled when `true`. + */ + +function useColors() { + return 'colors' in exports.inspectOpts ? + Boolean(exports.inspectOpts.colors) : + tty.isatty(process.stderr.fd); +} + +/** + * Adds ANSI color escape codes if enabled. + * + * @api public + */ + +function formatArgs(args) { + const {namespace: name, useColors} = this; + + if (useColors) { + const c = this.color; + const colorCode = '\u001B[3' + (c < 8 ? c : '8;5;' + c); + const prefix = ` ${colorCode};1m${name} \u001B[0m`; + + args[0] = prefix + args[0].split('\n').join('\n' + prefix); + args.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\u001B[0m'); + } else { + args[0] = getDate() + name + ' ' + args[0]; + } +} + +function getDate() { + if (exports.inspectOpts.hideDate) { + return ''; + } + return new Date().toISOString() + ' '; +} + +/** + * Invokes `util.format()` with the specified arguments and writes to stderr. + */ + +function log(...args) { + return process.stderr.write(util.format(...args) + '\n'); +} + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ +function save(namespaces) { + if (namespaces) { + process.env.DEBUG = namespaces; + } else { + // If you set a process.env field to null or undefined, it gets cast to the + // string 'null' or 'undefined'. Just delete instead. + delete process.env.DEBUG; + } +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + +function load() { + return process.env.DEBUG; +} + +/** + * Init logic for `debug` instances. + * + * Create a new `inspectOpts` object in case `useColors` is set + * differently for a particular `debug` instance. + */ + +function init(debug) { + debug.inspectOpts = {}; + + const keys = Object.keys(exports.inspectOpts); + for (let i = 0; i < keys.length; i++) { + debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; + } +} + +module.exports = require('./common')(exports); + +const {formatters} = module.exports; + +/** + * Map %o to `util.inspect()`, all on a single line. + */ + +formatters.o = function (v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts) + .replace(/\s*\n\s*/g, ' '); +}; + +/** + * Map %O to `util.inspect()`, allowing multiple lines if needed. + */ + +formatters.O = function (v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts); +}; diff --git a/node_modules/strong-soap/node_modules/lodash/LICENSE b/node_modules/strong-soap/node_modules/lodash/LICENSE new file mode 100644 index 00000000..c6f2f614 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/LICENSE @@ -0,0 +1,47 @@ +Copyright JS Foundation and other contributors + +Based on Underscore.js, copyright Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/lodash/lodash + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code displayed within the prose of the +documentation. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +Files located in the node_modules and vendor directories are externally +maintained libraries used by this software which have their own +licenses; we recommend you read them, as their terms may differ from the +terms above. diff --git a/node_modules/strong-soap/node_modules/lodash/README.md b/node_modules/strong-soap/node_modules/lodash/README.md new file mode 100644 index 00000000..ba111a5a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/README.md @@ -0,0 +1,39 @@ +# lodash v4.17.11 + +The [Lodash](https://lodash.com/) library exported as [Node.js](https://nodejs.org/) modules. + +## Installation + +Using npm: +```shell +$ npm i -g npm +$ npm i --save lodash +``` + +In Node.js: +```js +// Load the full build. +var _ = require('lodash'); +// Load the core build. +var _ = require('lodash/core'); +// Load the FP build for immutable auto-curried iteratee-first data-last methods. +var fp = require('lodash/fp'); + +// Load method categories. +var array = require('lodash/array'); +var object = require('lodash/fp/object'); + +// Cherry-pick methods for smaller browserify/rollup/webpack bundles. +var at = require('lodash/at'); +var curryN = require('lodash/fp/curryN'); +``` + +See the [package source](https://github.com/lodash/lodash/tree/4.17.11-npm) for more details. + +**Note:**
+Install [n_](https://www.npmjs.com/package/n_) for Lodash use in the Node.js < 6 REPL. + +## Support + +Tested in Chrome 68-69, Firefox 61-62, IE 11, Edge 17, Safari 10-11, Node.js 6-10, & PhantomJS 2.1.1.
+Automated [browser](https://saucelabs.com/u/lodash) & [CI](https://travis-ci.org/lodash/lodash/) test runs are available. diff --git a/node_modules/strong-soap/node_modules/lodash/_DataView.js b/node_modules/strong-soap/node_modules/lodash/_DataView.js new file mode 100644 index 00000000..ac2d57ca --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_DataView.js @@ -0,0 +1,7 @@ +var getNative = require('./_getNative'), + root = require('./_root'); + +/* Built-in method references that are verified to be native. */ +var DataView = getNative(root, 'DataView'); + +module.exports = DataView; diff --git a/node_modules/strong-soap/node_modules/lodash/_Hash.js b/node_modules/strong-soap/node_modules/lodash/_Hash.js new file mode 100644 index 00000000..b504fe34 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_Hash.js @@ -0,0 +1,32 @@ +var hashClear = require('./_hashClear'), + hashDelete = require('./_hashDelete'), + hashGet = require('./_hashGet'), + hashHas = require('./_hashHas'), + hashSet = require('./_hashSet'); + +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; + +module.exports = Hash; diff --git a/node_modules/strong-soap/node_modules/lodash/_LazyWrapper.js b/node_modules/strong-soap/node_modules/lodash/_LazyWrapper.js new file mode 100644 index 00000000..81786c7f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_LazyWrapper.js @@ -0,0 +1,28 @@ +var baseCreate = require('./_baseCreate'), + baseLodash = require('./_baseLodash'); + +/** Used as references for the maximum length and index of an array. */ +var MAX_ARRAY_LENGTH = 4294967295; + +/** + * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. + * + * @private + * @constructor + * @param {*} value The value to wrap. + */ +function LazyWrapper(value) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__dir__ = 1; + this.__filtered__ = false; + this.__iteratees__ = []; + this.__takeCount__ = MAX_ARRAY_LENGTH; + this.__views__ = []; +} + +// Ensure `LazyWrapper` is an instance of `baseLodash`. +LazyWrapper.prototype = baseCreate(baseLodash.prototype); +LazyWrapper.prototype.constructor = LazyWrapper; + +module.exports = LazyWrapper; diff --git a/node_modules/strong-soap/node_modules/lodash/_ListCache.js b/node_modules/strong-soap/node_modules/lodash/_ListCache.js new file mode 100644 index 00000000..26895c3a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_ListCache.js @@ -0,0 +1,32 @@ +var listCacheClear = require('./_listCacheClear'), + listCacheDelete = require('./_listCacheDelete'), + listCacheGet = require('./_listCacheGet'), + listCacheHas = require('./_listCacheHas'), + listCacheSet = require('./_listCacheSet'); + +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; + +module.exports = ListCache; diff --git a/node_modules/strong-soap/node_modules/lodash/_LodashWrapper.js b/node_modules/strong-soap/node_modules/lodash/_LodashWrapper.js new file mode 100644 index 00000000..c1e4d9df --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_LodashWrapper.js @@ -0,0 +1,22 @@ +var baseCreate = require('./_baseCreate'), + baseLodash = require('./_baseLodash'); + +/** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable explicit method chain sequences. + */ +function LodashWrapper(value, chainAll) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__chain__ = !!chainAll; + this.__index__ = 0; + this.__values__ = undefined; +} + +LodashWrapper.prototype = baseCreate(baseLodash.prototype); +LodashWrapper.prototype.constructor = LodashWrapper; + +module.exports = LodashWrapper; diff --git a/node_modules/strong-soap/node_modules/lodash/_Map.js b/node_modules/strong-soap/node_modules/lodash/_Map.js new file mode 100644 index 00000000..b73f29a0 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_Map.js @@ -0,0 +1,7 @@ +var getNative = require('./_getNative'), + root = require('./_root'); + +/* Built-in method references that are verified to be native. */ +var Map = getNative(root, 'Map'); + +module.exports = Map; diff --git a/node_modules/strong-soap/node_modules/lodash/_MapCache.js b/node_modules/strong-soap/node_modules/lodash/_MapCache.js new file mode 100644 index 00000000..4a4eea7b --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_MapCache.js @@ -0,0 +1,32 @@ +var mapCacheClear = require('./_mapCacheClear'), + mapCacheDelete = require('./_mapCacheDelete'), + mapCacheGet = require('./_mapCacheGet'), + mapCacheHas = require('./_mapCacheHas'), + mapCacheSet = require('./_mapCacheSet'); + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; + +module.exports = MapCache; diff --git a/node_modules/strong-soap/node_modules/lodash/_Promise.js b/node_modules/strong-soap/node_modules/lodash/_Promise.js new file mode 100644 index 00000000..247b9e1b --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_Promise.js @@ -0,0 +1,7 @@ +var getNative = require('./_getNative'), + root = require('./_root'); + +/* Built-in method references that are verified to be native. */ +var Promise = getNative(root, 'Promise'); + +module.exports = Promise; diff --git a/node_modules/strong-soap/node_modules/lodash/_Set.js b/node_modules/strong-soap/node_modules/lodash/_Set.js new file mode 100644 index 00000000..b3c8dcbf --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_Set.js @@ -0,0 +1,7 @@ +var getNative = require('./_getNative'), + root = require('./_root'); + +/* Built-in method references that are verified to be native. */ +var Set = getNative(root, 'Set'); + +module.exports = Set; diff --git a/node_modules/strong-soap/node_modules/lodash/_SetCache.js b/node_modules/strong-soap/node_modules/lodash/_SetCache.js new file mode 100644 index 00000000..6468b064 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_SetCache.js @@ -0,0 +1,27 @@ +var MapCache = require('./_MapCache'), + setCacheAdd = require('./_setCacheAdd'), + setCacheHas = require('./_setCacheHas'); + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new MapCache; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; +SetCache.prototype.has = setCacheHas; + +module.exports = SetCache; diff --git a/node_modules/strong-soap/node_modules/lodash/_Stack.js b/node_modules/strong-soap/node_modules/lodash/_Stack.js new file mode 100644 index 00000000..80b2cf1b --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_Stack.js @@ -0,0 +1,27 @@ +var ListCache = require('./_ListCache'), + stackClear = require('./_stackClear'), + stackDelete = require('./_stackDelete'), + stackGet = require('./_stackGet'), + stackHas = require('./_stackHas'), + stackSet = require('./_stackSet'); + +/** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Stack(entries) { + var data = this.__data__ = new ListCache(entries); + this.size = data.size; +} + +// Add methods to `Stack`. +Stack.prototype.clear = stackClear; +Stack.prototype['delete'] = stackDelete; +Stack.prototype.get = stackGet; +Stack.prototype.has = stackHas; +Stack.prototype.set = stackSet; + +module.exports = Stack; diff --git a/node_modules/strong-soap/node_modules/lodash/_Symbol.js b/node_modules/strong-soap/node_modules/lodash/_Symbol.js new file mode 100644 index 00000000..a013f7c5 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_Symbol.js @@ -0,0 +1,6 @@ +var root = require('./_root'); + +/** Built-in value references. */ +var Symbol = root.Symbol; + +module.exports = Symbol; diff --git a/node_modules/strong-soap/node_modules/lodash/_Uint8Array.js b/node_modules/strong-soap/node_modules/lodash/_Uint8Array.js new file mode 100644 index 00000000..2fb30e15 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_Uint8Array.js @@ -0,0 +1,6 @@ +var root = require('./_root'); + +/** Built-in value references. */ +var Uint8Array = root.Uint8Array; + +module.exports = Uint8Array; diff --git a/node_modules/strong-soap/node_modules/lodash/_WeakMap.js b/node_modules/strong-soap/node_modules/lodash/_WeakMap.js new file mode 100644 index 00000000..567f86c6 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_WeakMap.js @@ -0,0 +1,7 @@ +var getNative = require('./_getNative'), + root = require('./_root'); + +/* Built-in method references that are verified to be native. */ +var WeakMap = getNative(root, 'WeakMap'); + +module.exports = WeakMap; diff --git a/node_modules/strong-soap/node_modules/lodash/_apply.js b/node_modules/strong-soap/node_modules/lodash/_apply.js new file mode 100644 index 00000000..36436dda --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_apply.js @@ -0,0 +1,21 @@ +/** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ +function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); +} + +module.exports = apply; diff --git a/node_modules/strong-soap/node_modules/lodash/_arrayAggregator.js b/node_modules/strong-soap/node_modules/lodash/_arrayAggregator.js new file mode 100644 index 00000000..d96c3ca4 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_arrayAggregator.js @@ -0,0 +1,22 @@ +/** + * A specialized version of `baseAggregator` for arrays. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ +function arrayAggregator(array, setter, iteratee, accumulator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + var value = array[index]; + setter(accumulator, value, iteratee(value), array); + } + return accumulator; +} + +module.exports = arrayAggregator; diff --git a/node_modules/strong-soap/node_modules/lodash/_arrayEach.js b/node_modules/strong-soap/node_modules/lodash/_arrayEach.js new file mode 100644 index 00000000..2c5f5796 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_arrayEach.js @@ -0,0 +1,22 @@ +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +module.exports = arrayEach; diff --git a/node_modules/strong-soap/node_modules/lodash/_arrayEachRight.js b/node_modules/strong-soap/node_modules/lodash/_arrayEachRight.js new file mode 100644 index 00000000..976ca5c2 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_arrayEachRight.js @@ -0,0 +1,21 @@ +/** + * A specialized version of `_.forEachRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEachRight(array, iteratee) { + var length = array == null ? 0 : array.length; + + while (length--) { + if (iteratee(array[length], length, array) === false) { + break; + } + } + return array; +} + +module.exports = arrayEachRight; diff --git a/node_modules/strong-soap/node_modules/lodash/_arrayEvery.js b/node_modules/strong-soap/node_modules/lodash/_arrayEvery.js new file mode 100644 index 00000000..e26a9184 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_arrayEvery.js @@ -0,0 +1,23 @@ +/** + * A specialized version of `_.every` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + */ +function arrayEvery(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (!predicate(array[index], index, array)) { + return false; + } + } + return true; +} + +module.exports = arrayEvery; diff --git a/node_modules/strong-soap/node_modules/lodash/_arrayFilter.js b/node_modules/strong-soap/node_modules/lodash/_arrayFilter.js new file mode 100644 index 00000000..75ea2544 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_arrayFilter.js @@ -0,0 +1,25 @@ +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +module.exports = arrayFilter; diff --git a/node_modules/strong-soap/node_modules/lodash/_arrayIncludes.js b/node_modules/strong-soap/node_modules/lodash/_arrayIncludes.js new file mode 100644 index 00000000..3737a6d9 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_arrayIncludes.js @@ -0,0 +1,17 @@ +var baseIndexOf = require('./_baseIndexOf'); + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && baseIndexOf(array, value, 0) > -1; +} + +module.exports = arrayIncludes; diff --git a/node_modules/strong-soap/node_modules/lodash/_arrayIncludesWith.js b/node_modules/strong-soap/node_modules/lodash/_arrayIncludesWith.js new file mode 100644 index 00000000..235fd975 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_arrayIncludesWith.js @@ -0,0 +1,22 @@ +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +module.exports = arrayIncludesWith; diff --git a/node_modules/strong-soap/node_modules/lodash/_arrayLikeKeys.js b/node_modules/strong-soap/node_modules/lodash/_arrayLikeKeys.js new file mode 100644 index 00000000..b2ec9ce7 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_arrayLikeKeys.js @@ -0,0 +1,49 @@ +var baseTimes = require('./_baseTimes'), + isArguments = require('./isArguments'), + isArray = require('./isArray'), + isBuffer = require('./isBuffer'), + isIndex = require('./_isIndex'), + isTypedArray = require('./isTypedArray'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } + } + return result; +} + +module.exports = arrayLikeKeys; diff --git a/node_modules/strong-soap/node_modules/lodash/_arrayMap.js b/node_modules/strong-soap/node_modules/lodash/_arrayMap.js new file mode 100644 index 00000000..22b22464 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_arrayMap.js @@ -0,0 +1,21 @@ +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +module.exports = arrayMap; diff --git a/node_modules/strong-soap/node_modules/lodash/_arrayPush.js b/node_modules/strong-soap/node_modules/lodash/_arrayPush.js new file mode 100644 index 00000000..7d742b38 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_arrayPush.js @@ -0,0 +1,20 @@ +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +module.exports = arrayPush; diff --git a/node_modules/strong-soap/node_modules/lodash/_arrayReduce.js b/node_modules/strong-soap/node_modules/lodash/_arrayReduce.js new file mode 100644 index 00000000..de8b79b2 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_arrayReduce.js @@ -0,0 +1,26 @@ +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +module.exports = arrayReduce; diff --git a/node_modules/strong-soap/node_modules/lodash/_arrayReduceRight.js b/node_modules/strong-soap/node_modules/lodash/_arrayReduceRight.js new file mode 100644 index 00000000..22d8976d --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_arrayReduceRight.js @@ -0,0 +1,24 @@ +/** + * A specialized version of `_.reduceRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the last element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduceRight(array, iteratee, accumulator, initAccum) { + var length = array == null ? 0 : array.length; + if (initAccum && length) { + accumulator = array[--length]; + } + while (length--) { + accumulator = iteratee(accumulator, array[length], length, array); + } + return accumulator; +} + +module.exports = arrayReduceRight; diff --git a/node_modules/strong-soap/node_modules/lodash/_arraySample.js b/node_modules/strong-soap/node_modules/lodash/_arraySample.js new file mode 100644 index 00000000..fcab0105 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_arraySample.js @@ -0,0 +1,15 @@ +var baseRandom = require('./_baseRandom'); + +/** + * A specialized version of `_.sample` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @returns {*} Returns the random element. + */ +function arraySample(array) { + var length = array.length; + return length ? array[baseRandom(0, length - 1)] : undefined; +} + +module.exports = arraySample; diff --git a/node_modules/strong-soap/node_modules/lodash/_arraySampleSize.js b/node_modules/strong-soap/node_modules/lodash/_arraySampleSize.js new file mode 100644 index 00000000..8c7e364f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_arraySampleSize.js @@ -0,0 +1,17 @@ +var baseClamp = require('./_baseClamp'), + copyArray = require('./_copyArray'), + shuffleSelf = require('./_shuffleSelf'); + +/** + * A specialized version of `_.sampleSize` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ +function arraySampleSize(array, n) { + return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); +} + +module.exports = arraySampleSize; diff --git a/node_modules/strong-soap/node_modules/lodash/_arrayShuffle.js b/node_modules/strong-soap/node_modules/lodash/_arrayShuffle.js new file mode 100644 index 00000000..46313a39 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_arrayShuffle.js @@ -0,0 +1,15 @@ +var copyArray = require('./_copyArray'), + shuffleSelf = require('./_shuffleSelf'); + +/** + * A specialized version of `_.shuffle` for arrays. + * + * @private + * @param {Array} array The array to shuffle. + * @returns {Array} Returns the new shuffled array. + */ +function arrayShuffle(array) { + return shuffleSelf(copyArray(array)); +} + +module.exports = arrayShuffle; diff --git a/node_modules/strong-soap/node_modules/lodash/_arraySome.js b/node_modules/strong-soap/node_modules/lodash/_arraySome.js new file mode 100644 index 00000000..6fd02fd4 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_arraySome.js @@ -0,0 +1,23 @@ +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +module.exports = arraySome; diff --git a/node_modules/strong-soap/node_modules/lodash/_asciiSize.js b/node_modules/strong-soap/node_modules/lodash/_asciiSize.js new file mode 100644 index 00000000..11d29c33 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_asciiSize.js @@ -0,0 +1,12 @@ +var baseProperty = require('./_baseProperty'); + +/** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +var asciiSize = baseProperty('length'); + +module.exports = asciiSize; diff --git a/node_modules/strong-soap/node_modules/lodash/_asciiToArray.js b/node_modules/strong-soap/node_modules/lodash/_asciiToArray.js new file mode 100644 index 00000000..8e3dd5b4 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_asciiToArray.js @@ -0,0 +1,12 @@ +/** + * Converts an ASCII `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function asciiToArray(string) { + return string.split(''); +} + +module.exports = asciiToArray; diff --git a/node_modules/strong-soap/node_modules/lodash/_asciiWords.js b/node_modules/strong-soap/node_modules/lodash/_asciiWords.js new file mode 100644 index 00000000..d765f0f7 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_asciiWords.js @@ -0,0 +1,15 @@ +/** Used to match words composed of alphanumeric characters. */ +var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; + +/** + * Splits an ASCII `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ +function asciiWords(string) { + return string.match(reAsciiWord) || []; +} + +module.exports = asciiWords; diff --git a/node_modules/strong-soap/node_modules/lodash/_assignMergeValue.js b/node_modules/strong-soap/node_modules/lodash/_assignMergeValue.js new file mode 100644 index 00000000..cb1185e9 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_assignMergeValue.js @@ -0,0 +1,20 @@ +var baseAssignValue = require('./_baseAssignValue'), + eq = require('./eq'); + +/** + * This function is like `assignValue` except that it doesn't assign + * `undefined` values. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignMergeValue(object, key, value) { + if ((value !== undefined && !eq(object[key], value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } +} + +module.exports = assignMergeValue; diff --git a/node_modules/strong-soap/node_modules/lodash/_assignValue.js b/node_modules/strong-soap/node_modules/lodash/_assignValue.js new file mode 100644 index 00000000..40839575 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_assignValue.js @@ -0,0 +1,28 @@ +var baseAssignValue = require('./_baseAssignValue'), + eq = require('./eq'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } +} + +module.exports = assignValue; diff --git a/node_modules/strong-soap/node_modules/lodash/_assocIndexOf.js b/node_modules/strong-soap/node_modules/lodash/_assocIndexOf.js new file mode 100644 index 00000000..5b77a2bd --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_assocIndexOf.js @@ -0,0 +1,21 @@ +var eq = require('./eq'); + +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; +} + +module.exports = assocIndexOf; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseAggregator.js b/node_modules/strong-soap/node_modules/lodash/_baseAggregator.js new file mode 100644 index 00000000..4bc9e91f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseAggregator.js @@ -0,0 +1,21 @@ +var baseEach = require('./_baseEach'); + +/** + * Aggregates elements of `collection` on `accumulator` with keys transformed + * by `iteratee` and values set by `setter`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ +function baseAggregator(collection, setter, iteratee, accumulator) { + baseEach(collection, function(value, key, collection) { + setter(accumulator, value, iteratee(value), collection); + }); + return accumulator; +} + +module.exports = baseAggregator; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseAssign.js b/node_modules/strong-soap/node_modules/lodash/_baseAssign.js new file mode 100644 index 00000000..e5c4a1a5 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseAssign.js @@ -0,0 +1,17 @@ +var copyObject = require('./_copyObject'), + keys = require('./keys'); + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && copyObject(source, keys(source), object); +} + +module.exports = baseAssign; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseAssignIn.js b/node_modules/strong-soap/node_modules/lodash/_baseAssignIn.js new file mode 100644 index 00000000..6624f900 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseAssignIn.js @@ -0,0 +1,17 @@ +var copyObject = require('./_copyObject'), + keysIn = require('./keysIn'); + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { + return object && copyObject(source, keysIn(source), object); +} + +module.exports = baseAssignIn; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseAssignValue.js b/node_modules/strong-soap/node_modules/lodash/_baseAssignValue.js new file mode 100644 index 00000000..d6f66ef3 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseAssignValue.js @@ -0,0 +1,25 @@ +var defineProperty = require('./_defineProperty'); + +/** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } +} + +module.exports = baseAssignValue; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseAt.js b/node_modules/strong-soap/node_modules/lodash/_baseAt.js new file mode 100644 index 00000000..90e4237a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseAt.js @@ -0,0 +1,23 @@ +var get = require('./get'); + +/** + * The base implementation of `_.at` without support for individual paths. + * + * @private + * @param {Object} object The object to iterate over. + * @param {string[]} paths The property paths to pick. + * @returns {Array} Returns the picked elements. + */ +function baseAt(object, paths) { + var index = -1, + length = paths.length, + result = Array(length), + skip = object == null; + + while (++index < length) { + result[index] = skip ? undefined : get(object, paths[index]); + } + return result; +} + +module.exports = baseAt; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseClamp.js b/node_modules/strong-soap/node_modules/lodash/_baseClamp.js new file mode 100644 index 00000000..a1c56929 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseClamp.js @@ -0,0 +1,22 @@ +/** + * The base implementation of `_.clamp` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + */ +function baseClamp(number, lower, upper) { + if (number === number) { + if (upper !== undefined) { + number = number <= upper ? number : upper; + } + if (lower !== undefined) { + number = number >= lower ? number : lower; + } + } + return number; +} + +module.exports = baseClamp; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseClone.js b/node_modules/strong-soap/node_modules/lodash/_baseClone.js new file mode 100644 index 00000000..6f73684f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseClone.js @@ -0,0 +1,171 @@ +var Stack = require('./_Stack'), + arrayEach = require('./_arrayEach'), + assignValue = require('./_assignValue'), + baseAssign = require('./_baseAssign'), + baseAssignIn = require('./_baseAssignIn'), + cloneBuffer = require('./_cloneBuffer'), + copyArray = require('./_copyArray'), + copySymbols = require('./_copySymbols'), + copySymbolsIn = require('./_copySymbolsIn'), + getAllKeys = require('./_getAllKeys'), + getAllKeysIn = require('./_getAllKeysIn'), + getTag = require('./_getTag'), + initCloneArray = require('./_initCloneArray'), + initCloneByTag = require('./_initCloneByTag'), + initCloneObject = require('./_initCloneObject'), + isArray = require('./isArray'), + isBuffer = require('./isBuffer'), + isMap = require('./isMap'), + isObject = require('./isObject'), + isSet = require('./isSet'), + keys = require('./keys'); + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = +cloneableTags[boolTag] = cloneableTags[dateTag] = +cloneableTags[float32Tag] = cloneableTags[float64Tag] = +cloneableTags[int8Tag] = cloneableTags[int16Tag] = +cloneableTags[int32Tag] = cloneableTags[mapTag] = +cloneableTags[numberTag] = cloneableTags[objectTag] = +cloneableTags[regexpTag] = cloneableTags[setTag] = +cloneableTags[stringTag] = cloneableTags[symbolTag] = +cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = +cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!isObject(value)) { + return value; + } + var isArr = isArray(value); + if (isArr) { + result = initCloneArray(value); + if (!isDeep) { + return copyArray(value, result); + } + } else { + var tag = getTag(value), + isFunc = tag == funcTag || tag == genTag; + + if (isBuffer(value)) { + return cloneBuffer(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : initCloneObject(value); + if (!isDeep) { + return isFlat + ? copySymbolsIn(value, baseAssignIn(result, value)) + : copySymbols(value, baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new Stack); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + + return result; + } + + if (isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + + return result; + } + + var keysFunc = isFull + ? (isFlat ? getAllKeysIn : getAllKeys) + : (isFlat ? keysIn : keys); + + var props = isArr ? undefined : keysFunc(value); + arrayEach(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +module.exports = baseClone; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseConforms.js b/node_modules/strong-soap/node_modules/lodash/_baseConforms.js new file mode 100644 index 00000000..947e20d4 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseConforms.js @@ -0,0 +1,18 @@ +var baseConformsTo = require('./_baseConformsTo'), + keys = require('./keys'); + +/** + * The base implementation of `_.conforms` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property predicates to conform to. + * @returns {Function} Returns the new spec function. + */ +function baseConforms(source) { + var props = keys(source); + return function(object) { + return baseConformsTo(object, source, props); + }; +} + +module.exports = baseConforms; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseConformsTo.js b/node_modules/strong-soap/node_modules/lodash/_baseConformsTo.js new file mode 100644 index 00000000..e449cb84 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseConformsTo.js @@ -0,0 +1,27 @@ +/** + * The base implementation of `_.conformsTo` which accepts `props` to check. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property predicates to conform to. + * @returns {boolean} Returns `true` if `object` conforms, else `false`. + */ +function baseConformsTo(object, source, props) { + var length = props.length; + if (object == null) { + return !length; + } + object = Object(object); + while (length--) { + var key = props[length], + predicate = source[key], + value = object[key]; + + if ((value === undefined && !(key in object)) || !predicate(value)) { + return false; + } + } + return true; +} + +module.exports = baseConformsTo; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseCreate.js b/node_modules/strong-soap/node_modules/lodash/_baseCreate.js new file mode 100644 index 00000000..ffa6a52a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseCreate.js @@ -0,0 +1,30 @@ +var isObject = require('./isObject'); + +/** Built-in value references. */ +var objectCreate = Object.create; + +/** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ +var baseCreate = (function() { + function object() {} + return function(proto) { + if (!isObject(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; +}()); + +module.exports = baseCreate; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseDelay.js b/node_modules/strong-soap/node_modules/lodash/_baseDelay.js new file mode 100644 index 00000000..1486d697 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseDelay.js @@ -0,0 +1,21 @@ +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * The base implementation of `_.delay` and `_.defer` which accepts `args` + * to provide to `func`. + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {Array} args The arguments to provide to `func`. + * @returns {number|Object} Returns the timer id or timeout object. + */ +function baseDelay(func, wait, args) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return setTimeout(function() { func.apply(undefined, args); }, wait); +} + +module.exports = baseDelay; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseDifference.js b/node_modules/strong-soap/node_modules/lodash/_baseDifference.js new file mode 100644 index 00000000..343ac19f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseDifference.js @@ -0,0 +1,67 @@ +var SetCache = require('./_SetCache'), + arrayIncludes = require('./_arrayIncludes'), + arrayIncludesWith = require('./_arrayIncludesWith'), + arrayMap = require('./_arrayMap'), + baseUnary = require('./_baseUnary'), + cacheHas = require('./_cacheHas'); + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of methods like `_.difference` without support + * for excluding multiple arrays or iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Array} values The values to exclude. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + */ +function baseDifference(array, values, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + isCommon = true, + length = array.length, + result = [], + valuesLength = values.length; + + if (!length) { + return result; + } + if (iteratee) { + values = arrayMap(values, baseUnary(iteratee)); + } + if (comparator) { + includes = arrayIncludesWith; + isCommon = false; + } + else if (values.length >= LARGE_ARRAY_SIZE) { + includes = cacheHas; + isCommon = false; + values = new SetCache(values); + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee == null ? value : iteratee(value); + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var valuesIndex = valuesLength; + while (valuesIndex--) { + if (values[valuesIndex] === computed) { + continue outer; + } + } + result.push(value); + } + else if (!includes(values, computed, comparator)) { + result.push(value); + } + } + return result; +} + +module.exports = baseDifference; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseEach.js b/node_modules/strong-soap/node_modules/lodash/_baseEach.js new file mode 100644 index 00000000..512c0676 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseEach.js @@ -0,0 +1,14 @@ +var baseForOwn = require('./_baseForOwn'), + createBaseEach = require('./_createBaseEach'); + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = createBaseEach(baseForOwn); + +module.exports = baseEach; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseEachRight.js b/node_modules/strong-soap/node_modules/lodash/_baseEachRight.js new file mode 100644 index 00000000..0a8feeca --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseEachRight.js @@ -0,0 +1,14 @@ +var baseForOwnRight = require('./_baseForOwnRight'), + createBaseEach = require('./_createBaseEach'); + +/** + * The base implementation of `_.forEachRight` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEachRight = createBaseEach(baseForOwnRight, true); + +module.exports = baseEachRight; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseEvery.js b/node_modules/strong-soap/node_modules/lodash/_baseEvery.js new file mode 100644 index 00000000..fa52f7bc --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseEvery.js @@ -0,0 +1,21 @@ +var baseEach = require('./_baseEach'); + +/** + * The base implementation of `_.every` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false` + */ +function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function(value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; +} + +module.exports = baseEvery; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseExtremum.js b/node_modules/strong-soap/node_modules/lodash/_baseExtremum.js new file mode 100644 index 00000000..9d6aa77e --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseExtremum.js @@ -0,0 +1,32 @@ +var isSymbol = require('./isSymbol'); + +/** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ +function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !isSymbol(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; +} + +module.exports = baseExtremum; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseFill.js b/node_modules/strong-soap/node_modules/lodash/_baseFill.js new file mode 100644 index 00000000..46ef9c76 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseFill.js @@ -0,0 +1,32 @@ +var toInteger = require('./toInteger'), + toLength = require('./toLength'); + +/** + * The base implementation of `_.fill` without an iteratee call guard. + * + * @private + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + */ +function baseFill(array, value, start, end) { + var length = array.length; + + start = toInteger(start); + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = (end === undefined || end > length) ? length : toInteger(end); + if (end < 0) { + end += length; + } + end = start > end ? 0 : toLength(end); + while (start < end) { + array[start++] = value; + } + return array; +} + +module.exports = baseFill; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseFilter.js b/node_modules/strong-soap/node_modules/lodash/_baseFilter.js new file mode 100644 index 00000000..46784773 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseFilter.js @@ -0,0 +1,21 @@ +var baseEach = require('./_baseEach'); + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +module.exports = baseFilter; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseFindIndex.js b/node_modules/strong-soap/node_modules/lodash/_baseFindIndex.js new file mode 100644 index 00000000..e3f5d8aa --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseFindIndex.js @@ -0,0 +1,24 @@ +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +module.exports = baseFindIndex; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseFindKey.js b/node_modules/strong-soap/node_modules/lodash/_baseFindKey.js new file mode 100644 index 00000000..2e430f3a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseFindKey.js @@ -0,0 +1,23 @@ +/** + * The base implementation of methods like `_.findKey` and `_.findLastKey`, + * without support for iteratee shorthands, which iterates over `collection` + * using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the found element or its key, else `undefined`. + */ +function baseFindKey(collection, predicate, eachFunc) { + var result; + eachFunc(collection, function(value, key, collection) { + if (predicate(value, key, collection)) { + result = key; + return false; + } + }); + return result; +} + +module.exports = baseFindKey; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseFlatten.js b/node_modules/strong-soap/node_modules/lodash/_baseFlatten.js new file mode 100644 index 00000000..4b1e009b --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseFlatten.js @@ -0,0 +1,38 @@ +var arrayPush = require('./_arrayPush'), + isFlattenable = require('./_isFlattenable'); + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +module.exports = baseFlatten; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseFor.js b/node_modules/strong-soap/node_modules/lodash/_baseFor.js new file mode 100644 index 00000000..d946590f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseFor.js @@ -0,0 +1,16 @@ +var createBaseFor = require('./_createBaseFor'); + +/** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseFor = createBaseFor(); + +module.exports = baseFor; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseForOwn.js b/node_modules/strong-soap/node_modules/lodash/_baseForOwn.js new file mode 100644 index 00000000..503d5234 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseForOwn.js @@ -0,0 +1,16 @@ +var baseFor = require('./_baseFor'), + keys = require('./keys'); + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); +} + +module.exports = baseForOwn; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseForOwnRight.js b/node_modules/strong-soap/node_modules/lodash/_baseForOwnRight.js new file mode 100644 index 00000000..a4b10e6c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseForOwnRight.js @@ -0,0 +1,16 @@ +var baseForRight = require('./_baseForRight'), + keys = require('./keys'); + +/** + * The base implementation of `_.forOwnRight` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwnRight(object, iteratee) { + return object && baseForRight(object, iteratee, keys); +} + +module.exports = baseForOwnRight; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseForRight.js b/node_modules/strong-soap/node_modules/lodash/_baseForRight.js new file mode 100644 index 00000000..32842cd8 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseForRight.js @@ -0,0 +1,15 @@ +var createBaseFor = require('./_createBaseFor'); + +/** + * This function is like `baseFor` except that it iterates over properties + * in the opposite order. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseForRight = createBaseFor(true); + +module.exports = baseForRight; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseFunctions.js b/node_modules/strong-soap/node_modules/lodash/_baseFunctions.js new file mode 100644 index 00000000..d23bc9b4 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseFunctions.js @@ -0,0 +1,19 @@ +var arrayFilter = require('./_arrayFilter'), + isFunction = require('./isFunction'); + +/** + * The base implementation of `_.functions` which creates an array of + * `object` function property names filtered from `props`. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} props The property names to filter. + * @returns {Array} Returns the function names. + */ +function baseFunctions(object, props) { + return arrayFilter(props, function(key) { + return isFunction(object[key]); + }); +} + +module.exports = baseFunctions; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseGet.js b/node_modules/strong-soap/node_modules/lodash/_baseGet.js new file mode 100644 index 00000000..a194913d --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseGet.js @@ -0,0 +1,24 @@ +var castPath = require('./_castPath'), + toKey = require('./_toKey'); + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = castPath(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +module.exports = baseGet; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseGetAllKeys.js b/node_modules/strong-soap/node_modules/lodash/_baseGetAllKeys.js new file mode 100644 index 00000000..8ad204ea --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseGetAllKeys.js @@ -0,0 +1,20 @@ +var arrayPush = require('./_arrayPush'), + isArray = require('./isArray'); + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); +} + +module.exports = baseGetAllKeys; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseGetTag.js b/node_modules/strong-soap/node_modules/lodash/_baseGetTag.js new file mode 100644 index 00000000..b927ccc1 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseGetTag.js @@ -0,0 +1,28 @@ +var Symbol = require('./_Symbol'), + getRawTag = require('./_getRawTag'), + objectToString = require('./_objectToString'); + +/** `Object#toString` result references. */ +var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + +/** Built-in value references. */ +var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + +/** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); +} + +module.exports = baseGetTag; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseGt.js b/node_modules/strong-soap/node_modules/lodash/_baseGt.js new file mode 100644 index 00000000..502d273c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseGt.js @@ -0,0 +1,14 @@ +/** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ +function baseGt(value, other) { + return value > other; +} + +module.exports = baseGt; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseHas.js b/node_modules/strong-soap/node_modules/lodash/_baseHas.js new file mode 100644 index 00000000..1b730321 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseHas.js @@ -0,0 +1,19 @@ +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + return object != null && hasOwnProperty.call(object, key); +} + +module.exports = baseHas; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseHasIn.js b/node_modules/strong-soap/node_modules/lodash/_baseHasIn.js new file mode 100644 index 00000000..2e0d0426 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseHasIn.js @@ -0,0 +1,13 @@ +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +module.exports = baseHasIn; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseInRange.js b/node_modules/strong-soap/node_modules/lodash/_baseInRange.js new file mode 100644 index 00000000..ec956661 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseInRange.js @@ -0,0 +1,18 @@ +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, + nativeMin = Math.min; + +/** + * The base implementation of `_.inRange` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to check. + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + */ +function baseInRange(number, start, end) { + return number >= nativeMin(start, end) && number < nativeMax(start, end); +} + +module.exports = baseInRange; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseIndexOf.js b/node_modules/strong-soap/node_modules/lodash/_baseIndexOf.js new file mode 100644 index 00000000..167e706e --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseIndexOf.js @@ -0,0 +1,20 @@ +var baseFindIndex = require('./_baseFindIndex'), + baseIsNaN = require('./_baseIsNaN'), + strictIndexOf = require('./_strictIndexOf'); + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + return value === value + ? strictIndexOf(array, value, fromIndex) + : baseFindIndex(array, baseIsNaN, fromIndex); +} + +module.exports = baseIndexOf; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseIndexOfWith.js b/node_modules/strong-soap/node_modules/lodash/_baseIndexOfWith.js new file mode 100644 index 00000000..f815fe0d --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseIndexOfWith.js @@ -0,0 +1,23 @@ +/** + * This function is like `baseIndexOf` except that it accepts a comparator. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @param {Function} comparator The comparator invoked per element. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOfWith(array, value, fromIndex, comparator) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (comparator(array[index], value)) { + return index; + } + } + return -1; +} + +module.exports = baseIndexOfWith; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseIntersection.js b/node_modules/strong-soap/node_modules/lodash/_baseIntersection.js new file mode 100644 index 00000000..c1d250c2 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseIntersection.js @@ -0,0 +1,74 @@ +var SetCache = require('./_SetCache'), + arrayIncludes = require('./_arrayIncludes'), + arrayIncludesWith = require('./_arrayIncludesWith'), + arrayMap = require('./_arrayMap'), + baseUnary = require('./_baseUnary'), + cacheHas = require('./_cacheHas'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * The base implementation of methods like `_.intersection`, without support + * for iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of shared values. + */ +function baseIntersection(arrays, iteratee, comparator) { + var includes = comparator ? arrayIncludesWith : arrayIncludes, + length = arrays[0].length, + othLength = arrays.length, + othIndex = othLength, + caches = Array(othLength), + maxLength = Infinity, + result = []; + + while (othIndex--) { + var array = arrays[othIndex]; + if (othIndex && iteratee) { + array = arrayMap(array, baseUnary(iteratee)); + } + maxLength = nativeMin(array.length, maxLength); + caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) + ? new SetCache(othIndex && array) + : undefined; + } + array = arrays[0]; + + var index = -1, + seen = caches[0]; + + outer: + while (++index < length && result.length < maxLength) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (!(seen + ? cacheHas(seen, computed) + : includes(result, computed, comparator) + )) { + othIndex = othLength; + while (--othIndex) { + var cache = caches[othIndex]; + if (!(cache + ? cacheHas(cache, computed) + : includes(arrays[othIndex], computed, comparator)) + ) { + continue outer; + } + } + if (seen) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +module.exports = baseIntersection; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseInverter.js b/node_modules/strong-soap/node_modules/lodash/_baseInverter.js new file mode 100644 index 00000000..fbc337f0 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseInverter.js @@ -0,0 +1,21 @@ +var baseForOwn = require('./_baseForOwn'); + +/** + * The base implementation of `_.invert` and `_.invertBy` which inverts + * `object` with values transformed by `iteratee` and set by `setter`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform values. + * @param {Object} accumulator The initial inverted object. + * @returns {Function} Returns `accumulator`. + */ +function baseInverter(object, setter, iteratee, accumulator) { + baseForOwn(object, function(value, key, object) { + setter(accumulator, iteratee(value), key, object); + }); + return accumulator; +} + +module.exports = baseInverter; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseInvoke.js b/node_modules/strong-soap/node_modules/lodash/_baseInvoke.js new file mode 100644 index 00000000..49bcf3c3 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseInvoke.js @@ -0,0 +1,24 @@ +var apply = require('./_apply'), + castPath = require('./_castPath'), + last = require('./last'), + parent = require('./_parent'), + toKey = require('./_toKey'); + +/** + * The base implementation of `_.invoke` without support for individual + * method arguments. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {Array} args The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + */ +function baseInvoke(object, path, args) { + path = castPath(path, object); + object = parent(object, path); + var func = object == null ? object : object[toKey(last(path))]; + return func == null ? undefined : apply(func, object, args); +} + +module.exports = baseInvoke; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseIsArguments.js b/node_modules/strong-soap/node_modules/lodash/_baseIsArguments.js new file mode 100644 index 00000000..b3562cca --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseIsArguments.js @@ -0,0 +1,18 @@ +var baseGetTag = require('./_baseGetTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]'; + +/** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ +function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag; +} + +module.exports = baseIsArguments; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseIsArrayBuffer.js b/node_modules/strong-soap/node_modules/lodash/_baseIsArrayBuffer.js new file mode 100644 index 00000000..a2c4f30a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseIsArrayBuffer.js @@ -0,0 +1,17 @@ +var baseGetTag = require('./_baseGetTag'), + isObjectLike = require('./isObjectLike'); + +var arrayBufferTag = '[object ArrayBuffer]'; + +/** + * The base implementation of `_.isArrayBuffer` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. + */ +function baseIsArrayBuffer(value) { + return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; +} + +module.exports = baseIsArrayBuffer; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseIsDate.js b/node_modules/strong-soap/node_modules/lodash/_baseIsDate.js new file mode 100644 index 00000000..ba67c785 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseIsDate.js @@ -0,0 +1,18 @@ +var baseGetTag = require('./_baseGetTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var dateTag = '[object Date]'; + +/** + * The base implementation of `_.isDate` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + */ +function baseIsDate(value) { + return isObjectLike(value) && baseGetTag(value) == dateTag; +} + +module.exports = baseIsDate; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseIsEqual.js b/node_modules/strong-soap/node_modules/lodash/_baseIsEqual.js new file mode 100644 index 00000000..00a68a4f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseIsEqual.js @@ -0,0 +1,28 @@ +var baseIsEqualDeep = require('./_baseIsEqualDeep'), + isObjectLike = require('./isObjectLike'); + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +module.exports = baseIsEqual; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseIsEqualDeep.js b/node_modules/strong-soap/node_modules/lodash/_baseIsEqualDeep.js new file mode 100644 index 00000000..e3cfd6a8 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseIsEqualDeep.js @@ -0,0 +1,83 @@ +var Stack = require('./_Stack'), + equalArrays = require('./_equalArrays'), + equalByTag = require('./_equalByTag'), + equalObjects = require('./_equalObjects'), + getTag = require('./_getTag'), + isArray = require('./isArray'), + isBuffer = require('./isBuffer'), + isTypedArray = require('./isTypedArray'); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = objIsArr ? arrayTag : getTag(object), + othTag = othIsArr ? arrayTag : getTag(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && isBuffer(object)) { + if (!isBuffer(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new Stack); + return (objIsArr || isTypedArray(object)) + ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new Stack); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack); + return equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +module.exports = baseIsEqualDeep; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseIsMap.js b/node_modules/strong-soap/node_modules/lodash/_baseIsMap.js new file mode 100644 index 00000000..02a4021c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseIsMap.js @@ -0,0 +1,18 @@ +var getTag = require('./_getTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { + return isObjectLike(value) && getTag(value) == mapTag; +} + +module.exports = baseIsMap; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseIsMatch.js b/node_modules/strong-soap/node_modules/lodash/_baseIsMatch.js new file mode 100644 index 00000000..72494bed --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseIsMatch.js @@ -0,0 +1,62 @@ +var Stack = require('./_Stack'), + baseIsEqual = require('./_baseIsEqual'); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new Stack; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +module.exports = baseIsMatch; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseIsNaN.js b/node_modules/strong-soap/node_modules/lodash/_baseIsNaN.js new file mode 100644 index 00000000..316f1eb1 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseIsNaN.js @@ -0,0 +1,12 @@ +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +module.exports = baseIsNaN; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseIsNative.js b/node_modules/strong-soap/node_modules/lodash/_baseIsNative.js new file mode 100644 index 00000000..87023304 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseIsNative.js @@ -0,0 +1,47 @@ +var isFunction = require('./isFunction'), + isMasked = require('./_isMasked'), + isObject = require('./isObject'), + toSource = require('./_toSource'); + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Used for built-in method references. */ +var funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} + +module.exports = baseIsNative; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseIsRegExp.js b/node_modules/strong-soap/node_modules/lodash/_baseIsRegExp.js new file mode 100644 index 00000000..6cd7c1ae --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseIsRegExp.js @@ -0,0 +1,18 @@ +var baseGetTag = require('./_baseGetTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var regexpTag = '[object RegExp]'; + +/** + * The base implementation of `_.isRegExp` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + */ +function baseIsRegExp(value) { + return isObjectLike(value) && baseGetTag(value) == regexpTag; +} + +module.exports = baseIsRegExp; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseIsSet.js b/node_modules/strong-soap/node_modules/lodash/_baseIsSet.js new file mode 100644 index 00000000..6dee3671 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseIsSet.js @@ -0,0 +1,18 @@ +var getTag = require('./_getTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { + return isObjectLike(value) && getTag(value) == setTag; +} + +module.exports = baseIsSet; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseIsTypedArray.js b/node_modules/strong-soap/node_modules/lodash/_baseIsTypedArray.js new file mode 100644 index 00000000..1edb32ff --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseIsTypedArray.js @@ -0,0 +1,60 @@ +var baseGetTag = require('./_baseGetTag'), + isLength = require('./isLength'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + weakMapTag = '[object WeakMap]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values of typed arrays. */ +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +typedArrayTags[uint32Tag] = true; +typedArrayTags[argsTag] = typedArrayTags[arrayTag] = +typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = +typedArrayTags[errorTag] = typedArrayTags[funcTag] = +typedArrayTags[mapTag] = typedArrayTags[numberTag] = +typedArrayTags[objectTag] = typedArrayTags[regexpTag] = +typedArrayTags[setTag] = typedArrayTags[stringTag] = +typedArrayTags[weakMapTag] = false; + +/** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ +function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; +} + +module.exports = baseIsTypedArray; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseIteratee.js b/node_modules/strong-soap/node_modules/lodash/_baseIteratee.js new file mode 100644 index 00000000..995c2575 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseIteratee.js @@ -0,0 +1,31 @@ +var baseMatches = require('./_baseMatches'), + baseMatchesProperty = require('./_baseMatchesProperty'), + identity = require('./identity'), + isArray = require('./isArray'), + property = require('./property'); + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity; + } + if (typeof value == 'object') { + return isArray(value) + ? baseMatchesProperty(value[0], value[1]) + : baseMatches(value); + } + return property(value); +} + +module.exports = baseIteratee; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseKeys.js b/node_modules/strong-soap/node_modules/lodash/_baseKeys.js new file mode 100644 index 00000000..45e9e6f3 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseKeys.js @@ -0,0 +1,30 @@ +var isPrototype = require('./_isPrototype'), + nativeKeys = require('./_nativeKeys'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; +} + +module.exports = baseKeys; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseKeysIn.js b/node_modules/strong-soap/node_modules/lodash/_baseKeysIn.js new file mode 100644 index 00000000..ea8a0a17 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseKeysIn.js @@ -0,0 +1,33 @@ +var isObject = require('./isObject'), + isPrototype = require('./_isPrototype'), + nativeKeysIn = require('./_nativeKeysIn'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeysIn(object) { + if (!isObject(object)) { + return nativeKeysIn(object); + } + var isProto = isPrototype(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; +} + +module.exports = baseKeysIn; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseLodash.js b/node_modules/strong-soap/node_modules/lodash/_baseLodash.js new file mode 100644 index 00000000..f76c790e --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseLodash.js @@ -0,0 +1,10 @@ +/** + * The function whose prototype chain sequence wrappers inherit from. + * + * @private + */ +function baseLodash() { + // No operation performed. +} + +module.exports = baseLodash; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseLt.js b/node_modules/strong-soap/node_modules/lodash/_baseLt.js new file mode 100644 index 00000000..8674d294 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseLt.js @@ -0,0 +1,14 @@ +/** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ +function baseLt(value, other) { + return value < other; +} + +module.exports = baseLt; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseMap.js b/node_modules/strong-soap/node_modules/lodash/_baseMap.js new file mode 100644 index 00000000..0bf5cead --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseMap.js @@ -0,0 +1,22 @@ +var baseEach = require('./_baseEach'), + isArrayLike = require('./isArrayLike'); + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +module.exports = baseMap; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseMatches.js b/node_modules/strong-soap/node_modules/lodash/_baseMatches.js new file mode 100644 index 00000000..e56582ad --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseMatches.js @@ -0,0 +1,22 @@ +var baseIsMatch = require('./_baseIsMatch'), + getMatchData = require('./_getMatchData'), + matchesStrictComparable = require('./_matchesStrictComparable'); + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || baseIsMatch(object, source, matchData); + }; +} + +module.exports = baseMatches; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseMatchesProperty.js b/node_modules/strong-soap/node_modules/lodash/_baseMatchesProperty.js new file mode 100644 index 00000000..24afd893 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseMatchesProperty.js @@ -0,0 +1,33 @@ +var baseIsEqual = require('./_baseIsEqual'), + get = require('./get'), + hasIn = require('./hasIn'), + isKey = require('./_isKey'), + isStrictComparable = require('./_isStrictComparable'), + matchesStrictComparable = require('./_matchesStrictComparable'), + toKey = require('./_toKey'); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if (isKey(path) && isStrictComparable(srcValue)) { + return matchesStrictComparable(toKey(path), srcValue); + } + return function(object) { + var objValue = get(object, path); + return (objValue === undefined && objValue === srcValue) + ? hasIn(object, path) + : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); + }; +} + +module.exports = baseMatchesProperty; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseMean.js b/node_modules/strong-soap/node_modules/lodash/_baseMean.js new file mode 100644 index 00000000..fa9e00a0 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseMean.js @@ -0,0 +1,20 @@ +var baseSum = require('./_baseSum'); + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** + * The base implementation of `_.mean` and `_.meanBy` without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the mean. + */ +function baseMean(array, iteratee) { + var length = array == null ? 0 : array.length; + return length ? (baseSum(array, iteratee) / length) : NAN; +} + +module.exports = baseMean; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseMerge.js b/node_modules/strong-soap/node_modules/lodash/_baseMerge.js new file mode 100644 index 00000000..c5868f04 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseMerge.js @@ -0,0 +1,42 @@ +var Stack = require('./_Stack'), + assignMergeValue = require('./_assignMergeValue'), + baseFor = require('./_baseFor'), + baseMergeDeep = require('./_baseMergeDeep'), + isObject = require('./isObject'), + keysIn = require('./keysIn'), + safeGet = require('./_safeGet'); + +/** + * The base implementation of `_.merge` without support for multiple sources. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {number} srcIndex The index of `source`. + * @param {Function} [customizer] The function to customize merged values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ +function baseMerge(object, source, srcIndex, customizer, stack) { + if (object === source) { + return; + } + baseFor(source, function(srcValue, key) { + if (isObject(srcValue)) { + stack || (stack = new Stack); + baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); + } + else { + var newValue = customizer + ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) + : undefined; + + if (newValue === undefined) { + newValue = srcValue; + } + assignMergeValue(object, key, newValue); + } + }, keysIn); +} + +module.exports = baseMerge; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseMergeDeep.js b/node_modules/strong-soap/node_modules/lodash/_baseMergeDeep.js new file mode 100644 index 00000000..4679e8dc --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseMergeDeep.js @@ -0,0 +1,94 @@ +var assignMergeValue = require('./_assignMergeValue'), + cloneBuffer = require('./_cloneBuffer'), + cloneTypedArray = require('./_cloneTypedArray'), + copyArray = require('./_copyArray'), + initCloneObject = require('./_initCloneObject'), + isArguments = require('./isArguments'), + isArray = require('./isArray'), + isArrayLikeObject = require('./isArrayLikeObject'), + isBuffer = require('./isBuffer'), + isFunction = require('./isFunction'), + isObject = require('./isObject'), + isPlainObject = require('./isPlainObject'), + isTypedArray = require('./isTypedArray'), + safeGet = require('./_safeGet'), + toPlainObject = require('./toPlainObject'); + +/** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {number} srcIndex The index of `source`. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize assigned values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ +function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { + var objValue = safeGet(object, key), + srcValue = safeGet(source, key), + stacked = stack.get(srcValue); + + if (stacked) { + assignMergeValue(object, key, stacked); + return; + } + var newValue = customizer + ? customizer(objValue, srcValue, (key + ''), object, source, stack) + : undefined; + + var isCommon = newValue === undefined; + + if (isCommon) { + var isArr = isArray(srcValue), + isBuff = !isArr && isBuffer(srcValue), + isTyped = !isArr && !isBuff && isTypedArray(srcValue); + + newValue = srcValue; + if (isArr || isBuff || isTyped) { + if (isArray(objValue)) { + newValue = objValue; + } + else if (isArrayLikeObject(objValue)) { + newValue = copyArray(objValue); + } + else if (isBuff) { + isCommon = false; + newValue = cloneBuffer(srcValue, true); + } + else if (isTyped) { + isCommon = false; + newValue = cloneTypedArray(srcValue, true); + } + else { + newValue = []; + } + } + else if (isPlainObject(srcValue) || isArguments(srcValue)) { + newValue = objValue; + if (isArguments(objValue)) { + newValue = toPlainObject(objValue); + } + else if (!isObject(objValue) || isFunction(objValue)) { + newValue = initCloneObject(srcValue); + } + } + else { + isCommon = false; + } + } + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, newValue); + mergeFunc(newValue, srcValue, srcIndex, customizer, stack); + stack['delete'](srcValue); + } + assignMergeValue(object, key, newValue); +} + +module.exports = baseMergeDeep; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseNth.js b/node_modules/strong-soap/node_modules/lodash/_baseNth.js new file mode 100644 index 00000000..0403c2a3 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseNth.js @@ -0,0 +1,20 @@ +var isIndex = require('./_isIndex'); + +/** + * The base implementation of `_.nth` which doesn't coerce arguments. + * + * @private + * @param {Array} array The array to query. + * @param {number} n The index of the element to return. + * @returns {*} Returns the nth element of `array`. + */ +function baseNth(array, n) { + var length = array.length; + if (!length) { + return; + } + n += n < 0 ? length : 0; + return isIndex(n, length) ? array[n] : undefined; +} + +module.exports = baseNth; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseOrderBy.js b/node_modules/strong-soap/node_modules/lodash/_baseOrderBy.js new file mode 100644 index 00000000..d8a46ab2 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseOrderBy.js @@ -0,0 +1,34 @@ +var arrayMap = require('./_arrayMap'), + baseIteratee = require('./_baseIteratee'), + baseMap = require('./_baseMap'), + baseSortBy = require('./_baseSortBy'), + baseUnary = require('./_baseUnary'), + compareMultiple = require('./_compareMultiple'), + identity = require('./identity'); + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { + var index = -1; + iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(baseIteratee)); + + var result = baseMap(collection, function(value, key, collection) { + var criteria = arrayMap(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return baseSortBy(result, function(object, other) { + return compareMultiple(object, other, orders); + }); +} + +module.exports = baseOrderBy; diff --git a/node_modules/strong-soap/node_modules/lodash/_basePick.js b/node_modules/strong-soap/node_modules/lodash/_basePick.js new file mode 100644 index 00000000..09b458a6 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_basePick.js @@ -0,0 +1,19 @@ +var basePickBy = require('./_basePickBy'), + hasIn = require('./hasIn'); + +/** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, paths) { + return basePickBy(object, paths, function(value, path) { + return hasIn(object, path); + }); +} + +module.exports = basePick; diff --git a/node_modules/strong-soap/node_modules/lodash/_basePickBy.js b/node_modules/strong-soap/node_modules/lodash/_basePickBy.js new file mode 100644 index 00000000..85be68c8 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_basePickBy.js @@ -0,0 +1,30 @@ +var baseGet = require('./_baseGet'), + baseSet = require('./_baseSet'), + castPath = require('./_castPath'); + +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = baseGet(object, path); + + if (predicate(value, path)) { + baseSet(result, castPath(path, object), value); + } + } + return result; +} + +module.exports = basePickBy; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseProperty.js b/node_modules/strong-soap/node_modules/lodash/_baseProperty.js new file mode 100644 index 00000000..496281ec --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseProperty.js @@ -0,0 +1,14 @@ +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +module.exports = baseProperty; diff --git a/node_modules/strong-soap/node_modules/lodash/_basePropertyDeep.js b/node_modules/strong-soap/node_modules/lodash/_basePropertyDeep.js new file mode 100644 index 00000000..1e5aae50 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_basePropertyDeep.js @@ -0,0 +1,16 @@ +var baseGet = require('./_baseGet'); + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return baseGet(object, path); + }; +} + +module.exports = basePropertyDeep; diff --git a/node_modules/strong-soap/node_modules/lodash/_basePropertyOf.js b/node_modules/strong-soap/node_modules/lodash/_basePropertyOf.js new file mode 100644 index 00000000..46173999 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_basePropertyOf.js @@ -0,0 +1,14 @@ +/** + * The base implementation of `_.propertyOf` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyOf(object) { + return function(key) { + return object == null ? undefined : object[key]; + }; +} + +module.exports = basePropertyOf; diff --git a/node_modules/strong-soap/node_modules/lodash/_basePullAll.js b/node_modules/strong-soap/node_modules/lodash/_basePullAll.js new file mode 100644 index 00000000..305720ed --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_basePullAll.js @@ -0,0 +1,51 @@ +var arrayMap = require('./_arrayMap'), + baseIndexOf = require('./_baseIndexOf'), + baseIndexOfWith = require('./_baseIndexOfWith'), + baseUnary = require('./_baseUnary'), + copyArray = require('./_copyArray'); + +/** Used for built-in method references. */ +var arrayProto = Array.prototype; + +/** Built-in value references. */ +var splice = arrayProto.splice; + +/** + * The base implementation of `_.pullAllBy` without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + */ +function basePullAll(array, values, iteratee, comparator) { + var indexOf = comparator ? baseIndexOfWith : baseIndexOf, + index = -1, + length = values.length, + seen = array; + + if (array === values) { + values = copyArray(values); + } + if (iteratee) { + seen = arrayMap(array, baseUnary(iteratee)); + } + while (++index < length) { + var fromIndex = 0, + value = values[index], + computed = iteratee ? iteratee(value) : value; + + while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { + if (seen !== array) { + splice.call(seen, fromIndex, 1); + } + splice.call(array, fromIndex, 1); + } + } + return array; +} + +module.exports = basePullAll; diff --git a/node_modules/strong-soap/node_modules/lodash/_basePullAt.js b/node_modules/strong-soap/node_modules/lodash/_basePullAt.js new file mode 100644 index 00000000..c3e9e710 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_basePullAt.js @@ -0,0 +1,37 @@ +var baseUnset = require('./_baseUnset'), + isIndex = require('./_isIndex'); + +/** Used for built-in method references. */ +var arrayProto = Array.prototype; + +/** Built-in value references. */ +var splice = arrayProto.splice; + +/** + * The base implementation of `_.pullAt` without support for individual + * indexes or capturing the removed elements. + * + * @private + * @param {Array} array The array to modify. + * @param {number[]} indexes The indexes of elements to remove. + * @returns {Array} Returns `array`. + */ +function basePullAt(array, indexes) { + var length = array ? indexes.length : 0, + lastIndex = length - 1; + + while (length--) { + var index = indexes[length]; + if (length == lastIndex || index !== previous) { + var previous = index; + if (isIndex(index)) { + splice.call(array, index, 1); + } else { + baseUnset(array, index); + } + } + } + return array; +} + +module.exports = basePullAt; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseRandom.js b/node_modules/strong-soap/node_modules/lodash/_baseRandom.js new file mode 100644 index 00000000..94f76a76 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseRandom.js @@ -0,0 +1,18 @@ +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeFloor = Math.floor, + nativeRandom = Math.random; + +/** + * The base implementation of `_.random` without support for returning + * floating-point numbers. + * + * @private + * @param {number} lower The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the random number. + */ +function baseRandom(lower, upper) { + return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); +} + +module.exports = baseRandom; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseRange.js b/node_modules/strong-soap/node_modules/lodash/_baseRange.js new file mode 100644 index 00000000..0fb8e419 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseRange.js @@ -0,0 +1,28 @@ +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +module.exports = baseRange; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseReduce.js b/node_modules/strong-soap/node_modules/lodash/_baseReduce.js new file mode 100644 index 00000000..5a1f8b57 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseReduce.js @@ -0,0 +1,23 @@ +/** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ +function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; +} + +module.exports = baseReduce; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseRepeat.js b/node_modules/strong-soap/node_modules/lodash/_baseRepeat.js new file mode 100644 index 00000000..ee44c31a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseRepeat.js @@ -0,0 +1,35 @@ +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeFloor = Math.floor; + +/** + * The base implementation of `_.repeat` which doesn't coerce arguments. + * + * @private + * @param {string} string The string to repeat. + * @param {number} n The number of times to repeat the string. + * @returns {string} Returns the repeated string. + */ +function baseRepeat(string, n) { + var result = ''; + if (!string || n < 1 || n > MAX_SAFE_INTEGER) { + return result; + } + // Leverage the exponentiation by squaring algorithm for a faster repeat. + // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. + do { + if (n % 2) { + result += string; + } + n = nativeFloor(n / 2); + if (n) { + string += string; + } + } while (n); + + return result; +} + +module.exports = baseRepeat; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseRest.js b/node_modules/strong-soap/node_modules/lodash/_baseRest.js new file mode 100644 index 00000000..d0dc4bdd --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseRest.js @@ -0,0 +1,17 @@ +var identity = require('./identity'), + overRest = require('./_overRest'), + setToString = require('./_setToString'); + +/** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ +function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); +} + +module.exports = baseRest; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseSample.js b/node_modules/strong-soap/node_modules/lodash/_baseSample.js new file mode 100644 index 00000000..58582b91 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseSample.js @@ -0,0 +1,15 @@ +var arraySample = require('./_arraySample'), + values = require('./values'); + +/** + * The base implementation of `_.sample`. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + */ +function baseSample(collection) { + return arraySample(values(collection)); +} + +module.exports = baseSample; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseSampleSize.js b/node_modules/strong-soap/node_modules/lodash/_baseSampleSize.js new file mode 100644 index 00000000..5c90ec51 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseSampleSize.js @@ -0,0 +1,18 @@ +var baseClamp = require('./_baseClamp'), + shuffleSelf = require('./_shuffleSelf'), + values = require('./values'); + +/** + * The base implementation of `_.sampleSize` without param guards. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ +function baseSampleSize(collection, n) { + var array = values(collection); + return shuffleSelf(array, baseClamp(n, 0, array.length)); +} + +module.exports = baseSampleSize; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseSet.js b/node_modules/strong-soap/node_modules/lodash/_baseSet.js new file mode 100644 index 00000000..612a24cc --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseSet.js @@ -0,0 +1,47 @@ +var assignValue = require('./_assignValue'), + castPath = require('./_castPath'), + isIndex = require('./_isIndex'), + isObject = require('./isObject'), + toKey = require('./_toKey'); + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!isObject(object)) { + return object; + } + path = castPath(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = toKey(path[index]), + newValue = value; + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = isObject(objValue) + ? objValue + : (isIndex(path[index + 1]) ? [] : {}); + } + } + assignValue(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +module.exports = baseSet; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseSetData.js b/node_modules/strong-soap/node_modules/lodash/_baseSetData.js new file mode 100644 index 00000000..c409947d --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseSetData.js @@ -0,0 +1,17 @@ +var identity = require('./identity'), + metaMap = require('./_metaMap'); + +/** + * The base implementation of `setData` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ +var baseSetData = !metaMap ? identity : function(func, data) { + metaMap.set(func, data); + return func; +}; + +module.exports = baseSetData; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseSetToString.js b/node_modules/strong-soap/node_modules/lodash/_baseSetToString.js new file mode 100644 index 00000000..89eaca38 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseSetToString.js @@ -0,0 +1,22 @@ +var constant = require('./constant'), + defineProperty = require('./_defineProperty'), + identity = require('./identity'); + +/** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var baseSetToString = !defineProperty ? identity : function(func, string) { + return defineProperty(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': constant(string), + 'writable': true + }); +}; + +module.exports = baseSetToString; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseShuffle.js b/node_modules/strong-soap/node_modules/lodash/_baseShuffle.js new file mode 100644 index 00000000..023077ac --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseShuffle.js @@ -0,0 +1,15 @@ +var shuffleSelf = require('./_shuffleSelf'), + values = require('./values'); + +/** + * The base implementation of `_.shuffle`. + * + * @private + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + */ +function baseShuffle(collection) { + return shuffleSelf(values(collection)); +} + +module.exports = baseShuffle; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseSlice.js b/node_modules/strong-soap/node_modules/lodash/_baseSlice.js new file mode 100644 index 00000000..786f6c99 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseSlice.js @@ -0,0 +1,31 @@ +/** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ +function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; +} + +module.exports = baseSlice; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseSome.js b/node_modules/strong-soap/node_modules/lodash/_baseSome.js new file mode 100644 index 00000000..58f3f447 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseSome.js @@ -0,0 +1,22 @@ +var baseEach = require('./_baseEach'); + +/** + * The base implementation of `_.some` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function baseSome(collection, predicate) { + var result; + + baseEach(collection, function(value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; +} + +module.exports = baseSome; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseSortBy.js b/node_modules/strong-soap/node_modules/lodash/_baseSortBy.js new file mode 100644 index 00000000..a25c92ed --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseSortBy.js @@ -0,0 +1,21 @@ +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +module.exports = baseSortBy; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseSortedIndex.js b/node_modules/strong-soap/node_modules/lodash/_baseSortedIndex.js new file mode 100644 index 00000000..638c366c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseSortedIndex.js @@ -0,0 +1,42 @@ +var baseSortedIndexBy = require('./_baseSortedIndexBy'), + identity = require('./identity'), + isSymbol = require('./isSymbol'); + +/** Used as references for the maximum length and index of an array. */ +var MAX_ARRAY_LENGTH = 4294967295, + HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; + +/** + * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which + * performs a binary search of `array` to determine the index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ +function baseSortedIndex(array, value, retHighest) { + var low = 0, + high = array == null ? low : array.length; + + if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { + while (low < high) { + var mid = (low + high) >>> 1, + computed = array[mid]; + + if (computed !== null && !isSymbol(computed) && + (retHighest ? (computed <= value) : (computed < value))) { + low = mid + 1; + } else { + high = mid; + } + } + return high; + } + return baseSortedIndexBy(array, value, identity, retHighest); +} + +module.exports = baseSortedIndex; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseSortedIndexBy.js b/node_modules/strong-soap/node_modules/lodash/_baseSortedIndexBy.js new file mode 100644 index 00000000..bb22e36d --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseSortedIndexBy.js @@ -0,0 +1,64 @@ +var isSymbol = require('./isSymbol'); + +/** Used as references for the maximum length and index of an array. */ +var MAX_ARRAY_LENGTH = 4294967295, + MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeFloor = Math.floor, + nativeMin = Math.min; + +/** + * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` + * which invokes `iteratee` for `value` and each element of `array` to compute + * their sort ranking. The iteratee is invoked with one argument; (value). + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} iteratee The iteratee invoked per element. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ +function baseSortedIndexBy(array, value, iteratee, retHighest) { + value = iteratee(value); + + var low = 0, + high = array == null ? 0 : array.length, + valIsNaN = value !== value, + valIsNull = value === null, + valIsSymbol = isSymbol(value), + valIsUndefined = value === undefined; + + while (low < high) { + var mid = nativeFloor((low + high) / 2), + computed = iteratee(array[mid]), + othIsDefined = computed !== undefined, + othIsNull = computed === null, + othIsReflexive = computed === computed, + othIsSymbol = isSymbol(computed); + + if (valIsNaN) { + var setLow = retHighest || othIsReflexive; + } else if (valIsUndefined) { + setLow = othIsReflexive && (retHighest || othIsDefined); + } else if (valIsNull) { + setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); + } else if (valIsSymbol) { + setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); + } else if (othIsNull || othIsSymbol) { + setLow = false; + } else { + setLow = retHighest ? (computed <= value) : (computed < value); + } + if (setLow) { + low = mid + 1; + } else { + high = mid; + } + } + return nativeMin(high, MAX_ARRAY_INDEX); +} + +module.exports = baseSortedIndexBy; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseSortedUniq.js b/node_modules/strong-soap/node_modules/lodash/_baseSortedUniq.js new file mode 100644 index 00000000..802159a3 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseSortedUniq.js @@ -0,0 +1,30 @@ +var eq = require('./eq'); + +/** + * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseSortedUniq(array, iteratee) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + if (!index || !eq(computed, seen)) { + var seen = computed; + result[resIndex++] = value === 0 ? 0 : value; + } + } + return result; +} + +module.exports = baseSortedUniq; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseSum.js b/node_modules/strong-soap/node_modules/lodash/_baseSum.js new file mode 100644 index 00000000..a9e84c13 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseSum.js @@ -0,0 +1,24 @@ +/** + * The base implementation of `_.sum` and `_.sumBy` without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the sum. + */ +function baseSum(array, iteratee) { + var result, + index = -1, + length = array.length; + + while (++index < length) { + var current = iteratee(array[index]); + if (current !== undefined) { + result = result === undefined ? current : (result + current); + } + } + return result; +} + +module.exports = baseSum; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseTimes.js b/node_modules/strong-soap/node_modules/lodash/_baseTimes.js new file mode 100644 index 00000000..0603fc37 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseTimes.js @@ -0,0 +1,20 @@ +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} + +module.exports = baseTimes; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseToNumber.js b/node_modules/strong-soap/node_modules/lodash/_baseToNumber.js new file mode 100644 index 00000000..04859f39 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseToNumber.js @@ -0,0 +1,24 @@ +var isSymbol = require('./isSymbol'); + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** + * The base implementation of `_.toNumber` which doesn't ensure correct + * conversions of binary, hexadecimal, or octal string values. + * + * @private + * @param {*} value The value to process. + * @returns {number} Returns the number. + */ +function baseToNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + return +value; +} + +module.exports = baseToNumber; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseToPairs.js b/node_modules/strong-soap/node_modules/lodash/_baseToPairs.js new file mode 100644 index 00000000..bff19912 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseToPairs.js @@ -0,0 +1,18 @@ +var arrayMap = require('./_arrayMap'); + +/** + * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array + * of key-value pairs for `object` corresponding to the property names of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the key-value pairs. + */ +function baseToPairs(object, props) { + return arrayMap(props, function(key) { + return [key, object[key]]; + }); +} + +module.exports = baseToPairs; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseToString.js b/node_modules/strong-soap/node_modules/lodash/_baseToString.js new file mode 100644 index 00000000..ada6ad29 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseToString.js @@ -0,0 +1,37 @@ +var Symbol = require('./_Symbol'), + arrayMap = require('./_arrayMap'), + isArray = require('./isArray'), + isSymbol = require('./isSymbol'); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +module.exports = baseToString; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseUnary.js b/node_modules/strong-soap/node_modules/lodash/_baseUnary.js new file mode 100644 index 00000000..98639e92 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseUnary.js @@ -0,0 +1,14 @@ +/** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ +function baseUnary(func) { + return function(value) { + return func(value); + }; +} + +module.exports = baseUnary; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseUniq.js b/node_modules/strong-soap/node_modules/lodash/_baseUniq.js new file mode 100644 index 00000000..aea459dc --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseUniq.js @@ -0,0 +1,72 @@ +var SetCache = require('./_SetCache'), + arrayIncludes = require('./_arrayIncludes'), + arrayIncludesWith = require('./_arrayIncludesWith'), + cacheHas = require('./_cacheHas'), + createSet = require('./_createSet'), + setToArray = require('./_setToArray'); + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : createSet(array); + if (set) { + return setToArray(set); + } + isCommon = false; + includes = cacheHas; + seen = new SetCache; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +module.exports = baseUniq; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseUnset.js b/node_modules/strong-soap/node_modules/lodash/_baseUnset.js new file mode 100644 index 00000000..eefc6e37 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseUnset.js @@ -0,0 +1,20 @@ +var castPath = require('./_castPath'), + last = require('./last'), + parent = require('./_parent'), + toKey = require('./_toKey'); + +/** + * The base implementation of `_.unset`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The property path to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + */ +function baseUnset(object, path) { + path = castPath(path, object); + object = parent(object, path); + return object == null || delete object[toKey(last(path))]; +} + +module.exports = baseUnset; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseUpdate.js b/node_modules/strong-soap/node_modules/lodash/_baseUpdate.js new file mode 100644 index 00000000..92a62377 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseUpdate.js @@ -0,0 +1,18 @@ +var baseGet = require('./_baseGet'), + baseSet = require('./_baseSet'); + +/** + * The base implementation of `_.update`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to update. + * @param {Function} updater The function to produce the updated value. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseUpdate(object, path, updater, customizer) { + return baseSet(object, path, updater(baseGet(object, path)), customizer); +} + +module.exports = baseUpdate; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseValues.js b/node_modules/strong-soap/node_modules/lodash/_baseValues.js new file mode 100644 index 00000000..b95faadc --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseValues.js @@ -0,0 +1,19 @@ +var arrayMap = require('./_arrayMap'); + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return arrayMap(props, function(key) { + return object[key]; + }); +} + +module.exports = baseValues; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseWhile.js b/node_modules/strong-soap/node_modules/lodash/_baseWhile.js new file mode 100644 index 00000000..07eac61b --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseWhile.js @@ -0,0 +1,26 @@ +var baseSlice = require('./_baseSlice'); + +/** + * The base implementation of methods like `_.dropWhile` and `_.takeWhile` + * without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to query. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [isDrop] Specify dropping elements instead of taking them. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the slice of `array`. + */ +function baseWhile(array, predicate, isDrop, fromRight) { + var length = array.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length) && + predicate(array[index], index, array)) {} + + return isDrop + ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) + : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); +} + +module.exports = baseWhile; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseWrapperValue.js b/node_modules/strong-soap/node_modules/lodash/_baseWrapperValue.js new file mode 100644 index 00000000..443e0df5 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseWrapperValue.js @@ -0,0 +1,25 @@ +var LazyWrapper = require('./_LazyWrapper'), + arrayPush = require('./_arrayPush'), + arrayReduce = require('./_arrayReduce'); + +/** + * The base implementation of `wrapperValue` which returns the result of + * performing a sequence of actions on the unwrapped `value`, where each + * successive action is supplied the return value of the previous. + * + * @private + * @param {*} value The unwrapped value. + * @param {Array} actions Actions to perform to resolve the unwrapped value. + * @returns {*} Returns the resolved value. + */ +function baseWrapperValue(value, actions) { + var result = value; + if (result instanceof LazyWrapper) { + result = result.value(); + } + return arrayReduce(actions, function(result, action) { + return action.func.apply(action.thisArg, arrayPush([result], action.args)); + }, result); +} + +module.exports = baseWrapperValue; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseXor.js b/node_modules/strong-soap/node_modules/lodash/_baseXor.js new file mode 100644 index 00000000..8e69338b --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseXor.js @@ -0,0 +1,36 @@ +var baseDifference = require('./_baseDifference'), + baseFlatten = require('./_baseFlatten'), + baseUniq = require('./_baseUniq'); + +/** + * The base implementation of methods like `_.xor`, without support for + * iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of values. + */ +function baseXor(arrays, iteratee, comparator) { + var length = arrays.length; + if (length < 2) { + return length ? baseUniq(arrays[0]) : []; + } + var index = -1, + result = Array(length); + + while (++index < length) { + var array = arrays[index], + othIndex = -1; + + while (++othIndex < length) { + if (othIndex != index) { + result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); + } + } + } + return baseUniq(baseFlatten(result, 1), iteratee, comparator); +} + +module.exports = baseXor; diff --git a/node_modules/strong-soap/node_modules/lodash/_baseZipObject.js b/node_modules/strong-soap/node_modules/lodash/_baseZipObject.js new file mode 100644 index 00000000..401f85be --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_baseZipObject.js @@ -0,0 +1,23 @@ +/** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ +function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; +} + +module.exports = baseZipObject; diff --git a/node_modules/strong-soap/node_modules/lodash/_cacheHas.js b/node_modules/strong-soap/node_modules/lodash/_cacheHas.js new file mode 100644 index 00000000..2dec8926 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_cacheHas.js @@ -0,0 +1,13 @@ +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +module.exports = cacheHas; diff --git a/node_modules/strong-soap/node_modules/lodash/_castArrayLikeObject.js b/node_modules/strong-soap/node_modules/lodash/_castArrayLikeObject.js new file mode 100644 index 00000000..92c75fa1 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_castArrayLikeObject.js @@ -0,0 +1,14 @@ +var isArrayLikeObject = require('./isArrayLikeObject'); + +/** + * Casts `value` to an empty array if it's not an array like object. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array|Object} Returns the cast array-like object. + */ +function castArrayLikeObject(value) { + return isArrayLikeObject(value) ? value : []; +} + +module.exports = castArrayLikeObject; diff --git a/node_modules/strong-soap/node_modules/lodash/_castFunction.js b/node_modules/strong-soap/node_modules/lodash/_castFunction.js new file mode 100644 index 00000000..98c91ae6 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_castFunction.js @@ -0,0 +1,14 @@ +var identity = require('./identity'); + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : identity; +} + +module.exports = castFunction; diff --git a/node_modules/strong-soap/node_modules/lodash/_castPath.js b/node_modules/strong-soap/node_modules/lodash/_castPath.js new file mode 100644 index 00000000..017e4c1b --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_castPath.js @@ -0,0 +1,21 @@ +var isArray = require('./isArray'), + isKey = require('./_isKey'), + stringToPath = require('./_stringToPath'), + toString = require('./toString'); + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if (isArray(value)) { + return value; + } + return isKey(value, object) ? [value] : stringToPath(toString(value)); +} + +module.exports = castPath; diff --git a/node_modules/strong-soap/node_modules/lodash/_castRest.js b/node_modules/strong-soap/node_modules/lodash/_castRest.js new file mode 100644 index 00000000..213c66f1 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_castRest.js @@ -0,0 +1,14 @@ +var baseRest = require('./_baseRest'); + +/** + * A `baseRest` alias which can be replaced with `identity` by module + * replacement plugins. + * + * @private + * @type {Function} + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +var castRest = baseRest; + +module.exports = castRest; diff --git a/node_modules/strong-soap/node_modules/lodash/_castSlice.js b/node_modules/strong-soap/node_modules/lodash/_castSlice.js new file mode 100644 index 00000000..071faeba --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_castSlice.js @@ -0,0 +1,18 @@ +var baseSlice = require('./_baseSlice'); + +/** + * Casts `array` to a slice if it's needed. + * + * @private + * @param {Array} array The array to inspect. + * @param {number} start The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the cast slice. + */ +function castSlice(array, start, end) { + var length = array.length; + end = end === undefined ? length : end; + return (!start && end >= length) ? array : baseSlice(array, start, end); +} + +module.exports = castSlice; diff --git a/node_modules/strong-soap/node_modules/lodash/_charsEndIndex.js b/node_modules/strong-soap/node_modules/lodash/_charsEndIndex.js new file mode 100644 index 00000000..07908ff3 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_charsEndIndex.js @@ -0,0 +1,19 @@ +var baseIndexOf = require('./_baseIndexOf'); + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the last unmatched string symbol. + */ +function charsEndIndex(strSymbols, chrSymbols) { + var index = strSymbols.length; + + while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; +} + +module.exports = charsEndIndex; diff --git a/node_modules/strong-soap/node_modules/lodash/_charsStartIndex.js b/node_modules/strong-soap/node_modules/lodash/_charsStartIndex.js new file mode 100644 index 00000000..b17afd25 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_charsStartIndex.js @@ -0,0 +1,20 @@ +var baseIndexOf = require('./_baseIndexOf'); + +/** + * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the first unmatched string symbol. + */ +function charsStartIndex(strSymbols, chrSymbols) { + var index = -1, + length = strSymbols.length; + + while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; +} + +module.exports = charsStartIndex; diff --git a/node_modules/strong-soap/node_modules/lodash/_cloneArrayBuffer.js b/node_modules/strong-soap/node_modules/lodash/_cloneArrayBuffer.js new file mode 100644 index 00000000..c3d8f6e3 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_cloneArrayBuffer.js @@ -0,0 +1,16 @@ +var Uint8Array = require('./_Uint8Array'); + +/** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ +function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new Uint8Array(result).set(new Uint8Array(arrayBuffer)); + return result; +} + +module.exports = cloneArrayBuffer; diff --git a/node_modules/strong-soap/node_modules/lodash/_cloneBuffer.js b/node_modules/strong-soap/node_modules/lodash/_cloneBuffer.js new file mode 100644 index 00000000..27c48109 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_cloneBuffer.js @@ -0,0 +1,35 @@ +var root = require('./_root'); + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Built-in value references. */ +var Buffer = moduleExports ? root.Buffer : undefined, + allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined; + +/** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ +function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var length = buffer.length, + result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); + + buffer.copy(result); + return result; +} + +module.exports = cloneBuffer; diff --git a/node_modules/strong-soap/node_modules/lodash/_cloneDataView.js b/node_modules/strong-soap/node_modules/lodash/_cloneDataView.js new file mode 100644 index 00000000..9c9b7b05 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_cloneDataView.js @@ -0,0 +1,16 @@ +var cloneArrayBuffer = require('./_cloneArrayBuffer'); + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +module.exports = cloneDataView; diff --git a/node_modules/strong-soap/node_modules/lodash/_cloneRegExp.js b/node_modules/strong-soap/node_modules/lodash/_cloneRegExp.js new file mode 100644 index 00000000..64a30dfb --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_cloneRegExp.js @@ -0,0 +1,17 @@ +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +module.exports = cloneRegExp; diff --git a/node_modules/strong-soap/node_modules/lodash/_cloneSymbol.js b/node_modules/strong-soap/node_modules/lodash/_cloneSymbol.js new file mode 100644 index 00000000..bede39f5 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_cloneSymbol.js @@ -0,0 +1,18 @@ +var Symbol = require('./_Symbol'); + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +module.exports = cloneSymbol; diff --git a/node_modules/strong-soap/node_modules/lodash/_cloneTypedArray.js b/node_modules/strong-soap/node_modules/lodash/_cloneTypedArray.js new file mode 100644 index 00000000..7aad84d4 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_cloneTypedArray.js @@ -0,0 +1,16 @@ +var cloneArrayBuffer = require('./_cloneArrayBuffer'); + +/** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ +function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); +} + +module.exports = cloneTypedArray; diff --git a/node_modules/strong-soap/node_modules/lodash/_compareAscending.js b/node_modules/strong-soap/node_modules/lodash/_compareAscending.js new file mode 100644 index 00000000..8dc27910 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_compareAscending.js @@ -0,0 +1,41 @@ +var isSymbol = require('./isSymbol'); + +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = isSymbol(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = isSymbol(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; +} + +module.exports = compareAscending; diff --git a/node_modules/strong-soap/node_modules/lodash/_compareMultiple.js b/node_modules/strong-soap/node_modules/lodash/_compareMultiple.js new file mode 100644 index 00000000..ad61f0fb --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_compareMultiple.js @@ -0,0 +1,44 @@ +var compareAscending = require('./_compareAscending'); + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +module.exports = compareMultiple; diff --git a/node_modules/strong-soap/node_modules/lodash/_composeArgs.js b/node_modules/strong-soap/node_modules/lodash/_composeArgs.js new file mode 100644 index 00000000..1ce40f4f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_composeArgs.js @@ -0,0 +1,39 @@ +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Creates an array that is the composition of partially applied arguments, + * placeholders, and provided arguments into a single array of arguments. + * + * @private + * @param {Array} args The provided arguments. + * @param {Array} partials The arguments to prepend to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ +function composeArgs(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersLength = holders.length, + leftIndex = -1, + leftLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(leftLength + rangeLength), + isUncurried = !isCurried; + + while (++leftIndex < leftLength) { + result[leftIndex] = partials[leftIndex]; + } + while (++argsIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[holders[argsIndex]] = args[argsIndex]; + } + } + while (rangeLength--) { + result[leftIndex++] = args[argsIndex++]; + } + return result; +} + +module.exports = composeArgs; diff --git a/node_modules/strong-soap/node_modules/lodash/_composeArgsRight.js b/node_modules/strong-soap/node_modules/lodash/_composeArgsRight.js new file mode 100644 index 00000000..8dc588d0 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_composeArgsRight.js @@ -0,0 +1,41 @@ +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This function is like `composeArgs` except that the arguments composition + * is tailored for `_.partialRight`. + * + * @private + * @param {Array} args The provided arguments. + * @param {Array} partials The arguments to append to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ +function composeArgsRight(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersIndex = -1, + holdersLength = holders.length, + rightIndex = -1, + rightLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(rangeLength + rightLength), + isUncurried = !isCurried; + + while (++argsIndex < rangeLength) { + result[argsIndex] = args[argsIndex]; + } + var offset = argsIndex; + while (++rightIndex < rightLength) { + result[offset + rightIndex] = partials[rightIndex]; + } + while (++holdersIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[offset + holders[holdersIndex]] = args[argsIndex++]; + } + } + return result; +} + +module.exports = composeArgsRight; diff --git a/node_modules/strong-soap/node_modules/lodash/_copyArray.js b/node_modules/strong-soap/node_modules/lodash/_copyArray.js new file mode 100644 index 00000000..cd94d5d0 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_copyArray.js @@ -0,0 +1,20 @@ +/** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ +function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; +} + +module.exports = copyArray; diff --git a/node_modules/strong-soap/node_modules/lodash/_copyObject.js b/node_modules/strong-soap/node_modules/lodash/_copyObject.js new file mode 100644 index 00000000..2f2a5c23 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_copyObject.js @@ -0,0 +1,40 @@ +var assignValue = require('./_assignValue'), + baseAssignValue = require('./_baseAssignValue'); + +/** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ +function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; +} + +module.exports = copyObject; diff --git a/node_modules/strong-soap/node_modules/lodash/_copySymbols.js b/node_modules/strong-soap/node_modules/lodash/_copySymbols.js new file mode 100644 index 00000000..c35944ab --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_copySymbols.js @@ -0,0 +1,16 @@ +var copyObject = require('./_copyObject'), + getSymbols = require('./_getSymbols'); + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return copyObject(source, getSymbols(source), object); +} + +module.exports = copySymbols; diff --git a/node_modules/strong-soap/node_modules/lodash/_copySymbolsIn.js b/node_modules/strong-soap/node_modules/lodash/_copySymbolsIn.js new file mode 100644 index 00000000..fdf20a73 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_copySymbolsIn.js @@ -0,0 +1,16 @@ +var copyObject = require('./_copyObject'), + getSymbolsIn = require('./_getSymbolsIn'); + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return copyObject(source, getSymbolsIn(source), object); +} + +module.exports = copySymbolsIn; diff --git a/node_modules/strong-soap/node_modules/lodash/_coreJsData.js b/node_modules/strong-soap/node_modules/lodash/_coreJsData.js new file mode 100644 index 00000000..f8e5b4e3 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_coreJsData.js @@ -0,0 +1,6 @@ +var root = require('./_root'); + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +module.exports = coreJsData; diff --git a/node_modules/strong-soap/node_modules/lodash/_countHolders.js b/node_modules/strong-soap/node_modules/lodash/_countHolders.js new file mode 100644 index 00000000..718fcdaa --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_countHolders.js @@ -0,0 +1,21 @@ +/** + * Gets the number of `placeholder` occurrences in `array`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} placeholder The placeholder to search for. + * @returns {number} Returns the placeholder count. + */ +function countHolders(array, placeholder) { + var length = array.length, + result = 0; + + while (length--) { + if (array[length] === placeholder) { + ++result; + } + } + return result; +} + +module.exports = countHolders; diff --git a/node_modules/strong-soap/node_modules/lodash/_createAggregator.js b/node_modules/strong-soap/node_modules/lodash/_createAggregator.js new file mode 100644 index 00000000..0be42c41 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_createAggregator.js @@ -0,0 +1,23 @@ +var arrayAggregator = require('./_arrayAggregator'), + baseAggregator = require('./_baseAggregator'), + baseIteratee = require('./_baseIteratee'), + isArray = require('./isArray'); + +/** + * Creates a function like `_.groupBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} [initializer] The accumulator object initializer. + * @returns {Function} Returns the new aggregator function. + */ +function createAggregator(setter, initializer) { + return function(collection, iteratee) { + var func = isArray(collection) ? arrayAggregator : baseAggregator, + accumulator = initializer ? initializer() : {}; + + return func(collection, setter, baseIteratee(iteratee, 2), accumulator); + }; +} + +module.exports = createAggregator; diff --git a/node_modules/strong-soap/node_modules/lodash/_createAssigner.js b/node_modules/strong-soap/node_modules/lodash/_createAssigner.js new file mode 100644 index 00000000..1f904c51 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_createAssigner.js @@ -0,0 +1,37 @@ +var baseRest = require('./_baseRest'), + isIterateeCall = require('./_isIterateeCall'); + +/** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ +function createAssigner(assigner) { + return baseRest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); +} + +module.exports = createAssigner; diff --git a/node_modules/strong-soap/node_modules/lodash/_createBaseEach.js b/node_modules/strong-soap/node_modules/lodash/_createBaseEach.js new file mode 100644 index 00000000..d24fdd1b --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_createBaseEach.js @@ -0,0 +1,32 @@ +var isArrayLike = require('./isArrayLike'); + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +module.exports = createBaseEach; diff --git a/node_modules/strong-soap/node_modules/lodash/_createBaseFor.js b/node_modules/strong-soap/node_modules/lodash/_createBaseFor.js new file mode 100644 index 00000000..94cbf297 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_createBaseFor.js @@ -0,0 +1,25 @@ +/** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; +} + +module.exports = createBaseFor; diff --git a/node_modules/strong-soap/node_modules/lodash/_createBind.js b/node_modules/strong-soap/node_modules/lodash/_createBind.js new file mode 100644 index 00000000..07cb99f4 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_createBind.js @@ -0,0 +1,28 @@ +var createCtor = require('./_createCtor'), + root = require('./_root'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_BIND_FLAG = 1; + +/** + * Creates a function that wraps `func` to invoke it with the optional `this` + * binding of `thisArg`. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @returns {Function} Returns the new wrapped function. + */ +function createBind(func, bitmask, thisArg) { + var isBind = bitmask & WRAP_BIND_FLAG, + Ctor = createCtor(func); + + function wrapper() { + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return fn.apply(isBind ? thisArg : this, arguments); + } + return wrapper; +} + +module.exports = createBind; diff --git a/node_modules/strong-soap/node_modules/lodash/_createCaseFirst.js b/node_modules/strong-soap/node_modules/lodash/_createCaseFirst.js new file mode 100644 index 00000000..fe8ea483 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_createCaseFirst.js @@ -0,0 +1,33 @@ +var castSlice = require('./_castSlice'), + hasUnicode = require('./_hasUnicode'), + stringToArray = require('./_stringToArray'), + toString = require('./toString'); + +/** + * Creates a function like `_.lowerFirst`. + * + * @private + * @param {string} methodName The name of the `String` case method to use. + * @returns {Function} Returns the new case function. + */ +function createCaseFirst(methodName) { + return function(string) { + string = toString(string); + + var strSymbols = hasUnicode(string) + ? stringToArray(string) + : undefined; + + var chr = strSymbols + ? strSymbols[0] + : string.charAt(0); + + var trailing = strSymbols + ? castSlice(strSymbols, 1).join('') + : string.slice(1); + + return chr[methodName]() + trailing; + }; +} + +module.exports = createCaseFirst; diff --git a/node_modules/strong-soap/node_modules/lodash/_createCompounder.js b/node_modules/strong-soap/node_modules/lodash/_createCompounder.js new file mode 100644 index 00000000..8d4cee2c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_createCompounder.js @@ -0,0 +1,24 @@ +var arrayReduce = require('./_arrayReduce'), + deburr = require('./deburr'), + words = require('./words'); + +/** Used to compose unicode capture groups. */ +var rsApos = "['\u2019]"; + +/** Used to match apostrophes. */ +var reApos = RegExp(rsApos, 'g'); + +/** + * Creates a function like `_.camelCase`. + * + * @private + * @param {Function} callback The function to combine each word. + * @returns {Function} Returns the new compounder function. + */ +function createCompounder(callback) { + return function(string) { + return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); + }; +} + +module.exports = createCompounder; diff --git a/node_modules/strong-soap/node_modules/lodash/_createCtor.js b/node_modules/strong-soap/node_modules/lodash/_createCtor.js new file mode 100644 index 00000000..9047aa5f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_createCtor.js @@ -0,0 +1,37 @@ +var baseCreate = require('./_baseCreate'), + isObject = require('./isObject'); + +/** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. + */ +function createCtor(Ctor) { + return function() { + // Use a `switch` statement to work with class constructors. See + // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist + // for more details. + var args = arguments; + switch (args.length) { + case 0: return new Ctor; + case 1: return new Ctor(args[0]); + case 2: return new Ctor(args[0], args[1]); + case 3: return new Ctor(args[0], args[1], args[2]); + case 4: return new Ctor(args[0], args[1], args[2], args[3]); + case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); + case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); + case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); + } + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args); + + // Mimic the constructor's `return` behavior. + // See https://es5.github.io/#x13.2.2 for more details. + return isObject(result) ? result : thisBinding; + }; +} + +module.exports = createCtor; diff --git a/node_modules/strong-soap/node_modules/lodash/_createCurry.js b/node_modules/strong-soap/node_modules/lodash/_createCurry.js new file mode 100644 index 00000000..f06c2cdd --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_createCurry.js @@ -0,0 +1,46 @@ +var apply = require('./_apply'), + createCtor = require('./_createCtor'), + createHybrid = require('./_createHybrid'), + createRecurry = require('./_createRecurry'), + getHolder = require('./_getHolder'), + replaceHolders = require('./_replaceHolders'), + root = require('./_root'); + +/** + * Creates a function that wraps `func` to enable currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {number} arity The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ +function createCurry(func, bitmask, arity) { + var Ctor = createCtor(func); + + function wrapper() { + var length = arguments.length, + args = Array(length), + index = length, + placeholder = getHolder(wrapper); + + while (index--) { + args[index] = arguments[index]; + } + var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) + ? [] + : replaceHolders(args, placeholder); + + length -= holders.length; + if (length < arity) { + return createRecurry( + func, bitmask, createHybrid, wrapper.placeholder, undefined, + args, holders, undefined, undefined, arity - length); + } + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return apply(fn, this, args); + } + return wrapper; +} + +module.exports = createCurry; diff --git a/node_modules/strong-soap/node_modules/lodash/_createFind.js b/node_modules/strong-soap/node_modules/lodash/_createFind.js new file mode 100644 index 00000000..8859ff89 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_createFind.js @@ -0,0 +1,25 @@ +var baseIteratee = require('./_baseIteratee'), + isArrayLike = require('./isArrayLike'), + keys = require('./keys'); + +/** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ +function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!isArrayLike(collection)) { + var iteratee = baseIteratee(predicate, 3); + collection = keys(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; +} + +module.exports = createFind; diff --git a/node_modules/strong-soap/node_modules/lodash/_createFlow.js b/node_modules/strong-soap/node_modules/lodash/_createFlow.js new file mode 100644 index 00000000..baaddbf5 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_createFlow.js @@ -0,0 +1,78 @@ +var LodashWrapper = require('./_LodashWrapper'), + flatRest = require('./_flatRest'), + getData = require('./_getData'), + getFuncName = require('./_getFuncName'), + isArray = require('./isArray'), + isLaziable = require('./_isLaziable'); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** Used to compose bitmasks for function metadata. */ +var WRAP_CURRY_FLAG = 8, + WRAP_PARTIAL_FLAG = 32, + WRAP_ARY_FLAG = 128, + WRAP_REARG_FLAG = 256; + +/** + * Creates a `_.flow` or `_.flowRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new flow function. + */ +function createFlow(fromRight) { + return flatRest(function(funcs) { + var length = funcs.length, + index = length, + prereq = LodashWrapper.prototype.thru; + + if (fromRight) { + funcs.reverse(); + } + while (index--) { + var func = funcs[index]; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (prereq && !wrapper && getFuncName(func) == 'wrapper') { + var wrapper = new LodashWrapper([], true); + } + } + index = wrapper ? index : length; + while (++index < length) { + func = funcs[index]; + + var funcName = getFuncName(func), + data = funcName == 'wrapper' ? getData(func) : undefined; + + if (data && isLaziable(data[0]) && + data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && + !data[4].length && data[9] == 1 + ) { + wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); + } else { + wrapper = (func.length == 1 && isLaziable(func)) + ? wrapper[funcName]() + : wrapper.thru(func); + } + } + return function() { + var args = arguments, + value = args[0]; + + if (wrapper && args.length == 1 && isArray(value)) { + return wrapper.plant(value).value(); + } + var index = 0, + result = length ? funcs[index].apply(this, args) : value; + + while (++index < length) { + result = funcs[index].call(this, result); + } + return result; + }; + }); +} + +module.exports = createFlow; diff --git a/node_modules/strong-soap/node_modules/lodash/_createHybrid.js b/node_modules/strong-soap/node_modules/lodash/_createHybrid.js new file mode 100644 index 00000000..b671bd11 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_createHybrid.js @@ -0,0 +1,92 @@ +var composeArgs = require('./_composeArgs'), + composeArgsRight = require('./_composeArgsRight'), + countHolders = require('./_countHolders'), + createCtor = require('./_createCtor'), + createRecurry = require('./_createRecurry'), + getHolder = require('./_getHolder'), + reorder = require('./_reorder'), + replaceHolders = require('./_replaceHolders'), + root = require('./_root'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_BIND_FLAG = 1, + WRAP_BIND_KEY_FLAG = 2, + WRAP_CURRY_FLAG = 8, + WRAP_CURRY_RIGHT_FLAG = 16, + WRAP_ARY_FLAG = 128, + WRAP_FLIP_FLAG = 512; + +/** + * Creates a function that wraps `func` to invoke it with optional `this` + * binding of `thisArg`, partial application, and currying. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to + * the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [partialsRight] The arguments to append to those provided + * to the new function. + * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ +function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { + var isAry = bitmask & WRAP_ARY_FLAG, + isBind = bitmask & WRAP_BIND_FLAG, + isBindKey = bitmask & WRAP_BIND_KEY_FLAG, + isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), + isFlip = bitmask & WRAP_FLIP_FLAG, + Ctor = isBindKey ? undefined : createCtor(func); + + function wrapper() { + var length = arguments.length, + args = Array(length), + index = length; + + while (index--) { + args[index] = arguments[index]; + } + if (isCurried) { + var placeholder = getHolder(wrapper), + holdersCount = countHolders(args, placeholder); + } + if (partials) { + args = composeArgs(args, partials, holders, isCurried); + } + if (partialsRight) { + args = composeArgsRight(args, partialsRight, holdersRight, isCurried); + } + length -= holdersCount; + if (isCurried && length < arity) { + var newHolders = replaceHolders(args, placeholder); + return createRecurry( + func, bitmask, createHybrid, wrapper.placeholder, thisArg, + args, newHolders, argPos, ary, arity - length + ); + } + var thisBinding = isBind ? thisArg : this, + fn = isBindKey ? thisBinding[func] : func; + + length = args.length; + if (argPos) { + args = reorder(args, argPos); + } else if (isFlip && length > 1) { + args.reverse(); + } + if (isAry && ary < length) { + args.length = ary; + } + if (this && this !== root && this instanceof wrapper) { + fn = Ctor || createCtor(fn); + } + return fn.apply(thisBinding, args); + } + return wrapper; +} + +module.exports = createHybrid; diff --git a/node_modules/strong-soap/node_modules/lodash/_createInverter.js b/node_modules/strong-soap/node_modules/lodash/_createInverter.js new file mode 100644 index 00000000..6c0c5629 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_createInverter.js @@ -0,0 +1,17 @@ +var baseInverter = require('./_baseInverter'); + +/** + * Creates a function like `_.invertBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} toIteratee The function to resolve iteratees. + * @returns {Function} Returns the new inverter function. + */ +function createInverter(setter, toIteratee) { + return function(object, iteratee) { + return baseInverter(object, setter, toIteratee(iteratee), {}); + }; +} + +module.exports = createInverter; diff --git a/node_modules/strong-soap/node_modules/lodash/_createMathOperation.js b/node_modules/strong-soap/node_modules/lodash/_createMathOperation.js new file mode 100644 index 00000000..f1e238ac --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_createMathOperation.js @@ -0,0 +1,38 @@ +var baseToNumber = require('./_baseToNumber'), + baseToString = require('./_baseToString'); + +/** + * Creates a function that performs a mathematical operation on two values. + * + * @private + * @param {Function} operator The function to perform the operation. + * @param {number} [defaultValue] The value used for `undefined` arguments. + * @returns {Function} Returns the new mathematical operation function. + */ +function createMathOperation(operator, defaultValue) { + return function(value, other) { + var result; + if (value === undefined && other === undefined) { + return defaultValue; + } + if (value !== undefined) { + result = value; + } + if (other !== undefined) { + if (result === undefined) { + return other; + } + if (typeof value == 'string' || typeof other == 'string') { + value = baseToString(value); + other = baseToString(other); + } else { + value = baseToNumber(value); + other = baseToNumber(other); + } + result = operator(value, other); + } + return result; + }; +} + +module.exports = createMathOperation; diff --git a/node_modules/strong-soap/node_modules/lodash/_createOver.js b/node_modules/strong-soap/node_modules/lodash/_createOver.js new file mode 100644 index 00000000..3b945516 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_createOver.js @@ -0,0 +1,27 @@ +var apply = require('./_apply'), + arrayMap = require('./_arrayMap'), + baseIteratee = require('./_baseIteratee'), + baseRest = require('./_baseRest'), + baseUnary = require('./_baseUnary'), + flatRest = require('./_flatRest'); + +/** + * Creates a function like `_.over`. + * + * @private + * @param {Function} arrayFunc The function to iterate over iteratees. + * @returns {Function} Returns the new over function. + */ +function createOver(arrayFunc) { + return flatRest(function(iteratees) { + iteratees = arrayMap(iteratees, baseUnary(baseIteratee)); + return baseRest(function(args) { + var thisArg = this; + return arrayFunc(iteratees, function(iteratee) { + return apply(iteratee, thisArg, args); + }); + }); + }); +} + +module.exports = createOver; diff --git a/node_modules/strong-soap/node_modules/lodash/_createPadding.js b/node_modules/strong-soap/node_modules/lodash/_createPadding.js new file mode 100644 index 00000000..2124612b --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_createPadding.js @@ -0,0 +1,33 @@ +var baseRepeat = require('./_baseRepeat'), + baseToString = require('./_baseToString'), + castSlice = require('./_castSlice'), + hasUnicode = require('./_hasUnicode'), + stringSize = require('./_stringSize'), + stringToArray = require('./_stringToArray'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil; + +/** + * Creates the padding for `string` based on `length`. The `chars` string + * is truncated if the number of characters exceeds `length`. + * + * @private + * @param {number} length The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padding for `string`. + */ +function createPadding(length, chars) { + chars = chars === undefined ? ' ' : baseToString(chars); + + var charsLength = chars.length; + if (charsLength < 2) { + return charsLength ? baseRepeat(chars, length) : chars; + } + var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))); + return hasUnicode(chars) + ? castSlice(stringToArray(result), 0, length).join('') + : result.slice(0, length); +} + +module.exports = createPadding; diff --git a/node_modules/strong-soap/node_modules/lodash/_createPartial.js b/node_modules/strong-soap/node_modules/lodash/_createPartial.js new file mode 100644 index 00000000..e16c248b --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_createPartial.js @@ -0,0 +1,43 @@ +var apply = require('./_apply'), + createCtor = require('./_createCtor'), + root = require('./_root'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_BIND_FLAG = 1; + +/** + * Creates a function that wraps `func` to invoke it with the `this` binding + * of `thisArg` and `partials` prepended to the arguments it receives. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} partials The arguments to prepend to those provided to + * the new function. + * @returns {Function} Returns the new wrapped function. + */ +function createPartial(func, bitmask, thisArg, partials) { + var isBind = bitmask & WRAP_BIND_FLAG, + Ctor = createCtor(func); + + function wrapper() { + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(leftLength + argsLength), + fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex]; + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex]; + } + return apply(fn, isBind ? thisArg : this, args); + } + return wrapper; +} + +module.exports = createPartial; diff --git a/node_modules/strong-soap/node_modules/lodash/_createRange.js b/node_modules/strong-soap/node_modules/lodash/_createRange.js new file mode 100644 index 00000000..9f52c779 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_createRange.js @@ -0,0 +1,30 @@ +var baseRange = require('./_baseRange'), + isIterateeCall = require('./_isIterateeCall'), + toFinite = require('./toFinite'); + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = toFinite(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = toFinite(end); + } + step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); + return baseRange(start, end, step, fromRight); + }; +} + +module.exports = createRange; diff --git a/node_modules/strong-soap/node_modules/lodash/_createRecurry.js b/node_modules/strong-soap/node_modules/lodash/_createRecurry.js new file mode 100644 index 00000000..eb29fb24 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_createRecurry.js @@ -0,0 +1,56 @@ +var isLaziable = require('./_isLaziable'), + setData = require('./_setData'), + setWrapToString = require('./_setWrapToString'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_BIND_FLAG = 1, + WRAP_BIND_KEY_FLAG = 2, + WRAP_CURRY_BOUND_FLAG = 4, + WRAP_CURRY_FLAG = 8, + WRAP_PARTIAL_FLAG = 32, + WRAP_PARTIAL_RIGHT_FLAG = 64; + +/** + * Creates a function that wraps `func` to continue currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {Function} wrapFunc The function to create the `func` wrapper. + * @param {*} placeholder The placeholder value. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to + * the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ +function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { + var isCurry = bitmask & WRAP_CURRY_FLAG, + newHolders = isCurry ? holders : undefined, + newHoldersRight = isCurry ? undefined : holders, + newPartials = isCurry ? partials : undefined, + newPartialsRight = isCurry ? undefined : partials; + + bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG); + bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); + + if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { + bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); + } + var newData = [ + func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, + newHoldersRight, argPos, ary, arity + ]; + + var result = wrapFunc.apply(undefined, newData); + if (isLaziable(func)) { + setData(result, newData); + } + result.placeholder = placeholder; + return setWrapToString(result, func, bitmask); +} + +module.exports = createRecurry; diff --git a/node_modules/strong-soap/node_modules/lodash/_createRelationalOperation.js b/node_modules/strong-soap/node_modules/lodash/_createRelationalOperation.js new file mode 100644 index 00000000..a17c6b5e --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_createRelationalOperation.js @@ -0,0 +1,20 @@ +var toNumber = require('./toNumber'); + +/** + * Creates a function that performs a relational operation on two values. + * + * @private + * @param {Function} operator The function to perform the operation. + * @returns {Function} Returns the new relational operation function. + */ +function createRelationalOperation(operator) { + return function(value, other) { + if (!(typeof value == 'string' && typeof other == 'string')) { + value = toNumber(value); + other = toNumber(other); + } + return operator(value, other); + }; +} + +module.exports = createRelationalOperation; diff --git a/node_modules/strong-soap/node_modules/lodash/_createRound.js b/node_modules/strong-soap/node_modules/lodash/_createRound.js new file mode 100644 index 00000000..bf9b713f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_createRound.js @@ -0,0 +1,33 @@ +var toInteger = require('./toInteger'), + toNumber = require('./toNumber'), + toString = require('./toString'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * Creates a function like `_.round`. + * + * @private + * @param {string} methodName The name of the `Math` method to use when rounding. + * @returns {Function} Returns the new round function. + */ +function createRound(methodName) { + var func = Math[methodName]; + return function(number, precision) { + number = toNumber(number); + precision = precision == null ? 0 : nativeMin(toInteger(precision), 292); + if (precision) { + // Shift with exponential notation to avoid floating-point issues. + // See [MDN](https://mdn.io/round#Examples) for more details. + var pair = (toString(number) + 'e').split('e'), + value = func(pair[0] + 'e' + (+pair[1] + precision)); + + pair = (toString(value) + 'e').split('e'); + return +(pair[0] + 'e' + (+pair[1] - precision)); + } + return func(number); + }; +} + +module.exports = createRound; diff --git a/node_modules/strong-soap/node_modules/lodash/_createSet.js b/node_modules/strong-soap/node_modules/lodash/_createSet.js new file mode 100644 index 00000000..0f644eea --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_createSet.js @@ -0,0 +1,19 @@ +var Set = require('./_Set'), + noop = require('./noop'), + setToArray = require('./_setToArray'); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { + return new Set(values); +}; + +module.exports = createSet; diff --git a/node_modules/strong-soap/node_modules/lodash/_createToPairs.js b/node_modules/strong-soap/node_modules/lodash/_createToPairs.js new file mode 100644 index 00000000..568417af --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_createToPairs.js @@ -0,0 +1,30 @@ +var baseToPairs = require('./_baseToPairs'), + getTag = require('./_getTag'), + mapToArray = require('./_mapToArray'), + setToPairs = require('./_setToPairs'); + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** + * Creates a `_.toPairs` or `_.toPairsIn` function. + * + * @private + * @param {Function} keysFunc The function to get the keys of a given object. + * @returns {Function} Returns the new pairs function. + */ +function createToPairs(keysFunc) { + return function(object) { + var tag = getTag(object); + if (tag == mapTag) { + return mapToArray(object); + } + if (tag == setTag) { + return setToPairs(object); + } + return baseToPairs(object, keysFunc(object)); + }; +} + +module.exports = createToPairs; diff --git a/node_modules/strong-soap/node_modules/lodash/_createWrap.js b/node_modules/strong-soap/node_modules/lodash/_createWrap.js new file mode 100644 index 00000000..33f0633e --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_createWrap.js @@ -0,0 +1,106 @@ +var baseSetData = require('./_baseSetData'), + createBind = require('./_createBind'), + createCurry = require('./_createCurry'), + createHybrid = require('./_createHybrid'), + createPartial = require('./_createPartial'), + getData = require('./_getData'), + mergeData = require('./_mergeData'), + setData = require('./_setData'), + setWrapToString = require('./_setWrapToString'), + toInteger = require('./toInteger'); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** Used to compose bitmasks for function metadata. */ +var WRAP_BIND_FLAG = 1, + WRAP_BIND_KEY_FLAG = 2, + WRAP_CURRY_FLAG = 8, + WRAP_CURRY_RIGHT_FLAG = 16, + WRAP_PARTIAL_FLAG = 32, + WRAP_PARTIAL_RIGHT_FLAG = 64; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Creates a function that either curries or invokes `func` with optional + * `this` binding and partially applied arguments. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask flags. + * 1 - `_.bind` + * 2 - `_.bindKey` + * 4 - `_.curry` or `_.curryRight` of a bound function + * 8 - `_.curry` + * 16 - `_.curryRight` + * 32 - `_.partial` + * 64 - `_.partialRight` + * 128 - `_.rearg` + * 256 - `_.ary` + * 512 - `_.flip` + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to be partially applied. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ +function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { + var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; + if (!isBindKey && typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + var length = partials ? partials.length : 0; + if (!length) { + bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); + partials = holders = undefined; + } + ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); + arity = arity === undefined ? arity : toInteger(arity); + length -= holders ? holders.length : 0; + + if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { + var partialsRight = partials, + holdersRight = holders; + + partials = holders = undefined; + } + var data = isBindKey ? undefined : getData(func); + + var newData = [ + func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, + argPos, ary, arity + ]; + + if (data) { + mergeData(newData, data); + } + func = newData[0]; + bitmask = newData[1]; + thisArg = newData[2]; + partials = newData[3]; + holders = newData[4]; + arity = newData[9] = newData[9] === undefined + ? (isBindKey ? 0 : func.length) + : nativeMax(newData[9] - length, 0); + + if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { + bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); + } + if (!bitmask || bitmask == WRAP_BIND_FLAG) { + var result = createBind(func, bitmask, thisArg); + } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { + result = createCurry(func, bitmask, arity); + } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { + result = createPartial(func, bitmask, thisArg, partials); + } else { + result = createHybrid.apply(undefined, newData); + } + var setter = data ? baseSetData : setData; + return setWrapToString(setter(result, newData), func, bitmask); +} + +module.exports = createWrap; diff --git a/node_modules/strong-soap/node_modules/lodash/_customDefaultsAssignIn.js b/node_modules/strong-soap/node_modules/lodash/_customDefaultsAssignIn.js new file mode 100644 index 00000000..1f49e6fc --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_customDefaultsAssignIn.js @@ -0,0 +1,29 @@ +var eq = require('./eq'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used by `_.defaults` to customize its `_.assignIn` use to assign properties + * of source objects to the destination object for all destination properties + * that resolve to `undefined`. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to assign. + * @param {Object} object The parent object of `objValue`. + * @returns {*} Returns the value to assign. + */ +function customDefaultsAssignIn(objValue, srcValue, key, object) { + if (objValue === undefined || + (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { + return srcValue; + } + return objValue; +} + +module.exports = customDefaultsAssignIn; diff --git a/node_modules/strong-soap/node_modules/lodash/_customDefaultsMerge.js b/node_modules/strong-soap/node_modules/lodash/_customDefaultsMerge.js new file mode 100644 index 00000000..4cab3175 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_customDefaultsMerge.js @@ -0,0 +1,28 @@ +var baseMerge = require('./_baseMerge'), + isObject = require('./isObject'); + +/** + * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source + * objects into destination objects that are passed thru. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to merge. + * @param {Object} object The parent object of `objValue`. + * @param {Object} source The parent object of `srcValue`. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + * @returns {*} Returns the value to assign. + */ +function customDefaultsMerge(objValue, srcValue, key, object, source, stack) { + if (isObject(objValue) && isObject(srcValue)) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, objValue); + baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack); + stack['delete'](srcValue); + } + return objValue; +} + +module.exports = customDefaultsMerge; diff --git a/node_modules/strong-soap/node_modules/lodash/_customOmitClone.js b/node_modules/strong-soap/node_modules/lodash/_customOmitClone.js new file mode 100644 index 00000000..968db2ef --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_customOmitClone.js @@ -0,0 +1,16 @@ +var isPlainObject = require('./isPlainObject'); + +/** + * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain + * objects. + * + * @private + * @param {*} value The value to inspect. + * @param {string} key The key of the property to inspect. + * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. + */ +function customOmitClone(value) { + return isPlainObject(value) ? undefined : value; +} + +module.exports = customOmitClone; diff --git a/node_modules/strong-soap/node_modules/lodash/_deburrLetter.js b/node_modules/strong-soap/node_modules/lodash/_deburrLetter.js new file mode 100644 index 00000000..3e531edc --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_deburrLetter.js @@ -0,0 +1,71 @@ +var basePropertyOf = require('./_basePropertyOf'); + +/** Used to map Latin Unicode letters to basic Latin letters. */ +var deburredLetters = { + // Latin-1 Supplement block. + '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', + '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', + '\xc7': 'C', '\xe7': 'c', + '\xd0': 'D', '\xf0': 'd', + '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', + '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', + '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', + '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', + '\xd1': 'N', '\xf1': 'n', + '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', + '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', + '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', + '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', + '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', + '\xc6': 'Ae', '\xe6': 'ae', + '\xde': 'Th', '\xfe': 'th', + '\xdf': 'ss', + // Latin Extended-A block. + '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', + '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', + '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', + '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', + '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', + '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', + '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', + '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', + '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', + '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', + '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', + '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', + '\u0134': 'J', '\u0135': 'j', + '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', + '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', + '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', + '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', + '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', + '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', + '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', + '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', + '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', + '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', + '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', + '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', + '\u0163': 't', '\u0165': 't', '\u0167': 't', + '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', + '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', + '\u0174': 'W', '\u0175': 'w', + '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', + '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', + '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', + '\u0132': 'IJ', '\u0133': 'ij', + '\u0152': 'Oe', '\u0153': 'oe', + '\u0149': "'n", '\u017f': 's' +}; + +/** + * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A + * letters to basic Latin letters. + * + * @private + * @param {string} letter The matched letter to deburr. + * @returns {string} Returns the deburred letter. + */ +var deburrLetter = basePropertyOf(deburredLetters); + +module.exports = deburrLetter; diff --git a/node_modules/strong-soap/node_modules/lodash/_defineProperty.js b/node_modules/strong-soap/node_modules/lodash/_defineProperty.js new file mode 100644 index 00000000..b6116d92 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_defineProperty.js @@ -0,0 +1,11 @@ +var getNative = require('./_getNative'); + +var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} +}()); + +module.exports = defineProperty; diff --git a/node_modules/strong-soap/node_modules/lodash/_equalArrays.js b/node_modules/strong-soap/node_modules/lodash/_equalArrays.js new file mode 100644 index 00000000..f6a3b7c9 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_equalArrays.js @@ -0,0 +1,83 @@ +var SetCache = require('./_SetCache'), + arraySome = require('./_arraySome'), + cacheHas = require('./_cacheHas'); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(array); + if (stacked && stack.get(other)) { + return stacked == other; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!arraySome(other, function(othValue, othIndex) { + if (!cacheHas(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +module.exports = equalArrays; diff --git a/node_modules/strong-soap/node_modules/lodash/_equalByTag.js b/node_modules/strong-soap/node_modules/lodash/_equalByTag.js new file mode 100644 index 00000000..71919e86 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_equalByTag.js @@ -0,0 +1,112 @@ +var Symbol = require('./_Symbol'), + Uint8Array = require('./_Uint8Array'), + eq = require('./eq'), + equalArrays = require('./_equalArrays'), + mapToArray = require('./_mapToArray'), + setToArray = require('./_setToArray'); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = mapToArray; + + case setTag: + var isPartial = bitmask & COMPARE_PARTIAL_FLAG; + convert || (convert = setToArray); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +module.exports = equalByTag; diff --git a/node_modules/strong-soap/node_modules/lodash/_equalObjects.js b/node_modules/strong-soap/node_modules/lodash/_equalObjects.js new file mode 100644 index 00000000..17421f37 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_equalObjects.js @@ -0,0 +1,89 @@ +var getAllKeys = require('./_getAllKeys'); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + objProps = getAllKeys(object), + objLength = objProps.length, + othProps = getAllKeys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked && stack.get(other)) { + return stacked == other; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +module.exports = equalObjects; diff --git a/node_modules/strong-soap/node_modules/lodash/_escapeHtmlChar.js b/node_modules/strong-soap/node_modules/lodash/_escapeHtmlChar.js new file mode 100644 index 00000000..7ca68ee6 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_escapeHtmlChar.js @@ -0,0 +1,21 @@ +var basePropertyOf = require('./_basePropertyOf'); + +/** Used to map characters to HTML entities. */ +var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' +}; + +/** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ +var escapeHtmlChar = basePropertyOf(htmlEscapes); + +module.exports = escapeHtmlChar; diff --git a/node_modules/strong-soap/node_modules/lodash/_escapeStringChar.js b/node_modules/strong-soap/node_modules/lodash/_escapeStringChar.js new file mode 100644 index 00000000..44eca96c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_escapeStringChar.js @@ -0,0 +1,22 @@ +/** Used to escape characters for inclusion in compiled string literals. */ +var stringEscapes = { + '\\': '\\', + "'": "'", + '\n': 'n', + '\r': 'r', + '\u2028': 'u2028', + '\u2029': 'u2029' +}; + +/** + * Used by `_.template` to escape characters for inclusion in compiled string literals. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ +function escapeStringChar(chr) { + return '\\' + stringEscapes[chr]; +} + +module.exports = escapeStringChar; diff --git a/node_modules/strong-soap/node_modules/lodash/_flatRest.js b/node_modules/strong-soap/node_modules/lodash/_flatRest.js new file mode 100644 index 00000000..94ab6cca --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_flatRest.js @@ -0,0 +1,16 @@ +var flatten = require('./flatten'), + overRest = require('./_overRest'), + setToString = require('./_setToString'); + +/** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +function flatRest(func) { + return setToString(overRest(func, undefined, flatten), func + ''); +} + +module.exports = flatRest; diff --git a/node_modules/strong-soap/node_modules/lodash/_freeGlobal.js b/node_modules/strong-soap/node_modules/lodash/_freeGlobal.js new file mode 100644 index 00000000..bbec998f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_freeGlobal.js @@ -0,0 +1,4 @@ +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +module.exports = freeGlobal; diff --git a/node_modules/strong-soap/node_modules/lodash/_getAllKeys.js b/node_modules/strong-soap/node_modules/lodash/_getAllKeys.js new file mode 100644 index 00000000..a9ce6995 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_getAllKeys.js @@ -0,0 +1,16 @@ +var baseGetAllKeys = require('./_baseGetAllKeys'), + getSymbols = require('./_getSymbols'), + keys = require('./keys'); + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return baseGetAllKeys(object, keys, getSymbols); +} + +module.exports = getAllKeys; diff --git a/node_modules/strong-soap/node_modules/lodash/_getAllKeysIn.js b/node_modules/strong-soap/node_modules/lodash/_getAllKeysIn.js new file mode 100644 index 00000000..1b466784 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_getAllKeysIn.js @@ -0,0 +1,17 @@ +var baseGetAllKeys = require('./_baseGetAllKeys'), + getSymbolsIn = require('./_getSymbolsIn'), + keysIn = require('./keysIn'); + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { + return baseGetAllKeys(object, keysIn, getSymbolsIn); +} + +module.exports = getAllKeysIn; diff --git a/node_modules/strong-soap/node_modules/lodash/_getData.js b/node_modules/strong-soap/node_modules/lodash/_getData.js new file mode 100644 index 00000000..a1fe7b77 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_getData.js @@ -0,0 +1,15 @@ +var metaMap = require('./_metaMap'), + noop = require('./noop'); + +/** + * Gets metadata for `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {*} Returns the metadata for `func`. + */ +var getData = !metaMap ? noop : function(func) { + return metaMap.get(func); +}; + +module.exports = getData; diff --git a/node_modules/strong-soap/node_modules/lodash/_getFuncName.js b/node_modules/strong-soap/node_modules/lodash/_getFuncName.js new file mode 100644 index 00000000..21e15b33 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_getFuncName.js @@ -0,0 +1,31 @@ +var realNames = require('./_realNames'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Gets the name of `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {string} Returns the function name. + */ +function getFuncName(func) { + var result = (func.name + ''), + array = realNames[result], + length = hasOwnProperty.call(realNames, result) ? array.length : 0; + + while (length--) { + var data = array[length], + otherFunc = data.func; + if (otherFunc == null || otherFunc == func) { + return data.name; + } + } + return result; +} + +module.exports = getFuncName; diff --git a/node_modules/strong-soap/node_modules/lodash/_getHolder.js b/node_modules/strong-soap/node_modules/lodash/_getHolder.js new file mode 100644 index 00000000..65e94b5c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_getHolder.js @@ -0,0 +1,13 @@ +/** + * Gets the argument placeholder value for `func`. + * + * @private + * @param {Function} func The function to inspect. + * @returns {*} Returns the placeholder value. + */ +function getHolder(func) { + var object = func; + return object.placeholder; +} + +module.exports = getHolder; diff --git a/node_modules/strong-soap/node_modules/lodash/_getMapData.js b/node_modules/strong-soap/node_modules/lodash/_getMapData.js new file mode 100644 index 00000000..17f63032 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_getMapData.js @@ -0,0 +1,18 @@ +var isKeyable = require('./_isKeyable'); + +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; +} + +module.exports = getMapData; diff --git a/node_modules/strong-soap/node_modules/lodash/_getMatchData.js b/node_modules/strong-soap/node_modules/lodash/_getMatchData.js new file mode 100644 index 00000000..2cc70f91 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_getMatchData.js @@ -0,0 +1,24 @@ +var isStrictComparable = require('./_isStrictComparable'), + keys = require('./keys'); + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = keys(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, isStrictComparable(value)]; + } + return result; +} + +module.exports = getMatchData; diff --git a/node_modules/strong-soap/node_modules/lodash/_getNative.js b/node_modules/strong-soap/node_modules/lodash/_getNative.js new file mode 100644 index 00000000..97a622b8 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_getNative.js @@ -0,0 +1,17 @@ +var baseIsNative = require('./_baseIsNative'), + getValue = require('./_getValue'); + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} + +module.exports = getNative; diff --git a/node_modules/strong-soap/node_modules/lodash/_getPrototype.js b/node_modules/strong-soap/node_modules/lodash/_getPrototype.js new file mode 100644 index 00000000..e8086121 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_getPrototype.js @@ -0,0 +1,6 @@ +var overArg = require('./_overArg'); + +/** Built-in value references. */ +var getPrototype = overArg(Object.getPrototypeOf, Object); + +module.exports = getPrototype; diff --git a/node_modules/strong-soap/node_modules/lodash/_getRawTag.js b/node_modules/strong-soap/node_modules/lodash/_getRawTag.js new file mode 100644 index 00000000..49a95c9c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_getRawTag.js @@ -0,0 +1,46 @@ +var Symbol = require('./_Symbol'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** Built-in value references. */ +var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + +/** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ +function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; +} + +module.exports = getRawTag; diff --git a/node_modules/strong-soap/node_modules/lodash/_getSymbols.js b/node_modules/strong-soap/node_modules/lodash/_getSymbols.js new file mode 100644 index 00000000..7d6eafeb --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_getSymbols.js @@ -0,0 +1,30 @@ +var arrayFilter = require('./_arrayFilter'), + stubArray = require('./stubArray'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? stubArray : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return arrayFilter(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +module.exports = getSymbols; diff --git a/node_modules/strong-soap/node_modules/lodash/_getSymbolsIn.js b/node_modules/strong-soap/node_modules/lodash/_getSymbolsIn.js new file mode 100644 index 00000000..cec0855a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_getSymbolsIn.js @@ -0,0 +1,25 @@ +var arrayPush = require('./_arrayPush'), + getPrototype = require('./_getPrototype'), + getSymbols = require('./_getSymbols'), + stubArray = require('./stubArray'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { + var result = []; + while (object) { + arrayPush(result, getSymbols(object)); + object = getPrototype(object); + } + return result; +}; + +module.exports = getSymbolsIn; diff --git a/node_modules/strong-soap/node_modules/lodash/_getTag.js b/node_modules/strong-soap/node_modules/lodash/_getTag.js new file mode 100644 index 00000000..deaf89d5 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_getTag.js @@ -0,0 +1,58 @@ +var DataView = require('./_DataView'), + Map = require('./_Map'), + Promise = require('./_Promise'), + Set = require('./_Set'), + WeakMap = require('./_WeakMap'), + baseGetTag = require('./_baseGetTag'), + toSource = require('./_toSource'); + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + setTag = '[object Set]', + weakMapTag = '[object WeakMap]'; + +var dataViewTag = '[object DataView]'; + +/** Used to detect maps, sets, and weakmaps. */ +var dataViewCtorString = toSource(DataView), + mapCtorString = toSource(Map), + promiseCtorString = toSource(Promise), + setCtorString = toSource(Set), + weakMapCtorString = toSource(WeakMap); + +/** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +var getTag = baseGetTag; + +// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. +if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || + (Map && getTag(new Map) != mapTag) || + (Promise && getTag(Promise.resolve()) != promiseTag) || + (Set && getTag(new Set) != setTag) || + (WeakMap && getTag(new WeakMap) != weakMapTag)) { + getTag = function(value) { + var result = baseGetTag(value), + Ctor = result == objectTag ? value.constructor : undefined, + ctorString = Ctor ? toSource(Ctor) : ''; + + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: return dataViewTag; + case mapCtorString: return mapTag; + case promiseCtorString: return promiseTag; + case setCtorString: return setTag; + case weakMapCtorString: return weakMapTag; + } + } + return result; + }; +} + +module.exports = getTag; diff --git a/node_modules/strong-soap/node_modules/lodash/_getValue.js b/node_modules/strong-soap/node_modules/lodash/_getValue.js new file mode 100644 index 00000000..5f7d7736 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_getValue.js @@ -0,0 +1,13 @@ +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} + +module.exports = getValue; diff --git a/node_modules/strong-soap/node_modules/lodash/_getView.js b/node_modules/strong-soap/node_modules/lodash/_getView.js new file mode 100644 index 00000000..df1e5d44 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_getView.js @@ -0,0 +1,33 @@ +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, + nativeMin = Math.min; + +/** + * Gets the view, applying any `transforms` to the `start` and `end` positions. + * + * @private + * @param {number} start The start of the view. + * @param {number} end The end of the view. + * @param {Array} transforms The transformations to apply to the view. + * @returns {Object} Returns an object containing the `start` and `end` + * positions of the view. + */ +function getView(start, end, transforms) { + var index = -1, + length = transforms.length; + + while (++index < length) { + var data = transforms[index], + size = data.size; + + switch (data.type) { + case 'drop': start += size; break; + case 'dropRight': end -= size; break; + case 'take': end = nativeMin(end, start + size); break; + case 'takeRight': start = nativeMax(start, end - size); break; + } + } + return { 'start': start, 'end': end }; +} + +module.exports = getView; diff --git a/node_modules/strong-soap/node_modules/lodash/_getWrapDetails.js b/node_modules/strong-soap/node_modules/lodash/_getWrapDetails.js new file mode 100644 index 00000000..3bcc6e48 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_getWrapDetails.js @@ -0,0 +1,17 @@ +/** Used to match wrap detail comments. */ +var reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, + reSplitDetails = /,? & /; + +/** + * Extracts wrapper details from the `source` body comment. + * + * @private + * @param {string} source The source to inspect. + * @returns {Array} Returns the wrapper details. + */ +function getWrapDetails(source) { + var match = source.match(reWrapDetails); + return match ? match[1].split(reSplitDetails) : []; +} + +module.exports = getWrapDetails; diff --git a/node_modules/strong-soap/node_modules/lodash/_hasPath.js b/node_modules/strong-soap/node_modules/lodash/_hasPath.js new file mode 100644 index 00000000..93dbde15 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_hasPath.js @@ -0,0 +1,39 @@ +var castPath = require('./_castPath'), + isArguments = require('./isArguments'), + isArray = require('./isArray'), + isIndex = require('./_isIndex'), + isLength = require('./isLength'), + toKey = require('./_toKey'); + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = castPath(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = toKey(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && isLength(length) && isIndex(key, length) && + (isArray(object) || isArguments(object)); +} + +module.exports = hasPath; diff --git a/node_modules/strong-soap/node_modules/lodash/_hasUnicode.js b/node_modules/strong-soap/node_modules/lodash/_hasUnicode.js new file mode 100644 index 00000000..cb6ca15f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_hasUnicode.js @@ -0,0 +1,26 @@ +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +module.exports = hasUnicode; diff --git a/node_modules/strong-soap/node_modules/lodash/_hasUnicodeWord.js b/node_modules/strong-soap/node_modules/lodash/_hasUnicodeWord.js new file mode 100644 index 00000000..95d52c44 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_hasUnicodeWord.js @@ -0,0 +1,15 @@ +/** Used to detect strings that need a more robust regexp to match words. */ +var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; + +/** + * Checks if `string` contains a word composed of Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a word is found, else `false`. + */ +function hasUnicodeWord(string) { + return reHasUnicodeWord.test(string); +} + +module.exports = hasUnicodeWord; diff --git a/node_modules/strong-soap/node_modules/lodash/_hashClear.js b/node_modules/strong-soap/node_modules/lodash/_hashClear.js new file mode 100644 index 00000000..5d4b70cc --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_hashClear.js @@ -0,0 +1,15 @@ +var nativeCreate = require('./_nativeCreate'); + +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; +} + +module.exports = hashClear; diff --git a/node_modules/strong-soap/node_modules/lodash/_hashDelete.js b/node_modules/strong-soap/node_modules/lodash/_hashDelete.js new file mode 100644 index 00000000..ea9dabf1 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_hashDelete.js @@ -0,0 +1,17 @@ +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; +} + +module.exports = hashDelete; diff --git a/node_modules/strong-soap/node_modules/lodash/_hashGet.js b/node_modules/strong-soap/node_modules/lodash/_hashGet.js new file mode 100644 index 00000000..1fc2f34b --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_hashGet.js @@ -0,0 +1,30 @@ +var nativeCreate = require('./_nativeCreate'); + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; +} + +module.exports = hashGet; diff --git a/node_modules/strong-soap/node_modules/lodash/_hashHas.js b/node_modules/strong-soap/node_modules/lodash/_hashHas.js new file mode 100644 index 00000000..281a5517 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_hashHas.js @@ -0,0 +1,23 @@ +var nativeCreate = require('./_nativeCreate'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); +} + +module.exports = hashHas; diff --git a/node_modules/strong-soap/node_modules/lodash/_hashSet.js b/node_modules/strong-soap/node_modules/lodash/_hashSet.js new file mode 100644 index 00000000..e1055283 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_hashSet.js @@ -0,0 +1,23 @@ +var nativeCreate = require('./_nativeCreate'); + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; +} + +module.exports = hashSet; diff --git a/node_modules/strong-soap/node_modules/lodash/_initCloneArray.js b/node_modules/strong-soap/node_modules/lodash/_initCloneArray.js new file mode 100644 index 00000000..078c15af --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_initCloneArray.js @@ -0,0 +1,26 @@ +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +module.exports = initCloneArray; diff --git a/node_modules/strong-soap/node_modules/lodash/_initCloneByTag.js b/node_modules/strong-soap/node_modules/lodash/_initCloneByTag.js new file mode 100644 index 00000000..f69a008c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_initCloneByTag.js @@ -0,0 +1,77 @@ +var cloneArrayBuffer = require('./_cloneArrayBuffer'), + cloneDataView = require('./_cloneDataView'), + cloneRegExp = require('./_cloneRegExp'), + cloneSymbol = require('./_cloneSymbol'), + cloneTypedArray = require('./_cloneTypedArray'); + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return cloneArrayBuffer(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return cloneTypedArray(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return cloneSymbol(object); + } +} + +module.exports = initCloneByTag; diff --git a/node_modules/strong-soap/node_modules/lodash/_initCloneObject.js b/node_modules/strong-soap/node_modules/lodash/_initCloneObject.js new file mode 100644 index 00000000..5a13e64a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_initCloneObject.js @@ -0,0 +1,18 @@ +var baseCreate = require('./_baseCreate'), + getPrototype = require('./_getPrototype'), + isPrototype = require('./_isPrototype'); + +/** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneObject(object) { + return (typeof object.constructor == 'function' && !isPrototype(object)) + ? baseCreate(getPrototype(object)) + : {}; +} + +module.exports = initCloneObject; diff --git a/node_modules/strong-soap/node_modules/lodash/_insertWrapDetails.js b/node_modules/strong-soap/node_modules/lodash/_insertWrapDetails.js new file mode 100644 index 00000000..e7908086 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_insertWrapDetails.js @@ -0,0 +1,23 @@ +/** Used to match wrap detail comments. */ +var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/; + +/** + * Inserts wrapper `details` in a comment at the top of the `source` body. + * + * @private + * @param {string} source The source to modify. + * @returns {Array} details The details to insert. + * @returns {string} Returns the modified source. + */ +function insertWrapDetails(source, details) { + var length = details.length; + if (!length) { + return source; + } + var lastIndex = length - 1; + details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; + details = details.join(length > 2 ? ', ' : ' '); + return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); +} + +module.exports = insertWrapDetails; diff --git a/node_modules/strong-soap/node_modules/lodash/_isFlattenable.js b/node_modules/strong-soap/node_modules/lodash/_isFlattenable.js new file mode 100644 index 00000000..4cc2c249 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_isFlattenable.js @@ -0,0 +1,20 @@ +var Symbol = require('./_Symbol'), + isArguments = require('./isArguments'), + isArray = require('./isArray'); + +/** Built-in value references. */ +var spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return isArray(value) || isArguments(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +module.exports = isFlattenable; diff --git a/node_modules/strong-soap/node_modules/lodash/_isIndex.js b/node_modules/strong-soap/node_modules/lodash/_isIndex.js new file mode 100644 index 00000000..061cd390 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_isIndex.js @@ -0,0 +1,25 @@ +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); +} + +module.exports = isIndex; diff --git a/node_modules/strong-soap/node_modules/lodash/_isIterateeCall.js b/node_modules/strong-soap/node_modules/lodash/_isIterateeCall.js new file mode 100644 index 00000000..a0bb5a9c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_isIterateeCall.js @@ -0,0 +1,30 @@ +var eq = require('./eq'), + isArrayLike = require('./isArrayLike'), + isIndex = require('./_isIndex'), + isObject = require('./isObject'); + +/** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ +function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; +} + +module.exports = isIterateeCall; diff --git a/node_modules/strong-soap/node_modules/lodash/_isKey.js b/node_modules/strong-soap/node_modules/lodash/_isKey.js new file mode 100644 index 00000000..ff08b068 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_isKey.js @@ -0,0 +1,29 @@ +var isArray = require('./isArray'), + isSymbol = require('./isSymbol'); + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +module.exports = isKey; diff --git a/node_modules/strong-soap/node_modules/lodash/_isKeyable.js b/node_modules/strong-soap/node_modules/lodash/_isKeyable.js new file mode 100644 index 00000000..39f1828d --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_isKeyable.js @@ -0,0 +1,15 @@ +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); +} + +module.exports = isKeyable; diff --git a/node_modules/strong-soap/node_modules/lodash/_isLaziable.js b/node_modules/strong-soap/node_modules/lodash/_isLaziable.js new file mode 100644 index 00000000..a57c4f2d --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_isLaziable.js @@ -0,0 +1,28 @@ +var LazyWrapper = require('./_LazyWrapper'), + getData = require('./_getData'), + getFuncName = require('./_getFuncName'), + lodash = require('./wrapperLodash'); + +/** + * Checks if `func` has a lazy counterpart. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` has a lazy counterpart, + * else `false`. + */ +function isLaziable(func) { + var funcName = getFuncName(func), + other = lodash[funcName]; + + if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { + return false; + } + if (func === other) { + return true; + } + var data = getData(other); + return !!data && func === data[0]; +} + +module.exports = isLaziable; diff --git a/node_modules/strong-soap/node_modules/lodash/_isMaskable.js b/node_modules/strong-soap/node_modules/lodash/_isMaskable.js new file mode 100644 index 00000000..eb98d09f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_isMaskable.js @@ -0,0 +1,14 @@ +var coreJsData = require('./_coreJsData'), + isFunction = require('./isFunction'), + stubFalse = require('./stubFalse'); + +/** + * Checks if `func` is capable of being masked. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `func` is maskable, else `false`. + */ +var isMaskable = coreJsData ? isFunction : stubFalse; + +module.exports = isMaskable; diff --git a/node_modules/strong-soap/node_modules/lodash/_isMasked.js b/node_modules/strong-soap/node_modules/lodash/_isMasked.js new file mode 100644 index 00000000..4b0f21ba --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_isMasked.js @@ -0,0 +1,20 @@ +var coreJsData = require('./_coreJsData'); + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} + +module.exports = isMasked; diff --git a/node_modules/strong-soap/node_modules/lodash/_isPrototype.js b/node_modules/strong-soap/node_modules/lodash/_isPrototype.js new file mode 100644 index 00000000..0f29498d --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_isPrototype.js @@ -0,0 +1,18 @@ +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ +function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + + return value === proto; +} + +module.exports = isPrototype; diff --git a/node_modules/strong-soap/node_modules/lodash/_isStrictComparable.js b/node_modules/strong-soap/node_modules/lodash/_isStrictComparable.js new file mode 100644 index 00000000..b59f40b8 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_isStrictComparable.js @@ -0,0 +1,15 @@ +var isObject = require('./isObject'); + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !isObject(value); +} + +module.exports = isStrictComparable; diff --git a/node_modules/strong-soap/node_modules/lodash/_iteratorToArray.js b/node_modules/strong-soap/node_modules/lodash/_iteratorToArray.js new file mode 100644 index 00000000..47685664 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_iteratorToArray.js @@ -0,0 +1,18 @@ +/** + * Converts `iterator` to an array. + * + * @private + * @param {Object} iterator The iterator to convert. + * @returns {Array} Returns the converted array. + */ +function iteratorToArray(iterator) { + var data, + result = []; + + while (!(data = iterator.next()).done) { + result.push(data.value); + } + return result; +} + +module.exports = iteratorToArray; diff --git a/node_modules/strong-soap/node_modules/lodash/_lazyClone.js b/node_modules/strong-soap/node_modules/lodash/_lazyClone.js new file mode 100644 index 00000000..d8a51f87 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_lazyClone.js @@ -0,0 +1,23 @@ +var LazyWrapper = require('./_LazyWrapper'), + copyArray = require('./_copyArray'); + +/** + * Creates a clone of the lazy wrapper object. + * + * @private + * @name clone + * @memberOf LazyWrapper + * @returns {Object} Returns the cloned `LazyWrapper` object. + */ +function lazyClone() { + var result = new LazyWrapper(this.__wrapped__); + result.__actions__ = copyArray(this.__actions__); + result.__dir__ = this.__dir__; + result.__filtered__ = this.__filtered__; + result.__iteratees__ = copyArray(this.__iteratees__); + result.__takeCount__ = this.__takeCount__; + result.__views__ = copyArray(this.__views__); + return result; +} + +module.exports = lazyClone; diff --git a/node_modules/strong-soap/node_modules/lodash/_lazyReverse.js b/node_modules/strong-soap/node_modules/lodash/_lazyReverse.js new file mode 100644 index 00000000..c5b52190 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_lazyReverse.js @@ -0,0 +1,23 @@ +var LazyWrapper = require('./_LazyWrapper'); + +/** + * Reverses the direction of lazy iteration. + * + * @private + * @name reverse + * @memberOf LazyWrapper + * @returns {Object} Returns the new reversed `LazyWrapper` object. + */ +function lazyReverse() { + if (this.__filtered__) { + var result = new LazyWrapper(this); + result.__dir__ = -1; + result.__filtered__ = true; + } else { + result = this.clone(); + result.__dir__ *= -1; + } + return result; +} + +module.exports = lazyReverse; diff --git a/node_modules/strong-soap/node_modules/lodash/_lazyValue.js b/node_modules/strong-soap/node_modules/lodash/_lazyValue.js new file mode 100644 index 00000000..371ca8d2 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_lazyValue.js @@ -0,0 +1,69 @@ +var baseWrapperValue = require('./_baseWrapperValue'), + getView = require('./_getView'), + isArray = require('./isArray'); + +/** Used to indicate the type of lazy iteratees. */ +var LAZY_FILTER_FLAG = 1, + LAZY_MAP_FLAG = 2; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * Extracts the unwrapped value from its lazy wrapper. + * + * @private + * @name value + * @memberOf LazyWrapper + * @returns {*} Returns the unwrapped value. + */ +function lazyValue() { + var array = this.__wrapped__.value(), + dir = this.__dir__, + isArr = isArray(array), + isRight = dir < 0, + arrLength = isArr ? array.length : 0, + view = getView(0, arrLength, this.__views__), + start = view.start, + end = view.end, + length = end - start, + index = isRight ? end : (start - 1), + iteratees = this.__iteratees__, + iterLength = iteratees.length, + resIndex = 0, + takeCount = nativeMin(length, this.__takeCount__); + + if (!isArr || (!isRight && arrLength == length && takeCount == length)) { + return baseWrapperValue(array, this.__actions__); + } + var result = []; + + outer: + while (length-- && resIndex < takeCount) { + index += dir; + + var iterIndex = -1, + value = array[index]; + + while (++iterIndex < iterLength) { + var data = iteratees[iterIndex], + iteratee = data.iteratee, + type = data.type, + computed = iteratee(value); + + if (type == LAZY_MAP_FLAG) { + value = computed; + } else if (!computed) { + if (type == LAZY_FILTER_FLAG) { + continue outer; + } else { + break outer; + } + } + } + result[resIndex++] = value; + } + return result; +} + +module.exports = lazyValue; diff --git a/node_modules/strong-soap/node_modules/lodash/_listCacheClear.js b/node_modules/strong-soap/node_modules/lodash/_listCacheClear.js new file mode 100644 index 00000000..acbe39a5 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_listCacheClear.js @@ -0,0 +1,13 @@ +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; + this.size = 0; +} + +module.exports = listCacheClear; diff --git a/node_modules/strong-soap/node_modules/lodash/_listCacheDelete.js b/node_modules/strong-soap/node_modules/lodash/_listCacheDelete.js new file mode 100644 index 00000000..b1384ade --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_listCacheDelete.js @@ -0,0 +1,35 @@ +var assocIndexOf = require('./_assocIndexOf'); + +/** Used for built-in method references. */ +var arrayProto = Array.prototype; + +/** Built-in value references. */ +var splice = arrayProto.splice; + +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; +} + +module.exports = listCacheDelete; diff --git a/node_modules/strong-soap/node_modules/lodash/_listCacheGet.js b/node_modules/strong-soap/node_modules/lodash/_listCacheGet.js new file mode 100644 index 00000000..f8192fc3 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_listCacheGet.js @@ -0,0 +1,19 @@ +var assocIndexOf = require('./_assocIndexOf'); + +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; +} + +module.exports = listCacheGet; diff --git a/node_modules/strong-soap/node_modules/lodash/_listCacheHas.js b/node_modules/strong-soap/node_modules/lodash/_listCacheHas.js new file mode 100644 index 00000000..2adf6714 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_listCacheHas.js @@ -0,0 +1,16 @@ +var assocIndexOf = require('./_assocIndexOf'); + +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; +} + +module.exports = listCacheHas; diff --git a/node_modules/strong-soap/node_modules/lodash/_listCacheSet.js b/node_modules/strong-soap/node_modules/lodash/_listCacheSet.js new file mode 100644 index 00000000..5855c95e --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_listCacheSet.js @@ -0,0 +1,26 @@ +var assocIndexOf = require('./_assocIndexOf'); + +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; +} + +module.exports = listCacheSet; diff --git a/node_modules/strong-soap/node_modules/lodash/_mapCacheClear.js b/node_modules/strong-soap/node_modules/lodash/_mapCacheClear.js new file mode 100644 index 00000000..bc9ca204 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_mapCacheClear.js @@ -0,0 +1,21 @@ +var Hash = require('./_Hash'), + ListCache = require('./_ListCache'), + Map = require('./_Map'); + +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; +} + +module.exports = mapCacheClear; diff --git a/node_modules/strong-soap/node_modules/lodash/_mapCacheDelete.js b/node_modules/strong-soap/node_modules/lodash/_mapCacheDelete.js new file mode 100644 index 00000000..946ca3c9 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_mapCacheDelete.js @@ -0,0 +1,18 @@ +var getMapData = require('./_getMapData'); + +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; +} + +module.exports = mapCacheDelete; diff --git a/node_modules/strong-soap/node_modules/lodash/_mapCacheGet.js b/node_modules/strong-soap/node_modules/lodash/_mapCacheGet.js new file mode 100644 index 00000000..f29f55cf --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_mapCacheGet.js @@ -0,0 +1,16 @@ +var getMapData = require('./_getMapData'); + +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return getMapData(this, key).get(key); +} + +module.exports = mapCacheGet; diff --git a/node_modules/strong-soap/node_modules/lodash/_mapCacheHas.js b/node_modules/strong-soap/node_modules/lodash/_mapCacheHas.js new file mode 100644 index 00000000..a1214c02 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_mapCacheHas.js @@ -0,0 +1,16 @@ +var getMapData = require('./_getMapData'); + +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return getMapData(this, key).has(key); +} + +module.exports = mapCacheHas; diff --git a/node_modules/strong-soap/node_modules/lodash/_mapCacheSet.js b/node_modules/strong-soap/node_modules/lodash/_mapCacheSet.js new file mode 100644 index 00000000..73468492 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_mapCacheSet.js @@ -0,0 +1,22 @@ +var getMapData = require('./_getMapData'); + +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; +} + +module.exports = mapCacheSet; diff --git a/node_modules/strong-soap/node_modules/lodash/_mapToArray.js b/node_modules/strong-soap/node_modules/lodash/_mapToArray.js new file mode 100644 index 00000000..fe3dd531 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_mapToArray.js @@ -0,0 +1,18 @@ +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +module.exports = mapToArray; diff --git a/node_modules/strong-soap/node_modules/lodash/_matchesStrictComparable.js b/node_modules/strong-soap/node_modules/lodash/_matchesStrictComparable.js new file mode 100644 index 00000000..f608af9e --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_matchesStrictComparable.js @@ -0,0 +1,20 @@ +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +module.exports = matchesStrictComparable; diff --git a/node_modules/strong-soap/node_modules/lodash/_memoizeCapped.js b/node_modules/strong-soap/node_modules/lodash/_memoizeCapped.js new file mode 100644 index 00000000..7f71c8fb --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_memoizeCapped.js @@ -0,0 +1,26 @@ +var memoize = require('./memoize'); + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = memoize(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +module.exports = memoizeCapped; diff --git a/node_modules/strong-soap/node_modules/lodash/_mergeData.js b/node_modules/strong-soap/node_modules/lodash/_mergeData.js new file mode 100644 index 00000000..cb570f97 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_mergeData.js @@ -0,0 +1,90 @@ +var composeArgs = require('./_composeArgs'), + composeArgsRight = require('./_composeArgsRight'), + replaceHolders = require('./_replaceHolders'); + +/** Used as the internal argument placeholder. */ +var PLACEHOLDER = '__lodash_placeholder__'; + +/** Used to compose bitmasks for function metadata. */ +var WRAP_BIND_FLAG = 1, + WRAP_BIND_KEY_FLAG = 2, + WRAP_CURRY_BOUND_FLAG = 4, + WRAP_CURRY_FLAG = 8, + WRAP_ARY_FLAG = 128, + WRAP_REARG_FLAG = 256; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * Merges the function metadata of `source` into `data`. + * + * Merging metadata reduces the number of wrappers used to invoke a function. + * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` + * may be applied regardless of execution order. Methods like `_.ary` and + * `_.rearg` modify function arguments, making the order in which they are + * executed important, preventing the merging of metadata. However, we make + * an exception for a safe combined case where curried functions have `_.ary` + * and or `_.rearg` applied. + * + * @private + * @param {Array} data The destination metadata. + * @param {Array} source The source metadata. + * @returns {Array} Returns `data`. + */ +function mergeData(data, source) { + var bitmask = data[1], + srcBitmask = source[1], + newBitmask = bitmask | srcBitmask, + isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); + + var isCombo = + ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) || + ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) || + ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG)); + + // Exit early if metadata can't be merged. + if (!(isCommon || isCombo)) { + return data; + } + // Use source `thisArg` if available. + if (srcBitmask & WRAP_BIND_FLAG) { + data[2] = source[2]; + // Set when currying a bound function. + newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG; + } + // Compose partial arguments. + var value = source[3]; + if (value) { + var partials = data[3]; + data[3] = partials ? composeArgs(partials, value, source[4]) : value; + data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; + } + // Compose partial right arguments. + value = source[5]; + if (value) { + partials = data[5]; + data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; + data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; + } + // Use source `argPos` if available. + value = source[7]; + if (value) { + data[7] = value; + } + // Use source `ary` if it's smaller. + if (srcBitmask & WRAP_ARY_FLAG) { + data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); + } + // Use source `arity` if one is not provided. + if (data[9] == null) { + data[9] = source[9]; + } + // Use source `func` and merge bitmasks. + data[0] = source[0]; + data[1] = newBitmask; + + return data; +} + +module.exports = mergeData; diff --git a/node_modules/strong-soap/node_modules/lodash/_metaMap.js b/node_modules/strong-soap/node_modules/lodash/_metaMap.js new file mode 100644 index 00000000..0157a0b0 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_metaMap.js @@ -0,0 +1,6 @@ +var WeakMap = require('./_WeakMap'); + +/** Used to store function metadata. */ +var metaMap = WeakMap && new WeakMap; + +module.exports = metaMap; diff --git a/node_modules/strong-soap/node_modules/lodash/_nativeCreate.js b/node_modules/strong-soap/node_modules/lodash/_nativeCreate.js new file mode 100644 index 00000000..c7aede85 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_nativeCreate.js @@ -0,0 +1,6 @@ +var getNative = require('./_getNative'); + +/* Built-in method references that are verified to be native. */ +var nativeCreate = getNative(Object, 'create'); + +module.exports = nativeCreate; diff --git a/node_modules/strong-soap/node_modules/lodash/_nativeKeys.js b/node_modules/strong-soap/node_modules/lodash/_nativeKeys.js new file mode 100644 index 00000000..479a104a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_nativeKeys.js @@ -0,0 +1,6 @@ +var overArg = require('./_overArg'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeKeys = overArg(Object.keys, Object); + +module.exports = nativeKeys; diff --git a/node_modules/strong-soap/node_modules/lodash/_nativeKeysIn.js b/node_modules/strong-soap/node_modules/lodash/_nativeKeysIn.js new file mode 100644 index 00000000..00ee5059 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_nativeKeysIn.js @@ -0,0 +1,20 @@ +/** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; +} + +module.exports = nativeKeysIn; diff --git a/node_modules/strong-soap/node_modules/lodash/_nodeUtil.js b/node_modules/strong-soap/node_modules/lodash/_nodeUtil.js new file mode 100644 index 00000000..983d78f7 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_nodeUtil.js @@ -0,0 +1,30 @@ +var freeGlobal = require('./_freeGlobal'); + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Detect free variable `process` from Node.js. */ +var freeProcess = moduleExports && freeGlobal.process; + +/** Used to access faster Node.js helpers. */ +var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; + + if (types) { + return types; + } + + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} +}()); + +module.exports = nodeUtil; diff --git a/node_modules/strong-soap/node_modules/lodash/_objectToString.js b/node_modules/strong-soap/node_modules/lodash/_objectToString.js new file mode 100644 index 00000000..c614ec09 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_objectToString.js @@ -0,0 +1,22 @@ +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ +function objectToString(value) { + return nativeObjectToString.call(value); +} + +module.exports = objectToString; diff --git a/node_modules/strong-soap/node_modules/lodash/_overArg.js b/node_modules/strong-soap/node_modules/lodash/_overArg.js new file mode 100644 index 00000000..651c5c55 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_overArg.js @@ -0,0 +1,15 @@ +/** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ +function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; +} + +module.exports = overArg; diff --git a/node_modules/strong-soap/node_modules/lodash/_overRest.js b/node_modules/strong-soap/node_modules/lodash/_overRest.js new file mode 100644 index 00000000..c7cdef33 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_overRest.js @@ -0,0 +1,36 @@ +var apply = require('./_apply'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ +function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return apply(func, this, otherArgs); + }; +} + +module.exports = overRest; diff --git a/node_modules/strong-soap/node_modules/lodash/_parent.js b/node_modules/strong-soap/node_modules/lodash/_parent.js new file mode 100644 index 00000000..f174328f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_parent.js @@ -0,0 +1,16 @@ +var baseGet = require('./_baseGet'), + baseSlice = require('./_baseSlice'); + +/** + * Gets the parent value at `path` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} path The path to get the parent value of. + * @returns {*} Returns the parent value. + */ +function parent(object, path) { + return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); +} + +module.exports = parent; diff --git a/node_modules/strong-soap/node_modules/lodash/_reEscape.js b/node_modules/strong-soap/node_modules/lodash/_reEscape.js new file mode 100644 index 00000000..7f47eda6 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_reEscape.js @@ -0,0 +1,4 @@ +/** Used to match template delimiters. */ +var reEscape = /<%-([\s\S]+?)%>/g; + +module.exports = reEscape; diff --git a/node_modules/strong-soap/node_modules/lodash/_reEvaluate.js b/node_modules/strong-soap/node_modules/lodash/_reEvaluate.js new file mode 100644 index 00000000..6adfc312 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_reEvaluate.js @@ -0,0 +1,4 @@ +/** Used to match template delimiters. */ +var reEvaluate = /<%([\s\S]+?)%>/g; + +module.exports = reEvaluate; diff --git a/node_modules/strong-soap/node_modules/lodash/_reInterpolate.js b/node_modules/strong-soap/node_modules/lodash/_reInterpolate.js new file mode 100644 index 00000000..d02ff0b2 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_reInterpolate.js @@ -0,0 +1,4 @@ +/** Used to match template delimiters. */ +var reInterpolate = /<%=([\s\S]+?)%>/g; + +module.exports = reInterpolate; diff --git a/node_modules/strong-soap/node_modules/lodash/_realNames.js b/node_modules/strong-soap/node_modules/lodash/_realNames.js new file mode 100644 index 00000000..aa0d5292 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_realNames.js @@ -0,0 +1,4 @@ +/** Used to lookup unminified function names. */ +var realNames = {}; + +module.exports = realNames; diff --git a/node_modules/strong-soap/node_modules/lodash/_reorder.js b/node_modules/strong-soap/node_modules/lodash/_reorder.js new file mode 100644 index 00000000..a3502b05 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_reorder.js @@ -0,0 +1,29 @@ +var copyArray = require('./_copyArray'), + isIndex = require('./_isIndex'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * Reorder `array` according to the specified indexes where the element at + * the first index is assigned as the first element, the element at + * the second index is assigned as the second element, and so on. + * + * @private + * @param {Array} array The array to reorder. + * @param {Array} indexes The arranged array indexes. + * @returns {Array} Returns `array`. + */ +function reorder(array, indexes) { + var arrLength = array.length, + length = nativeMin(indexes.length, arrLength), + oldArray = copyArray(array); + + while (length--) { + var index = indexes[length]; + array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; + } + return array; +} + +module.exports = reorder; diff --git a/node_modules/strong-soap/node_modules/lodash/_replaceHolders.js b/node_modules/strong-soap/node_modules/lodash/_replaceHolders.js new file mode 100644 index 00000000..74360ec4 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_replaceHolders.js @@ -0,0 +1,29 @@ +/** Used as the internal argument placeholder. */ +var PLACEHOLDER = '__lodash_placeholder__'; + +/** + * Replaces all `placeholder` elements in `array` with an internal placeholder + * and returns an array of their indexes. + * + * @private + * @param {Array} array The array to modify. + * @param {*} placeholder The placeholder to replace. + * @returns {Array} Returns the new array of placeholder indexes. + */ +function replaceHolders(array, placeholder) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value === placeholder || value === PLACEHOLDER) { + array[index] = PLACEHOLDER; + result[resIndex++] = index; + } + } + return result; +} + +module.exports = replaceHolders; diff --git a/node_modules/strong-soap/node_modules/lodash/_root.js b/node_modules/strong-soap/node_modules/lodash/_root.js new file mode 100644 index 00000000..d2852bed --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_root.js @@ -0,0 +1,9 @@ +var freeGlobal = require('./_freeGlobal'); + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +module.exports = root; diff --git a/node_modules/strong-soap/node_modules/lodash/_safeGet.js b/node_modules/strong-soap/node_modules/lodash/_safeGet.js new file mode 100644 index 00000000..411b0620 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_safeGet.js @@ -0,0 +1,17 @@ +/** + * Gets the value at `key`, unless `key` is "__proto__". + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function safeGet(object, key) { + if (key == '__proto__') { + return; + } + + return object[key]; +} + +module.exports = safeGet; diff --git a/node_modules/strong-soap/node_modules/lodash/_setCacheAdd.js b/node_modules/strong-soap/node_modules/lodash/_setCacheAdd.js new file mode 100644 index 00000000..1081a744 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_setCacheAdd.js @@ -0,0 +1,19 @@ +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +module.exports = setCacheAdd; diff --git a/node_modules/strong-soap/node_modules/lodash/_setCacheHas.js b/node_modules/strong-soap/node_modules/lodash/_setCacheHas.js new file mode 100644 index 00000000..9a492556 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_setCacheHas.js @@ -0,0 +1,14 @@ +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +module.exports = setCacheHas; diff --git a/node_modules/strong-soap/node_modules/lodash/_setData.js b/node_modules/strong-soap/node_modules/lodash/_setData.js new file mode 100644 index 00000000..e5cf3eb9 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_setData.js @@ -0,0 +1,20 @@ +var baseSetData = require('./_baseSetData'), + shortOut = require('./_shortOut'); + +/** + * Sets metadata for `func`. + * + * **Note:** If this function becomes hot, i.e. is invoked a lot in a short + * period of time, it will trip its breaker and transition to an identity + * function to avoid garbage collection pauses in V8. See + * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) + * for more details. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ +var setData = shortOut(baseSetData); + +module.exports = setData; diff --git a/node_modules/strong-soap/node_modules/lodash/_setToArray.js b/node_modules/strong-soap/node_modules/lodash/_setToArray.js new file mode 100644 index 00000000..b87f0741 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_setToArray.js @@ -0,0 +1,18 @@ +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +module.exports = setToArray; diff --git a/node_modules/strong-soap/node_modules/lodash/_setToPairs.js b/node_modules/strong-soap/node_modules/lodash/_setToPairs.js new file mode 100644 index 00000000..36ad37a0 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_setToPairs.js @@ -0,0 +1,18 @@ +/** + * Converts `set` to its value-value pairs. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the value-value pairs. + */ +function setToPairs(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = [value, value]; + }); + return result; +} + +module.exports = setToPairs; diff --git a/node_modules/strong-soap/node_modules/lodash/_setToString.js b/node_modules/strong-soap/node_modules/lodash/_setToString.js new file mode 100644 index 00000000..6ca84196 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_setToString.js @@ -0,0 +1,14 @@ +var baseSetToString = require('./_baseSetToString'), + shortOut = require('./_shortOut'); + +/** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var setToString = shortOut(baseSetToString); + +module.exports = setToString; diff --git a/node_modules/strong-soap/node_modules/lodash/_setWrapToString.js b/node_modules/strong-soap/node_modules/lodash/_setWrapToString.js new file mode 100644 index 00000000..decdc449 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_setWrapToString.js @@ -0,0 +1,21 @@ +var getWrapDetails = require('./_getWrapDetails'), + insertWrapDetails = require('./_insertWrapDetails'), + setToString = require('./_setToString'), + updateWrapDetails = require('./_updateWrapDetails'); + +/** + * Sets the `toString` method of `wrapper` to mimic the source of `reference` + * with wrapper details in a comment at the top of the source body. + * + * @private + * @param {Function} wrapper The function to modify. + * @param {Function} reference The reference function. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @returns {Function} Returns `wrapper`. + */ +function setWrapToString(wrapper, reference, bitmask) { + var source = (reference + ''); + return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); +} + +module.exports = setWrapToString; diff --git a/node_modules/strong-soap/node_modules/lodash/_shortOut.js b/node_modules/strong-soap/node_modules/lodash/_shortOut.js new file mode 100644 index 00000000..3300a079 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_shortOut.js @@ -0,0 +1,37 @@ +/** Used to detect hot functions by number of calls within a span of milliseconds. */ +var HOT_COUNT = 800, + HOT_SPAN = 16; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeNow = Date.now; + +/** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ +function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; +} + +module.exports = shortOut; diff --git a/node_modules/strong-soap/node_modules/lodash/_shuffleSelf.js b/node_modules/strong-soap/node_modules/lodash/_shuffleSelf.js new file mode 100644 index 00000000..8bcc4f5c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_shuffleSelf.js @@ -0,0 +1,28 @@ +var baseRandom = require('./_baseRandom'); + +/** + * A specialized version of `_.shuffle` which mutates and sets the size of `array`. + * + * @private + * @param {Array} array The array to shuffle. + * @param {number} [size=array.length] The size of `array`. + * @returns {Array} Returns `array`. + */ +function shuffleSelf(array, size) { + var index = -1, + length = array.length, + lastIndex = length - 1; + + size = size === undefined ? length : size; + while (++index < size) { + var rand = baseRandom(index, lastIndex), + value = array[rand]; + + array[rand] = array[index]; + array[index] = value; + } + array.length = size; + return array; +} + +module.exports = shuffleSelf; diff --git a/node_modules/strong-soap/node_modules/lodash/_stackClear.js b/node_modules/strong-soap/node_modules/lodash/_stackClear.js new file mode 100644 index 00000000..ce8e5a92 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_stackClear.js @@ -0,0 +1,15 @@ +var ListCache = require('./_ListCache'); + +/** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ +function stackClear() { + this.__data__ = new ListCache; + this.size = 0; +} + +module.exports = stackClear; diff --git a/node_modules/strong-soap/node_modules/lodash/_stackDelete.js b/node_modules/strong-soap/node_modules/lodash/_stackDelete.js new file mode 100644 index 00000000..ff9887ab --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_stackDelete.js @@ -0,0 +1,18 @@ +/** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; +} + +module.exports = stackDelete; diff --git a/node_modules/strong-soap/node_modules/lodash/_stackGet.js b/node_modules/strong-soap/node_modules/lodash/_stackGet.js new file mode 100644 index 00000000..1cdf0040 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_stackGet.js @@ -0,0 +1,14 @@ +/** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function stackGet(key) { + return this.__data__.get(key); +} + +module.exports = stackGet; diff --git a/node_modules/strong-soap/node_modules/lodash/_stackHas.js b/node_modules/strong-soap/node_modules/lodash/_stackHas.js new file mode 100644 index 00000000..16a3ad11 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_stackHas.js @@ -0,0 +1,14 @@ +/** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function stackHas(key) { + return this.__data__.has(key); +} + +module.exports = stackHas; diff --git a/node_modules/strong-soap/node_modules/lodash/_stackSet.js b/node_modules/strong-soap/node_modules/lodash/_stackSet.js new file mode 100644 index 00000000..b790ac5f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_stackSet.js @@ -0,0 +1,34 @@ +var ListCache = require('./_ListCache'), + Map = require('./_Map'), + MapCache = require('./_MapCache'); + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ +function stackSet(key, value) { + var data = this.__data__; + if (data instanceof ListCache) { + var pairs = data.__data__; + if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new MapCache(pairs); + } + data.set(key, value); + this.size = data.size; + return this; +} + +module.exports = stackSet; diff --git a/node_modules/strong-soap/node_modules/lodash/_strictIndexOf.js b/node_modules/strong-soap/node_modules/lodash/_strictIndexOf.js new file mode 100644 index 00000000..0486a495 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_strictIndexOf.js @@ -0,0 +1,23 @@ +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +module.exports = strictIndexOf; diff --git a/node_modules/strong-soap/node_modules/lodash/_strictLastIndexOf.js b/node_modules/strong-soap/node_modules/lodash/_strictLastIndexOf.js new file mode 100644 index 00000000..d7310dcc --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_strictLastIndexOf.js @@ -0,0 +1,21 @@ +/** + * A specialized version of `_.lastIndexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictLastIndexOf(array, value, fromIndex) { + var index = fromIndex + 1; + while (index--) { + if (array[index] === value) { + return index; + } + } + return index; +} + +module.exports = strictLastIndexOf; diff --git a/node_modules/strong-soap/node_modules/lodash/_stringSize.js b/node_modules/strong-soap/node_modules/lodash/_stringSize.js new file mode 100644 index 00000000..17ef462a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_stringSize.js @@ -0,0 +1,18 @@ +var asciiSize = require('./_asciiSize'), + hasUnicode = require('./_hasUnicode'), + unicodeSize = require('./_unicodeSize'); + +/** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ +function stringSize(string) { + return hasUnicode(string) + ? unicodeSize(string) + : asciiSize(string); +} + +module.exports = stringSize; diff --git a/node_modules/strong-soap/node_modules/lodash/_stringToArray.js b/node_modules/strong-soap/node_modules/lodash/_stringToArray.js new file mode 100644 index 00000000..d161158c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_stringToArray.js @@ -0,0 +1,18 @@ +var asciiToArray = require('./_asciiToArray'), + hasUnicode = require('./_hasUnicode'), + unicodeToArray = require('./_unicodeToArray'); + +/** + * Converts `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function stringToArray(string) { + return hasUnicode(string) + ? unicodeToArray(string) + : asciiToArray(string); +} + +module.exports = stringToArray; diff --git a/node_modules/strong-soap/node_modules/lodash/_stringToPath.js b/node_modules/strong-soap/node_modules/lodash/_stringToPath.js new file mode 100644 index 00000000..8f39f8a2 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_stringToPath.js @@ -0,0 +1,27 @@ +var memoizeCapped = require('./_memoizeCapped'); + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +module.exports = stringToPath; diff --git a/node_modules/strong-soap/node_modules/lodash/_toKey.js b/node_modules/strong-soap/node_modules/lodash/_toKey.js new file mode 100644 index 00000000..c6d645c4 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_toKey.js @@ -0,0 +1,21 @@ +var isSymbol = require('./isSymbol'); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +module.exports = toKey; diff --git a/node_modules/strong-soap/node_modules/lodash/_toSource.js b/node_modules/strong-soap/node_modules/lodash/_toSource.js new file mode 100644 index 00000000..a020b386 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_toSource.js @@ -0,0 +1,26 @@ +/** Used for built-in method references. */ +var funcProto = Function.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} + +module.exports = toSource; diff --git a/node_modules/strong-soap/node_modules/lodash/_unescapeHtmlChar.js b/node_modules/strong-soap/node_modules/lodash/_unescapeHtmlChar.js new file mode 100644 index 00000000..a71fecb3 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_unescapeHtmlChar.js @@ -0,0 +1,21 @@ +var basePropertyOf = require('./_basePropertyOf'); + +/** Used to map HTML entities to characters. */ +var htmlUnescapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'" +}; + +/** + * Used by `_.unescape` to convert HTML entities to characters. + * + * @private + * @param {string} chr The matched character to unescape. + * @returns {string} Returns the unescaped character. + */ +var unescapeHtmlChar = basePropertyOf(htmlUnescapes); + +module.exports = unescapeHtmlChar; diff --git a/node_modules/strong-soap/node_modules/lodash/_unicodeSize.js b/node_modules/strong-soap/node_modules/lodash/_unicodeSize.js new file mode 100644 index 00000000..68137ec2 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_unicodeSize.js @@ -0,0 +1,44 @@ +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + rsAstralRange + ']', + rsCombo = '[' + rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; +} + +module.exports = unicodeSize; diff --git a/node_modules/strong-soap/node_modules/lodash/_unicodeToArray.js b/node_modules/strong-soap/node_modules/lodash/_unicodeToArray.js new file mode 100644 index 00000000..2a725c06 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_unicodeToArray.js @@ -0,0 +1,40 @@ +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + rsAstralRange + ']', + rsCombo = '[' + rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Converts a Unicode `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function unicodeToArray(string) { + return string.match(reUnicode) || []; +} + +module.exports = unicodeToArray; diff --git a/node_modules/strong-soap/node_modules/lodash/_unicodeWords.js b/node_modules/strong-soap/node_modules/lodash/_unicodeWords.js new file mode 100644 index 00000000..e72e6e0f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_unicodeWords.js @@ -0,0 +1,69 @@ +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsDingbatRange = '\\u2700-\\u27bf', + rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', + rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', + rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', + rsPunctuationRange = '\\u2000-\\u206f', + rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', + rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', + rsVarRange = '\\ufe0e\\ufe0f', + rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; + +/** Used to compose unicode capture groups. */ +var rsApos = "['\u2019]", + rsBreak = '[' + rsBreakRange + ']', + rsCombo = '[' + rsComboRange + ']', + rsDigits = '\\d+', + rsDingbat = '[' + rsDingbatRange + ']', + rsLower = '[' + rsLowerRange + ']', + rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsUpper = '[' + rsUpperRange + ']', + rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', + rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', + rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', + rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', + reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', + rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq; + +/** Used to match complex or compound words. */ +var reUnicodeWord = RegExp([ + rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', + rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', + rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, + rsUpper + '+' + rsOptContrUpper, + rsOrdUpper, + rsOrdLower, + rsDigits, + rsEmoji +].join('|'), 'g'); + +/** + * Splits a Unicode `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ +function unicodeWords(string) { + return string.match(reUnicodeWord) || []; +} + +module.exports = unicodeWords; diff --git a/node_modules/strong-soap/node_modules/lodash/_updateWrapDetails.js b/node_modules/strong-soap/node_modules/lodash/_updateWrapDetails.js new file mode 100644 index 00000000..8759fbdf --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_updateWrapDetails.js @@ -0,0 +1,46 @@ +var arrayEach = require('./_arrayEach'), + arrayIncludes = require('./_arrayIncludes'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_BIND_FLAG = 1, + WRAP_BIND_KEY_FLAG = 2, + WRAP_CURRY_FLAG = 8, + WRAP_CURRY_RIGHT_FLAG = 16, + WRAP_PARTIAL_FLAG = 32, + WRAP_PARTIAL_RIGHT_FLAG = 64, + WRAP_ARY_FLAG = 128, + WRAP_REARG_FLAG = 256, + WRAP_FLIP_FLAG = 512; + +/** Used to associate wrap methods with their bit flags. */ +var wrapFlags = [ + ['ary', WRAP_ARY_FLAG], + ['bind', WRAP_BIND_FLAG], + ['bindKey', WRAP_BIND_KEY_FLAG], + ['curry', WRAP_CURRY_FLAG], + ['curryRight', WRAP_CURRY_RIGHT_FLAG], + ['flip', WRAP_FLIP_FLAG], + ['partial', WRAP_PARTIAL_FLAG], + ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], + ['rearg', WRAP_REARG_FLAG] +]; + +/** + * Updates wrapper `details` based on `bitmask` flags. + * + * @private + * @returns {Array} details The details to modify. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @returns {Array} Returns `details`. + */ +function updateWrapDetails(details, bitmask) { + arrayEach(wrapFlags, function(pair) { + var value = '_.' + pair[0]; + if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { + details.push(value); + } + }); + return details.sort(); +} + +module.exports = updateWrapDetails; diff --git a/node_modules/strong-soap/node_modules/lodash/_wrapperClone.js b/node_modules/strong-soap/node_modules/lodash/_wrapperClone.js new file mode 100644 index 00000000..7bb58a2e --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/_wrapperClone.js @@ -0,0 +1,23 @@ +var LazyWrapper = require('./_LazyWrapper'), + LodashWrapper = require('./_LodashWrapper'), + copyArray = require('./_copyArray'); + +/** + * Creates a clone of `wrapper`. + * + * @private + * @param {Object} wrapper The wrapper to clone. + * @returns {Object} Returns the cloned wrapper. + */ +function wrapperClone(wrapper) { + if (wrapper instanceof LazyWrapper) { + return wrapper.clone(); + } + var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); + result.__actions__ = copyArray(wrapper.__actions__); + result.__index__ = wrapper.__index__; + result.__values__ = wrapper.__values__; + return result; +} + +module.exports = wrapperClone; diff --git a/node_modules/strong-soap/node_modules/lodash/add.js b/node_modules/strong-soap/node_modules/lodash/add.js new file mode 100644 index 00000000..f0695156 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/add.js @@ -0,0 +1,22 @@ +var createMathOperation = require('./_createMathOperation'); + +/** + * Adds two numbers. + * + * @static + * @memberOf _ + * @since 3.4.0 + * @category Math + * @param {number} augend The first number in an addition. + * @param {number} addend The second number in an addition. + * @returns {number} Returns the total. + * @example + * + * _.add(6, 4); + * // => 10 + */ +var add = createMathOperation(function(augend, addend) { + return augend + addend; +}, 0); + +module.exports = add; diff --git a/node_modules/strong-soap/node_modules/lodash/after.js b/node_modules/strong-soap/node_modules/lodash/after.js new file mode 100644 index 00000000..3900c979 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/after.js @@ -0,0 +1,42 @@ +var toInteger = require('./toInteger'); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * The opposite of `_.before`; this method creates a function that invokes + * `func` once it's called `n` or more times. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {number} n The number of calls before `func` is invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var saves = ['profile', 'settings']; + * + * var done = _.after(saves.length, function() { + * console.log('done saving!'); + * }); + * + * _.forEach(saves, function(type) { + * asyncSave({ 'type': type, 'complete': done }); + * }); + * // => Logs 'done saving!' after the two async saves have completed. + */ +function after(n, func) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n < 1) { + return func.apply(this, arguments); + } + }; +} + +module.exports = after; diff --git a/node_modules/strong-soap/node_modules/lodash/array.js b/node_modules/strong-soap/node_modules/lodash/array.js new file mode 100644 index 00000000..af688d3e --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/array.js @@ -0,0 +1,67 @@ +module.exports = { + 'chunk': require('./chunk'), + 'compact': require('./compact'), + 'concat': require('./concat'), + 'difference': require('./difference'), + 'differenceBy': require('./differenceBy'), + 'differenceWith': require('./differenceWith'), + 'drop': require('./drop'), + 'dropRight': require('./dropRight'), + 'dropRightWhile': require('./dropRightWhile'), + 'dropWhile': require('./dropWhile'), + 'fill': require('./fill'), + 'findIndex': require('./findIndex'), + 'findLastIndex': require('./findLastIndex'), + 'first': require('./first'), + 'flatten': require('./flatten'), + 'flattenDeep': require('./flattenDeep'), + 'flattenDepth': require('./flattenDepth'), + 'fromPairs': require('./fromPairs'), + 'head': require('./head'), + 'indexOf': require('./indexOf'), + 'initial': require('./initial'), + 'intersection': require('./intersection'), + 'intersectionBy': require('./intersectionBy'), + 'intersectionWith': require('./intersectionWith'), + 'join': require('./join'), + 'last': require('./last'), + 'lastIndexOf': require('./lastIndexOf'), + 'nth': require('./nth'), + 'pull': require('./pull'), + 'pullAll': require('./pullAll'), + 'pullAllBy': require('./pullAllBy'), + 'pullAllWith': require('./pullAllWith'), + 'pullAt': require('./pullAt'), + 'remove': require('./remove'), + 'reverse': require('./reverse'), + 'slice': require('./slice'), + 'sortedIndex': require('./sortedIndex'), + 'sortedIndexBy': require('./sortedIndexBy'), + 'sortedIndexOf': require('./sortedIndexOf'), + 'sortedLastIndex': require('./sortedLastIndex'), + 'sortedLastIndexBy': require('./sortedLastIndexBy'), + 'sortedLastIndexOf': require('./sortedLastIndexOf'), + 'sortedUniq': require('./sortedUniq'), + 'sortedUniqBy': require('./sortedUniqBy'), + 'tail': require('./tail'), + 'take': require('./take'), + 'takeRight': require('./takeRight'), + 'takeRightWhile': require('./takeRightWhile'), + 'takeWhile': require('./takeWhile'), + 'union': require('./union'), + 'unionBy': require('./unionBy'), + 'unionWith': require('./unionWith'), + 'uniq': require('./uniq'), + 'uniqBy': require('./uniqBy'), + 'uniqWith': require('./uniqWith'), + 'unzip': require('./unzip'), + 'unzipWith': require('./unzipWith'), + 'without': require('./without'), + 'xor': require('./xor'), + 'xorBy': require('./xorBy'), + 'xorWith': require('./xorWith'), + 'zip': require('./zip'), + 'zipObject': require('./zipObject'), + 'zipObjectDeep': require('./zipObjectDeep'), + 'zipWith': require('./zipWith') +}; diff --git a/node_modules/strong-soap/node_modules/lodash/ary.js b/node_modules/strong-soap/node_modules/lodash/ary.js new file mode 100644 index 00000000..70c87d09 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/ary.js @@ -0,0 +1,29 @@ +var createWrap = require('./_createWrap'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_ARY_FLAG = 128; + +/** + * Creates a function that invokes `func`, with up to `n` arguments, + * ignoring any additional arguments. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to cap arguments for. + * @param {number} [n=func.length] The arity cap. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new capped function. + * @example + * + * _.map(['6', '8', '10'], _.ary(parseInt, 1)); + * // => [6, 8, 10] + */ +function ary(func, n, guard) { + n = guard ? undefined : n; + n = (func && n == null) ? func.length : n; + return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n); +} + +module.exports = ary; diff --git a/node_modules/strong-soap/node_modules/lodash/assign.js b/node_modules/strong-soap/node_modules/lodash/assign.js new file mode 100644 index 00000000..909db26a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/assign.js @@ -0,0 +1,58 @@ +var assignValue = require('./_assignValue'), + copyObject = require('./_copyObject'), + createAssigner = require('./_createAssigner'), + isArrayLike = require('./isArrayLike'), + isPrototype = require('./_isPrototype'), + keys = require('./keys'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own enumerable string keyed properties of source objects to the + * destination object. Source objects are applied from left to right. + * Subsequent sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object` and is loosely based on + * [`Object.assign`](https://mdn.io/Object/assign). + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assignIn + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assign({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'c': 3 } + */ +var assign = createAssigner(function(object, source) { + if (isPrototype(source) || isArrayLike(source)) { + copyObject(source, keys(source), object); + return; + } + for (var key in source) { + if (hasOwnProperty.call(source, key)) { + assignValue(object, key, source[key]); + } + } +}); + +module.exports = assign; diff --git a/node_modules/strong-soap/node_modules/lodash/assignIn.js b/node_modules/strong-soap/node_modules/lodash/assignIn.js new file mode 100644 index 00000000..e663473a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/assignIn.js @@ -0,0 +1,40 @@ +var copyObject = require('./_copyObject'), + createAssigner = require('./_createAssigner'), + keysIn = require('./keysIn'); + +/** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assign + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assignIn({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } + */ +var assignIn = createAssigner(function(object, source) { + copyObject(source, keysIn(source), object); +}); + +module.exports = assignIn; diff --git a/node_modules/strong-soap/node_modules/lodash/assignInWith.js b/node_modules/strong-soap/node_modules/lodash/assignInWith.js new file mode 100644 index 00000000..68fcc0b0 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/assignInWith.js @@ -0,0 +1,38 @@ +var copyObject = require('./_copyObject'), + createAssigner = require('./_createAssigner'), + keysIn = require('./keysIn'); + +/** + * This method is like `_.assignIn` except that it accepts `customizer` + * which is invoked to produce the assigned values. If `customizer` returns + * `undefined`, assignment is handled by the method instead. The `customizer` + * is invoked with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extendWith + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @see _.assignWith + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignInWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObject(source, keysIn(source), object, customizer); +}); + +module.exports = assignInWith; diff --git a/node_modules/strong-soap/node_modules/lodash/assignWith.js b/node_modules/strong-soap/node_modules/lodash/assignWith.js new file mode 100644 index 00000000..7dc6c761 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/assignWith.js @@ -0,0 +1,37 @@ +var copyObject = require('./_copyObject'), + createAssigner = require('./_createAssigner'), + keys = require('./keys'); + +/** + * This method is like `_.assign` except that it accepts `customizer` + * which is invoked to produce the assigned values. If `customizer` returns + * `undefined`, assignment is handled by the method instead. The `customizer` + * is invoked with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @see _.assignInWith + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var assignWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObject(source, keys(source), object, customizer); +}); + +module.exports = assignWith; diff --git a/node_modules/strong-soap/node_modules/lodash/at.js b/node_modules/strong-soap/node_modules/lodash/at.js new file mode 100644 index 00000000..781ee9e5 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/at.js @@ -0,0 +1,23 @@ +var baseAt = require('./_baseAt'), + flatRest = require('./_flatRest'); + +/** + * Creates an array of values corresponding to `paths` of `object`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Array} Returns the picked values. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _.at(object, ['a[0].b.c', 'a[1]']); + * // => [3, 4] + */ +var at = flatRest(baseAt); + +module.exports = at; diff --git a/node_modules/strong-soap/node_modules/lodash/attempt.js b/node_modules/strong-soap/node_modules/lodash/attempt.js new file mode 100644 index 00000000..624d0152 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/attempt.js @@ -0,0 +1,35 @@ +var apply = require('./_apply'), + baseRest = require('./_baseRest'), + isError = require('./isError'); + +/** + * Attempts to invoke `func`, returning either the result or the caught error + * object. Any additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Util + * @param {Function} func The function to attempt. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {*} Returns the `func` result or error object. + * @example + * + * // Avoid throwing errors for invalid selectors. + * var elements = _.attempt(function(selector) { + * return document.querySelectorAll(selector); + * }, '>_>'); + * + * if (_.isError(elements)) { + * elements = []; + * } + */ +var attempt = baseRest(function(func, args) { + try { + return apply(func, undefined, args); + } catch (e) { + return isError(e) ? e : new Error(e); + } +}); + +module.exports = attempt; diff --git a/node_modules/strong-soap/node_modules/lodash/before.js b/node_modules/strong-soap/node_modules/lodash/before.js new file mode 100644 index 00000000..a3e0a16c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/before.js @@ -0,0 +1,40 @@ +var toInteger = require('./toInteger'); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it's called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery(element).on('click', _.before(5, addContactToList)); + * // => Allows adding up to 4 contacts to the list. + */ +function before(n, func) { + var result; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n > 0) { + result = func.apply(this, arguments); + } + if (n <= 1) { + func = undefined; + } + return result; + }; +} + +module.exports = before; diff --git a/node_modules/strong-soap/node_modules/lodash/bind.js b/node_modules/strong-soap/node_modules/lodash/bind.js new file mode 100644 index 00000000..b1076e93 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/bind.js @@ -0,0 +1,57 @@ +var baseRest = require('./_baseRest'), + createWrap = require('./_createWrap'), + getHolder = require('./_getHolder'), + replaceHolders = require('./_replaceHolders'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_BIND_FLAG = 1, + WRAP_PARTIAL_FLAG = 32; + +/** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and `partials` prepended to the arguments it receives. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * function greet(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // Bound with placeholders. + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */ +var bind = baseRest(function(func, thisArg, partials) { + var bitmask = WRAP_BIND_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getHolder(bind)); + bitmask |= WRAP_PARTIAL_FLAG; + } + return createWrap(func, bitmask, thisArg, partials, holders); +}); + +// Assign default placeholders. +bind.placeholder = {}; + +module.exports = bind; diff --git a/node_modules/strong-soap/node_modules/lodash/bindAll.js b/node_modules/strong-soap/node_modules/lodash/bindAll.js new file mode 100644 index 00000000..a35706de --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/bindAll.js @@ -0,0 +1,41 @@ +var arrayEach = require('./_arrayEach'), + baseAssignValue = require('./_baseAssignValue'), + bind = require('./bind'), + flatRest = require('./_flatRest'), + toKey = require('./_toKey'); + +/** + * Binds methods of an object to the object itself, overwriting the existing + * method. + * + * **Note:** This method doesn't set the "length" property of bound functions. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {Object} object The object to bind and assign the bound methods to. + * @param {...(string|string[])} methodNames The object method names to bind. + * @returns {Object} Returns `object`. + * @example + * + * var view = { + * 'label': 'docs', + * 'click': function() { + * console.log('clicked ' + this.label); + * } + * }; + * + * _.bindAll(view, ['click']); + * jQuery(element).on('click', view.click); + * // => Logs 'clicked docs' when clicked. + */ +var bindAll = flatRest(function(object, methodNames) { + arrayEach(methodNames, function(key) { + key = toKey(key); + baseAssignValue(object, key, bind(object[key], object)); + }); + return object; +}); + +module.exports = bindAll; diff --git a/node_modules/strong-soap/node_modules/lodash/bindKey.js b/node_modules/strong-soap/node_modules/lodash/bindKey.js new file mode 100644 index 00000000..f7fd64cd --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/bindKey.js @@ -0,0 +1,68 @@ +var baseRest = require('./_baseRest'), + createWrap = require('./_createWrap'), + getHolder = require('./_getHolder'), + replaceHolders = require('./_replaceHolders'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_BIND_FLAG = 1, + WRAP_BIND_KEY_FLAG = 2, + WRAP_PARTIAL_FLAG = 32; + +/** + * Creates a function that invokes the method at `object[key]` with `partials` + * prepended to the arguments it receives. + * + * This method differs from `_.bind` by allowing bound functions to reference + * methods that may be redefined or don't yet exist. See + * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) + * for more details. + * + * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Function + * @param {Object} object The object to invoke the method on. + * @param {string} key The key of the method. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var object = { + * 'user': 'fred', + * 'greet': function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * }; + * + * var bound = _.bindKey(object, 'greet', 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * object.greet = function(greeting, punctuation) { + * return greeting + 'ya ' + this.user + punctuation; + * }; + * + * bound('!'); + * // => 'hiya fred!' + * + * // Bound with placeholders. + * var bound = _.bindKey(object, 'greet', _, '!'); + * bound('hi'); + * // => 'hiya fred!' + */ +var bindKey = baseRest(function(object, key, partials) { + var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getHolder(bindKey)); + bitmask |= WRAP_PARTIAL_FLAG; + } + return createWrap(key, bitmask, object, partials, holders); +}); + +// Assign default placeholders. +bindKey.placeholder = {}; + +module.exports = bindKey; diff --git a/node_modules/strong-soap/node_modules/lodash/camelCase.js b/node_modules/strong-soap/node_modules/lodash/camelCase.js new file mode 100644 index 00000000..d7390def --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/camelCase.js @@ -0,0 +1,29 @@ +var capitalize = require('./capitalize'), + createCompounder = require('./_createCompounder'); + +/** + * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the camel cased string. + * @example + * + * _.camelCase('Foo Bar'); + * // => 'fooBar' + * + * _.camelCase('--foo-bar--'); + * // => 'fooBar' + * + * _.camelCase('__FOO_BAR__'); + * // => 'fooBar' + */ +var camelCase = createCompounder(function(result, word, index) { + word = word.toLowerCase(); + return result + (index ? capitalize(word) : word); +}); + +module.exports = camelCase; diff --git a/node_modules/strong-soap/node_modules/lodash/capitalize.js b/node_modules/strong-soap/node_modules/lodash/capitalize.js new file mode 100644 index 00000000..3e1600e7 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/capitalize.js @@ -0,0 +1,23 @@ +var toString = require('./toString'), + upperFirst = require('./upperFirst'); + +/** + * Converts the first character of `string` to upper case and the remaining + * to lower case. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to capitalize. + * @returns {string} Returns the capitalized string. + * @example + * + * _.capitalize('FRED'); + * // => 'Fred' + */ +function capitalize(string) { + return upperFirst(toString(string).toLowerCase()); +} + +module.exports = capitalize; diff --git a/node_modules/strong-soap/node_modules/lodash/castArray.js b/node_modules/strong-soap/node_modules/lodash/castArray.js new file mode 100644 index 00000000..e470bdb9 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/castArray.js @@ -0,0 +1,44 @@ +var isArray = require('./isArray'); + +/** + * Casts `value` as an array if it's not one. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Lang + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast array. + * @example + * + * _.castArray(1); + * // => [1] + * + * _.castArray({ 'a': 1 }); + * // => [{ 'a': 1 }] + * + * _.castArray('abc'); + * // => ['abc'] + * + * _.castArray(null); + * // => [null] + * + * _.castArray(undefined); + * // => [undefined] + * + * _.castArray(); + * // => [] + * + * var array = [1, 2, 3]; + * console.log(_.castArray(array) === array); + * // => true + */ +function castArray() { + if (!arguments.length) { + return []; + } + var value = arguments[0]; + return isArray(value) ? value : [value]; +} + +module.exports = castArray; diff --git a/node_modules/strong-soap/node_modules/lodash/ceil.js b/node_modules/strong-soap/node_modules/lodash/ceil.js new file mode 100644 index 00000000..56c8722c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/ceil.js @@ -0,0 +1,26 @@ +var createRound = require('./_createRound'); + +/** + * Computes `number` rounded up to `precision`. + * + * @static + * @memberOf _ + * @since 3.10.0 + * @category Math + * @param {number} number The number to round up. + * @param {number} [precision=0] The precision to round up to. + * @returns {number} Returns the rounded up number. + * @example + * + * _.ceil(4.006); + * // => 5 + * + * _.ceil(6.004, 2); + * // => 6.01 + * + * _.ceil(6040, -2); + * // => 6100 + */ +var ceil = createRound('ceil'); + +module.exports = ceil; diff --git a/node_modules/strong-soap/node_modules/lodash/chain.js b/node_modules/strong-soap/node_modules/lodash/chain.js new file mode 100644 index 00000000..f6cd6475 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/chain.js @@ -0,0 +1,38 @@ +var lodash = require('./wrapperLodash'); + +/** + * Creates a `lodash` wrapper instance that wraps `value` with explicit method + * chain sequences enabled. The result of such sequences must be unwrapped + * with `_#value`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Seq + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _ + * .chain(users) + * .sortBy('age') + * .map(function(o) { + * return o.user + ' is ' + o.age; + * }) + * .head() + * .value(); + * // => 'pebbles is 1' + */ +function chain(value) { + var result = lodash(value); + result.__chain__ = true; + return result; +} + +module.exports = chain; diff --git a/node_modules/strong-soap/node_modules/lodash/chunk.js b/node_modules/strong-soap/node_modules/lodash/chunk.js new file mode 100644 index 00000000..5b562fef --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/chunk.js @@ -0,0 +1,50 @@ +var baseSlice = require('./_baseSlice'), + isIterateeCall = require('./_isIterateeCall'), + toInteger = require('./toInteger'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * Creates an array of elements split into groups the length of `size`. + * If `array` can't be split evenly, the final chunk will be the remaining + * elements. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to process. + * @param {number} [size=1] The length of each chunk + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the new array of chunks. + * @example + * + * _.chunk(['a', 'b', 'c', 'd'], 2); + * // => [['a', 'b'], ['c', 'd']] + * + * _.chunk(['a', 'b', 'c', 'd'], 3); + * // => [['a', 'b', 'c'], ['d']] + */ +function chunk(array, size, guard) { + if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { + size = 1; + } else { + size = nativeMax(toInteger(size), 0); + } + var length = array == null ? 0 : array.length; + if (!length || size < 1) { + return []; + } + var index = 0, + resIndex = 0, + result = Array(nativeCeil(length / size)); + + while (index < length) { + result[resIndex++] = baseSlice(array, index, (index += size)); + } + return result; +} + +module.exports = chunk; diff --git a/node_modules/strong-soap/node_modules/lodash/clamp.js b/node_modules/strong-soap/node_modules/lodash/clamp.js new file mode 100644 index 00000000..91a72c97 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/clamp.js @@ -0,0 +1,39 @@ +var baseClamp = require('./_baseClamp'), + toNumber = require('./toNumber'); + +/** + * Clamps `number` within the inclusive `lower` and `upper` bounds. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Number + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + * @example + * + * _.clamp(-10, -5, 5); + * // => -5 + * + * _.clamp(10, -5, 5); + * // => 5 + */ +function clamp(number, lower, upper) { + if (upper === undefined) { + upper = lower; + lower = undefined; + } + if (upper !== undefined) { + upper = toNumber(upper); + upper = upper === upper ? upper : 0; + } + if (lower !== undefined) { + lower = toNumber(lower); + lower = lower === lower ? lower : 0; + } + return baseClamp(toNumber(number), lower, upper); +} + +module.exports = clamp; diff --git a/node_modules/strong-soap/node_modules/lodash/clone.js b/node_modules/strong-soap/node_modules/lodash/clone.js new file mode 100644 index 00000000..dd439d63 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/clone.js @@ -0,0 +1,36 @@ +var baseClone = require('./_baseClone'); + +/** Used to compose bitmasks for cloning. */ +var CLONE_SYMBOLS_FLAG = 4; + +/** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ +function clone(value) { + return baseClone(value, CLONE_SYMBOLS_FLAG); +} + +module.exports = clone; diff --git a/node_modules/strong-soap/node_modules/lodash/cloneDeep.js b/node_modules/strong-soap/node_modules/lodash/cloneDeep.js new file mode 100644 index 00000000..4425fbe8 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/cloneDeep.js @@ -0,0 +1,29 @@ +var baseClone = require('./_baseClone'); + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ +function cloneDeep(value) { + return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +} + +module.exports = cloneDeep; diff --git a/node_modules/strong-soap/node_modules/lodash/cloneDeepWith.js b/node_modules/strong-soap/node_modules/lodash/cloneDeepWith.js new file mode 100644 index 00000000..fd9c6c05 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/cloneDeepWith.js @@ -0,0 +1,40 @@ +var baseClone = require('./_baseClone'); + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.cloneWith` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the deep cloned value. + * @see _.cloneWith + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(true); + * } + * } + * + * var el = _.cloneDeepWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 20 + */ +function cloneDeepWith(value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer); +} + +module.exports = cloneDeepWith; diff --git a/node_modules/strong-soap/node_modules/lodash/cloneWith.js b/node_modules/strong-soap/node_modules/lodash/cloneWith.js new file mode 100644 index 00000000..d2f4e756 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/cloneWith.js @@ -0,0 +1,42 @@ +var baseClone = require('./_baseClone'); + +/** Used to compose bitmasks for cloning. */ +var CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it accepts `customizer` which + * is invoked to produce the cloned value. If `customizer` returns `undefined`, + * cloning is handled by the method instead. The `customizer` is invoked with + * up to four arguments; (value [, index|key, object, stack]). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the cloned value. + * @see _.cloneDeepWith + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(false); + * } + * } + * + * var el = _.cloneWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 0 + */ +function cloneWith(value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseClone(value, CLONE_SYMBOLS_FLAG, customizer); +} + +module.exports = cloneWith; diff --git a/node_modules/strong-soap/node_modules/lodash/collection.js b/node_modules/strong-soap/node_modules/lodash/collection.js new file mode 100644 index 00000000..77fe837f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/collection.js @@ -0,0 +1,30 @@ +module.exports = { + 'countBy': require('./countBy'), + 'each': require('./each'), + 'eachRight': require('./eachRight'), + 'every': require('./every'), + 'filter': require('./filter'), + 'find': require('./find'), + 'findLast': require('./findLast'), + 'flatMap': require('./flatMap'), + 'flatMapDeep': require('./flatMapDeep'), + 'flatMapDepth': require('./flatMapDepth'), + 'forEach': require('./forEach'), + 'forEachRight': require('./forEachRight'), + 'groupBy': require('./groupBy'), + 'includes': require('./includes'), + 'invokeMap': require('./invokeMap'), + 'keyBy': require('./keyBy'), + 'map': require('./map'), + 'orderBy': require('./orderBy'), + 'partition': require('./partition'), + 'reduce': require('./reduce'), + 'reduceRight': require('./reduceRight'), + 'reject': require('./reject'), + 'sample': require('./sample'), + 'sampleSize': require('./sampleSize'), + 'shuffle': require('./shuffle'), + 'size': require('./size'), + 'some': require('./some'), + 'sortBy': require('./sortBy') +}; diff --git a/node_modules/strong-soap/node_modules/lodash/commit.js b/node_modules/strong-soap/node_modules/lodash/commit.js new file mode 100644 index 00000000..fe4db717 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/commit.js @@ -0,0 +1,33 @@ +var LodashWrapper = require('./_LodashWrapper'); + +/** + * Executes the chain sequence and returns the wrapped result. + * + * @name commit + * @memberOf _ + * @since 3.2.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapped = _(array).push(3); + * + * console.log(array); + * // => [1, 2] + * + * wrapped = wrapped.commit(); + * console.log(array); + * // => [1, 2, 3] + * + * wrapped.last(); + * // => 3 + * + * console.log(array); + * // => [1, 2, 3] + */ +function wrapperCommit() { + return new LodashWrapper(this.value(), this.__chain__); +} + +module.exports = wrapperCommit; diff --git a/node_modules/strong-soap/node_modules/lodash/compact.js b/node_modules/strong-soap/node_modules/lodash/compact.js new file mode 100644 index 00000000..031fab4e --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/compact.js @@ -0,0 +1,31 @@ +/** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ +function compact(array) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value) { + result[resIndex++] = value; + } + } + return result; +} + +module.exports = compact; diff --git a/node_modules/strong-soap/node_modules/lodash/concat.js b/node_modules/strong-soap/node_modules/lodash/concat.js new file mode 100644 index 00000000..1da48a4f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/concat.js @@ -0,0 +1,43 @@ +var arrayPush = require('./_arrayPush'), + baseFlatten = require('./_baseFlatten'), + copyArray = require('./_copyArray'), + isArray = require('./isArray'); + +/** + * Creates a new array concatenating `array` with any additional arrays + * and/or values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to concatenate. + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var other = _.concat(array, 2, [3], [[4]]); + * + * console.log(other); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ +function concat() { + var length = arguments.length; + if (!length) { + return []; + } + var args = Array(length - 1), + array = arguments[0], + index = length; + + while (index--) { + args[index - 1] = arguments[index]; + } + return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); +} + +module.exports = concat; diff --git a/node_modules/strong-soap/node_modules/lodash/cond.js b/node_modules/strong-soap/node_modules/lodash/cond.js new file mode 100644 index 00000000..64555986 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/cond.js @@ -0,0 +1,60 @@ +var apply = require('./_apply'), + arrayMap = require('./_arrayMap'), + baseIteratee = require('./_baseIteratee'), + baseRest = require('./_baseRest'); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that iterates over `pairs` and invokes the corresponding + * function of the first predicate to return truthy. The predicate-function + * pairs are invoked with the `this` binding and arguments of the created + * function. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Util + * @param {Array} pairs The predicate-function pairs. + * @returns {Function} Returns the new composite function. + * @example + * + * var func = _.cond([ + * [_.matches({ 'a': 1 }), _.constant('matches A')], + * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')], + * [_.stubTrue, _.constant('no match')] + * ]); + * + * func({ 'a': 1, 'b': 2 }); + * // => 'matches A' + * + * func({ 'a': 0, 'b': 1 }); + * // => 'matches B' + * + * func({ 'a': '1', 'b': '2' }); + * // => 'no match' + */ +function cond(pairs) { + var length = pairs == null ? 0 : pairs.length, + toIteratee = baseIteratee; + + pairs = !length ? [] : arrayMap(pairs, function(pair) { + if (typeof pair[1] != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return [toIteratee(pair[0]), pair[1]]; + }); + + return baseRest(function(args) { + var index = -1; + while (++index < length) { + var pair = pairs[index]; + if (apply(pair[0], this, args)) { + return apply(pair[1], this, args); + } + } + }); +} + +module.exports = cond; diff --git a/node_modules/strong-soap/node_modules/lodash/conforms.js b/node_modules/strong-soap/node_modules/lodash/conforms.js new file mode 100644 index 00000000..5501a949 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/conforms.js @@ -0,0 +1,35 @@ +var baseClone = require('./_baseClone'), + baseConforms = require('./_baseConforms'); + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1; + +/** + * Creates a function that invokes the predicate properties of `source` with + * the corresponding property values of a given object, returning `true` if + * all predicates return truthy, else `false`. + * + * **Note:** The created function is equivalent to `_.conformsTo` with + * `source` partially applied. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Util + * @param {Object} source The object of property predicates to conform to. + * @returns {Function} Returns the new spec function. + * @example + * + * var objects = [ + * { 'a': 2, 'b': 1 }, + * { 'a': 1, 'b': 2 } + * ]; + * + * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } })); + * // => [{ 'a': 1, 'b': 2 }] + */ +function conforms(source) { + return baseConforms(baseClone(source, CLONE_DEEP_FLAG)); +} + +module.exports = conforms; diff --git a/node_modules/strong-soap/node_modules/lodash/conformsTo.js b/node_modules/strong-soap/node_modules/lodash/conformsTo.js new file mode 100644 index 00000000..b8a93ebf --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/conformsTo.js @@ -0,0 +1,32 @@ +var baseConformsTo = require('./_baseConformsTo'), + keys = require('./keys'); + +/** + * Checks if `object` conforms to `source` by invoking the predicate + * properties of `source` with the corresponding property values of `object`. + * + * **Note:** This method is equivalent to `_.conforms` when `source` is + * partially applied. + * + * @static + * @memberOf _ + * @since 4.14.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property predicates to conform to. + * @returns {boolean} Returns `true` if `object` conforms, else `false`. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * + * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); + * // => true + * + * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); + * // => false + */ +function conformsTo(object, source) { + return source == null || baseConformsTo(object, source, keys(source)); +} + +module.exports = conformsTo; diff --git a/node_modules/strong-soap/node_modules/lodash/constant.js b/node_modules/strong-soap/node_modules/lodash/constant.js new file mode 100644 index 00000000..655ece3f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/constant.js @@ -0,0 +1,26 @@ +/** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new constant function. + * @example + * + * var objects = _.times(2, _.constant({ 'a': 1 })); + * + * console.log(objects); + * // => [{ 'a': 1 }, { 'a': 1 }] + * + * console.log(objects[0] === objects[1]); + * // => true + */ +function constant(value) { + return function() { + return value; + }; +} + +module.exports = constant; diff --git a/node_modules/strong-soap/node_modules/lodash/core.js b/node_modules/strong-soap/node_modules/lodash/core.js new file mode 100644 index 00000000..e333c15b --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/core.js @@ -0,0 +1,3854 @@ +/** + * @license + * Lodash (Custom Build) + * Build: `lodash core -o ./dist/lodash.core.js` + * Copyright JS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ +;(function() { + + /** Used as a safe reference for `undefined` in pre-ES5 environments. */ + var undefined; + + /** Used as the semantic version number. */ + var VERSION = '4.17.11'; + + /** Error message constants. */ + var FUNC_ERROR_TEXT = 'Expected a function'; + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + + /** Used to compose bitmasks for function metadata. */ + var WRAP_BIND_FLAG = 1, + WRAP_PARTIAL_FLAG = 32; + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + asyncTag = '[object AsyncFunction]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + numberTag = '[object Number]', + objectTag = '[object Object]', + proxyTag = '[object Proxy]', + regexpTag = '[object RegExp]', + stringTag = '[object String]'; + + /** Used to match HTML entities and HTML characters. */ + var reUnescapedHtml = /[&<>"']/g, + reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** Used to map characters to HTML entities. */ + var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); + + /** Detect free variable `exports`. */ + var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + + /*--------------------------------------------------------------------------*/ + + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + array.push.apply(array, values); + return array; + } + + /** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.propertyOf` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyOf(object) { + return function(key) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ + function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ + function baseValues(object, props) { + return baseMap(props, function(key) { + return object[key]; + }); + } + + /** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + var escapeHtmlChar = basePropertyOf(htmlEscapes); + + /** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; + } + + /*--------------------------------------------------------------------------*/ + + /** Used for built-in method references. */ + var arrayProto = Array.prototype, + objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Used to generate unique IDs. */ + var idCounter = 0; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** Used to restore the original `_` reference in `_.noConflict`. */ + var oldDash = root._; + + /** Built-in value references. */ + var objectCreate = Object.create, + propertyIsEnumerable = objectProto.propertyIsEnumerable; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeIsFinite = root.isFinite, + nativeKeys = overArg(Object.keys, Object), + nativeMax = Math.max; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object which wraps `value` to enable implicit method + * chain sequences. Methods that operate on and return arrays, collections, + * and functions can be chained together. Methods that retrieve a single value + * or may return a primitive value will automatically end the chain sequence + * and return the unwrapped value. Otherwise, the value must be unwrapped + * with `_#value`. + * + * Explicit chain sequences, which must be unwrapped with `_#value`, may be + * enabled using `_.chain`. + * + * The execution of chained methods is lazy, that is, it's deferred until + * `_#value` is implicitly or explicitly called. + * + * Lazy evaluation allows several methods to support shortcut fusion. + * Shortcut fusion is an optimization to merge iteratee calls; this avoids + * the creation of intermediate arrays and can greatly reduce the number of + * iteratee executions. Sections of a chain sequence qualify for shortcut + * fusion if the section is applied to an array and iteratees accept only + * one argument. The heuristic for whether a section qualifies for shortcut + * fusion is subject to change. + * + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. + * + * In addition to lodash methods, wrappers have `Array` and `String` methods. + * + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` + * + * The wrapper `String` methods are: + * `replace` and `split` + * + * The wrapper methods that support shortcut fusion are: + * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, + * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, + * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` + * + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, + * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, + * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, + * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, + * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, + * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, + * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, + * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, + * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, + * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, + * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, + * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, + * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, + * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, + * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, + * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, + * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, + * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, + * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, + * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, + * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, + * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, + * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, + * `zipObject`, `zipObjectDeep`, and `zipWith` + * + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, + * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, + * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, + * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, + * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, + * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, + * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, + * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, + * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, + * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, + * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, + * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, + * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, + * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, + * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, + * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, + * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, + * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, + * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, + * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, + * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, + * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, + * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, + * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, + * `upperFirst`, `value`, and `words` + * + * @name _ + * @constructor + * @category Seq + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2, 3]); + * + * // Returns an unwrapped value. + * wrapped.reduce(_.add); + * // => 6 + * + * // Returns a wrapped value. + * var squares = wrapped.map(square); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */ + function lodash(value) { + return value instanceof LodashWrapper + ? value + : new LodashWrapper(value); + } + + /** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ + var baseCreate = (function() { + function object() {} + return function(proto) { + if (!isObject(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; + }()); + + /** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable explicit method chain sequences. + */ + function LodashWrapper(value, chainAll) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__chain__ = !!chainAll; + } + + LodashWrapper.prototype = baseCreate(lodash.prototype); + LodashWrapper.prototype.constructor = LodashWrapper; + + /*------------------------------------------------------------------------*/ + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function baseAssignValue(object, key, value) { + object[key] = value; + } + + /** + * The base implementation of `_.delay` and `_.defer` which accepts `args` + * to provide to `func`. + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {Array} args The arguments to provide to `func`. + * @returns {number|Object} Returns the timer id or timeout object. + */ + function baseDelay(func, wait, args) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return setTimeout(function() { func.apply(undefined, args); }, wait); + } + + /** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEach = createBaseEach(baseForOwn); + + /** + * The base implementation of `_.every` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false` + */ + function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function(value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; + } + + /** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ + function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !false) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; + } + + /** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; + } + + /** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ + function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; + } + + /** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseFor = createBaseFor(); + + /** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); + } + + /** + * The base implementation of `_.functions` which creates an array of + * `object` function property names filtered from `props`. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} props The property names to filter. + * @returns {Array} Returns the function names. + */ + function baseFunctions(object, props) { + return baseFilter(props, function(key) { + return isFunction(object[key]); + }); + } + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + return objectToString(value); + } + + /** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ + function baseGt(value, other) { + return value > other; + } + + /** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ + var baseIsArguments = noop; + + /** + * The base implementation of `_.isDate` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + */ + function baseIsDate(value) { + return isObjectLike(value) && baseGetTag(value) == dateTag; + } + + /** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); + } + + /** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = objIsArr ? arrayTag : baseGetTag(object), + othTag = othIsArr ? arrayTag : baseGetTag(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + stack || (stack = []); + var objStack = find(stack, function(entry) { + return entry[0] == object; + }); + var othStack = find(stack, function(entry) { + return entry[0] == other; + }); + if (objStack && othStack) { + return objStack[1] == other; + } + stack.push([object, other]); + stack.push([other, object]); + if (isSameTag && !objIsObj) { + var result = (objIsArr) + ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + stack.pop(); + return result; + } + if (!(bitmask & COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + var result = equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + stack.pop(); + return result; + } + } + if (!isSameTag) { + return false; + } + var result = equalObjects(object, other, bitmask, customizer, equalFunc, stack); + stack.pop(); + return result; + } + + /** + * The base implementation of `_.isRegExp` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + */ + function baseIsRegExp(value) { + return isObjectLike(value) && baseGetTag(value) == regexpTag; + } + + /** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ + function baseIteratee(func) { + if (typeof func == 'function') { + return func; + } + if (func == null) { + return identity; + } + return (typeof func == 'object' ? baseMatches : baseProperty)(func); + } + + /** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ + function baseLt(value, other) { + return value < other; + } + + /** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; + } + + /** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatches(source) { + var props = nativeKeys(source); + return function(object) { + var length = props.length; + if (object == null) { + return !length; + } + object = Object(object); + while (length--) { + var key = props[length]; + if (!(key in object && + baseIsEqual(source[key], object[key], COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG) + )) { + return false; + } + } + return true; + }; + } + + /** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ + function basePick(object, props) { + object = Object(object); + return reduce(props, function(result, key) { + if (key in object) { + result[key] = object[key]; + } + return result; + }, {}); + } + + /** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ + function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); + } + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source) { + return baseSlice(source, 0, source.length); + } + + /** + * The base implementation of `_.some` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function baseSome(collection, predicate) { + var result; + + baseEach(collection, function(value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; + } + + /** + * The base implementation of `wrapperValue` which returns the result of + * performing a sequence of actions on the unwrapped `value`, where each + * successive action is supplied the return value of the previous. + * + * @private + * @param {*} value The unwrapped value. + * @param {Array} actions Actions to perform to resolve the unwrapped value. + * @returns {*} Returns the resolved value. + */ + function baseWrapperValue(value, actions) { + var result = value; + return reduce(actions, function(result, action) { + return action.func.apply(action.thisArg, arrayPush([result], action.args)); + }, result); + } + + /** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ + function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = false; + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = false; + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; + } + + /** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ + function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; + } + + /** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ + function createAssigner(assigner) { + return baseRest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); + } + + /** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; + } + + /** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; + } + + /** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. + */ + function createCtor(Ctor) { + return function() { + // Use a `switch` statement to work with class constructors. See + // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist + // for more details. + var args = arguments; + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args); + + // Mimic the constructor's `return` behavior. + // See https://es5.github.io/#x13.2.2 for more details. + return isObject(result) ? result : thisBinding; + }; + } + + /** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ + function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!isArrayLike(collection)) { + var iteratee = baseIteratee(predicate, 3); + collection = keys(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; + } + + /** + * Creates a function that wraps `func` to invoke it with the `this` binding + * of `thisArg` and `partials` prepended to the arguments it receives. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} partials The arguments to prepend to those provided to + * the new function. + * @returns {Function} Returns the new wrapped function. + */ + function createPartial(func, bitmask, thisArg, partials) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + var isBind = bitmask & WRAP_BIND_FLAG, + Ctor = createCtor(func); + + function wrapper() { + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(leftLength + argsLength), + fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex]; + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex]; + } + return fn.apply(isBind ? thisArg : this, args); + } + return wrapper; + } + + /** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ + function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? [] : undefined; + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + var compared; + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!baseSome(other, function(othValue, othIndex) { + if (!indexOf(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + return result; + } + + /** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + } + return false; + } + + /** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + objProps = keys(object), + objLength = objProps.length, + othProps = keys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + var result = true; + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + var compared; + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + return result; + } + + /** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + function flatRest(func) { + return setToString(overRest(func, undefined, flatten), func + ''); + } + + /** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ + function isFlattenable(value) { + return isArray(value) || isArguments(value); + } + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); + } + + /** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; + } + + /** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; + } + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString.call(value); + } + + /** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ + function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return func.apply(this, otherArgs); + }; + } + + /** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var setToString = identity; + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ + function compact(array) { + return baseFilter(array, Boolean); + } + + /** + * Creates a new array concatenating `array` with any additional arrays + * and/or values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to concatenate. + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var other = _.concat(array, 2, [3], [[4]]); + * + * console.log(other); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ + function concat() { + var length = arguments.length; + if (!length) { + return []; + } + var args = Array(length - 1), + array = arguments[0], + index = length; + + while (index--) { + args[index - 1] = arguments[index]; + } + return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); + } + + /** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ + function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseFindIndex(array, baseIteratee(predicate, 3), index); + } + + /** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ + function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, 1) : []; + } + + /** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */ + function flattenDeep(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, INFINITY) : []; + } + + /** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias first + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.head([1, 2, 3]); + * // => 1 + * + * _.head([]); + * // => undefined + */ + function head(array) { + return (array && array.length) ? array[0] : undefined; + } + + /** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the + * offset from the end of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */ + function indexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (typeof fromIndex == 'number') { + fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex; + } else { + fromIndex = 0; + } + var index = (fromIndex || 0) - 1, + isReflexive = value === value; + + while (++index < length) { + var other = array[index]; + if ((isReflexive ? other === value : other !== other)) { + return index; + } + } + return -1; + } + + /** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ + function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; + } + + /** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of + * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are + * returned. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function slice(array, start, end) { + var length = array == null ? 0 : array.length; + start = start == null ? 0 : +start; + end = end === undefined ? length : +end; + return length ? baseSlice(array, start, end) : []; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` wrapper instance that wraps `value` with explicit method + * chain sequences enabled. The result of such sequences must be unwrapped + * with `_#value`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Seq + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _ + * .chain(users) + * .sortBy('age') + * .map(function(o) { + * return o.user + ' is ' + o.age; + * }) + * .head() + * .value(); + * // => 'pebbles is 1' + */ + function chain(value) { + var result = lodash(value); + result.__chain__ = true; + return result; + } + + /** + * This method invokes `interceptor` and returns `value`. The interceptor + * is invoked with one argument; (value). The purpose of this method is to + * "tap into" a method chain sequence in order to modify intermediate results. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns `value`. + * @example + * + * _([1, 2, 3]) + * .tap(function(array) { + * // Mutate input array. + * array.pop(); + * }) + * .reverse() + * .value(); + * // => [2, 1] + */ + function tap(value, interceptor) { + interceptor(value); + return value; + } + + /** + * This method is like `_.tap` except that it returns the result of `interceptor`. + * The purpose of this method is to "pass thru" values replacing intermediate + * results in a method chain sequence. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns the result of `interceptor`. + * @example + * + * _(' abc ') + * .chain() + * .trim() + * .thru(function(value) { + * return [value]; + * }) + * .value(); + * // => ['abc'] + */ + function thru(value, interceptor) { + return interceptor(value); + } + + /** + * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. + * + * @name chain + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // A sequence without explicit chaining. + * _(users).head(); + * // => { 'user': 'barney', 'age': 36 } + * + * // A sequence with explicit chaining. + * _(users) + * .chain() + * .head() + * .pick('user') + * .value(); + * // => { 'user': 'barney' } + */ + function wrapperChain() { + return chain(this); + } + + /** + * Executes the chain sequence to resolve the unwrapped value. + * + * @name value + * @memberOf _ + * @since 0.1.0 + * @alias toJSON, valueOf + * @category Seq + * @returns {*} Returns the resolved unwrapped value. + * @example + * + * _([1, 2, 3]).value(); + * // => [1, 2, 3] + */ + function wrapperValue() { + return baseWrapperValue(this.__wrapped__, this.__actions__); + } + + /*------------------------------------------------------------------------*/ + + /** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * Iteration is stopped once `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * **Note:** This method returns `true` for + * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because + * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of + * elements of empty collections. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.every(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.every(users, 'active'); + * // => false + */ + function every(collection, predicate, guard) { + predicate = guard ? undefined : predicate; + return baseEvery(collection, baseIteratee(predicate)); + } + + /** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + */ + function filter(collection, predicate) { + return baseFilter(collection, baseIteratee(predicate)); + } + + /** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ + var find = createFind(findIndex); + + /** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ + function forEach(collection, iteratee) { + return baseEach(collection, baseIteratee(iteratee)); + } + + /** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ + function map(collection, iteratee) { + return baseMap(collection, baseIteratee(iteratee)); + } + + /** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ + function reduce(collection, iteratee, accumulator) { + return baseReduce(collection, baseIteratee(iteratee), accumulator, arguments.length < 3, baseEach); + } + + /** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ + function size(collection) { + if (collection == null) { + return 0; + } + collection = isArrayLike(collection) ? collection : nativeKeys(collection); + return collection.length; + } + + /** + * Checks if `predicate` returns truthy for **any** element of `collection`. + * Iteration is stopped once `predicate` returns truthy. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.some(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.some(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.some(users, 'active'); + * // => true + */ + function some(collection, predicate, guard) { + predicate = guard ? undefined : predicate; + return baseSome(collection, baseIteratee(predicate)); + } + + /** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]] + */ + function sortBy(collection, iteratee) { + var index = 0; + iteratee = baseIteratee(iteratee); + + return baseMap(baseMap(collection, function(value, key, collection) { + return { 'value': value, 'index': index++, 'criteria': iteratee(value, key, collection) }; + }).sort(function(object, other) { + return compareAscending(object.criteria, other.criteria) || (object.index - other.index); + }), baseProperty('value')); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it's called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery(element).on('click', _.before(5, addContactToList)); + * // => Allows adding up to 4 contacts to the list. + */ + function before(n, func) { + var result; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n > 0) { + result = func.apply(this, arguments); + } + if (n <= 1) { + func = undefined; + } + return result; + }; + } + + /** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and `partials` prepended to the arguments it receives. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * function greet(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // Bound with placeholders. + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */ + var bind = baseRest(function(func, thisArg, partials) { + return createPartial(func, WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG, thisArg, partials); + }); + + /** + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { + * console.log(text); + * }, 'deferred'); + * // => Logs 'deferred' after one millisecond. + */ + var defer = baseRest(function(func, args) { + return baseDelay(func, 1, args); + }); + + /** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => Logs 'later' after one second. + */ + var delay = baseRest(function(func, wait, args) { + return baseDelay(func, toNumber(wait) || 0, args); + }); + + /** + * Creates a function that negates the result of the predicate `func`. The + * `func` predicate is invoked with the `this` binding and arguments of the + * created function. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} predicate The predicate to negate. + * @returns {Function} Returns the new negated function. + * @example + * + * function isEven(n) { + * return n % 2 == 0; + * } + * + * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); + * // => [1, 3, 5] + */ + function negate(predicate) { + if (typeof predicate != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function() { + var args = arguments; + return !predicate.apply(this, args); + }; + } + + /** + * Creates a function that is restricted to invoking `func` once. Repeat calls + * to the function return the value of the first invocation. The `func` is + * invoked with the `this` binding and arguments of the created function. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // => `createApplication` is invoked once + */ + function once(func) { + return before(2, func); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ + function clone(value) { + if (!isObject(value)) { + return value; + } + return isArray(value) ? copyArray(value) : copyObject(value, nativeKeys(value)); + } + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); + }; + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); + } + + /** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ + function isBoolean(value) { + return value === true || value === false || + (isObjectLike(value) && baseGetTag(value) == boolTag); + } + + /** + * Checks if `value` is classified as a `Date` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + * + * _.isDate('Mon April 23 2012'); + * // => false + */ + var isDate = baseIsDate; + + /** + * Checks if `value` is an empty object, collection, map, or set. + * + * Objects are considered empty if they have no own enumerable string keyed + * properties. + * + * Array-like values such as `arguments` objects, arrays, buffers, strings, or + * jQuery-like collections are considered empty if they have a `length` of `0`. + * Similarly, maps and sets are considered empty if they have a `size` of `0`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ + function isEmpty(value) { + if (isArrayLike(value) && + (isArray(value) || isString(value) || + isFunction(value.splice) || isArguments(value))) { + return !value.length; + } + return !nativeKeys(value).length; + } + + /** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are compared by strict equality, i.e. `===`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ + function isEqual(value, other) { + return baseIsEqual(value, other); + } + + /** + * Checks if `value` is a finite primitive number. + * + * **Note:** This method is based on + * [`Number.isFinite`](https://mdn.io/Number/isFinite). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. + * @example + * + * _.isFinite(3); + * // => true + * + * _.isFinite(Number.MIN_VALUE); + * // => true + * + * _.isFinite(Infinity); + * // => false + * + * _.isFinite('3'); + * // => false + */ + function isFinite(value) { + return typeof value == 'number' && nativeIsFinite(value); + } + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; + } + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); + } + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + /** + * Checks if `value` is `NaN`. + * + * **Note:** This method is based on + * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as + * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for + * `undefined` and other non-number values. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */ + function isNaN(value) { + // An `NaN` primitive is the only value that is not equal to itself. + // Perform the `toStringTag` check first to avoid errors with some + // ActiveX objects in IE. + return isNumber(value) && value != +value; + } + + /** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(void 0); + * // => false + */ + function isNull(value) { + return value === null; + } + + /** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are + * classified as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a number, else `false`. + * @example + * + * _.isNumber(3); + * // => true + * + * _.isNumber(Number.MIN_VALUE); + * // => true + * + * _.isNumber(Infinity); + * // => true + * + * _.isNumber('3'); + * // => false + */ + function isNumber(value) { + return typeof value == 'number' || + (isObjectLike(value) && baseGetTag(value) == numberTag); + } + + /** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ + var isRegExp = baseIsRegExp; + + /** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ + function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); + } + + /** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ + function isUndefined(value) { + return value === undefined; + } + + /** + * Converts `value` to an array. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Array} Returns the converted array. + * @example + * + * _.toArray({ 'a': 1, 'b': 2 }); + * // => [1, 2] + * + * _.toArray('abc'); + * // => ['a', 'b', 'c'] + * + * _.toArray(1); + * // => [] + * + * _.toArray(null); + * // => [] + */ + function toArray(value) { + if (!isArrayLike(value)) { + return values(value); + } + return value.length ? copyArray(value) : []; + } + + /** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ + var toInteger = Number; + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ + var toNumber = Number; + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + if (typeof value == 'string') { + return value; + } + return value == null ? '' : (value + ''); + } + + /*------------------------------------------------------------------------*/ + + /** + * Assigns own enumerable string keyed properties of source objects to the + * destination object. Source objects are applied from left to right. + * Subsequent sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object` and is loosely based on + * [`Object.assign`](https://mdn.io/Object/assign). + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assignIn + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assign({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'c': 3 } + */ + var assign = createAssigner(function(object, source) { + copyObject(source, nativeKeys(source), object); + }); + + /** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assign + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assignIn({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } + */ + var assignIn = createAssigner(function(object, source) { + copyObject(source, nativeKeysIn(source), object); + }); + + /** + * Creates an object that inherits from the `prototype` object. If a + * `properties` object is given, its own enumerable string keyed properties + * are assigned to the created object. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ + function create(prototype, properties) { + var result = baseCreate(prototype); + return properties == null ? result : assign(result, properties); + } + + /** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var defaults = baseRest(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = keysIn(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; + }); + + /** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ + function has(object, path) { + return object != null && hasOwnProperty.call(object, path); + } + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + var keys = nativeKeys; + + /** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ + var keysIn = nativeKeysIn; + + /** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ + var pick = flatRest(function(object, paths) { + return object == null ? {} : basePick(object, paths); + }); + + /** + * This method is like `_.get` except that if the resolved value is a + * function it's invoked with the `this` binding of its parent object and + * its result is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to resolve. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; + * + * _.result(object, 'a[0].b.c1'); + * // => 3 + * + * _.result(object, 'a[0].b.c2'); + * // => 4 + * + * _.result(object, 'a[0].b.c3', 'default'); + * // => 'default' + * + * _.result(object, 'a[0].b.c3', _.constant('default')); + * // => 'default' + */ + function result(object, path, defaultValue) { + var value = object == null ? undefined : object[path]; + if (value === undefined) { + value = defaultValue; + } + return isFunction(value) ? value.call(object) : value; + } + + /** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ + function values(object) { + return object == null ? [] : baseValues(object, keys(object)); + } + + /*------------------------------------------------------------------------*/ + + /** + * Converts the characters "&", "<", ">", '"', and "'" in `string` to their + * corresponding HTML entities. + * + * **Note:** No other characters are escaped. To escape additional + * characters use a third-party library like [_he_](https://mths.be/he). + * + * Though the ">" character is escaped for symmetry, characters like + * ">" and "/" don't need escaping in HTML and have no special meaning + * unless they're part of a tag or unquoted attribute value. See + * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) + * (under "semi-related fun fact") for more details. + * + * When working with HTML you should always + * [quote attribute values](http://wonko.com/post/html-escaping) to reduce + * XSS vectors. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ + function escape(string) { + string = toString(string); + return (string && reHasUnescapedHtml.test(string)) + ? string.replace(reUnescapedHtml, escapeHtmlChar) + : string; + } + + /*------------------------------------------------------------------------*/ + + /** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ + function identity(value) { + return value; + } + + /** + * Creates a function that invokes `func` with the arguments of the created + * function. If `func` is a property name, the created function returns the + * property value for a given element. If `func` is an array or object, the + * created function returns `true` for elements that contain the equivalent + * source properties, otherwise it returns `false`. + * + * @static + * @since 4.0.0 + * @memberOf _ + * @category Util + * @param {*} [func=_.identity] The value to convert to a callback. + * @returns {Function} Returns the callback. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true })); + * // => [{ 'user': 'barney', 'age': 36, 'active': true }] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, _.iteratee(['user', 'fred'])); + * // => [{ 'user': 'fred', 'age': 40 }] + * + * // The `_.property` iteratee shorthand. + * _.map(users, _.iteratee('user')); + * // => ['barney', 'fred'] + * + * // Create custom iteratee shorthands. + * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) { + * return !_.isRegExp(func) ? iteratee(func) : function(string) { + * return func.test(string); + * }; + * }); + * + * _.filter(['abc', 'def'], /ef/); + * // => ['def'] + */ + var iteratee = baseIteratee; + + /** + * Creates a function that performs a partial deep comparison between a given + * object and `source`, returning `true` if the given object has equivalent + * property values, else `false`. + * + * **Note:** The created function is equivalent to `_.isMatch` with `source` + * partially applied. + * + * Partial comparisons will match empty array and empty object `source` + * values against any array or object value, respectively. See `_.isEqual` + * for a list of supported value comparisons. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Util + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + * @example + * + * var objects = [ + * { 'a': 1, 'b': 2, 'c': 3 }, + * { 'a': 4, 'b': 5, 'c': 6 } + * ]; + * + * _.filter(objects, _.matches({ 'a': 4, 'c': 6 })); + * // => [{ 'a': 4, 'b': 5, 'c': 6 }] + */ + function matches(source) { + return baseMatches(assign({}, source)); + } + + /** + * Adds all own enumerable string keyed function properties of a source + * object to the destination object. If `object` is a function, then methods + * are added to its prototype as well. + * + * **Note:** Use `_.runInContext` to create a pristine `lodash` function to + * avoid conflicts caused by modifying the original. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {Function|Object} [object=lodash] The destination object. + * @param {Object} source The object of functions to add. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.chain=true] Specify whether mixins are chainable. + * @returns {Function|Object} Returns `object`. + * @example + * + * function vowels(string) { + * return _.filter(string, function(v) { + * return /[aeiou]/i.test(v); + * }); + * } + * + * _.mixin({ 'vowels': vowels }); + * _.vowels('fred'); + * // => ['e'] + * + * _('fred').vowels().value(); + * // => ['e'] + * + * _.mixin({ 'vowels': vowels }, { 'chain': false }); + * _('fred').vowels(); + * // => ['e'] + */ + function mixin(object, source, options) { + var props = keys(source), + methodNames = baseFunctions(source, props); + + if (options == null && + !(isObject(source) && (methodNames.length || !props.length))) { + options = source; + source = object; + object = this; + methodNames = baseFunctions(source, keys(source)); + } + var chain = !(isObject(options) && 'chain' in options) || !!options.chain, + isFunc = isFunction(object); + + baseEach(methodNames, function(methodName) { + var func = source[methodName]; + object[methodName] = func; + if (isFunc) { + object.prototype[methodName] = function() { + var chainAll = this.__chain__; + if (chain || chainAll) { + var result = object(this.__wrapped__), + actions = result.__actions__ = copyArray(this.__actions__); + + actions.push({ 'func': func, 'args': arguments, 'thisArg': object }); + result.__chain__ = chainAll; + return result; + } + return func.apply(object, arrayPush([this.value()], arguments)); + }; + } + }); + + return object; + } + + /** + * Reverts the `_` variable to its previous value and returns a reference to + * the `lodash` function. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @returns {Function} Returns the `lodash` function. + * @example + * + * var lodash = _.noConflict(); + */ + function noConflict() { + if (root._ === this) { + root._ = oldDash; + } + return this; + } + + /** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ + function noop() { + // No operation performed. + } + + /** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ + function uniqueId(prefix) { + var id = ++idCounter; + return toString(prefix) + id; + } + + /*------------------------------------------------------------------------*/ + + /** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ + function max(array) { + return (array && array.length) + ? baseExtremum(array, identity, baseGt) + : undefined; + } + + /** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ + function min(array) { + return (array && array.length) + ? baseExtremum(array, identity, baseLt) + : undefined; + } + + /*------------------------------------------------------------------------*/ + + // Add methods that return wrapped values in chain sequences. + lodash.assignIn = assignIn; + lodash.before = before; + lodash.bind = bind; + lodash.chain = chain; + lodash.compact = compact; + lodash.concat = concat; + lodash.create = create; + lodash.defaults = defaults; + lodash.defer = defer; + lodash.delay = delay; + lodash.filter = filter; + lodash.flatten = flatten; + lodash.flattenDeep = flattenDeep; + lodash.iteratee = iteratee; + lodash.keys = keys; + lodash.map = map; + lodash.matches = matches; + lodash.mixin = mixin; + lodash.negate = negate; + lodash.once = once; + lodash.pick = pick; + lodash.slice = slice; + lodash.sortBy = sortBy; + lodash.tap = tap; + lodash.thru = thru; + lodash.toArray = toArray; + lodash.values = values; + + // Add aliases. + lodash.extend = assignIn; + + // Add methods to `lodash.prototype`. + mixin(lodash, lodash); + + /*------------------------------------------------------------------------*/ + + // Add methods that return unwrapped values in chain sequences. + lodash.clone = clone; + lodash.escape = escape; + lodash.every = every; + lodash.find = find; + lodash.forEach = forEach; + lodash.has = has; + lodash.head = head; + lodash.identity = identity; + lodash.indexOf = indexOf; + lodash.isArguments = isArguments; + lodash.isArray = isArray; + lodash.isBoolean = isBoolean; + lodash.isDate = isDate; + lodash.isEmpty = isEmpty; + lodash.isEqual = isEqual; + lodash.isFinite = isFinite; + lodash.isFunction = isFunction; + lodash.isNaN = isNaN; + lodash.isNull = isNull; + lodash.isNumber = isNumber; + lodash.isObject = isObject; + lodash.isRegExp = isRegExp; + lodash.isString = isString; + lodash.isUndefined = isUndefined; + lodash.last = last; + lodash.max = max; + lodash.min = min; + lodash.noConflict = noConflict; + lodash.noop = noop; + lodash.reduce = reduce; + lodash.result = result; + lodash.size = size; + lodash.some = some; + lodash.uniqueId = uniqueId; + + // Add aliases. + lodash.each = forEach; + lodash.first = head; + + mixin(lodash, (function() { + var source = {}; + baseForOwn(lodash, function(func, methodName) { + if (!hasOwnProperty.call(lodash.prototype, methodName)) { + source[methodName] = func; + } + }); + return source; + }()), { 'chain': false }); + + /*------------------------------------------------------------------------*/ + + /** + * The semantic version number. + * + * @static + * @memberOf _ + * @type {string} + */ + lodash.VERSION = VERSION; + + // Add `Array` methods to `lodash.prototype`. + baseEach(['pop', 'join', 'replace', 'reverse', 'split', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) { + var func = (/^(?:replace|split)$/.test(methodName) ? String.prototype : arrayProto)[methodName], + chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru', + retUnwrapped = /^(?:pop|join|replace|shift)$/.test(methodName); + + lodash.prototype[methodName] = function() { + var args = arguments; + if (retUnwrapped && !this.__chain__) { + var value = this.value(); + return func.apply(isArray(value) ? value : [], args); + } + return this[chainName](function(value) { + return func.apply(isArray(value) ? value : [], args); + }); + }; + }); + + // Add chain sequence methods to the `lodash` wrapper. + lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue; + + /*--------------------------------------------------------------------------*/ + + // Some AMD build optimizers, like r.js, check for condition patterns like: + if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) { + // Expose Lodash on the global object to prevent errors when Lodash is + // loaded by a script tag in the presence of an AMD loader. + // See http://requirejs.org/docs/errors.html#mismatch for more details. + // Use `_.noConflict` to remove Lodash from the global object. + root._ = lodash; + + // Define as an anonymous module so, through path mapping, it can be + // referenced as the "underscore" module. + define(function() { + return lodash; + }); + } + // Check for `exports` after `define` in case a build optimizer adds it. + else if (freeModule) { + // Export for Node.js. + (freeModule.exports = lodash)._ = lodash; + // Export for CommonJS support. + freeExports._ = lodash; + } + else { + // Export to the global object. + root._ = lodash; + } +}.call(this)); diff --git a/node_modules/strong-soap/node_modules/lodash/core.min.js b/node_modules/strong-soap/node_modules/lodash/core.min.js new file mode 100644 index 00000000..bd1e5453 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/core.min.js @@ -0,0 +1,29 @@ +/** + * @license + * Lodash (Custom Build) lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE + * Build: `lodash core -o ./dist/lodash.core.js` + */ +;(function(){function n(n){return H(n)&&pn.call(n,"callee")&&!yn.call(n,"callee")}function t(n,t){return n.push.apply(n,t),n}function r(n){return function(t){return null==t?Z:t[n]}}function e(n,t,r,e,u){return u(n,function(n,u,o){r=e?(e=false,n):t(r,n,u,o)}),r}function u(n,t){return j(t,function(t){return n[t]})}function o(n){return n instanceof i?n:new i(n)}function i(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t}function c(n,t,r){if(typeof n!="function")throw new TypeError("Expected a function"); +return setTimeout(function(){n.apply(Z,r)},t)}function f(n,t){var r=true;return mn(n,function(n,e,u){return r=!!t(n,e,u)}),r}function a(n,t,r){for(var e=-1,u=n.length;++et}function b(n,t,r,e,u){return n===t||(null==n||null==t||!H(n)&&!H(t)?n!==n&&t!==t:y(n,t,r,e,b,u))}function y(n,t,r,e,u,o){var i=Nn(n),c=Nn(t),f=i?"[object Array]":hn.call(n),a=c?"[object Array]":hn.call(t),f="[object Arguments]"==f?"[object Object]":f,a="[object Arguments]"==a?"[object Object]":a,l="[object Object]"==f,c="[object Object]"==a,a=f==a;o||(o=[]);var p=An(o,function(t){return t[0]==n}),s=An(o,function(n){ +return n[0]==t});if(p&&s)return p[1]==t;if(o.push([n,t]),o.push([t,n]),a&&!l){if(i)r=T(n,t,r,e,u,o);else n:{switch(f){case"[object Boolean]":case"[object Date]":case"[object Number]":r=J(+n,+t);break n;case"[object Error]":r=n.name==t.name&&n.message==t.message;break n;case"[object RegExp]":case"[object String]":r=n==t+"";break n}r=false}return o.pop(),r}return 1&r||(i=l&&pn.call(n,"__wrapped__"),f=c&&pn.call(t,"__wrapped__"),!i&&!f)?!!a&&(r=B(n,t,r,e,u,o),o.pop(),r):(i=i?n.value():n,f=f?t.value():t, +r=u(i,f,r,e,o),o.pop(),r)}function g(n){return typeof n=="function"?n:null==n?X:(typeof n=="object"?d:r)(n)}function _(n,t){return nt&&(t=-t>u?0:u+t),r=r>u?u:r,0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=Array(u);++ei))return false;for(var c=-1,f=true,a=2&r?[]:Z;++cr?jn(e+r,0):r:0,r=(r||0)-1;for(var u=t===t;++rarguments.length,mn)}function G(n,t){var r;if(typeof t!="function")throw new TypeError("Expected a function");return n=Fn(n), +function(){return 0<--n&&(r=t.apply(this,arguments)),1>=n&&(t=Z),r}}function J(n,t){return n===t||n!==n&&t!==t}function M(n){var t;return(t=null!=n)&&(t=n.length,t=typeof t=="number"&&-1=t),t&&!U(n)}function U(n){return!!V(n)&&(n=hn.call(n),"[object Function]"==n||"[object GeneratorFunction]"==n||"[object AsyncFunction]"==n||"[object Proxy]"==n)}function V(n){var t=typeof n;return null!=n&&("object"==t||"function"==t)}function H(n){return null!=n&&typeof n=="object"}function K(n){ +return typeof n=="number"||H(n)&&"[object Number]"==hn.call(n)}function L(n){return typeof n=="string"||!Nn(n)&&H(n)&&"[object String]"==hn.call(n)}function Q(n){return typeof n=="string"?n:null==n?"":n+""}function W(n){return null==n?[]:u(n,Dn(n))}function X(n){return n}function Y(n,r,e){var u=Dn(r),o=h(r,u);null!=e||V(r)&&(o.length||!u.length)||(e=r,r=n,n=this,o=h(r,Dn(r)));var i=!(V(e)&&"chain"in e&&!e.chain),c=U(n);return mn(o,function(e){var u=r[e];n[e]=u,c&&(n.prototype[e]=function(){var r=this.__chain__; +if(i||r){var e=n(this.__wrapped__);return(e.__actions__=A(this.__actions__)).push({func:u,args:arguments,thisArg:n}),e.__chain__=r,e}return u.apply(n,t([this.value()],arguments))})}),n}var Z,nn=1/0,tn=/[&<>"']/g,rn=RegExp(tn.source),en=/^(?:0|[1-9]\d*)$/,un=typeof self=="object"&&self&&self.Object===Object&&self,on=typeof global=="object"&&global&&global.Object===Object&&global||un||Function("return this")(),cn=(un=typeof exports=="object"&&exports&&!exports.nodeType&&exports)&&typeof module=="object"&&module&&!module.nodeType&&module,fn=function(n){ +return function(t){return null==n?Z:n[t]}}({"&":"&","<":"<",">":">",'"':""","'":"'"}),an=Array.prototype,ln=Object.prototype,pn=ln.hasOwnProperty,sn=0,hn=ln.toString,vn=on._,bn=Object.create,yn=ln.propertyIsEnumerable,gn=on.isFinite,_n=function(n,t){return function(r){return n(t(r))}}(Object.keys,Object),jn=Math.max,dn=function(){function n(){}return function(t){return V(t)?bn?bn(t):(n.prototype=t,t=new n,n.prototype=Z,t):{}}}();i.prototype=dn(o.prototype),i.prototype.constructor=i; +var mn=function(n,t){return function(r,e){if(null==r)return r;if(!M(r))return n(r,e);for(var u=r.length,o=t?u:-1,i=Object(r);(t?o--:++or&&(r=jn(e+r,0));n:{for(t=g(t),e=n.length,r+=-1;++re||o&&c&&a||!u&&a||!i){r=1;break n}if(!o&&r { '4': 1, '6': 2 } + * + * // The `_.property` iteratee shorthand. + * _.countBy(['one', 'two', 'three'], 'length'); + * // => { '3': 2, '5': 1 } + */ +var countBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + ++result[key]; + } else { + baseAssignValue(result, key, 1); + } +}); + +module.exports = countBy; diff --git a/node_modules/strong-soap/node_modules/lodash/create.js b/node_modules/strong-soap/node_modules/lodash/create.js new file mode 100644 index 00000000..919edb85 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/create.js @@ -0,0 +1,43 @@ +var baseAssign = require('./_baseAssign'), + baseCreate = require('./_baseCreate'); + +/** + * Creates an object that inherits from the `prototype` object. If a + * `properties` object is given, its own enumerable string keyed properties + * are assigned to the created object. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ +function create(prototype, properties) { + var result = baseCreate(prototype); + return properties == null ? result : baseAssign(result, properties); +} + +module.exports = create; diff --git a/node_modules/strong-soap/node_modules/lodash/curry.js b/node_modules/strong-soap/node_modules/lodash/curry.js new file mode 100644 index 00000000..918db1a4 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/curry.js @@ -0,0 +1,57 @@ +var createWrap = require('./_createWrap'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_CURRY_FLAG = 8; + +/** + * Creates a function that accepts arguments of `func` and either invokes + * `func` returning its result, if at least `arity` number of arguments have + * been provided, or returns a function that accepts the remaining `func` + * arguments, and so on. The arity of `func` may be specified if `func.length` + * is not sufficient. + * + * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curry(abc); + * + * curried(1)(2)(3); + * // => [1, 2, 3] + * + * curried(1, 2)(3); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(1)(_, 3)(2); + * // => [1, 2, 3] + */ +function curry(func, arity, guard) { + arity = guard ? undefined : arity; + var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); + result.placeholder = curry.placeholder; + return result; +} + +// Assign default placeholders. +curry.placeholder = {}; + +module.exports = curry; diff --git a/node_modules/strong-soap/node_modules/lodash/curryRight.js b/node_modules/strong-soap/node_modules/lodash/curryRight.js new file mode 100644 index 00000000..c85b6f33 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/curryRight.js @@ -0,0 +1,54 @@ +var createWrap = require('./_createWrap'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_CURRY_RIGHT_FLAG = 16; + +/** + * This method is like `_.curry` except that arguments are applied to `func` + * in the manner of `_.partialRight` instead of `_.partial`. + * + * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curryRight(abc); + * + * curried(3)(2)(1); + * // => [1, 2, 3] + * + * curried(2, 3)(1); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(3)(1, _)(2); + * // => [1, 2, 3] + */ +function curryRight(func, arity, guard) { + arity = guard ? undefined : arity; + var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); + result.placeholder = curryRight.placeholder; + return result; +} + +// Assign default placeholders. +curryRight.placeholder = {}; + +module.exports = curryRight; diff --git a/node_modules/strong-soap/node_modules/lodash/date.js b/node_modules/strong-soap/node_modules/lodash/date.js new file mode 100644 index 00000000..cbf5b410 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/date.js @@ -0,0 +1,3 @@ +module.exports = { + 'now': require('./now') +}; diff --git a/node_modules/strong-soap/node_modules/lodash/debounce.js b/node_modules/strong-soap/node_modules/lodash/debounce.js new file mode 100644 index 00000000..205e49f3 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/debounce.js @@ -0,0 +1,190 @@ +var isObject = require('./isObject'), + now = require('./now'), + toNumber = require('./toNumber'); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, + nativeMin = Math.min; + +/** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide `options` to indicate whether `func` should be invoked on the + * leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent + * calls to the debounced function return the result of the last `func` + * invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the debounced function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=false] + * Specify invoking on the leading edge of the timeout. + * @param {number} [options.maxWait] + * The maximum time `func` is allowed to be delayed before it's invoked. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); + */ +function debounce(func, wait, options) { + var lastArgs, + lastThis, + maxWait, + result, + timerId, + lastCallTime, + lastInvokeTime = 0, + leading = false, + maxing = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + wait = toNumber(wait) || 0; + if (isObject(options)) { + leading = !!options.leading; + maxing = 'maxWait' in options; + maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function invokeFunc(time) { + var args = lastArgs, + thisArg = lastThis; + + lastArgs = lastThis = undefined; + lastInvokeTime = time; + result = func.apply(thisArg, args); + return result; + } + + function leadingEdge(time) { + // Reset any `maxWait` timer. + lastInvokeTime = time; + // Start the timer for the trailing edge. + timerId = setTimeout(timerExpired, wait); + // Invoke the leading edge. + return leading ? invokeFunc(time) : result; + } + + function remainingWait(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime, + timeWaiting = wait - timeSinceLastCall; + + return maxing + ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) + : timeWaiting; + } + + function shouldInvoke(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime; + + // Either this is the first call, activity has stopped and we're at the + // trailing edge, the system time has gone backwards and we're treating + // it as the trailing edge, or we've hit the `maxWait` limit. + return (lastCallTime === undefined || (timeSinceLastCall >= wait) || + (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); + } + + function timerExpired() { + var time = now(); + if (shouldInvoke(time)) { + return trailingEdge(time); + } + // Restart the timer. + timerId = setTimeout(timerExpired, remainingWait(time)); + } + + function trailingEdge(time) { + timerId = undefined; + + // Only invoke if we have `lastArgs` which means `func` has been + // debounced at least once. + if (trailing && lastArgs) { + return invokeFunc(time); + } + lastArgs = lastThis = undefined; + return result; + } + + function cancel() { + if (timerId !== undefined) { + clearTimeout(timerId); + } + lastInvokeTime = 0; + lastArgs = lastCallTime = lastThis = timerId = undefined; + } + + function flush() { + return timerId === undefined ? result : trailingEdge(now()); + } + + function debounced() { + var time = now(), + isInvoking = shouldInvoke(time); + + lastArgs = arguments; + lastThis = this; + lastCallTime = time; + + if (isInvoking) { + if (timerId === undefined) { + return leadingEdge(lastCallTime); + } + if (maxing) { + // Handle invocations in a tight loop. + timerId = setTimeout(timerExpired, wait); + return invokeFunc(lastCallTime); + } + } + if (timerId === undefined) { + timerId = setTimeout(timerExpired, wait); + } + return result; + } + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; +} + +module.exports = debounce; diff --git a/node_modules/strong-soap/node_modules/lodash/deburr.js b/node_modules/strong-soap/node_modules/lodash/deburr.js new file mode 100644 index 00000000..f85e314a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/deburr.js @@ -0,0 +1,45 @@ +var deburrLetter = require('./_deburrLetter'), + toString = require('./toString'); + +/** Used to match Latin Unicode letters (excluding mathematical operators). */ +var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; + +/** Used to compose unicode character classes. */ +var rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange; + +/** Used to compose unicode capture groups. */ +var rsCombo = '[' + rsComboRange + ']'; + +/** + * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and + * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). + */ +var reComboMark = RegExp(rsCombo, 'g'); + +/** + * Deburrs `string` by converting + * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) + * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) + * letters to basic Latin letters and removing + * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to deburr. + * @returns {string} Returns the deburred string. + * @example + * + * _.deburr('déjà vu'); + * // => 'deja vu' + */ +function deburr(string) { + string = toString(string); + return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); +} + +module.exports = deburr; diff --git a/node_modules/strong-soap/node_modules/lodash/defaultTo.js b/node_modules/strong-soap/node_modules/lodash/defaultTo.js new file mode 100644 index 00000000..5b333592 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/defaultTo.js @@ -0,0 +1,25 @@ +/** + * Checks `value` to determine whether a default value should be returned in + * its place. The `defaultValue` is returned if `value` is `NaN`, `null`, + * or `undefined`. + * + * @static + * @memberOf _ + * @since 4.14.0 + * @category Util + * @param {*} value The value to check. + * @param {*} defaultValue The default value. + * @returns {*} Returns the resolved value. + * @example + * + * _.defaultTo(1, 10); + * // => 1 + * + * _.defaultTo(undefined, 10); + * // => 10 + */ +function defaultTo(value, defaultValue) { + return (value == null || value !== value) ? defaultValue : value; +} + +module.exports = defaultTo; diff --git a/node_modules/strong-soap/node_modules/lodash/defaults.js b/node_modules/strong-soap/node_modules/lodash/defaults.js new file mode 100644 index 00000000..c74df044 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/defaults.js @@ -0,0 +1,64 @@ +var baseRest = require('./_baseRest'), + eq = require('./eq'), + isIterateeCall = require('./_isIterateeCall'), + keysIn = require('./keysIn'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var defaults = baseRest(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = keysIn(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +module.exports = defaults; diff --git a/node_modules/strong-soap/node_modules/lodash/defaultsDeep.js b/node_modules/strong-soap/node_modules/lodash/defaultsDeep.js new file mode 100644 index 00000000..9b5fa3ee --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/defaultsDeep.js @@ -0,0 +1,30 @@ +var apply = require('./_apply'), + baseRest = require('./_baseRest'), + customDefaultsMerge = require('./_customDefaultsMerge'), + mergeWith = require('./mergeWith'); + +/** + * This method is like `_.defaults` except that it recursively assigns + * default properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaults + * @example + * + * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); + * // => { 'a': { 'b': 2, 'c': 3 } } + */ +var defaultsDeep = baseRest(function(args) { + args.push(undefined, customDefaultsMerge); + return apply(mergeWith, undefined, args); +}); + +module.exports = defaultsDeep; diff --git a/node_modules/strong-soap/node_modules/lodash/defer.js b/node_modules/strong-soap/node_modules/lodash/defer.js new file mode 100644 index 00000000..f6d6c6fa --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/defer.js @@ -0,0 +1,26 @@ +var baseDelay = require('./_baseDelay'), + baseRest = require('./_baseRest'); + +/** + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { + * console.log(text); + * }, 'deferred'); + * // => Logs 'deferred' after one millisecond. + */ +var defer = baseRest(function(func, args) { + return baseDelay(func, 1, args); +}); + +module.exports = defer; diff --git a/node_modules/strong-soap/node_modules/lodash/delay.js b/node_modules/strong-soap/node_modules/lodash/delay.js new file mode 100644 index 00000000..bd554796 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/delay.js @@ -0,0 +1,28 @@ +var baseDelay = require('./_baseDelay'), + baseRest = require('./_baseRest'), + toNumber = require('./toNumber'); + +/** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => Logs 'later' after one second. + */ +var delay = baseRest(function(func, wait, args) { + return baseDelay(func, toNumber(wait) || 0, args); +}); + +module.exports = delay; diff --git a/node_modules/strong-soap/node_modules/lodash/difference.js b/node_modules/strong-soap/node_modules/lodash/difference.js new file mode 100644 index 00000000..fa28bb30 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/difference.js @@ -0,0 +1,33 @@ +var baseDifference = require('./_baseDifference'), + baseFlatten = require('./_baseFlatten'), + baseRest = require('./_baseRest'), + isArrayLikeObject = require('./isArrayLikeObject'); + +/** + * Creates an array of `array` values not included in the other given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * **Note:** Unlike `_.pullAll`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.without, _.xor + * @example + * + * _.difference([2, 1], [2, 3]); + * // => [1] + */ +var difference = baseRest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) + : []; +}); + +module.exports = difference; diff --git a/node_modules/strong-soap/node_modules/lodash/differenceBy.js b/node_modules/strong-soap/node_modules/lodash/differenceBy.js new file mode 100644 index 00000000..2cd63e7e --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/differenceBy.js @@ -0,0 +1,44 @@ +var baseDifference = require('./_baseDifference'), + baseFlatten = require('./_baseFlatten'), + baseIteratee = require('./_baseIteratee'), + baseRest = require('./_baseRest'), + isArrayLikeObject = require('./isArrayLikeObject'), + last = require('./last'); + +/** + * This method is like `_.difference` except that it accepts `iteratee` which + * is invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * **Note:** Unlike `_.pullAllBy`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2] + * + * // The `_.property` iteratee shorthand. + * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ +var differenceBy = baseRest(function(array, values) { + var iteratee = last(values); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), baseIteratee(iteratee, 2)) + : []; +}); + +module.exports = differenceBy; diff --git a/node_modules/strong-soap/node_modules/lodash/differenceWith.js b/node_modules/strong-soap/node_modules/lodash/differenceWith.js new file mode 100644 index 00000000..c0233f4b --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/differenceWith.js @@ -0,0 +1,40 @@ +var baseDifference = require('./_baseDifference'), + baseFlatten = require('./_baseFlatten'), + baseRest = require('./_baseRest'), + isArrayLikeObject = require('./isArrayLikeObject'), + last = require('./last'); + +/** + * This method is like `_.difference` except that it accepts `comparator` + * which is invoked to compare elements of `array` to `values`. The order and + * references of result values are determined by the first array. The comparator + * is invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.pullAllWith`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * + * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); + * // => [{ 'x': 2, 'y': 1 }] + */ +var differenceWith = baseRest(function(array, values) { + var comparator = last(values); + if (isArrayLikeObject(comparator)) { + comparator = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) + : []; +}); + +module.exports = differenceWith; diff --git a/node_modules/strong-soap/node_modules/lodash/divide.js b/node_modules/strong-soap/node_modules/lodash/divide.js new file mode 100644 index 00000000..8cae0cd1 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/divide.js @@ -0,0 +1,22 @@ +var createMathOperation = require('./_createMathOperation'); + +/** + * Divide two numbers. + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Math + * @param {number} dividend The first number in a division. + * @param {number} divisor The second number in a division. + * @returns {number} Returns the quotient. + * @example + * + * _.divide(6, 4); + * // => 1.5 + */ +var divide = createMathOperation(function(dividend, divisor) { + return dividend / divisor; +}, 1); + +module.exports = divide; diff --git a/node_modules/strong-soap/node_modules/lodash/drop.js b/node_modules/strong-soap/node_modules/lodash/drop.js new file mode 100644 index 00000000..d5c3cbaa --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/drop.js @@ -0,0 +1,38 @@ +var baseSlice = require('./_baseSlice'), + toInteger = require('./toInteger'); + +/** + * Creates a slice of `array` with `n` elements dropped from the beginning. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.drop([1, 2, 3]); + * // => [2, 3] + * + * _.drop([1, 2, 3], 2); + * // => [3] + * + * _.drop([1, 2, 3], 5); + * // => [] + * + * _.drop([1, 2, 3], 0); + * // => [1, 2, 3] + */ +function drop(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, n < 0 ? 0 : n, length); +} + +module.exports = drop; diff --git a/node_modules/strong-soap/node_modules/lodash/dropRight.js b/node_modules/strong-soap/node_modules/lodash/dropRight.js new file mode 100644 index 00000000..441fe996 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/dropRight.js @@ -0,0 +1,39 @@ +var baseSlice = require('./_baseSlice'), + toInteger = require('./toInteger'); + +/** + * Creates a slice of `array` with `n` elements dropped from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRight([1, 2, 3]); + * // => [1, 2] + * + * _.dropRight([1, 2, 3], 2); + * // => [1] + * + * _.dropRight([1, 2, 3], 5); + * // => [] + * + * _.dropRight([1, 2, 3], 0); + * // => [1, 2, 3] + */ +function dropRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, 0, n < 0 ? 0 : n); +} + +module.exports = dropRight; diff --git a/node_modules/strong-soap/node_modules/lodash/dropRightWhile.js b/node_modules/strong-soap/node_modules/lodash/dropRightWhile.js new file mode 100644 index 00000000..9ad36a04 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/dropRightWhile.js @@ -0,0 +1,45 @@ +var baseIteratee = require('./_baseIteratee'), + baseWhile = require('./_baseWhile'); + +/** + * Creates a slice of `array` excluding elements dropped from the end. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.dropRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney'] + * + * // The `_.matches` iteratee shorthand. + * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropRightWhile(users, ['active', false]); + * // => objects for ['barney'] + * + * // The `_.property` iteratee shorthand. + * _.dropRightWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ +function dropRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, baseIteratee(predicate, 3), true, true) + : []; +} + +module.exports = dropRightWhile; diff --git a/node_modules/strong-soap/node_modules/lodash/dropWhile.js b/node_modules/strong-soap/node_modules/lodash/dropWhile.js new file mode 100644 index 00000000..903ef568 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/dropWhile.js @@ -0,0 +1,45 @@ +var baseIteratee = require('./_baseIteratee'), + baseWhile = require('./_baseWhile'); + +/** + * Creates a slice of `array` excluding elements dropped from the beginning. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.dropWhile(users, function(o) { return !o.active; }); + * // => objects for ['pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.dropWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropWhile(users, ['active', false]); + * // => objects for ['pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.dropWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ +function dropWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, baseIteratee(predicate, 3), true) + : []; +} + +module.exports = dropWhile; diff --git a/node_modules/strong-soap/node_modules/lodash/each.js b/node_modules/strong-soap/node_modules/lodash/each.js new file mode 100644 index 00000000..8800f420 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/each.js @@ -0,0 +1 @@ +module.exports = require('./forEach'); diff --git a/node_modules/strong-soap/node_modules/lodash/eachRight.js b/node_modules/strong-soap/node_modules/lodash/eachRight.js new file mode 100644 index 00000000..3252b2ab --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/eachRight.js @@ -0,0 +1 @@ +module.exports = require('./forEachRight'); diff --git a/node_modules/strong-soap/node_modules/lodash/endsWith.js b/node_modules/strong-soap/node_modules/lodash/endsWith.js new file mode 100644 index 00000000..76fc866e --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/endsWith.js @@ -0,0 +1,43 @@ +var baseClamp = require('./_baseClamp'), + baseToString = require('./_baseToString'), + toInteger = require('./toInteger'), + toString = require('./toString'); + +/** + * Checks if `string` ends with the given target string. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to inspect. + * @param {string} [target] The string to search for. + * @param {number} [position=string.length] The position to search up to. + * @returns {boolean} Returns `true` if `string` ends with `target`, + * else `false`. + * @example + * + * _.endsWith('abc', 'c'); + * // => true + * + * _.endsWith('abc', 'b'); + * // => false + * + * _.endsWith('abc', 'b', 2); + * // => true + */ +function endsWith(string, target, position) { + string = toString(string); + target = baseToString(target); + + var length = string.length; + position = position === undefined + ? length + : baseClamp(toInteger(position), 0, length); + + var end = position; + position -= target.length; + return position >= 0 && string.slice(position, end) == target; +} + +module.exports = endsWith; diff --git a/node_modules/strong-soap/node_modules/lodash/entries.js b/node_modules/strong-soap/node_modules/lodash/entries.js new file mode 100644 index 00000000..7a88df20 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/entries.js @@ -0,0 +1 @@ +module.exports = require('./toPairs'); diff --git a/node_modules/strong-soap/node_modules/lodash/entriesIn.js b/node_modules/strong-soap/node_modules/lodash/entriesIn.js new file mode 100644 index 00000000..f6c6331c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/entriesIn.js @@ -0,0 +1 @@ +module.exports = require('./toPairsIn'); diff --git a/node_modules/strong-soap/node_modules/lodash/eq.js b/node_modules/strong-soap/node_modules/lodash/eq.js new file mode 100644 index 00000000..a9406880 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/eq.js @@ -0,0 +1,37 @@ +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || (value !== value && other !== other); +} + +module.exports = eq; diff --git a/node_modules/strong-soap/node_modules/lodash/escape.js b/node_modules/strong-soap/node_modules/lodash/escape.js new file mode 100644 index 00000000..9247e002 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/escape.js @@ -0,0 +1,43 @@ +var escapeHtmlChar = require('./_escapeHtmlChar'), + toString = require('./toString'); + +/** Used to match HTML entities and HTML characters. */ +var reUnescapedHtml = /[&<>"']/g, + reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + +/** + * Converts the characters "&", "<", ">", '"', and "'" in `string` to their + * corresponding HTML entities. + * + * **Note:** No other characters are escaped. To escape additional + * characters use a third-party library like [_he_](https://mths.be/he). + * + * Though the ">" character is escaped for symmetry, characters like + * ">" and "/" don't need escaping in HTML and have no special meaning + * unless they're part of a tag or unquoted attribute value. See + * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) + * (under "semi-related fun fact") for more details. + * + * When working with HTML you should always + * [quote attribute values](http://wonko.com/post/html-escaping) to reduce + * XSS vectors. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ +function escape(string) { + string = toString(string); + return (string && reHasUnescapedHtml.test(string)) + ? string.replace(reUnescapedHtml, escapeHtmlChar) + : string; +} + +module.exports = escape; diff --git a/node_modules/strong-soap/node_modules/lodash/escapeRegExp.js b/node_modules/strong-soap/node_modules/lodash/escapeRegExp.js new file mode 100644 index 00000000..0a58c69f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/escapeRegExp.js @@ -0,0 +1,32 @@ +var toString = require('./toString'); + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, + reHasRegExpChar = RegExp(reRegExpChar.source); + +/** + * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", + * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escapeRegExp('[lodash](https://lodash.com/)'); + * // => '\[lodash\]\(https://lodash\.com/\)' + */ +function escapeRegExp(string) { + string = toString(string); + return (string && reHasRegExpChar.test(string)) + ? string.replace(reRegExpChar, '\\$&') + : string; +} + +module.exports = escapeRegExp; diff --git a/node_modules/strong-soap/node_modules/lodash/every.js b/node_modules/strong-soap/node_modules/lodash/every.js new file mode 100644 index 00000000..25080dac --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/every.js @@ -0,0 +1,56 @@ +var arrayEvery = require('./_arrayEvery'), + baseEvery = require('./_baseEvery'), + baseIteratee = require('./_baseIteratee'), + isArray = require('./isArray'), + isIterateeCall = require('./_isIterateeCall'); + +/** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * Iteration is stopped once `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * **Note:** This method returns `true` for + * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because + * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of + * elements of empty collections. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.every(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.every(users, 'active'); + * // => false + */ +function every(collection, predicate, guard) { + var func = isArray(collection) ? arrayEvery : baseEvery; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined; + } + return func(collection, baseIteratee(predicate, 3)); +} + +module.exports = every; diff --git a/node_modules/strong-soap/node_modules/lodash/extend.js b/node_modules/strong-soap/node_modules/lodash/extend.js new file mode 100644 index 00000000..e00166c2 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/extend.js @@ -0,0 +1 @@ +module.exports = require('./assignIn'); diff --git a/node_modules/strong-soap/node_modules/lodash/extendWith.js b/node_modules/strong-soap/node_modules/lodash/extendWith.js new file mode 100644 index 00000000..dbdcb3b4 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/extendWith.js @@ -0,0 +1 @@ +module.exports = require('./assignInWith'); diff --git a/node_modules/strong-soap/node_modules/lodash/fill.js b/node_modules/strong-soap/node_modules/lodash/fill.js new file mode 100644 index 00000000..ae13aa1c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fill.js @@ -0,0 +1,45 @@ +var baseFill = require('./_baseFill'), + isIterateeCall = require('./_isIterateeCall'); + +/** + * Fills elements of `array` with `value` from `start` up to, but not + * including, `end`. + * + * **Note:** This method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Array + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.fill(array, 'a'); + * console.log(array); + * // => ['a', 'a', 'a'] + * + * _.fill(Array(3), 2); + * // => [2, 2, 2] + * + * _.fill([4, 6, 8, 10], '*', 1, 3); + * // => [4, '*', '*', 10] + */ +function fill(array, value, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { + start = 0; + end = length; + } + return baseFill(array, value, start, end); +} + +module.exports = fill; diff --git a/node_modules/strong-soap/node_modules/lodash/filter.js b/node_modules/strong-soap/node_modules/lodash/filter.js new file mode 100644 index 00000000..52616be8 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/filter.js @@ -0,0 +1,48 @@ +var arrayFilter = require('./_arrayFilter'), + baseFilter = require('./_baseFilter'), + baseIteratee = require('./_baseIteratee'), + isArray = require('./isArray'); + +/** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + */ +function filter(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + return func(collection, baseIteratee(predicate, 3)); +} + +module.exports = filter; diff --git a/node_modules/strong-soap/node_modules/lodash/find.js b/node_modules/strong-soap/node_modules/lodash/find.js new file mode 100644 index 00000000..de732ccb --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/find.js @@ -0,0 +1,42 @@ +var createFind = require('./_createFind'), + findIndex = require('./findIndex'); + +/** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ +var find = createFind(findIndex); + +module.exports = find; diff --git a/node_modules/strong-soap/node_modules/lodash/findIndex.js b/node_modules/strong-soap/node_modules/lodash/findIndex.js new file mode 100644 index 00000000..4689069f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/findIndex.js @@ -0,0 +1,55 @@ +var baseFindIndex = require('./_baseFindIndex'), + baseIteratee = require('./_baseIteratee'), + toInteger = require('./toInteger'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ +function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseFindIndex(array, baseIteratee(predicate, 3), index); +} + +module.exports = findIndex; diff --git a/node_modules/strong-soap/node_modules/lodash/findKey.js b/node_modules/strong-soap/node_modules/lodash/findKey.js new file mode 100644 index 00000000..cac0248a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/findKey.js @@ -0,0 +1,44 @@ +var baseFindKey = require('./_baseFindKey'), + baseForOwn = require('./_baseForOwn'), + baseIteratee = require('./_baseIteratee'); + +/** + * This method is like `_.find` except that it returns the key of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Object + * @param {Object} object The object to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, + * else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findKey(users, function(o) { return o.age < 40; }); + * // => 'barney' (iteration order is not guaranteed) + * + * // The `_.matches` iteratee shorthand. + * _.findKey(users, { 'age': 1, 'active': true }); + * // => 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findKey(users, 'active'); + * // => 'barney' + */ +function findKey(object, predicate) { + return baseFindKey(object, baseIteratee(predicate, 3), baseForOwn); +} + +module.exports = findKey; diff --git a/node_modules/strong-soap/node_modules/lodash/findLast.js b/node_modules/strong-soap/node_modules/lodash/findLast.js new file mode 100644 index 00000000..70b4271d --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/findLast.js @@ -0,0 +1,25 @@ +var createFind = require('./_createFind'), + findLastIndex = require('./findLastIndex'); + +/** + * This method is like `_.find` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=collection.length-1] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * _.findLast([1, 2, 3, 4], function(n) { + * return n % 2 == 1; + * }); + * // => 3 + */ +var findLast = createFind(findLastIndex); + +module.exports = findLast; diff --git a/node_modules/strong-soap/node_modules/lodash/findLastIndex.js b/node_modules/strong-soap/node_modules/lodash/findLastIndex.js new file mode 100644 index 00000000..7da3431f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/findLastIndex.js @@ -0,0 +1,59 @@ +var baseFindIndex = require('./_baseFindIndex'), + baseIteratee = require('./_baseIteratee'), + toInteger = require('./toInteger'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, + nativeMin = Math.min; + +/** + * This method is like `_.findIndex` except that it iterates over elements + * of `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); + * // => 2 + * + * // The `_.matches` iteratee shorthand. + * _.findLastIndex(users, { 'user': 'barney', 'active': true }); + * // => 0 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastIndex(users, ['active', false]); + * // => 2 + * + * // The `_.property` iteratee shorthand. + * _.findLastIndex(users, 'active'); + * // => 0 + */ +function findLastIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length - 1; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = fromIndex < 0 + ? nativeMax(length + index, 0) + : nativeMin(index, length - 1); + } + return baseFindIndex(array, baseIteratee(predicate, 3), index, true); +} + +module.exports = findLastIndex; diff --git a/node_modules/strong-soap/node_modules/lodash/findLastKey.js b/node_modules/strong-soap/node_modules/lodash/findLastKey.js new file mode 100644 index 00000000..66fb9fbc --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/findLastKey.js @@ -0,0 +1,44 @@ +var baseFindKey = require('./_baseFindKey'), + baseForOwnRight = require('./_baseForOwnRight'), + baseIteratee = require('./_baseIteratee'); + +/** + * This method is like `_.findKey` except that it iterates over elements of + * a collection in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, + * else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findLastKey(users, function(o) { return o.age < 40; }); + * // => returns 'pebbles' assuming `_.findKey` returns 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.findLastKey(users, { 'age': 36, 'active': true }); + * // => 'barney' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findLastKey(users, 'active'); + * // => 'pebbles' + */ +function findLastKey(object, predicate) { + return baseFindKey(object, baseIteratee(predicate, 3), baseForOwnRight); +} + +module.exports = findLastKey; diff --git a/node_modules/strong-soap/node_modules/lodash/first.js b/node_modules/strong-soap/node_modules/lodash/first.js new file mode 100644 index 00000000..53f4ad13 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/first.js @@ -0,0 +1 @@ +module.exports = require('./head'); diff --git a/node_modules/strong-soap/node_modules/lodash/flatMap.js b/node_modules/strong-soap/node_modules/lodash/flatMap.js new file mode 100644 index 00000000..e6685068 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/flatMap.js @@ -0,0 +1,29 @@ +var baseFlatten = require('./_baseFlatten'), + map = require('./map'); + +/** + * Creates a flattened array of values by running each element in `collection` + * thru `iteratee` and flattening the mapped results. The iteratee is invoked + * with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [n, n]; + * } + * + * _.flatMap([1, 2], duplicate); + * // => [1, 1, 2, 2] + */ +function flatMap(collection, iteratee) { + return baseFlatten(map(collection, iteratee), 1); +} + +module.exports = flatMap; diff --git a/node_modules/strong-soap/node_modules/lodash/flatMapDeep.js b/node_modules/strong-soap/node_modules/lodash/flatMapDeep.js new file mode 100644 index 00000000..4653d603 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/flatMapDeep.js @@ -0,0 +1,31 @@ +var baseFlatten = require('./_baseFlatten'), + map = require('./map'); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * This method is like `_.flatMap` except that it recursively flattens the + * mapped results. + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [[[n, n]]]; + * } + * + * _.flatMapDeep([1, 2], duplicate); + * // => [1, 1, 2, 2] + */ +function flatMapDeep(collection, iteratee) { + return baseFlatten(map(collection, iteratee), INFINITY); +} + +module.exports = flatMapDeep; diff --git a/node_modules/strong-soap/node_modules/lodash/flatMapDepth.js b/node_modules/strong-soap/node_modules/lodash/flatMapDepth.js new file mode 100644 index 00000000..6d72005c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/flatMapDepth.js @@ -0,0 +1,31 @@ +var baseFlatten = require('./_baseFlatten'), + map = require('./map'), + toInteger = require('./toInteger'); + +/** + * This method is like `_.flatMap` except that it recursively flattens the + * mapped results up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [[[n, n]]]; + * } + * + * _.flatMapDepth([1, 2], duplicate, 2); + * // => [[1, 1], [2, 2]] + */ +function flatMapDepth(collection, iteratee, depth) { + depth = depth === undefined ? 1 : toInteger(depth); + return baseFlatten(map(collection, iteratee), depth); +} + +module.exports = flatMapDepth; diff --git a/node_modules/strong-soap/node_modules/lodash/flatten.js b/node_modules/strong-soap/node_modules/lodash/flatten.js new file mode 100644 index 00000000..3f09f7f7 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/flatten.js @@ -0,0 +1,22 @@ +var baseFlatten = require('./_baseFlatten'); + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, 1) : []; +} + +module.exports = flatten; diff --git a/node_modules/strong-soap/node_modules/lodash/flattenDeep.js b/node_modules/strong-soap/node_modules/lodash/flattenDeep.js new file mode 100644 index 00000000..8ad585cf --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/flattenDeep.js @@ -0,0 +1,25 @@ +var baseFlatten = require('./_baseFlatten'); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */ +function flattenDeep(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, INFINITY) : []; +} + +module.exports = flattenDeep; diff --git a/node_modules/strong-soap/node_modules/lodash/flattenDepth.js b/node_modules/strong-soap/node_modules/lodash/flattenDepth.js new file mode 100644 index 00000000..441fdcc2 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/flattenDepth.js @@ -0,0 +1,33 @@ +var baseFlatten = require('./_baseFlatten'), + toInteger = require('./toInteger'); + +/** + * Recursively flatten `array` up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Array + * @param {Array} array The array to flatten. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * var array = [1, [2, [3, [4]], 5]]; + * + * _.flattenDepth(array, 1); + * // => [1, 2, [3, [4]], 5] + * + * _.flattenDepth(array, 2); + * // => [1, 2, 3, [4], 5] + */ +function flattenDepth(array, depth) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + depth = depth === undefined ? 1 : toInteger(depth); + return baseFlatten(array, depth); +} + +module.exports = flattenDepth; diff --git a/node_modules/strong-soap/node_modules/lodash/flip.js b/node_modules/strong-soap/node_modules/lodash/flip.js new file mode 100644 index 00000000..c28dd789 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/flip.js @@ -0,0 +1,28 @@ +var createWrap = require('./_createWrap'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_FLIP_FLAG = 512; + +/** + * Creates a function that invokes `func` with arguments reversed. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to flip arguments for. + * @returns {Function} Returns the new flipped function. + * @example + * + * var flipped = _.flip(function() { + * return _.toArray(arguments); + * }); + * + * flipped('a', 'b', 'c', 'd'); + * // => ['d', 'c', 'b', 'a'] + */ +function flip(func) { + return createWrap(func, WRAP_FLIP_FLAG); +} + +module.exports = flip; diff --git a/node_modules/strong-soap/node_modules/lodash/floor.js b/node_modules/strong-soap/node_modules/lodash/floor.js new file mode 100644 index 00000000..ab6dfa28 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/floor.js @@ -0,0 +1,26 @@ +var createRound = require('./_createRound'); + +/** + * Computes `number` rounded down to `precision`. + * + * @static + * @memberOf _ + * @since 3.10.0 + * @category Math + * @param {number} number The number to round down. + * @param {number} [precision=0] The precision to round down to. + * @returns {number} Returns the rounded down number. + * @example + * + * _.floor(4.006); + * // => 4 + * + * _.floor(0.046, 2); + * // => 0.04 + * + * _.floor(4060, -2); + * // => 4000 + */ +var floor = createRound('floor'); + +module.exports = floor; diff --git a/node_modules/strong-soap/node_modules/lodash/flow.js b/node_modules/strong-soap/node_modules/lodash/flow.js new file mode 100644 index 00000000..74b6b62d --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/flow.js @@ -0,0 +1,27 @@ +var createFlow = require('./_createFlow'); + +/** + * Creates a function that returns the result of invoking the given functions + * with the `this` binding of the created function, where each successive + * invocation is supplied the return value of the previous. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Util + * @param {...(Function|Function[])} [funcs] The functions to invoke. + * @returns {Function} Returns the new composite function. + * @see _.flowRight + * @example + * + * function square(n) { + * return n * n; + * } + * + * var addSquare = _.flow([_.add, square]); + * addSquare(1, 2); + * // => 9 + */ +var flow = createFlow(); + +module.exports = flow; diff --git a/node_modules/strong-soap/node_modules/lodash/flowRight.js b/node_modules/strong-soap/node_modules/lodash/flowRight.js new file mode 100644 index 00000000..11461410 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/flowRight.js @@ -0,0 +1,26 @@ +var createFlow = require('./_createFlow'); + +/** + * This method is like `_.flow` except that it creates a function that + * invokes the given functions from right to left. + * + * @static + * @since 3.0.0 + * @memberOf _ + * @category Util + * @param {...(Function|Function[])} [funcs] The functions to invoke. + * @returns {Function} Returns the new composite function. + * @see _.flow + * @example + * + * function square(n) { + * return n * n; + * } + * + * var addSquare = _.flowRight([square, _.add]); + * addSquare(1, 2); + * // => 9 + */ +var flowRight = createFlow(true); + +module.exports = flowRight; diff --git a/node_modules/strong-soap/node_modules/lodash/forEach.js b/node_modules/strong-soap/node_modules/lodash/forEach.js new file mode 100644 index 00000000..c64eaa73 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/forEach.js @@ -0,0 +1,41 @@ +var arrayEach = require('./_arrayEach'), + baseEach = require('./_baseEach'), + castFunction = require('./_castFunction'), + isArray = require('./isArray'); + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { + var func = isArray(collection) ? arrayEach : baseEach; + return func(collection, castFunction(iteratee)); +} + +module.exports = forEach; diff --git a/node_modules/strong-soap/node_modules/lodash/forEachRight.js b/node_modules/strong-soap/node_modules/lodash/forEachRight.js new file mode 100644 index 00000000..7390ebaf --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/forEachRight.js @@ -0,0 +1,31 @@ +var arrayEachRight = require('./_arrayEachRight'), + baseEachRight = require('./_baseEachRight'), + castFunction = require('./_castFunction'), + isArray = require('./isArray'); + +/** + * This method is like `_.forEach` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @alias eachRight + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEach + * @example + * + * _.forEachRight([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `2` then `1`. + */ +function forEachRight(collection, iteratee) { + var func = isArray(collection) ? arrayEachRight : baseEachRight; + return func(collection, castFunction(iteratee)); +} + +module.exports = forEachRight; diff --git a/node_modules/strong-soap/node_modules/lodash/forIn.js b/node_modules/strong-soap/node_modules/lodash/forIn.js new file mode 100644 index 00000000..583a5963 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/forIn.js @@ -0,0 +1,39 @@ +var baseFor = require('./_baseFor'), + castFunction = require('./_castFunction'), + keysIn = require('./keysIn'); + +/** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ +function forIn(object, iteratee) { + return object == null + ? object + : baseFor(object, castFunction(iteratee), keysIn); +} + +module.exports = forIn; diff --git a/node_modules/strong-soap/node_modules/lodash/forInRight.js b/node_modules/strong-soap/node_modules/lodash/forInRight.js new file mode 100644 index 00000000..4aedf58a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/forInRight.js @@ -0,0 +1,37 @@ +var baseForRight = require('./_baseForRight'), + castFunction = require('./_castFunction'), + keysIn = require('./keysIn'); + +/** + * This method is like `_.forIn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forIn + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forInRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. + */ +function forInRight(object, iteratee) { + return object == null + ? object + : baseForRight(object, castFunction(iteratee), keysIn); +} + +module.exports = forInRight; diff --git a/node_modules/strong-soap/node_modules/lodash/forOwn.js b/node_modules/strong-soap/node_modules/lodash/forOwn.js new file mode 100644 index 00000000..94eed840 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/forOwn.js @@ -0,0 +1,36 @@ +var baseForOwn = require('./_baseForOwn'), + castFunction = require('./_castFunction'); + +/** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forOwn(object, iteratee) { + return object && baseForOwn(object, castFunction(iteratee)); +} + +module.exports = forOwn; diff --git a/node_modules/strong-soap/node_modules/lodash/forOwnRight.js b/node_modules/strong-soap/node_modules/lodash/forOwnRight.js new file mode 100644 index 00000000..86f338f0 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/forOwnRight.js @@ -0,0 +1,34 @@ +var baseForOwnRight = require('./_baseForOwnRight'), + castFunction = require('./_castFunction'); + +/** + * This method is like `_.forOwn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwn + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwnRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. + */ +function forOwnRight(object, iteratee) { + return object && baseForOwnRight(object, castFunction(iteratee)); +} + +module.exports = forOwnRight; diff --git a/node_modules/strong-soap/node_modules/lodash/fp.js b/node_modules/strong-soap/node_modules/lodash/fp.js new file mode 100644 index 00000000..e372dbbd --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp.js @@ -0,0 +1,2 @@ +var _ = require('./lodash.min').runInContext(); +module.exports = require('./fp/_baseConvert')(_, _); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/F.js b/node_modules/strong-soap/node_modules/lodash/fp/F.js new file mode 100644 index 00000000..a05a63ad --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/F.js @@ -0,0 +1 @@ +module.exports = require('./stubFalse'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/T.js b/node_modules/strong-soap/node_modules/lodash/fp/T.js new file mode 100644 index 00000000..e2ba8ea5 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/T.js @@ -0,0 +1 @@ +module.exports = require('./stubTrue'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/__.js b/node_modules/strong-soap/node_modules/lodash/fp/__.js new file mode 100644 index 00000000..4af98deb --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/__.js @@ -0,0 +1 @@ +module.exports = require('./placeholder'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/_baseConvert.js b/node_modules/strong-soap/node_modules/lodash/fp/_baseConvert.js new file mode 100644 index 00000000..9baf8e19 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/_baseConvert.js @@ -0,0 +1,569 @@ +var mapping = require('./_mapping'), + fallbackHolder = require('./placeholder'); + +/** Built-in value reference. */ +var push = Array.prototype.push; + +/** + * Creates a function, with an arity of `n`, that invokes `func` with the + * arguments it receives. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} n The arity of the new function. + * @returns {Function} Returns the new function. + */ +function baseArity(func, n) { + return n == 2 + ? function(a, b) { return func.apply(undefined, arguments); } + : function(a) { return func.apply(undefined, arguments); }; +} + +/** + * Creates a function that invokes `func`, with up to `n` arguments, ignoring + * any additional arguments. + * + * @private + * @param {Function} func The function to cap arguments for. + * @param {number} n The arity cap. + * @returns {Function} Returns the new function. + */ +function baseAry(func, n) { + return n == 2 + ? function(a, b) { return func(a, b); } + : function(a) { return func(a); }; +} + +/** + * Creates a clone of `array`. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the cloned array. + */ +function cloneArray(array) { + var length = array ? array.length : 0, + result = Array(length); + + while (length--) { + result[length] = array[length]; + } + return result; +} + +/** + * Creates a function that clones a given object using the assignment `func`. + * + * @private + * @param {Function} func The assignment function. + * @returns {Function} Returns the new cloner function. + */ +function createCloner(func) { + return function(object) { + return func({}, object); + }; +} + +/** + * A specialized version of `_.spread` which flattens the spread array into + * the arguments of the invoked `func`. + * + * @private + * @param {Function} func The function to spread arguments over. + * @param {number} start The start position of the spread. + * @returns {Function} Returns the new function. + */ +function flatSpread(func, start) { + return function() { + var length = arguments.length, + lastIndex = length - 1, + args = Array(length); + + while (length--) { + args[length] = arguments[length]; + } + var array = args[start], + otherArgs = args.slice(0, start); + + if (array) { + push.apply(otherArgs, array); + } + if (start != lastIndex) { + push.apply(otherArgs, args.slice(start + 1)); + } + return func.apply(this, otherArgs); + }; +} + +/** + * Creates a function that wraps `func` and uses `cloner` to clone the first + * argument it receives. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} cloner The function to clone arguments. + * @returns {Function} Returns the new immutable function. + */ +function wrapImmutable(func, cloner) { + return function() { + var length = arguments.length; + if (!length) { + return; + } + var args = Array(length); + while (length--) { + args[length] = arguments[length]; + } + var result = args[0] = cloner.apply(undefined, args); + func.apply(undefined, args); + return result; + }; +} + +/** + * The base implementation of `convert` which accepts a `util` object of methods + * required to perform conversions. + * + * @param {Object} util The util object. + * @param {string} name The name of the function to convert. + * @param {Function} func The function to convert. + * @param {Object} [options] The options object. + * @param {boolean} [options.cap=true] Specify capping iteratee arguments. + * @param {boolean} [options.curry=true] Specify currying. + * @param {boolean} [options.fixed=true] Specify fixed arity. + * @param {boolean} [options.immutable=true] Specify immutable operations. + * @param {boolean} [options.rearg=true] Specify rearranging arguments. + * @returns {Function|Object} Returns the converted function or object. + */ +function baseConvert(util, name, func, options) { + var isLib = typeof name == 'function', + isObj = name === Object(name); + + if (isObj) { + options = func; + func = name; + name = undefined; + } + if (func == null) { + throw new TypeError; + } + options || (options = {}); + + var config = { + 'cap': 'cap' in options ? options.cap : true, + 'curry': 'curry' in options ? options.curry : true, + 'fixed': 'fixed' in options ? options.fixed : true, + 'immutable': 'immutable' in options ? options.immutable : true, + 'rearg': 'rearg' in options ? options.rearg : true + }; + + var defaultHolder = isLib ? func : fallbackHolder, + forceCurry = ('curry' in options) && options.curry, + forceFixed = ('fixed' in options) && options.fixed, + forceRearg = ('rearg' in options) && options.rearg, + pristine = isLib ? func.runInContext() : undefined; + + var helpers = isLib ? func : { + 'ary': util.ary, + 'assign': util.assign, + 'clone': util.clone, + 'curry': util.curry, + 'forEach': util.forEach, + 'isArray': util.isArray, + 'isError': util.isError, + 'isFunction': util.isFunction, + 'isWeakMap': util.isWeakMap, + 'iteratee': util.iteratee, + 'keys': util.keys, + 'rearg': util.rearg, + 'toInteger': util.toInteger, + 'toPath': util.toPath + }; + + var ary = helpers.ary, + assign = helpers.assign, + clone = helpers.clone, + curry = helpers.curry, + each = helpers.forEach, + isArray = helpers.isArray, + isError = helpers.isError, + isFunction = helpers.isFunction, + isWeakMap = helpers.isWeakMap, + keys = helpers.keys, + rearg = helpers.rearg, + toInteger = helpers.toInteger, + toPath = helpers.toPath; + + var aryMethodKeys = keys(mapping.aryMethod); + + var wrappers = { + 'castArray': function(castArray) { + return function() { + var value = arguments[0]; + return isArray(value) + ? castArray(cloneArray(value)) + : castArray.apply(undefined, arguments); + }; + }, + 'iteratee': function(iteratee) { + return function() { + var func = arguments[0], + arity = arguments[1], + result = iteratee(func, arity), + length = result.length; + + if (config.cap && typeof arity == 'number') { + arity = arity > 2 ? (arity - 2) : 1; + return (length && length <= arity) ? result : baseAry(result, arity); + } + return result; + }; + }, + 'mixin': function(mixin) { + return function(source) { + var func = this; + if (!isFunction(func)) { + return mixin(func, Object(source)); + } + var pairs = []; + each(keys(source), function(key) { + if (isFunction(source[key])) { + pairs.push([key, func.prototype[key]]); + } + }); + + mixin(func, Object(source)); + + each(pairs, function(pair) { + var value = pair[1]; + if (isFunction(value)) { + func.prototype[pair[0]] = value; + } else { + delete func.prototype[pair[0]]; + } + }); + return func; + }; + }, + 'nthArg': function(nthArg) { + return function(n) { + var arity = n < 0 ? 1 : (toInteger(n) + 1); + return curry(nthArg(n), arity); + }; + }, + 'rearg': function(rearg) { + return function(func, indexes) { + var arity = indexes ? indexes.length : 0; + return curry(rearg(func, indexes), arity); + }; + }, + 'runInContext': function(runInContext) { + return function(context) { + return baseConvert(util, runInContext(context), options); + }; + } + }; + + /*--------------------------------------------------------------------------*/ + + /** + * Casts `func` to a function with an arity capped iteratee if needed. + * + * @private + * @param {string} name The name of the function to inspect. + * @param {Function} func The function to inspect. + * @returns {Function} Returns the cast function. + */ + function castCap(name, func) { + if (config.cap) { + var indexes = mapping.iterateeRearg[name]; + if (indexes) { + return iterateeRearg(func, indexes); + } + var n = !isLib && mapping.iterateeAry[name]; + if (n) { + return iterateeAry(func, n); + } + } + return func; + } + + /** + * Casts `func` to a curried function if needed. + * + * @private + * @param {string} name The name of the function to inspect. + * @param {Function} func The function to inspect. + * @param {number} n The arity of `func`. + * @returns {Function} Returns the cast function. + */ + function castCurry(name, func, n) { + return (forceCurry || (config.curry && n > 1)) + ? curry(func, n) + : func; + } + + /** + * Casts `func` to a fixed arity function if needed. + * + * @private + * @param {string} name The name of the function to inspect. + * @param {Function} func The function to inspect. + * @param {number} n The arity cap. + * @returns {Function} Returns the cast function. + */ + function castFixed(name, func, n) { + if (config.fixed && (forceFixed || !mapping.skipFixed[name])) { + var data = mapping.methodSpread[name], + start = data && data.start; + + return start === undefined ? ary(func, n) : flatSpread(func, start); + } + return func; + } + + /** + * Casts `func` to an rearged function if needed. + * + * @private + * @param {string} name The name of the function to inspect. + * @param {Function} func The function to inspect. + * @param {number} n The arity of `func`. + * @returns {Function} Returns the cast function. + */ + function castRearg(name, func, n) { + return (config.rearg && n > 1 && (forceRearg || !mapping.skipRearg[name])) + ? rearg(func, mapping.methodRearg[name] || mapping.aryRearg[n]) + : func; + } + + /** + * Creates a clone of `object` by `path`. + * + * @private + * @param {Object} object The object to clone. + * @param {Array|string} path The path to clone by. + * @returns {Object} Returns the cloned object. + */ + function cloneByPath(object, path) { + path = toPath(path); + + var index = -1, + length = path.length, + lastIndex = length - 1, + result = clone(Object(object)), + nested = result; + + while (nested != null && ++index < length) { + var key = path[index], + value = nested[key]; + + if (value != null && + !(isFunction(value) || isError(value) || isWeakMap(value))) { + nested[key] = clone(index == lastIndex ? value : Object(value)); + } + nested = nested[key]; + } + return result; + } + + /** + * Converts `lodash` to an immutable auto-curried iteratee-first data-last + * version with conversion `options` applied. + * + * @param {Object} [options] The options object. See `baseConvert` for more details. + * @returns {Function} Returns the converted `lodash`. + */ + function convertLib(options) { + return _.runInContext.convert(options)(undefined); + } + + /** + * Create a converter function for `func` of `name`. + * + * @param {string} name The name of the function to convert. + * @param {Function} func The function to convert. + * @returns {Function} Returns the new converter function. + */ + function createConverter(name, func) { + var realName = mapping.aliasToReal[name] || name, + methodName = mapping.remap[realName] || realName, + oldOptions = options; + + return function(options) { + var newUtil = isLib ? pristine : helpers, + newFunc = isLib ? pristine[methodName] : func, + newOptions = assign(assign({}, oldOptions), options); + + return baseConvert(newUtil, realName, newFunc, newOptions); + }; + } + + /** + * Creates a function that wraps `func` to invoke its iteratee, with up to `n` + * arguments, ignoring any additional arguments. + * + * @private + * @param {Function} func The function to cap iteratee arguments for. + * @param {number} n The arity cap. + * @returns {Function} Returns the new function. + */ + function iterateeAry(func, n) { + return overArg(func, function(func) { + return typeof func == 'function' ? baseAry(func, n) : func; + }); + } + + /** + * Creates a function that wraps `func` to invoke its iteratee with arguments + * arranged according to the specified `indexes` where the argument value at + * the first index is provided as the first argument, the argument value at + * the second index is provided as the second argument, and so on. + * + * @private + * @param {Function} func The function to rearrange iteratee arguments for. + * @param {number[]} indexes The arranged argument indexes. + * @returns {Function} Returns the new function. + */ + function iterateeRearg(func, indexes) { + return overArg(func, function(func) { + var n = indexes.length; + return baseArity(rearg(baseAry(func, n), indexes), n); + }); + } + + /** + * Creates a function that invokes `func` with its first argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function() { + var length = arguments.length; + if (!length) { + return func(); + } + var args = Array(length); + while (length--) { + args[length] = arguments[length]; + } + var index = config.rearg ? 0 : (length - 1); + args[index] = transform(args[index]); + return func.apply(undefined, args); + }; + } + + /** + * Creates a function that wraps `func` and applys the conversions + * rules by `name`. + * + * @private + * @param {string} name The name of the function to wrap. + * @param {Function} func The function to wrap. + * @returns {Function} Returns the converted function. + */ + function wrap(name, func, placeholder) { + var result, + realName = mapping.aliasToReal[name] || name, + wrapped = func, + wrapper = wrappers[realName]; + + if (wrapper) { + wrapped = wrapper(func); + } + else if (config.immutable) { + if (mapping.mutate.array[realName]) { + wrapped = wrapImmutable(func, cloneArray); + } + else if (mapping.mutate.object[realName]) { + wrapped = wrapImmutable(func, createCloner(func)); + } + else if (mapping.mutate.set[realName]) { + wrapped = wrapImmutable(func, cloneByPath); + } + } + each(aryMethodKeys, function(aryKey) { + each(mapping.aryMethod[aryKey], function(otherName) { + if (realName == otherName) { + var data = mapping.methodSpread[realName], + afterRearg = data && data.afterRearg; + + result = afterRearg + ? castFixed(realName, castRearg(realName, wrapped, aryKey), aryKey) + : castRearg(realName, castFixed(realName, wrapped, aryKey), aryKey); + + result = castCap(realName, result); + result = castCurry(realName, result, aryKey); + return false; + } + }); + return !result; + }); + + result || (result = wrapped); + if (result == func) { + result = forceCurry ? curry(result, 1) : function() { + return func.apply(this, arguments); + }; + } + result.convert = createConverter(realName, func); + result.placeholder = func.placeholder = placeholder; + + return result; + } + + /*--------------------------------------------------------------------------*/ + + if (!isObj) { + return wrap(name, func, defaultHolder); + } + var _ = func; + + // Convert methods by ary cap. + var pairs = []; + each(aryMethodKeys, function(aryKey) { + each(mapping.aryMethod[aryKey], function(key) { + var func = _[mapping.remap[key] || key]; + if (func) { + pairs.push([key, wrap(key, func, _)]); + } + }); + }); + + // Convert remaining methods. + each(keys(_), function(key) { + var func = _[key]; + if (typeof func == 'function') { + var length = pairs.length; + while (length--) { + if (pairs[length][0] == key) { + return; + } + } + func.convert = createConverter(key, func); + pairs.push([key, func]); + } + }); + + // Assign to `_` leaving `_.prototype` unchanged to allow chaining. + each(pairs, function(pair) { + _[pair[0]] = pair[1]; + }); + + _.convert = convertLib; + _.placeholder = _; + + // Assign aliases. + each(keys(_), function(key) { + each(mapping.realToAlias[key] || [], function(alias) { + _[alias] = _[key]; + }); + }); + + return _; +} + +module.exports = baseConvert; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/_convertBrowser.js b/node_modules/strong-soap/node_modules/lodash/fp/_convertBrowser.js new file mode 100644 index 00000000..bde030dc --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/_convertBrowser.js @@ -0,0 +1,18 @@ +var baseConvert = require('./_baseConvert'); + +/** + * Converts `lodash` to an immutable auto-curried iteratee-first data-last + * version with conversion `options` applied. + * + * @param {Function} lodash The lodash function to convert. + * @param {Object} [options] The options object. See `baseConvert` for more details. + * @returns {Function} Returns the converted `lodash`. + */ +function browserConvert(lodash, options) { + return baseConvert(lodash, lodash, options); +} + +if (typeof _ == 'function' && typeof _.runInContext == 'function') { + _ = browserConvert(_.runInContext()); +} +module.exports = browserConvert; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/_falseOptions.js b/node_modules/strong-soap/node_modules/lodash/fp/_falseOptions.js new file mode 100644 index 00000000..773235e3 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/_falseOptions.js @@ -0,0 +1,7 @@ +module.exports = { + 'cap': false, + 'curry': false, + 'fixed': false, + 'immutable': false, + 'rearg': false +}; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/_mapping.js b/node_modules/strong-soap/node_modules/lodash/fp/_mapping.js new file mode 100644 index 00000000..a642ec05 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/_mapping.js @@ -0,0 +1,358 @@ +/** Used to map aliases to their real names. */ +exports.aliasToReal = { + + // Lodash aliases. + 'each': 'forEach', + 'eachRight': 'forEachRight', + 'entries': 'toPairs', + 'entriesIn': 'toPairsIn', + 'extend': 'assignIn', + 'extendAll': 'assignInAll', + 'extendAllWith': 'assignInAllWith', + 'extendWith': 'assignInWith', + 'first': 'head', + + // Methods that are curried variants of others. + 'conforms': 'conformsTo', + 'matches': 'isMatch', + 'property': 'get', + + // Ramda aliases. + '__': 'placeholder', + 'F': 'stubFalse', + 'T': 'stubTrue', + 'all': 'every', + 'allPass': 'overEvery', + 'always': 'constant', + 'any': 'some', + 'anyPass': 'overSome', + 'apply': 'spread', + 'assoc': 'set', + 'assocPath': 'set', + 'complement': 'negate', + 'compose': 'flowRight', + 'contains': 'includes', + 'dissoc': 'unset', + 'dissocPath': 'unset', + 'dropLast': 'dropRight', + 'dropLastWhile': 'dropRightWhile', + 'equals': 'isEqual', + 'identical': 'eq', + 'indexBy': 'keyBy', + 'init': 'initial', + 'invertObj': 'invert', + 'juxt': 'over', + 'omitAll': 'omit', + 'nAry': 'ary', + 'path': 'get', + 'pathEq': 'matchesProperty', + 'pathOr': 'getOr', + 'paths': 'at', + 'pickAll': 'pick', + 'pipe': 'flow', + 'pluck': 'map', + 'prop': 'get', + 'propEq': 'matchesProperty', + 'propOr': 'getOr', + 'props': 'at', + 'symmetricDifference': 'xor', + 'symmetricDifferenceBy': 'xorBy', + 'symmetricDifferenceWith': 'xorWith', + 'takeLast': 'takeRight', + 'takeLastWhile': 'takeRightWhile', + 'unapply': 'rest', + 'unnest': 'flatten', + 'useWith': 'overArgs', + 'where': 'conformsTo', + 'whereEq': 'isMatch', + 'zipObj': 'zipObject' +}; + +/** Used to map ary to method names. */ +exports.aryMethod = { + '1': [ + 'assignAll', 'assignInAll', 'attempt', 'castArray', 'ceil', 'create', + 'curry', 'curryRight', 'defaultsAll', 'defaultsDeepAll', 'floor', 'flow', + 'flowRight', 'fromPairs', 'invert', 'iteratee', 'memoize', 'method', 'mergeAll', + 'methodOf', 'mixin', 'nthArg', 'over', 'overEvery', 'overSome','rest', 'reverse', + 'round', 'runInContext', 'spread', 'template', 'trim', 'trimEnd', 'trimStart', + 'uniqueId', 'words', 'zipAll' + ], + '2': [ + 'add', 'after', 'ary', 'assign', 'assignAllWith', 'assignIn', 'assignInAllWith', + 'at', 'before', 'bind', 'bindAll', 'bindKey', 'chunk', 'cloneDeepWith', + 'cloneWith', 'concat', 'conformsTo', 'countBy', 'curryN', 'curryRightN', + 'debounce', 'defaults', 'defaultsDeep', 'defaultTo', 'delay', 'difference', + 'divide', 'drop', 'dropRight', 'dropRightWhile', 'dropWhile', 'endsWith', 'eq', + 'every', 'filter', 'find', 'findIndex', 'findKey', 'findLast', 'findLastIndex', + 'findLastKey', 'flatMap', 'flatMapDeep', 'flattenDepth', 'forEach', + 'forEachRight', 'forIn', 'forInRight', 'forOwn', 'forOwnRight', 'get', + 'groupBy', 'gt', 'gte', 'has', 'hasIn', 'includes', 'indexOf', 'intersection', + 'invertBy', 'invoke', 'invokeMap', 'isEqual', 'isMatch', 'join', 'keyBy', + 'lastIndexOf', 'lt', 'lte', 'map', 'mapKeys', 'mapValues', 'matchesProperty', + 'maxBy', 'meanBy', 'merge', 'mergeAllWith', 'minBy', 'multiply', 'nth', 'omit', + 'omitBy', 'overArgs', 'pad', 'padEnd', 'padStart', 'parseInt', 'partial', + 'partialRight', 'partition', 'pick', 'pickBy', 'propertyOf', 'pull', 'pullAll', + 'pullAt', 'random', 'range', 'rangeRight', 'rearg', 'reject', 'remove', + 'repeat', 'restFrom', 'result', 'sampleSize', 'some', 'sortBy', 'sortedIndex', + 'sortedIndexOf', 'sortedLastIndex', 'sortedLastIndexOf', 'sortedUniqBy', + 'split', 'spreadFrom', 'startsWith', 'subtract', 'sumBy', 'take', 'takeRight', + 'takeRightWhile', 'takeWhile', 'tap', 'throttle', 'thru', 'times', 'trimChars', + 'trimCharsEnd', 'trimCharsStart', 'truncate', 'union', 'uniqBy', 'uniqWith', + 'unset', 'unzipWith', 'without', 'wrap', 'xor', 'zip', 'zipObject', + 'zipObjectDeep' + ], + '3': [ + 'assignInWith', 'assignWith', 'clamp', 'differenceBy', 'differenceWith', + 'findFrom', 'findIndexFrom', 'findLastFrom', 'findLastIndexFrom', 'getOr', + 'includesFrom', 'indexOfFrom', 'inRange', 'intersectionBy', 'intersectionWith', + 'invokeArgs', 'invokeArgsMap', 'isEqualWith', 'isMatchWith', 'flatMapDepth', + 'lastIndexOfFrom', 'mergeWith', 'orderBy', 'padChars', 'padCharsEnd', + 'padCharsStart', 'pullAllBy', 'pullAllWith', 'rangeStep', 'rangeStepRight', + 'reduce', 'reduceRight', 'replace', 'set', 'slice', 'sortedIndexBy', + 'sortedLastIndexBy', 'transform', 'unionBy', 'unionWith', 'update', 'xorBy', + 'xorWith', 'zipWith' + ], + '4': [ + 'fill', 'setWith', 'updateWith' + ] +}; + +/** Used to map ary to rearg configs. */ +exports.aryRearg = { + '2': [1, 0], + '3': [2, 0, 1], + '4': [3, 2, 0, 1] +}; + +/** Used to map method names to their iteratee ary. */ +exports.iterateeAry = { + 'dropRightWhile': 1, + 'dropWhile': 1, + 'every': 1, + 'filter': 1, + 'find': 1, + 'findFrom': 1, + 'findIndex': 1, + 'findIndexFrom': 1, + 'findKey': 1, + 'findLast': 1, + 'findLastFrom': 1, + 'findLastIndex': 1, + 'findLastIndexFrom': 1, + 'findLastKey': 1, + 'flatMap': 1, + 'flatMapDeep': 1, + 'flatMapDepth': 1, + 'forEach': 1, + 'forEachRight': 1, + 'forIn': 1, + 'forInRight': 1, + 'forOwn': 1, + 'forOwnRight': 1, + 'map': 1, + 'mapKeys': 1, + 'mapValues': 1, + 'partition': 1, + 'reduce': 2, + 'reduceRight': 2, + 'reject': 1, + 'remove': 1, + 'some': 1, + 'takeRightWhile': 1, + 'takeWhile': 1, + 'times': 1, + 'transform': 2 +}; + +/** Used to map method names to iteratee rearg configs. */ +exports.iterateeRearg = { + 'mapKeys': [1], + 'reduceRight': [1, 0] +}; + +/** Used to map method names to rearg configs. */ +exports.methodRearg = { + 'assignInAllWith': [1, 0], + 'assignInWith': [1, 2, 0], + 'assignAllWith': [1, 0], + 'assignWith': [1, 2, 0], + 'differenceBy': [1, 2, 0], + 'differenceWith': [1, 2, 0], + 'getOr': [2, 1, 0], + 'intersectionBy': [1, 2, 0], + 'intersectionWith': [1, 2, 0], + 'isEqualWith': [1, 2, 0], + 'isMatchWith': [2, 1, 0], + 'mergeAllWith': [1, 0], + 'mergeWith': [1, 2, 0], + 'padChars': [2, 1, 0], + 'padCharsEnd': [2, 1, 0], + 'padCharsStart': [2, 1, 0], + 'pullAllBy': [2, 1, 0], + 'pullAllWith': [2, 1, 0], + 'rangeStep': [1, 2, 0], + 'rangeStepRight': [1, 2, 0], + 'setWith': [3, 1, 2, 0], + 'sortedIndexBy': [2, 1, 0], + 'sortedLastIndexBy': [2, 1, 0], + 'unionBy': [1, 2, 0], + 'unionWith': [1, 2, 0], + 'updateWith': [3, 1, 2, 0], + 'xorBy': [1, 2, 0], + 'xorWith': [1, 2, 0], + 'zipWith': [1, 2, 0] +}; + +/** Used to map method names to spread configs. */ +exports.methodSpread = { + 'assignAll': { 'start': 0 }, + 'assignAllWith': { 'start': 0 }, + 'assignInAll': { 'start': 0 }, + 'assignInAllWith': { 'start': 0 }, + 'defaultsAll': { 'start': 0 }, + 'defaultsDeepAll': { 'start': 0 }, + 'invokeArgs': { 'start': 2 }, + 'invokeArgsMap': { 'start': 2 }, + 'mergeAll': { 'start': 0 }, + 'mergeAllWith': { 'start': 0 }, + 'partial': { 'start': 1 }, + 'partialRight': { 'start': 1 }, + 'without': { 'start': 1 }, + 'zipAll': { 'start': 0 } +}; + +/** Used to identify methods which mutate arrays or objects. */ +exports.mutate = { + 'array': { + 'fill': true, + 'pull': true, + 'pullAll': true, + 'pullAllBy': true, + 'pullAllWith': true, + 'pullAt': true, + 'remove': true, + 'reverse': true + }, + 'object': { + 'assign': true, + 'assignAll': true, + 'assignAllWith': true, + 'assignIn': true, + 'assignInAll': true, + 'assignInAllWith': true, + 'assignInWith': true, + 'assignWith': true, + 'defaults': true, + 'defaultsAll': true, + 'defaultsDeep': true, + 'defaultsDeepAll': true, + 'merge': true, + 'mergeAll': true, + 'mergeAllWith': true, + 'mergeWith': true, + }, + 'set': { + 'set': true, + 'setWith': true, + 'unset': true, + 'update': true, + 'updateWith': true + } +}; + +/** Used to map real names to their aliases. */ +exports.realToAlias = (function() { + var hasOwnProperty = Object.prototype.hasOwnProperty, + object = exports.aliasToReal, + result = {}; + + for (var key in object) { + var value = object[key]; + if (hasOwnProperty.call(result, value)) { + result[value].push(key); + } else { + result[value] = [key]; + } + } + return result; +}()); + +/** Used to map method names to other names. */ +exports.remap = { + 'assignAll': 'assign', + 'assignAllWith': 'assignWith', + 'assignInAll': 'assignIn', + 'assignInAllWith': 'assignInWith', + 'curryN': 'curry', + 'curryRightN': 'curryRight', + 'defaultsAll': 'defaults', + 'defaultsDeepAll': 'defaultsDeep', + 'findFrom': 'find', + 'findIndexFrom': 'findIndex', + 'findLastFrom': 'findLast', + 'findLastIndexFrom': 'findLastIndex', + 'getOr': 'get', + 'includesFrom': 'includes', + 'indexOfFrom': 'indexOf', + 'invokeArgs': 'invoke', + 'invokeArgsMap': 'invokeMap', + 'lastIndexOfFrom': 'lastIndexOf', + 'mergeAll': 'merge', + 'mergeAllWith': 'mergeWith', + 'padChars': 'pad', + 'padCharsEnd': 'padEnd', + 'padCharsStart': 'padStart', + 'propertyOf': 'get', + 'rangeStep': 'range', + 'rangeStepRight': 'rangeRight', + 'restFrom': 'rest', + 'spreadFrom': 'spread', + 'trimChars': 'trim', + 'trimCharsEnd': 'trimEnd', + 'trimCharsStart': 'trimStart', + 'zipAll': 'zip' +}; + +/** Used to track methods that skip fixing their arity. */ +exports.skipFixed = { + 'castArray': true, + 'flow': true, + 'flowRight': true, + 'iteratee': true, + 'mixin': true, + 'rearg': true, + 'runInContext': true +}; + +/** Used to track methods that skip rearranging arguments. */ +exports.skipRearg = { + 'add': true, + 'assign': true, + 'assignIn': true, + 'bind': true, + 'bindKey': true, + 'concat': true, + 'difference': true, + 'divide': true, + 'eq': true, + 'gt': true, + 'gte': true, + 'isEqual': true, + 'lt': true, + 'lte': true, + 'matchesProperty': true, + 'merge': true, + 'multiply': true, + 'overArgs': true, + 'partial': true, + 'partialRight': true, + 'propertyOf': true, + 'random': true, + 'range': true, + 'rangeRight': true, + 'subtract': true, + 'zip': true, + 'zipObject': true, + 'zipObjectDeep': true +}; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/_util.js b/node_modules/strong-soap/node_modules/lodash/fp/_util.js new file mode 100644 index 00000000..1dbf36f5 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/_util.js @@ -0,0 +1,16 @@ +module.exports = { + 'ary': require('../ary'), + 'assign': require('../_baseAssign'), + 'clone': require('../clone'), + 'curry': require('../curry'), + 'forEach': require('../_arrayEach'), + 'isArray': require('../isArray'), + 'isError': require('../isError'), + 'isFunction': require('../isFunction'), + 'isWeakMap': require('../isWeakMap'), + 'iteratee': require('../iteratee'), + 'keys': require('../_baseKeys'), + 'rearg': require('../rearg'), + 'toInteger': require('../toInteger'), + 'toPath': require('../toPath') +}; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/add.js b/node_modules/strong-soap/node_modules/lodash/fp/add.js new file mode 100644 index 00000000..816eeece --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/add.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('add', require('../add')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/after.js b/node_modules/strong-soap/node_modules/lodash/fp/after.js new file mode 100644 index 00000000..21a0167a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/after.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('after', require('../after')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/all.js b/node_modules/strong-soap/node_modules/lodash/fp/all.js new file mode 100644 index 00000000..d0839f77 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/all.js @@ -0,0 +1 @@ +module.exports = require('./every'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/allPass.js b/node_modules/strong-soap/node_modules/lodash/fp/allPass.js new file mode 100644 index 00000000..79b73ef8 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/allPass.js @@ -0,0 +1 @@ +module.exports = require('./overEvery'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/always.js b/node_modules/strong-soap/node_modules/lodash/fp/always.js new file mode 100644 index 00000000..98877030 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/always.js @@ -0,0 +1 @@ +module.exports = require('./constant'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/any.js b/node_modules/strong-soap/node_modules/lodash/fp/any.js new file mode 100644 index 00000000..900ac25e --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/any.js @@ -0,0 +1 @@ +module.exports = require('./some'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/anyPass.js b/node_modules/strong-soap/node_modules/lodash/fp/anyPass.js new file mode 100644 index 00000000..2774ab37 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/anyPass.js @@ -0,0 +1 @@ +module.exports = require('./overSome'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/apply.js b/node_modules/strong-soap/node_modules/lodash/fp/apply.js new file mode 100644 index 00000000..2b757129 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/apply.js @@ -0,0 +1 @@ +module.exports = require('./spread'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/array.js b/node_modules/strong-soap/node_modules/lodash/fp/array.js new file mode 100644 index 00000000..fe939c2c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/array.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../array')); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/ary.js b/node_modules/strong-soap/node_modules/lodash/fp/ary.js new file mode 100644 index 00000000..8edf1877 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/ary.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('ary', require('../ary')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/assign.js b/node_modules/strong-soap/node_modules/lodash/fp/assign.js new file mode 100644 index 00000000..23f47af1 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/assign.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('assign', require('../assign')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/assignAll.js b/node_modules/strong-soap/node_modules/lodash/fp/assignAll.js new file mode 100644 index 00000000..b1d36c7e --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/assignAll.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('assignAll', require('../assign')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/assignAllWith.js b/node_modules/strong-soap/node_modules/lodash/fp/assignAllWith.js new file mode 100644 index 00000000..21e836e6 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/assignAllWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('assignAllWith', require('../assignWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/assignIn.js b/node_modules/strong-soap/node_modules/lodash/fp/assignIn.js new file mode 100644 index 00000000..6e7c65fa --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/assignIn.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('assignIn', require('../assignIn')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/assignInAll.js b/node_modules/strong-soap/node_modules/lodash/fp/assignInAll.js new file mode 100644 index 00000000..7ba75dba --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/assignInAll.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('assignInAll', require('../assignIn')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/assignInAllWith.js b/node_modules/strong-soap/node_modules/lodash/fp/assignInAllWith.js new file mode 100644 index 00000000..e766903d --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/assignInAllWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('assignInAllWith', require('../assignInWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/assignInWith.js b/node_modules/strong-soap/node_modules/lodash/fp/assignInWith.js new file mode 100644 index 00000000..acb59236 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/assignInWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('assignInWith', require('../assignInWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/assignWith.js b/node_modules/strong-soap/node_modules/lodash/fp/assignWith.js new file mode 100644 index 00000000..eb925212 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/assignWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('assignWith', require('../assignWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/assoc.js b/node_modules/strong-soap/node_modules/lodash/fp/assoc.js new file mode 100644 index 00000000..7648820c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/assoc.js @@ -0,0 +1 @@ +module.exports = require('./set'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/assocPath.js b/node_modules/strong-soap/node_modules/lodash/fp/assocPath.js new file mode 100644 index 00000000..7648820c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/assocPath.js @@ -0,0 +1 @@ +module.exports = require('./set'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/at.js b/node_modules/strong-soap/node_modules/lodash/fp/at.js new file mode 100644 index 00000000..cc39d257 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/at.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('at', require('../at')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/attempt.js b/node_modules/strong-soap/node_modules/lodash/fp/attempt.js new file mode 100644 index 00000000..26ca42ea --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/attempt.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('attempt', require('../attempt')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/before.js b/node_modules/strong-soap/node_modules/lodash/fp/before.js new file mode 100644 index 00000000..7a2de65d --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/before.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('before', require('../before')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/bind.js b/node_modules/strong-soap/node_modules/lodash/fp/bind.js new file mode 100644 index 00000000..5cbe4f30 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/bind.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('bind', require('../bind')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/bindAll.js b/node_modules/strong-soap/node_modules/lodash/fp/bindAll.js new file mode 100644 index 00000000..6b4a4a0f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/bindAll.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('bindAll', require('../bindAll')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/bindKey.js b/node_modules/strong-soap/node_modules/lodash/fp/bindKey.js new file mode 100644 index 00000000..6a46c6b1 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/bindKey.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('bindKey', require('../bindKey')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/camelCase.js b/node_modules/strong-soap/node_modules/lodash/fp/camelCase.js new file mode 100644 index 00000000..87b77b49 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/camelCase.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('camelCase', require('../camelCase'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/capitalize.js b/node_modules/strong-soap/node_modules/lodash/fp/capitalize.js new file mode 100644 index 00000000..cac74e14 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/capitalize.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('capitalize', require('../capitalize'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/castArray.js b/node_modules/strong-soap/node_modules/lodash/fp/castArray.js new file mode 100644 index 00000000..8681c099 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/castArray.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('castArray', require('../castArray')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/ceil.js b/node_modules/strong-soap/node_modules/lodash/fp/ceil.js new file mode 100644 index 00000000..f416b729 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/ceil.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('ceil', require('../ceil')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/chain.js b/node_modules/strong-soap/node_modules/lodash/fp/chain.js new file mode 100644 index 00000000..604fe398 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/chain.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('chain', require('../chain'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/chunk.js b/node_modules/strong-soap/node_modules/lodash/fp/chunk.js new file mode 100644 index 00000000..871ab085 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/chunk.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('chunk', require('../chunk')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/clamp.js b/node_modules/strong-soap/node_modules/lodash/fp/clamp.js new file mode 100644 index 00000000..3b06c01c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/clamp.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('clamp', require('../clamp')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/clone.js b/node_modules/strong-soap/node_modules/lodash/fp/clone.js new file mode 100644 index 00000000..cadb59c9 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/clone.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('clone', require('../clone'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/cloneDeep.js b/node_modules/strong-soap/node_modules/lodash/fp/cloneDeep.js new file mode 100644 index 00000000..a6107aac --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/cloneDeep.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('cloneDeep', require('../cloneDeep'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/cloneDeepWith.js b/node_modules/strong-soap/node_modules/lodash/fp/cloneDeepWith.js new file mode 100644 index 00000000..6f01e44a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/cloneDeepWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('cloneDeepWith', require('../cloneDeepWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/cloneWith.js b/node_modules/strong-soap/node_modules/lodash/fp/cloneWith.js new file mode 100644 index 00000000..aa885781 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/cloneWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('cloneWith', require('../cloneWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/collection.js b/node_modules/strong-soap/node_modules/lodash/fp/collection.js new file mode 100644 index 00000000..fc8b328a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/collection.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../collection')); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/commit.js b/node_modules/strong-soap/node_modules/lodash/fp/commit.js new file mode 100644 index 00000000..130a894f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/commit.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('commit', require('../commit'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/compact.js b/node_modules/strong-soap/node_modules/lodash/fp/compact.js new file mode 100644 index 00000000..ce8f7a1a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/compact.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('compact', require('../compact'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/complement.js b/node_modules/strong-soap/node_modules/lodash/fp/complement.js new file mode 100644 index 00000000..93eb462b --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/complement.js @@ -0,0 +1 @@ +module.exports = require('./negate'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/compose.js b/node_modules/strong-soap/node_modules/lodash/fp/compose.js new file mode 100644 index 00000000..1954e942 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/compose.js @@ -0,0 +1 @@ +module.exports = require('./flowRight'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/concat.js b/node_modules/strong-soap/node_modules/lodash/fp/concat.js new file mode 100644 index 00000000..e59346ad --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/concat.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('concat', require('../concat')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/cond.js b/node_modules/strong-soap/node_modules/lodash/fp/cond.js new file mode 100644 index 00000000..6a0120ef --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/cond.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('cond', require('../cond'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/conforms.js b/node_modules/strong-soap/node_modules/lodash/fp/conforms.js new file mode 100644 index 00000000..3247f64a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/conforms.js @@ -0,0 +1 @@ +module.exports = require('./conformsTo'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/conformsTo.js b/node_modules/strong-soap/node_modules/lodash/fp/conformsTo.js new file mode 100644 index 00000000..aa7f41ec --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/conformsTo.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('conformsTo', require('../conformsTo')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/constant.js b/node_modules/strong-soap/node_modules/lodash/fp/constant.js new file mode 100644 index 00000000..9e406fc0 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/constant.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('constant', require('../constant'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/contains.js b/node_modules/strong-soap/node_modules/lodash/fp/contains.js new file mode 100644 index 00000000..594722af --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/contains.js @@ -0,0 +1 @@ +module.exports = require('./includes'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/convert.js b/node_modules/strong-soap/node_modules/lodash/fp/convert.js new file mode 100644 index 00000000..4795dc42 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/convert.js @@ -0,0 +1,18 @@ +var baseConvert = require('./_baseConvert'), + util = require('./_util'); + +/** + * Converts `func` of `name` to an immutable auto-curried iteratee-first data-last + * version with conversion `options` applied. If `name` is an object its methods + * will be converted. + * + * @param {string} name The name of the function to wrap. + * @param {Function} [func] The function to wrap. + * @param {Object} [options] The options object. See `baseConvert` for more details. + * @returns {Function|Object} Returns the converted function or object. + */ +function convert(name, func, options) { + return baseConvert(util, name, func, options); +} + +module.exports = convert; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/countBy.js b/node_modules/strong-soap/node_modules/lodash/fp/countBy.js new file mode 100644 index 00000000..dfa46432 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/countBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('countBy', require('../countBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/create.js b/node_modules/strong-soap/node_modules/lodash/fp/create.js new file mode 100644 index 00000000..752025fb --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/create.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('create', require('../create')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/curry.js b/node_modules/strong-soap/node_modules/lodash/fp/curry.js new file mode 100644 index 00000000..b0b4168c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/curry.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('curry', require('../curry')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/curryN.js b/node_modules/strong-soap/node_modules/lodash/fp/curryN.js new file mode 100644 index 00000000..2ae7d00a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/curryN.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('curryN', require('../curry')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/curryRight.js b/node_modules/strong-soap/node_modules/lodash/fp/curryRight.js new file mode 100644 index 00000000..cb619eb5 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/curryRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('curryRight', require('../curryRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/curryRightN.js b/node_modules/strong-soap/node_modules/lodash/fp/curryRightN.js new file mode 100644 index 00000000..2495afc8 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/curryRightN.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('curryRightN', require('../curryRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/date.js b/node_modules/strong-soap/node_modules/lodash/fp/date.js new file mode 100644 index 00000000..82cb952b --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/date.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../date')); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/debounce.js b/node_modules/strong-soap/node_modules/lodash/fp/debounce.js new file mode 100644 index 00000000..26122293 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/debounce.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('debounce', require('../debounce')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/deburr.js b/node_modules/strong-soap/node_modules/lodash/fp/deburr.js new file mode 100644 index 00000000..96463ab8 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/deburr.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('deburr', require('../deburr'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/defaultTo.js b/node_modules/strong-soap/node_modules/lodash/fp/defaultTo.js new file mode 100644 index 00000000..d6b52a44 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/defaultTo.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('defaultTo', require('../defaultTo')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/defaults.js b/node_modules/strong-soap/node_modules/lodash/fp/defaults.js new file mode 100644 index 00000000..e1a8e6e7 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/defaults.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('defaults', require('../defaults')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/defaultsAll.js b/node_modules/strong-soap/node_modules/lodash/fp/defaultsAll.js new file mode 100644 index 00000000..238fcc3c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/defaultsAll.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('defaultsAll', require('../defaults')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/defaultsDeep.js b/node_modules/strong-soap/node_modules/lodash/fp/defaultsDeep.js new file mode 100644 index 00000000..1f172ff9 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/defaultsDeep.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('defaultsDeep', require('../defaultsDeep')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/defaultsDeepAll.js b/node_modules/strong-soap/node_modules/lodash/fp/defaultsDeepAll.js new file mode 100644 index 00000000..6835f2f0 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/defaultsDeepAll.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('defaultsDeepAll', require('../defaultsDeep')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/defer.js b/node_modules/strong-soap/node_modules/lodash/fp/defer.js new file mode 100644 index 00000000..ec7990fe --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/defer.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('defer', require('../defer'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/delay.js b/node_modules/strong-soap/node_modules/lodash/fp/delay.js new file mode 100644 index 00000000..556dbd56 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/delay.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('delay', require('../delay')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/difference.js b/node_modules/strong-soap/node_modules/lodash/fp/difference.js new file mode 100644 index 00000000..2d037654 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/difference.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('difference', require('../difference')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/differenceBy.js b/node_modules/strong-soap/node_modules/lodash/fp/differenceBy.js new file mode 100644 index 00000000..2f914910 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/differenceBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('differenceBy', require('../differenceBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/differenceWith.js b/node_modules/strong-soap/node_modules/lodash/fp/differenceWith.js new file mode 100644 index 00000000..bcf5ad2e --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/differenceWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('differenceWith', require('../differenceWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/dissoc.js b/node_modules/strong-soap/node_modules/lodash/fp/dissoc.js new file mode 100644 index 00000000..7ec7be19 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/dissoc.js @@ -0,0 +1 @@ +module.exports = require('./unset'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/dissocPath.js b/node_modules/strong-soap/node_modules/lodash/fp/dissocPath.js new file mode 100644 index 00000000..7ec7be19 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/dissocPath.js @@ -0,0 +1 @@ +module.exports = require('./unset'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/divide.js b/node_modules/strong-soap/node_modules/lodash/fp/divide.js new file mode 100644 index 00000000..82048c5e --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/divide.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('divide', require('../divide')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/drop.js b/node_modules/strong-soap/node_modules/lodash/fp/drop.js new file mode 100644 index 00000000..2fa9b4fa --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/drop.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('drop', require('../drop')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/dropLast.js b/node_modules/strong-soap/node_modules/lodash/fp/dropLast.js new file mode 100644 index 00000000..174e5255 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/dropLast.js @@ -0,0 +1 @@ +module.exports = require('./dropRight'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/dropLastWhile.js b/node_modules/strong-soap/node_modules/lodash/fp/dropLastWhile.js new file mode 100644 index 00000000..be2a9d24 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/dropLastWhile.js @@ -0,0 +1 @@ +module.exports = require('./dropRightWhile'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/dropRight.js b/node_modules/strong-soap/node_modules/lodash/fp/dropRight.js new file mode 100644 index 00000000..e98881fc --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/dropRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('dropRight', require('../dropRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/dropRightWhile.js b/node_modules/strong-soap/node_modules/lodash/fp/dropRightWhile.js new file mode 100644 index 00000000..cacaa701 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/dropRightWhile.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('dropRightWhile', require('../dropRightWhile')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/dropWhile.js b/node_modules/strong-soap/node_modules/lodash/fp/dropWhile.js new file mode 100644 index 00000000..285f864d --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/dropWhile.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('dropWhile', require('../dropWhile')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/each.js b/node_modules/strong-soap/node_modules/lodash/fp/each.js new file mode 100644 index 00000000..8800f420 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/each.js @@ -0,0 +1 @@ +module.exports = require('./forEach'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/eachRight.js b/node_modules/strong-soap/node_modules/lodash/fp/eachRight.js new file mode 100644 index 00000000..3252b2ab --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/eachRight.js @@ -0,0 +1 @@ +module.exports = require('./forEachRight'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/endsWith.js b/node_modules/strong-soap/node_modules/lodash/fp/endsWith.js new file mode 100644 index 00000000..17dc2a49 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/endsWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('endsWith', require('../endsWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/entries.js b/node_modules/strong-soap/node_modules/lodash/fp/entries.js new file mode 100644 index 00000000..7a88df20 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/entries.js @@ -0,0 +1 @@ +module.exports = require('./toPairs'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/entriesIn.js b/node_modules/strong-soap/node_modules/lodash/fp/entriesIn.js new file mode 100644 index 00000000..f6c6331c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/entriesIn.js @@ -0,0 +1 @@ +module.exports = require('./toPairsIn'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/eq.js b/node_modules/strong-soap/node_modules/lodash/fp/eq.js new file mode 100644 index 00000000..9a3d21bf --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/eq.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('eq', require('../eq')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/equals.js b/node_modules/strong-soap/node_modules/lodash/fp/equals.js new file mode 100644 index 00000000..e6a5ce0c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/equals.js @@ -0,0 +1 @@ +module.exports = require('./isEqual'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/escape.js b/node_modules/strong-soap/node_modules/lodash/fp/escape.js new file mode 100644 index 00000000..52c1fbba --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/escape.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('escape', require('../escape'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/escapeRegExp.js b/node_modules/strong-soap/node_modules/lodash/fp/escapeRegExp.js new file mode 100644 index 00000000..369b2eff --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/escapeRegExp.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('escapeRegExp', require('../escapeRegExp'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/every.js b/node_modules/strong-soap/node_modules/lodash/fp/every.js new file mode 100644 index 00000000..95c2776c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/every.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('every', require('../every')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/extend.js b/node_modules/strong-soap/node_modules/lodash/fp/extend.js new file mode 100644 index 00000000..e00166c2 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/extend.js @@ -0,0 +1 @@ +module.exports = require('./assignIn'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/extendAll.js b/node_modules/strong-soap/node_modules/lodash/fp/extendAll.js new file mode 100644 index 00000000..cc55b64f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/extendAll.js @@ -0,0 +1 @@ +module.exports = require('./assignInAll'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/extendAllWith.js b/node_modules/strong-soap/node_modules/lodash/fp/extendAllWith.js new file mode 100644 index 00000000..6679d208 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/extendAllWith.js @@ -0,0 +1 @@ +module.exports = require('./assignInAllWith'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/extendWith.js b/node_modules/strong-soap/node_modules/lodash/fp/extendWith.js new file mode 100644 index 00000000..dbdcb3b4 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/extendWith.js @@ -0,0 +1 @@ +module.exports = require('./assignInWith'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/fill.js b/node_modules/strong-soap/node_modules/lodash/fp/fill.js new file mode 100644 index 00000000..b2d47e84 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/fill.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('fill', require('../fill')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/filter.js b/node_modules/strong-soap/node_modules/lodash/fp/filter.js new file mode 100644 index 00000000..796d501c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/filter.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('filter', require('../filter')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/find.js b/node_modules/strong-soap/node_modules/lodash/fp/find.js new file mode 100644 index 00000000..f805d336 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/find.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('find', require('../find')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/findFrom.js b/node_modules/strong-soap/node_modules/lodash/fp/findFrom.js new file mode 100644 index 00000000..da8275e8 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/findFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('findFrom', require('../find')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/findIndex.js b/node_modules/strong-soap/node_modules/lodash/fp/findIndex.js new file mode 100644 index 00000000..8c15fd11 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/findIndex.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('findIndex', require('../findIndex')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/findIndexFrom.js b/node_modules/strong-soap/node_modules/lodash/fp/findIndexFrom.js new file mode 100644 index 00000000..32e98cb9 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/findIndexFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('findIndexFrom', require('../findIndex')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/findKey.js b/node_modules/strong-soap/node_modules/lodash/fp/findKey.js new file mode 100644 index 00000000..475bcfa8 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/findKey.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('findKey', require('../findKey')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/findLast.js b/node_modules/strong-soap/node_modules/lodash/fp/findLast.js new file mode 100644 index 00000000..093fe94e --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/findLast.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('findLast', require('../findLast')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/findLastFrom.js b/node_modules/strong-soap/node_modules/lodash/fp/findLastFrom.js new file mode 100644 index 00000000..76c38fba --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/findLastFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('findLastFrom', require('../findLast')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/findLastIndex.js b/node_modules/strong-soap/node_modules/lodash/fp/findLastIndex.js new file mode 100644 index 00000000..36986df0 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/findLastIndex.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('findLastIndex', require('../findLastIndex')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/findLastIndexFrom.js b/node_modules/strong-soap/node_modules/lodash/fp/findLastIndexFrom.js new file mode 100644 index 00000000..34c8176c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/findLastIndexFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('findLastIndexFrom', require('../findLastIndex')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/findLastKey.js b/node_modules/strong-soap/node_modules/lodash/fp/findLastKey.js new file mode 100644 index 00000000..5f81b604 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/findLastKey.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('findLastKey', require('../findLastKey')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/first.js b/node_modules/strong-soap/node_modules/lodash/fp/first.js new file mode 100644 index 00000000..53f4ad13 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/first.js @@ -0,0 +1 @@ +module.exports = require('./head'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/flatMap.js b/node_modules/strong-soap/node_modules/lodash/fp/flatMap.js new file mode 100644 index 00000000..d01dc4d0 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/flatMap.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('flatMap', require('../flatMap')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/flatMapDeep.js b/node_modules/strong-soap/node_modules/lodash/fp/flatMapDeep.js new file mode 100644 index 00000000..569c42eb --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/flatMapDeep.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('flatMapDeep', require('../flatMapDeep')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/flatMapDepth.js b/node_modules/strong-soap/node_modules/lodash/fp/flatMapDepth.js new file mode 100644 index 00000000..6eb68fde --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/flatMapDepth.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('flatMapDepth', require('../flatMapDepth')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/flatten.js b/node_modules/strong-soap/node_modules/lodash/fp/flatten.js new file mode 100644 index 00000000..30425d89 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/flatten.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('flatten', require('../flatten'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/flattenDeep.js b/node_modules/strong-soap/node_modules/lodash/fp/flattenDeep.js new file mode 100644 index 00000000..aed5db27 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/flattenDeep.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('flattenDeep', require('../flattenDeep'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/flattenDepth.js b/node_modules/strong-soap/node_modules/lodash/fp/flattenDepth.js new file mode 100644 index 00000000..ad65e378 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/flattenDepth.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('flattenDepth', require('../flattenDepth')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/flip.js b/node_modules/strong-soap/node_modules/lodash/fp/flip.js new file mode 100644 index 00000000..0547e7b4 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/flip.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('flip', require('../flip'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/floor.js b/node_modules/strong-soap/node_modules/lodash/fp/floor.js new file mode 100644 index 00000000..a6cf3358 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/floor.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('floor', require('../floor')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/flow.js b/node_modules/strong-soap/node_modules/lodash/fp/flow.js new file mode 100644 index 00000000..cd83677a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/flow.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('flow', require('../flow')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/flowRight.js b/node_modules/strong-soap/node_modules/lodash/fp/flowRight.js new file mode 100644 index 00000000..972a5b9b --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/flowRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('flowRight', require('../flowRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/forEach.js b/node_modules/strong-soap/node_modules/lodash/fp/forEach.js new file mode 100644 index 00000000..2f494521 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/forEach.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('forEach', require('../forEach')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/forEachRight.js b/node_modules/strong-soap/node_modules/lodash/fp/forEachRight.js new file mode 100644 index 00000000..3ff97336 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/forEachRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('forEachRight', require('../forEachRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/forIn.js b/node_modules/strong-soap/node_modules/lodash/fp/forIn.js new file mode 100644 index 00000000..9341749b --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/forIn.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('forIn', require('../forIn')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/forInRight.js b/node_modules/strong-soap/node_modules/lodash/fp/forInRight.js new file mode 100644 index 00000000..cecf8bbf --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/forInRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('forInRight', require('../forInRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/forOwn.js b/node_modules/strong-soap/node_modules/lodash/fp/forOwn.js new file mode 100644 index 00000000..246449e9 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/forOwn.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('forOwn', require('../forOwn')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/forOwnRight.js b/node_modules/strong-soap/node_modules/lodash/fp/forOwnRight.js new file mode 100644 index 00000000..c5e826e0 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/forOwnRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('forOwnRight', require('../forOwnRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/fromPairs.js b/node_modules/strong-soap/node_modules/lodash/fp/fromPairs.js new file mode 100644 index 00000000..f8cc5968 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/fromPairs.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('fromPairs', require('../fromPairs')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/function.js b/node_modules/strong-soap/node_modules/lodash/fp/function.js new file mode 100644 index 00000000..dfe69b1f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/function.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../function')); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/functions.js b/node_modules/strong-soap/node_modules/lodash/fp/functions.js new file mode 100644 index 00000000..09d1bb1b --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/functions.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('functions', require('../functions'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/functionsIn.js b/node_modules/strong-soap/node_modules/lodash/fp/functionsIn.js new file mode 100644 index 00000000..2cfeb83e --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/functionsIn.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('functionsIn', require('../functionsIn'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/get.js b/node_modules/strong-soap/node_modules/lodash/fp/get.js new file mode 100644 index 00000000..6d3a3286 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/get.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('get', require('../get')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/getOr.js b/node_modules/strong-soap/node_modules/lodash/fp/getOr.js new file mode 100644 index 00000000..7dbf771f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/getOr.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('getOr', require('../get')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/groupBy.js b/node_modules/strong-soap/node_modules/lodash/fp/groupBy.js new file mode 100644 index 00000000..fc0bc78a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/groupBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('groupBy', require('../groupBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/gt.js b/node_modules/strong-soap/node_modules/lodash/fp/gt.js new file mode 100644 index 00000000..9e57c808 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/gt.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('gt', require('../gt')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/gte.js b/node_modules/strong-soap/node_modules/lodash/fp/gte.js new file mode 100644 index 00000000..45847863 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/gte.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('gte', require('../gte')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/has.js b/node_modules/strong-soap/node_modules/lodash/fp/has.js new file mode 100644 index 00000000..b9012983 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/has.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('has', require('../has')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/hasIn.js b/node_modules/strong-soap/node_modules/lodash/fp/hasIn.js new file mode 100644 index 00000000..b3c3d1a3 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/hasIn.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('hasIn', require('../hasIn')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/head.js b/node_modules/strong-soap/node_modules/lodash/fp/head.js new file mode 100644 index 00000000..2694f0a2 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/head.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('head', require('../head'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/identical.js b/node_modules/strong-soap/node_modules/lodash/fp/identical.js new file mode 100644 index 00000000..85563f4a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/identical.js @@ -0,0 +1 @@ +module.exports = require('./eq'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/identity.js b/node_modules/strong-soap/node_modules/lodash/fp/identity.js new file mode 100644 index 00000000..096415a5 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/identity.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('identity', require('../identity'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/inRange.js b/node_modules/strong-soap/node_modules/lodash/fp/inRange.js new file mode 100644 index 00000000..202d940b --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/inRange.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('inRange', require('../inRange')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/includes.js b/node_modules/strong-soap/node_modules/lodash/fp/includes.js new file mode 100644 index 00000000..11467805 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/includes.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('includes', require('../includes')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/includesFrom.js b/node_modules/strong-soap/node_modules/lodash/fp/includesFrom.js new file mode 100644 index 00000000..683afdb4 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/includesFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('includesFrom', require('../includes')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/indexBy.js b/node_modules/strong-soap/node_modules/lodash/fp/indexBy.js new file mode 100644 index 00000000..7e64bc0f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/indexBy.js @@ -0,0 +1 @@ +module.exports = require('./keyBy'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/indexOf.js b/node_modules/strong-soap/node_modules/lodash/fp/indexOf.js new file mode 100644 index 00000000..524658eb --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/indexOf.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('indexOf', require('../indexOf')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/indexOfFrom.js b/node_modules/strong-soap/node_modules/lodash/fp/indexOfFrom.js new file mode 100644 index 00000000..d99c822f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/indexOfFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('indexOfFrom', require('../indexOf')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/init.js b/node_modules/strong-soap/node_modules/lodash/fp/init.js new file mode 100644 index 00000000..2f88d8b0 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/init.js @@ -0,0 +1 @@ +module.exports = require('./initial'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/initial.js b/node_modules/strong-soap/node_modules/lodash/fp/initial.js new file mode 100644 index 00000000..b732ba0b --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/initial.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('initial', require('../initial'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/intersection.js b/node_modules/strong-soap/node_modules/lodash/fp/intersection.js new file mode 100644 index 00000000..52936d56 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/intersection.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('intersection', require('../intersection')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/intersectionBy.js b/node_modules/strong-soap/node_modules/lodash/fp/intersectionBy.js new file mode 100644 index 00000000..72629f27 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/intersectionBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('intersectionBy', require('../intersectionBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/intersectionWith.js b/node_modules/strong-soap/node_modules/lodash/fp/intersectionWith.js new file mode 100644 index 00000000..e064f400 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/intersectionWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('intersectionWith', require('../intersectionWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/invert.js b/node_modules/strong-soap/node_modules/lodash/fp/invert.js new file mode 100644 index 00000000..2d5d1f0d --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/invert.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('invert', require('../invert')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/invertBy.js b/node_modules/strong-soap/node_modules/lodash/fp/invertBy.js new file mode 100644 index 00000000..63ca97ec --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/invertBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('invertBy', require('../invertBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/invertObj.js b/node_modules/strong-soap/node_modules/lodash/fp/invertObj.js new file mode 100644 index 00000000..f1d842e4 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/invertObj.js @@ -0,0 +1 @@ +module.exports = require('./invert'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/invoke.js b/node_modules/strong-soap/node_modules/lodash/fp/invoke.js new file mode 100644 index 00000000..fcf17f0d --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/invoke.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('invoke', require('../invoke')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/invokeArgs.js b/node_modules/strong-soap/node_modules/lodash/fp/invokeArgs.js new file mode 100644 index 00000000..d3f2953f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/invokeArgs.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('invokeArgs', require('../invoke')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/invokeArgsMap.js b/node_modules/strong-soap/node_modules/lodash/fp/invokeArgsMap.js new file mode 100644 index 00000000..eaa9f84f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/invokeArgsMap.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('invokeArgsMap', require('../invokeMap')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/invokeMap.js b/node_modules/strong-soap/node_modules/lodash/fp/invokeMap.js new file mode 100644 index 00000000..6515fd73 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/invokeMap.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('invokeMap', require('../invokeMap')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isArguments.js b/node_modules/strong-soap/node_modules/lodash/fp/isArguments.js new file mode 100644 index 00000000..1d93c9e5 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isArguments.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isArguments', require('../isArguments'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isArray.js b/node_modules/strong-soap/node_modules/lodash/fp/isArray.js new file mode 100644 index 00000000..ba7ade8d --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isArray.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isArray', require('../isArray'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isArrayBuffer.js b/node_modules/strong-soap/node_modules/lodash/fp/isArrayBuffer.js new file mode 100644 index 00000000..5088513f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isArrayBuffer.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isArrayBuffer', require('../isArrayBuffer'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isArrayLike.js b/node_modules/strong-soap/node_modules/lodash/fp/isArrayLike.js new file mode 100644 index 00000000..8f1856bf --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isArrayLike.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isArrayLike', require('../isArrayLike'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isArrayLikeObject.js b/node_modules/strong-soap/node_modules/lodash/fp/isArrayLikeObject.js new file mode 100644 index 00000000..21084984 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isArrayLikeObject.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isArrayLikeObject', require('../isArrayLikeObject'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isBoolean.js b/node_modules/strong-soap/node_modules/lodash/fp/isBoolean.js new file mode 100644 index 00000000..9339f75b --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isBoolean.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isBoolean', require('../isBoolean'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isBuffer.js b/node_modules/strong-soap/node_modules/lodash/fp/isBuffer.js new file mode 100644 index 00000000..e60b1238 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isBuffer.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isBuffer', require('../isBuffer'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isDate.js b/node_modules/strong-soap/node_modules/lodash/fp/isDate.js new file mode 100644 index 00000000..dc41d089 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isDate.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isDate', require('../isDate'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isElement.js b/node_modules/strong-soap/node_modules/lodash/fp/isElement.js new file mode 100644 index 00000000..18ee039a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isElement.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isElement', require('../isElement'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isEmpty.js b/node_modules/strong-soap/node_modules/lodash/fp/isEmpty.js new file mode 100644 index 00000000..0f4ae841 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isEmpty.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isEmpty', require('../isEmpty'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isEqual.js b/node_modules/strong-soap/node_modules/lodash/fp/isEqual.js new file mode 100644 index 00000000..41383865 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isEqual.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isEqual', require('../isEqual')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isEqualWith.js b/node_modules/strong-soap/node_modules/lodash/fp/isEqualWith.js new file mode 100644 index 00000000..029ff5cd --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isEqualWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isEqualWith', require('../isEqualWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isError.js b/node_modules/strong-soap/node_modules/lodash/fp/isError.js new file mode 100644 index 00000000..3dfd81cc --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isError.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isError', require('../isError'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isFinite.js b/node_modules/strong-soap/node_modules/lodash/fp/isFinite.js new file mode 100644 index 00000000..0b647b84 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isFinite.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isFinite', require('../isFinite'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isFunction.js b/node_modules/strong-soap/node_modules/lodash/fp/isFunction.js new file mode 100644 index 00000000..ff8e5c45 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isFunction.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isFunction', require('../isFunction'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isInteger.js b/node_modules/strong-soap/node_modules/lodash/fp/isInteger.js new file mode 100644 index 00000000..67af4ff6 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isInteger.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isInteger', require('../isInteger'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isLength.js b/node_modules/strong-soap/node_modules/lodash/fp/isLength.js new file mode 100644 index 00000000..fc101c5a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isLength.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isLength', require('../isLength'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isMap.js b/node_modules/strong-soap/node_modules/lodash/fp/isMap.js new file mode 100644 index 00000000..a209aa66 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isMap.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isMap', require('../isMap'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isMatch.js b/node_modules/strong-soap/node_modules/lodash/fp/isMatch.js new file mode 100644 index 00000000..6264ca17 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isMatch.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isMatch', require('../isMatch')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isMatchWith.js b/node_modules/strong-soap/node_modules/lodash/fp/isMatchWith.js new file mode 100644 index 00000000..d95f3193 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isMatchWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isMatchWith', require('../isMatchWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isNaN.js b/node_modules/strong-soap/node_modules/lodash/fp/isNaN.js new file mode 100644 index 00000000..66a978f1 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isNaN.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isNaN', require('../isNaN'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isNative.js b/node_modules/strong-soap/node_modules/lodash/fp/isNative.js new file mode 100644 index 00000000..3d775ba9 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isNative.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isNative', require('../isNative'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isNil.js b/node_modules/strong-soap/node_modules/lodash/fp/isNil.js new file mode 100644 index 00000000..5952c028 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isNil.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isNil', require('../isNil'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isNull.js b/node_modules/strong-soap/node_modules/lodash/fp/isNull.js new file mode 100644 index 00000000..f201a354 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isNull.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isNull', require('../isNull'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isNumber.js b/node_modules/strong-soap/node_modules/lodash/fp/isNumber.js new file mode 100644 index 00000000..a2b5fa04 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isNumber.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isNumber', require('../isNumber'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isObject.js b/node_modules/strong-soap/node_modules/lodash/fp/isObject.js new file mode 100644 index 00000000..231ace03 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isObject.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isObject', require('../isObject'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isObjectLike.js b/node_modules/strong-soap/node_modules/lodash/fp/isObjectLike.js new file mode 100644 index 00000000..f16082e6 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isObjectLike.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isObjectLike', require('../isObjectLike'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isPlainObject.js b/node_modules/strong-soap/node_modules/lodash/fp/isPlainObject.js new file mode 100644 index 00000000..b5bea90d --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isPlainObject.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isPlainObject', require('../isPlainObject'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isRegExp.js b/node_modules/strong-soap/node_modules/lodash/fp/isRegExp.js new file mode 100644 index 00000000..12a1a3d7 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isRegExp.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isRegExp', require('../isRegExp'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isSafeInteger.js b/node_modules/strong-soap/node_modules/lodash/fp/isSafeInteger.js new file mode 100644 index 00000000..7230f552 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isSafeInteger.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isSafeInteger', require('../isSafeInteger'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isSet.js b/node_modules/strong-soap/node_modules/lodash/fp/isSet.js new file mode 100644 index 00000000..35c01f6f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isSet.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isSet', require('../isSet'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isString.js b/node_modules/strong-soap/node_modules/lodash/fp/isString.js new file mode 100644 index 00000000..1fd0679e --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isString.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isString', require('../isString'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isSymbol.js b/node_modules/strong-soap/node_modules/lodash/fp/isSymbol.js new file mode 100644 index 00000000..38676956 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isSymbol.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isSymbol', require('../isSymbol'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isTypedArray.js b/node_modules/strong-soap/node_modules/lodash/fp/isTypedArray.js new file mode 100644 index 00000000..85679538 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isTypedArray.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isTypedArray', require('../isTypedArray'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isUndefined.js b/node_modules/strong-soap/node_modules/lodash/fp/isUndefined.js new file mode 100644 index 00000000..ddbca31c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isUndefined.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isUndefined', require('../isUndefined'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isWeakMap.js b/node_modules/strong-soap/node_modules/lodash/fp/isWeakMap.js new file mode 100644 index 00000000..ef60c613 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isWeakMap.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isWeakMap', require('../isWeakMap'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/isWeakSet.js b/node_modules/strong-soap/node_modules/lodash/fp/isWeakSet.js new file mode 100644 index 00000000..c99bfaa6 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/isWeakSet.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isWeakSet', require('../isWeakSet'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/iteratee.js b/node_modules/strong-soap/node_modules/lodash/fp/iteratee.js new file mode 100644 index 00000000..9f0f7173 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/iteratee.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('iteratee', require('../iteratee')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/join.js b/node_modules/strong-soap/node_modules/lodash/fp/join.js new file mode 100644 index 00000000..a220e003 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/join.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('join', require('../join')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/juxt.js b/node_modules/strong-soap/node_modules/lodash/fp/juxt.js new file mode 100644 index 00000000..f71e04e0 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/juxt.js @@ -0,0 +1 @@ +module.exports = require('./over'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/kebabCase.js b/node_modules/strong-soap/node_modules/lodash/fp/kebabCase.js new file mode 100644 index 00000000..60737f17 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/kebabCase.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('kebabCase', require('../kebabCase'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/keyBy.js b/node_modules/strong-soap/node_modules/lodash/fp/keyBy.js new file mode 100644 index 00000000..9a6a85d4 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/keyBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('keyBy', require('../keyBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/keys.js b/node_modules/strong-soap/node_modules/lodash/fp/keys.js new file mode 100644 index 00000000..e12bb07f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/keys.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('keys', require('../keys'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/keysIn.js b/node_modules/strong-soap/node_modules/lodash/fp/keysIn.js new file mode 100644 index 00000000..f3eb36a8 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/keysIn.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('keysIn', require('../keysIn'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/lang.js b/node_modules/strong-soap/node_modules/lodash/fp/lang.js new file mode 100644 index 00000000..08cc9c14 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/lang.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../lang')); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/last.js b/node_modules/strong-soap/node_modules/lodash/fp/last.js new file mode 100644 index 00000000..0f716993 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/last.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('last', require('../last'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/lastIndexOf.js b/node_modules/strong-soap/node_modules/lodash/fp/lastIndexOf.js new file mode 100644 index 00000000..ddf39c30 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/lastIndexOf.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('lastIndexOf', require('../lastIndexOf')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/lastIndexOfFrom.js b/node_modules/strong-soap/node_modules/lodash/fp/lastIndexOfFrom.js new file mode 100644 index 00000000..1ff6a0b5 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/lastIndexOfFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('lastIndexOfFrom', require('../lastIndexOf')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/lowerCase.js b/node_modules/strong-soap/node_modules/lodash/fp/lowerCase.js new file mode 100644 index 00000000..ea64bc15 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/lowerCase.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('lowerCase', require('../lowerCase'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/lowerFirst.js b/node_modules/strong-soap/node_modules/lodash/fp/lowerFirst.js new file mode 100644 index 00000000..539720a3 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/lowerFirst.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('lowerFirst', require('../lowerFirst'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/lt.js b/node_modules/strong-soap/node_modules/lodash/fp/lt.js new file mode 100644 index 00000000..a31d21ec --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/lt.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('lt', require('../lt')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/lte.js b/node_modules/strong-soap/node_modules/lodash/fp/lte.js new file mode 100644 index 00000000..d795d10e --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/lte.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('lte', require('../lte')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/map.js b/node_modules/strong-soap/node_modules/lodash/fp/map.js new file mode 100644 index 00000000..cf987943 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/map.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('map', require('../map')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/mapKeys.js b/node_modules/strong-soap/node_modules/lodash/fp/mapKeys.js new file mode 100644 index 00000000..16845870 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/mapKeys.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('mapKeys', require('../mapKeys')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/mapValues.js b/node_modules/strong-soap/node_modules/lodash/fp/mapValues.js new file mode 100644 index 00000000..40049727 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/mapValues.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('mapValues', require('../mapValues')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/matches.js b/node_modules/strong-soap/node_modules/lodash/fp/matches.js new file mode 100644 index 00000000..29d1e1e4 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/matches.js @@ -0,0 +1 @@ +module.exports = require('./isMatch'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/matchesProperty.js b/node_modules/strong-soap/node_modules/lodash/fp/matchesProperty.js new file mode 100644 index 00000000..4575bd24 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/matchesProperty.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('matchesProperty', require('../matchesProperty')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/math.js b/node_modules/strong-soap/node_modules/lodash/fp/math.js new file mode 100644 index 00000000..e8f50f79 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/math.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../math')); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/max.js b/node_modules/strong-soap/node_modules/lodash/fp/max.js new file mode 100644 index 00000000..a66acac2 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/max.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('max', require('../max'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/maxBy.js b/node_modules/strong-soap/node_modules/lodash/fp/maxBy.js new file mode 100644 index 00000000..d083fd64 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/maxBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('maxBy', require('../maxBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/mean.js b/node_modules/strong-soap/node_modules/lodash/fp/mean.js new file mode 100644 index 00000000..31172460 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/mean.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('mean', require('../mean'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/meanBy.js b/node_modules/strong-soap/node_modules/lodash/fp/meanBy.js new file mode 100644 index 00000000..556f25ed --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/meanBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('meanBy', require('../meanBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/memoize.js b/node_modules/strong-soap/node_modules/lodash/fp/memoize.js new file mode 100644 index 00000000..638eec63 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/memoize.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('memoize', require('../memoize')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/merge.js b/node_modules/strong-soap/node_modules/lodash/fp/merge.js new file mode 100644 index 00000000..ac66adde --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/merge.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('merge', require('../merge')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/mergeAll.js b/node_modules/strong-soap/node_modules/lodash/fp/mergeAll.js new file mode 100644 index 00000000..a3674d67 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/mergeAll.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('mergeAll', require('../merge')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/mergeAllWith.js b/node_modules/strong-soap/node_modules/lodash/fp/mergeAllWith.js new file mode 100644 index 00000000..4bd4206d --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/mergeAllWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('mergeAllWith', require('../mergeWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/mergeWith.js b/node_modules/strong-soap/node_modules/lodash/fp/mergeWith.js new file mode 100644 index 00000000..00d44d5e --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/mergeWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('mergeWith', require('../mergeWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/method.js b/node_modules/strong-soap/node_modules/lodash/fp/method.js new file mode 100644 index 00000000..f4060c68 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/method.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('method', require('../method')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/methodOf.js b/node_modules/strong-soap/node_modules/lodash/fp/methodOf.js new file mode 100644 index 00000000..61399056 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/methodOf.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('methodOf', require('../methodOf')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/min.js b/node_modules/strong-soap/node_modules/lodash/fp/min.js new file mode 100644 index 00000000..d12c6b40 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/min.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('min', require('../min'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/minBy.js b/node_modules/strong-soap/node_modules/lodash/fp/minBy.js new file mode 100644 index 00000000..fdb9e24d --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/minBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('minBy', require('../minBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/mixin.js b/node_modules/strong-soap/node_modules/lodash/fp/mixin.js new file mode 100644 index 00000000..332e6fbf --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/mixin.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('mixin', require('../mixin')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/multiply.js b/node_modules/strong-soap/node_modules/lodash/fp/multiply.js new file mode 100644 index 00000000..4dcf0b0d --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/multiply.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('multiply', require('../multiply')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/nAry.js b/node_modules/strong-soap/node_modules/lodash/fp/nAry.js new file mode 100644 index 00000000..f262a76c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/nAry.js @@ -0,0 +1 @@ +module.exports = require('./ary'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/negate.js b/node_modules/strong-soap/node_modules/lodash/fp/negate.js new file mode 100644 index 00000000..8b6dc7c5 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/negate.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('negate', require('../negate'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/next.js b/node_modules/strong-soap/node_modules/lodash/fp/next.js new file mode 100644 index 00000000..140155e2 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/next.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('next', require('../next'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/noop.js b/node_modules/strong-soap/node_modules/lodash/fp/noop.js new file mode 100644 index 00000000..b9e32cc8 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/noop.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('noop', require('../noop'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/now.js b/node_modules/strong-soap/node_modules/lodash/fp/now.js new file mode 100644 index 00000000..6de2068a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/now.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('now', require('../now'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/nth.js b/node_modules/strong-soap/node_modules/lodash/fp/nth.js new file mode 100644 index 00000000..da4fda74 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/nth.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('nth', require('../nth')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/nthArg.js b/node_modules/strong-soap/node_modules/lodash/fp/nthArg.js new file mode 100644 index 00000000..fce31659 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/nthArg.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('nthArg', require('../nthArg')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/number.js b/node_modules/strong-soap/node_modules/lodash/fp/number.js new file mode 100644 index 00000000..5c10b884 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/number.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../number')); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/object.js b/node_modules/strong-soap/node_modules/lodash/fp/object.js new file mode 100644 index 00000000..ae39a134 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/object.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../object')); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/omit.js b/node_modules/strong-soap/node_modules/lodash/fp/omit.js new file mode 100644 index 00000000..fd685291 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/omit.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('omit', require('../omit')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/omitAll.js b/node_modules/strong-soap/node_modules/lodash/fp/omitAll.js new file mode 100644 index 00000000..144cf4b9 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/omitAll.js @@ -0,0 +1 @@ +module.exports = require('./omit'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/omitBy.js b/node_modules/strong-soap/node_modules/lodash/fp/omitBy.js new file mode 100644 index 00000000..90df7380 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/omitBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('omitBy', require('../omitBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/once.js b/node_modules/strong-soap/node_modules/lodash/fp/once.js new file mode 100644 index 00000000..f8f0a5c7 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/once.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('once', require('../once'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/orderBy.js b/node_modules/strong-soap/node_modules/lodash/fp/orderBy.js new file mode 100644 index 00000000..848e2107 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/orderBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('orderBy', require('../orderBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/over.js b/node_modules/strong-soap/node_modules/lodash/fp/over.js new file mode 100644 index 00000000..01eba7b9 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/over.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('over', require('../over')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/overArgs.js b/node_modules/strong-soap/node_modules/lodash/fp/overArgs.js new file mode 100644 index 00000000..738556f0 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/overArgs.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('overArgs', require('../overArgs')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/overEvery.js b/node_modules/strong-soap/node_modules/lodash/fp/overEvery.js new file mode 100644 index 00000000..9f5a032d --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/overEvery.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('overEvery', require('../overEvery')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/overSome.js b/node_modules/strong-soap/node_modules/lodash/fp/overSome.js new file mode 100644 index 00000000..15939d58 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/overSome.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('overSome', require('../overSome')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/pad.js b/node_modules/strong-soap/node_modules/lodash/fp/pad.js new file mode 100644 index 00000000..f1dea4a9 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/pad.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('pad', require('../pad')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/padChars.js b/node_modules/strong-soap/node_modules/lodash/fp/padChars.js new file mode 100644 index 00000000..d6e0804c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/padChars.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('padChars', require('../pad')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/padCharsEnd.js b/node_modules/strong-soap/node_modules/lodash/fp/padCharsEnd.js new file mode 100644 index 00000000..d4ab79ad --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/padCharsEnd.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('padCharsEnd', require('../padEnd')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/padCharsStart.js b/node_modules/strong-soap/node_modules/lodash/fp/padCharsStart.js new file mode 100644 index 00000000..a08a3000 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/padCharsStart.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('padCharsStart', require('../padStart')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/padEnd.js b/node_modules/strong-soap/node_modules/lodash/fp/padEnd.js new file mode 100644 index 00000000..a8522ec3 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/padEnd.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('padEnd', require('../padEnd')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/padStart.js b/node_modules/strong-soap/node_modules/lodash/fp/padStart.js new file mode 100644 index 00000000..f4ca79d4 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/padStart.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('padStart', require('../padStart')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/parseInt.js b/node_modules/strong-soap/node_modules/lodash/fp/parseInt.js new file mode 100644 index 00000000..27314ccb --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/parseInt.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('parseInt', require('../parseInt')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/partial.js b/node_modules/strong-soap/node_modules/lodash/fp/partial.js new file mode 100644 index 00000000..5d460159 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/partial.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('partial', require('../partial')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/partialRight.js b/node_modules/strong-soap/node_modules/lodash/fp/partialRight.js new file mode 100644 index 00000000..7f05fed0 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/partialRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('partialRight', require('../partialRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/partition.js b/node_modules/strong-soap/node_modules/lodash/fp/partition.js new file mode 100644 index 00000000..2ebcacc1 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/partition.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('partition', require('../partition')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/path.js b/node_modules/strong-soap/node_modules/lodash/fp/path.js new file mode 100644 index 00000000..b29cfb21 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/path.js @@ -0,0 +1 @@ +module.exports = require('./get'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/pathEq.js b/node_modules/strong-soap/node_modules/lodash/fp/pathEq.js new file mode 100644 index 00000000..36c027a3 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/pathEq.js @@ -0,0 +1 @@ +module.exports = require('./matchesProperty'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/pathOr.js b/node_modules/strong-soap/node_modules/lodash/fp/pathOr.js new file mode 100644 index 00000000..4ab58209 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/pathOr.js @@ -0,0 +1 @@ +module.exports = require('./getOr'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/paths.js b/node_modules/strong-soap/node_modules/lodash/fp/paths.js new file mode 100644 index 00000000..1eb7950a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/paths.js @@ -0,0 +1 @@ +module.exports = require('./at'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/pick.js b/node_modules/strong-soap/node_modules/lodash/fp/pick.js new file mode 100644 index 00000000..197393de --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/pick.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('pick', require('../pick')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/pickAll.js b/node_modules/strong-soap/node_modules/lodash/fp/pickAll.js new file mode 100644 index 00000000..a8ecd461 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/pickAll.js @@ -0,0 +1 @@ +module.exports = require('./pick'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/pickBy.js b/node_modules/strong-soap/node_modules/lodash/fp/pickBy.js new file mode 100644 index 00000000..d832d16b --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/pickBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('pickBy', require('../pickBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/pipe.js b/node_modules/strong-soap/node_modules/lodash/fp/pipe.js new file mode 100644 index 00000000..b2e1e2cc --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/pipe.js @@ -0,0 +1 @@ +module.exports = require('./flow'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/placeholder.js b/node_modules/strong-soap/node_modules/lodash/fp/placeholder.js new file mode 100644 index 00000000..1ce17393 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/placeholder.js @@ -0,0 +1,6 @@ +/** + * The default argument placeholder value for methods. + * + * @type {Object} + */ +module.exports = {}; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/plant.js b/node_modules/strong-soap/node_modules/lodash/fp/plant.js new file mode 100644 index 00000000..eca8f32b --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/plant.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('plant', require('../plant'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/pluck.js b/node_modules/strong-soap/node_modules/lodash/fp/pluck.js new file mode 100644 index 00000000..0d1e1abf --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/pluck.js @@ -0,0 +1 @@ +module.exports = require('./map'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/prop.js b/node_modules/strong-soap/node_modules/lodash/fp/prop.js new file mode 100644 index 00000000..b29cfb21 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/prop.js @@ -0,0 +1 @@ +module.exports = require('./get'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/propEq.js b/node_modules/strong-soap/node_modules/lodash/fp/propEq.js new file mode 100644 index 00000000..36c027a3 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/propEq.js @@ -0,0 +1 @@ +module.exports = require('./matchesProperty'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/propOr.js b/node_modules/strong-soap/node_modules/lodash/fp/propOr.js new file mode 100644 index 00000000..4ab58209 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/propOr.js @@ -0,0 +1 @@ +module.exports = require('./getOr'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/property.js b/node_modules/strong-soap/node_modules/lodash/fp/property.js new file mode 100644 index 00000000..b29cfb21 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/property.js @@ -0,0 +1 @@ +module.exports = require('./get'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/propertyOf.js b/node_modules/strong-soap/node_modules/lodash/fp/propertyOf.js new file mode 100644 index 00000000..f6273ee4 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/propertyOf.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('propertyOf', require('../get')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/props.js b/node_modules/strong-soap/node_modules/lodash/fp/props.js new file mode 100644 index 00000000..1eb7950a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/props.js @@ -0,0 +1 @@ +module.exports = require('./at'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/pull.js b/node_modules/strong-soap/node_modules/lodash/fp/pull.js new file mode 100644 index 00000000..8d7084f0 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/pull.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('pull', require('../pull')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/pullAll.js b/node_modules/strong-soap/node_modules/lodash/fp/pullAll.js new file mode 100644 index 00000000..98d5c9a7 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/pullAll.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('pullAll', require('../pullAll')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/pullAllBy.js b/node_modules/strong-soap/node_modules/lodash/fp/pullAllBy.js new file mode 100644 index 00000000..876bc3bf --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/pullAllBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('pullAllBy', require('../pullAllBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/pullAllWith.js b/node_modules/strong-soap/node_modules/lodash/fp/pullAllWith.js new file mode 100644 index 00000000..f71ba4d7 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/pullAllWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('pullAllWith', require('../pullAllWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/pullAt.js b/node_modules/strong-soap/node_modules/lodash/fp/pullAt.js new file mode 100644 index 00000000..e8b3bb61 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/pullAt.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('pullAt', require('../pullAt')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/random.js b/node_modules/strong-soap/node_modules/lodash/fp/random.js new file mode 100644 index 00000000..99d852e4 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/random.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('random', require('../random')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/range.js b/node_modules/strong-soap/node_modules/lodash/fp/range.js new file mode 100644 index 00000000..a6bb5911 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/range.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('range', require('../range')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/rangeRight.js b/node_modules/strong-soap/node_modules/lodash/fp/rangeRight.js new file mode 100644 index 00000000..fdb712f9 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/rangeRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('rangeRight', require('../rangeRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/rangeStep.js b/node_modules/strong-soap/node_modules/lodash/fp/rangeStep.js new file mode 100644 index 00000000..d72dfc20 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/rangeStep.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('rangeStep', require('../range')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/rangeStepRight.js b/node_modules/strong-soap/node_modules/lodash/fp/rangeStepRight.js new file mode 100644 index 00000000..8b2a67bc --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/rangeStepRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('rangeStepRight', require('../rangeRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/rearg.js b/node_modules/strong-soap/node_modules/lodash/fp/rearg.js new file mode 100644 index 00000000..678e02a3 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/rearg.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('rearg', require('../rearg')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/reduce.js b/node_modules/strong-soap/node_modules/lodash/fp/reduce.js new file mode 100644 index 00000000..4cef0a00 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/reduce.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('reduce', require('../reduce')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/reduceRight.js b/node_modules/strong-soap/node_modules/lodash/fp/reduceRight.js new file mode 100644 index 00000000..caf5bb51 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/reduceRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('reduceRight', require('../reduceRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/reject.js b/node_modules/strong-soap/node_modules/lodash/fp/reject.js new file mode 100644 index 00000000..c1632738 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/reject.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('reject', require('../reject')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/remove.js b/node_modules/strong-soap/node_modules/lodash/fp/remove.js new file mode 100644 index 00000000..e9d13273 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/remove.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('remove', require('../remove')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/repeat.js b/node_modules/strong-soap/node_modules/lodash/fp/repeat.js new file mode 100644 index 00000000..08470f24 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/repeat.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('repeat', require('../repeat')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/replace.js b/node_modules/strong-soap/node_modules/lodash/fp/replace.js new file mode 100644 index 00000000..2227db62 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/replace.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('replace', require('../replace')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/rest.js b/node_modules/strong-soap/node_modules/lodash/fp/rest.js new file mode 100644 index 00000000..c1f3d64b --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/rest.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('rest', require('../rest')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/restFrom.js b/node_modules/strong-soap/node_modules/lodash/fp/restFrom.js new file mode 100644 index 00000000..714e42b5 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/restFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('restFrom', require('../rest')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/result.js b/node_modules/strong-soap/node_modules/lodash/fp/result.js new file mode 100644 index 00000000..f86ce071 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/result.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('result', require('../result')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/reverse.js b/node_modules/strong-soap/node_modules/lodash/fp/reverse.js new file mode 100644 index 00000000..07c9f5e4 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/reverse.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('reverse', require('../reverse')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/round.js b/node_modules/strong-soap/node_modules/lodash/fp/round.js new file mode 100644 index 00000000..4c0e5c82 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/round.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('round', require('../round')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/sample.js b/node_modules/strong-soap/node_modules/lodash/fp/sample.js new file mode 100644 index 00000000..6bea1254 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/sample.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sample', require('../sample'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/sampleSize.js b/node_modules/strong-soap/node_modules/lodash/fp/sampleSize.js new file mode 100644 index 00000000..359ed6fc --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/sampleSize.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sampleSize', require('../sampleSize')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/seq.js b/node_modules/strong-soap/node_modules/lodash/fp/seq.js new file mode 100644 index 00000000..d8f42b0a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/seq.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../seq')); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/set.js b/node_modules/strong-soap/node_modules/lodash/fp/set.js new file mode 100644 index 00000000..0b56a56c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/set.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('set', require('../set')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/setWith.js b/node_modules/strong-soap/node_modules/lodash/fp/setWith.js new file mode 100644 index 00000000..0b584952 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/setWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('setWith', require('../setWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/shuffle.js b/node_modules/strong-soap/node_modules/lodash/fp/shuffle.js new file mode 100644 index 00000000..aa3a1ca5 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/shuffle.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('shuffle', require('../shuffle'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/size.js b/node_modules/strong-soap/node_modules/lodash/fp/size.js new file mode 100644 index 00000000..7490136e --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/size.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('size', require('../size'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/slice.js b/node_modules/strong-soap/node_modules/lodash/fp/slice.js new file mode 100644 index 00000000..15945d32 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/slice.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('slice', require('../slice')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/snakeCase.js b/node_modules/strong-soap/node_modules/lodash/fp/snakeCase.js new file mode 100644 index 00000000..a0ff7808 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/snakeCase.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('snakeCase', require('../snakeCase'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/some.js b/node_modules/strong-soap/node_modules/lodash/fp/some.js new file mode 100644 index 00000000..a4fa2d00 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/some.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('some', require('../some')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/sortBy.js b/node_modules/strong-soap/node_modules/lodash/fp/sortBy.js new file mode 100644 index 00000000..e0790ad5 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/sortBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sortBy', require('../sortBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/sortedIndex.js b/node_modules/strong-soap/node_modules/lodash/fp/sortedIndex.js new file mode 100644 index 00000000..364a0543 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/sortedIndex.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sortedIndex', require('../sortedIndex')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/sortedIndexBy.js b/node_modules/strong-soap/node_modules/lodash/fp/sortedIndexBy.js new file mode 100644 index 00000000..9593dbd1 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/sortedIndexBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sortedIndexBy', require('../sortedIndexBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/sortedIndexOf.js b/node_modules/strong-soap/node_modules/lodash/fp/sortedIndexOf.js new file mode 100644 index 00000000..c9084cab --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/sortedIndexOf.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sortedIndexOf', require('../sortedIndexOf')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/sortedLastIndex.js b/node_modules/strong-soap/node_modules/lodash/fp/sortedLastIndex.js new file mode 100644 index 00000000..47fe241a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/sortedLastIndex.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sortedLastIndex', require('../sortedLastIndex')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/sortedLastIndexBy.js b/node_modules/strong-soap/node_modules/lodash/fp/sortedLastIndexBy.js new file mode 100644 index 00000000..0f9a3473 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/sortedLastIndexBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sortedLastIndexBy', require('../sortedLastIndexBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/sortedLastIndexOf.js b/node_modules/strong-soap/node_modules/lodash/fp/sortedLastIndexOf.js new file mode 100644 index 00000000..0d4d9327 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/sortedLastIndexOf.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sortedLastIndexOf', require('../sortedLastIndexOf')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/sortedUniq.js b/node_modules/strong-soap/node_modules/lodash/fp/sortedUniq.js new file mode 100644 index 00000000..882d2837 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/sortedUniq.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sortedUniq', require('../sortedUniq'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/sortedUniqBy.js b/node_modules/strong-soap/node_modules/lodash/fp/sortedUniqBy.js new file mode 100644 index 00000000..033db91c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/sortedUniqBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sortedUniqBy', require('../sortedUniqBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/split.js b/node_modules/strong-soap/node_modules/lodash/fp/split.js new file mode 100644 index 00000000..14de1a7e --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/split.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('split', require('../split')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/spread.js b/node_modules/strong-soap/node_modules/lodash/fp/spread.js new file mode 100644 index 00000000..2d11b707 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/spread.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('spread', require('../spread')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/spreadFrom.js b/node_modules/strong-soap/node_modules/lodash/fp/spreadFrom.js new file mode 100644 index 00000000..0b630df1 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/spreadFrom.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('spreadFrom', require('../spread')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/startCase.js b/node_modules/strong-soap/node_modules/lodash/fp/startCase.js new file mode 100644 index 00000000..ada98c94 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/startCase.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('startCase', require('../startCase'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/startsWith.js b/node_modules/strong-soap/node_modules/lodash/fp/startsWith.js new file mode 100644 index 00000000..985e2f29 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/startsWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('startsWith', require('../startsWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/string.js b/node_modules/strong-soap/node_modules/lodash/fp/string.js new file mode 100644 index 00000000..773b0370 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/string.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../string')); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/stubArray.js b/node_modules/strong-soap/node_modules/lodash/fp/stubArray.js new file mode 100644 index 00000000..cd604cb4 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/stubArray.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('stubArray', require('../stubArray'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/stubFalse.js b/node_modules/strong-soap/node_modules/lodash/fp/stubFalse.js new file mode 100644 index 00000000..32966645 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/stubFalse.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('stubFalse', require('../stubFalse'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/stubObject.js b/node_modules/strong-soap/node_modules/lodash/fp/stubObject.js new file mode 100644 index 00000000..c6c8ec47 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/stubObject.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('stubObject', require('../stubObject'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/stubString.js b/node_modules/strong-soap/node_modules/lodash/fp/stubString.js new file mode 100644 index 00000000..701051e8 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/stubString.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('stubString', require('../stubString'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/stubTrue.js b/node_modules/strong-soap/node_modules/lodash/fp/stubTrue.js new file mode 100644 index 00000000..9249082c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/stubTrue.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('stubTrue', require('../stubTrue'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/subtract.js b/node_modules/strong-soap/node_modules/lodash/fp/subtract.js new file mode 100644 index 00000000..d32b16d4 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/subtract.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('subtract', require('../subtract')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/sum.js b/node_modules/strong-soap/node_modules/lodash/fp/sum.js new file mode 100644 index 00000000..5cce12b3 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/sum.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sum', require('../sum'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/sumBy.js b/node_modules/strong-soap/node_modules/lodash/fp/sumBy.js new file mode 100644 index 00000000..c8826565 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/sumBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sumBy', require('../sumBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/symmetricDifference.js b/node_modules/strong-soap/node_modules/lodash/fp/symmetricDifference.js new file mode 100644 index 00000000..78c16add --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/symmetricDifference.js @@ -0,0 +1 @@ +module.exports = require('./xor'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/symmetricDifferenceBy.js b/node_modules/strong-soap/node_modules/lodash/fp/symmetricDifferenceBy.js new file mode 100644 index 00000000..298fc7ff --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/symmetricDifferenceBy.js @@ -0,0 +1 @@ +module.exports = require('./xorBy'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/symmetricDifferenceWith.js b/node_modules/strong-soap/node_modules/lodash/fp/symmetricDifferenceWith.js new file mode 100644 index 00000000..70bc6faf --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/symmetricDifferenceWith.js @@ -0,0 +1 @@ +module.exports = require('./xorWith'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/tail.js b/node_modules/strong-soap/node_modules/lodash/fp/tail.js new file mode 100644 index 00000000..f122f0ac --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/tail.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('tail', require('../tail'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/take.js b/node_modules/strong-soap/node_modules/lodash/fp/take.js new file mode 100644 index 00000000..9af98a7b --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/take.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('take', require('../take')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/takeLast.js b/node_modules/strong-soap/node_modules/lodash/fp/takeLast.js new file mode 100644 index 00000000..e98c84a1 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/takeLast.js @@ -0,0 +1 @@ +module.exports = require('./takeRight'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/takeLastWhile.js b/node_modules/strong-soap/node_modules/lodash/fp/takeLastWhile.js new file mode 100644 index 00000000..5367968a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/takeLastWhile.js @@ -0,0 +1 @@ +module.exports = require('./takeRightWhile'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/takeRight.js b/node_modules/strong-soap/node_modules/lodash/fp/takeRight.js new file mode 100644 index 00000000..b82950a6 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/takeRight.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('takeRight', require('../takeRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/takeRightWhile.js b/node_modules/strong-soap/node_modules/lodash/fp/takeRightWhile.js new file mode 100644 index 00000000..8ffb0a28 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/takeRightWhile.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('takeRightWhile', require('../takeRightWhile')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/takeWhile.js b/node_modules/strong-soap/node_modules/lodash/fp/takeWhile.js new file mode 100644 index 00000000..28136644 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/takeWhile.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('takeWhile', require('../takeWhile')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/tap.js b/node_modules/strong-soap/node_modules/lodash/fp/tap.js new file mode 100644 index 00000000..d33ad6ec --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/tap.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('tap', require('../tap')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/template.js b/node_modules/strong-soap/node_modules/lodash/fp/template.js new file mode 100644 index 00000000..74857e1c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/template.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('template', require('../template')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/templateSettings.js b/node_modules/strong-soap/node_modules/lodash/fp/templateSettings.js new file mode 100644 index 00000000..7bcc0a82 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/templateSettings.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('templateSettings', require('../templateSettings'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/throttle.js b/node_modules/strong-soap/node_modules/lodash/fp/throttle.js new file mode 100644 index 00000000..77fff142 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/throttle.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('throttle', require('../throttle')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/thru.js b/node_modules/strong-soap/node_modules/lodash/fp/thru.js new file mode 100644 index 00000000..d42b3b1d --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/thru.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('thru', require('../thru')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/times.js b/node_modules/strong-soap/node_modules/lodash/fp/times.js new file mode 100644 index 00000000..0dab06da --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/times.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('times', require('../times')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/toArray.js b/node_modules/strong-soap/node_modules/lodash/fp/toArray.js new file mode 100644 index 00000000..f0c360ac --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/toArray.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toArray', require('../toArray'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/toFinite.js b/node_modules/strong-soap/node_modules/lodash/fp/toFinite.js new file mode 100644 index 00000000..3a47687d --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/toFinite.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toFinite', require('../toFinite'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/toInteger.js b/node_modules/strong-soap/node_modules/lodash/fp/toInteger.js new file mode 100644 index 00000000..e0af6a75 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/toInteger.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toInteger', require('../toInteger'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/toIterator.js b/node_modules/strong-soap/node_modules/lodash/fp/toIterator.js new file mode 100644 index 00000000..65e6baa9 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/toIterator.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toIterator', require('../toIterator'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/toJSON.js b/node_modules/strong-soap/node_modules/lodash/fp/toJSON.js new file mode 100644 index 00000000..2d718d0b --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/toJSON.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toJSON', require('../toJSON'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/toLength.js b/node_modules/strong-soap/node_modules/lodash/fp/toLength.js new file mode 100644 index 00000000..b97cdd93 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/toLength.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toLength', require('../toLength'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/toLower.js b/node_modules/strong-soap/node_modules/lodash/fp/toLower.js new file mode 100644 index 00000000..616ef36a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/toLower.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toLower', require('../toLower'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/toNumber.js b/node_modules/strong-soap/node_modules/lodash/fp/toNumber.js new file mode 100644 index 00000000..d0c6f4d3 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/toNumber.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toNumber', require('../toNumber'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/toPairs.js b/node_modules/strong-soap/node_modules/lodash/fp/toPairs.js new file mode 100644 index 00000000..af783786 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/toPairs.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toPairs', require('../toPairs'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/toPairsIn.js b/node_modules/strong-soap/node_modules/lodash/fp/toPairsIn.js new file mode 100644 index 00000000..66504abf --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/toPairsIn.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toPairsIn', require('../toPairsIn'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/toPath.js b/node_modules/strong-soap/node_modules/lodash/fp/toPath.js new file mode 100644 index 00000000..b4d5e50f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/toPath.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toPath', require('../toPath'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/toPlainObject.js b/node_modules/strong-soap/node_modules/lodash/fp/toPlainObject.js new file mode 100644 index 00000000..278bb863 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/toPlainObject.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toPlainObject', require('../toPlainObject'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/toSafeInteger.js b/node_modules/strong-soap/node_modules/lodash/fp/toSafeInteger.js new file mode 100644 index 00000000..367a26fd --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/toSafeInteger.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toSafeInteger', require('../toSafeInteger'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/toString.js b/node_modules/strong-soap/node_modules/lodash/fp/toString.js new file mode 100644 index 00000000..cec4f8e2 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/toString.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toString', require('../toString'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/toUpper.js b/node_modules/strong-soap/node_modules/lodash/fp/toUpper.js new file mode 100644 index 00000000..54f9a560 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/toUpper.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toUpper', require('../toUpper'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/transform.js b/node_modules/strong-soap/node_modules/lodash/fp/transform.js new file mode 100644 index 00000000..759d088f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/transform.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('transform', require('../transform')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/trim.js b/node_modules/strong-soap/node_modules/lodash/fp/trim.js new file mode 100644 index 00000000..e6319a74 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/trim.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('trim', require('../trim')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/trimChars.js b/node_modules/strong-soap/node_modules/lodash/fp/trimChars.js new file mode 100644 index 00000000..c9294de4 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/trimChars.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('trimChars', require('../trim')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/trimCharsEnd.js b/node_modules/strong-soap/node_modules/lodash/fp/trimCharsEnd.js new file mode 100644 index 00000000..284bc2f8 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/trimCharsEnd.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('trimCharsEnd', require('../trimEnd')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/trimCharsStart.js b/node_modules/strong-soap/node_modules/lodash/fp/trimCharsStart.js new file mode 100644 index 00000000..ff0ee65d --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/trimCharsStart.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('trimCharsStart', require('../trimStart')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/trimEnd.js b/node_modules/strong-soap/node_modules/lodash/fp/trimEnd.js new file mode 100644 index 00000000..71908805 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/trimEnd.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('trimEnd', require('../trimEnd')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/trimStart.js b/node_modules/strong-soap/node_modules/lodash/fp/trimStart.js new file mode 100644 index 00000000..fda902c3 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/trimStart.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('trimStart', require('../trimStart')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/truncate.js b/node_modules/strong-soap/node_modules/lodash/fp/truncate.js new file mode 100644 index 00000000..d265c1de --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/truncate.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('truncate', require('../truncate')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/unapply.js b/node_modules/strong-soap/node_modules/lodash/fp/unapply.js new file mode 100644 index 00000000..c5dfe779 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/unapply.js @@ -0,0 +1 @@ +module.exports = require('./rest'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/unary.js b/node_modules/strong-soap/node_modules/lodash/fp/unary.js new file mode 100644 index 00000000..286c945f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/unary.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('unary', require('../unary'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/unescape.js b/node_modules/strong-soap/node_modules/lodash/fp/unescape.js new file mode 100644 index 00000000..fddcb46e --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/unescape.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('unescape', require('../unescape'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/union.js b/node_modules/strong-soap/node_modules/lodash/fp/union.js new file mode 100644 index 00000000..ef8228d7 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/union.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('union', require('../union')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/unionBy.js b/node_modules/strong-soap/node_modules/lodash/fp/unionBy.js new file mode 100644 index 00000000..603687a1 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/unionBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('unionBy', require('../unionBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/unionWith.js b/node_modules/strong-soap/node_modules/lodash/fp/unionWith.js new file mode 100644 index 00000000..65bb3a79 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/unionWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('unionWith', require('../unionWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/uniq.js b/node_modules/strong-soap/node_modules/lodash/fp/uniq.js new file mode 100644 index 00000000..bc185249 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/uniq.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('uniq', require('../uniq'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/uniqBy.js b/node_modules/strong-soap/node_modules/lodash/fp/uniqBy.js new file mode 100644 index 00000000..634c6a8b --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/uniqBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('uniqBy', require('../uniqBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/uniqWith.js b/node_modules/strong-soap/node_modules/lodash/fp/uniqWith.js new file mode 100644 index 00000000..0ec601a9 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/uniqWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('uniqWith', require('../uniqWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/uniqueId.js b/node_modules/strong-soap/node_modules/lodash/fp/uniqueId.js new file mode 100644 index 00000000..aa8fc2f7 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/uniqueId.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('uniqueId', require('../uniqueId')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/unnest.js b/node_modules/strong-soap/node_modules/lodash/fp/unnest.js new file mode 100644 index 00000000..5d34060a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/unnest.js @@ -0,0 +1 @@ +module.exports = require('./flatten'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/unset.js b/node_modules/strong-soap/node_modules/lodash/fp/unset.js new file mode 100644 index 00000000..ea203a0f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/unset.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('unset', require('../unset')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/unzip.js b/node_modules/strong-soap/node_modules/lodash/fp/unzip.js new file mode 100644 index 00000000..cc364b3c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/unzip.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('unzip', require('../unzip'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/unzipWith.js b/node_modules/strong-soap/node_modules/lodash/fp/unzipWith.js new file mode 100644 index 00000000..182eaa10 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/unzipWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('unzipWith', require('../unzipWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/update.js b/node_modules/strong-soap/node_modules/lodash/fp/update.js new file mode 100644 index 00000000..b8ce2cc9 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/update.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('update', require('../update')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/updateWith.js b/node_modules/strong-soap/node_modules/lodash/fp/updateWith.js new file mode 100644 index 00000000..d5e8282d --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/updateWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('updateWith', require('../updateWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/upperCase.js b/node_modules/strong-soap/node_modules/lodash/fp/upperCase.js new file mode 100644 index 00000000..c886f202 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/upperCase.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('upperCase', require('../upperCase'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/upperFirst.js b/node_modules/strong-soap/node_modules/lodash/fp/upperFirst.js new file mode 100644 index 00000000..d8c04df5 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/upperFirst.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('upperFirst', require('../upperFirst'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/useWith.js b/node_modules/strong-soap/node_modules/lodash/fp/useWith.js new file mode 100644 index 00000000..d8b3df5a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/useWith.js @@ -0,0 +1 @@ +module.exports = require('./overArgs'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/util.js b/node_modules/strong-soap/node_modules/lodash/fp/util.js new file mode 100644 index 00000000..18c00bae --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/util.js @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../util')); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/value.js b/node_modules/strong-soap/node_modules/lodash/fp/value.js new file mode 100644 index 00000000..555eec7a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/value.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('value', require('../value'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/valueOf.js b/node_modules/strong-soap/node_modules/lodash/fp/valueOf.js new file mode 100644 index 00000000..f968807d --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/valueOf.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('valueOf', require('../valueOf'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/values.js b/node_modules/strong-soap/node_modules/lodash/fp/values.js new file mode 100644 index 00000000..2dfc5613 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/values.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('values', require('../values'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/valuesIn.js b/node_modules/strong-soap/node_modules/lodash/fp/valuesIn.js new file mode 100644 index 00000000..a1b2bb87 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/valuesIn.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('valuesIn', require('../valuesIn'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/where.js b/node_modules/strong-soap/node_modules/lodash/fp/where.js new file mode 100644 index 00000000..3247f64a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/where.js @@ -0,0 +1 @@ +module.exports = require('./conformsTo'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/whereEq.js b/node_modules/strong-soap/node_modules/lodash/fp/whereEq.js new file mode 100644 index 00000000..29d1e1e4 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/whereEq.js @@ -0,0 +1 @@ +module.exports = require('./isMatch'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/without.js b/node_modules/strong-soap/node_modules/lodash/fp/without.js new file mode 100644 index 00000000..bad9e125 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/without.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('without', require('../without')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/words.js b/node_modules/strong-soap/node_modules/lodash/fp/words.js new file mode 100644 index 00000000..4a901414 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/words.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('words', require('../words')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/wrap.js b/node_modules/strong-soap/node_modules/lodash/fp/wrap.js new file mode 100644 index 00000000..e93bd8a1 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/wrap.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('wrap', require('../wrap')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/wrapperAt.js b/node_modules/strong-soap/node_modules/lodash/fp/wrapperAt.js new file mode 100644 index 00000000..8f0a310f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/wrapperAt.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('wrapperAt', require('../wrapperAt'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/wrapperChain.js b/node_modules/strong-soap/node_modules/lodash/fp/wrapperChain.js new file mode 100644 index 00000000..2a48ea2b --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/wrapperChain.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('wrapperChain', require('../wrapperChain'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/wrapperLodash.js b/node_modules/strong-soap/node_modules/lodash/fp/wrapperLodash.js new file mode 100644 index 00000000..a7162d08 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/wrapperLodash.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('wrapperLodash', require('../wrapperLodash'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/wrapperReverse.js b/node_modules/strong-soap/node_modules/lodash/fp/wrapperReverse.js new file mode 100644 index 00000000..e1481aab --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/wrapperReverse.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('wrapperReverse', require('../wrapperReverse'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/wrapperValue.js b/node_modules/strong-soap/node_modules/lodash/fp/wrapperValue.js new file mode 100644 index 00000000..8eb9112f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/wrapperValue.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('wrapperValue', require('../wrapperValue'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/xor.js b/node_modules/strong-soap/node_modules/lodash/fp/xor.js new file mode 100644 index 00000000..29e28194 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/xor.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('xor', require('../xor')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/xorBy.js b/node_modules/strong-soap/node_modules/lodash/fp/xorBy.js new file mode 100644 index 00000000..b355686d --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/xorBy.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('xorBy', require('../xorBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/xorWith.js b/node_modules/strong-soap/node_modules/lodash/fp/xorWith.js new file mode 100644 index 00000000..8e05739a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/xorWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('xorWith', require('../xorWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/zip.js b/node_modules/strong-soap/node_modules/lodash/fp/zip.js new file mode 100644 index 00000000..69e147a4 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/zip.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('zip', require('../zip')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/zipAll.js b/node_modules/strong-soap/node_modules/lodash/fp/zipAll.js new file mode 100644 index 00000000..efa8ccbf --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/zipAll.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('zipAll', require('../zip')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/zipObj.js b/node_modules/strong-soap/node_modules/lodash/fp/zipObj.js new file mode 100644 index 00000000..f4a34531 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/zipObj.js @@ -0,0 +1 @@ +module.exports = require('./zipObject'); diff --git a/node_modules/strong-soap/node_modules/lodash/fp/zipObject.js b/node_modules/strong-soap/node_modules/lodash/fp/zipObject.js new file mode 100644 index 00000000..462dbb68 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/zipObject.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('zipObject', require('../zipObject')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/zipObjectDeep.js b/node_modules/strong-soap/node_modules/lodash/fp/zipObjectDeep.js new file mode 100644 index 00000000..53a5d338 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/zipObjectDeep.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('zipObjectDeep', require('../zipObjectDeep')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fp/zipWith.js b/node_modules/strong-soap/node_modules/lodash/fp/zipWith.js new file mode 100644 index 00000000..c5cf9e21 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fp/zipWith.js @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('zipWith', require('../zipWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/node_modules/strong-soap/node_modules/lodash/fromPairs.js b/node_modules/strong-soap/node_modules/lodash/fromPairs.js new file mode 100644 index 00000000..ee7940d2 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/fromPairs.js @@ -0,0 +1,28 @@ +/** + * The inverse of `_.toPairs`; this method returns an object composed + * from key-value `pairs`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} pairs The key-value pairs. + * @returns {Object} Returns the new object. + * @example + * + * _.fromPairs([['a', 1], ['b', 2]]); + * // => { 'a': 1, 'b': 2 } + */ +function fromPairs(pairs) { + var index = -1, + length = pairs == null ? 0 : pairs.length, + result = {}; + + while (++index < length) { + var pair = pairs[index]; + result[pair[0]] = pair[1]; + } + return result; +} + +module.exports = fromPairs; diff --git a/node_modules/strong-soap/node_modules/lodash/function.js b/node_modules/strong-soap/node_modules/lodash/function.js new file mode 100644 index 00000000..b0fc6d93 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/function.js @@ -0,0 +1,25 @@ +module.exports = { + 'after': require('./after'), + 'ary': require('./ary'), + 'before': require('./before'), + 'bind': require('./bind'), + 'bindKey': require('./bindKey'), + 'curry': require('./curry'), + 'curryRight': require('./curryRight'), + 'debounce': require('./debounce'), + 'defer': require('./defer'), + 'delay': require('./delay'), + 'flip': require('./flip'), + 'memoize': require('./memoize'), + 'negate': require('./negate'), + 'once': require('./once'), + 'overArgs': require('./overArgs'), + 'partial': require('./partial'), + 'partialRight': require('./partialRight'), + 'rearg': require('./rearg'), + 'rest': require('./rest'), + 'spread': require('./spread'), + 'throttle': require('./throttle'), + 'unary': require('./unary'), + 'wrap': require('./wrap') +}; diff --git a/node_modules/strong-soap/node_modules/lodash/functions.js b/node_modules/strong-soap/node_modules/lodash/functions.js new file mode 100644 index 00000000..9722928f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/functions.js @@ -0,0 +1,31 @@ +var baseFunctions = require('./_baseFunctions'), + keys = require('./keys'); + +/** + * Creates an array of function property names from own enumerable properties + * of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the function names. + * @see _.functionsIn + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functions(new Foo); + * // => ['a', 'b'] + */ +function functions(object) { + return object == null ? [] : baseFunctions(object, keys(object)); +} + +module.exports = functions; diff --git a/node_modules/strong-soap/node_modules/lodash/functionsIn.js b/node_modules/strong-soap/node_modules/lodash/functionsIn.js new file mode 100644 index 00000000..f00345d0 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/functionsIn.js @@ -0,0 +1,31 @@ +var baseFunctions = require('./_baseFunctions'), + keysIn = require('./keysIn'); + +/** + * Creates an array of function property names from own and inherited + * enumerable properties of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the function names. + * @see _.functions + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functionsIn(new Foo); + * // => ['a', 'b', 'c'] + */ +function functionsIn(object) { + return object == null ? [] : baseFunctions(object, keysIn(object)); +} + +module.exports = functionsIn; diff --git a/node_modules/strong-soap/node_modules/lodash/get.js b/node_modules/strong-soap/node_modules/lodash/get.js new file mode 100644 index 00000000..8805ff92 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/get.js @@ -0,0 +1,33 @@ +var baseGet = require('./_baseGet'); + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; +} + +module.exports = get; diff --git a/node_modules/strong-soap/node_modules/lodash/groupBy.js b/node_modules/strong-soap/node_modules/lodash/groupBy.js new file mode 100644 index 00000000..babf4f6b --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/groupBy.js @@ -0,0 +1,41 @@ +var baseAssignValue = require('./_baseAssignValue'), + createAggregator = require('./_createAggregator'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The order of grouped values + * is determined by the order they occur in `collection`. The corresponding + * value of each key is an array of elements responsible for generating the + * key. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.groupBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': [4.2], '6': [6.1, 6.3] } + * + * // The `_.property` iteratee shorthand. + * _.groupBy(['one', 'two', 'three'], 'length'); + * // => { '3': ['one', 'two'], '5': ['three'] } + */ +var groupBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + result[key].push(value); + } else { + baseAssignValue(result, key, [value]); + } +}); + +module.exports = groupBy; diff --git a/node_modules/strong-soap/node_modules/lodash/gt.js b/node_modules/strong-soap/node_modules/lodash/gt.js new file mode 100644 index 00000000..3a662828 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/gt.js @@ -0,0 +1,29 @@ +var baseGt = require('./_baseGt'), + createRelationalOperation = require('./_createRelationalOperation'); + +/** + * Checks if `value` is greater than `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + * @see _.lt + * @example + * + * _.gt(3, 1); + * // => true + * + * _.gt(3, 3); + * // => false + * + * _.gt(1, 3); + * // => false + */ +var gt = createRelationalOperation(baseGt); + +module.exports = gt; diff --git a/node_modules/strong-soap/node_modules/lodash/gte.js b/node_modules/strong-soap/node_modules/lodash/gte.js new file mode 100644 index 00000000..4180a687 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/gte.js @@ -0,0 +1,30 @@ +var createRelationalOperation = require('./_createRelationalOperation'); + +/** + * Checks if `value` is greater than or equal to `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than or equal to + * `other`, else `false`. + * @see _.lte + * @example + * + * _.gte(3, 1); + * // => true + * + * _.gte(3, 3); + * // => true + * + * _.gte(1, 3); + * // => false + */ +var gte = createRelationalOperation(function(value, other) { + return value >= other; +}); + +module.exports = gte; diff --git a/node_modules/strong-soap/node_modules/lodash/has.js b/node_modules/strong-soap/node_modules/lodash/has.js new file mode 100644 index 00000000..34df55e8 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/has.js @@ -0,0 +1,35 @@ +var baseHas = require('./_baseHas'), + hasPath = require('./_hasPath'); + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return object != null && hasPath(object, path, baseHas); +} + +module.exports = has; diff --git a/node_modules/strong-soap/node_modules/lodash/hasIn.js b/node_modules/strong-soap/node_modules/lodash/hasIn.js new file mode 100644 index 00000000..06a36865 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/hasIn.js @@ -0,0 +1,34 @@ +var baseHasIn = require('./_baseHasIn'), + hasPath = require('./_hasPath'); + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && hasPath(object, path, baseHasIn); +} + +module.exports = hasIn; diff --git a/node_modules/strong-soap/node_modules/lodash/head.js b/node_modules/strong-soap/node_modules/lodash/head.js new file mode 100644 index 00000000..dee9d1f1 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/head.js @@ -0,0 +1,23 @@ +/** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias first + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.head([1, 2, 3]); + * // => 1 + * + * _.head([]); + * // => undefined + */ +function head(array) { + return (array && array.length) ? array[0] : undefined; +} + +module.exports = head; diff --git a/node_modules/strong-soap/node_modules/lodash/identity.js b/node_modules/strong-soap/node_modules/lodash/identity.js new file mode 100644 index 00000000..2d5d963c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/identity.js @@ -0,0 +1,21 @@ +/** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ +function identity(value) { + return value; +} + +module.exports = identity; diff --git a/node_modules/strong-soap/node_modules/lodash/inRange.js b/node_modules/strong-soap/node_modules/lodash/inRange.js new file mode 100644 index 00000000..f20728d9 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/inRange.js @@ -0,0 +1,55 @@ +var baseInRange = require('./_baseInRange'), + toFinite = require('./toFinite'), + toNumber = require('./toNumber'); + +/** + * Checks if `n` is between `start` and up to, but not including, `end`. If + * `end` is not specified, it's set to `start` with `start` then set to `0`. + * If `start` is greater than `end` the params are swapped to support + * negative ranges. + * + * @static + * @memberOf _ + * @since 3.3.0 + * @category Number + * @param {number} number The number to check. + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + * @see _.range, _.rangeRight + * @example + * + * _.inRange(3, 2, 4); + * // => true + * + * _.inRange(4, 8); + * // => true + * + * _.inRange(4, 2); + * // => false + * + * _.inRange(2, 2); + * // => false + * + * _.inRange(1.2, 2); + * // => true + * + * _.inRange(5.2, 4); + * // => false + * + * _.inRange(-3, -2, -6); + * // => true + */ +function inRange(number, start, end) { + start = toFinite(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = toFinite(end); + } + number = toNumber(number); + return baseInRange(number, start, end); +} + +module.exports = inRange; diff --git a/node_modules/strong-soap/node_modules/lodash/includes.js b/node_modules/strong-soap/node_modules/lodash/includes.js new file mode 100644 index 00000000..ae0deedc --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/includes.js @@ -0,0 +1,53 @@ +var baseIndexOf = require('./_baseIndexOf'), + isArrayLike = require('./isArrayLike'), + isString = require('./isString'), + toInteger = require('./toInteger'), + values = require('./values'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Checks if `value` is in `collection`. If `collection` is a string, it's + * checked for a substring of `value`, otherwise + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * is used for equality comparisons. If `fromIndex` is negative, it's used as + * the offset from the end of `collection`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {boolean} Returns `true` if `value` is found, else `false`. + * @example + * + * _.includes([1, 2, 3], 1); + * // => true + * + * _.includes([1, 2, 3], 1, 2); + * // => false + * + * _.includes({ 'a': 1, 'b': 2 }, 1); + * // => true + * + * _.includes('abcd', 'bc'); + * // => true + */ +function includes(collection, value, fromIndex, guard) { + collection = isArrayLike(collection) ? collection : values(collection); + fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; + + var length = collection.length; + if (fromIndex < 0) { + fromIndex = nativeMax(length + fromIndex, 0); + } + return isString(collection) + ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) + : (!!length && baseIndexOf(collection, value, fromIndex) > -1); +} + +module.exports = includes; diff --git a/node_modules/strong-soap/node_modules/lodash/index.js b/node_modules/strong-soap/node_modules/lodash/index.js new file mode 100644 index 00000000..5d063e21 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/index.js @@ -0,0 +1 @@ +module.exports = require('./lodash'); \ No newline at end of file diff --git a/node_modules/strong-soap/node_modules/lodash/indexOf.js b/node_modules/strong-soap/node_modules/lodash/indexOf.js new file mode 100644 index 00000000..3c644af2 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/indexOf.js @@ -0,0 +1,42 @@ +var baseIndexOf = require('./_baseIndexOf'), + toInteger = require('./toInteger'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the + * offset from the end of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */ +function indexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseIndexOf(array, value, index); +} + +module.exports = indexOf; diff --git a/node_modules/strong-soap/node_modules/lodash/initial.js b/node_modules/strong-soap/node_modules/lodash/initial.js new file mode 100644 index 00000000..f47fc509 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/initial.js @@ -0,0 +1,22 @@ +var baseSlice = require('./_baseSlice'); + +/** + * Gets all but the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.initial([1, 2, 3]); + * // => [1, 2] + */ +function initial(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 0, -1) : []; +} + +module.exports = initial; diff --git a/node_modules/strong-soap/node_modules/lodash/intersection.js b/node_modules/strong-soap/node_modules/lodash/intersection.js new file mode 100644 index 00000000..a94c1351 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/intersection.js @@ -0,0 +1,30 @@ +var arrayMap = require('./_arrayMap'), + baseIntersection = require('./_baseIntersection'), + baseRest = require('./_baseRest'), + castArrayLikeObject = require('./_castArrayLikeObject'); + +/** + * Creates an array of unique values that are included in all given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersection([2, 1], [2, 3]); + * // => [2] + */ +var intersection = baseRest(function(arrays) { + var mapped = arrayMap(arrays, castArrayLikeObject); + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped) + : []; +}); + +module.exports = intersection; diff --git a/node_modules/strong-soap/node_modules/lodash/intersectionBy.js b/node_modules/strong-soap/node_modules/lodash/intersectionBy.js new file mode 100644 index 00000000..31461aae --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/intersectionBy.js @@ -0,0 +1,45 @@ +var arrayMap = require('./_arrayMap'), + baseIntersection = require('./_baseIntersection'), + baseIteratee = require('./_baseIteratee'), + baseRest = require('./_baseRest'), + castArrayLikeObject = require('./_castArrayLikeObject'), + last = require('./last'); + +/** + * This method is like `_.intersection` except that it accepts `iteratee` + * which is invoked for each element of each `arrays` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [2.1] + * + * // The `_.property` iteratee shorthand. + * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }] + */ +var intersectionBy = baseRest(function(arrays) { + var iteratee = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); + + if (iteratee === last(mapped)) { + iteratee = undefined; + } else { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, baseIteratee(iteratee, 2)) + : []; +}); + +module.exports = intersectionBy; diff --git a/node_modules/strong-soap/node_modules/lodash/intersectionWith.js b/node_modules/strong-soap/node_modules/lodash/intersectionWith.js new file mode 100644 index 00000000..63cabfaa --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/intersectionWith.js @@ -0,0 +1,41 @@ +var arrayMap = require('./_arrayMap'), + baseIntersection = require('./_baseIntersection'), + baseRest = require('./_baseRest'), + castArrayLikeObject = require('./_castArrayLikeObject'), + last = require('./last'); + +/** + * This method is like `_.intersection` except that it accepts `comparator` + * which is invoked to compare elements of `arrays`. The order and references + * of result values are determined by the first array. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.intersectionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }] + */ +var intersectionWith = baseRest(function(arrays) { + var comparator = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); + + comparator = typeof comparator == 'function' ? comparator : undefined; + if (comparator) { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, undefined, comparator) + : []; +}); + +module.exports = intersectionWith; diff --git a/node_modules/strong-soap/node_modules/lodash/invert.js b/node_modules/strong-soap/node_modules/lodash/invert.js new file mode 100644 index 00000000..8c479509 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/invert.js @@ -0,0 +1,42 @@ +var constant = require('./constant'), + createInverter = require('./_createInverter'), + identity = require('./identity'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** + * Creates an object composed of the inverted keys and values of `object`. + * If `object` contains duplicate values, subsequent values overwrite + * property assignments of previous values. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Object + * @param {Object} object The object to invert. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invert(object); + * // => { '1': 'c', '2': 'b' } + */ +var invert = createInverter(function(result, value, key) { + if (value != null && + typeof value.toString != 'function') { + value = nativeObjectToString.call(value); + } + + result[value] = key; +}, constant(identity)); + +module.exports = invert; diff --git a/node_modules/strong-soap/node_modules/lodash/invertBy.js b/node_modules/strong-soap/node_modules/lodash/invertBy.js new file mode 100644 index 00000000..3f4f7e53 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/invertBy.js @@ -0,0 +1,56 @@ +var baseIteratee = require('./_baseIteratee'), + createInverter = require('./_createInverter'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** + * This method is like `_.invert` except that the inverted object is generated + * from the results of running each element of `object` thru `iteratee`. The + * corresponding inverted value of each inverted key is an array of keys + * responsible for generating the inverted value. The iteratee is invoked + * with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.1.0 + * @category Object + * @param {Object} object The object to invert. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invertBy(object); + * // => { '1': ['a', 'c'], '2': ['b'] } + * + * _.invertBy(object, function(value) { + * return 'group' + value; + * }); + * // => { 'group1': ['a', 'c'], 'group2': ['b'] } + */ +var invertBy = createInverter(function(result, value, key) { + if (value != null && + typeof value.toString != 'function') { + value = nativeObjectToString.call(value); + } + + if (hasOwnProperty.call(result, value)) { + result[value].push(key); + } else { + result[value] = [key]; + } +}, baseIteratee); + +module.exports = invertBy; diff --git a/node_modules/strong-soap/node_modules/lodash/invoke.js b/node_modules/strong-soap/node_modules/lodash/invoke.js new file mode 100644 index 00000000..97d51eb5 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/invoke.js @@ -0,0 +1,24 @@ +var baseInvoke = require('./_baseInvoke'), + baseRest = require('./_baseRest'); + +/** + * Invokes the method at `path` of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {...*} [args] The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + * @example + * + * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; + * + * _.invoke(object, 'a[0].b.c.slice', 1, 3); + * // => [2, 3] + */ +var invoke = baseRest(baseInvoke); + +module.exports = invoke; diff --git a/node_modules/strong-soap/node_modules/lodash/invokeMap.js b/node_modules/strong-soap/node_modules/lodash/invokeMap.js new file mode 100644 index 00000000..8da5126c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/invokeMap.js @@ -0,0 +1,41 @@ +var apply = require('./_apply'), + baseEach = require('./_baseEach'), + baseInvoke = require('./_baseInvoke'), + baseRest = require('./_baseRest'), + isArrayLike = require('./isArrayLike'); + +/** + * Invokes the method at `path` of each element in `collection`, returning + * an array of the results of each invoked method. Any additional arguments + * are provided to each invoked method. If `path` is a function, it's invoked + * for, and `this` bound to, each element in `collection`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array|Function|string} path The path of the method to invoke or + * the function invoked per iteration. + * @param {...*} [args] The arguments to invoke each method with. + * @returns {Array} Returns the array of results. + * @example + * + * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); + * // => [[1, 5, 7], [1, 2, 3]] + * + * _.invokeMap([123, 456], String.prototype.split, ''); + * // => [['1', '2', '3'], ['4', '5', '6']] + */ +var invokeMap = baseRest(function(collection, path, args) { + var index = -1, + isFunc = typeof path == 'function', + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value) { + result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args); + }); + return result; +}); + +module.exports = invokeMap; diff --git a/node_modules/strong-soap/node_modules/lodash/isArguments.js b/node_modules/strong-soap/node_modules/lodash/isArguments.js new file mode 100644 index 00000000..8b9ed66c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isArguments.js @@ -0,0 +1,36 @@ +var baseIsArguments = require('./_baseIsArguments'), + isObjectLike = require('./isObjectLike'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); +}; + +module.exports = isArguments; diff --git a/node_modules/strong-soap/node_modules/lodash/isArray.js b/node_modules/strong-soap/node_modules/lodash/isArray.js new file mode 100644 index 00000000..88ab55fd --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isArray.js @@ -0,0 +1,26 @@ +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +module.exports = isArray; diff --git a/node_modules/strong-soap/node_modules/lodash/isArrayBuffer.js b/node_modules/strong-soap/node_modules/lodash/isArrayBuffer.js new file mode 100644 index 00000000..12904a64 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isArrayBuffer.js @@ -0,0 +1,27 @@ +var baseIsArrayBuffer = require('./_baseIsArrayBuffer'), + baseUnary = require('./_baseUnary'), + nodeUtil = require('./_nodeUtil'); + +/* Node.js helper references. */ +var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer; + +/** + * Checks if `value` is classified as an `ArrayBuffer` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. + * @example + * + * _.isArrayBuffer(new ArrayBuffer(2)); + * // => true + * + * _.isArrayBuffer(new Array(2)); + * // => false + */ +var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; + +module.exports = isArrayBuffer; diff --git a/node_modules/strong-soap/node_modules/lodash/isArrayLike.js b/node_modules/strong-soap/node_modules/lodash/isArrayLike.js new file mode 100644 index 00000000..0f966805 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isArrayLike.js @@ -0,0 +1,33 @@ +var isFunction = require('./isFunction'), + isLength = require('./isLength'); + +/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ +function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); +} + +module.exports = isArrayLike; diff --git a/node_modules/strong-soap/node_modules/lodash/isArrayLikeObject.js b/node_modules/strong-soap/node_modules/lodash/isArrayLikeObject.js new file mode 100644 index 00000000..6c4812a8 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isArrayLikeObject.js @@ -0,0 +1,33 @@ +var isArrayLike = require('./isArrayLike'), + isObjectLike = require('./isObjectLike'); + +/** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ +function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); +} + +module.exports = isArrayLikeObject; diff --git a/node_modules/strong-soap/node_modules/lodash/isBoolean.js b/node_modules/strong-soap/node_modules/lodash/isBoolean.js new file mode 100644 index 00000000..a43ed4b8 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isBoolean.js @@ -0,0 +1,29 @@ +var baseGetTag = require('./_baseGetTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]'; + +/** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ +function isBoolean(value) { + return value === true || value === false || + (isObjectLike(value) && baseGetTag(value) == boolTag); +} + +module.exports = isBoolean; diff --git a/node_modules/strong-soap/node_modules/lodash/isBuffer.js b/node_modules/strong-soap/node_modules/lodash/isBuffer.js new file mode 100644 index 00000000..c103cc74 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isBuffer.js @@ -0,0 +1,38 @@ +var root = require('./_root'), + stubFalse = require('./stubFalse'); + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Built-in value references. */ +var Buffer = moduleExports ? root.Buffer : undefined; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; + +/** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ +var isBuffer = nativeIsBuffer || stubFalse; + +module.exports = isBuffer; diff --git a/node_modules/strong-soap/node_modules/lodash/isDate.js b/node_modules/strong-soap/node_modules/lodash/isDate.js new file mode 100644 index 00000000..7f0209fc --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isDate.js @@ -0,0 +1,27 @@ +var baseIsDate = require('./_baseIsDate'), + baseUnary = require('./_baseUnary'), + nodeUtil = require('./_nodeUtil'); + +/* Node.js helper references. */ +var nodeIsDate = nodeUtil && nodeUtil.isDate; + +/** + * Checks if `value` is classified as a `Date` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + * + * _.isDate('Mon April 23 2012'); + * // => false + */ +var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; + +module.exports = isDate; diff --git a/node_modules/strong-soap/node_modules/lodash/isElement.js b/node_modules/strong-soap/node_modules/lodash/isElement.js new file mode 100644 index 00000000..76ae29c3 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isElement.js @@ -0,0 +1,25 @@ +var isObjectLike = require('./isObjectLike'), + isPlainObject = require('./isPlainObject'); + +/** + * Checks if `value` is likely a DOM element. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. + * @example + * + * _.isElement(document.body); + * // => true + * + * _.isElement(''); + * // => false + */ +function isElement(value) { + return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); +} + +module.exports = isElement; diff --git a/node_modules/strong-soap/node_modules/lodash/isEmpty.js b/node_modules/strong-soap/node_modules/lodash/isEmpty.js new file mode 100644 index 00000000..3597294a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isEmpty.js @@ -0,0 +1,77 @@ +var baseKeys = require('./_baseKeys'), + getTag = require('./_getTag'), + isArguments = require('./isArguments'), + isArray = require('./isArray'), + isArrayLike = require('./isArrayLike'), + isBuffer = require('./isBuffer'), + isPrototype = require('./_isPrototype'), + isTypedArray = require('./isTypedArray'); + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Checks if `value` is an empty object, collection, map, or set. + * + * Objects are considered empty if they have no own enumerable string keyed + * properties. + * + * Array-like values such as `arguments` objects, arrays, buffers, strings, or + * jQuery-like collections are considered empty if they have a `length` of `0`. + * Similarly, maps and sets are considered empty if they have a `size` of `0`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ +function isEmpty(value) { + if (value == null) { + return true; + } + if (isArrayLike(value) && + (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || + isBuffer(value) || isTypedArray(value) || isArguments(value))) { + return !value.length; + } + var tag = getTag(value); + if (tag == mapTag || tag == setTag) { + return !value.size; + } + if (isPrototype(value)) { + return !baseKeys(value).length; + } + for (var key in value) { + if (hasOwnProperty.call(value, key)) { + return false; + } + } + return true; +} + +module.exports = isEmpty; diff --git a/node_modules/strong-soap/node_modules/lodash/isEqual.js b/node_modules/strong-soap/node_modules/lodash/isEqual.js new file mode 100644 index 00000000..5e23e76c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isEqual.js @@ -0,0 +1,35 @@ +var baseIsEqual = require('./_baseIsEqual'); + +/** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are compared by strict equality, i.e. `===`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ +function isEqual(value, other) { + return baseIsEqual(value, other); +} + +module.exports = isEqual; diff --git a/node_modules/strong-soap/node_modules/lodash/isEqualWith.js b/node_modules/strong-soap/node_modules/lodash/isEqualWith.js new file mode 100644 index 00000000..21bdc7ff --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isEqualWith.js @@ -0,0 +1,41 @@ +var baseIsEqual = require('./_baseIsEqual'); + +/** + * This method is like `_.isEqual` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined`, comparisons + * are handled by the method instead. The `customizer` is invoked with up to + * six arguments: (objValue, othValue [, index|key, object, other, stack]). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, othValue) { + * if (isGreeting(objValue) && isGreeting(othValue)) { + * return true; + * } + * } + * + * var array = ['hello', 'goodbye']; + * var other = ['hi', 'goodbye']; + * + * _.isEqualWith(array, other, customizer); + * // => true + */ +function isEqualWith(value, other, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + var result = customizer ? customizer(value, other) : undefined; + return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result; +} + +module.exports = isEqualWith; diff --git a/node_modules/strong-soap/node_modules/lodash/isError.js b/node_modules/strong-soap/node_modules/lodash/isError.js new file mode 100644 index 00000000..b4f41e00 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isError.js @@ -0,0 +1,36 @@ +var baseGetTag = require('./_baseGetTag'), + isObjectLike = require('./isObjectLike'), + isPlainObject = require('./isPlainObject'); + +/** `Object#toString` result references. */ +var domExcTag = '[object DOMException]', + errorTag = '[object Error]'; + +/** + * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, + * `SyntaxError`, `TypeError`, or `URIError` object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an error object, else `false`. + * @example + * + * _.isError(new Error); + * // => true + * + * _.isError(Error); + * // => false + */ +function isError(value) { + if (!isObjectLike(value)) { + return false; + } + var tag = baseGetTag(value); + return tag == errorTag || tag == domExcTag || + (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value)); +} + +module.exports = isError; diff --git a/node_modules/strong-soap/node_modules/lodash/isFinite.js b/node_modules/strong-soap/node_modules/lodash/isFinite.js new file mode 100644 index 00000000..601842bc --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isFinite.js @@ -0,0 +1,36 @@ +var root = require('./_root'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeIsFinite = root.isFinite; + +/** + * Checks if `value` is a finite primitive number. + * + * **Note:** This method is based on + * [`Number.isFinite`](https://mdn.io/Number/isFinite). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. + * @example + * + * _.isFinite(3); + * // => true + * + * _.isFinite(Number.MIN_VALUE); + * // => true + * + * _.isFinite(Infinity); + * // => false + * + * _.isFinite('3'); + * // => false + */ +function isFinite(value) { + return typeof value == 'number' && nativeIsFinite(value); +} + +module.exports = isFinite; diff --git a/node_modules/strong-soap/node_modules/lodash/isFunction.js b/node_modules/strong-soap/node_modules/lodash/isFunction.js new file mode 100644 index 00000000..907a8cd8 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isFunction.js @@ -0,0 +1,37 @@ +var baseGetTag = require('./_baseGetTag'), + isObject = require('./isObject'); + +/** `Object#toString` result references. */ +var asyncTag = '[object AsyncFunction]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; +} + +module.exports = isFunction; diff --git a/node_modules/strong-soap/node_modules/lodash/isInteger.js b/node_modules/strong-soap/node_modules/lodash/isInteger.js new file mode 100644 index 00000000..66aa87d5 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isInteger.js @@ -0,0 +1,33 @@ +var toInteger = require('./toInteger'); + +/** + * Checks if `value` is an integer. + * + * **Note:** This method is based on + * [`Number.isInteger`](https://mdn.io/Number/isInteger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an integer, else `false`. + * @example + * + * _.isInteger(3); + * // => true + * + * _.isInteger(Number.MIN_VALUE); + * // => false + * + * _.isInteger(Infinity); + * // => false + * + * _.isInteger('3'); + * // => false + */ +function isInteger(value) { + return typeof value == 'number' && value == toInteger(value); +} + +module.exports = isInteger; diff --git a/node_modules/strong-soap/node_modules/lodash/isLength.js b/node_modules/strong-soap/node_modules/lodash/isLength.js new file mode 100644 index 00000000..3a95caa9 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isLength.js @@ -0,0 +1,35 @@ +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ +function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +module.exports = isLength; diff --git a/node_modules/strong-soap/node_modules/lodash/isMap.js b/node_modules/strong-soap/node_modules/lodash/isMap.js new file mode 100644 index 00000000..44f8517e --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isMap.js @@ -0,0 +1,27 @@ +var baseIsMap = require('./_baseIsMap'), + baseUnary = require('./_baseUnary'), + nodeUtil = require('./_nodeUtil'); + +/* Node.js helper references. */ +var nodeIsMap = nodeUtil && nodeUtil.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; + +module.exports = isMap; diff --git a/node_modules/strong-soap/node_modules/lodash/isMatch.js b/node_modules/strong-soap/node_modules/lodash/isMatch.js new file mode 100644 index 00000000..9773a18c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isMatch.js @@ -0,0 +1,36 @@ +var baseIsMatch = require('./_baseIsMatch'), + getMatchData = require('./_getMatchData'); + +/** + * Performs a partial deep comparison between `object` and `source` to + * determine if `object` contains equivalent property values. + * + * **Note:** This method is equivalent to `_.matches` when `source` is + * partially applied. + * + * Partial comparisons will match empty array and empty object `source` + * values against any array or object value, respectively. See `_.isEqual` + * for a list of supported value comparisons. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * + * _.isMatch(object, { 'b': 2 }); + * // => true + * + * _.isMatch(object, { 'b': 1 }); + * // => false + */ +function isMatch(object, source) { + return object === source || baseIsMatch(object, source, getMatchData(source)); +} + +module.exports = isMatch; diff --git a/node_modules/strong-soap/node_modules/lodash/isMatchWith.js b/node_modules/strong-soap/node_modules/lodash/isMatchWith.js new file mode 100644 index 00000000..187b6a61 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isMatchWith.js @@ -0,0 +1,41 @@ +var baseIsMatch = require('./_baseIsMatch'), + getMatchData = require('./_getMatchData'); + +/** + * This method is like `_.isMatch` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined`, comparisons + * are handled by the method instead. The `customizer` is invoked with five + * arguments: (objValue, srcValue, index|key, object, source). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, srcValue) { + * if (isGreeting(objValue) && isGreeting(srcValue)) { + * return true; + * } + * } + * + * var object = { 'greeting': 'hello' }; + * var source = { 'greeting': 'hi' }; + * + * _.isMatchWith(object, source, customizer); + * // => true + */ +function isMatchWith(object, source, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseIsMatch(object, source, getMatchData(source), customizer); +} + +module.exports = isMatchWith; diff --git a/node_modules/strong-soap/node_modules/lodash/isNaN.js b/node_modules/strong-soap/node_modules/lodash/isNaN.js new file mode 100644 index 00000000..7d0d783b --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isNaN.js @@ -0,0 +1,38 @@ +var isNumber = require('./isNumber'); + +/** + * Checks if `value` is `NaN`. + * + * **Note:** This method is based on + * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as + * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for + * `undefined` and other non-number values. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */ +function isNaN(value) { + // An `NaN` primitive is the only value that is not equal to itself. + // Perform the `toStringTag` check first to avoid errors with some + // ActiveX objects in IE. + return isNumber(value) && value != +value; +} + +module.exports = isNaN; diff --git a/node_modules/strong-soap/node_modules/lodash/isNative.js b/node_modules/strong-soap/node_modules/lodash/isNative.js new file mode 100644 index 00000000..f0cb8d58 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isNative.js @@ -0,0 +1,40 @@ +var baseIsNative = require('./_baseIsNative'), + isMaskable = require('./_isMaskable'); + +/** Error message constants. */ +var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.'; + +/** + * Checks if `value` is a pristine native function. + * + * **Note:** This method can't reliably detect native functions in the presence + * of the core-js package because core-js circumvents this kind of detection. + * Despite multiple requests, the core-js maintainer has made it clear: any + * attempt to fix the detection will be obstructed. As a result, we're left + * with little choice but to throw an error. Unfortunately, this also affects + * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), + * which rely on core-js. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + * @example + * + * _.isNative(Array.prototype.push); + * // => true + * + * _.isNative(_); + * // => false + */ +function isNative(value) { + if (isMaskable(value)) { + throw new Error(CORE_ERROR_TEXT); + } + return baseIsNative(value); +} + +module.exports = isNative; diff --git a/node_modules/strong-soap/node_modules/lodash/isNil.js b/node_modules/strong-soap/node_modules/lodash/isNil.js new file mode 100644 index 00000000..79f05052 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isNil.js @@ -0,0 +1,25 @@ +/** + * Checks if `value` is `null` or `undefined`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is nullish, else `false`. + * @example + * + * _.isNil(null); + * // => true + * + * _.isNil(void 0); + * // => true + * + * _.isNil(NaN); + * // => false + */ +function isNil(value) { + return value == null; +} + +module.exports = isNil; diff --git a/node_modules/strong-soap/node_modules/lodash/isNull.js b/node_modules/strong-soap/node_modules/lodash/isNull.js new file mode 100644 index 00000000..c0a374d7 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isNull.js @@ -0,0 +1,22 @@ +/** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(void 0); + * // => false + */ +function isNull(value) { + return value === null; +} + +module.exports = isNull; diff --git a/node_modules/strong-soap/node_modules/lodash/isNumber.js b/node_modules/strong-soap/node_modules/lodash/isNumber.js new file mode 100644 index 00000000..cd34ee46 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isNumber.js @@ -0,0 +1,38 @@ +var baseGetTag = require('./_baseGetTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var numberTag = '[object Number]'; + +/** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are + * classified as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a number, else `false`. + * @example + * + * _.isNumber(3); + * // => true + * + * _.isNumber(Number.MIN_VALUE); + * // => true + * + * _.isNumber(Infinity); + * // => true + * + * _.isNumber('3'); + * // => false + */ +function isNumber(value) { + return typeof value == 'number' || + (isObjectLike(value) && baseGetTag(value) == numberTag); +} + +module.exports = isNumber; diff --git a/node_modules/strong-soap/node_modules/lodash/isObject.js b/node_modules/strong-soap/node_modules/lodash/isObject.js new file mode 100644 index 00000000..1dc89391 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isObject.js @@ -0,0 +1,31 @@ +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); +} + +module.exports = isObject; diff --git a/node_modules/strong-soap/node_modules/lodash/isObjectLike.js b/node_modules/strong-soap/node_modules/lodash/isObjectLike.js new file mode 100644 index 00000000..301716b5 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isObjectLike.js @@ -0,0 +1,29 @@ +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return value != null && typeof value == 'object'; +} + +module.exports = isObjectLike; diff --git a/node_modules/strong-soap/node_modules/lodash/isPlainObject.js b/node_modules/strong-soap/node_modules/lodash/isPlainObject.js new file mode 100644 index 00000000..23873731 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isPlainObject.js @@ -0,0 +1,62 @@ +var baseGetTag = require('./_baseGetTag'), + getPrototype = require('./_getPrototype'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to infer the `Object` constructor. */ +var objectCtorString = funcToString.call(Object); + +/** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ +function isPlainObject(value) { + if (!isObjectLike(value) || baseGetTag(value) != objectTag) { + return false; + } + var proto = getPrototype(value); + if (proto === null) { + return true; + } + var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; + return typeof Ctor == 'function' && Ctor instanceof Ctor && + funcToString.call(Ctor) == objectCtorString; +} + +module.exports = isPlainObject; diff --git a/node_modules/strong-soap/node_modules/lodash/isRegExp.js b/node_modules/strong-soap/node_modules/lodash/isRegExp.js new file mode 100644 index 00000000..76c9b6e9 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isRegExp.js @@ -0,0 +1,27 @@ +var baseIsRegExp = require('./_baseIsRegExp'), + baseUnary = require('./_baseUnary'), + nodeUtil = require('./_nodeUtil'); + +/* Node.js helper references. */ +var nodeIsRegExp = nodeUtil && nodeUtil.isRegExp; + +/** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ +var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; + +module.exports = isRegExp; diff --git a/node_modules/strong-soap/node_modules/lodash/isSafeInteger.js b/node_modules/strong-soap/node_modules/lodash/isSafeInteger.js new file mode 100644 index 00000000..2a48526e --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isSafeInteger.js @@ -0,0 +1,37 @@ +var isInteger = require('./isInteger'); + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 + * double precision number which isn't the result of a rounded unsafe integer. + * + * **Note:** This method is based on + * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. + * @example + * + * _.isSafeInteger(3); + * // => true + * + * _.isSafeInteger(Number.MIN_VALUE); + * // => false + * + * _.isSafeInteger(Infinity); + * // => false + * + * _.isSafeInteger('3'); + * // => false + */ +function isSafeInteger(value) { + return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; +} + +module.exports = isSafeInteger; diff --git a/node_modules/strong-soap/node_modules/lodash/isSet.js b/node_modules/strong-soap/node_modules/lodash/isSet.js new file mode 100644 index 00000000..ab88bdf8 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isSet.js @@ -0,0 +1,27 @@ +var baseIsSet = require('./_baseIsSet'), + baseUnary = require('./_baseUnary'), + nodeUtil = require('./_nodeUtil'); + +/* Node.js helper references. */ +var nodeIsSet = nodeUtil && nodeUtil.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; + +module.exports = isSet; diff --git a/node_modules/strong-soap/node_modules/lodash/isString.js b/node_modules/strong-soap/node_modules/lodash/isString.js new file mode 100644 index 00000000..627eb9c3 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isString.js @@ -0,0 +1,30 @@ +var baseGetTag = require('./_baseGetTag'), + isArray = require('./isArray'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); +} + +module.exports = isString; diff --git a/node_modules/strong-soap/node_modules/lodash/isSymbol.js b/node_modules/strong-soap/node_modules/lodash/isSymbol.js new file mode 100644 index 00000000..dfb60b97 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isSymbol.js @@ -0,0 +1,29 @@ +var baseGetTag = require('./_baseGetTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); +} + +module.exports = isSymbol; diff --git a/node_modules/strong-soap/node_modules/lodash/isTypedArray.js b/node_modules/strong-soap/node_modules/lodash/isTypedArray.js new file mode 100644 index 00000000..da3f8dd1 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isTypedArray.js @@ -0,0 +1,27 @@ +var baseIsTypedArray = require('./_baseIsTypedArray'), + baseUnary = require('./_baseUnary'), + nodeUtil = require('./_nodeUtil'); + +/* Node.js helper references. */ +var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + +/** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ +var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + +module.exports = isTypedArray; diff --git a/node_modules/strong-soap/node_modules/lodash/isUndefined.js b/node_modules/strong-soap/node_modules/lodash/isUndefined.js new file mode 100644 index 00000000..377d121a --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isUndefined.js @@ -0,0 +1,22 @@ +/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +module.exports = isUndefined; diff --git a/node_modules/strong-soap/node_modules/lodash/isWeakMap.js b/node_modules/strong-soap/node_modules/lodash/isWeakMap.js new file mode 100644 index 00000000..8d36f663 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isWeakMap.js @@ -0,0 +1,28 @@ +var getTag = require('./_getTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var weakMapTag = '[object WeakMap]'; + +/** + * Checks if `value` is classified as a `WeakMap` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. + * @example + * + * _.isWeakMap(new WeakMap); + * // => true + * + * _.isWeakMap(new Map); + * // => false + */ +function isWeakMap(value) { + return isObjectLike(value) && getTag(value) == weakMapTag; +} + +module.exports = isWeakMap; diff --git a/node_modules/strong-soap/node_modules/lodash/isWeakSet.js b/node_modules/strong-soap/node_modules/lodash/isWeakSet.js new file mode 100644 index 00000000..e628b261 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/isWeakSet.js @@ -0,0 +1,28 @@ +var baseGetTag = require('./_baseGetTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var weakSetTag = '[object WeakSet]'; + +/** + * Checks if `value` is classified as a `WeakSet` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. + * @example + * + * _.isWeakSet(new WeakSet); + * // => true + * + * _.isWeakSet(new Set); + * // => false + */ +function isWeakSet(value) { + return isObjectLike(value) && baseGetTag(value) == weakSetTag; +} + +module.exports = isWeakSet; diff --git a/node_modules/strong-soap/node_modules/lodash/iteratee.js b/node_modules/strong-soap/node_modules/lodash/iteratee.js new file mode 100644 index 00000000..61b73a8c --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/iteratee.js @@ -0,0 +1,53 @@ +var baseClone = require('./_baseClone'), + baseIteratee = require('./_baseIteratee'); + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1; + +/** + * Creates a function that invokes `func` with the arguments of the created + * function. If `func` is a property name, the created function returns the + * property value for a given element. If `func` is an array or object, the + * created function returns `true` for elements that contain the equivalent + * source properties, otherwise it returns `false`. + * + * @static + * @since 4.0.0 + * @memberOf _ + * @category Util + * @param {*} [func=_.identity] The value to convert to a callback. + * @returns {Function} Returns the callback. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true })); + * // => [{ 'user': 'barney', 'age': 36, 'active': true }] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, _.iteratee(['user', 'fred'])); + * // => [{ 'user': 'fred', 'age': 40 }] + * + * // The `_.property` iteratee shorthand. + * _.map(users, _.iteratee('user')); + * // => ['barney', 'fred'] + * + * // Create custom iteratee shorthands. + * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) { + * return !_.isRegExp(func) ? iteratee(func) : function(string) { + * return func.test(string); + * }; + * }); + * + * _.filter(['abc', 'def'], /ef/); + * // => ['def'] + */ +function iteratee(func) { + return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG)); +} + +module.exports = iteratee; diff --git a/node_modules/strong-soap/node_modules/lodash/join.js b/node_modules/strong-soap/node_modules/lodash/join.js new file mode 100644 index 00000000..45de079f --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/join.js @@ -0,0 +1,26 @@ +/** Used for built-in method references. */ +var arrayProto = Array.prototype; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeJoin = arrayProto.join; + +/** + * Converts all elements in `array` into a string separated by `separator`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to convert. + * @param {string} [separator=','] The element separator. + * @returns {string} Returns the joined string. + * @example + * + * _.join(['a', 'b', 'c'], '~'); + * // => 'a~b~c' + */ +function join(array, separator) { + return array == null ? '' : nativeJoin.call(array, separator); +} + +module.exports = join; diff --git a/node_modules/strong-soap/node_modules/lodash/kebabCase.js b/node_modules/strong-soap/node_modules/lodash/kebabCase.js new file mode 100644 index 00000000..8a52be64 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/kebabCase.js @@ -0,0 +1,28 @@ +var createCompounder = require('./_createCompounder'); + +/** + * Converts `string` to + * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the kebab cased string. + * @example + * + * _.kebabCase('Foo Bar'); + * // => 'foo-bar' + * + * _.kebabCase('fooBar'); + * // => 'foo-bar' + * + * _.kebabCase('__FOO_BAR__'); + * // => 'foo-bar' + */ +var kebabCase = createCompounder(function(result, word, index) { + return result + (index ? '-' : '') + word.toLowerCase(); +}); + +module.exports = kebabCase; diff --git a/node_modules/strong-soap/node_modules/lodash/keyBy.js b/node_modules/strong-soap/node_modules/lodash/keyBy.js new file mode 100644 index 00000000..acc007a0 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/keyBy.js @@ -0,0 +1,36 @@ +var baseAssignValue = require('./_baseAssignValue'), + createAggregator = require('./_createAggregator'); + +/** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The corresponding value of + * each key is the last element responsible for generating the key. The + * iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * var array = [ + * { 'dir': 'left', 'code': 97 }, + * { 'dir': 'right', 'code': 100 } + * ]; + * + * _.keyBy(array, function(o) { + * return String.fromCharCode(o.code); + * }); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + * + * _.keyBy(array, 'dir'); + * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } + */ +var keyBy = createAggregator(function(result, value, key) { + baseAssignValue(result, key, value); +}); + +module.exports = keyBy; diff --git a/node_modules/strong-soap/node_modules/lodash/keys.js b/node_modules/strong-soap/node_modules/lodash/keys.js new file mode 100644 index 00000000..d143c718 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/keys.js @@ -0,0 +1,37 @@ +var arrayLikeKeys = require('./_arrayLikeKeys'), + baseKeys = require('./_baseKeys'), + isArrayLike = require('./isArrayLike'); + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); +} + +module.exports = keys; diff --git a/node_modules/strong-soap/node_modules/lodash/keysIn.js b/node_modules/strong-soap/node_modules/lodash/keysIn.js new file mode 100644 index 00000000..a62308f2 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/keysIn.js @@ -0,0 +1,32 @@ +var arrayLikeKeys = require('./_arrayLikeKeys'), + baseKeysIn = require('./_baseKeysIn'), + isArrayLike = require('./isArrayLike'); + +/** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ +function keysIn(object) { + return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); +} + +module.exports = keysIn; diff --git a/node_modules/strong-soap/node_modules/lodash/lang.js b/node_modules/strong-soap/node_modules/lodash/lang.js new file mode 100644 index 00000000..a3962169 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/lang.js @@ -0,0 +1,58 @@ +module.exports = { + 'castArray': require('./castArray'), + 'clone': require('./clone'), + 'cloneDeep': require('./cloneDeep'), + 'cloneDeepWith': require('./cloneDeepWith'), + 'cloneWith': require('./cloneWith'), + 'conformsTo': require('./conformsTo'), + 'eq': require('./eq'), + 'gt': require('./gt'), + 'gte': require('./gte'), + 'isArguments': require('./isArguments'), + 'isArray': require('./isArray'), + 'isArrayBuffer': require('./isArrayBuffer'), + 'isArrayLike': require('./isArrayLike'), + 'isArrayLikeObject': require('./isArrayLikeObject'), + 'isBoolean': require('./isBoolean'), + 'isBuffer': require('./isBuffer'), + 'isDate': require('./isDate'), + 'isElement': require('./isElement'), + 'isEmpty': require('./isEmpty'), + 'isEqual': require('./isEqual'), + 'isEqualWith': require('./isEqualWith'), + 'isError': require('./isError'), + 'isFinite': require('./isFinite'), + 'isFunction': require('./isFunction'), + 'isInteger': require('./isInteger'), + 'isLength': require('./isLength'), + 'isMap': require('./isMap'), + 'isMatch': require('./isMatch'), + 'isMatchWith': require('./isMatchWith'), + 'isNaN': require('./isNaN'), + 'isNative': require('./isNative'), + 'isNil': require('./isNil'), + 'isNull': require('./isNull'), + 'isNumber': require('./isNumber'), + 'isObject': require('./isObject'), + 'isObjectLike': require('./isObjectLike'), + 'isPlainObject': require('./isPlainObject'), + 'isRegExp': require('./isRegExp'), + 'isSafeInteger': require('./isSafeInteger'), + 'isSet': require('./isSet'), + 'isString': require('./isString'), + 'isSymbol': require('./isSymbol'), + 'isTypedArray': require('./isTypedArray'), + 'isUndefined': require('./isUndefined'), + 'isWeakMap': require('./isWeakMap'), + 'isWeakSet': require('./isWeakSet'), + 'lt': require('./lt'), + 'lte': require('./lte'), + 'toArray': require('./toArray'), + 'toFinite': require('./toFinite'), + 'toInteger': require('./toInteger'), + 'toLength': require('./toLength'), + 'toNumber': require('./toNumber'), + 'toPlainObject': require('./toPlainObject'), + 'toSafeInteger': require('./toSafeInteger'), + 'toString': require('./toString') +}; diff --git a/node_modules/strong-soap/node_modules/lodash/last.js b/node_modules/strong-soap/node_modules/lodash/last.js new file mode 100644 index 00000000..cad1eafa --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/last.js @@ -0,0 +1,20 @@ +/** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ +function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; +} + +module.exports = last; diff --git a/node_modules/strong-soap/node_modules/lodash/lastIndexOf.js b/node_modules/strong-soap/node_modules/lodash/lastIndexOf.js new file mode 100644 index 00000000..dabfb613 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/lastIndexOf.js @@ -0,0 +1,46 @@ +var baseFindIndex = require('./_baseFindIndex'), + baseIsNaN = require('./_baseIsNaN'), + strictLastIndexOf = require('./_strictLastIndexOf'), + toInteger = require('./toInteger'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, + nativeMin = Math.min; + +/** + * This method is like `_.indexOf` except that it iterates over elements of + * `array` from right to left. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.lastIndexOf([1, 2, 1, 2], 2); + * // => 3 + * + * // Search from the `fromIndex`. + * _.lastIndexOf([1, 2, 1, 2], 2, 2); + * // => 1 + */ +function lastIndexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); + } + return value === value + ? strictLastIndexOf(array, value, index) + : baseFindIndex(array, baseIsNaN, index, true); +} + +module.exports = lastIndexOf; diff --git a/node_modules/strong-soap/node_modules/lodash/lodash.js b/node_modules/strong-soap/node_modules/lodash/lodash.js new file mode 100644 index 00000000..cb139dd8 --- /dev/null +++ b/node_modules/strong-soap/node_modules/lodash/lodash.js @@ -0,0 +1,17107 @@ +/** + * @license + * Lodash + * Copyright JS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ +;(function() { + + /** Used as a safe reference for `undefined` in pre-ES5 environments. */ + var undefined; + + /** Used as the semantic version number. */ + var VERSION = '4.17.11'; + + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE = 200; + + /** Error message constants. */ + var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.', + FUNC_ERROR_TEXT = 'Expected a function'; + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; + + /** Used as the maximum memoize cache size. */ + var MAX_MEMOIZE_SIZE = 500; + + /** Used as the internal argument placeholder. */ + var PLACEHOLDER = '__lodash_placeholder__'; + + /** Used to compose bitmasks for cloning. */ + var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + + /** Used to compose bitmasks for function metadata. */ + var WRAP_BIND_FLAG = 1, + WRAP_BIND_KEY_FLAG = 2, + WRAP_CURRY_BOUND_FLAG = 4, + WRAP_CURRY_FLAG = 8, + WRAP_CURRY_RIGHT_FLAG = 16, + WRAP_PARTIAL_FLAG = 32, + WRAP_PARTIAL_RIGHT_FLAG = 64, + WRAP_ARY_FLAG = 128, + WRAP_REARG_FLAG = 256, + WRAP_FLIP_FLAG = 512; + + /** Used as default options for `_.truncate`. */ + var DEFAULT_TRUNC_LENGTH = 30, + DEFAULT_TRUNC_OMISSION = '...'; + + /** Used to detect hot functions by number of calls within a span of milliseconds. */ + var HOT_COUNT = 800, + HOT_SPAN = 16; + + /** Used to indicate the type of lazy iteratees. */ + var LAZY_FILTER_FLAG = 1, + LAZY_MAP_FLAG = 2, + LAZY_WHILE_FLAG = 3; + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991, + MAX_INTEGER = 1.7976931348623157e+308, + NAN = 0 / 0; + + /** Used as references for the maximum length and index of an array. */ + var MAX_ARRAY_LENGTH = 4294967295, + MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, + HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; + + /** Used to associate wrap methods with their bit flags. */ + var wrapFlags = [ + ['ary', WRAP_ARY_FLAG], + ['bind', WRAP_BIND_FLAG], + ['bindKey', WRAP_BIND_KEY_FLAG], + ['curry', WRAP_CURRY_FLAG], + ['curryRight', WRAP_CURRY_RIGHT_FLAG], + ['flip', WRAP_FLIP_FLAG], + ['partial', WRAP_PARTIAL_FLAG], + ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], + ['rearg', WRAP_REARG_FLAG] + ]; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + asyncTag = '[object AsyncFunction]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + domExcTag = '[object DOMException]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + mapTag = '[object Map]', + numberTag = '[object Number]', + nullTag = '[object Null]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + proxyTag = '[object Proxy]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]', + undefinedTag = '[object Undefined]', + weakMapTag = '[object WeakMap]', + weakSetTag = '[object WeakSet]'; + + var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + + /** Used to match empty string literals in compiled template source. */ + var reEmptyStringLeading = /\b__p \+= '';/g, + reEmptyStringMiddle = /\b(__p \+=) '' \+/g, + reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; + + /** Used to match HTML entities and HTML characters. */ + var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, + reUnescapedHtml = /[&<>"']/g, + reHasEscapedHtml = RegExp(reEscapedHtml.source), + reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + + /** Used to match template delimiters. */ + var reEscape = /<%-([\s\S]+?)%>/g, + reEvaluate = /<%([\s\S]+?)%>/g, + reInterpolate = /<%=([\s\S]+?)%>/g; + + /** Used to match property names within property paths. */ + var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + + /** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, + reHasRegExpChar = RegExp(reRegExpChar.source); + + /** Used to match leading and trailing whitespace. */ + var reTrim = /^\s+|\s+$/g, + reTrimStart = /^\s+/, + reTrimEnd = /\s+$/; + + /** Used to match wrap detail comments. */ + var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, + reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, + reSplitDetails = /,? & /; + + /** Used to match words composed of alphanumeric characters. */ + var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; + + /** Used to match backslashes in property paths. */ + var reEscapeChar = /\\(\\)?/g; + + /** + * Used to match + * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). + */ + var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; + + /** Used to match `RegExp` flags from their coerced string values. */ + var reFlags = /\w*$/; + + /** Used to detect bad signed hexadecimal string values. */ + var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + + /** Used to detect binary string values. */ + var reIsBinary = /^0b[01]+$/i; + + /** Used to detect host constructors (Safari). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; + + /** Used to detect octal string values. */ + var reIsOctal = /^0o[0-7]+$/i; + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** Used to match Latin Unicode letters (excluding mathematical operators). */ + var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; + + /** Used to ensure capturing order of template delimiters. */ + var reNoMatch = /($^)/; + + /** Used to match unescaped characters in compiled string literals. */ + var reUnescapedString = /['\n\r\u2028\u2029\\]/g; + + /** Used to compose unicode character classes. */ + var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsDingbatRange = '\\u2700-\\u27bf', + rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', + rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', + rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', + rsPunctuationRange = '\\u2000-\\u206f', + rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', + rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', + rsVarRange = '\\ufe0e\\ufe0f', + rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; + + /** Used to compose unicode capture groups. */ + var rsApos = "['\u2019]", + rsAstral = '[' + rsAstralRange + ']', + rsBreak = '[' + rsBreakRange + ']', + rsCombo = '[' + rsComboRange + ']', + rsDigits = '\\d+', + rsDingbat = '[' + rsDingbatRange + ']', + rsLower = '[' + rsLowerRange + ']', + rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsUpper = '[' + rsUpperRange + ']', + rsZWJ = '\\u200d'; + + /** Used to compose unicode regexes. */ + var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', + rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', + rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', + rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', + reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', + rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + + /** Used to match apostrophes. */ + var reApos = RegExp(rsApos, 'g'); + + /** + * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and + * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). + */ + var reComboMark = RegExp(rsCombo, 'g'); + + /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ + var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + + /** Used to match complex or compound words. */ + var reUnicodeWord = RegExp([ + rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', + rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', + rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, + rsUpper + '+' + rsOptContrUpper, + rsOrdUpper, + rsOrdLower, + rsDigits, + rsEmoji + ].join('|'), 'g'); + + /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ + var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + + /** Used to detect strings that need a more robust regexp to match words. */ + var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; + + /** Used to assign default `context` object properties. */ + var contextProps = [ + 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array', + 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object', + 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array', + 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', + '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout' + ]; + + /** Used to make template sourceURLs easier to identify. */ + var templateCounter = -1; + + /** Used to identify `toStringTag` values of typed arrays. */ + var typedArrayTags = {}; + typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = + typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = + typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = + typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = + typedArrayTags[uint32Tag] = true; + typedArrayTags[argsTag] = typedArrayTags[arrayTag] = + typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = + typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = + typedArrayTags[errorTag] = typedArrayTags[funcTag] = + typedArrayTags[mapTag] = typedArrayTags[numberTag] = + typedArrayTags[objectTag] = typedArrayTags[regexpTag] = + typedArrayTags[setTag] = typedArrayTags[stringTag] = + typedArrayTags[weakMapTag] = false; + + /** Used to identify `toStringTag` values supported by `_.clone`. */ + var cloneableTags = {}; + cloneableTags[argsTag] = cloneableTags[arrayTag] = + cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = + cloneableTags[boolTag] = cloneableTags[dateTag] = + cloneableTags[float32Tag] = cloneableTags[float64Tag] = + cloneableTags[int8Tag] = cloneableTags[int16Tag] = + cloneableTags[int32Tag] = cloneableTags[mapTag] = + cloneableTags[numberTag] = cloneableTags[objectTag] = + cloneableTags[regexpTag] = cloneableTags[setTag] = + cloneableTags[stringTag] = cloneableTags[symbolTag] = + cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = + cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; + cloneableTags[errorTag] = cloneableTags[funcTag] = + cloneableTags[weakMapTag] = false; + + /** Used to map Latin Unicode letters to basic Latin letters. */ + var deburredLetters = { + // Latin-1 Supplement block. + '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', + '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', + '\xc7': 'C', '\xe7': 'c', + '\xd0': 'D', '\xf0': 'd', + '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', + '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', + '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', + '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', + '\xd1': 'N', '\xf1': 'n', + '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', + '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', + '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', + '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', + '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', + '\xc6': 'Ae', '\xe6': 'ae', + '\xde': 'Th', '\xfe': 'th', + '\xdf': 'ss', + // Latin Extended-A block. + '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', + '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', + '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', + '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', + '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', + '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', + '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', + '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', + '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', + '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', + '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', + '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', + '\u0134': 'J', '\u0135': 'j', + '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', + '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', + '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', + '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', + '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', + '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', + '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', + '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', + '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', + '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', + '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', + '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', + '\u0163': 't', '\u0165': 't', '\u0167': 't', + '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', + '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', + '\u0174': 'W', '\u0175': 'w', + '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', + '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', + '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', + '\u0132': 'IJ', '\u0133': 'ij', + '\u0152': 'Oe', '\u0153': 'oe', + '\u0149': "'n", '\u017f': 's' + }; + + /** Used to map characters to HTML entities. */ + var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; + + /** Used to map HTML entities to characters. */ + var htmlUnescapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'" + }; + + /** Used to escape characters for inclusion in compiled string literals. */ + var stringEscapes = { + '\\': '\\', + "'": "'", + '\n': 'n', + '\r': 'r', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + /** Built-in method references without a dependency on `root`. */ + var freeParseFloat = parseFloat, + freeParseInt = parseInt; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); + + /** Detect free variable `exports`. */ + var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = freeModule && freeModule.exports === freeExports; + + /** Detect free variable `process` from Node.js. */ + var freeProcess = moduleExports && freeGlobal.process; + + /** Used to access faster Node.js helpers. */ + var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; + + if (types) { + return types; + } + + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} + }()); + + /* Node.js helper references. */ + var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, + nodeIsDate = nodeUtil && nodeUtil.isDate, + nodeIsMap = nodeUtil && nodeUtil.isMap, + nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, + nodeIsSet = nodeUtil && nodeUtil.isSet, + nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + + /*--------------------------------------------------------------------------*/ + + /** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ + function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); + } + + /** + * A specialized version of `baseAggregator` for arrays. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ + function arrayAggregator(array, setter, iteratee, accumulator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + var value = array[index]; + setter(accumulator, value, iteratee(value), array); + } + return accumulator; + } + + /** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; + } + + /** + * A specialized version of `_.forEachRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEachRight(array, iteratee) { + var length = array == null ? 0 : array.length; + + while (length--) { + if (iteratee(array[length], length, array) === false) { + break; + } + } + return array; + } + + /** + * A specialized version of `_.every` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + */ + function arrayEvery(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (!predicate(array[index], index, array)) { + return false; + } + } + return true; + } + + /** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; + } + + /** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && baseIndexOf(array, value, 0) > -1; + } + + /** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; + } + + /** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; + } + + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; + } + + /** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; + } + + /** + * A specialized version of `_.reduceRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the last element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduceRight(array, iteratee, accumulator, initAccum) { + var length = array == null ? 0 : array.length; + if (initAccum && length) { + accumulator = array[--length]; + } + while (length--) { + accumulator = iteratee(accumulator, array[length], length, array); + } + return accumulator; + } + + /** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; + } + + /** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ + var asciiSize = baseProperty('length'); + + /** + * Converts an ASCII `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function asciiToArray(string) { + return string.split(''); + } + + /** + * Splits an ASCII `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ + function asciiWords(string) { + return string.match(reAsciiWord) || []; + } + + /** + * The base implementation of methods like `_.findKey` and `_.findLastKey`, + * without support for iteratee shorthands, which iterates over `collection` + * using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the found element or its key, else `undefined`. + */ + function baseFindKey(collection, predicate, eachFunc) { + var result; + eachFunc(collection, function(value, key, collection) { + if (predicate(value, key, collection)) { + result = key; + return false; + } + }); + return result; + } + + /** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOf(array, value, fromIndex) { + return value === value + ? strictIndexOf(array, value, fromIndex) + : baseFindIndex(array, baseIsNaN, fromIndex); + } + + /** + * This function is like `baseIndexOf` except that it accepts a comparator. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @param {Function} comparator The comparator invoked per element. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOfWith(array, value, fromIndex, comparator) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (comparator(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ + function baseIsNaN(value) { + return value !== value; + } + + /** + * The base implementation of `_.mean` and `_.meanBy` without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the mean. + */ + function baseMean(array, iteratee) { + var length = array == null ? 0 : array.length; + return length ? (baseSum(array, iteratee) / length) : NAN; + } + + /** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.propertyOf` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyOf(object) { + return function(key) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ + function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ + function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; + } + + /** + * The base implementation of `_.sum` and `_.sumBy` without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the sum. + */ + function baseSum(array, iteratee) { + var result, + index = -1, + length = array.length; + + while (++index < length) { + var current = iteratee(array[index]); + if (current !== undefined) { + result = result === undefined ? current : (result + current); + } + } + return result; + } + + /** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ + function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; + } + + /** + * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array + * of key-value pairs for `object` corresponding to the property names of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the key-value pairs. + */ + function baseToPairs(object, props) { + return arrayMap(props, function(key) { + return [key, object[key]]; + }); + } + + /** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ + function baseUnary(func) { + return function(value) { + return func(value); + }; + } + + /** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ + function baseValues(object, props) { + return arrayMap(props, function(key) { + return object[key]; + }); + } + + /** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function cacheHas(cache, key) { + return cache.has(key); + } + + /** + * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the first unmatched string symbol. + */ + function charsStartIndex(strSymbols, chrSymbols) { + var index = -1, + length = strSymbols.length; + + while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; + } + + /** + * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the last unmatched string symbol. + */ + function charsEndIndex(strSymbols, chrSymbols) { + var index = strSymbols.length; + + while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; + } + + /** + * Gets the number of `placeholder` occurrences in `array`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} placeholder The placeholder to search for. + * @returns {number} Returns the placeholder count. + */ + function countHolders(array, placeholder) { + var length = array.length, + result = 0; + + while (length--) { + if (array[length] === placeholder) { + ++result; + } + } + return result; + } + + /** + * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A + * letters to basic Latin letters. + * + * @private + * @param {string} letter The matched letter to deburr. + * @returns {string} Returns the deburred letter. + */ + var deburrLetter = basePropertyOf(deburredLetters); + + /** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + var escapeHtmlChar = basePropertyOf(htmlEscapes); + + /** + * Used by `_.template` to escape characters for inclusion in compiled string literals. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + function escapeStringChar(chr) { + return '\\' + stringEscapes[chr]; + } + + /** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function getValue(object, key) { + return object == null ? undefined : object[key]; + } + + /** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ + function hasUnicode(string) { + return reHasUnicode.test(string); + } + + /** + * Checks if `string` contains a word composed of Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a word is found, else `false`. + */ + function hasUnicodeWord(string) { + return reHasUnicodeWord.test(string); + } + + /** + * Converts `iterator` to an array. + * + * @private + * @param {Object} iterator The iterator to convert. + * @returns {Array} Returns the converted array. + */ + function iteratorToArray(iterator) { + var data, + result = []; + + while (!(data = iterator.next()).done) { + result.push(data.value); + } + return result; + } + + /** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ + function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; + } + + /** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; + } + + /** + * Replaces all `placeholder` elements in `array` with an internal placeholder + * and returns an array of their indexes. + * + * @private + * @param {Array} array The array to modify. + * @param {*} placeholder The placeholder to replace. + * @returns {Array} Returns the new array of placeholder indexes. + */ + function replaceHolders(array, placeholder) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value === placeholder || value === PLACEHOLDER) { + array[index] = PLACEHOLDER; + result[resIndex++] = index; + } + } + return result; + } + + /** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ + function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; + } + + /** + * Converts `set` to its value-value pairs. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the value-value pairs. + */ + function setToPairs(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = [value, value]; + }); + return result; + } + + /** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; + } + + /** + * A specialized version of `_.lastIndexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function strictLastIndexOf(array, value, fromIndex) { + var index = fromIndex + 1; + while (index--) { + if (array[index] === value) { + return index; + } + } + return index; + } + + /** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ + function stringSize(string) { + return hasUnicode(string) + ? unicodeSize(string) + : asciiSize(string); + } + + /** + * Converts `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function stringToArray(string) { + return hasUnicode(string) + ? unicodeToArray(string) + : asciiToArray(string); + } + + /** + * Used by `_.unescape` to convert HTML entities to characters. + * + * @private + * @param {string} chr The matched character to unescape. + * @returns {string} Returns the unescaped character. + */ + var unescapeHtmlChar = basePropertyOf(htmlUnescapes); + + /** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ + function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; + } + + /** + * Converts a Unicode `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function unicodeToArray(string) { + return string.match(reUnicode) || []; + } + + /** + * Splits a Unicode `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ + function unicodeWords(string) { + return string.match(reUnicodeWord) || []; + } + + /*--------------------------------------------------------------------------*/ + + /** + * Create a new pristine `lodash` function using the `context` object. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Util + * @param {Object} [context=root] The context object. + * @returns {Function} Returns a new `lodash` function. + * @example + * + * _.mixin({ 'foo': _.constant('foo') }); + * + * var lodash = _.runInContext(); + * lodash.mixin({ 'bar': lodash.constant('bar') }); + * + * _.isFunction(_.foo); + * // => true + * _.isFunction(_.bar); + * // => false + * + * lodash.isFunction(lodash.foo); + * // => false + * lodash.isFunction(lodash.bar); + * // => true + * + * // Create a suped-up `defer` in Node.js. + * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; + */ + var runInContext = (function runInContext(context) { + context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps)); + + /** Built-in constructor references. */ + var Array = context.Array, + Date = context.Date, + Error = context.Error, + Function = context.Function, + Math = context.Math, + Object = context.Object, + RegExp = context.RegExp, + String = context.String, + TypeError = context.TypeError; + + /** Used for built-in method references. */ + var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; + + /** Used to detect overreaching core-js shims. */ + var coreJsData = context['__core-js_shared__']; + + /** Used to resolve the decompiled source of functions. */ + var funcToString = funcProto.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Used to generate unique IDs. */ + var idCounter = 0; + + /** Used to detect methods masquerading as native. */ + var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; + }()); + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** Used to infer the `Object` constructor. */ + var objectCtorString = funcToString.call(Object); + + /** Used to restore the original `_` reference in `_.noConflict`. */ + var oldDash = root._; + + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' + ); + + /** Built-in value references. */ + var Buffer = moduleExports ? context.Buffer : undefined, + Symbol = context.Symbol, + Uint8Array = context.Uint8Array, + allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, + getPrototype = overArg(Object.getPrototypeOf, Object), + objectCreate = Object.create, + propertyIsEnumerable = objectProto.propertyIsEnumerable, + splice = arrayProto.splice, + spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined, + symIterator = Symbol ? Symbol.iterator : undefined, + symToStringTag = Symbol ? Symbol.toStringTag : undefined; + + var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} + }()); + + /** Mocked built-ins. */ + var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, + ctxNow = Date && Date.now !== root.Date.now && Date.now, + ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeCeil = Math.ceil, + nativeFloor = Math.floor, + nativeGetSymbols = Object.getOwnPropertySymbols, + nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, + nativeIsFinite = context.isFinite, + nativeJoin = arrayProto.join, + nativeKeys = overArg(Object.keys, Object), + nativeMax = Math.max, + nativeMin = Math.min, + nativeNow = Date.now, + nativeParseInt = context.parseInt, + nativeRandom = Math.random, + nativeReverse = arrayProto.reverse; + + /* Built-in method references that are verified to be native. */ + var DataView = getNative(context, 'DataView'), + Map = getNative(context, 'Map'), + Promise = getNative(context, 'Promise'), + Set = getNative(context, 'Set'), + WeakMap = getNative(context, 'WeakMap'), + nativeCreate = getNative(Object, 'create'); + + /** Used to store function metadata. */ + var metaMap = WeakMap && new WeakMap; + + /** Used to lookup unminified function names. */ + var realNames = {}; + + /** Used to detect maps, sets, and weakmaps. */ + var dataViewCtorString = toSource(DataView), + mapCtorString = toSource(Map), + promiseCtorString = toSource(Promise), + setCtorString = toSource(Set), + weakMapCtorString = toSource(WeakMap); + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object which wraps `value` to enable implicit method + * chain sequences. Methods that operate on and return arrays, collections, + * and functions can be chained together. Methods that retrieve a single value + * or may return a primitive value will automatically end the chain sequence + * and return the unwrapped value. Otherwise, the value must be unwrapped + * with `_#value`. + * + * Explicit chain sequences, which must be unwrapped with `_#value`, may be + * enabled using `_.chain`. + * + * The execution of chained methods is lazy, that is, it's deferred until + * `_#value` is implicitly or explicitly called. + * + * Lazy evaluation allows several methods to support shortcut fusion. + * Shortcut fusion is an optimization to merge iteratee calls; this avoids + * the creation of intermediate arrays and can greatly reduce the number of + * iteratee executions. Sections of a chain sequence qualify for shortcut + * fusion if the section is applied to an array and iteratees accept only + * one argument. The heuristic for whether a section qualifies for shortcut + * fusion is subject to change. + * + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. + * + * In addition to lodash methods, wrappers have `Array` and `String` methods. + * + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` + * + * The wrapper `String` methods are: + * `replace` and `split` + * + * The wrapper methods that support shortcut fusion are: + * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, + * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, + * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` + * + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, + * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, + * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, + * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, + * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, + * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, + * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, + * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, + * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, + * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, + * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, + * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, + * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, + * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, + * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, + * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, + * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, + * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, + * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, + * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, + * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, + * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, + * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, + * `zipObject`, `zipObjectDeep`, and `zipWith` + * + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, + * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, + * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, + * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, + * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, + * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, + * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, + * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, + * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, + * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, + * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, + * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, + * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, + * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, + * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, + * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, + * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, + * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, + * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, + * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, + * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, + * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, + * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, + * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, + * `upperFirst`, `value`, and `words` + * + * @name _ + * @constructor + * @category Seq + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2, 3]); + * + * // Returns an unwrapped value. + * wrapped.reduce(_.add); + * // => 6 + * + * // Returns a wrapped value. + * var squares = wrapped.map(square); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */ + function lodash(value) { + if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { + if (value instanceof LodashWrapper) { + return value; + } + if (hasOwnProperty.call(value, '__wrapped__')) { + return wrapperClone(value); + } + } + return new LodashWrapper(value); + } + + /** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ + var baseCreate = (function() { + function object() {} + return function(proto) { + if (!isObject(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; + }()); + + /** + * The function whose prototype chain sequence wrappers inherit from. + * + * @private + */ + function baseLodash() { + // No operation performed. + } + + /** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable explicit method chain sequences. + */ + function LodashWrapper(value, chainAll) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__chain__ = !!chainAll; + this.__index__ = 0; + this.__values__ = undefined; + } + + /** + * By default, the template delimiters used by lodash are like those in + * embedded Ruby (ERB) as well as ES2015 template strings. Change the + * following template settings to use alternative delimiters. + * + * @static + * @memberOf _ + * @type {Object} + */ + lodash.templateSettings = { + + /** + * Used to detect `data` property values to be HTML-escaped. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'escape': reEscape, + + /** + * Used to detect code to be evaluated. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'evaluate': reEvaluate, + + /** + * Used to detect `data` property values to inject. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'interpolate': reInterpolate, + + /** + * Used to reference the data object in the template text. + * + * @memberOf _.templateSettings + * @type {string} + */ + 'variable': '', + + /** + * Used to import variables into the compiled template. + * + * @memberOf _.templateSettings + * @type {Object} + */ + 'imports': { + + /** + * A reference to the `lodash` function. + * + * @memberOf _.templateSettings.imports + * @type {Function} + */ + '_': lodash + } + }; + + // Ensure wrappers are instances of `baseLodash`. + lodash.prototype = baseLodash.prototype; + lodash.prototype.constructor = lodash; + + LodashWrapper.prototype = baseCreate(baseLodash.prototype); + LodashWrapper.prototype.constructor = LodashWrapper; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. + * + * @private + * @constructor + * @param {*} value The value to wrap. + */ + function LazyWrapper(value) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__dir__ = 1; + this.__filtered__ = false; + this.__iteratees__ = []; + this.__takeCount__ = MAX_ARRAY_LENGTH; + this.__views__ = []; + } + + /** + * Creates a clone of the lazy wrapper object. + * + * @private + * @name clone + * @memberOf LazyWrapper + * @returns {Object} Returns the cloned `LazyWrapper` object. + */ + function lazyClone() { + var result = new LazyWrapper(this.__wrapped__); + result.__actions__ = copyArray(this.__actions__); + result.__dir__ = this.__dir__; + result.__filtered__ = this.__filtered__; + result.__iteratees__ = copyArray(this.__iteratees__); + result.__takeCount__ = this.__takeCount__; + result.__views__ = copyArray(this.__views__); + return result; + } + + /** + * Reverses the direction of lazy iteration. + * + * @private + * @name reverse + * @memberOf LazyWrapper + * @returns {Object} Returns the new reversed `LazyWrapper` object. + */ + function lazyReverse() { + if (this.__filtered__) { + var result = new LazyWrapper(this); + result.__dir__ = -1; + result.__filtered__ = true; + } else { + result = this.clone(); + result.__dir__ *= -1; + } + return result; + } + + /** + * Extracts the unwrapped value from its lazy wrapper. + * + * @private + * @name value + * @memberOf LazyWrapper + * @returns {*} Returns the unwrapped value. + */ + function lazyValue() { + var array = this.__wrapped__.value(), + dir = this.__dir__, + isArr = isArray(array), + isRight = dir < 0, + arrLength = isArr ? array.length : 0, + view = getView(0, arrLength, this.__views__), + start = view.start, + end = view.end, + length = end - start, + index = isRight ? end : (start - 1), + iteratees = this.__iteratees__, + iterLength = iteratees.length, + resIndex = 0, + takeCount = nativeMin(length, this.__takeCount__); + + if (!isArr || (!isRight && arrLength == length && takeCount == length)) { + return baseWrapperValue(array, this.__actions__); + } + var result = []; + + outer: + while (length-- && resIndex < takeCount) { + index += dir; + + var iterIndex = -1, + value = array[index]; + + while (++iterIndex < iterLength) { + var data = iteratees[iterIndex], + iteratee = data.iteratee, + type = data.type, + computed = iteratee(value); + + if (type == LAZY_MAP_FLAG) { + value = computed; + } else if (!computed) { + if (type == LAZY_FILTER_FLAG) { + continue outer; + } else { + break outer; + } + } + } + result[resIndex++] = value; + } + return result; + } + + // Ensure `LazyWrapper` is an instance of `baseLodash`. + LazyWrapper.prototype = baseCreate(baseLodash.prototype); + LazyWrapper.prototype.constructor = LazyWrapper; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ + function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; + } + + /** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; + } + + /** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; + } + + /** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function hashHas(key) { + var data = this.__data__; + return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); + } + + /** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ + function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; + } + + // Add methods to `Hash`. + Hash.prototype.clear = hashClear; + Hash.prototype['delete'] = hashDelete; + Hash.prototype.get = hashGet; + Hash.prototype.has = hashHas; + Hash.prototype.set = hashSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ + function listCacheClear() { + this.__data__ = []; + this.size = 0; + } + + /** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; + } + + /** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; + } + + /** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; + } + + /** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ + function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; + } + + // Add methods to `ListCache`. + ListCache.prototype.clear = listCacheClear; + ListCache.prototype['delete'] = listCacheDelete; + ListCache.prototype.get = listCacheGet; + ListCache.prototype.has = listCacheHas; + ListCache.prototype.set = listCacheSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ + function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; + } + + /** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; + } + + /** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function mapCacheGet(key) { + return getMapData(this, key).get(key); + } + + /** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function mapCacheHas(key) { + return getMapData(this, key).has(key); + } + + /** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ + function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; + } + + // Add methods to `MapCache`. + MapCache.prototype.clear = mapCacheClear; + MapCache.prototype['delete'] = mapCacheDelete; + MapCache.prototype.get = mapCacheGet; + MapCache.prototype.has = mapCacheHas; + MapCache.prototype.set = mapCacheSet; + + /*------------------------------------------------------------------------*/ + + /** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ + function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new MapCache; + while (++index < length) { + this.add(values[index]); + } + } + + /** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ + function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; + } + + /** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ + function setCacheHas(value) { + return this.__data__.has(value); + } + + // Add methods to `SetCache`. + SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; + SetCache.prototype.has = setCacheHas; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Stack(entries) { + var data = this.__data__ = new ListCache(entries); + this.size = data.size; + } + + /** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ + function stackClear() { + this.__data__ = new ListCache; + this.size = 0; + } + + /** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; + } + + /** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function stackGet(key) { + return this.__data__.get(key); + } + + /** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function stackHas(key) { + return this.__data__.has(key); + } + + /** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ + function stackSet(key, value) { + var data = this.__data__; + if (data instanceof ListCache) { + var pairs = data.__data__; + if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new MapCache(pairs); + } + data.set(key, value); + this.size = data.size; + return this; + } + + // Add methods to `Stack`. + Stack.prototype.clear = stackClear; + Stack.prototype['delete'] = stackDelete; + Stack.prototype.get = stackGet; + Stack.prototype.has = stackHas; + Stack.prototype.set = stackSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ + function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } + } + return result; + } + + /** + * A specialized version of `_.sample` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @returns {*} Returns the random element. + */ + function arraySample(array) { + var length = array.length; + return length ? array[baseRandom(0, length - 1)] : undefined; + } + + /** + * A specialized version of `_.sampleSize` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ + function arraySampleSize(array, n) { + return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); + } + + /** + * A specialized version of `_.shuffle` for arrays. + * + * @private + * @param {Array} array The array to shuffle. + * @returns {Array} Returns the new shuffled array. + */ + function arrayShuffle(array) { + return shuffleSelf(copyArray(array)); + } + + /** + * This function is like `assignValue` except that it doesn't assign + * `undefined` values. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignMergeValue(object, key, value) { + if ((value !== undefined && !eq(object[key], value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; + } + + /** + * Aggregates elements of `collection` on `accumulator` with keys transformed + * by `iteratee` and values set by `setter`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ + function baseAggregator(collection, setter, iteratee, accumulator) { + baseEach(collection, function(value, key, collection) { + setter(accumulator, value, iteratee(value), collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ + function baseAssign(object, source) { + return object && copyObject(source, keys(source), object); + } + + /** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ + function baseAssignIn(object, source) { + return object && copyObject(source, keysIn(source), object); + } + + /** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } + } + + /** + * The base implementation of `_.at` without support for individual paths. + * + * @private + * @param {Object} object The object to iterate over. + * @param {string[]} paths The property paths to pick. + * @returns {Array} Returns the picked elements. + */ + function baseAt(object, paths) { + var index = -1, + length = paths.length, + result = Array(length), + skip = object == null; + + while (++index < length) { + result[index] = skip ? undefined : get(object, paths[index]); + } + return result; + } + + /** + * The base implementation of `_.clamp` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + */ + function baseClamp(number, lower, upper) { + if (number === number) { + if (upper !== undefined) { + number = number <= upper ? number : upper; + } + if (lower !== undefined) { + number = number >= lower ? number : lower; + } + } + return number; + } + + /** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ + function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!isObject(value)) { + return value; + } + var isArr = isArray(value); + if (isArr) { + result = initCloneArray(value); + if (!isDeep) { + return copyArray(value, result); + } + } else { + var tag = getTag(value), + isFunc = tag == funcTag || tag == genTag; + + if (isBuffer(value)) { + return cloneBuffer(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : initCloneObject(value); + if (!isDeep) { + return isFlat + ? copySymbolsIn(value, baseAssignIn(result, value)) + : copySymbols(value, baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new Stack); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + + return result; + } + + if (isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + + return result; + } + + var keysFunc = isFull + ? (isFlat ? getAllKeysIn : getAllKeys) + : (isFlat ? keysIn : keys); + + var props = isArr ? undefined : keysFunc(value); + arrayEach(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; + } + + /** + * The base implementation of `_.conforms` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property predicates to conform to. + * @returns {Function} Returns the new spec function. + */ + function baseConforms(source) { + var props = keys(source); + return function(object) { + return baseConformsTo(object, source, props); + }; + } + + /** + * The base implementation of `_.conformsTo` which accepts `props` to check. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property predicates to conform to. + * @returns {boolean} Returns `true` if `object` conforms, else `false`. + */ + function baseConformsTo(object, source, props) { + var length = props.length; + if (object == null) { + return !length; + } + object = Object(object); + while (length--) { + var key = props[length], + predicate = source[key], + value = object[key]; + + if ((value === undefined && !(key in object)) || !predicate(value)) { + return false; + } + } + return true; + } + + /** + * The base implementation of `_.delay` and `_.defer` which accepts `args` + * to provide to `func`. + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {Array} args The arguments to provide to `func`. + * @returns {number|Object} Returns the timer id or timeout object. + */ + function baseDelay(func, wait, args) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return setTimeout(function() { func.apply(undefined, args); }, wait); + } + + /** + * The base implementation of methods like `_.difference` without support + * for excluding multiple arrays or iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Array} values The values to exclude. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + */ + function baseDifference(array, values, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + isCommon = true, + length = array.length, + result = [], + valuesLength = values.length; + + if (!length) { + return result; + } + if (iteratee) { + values = arrayMap(values, baseUnary(iteratee)); + } + if (comparator) { + includes = arrayIncludesWith; + isCommon = false; + } + else if (values.length >= LARGE_ARRAY_SIZE) { + includes = cacheHas; + isCommon = false; + values = new SetCache(values); + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee == null ? value : iteratee(value); + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var valuesIndex = valuesLength; + while (valuesIndex--) { + if (values[valuesIndex] === computed) { + continue outer; + } + } + result.push(value); + } + else if (!includes(values, computed, comparator)) { + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEach = createBaseEach(baseForOwn); + + /** + * The base implementation of `_.forEachRight` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEachRight = createBaseEach(baseForOwnRight, true); + + /** + * The base implementation of `_.every` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false` + */ + function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function(value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; + } + + /** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ + function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !isSymbol(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; + } + + /** + * The base implementation of `_.fill` without an iteratee call guard. + * + * @private + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + */ + function baseFill(array, value, start, end) { + var length = array.length; + + start = toInteger(start); + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = (end === undefined || end > length) ? length : toInteger(end); + if (end < 0) { + end += length; + } + end = start > end ? 0 : toLength(end); + while (start < end) { + array[start++] = value; + } + return array; + } + + /** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; + } + + /** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ + function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; + } + + /** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseFor = createBaseFor(); + + /** + * This function is like `baseFor` except that it iterates over properties + * in the opposite order. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseForRight = createBaseFor(true); + + /** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); + } + + /** + * The base implementation of `_.forOwnRight` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwnRight(object, iteratee) { + return object && baseForRight(object, iteratee, keys); + } + + /** + * The base implementation of `_.functions` which creates an array of + * `object` function property names filtered from `props`. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} props The property names to filter. + * @returns {Array} Returns the function names. + */ + function baseFunctions(object, props) { + return arrayFilter(props, function(key) { + return isFunction(object[key]); + }); + } + + /** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ + function baseGet(object, path) { + path = castPath(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; + } + + /** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ + function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); + } + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); + } + + /** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ + function baseGt(value, other) { + return value > other; + } + + /** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ + function baseHas(object, key) { + return object != null && hasOwnProperty.call(object, key); + } + + /** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ + function baseHasIn(object, key) { + return object != null && key in Object(object); + } + + /** + * The base implementation of `_.inRange` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to check. + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + */ + function baseInRange(number, start, end) { + return number >= nativeMin(start, end) && number < nativeMax(start, end); + } + + /** + * The base implementation of methods like `_.intersection`, without support + * for iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of shared values. + */ + function baseIntersection(arrays, iteratee, comparator) { + var includes = comparator ? arrayIncludesWith : arrayIncludes, + length = arrays[0].length, + othLength = arrays.length, + othIndex = othLength, + caches = Array(othLength), + maxLength = Infinity, + result = []; + + while (othIndex--) { + var array = arrays[othIndex]; + if (othIndex && iteratee) { + array = arrayMap(array, baseUnary(iteratee)); + } + maxLength = nativeMin(array.length, maxLength); + caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) + ? new SetCache(othIndex && array) + : undefined; + } + array = arrays[0]; + + var index = -1, + seen = caches[0]; + + outer: + while (++index < length && result.length < maxLength) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (!(seen + ? cacheHas(seen, computed) + : includes(result, computed, comparator) + )) { + othIndex = othLength; + while (--othIndex) { + var cache = caches[othIndex]; + if (!(cache + ? cacheHas(cache, computed) + : includes(arrays[othIndex], computed, comparator)) + ) { + continue outer; + } + } + if (seen) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.invert` and `_.invertBy` which inverts + * `object` with values transformed by `iteratee` and set by `setter`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform values. + * @param {Object} accumulator The initial inverted object. + * @returns {Function} Returns `accumulator`. + */ + function baseInverter(object, setter, iteratee, accumulator) { + baseForOwn(object, function(value, key, object) { + setter(accumulator, iteratee(value), key, object); + }); + return accumulator; + } + + /** + * The base implementation of `_.invoke` without support for individual + * method arguments. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {Array} args The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + */ + function baseInvoke(object, path, args) { + path = castPath(path, object); + object = parent(object, path); + var func = object == null ? object : object[toKey(last(path))]; + return func == null ? undefined : apply(func, object, args); + } + + /** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ + function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag; + } + + /** + * The base implementation of `_.isArrayBuffer` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. + */ + function baseIsArrayBuffer(value) { + return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; + } + + /** + * The base implementation of `_.isDate` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + */ + function baseIsDate(value) { + return isObjectLike(value) && baseGetTag(value) == dateTag; + } + + /** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); + } + + /** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = objIsArr ? arrayTag : getTag(object), + othTag = othIsArr ? arrayTag : getTag(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && isBuffer(object)) { + if (!isBuffer(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new Stack); + return (objIsArr || isTypedArray(object)) + ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new Stack); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack); + return equalObjects(object, other, bitmask, customizer, equalFunc, stack); + } + + /** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ + function baseIsMap(value) { + return isObjectLike(value) && getTag(value) == mapTag; + } + + /** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ + function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new Stack; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; + } + + /** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ + function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); + } + + /** + * The base implementation of `_.isRegExp` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + */ + function baseIsRegExp(value) { + return isObjectLike(value) && baseGetTag(value) == regexpTag; + } + + /** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ + function baseIsSet(value) { + return isObjectLike(value) && getTag(value) == setTag; + } + + /** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ + function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; + } + + /** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ + function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity; + } + if (typeof value == 'object') { + return isArray(value) + ? baseMatchesProperty(value[0], value[1]) + : baseMatches(value); + } + return property(value); + } + + /** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; + } + + /** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeysIn(object) { + if (!isObject(object)) { + return nativeKeysIn(object); + } + var isProto = isPrototype(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; + } + + /** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ + function baseLt(value, other) { + return value < other; + } + + /** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; + } + + /** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || baseIsMatch(object, source, matchData); + }; + } + + /** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatchesProperty(path, srcValue) { + if (isKey(path) && isStrictComparable(srcValue)) { + return matchesStrictComparable(toKey(path), srcValue); + } + return function(object) { + var objValue = get(object, path); + return (objValue === undefined && objValue === srcValue) + ? hasIn(object, path) + : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); + }; + } + + /** + * The base implementation of `_.merge` without support for multiple sources. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {number} srcIndex The index of `source`. + * @param {Function} [customizer] The function to customize merged values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ + function baseMerge(object, source, srcIndex, customizer, stack) { + if (object === source) { + return; + } + baseFor(source, function(srcValue, key) { + if (isObject(srcValue)) { + stack || (stack = new Stack); + baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); + } + else { + var newValue = customizer + ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) + : undefined; + + if (newValue === undefined) { + newValue = srcValue; + } + assignMergeValue(object, key, newValue); + } + }, keysIn); + } + + /** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {number} srcIndex The index of `source`. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize assigned values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ + function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { + var objValue = safeGet(object, key), + srcValue = safeGet(source, key), + stacked = stack.get(srcValue); + + if (stacked) { + assignMergeValue(object, key, stacked); + return; + } + var newValue = customizer + ? customizer(objValue, srcValue, (key + ''), object, source, stack) + : undefined; + + var isCommon = newValue === undefined; + + if (isCommon) { + var isArr = isArray(srcValue), + isBuff = !isArr && isBuffer(srcValue), + isTyped = !isArr && !isBuff && isTypedArray(srcValue); + + newValue = srcValue; + if (isArr || isBuff || isTyped) { + if (isArray(objValue)) { + newValue = objValue; + } + else if (isArrayLikeObject(objValue)) { + newValue = copyArray(objValue); + } + else if (isBuff) { + isCommon = false; + newValue = cloneBuffer(srcValue, true); + } + else if (isTyped) { + isCommon = false; + newValue = cloneTypedArray(srcValue, true); + } + else { + newValue = []; + } + } + else if (isPlainObject(srcValue) || isArguments(srcValue)) { + newValue = objValue; + if (isArguments(objValue)) { + newValue = toPlainObject(objValue); + } + else if (!isObject(objValue) || isFunction(objValue)) { + newValue = initCloneObject(srcValue); + } + } + else { + isCommon = false; + } + } + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, newValue); + mergeFunc(newValue, srcValue, srcIndex, customizer, stack); + stack['delete'](srcValue); + } + assignMergeValue(object, key, newValue); + } + + /** + * The base implementation of `_.nth` which doesn't coerce arguments. + * + * @private + * @param {Array} array The array to query. + * @param {number} n The index of the element to return. + * @returns {*} Returns the nth element of `array`. + */ + function baseNth(array, n) { + var length = array.length; + if (!length) { + return; + } + n += n < 0 ? length : 0; + return isIndex(n, length) ? array[n] : undefined; + } + + /** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ + function baseOrderBy(collection, iteratees, orders) { + var index = -1; + iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee())); + + var result = baseMap(collection, function(value, key, collection) { + var criteria = arrayMap(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return baseSortBy(result, function(object, other) { + return compareMultiple(object, other, orders); + }); + } + + /** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ + function basePick(object, paths) { + return basePickBy(object, paths, function(value, path) { + return hasIn(object, path); + }); + } + + /** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ + function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = baseGet(object, path); + + if (predicate(value, path)) { + baseSet(result, castPath(path, object), value); + } + } + return result; + } + + /** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyDeep(path) { + return function(object) { + return baseGet(object, path); + }; + } + + /** + * The base implementation of `_.pullAllBy` without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + */ + function basePullAll(array, values, iteratee, comparator) { + var indexOf = comparator ? baseIndexOfWith : baseIndexOf, + index = -1, + length = values.length, + seen = array; + + if (array === values) { + values = copyArray(values); + } + if (iteratee) { + seen = arrayMap(array, baseUnary(iteratee)); + } + while (++index < length) { + var fromIndex = 0, + value = values[index], + computed = iteratee ? iteratee(value) : value; + + while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { + if (seen !== array) { + splice.call(seen, fromIndex, 1); + } + splice.call(array, fromIndex, 1); + } + } + return array; + } + + /** + * The base implementation of `_.pullAt` without support for individual + * indexes or capturing the removed elements. + * + * @private + * @param {Array} array The array to modify. + * @param {number[]} indexes The indexes of elements to remove. + * @returns {Array} Returns `array`. + */ + function basePullAt(array, indexes) { + var length = array ? indexes.length : 0, + lastIndex = length - 1; + + while (length--) { + var index = indexes[length]; + if (length == lastIndex || index !== previous) { + var previous = index; + if (isIndex(index)) { + splice.call(array, index, 1); + } else { + baseUnset(array, index); + } + } + } + return array; + } + + /** + * The base implementation of `_.random` without support for returning + * floating-point numbers. + * + * @private + * @param {number} lower The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the random number. + */ + function baseRandom(lower, upper) { + return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); + } + + /** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ + function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; + } + + /** + * The base implementation of `_.repeat` which doesn't coerce arguments. + * + * @private + * @param {string} string The string to repeat. + * @param {number} n The number of times to repeat the string. + * @returns {string} Returns the repeated string. + */ + function baseRepeat(string, n) { + var result = ''; + if (!string || n < 1 || n > MAX_SAFE_INTEGER) { + return result; + } + // Leverage the exponentiation by squaring algorithm for a faster repeat. + // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. + do { + if (n % 2) { + result += string; + } + n = nativeFloor(n / 2); + if (n) { + string += string; + } + } while (n); + + return result; + } + + /** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ + function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); + } + + /** + * The base implementation of `_.sample`. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + */ + function baseSample(collection) { + return arraySample(values(collection)); + } + + /** + * The base implementation of `_.sampleSize` without param guards. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ + function baseSampleSize(collection, n) { + var array = values(collection); + return shuffleSelf(array, baseClamp(n, 0, array.length)); + } + + /** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ + function baseSet(object, path, value, customizer) { + if (!isObject(object)) { + return object; + } + path = castPath(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = toKey(path[index]), + newValue = value; + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = isObject(objValue) + ? objValue + : (isIndex(path[index + 1]) ? [] : {}); + } + } + assignValue(nested, key, newValue); + nested = nested[key]; + } + return object; + } + + /** + * The base implementation of `setData` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var baseSetData = !metaMap ? identity : function(func, data) { + metaMap.set(func, data); + return func; + }; + + /** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var baseSetToString = !defineProperty ? identity : function(func, string) { + return defineProperty(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': constant(string), + 'writable': true + }); + }; + + /** + * The base implementation of `_.shuffle`. + * + * @private + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + */ + function baseShuffle(collection) { + return shuffleSelf(values(collection)); + } + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + /** + * The base implementation of `_.some` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function baseSome(collection, predicate) { + var result; + + baseEach(collection, function(value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; + } + + /** + * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which + * performs a binary search of `array` to determine the index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function baseSortedIndex(array, value, retHighest) { + var low = 0, + high = array == null ? low : array.length; + + if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { + while (low < high) { + var mid = (low + high) >>> 1, + computed = array[mid]; + + if (computed !== null && !isSymbol(computed) && + (retHighest ? (computed <= value) : (computed < value))) { + low = mid + 1; + } else { + high = mid; + } + } + return high; + } + return baseSortedIndexBy(array, value, identity, retHighest); + } + + /** + * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` + * which invokes `iteratee` for `value` and each element of `array` to compute + * their sort ranking. The iteratee is invoked with one argument; (value). + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} iteratee The iteratee invoked per element. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function baseSortedIndexBy(array, value, iteratee, retHighest) { + value = iteratee(value); + + var low = 0, + high = array == null ? 0 : array.length, + valIsNaN = value !== value, + valIsNull = value === null, + valIsSymbol = isSymbol(value), + valIsUndefined = value === undefined; + + while (low < high) { + var mid = nativeFloor((low + high) / 2), + computed = iteratee(array[mid]), + othIsDefined = computed !== undefined, + othIsNull = computed === null, + othIsReflexive = computed === computed, + othIsSymbol = isSymbol(computed); + + if (valIsNaN) { + var setLow = retHighest || othIsReflexive; + } else if (valIsUndefined) { + setLow = othIsReflexive && (retHighest || othIsDefined); + } else if (valIsNull) { + setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); + } else if (valIsSymbol) { + setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); + } else if (othIsNull || othIsSymbol) { + setLow = false; + } else { + setLow = retHighest ? (computed <= value) : (computed < value); + } + if (setLow) { + low = mid + 1; + } else { + high = mid; + } + } + return nativeMin(high, MAX_ARRAY_INDEX); + } + + /** + * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseSortedUniq(array, iteratee) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + if (!index || !eq(computed, seen)) { + var seen = computed; + result[resIndex++] = value === 0 ? 0 : value; + } + } + return result; + } + + /** + * The base implementation of `_.toNumber` which doesn't ensure correct + * conversions of binary, hexadecimal, or octal string values. + * + * @private + * @param {*} value The value to process. + * @returns {number} Returns the number. + */ + function baseToNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + return +value; + } + + /** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ + function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + /** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : createSet(array); + if (set) { + return setToArray(set); + } + isCommon = false; + includes = cacheHas; + seen = new SetCache; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.unset`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The property path to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + */ + function baseUnset(object, path) { + path = castPath(path, object); + object = parent(object, path); + return object == null || delete object[toKey(last(path))]; + } + + /** + * The base implementation of `_.update`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to update. + * @param {Function} updater The function to produce the updated value. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ + function baseUpdate(object, path, updater, customizer) { + return baseSet(object, path, updater(baseGet(object, path)), customizer); + } + + /** + * The base implementation of methods like `_.dropWhile` and `_.takeWhile` + * without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to query. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [isDrop] Specify dropping elements instead of taking them. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the slice of `array`. + */ + function baseWhile(array, predicate, isDrop, fromRight) { + var length = array.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length) && + predicate(array[index], index, array)) {} + + return isDrop + ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) + : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); + } + + /** + * The base implementation of `wrapperValue` which returns the result of + * performing a sequence of actions on the unwrapped `value`, where each + * successive action is supplied the return value of the previous. + * + * @private + * @param {*} value The unwrapped value. + * @param {Array} actions Actions to perform to resolve the unwrapped value. + * @returns {*} Returns the resolved value. + */ + function baseWrapperValue(value, actions) { + var result = value; + if (result instanceof LazyWrapper) { + result = result.value(); + } + return arrayReduce(actions, function(result, action) { + return action.func.apply(action.thisArg, arrayPush([result], action.args)); + }, result); + } + + /** + * The base implementation of methods like `_.xor`, without support for + * iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of values. + */ + function baseXor(arrays, iteratee, comparator) { + var length = arrays.length; + if (length < 2) { + return length ? baseUniq(arrays[0]) : []; + } + var index = -1, + result = Array(length); + + while (++index < length) { + var array = arrays[index], + othIndex = -1; + + while (++othIndex < length) { + if (othIndex != index) { + result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); + } + } + } + return baseUniq(baseFlatten(result, 1), iteratee, comparator); + } + + /** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ + function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; + } + + /** + * Casts `value` to an empty array if it's not an array like object. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array|Object} Returns the cast array-like object. + */ + function castArrayLikeObject(value) { + return isArrayLikeObject(value) ? value : []; + } + + /** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ + function castFunction(value) { + return typeof value == 'function' ? value : identity; + } + + /** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ + function castPath(value, object) { + if (isArray(value)) { + return value; + } + return isKey(value, object) ? [value] : stringToPath(toString(value)); + } + + /** + * A `baseRest` alias which can be replaced with `identity` by module + * replacement plugins. + * + * @private + * @type {Function} + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + var castRest = baseRest; + + /** + * Casts `array` to a slice if it's needed. + * + * @private + * @param {Array} array The array to inspect. + * @param {number} start The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the cast slice. + */ + function castSlice(array, start, end) { + var length = array.length; + end = end === undefined ? length : end; + return (!start && end >= length) ? array : baseSlice(array, start, end); + } + + /** + * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout). + * + * @private + * @param {number|Object} id The timer id or timeout object of the timer to clear. + */ + var clearTimeout = ctxClearTimeout || function(id) { + return root.clearTimeout(id); + }; + + /** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ + function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var length = buffer.length, + result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); + + buffer.copy(result); + return result; + } + + /** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ + function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new Uint8Array(result).set(new Uint8Array(arrayBuffer)); + return result; + } + + /** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ + function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); + } + + /** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ + function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; + } + + /** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ + function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; + } + + /** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ + function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); + } + + /** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ + function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = isSymbol(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = isSymbol(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; + } + + /** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ + function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; + } + + /** + * Creates an array that is the composition of partially applied arguments, + * placeholders, and provided arguments into a single array of arguments. + * + * @private + * @param {Array} args The provided arguments. + * @param {Array} partials The arguments to prepend to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgs(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersLength = holders.length, + leftIndex = -1, + leftLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(leftLength + rangeLength), + isUncurried = !isCurried; + + while (++leftIndex < leftLength) { + result[leftIndex] = partials[leftIndex]; + } + while (++argsIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[holders[argsIndex]] = args[argsIndex]; + } + } + while (rangeLength--) { + result[leftIndex++] = args[argsIndex++]; + } + return result; + } + + /** + * This function is like `composeArgs` except that the arguments composition + * is tailored for `_.partialRight`. + * + * @private + * @param {Array} args The provided arguments. + * @param {Array} partials The arguments to append to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgsRight(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersIndex = -1, + holdersLength = holders.length, + rightIndex = -1, + rightLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(rangeLength + rightLength), + isUncurried = !isCurried; + + while (++argsIndex < rangeLength) { + result[argsIndex] = args[argsIndex]; + } + var offset = argsIndex; + while (++rightIndex < rightLength) { + result[offset + rightIndex] = partials[rightIndex]; + } + while (++holdersIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[offset + holders[holdersIndex]] = args[argsIndex++]; + } + } + return result; + } + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; + } + + /** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ + function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; + } + + /** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ + function copySymbols(source, object) { + return copyObject(source, getSymbols(source), object); + } + + /** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ + function copySymbolsIn(source, object) { + return copyObject(source, getSymbolsIn(source), object); + } + + /** + * Creates a function like `_.groupBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} [initializer] The accumulator object initializer. + * @returns {Function} Returns the new aggregator function. + */ + function createAggregator(setter, initializer) { + return function(collection, iteratee) { + var func = isArray(collection) ? arrayAggregator : baseAggregator, + accumulator = initializer ? initializer() : {}; + + return func(collection, setter, getIteratee(iteratee, 2), accumulator); + }; + } + + /** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ + function createAssigner(assigner) { + return baseRest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); + } + + /** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; + } + + /** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; + } + + /** + * Creates a function that wraps `func` to invoke it with the optional `this` + * binding of `thisArg`. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createBind(func, bitmask, thisArg) { + var isBind = bitmask & WRAP_BIND_FLAG, + Ctor = createCtor(func); + + function wrapper() { + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return fn.apply(isBind ? thisArg : this, arguments); + } + return wrapper; + } + + /** + * Creates a function like `_.lowerFirst`. + * + * @private + * @param {string} methodName The name of the `String` case method to use. + * @returns {Function} Returns the new case function. + */ + function createCaseFirst(methodName) { + return function(string) { + string = toString(string); + + var strSymbols = hasUnicode(string) + ? stringToArray(string) + : undefined; + + var chr = strSymbols + ? strSymbols[0] + : string.charAt(0); + + var trailing = strSymbols + ? castSlice(strSymbols, 1).join('') + : string.slice(1); + + return chr[methodName]() + trailing; + }; + } + + /** + * Creates a function like `_.camelCase`. + * + * @private + * @param {Function} callback The function to combine each word. + * @returns {Function} Returns the new compounder function. + */ + function createCompounder(callback) { + return function(string) { + return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); + }; + } + + /** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. + */ + function createCtor(Ctor) { + return function() { + // Use a `switch` statement to work with class constructors. See + // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist + // for more details. + var args = arguments; + switch (args.length) { + case 0: return new Ctor; + case 1: return new Ctor(args[0]); + case 2: return new Ctor(args[0], args[1]); + case 3: return new Ctor(args[0], args[1], args[2]); + case 4: return new Ctor(args[0], args[1], args[2], args[3]); + case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); + case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); + case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); + } + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args); + + // Mimic the constructor's `return` behavior. + // See https://es5.github.io/#x13.2.2 for more details. + return isObject(result) ? result : thisBinding; + }; + } + + /** + * Creates a function that wraps `func` to enable currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {number} arity The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createCurry(func, bitmask, arity) { + var Ctor = createCtor(func); + + function wrapper() { + var length = arguments.length, + args = Array(length), + index = length, + placeholder = getHolder(wrapper); + + while (index--) { + args[index] = arguments[index]; + } + var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) + ? [] + : replaceHolders(args, placeholder); + + length -= holders.length; + if (length < arity) { + return createRecurry( + func, bitmask, createHybrid, wrapper.placeholder, undefined, + args, holders, undefined, undefined, arity - length); + } + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return apply(fn, this, args); + } + return wrapper; + } + + /** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ + function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!isArrayLike(collection)) { + var iteratee = getIteratee(predicate, 3); + collection = keys(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; + } + + /** + * Creates a `_.flow` or `_.flowRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new flow function. + */ + function createFlow(fromRight) { + return flatRest(function(funcs) { + var length = funcs.length, + index = length, + prereq = LodashWrapper.prototype.thru; + + if (fromRight) { + funcs.reverse(); + } + while (index--) { + var func = funcs[index]; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (prereq && !wrapper && getFuncName(func) == 'wrapper') { + var wrapper = new LodashWrapper([], true); + } + } + index = wrapper ? index : length; + while (++index < length) { + func = funcs[index]; + + var funcName = getFuncName(func), + data = funcName == 'wrapper' ? getData(func) : undefined; + + if (data && isLaziable(data[0]) && + data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && + !data[4].length && data[9] == 1 + ) { + wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); + } else { + wrapper = (func.length == 1 && isLaziable(func)) + ? wrapper[funcName]() + : wrapper.thru(func); + } + } + return function() { + var args = arguments, + value = args[0]; + + if (wrapper && args.length == 1 && isArray(value)) { + return wrapper.plant(value).value(); + } + var index = 0, + result = length ? funcs[index].apply(this, args) : value; + + while (++index < length) { + result = funcs[index].call(this, result); + } + return result; + }; + }); + } + + /** + * Creates a function that wraps `func` to invoke it with optional `this` + * binding of `thisArg`, partial application, and currying. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to + * the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [partialsRight] The arguments to append to those provided + * to the new function. + * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { + var isAry = bitmask & WRAP_ARY_FLAG, + isBind = bitmask & WRAP_BIND_FLAG, + isBindKey = bitmask & WRAP_BIND_KEY_FLAG, + isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), + isFlip = bitmask & WRAP_FLIP_FLAG, + Ctor = isBindKey ? undefined : createCtor(func); + + function wrapper() { + var length = arguments.length, + args = Array(length), + index = length; + + while (index--) { + args[index] = arguments[index]; + } + if (isCurried) { + var placeholder = getHolder(wrapper), + holdersCount = countHolders(args, placeholder); + } + if (partials) { + args = composeArgs(args, partials, holders, isCurried); + } + if (partialsRight) { + args = composeArgsRight(args, partialsRight, holdersRight, isCurried); + } + length -= holdersCount; + if (isCurried && length < arity) { + var newHolders = replaceHolders(args, placeholder); + return createRecurry( + func, bitmask, createHybrid, wrapper.placeholder, thisArg, + args, newHolders, argPos, ary, arity - length + ); + } + var thisBinding = isBind ? thisArg : this, + fn = isBindKey ? thisBinding[func] : func; + + length = args.length; + if (argPos) { + args = reorder(args, argPos); + } else if (isFlip && length > 1) { + args.reverse(); + } + if (isAry && ary < length) { + args.length = ary; + } + if (this && this !== root && this instanceof wrapper) { + fn = Ctor || createCtor(fn); + } + return fn.apply(thisBinding, args); + } + return wrapper; + } + + /** + * Creates a function like `_.invertBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} toIteratee The function to resolve iteratees. + * @returns {Function} Returns the new inverter function. + */ + function createInverter(setter, toIteratee) { + return function(object, iteratee) { + return baseInverter(object, setter, toIteratee(iteratee), {}); + }; + } + + /** + * Creates a function that performs a mathematical operation on two values. + * + * @private + * @param {Function} operator The function to perform the operation. + * @param {number} [defaultValue] The value used for `undefined` arguments. + * @returns {Function} Returns the new mathematical operation function. + */ + function createMathOperation(operator, defaultValue) { + return function(value, other) { + var result; + if (value === undefined && other === undefined) { + return defaultValue; + } + if (value !== undefined) { + result = value; + } + if (other !== undefined) { + if (result === undefined) { + return other; + } + if (typeof value == 'string' || typeof other == 'string') { + value = baseToString(value); + other = baseToString(other); + } else { + value = baseToNumber(value); + other = baseToNumber(other); + } + result = operator(value, other); + } + return result; + }; + } + + /** + * Creates a function like `_.over`. + * + * @private + * @param {Function} arrayFunc The function to iterate over iteratees. + * @returns {Function} Returns the new over function. + */ + function createOver(arrayFunc) { + return flatRest(function(iteratees) { + iteratees = arrayMap(iteratees, baseUnary(getIteratee())); + return baseRest(function(args) { + var thisArg = this; + return arrayFunc(iteratees, function(iteratee) { + return apply(iteratee, thisArg, args); + }); + }); + }); + } + + /** + * Creates the padding for `string` based on `length`. The `chars` string + * is truncated if the number of characters exceeds `length`. + * + * @private + * @param {number} length The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padding for `string`. + */ + function createPadding(length, chars) { + chars = chars === undefined ? ' ' : baseToString(chars); + + var charsLength = chars.length; + if (charsLength < 2) { + return charsLength ? baseRepeat(chars, length) : chars; + } + var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))); + return hasUnicode(chars) + ? castSlice(stringToArray(result), 0, length).join('') + : result.slice(0, length); + } + + /** + * Creates a function that wraps `func` to invoke it with the `this` binding + * of `thisArg` and `partials` prepended to the arguments it receives. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} partials The arguments to prepend to those provided to + * the new function. + * @returns {Function} Returns the new wrapped function. + */ + function createPartial(func, bitmask, thisArg, partials) { + var isBind = bitmask & WRAP_BIND_FLAG, + Ctor = createCtor(func); + + function wrapper() { + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(leftLength + argsLength), + fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex]; + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex]; + } + return apply(fn, isBind ? thisArg : this, args); + } + return wrapper; + } + + /** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ + function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = toFinite(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = toFinite(end); + } + step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); + return baseRange(start, end, step, fromRight); + }; + } + + /** + * Creates a function that performs a relational operation on two values. + * + * @private + * @param {Function} operator The function to perform the operation. + * @returns {Function} Returns the new relational operation function. + */ + function createRelationalOperation(operator) { + return function(value, other) { + if (!(typeof value == 'string' && typeof other == 'string')) { + value = toNumber(value); + other = toNumber(other); + } + return operator(value, other); + }; + } + + /** + * Creates a function that wraps `func` to continue currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {Function} wrapFunc The function to create the `func` wrapper. + * @param {*} placeholder The placeholder value. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to + * the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { + var isCurry = bitmask & WRAP_CURRY_FLAG, + newHolders = isCurry ? holders : undefined, + newHoldersRight = isCurry ? undefined : holders, + newPartials = isCurry ? partials : undefined, + newPartialsRight = isCurry ? undefined : partials; + + bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG); + bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); + + if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { + bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); + } + var newData = [ + func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, + newHoldersRight, argPos, ary, arity + ]; + + var result = wrapFunc.apply(undefined, newData); + if (isLaziable(func)) { + setData(result, newData); + } + result.placeholder = placeholder; + return setWrapToString(result, func, bitmask); + } + + /** + * Creates a function like `_.round`. + * + * @private + * @param {string} methodName The name of the `Math` method to use when rounding. + * @returns {Function} Returns the new round function. + */ + function createRound(methodName) { + var func = Math[methodName]; + return function(number, precision) { + number = toNumber(number); + precision = precision == null ? 0 : nativeMin(toInteger(precision), 292); + if (precision) { + // Shift with exponential notation to avoid floating-point issues. + // See [MDN](https://mdn.io/round#Examples) for more details. + var pair = (toString(number) + 'e').split('e'), + value = func(pair[0] + 'e' + (+pair[1] + precision)); + + pair = (toString(value) + 'e').split('e'); + return +(pair[0] + 'e' + (+pair[1] - precision)); + } + return func(number); + }; + } + + /** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ + var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { + return new Set(values); + }; + + /** + * Creates a `_.toPairs` or `_.toPairsIn` function. + * + * @private + * @param {Function} keysFunc The function to get the keys of a given object. + * @returns {Function} Returns the new pairs function. + */ + function createToPairs(keysFunc) { + return function(object) { + var tag = getTag(object); + if (tag == mapTag) { + return mapToArray(object); + } + if (tag == setTag) { + return setToPairs(object); + } + return baseToPairs(object, keysFunc(object)); + }; + } + + /** + * Creates a function that either curries or invokes `func` with optional + * `this` binding and partially applied arguments. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask flags. + * 1 - `_.bind` + * 2 - `_.bindKey` + * 4 - `_.curry` or `_.curryRight` of a bound function + * 8 - `_.curry` + * 16 - `_.curryRight` + * 32 - `_.partial` + * 64 - `_.partialRight` + * 128 - `_.rearg` + * 256 - `_.ary` + * 512 - `_.flip` + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to be partially applied. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { + var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; + if (!isBindKey && typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + var length = partials ? partials.length : 0; + if (!length) { + bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); + partials = holders = undefined; + } + ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); + arity = arity === undefined ? arity : toInteger(arity); + length -= holders ? holders.length : 0; + + if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { + var partialsRight = partials, + holdersRight = holders; + + partials = holders = undefined; + } + var data = isBindKey ? undefined : getData(func); + + var newData = [ + func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, + argPos, ary, arity + ]; + + if (data) { + mergeData(newData, data); + } + func = newData[0]; + bitmask = newData[1]; + thisArg = newData[2]; + partials = newData[3]; + holders = newData[4]; + arity = newData[9] = newData[9] === undefined + ? (isBindKey ? 0 : func.length) + : nativeMax(newData[9] - length, 0); + + if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { + bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); + } + if (!bitmask || bitmask == WRAP_BIND_FLAG) { + var result = createBind(func, bitmask, thisArg); + } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { + result = createCurry(func, bitmask, arity); + } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { + result = createPartial(func, bitmask, thisArg, partials); + } else { + result = createHybrid.apply(undefined, newData); + } + var setter = data ? baseSetData : setData; + return setWrapToString(setter(result, newData), func, bitmask); + } + + /** + * Used by `_.defaults` to customize its `_.assignIn` use to assign properties + * of source objects to the destination object for all destination properties + * that resolve to `undefined`. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to assign. + * @param {Object} object The parent object of `objValue`. + * @returns {*} Returns the value to assign. + */ + function customDefaultsAssignIn(objValue, srcValue, key, object) { + if (objValue === undefined || + (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { + return srcValue; + } + return objValue; + } + + /** + * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source + * objects into destination objects that are passed thru. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to merge. + * @param {Object} object The parent object of `objValue`. + * @param {Object} source The parent object of `srcValue`. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + * @returns {*} Returns the value to assign. + */ + function customDefaultsMerge(objValue, srcValue, key, object, source, stack) { + if (isObject(objValue) && isObject(srcValue)) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, objValue); + baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack); + stack['delete'](srcValue); + } + return objValue; + } + + /** + * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain + * objects. + * + * @private + * @param {*} value The value to inspect. + * @param {string} key The key of the property to inspect. + * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. + */ + function customOmitClone(value) { + return isPlainObject(value) ? undefined : value; + } + + /** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ + function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(array); + if (stacked && stack.get(other)) { + return stacked == other; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!arraySome(other, function(othValue, othIndex) { + if (!cacheHas(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; + } + + /** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = mapToArray; + + case setTag: + var isPartial = bitmask & COMPARE_PARTIAL_FLAG; + convert || (convert = setToArray); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; + } + + /** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + objProps = getAllKeys(object), + objLength = objProps.length, + othProps = getAllKeys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked && stack.get(other)) { + return stacked == other; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; + } + + /** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + function flatRest(func) { + return setToString(overRest(func, undefined, flatten), func + ''); + } + + /** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ + function getAllKeys(object) { + return baseGetAllKeys(object, keys, getSymbols); + } + + /** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ + function getAllKeysIn(object) { + return baseGetAllKeys(object, keysIn, getSymbolsIn); + } + + /** + * Gets metadata for `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {*} Returns the metadata for `func`. + */ + var getData = !metaMap ? noop : function(func) { + return metaMap.get(func); + }; + + /** + * Gets the name of `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {string} Returns the function name. + */ + function getFuncName(func) { + var result = (func.name + ''), + array = realNames[result], + length = hasOwnProperty.call(realNames, result) ? array.length : 0; + + while (length--) { + var data = array[length], + otherFunc = data.func; + if (otherFunc == null || otherFunc == func) { + return data.name; + } + } + return result; + } + + /** + * Gets the argument placeholder value for `func`. + * + * @private + * @param {Function} func The function to inspect. + * @returns {*} Returns the placeholder value. + */ + function getHolder(func) { + var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func; + return object.placeholder; + } + + /** + * Gets the appropriate "iteratee" function. If `_.iteratee` is customized, + * this function returns the custom method, otherwise it returns `baseIteratee`. + * If arguments are provided, the chosen function is invoked with them and + * its result is returned. + * + * @private + * @param {*} [value] The value to convert to an iteratee. + * @param {number} [arity] The arity of the created iteratee. + * @returns {Function} Returns the chosen function or its result. + */ + function getIteratee() { + var result = lodash.iteratee || iteratee; + result = result === iteratee ? baseIteratee : result; + return arguments.length ? result(arguments[0], arguments[1]) : result; + } + + /** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ + function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; + } + + /** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ + function getMatchData(object) { + var result = keys(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, isStrictComparable(value)]; + } + return result; + } + + /** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ + function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; + } + + /** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ + function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; + } + + /** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbols = !nativeGetSymbols ? stubArray : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return arrayFilter(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); + }; + + /** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { + var result = []; + while (object) { + arrayPush(result, getSymbols(object)); + object = getPrototype(object); + } + return result; + }; + + /** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + var getTag = baseGetTag; + + // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. + if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || + (Map && getTag(new Map) != mapTag) || + (Promise && getTag(Promise.resolve()) != promiseTag) || + (Set && getTag(new Set) != setTag) || + (WeakMap && getTag(new WeakMap) != weakMapTag)) { + getTag = function(value) { + var result = baseGetTag(value), + Ctor = result == objectTag ? value.constructor : undefined, + ctorString = Ctor ? toSource(Ctor) : ''; + + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: return dataViewTag; + case mapCtorString: return mapTag; + case promiseCtorString: return promiseTag; + case setCtorString: return setTag; + case weakMapCtorString: return weakMapTag; + } + } + return result; + }; + } + + /** + * Gets the view, applying any `transforms` to the `start` and `end` positions. + * + * @private + * @param {number} start The start of the view. + * @param {number} end The end of the view. + * @param {Array} transforms The transformations to apply to the view. + * @returns {Object} Returns an object containing the `start` and `end` + * positions of the view. + */ + function getView(start, end, transforms) { + var index = -1, + length = transforms.length; + + while (++index < length) { + var data = transforms[index], + size = data.size; + + switch (data.type) { + case 'drop': start += size; break; + case 'dropRight': end -= size; break; + case 'take': end = nativeMin(end, start + size); break; + case 'takeRight': start = nativeMax(start, end - size); break; + } + } + return { 'start': start, 'end': end }; + } + + /** + * Extracts wrapper details from the `source` body comment. + * + * @private + * @param {string} source The source to inspect. + * @returns {Array} Returns the wrapper details. + */ + function getWrapDetails(source) { + var match = source.match(reWrapDetails); + return match ? match[1].split(reSplitDetails) : []; + } + + /** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ + function hasPath(object, path, hasFunc) { + path = castPath(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = toKey(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && isLength(length) && isIndex(key, length) && + (isArray(object) || isArguments(object)); + } + + /** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ + function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; + } + + /** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneObject(object) { + return (typeof object.constructor == 'function' && !isPrototype(object)) + ? baseCreate(getPrototype(object)) + : {}; + } + + /** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return cloneArrayBuffer(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return cloneTypedArray(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return cloneSymbol(object); + } + } + + /** + * Inserts wrapper `details` in a comment at the top of the `source` body. + * + * @private + * @param {string} source The source to modify. + * @returns {Array} details The details to insert. + * @returns {string} Returns the modified source. + */ + function insertWrapDetails(source, details) { + var length = details.length; + if (!length) { + return source; + } + var lastIndex = length - 1; + details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; + details = details.join(length > 2 ? ', ' : ' '); + return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); + } + + /** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ + function isFlattenable(value) { + return isArray(value) || isArguments(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); + } + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); + } + + /** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; + } + + /** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ + function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); + } + + /** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ + function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); + } + + /** + * Checks if `func` has a lazy counterpart. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` has a lazy counterpart, + * else `false`. + */ + function isLaziable(func) { + var funcName = getFuncName(func), + other = lodash[funcName]; + + if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { + return false; + } + if (func === other) { + return true; + } + var data = getData(other); + return !!data && func === data[0]; + } + + /** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ + function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); + } + + /** + * Checks if `func` is capable of being masked. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `func` is maskable, else `false`. + */ + var isMaskable = coreJsData ? isFunction : stubFalse; + + /** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ + function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + + return value === proto; + } + + /** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ + function isStrictComparable(value) { + return value === value && !isObject(value); + } + + /** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ + function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; + } + + /** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ + function memoizeCapped(func) { + var result = memoize(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; + } + + /** + * Merges the function metadata of `source` into `data`. + * + * Merging metadata reduces the number of wrappers used to invoke a function. + * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` + * may be applied regardless of execution order. Methods like `_.ary` and + * `_.rearg` modify function arguments, making the order in which they are + * executed important, preventing the merging of metadata. However, we make + * an exception for a safe combined case where curried functions have `_.ary` + * and or `_.rearg` applied. + * + * @private + * @param {Array} data The destination metadata. + * @param {Array} source The source metadata. + * @returns {Array} Returns `data`. + */ + function mergeData(data, source) { + var bitmask = data[1], + srcBitmask = source[1], + newBitmask = bitmask | srcBitmask, + isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); + + var isCombo = + ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) || + ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) || + ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG)); + + // Exit early if metadata can't be merged. + if (!(isCommon || isCombo)) { + return data; + } + // Use source `thisArg` if available. + if (srcBitmask & WRAP_BIND_FLAG) { + data[2] = source[2]; + // Set when currying a bound function. + newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG; + } + // Compose partial arguments. + var value = source[3]; + if (value) { + var partials = data[3]; + data[3] = partials ? composeArgs(partials, value, source[4]) : value; + data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; + } + // Compose partial right arguments. + value = source[5]; + if (value) { + partials = data[5]; + data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; + data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; + } + // Use source `argPos` if available. + value = source[7]; + if (value) { + data[7] = value; + } + // Use source `ary` if it's smaller. + if (srcBitmask & WRAP_ARY_FLAG) { + data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); + } + // Use source `arity` if one is not provided. + if (data[9] == null) { + data[9] = source[9]; + } + // Use source `func` and merge bitmasks. + data[0] = source[0]; + data[1] = newBitmask; + + return data; + } + + /** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; + } + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString.call(value); + } + + /** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ + function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return apply(func, this, otherArgs); + }; + } + + /** + * Gets the parent value at `path` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} path The path to get the parent value of. + * @returns {*} Returns the parent value. + */ + function parent(object, path) { + return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); + } + + /** + * Reorder `array` according to the specified indexes where the element at + * the first index is assigned as the first element, the element at + * the second index is assigned as the second element, and so on. + * + * @private + * @param {Array} array The array to reorder. + * @param {Array} indexes The arranged array indexes. + * @returns {Array} Returns `array`. + */ + function reorder(array, indexes) { + var arrLength = array.length, + length = nativeMin(indexes.length, arrLength), + oldArray = copyArray(array); + + while (length--) { + var index = indexes[length]; + array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; + } + return array; + } + + /** + * Gets the value at `key`, unless `key` is "__proto__". + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function safeGet(object, key) { + if (key == '__proto__') { + return; + } + + return object[key]; + } + + /** + * Sets metadata for `func`. + * + * **Note:** If this function becomes hot, i.e. is invoked a lot in a short + * period of time, it will trip its breaker and transition to an identity + * function to avoid garbage collection pauses in V8. See + * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) + * for more details. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var setData = shortOut(baseSetData); + + /** + * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout). + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @returns {number|Object} Returns the timer id or timeout object. + */ + var setTimeout = ctxSetTimeout || function(func, wait) { + return root.setTimeout(func, wait); + }; + + /** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var setToString = shortOut(baseSetToString); + + /** + * Sets the `toString` method of `wrapper` to mimic the source of `reference` + * with wrapper details in a comment at the top of the source body. + * + * @private + * @param {Function} wrapper The function to modify. + * @param {Function} reference The reference function. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @returns {Function} Returns `wrapper`. + */ + function setWrapToString(wrapper, reference, bitmask) { + var source = (reference + ''); + return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); + } + + /** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ + function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; + } + + /** + * A specialized version of `_.shuffle` which mutates and sets the size of `array`. + * + * @private + * @param {Array} array The array to shuffle. + * @param {number} [size=array.length] The size of `array`. + * @returns {Array} Returns `array`. + */ + function shuffleSelf(array, size) { + var index = -1, + length = array.length, + lastIndex = length - 1; + + size = size === undefined ? length : size; + while (++index < size) { + var rand = baseRandom(index, lastIndex), + value = array[rand]; + + array[rand] = array[index]; + array[index] = value; + } + array.length = size; + return array; + } + + /** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ + var stringToPath = memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; + }); + + /** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ + function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + /** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ + function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; + } + + /** + * Updates wrapper `details` based on `bitmask` flags. + * + * @private + * @returns {Array} details The details to modify. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @returns {Array} Returns `details`. + */ + function updateWrapDetails(details, bitmask) { + arrayEach(wrapFlags, function(pair) { + var value = '_.' + pair[0]; + if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { + details.push(value); + } + }); + return details.sort(); + } + + /** + * Creates a clone of `wrapper`. + * + * @private + * @param {Object} wrapper The wrapper to clone. + * @returns {Object} Returns the cloned wrapper. + */ + function wrapperClone(wrapper) { + if (wrapper instanceof LazyWrapper) { + return wrapper.clone(); + } + var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); + result.__actions__ = copyArray(wrapper.__actions__); + result.__index__ = wrapper.__index__; + result.__values__ = wrapper.__values__; + return result; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array of elements split into groups the length of `size`. + * If `array` can't be split evenly, the final chunk will be the remaining + * elements. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to process. + * @param {number} [size=1] The length of each chunk + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the new array of chunks. + * @example + * + * _.chunk(['a', 'b', 'c', 'd'], 2); + * // => [['a', 'b'], ['c', 'd']] + * + * _.chunk(['a', 'b', 'c', 'd'], 3); + * // => [['a', 'b', 'c'], ['d']] + */ + function chunk(array, size, guard) { + if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { + size = 1; + } else { + size = nativeMax(toInteger(size), 0); + } + var length = array == null ? 0 : array.length; + if (!length || size < 1) { + return []; + } + var index = 0, + resIndex = 0, + result = Array(nativeCeil(length / size)); + + while (index < length) { + result[resIndex++] = baseSlice(array, index, (index += size)); + } + return result; + } + + /** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ + function compact(array) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value) { + result[resIndex++] = value; + } + } + return result; + } + + /** + * Creates a new array concatenating `array` with any additional arrays + * and/or values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to concatenate. + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var other = _.concat(array, 2, [3], [[4]]); + * + * console.log(other); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ + function concat() { + var length = arguments.length; + if (!length) { + return []; + } + var args = Array(length - 1), + array = arguments[0], + index = length; + + while (index--) { + args[index - 1] = arguments[index]; + } + return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); + } + + /** + * Creates an array of `array` values not included in the other given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * **Note:** Unlike `_.pullAll`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.without, _.xor + * @example + * + * _.difference([2, 1], [2, 3]); + * // => [1] + */ + var difference = baseRest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) + : []; + }); + + /** + * This method is like `_.difference` except that it accepts `iteratee` which + * is invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * **Note:** Unlike `_.pullAllBy`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2] + * + * // The `_.property` iteratee shorthand. + * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ + var differenceBy = baseRest(function(array, values) { + var iteratee = last(values); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)) + : []; + }); + + /** + * This method is like `_.difference` except that it accepts `comparator` + * which is invoked to compare elements of `array` to `values`. The order and + * references of result values are determined by the first array. The comparator + * is invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.pullAllWith`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * + * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); + * // => [{ 'x': 2, 'y': 1 }] + */ + var differenceWith = baseRest(function(array, values) { + var comparator = last(values); + if (isArrayLikeObject(comparator)) { + comparator = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) + : []; + }); + + /** + * Creates a slice of `array` with `n` elements dropped from the beginning. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.drop([1, 2, 3]); + * // => [2, 3] + * + * _.drop([1, 2, 3], 2); + * // => [3] + * + * _.drop([1, 2, 3], 5); + * // => [] + * + * _.drop([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function drop(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, n < 0 ? 0 : n, length); + } + + /** + * Creates a slice of `array` with `n` elements dropped from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRight([1, 2, 3]); + * // => [1, 2] + * + * _.dropRight([1, 2, 3], 2); + * // => [1] + * + * _.dropRight([1, 2, 3], 5); + * // => [] + * + * _.dropRight([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function dropRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` excluding elements dropped from the end. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.dropRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney'] + * + * // The `_.matches` iteratee shorthand. + * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropRightWhile(users, ['active', false]); + * // => objects for ['barney'] + * + * // The `_.property` iteratee shorthand. + * _.dropRightWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ + function dropRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), true, true) + : []; + } + + /** + * Creates a slice of `array` excluding elements dropped from the beginning. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.dropWhile(users, function(o) { return !o.active; }); + * // => objects for ['pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.dropWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropWhile(users, ['active', false]); + * // => objects for ['pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.dropWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ + function dropWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), true) + : []; + } + + /** + * Fills elements of `array` with `value` from `start` up to, but not + * including, `end`. + * + * **Note:** This method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Array + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.fill(array, 'a'); + * console.log(array); + * // => ['a', 'a', 'a'] + * + * _.fill(Array(3), 2); + * // => [2, 2, 2] + * + * _.fill([4, 6, 8, 10], '*', 1, 3); + * // => [4, '*', '*', 10] + */ + function fill(array, value, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { + start = 0; + end = length; + } + return baseFill(array, value, start, end); + } + + /** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ + function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseFindIndex(array, getIteratee(predicate, 3), index); + } + + /** + * This method is like `_.findIndex` except that it iterates over elements + * of `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); + * // => 2 + * + * // The `_.matches` iteratee shorthand. + * _.findLastIndex(users, { 'user': 'barney', 'active': true }); + * // => 0 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastIndex(users, ['active', false]); + * // => 2 + * + * // The `_.property` iteratee shorthand. + * _.findLastIndex(users, 'active'); + * // => 0 + */ + function findLastIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length - 1; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = fromIndex < 0 + ? nativeMax(length + index, 0) + : nativeMin(index, length - 1); + } + return baseFindIndex(array, getIteratee(predicate, 3), index, true); + } + + /** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ + function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, 1) : []; + } + + /** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */ + function flattenDeep(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, INFINITY) : []; + } + + /** + * Recursively flatten `array` up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Array + * @param {Array} array The array to flatten. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * var array = [1, [2, [3, [4]], 5]]; + * + * _.flattenDepth(array, 1); + * // => [1, 2, [3, [4]], 5] + * + * _.flattenDepth(array, 2); + * // => [1, 2, 3, [4], 5] + */ + function flattenDepth(array, depth) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + depth = depth === undefined ? 1 : toInteger(depth); + return baseFlatten(array, depth); + } + + /** + * The inverse of `_.toPairs`; this method returns an object composed + * from key-value `pairs`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} pairs The key-value pairs. + * @returns {Object} Returns the new object. + * @example + * + * _.fromPairs([['a', 1], ['b', 2]]); + * // => { 'a': 1, 'b': 2 } + */ + function fromPairs(pairs) { + var index = -1, + length = pairs == null ? 0 : pairs.length, + result = {}; + + while (++index < length) { + var pair = pairs[index]; + result[pair[0]] = pair[1]; + } + return result; + } + + /** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias first + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.head([1, 2, 3]); + * // => 1 + * + * _.head([]); + * // => undefined + */ + function head(array) { + return (array && array.length) ? array[0] : undefined; + } + + /** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the + * offset from the end of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */ + function indexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseIndexOf(array, value, index); + } + + /** + * Gets all but the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.initial([1, 2, 3]); + * // => [1, 2] + */ + function initial(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 0, -1) : []; + } + + /** + * Creates an array of unique values that are included in all given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersection([2, 1], [2, 3]); + * // => [2] + */ + var intersection = baseRest(function(arrays) { + var mapped = arrayMap(arrays, castArrayLikeObject); + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped) + : []; + }); + + /** + * This method is like `_.intersection` except that it accepts `iteratee` + * which is invoked for each element of each `arrays` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [2.1] + * + * // The `_.property` iteratee shorthand. + * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }] + */ + var intersectionBy = baseRest(function(arrays) { + var iteratee = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); + + if (iteratee === last(mapped)) { + iteratee = undefined; + } else { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, getIteratee(iteratee, 2)) + : []; + }); + + /** + * This method is like `_.intersection` except that it accepts `comparator` + * which is invoked to compare elements of `arrays`. The order and references + * of result values are determined by the first array. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.intersectionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }] + */ + var intersectionWith = baseRest(function(arrays) { + var comparator = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); + + comparator = typeof comparator == 'function' ? comparator : undefined; + if (comparator) { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, undefined, comparator) + : []; + }); + + /** + * Converts all elements in `array` into a string separated by `separator`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to convert. + * @param {string} [separator=','] The element separator. + * @returns {string} Returns the joined string. + * @example + * + * _.join(['a', 'b', 'c'], '~'); + * // => 'a~b~c' + */ + function join(array, separator) { + return array == null ? '' : nativeJoin.call(array, separator); + } + + /** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ + function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; + } + + /** + * This method is like `_.indexOf` except that it iterates over elements of + * `array` from right to left. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.lastIndexOf([1, 2, 1, 2], 2); + * // => 3 + * + * // Search from the `fromIndex`. + * _.lastIndexOf([1, 2, 1, 2], 2, 2); + * // => 1 + */ + function lastIndexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); + } + return value === value + ? strictLastIndexOf(array, value, index) + : baseFindIndex(array, baseIsNaN, index, true); + } + + /** + * Gets the element at index `n` of `array`. If `n` is negative, the nth + * element from the end is returned. + * + * @static + * @memberOf _ + * @since 4.11.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=0] The index of the element to return. + * @returns {*} Returns the nth element of `array`. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * + * _.nth(array, 1); + * // => 'b' + * + * _.nth(array, -2); + * // => 'c'; + */ + function nth(array, n) { + return (array && array.length) ? baseNth(array, toInteger(n)) : undefined; + } + + /** + * Removes all given values from `array` using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` + * to remove elements from an array by predicate. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...*} [values] The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pull(array, 'a', 'c'); + * console.log(array); + * // => ['b', 'b'] + */ + var pull = baseRest(pullAll); + + /** + * This method is like `_.pull` except that it accepts an array of values to remove. + * + * **Note:** Unlike `_.difference`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pullAll(array, ['a', 'c']); + * console.log(array); + * // => ['b', 'b'] + */ + function pullAll(array, values) { + return (array && array.length && values && values.length) + ? basePullAll(array, values) + : array; + } + + /** + * This method is like `_.pullAll` except that it accepts `iteratee` which is + * invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The iteratee is invoked with one argument: (value). + * + * **Note:** Unlike `_.differenceBy`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; + * + * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); + * console.log(array); + * // => [{ 'x': 2 }] + */ + function pullAllBy(array, values, iteratee) { + return (array && array.length && values && values.length) + ? basePullAll(array, values, getIteratee(iteratee, 2)) + : array; + } + + /** + * This method is like `_.pullAll` except that it accepts `comparator` which + * is invoked to compare elements of `array` to `values`. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.differenceWith`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; + * + * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); + * console.log(array); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] + */ + function pullAllWith(array, values, comparator) { + return (array && array.length && values && values.length) + ? basePullAll(array, values, undefined, comparator) + : array; + } + + /** + * Removes elements from `array` corresponding to `indexes` and returns an + * array of removed elements. + * + * **Note:** Unlike `_.at`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...(number|number[])} [indexes] The indexes of elements to remove. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * var pulled = _.pullAt(array, [1, 3]); + * + * console.log(array); + * // => ['a', 'c'] + * + * console.log(pulled); + * // => ['b', 'd'] + */ + var pullAt = flatRest(function(array, indexes) { + var length = array == null ? 0 : array.length, + result = baseAt(array, indexes); + + basePullAt(array, arrayMap(indexes, function(index) { + return isIndex(index, length) ? +index : index; + }).sort(compareAscending)); + + return result; + }); + + /** + * Removes all elements from `array` that `predicate` returns truthy for + * and returns an array of the removed elements. The predicate is invoked + * with three arguments: (value, index, array). + * + * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` + * to pull elements from an array by value. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [1, 2, 3, 4]; + * var evens = _.remove(array, function(n) { + * return n % 2 == 0; + * }); + * + * console.log(array); + * // => [1, 3] + * + * console.log(evens); + * // => [2, 4] + */ + function remove(array, predicate) { + var result = []; + if (!(array && array.length)) { + return result; + } + var index = -1, + indexes = [], + length = array.length; + + predicate = getIteratee(predicate, 3); + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result.push(value); + indexes.push(index); + } + } + basePullAt(array, indexes); + return result; + } + + /** + * Reverses `array` so that the first element becomes the last, the second + * element becomes the second to last, and so on. + * + * **Note:** This method mutates `array` and is based on + * [`Array#reverse`](https://mdn.io/Array/reverse). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.reverse(array); + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function reverse(array) { + return array == null ? array : nativeReverse.call(array); + } + + /** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of + * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are + * returned. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function slice(array, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { + start = 0; + end = length; + } + else { + start = start == null ? 0 : toInteger(start); + end = end === undefined ? length : toInteger(end); + } + return baseSlice(array, start, end); + } + + /** + * Uses a binary search to determine the lowest index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedIndex([30, 50], 40); + * // => 1 + */ + function sortedIndex(array, value) { + return baseSortedIndex(array, value); + } + + /** + * This method is like `_.sortedIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); + * // => 0 + */ + function sortedIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, getIteratee(iteratee, 2)); + } + + /** + * This method is like `_.indexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedIndexOf([4, 5, 5, 5, 6], 5); + * // => 1 + */ + function sortedIndexOf(array, value) { + var length = array == null ? 0 : array.length; + if (length) { + var index = baseSortedIndex(array, value); + if (index < length && eq(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * This method is like `_.sortedIndex` except that it returns the highest + * index at which `value` should be inserted into `array` in order to + * maintain its sort order. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedLastIndex([4, 5, 5, 5, 6], 5); + * // => 4 + */ + function sortedLastIndex(array, value) { + return baseSortedIndex(array, value, true); + } + + /** + * This method is like `_.sortedLastIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 1 + * + * // The `_.property` iteratee shorthand. + * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); + * // => 1 + */ + function sortedLastIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true); + } + + /** + * This method is like `_.lastIndexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); + * // => 3 + */ + function sortedLastIndexOf(array, value) { + var length = array == null ? 0 : array.length; + if (length) { + var index = baseSortedIndex(array, value, true) - 1; + if (eq(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * This method is like `_.uniq` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniq([1, 1, 2]); + * // => [1, 2] + */ + function sortedUniq(array) { + return (array && array.length) + ? baseSortedUniq(array) + : []; + } + + /** + * This method is like `_.uniqBy` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); + * // => [1.1, 2.3] + */ + function sortedUniqBy(array, iteratee) { + return (array && array.length) + ? baseSortedUniq(array, getIteratee(iteratee, 2)) + : []; + } + + /** + * Gets all but the first element of `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.tail([1, 2, 3]); + * // => [2, 3] + */ + function tail(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 1, length) : []; + } + + /** + * Creates a slice of `array` with `n` elements taken from the beginning. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.take([1, 2, 3]); + * // => [1] + * + * _.take([1, 2, 3], 2); + * // => [1, 2] + * + * _.take([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.take([1, 2, 3], 0); + * // => [] + */ + function take(array, n, guard) { + if (!(array && array.length)) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` with `n` elements taken from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeRight([1, 2, 3]); + * // => [3] + * + * _.takeRight([1, 2, 3], 2); + * // => [2, 3] + * + * _.takeRight([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.takeRight([1, 2, 3], 0); + * // => [] + */ + function takeRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, n < 0 ? 0 : n, length); + } + + /** + * Creates a slice of `array` with elements taken from the end. Elements are + * taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.takeRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeRightWhile(users, ['active', false]); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.takeRightWhile(users, 'active'); + * // => [] + */ + function takeRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), false, true) + : []; + } + + /** + * Creates a slice of `array` with elements taken from the beginning. Elements + * are taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.takeWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matches` iteratee shorthand. + * _.takeWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeWhile(users, ['active', false]); + * // => objects for ['barney', 'fred'] + * + * // The `_.property` iteratee shorthand. + * _.takeWhile(users, 'active'); + * // => [] + */ + function takeWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3)) + : []; + } + + /** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ + var union = baseRest(function(arrays) { + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); + }); + + /** + * This method is like `_.union` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which uniqueness is computed. Result values are chosen from the first + * array in which the value occurs. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.unionBy([2.1], [1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + var unionBy = baseRest(function(arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)); + }); + + /** + * This method is like `_.union` except that it accepts `comparator` which + * is invoked to compare elements of `arrays`. Result values are chosen from + * the first array in which the value occurs. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.unionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ + var unionWith = baseRest(function(arrays) { + var comparator = last(arrays); + comparator = typeof comparator == 'function' ? comparator : undefined; + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator); + }); + + /** + * Creates a duplicate-free version of an array, using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons, in which only the first occurrence of each element + * is kept. The order of result values is determined by the order they occur + * in the array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniq([2, 1, 2]); + * // => [2, 1] + */ + function uniq(array) { + return (array && array.length) ? baseUniq(array) : []; + } + + /** + * This method is like `_.uniq` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * uniqueness is computed. The order of result values is determined by the + * order they occur in the array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniqBy([2.1, 1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + function uniqBy(array, iteratee) { + return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : []; + } + + /** + * This method is like `_.uniq` except that it accepts `comparator` which + * is invoked to compare elements of `array`. The order of result values is + * determined by the order they occur in the array.The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.uniqWith(objects, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] + */ + function uniqWith(array, comparator) { + comparator = typeof comparator == 'function' ? comparator : undefined; + return (array && array.length) ? baseUniq(array, undefined, comparator) : []; + } + + /** + * This method is like `_.zip` except that it accepts an array of grouped + * elements and creates an array regrouping the elements to their pre-zip + * configuration. + * + * @static + * @memberOf _ + * @since 1.2.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] + * + * _.unzip(zipped); + * // => [['a', 'b'], [1, 2], [true, false]] + */ + function unzip(array) { + if (!(array && array.length)) { + return []; + } + var length = 0; + array = arrayFilter(array, function(group) { + if (isArrayLikeObject(group)) { + length = nativeMax(group.length, length); + return true; + } + }); + return baseTimes(length, function(index) { + return arrayMap(array, baseProperty(index)); + }); + } + + /** + * This method is like `_.unzip` except that it accepts `iteratee` to specify + * how regrouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @param {Function} [iteratee=_.identity] The function to combine + * regrouped values. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip([1, 2], [10, 20], [100, 200]); + * // => [[1, 10, 100], [2, 20, 200]] + * + * _.unzipWith(zipped, _.add); + * // => [3, 30, 300] + */ + function unzipWith(array, iteratee) { + if (!(array && array.length)) { + return []; + } + var result = unzip(array); + if (iteratee == null) { + return result; + } + return arrayMap(result, function(group) { + return apply(iteratee, undefined, group); + }); + } + + /** + * Creates an array excluding all given values using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.pull`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...*} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.xor + * @example + * + * _.without([2, 1, 2, 3], 1, 2); + * // => [3] + */ + var without = baseRest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, values) + : []; + }); + + /** + * Creates an array of unique values that is the + * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) + * of the given arrays. The order of result values is determined by the order + * they occur in the arrays. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.without + * @example + * + * _.xor([2, 1], [2, 3]); + * // => [1, 3] + */ + var xor = baseRest(function(arrays) { + return baseXor(arrayFilter(arrays, isArrayLikeObject)); + }); + + /** + * This method is like `_.xor` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which by which they're compared. The order of result values is determined + * by the order they occur in the arrays. The iteratee is invoked with one + * argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2, 3.4] + * + * // The `_.property` iteratee shorthand. + * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ + var xorBy = baseRest(function(arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2)); + }); + + /** + * This method is like `_.xor` except that it accepts `comparator` which is + * invoked to compare elements of `arrays`. The order of result values is + * determined by the order they occur in the arrays. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.xorWith(objects, others, _.isEqual); + * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ + var xorWith = baseRest(function(arrays) { + var comparator = last(arrays); + comparator = typeof comparator == 'function' ? comparator : undefined; + return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator); + }); + + /** + * Creates an array of grouped elements, the first of which contains the + * first elements of the given arrays, the second of which contains the + * second elements of the given arrays, and so on. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] + */ + var zip = baseRest(unzip); + + /** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ + function zipObject(props, values) { + return baseZipObject(props || [], values || [], assignValue); + } + + /** + * This method is like `_.zipObject` except that it supports property paths. + * + * @static + * @memberOf _ + * @since 4.1.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); + * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } + */ + function zipObjectDeep(props, values) { + return baseZipObject(props || [], values || [], baseSet); + } + + /** + * This method is like `_.zip` except that it accepts `iteratee` to specify + * how grouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @param {Function} [iteratee=_.identity] The function to combine + * grouped values. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { + * return a + b + c; + * }); + * // => [111, 222] + */ + var zipWith = baseRest(function(arrays) { + var length = arrays.length, + iteratee = length > 1 ? arrays[length - 1] : undefined; + + iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined; + return unzipWith(arrays, iteratee); + }); + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` wrapper instance that wraps `value` with explicit method + * chain sequences enabled. The result of such sequences must be unwrapped + * with `_#value`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Seq + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _ + * .chain(users) + * .sortBy('age') + * .map(function(o) { + * return o.user + ' is ' + o.age; + * }) + * .head() + * .value(); + * // => 'pebbles is 1' + */ + function chain(value) { + var result = lodash(value); + result.__chain__ = true; + return result; + } + + /** + * This method invokes `interceptor` and returns `value`. The interceptor + * is invoked with one argument; (value). The purpose of this method is to + * "tap into" a method chain sequence in order to modify intermediate results. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns `value`. + * @example + * + * _([1, 2, 3]) + * .tap(function(array) { + * // Mutate input array. + * array.pop(); + * }) + * .reverse() + * .value(); + * // => [2, 1] + */ + function tap(value, interceptor) { + interceptor(value); + return value; + } + + /** + * This method is like `_.tap` except that it returns the result of `interceptor`. + * The purpose of this method is to "pass thru" values replacing intermediate + * results in a method chain sequence. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns the result of `interceptor`. + * @example + * + * _(' abc ') + * .chain() + * .trim() + * .thru(function(value) { + * return [value]; + * }) + * .value(); + * // => ['abc'] + */ + function thru(value, interceptor) { + return interceptor(value); + } + + /** + * This method is the wrapper version of `_.at`. + * + * @name at + * @memberOf _ + * @since 1.0.0 + * @category Seq + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _(object).at(['a[0].b.c', 'a[1]']).value(); + * // => [3, 4] + */ + var wrapperAt = flatRest(function(paths) { + var length = paths.length, + start = length ? paths[0] : 0, + value = this.__wrapped__, + interceptor = function(object) { return baseAt(object, paths); }; + + if (length > 1 || this.__actions__.length || + !(value instanceof LazyWrapper) || !isIndex(start)) { + return this.thru(interceptor); + } + value = value.slice(start, +start + (length ? 1 : 0)); + value.__actions__.push({ + 'func': thru, + 'args': [interceptor], + 'thisArg': undefined + }); + return new LodashWrapper(value, this.__chain__).thru(function(array) { + if (length && !array.length) { + array.push(undefined); + } + return array; + }); + }); + + /** + * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. + * + * @name chain + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // A sequence without explicit chaining. + * _(users).head(); + * // => { 'user': 'barney', 'age': 36 } + * + * // A sequence with explicit chaining. + * _(users) + * .chain() + * .head() + * .pick('user') + * .value(); + * // => { 'user': 'barney' } + */ + function wrapperChain() { + return chain(this); + } + + /** + * Executes the chain sequence and returns the wrapped result. + * + * @name commit + * @memberOf _ + * @since 3.2.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapped = _(array).push(3); + * + * console.log(array); + * // => [1, 2] + * + * wrapped = wrapped.commit(); + * console.log(array); + * // => [1, 2, 3] + * + * wrapped.last(); + * // => 3 + * + * console.log(array); + * // => [1, 2, 3] + */ + function wrapperCommit() { + return new LodashWrapper(this.value(), this.__chain__); + } + + /** + * Gets the next value on a wrapped object following the + * [iterator protocol](https://mdn.io/iteration_protocols#iterator). + * + * @name next + * @memberOf _ + * @since 4.0.0 + * @category Seq + * @returns {Object} Returns the next iterator value. + * @example + * + * var wrapped = _([1, 2]); + * + * wrapped.next(); + * // => { 'done': false, 'value': 1 } + * + * wrapped.next(); + * // => { 'done': false, 'value': 2 } + * + * wrapped.next(); + * // => { 'done': true, 'value': undefined } + */ + function wrapperNext() { + if (this.__values__ === undefined) { + this.__values__ = toArray(this.value()); + } + var done = this.__index__ >= this.__values__.length, + value = done ? undefined : this.__values__[this.__index__++]; + + return { 'done': done, 'value': value }; + } + + /** + * Enables the wrapper to be iterable. + * + * @name Symbol.iterator + * @memberOf _ + * @since 4.0.0 + * @category Seq + * @returns {Object} Returns the wrapper object. + * @example + * + * var wrapped = _([1, 2]); + * + * wrapped[Symbol.iterator]() === wrapped; + * // => true + * + * Array.from(wrapped); + * // => [1, 2] + */ + function wrapperToIterator() { + return this; + } + + /** + * Creates a clone of the chain sequence planting `value` as the wrapped value. + * + * @name plant + * @memberOf _ + * @since 3.2.0 + * @category Seq + * @param {*} value The value to plant. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2]).map(square); + * var other = wrapped.plant([3, 4]); + * + * other.value(); + * // => [9, 16] + * + * wrapped.value(); + * // => [1, 4] + */ + function wrapperPlant(value) { + var result, + parent = this; + + while (parent instanceof baseLodash) { + var clone = wrapperClone(parent); + clone.__index__ = 0; + clone.__values__ = undefined; + if (result) { + previous.__wrapped__ = clone; + } else { + result = clone; + } + var previous = clone; + parent = parent.__wrapped__; + } + previous.__wrapped__ = value; + return result; + } + + /** + * This method is the wrapper version of `_.reverse`. + * + * **Note:** This method mutates the wrapped array. + * + * @name reverse + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2, 3]; + * + * _(array).reverse().value() + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function wrapperReverse() { + var value = this.__wrapped__; + if (value instanceof LazyWrapper) { + var wrapped = value; + if (this.__actions__.length) { + wrapped = new LazyWrapper(this); + } + wrapped = wrapped.reverse(); + wrapped.__actions__.push({ + 'func': thru, + 'args': [reverse], + 'thisArg': undefined + }); + return new LodashWrapper(wrapped, this.__chain__); + } + return this.thru(reverse); + } + + /** + * Executes the chain sequence to resolve the unwrapped value. + * + * @name value + * @memberOf _ + * @since 0.1.0 + * @alias toJSON, valueOf + * @category Seq + * @returns {*} Returns the resolved unwrapped value. + * @example + * + * _([1, 2, 3]).value(); + * // => [1, 2, 3] + */ + function wrapperValue() { + return baseWrapperValue(this.__wrapped__, this.__actions__); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The corresponding value of + * each key is the number of times the key was returned by `iteratee`. The + * iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.countBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': 1, '6': 2 } + * + * // The `_.property` iteratee shorthand. + * _.countBy(['one', 'two', 'three'], 'length'); + * // => { '3': 2, '5': 1 } + */ + var countBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + ++result[key]; + } else { + baseAssignValue(result, key, 1); + } + }); + + /** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * Iteration is stopped once `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * **Note:** This method returns `true` for + * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because + * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of + * elements of empty collections. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.every(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.every(users, 'active'); + * // => false + */ + function every(collection, predicate, guard) { + var func = isArray(collection) ? arrayEvery : baseEvery; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined; + } + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + */ + function filter(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ + var find = createFind(findIndex); + + /** + * This method is like `_.find` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=collection.length-1] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * _.findLast([1, 2, 3, 4], function(n) { + * return n % 2 == 1; + * }); + * // => 3 + */ + var findLast = createFind(findLastIndex); + + /** + * Creates a flattened array of values by running each element in `collection` + * thru `iteratee` and flattening the mapped results. The iteratee is invoked + * with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [n, n]; + * } + * + * _.flatMap([1, 2], duplicate); + * // => [1, 1, 2, 2] + */ + function flatMap(collection, iteratee) { + return baseFlatten(map(collection, iteratee), 1); + } + + /** + * This method is like `_.flatMap` except that it recursively flattens the + * mapped results. + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [[[n, n]]]; + * } + * + * _.flatMapDeep([1, 2], duplicate); + * // => [1, 1, 2, 2] + */ + function flatMapDeep(collection, iteratee) { + return baseFlatten(map(collection, iteratee), INFINITY); + } + + /** + * This method is like `_.flatMap` except that it recursively flattens the + * mapped results up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [[[n, n]]]; + * } + * + * _.flatMapDepth([1, 2], duplicate, 2); + * // => [[1, 1], [2, 2]] + */ + function flatMapDepth(collection, iteratee, depth) { + depth = depth === undefined ? 1 : toInteger(depth); + return baseFlatten(map(collection, iteratee), depth); + } + + /** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ + function forEach(collection, iteratee) { + var func = isArray(collection) ? arrayEach : baseEach; + return func(collection, getIteratee(iteratee, 3)); + } + + /** + * This method is like `_.forEach` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @alias eachRight + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEach + * @example + * + * _.forEachRight([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `2` then `1`. + */ + function forEachRight(collection, iteratee) { + var func = isArray(collection) ? arrayEachRight : baseEachRight; + return func(collection, getIteratee(iteratee, 3)); + } + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The order of grouped values + * is determined by the order they occur in `collection`. The corresponding + * value of each key is an array of elements responsible for generating the + * key. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.groupBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': [4.2], '6': [6.1, 6.3] } + * + * // The `_.property` iteratee shorthand. + * _.groupBy(['one', 'two', 'three'], 'length'); + * // => { '3': ['one', 'two'], '5': ['three'] } + */ + var groupBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + result[key].push(value); + } else { + baseAssignValue(result, key, [value]); + } + }); + + /** + * Checks if `value` is in `collection`. If `collection` is a string, it's + * checked for a substring of `value`, otherwise + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * is used for equality comparisons. If `fromIndex` is negative, it's used as + * the offset from the end of `collection`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {boolean} Returns `true` if `value` is found, else `false`. + * @example + * + * _.includes([1, 2, 3], 1); + * // => true + * + * _.includes([1, 2, 3], 1, 2); + * // => false + * + * _.includes({ 'a': 1, 'b': 2 }, 1); + * // => true + * + * _.includes('abcd', 'bc'); + * // => true + */ + function includes(collection, value, fromIndex, guard) { + collection = isArrayLike(collection) ? collection : values(collection); + fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; + + var length = collection.length; + if (fromIndex < 0) { + fromIndex = nativeMax(length + fromIndex, 0); + } + return isString(collection) + ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) + : (!!length && baseIndexOf(collection, value, fromIndex) > -1); + } + + /** + * Invokes the method at `path` of each element in `collection`, returning + * an array of the results of each invoked method. Any additional arguments + * are provided to each invoked method. If `path` is a function, it's invoked + * for, and `this` bound to, each element in `collection`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array|Function|string} path The path of the method to invoke or + * the function invoked per iteration. + * @param {...*} [args] The arguments to invoke each method with. + * @returns {Array} Returns the array of results. + * @example + * + * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); + * // => [[1, 5, 7], [1, 2, 3]] + * + * _.invokeMap([123, 456], String.prototype.split, ''); + * // => [['1', '2', '3'], ['4', '5', '6']] + */ + var invokeMap = baseRest(function(collection, path, args) { + var index = -1, + isFunc = typeof path == 'function', + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value) { + result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args); + }); + return result; + }); + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The corresponding value of + * each key is the last element responsible for generating the key. The + * iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * var array = [ + * { 'dir': 'left', 'code': 97 }, + * { 'dir': 'right', 'code': 100 } + * ]; + * + * _.keyBy(array, function(o) { + * return String.fromCharCode(o.code); + * }); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + * + * _.keyBy(array, 'dir'); + * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } + */ + var keyBy = createAggregator(function(result, value, key) { + baseAssignValue(result, key, value); + }); + + /** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ + function map(collection, iteratee) { + var func = isArray(collection) ? arrayMap : baseMap; + return func(collection, getIteratee(iteratee, 3)); + } + + /** + * This method is like `_.sortBy` except that it allows specifying the sort + * orders of the iteratees to sort by. If `orders` is unspecified, all values + * are sorted in ascending order. Otherwise, specify an order of "desc" for + * descending or "asc" for ascending sort order of corresponding values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]] + * The iteratees to sort by. + * @param {string[]} [orders] The sort orders of `iteratees`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 34 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'barney', 'age': 36 } + * ]; + * + * // Sort by `user` in ascending order and by `age` in descending order. + * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] + */ + function orderBy(collection, iteratees, orders, guard) { + if (collection == null) { + return []; + } + if (!isArray(iteratees)) { + iteratees = iteratees == null ? [] : [iteratees]; + } + orders = guard ? undefined : orders; + if (!isArray(orders)) { + orders = orders == null ? [] : [orders]; + } + return baseOrderBy(collection, iteratees, orders); + } + + /** + * Creates an array of elements split into two groups, the first of which + * contains elements `predicate` returns truthy for, the second of which + * contains elements `predicate` returns falsey for. The predicate is + * invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the array of grouped elements. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true }, + * { 'user': 'pebbles', 'age': 1, 'active': false } + * ]; + * + * _.partition(users, function(o) { return o.active; }); + * // => objects for [['fred'], ['barney', 'pebbles']] + * + * // The `_.matches` iteratee shorthand. + * _.partition(users, { 'age': 1, 'active': false }); + * // => objects for [['pebbles'], ['barney', 'fred']] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.partition(users, ['active', false]); + * // => objects for [['barney', 'pebbles'], ['fred']] + * + * // The `_.property` iteratee shorthand. + * _.partition(users, 'active'); + * // => objects for [['fred'], ['barney', 'pebbles']] + */ + var partition = createAggregator(function(result, value, key) { + result[key ? 0 : 1].push(value); + }, function() { return [[], []]; }); + + /** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ + function reduce(collection, iteratee, accumulator) { + var func = isArray(collection) ? arrayReduce : baseReduce, + initAccum = arguments.length < 3; + + return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach); + } + + /** + * This method is like `_.reduce` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduce + * @example + * + * var array = [[0, 1], [2, 3], [4, 5]]; + * + * _.reduceRight(array, function(flattened, other) { + * return flattened.concat(other); + * }, []); + * // => [4, 5, 2, 3, 0, 1] + */ + function reduceRight(collection, iteratee, accumulator) { + var func = isArray(collection) ? arrayReduceRight : baseReduce, + initAccum = arguments.length < 3; + + return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight); + } + + /** + * The opposite of `_.filter`; this method returns the elements of `collection` + * that `predicate` does **not** return truthy for. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.filter + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true } + * ]; + * + * _.reject(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.reject(users, { 'age': 40, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.reject(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.reject(users, 'active'); + * // => objects for ['barney'] + */ + function reject(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + return func(collection, negate(getIteratee(predicate, 3))); + } + + /** + * Gets a random element from `collection`. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + * @example + * + * _.sample([1, 2, 3, 4]); + * // => 2 + */ + function sample(collection) { + var func = isArray(collection) ? arraySample : baseSample; + return func(collection); + } + + /** + * Gets `n` random elements at unique keys from `collection` up to the + * size of `collection`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @param {number} [n=1] The number of elements to sample. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the random elements. + * @example + * + * _.sampleSize([1, 2, 3], 2); + * // => [3, 1] + * + * _.sampleSize([1, 2, 3], 4); + * // => [2, 3, 1] + */ + function sampleSize(collection, n, guard) { + if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) { + n = 1; + } else { + n = toInteger(n); + } + var func = isArray(collection) ? arraySampleSize : baseSampleSize; + return func(collection, n); + } + + /** + * Creates an array of shuffled values, using a version of the + * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + * @example + * + * _.shuffle([1, 2, 3, 4]); + * // => [4, 1, 3, 2] + */ + function shuffle(collection) { + var func = isArray(collection) ? arrayShuffle : baseShuffle; + return func(collection); + } + + /** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ + function size(collection) { + if (collection == null) { + return 0; + } + if (isArrayLike(collection)) { + return isString(collection) ? stringSize(collection) : collection.length; + } + var tag = getTag(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return baseKeys(collection).length; + } + + /** + * Checks if `predicate` returns truthy for **any** element of `collection`. + * Iteration is stopped once `predicate` returns truthy. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.some(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.some(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.some(users, 'active'); + * // => true + */ + function some(collection, predicate, guard) { + var func = isArray(collection) ? arraySome : baseSome; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined; + } + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]] + */ + var sortBy = baseRest(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return baseOrderBy(collection, baseFlatten(iteratees, 1), []); + }); + + /*------------------------------------------------------------------------*/ + + /** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ + var now = ctxNow || function() { + return root.Date.now(); + }; + + /*------------------------------------------------------------------------*/ + + /** + * The opposite of `_.before`; this method creates a function that invokes + * `func` once it's called `n` or more times. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {number} n The number of calls before `func` is invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var saves = ['profile', 'settings']; + * + * var done = _.after(saves.length, function() { + * console.log('done saving!'); + * }); + * + * _.forEach(saves, function(type) { + * asyncSave({ 'type': type, 'complete': done }); + * }); + * // => Logs 'done saving!' after the two async saves have completed. + */ + function after(n, func) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n < 1) { + return func.apply(this, arguments); + } + }; + } + + /** + * Creates a function that invokes `func`, with up to `n` arguments, + * ignoring any additional arguments. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to cap arguments for. + * @param {number} [n=func.length] The arity cap. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new capped function. + * @example + * + * _.map(['6', '8', '10'], _.ary(parseInt, 1)); + * // => [6, 8, 10] + */ + function ary(func, n, guard) { + n = guard ? undefined : n; + n = (func && n == null) ? func.length : n; + return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n); + } + + /** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it's called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery(element).on('click', _.before(5, addContactToList)); + * // => Allows adding up to 4 contacts to the list. + */ + function before(n, func) { + var result; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n > 0) { + result = func.apply(this, arguments); + } + if (n <= 1) { + func = undefined; + } + return result; + }; + } + + /** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and `partials` prepended to the arguments it receives. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * function greet(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // Bound with placeholders. + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */ + var bind = baseRest(function(func, thisArg, partials) { + var bitmask = WRAP_BIND_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getHolder(bind)); + bitmask |= WRAP_PARTIAL_FLAG; + } + return createWrap(func, bitmask, thisArg, partials, holders); + }); + + /** + * Creates a function that invokes the method at `object[key]` with `partials` + * prepended to the arguments it receives. + * + * This method differs from `_.bind` by allowing bound functions to reference + * methods that may be redefined or don't yet exist. See + * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) + * for more details. + * + * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Function + * @param {Object} object The object to invoke the method on. + * @param {string} key The key of the method. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var object = { + * 'user': 'fred', + * 'greet': function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * }; + * + * var bound = _.bindKey(object, 'greet', 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * object.greet = function(greeting, punctuation) { + * return greeting + 'ya ' + this.user + punctuation; + * }; + * + * bound('!'); + * // => 'hiya fred!' + * + * // Bound with placeholders. + * var bound = _.bindKey(object, 'greet', _, '!'); + * bound('hi'); + * // => 'hiya fred!' + */ + var bindKey = baseRest(function(object, key, partials) { + var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getHolder(bindKey)); + bitmask |= WRAP_PARTIAL_FLAG; + } + return createWrap(key, bitmask, object, partials, holders); + }); + + /** + * Creates a function that accepts arguments of `func` and either invokes + * `func` returning its result, if at least `arity` number of arguments have + * been provided, or returns a function that accepts the remaining `func` + * arguments, and so on. The arity of `func` may be specified if `func.length` + * is not sufficient. + * + * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curry(abc); + * + * curried(1)(2)(3); + * // => [1, 2, 3] + * + * curried(1, 2)(3); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(1)(_, 3)(2); + * // => [1, 2, 3] + */ + function curry(func, arity, guard) { + arity = guard ? undefined : arity; + var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); + result.placeholder = curry.placeholder; + return result; + } + + /** + * This method is like `_.curry` except that arguments are applied to `func` + * in the manner of `_.partialRight` instead of `_.partial`. + * + * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curryRight(abc); + * + * curried(3)(2)(1); + * // => [1, 2, 3] + * + * curried(2, 3)(1); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(3)(1, _)(2); + * // => [1, 2, 3] + */ + function curryRight(func, arity, guard) { + arity = guard ? undefined : arity; + var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); + result.placeholder = curryRight.placeholder; + return result; + } + + /** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide `options` to indicate whether `func` should be invoked on the + * leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent + * calls to the debounced function return the result of the last `func` + * invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the debounced function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=false] + * Specify invoking on the leading edge of the timeout. + * @param {number} [options.maxWait] + * The maximum time `func` is allowed to be delayed before it's invoked. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); + */ + function debounce(func, wait, options) { + var lastArgs, + lastThis, + maxWait, + result, + timerId, + lastCallTime, + lastInvokeTime = 0, + leading = false, + maxing = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + wait = toNumber(wait) || 0; + if (isObject(options)) { + leading = !!options.leading; + maxing = 'maxWait' in options; + maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function invokeFunc(time) { + var args = lastArgs, + thisArg = lastThis; + + lastArgs = lastThis = undefined; + lastInvokeTime = time; + result = func.apply(thisArg, args); + return result; + } + + function leadingEdge(time) { + // Reset any `maxWait` timer. + lastInvokeTime = time; + // Start the timer for the trailing edge. + timerId = setTimeout(timerExpired, wait); + // Invoke the leading edge. + return leading ? invokeFunc(time) : result; + } + + function remainingWait(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime, + timeWaiting = wait - timeSinceLastCall; + + return maxing + ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) + : timeWaiting; + } + + function shouldInvoke(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime; + + // Either this is the first call, activity has stopped and we're at the + // trailing edge, the system time has gone backwards and we're treating + // it as the trailing edge, or we've hit the `maxWait` limit. + return (lastCallTime === undefined || (timeSinceLastCall >= wait) || + (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); + } + + function timerExpired() { + var time = now(); + if (shouldInvoke(time)) { + return trailingEdge(time); + } + // Restart the timer. + timerId = setTimeout(timerExpired, remainingWait(time)); + } + + function trailingEdge(time) { + timerId = undefined; + + // Only invoke if we have `lastArgs` which means `func` has been + // debounced at least once. + if (trailing && lastArgs) { + return invokeFunc(time); + } + lastArgs = lastThis = undefined; + return result; + } + + function cancel() { + if (timerId !== undefined) { + clearTimeout(timerId); + } + lastInvokeTime = 0; + lastArgs = lastCallTime = lastThis = timerId = undefined; + } + + function flush() { + return timerId === undefined ? result : trailingEdge(now()); + } + + function debounced() { + var time = now(), + isInvoking = shouldInvoke(time); + + lastArgs = arguments; + lastThis = this; + lastCallTime = time; + + if (isInvoking) { + if (timerId === undefined) { + return leadingEdge(lastCallTime); + } + if (maxing) { + // Handle invocations in a tight loop. + timerId = setTimeout(timerExpired, wait); + return invokeFunc(lastCallTime); + } + } + if (timerId === undefined) { + timerId = setTimeout(timerExpired, wait); + } + return result; + } + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; + } + + /** + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { + * console.log(text); + * }, 'deferred'); + * // => Logs 'deferred' after one millisecond. + */ + var defer = baseRest(function(func, args) { + return baseDelay(func, 1, args); + }); + + /** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => Logs 'later' after one second. + */ + var delay = baseRest(function(func, wait, args) { + return baseDelay(func, toNumber(wait) || 0, args); + }); + + /** + * Creates a function that invokes `func` with arguments reversed. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to flip arguments for. + * @returns {Function} Returns the new flipped function. + * @example + * + * var flipped = _.flip(function() { + * return _.toArray(arguments); + * }); + * + * flipped('a', 'b', 'c', 'd'); + * // => ['d', 'c', 'b', 'a'] + */ + function flip(func) { + return createWrap(func, WRAP_FLIP_FLAG); + } + + /** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `clear`, `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ + function memoize(func, resolver) { + if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result) || cache; + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; + } + + // Expose `MapCache`. + memoize.Cache = MapCache; + + /** + * Creates a function that negates the result of the predicate `func`. The + * `func` predicate is invoked with the `this` binding and arguments of the + * created function. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} predicate The predicate to negate. + * @returns {Function} Returns the new negated function. + * @example + * + * function isEven(n) { + * return n % 2 == 0; + * } + * + * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); + * // => [1, 3, 5] + */ + function negate(predicate) { + if (typeof predicate != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function() { + var args = arguments; + switch (args.length) { + case 0: return !predicate.call(this); + case 1: return !predicate.call(this, args[0]); + case 2: return !predicate.call(this, args[0], args[1]); + case 3: return !predicate.call(this, args[0], args[1], args[2]); + } + return !predicate.apply(this, args); + }; + } + + /** + * Creates a function that is restricted to invoking `func` once. Repeat calls + * to the function return the value of the first invocation. The `func` is + * invoked with the `this` binding and arguments of the created function. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // => `createApplication` is invoked once + */ + function once(func) { + return before(2, func); + } + + /** + * Creates a function that invokes `func` with its arguments transformed. + * + * @static + * @since 4.0.0 + * @memberOf _ + * @category Function + * @param {Function} func The function to wrap. + * @param {...(Function|Function[])} [transforms=[_.identity]] + * The argument transforms. + * @returns {Function} Returns the new function. + * @example + * + * function doubled(n) { + * return n * 2; + * } + * + * function square(n) { + * return n * n; + * } + * + * var func = _.overArgs(function(x, y) { + * return [x, y]; + * }, [square, doubled]); + * + * func(9, 3); + * // => [81, 6] + * + * func(10, 5); + * // => [100, 10] + */ + var overArgs = castRest(function(func, transforms) { + transforms = (transforms.length == 1 && isArray(transforms[0])) + ? arrayMap(transforms[0], baseUnary(getIteratee())) + : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee())); + + var funcsLength = transforms.length; + return baseRest(function(args) { + var index = -1, + length = nativeMin(args.length, funcsLength); + + while (++index < length) { + args[index] = transforms[index].call(this, args[index]); + } + return apply(func, this, args); + }); + }); + + /** + * Creates a function that invokes `func` with `partials` prepended to the + * arguments it receives. This method is like `_.bind` except it does **not** + * alter the `this` binding. + * + * The `_.partial.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method doesn't set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @since 0.2.0 + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * function greet(greeting, name) { + * return greeting + ' ' + name; + * } + * + * var sayHelloTo = _.partial(greet, 'hello'); + * sayHelloTo('fred'); + * // => 'hello fred' + * + * // Partially applied with placeholders. + * var greetFred = _.partial(greet, _, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + */ + var partial = baseRest(function(func, partials) { + var holders = replaceHolders(partials, getHolder(partial)); + return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders); + }); + + /** + * This method is like `_.partial` except that partially applied arguments + * are appended to the arguments it receives. + * + * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method doesn't set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * function greet(greeting, name) { + * return greeting + ' ' + name; + * } + * + * var greetFred = _.partialRight(greet, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + * + * // Partially applied with placeholders. + * var sayHelloTo = _.partialRight(greet, 'hello', _); + * sayHelloTo('fred'); + * // => 'hello fred' + */ + var partialRight = baseRest(function(func, partials) { + var holders = replaceHolders(partials, getHolder(partialRight)); + return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders); + }); + + /** + * Creates a function that invokes `func` with arguments arranged according + * to the specified `indexes` where the argument value at the first index is + * provided as the first argument, the argument value at the second index is + * provided as the second argument, and so on. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to rearrange arguments for. + * @param {...(number|number[])} indexes The arranged argument indexes. + * @returns {Function} Returns the new function. + * @example + * + * var rearged = _.rearg(function(a, b, c) { + * return [a, b, c]; + * }, [2, 0, 1]); + * + * rearged('b', 'c', 'a') + * // => ['a', 'b', 'c'] + */ + var rearg = flatRest(function(func, indexes) { + return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes); + }); + + /** + * Creates a function that invokes `func` with the `this` binding of the + * created function and arguments from `start` and beyond provided as + * an array. + * + * **Note:** This method is based on the + * [rest parameter](https://mdn.io/rest_parameters). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.rest(function(what, names) { + * return what + ' ' + _.initial(names).join(', ') + + * (_.size(names) > 1 ? ', & ' : '') + _.last(names); + * }); + * + * say('hello', 'fred', 'barney', 'pebbles'); + * // => 'hello fred, barney, & pebbles' + */ + function rest(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = start === undefined ? start : toInteger(start); + return baseRest(func, start); + } + + /** + * Creates a function that invokes `func` with the `this` binding of the + * create function and an array of arguments much like + * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply). + * + * **Note:** This method is based on the + * [spread operator](https://mdn.io/spread_operator). + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Function + * @param {Function} func The function to spread arguments over. + * @param {number} [start=0] The start position of the spread. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.spread(function(who, what) { + * return who + ' says ' + what; + * }); + * + * say(['fred', 'hello']); + * // => 'fred says hello' + * + * var numbers = Promise.all([ + * Promise.resolve(40), + * Promise.resolve(36) + * ]); + * + * numbers.then(_.spread(function(x, y) { + * return x + y; + * })); + * // => a Promise of 76 + */ + function spread(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = start == null ? 0 : nativeMax(toInteger(start), 0); + return baseRest(function(args) { + var array = args[start], + otherArgs = castSlice(args, 0, start); + + if (array) { + arrayPush(otherArgs, array); + } + return apply(func, this, otherArgs); + }); + } + + /** + * Creates a throttled function that only invokes `func` at most once per + * every `wait` milliseconds. The throttled function comes with a `cancel` + * method to cancel delayed `func` invocations and a `flush` method to + * immediately invoke them. Provide `options` to indicate whether `func` + * should be invoked on the leading and/or trailing edge of the `wait` + * timeout. The `func` is invoked with the last arguments provided to the + * throttled function. Subsequent calls to the throttled function return the + * result of the last `func` invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the throttled function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.throttle` and `_.debounce`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to throttle. + * @param {number} [wait=0] The number of milliseconds to throttle invocations to. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=true] + * Specify invoking on the leading edge of the timeout. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new throttled function. + * @example + * + * // Avoid excessively updating the position while scrolling. + * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); + * + * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. + * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); + * jQuery(element).on('click', throttled); + * + * // Cancel the trailing throttled invocation. + * jQuery(window).on('popstate', throttled.cancel); + */ + function throttle(func, wait, options) { + var leading = true, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (isObject(options)) { + leading = 'leading' in options ? !!options.leading : leading; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + return debounce(func, wait, { + 'leading': leading, + 'maxWait': wait, + 'trailing': trailing + }); + } + + /** + * Creates a function that accepts up to one argument, ignoring any + * additional arguments. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + * @example + * + * _.map(['6', '8', '10'], _.unary(parseInt)); + * // => [6, 8, 10] + */ + function unary(func) { + return ary(func, 1); + } + + /** + * Creates a function that provides `value` to `wrapper` as its first + * argument. Any additional arguments provided to the function are appended + * to those provided to the `wrapper`. The wrapper is invoked with the `this` + * binding of the created function. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {*} value The value to wrap. + * @param {Function} [wrapper=identity] The wrapper function. + * @returns {Function} Returns the new function. + * @example + * + * var p = _.wrap(_.escape, function(func, text) { + * return '

' + func(text) + '

'; + * }); + * + * p('fred, barney, & pebbles'); + * // => '

fred, barney, & pebbles

' + */ + function wrap(value, wrapper) { + return partial(castFunction(wrapper), value); + } + + /*------------------------------------------------------------------------*/ + + /** + * Casts `value` as an array if it's not one. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Lang + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast array. + * @example + * + * _.castArray(1); + * // => [1] + * + * _.castArray({ 'a': 1 }); + * // => [{ 'a': 1 }] + * + * _.castArray('abc'); + * // => ['abc'] + * + * _.castArray(null); + * // => [null] + * + * _.castArray(undefined); + * // => [undefined] + * + * _.castArray(); + * // => [] + * + * var array = [1, 2, 3]; + * console.log(_.castArray(array) === array); + * // => true + */ + function castArray() { + if (!arguments.length) { + return []; + } + var value = arguments[0]; + return isArray(value) ? value : [value]; + } + + /** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ + function clone(value) { + return baseClone(value, CLONE_SYMBOLS_FLAG); + } + + /** + * This method is like `_.clone` except that it accepts `customizer` which + * is invoked to produce the cloned value. If `customizer` returns `undefined`, + * cloning is handled by the method instead. The `customizer` is invoked with + * up to four arguments; (value [, index|key, object, stack]). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the cloned value. + * @see _.cloneDeepWith + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(false); + * } + * } + * + * var el = _.cloneWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 0 + */ + function cloneWith(value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseClone(value, CLONE_SYMBOLS_FLAG, customizer); + } + + /** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ + function cloneDeep(value) { + return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); + } + + /** + * This method is like `_.cloneWith` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the deep cloned value. + * @see _.cloneWith + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(true); + * } + * } + * + * var el = _.cloneDeepWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 20 + */ + function cloneDeepWith(value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer); + } + + /** + * Checks if `object` conforms to `source` by invoking the predicate + * properties of `source` with the corresponding property values of `object`. + * + * **Note:** This method is equivalent to `_.conforms` when `source` is + * partially applied. + * + * @static + * @memberOf _ + * @since 4.14.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property predicates to conform to. + * @returns {boolean} Returns `true` if `object` conforms, else `false`. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * + * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); + * // => true + * + * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); + * // => false + */ + function conformsTo(object, source) { + return source == null || baseConformsTo(object, source, keys(source)); + } + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + /** + * Checks if `value` is greater than `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + * @see _.lt + * @example + * + * _.gt(3, 1); + * // => true + * + * _.gt(3, 3); + * // => false + * + * _.gt(1, 3); + * // => false + */ + var gt = createRelationalOperation(baseGt); + + /** + * Checks if `value` is greater than or equal to `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than or equal to + * `other`, else `false`. + * @see _.lte + * @example + * + * _.gte(3, 1); + * // => true + * + * _.gte(3, 3); + * // => true + * + * _.gte(1, 3); + * // => false + */ + var gte = createRelationalOperation(function(value, other) { + return value >= other; + }); + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); + }; + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + /** + * Checks if `value` is classified as an `ArrayBuffer` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. + * @example + * + * _.isArrayBuffer(new ArrayBuffer(2)); + * // => true + * + * _.isArrayBuffer(new Array(2)); + * // => false + */ + var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); + } + + /** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ + function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); + } + + /** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ + function isBoolean(value) { + return value === true || value === false || + (isObjectLike(value) && baseGetTag(value) == boolTag); + } + + /** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ + var isBuffer = nativeIsBuffer || stubFalse; + + /** + * Checks if `value` is classified as a `Date` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + * + * _.isDate('Mon April 23 2012'); + * // => false + */ + var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; + + /** + * Checks if `value` is likely a DOM element. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. + * @example + * + * _.isElement(document.body); + * // => true + * + * _.isElement(''); + * // => false + */ + function isElement(value) { + return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); + } + + /** + * Checks if `value` is an empty object, collection, map, or set. + * + * Objects are considered empty if they have no own enumerable string keyed + * properties. + * + * Array-like values such as `arguments` objects, arrays, buffers, strings, or + * jQuery-like collections are considered empty if they have a `length` of `0`. + * Similarly, maps and sets are considered empty if they have a `size` of `0`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ + function isEmpty(value) { + if (value == null) { + return true; + } + if (isArrayLike(value) && + (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || + isBuffer(value) || isTypedArray(value) || isArguments(value))) { + return !value.length; + } + var tag = getTag(value); + if (tag == mapTag || tag == setTag) { + return !value.size; + } + if (isPrototype(value)) { + return !baseKeys(value).length; + } + for (var key in value) { + if (hasOwnProperty.call(value, key)) { + return false; + } + } + return true; + } + + /** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are compared by strict equality, i.e. `===`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ + function isEqual(value, other) { + return baseIsEqual(value, other); + } + + /** + * This method is like `_.isEqual` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined`, comparisons + * are handled by the method instead. The `customizer` is invoked with up to + * six arguments: (objValue, othValue [, index|key, object, other, stack]). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, othValue) { + * if (isGreeting(objValue) && isGreeting(othValue)) { + * return true; + * } + * } + * + * var array = ['hello', 'goodbye']; + * var other = ['hi', 'goodbye']; + * + * _.isEqualWith(array, other, customizer); + * // => true + */ + function isEqualWith(value, other, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + var result = customizer ? customizer(value, other) : undefined; + return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result; + } + + /** + * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, + * `SyntaxError`, `TypeError`, or `URIError` object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an error object, else `false`. + * @example + * + * _.isError(new Error); + * // => true + * + * _.isError(Error); + * // => false + */ + function isError(value) { + if (!isObjectLike(value)) { + return false; + } + var tag = baseGetTag(value); + return tag == errorTag || tag == domExcTag || + (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value)); + } + + /** + * Checks if `value` is a finite primitive number. + * + * **Note:** This method is based on + * [`Number.isFinite`](https://mdn.io/Number/isFinite). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. + * @example + * + * _.isFinite(3); + * // => true + * + * _.isFinite(Number.MIN_VALUE); + * // => true + * + * _.isFinite(Infinity); + * // => false + * + * _.isFinite('3'); + * // => false + */ + function isFinite(value) { + return typeof value == 'number' && nativeIsFinite(value); + } + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; + } + + /** + * Checks if `value` is an integer. + * + * **Note:** This method is based on + * [`Number.isInteger`](https://mdn.io/Number/isInteger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an integer, else `false`. + * @example + * + * _.isInteger(3); + * // => true + * + * _.isInteger(Number.MIN_VALUE); + * // => false + * + * _.isInteger(Infinity); + * // => false + * + * _.isInteger('3'); + * // => false + */ + function isInteger(value) { + return typeof value == 'number' && value == toInteger(value); + } + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); + } + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + /** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ + var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; + + /** + * Performs a partial deep comparison between `object` and `source` to + * determine if `object` contains equivalent property values. + * + * **Note:** This method is equivalent to `_.matches` when `source` is + * partially applied. + * + * Partial comparisons will match empty array and empty object `source` + * values against any array or object value, respectively. See `_.isEqual` + * for a list of supported value comparisons. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * + * _.isMatch(object, { 'b': 2 }); + * // => true + * + * _.isMatch(object, { 'b': 1 }); + * // => false + */ + function isMatch(object, source) { + return object === source || baseIsMatch(object, source, getMatchData(source)); + } + + /** + * This method is like `_.isMatch` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined`, comparisons + * are handled by the method instead. The `customizer` is invoked with five + * arguments: (objValue, srcValue, index|key, object, source). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, srcValue) { + * if (isGreeting(objValue) && isGreeting(srcValue)) { + * return true; + * } + * } + * + * var object = { 'greeting': 'hello' }; + * var source = { 'greeting': 'hi' }; + * + * _.isMatchWith(object, source, customizer); + * // => true + */ + function isMatchWith(object, source, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseIsMatch(object, source, getMatchData(source), customizer); + } + + /** + * Checks if `value` is `NaN`. + * + * **Note:** This method is based on + * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as + * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for + * `undefined` and other non-number values. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */ + function isNaN(value) { + // An `NaN` primitive is the only value that is not equal to itself. + // Perform the `toStringTag` check first to avoid errors with some + // ActiveX objects in IE. + return isNumber(value) && value != +value; + } + + /** + * Checks if `value` is a pristine native function. + * + * **Note:** This method can't reliably detect native functions in the presence + * of the core-js package because core-js circumvents this kind of detection. + * Despite multiple requests, the core-js maintainer has made it clear: any + * attempt to fix the detection will be obstructed. As a result, we're left + * with little choice but to throw an error. Unfortunately, this also affects + * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), + * which rely on core-js. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + * @example + * + * _.isNative(Array.prototype.push); + * // => true + * + * _.isNative(_); + * // => false + */ + function isNative(value) { + if (isMaskable(value)) { + throw new Error(CORE_ERROR_TEXT); + } + return baseIsNative(value); + } + + /** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(void 0); + * // => false + */ + function isNull(value) { + return value === null; + } + + /** + * Checks if `value` is `null` or `undefined`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is nullish, else `false`. + * @example + * + * _.isNil(null); + * // => true + * + * _.isNil(void 0); + * // => true + * + * _.isNil(NaN); + * // => false + */ + function isNil(value) { + return value == null; + } + + /** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are + * classified as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a number, else `false`. + * @example + * + * _.isNumber(3); + * // => true + * + * _.isNumber(Number.MIN_VALUE); + * // => true + * + * _.isNumber(Infinity); + * // => true + * + * _.isNumber('3'); + * // => false + */ + function isNumber(value) { + return typeof value == 'number' || + (isObjectLike(value) && baseGetTag(value) == numberTag); + } + + /** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ + function isPlainObject(value) { + if (!isObjectLike(value) || baseGetTag(value) != objectTag) { + return false; + } + var proto = getPrototype(value); + if (proto === null) { + return true; + } + var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; + return typeof Ctor == 'function' && Ctor instanceof Ctor && + funcToString.call(Ctor) == objectCtorString; + } + + /** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ + var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; + + /** + * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 + * double precision number which isn't the result of a rounded unsafe integer. + * + * **Note:** This method is based on + * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. + * @example + * + * _.isSafeInteger(3); + * // => true + * + * _.isSafeInteger(Number.MIN_VALUE); + * // => false + * + * _.isSafeInteger(Infinity); + * // => false + * + * _.isSafeInteger('3'); + * // => false + */ + function isSafeInteger(value) { + return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ + var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; + + /** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ + function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); + } + + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); + } + + /** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ + var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + + /** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ + function isUndefined(value) { + return value === undefined; + } + + /** + * Checks if `value` is classified as a `WeakMap` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. + * @example + * + * _.isWeakMap(new WeakMap); + * // => true + * + * _.isWeakMap(new Map); + * // => false + */ + function isWeakMap(value) { + return isObjectLike(value) && getTag(value) == weakMapTag; + } + + /** + * Checks if `value` is classified as a `WeakSet` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. + * @example + * + * _.isWeakSet(new WeakSet); + * // => true + * + * _.isWeakSet(new Set); + * // => false + */ + function isWeakSet(value) { + return isObjectLike(value) && baseGetTag(value) == weakSetTag; + } + + /** + * Checks if `value` is less than `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + * @see _.gt + * @example + * + * _.lt(1, 3); + * // => true + * + * _.lt(3, 3); + * // => false + * + * _.lt(3, 1); + * // => false + */ + var lt = createRelationalOperation(baseLt); + + /** + * Checks if `value` is less than or equal to `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than or equal to + * `other`, else `false`. + * @see _.gte + * @example + * + * _.lte(1, 3); + * // => true + * + * _.lte(3, 3); + * // => true + * + * _.lte(3, 1); + * // => false + */ + var lte = createRelationalOperation(function(value, other) { + return value <= other; + }); + + /** + * Converts `value` to an array. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Array} Returns the converted array. + * @example + * + * _.toArray({ 'a': 1, 'b': 2 }); + * // => [1, 2] + * + * _.toArray('abc'); + * // => ['a', 'b', 'c'] + * + * _.toArray(1); + * // => [] + * + * _.toArray(null); + * // => [] + */ + function toArray(value) { + if (!value) { + return []; + } + if (isArrayLike(value)) { + return isString(value) ? stringToArray(value) : copyArray(value); + } + if (symIterator && value[symIterator]) { + return iteratorToArray(value[symIterator]()); + } + var tag = getTag(value), + func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); + + return func(value); + } + + /** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ + function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; + } + + /** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ + function toInteger(value) { + var result = toFinite(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; + } + + /** + * Converts `value` to an integer suitable for use as the length of an + * array-like object. + * + * **Note:** This method is based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toLength(3.2); + * // => 3 + * + * _.toLength(Number.MIN_VALUE); + * // => 0 + * + * _.toLength(Infinity); + * // => 4294967295 + * + * _.toLength('3.2'); + * // => 3 + */ + function toLength(value) { + return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; + } + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ + function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = value.replace(reTrim, ''); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); + } + + /** + * Converts `value` to a plain object flattening inherited enumerable string + * keyed properties of `value` to own properties of the plain object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {Object} Returns the converted plain object. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.assign({ 'a': 1 }, new Foo); + * // => { 'a': 1, 'b': 2 } + * + * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); + * // => { 'a': 1, 'b': 2, 'c': 3 } + */ + function toPlainObject(value) { + return copyObject(value, keysIn(value)); + } + + /** + * Converts `value` to a safe integer. A safe integer can be compared and + * represented correctly. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toSafeInteger(3.2); + * // => 3 + * + * _.toSafeInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toSafeInteger(Infinity); + * // => 9007199254740991 + * + * _.toSafeInteger('3.2'); + * // => 3 + */ + function toSafeInteger(value) { + return value + ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) + : (value === 0 ? value : 0); + } + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + return value == null ? '' : baseToString(value); + } + + /*------------------------------------------------------------------------*/ + + /** + * Assigns own enumerable string keyed properties of source objects to the + * destination object. Source objects are applied from left to right. + * Subsequent sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object` and is loosely based on + * [`Object.assign`](https://mdn.io/Object/assign). + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assignIn + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assign({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'c': 3 } + */ + var assign = createAssigner(function(object, source) { + if (isPrototype(source) || isArrayLike(source)) { + copyObject(source, keys(source), object); + return; + } + for (var key in source) { + if (hasOwnProperty.call(source, key)) { + assignValue(object, key, source[key]); + } + } + }); + + /** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assign + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assignIn({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } + */ + var assignIn = createAssigner(function(object, source) { + copyObject(source, keysIn(source), object); + }); + + /** + * This method is like `_.assignIn` except that it accepts `customizer` + * which is invoked to produce the assigned values. If `customizer` returns + * `undefined`, assignment is handled by the method instead. The `customizer` + * is invoked with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extendWith + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @see _.assignWith + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignInWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObject(source, keysIn(source), object, customizer); + }); + + /** + * This method is like `_.assign` except that it accepts `customizer` + * which is invoked to produce the assigned values. If `customizer` returns + * `undefined`, assignment is handled by the method instead. The `customizer` + * is invoked with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @see _.assignInWith + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var assignWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObject(source, keys(source), object, customizer); + }); + + /** + * Creates an array of values corresponding to `paths` of `object`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Array} Returns the picked values. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _.at(object, ['a[0].b.c', 'a[1]']); + * // => [3, 4] + */ + var at = flatRest(baseAt); + + /** + * Creates an object that inherits from the `prototype` object. If a + * `properties` object is given, its own enumerable string keyed properties + * are assigned to the created object. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ + function create(prototype, properties) { + var result = baseCreate(prototype); + return properties == null ? result : baseAssign(result, properties); + } + + /** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var defaults = baseRest(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = keysIn(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; + }); + + /** + * This method is like `_.defaults` except that it recursively assigns + * default properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaults + * @example + * + * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); + * // => { 'a': { 'b': 2, 'c': 3 } } + */ + var defaultsDeep = baseRest(function(args) { + args.push(undefined, customDefaultsMerge); + return apply(mergeWith, undefined, args); + }); + + /** + * This method is like `_.find` except that it returns the key of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Object + * @param {Object} object The object to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, + * else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findKey(users, function(o) { return o.age < 40; }); + * // => 'barney' (iteration order is not guaranteed) + * + * // The `_.matches` iteratee shorthand. + * _.findKey(users, { 'age': 1, 'active': true }); + * // => 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findKey(users, 'active'); + * // => 'barney' + */ + function findKey(object, predicate) { + return baseFindKey(object, getIteratee(predicate, 3), baseForOwn); + } + + /** + * This method is like `_.findKey` except that it iterates over elements of + * a collection in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, + * else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findLastKey(users, function(o) { return o.age < 40; }); + * // => returns 'pebbles' assuming `_.findKey` returns 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.findLastKey(users, { 'age': 36, 'active': true }); + * // => 'barney' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findLastKey(users, 'active'); + * // => 'pebbles' + */ + function findLastKey(object, predicate) { + return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight); + } + + /** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ + function forIn(object, iteratee) { + return object == null + ? object + : baseFor(object, getIteratee(iteratee, 3), keysIn); + } + + /** + * This method is like `_.forIn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forIn + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forInRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. + */ + function forInRight(object, iteratee) { + return object == null + ? object + : baseForRight(object, getIteratee(iteratee, 3), keysIn); + } + + /** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ + function forOwn(object, iteratee) { + return object && baseForOwn(object, getIteratee(iteratee, 3)); + } + + /** + * This method is like `_.forOwn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwn + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwnRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. + */ + function forOwnRight(object, iteratee) { + return object && baseForOwnRight(object, getIteratee(iteratee, 3)); + } + + /** + * Creates an array of function property names from own enumerable properties + * of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the function names. + * @see _.functionsIn + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functions(new Foo); + * // => ['a', 'b'] + */ + function functions(object) { + return object == null ? [] : baseFunctions(object, keys(object)); + } + + /** + * Creates an array of function property names from own and inherited + * enumerable properties of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the function names. + * @see _.functions + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functionsIn(new Foo); + * // => ['a', 'b', 'c'] + */ + function functionsIn(object) { + return object == null ? [] : baseFunctions(object, keysIn(object)); + } + + /** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ + function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; + } + + /** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ + function has(object, path) { + return object != null && hasPath(object, path, baseHas); + } + + /** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ + function hasIn(object, path) { + return object != null && hasPath(object, path, baseHasIn); + } + + /** + * Creates an object composed of the inverted keys and values of `object`. + * If `object` contains duplicate values, subsequent values overwrite + * property assignments of previous values. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Object + * @param {Object} object The object to invert. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invert(object); + * // => { '1': 'c', '2': 'b' } + */ + var invert = createInverter(function(result, value, key) { + if (value != null && + typeof value.toString != 'function') { + value = nativeObjectToString.call(value); + } + + result[value] = key; + }, constant(identity)); + + /** + * This method is like `_.invert` except that the inverted object is generated + * from the results of running each element of `object` thru `iteratee`. The + * corresponding inverted value of each inverted key is an array of keys + * responsible for generating the inverted value. The iteratee is invoked + * with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.1.0 + * @category Object + * @param {Object} object The object to invert. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invertBy(object); + * // => { '1': ['a', 'c'], '2': ['b'] } + * + * _.invertBy(object, function(value) { + * return 'group' + value; + * }); + * // => { 'group1': ['a', 'c'], 'group2': ['b'] } + */ + var invertBy = createInverter(function(result, value, key) { + if (value != null && + typeof value.toString != 'function') { + value = nativeObjectToString.call(value); + } + + if (hasOwnProperty.call(result, value)) { + result[value].push(key); + } else { + result[value] = [key]; + } + }, getIteratee); + + /** + * Invokes the method at `path` of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {...*} [args] The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + * @example + * + * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; + * + * _.invoke(object, 'a[0].b.c.slice', 1, 3); + * // => [2, 3] + */ + var invoke = baseRest(baseInvoke); + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); + } + + /** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ + function keysIn(object) { + return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); + } + + /** + * The opposite of `_.mapValues`; this method creates an object with the + * same values as `object` and keys generated by running each own enumerable + * string keyed property of `object` thru `iteratee`. The iteratee is invoked + * with three arguments: (value, key, object). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapValues + * @example + * + * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { + * return key + value; + * }); + * // => { 'a1': 1, 'b2': 2 } + */ + function mapKeys(object, iteratee) { + var result = {}; + iteratee = getIteratee(iteratee, 3); + + baseForOwn(object, function(value, key, object) { + baseAssignValue(result, iteratee(value, key, object), value); + }); + return result; + } + + /** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ + function mapValues(object, iteratee) { + var result = {}; + iteratee = getIteratee(iteratee, 3); + + baseForOwn(object, function(value, key, object) { + baseAssignValue(result, key, iteratee(value, key, object)); + }); + return result; + } + + /** + * This method is like `_.assign` except that it recursively merges own and + * inherited enumerable string keyed properties of source objects into the + * destination object. Source properties that resolve to `undefined` are + * skipped if a destination value exists. Array and plain object properties + * are merged recursively. Other objects and value types are overridden by + * assignment. Source objects are applied from left to right. Subsequent + * sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * var object = { + * 'a': [{ 'b': 2 }, { 'd': 4 }] + * }; + * + * var other = { + * 'a': [{ 'c': 3 }, { 'e': 5 }] + * }; + * + * _.merge(object, other); + * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } + */ + var merge = createAssigner(function(object, source, srcIndex) { + baseMerge(object, source, srcIndex); + }); + + /** + * This method is like `_.merge` except that it accepts `customizer` which + * is invoked to produce the merged values of the destination and source + * properties. If `customizer` returns `undefined`, merging is handled by the + * method instead. The `customizer` is invoked with six arguments: + * (objValue, srcValue, key, object, source, stack). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} customizer The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * function customizer(objValue, srcValue) { + * if (_.isArray(objValue)) { + * return objValue.concat(srcValue); + * } + * } + * + * var object = { 'a': [1], 'b': [2] }; + * var other = { 'a': [3], 'b': [4] }; + * + * _.mergeWith(object, other, customizer); + * // => { 'a': [1, 3], 'b': [2, 4] } + */ + var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { + baseMerge(object, source, srcIndex, customizer); + }); + + /** + * The opposite of `_.pick`; this method creates an object composed of the + * own and inherited enumerable property paths of `object` that are not omitted. + * + * **Note:** This method is considerably slower than `_.pick`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to omit. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omit(object, ['a', 'c']); + * // => { 'b': '2' } + */ + var omit = flatRest(function(object, paths) { + var result = {}; + if (object == null) { + return result; + } + var isDeep = false; + paths = arrayMap(paths, function(path) { + path = castPath(path, object); + isDeep || (isDeep = path.length > 1); + return path; + }); + copyObject(object, getAllKeysIn(object), result); + if (isDeep) { + result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone); + } + var length = paths.length; + while (length--) { + baseUnset(result, paths[length]); + } + return result; + }); + + /** + * The opposite of `_.pickBy`; this method creates an object composed of + * the own and inherited enumerable string keyed properties of `object` that + * `predicate` doesn't return truthy for. The predicate is invoked with two + * arguments: (value, key). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The source object. + * @param {Function} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omitBy(object, _.isNumber); + * // => { 'b': '2' } + */ + function omitBy(object, predicate) { + return pickBy(object, negate(getIteratee(predicate))); + } + + /** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ + var pick = flatRest(function(object, paths) { + return object == null ? {} : basePick(object, paths); + }); + + /** + * Creates an object composed of the `object` properties `predicate` returns + * truthy for. The predicate is invoked with two arguments: (value, key). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The source object. + * @param {Function} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pickBy(object, _.isNumber); + * // => { 'a': 1, 'c': 3 } + */ + function pickBy(object, predicate) { + if (object == null) { + return {}; + } + var props = arrayMap(getAllKeysIn(object), function(prop) { + return [prop]; + }); + predicate = getIteratee(predicate); + return basePickBy(object, props, function(value, path) { + return predicate(value, path[0]); + }); + } + + /** + * This method is like `_.get` except that if the resolved value is a + * function it's invoked with the `this` binding of its parent object and + * its result is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to resolve. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; + * + * _.result(object, 'a[0].b.c1'); + * // => 3 + * + * _.result(object, 'a[0].b.c2'); + * // => 4 + * + * _.result(object, 'a[0].b.c3', 'default'); + * // => 'default' + * + * _.result(object, 'a[0].b.c3', _.constant('default')); + * // => 'default' + */ + function result(object, path, defaultValue) { + path = castPath(path, object); + + var index = -1, + length = path.length; + + // Ensure the loop is entered when path is empty. + if (!length) { + length = 1; + object = undefined; + } + while (++index < length) { + var value = object == null ? undefined : object[toKey(path[index])]; + if (value === undefined) { + index = length; + value = defaultValue; + } + object = isFunction(value) ? value.call(object) : value; + } + return object; + } + + /** + * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, + * it's created. Arrays are created for missing index properties while objects + * are created for all other missing properties. Use `_.setWith` to customize + * `path` creation. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.set(object, 'a[0].b.c', 4); + * console.log(object.a[0].b.c); + * // => 4 + * + * _.set(object, ['x', '0', 'y', 'z'], 5); + * console.log(object.x[0].y.z); + * // => 5 + */ + function set(object, path, value) { + return object == null ? object : baseSet(object, path, value); + } + + /** + * This method is like `_.set` except that it accepts `customizer` which is + * invoked to produce the objects of `path`. If `customizer` returns `undefined` + * path creation is handled by the method instead. The `customizer` is invoked + * with three arguments: (nsValue, key, nsObject). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * var object = {}; + * + * _.setWith(object, '[0][1]', 'a', Object); + * // => { '0': { '1': 'a' } } + */ + function setWith(object, path, value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return object == null ? object : baseSet(object, path, value, customizer); + } + + /** + * Creates an array of own enumerable string keyed-value pairs for `object` + * which can be consumed by `_.fromPairs`. If `object` is a map or set, its + * entries are returned. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias entries + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the key-value pairs. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.toPairs(new Foo); + * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) + */ + var toPairs = createToPairs(keys); + + /** + * Creates an array of own and inherited enumerable string keyed-value pairs + * for `object` which can be consumed by `_.fromPairs`. If `object` is a map + * or set, its entries are returned. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias entriesIn + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the key-value pairs. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.toPairsIn(new Foo); + * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) + */ + var toPairsIn = createToPairs(keysIn); + + /** + * An alternative to `_.reduce`; this method transforms `object` to a new + * `accumulator` object which is the result of running each of its own + * enumerable string keyed properties thru `iteratee`, with each invocation + * potentially mutating the `accumulator` object. If `accumulator` is not + * provided, a new object with the same `[[Prototype]]` will be used. The + * iteratee is invoked with four arguments: (accumulator, value, key, object). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The custom accumulator value. + * @returns {*} Returns the accumulated value. + * @example + * + * _.transform([2, 3, 4], function(result, n) { + * result.push(n *= n); + * return n % 2 == 0; + * }, []); + * // => [4, 9] + * + * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } + */ + function transform(object, iteratee, accumulator) { + var isArr = isArray(object), + isArrLike = isArr || isBuffer(object) || isTypedArray(object); + + iteratee = getIteratee(iteratee, 4); + if (accumulator == null) { + var Ctor = object && object.constructor; + if (isArrLike) { + accumulator = isArr ? new Ctor : []; + } + else if (isObject(object)) { + accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; + } + else { + accumulator = {}; + } + } + (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) { + return iteratee(accumulator, value, index, object); + }); + return accumulator; + } + + /** + * Removes the property at `path` of `object`. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 7 } }] }; + * _.unset(object, 'a[0].b.c'); + * // => true + * + * console.log(object); + * // => { 'a': [{ 'b': {} }] }; + * + * _.unset(object, ['a', '0', 'b', 'c']); + * // => true + * + * console.log(object); + * // => { 'a': [{ 'b': {} }] }; + */ + function unset(object, path) { + return object == null ? true : baseUnset(object, path); + } + + /** + * This method is like `_.set` except that accepts `updater` to produce the + * value to set. Use `_.updateWith` to customize `path` creation. The `updater` + * is invoked with one argument: (value). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {Function} updater The function to produce the updated value. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.update(object, 'a[0].b.c', function(n) { return n * n; }); + * console.log(object.a[0].b.c); + * // => 9 + * + * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; }); + * console.log(object.x[0].y.z); + * // => 0 + */ + function update(object, path, updater) { + return object == null ? object : baseUpdate(object, path, castFunction(updater)); + } + + /** + * This method is like `_.update` except that it accepts `customizer` which is + * invoked to produce the objects of `path`. If `customizer` returns `undefined` + * path creation is handled by the method instead. The `customizer` is invoked + * with three arguments: (nsValue, key, nsObject). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {Function} updater The function to produce the updated value. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * var object = {}; + * + * _.updateWith(object, '[0][1]', _.constant('a'), Object); + * // => { '0': { '1': 'a' } } + */ + function updateWith(object, path, updater, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer); + } + + /** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ + function values(object) { + return object == null ? [] : baseValues(object, keys(object)); + } + + /** + * Creates an array of the own and inherited enumerable string keyed property + * values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.valuesIn(new Foo); + * // => [1, 2, 3] (iteration order is not guaranteed) + */ + function valuesIn(object) { + return object == null ? [] : baseValues(object, keysIn(object)); + } + + /*------------------------------------------------------------------------*/ + + /** + * Clamps `number` within the inclusive `lower` and `upper` bounds. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Number + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + * @example + * + * _.clamp(-10, -5, 5); + * // => -5 + * + * _.clamp(10, -5, 5); + * // => 5 + */ + function clamp(number, lower, upper) { + if (upper === undefined) { + upper = lower; + lower = undefined; + } + if (upper !== undefined) { + upper = toNumber(upper); + upper = upper === upper ? upper : 0; + } + if (lower !== undefined) { + lower = toNumber(lower); + lower = lower === lower ? lower : 0; + } + return baseClamp(toNumber(number), lower, upper); + } + + /** + * Checks if `n` is between `start` and up to, but not including, `end`. If + * `end` is not specified, it's set to `start` with `start` then set to `0`. + * If `start` is greater than `end` the params are swapped to support + * negative ranges. + * + * @static + * @memberOf _ + * @since 3.3.0 + * @category Number + * @param {number} number The number to check. + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + * @see _.range, _.rangeRight + * @example + * + * _.inRange(3, 2, 4); + * // => true + * + * _.inRange(4, 8); + * // => true + * + * _.inRange(4, 2); + * // => false + * + * _.inRange(2, 2); + * // => false + * + * _.inRange(1.2, 2); + * // => true + * + * _.inRange(5.2, 4); + * // => false + * + * _.inRange(-3, -2, -6); + * // => true + */ + function inRange(number, start, end) { + start = toFinite(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = toFinite(end); + } + number = toNumber(number); + return baseInRange(number, start, end); + } + + /** + * Produces a random number between the inclusive `lower` and `upper` bounds. + * If only one argument is provided a number between `0` and the given number + * is returned. If `floating` is `true`, or either `lower` or `upper` are + * floats, a floating-point number is returned instead of an integer. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Number + * @param {number} [lower=0] The lower bound. + * @param {number} [upper=1] The upper bound. + * @param {boolean} [floating] Specify returning a floating-point number. + * @returns {number} Returns the random number. + * @example + * + * _.random(0, 5); + * // => an integer between 0 and 5 + * + * _.random(5); + * // => also an integer between 0 and 5 + * + * _.random(5, true); + * // => a floating-point number between 0 and 5 + * + * _.random(1.2, 5.2); + * // => a floating-point number between 1.2 and 5.2 + */ + function random(lower, upper, floating) { + if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { + upper = floating = undefined; + } + if (floating === undefined) { + if (typeof upper == 'boolean') { + floating = upper; + upper = undefined; + } + else if (typeof lower == 'boolean') { + floating = lower; + lower = undefined; + } + } + if (lower === undefined && upper === undefined) { + lower = 0; + upper = 1; + } + else { + lower = toFinite(lower); + if (upper === undefined) { + upper = lower; + lower = 0; + } else { + upper = toFinite(upper); + } + } + if (lower > upper) { + var temp = lower; + lower = upper; + upper = temp; + } + if (floating || lower % 1 || upper % 1) { + var rand = nativeRandom(); + return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); + } + return baseRandom(lower, upper); + } + + /*------------------------------------------------------------------------*/ + + /** + * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the camel cased string. + * @example + * + * _.camelCase('Foo Bar'); + * // => 'fooBar' + * + * _.camelCase('--foo-bar--'); + * // => 'fooBar' + * + * _.camelCase('__FOO_BAR__'); + * // => 'fooBar' + */ + var camelCase = createCompounder(function(result, word, index) { + word = word.toLowerCase(); + return result + (index ? capitalize(word) : word); + }); + + /** + * Converts the first character of `string` to upper case and the remaining + * to lower case. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to capitalize. + * @returns {string} Returns the capitalized string. + * @example + * + * _.capitalize('FRED'); + * // => 'Fred' + */ + function capitalize(string) { + return upperFirst(toString(string).toLowerCase()); + } + + /** + * Deburrs `string` by converting + * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) + * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) + * letters to basic Latin letters and removing + * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to deburr. + * @returns {string} Returns the deburred string. + * @example + * + * _.deburr('déjà vu'); + * // => 'deja vu' + */ + function deburr(string) { + string = toString(string); + return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); + } + + /** + * Checks if `string` ends with the given target string. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to inspect. + * @param {string} [target] The string to search for. + * @param {number} [position=string.length] The position to search up to. + * @returns {boolean} Returns `true` if `string` ends with `target`, + * else `false`. + * @example + * + * _.endsWith('abc', 'c'); + * // => true + * + * _.endsWith('abc', 'b'); + * // => false + * + * _.endsWith('abc', 'b', 2); + * // => true + */ + function endsWith(string, target, position) { + string = toString(string); + target = baseToString(target); + + var length = string.length; + position = position === undefined + ? length + : baseClamp(toInteger(position), 0, length); + + var end = position; + position -= target.length; + return position >= 0 && string.slice(position, end) == target; + } + + /** + * Converts the characters "&", "<", ">", '"', and "'" in `string` to their + * corresponding HTML entities. + * + * **Note:** No other characters are escaped. To escape additional + * characters use a third-party library like [_he_](https://mths.be/he). + * + * Though the ">" character is escaped for symmetry, characters like + * ">" and "/" don't need escaping in HTML and have no special meaning + * unless they're part of a tag or unquoted attribute value. See + * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) + * (under "semi-related fun fact") for more details. + * + * When working with HTML you should always + * [quote attribute values](http://wonko.com/post/html-escaping) to reduce + * XSS vectors. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ + function escape(string) { + string = toString(string); + return (string && reHasUnescapedHtml.test(string)) + ? string.replace(reUnescapedHtml, escapeHtmlChar) + : string; + } + + /** + * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", + * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escapeRegExp('[lodash](https://lodash.com/)'); + * // => '\[lodash\]\(https://lodash\.com/\)' + */ + function escapeRegExp(string) { + string = toString(string); + return (string && reHasRegExpChar.test(string)) + ? string.replace(reRegExpChar, '\\$&') + : string; + } + + /** + * Converts `string` to + * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the kebab cased string. + * @example + * + * _.kebabCase('Foo Bar'); + * // => 'foo-bar' + * + * _.kebabCase('fooBar'); + * // => 'foo-bar' + * + * _.kebabCase('__FOO_BAR__'); + * // => 'foo-bar' + */ + var kebabCase = createCompounder(function(result, word, index) { + return result + (index ? '-' : '') + word.toLowerCase(); + }); + + /** + * Converts `string`, as space separated words, to lower case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the lower cased string. + * @example + * + * _.lowerCase('--Foo-Bar--'); + * // => 'foo bar' + * + * _.lowerCase('fooBar'); + * // => 'foo bar' + * + * _.lowerCase('__FOO_BAR__'); + * // => 'foo bar' + */ + var lowerCase = createCompounder(function(result, word, index) { + return result + (index ? ' ' : '') + word.toLowerCase(); + }); + + /** + * Converts the first character of `string` to lower case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.lowerFirst('Fred'); + * // => 'fred' + * + * _.lowerFirst('FRED'); + * // => 'fRED' + */ + var lowerFirst = createCaseFirst('toLowerCase'); + + /** + * Pads `string` on the left and right sides if it's shorter than `length`. + * Padding characters are truncated if they can't be evenly divided by `length`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.pad('abc', 8); + * // => ' abc ' + * + * _.pad('abc', 8, '_-'); + * // => '_-abc_-_' + * + * _.pad('abc', 3); + * // => 'abc' + */ + function pad(string, length, chars) { + string = toString(string); + length = toInteger(length); + + var strLength = length ? stringSize(string) : 0; + if (!length || strLength >= length) { + return string; + } + var mid = (length - strLength) / 2; + return ( + createPadding(nativeFloor(mid), chars) + + string + + createPadding(nativeCeil(mid), chars) + ); + } + + /** + * Pads `string` on the right side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padEnd('abc', 6); + * // => 'abc ' + * + * _.padEnd('abc', 6, '_-'); + * // => 'abc_-_' + * + * _.padEnd('abc', 3); + * // => 'abc' + */ + function padEnd(string, length, chars) { + string = toString(string); + length = toInteger(length); + + var strLength = length ? stringSize(string) : 0; + return (length && strLength < length) + ? (string + createPadding(length - strLength, chars)) + : string; + } + + /** + * Pads `string` on the left side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padStart('abc', 6); + * // => ' abc' + * + * _.padStart('abc', 6, '_-'); + * // => '_-_abc' + * + * _.padStart('abc', 3); + * // => 'abc' + */ + function padStart(string, length, chars) { + string = toString(string); + length = toInteger(length); + + var strLength = length ? stringSize(string) : 0; + return (length && strLength < length) + ? (createPadding(length - strLength, chars) + string) + : string; + } + + /** + * Converts `string` to an integer of the specified radix. If `radix` is + * `undefined` or `0`, a `radix` of `10` is used unless `value` is a + * hexadecimal, in which case a `radix` of `16` is used. + * + * **Note:** This method aligns with the + * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category String + * @param {string} string The string to convert. + * @param {number} [radix=10] The radix to interpret `value` by. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {number} Returns the converted integer. + * @example + * + * _.parseInt('08'); + * // => 8 + * + * _.map(['6', '08', '10'], _.parseInt); + * // => [6, 8, 10] + */ + function parseInt(string, radix, guard) { + if (guard || radix == null) { + radix = 0; + } else if (radix) { + radix = +radix; + } + return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0); + } + + /** + * Repeats the given string `n` times. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to repeat. + * @param {number} [n=1] The number of times to repeat the string. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {string} Returns the repeated string. + * @example + * + * _.repeat('*', 3); + * // => '***' + * + * _.repeat('abc', 2); + * // => 'abcabc' + * + * _.repeat('abc', 0); + * // => '' + */ + function repeat(string, n, guard) { + if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) { + n = 1; + } else { + n = toInteger(n); + } + return baseRepeat(toString(string), n); + } + + /** + * Replaces matches for `pattern` in `string` with `replacement`. + * + * **Note:** This method is based on + * [`String#replace`](https://mdn.io/String/replace). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to modify. + * @param {RegExp|string} pattern The pattern to replace. + * @param {Function|string} replacement The match replacement. + * @returns {string} Returns the modified string. + * @example + * + * _.replace('Hi Fred', 'Fred', 'Barney'); + * // => 'Hi Barney' + */ + function replace() { + var args = arguments, + string = toString(args[0]); + + return args.length < 3 ? string : string.replace(args[1], args[2]); + } + + /** + * Converts `string` to + * [snake case](https://en.wikipedia.org/wiki/Snake_case). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the snake cased string. + * @example + * + * _.snakeCase('Foo Bar'); + * // => 'foo_bar' + * + * _.snakeCase('fooBar'); + * // => 'foo_bar' + * + * _.snakeCase('--FOO-BAR--'); + * // => 'foo_bar' + */ + var snakeCase = createCompounder(function(result, word, index) { + return result + (index ? '_' : '') + word.toLowerCase(); + }); + + /** + * Splits `string` by `separator`. + * + * **Note:** This method is based on + * [`String#split`](https://mdn.io/String/split). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to split. + * @param {RegExp|string} separator The separator pattern to split by. + * @param {number} [limit] The length to truncate results to. + * @returns {Array} Returns the string segments. + * @example + * + * _.split('a-b-c', '-', 2); + * // => ['a', 'b'] + */ + function split(string, separator, limit) { + if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) { + separator = limit = undefined; + } + limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0; + if (!limit) { + return []; + } + string = toString(string); + if (string && ( + typeof separator == 'string' || + (separator != null && !isRegExp(separator)) + )) { + separator = baseToString(separator); + if (!separator && hasUnicode(string)) { + return castSlice(stringToArray(string), 0, limit); + } + } + return string.split(separator, limit); + } + + /** + * Converts `string` to + * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). + * + * @static + * @memberOf _ + * @since 3.1.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the start cased string. + * @example + * + * _.startCase('--foo-bar--'); + * // => 'Foo Bar' + * + * _.startCase('fooBar'); + * // => 'Foo Bar' + * + * _.startCase('__FOO_BAR__'); + * // => 'FOO BAR' + */ + var startCase = createCompounder(function(result, word, index) { + return result + (index ? ' ' : '') + upperFirst(word); + }); + + /** + * Checks if `string` starts with the given target string. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to inspect. + * @param {string} [target] The string to search for. + * @param {number} [position=0] The position to search from. + * @returns {boolean} Returns `true` if `string` starts with `target`, + * else `false`. + * @example + * + * _.startsWith('abc', 'a'); + * // => true + * + * _.startsWith('abc', 'b'); + * // => false + * + * _.startsWith('abc', 'b', 1); + * // => true + */ + function startsWith(string, target, position) { + string = toString(string); + position = position == null + ? 0 + : baseClamp(toInteger(position), 0, string.length); + + target = baseToString(target); + return string.slice(position, position + target.length) == target; + } + + /** + * Creates a compiled template function that can interpolate data properties + * in "interpolate" delimiters, HTML-escape interpolated data properties in + * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data + * properties may be accessed as free variables in the template. If a setting + * object is given, it takes precedence over `_.templateSettings` values. + * + * **Note:** In the development build `_.template` utilizes + * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) + * for easier debugging. + * + * For more information on precompiling templates see + * [lodash's custom builds documentation](https://lodash.com/custom-builds). + * + * For more information on Chrome extension sandboxes see + * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The template string. + * @param {Object} [options={}] The options object. + * @param {RegExp} [options.escape=_.templateSettings.escape] + * The HTML "escape" delimiter. + * @param {RegExp} [options.evaluate=_.templateSettings.evaluate] + * The "evaluate" delimiter. + * @param {Object} [options.imports=_.templateSettings.imports] + * An object to import into the template as free variables. + * @param {RegExp} [options.interpolate=_.templateSettings.interpolate] + * The "interpolate" delimiter. + * @param {string} [options.sourceURL='lodash.templateSources[n]'] + * The sourceURL of the compiled template. + * @param {string} [options.variable='obj'] + * The data object variable name. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the compiled template function. + * @example + * + * // Use the "interpolate" delimiter to create a compiled template. + * var compiled = _.template('hello <%= user %>!'); + * compiled({ 'user': 'fred' }); + * // => 'hello fred!' + * + * // Use the HTML "escape" delimiter to escape data property values. + * var compiled = _.template('<%- value %>'); + * compiled({ 'value': ' + +``` + +For version 3 uuids: + +```html + + +``` + +For version 4 uuids: + +```html + + +``` + +For version 5 uuids: + +```html + + +``` + +## API + +### Version 1 + +```javascript +const uuidv1 = require('uuid/v1'); + +// Incantations +uuidv1(); +uuidv1(options); +uuidv1(options, buffer, offset); +``` + +Generate and return a RFC4122 v1 (timestamp-based) UUID. + +* `options` - (Object) Optional uuid state to apply. Properties may include: + + * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1. + * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used. + * `msecs` - (Number) Time in milliseconds since unix Epoch. Default: The current time is used. + * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2. + +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Note: The id is generated guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.) + +Example: Generate string UUID with fully-specified options + +```javascript +const v1options = { + node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab], + clockseq: 0x1234, + msecs: new Date('2011-11-01').getTime(), + nsecs: 5678 +}; +uuidv1(v1options); // ⇨ '710b962e-041c-11e1-9234-0123456789ab' + +``` + +Example: In-place generation of two binary IDs + +```javascript +// Generate two ids in an array +const arr = new Array(); +uuidv1(null, arr, 0); // ⇨ [ 69, 117, 109, 208, 123, 26, 17, 232, 146, 52, 45, 66, 178, 27, 26, 62 ] +uuidv1(null, arr, 16); // ⇨ [ 69, 117, 109, 208, 123, 26, 17, 232, 146, 52, 45, 66, 178, 27, 26, 62, 69, 117, 109, 209, 123, 26, 17, 232, 146, 52, 45, 66, 178, 27, 26, 62 ] + +``` + +### Version 3 + +```javascript +const uuidv3 = require('uuid/v3'); + +// Incantations +uuidv3(name, namespace); +uuidv3(name, namespace, buffer); +uuidv3(name, namespace, buffer, offset); +``` + +Generate and return a RFC4122 v3 UUID. + +* `name` - (String | Array[]) "name" to create UUID with +* `namespace` - (String | Array[]) "namespace" UUID either as a String or Array[16] of byte values +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. Default = 0 + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Example: + +```javascript +uuidv3('hello world', MY_NAMESPACE); // ⇨ '042ffd34-d989-321c-ad06-f60826172424' + +``` + +### Version 4 + +```javascript +const uuidv4 = require('uuid/v4') + +// Incantations +uuidv4(); +uuidv4(options); +uuidv4(options, buffer, offset); +``` + +Generate and return a RFC4122 v4 UUID. + +* `options` - (Object) Optional uuid state to apply. Properties may include: + * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values + * `rng` - (Function) Random # generator function that returns an Array[16] of byte values (0-255) +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Example: Generate string UUID with predefined `random` values + +```javascript +const v4options = { + random: [ + 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea, + 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36 + ] +}; +uuidv4(v4options); // ⇨ '109156be-c4fb-41ea-b1b4-efe1671c5836' + +``` + +Example: Generate two IDs in a single buffer + +```javascript +const buffer = new Array(); +uuidv4(null, buffer, 0); // ⇨ [ 54, 122, 218, 70, 45, 70, 65, 24, 171, 53, 95, 130, 83, 195, 242, 45 ] +uuidv4(null, buffer, 16); // ⇨ [ 54, 122, 218, 70, 45, 70, 65, 24, 171, 53, 95, 130, 83, 195, 242, 45, 108, 204, 255, 103, 171, 86, 76, 94, 178, 225, 188, 236, 150, 20, 151, 87 ] + +``` + +### Version 5 + +```javascript +const uuidv5 = require('uuid/v5'); + +// Incantations +uuidv5(name, namespace); +uuidv5(name, namespace, buffer); +uuidv5(name, namespace, buffer, offset); +``` + +Generate and return a RFC4122 v5 UUID. + +* `name` - (String | Array[]) "name" to create UUID with +* `namespace` - (String | Array[]) "namespace" UUID either as a String or Array[16] of byte values +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. Default = 0 + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Example: + +```javascript +uuidv5('hello world', MY_NAMESPACE); // ⇨ '9f282611-e0fd-5650-8953-89c8e342da0b' + +``` + +## Command Line + +UUIDs can be generated from the command line with the `uuid` command. + +```shell +$ uuid +ddeb27fb-d9a0-4624-be4d-4615062daed4 + +$ uuid v1 +02d37060-d446-11e7-a9fa-7bdae751ebe1 +``` + +Type `uuid --help` for usage details + +## Testing + +```shell +npm test +``` + +---- +Markdown generated from [README_js.md](README_js.md) by [![RunMD Logo](http://i.imgur.com/h0FVyzU.png)](https://github.com/broofa/runmd) \ No newline at end of file diff --git a/node_modules/uuid/README_js.md b/node_modules/uuid/README_js.md new file mode 100644 index 00000000..f34453be --- /dev/null +++ b/node_modules/uuid/README_js.md @@ -0,0 +1,280 @@ +```javascript --hide +runmd.onRequire = path => path.replace(/^uuid/, './'); +``` + +# uuid [![Build Status](https://secure.travis-ci.org/kelektiv/node-uuid.svg?branch=master)](http://travis-ci.org/kelektiv/node-uuid) # + +Simple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS. + +Features: + +* Support for version 1, 3, 4 and 5 UUIDs +* Cross-platform +* Uses cryptographically-strong random number APIs (when available) +* Zero-dependency, small footprint (... but not [this small](https://gist.github.com/982883)) + +[**Deprecation warning**: The use of `require('uuid')` is deprecated and will not be +supported after version 3.x of this module. Instead, use `require('uuid/[v1|v3|v4|v5]')` as shown in the examples below.] + +## Quickstart - CommonJS (Recommended) + +```shell +npm install uuid +``` + +Then generate your uuid version of choice ... + +Version 1 (timestamp): + +```javascript --run v1 +const uuidv1 = require('uuid/v1'); +uuidv1(); // RESULT +``` + +Version 3 (namespace): + +```javascript --run v3 +const uuidv3 = require('uuid/v3'); + +// ... using predefined DNS namespace (for domain names) +uuidv3('hello.example.com', uuidv3.DNS); // RESULT + +// ... using predefined URL namespace (for, well, URLs) +uuidv3('http://example.com/hello', uuidv3.URL); // RESULT + +// ... using a custom namespace +// +// Note: Custom namespaces should be a UUID string specific to your application! +// E.g. the one here was generated using this modules `uuid` CLI. +const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341'; +uuidv3('Hello, World!', MY_NAMESPACE); // RESULT +``` + +Version 4 (random): + +```javascript --run v4 +const uuidv4 = require('uuid/v4'); +uuidv4(); // RESULT +``` + +Version 5 (namespace): + +```javascript --run v5 +const uuidv5 = require('uuid/v5'); + +// ... using predefined DNS namespace (for domain names) +uuidv5('hello.example.com', uuidv5.DNS); // RESULT + +// ... using predefined URL namespace (for, well, URLs) +uuidv5('http://example.com/hello', uuidv5.URL); // RESULT + +// ... using a custom namespace +// +// Note: Custom namespaces should be a UUID string specific to your application! +// E.g. the one here was generated using this modules `uuid` CLI. +const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341'; +uuidv5('Hello, World!', MY_NAMESPACE); // RESULT +``` + +## Quickstart - Browser-ready Versions + +Browser-ready versions of this module are available via [wzrd.in](https://github.com/jfhbrook/wzrd.in). + +For version 1 uuids: + +```html + + +``` + +For version 3 uuids: + +```html + + +``` + +For version 4 uuids: + +```html + + +``` + +For version 5 uuids: + +```html + + +``` + +## API + +### Version 1 + +```javascript +const uuidv1 = require('uuid/v1'); + +// Incantations +uuidv1(); +uuidv1(options); +uuidv1(options, buffer, offset); +``` + +Generate and return a RFC4122 v1 (timestamp-based) UUID. + +* `options` - (Object) Optional uuid state to apply. Properties may include: + + * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1. + * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used. + * `msecs` - (Number) Time in milliseconds since unix Epoch. Default: The current time is used. + * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2. + +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Note: The id is generated guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.) + +Example: Generate string UUID with fully-specified options + +```javascript --run v1 +const v1options = { + node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab], + clockseq: 0x1234, + msecs: new Date('2011-11-01').getTime(), + nsecs: 5678 +}; +uuidv1(v1options); // RESULT +``` + +Example: In-place generation of two binary IDs + +```javascript --run v1 +// Generate two ids in an array +const arr = new Array(); +uuidv1(null, arr, 0); // RESULT +uuidv1(null, arr, 16); // RESULT +``` + +### Version 3 + +```javascript +const uuidv3 = require('uuid/v3'); + +// Incantations +uuidv3(name, namespace); +uuidv3(name, namespace, buffer); +uuidv3(name, namespace, buffer, offset); +``` + +Generate and return a RFC4122 v3 UUID. + +* `name` - (String | Array[]) "name" to create UUID with +* `namespace` - (String | Array[]) "namespace" UUID either as a String or Array[16] of byte values +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. Default = 0 + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Example: + +```javascript --run v3 +uuidv3('hello world', MY_NAMESPACE); // RESULT +``` + +### Version 4 + +```javascript +const uuidv4 = require('uuid/v4') + +// Incantations +uuidv4(); +uuidv4(options); +uuidv4(options, buffer, offset); +``` + +Generate and return a RFC4122 v4 UUID. + +* `options` - (Object) Optional uuid state to apply. Properties may include: + * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values + * `rng` - (Function) Random # generator function that returns an Array[16] of byte values (0-255) +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Example: Generate string UUID with predefined `random` values + +```javascript --run v4 +const v4options = { + random: [ + 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea, + 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36 + ] +}; +uuidv4(v4options); // RESULT +``` + +Example: Generate two IDs in a single buffer + +```javascript --run v4 +const buffer = new Array(); +uuidv4(null, buffer, 0); // RESULT +uuidv4(null, buffer, 16); // RESULT +``` + +### Version 5 + +```javascript +const uuidv5 = require('uuid/v5'); + +// Incantations +uuidv5(name, namespace); +uuidv5(name, namespace, buffer); +uuidv5(name, namespace, buffer, offset); +``` + +Generate and return a RFC4122 v5 UUID. + +* `name` - (String | Array[]) "name" to create UUID with +* `namespace` - (String | Array[]) "namespace" UUID either as a String or Array[16] of byte values +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. Default = 0 + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Example: + +```javascript --run v5 +uuidv5('hello world', MY_NAMESPACE); // RESULT +``` + +## Command Line + +UUIDs can be generated from the command line with the `uuid` command. + +```shell +$ uuid +ddeb27fb-d9a0-4624-be4d-4615062daed4 + +$ uuid v1 +02d37060-d446-11e7-a9fa-7bdae751ebe1 +``` + +Type `uuid --help` for usage details + +## Testing + +```shell +npm test +``` diff --git a/node_modules/uuid/bin/uuid b/node_modules/uuid/bin/uuid new file mode 100755 index 00000000..502626e6 --- /dev/null +++ b/node_modules/uuid/bin/uuid @@ -0,0 +1,65 @@ +#!/usr/bin/env node +var assert = require('assert'); + +function usage() { + console.log('Usage:'); + console.log(' uuid'); + console.log(' uuid v1'); + console.log(' uuid v3 '); + console.log(' uuid v4'); + console.log(' uuid v5 '); + console.log(' uuid --help'); + console.log('\nNote: may be "URL" or "DNS" to use the corresponding UUIDs defined by RFC4122'); +} + +var args = process.argv.slice(2); + +if (args.indexOf('--help') >= 0) { + usage(); + process.exit(0); +} +var version = args.shift() || 'v4'; + +switch (version) { + case 'v1': + var uuidV1 = require('../v1'); + console.log(uuidV1()); + break; + + case 'v3': + var uuidV3 = require('../v3'); + + var name = args.shift(); + var namespace = args.shift(); + assert(name != null, 'v3 name not specified'); + assert(namespace != null, 'v3 namespace not specified'); + + if (namespace == 'URL') namespace = uuidV3.URL; + if (namespace == 'DNS') namespace = uuidV3.DNS; + + console.log(uuidV3(name, namespace)); + break; + + case 'v4': + var uuidV4 = require('../v4'); + console.log(uuidV4()); + break; + + case 'v5': + var uuidV5 = require('../v5'); + + var name = args.shift(); + var namespace = args.shift(); + assert(name != null, 'v5 name not specified'); + assert(namespace != null, 'v5 namespace not specified'); + + if (namespace == 'URL') namespace = uuidV5.URL; + if (namespace == 'DNS') namespace = uuidV5.DNS; + + console.log(uuidV5(name, namespace)); + break; + + default: + usage(); + process.exit(1); +} diff --git a/node_modules/uuid/index.js b/node_modules/uuid/index.js new file mode 100644 index 00000000..e96791ab --- /dev/null +++ b/node_modules/uuid/index.js @@ -0,0 +1,8 @@ +var v1 = require('./v1'); +var v4 = require('./v4'); + +var uuid = v4; +uuid.v1 = v1; +uuid.v4 = v4; + +module.exports = uuid; diff --git a/node_modules/uuid/lib/bytesToUuid.js b/node_modules/uuid/lib/bytesToUuid.js new file mode 100644 index 00000000..847c4828 --- /dev/null +++ b/node_modules/uuid/lib/bytesToUuid.js @@ -0,0 +1,24 @@ +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ +var byteToHex = []; +for (var i = 0; i < 256; ++i) { + byteToHex[i] = (i + 0x100).toString(16).substr(1); +} + +function bytesToUuid(buf, offset) { + var i = offset || 0; + var bth = byteToHex; + // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4 + return ([bth[buf[i++]], bth[buf[i++]], + bth[buf[i++]], bth[buf[i++]], '-', + bth[buf[i++]], bth[buf[i++]], '-', + bth[buf[i++]], bth[buf[i++]], '-', + bth[buf[i++]], bth[buf[i++]], '-', + bth[buf[i++]], bth[buf[i++]], + bth[buf[i++]], bth[buf[i++]], + bth[buf[i++]], bth[buf[i++]]]).join(''); +} + +module.exports = bytesToUuid; diff --git a/node_modules/uuid/lib/md5-browser.js b/node_modules/uuid/lib/md5-browser.js new file mode 100644 index 00000000..9b3b6c7e --- /dev/null +++ b/node_modules/uuid/lib/md5-browser.js @@ -0,0 +1,216 @@ +/* + * Browser-compatible JavaScript MD5 + * + * Modification of JavaScript MD5 + * https://github.com/blueimp/JavaScript-MD5 + * + * Copyright 2011, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * https://opensource.org/licenses/MIT + * + * Based on + * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message + * Digest Algorithm, as defined in RFC 1321. + * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for more info. + */ + +'use strict'; + +function md5(bytes) { + if (typeof(bytes) == 'string') { + var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape + bytes = new Array(msg.length); + for (var i = 0; i < msg.length; i++) bytes[i] = msg.charCodeAt(i); + } + + return md5ToHexEncodedArray( + wordsToMd5( + bytesToWords(bytes) + , bytes.length * 8) + ); +} + + +/* +* Convert an array of little-endian words to an array of bytes +*/ +function md5ToHexEncodedArray(input) { + var i; + var x; + var output = []; + var length32 = input.length * 32; + var hexTab = '0123456789abcdef'; + var hex; + + for (i = 0; i < length32; i += 8) { + x = (input[i >> 5] >>> (i % 32)) & 0xFF; + + hex = parseInt(hexTab.charAt((x >>> 4) & 0x0F) + hexTab.charAt(x & 0x0F), 16); + + output.push(hex); + } + return output; +} + +/* +* Calculate the MD5 of an array of little-endian words, and a bit length. +*/ +function wordsToMd5(x, len) { + /* append padding */ + x[len >> 5] |= 0x80 << (len % 32); + x[(((len + 64) >>> 9) << 4) + 14] = len; + + var i; + var olda; + var oldb; + var oldc; + var oldd; + var a = 1732584193; + var b = -271733879; + var c = -1732584194; + + var d = 271733878; + + for (i = 0; i < x.length; i += 16) { + olda = a; + oldb = b; + oldc = c; + oldd = d; + + a = md5ff(a, b, c, d, x[i], 7, -680876936); + d = md5ff(d, a, b, c, x[i + 1], 12, -389564586); + c = md5ff(c, d, a, b, x[i + 2], 17, 606105819); + b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330); + a = md5ff(a, b, c, d, x[i + 4], 7, -176418897); + d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426); + c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341); + b = md5ff(b, c, d, a, x[i + 7], 22, -45705983); + a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416); + d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417); + c = md5ff(c, d, a, b, x[i + 10], 17, -42063); + b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162); + a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682); + d = md5ff(d, a, b, c, x[i + 13], 12, -40341101); + c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290); + b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329); + + a = md5gg(a, b, c, d, x[i + 1], 5, -165796510); + d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632); + c = md5gg(c, d, a, b, x[i + 11], 14, 643717713); + b = md5gg(b, c, d, a, x[i], 20, -373897302); + a = md5gg(a, b, c, d, x[i + 5], 5, -701558691); + d = md5gg(d, a, b, c, x[i + 10], 9, 38016083); + c = md5gg(c, d, a, b, x[i + 15], 14, -660478335); + b = md5gg(b, c, d, a, x[i + 4], 20, -405537848); + a = md5gg(a, b, c, d, x[i + 9], 5, 568446438); + d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690); + c = md5gg(c, d, a, b, x[i + 3], 14, -187363961); + b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501); + a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467); + d = md5gg(d, a, b, c, x[i + 2], 9, -51403784); + c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473); + b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734); + + a = md5hh(a, b, c, d, x[i + 5], 4, -378558); + d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463); + c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562); + b = md5hh(b, c, d, a, x[i + 14], 23, -35309556); + a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060); + d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353); + c = md5hh(c, d, a, b, x[i + 7], 16, -155497632); + b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640); + a = md5hh(a, b, c, d, x[i + 13], 4, 681279174); + d = md5hh(d, a, b, c, x[i], 11, -358537222); + c = md5hh(c, d, a, b, x[i + 3], 16, -722521979); + b = md5hh(b, c, d, a, x[i + 6], 23, 76029189); + a = md5hh(a, b, c, d, x[i + 9], 4, -640364487); + d = md5hh(d, a, b, c, x[i + 12], 11, -421815835); + c = md5hh(c, d, a, b, x[i + 15], 16, 530742520); + b = md5hh(b, c, d, a, x[i + 2], 23, -995338651); + + a = md5ii(a, b, c, d, x[i], 6, -198630844); + d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415); + c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905); + b = md5ii(b, c, d, a, x[i + 5], 21, -57434055); + a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571); + d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606); + c = md5ii(c, d, a, b, x[i + 10], 15, -1051523); + b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799); + a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359); + d = md5ii(d, a, b, c, x[i + 15], 10, -30611744); + c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380); + b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649); + a = md5ii(a, b, c, d, x[i + 4], 6, -145523070); + d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379); + c = md5ii(c, d, a, b, x[i + 2], 15, 718787259); + b = md5ii(b, c, d, a, x[i + 9], 21, -343485551); + + a = safeAdd(a, olda); + b = safeAdd(b, oldb); + c = safeAdd(c, oldc); + d = safeAdd(d, oldd); + } + return [a, b, c, d]; +} + +/* +* Convert an array bytes to an array of little-endian words +* Characters >255 have their high-byte silently ignored. +*/ +function bytesToWords(input) { + var i; + var output = []; + output[(input.length >> 2) - 1] = undefined; + for (i = 0; i < output.length; i += 1) { + output[i] = 0; + } + var length8 = input.length * 8; + for (i = 0; i < length8; i += 8) { + output[i >> 5] |= (input[(i / 8)] & 0xFF) << (i % 32); + } + + return output; +} + +/* +* Add integers, wrapping at 2^32. This uses 16-bit operations internally +* to work around bugs in some JS interpreters. +*/ +function safeAdd(x, y) { + var lsw = (x & 0xFFFF) + (y & 0xFFFF); + var msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return (msw << 16) | (lsw & 0xFFFF); +} + +/* +* Bitwise rotate a 32-bit number to the left. +*/ +function bitRotateLeft(num, cnt) { + return (num << cnt) | (num >>> (32 - cnt)); +} + +/* +* These functions implement the four basic operations the algorithm uses. +*/ +function md5cmn(q, a, b, x, s, t) { + return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b); +} +function md5ff(a, b, c, d, x, s, t) { + return md5cmn((b & c) | ((~b) & d), a, b, x, s, t); +} +function md5gg(a, b, c, d, x, s, t) { + return md5cmn((b & d) | (c & (~d)), a, b, x, s, t); +} +function md5hh(a, b, c, d, x, s, t) { + return md5cmn(b ^ c ^ d, a, b, x, s, t); +} +function md5ii(a, b, c, d, x, s, t) { + return md5cmn(c ^ (b | (~d)), a, b, x, s, t); +} + +module.exports = md5; diff --git a/node_modules/uuid/lib/md5.js b/node_modules/uuid/lib/md5.js new file mode 100644 index 00000000..7044b872 --- /dev/null +++ b/node_modules/uuid/lib/md5.js @@ -0,0 +1,25 @@ +'use strict'; + +var crypto = require('crypto'); + +function md5(bytes) { + if (typeof Buffer.from === 'function') { + // Modern Buffer API + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } + } else { + // Pre-v4 Buffer API + if (Array.isArray(bytes)) { + bytes = new Buffer(bytes); + } else if (typeof bytes === 'string') { + bytes = new Buffer(bytes, 'utf8'); + } + } + + return crypto.createHash('md5').update(bytes).digest(); +} + +module.exports = md5; diff --git a/node_modules/uuid/lib/rng-browser.js b/node_modules/uuid/lib/rng-browser.js new file mode 100644 index 00000000..6361fb81 --- /dev/null +++ b/node_modules/uuid/lib/rng-browser.js @@ -0,0 +1,34 @@ +// Unique ID creation requires a high quality random # generator. In the +// browser this is a little complicated due to unknown quality of Math.random() +// and inconsistent support for the `crypto` API. We do the best we can via +// feature-detection + +// getRandomValues needs to be invoked in a context where "this" is a Crypto +// implementation. Also, find the complete implementation of crypto on IE11. +var getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto)) || + (typeof(msCrypto) != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto)); + +if (getRandomValues) { + // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto + var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef + + module.exports = function whatwgRNG() { + getRandomValues(rnds8); + return rnds8; + }; +} else { + // Math.random()-based (RNG) + // + // If all else fails, use Math.random(). It's fast, but is of unspecified + // quality. + var rnds = new Array(16); + + module.exports = function mathRNG() { + for (var i = 0, r; i < 16; i++) { + if ((i & 0x03) === 0) r = Math.random() * 0x100000000; + rnds[i] = r >>> ((i & 0x03) << 3) & 0xff; + } + + return rnds; + }; +} diff --git a/node_modules/uuid/lib/rng.js b/node_modules/uuid/lib/rng.js new file mode 100644 index 00000000..58f0dc9c --- /dev/null +++ b/node_modules/uuid/lib/rng.js @@ -0,0 +1,8 @@ +// Unique ID creation requires a high quality random # generator. In node.js +// this is pretty straight-forward - we use the crypto API. + +var crypto = require('crypto'); + +module.exports = function nodeRNG() { + return crypto.randomBytes(16); +}; diff --git a/node_modules/uuid/lib/sha1-browser.js b/node_modules/uuid/lib/sha1-browser.js new file mode 100644 index 00000000..5758ed75 --- /dev/null +++ b/node_modules/uuid/lib/sha1-browser.js @@ -0,0 +1,89 @@ +// Adapted from Chris Veness' SHA1 code at +// http://www.movable-type.co.uk/scripts/sha1.html +'use strict'; + +function f(s, x, y, z) { + switch (s) { + case 0: return (x & y) ^ (~x & z); + case 1: return x ^ y ^ z; + case 2: return (x & y) ^ (x & z) ^ (y & z); + case 3: return x ^ y ^ z; + } +} + +function ROTL(x, n) { + return (x << n) | (x>>> (32 - n)); +} + +function sha1(bytes) { + var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6]; + var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0]; + + if (typeof(bytes) == 'string') { + var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape + bytes = new Array(msg.length); + for (var i = 0; i < msg.length; i++) bytes[i] = msg.charCodeAt(i); + } + + bytes.push(0x80); + + var l = bytes.length/4 + 2; + var N = Math.ceil(l/16); + var M = new Array(N); + + for (var i=0; i>> 0; + e = d; + d = c; + c = ROTL(b, 30) >>> 0; + b = a; + a = T; + } + + H[0] = (H[0] + a) >>> 0; + H[1] = (H[1] + b) >>> 0; + H[2] = (H[2] + c) >>> 0; + H[3] = (H[3] + d) >>> 0; + H[4] = (H[4] + e) >>> 0; + } + + return [ + H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, + H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, + H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, + H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, + H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff + ]; +} + +module.exports = sha1; diff --git a/node_modules/uuid/lib/sha1.js b/node_modules/uuid/lib/sha1.js new file mode 100644 index 00000000..0b54b250 --- /dev/null +++ b/node_modules/uuid/lib/sha1.js @@ -0,0 +1,25 @@ +'use strict'; + +var crypto = require('crypto'); + +function sha1(bytes) { + if (typeof Buffer.from === 'function') { + // Modern Buffer API + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } + } else { + // Pre-v4 Buffer API + if (Array.isArray(bytes)) { + bytes = new Buffer(bytes); + } else if (typeof bytes === 'string') { + bytes = new Buffer(bytes, 'utf8'); + } + } + + return crypto.createHash('sha1').update(bytes).digest(); +} + +module.exports = sha1; diff --git a/node_modules/uuid/lib/v35.js b/node_modules/uuid/lib/v35.js new file mode 100644 index 00000000..8b066cc5 --- /dev/null +++ b/node_modules/uuid/lib/v35.js @@ -0,0 +1,57 @@ +var bytesToUuid = require('./bytesToUuid'); + +function uuidToBytes(uuid) { + // Note: We assume we're being passed a valid uuid string + var bytes = []; + uuid.replace(/[a-fA-F0-9]{2}/g, function(hex) { + bytes.push(parseInt(hex, 16)); + }); + + return bytes; +} + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + var bytes = new Array(str.length); + for (var i = 0; i < str.length; i++) { + bytes[i] = str.charCodeAt(i); + } + return bytes; +} + +module.exports = function(name, version, hashfunc) { + var generateUUID = function(value, namespace, buf, offset) { + var off = buf && offset || 0; + + if (typeof(value) == 'string') value = stringToBytes(value); + if (typeof(namespace) == 'string') namespace = uuidToBytes(namespace); + + if (!Array.isArray(value)) throw TypeError('value must be an array of bytes'); + if (!Array.isArray(namespace) || namespace.length !== 16) throw TypeError('namespace must be uuid string or an Array of 16 byte values'); + + // Per 4.3 + var bytes = hashfunc(namespace.concat(value)); + bytes[6] = (bytes[6] & 0x0f) | version; + bytes[8] = (bytes[8] & 0x3f) | 0x80; + + if (buf) { + for (var idx = 0; idx < 16; ++idx) { + buf[off+idx] = bytes[idx]; + } + } + + return buf || bytesToUuid(bytes); + }; + + // Function#name is not settable on some platforms (#270) + try { + generateUUID.name = name; + } catch (err) { + } + + // Pre-defined namespaces, per Appendix C + generateUUID.DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; + generateUUID.URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; + + return generateUUID; +}; diff --git a/node_modules/uuid/package.json b/node_modules/uuid/package.json new file mode 100644 index 00000000..a94d333c --- /dev/null +++ b/node_modules/uuid/package.json @@ -0,0 +1,95 @@ +{ + "_from": "uuid@^3.2.1", + "_id": "uuid@3.3.2", + "_inBundle": false, + "_integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "_location": "/uuid", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "uuid@^3.2.1", + "name": "uuid", + "escapedName": "uuid", + "rawSpec": "^3.2.1", + "saveSpec": null, + "fetchSpec": "^3.2.1" + }, + "_requiredBy": [ + "/strong-soap" + ], + "_resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "_shasum": "1b4af4955eb3077c501c23872fc6513811587131", + "_spec": "uuid@^3.2.1", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/strong-soap", + "bin": { + "uuid": "./bin/uuid" + }, + "browser": { + "./lib/rng.js": "./lib/rng-browser.js", + "./lib/sha1.js": "./lib/sha1-browser.js", + "./lib/md5.js": "./lib/md5-browser.js" + }, + "bugs": { + "url": "https://github.com/kelektiv/node-uuid/issues" + }, + "bundleDependencies": false, + "commitlint": { + "extends": [ + "@commitlint/config-conventional" + ] + }, + "contributors": [ + { + "name": "Robert Kieffer", + "email": "robert@broofa.com" + }, + { + "name": "Christoph Tavan", + "email": "dev@tavan.de" + }, + { + "name": "AJ ONeal", + "email": "coolaj86@gmail.com" + }, + { + "name": "Vincent Voyer", + "email": "vincent@zeroload.net" + }, + { + "name": "Roman Shtylman", + "email": "shtylman@gmail.com" + } + ], + "deprecated": false, + "description": "RFC4122 (v1, v4, and v5) UUIDs", + "devDependencies": { + "@commitlint/cli": "7.0.0", + "@commitlint/config-conventional": "7.0.1", + "eslint": "4.19.1", + "husky": "0.14.3", + "mocha": "5.2.0", + "runmd": "1.0.1", + "standard-version": "4.4.0" + }, + "homepage": "https://github.com/kelektiv/node-uuid#readme", + "keywords": [ + "uuid", + "guid", + "rfc4122" + ], + "license": "MIT", + "name": "uuid", + "repository": { + "type": "git", + "url": "git+https://github.com/kelektiv/node-uuid.git" + }, + "scripts": { + "commitmsg": "commitlint -E GIT_PARAMS", + "md": "runmd --watch --output=README.md README_js.md", + "prepare": "runmd --output=README.md README_js.md", + "release": "standard-version", + "test": "mocha test/test.js" + }, + "version": "3.3.2" +} diff --git a/node_modules/uuid/v1.js b/node_modules/uuid/v1.js new file mode 100644 index 00000000..d84c0f45 --- /dev/null +++ b/node_modules/uuid/v1.js @@ -0,0 +1,109 @@ +var rng = require('./lib/rng'); +var bytesToUuid = require('./lib/bytesToUuid'); + +// **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +var _nodeId; +var _clockseq; + +// Previous uuid creation time +var _lastMSecs = 0; +var _lastNSecs = 0; + +// See https://github.com/broofa/node-uuid for API details +function v1(options, buf, offset) { + var i = buf && offset || 0; + var b = buf || []; + + options = options || {}; + var node = options.node || _nodeId; + var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; + + // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + if (node == null || clockseq == null) { + var seedBytes = rng(); + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [ + seedBytes[0] | 0x01, + seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5] + ]; + } + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } + + // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime(); + + // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; + + // Time since last uuid creation (in msecs) + var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000; + + // Per 4.2.1.2, Bump clockseq on clock regression + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } + + // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } + + // Per 4.2.1.2 Throw error if too many uuids are requested + if (nsecs >= 10000) { + throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec'); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; + + // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + msecs += 12219292800000; + + // `time_low` + var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; + + // `time_mid` + var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; + + // `time_high_and_version` + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + b[i++] = tmh >>> 16 & 0xff; + + // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + b[i++] = clockseq >>> 8 | 0x80; + + // `clock_seq_low` + b[i++] = clockseq & 0xff; + + // `node` + for (var n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf ? buf : bytesToUuid(b); +} + +module.exports = v1; diff --git a/node_modules/uuid/v3.js b/node_modules/uuid/v3.js new file mode 100644 index 00000000..ee7e14c0 --- /dev/null +++ b/node_modules/uuid/v3.js @@ -0,0 +1,4 @@ +var v35 = require('./lib/v35.js'); +var md5 = require('./lib/md5'); + +module.exports = v35('v3', 0x30, md5); \ No newline at end of file diff --git a/node_modules/uuid/v4.js b/node_modules/uuid/v4.js new file mode 100644 index 00000000..1f07be1c --- /dev/null +++ b/node_modules/uuid/v4.js @@ -0,0 +1,29 @@ +var rng = require('./lib/rng'); +var bytesToUuid = require('./lib/bytesToUuid'); + +function v4(options, buf, offset) { + var i = buf && offset || 0; + + if (typeof(options) == 'string') { + buf = options === 'binary' ? new Array(16) : null; + options = null; + } + options = options || {}; + + var rnds = options.random || (options.rng || rng)(); + + // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` + rnds[6] = (rnds[6] & 0x0f) | 0x40; + rnds[8] = (rnds[8] & 0x3f) | 0x80; + + // Copy bytes to buffer, if provided + if (buf) { + for (var ii = 0; ii < 16; ++ii) { + buf[i + ii] = rnds[ii]; + } + } + + return buf || bytesToUuid(rnds); +} + +module.exports = v4; diff --git a/node_modules/uuid/v5.js b/node_modules/uuid/v5.js new file mode 100644 index 00000000..4945baf3 --- /dev/null +++ b/node_modules/uuid/v5.js @@ -0,0 +1,3 @@ +var v35 = require('./lib/v35.js'); +var sha1 = require('./lib/sha1'); +module.exports = v35('v5', 0x50, sha1); diff --git a/node_modules/which/CHANGELOG.md b/node_modules/which/CHANGELOG.md new file mode 100644 index 00000000..3d83d269 --- /dev/null +++ b/node_modules/which/CHANGELOG.md @@ -0,0 +1,152 @@ +# Changes + + +## 1.3.1 + +* update deps +* update travis + +## v1.3.0 + +* Add nothrow option to which.sync +* update tap + +## v1.2.14 + +* appveyor: drop node 5 and 0.x +* travis-ci: add node 6, drop 0.x + +## v1.2.13 + +* test: Pass missing option to pass on windows +* update tap +* update isexe to 2.0.0 +* neveragain.tech pledge request + +## v1.2.12 + +* Removed unused require + +## v1.2.11 + +* Prevent changelog script from being included in package + +## v1.2.10 + +* Use env.PATH only, not env.Path + +## v1.2.9 + +* fix for paths starting with ../ +* Remove unused `is-absolute` module + +## v1.2.8 + +* bullet items in changelog that contain (but don't start with) # + +## v1.2.7 + +* strip 'update changelog' changelog entries out of changelog + +## v1.2.6 + +* make the changelog bulleted + +## v1.2.5 + +* make a changelog, and keep it up to date +* don't include tests in package +* Properly handle relative-path executables +* appveyor +* Attach error code to Not Found error +* Make tests pass on Windows + +## v1.2.4 + +* Fix typo + +## v1.2.3 + +* update isexe, fix regression in pathExt handling + +## v1.2.2 + +* update deps, use isexe module, test windows + +## v1.2.1 + +* Sometimes windows PATH entries are quoted +* Fixed a bug in the check for group and user mode bits. This bug was introduced during refactoring for supporting strict mode. +* doc cli + +## v1.2.0 + +* Add support for opt.all and -as cli flags +* test the bin +* update travis +* Allow checking for multiple programs in bin/which +* tap 2 + +## v1.1.2 + +* travis +* Refactored and fixed undefined error on Windows +* Support strict mode + +## v1.1.1 + +* test +g exes against secondary groups, if available +* Use windows exe semantics on cygwin & msys +* cwd should be first in path on win32, not last +* Handle lower-case 'env.Path' on Windows +* Update docs +* use single-quotes + +## v1.1.0 + +* Add tests, depend on is-absolute + +## v1.0.9 + +* which.js: root is allowed to execute files owned by anyone + +## v1.0.8 + +* don't use graceful-fs + +## v1.0.7 + +* add license to package.json + +## v1.0.6 + +* isc license + +## 1.0.5 + +* Awful typo + +## 1.0.4 + +* Test for path absoluteness properly +* win: Allow '' as a pathext if cmd has a . in it + +## 1.0.3 + +* Remove references to execPath +* Make `which.sync()` work on Windows by honoring the PATHEXT variable. +* Make `isExe()` always return true on Windows. +* MIT + +## 1.0.2 + +* Only files can be exes + +## 1.0.1 + +* Respect the PATHEXT env for win32 support +* should 0755 the bin +* binary +* guts +* package +* 1st diff --git a/node_modules/which/LICENSE b/node_modules/which/LICENSE new file mode 100644 index 00000000..19129e31 --- /dev/null +++ b/node_modules/which/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/which/README.md b/node_modules/which/README.md new file mode 100644 index 00000000..8c0b0cbf --- /dev/null +++ b/node_modules/which/README.md @@ -0,0 +1,51 @@ +# which + +Like the unix `which` utility. + +Finds the first instance of a specified executable in the PATH +environment variable. Does not cache the results, so `hash -r` is not +needed when the PATH changes. + +## USAGE + +```javascript +var which = require('which') + +// async usage +which('node', function (er, resolvedPath) { + // er is returned if no "node" is found on the PATH + // if it is found, then the absolute path to the exec is returned +}) + +// sync usage +// throws if not found +var resolved = which.sync('node') + +// if nothrow option is used, returns null if not found +resolved = which.sync('node', {nothrow: true}) + +// Pass options to override the PATH and PATHEXT environment vars. +which('node', { path: someOtherPath }, function (er, resolved) { + if (er) + throw er + console.log('found at %j', resolved) +}) +``` + +## CLI USAGE + +Same as the BSD `which(1)` binary. + +``` +usage: which [-as] program ... +``` + +## OPTIONS + +You may pass an options object as the second argument. + +- `path`: Use instead of the `PATH` environment variable. +- `pathExt`: Use instead of the `PATHEXT` environment variable. +- `all`: Return all matches, instead of just the first one. Note that + this means the function returns an array of strings instead of a + single string. diff --git a/node_modules/which/bin/which b/node_modules/which/bin/which new file mode 100755 index 00000000..7cee3729 --- /dev/null +++ b/node_modules/which/bin/which @@ -0,0 +1,52 @@ +#!/usr/bin/env node +var which = require("../") +if (process.argv.length < 3) + usage() + +function usage () { + console.error('usage: which [-as] program ...') + process.exit(1) +} + +var all = false +var silent = false +var dashdash = false +var args = process.argv.slice(2).filter(function (arg) { + if (dashdash || !/^-/.test(arg)) + return true + + if (arg === '--') { + dashdash = true + return false + } + + var flags = arg.substr(1).split('') + for (var f = 0; f < flags.length; f++) { + var flag = flags[f] + switch (flag) { + case 's': + silent = true + break + case 'a': + all = true + break + default: + console.error('which: illegal option -- ' + flag) + usage() + } + } + return false +}) + +process.exit(args.reduce(function (pv, current) { + try { + var f = which.sync(current, { all: all }) + if (all) + f = f.join('\n') + if (!silent) + console.log(f) + return pv; + } catch (e) { + return 1; + } +}, 0)) diff --git a/node_modules/which/package.json b/node_modules/which/package.json new file mode 100644 index 00000000..0cba64d2 --- /dev/null +++ b/node_modules/which/package.json @@ -0,0 +1,65 @@ +{ + "_from": "which@^1.2.9", + "_id": "which@1.3.1", + "_inBundle": false, + "_integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "_location": "/which", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "which@^1.2.9", + "name": "which", + "escapedName": "which", + "rawSpec": "^1.2.9", + "saveSpec": null, + "fetchSpec": "^1.2.9" + }, + "_requiredBy": [ + "/cross-spawn" + ], + "_resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "_shasum": "a45043d54f5805316da8d62f9f50918d3da70b0a", + "_spec": "which@^1.2.9", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/cross-spawn", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me" + }, + "bin": { + "which": "./bin/which" + }, + "bugs": { + "url": "https://github.com/isaacs/node-which/issues" + }, + "bundleDependencies": false, + "dependencies": { + "isexe": "^2.0.0" + }, + "deprecated": false, + "description": "Like which(1) unix command. Find the first instance of an executable in the PATH.", + "devDependencies": { + "mkdirp": "^0.5.0", + "rimraf": "^2.6.2", + "tap": "^12.0.1" + }, + "files": [ + "which.js", + "bin/which" + ], + "homepage": "https://github.com/isaacs/node-which#readme", + "license": "ISC", + "main": "which.js", + "name": "which", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/node-which.git" + }, + "scripts": { + "changelog": "bash gen-changelog.sh", + "postversion": "npm run changelog && git add CHANGELOG.md && git commit -m 'update changelog - '${npm_package_version}", + "test": "tap test/*.js --cov" + }, + "version": "1.3.1" +} diff --git a/node_modules/which/which.js b/node_modules/which/which.js new file mode 100644 index 00000000..4347f91a --- /dev/null +++ b/node_modules/which/which.js @@ -0,0 +1,135 @@ +module.exports = which +which.sync = whichSync + +var isWindows = process.platform === 'win32' || + process.env.OSTYPE === 'cygwin' || + process.env.OSTYPE === 'msys' + +var path = require('path') +var COLON = isWindows ? ';' : ':' +var isexe = require('isexe') + +function getNotFoundError (cmd) { + var er = new Error('not found: ' + cmd) + er.code = 'ENOENT' + + return er +} + +function getPathInfo (cmd, opt) { + var colon = opt.colon || COLON + var pathEnv = opt.path || process.env.PATH || '' + var pathExt = [''] + + pathEnv = pathEnv.split(colon) + + var pathExtExe = '' + if (isWindows) { + pathEnv.unshift(process.cwd()) + pathExtExe = (opt.pathExt || process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM') + pathExt = pathExtExe.split(colon) + + + // Always test the cmd itself first. isexe will check to make sure + // it's found in the pathExt set. + if (cmd.indexOf('.') !== -1 && pathExt[0] !== '') + pathExt.unshift('') + } + + // If it has a slash, then we don't bother searching the pathenv. + // just check the file itself, and that's it. + if (cmd.match(/\//) || isWindows && cmd.match(/\\/)) + pathEnv = [''] + + return { + env: pathEnv, + ext: pathExt, + extExe: pathExtExe + } +} + +function which (cmd, opt, cb) { + if (typeof opt === 'function') { + cb = opt + opt = {} + } + + var info = getPathInfo(cmd, opt) + var pathEnv = info.env + var pathExt = info.ext + var pathExtExe = info.extExe + var found = [] + + ;(function F (i, l) { + if (i === l) { + if (opt.all && found.length) + return cb(null, found) + else + return cb(getNotFoundError(cmd)) + } + + var pathPart = pathEnv[i] + if (pathPart.charAt(0) === '"' && pathPart.slice(-1) === '"') + pathPart = pathPart.slice(1, -1) + + var p = path.join(pathPart, cmd) + if (!pathPart && (/^\.[\\\/]/).test(cmd)) { + p = cmd.slice(0, 2) + p + } + ;(function E (ii, ll) { + if (ii === ll) return F(i + 1, l) + var ext = pathExt[ii] + isexe(p + ext, { pathExt: pathExtExe }, function (er, is) { + if (!er && is) { + if (opt.all) + found.push(p + ext) + else + return cb(null, p + ext) + } + return E(ii + 1, ll) + }) + })(0, pathExt.length) + })(0, pathEnv.length) +} + +function whichSync (cmd, opt) { + opt = opt || {} + + var info = getPathInfo(cmd, opt) + var pathEnv = info.env + var pathExt = info.ext + var pathExtExe = info.extExe + var found = [] + + for (var i = 0, l = pathEnv.length; i < l; i ++) { + var pathPart = pathEnv[i] + if (pathPart.charAt(0) === '"' && pathPart.slice(-1) === '"') + pathPart = pathPart.slice(1, -1) + + var p = path.join(pathPart, cmd) + if (!pathPart && /^\.[\\\/]/.test(cmd)) { + p = cmd.slice(0, 2) + p + } + for (var j = 0, ll = pathExt.length; j < ll; j ++) { + var cur = p + pathExt[j] + var is + try { + is = isexe.sync(cur, { pathExt: pathExtExe }) + if (is) { + if (opt.all) + found.push(cur) + else + return cur + } + } catch (ex) {} + } + } + + if (opt.all && found.length) + return found + + if (opt.nothrow) + return null + + throw getNotFoundError(cmd) +} diff --git a/node_modules/wrappy/LICENSE b/node_modules/wrappy/LICENSE new file mode 100644 index 00000000..19129e31 --- /dev/null +++ b/node_modules/wrappy/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/wrappy/README.md b/node_modules/wrappy/README.md new file mode 100644 index 00000000..98eab252 --- /dev/null +++ b/node_modules/wrappy/README.md @@ -0,0 +1,36 @@ +# wrappy + +Callback wrapping utility + +## USAGE + +```javascript +var wrappy = require("wrappy") + +// var wrapper = wrappy(wrapperFunction) + +// make sure a cb is called only once +// See also: http://npm.im/once for this specific use case +var once = wrappy(function (cb) { + var called = false + return function () { + if (called) return + called = true + return cb.apply(this, arguments) + } +}) + +function printBoo () { + console.log('boo') +} +// has some rando property +printBoo.iAmBooPrinter = true + +var onlyPrintOnce = once(printBoo) + +onlyPrintOnce() // prints 'boo' +onlyPrintOnce() // does nothing + +// random property is retained! +assert.equal(onlyPrintOnce.iAmBooPrinter, true) +``` diff --git a/node_modules/wrappy/package.json b/node_modules/wrappy/package.json new file mode 100644 index 00000000..3d31a815 --- /dev/null +++ b/node_modules/wrappy/package.json @@ -0,0 +1,59 @@ +{ + "_from": "wrappy@1", + "_id": "wrappy@1.0.2", + "_inBundle": false, + "_integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "_location": "/wrappy", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "wrappy@1", + "name": "wrappy", + "escapedName": "wrappy", + "rawSpec": "1", + "saveSpec": null, + "fetchSpec": "1" + }, + "_requiredBy": [ + "/inflight", + "/once" + ], + "_resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "_shasum": "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f", + "_spec": "wrappy@1", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/once", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/npm/wrappy/issues" + }, + "bundleDependencies": false, + "dependencies": {}, + "deprecated": false, + "description": "Callback wrapping utility", + "devDependencies": { + "tap": "^2.3.1" + }, + "directories": { + "test": "test" + }, + "files": [ + "wrappy.js" + ], + "homepage": "https://github.com/npm/wrappy", + "license": "ISC", + "main": "wrappy.js", + "name": "wrappy", + "repository": { + "type": "git", + "url": "git+https://github.com/npm/wrappy.git" + }, + "scripts": { + "test": "tap --coverage test/*.js" + }, + "version": "1.0.2" +} diff --git a/node_modules/wrappy/wrappy.js b/node_modules/wrappy/wrappy.js new file mode 100644 index 00000000..bb7e7d6f --- /dev/null +++ b/node_modules/wrappy/wrappy.js @@ -0,0 +1,33 @@ +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) + + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + + return wrapper + + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} diff --git a/node_modules/xml-crypto/.gitattributes b/node_modules/xml-crypto/.gitattributes new file mode 100644 index 00000000..d7e3c6f1 --- /dev/null +++ b/node_modules/xml-crypto/.gitattributes @@ -0,0 +1,11 @@ +# Git to autodetect text files and normalise their line endings to LF when they are checked into your repository. +* text=auto + +# git won't try to convert this files +*.pem -text +*.der -text +test/static/**/*.xml -text + +# These files are text and should be normalized (Convert crlf => lf) +*.gitattributes text +.gitignore text \ No newline at end of file diff --git a/node_modules/xml-crypto/.travis.yml b/node_modules/xml-crypto/.travis.yml new file mode 100644 index 00000000..e5ad3c2b --- /dev/null +++ b/node_modules/xml-crypto/.travis.yml @@ -0,0 +1,11 @@ + +sudo: false +language: node_js +node_js: + - "0.12" + - "0.10" + +before_script: + - npm install + +script: npm test diff --git a/node_modules/xml-crypto/LICENSE b/node_modules/xml-crypto/LICENSE new file mode 100644 index 00000000..913c9aed --- /dev/null +++ b/node_modules/xml-crypto/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) Yaron Naveh + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/xml-crypto/README.md b/node_modules/xml-crypto/README.md new file mode 100644 index 00000000..f806e017 --- /dev/null +++ b/node_modules/xml-crypto/README.md @@ -0,0 +1,455 @@ +## xml-crypto + +[![Build Status](https://travis-ci.org/yaronn/xml-crypto.png?branch=master)](https://travis-ci.org/yaronn/xml-crypto) + +An xml digital signature library for node. Xml encryption is coming soon. Written in pure javascript! + +For more information visit [my blog](http://webservices20.blogspot.com/) or [my twitter](https://twitter.com/YaronNaveh). + +## Install +Install with [npm](http://github.com/isaacs/npm): + + npm install xml-crypto + +A pre requisite it to have [openssl](http://www.openssl.org/) installed and its /bin to be on the system path. I used version 1.0.1c but it should work on older versions too. + +## Supported Algorithms + +### Canonicalization and Transformation Algorithms + +* Canonicalization http://www.w3.org/TR/2001/REC-xml-c14n-20010315 +* Canonicalization with comments http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments +* Exclusive Canonicalization http://www.w3.org/2001/10/xml-exc-c14n# +* Exclusive Canonicalization with comments http://www.w3.org/2001/10/xml-exc-c14n#WithComments +* Enveloped Signature transform http://www.w3.org/2000/09/xmldsig#enveloped-signature + +### Hashing Algorithms + +* SHA1 digests http://www.w3.org/2000/09/xmldsig#sha1 +* SHA256 digests http://www.w3.org/2001/04/xmlenc#sha256 +* SHA512 digests http://www.w3.org/2001/04/xmlenc#sha512 + +### Signature Algorithms + +* RSA-SHA1 http://www.w3.org/2000/09/xmldsig#rsa-sha1 +* RSA-SHA256 http://www.w3.org/2001/04/xmldsig-more#rsa-sha256 +* RSA-SHA512 http://www.w3.org/2001/04/xmldsig-more#rsa-sha512 +* HMAC-SHA1 http://www.w3.org/2000/09/xmldsig#hmac-sha1 + +by default the following algorithms are used: + +*Canonicalization/Transformation Algorithm:* Exclusive Canonicalization http://www.w3.org/2001/10/xml-exc-c14n# + +*Hashing Algorithm:* SHA1 digest http://www.w3.org/2000/09/xmldsig#sha1 + +*Signature Algorithm:* RSA-SHA1 http://www.w3.org/2000/09/xmldsig#rsa-sha1 + +[You are able to extend xml-crypto with custom algorithms.](#customizing-algorithms) + + +## Signing Xml documents + +When signing a xml document you can specify the following properties on a `SignedXml` instance to customize the signature process: + +- `sign.signingKey` - **[required]** a `Buffer` or pem encoded `String` containing your private key +- `sign.keyInfoProvider` - **[optional]** a key info provider instance, see [customizing algorithms](#customizing-algorithms) for an implementation example +- `sign.signatureAlgorithm` - **[optional]** one of the supported [signature algorithms](#signature-algorithms). Ex: `sign.signatureAlgorithm = "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"` +- `sign.canonicalizationAlgorithm` - **[optional]** one of the supported [canonicalization algorithms](#canonicalization-and-transformation-algorithms). Ex: `sign.canonicalizationAlgorithm = "http://www.w3.org/2001/10/xml-exc-c14n#WithComments"` + +Use this code: + +`````javascript + var SignedXml = require('xml-crypto').SignedXml + , fs = require('fs') + + var xml = "" + + "" + + "Harry Potter" + + "" + + "" + + var sig = new SignedXml() + sig.addReference("//*[local-name(.)='book']") + sig.signingKey = fs.readFileSync("client.pem") + sig.computeSignature(xml) + fs.writeFileSync("signed.xml", sig.getSignedXml()) + +````` + +The result will be: + + +`````xml + + + Harry Potter + + + + + + + + + + + cdiS43aFDQMnb3X8yaIUej3+z9Q= + + + vhWzpQyIYuncHUZV9W...[long base64 removed]... + + +````` + +Note: + +To generate a `` element in the signature you must provide a key info implementation, see [customizing algorithms](#customizing-algorithms) for an example. + +## Verifying Xml documents + +When verifying a xml document you must specify the following properties on a ``SignedXml` instance: + +- `sign.keyInfoProvider` - **[required]** a key info provider instance containing your certificate, see [customizing algorithms](#customizing-algorithms) for an implementation example + +You can use any dom parser you want in your code (or none, depending on your usage). This sample uses [xmldom](https://github.com/jindw/xmldom) so you should install it first: + + npm install xmldom + +Example: + +`````javascript + var select = require('xml-crypto').xpath + , dom = require('xmldom').DOMParser + , SignedXml = require('xml-crypto').SignedXml + , FileKeyInfo = require('xml-crypto').FileKeyInfo + , fs = require('fs') + + var xml = fs.readFileSync("signed.xml").toString() + var doc = new dom().parseFromString(xml) + + var signature = select(doc, "/*/*[local-name(.)='Signature' and namespace-uri(.)='http://www.w3.org/2000/09/xmldsig#']")[0] + var sig = new SignedXml() + sig.keyInfoProvider = new FileKeyInfo("client_public.pem") + sig.loadSignature(signature) + var res = sig.checkSignature(xml) + if (!res) console.log(sig.validationErrors) +````` + +if the verification process fails `sig.validationErrors` will have the errors. + +In order to protect from some attacks we must check the content we want to use is the one that has been signed: +`````javascript + var elem = select(doc, "/xpath_to_interesting_element"); + var uri = sig.references[0].uri; // might not be 0 - depending on the document you verify + var id = (uri[0] === '#') ? uri.substring(1) : uri; + if (elem.getAttribute('ID') != id && elem.getAttribute('Id') != id && elem.getAttribute('id') != id) + throw new Error('the interesting element was not the one verified by the signature') +````` + +Note: + +The xml-crypto api requires you to supply it separately the xml signature ("<Signature>...</Signature>", in loadSignature) and the signed xml (in checkSignature). The signed xml may or may not contain the signature in it, but you are still required to supply the signature separately. + + +### Caring for Implicit transform +If you fail to verify signed XML, then one possible cause is that there are some hidden implicit transforms(#). +(#) Normalizing XML document to be verified. i.e. remove extra space within a tag, sorting attributes, importing namespace declared in ancestor nodes, etc. + +The reason for these implicit transform might come from [complex xml signature specification](https://www.w3.org/TR/2002/REC-xmldsig-core-20020212), +which makes XML developers confused and then leads to incorrect implementation for signing XML document. + +If you keep failing verification, it is worth trying to guess such a hidden transform and specify it to the option as below: + +```javascript +var option = {implicitTransforms: ["http://www.w3.org/TR/2001/REC-xml-c14n-20010315"]} +var sig = new SignedXml(null, option) +sig.keyInfoProvider = new FileKeyInfo("client_public.pem") +sig.loadSignature(signature) +var res = sig.checkSignature(xml) +``` + +You might find it difficult to guess such transforms, but there are typical transforms you can try. + +- http://www.w3.org/TR/2001/REC-xml-c14n-20010315 +- http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments +- http://www.w3.org/2001/10/xml-exc-c14n# +- http://www.w3.org/2001/10/xml-exc-c14n#WithComments + +## API + +### xpath + +See [xpath.js](https://github.com/yaronn/xpath.js) for usage. Note that this is actually using +[another library](https://github.com/goto100/xpath) as the underlying implementation. + +### SignedXml + +The `SignedXml` constructor provides an abstraction for sign and verify xml documents. The object is constructed using `new SignedXml([idMode])` where: + +- `idMode` - if the value of `"wssecurity"` is passed it will create/validate id's with the ws-security namespace. + +*API* + +A `SignedXml` object provides the following methods: + +To sign xml documents: + +- `addReference(xpath, [transforms], [digestAlgorithm])` - adds a reference to a xml element where: + - `xpath` - a string containing a XPath expression referencing a xml element + - `transforms` - an array of [transform algorithms](#canonicalization-and-transformation-algorithms), the referenced element will be transformed for each value in the array + - `digestAlgorithm` - one of the supported [hashing algorithms](#hashing-algorithms) +- `computeSignature(xml, [options])` - compute the signature of the given xml where: + - `xml` - a string containing a xml document + - `options` - an object with the following properties: + - `prefix` - adds this value as a prefix for the generated signature tags + - `attrs` - a hash of attributes and values `attrName: value` to add to the signature root node + - `location` - customize the location of the signature, pass an object with a `reference` key which should contain a XPath expression to a reference node, an `action` key which should contain one of the following values: `append`, `prepend`, `before`, `after` + - `existingPrefixes` - A hash of prefixes and namespaces `prefix: namespace` that shouldn't be in the signature because they already exist in the xml +- `getSignedXml()` - returns the original xml document with the signature in it, **must be called only after `computeSignature`** +- `getSignatureXml()` - returns just the signature part, **must be called only after `computeSignature`** +- `getOriginalXmlWithIds()` - returns the original xml with Id attributes added on relevant elements (required for validation), **must be called only after `computeSignature`** + +To verify xml documents: + +- `loadSignature(signatureXml)` - loads the signature where: + - `signatureXml` - a string or node object (like an [xml-dom](https://github.com/jindw/xmldom) node) containing the xml representation of the signature +- `checkSignature(xml)` - validates the given xml document and returns true if the validation was successful, `sig.validationErrors` will have the validation errors if any, where: + - `xml` - a string containing a xml document + + +### FileKeyInfo + +A basic key info provider implementation using `fs.readFileSync(file)`, is constructed using `new FileKeyInfo([file])` where: + +- `file` - a path to a pem encoded certificate + +See [verifying xml documents](#verifying-xml-documents) for an example usage + + +## Customizing Algorithms +The following sample shows how to sign a message using custom algorithms. + +First import some modules: + +`````javascript + var SignedXml = require('xml-crypto').SignedXml + , fs = require('fs') +````` + + +Now define the extension point you want to implement. You can choose one or more. + +A key info provider is used to extract and construct the key and the KeyInfo xml section. +Implement it if you want to create a signature with a KeyInfo section, or you want to read your key in a different way then the default file read option. +`````javascript + /**/ + function MyKeyInfo() { + this.getKeyInfo = function(key, prefix) { + prefix = prefix || '' + prefix = prefix ? prefix + ':' : prefix + return "<" + prefix + "X509Data>" + } + this.getKey = function(keyInfo) { + //you can use the keyInfo parameter to extract the key in any way you want + return fs.readFileSync("key.pem") + } + } +````` + +A custom hash algorithm is used to calculate digests. Implement it if you want a hash other than the default SHA1. + +`````javascript + function MyDigest() { + + + this.getHash = function(xml) { + return "the base64 hash representation of the given xml string" + } + + this.getAlgorithmName = function() { + return "http://myDigestAlgorithm" + } + } +````` + +A custom signing algorithm. The default is RSA-SHA1 +`````javascript + function MySignatureAlgorithm() { + + /*sign the given SignedInfo using the key. return base64 signature value*/ + this.getSignature = function(signedInfo, signingKey) { + return "signature of signedInfo as base64..." + } + + this.getAlgorithmName = function() { + return "http://mySigningAlgorithm" + } + + } +````` + +Custom transformation algorithm. The default is exclusive canonicalization. + +`````javascript + function MyTransformation() { + + /*given a node (from the xmldom module) return its canonical representation (as string)*/ + this.process = function(node) { + //you should apply your transformation before returning + return node.toString() + } + + this.getAlgorithmName = function() { + return "http://myTransformation" + } + } +````` +Custom canonicalization is actually the same as custom transformation. It is applied on the SignedInfo rather than on references. + +`````javascript + function MyCanonicalization() { + + /*given a node (from the xmldom module) return its canonical representation (as string)*/ + this.process = function(node) { + //you should apply your transformation before returning + return "< x/>" + } + + this.getAlgorithmName = function() { + return "http://myCanonicalization" + } + } +````` + +Now you need to register the new algorithms: + +`````javascript + /*register all the custom algorithms*/ + + SignedXml.CanonicalizationAlgorithms["http://MyTransformation"] = MyTransformation + SignedXml.CanonicalizationAlgorithms["http://MyCanonicalization"] = MyCanonicalization + SignedXml.HashAlgorithms["http://myDigestAlgorithm"] = MyDigest + SignedXml.SignatureAlgorithms["http://mySigningAlgorithm"] = MySignatureAlgorithm +````` + +Now do the signing. Note how we configure the signature to use the above algorithms: + +`````javascript + function signXml(xml, xpath, key, dest) + { + var sig = new SignedXml() + + /*configure the signature object to use the custom algorithms*/ + sig.signatureAlgorithm = "http://mySignatureAlgorithm" + sig.keyInfoProvider = new MyKeyInfo() + sig.canonicalizationAlgorithm = "http://MyCanonicalization" + sig.addReference("//*[local-name(.)='x']", ["http://MyTransformation"], "http://myDigestAlgorithm") + + sig.signingKey = fs.readFileSync(key) + sig.addReference(xpath) + sig.computeSignature(xml) + fs.writeFileSync(dest, sig.getSignedXml()) + } + + var xml = "" + + "" + + "Harry Potter" + + "" + "" + + signXml(xml, + "//*[local-name(.)='book']", + "client.pem", + "result.xml") +````` + +You can always look at the actual code as a sample (or drop me a [mail](mailto:yaronn01@gmail.com)). + + +## X.509 / Key formats +Xml-Crypto internally relies on node's crypto module. This means pem encoded certificates are supported. So to sign an xml use key.pem that looks like this (only the begining of the key content is shown): + + -----BEGIN PRIVATE KEY----- + MIICdwIBADANBgkqhkiG9w0... + -----END PRIVATE KEY----- + +And for verification use key_public.pem: + + -----BEGIN CERTIFICATE----- + MIIBxDCCAW6gAwIBAgIQxUSX... + -----END CERTIFICATE----- + +**Converting .pfx certificates to pem** + +If you have .pfx certificates you can convert them to .pem using [openssl](http://www.openssl.org/): + + openssl pkcs12 -in c:\certs\yourcert.pfx -out c:\certs\cag.pem + +Then you could use the result as is for the purpose of signing. For the purpose of validation open the resulting .pem with a text editor and copy from -----BEGIN CERTIFICATE----- to -----END CERTIFICATE----- (including) to a new text file and save it as .pem. + +## Examples + +- [how to sign a root node](#) *coming soon* + +###how to add a prefix for the signature### +Use the `prefix` option when calling `computeSignature` to add a prefix to the signature. +`````javascript +var SignedXml = require('xml-crypto').SignedXml + , fs = require('fs'); + +var xml = "" + + "" + + "Harry Potter" + + "" + + ""; + +var sig = new SignedXml(); +sig.addReference("//*[local-name(.)='book']"); +sig.signingKey = fs.readFileSync("client.pem"); +sig.computeSignature(xml,{ + prefix: 'ds' +}); +````` + +###how to specify the location of the signature### +Use the `location` option when calling `computeSignature` to move the signature around. +Set `action` to one of the following: +- append(default) - append to the end of the xml document +- prepend - prepend to the xml document +- before - prepend to a specific node (use the `referenceNode` property) +- after - append to specific node (use the `referenceNode` property) + +`````javascript +var SignedXml = require('xml-crypto').SignedXml + , fs = require('fs'); + +var xml = "" + + "" + + "Harry Potter" + + "" + + ""; + +var sig = new SignedXml(); +sig.addReference("//*[local-name(.)='book']"); +sig.signingKey = fs.readFileSync("client.pem"); +sig.computeSignature(xml,{ + location: { reference: "//*[local-name(.)='book']", action: "after" } //This will place the signature after the book element +}); + +````` +*more examples coming soon* + +## Development +The test framework is [nodeunit](https://github.com/caolan/nodeunit). To run tests use: + + $> npm test + +## More information +Visit my [blog](http://webservices20.blogspot.com/) or my [twitter](http://twitter.com/#!/YaronNaveh) + + +[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/yaronn/xml-crypto/trend.png)](https://bitdeli.com/free "Bitdeli Badge") + +## License + +This project is licensed under the [MIT License](http://opensource.org/licenses/MIT). See the [LICENSE](LICENSE) file for more info. diff --git a/node_modules/xml-crypto/example/client.pem b/node_modules/xml-crypto/example/client.pem new file mode 100644 index 00000000..b28231dd --- /dev/null +++ b/node_modules/xml-crypto/example/client.pem @@ -0,0 +1,16 @@ +-----BEGIN PRIVATE KEY----- +MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAL4vpoH3H3byehjj +7RAGxefGRATiq4mXtzc9Q91W7uT0DTaFEbjzVch9aGsNjmLs4QHsoZbuoUmi0st4 +x5z9SQpTAKC/dW8muzacT3E7dJJYh03MAO6RiH4LG34VRTq1SQN6qDt2rCK85eG4 +5NHI4jceptZNu6Zot1zyO5/PYuFpAgMBAAECgYAhspeyF3M/xB7WIixy1oBiXMLY +isESFAumgfhwU2LotkVRD6rgNl1QtMe3kCNWa9pCWQcYkxeI0IzA+JmFu2shVvoR +oL7eV4VCe1Af33z24E46+cY5grxNhHt/LyCnZKcitvCcrzXExUc5n6KngX0mMKgk +W7skZDwsnKzhyUV8wQJBAN2bQMeASQVOqdfqBdFgC/NPnKY2cuDi6h659QN1l+kg +X3ywdZ7KKftJo1G9l45SN9YpkyEd9zEO6PMFaufJvZUCQQDbtAWxk0i8BT3UTNWC +T/9bUQROPcGZagwwnRFByX7gpmfkf1ImIvbWVXSpX68/IjbjSkTw1nj/Yj1NwFZ0 +nxeFAkEAzPhRpXVBlPgaXkvlz7AfvY+wW4hXHyyi0YK8XdPBi25XA5SPZiylQfjt +Z6iN6qSfYqYXoPT/c0/QJR+orvVJNQJBANhRPNXljVTK2GDCseoXd/ZiI5ohxg+W +UaA/1fDvQsRQM7TQA4NXI7BO/YmSk4rW1jIeOxjiIspY4MFAIh+7UL0CQFL6zTg6 +wfeMlEZzvgqwCGoLuvTnqtvyg45z7pfcrg2cHdgCXIy9kErcjwGiu6BOevEA1qTW +Rk+bv0tknWvcz/s= +-----END PRIVATE KEY----- \ No newline at end of file diff --git a/node_modules/xml-crypto/example/client_public.pem b/node_modules/xml-crypto/example/client_public.pem new file mode 100644 index 00000000..430f46fa --- /dev/null +++ b/node_modules/xml-crypto/example/client_public.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBxDCCAW6gAwIBAgIQxUSXFzWJYYtOZnmmuOMKkjANBgkqhkiG9w0BAQQFADAW +MRQwEgYDVQQDEwtSb290IEFnZW5jeTAeFw0wMzA3MDgxODQ3NTlaFw0zOTEyMzEy +MzU5NTlaMB8xHTAbBgNVBAMTFFdTRTJRdWlja1N0YXJ0Q2xpZW50MIGfMA0GCSqG +SIb3DQEBAQUAA4GNADCBiQKBgQC+L6aB9x928noY4+0QBsXnxkQE4quJl7c3PUPd +Vu7k9A02hRG481XIfWhrDY5i7OEB7KGW7qFJotLLeMec/UkKUwCgv3VvJrs2nE9x +O3SSWIdNzADukYh+Cxt+FUU6tUkDeqg7dqwivOXhuOTRyOI3HqbWTbumaLdc8juf +z2LhaQIDAQABo0swSTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRjoRgwFjEU +MBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwDQYJKoZIhvcN +AQEEBQADQQAfIbnMPVYkNNfX1tG1F+qfLhHwJdfDUZuPyRPucWF5qkh6sSdWVBY5 +sT/txBnVJGziyO8DPYdu2fPMER8ajJfl +-----END CERTIFICATE----- \ No newline at end of file diff --git a/node_modules/xml-crypto/example/example.js b/node_modules/xml-crypto/example/example.js new file mode 100644 index 00000000..eda0c257 --- /dev/null +++ b/node_modules/xml-crypto/example/example.js @@ -0,0 +1,49 @@ +var select = require('xml-crypto').xpath + , dom = require('xmldom').DOMParser + , SignedXml = require('xml-crypto').SignedXml + , FileKeyInfo = require('xml-crypto').FileKeyInfo + , fs = require('fs') + +function signXml(xml, xpath, key, dest) +{ + var sig = new SignedXml() + sig.signingKey = fs.readFileSync(key) + sig.addReference(xpath) + sig.computeSignature(xml) + fs.writeFileSync(dest, sig.getSignedXml()) +} + +function validateXml(xml, key) +{ + var doc = new dom().parseFromString(xml) + var signature = select("/*/*[local-name(.)='Signature' and namespace-uri(.)='http://www.w3.org/2000/09/xmldsig#']", doc)[0] + var sig = new SignedXml() + sig.keyInfoProvider = new FileKeyInfo(key) + sig.loadSignature(signature.toString()) + var res = sig.checkSignature(xml) + if (!res) console.log(sig.validationErrors) + return res; +} + +var xml = "" + + "" + + "Harry Potter" + + "" + + "" + +//sign an xml document +signXml(xml, + "//*[local-name(.)='book']", + "client.pem", + "result.xml") + +console.log("xml signed succesfully") + +var signedXml = fs.readFileSync("result.xml").toString() +console.log("validating signature...") + +//validate an xml document +if (validateXml(signedXml, "client_public.pem")) + console.log("signature is valid") +else + console.log("signature not valid") diff --git a/node_modules/xml-crypto/index.js b/node_modules/xml-crypto/index.js new file mode 100644 index 00000000..23abdf5a --- /dev/null +++ b/node_modules/xml-crypto/index.js @@ -0,0 +1,6 @@ +var select = require('xpath').select + +module.exports = require('./lib/signed-xml') +module.exports.xpath = function(node, xpath) { + return select(xpath, node) +} \ No newline at end of file diff --git a/node_modules/xml-crypto/lib/c14n-canonicalization.js b/node_modules/xml-crypto/lib/c14n-canonicalization.js new file mode 100644 index 00000000..ac533481 --- /dev/null +++ b/node_modules/xml-crypto/lib/c14n-canonicalization.js @@ -0,0 +1,233 @@ +/* jshint laxcomma: true */ +var utils = require('./utils'); + +exports.C14nCanonicalization = C14nCanonicalization; +exports.C14nCanonicalizationWithComments = C14nCanonicalizationWithComments; + +function C14nCanonicalization() { + this.includeComments = false; +}; + +C14nCanonicalization.prototype.attrCompare = function(a,b) { + if (!a.namespaceURI && b.namespaceURI) { return -1; } + if (!b.namespaceURI && a.namespaceURI) { return 1; } + + var left = a.namespaceURI + a.localName + var right = b.namespaceURI + b.localName + + if (left===right) return 0 + else if (left 0){ + // Remove namespaces which are already present in nsListToRender + for(var p1 in ancestorNamespaces){ + if(!ancestorNamespaces.hasOwnProperty(p1)) continue; + var alreadyListed = false; + for(var p2 in nsListToRender){ + if(nsListToRender[p2].prefix === ancestorNamespaces[p1].prefix + && nsListToRender[p2].namespaceURI === ancestorNamespaces[p1].namespaceURI) + { + alreadyListed = true; + } + } + + if(!alreadyListed){ + nsListToRender.push(ancestorNamespaces[p1]); + } + } + } + + nsListToRender.sort(this.nsCompare); + + //render namespaces + for (a in nsListToRender) { + if (!nsListToRender.hasOwnProperty(a)) { continue; } + + p = nsListToRender[a]; + res.push(" xmlns:", p.prefix, '="', p.namespaceURI, '"'); + } + + return {"rendered": res.join(""), "newDefaultNs": newDefaultNs}; +}; + +C14nCanonicalization.prototype.processInner = function(node, prefixesInScope, defaultNs, defaultNsForPrefix, ancestorNamespaces) { + + if (node.nodeType === 8) { return this.renderComment(node); } + if (node.data) { return utils.encodeSpecialCharactersInText(node.data); } + + var i, pfxCopy + , ns = this.renderNs(node, prefixesInScope, defaultNs, defaultNsForPrefix, ancestorNamespaces) + , res = ["<", node.tagName, ns.rendered, this.renderAttrs(node, ns.newDefaultNs), ">"]; + + for (i = 0; i < node.childNodes.length; ++i) { + pfxCopy = prefixesInScope.slice(0); + res.push(this.processInner(node.childNodes[i], pfxCopy, ns.newDefaultNs, defaultNsForPrefix, [])); + } + + res.push(""); + return res.join(""); +}; + +// Thanks to deoxxa/xml-c14n for comment renderer +C14nCanonicalization.prototype.renderComment = function (node) { + + if (!this.includeComments) { return ""; } + + var isOutsideDocument = (node.ownerDocument === node.parentNode), + isBeforeDocument = null, + isAfterDocument = null; + + if (isOutsideDocument) { + var nextNode = node, + previousNode = node; + + while (nextNode !== null) { + if (nextNode === node.ownerDocument.documentElement) { + isBeforeDocument = true; + break; + } + + nextNode = nextNode.nextSibling; + } + + while (previousNode !== null) { + if (previousNode === node.ownerDocument.documentElement) { + isAfterDocument = true; + break; + } + + previousNode = previousNode.previousSibling; + } + } + + return (isAfterDocument ? "\n" : "") + "" + (isBeforeDocument ? "\n" : ""); +}; + +/** + * Perform canonicalization of the given node + * + * @param {Node} node + * @return {String} + * @api public + */ +C14nCanonicalization.prototype.process = function(node, options) { + options = options || {}; + var defaultNs = options.defaultNs || ""; + var defaultNsForPrefix = options.defaultNsForPrefix || {}; + var ancestorNamespaces = options.ancestorNamespaces || []; + + var res = this.processInner(node, [], defaultNs, defaultNsForPrefix, ancestorNamespaces); + return res; +}; + +C14nCanonicalization.prototype.getAlgorithmName = function() { + return "http://www.w3.org/TR/2001/REC-xml-c14n-20010315"; +}; + +// Add c14n#WithComments here (very simple subclass) +exports.C14nCanonicalizationWithComments = C14nCanonicalizationWithComments; + +function C14nCanonicalizationWithComments() { + C14nCanonicalization.call(this); + this.includeComments = true; +}; + +C14nCanonicalizationWithComments.prototype = Object.create(C14nCanonicalization.prototype); + +C14nCanonicalizationWithComments.prototype.constructor = C14nCanonicalizationWithComments; + +C14nCanonicalizationWithComments.prototype.getAlgorithmName = function() { + return "http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments"; +}; diff --git a/node_modules/xml-crypto/lib/enveloped-signature.js b/node_modules/xml-crypto/lib/enveloped-signature.js new file mode 100644 index 00000000..43f26972 --- /dev/null +++ b/node_modules/xml-crypto/lib/enveloped-signature.js @@ -0,0 +1,32 @@ +var xpath = require('xpath'); +var utils = require('./utils'); + +exports.EnvelopedSignature = EnvelopedSignature; + +function EnvelopedSignature() { +} + +EnvelopedSignature.prototype.process = function (node, options) { + if (null == options.signatureNode) { + // leave this for the moment... + var signature = xpath.select("./*[local-name(.)='Signature' and namespace-uri(.)='http://www.w3.org/2000/09/xmldsig#']", node)[0]; + if (signature) signature.parentNode.removeChild(signature); + return node; + } + var signatureNode = options.signatureNode; + var expectedSignatureValue = utils.findFirst(signatureNode, ".//*[local-name(.)='SignatureValue']/text()").data; + var signatures = xpath.select(".//*[local-name(.)='Signature' and namespace-uri(.)='http://www.w3.org/2000/09/xmldsig#']", node); + for (var h in signatures) { + if (!signatures.hasOwnProperty(h)) continue; + var signature = signatures[h]; + var signatureValue = utils.findFirst(signature, ".//*[local-name(.)='SignatureValue']/text()").data; + if (expectedSignatureValue === signatureValue) { + signature.parentNode.removeChild(signature); + } + } + return node; +}; + +EnvelopedSignature.prototype.getAlgorithmName = function () { + return "http://www.w3.org/2000/09/xmldsig#enveloped-signature"; +}; diff --git a/node_modules/xml-crypto/lib/exclusive-canonicalization.js b/node_modules/xml-crypto/lib/exclusive-canonicalization.js new file mode 100644 index 00000000..7566908b --- /dev/null +++ b/node_modules/xml-crypto/lib/exclusive-canonicalization.js @@ -0,0 +1,255 @@ +/* jshint laxcomma: true */ +var utils = require('./utils'); + +exports.ExclusiveCanonicalization = ExclusiveCanonicalization; +exports.ExclusiveCanonicalizationWithComments = ExclusiveCanonicalizationWithComments; + +function ExclusiveCanonicalization() { + this.includeComments = false; +}; + +ExclusiveCanonicalization.prototype.attrCompare = function(a,b) { + if (!a.namespaceURI && b.namespaceURI) { return -1; } + if (!b.namespaceURI && a.namespaceURI) { return 1; } + + var left = a.namespaceURI + a.localName + var right = b.namespaceURI + b.localName + + if (left===right) return 0 + else if (left= 0) { + nsListToRender.push({"prefix": attr.localName, "namespaceURI": attr.value}); + prefixesInScope.push({"prefix": attr.localName, "namespaceURI": attr.value}); + } + + //handle all prefixed attributes that are not xmlns definitions and where + //the prefix is not defined already + if (attr.prefix && !isPrefixInScope(prefixesInScope, attr.prefix, attr.namespaceURI) && attr.prefix!="xmlns" && attr.prefix!="xml") { + nsListToRender.push({"prefix": attr.prefix, "namespaceURI": attr.namespaceURI}); + prefixesInScope.push({"prefix": attr.prefix, "namespaceURI": attr.namespaceURI}); + } + } + } + + nsListToRender.sort(this.nsCompare); + + //render namespaces + for (a in nsListToRender) { + if (!nsListToRender.hasOwnProperty(a)) { continue; } + + p = nsListToRender[a]; + res.push(" xmlns:", p.prefix, '="', p.namespaceURI, '"'); + } + + return {"rendered": res.join(""), "newDefaultNs": newDefaultNs}; +}; + +ExclusiveCanonicalization.prototype.processInner = function(node, prefixesInScope, defaultNs, defaultNsForPrefix, inclusiveNamespacesPrefixList) { + + if (node.nodeType === 8) { return this.renderComment(node); } + if (node.data) { return utils.encodeSpecialCharactersInText(node.data); } + + var i, pfxCopy + , ns = this.renderNs(node, prefixesInScope, defaultNs, defaultNsForPrefix, inclusiveNamespacesPrefixList) + , res = ["<", node.tagName, ns.rendered, this.renderAttrs(node, ns.newDefaultNs), ">"]; + + for (i = 0; i < node.childNodes.length; ++i) { + pfxCopy = prefixesInScope.slice(0); + res.push(this.processInner(node.childNodes[i], pfxCopy, ns.newDefaultNs, defaultNsForPrefix, inclusiveNamespacesPrefixList)); + } + + res.push(""); + return res.join(""); +}; + +// Thanks to deoxxa/xml-c14n for comment renderer +ExclusiveCanonicalization.prototype.renderComment = function (node) { + + if (!this.includeComments) { return ""; } + + var isOutsideDocument = (node.ownerDocument === node.parentNode), + isBeforeDocument = null, + isAfterDocument = null; + + if (isOutsideDocument) { + var nextNode = node, + previousNode = node; + + while (nextNode !== null) { + if (nextNode === node.ownerDocument.documentElement) { + isBeforeDocument = true; + break; + } + + nextNode = nextNode.nextSibling; + } + + while (previousNode !== null) { + if (previousNode === node.ownerDocument.documentElement) { + isAfterDocument = true; + break; + } + + previousNode = previousNode.previousSibling; + } + } + + return (isAfterDocument ? "\n" : "") + "" + (isBeforeDocument ? "\n" : ""); +}; + +/** + * Perform canonicalization of the given node + * + * @param {Node} node + * @return {String} + * @api public + */ +ExclusiveCanonicalization.prototype.process = function(node, options) { + options = options || {}; + var inclusiveNamespacesPrefixList = options.inclusiveNamespacesPrefixList || []; + var defaultNs = options.defaultNs || ""; + var defaultNsForPrefix = options.defaultNsForPrefix || {}; + if (!(inclusiveNamespacesPrefixList instanceof Array)) { inclusiveNamespacesPrefixList = inclusiveNamespacesPrefixList.split(' '); } + + var ancestorNamespaces = options.ancestorNamespaces || []; + + /** + * If the inclusiveNamespacesPrefixList has not been explicitly provided then look it up in CanonicalizationMethod/InclusiveNamespaces + */ + if (inclusiveNamespacesPrefixList.length == 0) { + var CanonicalizationMethod = utils.findChilds(node, "CanonicalizationMethod") + if (CanonicalizationMethod.length != 0) { + var inclusiveNamespaces = utils.findChilds(CanonicalizationMethod[0], "InclusiveNamespaces") + if (inclusiveNamespaces.length != 0) { + inclusiveNamespacesPrefixList = inclusiveNamespaces[0].getAttribute('PrefixList').split(" "); + } + } + } + + /** + * If you have a PrefixList then use it and the ancestors to add the necessary namespaces + */ + if (inclusiveNamespacesPrefixList) { + var prefixList = inclusiveNamespacesPrefixList instanceof Array ? inclusiveNamespacesPrefixList : inclusiveNamespacesPrefixList.split(' '); + prefixList.forEach(function (prefix) { + if (ancestorNamespaces) { + ancestorNamespaces.forEach(function (ancestorNamespace) { + if (prefix == ancestorNamespace.prefix) { + node.setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:' + prefix, ancestorNamespace.namespaceURI); + } + }) + } + }) + } + + var res = this.processInner(node, [], defaultNs, defaultNsForPrefix, inclusiveNamespacesPrefixList); + return res; +}; + +ExclusiveCanonicalization.prototype.getAlgorithmName = function() { + return "http://www.w3.org/2001/10/xml-exc-c14n#"; +}; + +// Add c14n#WithComments here (very simple subclass) +exports.ExclusiveCanonicalizationWithComments = ExclusiveCanonicalizationWithComments; + +function ExclusiveCanonicalizationWithComments() { + ExclusiveCanonicalization.call(this); + this.includeComments = true; +}; + +ExclusiveCanonicalizationWithComments.prototype = Object.create(ExclusiveCanonicalization.prototype); + +ExclusiveCanonicalizationWithComments.prototype.constructor = ExclusiveCanonicalizationWithComments; + +ExclusiveCanonicalizationWithComments.prototype.getAlgorithmName = function() { + return "http://www.w3.org/2001/10/xml-exc-c14n#WithComments"; +}; diff --git a/node_modules/xml-crypto/lib/signed-xml.js b/node_modules/xml-crypto/lib/signed-xml.js new file mode 100644 index 00000000..1b68290f --- /dev/null +++ b/node_modules/xml-crypto/lib/signed-xml.js @@ -0,0 +1,941 @@ +var xpath = require('xpath') + , Dom = require('xmldom').DOMParser + , utils = require('./utils') + , c14n = require('./c14n-canonicalization') + , execC14n = require('./exclusive-canonicalization') + , EnvelopedSignature = require('./enveloped-signature').EnvelopedSignature + , crypto = require('crypto') + , fs = require('fs') + +exports.SignedXml = SignedXml +exports.FileKeyInfo = FileKeyInfo + +/** + * A key info provider implementation + * + */ +function FileKeyInfo(file) { + this.file = file + + this.getKeyInfo = function(key, prefix) { + prefix = prefix || '' + prefix = prefix ? prefix + ':' : prefix + return "<" + prefix + "X509Data>" + } + + this.getKey = function(keyInfo) { + return fs.readFileSync(this.file) + } +} + +/** + * Hash algorithm implementation + * + */ +function SHA1() { + + this.getHash = function(xml) { + var shasum = crypto.createHash('sha1') + shasum.update(xml, 'utf8') + var res = shasum.digest('base64') + return res + } + + this.getAlgorithmName = function() { + return "http://www.w3.org/2000/09/xmldsig#sha1" + } +} + +function SHA256() { + + this.getHash = function(xml) { + var shasum = crypto.createHash('sha256') + shasum.update(xml, 'utf8') + var res = shasum.digest('base64') + return res + } + + this.getAlgorithmName = function() { + return "http://www.w3.org/2001/04/xmlenc#sha256" + } +} + +function SHA512() { + + this.getHash = function(xml) { + var shasum = crypto.createHash('sha512') + shasum.update(xml, 'utf8') + var res = shasum.digest('base64') + return res + } + + this.getAlgorithmName = function() { + return "http://www.w3.org/2001/04/xmlenc#sha512" + } +} + + +/** + * Signature algorithm implementation + * + */ +function RSASHA1() { + + /** + * Sign the given string using the given key + * + */ + this.getSignature = function(signedInfo, signingKey) { + var signer = crypto.createSign("RSA-SHA1") + signer.update(signedInfo) + var res = signer.sign(signingKey, 'base64') + return res + } + + /** + * Verify the given signature of the given string using key + * + */ + this.verifySignature = function(str, key, signatureValue) { + var verifier = crypto.createVerify("RSA-SHA1") + verifier.update(str) + var res = verifier.verify(key, signatureValue, 'base64') + return res + } + + this.getAlgorithmName = function() { + return "http://www.w3.org/2000/09/xmldsig#rsa-sha1" + } + +} + + +/** + * Signature algorithm implementation + * + */ +function RSASHA256() { + + /** + * Sign the given string using the given key + * + */ + this.getSignature = function(signedInfo, signingKey) { + var signer = crypto.createSign("RSA-SHA256") + signer.update(signedInfo) + var res = signer.sign(signingKey, 'base64') + return res + } + + /** + * Verify the given signature of the given string using key + * + */ + this.verifySignature = function(str, key, signatureValue) { + var verifier = crypto.createVerify("RSA-SHA256") + verifier.update(str) + var res = verifier.verify(key, signatureValue, 'base64') + return res + } + + this.getAlgorithmName = function() { + return "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" + } + +} + +/** + * Signature algorithm implementation + * + */ +function RSASHA512() { + + /** + * Sign the given string using the given key + * + */ + this.getSignature = function(signedInfo, signingKey) { + var signer = crypto.createSign("RSA-SHA512") + signer.update(signedInfo) + var res = signer.sign(signingKey, 'base64') + return res + } + + /** + * Verify the given signature of the given string using key + * + */ + this.verifySignature = function(str, key, signatureValue) { + var verifier = crypto.createVerify("RSA-SHA512") + verifier.update(str) + var res = verifier.verify(key, signatureValue, 'base64') + return res + } + + this.getAlgorithmName = function() { + return "http://www.w3.org/2001/04/xmldsig-more#rsa-sha512" + } +} + +function HMACSHA1() { + this.verifySignature = function(str, key, signatureValue) { + var verifier = crypto.createHmac("SHA1", key); + verifier.update(str); + var res = verifier.digest('base64'); + return res === signatureValue; + }; + + this.getAlgorithmName = function() { + return "http://www.w3.org/2000/09/xmldsig#hmac-sha1"; + }; + + this.getSignature = function(signedInfo, signingKey) { + var verifier = crypto.createHmac("SHA1", signingKey); + verifier.update(signedInfo); + var res = verifier.digest('base64'); + return res; + }; +} + + + +/** + * Extract ancestor namespaces in order to import it to root of document subset + * which is being canonicalized for non-exclusive c14n. + * + * @param {object} doc - Usually a product from `new DOMParser().parseFromString()` + * @param {string} docSubsetXpath - xpath query to get document subset being canonicalized + * @returns {Array} i.e. [{prefix: "saml", namespaceURI: "urn:oasis:names:tc:SAML:2.0:assertion"}] + */ +function findAncestorNs(doc, docSubsetXpath){ + var docSubset = xpath.select(docSubsetXpath, doc); + + if(!Array.isArray(docSubset) || docSubset.length < 1){ + return []; + } + + // Remove duplicate on ancestor namespace + var ancestorNs = collectAncestorNamespaces(docSubset[0]); + var ancestorNsWithoutDuplicate = []; + for(var i=0;i 0){ + for(var i=0;i 0) { + elem = tmp_elem; + elemXpath = tmp_elemXpath; + } + } + if (num_elements_for_id > 1) { + throw new Error('Cannot validate a document which contains multiple elements with the ' + + 'same value for the ID / Id / Id attributes, in order to prevent ' + + 'signature wrapping attack.'); + } + + ref.xpath = elemXpath; + } + + if (elem.length==0) { + this.validationErrors.push("invalid signature: the signature refernces an element with uri "+ + ref.uri + " but could not find such element in the xml") + return false + } + + var canonXml = this.getCanonReferenceXml(doc, ref, elem[0]) + + var hash = this.findHashAlgorithm(ref.digestAlgorithm) + var digest = hash.getHash(canonXml) + + if (!validateDigestValue(digest, ref.digestValue)) { + this.validationErrors.push("invalid signature: for uri " + ref.uri + + " calculated digest is " + digest + + " but the xml to validate supplies digest " + ref.digestValue) + + return false + } + } + return true +} + +function validateDigestValue(digest, expectedDigest) { + var buffer, expectedBuffer; + + var majorVersion = /^v(\d+)/.exec(process.version)[1]; + + if (+majorVersion >= 6) { + buffer = Buffer.from(digest, 'base64'); + expectedBuffer = Buffer.from(expectedDigest, 'base64'); + } else { + // Compatibility with Node < 5.10.0 + buffer = new Buffer(digest, 'base64'); + expectedBuffer = new Buffer(expectedDigest, 'base64'); + } + + if (typeof buffer.equals === 'function') { + return buffer.equals(expectedBuffer); + } + + // Compatibility with Node < 0.11.13 + if (buffer.length !== expectedBuffer.length) { + return false; + } + + for (var i = 0; i < buffer.length; i++) { + if (buffer[i] !== expectedBuffer[i]) { + return false; + } + } + + return true; +} + +SignedXml.prototype.loadSignature = function(signatureNode) { + if (typeof signatureNode === 'string') { + this.signatureNode = signatureNode = new Dom().parseFromString(signatureNode); + } else { + this.signatureNode = signatureNode; + } + + this.signatureXml = signatureNode.toString(); + + var nodes = xpath.select(".//*[local-name(.)='CanonicalizationMethod']/@Algorithm", signatureNode) + if (nodes.length==0) throw new Error("could not find CanonicalizationMethod/@Algorithm element") + this.canonicalizationAlgorithm = nodes[0].value + + this.signatureAlgorithm = + utils.findFirst(signatureNode, ".//*[local-name(.)='SignatureMethod']/@Algorithm").value + + this.references = [] + var references = xpath.select(".//*[local-name(.)='SignedInfo']/*[local-name(.)='Reference']", signatureNode) + if (references.length == 0) throw new Error("could not find any Reference elements") + + for (var i in references) { + if (!references.hasOwnProperty(i)) continue; + + this.loadReference(references[i]) + } + + this.signatureValue = + utils.findFirst(signatureNode, ".//*[local-name(.)='SignatureValue']/text()").data.replace(/\r?\n/g, '') + + this.keyInfo = xpath.select(".//*[local-name(.)='KeyInfo']", signatureNode) +} + +/** + * Load the reference xml node to a model + * + */ +SignedXml.prototype.loadReference = function(ref) { + var nodes = utils.findChilds(ref, "DigestMethod") + if (nodes.length==0) throw new Error("could not find DigestMethod in reference " + ref.toString()) + var digestAlgoNode = nodes[0] + + var attr = utils.findAttr(digestAlgoNode, "Algorithm") + if (!attr) throw new Error("could not find Algorithm attribute in node " + digestAlgoNode.toString()) + var digestAlgo = attr.value + + nodes = utils.findChilds(ref, "DigestValue") + if (nodes.length==0) throw new Error("could not find DigestValue node in reference " + ref.toString()) + if (nodes[0].childNodes.length==0 || !nodes[0].firstChild.data) + { + throw new Error("could not find the value of DigestValue in " + nodes[0].toString()) + } + var digestValue = nodes[0].firstChild.data + + var transforms = [] + var inclusiveNamespacesPrefixList; + nodes = utils.findChilds(ref, "Transforms") + if (nodes.length!=0) { + var transformsNode = nodes[0] + var transformsAll = utils.findChilds(transformsNode, "Transform") + for (var t in transformsAll) { + if (!transformsAll.hasOwnProperty(t)) continue; + + var trans = transformsAll[t] + transforms.push(utils.findAttr(trans, "Algorithm").value) + } + + var inclusiveNamespaces = utils.findChilds(trans, "InclusiveNamespaces") + if (inclusiveNamespaces.length > 0) { + //Should really only be one prefix list, but maybe there's some circumstances where more than one to lets handle it + for (var i = 0; i 0); + if(hasImplicitTransforms){ + this.implicitTransforms.forEach(function(t){ + transforms.push(t); + }); + } + +/** + * DigestMethods take an octet stream rather than a node set. If the output of the last transform is a node set, we + * need to canonicalize the node set to an octet stream using non-exclusive canonicalization. If there are no + * transforms, we need to canonicalize because URI dereferencing for a same-document reference will return a node-set. + * See: + * https://www.w3.org/TR/xmldsig-core1/#sec-DigestMethod + * https://www.w3.org/TR/xmldsig-core1/#sec-ReferenceProcessingModel + * https://www.w3.org/TR/xmldsig-core1/#sec-Same-Document + */ + if (transforms.length === 0 || transforms[transforms.length - 1] === "http://www.w3.org/2000/09/xmldsig#enveloped-signature") { + transforms.push("http://www.w3.org/TR/2001/REC-xml-c14n-20010315") + } + + this.addReference(null, transforms, digestAlgo, utils.findAttr(ref, "URI").value, digestValue, inclusiveNamespacesPrefixList, false) +} + +SignedXml.prototype.addReference = function(xpath, transforms, digestAlgorithm, uri, digestValue, inclusiveNamespacesPrefixList, isEmptyUri) { + this.references.push({ + "xpath": xpath, + "transforms": transforms ? transforms : ["http://www.w3.org/2001/10/xml-exc-c14n#"] , + "digestAlgorithm": digestAlgorithm ? digestAlgorithm : "http://www.w3.org/2000/09/xmldsig#sha1", + "uri": uri, + "digestValue": digestValue, + "inclusiveNamespacesPrefixList": inclusiveNamespacesPrefixList, + "isEmptyUri": isEmptyUri + }); +} + +/** + * Compute the signature of the given xml (usign the already defined settings) + * + * Options: + * + * - `prefix` {String} Adds a prefix for the generated signature tags + * - `attrs` {Object} A hash of attributes and values `attrName: value` to add to the signature root node + * - `location` {{ reference: String, action: String }} + * - `existingPrefixes` {Object} A hash of prefixes and namespaces `prefix: namespace` already in the xml + * An object with a `reference` key which should + * contain a XPath expression, an `action` key which + * should contain one of the following values: + * `append`, `prepend`, `before`, `after` + * + */ +SignedXml.prototype.computeSignature = function(xml, opts) { + var doc = new Dom().parseFromString(xml), + xmlNsAttr = "xmlns", + signatureAttrs = [], + location, + attrs, + prefix, + currentPrefix; + + var validActions = ["append", "prepend", "before", "after"]; + + opts = opts || {}; + prefix = opts.prefix; + attrs = opts.attrs || {}; + location = opts.location || {}; + existingPrefixes = opts.existingPrefixes || {}; + // defaults to the root node + location.reference = location.reference || "/*"; + // defaults to append action + location.action = location.action || "append"; + + if (validActions.indexOf(location.action) === -1) { + throw new Error("location.action option has an invalid action: " + location.action + + ", must be any of the following values: " + validActions.join(", ")); + } + + // automatic insertion of `:` + if (prefix) { + xmlNsAttr += ":" + prefix; + currentPrefix = prefix + ":"; + } else { + currentPrefix = ""; + } + + Object.keys(attrs).forEach(function(name) { + if (name !== "xmlns" && name !== xmlNsAttr) { + signatureAttrs.push(name + "=\"" + attrs[name] + "\""); + } + }); + + // add the xml namespace attribute + signatureAttrs.push(xmlNsAttr + "=\"http://www.w3.org/2000/09/xmldsig#\""); + + var signatureXml = "<" + currentPrefix + "Signature " + signatureAttrs.join(" ") + ">" + + signatureXml += this.createSignedInfo(doc, prefix); + signatureXml += this.getKeyInfo(prefix) + signatureXml += "" + + this.originalXmlWithIds = doc.toString() + + var existingPrefixesString = "" + Object.keys(existingPrefixes).forEach(function(key) { + existingPrefixesString += "xmlns:" + key + '="' + existingPrefixes[key] + '" ' + }); + + // A trick to remove the namespaces that already exist in the xml + // This only works if the prefix and namespace match with those in te xml + var dummySignatureWrapper = "" + signatureXml + "" + var xml = new Dom().parseFromString(dummySignatureWrapper) + var signatureDoc = xml.documentElement.firstChild; + + var referenceNode = xpath.select(location.reference, doc); + + if (!referenceNode || referenceNode.length === 0) { + throw new Error("the following xpath cannot be used because it was not found: " + location.reference); + } + + referenceNode = referenceNode[0]; + + if (location.action === "append") { + referenceNode.appendChild(signatureDoc); + } else if (location.action === "prepend") { + referenceNode.insertBefore(signatureDoc, referenceNode.firstChild); + } else if (location.action === "before") { + referenceNode.parentNode.insertBefore(signatureDoc, referenceNode); + } else if (location.action === "after") { + referenceNode.parentNode.insertBefore(signatureDoc, referenceNode.nextSibling); + } + + this.signatureNode = signatureDoc + this.calculateSignatureValue(doc) + + var signedInfoNode = utils.findChilds(this.signatureNode, "SignedInfo") + if (signedInfoNode.length==0) throw new Error("could not find SignedInfo element in the message") + + signedInfoNode = signedInfoNode[0]; + signatureDoc.insertBefore(this.createSignature(prefix), signedInfoNode.nextSibling) + + this.signatureXml = signatureDoc.toString() + this.signedXml = doc.toString() +} + +SignedXml.prototype.getKeyInfo = function(prefix) { + var res = "" + var currentPrefix + + currentPrefix = prefix || '' + currentPrefix = currentPrefix ? currentPrefix + ':' : currentPrefix + + if (this.keyInfoProvider) { + res += "<" + currentPrefix + "KeyInfo>" + res += this.keyInfoProvider.getKeyInfo(this.signingKey, prefix) + res += "" + } + return res +} + +/** + * Generate the Reference nodes (as part of the signature process) + * + */ +SignedXml.prototype.createReferences = function(doc, prefix) { + + var res = "" + + prefix = prefix || '' + prefix = prefix ? prefix + ':' : prefix + + for (var n in this.references) { + if (!this.references.hasOwnProperty(n)) continue; + + var ref = this.references[n] + , nodes = xpath.select(ref.xpath, doc) + + if (nodes.length==0) { + throw new Error('the following xpath cannot be signed because it was not found: ' + ref.xpath) + } + + for (var h in nodes) { + if (!nodes.hasOwnProperty(h)) continue; + + var node = nodes[h] + if (ref.isEmptyUri) { + res += "<" + prefix + "Reference URI=\"\">" + } + else { + var id = this.ensureHasId(node); + ref.uri = id + res += "<" + prefix + "Reference URI=\"#" + id + "\">" + } + res += "<" + prefix + "Transforms>" + for (var t in ref.transforms) { + if (!ref.transforms.hasOwnProperty(t)) continue; + + var trans = ref.transforms[t] + var transform = this.findCanonicalizationAlgorithm(trans) + res += "<" + prefix + "Transform Algorithm=\"" + transform.getAlgorithmName() + "\" />" + } + + var canonXml = this.getCanonReferenceXml(doc, ref, node) + + var digestAlgorithm = this.findHashAlgorithm(ref.digestAlgorithm) + res += ""+ + "<" + prefix + "DigestMethod Algorithm=\"" + digestAlgorithm.getAlgorithmName() + "\" />"+ + "<" + prefix + "DigestValue>" + digestAlgorithm.getHash(canonXml) + ""+ + "" + } + } + + return res +} + +SignedXml.prototype.getCanonXml = function(transforms, node, options) { + options = options || {}; + options.defaultNsForPrefix = options.defaultNsForPrefix || SignedXml.defaultNsForPrefix; + options.signatureNode = this.signatureNode; + + var canonXml = node.cloneNode(true) // Deep clone + + for (var t in transforms) { + if (!transforms.hasOwnProperty(t)) continue; + + var transform = this.findCanonicalizationAlgorithm(transforms[t]) + canonXml = transform.process(canonXml, options); + //TODO: currently transform.process may return either Node or String value (enveloped transformation returns Node, exclusive-canonicalization returns String). + //This eitehr needs to be more explicit in the API, or all should return the same. + //exclusive-canonicalization returns String since it builds the Xml by hand. If it had used xmldom it would inccorectly minimize empty tags + //to instead of and also incorrectly handle some delicate line break issues. + //enveloped transformation returns Node since if it would return String consider this case: + // + //if only y is the node to sign then a string would be without the definition of the p namespace. probably xmldom toString() should have added it. + } + return canonXml.toString() +} + +/** + * Ensure an element has Id attribute. If not create it with unique value. + * Work with both normal and wssecurity Id flavour + */ +SignedXml.prototype.ensureHasId = function(node) { + var attr + + if (this.idMode=="wssecurity") { + attr = utils.findAttr(node, + "Id", + "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd") + } + else { + for (var index in this.idAttributes) { + if (!this.idAttributes.hasOwnProperty(index)) continue; + + attr = utils.findAttr(node, this.idAttributes[index], null); + if (attr) break; + } + } + + if (attr) return attr.value + + //add the attribute + var id = "_" + this.id++ + + if (this.idMode=="wssecurity") { + node.setAttributeNS("http://www.w3.org/2000/xmlns/", + "xmlns:wsu", + "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd") + node.setAttributeNS("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd", + "wsu:Id", + id) + } + else { + node.setAttribute("Id", id) + } + + return id +} + +/** + * Create the SignedInfo element + * + */ +SignedXml.prototype.createSignedInfo = function(doc, prefix) { + var transform = this.findCanonicalizationAlgorithm(this.canonicalizationAlgorithm) + var algo = this.findSignatureAlgorithm(this.signatureAlgorithm) + var currentPrefix + + currentPrefix = prefix || '' + currentPrefix = currentPrefix ? currentPrefix + ':' : currentPrefix + + var res = "<" + currentPrefix + "SignedInfo>" + res += "<" + currentPrefix + "CanonicalizationMethod Algorithm=\"" + transform.getAlgorithmName() + "\" />" + + "<" + currentPrefix + "SignatureMethod Algorithm=\"" + algo.getAlgorithmName() + "\" />" + + res += this.createReferences(doc, prefix) + res += "" + return res +} + +/** + * Create the Signature element + * + */ +SignedXml.prototype.createSignature = function(prefix) { + var xmlNsAttr = 'xmlns' + + if (prefix) { + xmlNsAttr += ':' + prefix; + prefix += ':'; + } else { + prefix = ''; + } + + var signatureValueXml = "<" + prefix + "SignatureValue>" + this.signatureValue + "" + //the canonicalization requires to get a valid xml node. + //we need to wrap the info in a dummy signature since it contains the default namespace. + var dummySignatureWrapper = "<" + prefix + "Signature " + xmlNsAttr + "=\"http://www.w3.org/2000/09/xmldsig#\">" + + signatureValueXml + + "" + + var doc = new Dom().parseFromString(dummySignatureWrapper) + return doc.documentElement.firstChild; +} + + +SignedXml.prototype.getSignatureXml = function() { + return this.signatureXml +} + +SignedXml.prototype.getOriginalXmlWithIds = function() { + return this.originalXmlWithIds +} + +SignedXml.prototype.getSignedXml = function() { + return this.signedXml +} \ No newline at end of file diff --git a/node_modules/xml-crypto/lib/utils.js b/node_modules/xml-crypto/lib/utils.js new file mode 100644 index 00000000..914965bb --- /dev/null +++ b/node_modules/xml-crypto/lib/utils.js @@ -0,0 +1,83 @@ +var select = require('xpath').select + +function findAttr(node, localName, namespace) { + for (var i = 0; i': '>', + '\r': ' ' +} + +function encodeSpecialCharactersInAttribute(attributeValue){ + return attributeValue + .replace(/[\r\n\t ]+/g, ' ') // White space normalization (Note: this should normally be done by the xml parser) See: https://www.w3.org/TR/xml/#AVNormalize + .replace(/([&<"\r\n\t])/g, function(str, item){ + // Special character normalization. See: + // - https://www.w3.org/TR/xml-c14n#ProcessingModel (Attribute Nodes) + // - https://www.w3.org/TR/xml-c14n#Example-Chars + return xml_special_to_encoded_attribute[item] + }) +} + +function encodeSpecialCharactersInText(text){ + return text + .replace(/\r\n?/g, '\n') // Line ending normalization (Note: this should normally be done by the xml parser). See: https://www.w3.org/TR/xml/#sec-line-ends + .replace(/([&<>\r])/g, function(str, item){ + // Special character normalization. See: + // - https://www.w3.org/TR/xml-c14n#ProcessingModel (Text Nodes) + // - https://www.w3.org/TR/xml-c14n#Example-Chars + return xml_special_to_encoded_text[item] + }) +} + + +exports.findAttr = findAttr +exports.findChilds = findChilds +exports.encodeSpecialCharactersInAttribute = encodeSpecialCharactersInAttribute +exports.encodeSpecialCharactersInText = encodeSpecialCharactersInText +exports.findFirst = findFirst diff --git a/node_modules/xml-crypto/package.json b/node_modules/xml-crypto/package.json new file mode 100644 index 00000000..433f5b16 --- /dev/null +++ b/node_modules/xml-crypto/package.json @@ -0,0 +1,73 @@ +{ + "_from": "xml-crypto@^1.4.0", + "_id": "xml-crypto@1.4.0", + "_inBundle": false, + "_integrity": "sha512-K8FRdRxICVulK4WhiTUcJrRyAIJFPVOqxfurA3x/JlmXBTxy+SkEENF6GeRt7p/rB6WSOUS9g0gXNQw5n+407g==", + "_location": "/xml-crypto", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "xml-crypto@^1.4.0", + "name": "xml-crypto", + "escapedName": "xml-crypto", + "rawSpec": "^1.4.0", + "saveSpec": null, + "fetchSpec": "^1.4.0" + }, + "_requiredBy": [ + "/strong-soap" + ], + "_resolved": "https://registry.npmjs.org/xml-crypto/-/xml-crypto-1.4.0.tgz", + "_shasum": "de1cec8cd31cbd689cd90d3d6e8a27d4ae807de7", + "_spec": "xml-crypto@^1.4.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/strong-soap", + "author": { + "name": "Yaron Naveh", + "email": "yaronn01@gmail.com", + "url": "http://webservices20.blogspot.com/" + }, + "bugs": { + "url": "https://github.com/yaronn/xml-crypto/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "LoneRifle", + "email": "LoneRifle@users.noreply.github.com" + } + ], + "dependencies": { + "xmldom": "0.1.27", + "xpath": "0.0.27" + }, + "deprecated": false, + "description": "Xml digital signature and encryption library for Node.js", + "devDependencies": { + "nodeunit": "^0.11.3" + }, + "directories": { + "lib": "./lib" + }, + "engines": { + "node": ">=0.4.0" + }, + "homepage": "https://github.com/yaronn/xml-crypto#readme", + "keywords": [ + "xml", + "digital signature", + "xml encryption", + "x.509 certificate" + ], + "license": "MIT", + "main": "./index.js", + "name": "xml-crypto", + "repository": { + "type": "git", + "url": "git+https://github.com/yaronn/xml-crypto.git" + }, + "scripts": { + "test": "nodeunit ./test/canonicalization-unit-tests.js ./test/c14nWithComments-unit-tests.js ./test/signature-unit-tests.js ./test/saml-response-test.js ./test/signature-integration-tests.js ./test/document-test.js ./test/wsfed-metadata-test.js ./test/hmac-tests.js ./test/c14n-non-exclusive-unit-test.js" + }, + "version": "1.4.0" +} diff --git a/node_modules/xmlbuilder/CHANGELOG.md b/node_modules/xmlbuilder/CHANGELOG.md new file mode 100644 index 00000000..e11c0399 --- /dev/null +++ b/node_modules/xmlbuilder/CHANGELOG.md @@ -0,0 +1,438 @@ +# Change Log + +All notable changes to this project are documented in this file. This project adheres to [Semantic Versioning](http://semver.org/#semantic-versioning-200). + +## [10.1.0] - 2018-10-10 +- Added the `skipNullNodes` option to skip nodes with null values. See [#158](https://github.com/oozcitak/xmlbuilder-js/issues/158). + +## [10.0.0] - 2018-04-26 +- Added current indentation level as a parameter to the onData function when in callback mode. See [#125](https://github.com/oozcitak/xmlbuilder-js/issues/125). +- Added name of the current node and parent node to error messages where possible. See [#152](https://github.com/oozcitak/xmlbuilder-js/issues/152). This has the potential to break code depending on the content of error messages. +- Fixed an issue where objects created with Object.create(null) created an error. See [#176](https://github.com/oozcitak/xmlbuilder-js/issues/176). +- Added test builds for node.js v8 and v10. + +## [9.0.7] - 2018-02-09 +- Simplified regex used for validating encoding. + +## [9.0.4] - 2017-08-16 +- `spacebeforeslash` writer option accepts `true` as well as space char(s). + +## [9.0.3] - 2017-08-15 +- `spacebeforeslash` writer option can now be used with XML fragments. + +## [9.0.2] - 2017-08-15 +- Added the `spacebeforeslash` writer option to add a space character before closing tags of empty elements. See +[#157](https://github.com/oozcitak/xmlbuilder-js/issues/157). + +## [9.0.1] - 2017-06-19 +- Fixed character validity checks to work with node.js 4.0 and 5.0. See +[#161](https://github.com/oozcitak/xmlbuilder-js/issues/161). + +## [9.0.0] - 2017-05-05 +- Removed case conversion options. +- Removed support for node.js 4.0 and 5.0. Minimum required version is now 6.0. +- Fixed valid char filter to use XML 1.1 instead of 1.0. See +[#147](https://github.com/oozcitak/xmlbuilder-js/issues/147). +- Added options for negative indentation and suppressing pretty printing of text +nodes. See +[#145](https://github.com/oozcitak/xmlbuilder-js/issues/145). + +## [8.2.2] - 2016-04-08 +- Falsy values can now be used as a text node in callback mode. + +## [8.2.1] - 2016-04-07 +- Falsy values can now be used as a text node. See +[#117](https://github.com/oozcitak/xmlbuilder-js/issues/117). + +## [8.2.0] - 2016-04-01 +- Removed lodash dependency to keep the library small and simple. See +[#114](https://github.com/oozcitak/xmlbuilder-js/issues/114), +[#53](https://github.com/oozcitak/xmlbuilder-js/issues/53), +and [#43](https://github.com/oozcitak/xmlbuilder-js/issues/43). +- Added title case to name conversion options. + +## [8.1.0] - 2016-03-29 +- Added the callback option to the `begin` export function. When used with a +callback function, the XML document will be generated in chunks and each chunk +will be passed to the supplied function. In this mode, `begin` uses a different +code path and the builder should use much less memory since the entire XML tree +is not kept. There are a few drawbacks though. For example, traversing the document +tree or adding attributes to a node after it is written is not possible. It is +also not possible to remove nodes or attributes. + +``` js +var result = ''; + +builder.begin(function(chunk) { result += chunk; }) + .dec() + .ele('root') + .ele('xmlbuilder').up() + .end(); +``` + +- Replaced native `Object.assign` with `lodash.assign` to support old JS engines. See [#111](https://github.com/oozcitak/xmlbuilder-js/issues/111). + +## [8.0.0] - 2016-03-25 +- Added the `begin` export function. See the wiki for details. +- Added the ability to add comments and processing instructions before and after the root element. Added `commentBefore`, `commentAfter`, `instructionBefore` and `instructionAfter` functions for this purpose. +- Dropped support for old node.js releases. Minimum required node.js version is now 4.0. + +## [7.0.0] - 2016-03-21 +- Processing instructions are now created as regular nodes. This is a major breaking change if you are using processing instructions. Previously processing instructions were inserted before their parent node. After this change processing instructions are appended to the children of the parent node. Note that it is not currently possible to insert processing instructions before or after the root element. +```js +root.ele('node').ins('pi'); +// pre-v7 + +// v7 + +``` + +## [6.0.0] - 2016-03-20 +- Added custom XML writers. The default string conversion functions are now collected under the `XMLStringWriter` class which can be accessed by the `stringWriter(options)` function exported by the module. An `XMLStreamWriter` is also added which outputs the XML document to a writable stream. A stream writer can be created by calling the `streamWriter(stream, options)` function exported by the module. Both classes are heavily customizable and the details are added to the wiki. It is also possible to write an XML writer from scratch and use it when calling `end()` on the XML document. + +## [5.0.1] - 2016-03-08 +- Moved require statements for text case conversion to the top of files to reduce lazy requires. + +## [5.0.0] - 2016-03-05 +- Added text case option for element names and attribute names. Valid cases are `lower`, `upper`, `camel`, `kebab` and `snake`. +- Attribute and element values are escaped according to the [Canonical XML 1.0 specification](http://www.w3.org/TR/2000/WD-xml-c14n-20000119.html#charescaping). See [#54](https://github.com/oozcitak/xmlbuilder-js/issues/54) and [#86](https://github.com/oozcitak/xmlbuilder-js/issues/86). +- Added the `allowEmpty` option to `end()`. When this option is set, empty elements are not self-closed. +- Added support for [nested CDATA](https://en.wikipedia.org/wiki/CDATA#Nesting). The triad `]]>` in CDATA is now automatically replaced with `]]]]>`. + +## [4.2.1] - 2016-01-15 +- Updated lodash dependency to 4.0.0. + +## [4.2.0] - 2015-12-16 +- Added the `noDoubleEncoding` option to `create()` to control whether existing html entities are encoded. + +## [4.1.0] - 2015-11-11 +- Added the `separateArrayItems` option to `create()` to control how arrays are handled when converting from objects. e.g. + +```js +root.ele({ number: [ "one", "two" ]}); +// with separateArrayItems: true + + + + +// with separateArrayItems: false +one +two +``` + +## [4.0.0] - 2015-11-01 +- Removed the `#list` decorator. Array items are now created as child nodes by default. +- Fixed a bug where the XML encoding string was checked partially. + +## [3.1.0] - 2015-09-19 +- `#list` decorator ignores empty arrays. + +## [3.0.0] - 2015-09-10 +- Allow `\r`, `\n` and `\t` in attribute values without escaping. See [#86](https://github.com/oozcitak/xmlbuilder-js/issues/86). + +## [2.6.5] - 2015-09-09 +- Use native `isArray` instead of lodash. +- Indentation of processing instructions are set to the parent element's. + +## [2.6.4] - 2015-05-27 +- Updated lodash dependency to 3.5.0. + +## [2.6.3] - 2015-05-27 +- Bumped version because previous release was not published on npm. + +## [2.6.2] - 2015-03-10 +- Updated lodash dependency to 3.5.0. + +## [2.6.1] - 2015-02-20 +- Updated lodash dependency to 3.3.0. + +## [2.6.0] - 2015-02-20 +- Fixed a bug where the `XMLNode` constructor overwrote the super class parent. +- Removed document property from cloned nodes. +- Switched to mocha.js for testing. + +## [2.5.2] - 2015-02-16 +- Updated lodash dependency to 3.2.0. + +## [2.5.1] - 2015-02-09 +- Updated lodash dependency to 3.1.0. +- Support all node >= 0.8. + +## [2.5.0] - 2015-00-03 +- Updated lodash dependency to 3.0.0. + +## [2.4.6] - 2015-01-26 +- Show more information from attribute creation with null values. +- Added iojs as an engine. +- Self close elements with empty text. + +## [2.4.5] - 2014-11-15 +- Fixed prepublish script to run on windows. +- Fixed bug in XMLStringifier where an undefined value was used while reporting an invalid encoding value. +- Moved require statements to the top of files to reduce lazy requires. See [#62](https://github.com/oozcitak/xmlbuilder-js/issues/62). + +## [2.4.4] - 2014-09-08 +- Added the `offset` option to `toString()` for use in XML fragments. + +## [2.4.3] - 2014-08-13 +- Corrected license in package description. + +## [2.4.2] - 2014-08-13 +- Dropped performance test and memwatch dependency. + +## [2.4.1] - 2014-08-12 +- Fixed a bug where empty indent string was omitted when pretty printing. See [#59](https://github.com/oozcitak/xmlbuilder-js/issues/59). + +## [2.4.0] - 2014-08-04 +- Correct cases of pubID and sysID. +- Use single lodash instead of separate npm modules. See [#53](https://github.com/oozcitak/xmlbuilder-js/issues/53). +- Escape according to Canonical XML 1.0. See [#54](https://github.com/oozcitak/xmlbuilder-js/issues/54). + +## [2.3.0] - 2014-07-17 +- Convert objects to JS primitives while sanitizing user input. +- Object builder preserves items with null values. See [#44](https://github.com/oozcitak/xmlbuilder-js/issues/44). +- Use modularized lodash functions to cut down dependencies. +- Process empty objects when converting from objects so that we don't throw on empty child objects. + +## [2.2.1] - 2014-04-04 +- Bumped version because previous release was not published on npm. + +## [2.2.0] - 2014-04-04 +- Switch to lodash from underscore. +- Removed legacy `ext` option from `create()`. +- Drop old node versions: 0.4, 0.5, 0.6. 0.8 is the minimum requirement from now on. + +## [2.1.0] - 2013-12-30 +- Removed duplicate null checks from constructors. +- Fixed node count in performance test. +- Added option for skipping null attribute values. See [#26](https://github.com/oozcitak/xmlbuilder-js/issues/26). +- Allow multiple values in `att()` and `ins()`. +- Added ability to run individual performance tests. +- Added flag for ignoring decorator strings. + +## [2.0.1] - 2013-12-24 +- Removed performance tests from npm package. + +## [2.0.0] - 2013-12-24 +- Combined loops for speed up. +- Added support for the DTD and XML declaration. +- `clone` includes attributes. +- Added performance tests. +- Evaluate attribute value if function. +- Evaluate instruction value if function. + +## [1.1.2] - 2013-12-11 +- Changed processing instruction decorator to `?`. + +## [1.1.1] - 2013-12-11 +- Added processing instructions to JS object conversion. + +## [1.1.0] - 2013-12-10 +- Added license to package. +- `create()` and `element()` accept JS object to fully build the document. +- Added `nod()` and `n()` aliases for `node()`. +- Renamed `convertAttChar` decorator to `convertAttKey`. +- Ignore empty decorator strings when converting JS objects. + +## [1.0.2] - 2013-11-27 +- Removed temp file which was accidentally included in the package. + +## [1.0.1] - 2013-11-27 +- Custom stringify functions affect current instance only. + +## [1.0.0] - 2013-11-27 +- Added processing instructions. +- Added stringify functions to sanitize and convert input values. +- Added option for headless XML documents. +- Added vows tests. +- Removed Makefile. Using npm publish scripts instead. +- Removed the `begin()` function. `create()` begins the document by creating the root node. + +## [0.4.3] - 2013-11-08 +- Added option to include surrogate pairs in XML content. See [#29](https://github.com/oozcitak/xmlbuilder-js/issues/29). +- Fixed empty value string representation in pretty mode. +- Added pre and postpublish scripts to package.json. +- Filtered out prototype properties when appending attributes. See [#31](https://github.com/oozcitak/xmlbuilder-js/issues/31). + +## [0.4.2] - 2012-09-14 +- Removed README.md from `.npmignore`. + +## [0.4.1] - 2012-08-31 +- Removed `begin()` calls in favor of `XMLBuilder` constructor. +- Added the `end()` function. `end()` is a convenience over `doc().toString()`. + +## [0.4.0] - 2012-08-31 +- Added arguments to `XMLBuilder` constructor to allow the name of the root element and XML prolog to be defined in one line. +- Soft deprecated `begin()`. + +## [0.3.11] - 2012-08-13 +- Package keywords are fixed to be an array of values. + +## [0.3.10] - 2012-08-13 +- Brought back npm package contents which were lost due to incorrect configuration of `package.json` in previous releases. + +## [0.3.3] - 2012-07-27 +- Implemented `importXMLBuilder()`. + +## [0.3.2] - 2012-07-20 +- Fixed a duplicated escaping problem on `element()`. +- Fixed a problem with text node creation from empty string. +- Calling `root()` on the document element returns the root element. +- `XMLBuilder` no longer extends `XMLFragment`. + +## [0.3.1] - 2011-11-28 +- Added guards for document element so that nodes cannot be inserted at document level. + +## [0.3.0] - 2011-11-28 +- Added `doc()` to return the document element. + +## [0.2.2] - 2011-11-28 +- Prevent code relying on `up()`'s older behavior to break. + +## [0.2.1] - 2011-11-28 +- Added the `root()` function. + +## [0.2.0] - 2011-11-21 +- Added Travis-CI integration. +- Added coffee-script dependency. +- Added insert, traversal and delete functions. + +## [0.1.7] - 2011-10-25 +- No changes. Accidental release. + +## [0.1.6] - 2011-10-25 +- Corrected `package.json` bugs link to `url` from `web`. + +## [0.1.5] - 2011-08-08 +- Added missing npm package contents. + +## [0.1.4] - 2011-07-29 +- Text-only nodes are no longer indented. +- Added documentation for multiple instances. + +## [0.1.3] - 2011-07-27 +- Exported the `create()` function to return a new instance. This allows multiple builder instances to be constructed. +- Fixed `u()` function so that it now correctly calls `up()`. +- Fixed typo in `element()` so that `attributes` and `text` can be passed interchangeably. + +## [0.1.2] - 2011-06-03 +- `ele()` accepts element text. +- `attributes()` now overrides existing attributes if passed the same attribute name. + +## [0.1.1] - 2011-05-19 +- Added the raw output option. +- Removed most validity checks. + +## [0.1.0] - 2011-04-27 +- `text()` and `cdata()` now return parent element. +- Attribute values are escaped. + +## [0.0.7] - 2011-04-23 +- Coerced text values to string. + +## [0.0.6] - 2011-02-23 +- Added support for XML comments. +- Text nodes are checked against CharData. + +## [0.0.5] - 2010-12-31 +- Corrected the name of the main npm module in `package.json`. + +## [0.0.4] - 2010-12-28 +- Added `.npmignore`. + +## [0.0.3] - 2010-12-27 +- root element is now constructed in `begin()`. +- moved prolog to `begin()`. +- Added the ability to have CDATA in element text. +- Removed unused prolog aliases. +- Removed `builder()` function from main module. +- Added the name of the main npm module in `package.json`. + +## [0.0.2] - 2010-11-03 +- `element()` expands nested arrays. +- Added pretty printing. +- Added the `up()`, `build()` and `prolog()` functions. +- Added readme. + +## 0.0.1 - 2010-11-02 +- Initial release + +[10.1.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v10.0.0...v10.1.0 +[10.0.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v9.0.7...v10.0.0 +[9.0.7]: https://github.com/oozcitak/xmlbuilder-js/compare/v9.0.4...v9.0.7 +[9.0.4]: https://github.com/oozcitak/xmlbuilder-js/compare/v9.0.3...v9.0.4 +[9.0.3]: https://github.com/oozcitak/xmlbuilder-js/compare/v9.0.2...v9.0.3 +[9.0.2]: https://github.com/oozcitak/xmlbuilder-js/compare/v9.0.1...v9.0.2 +[9.0.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v9.0.0...v9.0.1 +[9.0.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v8.2.2...v9.0.0 +[8.2.2]: https://github.com/oozcitak/xmlbuilder-js/compare/v8.2.1...v8.2.2 +[8.2.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v8.2.0...v8.2.1 +[8.2.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v8.1.0...v8.2.0 +[8.1.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v8.0.0...v8.1.0 +[8.0.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v7.0.0...v8.0.0 +[7.0.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v6.0.0...v7.0.0 +[6.0.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v5.0.1...v6.0.0 +[5.0.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v5.0.0...v5.0.1 +[5.0.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v4.2.1...v5.0.0 +[4.2.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v4.2.0...v4.2.1 +[4.2.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v4.1.0...v4.2.0 +[4.1.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v4.0.0...v4.1.0 +[4.0.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v3.1.0...v4.0.0 +[3.1.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v3.0.0...v3.1.0 +[3.0.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.6.5...v3.0.0 +[2.6.5]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.6.4...v2.6.5 +[2.6.4]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.6.3...v2.6.4 +[2.6.3]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.6.2...v2.6.3 +[2.6.2]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.6.1...v2.6.2 +[2.6.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.6.0...v2.6.1 +[2.6.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.5.2...v2.6.0 +[2.5.2]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.5.1...v2.5.2 +[2.5.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.5.0...v2.5.1 +[2.5.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.4.6...v2.5.0 +[2.4.6]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.4.5...v2.4.6 +[2.4.5]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.4.4...v2.4.5 +[2.4.4]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.4.3...v2.4.4 +[2.4.3]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.4.2...v2.4.3 +[2.4.2]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.4.1...v2.4.2 +[2.4.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.4.0...v2.4.1 +[2.4.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.3.0...v2.4.0 +[2.3.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.2.1...v2.3.0 +[2.2.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.2.0...v2.2.1 +[2.2.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.1.0...v2.2.0 +[2.1.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.0.1...v2.1.0 +[2.0.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v2.0.0...v2.0.1 +[2.0.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v1.1.2...v2.0.0 +[1.1.2]: https://github.com/oozcitak/xmlbuilder-js/compare/v1.1.1...v1.1.2 +[1.1.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v1.1.0...v1.1.1 +[1.1.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v1.0.2...v1.1.0 +[1.0.2]: https://github.com/oozcitak/xmlbuilder-js/compare/v1.0.1...v1.0.2 +[1.0.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v1.0.0...v1.0.1 +[1.0.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.4.3...v1.0.0 +[0.4.3]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.4.2...v0.4.3 +[0.4.2]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.4.1...v0.4.2 +[0.4.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.4.0...v0.4.1 +[0.4.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.3.11...v0.4.0 +[0.3.11]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.3.10...v0.3.11 +[0.3.10]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.3.3...v0.3.10 +[0.3.3]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.3.2...v0.3.3 +[0.3.2]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.3.1...v0.3.2 +[0.3.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.3.0...v0.3.1 +[0.3.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.2.2...v0.3.0 +[0.2.2]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.2.1...v0.2.2 +[0.2.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.2.0...v0.2.1 +[0.2.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.1.7...v0.2.0 +[0.1.7]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.1.6...v0.1.7 +[0.1.6]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.1.5...v0.1.6 +[0.1.5]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.1.4...v0.1.5 +[0.1.4]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.1.3...v0.1.4 +[0.1.3]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.1.2...v0.1.3 +[0.1.2]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.1.1...v0.1.2 +[0.1.1]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.1.0...v0.1.1 +[0.1.0]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.0.7...v0.1.0 +[0.0.7]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.0.6...v0.0.7 +[0.0.6]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.0.5...v0.0.6 +[0.0.5]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.0.4...v0.0.5 +[0.0.4]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.0.3...v0.0.4 +[0.0.3]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.0.2...v0.0.3 +[0.0.2]: https://github.com/oozcitak/xmlbuilder-js/compare/v0.0.1...v0.0.2 + diff --git a/node_modules/xmlbuilder/LICENSE b/node_modules/xmlbuilder/LICENSE new file mode 100644 index 00000000..e7cbac9a --- /dev/null +++ b/node_modules/xmlbuilder/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2013 Ozgur Ozcitak + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/xmlbuilder/README.md b/node_modules/xmlbuilder/README.md new file mode 100644 index 00000000..efcb4b11 --- /dev/null +++ b/node_modules/xmlbuilder/README.md @@ -0,0 +1,86 @@ +# xmlbuilder-js + +An XML builder for [node.js](https://nodejs.org/) similar to +[java-xmlbuilder](https://github.com/jmurty/java-xmlbuilder). + +[![License](http://img.shields.io/npm/l/xmlbuilder.svg?style=flat-square)](http://opensource.org/licenses/MIT) +[![NPM Version](http://img.shields.io/npm/v/xmlbuilder.svg?style=flat-square)](https://npmjs.com/package/xmlbuilder) +[![NPM Downloads](https://img.shields.io/npm/dm/xmlbuilder.svg?style=flat-square)](https://npmjs.com/package/xmlbuilder) + +[![Travis Build Status](http://img.shields.io/travis/oozcitak/xmlbuilder-js.svg?style=flat-square)](http://travis-ci.org/oozcitak/xmlbuilder-js) +[![AppVeyor Build status](https://ci.appveyor.com/api/projects/status/bf7odb20hj77isry?svg=true)](https://ci.appveyor.com/project/oozcitak/xmlbuilder-js) +[![Dev Dependency Status](http://img.shields.io/david/dev/oozcitak/xmlbuilder-js.svg?style=flat-square)](https://david-dm.org/oozcitak/xmlbuilder-js) +[![Code Coverage](https://img.shields.io/coveralls/oozcitak/xmlbuilder-js.svg?style=flat-square)](https://coveralls.io/github/oozcitak/xmlbuilder-js) + +### Installation: + +``` sh +npm install xmlbuilder +``` + +### Usage: + +``` js +var builder = require('xmlbuilder'); +var xml = builder.create('root') + .ele('xmlbuilder') + .ele('repo', {'type': 'git'}, 'git://github.com/oozcitak/xmlbuilder-js.git') + .end({ pretty: true}); + +console.log(xml); +``` + +will result in: + +``` xml + + + + git://github.com/oozcitak/xmlbuilder-js.git + + +``` + +It is also possible to convert objects into nodes: + +``` js +builder.create({ + root: { + xmlbuilder: { + repo: { + '@type': 'git', // attributes start with @ + '#text': 'git://github.com/oozcitak/xmlbuilder-js.git' // text node + } + } + } +}); +``` + +If you need to do some processing: + +``` js +var root = builder.create('squares'); +root.com('f(x) = x^2'); +for(var i = 1; i <= 5; i++) +{ + var item = root.ele('data'); + item.att('x', i); + item.att('y', i * i); +} +``` + +This will result in: + +``` xml + + + + + + + + + +``` + +See the [wiki](https://github.com/oozcitak/xmlbuilder-js/wiki) for details and [examples](https://github.com/oozcitak/xmlbuilder-js/wiki/Examples) for more complex examples. diff --git a/node_modules/xmlbuilder/appveyor.yml b/node_modules/xmlbuilder/appveyor.yml new file mode 100644 index 00000000..39a26282 --- /dev/null +++ b/node_modules/xmlbuilder/appveyor.yml @@ -0,0 +1,20 @@ +environment: + matrix: + - nodejs_version: "4" + - nodejs_version: "5" + - nodejs_version: "6" + - nodejs_version: "8" + - nodejs_version: "10" + - nodejs_version: "" # latest + +install: + - ps: "Install-Product node $env:nodejs_version" + - "npm install" + +test_script: + - "node --version" + - "npm --version" + - "npm test" + +build: off + diff --git a/node_modules/xmlbuilder/lib/Utility.js b/node_modules/xmlbuilder/lib/Utility.js new file mode 100644 index 00000000..1d42cfd3 --- /dev/null +++ b/node_modules/xmlbuilder/lib/Utility.js @@ -0,0 +1,83 @@ +// Generated by CoffeeScript 1.12.7 +(function() { + var assign, getValue, isArray, isEmpty, isFunction, isObject, isPlainObject, + slice = [].slice, + hasProp = {}.hasOwnProperty; + + assign = function() { + var i, key, len, source, sources, target; + target = arguments[0], sources = 2 <= arguments.length ? slice.call(arguments, 1) : []; + if (isFunction(Object.assign)) { + Object.assign.apply(null, arguments); + } else { + for (i = 0, len = sources.length; i < len; i++) { + source = sources[i]; + if (source != null) { + for (key in source) { + if (!hasProp.call(source, key)) continue; + target[key] = source[key]; + } + } + } + } + return target; + }; + + isFunction = function(val) { + return !!val && Object.prototype.toString.call(val) === '[object Function]'; + }; + + isObject = function(val) { + var ref; + return !!val && ((ref = typeof val) === 'function' || ref === 'object'); + }; + + isArray = function(val) { + if (isFunction(Array.isArray)) { + return Array.isArray(val); + } else { + return Object.prototype.toString.call(val) === '[object Array]'; + } + }; + + isEmpty = function(val) { + var key; + if (isArray(val)) { + return !val.length; + } else { + for (key in val) { + if (!hasProp.call(val, key)) continue; + return false; + } + return true; + } + }; + + isPlainObject = function(val) { + var ctor, proto; + return isObject(val) && (proto = Object.getPrototypeOf(val)) && (ctor = proto.constructor) && (typeof ctor === 'function') && (ctor instanceof ctor) && (Function.prototype.toString.call(ctor) === Function.prototype.toString.call(Object)); + }; + + getValue = function(obj) { + if (isFunction(obj.valueOf)) { + return obj.valueOf(); + } else { + return obj; + } + }; + + module.exports.assign = assign; + + module.exports.isFunction = isFunction; + + module.exports.isObject = isObject; + + module.exports.isArray = isArray; + + module.exports.isEmpty = isEmpty; + + module.exports.isPlainObject = isPlainObject; + + module.exports.getValue = getValue; + +}).call(this); diff --git a/node_modules/xmlbuilder/lib/XMLAttribute.js b/node_modules/xmlbuilder/lib/XMLAttribute.js new file mode 100644 index 00000000..089688cb --- /dev/null +++ b/node_modules/xmlbuilder/lib/XMLAttribute.js @@ -0,0 +1,41 @@ +// Generated by CoffeeScript 1.12.7 +(function() { + var XMLAttribute; + + module.exports = XMLAttribute = (function() { + function XMLAttribute(parent, name, value) { + this.options = parent.options; + this.stringify = parent.stringify; + this.parent = parent; + if (name == null) { + throw new Error("Missing attribute name. " + this.debugInfo(name)); + } + if (value == null) { + throw new Error("Missing attribute value. " + this.debugInfo(name)); + } + this.name = this.stringify.attName(name); + this.value = this.stringify.attValue(value); + } + + XMLAttribute.prototype.clone = function() { + return Object.create(this); + }; + + XMLAttribute.prototype.toString = function(options) { + return this.options.writer.set(options).attribute(this); + }; + + XMLAttribute.prototype.debugInfo = function(name) { + name = name || this.name; + if (name == null) { + return "parent: <" + this.parent.name + ">"; + } else { + return "attribute: {" + name + "}, parent: <" + this.parent.name + ">"; + } + }; + + return XMLAttribute; + + })(); + +}).call(this); diff --git a/node_modules/xmlbuilder/lib/XMLCData.js b/node_modules/xmlbuilder/lib/XMLCData.js new file mode 100644 index 00000000..a47aeb40 --- /dev/null +++ b/node_modules/xmlbuilder/lib/XMLCData.js @@ -0,0 +1,32 @@ +// Generated by CoffeeScript 1.12.7 +(function() { + var XMLCData, XMLNode, + extend = 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; }, + hasProp = {}.hasOwnProperty; + + XMLNode = require('./XMLNode'); + + module.exports = XMLCData = (function(superClass) { + extend(XMLCData, superClass); + + function XMLCData(parent, text) { + XMLCData.__super__.constructor.call(this, parent); + if (text == null) { + throw new Error("Missing CDATA text. " + this.debugInfo()); + } + this.text = this.stringify.cdata(text); + } + + XMLCData.prototype.clone = function() { + return Object.create(this); + }; + + XMLCData.prototype.toString = function(options) { + return this.options.writer.set(options).cdata(this); + }; + + return XMLCData; + + })(XMLNode); + +}).call(this); diff --git a/node_modules/xmlbuilder/lib/XMLComment.js b/node_modules/xmlbuilder/lib/XMLComment.js new file mode 100644 index 00000000..9e66cd09 --- /dev/null +++ b/node_modules/xmlbuilder/lib/XMLComment.js @@ -0,0 +1,32 @@ +// Generated by CoffeeScript 1.12.7 +(function() { + var XMLComment, XMLNode, + extend = 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; }, + hasProp = {}.hasOwnProperty; + + XMLNode = require('./XMLNode'); + + module.exports = XMLComment = (function(superClass) { + extend(XMLComment, superClass); + + function XMLComment(parent, text) { + XMLComment.__super__.constructor.call(this, parent); + if (text == null) { + throw new Error("Missing comment text. " + this.debugInfo()); + } + this.text = this.stringify.comment(text); + } + + XMLComment.prototype.clone = function() { + return Object.create(this); + }; + + XMLComment.prototype.toString = function(options) { + return this.options.writer.set(options).comment(this); + }; + + return XMLComment; + + })(XMLNode); + +}).call(this); diff --git a/node_modules/xmlbuilder/lib/XMLDTDAttList.js b/node_modules/xmlbuilder/lib/XMLDTDAttList.js new file mode 100644 index 00000000..0dd28af8 --- /dev/null +++ b/node_modules/xmlbuilder/lib/XMLDTDAttList.js @@ -0,0 +1,50 @@ +// Generated by CoffeeScript 1.12.7 +(function() { + var XMLDTDAttList, XMLNode, + extend = 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; }, + hasProp = {}.hasOwnProperty; + + XMLNode = require('./XMLNode'); + + module.exports = XMLDTDAttList = (function(superClass) { + extend(XMLDTDAttList, superClass); + + function XMLDTDAttList(parent, elementName, attributeName, attributeType, defaultValueType, defaultValue) { + XMLDTDAttList.__super__.constructor.call(this, parent); + if (elementName == null) { + throw new Error("Missing DTD element name. " + this.debugInfo()); + } + if (attributeName == null) { + throw new Error("Missing DTD attribute name. " + this.debugInfo(elementName)); + } + if (!attributeType) { + throw new Error("Missing DTD attribute type. " + this.debugInfo(elementName)); + } + if (!defaultValueType) { + throw new Error("Missing DTD attribute default. " + this.debugInfo(elementName)); + } + if (defaultValueType.indexOf('#') !== 0) { + defaultValueType = '#' + defaultValueType; + } + if (!defaultValueType.match(/^(#REQUIRED|#IMPLIED|#FIXED|#DEFAULT)$/)) { + throw new Error("Invalid default value type; expected: #REQUIRED, #IMPLIED, #FIXED or #DEFAULT. " + this.debugInfo(elementName)); + } + if (defaultValue && !defaultValueType.match(/^(#FIXED|#DEFAULT)$/)) { + throw new Error("Default value only applies to #FIXED or #DEFAULT. " + this.debugInfo(elementName)); + } + this.elementName = this.stringify.eleName(elementName); + this.attributeName = this.stringify.attName(attributeName); + this.attributeType = this.stringify.dtdAttType(attributeType); + this.defaultValue = this.stringify.dtdAttDefault(defaultValue); + this.defaultValueType = defaultValueType; + } + + XMLDTDAttList.prototype.toString = function(options) { + return this.options.writer.set(options).dtdAttList(this); + }; + + return XMLDTDAttList; + + })(XMLNode); + +}).call(this); diff --git a/node_modules/xmlbuilder/lib/XMLDTDElement.js b/node_modules/xmlbuilder/lib/XMLDTDElement.js new file mode 100644 index 00000000..8f146ed5 --- /dev/null +++ b/node_modules/xmlbuilder/lib/XMLDTDElement.js @@ -0,0 +1,35 @@ +// Generated by CoffeeScript 1.12.7 +(function() { + var XMLDTDElement, XMLNode, + extend = 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; }, + hasProp = {}.hasOwnProperty; + + XMLNode = require('./XMLNode'); + + module.exports = XMLDTDElement = (function(superClass) { + extend(XMLDTDElement, superClass); + + function XMLDTDElement(parent, name, value) { + XMLDTDElement.__super__.constructor.call(this, parent); + if (name == null) { + throw new Error("Missing DTD element name. " + this.debugInfo()); + } + if (!value) { + value = '(#PCDATA)'; + } + if (Array.isArray(value)) { + value = '(' + value.join(',') + ')'; + } + this.name = this.stringify.eleName(name); + this.value = this.stringify.dtdElementValue(value); + } + + XMLDTDElement.prototype.toString = function(options) { + return this.options.writer.set(options).dtdElement(this); + }; + + return XMLDTDElement; + + })(XMLNode); + +}).call(this); diff --git a/node_modules/xmlbuilder/lib/XMLDTDEntity.js b/node_modules/xmlbuilder/lib/XMLDTDEntity.js new file mode 100644 index 00000000..e9cb52e7 --- /dev/null +++ b/node_modules/xmlbuilder/lib/XMLDTDEntity.js @@ -0,0 +1,56 @@ +// Generated by CoffeeScript 1.12.7 +(function() { + var XMLDTDEntity, XMLNode, isObject, + extend = 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; }, + hasProp = {}.hasOwnProperty; + + isObject = require('./Utility').isObject; + + XMLNode = require('./XMLNode'); + + module.exports = XMLDTDEntity = (function(superClass) { + extend(XMLDTDEntity, superClass); + + function XMLDTDEntity(parent, pe, name, value) { + XMLDTDEntity.__super__.constructor.call(this, parent); + if (name == null) { + throw new Error("Missing DTD entity name. " + this.debugInfo(name)); + } + if (value == null) { + throw new Error("Missing DTD entity value. " + this.debugInfo(name)); + } + this.pe = !!pe; + this.name = this.stringify.eleName(name); + if (!isObject(value)) { + this.value = this.stringify.dtdEntityValue(value); + } else { + if (!value.pubID && !value.sysID) { + throw new Error("Public and/or system identifiers are required for an external entity. " + this.debugInfo(name)); + } + if (value.pubID && !value.sysID) { + throw new Error("System identifier is required for a public external entity. " + this.debugInfo(name)); + } + if (value.pubID != null) { + this.pubID = this.stringify.dtdPubID(value.pubID); + } + if (value.sysID != null) { + this.sysID = this.stringify.dtdSysID(value.sysID); + } + if (value.nData != null) { + this.nData = this.stringify.dtdNData(value.nData); + } + if (this.pe && this.nData) { + throw new Error("Notation declaration is not allowed in a parameter entity. " + this.debugInfo(name)); + } + } + } + + XMLDTDEntity.prototype.toString = function(options) { + return this.options.writer.set(options).dtdEntity(this); + }; + + return XMLDTDEntity; + + })(XMLNode); + +}).call(this); diff --git a/node_modules/xmlbuilder/lib/XMLDTDNotation.js b/node_modules/xmlbuilder/lib/XMLDTDNotation.js new file mode 100644 index 00000000..1e1a36a3 --- /dev/null +++ b/node_modules/xmlbuilder/lib/XMLDTDNotation.js @@ -0,0 +1,37 @@ +// Generated by CoffeeScript 1.12.7 +(function() { + var XMLDTDNotation, XMLNode, + extend = 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; }, + hasProp = {}.hasOwnProperty; + + XMLNode = require('./XMLNode'); + + module.exports = XMLDTDNotation = (function(superClass) { + extend(XMLDTDNotation, superClass); + + function XMLDTDNotation(parent, name, value) { + XMLDTDNotation.__super__.constructor.call(this, parent); + if (name == null) { + throw new Error("Missing DTD notation name. " + this.debugInfo(name)); + } + if (!value.pubID && !value.sysID) { + throw new Error("Public or system identifiers are required for an external entity. " + this.debugInfo(name)); + } + this.name = this.stringify.eleName(name); + if (value.pubID != null) { + this.pubID = this.stringify.dtdPubID(value.pubID); + } + if (value.sysID != null) { + this.sysID = this.stringify.dtdSysID(value.sysID); + } + } + + XMLDTDNotation.prototype.toString = function(options) { + return this.options.writer.set(options).dtdNotation(this); + }; + + return XMLDTDNotation; + + })(XMLNode); + +}).call(this); diff --git a/node_modules/xmlbuilder/lib/XMLDeclaration.js b/node_modules/xmlbuilder/lib/XMLDeclaration.js new file mode 100644 index 00000000..3251f289 --- /dev/null +++ b/node_modules/xmlbuilder/lib/XMLDeclaration.js @@ -0,0 +1,40 @@ +// Generated by CoffeeScript 1.12.7 +(function() { + var XMLDeclaration, XMLNode, isObject, + extend = 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; }, + hasProp = {}.hasOwnProperty; + + isObject = require('./Utility').isObject; + + XMLNode = require('./XMLNode'); + + module.exports = XMLDeclaration = (function(superClass) { + extend(XMLDeclaration, superClass); + + function XMLDeclaration(parent, version, encoding, standalone) { + var ref; + XMLDeclaration.__super__.constructor.call(this, parent); + if (isObject(version)) { + ref = version, version = ref.version, encoding = ref.encoding, standalone = ref.standalone; + } + if (!version) { + version = '1.0'; + } + this.version = this.stringify.xmlVersion(version); + if (encoding != null) { + this.encoding = this.stringify.xmlEncoding(encoding); + } + if (standalone != null) { + this.standalone = this.stringify.xmlStandalone(standalone); + } + } + + XMLDeclaration.prototype.toString = function(options) { + return this.options.writer.set(options).declaration(this); + }; + + return XMLDeclaration; + + })(XMLNode); + +}).call(this); diff --git a/node_modules/xmlbuilder/lib/XMLDocType.js b/node_modules/xmlbuilder/lib/XMLDocType.js new file mode 100644 index 00000000..6a86bb0d --- /dev/null +++ b/node_modules/xmlbuilder/lib/XMLDocType.js @@ -0,0 +1,108 @@ +// Generated by CoffeeScript 1.12.7 +(function() { + var XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDocType, XMLNode, isObject, + extend = 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; }, + hasProp = {}.hasOwnProperty; + + isObject = require('./Utility').isObject; + + XMLNode = require('./XMLNode'); + + XMLDTDAttList = require('./XMLDTDAttList'); + + XMLDTDEntity = require('./XMLDTDEntity'); + + XMLDTDElement = require('./XMLDTDElement'); + + XMLDTDNotation = require('./XMLDTDNotation'); + + module.exports = XMLDocType = (function(superClass) { + extend(XMLDocType, superClass); + + function XMLDocType(parent, pubID, sysID) { + var ref, ref1; + XMLDocType.__super__.constructor.call(this, parent); + this.name = "!DOCTYPE"; + this.documentObject = parent; + if (isObject(pubID)) { + ref = pubID, pubID = ref.pubID, sysID = ref.sysID; + } + if (sysID == null) { + ref1 = [pubID, sysID], sysID = ref1[0], pubID = ref1[1]; + } + if (pubID != null) { + this.pubID = this.stringify.dtdPubID(pubID); + } + if (sysID != null) { + this.sysID = this.stringify.dtdSysID(sysID); + } + } + + XMLDocType.prototype.element = function(name, value) { + var child; + child = new XMLDTDElement(this, name, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.attList = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) { + var child; + child = new XMLDTDAttList(this, elementName, attributeName, attributeType, defaultValueType, defaultValue); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.entity = function(name, value) { + var child; + child = new XMLDTDEntity(this, false, name, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.pEntity = function(name, value) { + var child; + child = new XMLDTDEntity(this, true, name, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.notation = function(name, value) { + var child; + child = new XMLDTDNotation(this, name, value); + this.children.push(child); + return this; + }; + + XMLDocType.prototype.toString = function(options) { + return this.options.writer.set(options).docType(this); + }; + + XMLDocType.prototype.ele = function(name, value) { + return this.element(name, value); + }; + + XMLDocType.prototype.att = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) { + return this.attList(elementName, attributeName, attributeType, defaultValueType, defaultValue); + }; + + XMLDocType.prototype.ent = function(name, value) { + return this.entity(name, value); + }; + + XMLDocType.prototype.pent = function(name, value) { + return this.pEntity(name, value); + }; + + XMLDocType.prototype.not = function(name, value) { + return this.notation(name, value); + }; + + XMLDocType.prototype.up = function() { + return this.root() || this.documentObject; + }; + + return XMLDocType; + + })(XMLNode); + +}).call(this); diff --git a/node_modules/xmlbuilder/lib/XMLDocument.js b/node_modules/xmlbuilder/lib/XMLDocument.js new file mode 100644 index 00000000..7ae9ac0c --- /dev/null +++ b/node_modules/xmlbuilder/lib/XMLDocument.js @@ -0,0 +1,49 @@ +// Generated by CoffeeScript 1.12.7 +(function() { + var XMLDocument, XMLNode, XMLStringWriter, XMLStringifier, isPlainObject, + extend = 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; }, + hasProp = {}.hasOwnProperty; + + isPlainObject = require('./Utility').isPlainObject; + + XMLNode = require('./XMLNode'); + + XMLStringifier = require('./XMLStringifier'); + + XMLStringWriter = require('./XMLStringWriter'); + + module.exports = XMLDocument = (function(superClass) { + extend(XMLDocument, superClass); + + function XMLDocument(options) { + XMLDocument.__super__.constructor.call(this, null); + this.name = "?xml"; + options || (options = {}); + if (!options.writer) { + options.writer = new XMLStringWriter(); + } + this.options = options; + this.stringify = new XMLStringifier(options); + this.isDocument = true; + } + + XMLDocument.prototype.end = function(writer) { + var writerOptions; + if (!writer) { + writer = this.options.writer; + } else if (isPlainObject(writer)) { + writerOptions = writer; + writer = this.options.writer.set(writerOptions); + } + return writer.document(this); + }; + + XMLDocument.prototype.toString = function(options) { + return this.options.writer.set(options).document(this); + }; + + return XMLDocument; + + })(XMLNode); + +}).call(this); diff --git a/node_modules/xmlbuilder/lib/XMLDocumentCB.js b/node_modules/xmlbuilder/lib/XMLDocumentCB.js new file mode 100644 index 00000000..e63e76c3 --- /dev/null +++ b/node_modules/xmlbuilder/lib/XMLDocumentCB.js @@ -0,0 +1,414 @@ +// Generated by CoffeeScript 1.12.7 +(function() { + var XMLAttribute, XMLCData, XMLComment, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDeclaration, XMLDocType, XMLDocumentCB, XMLElement, XMLProcessingInstruction, XMLRaw, XMLStringWriter, XMLStringifier, XMLText, getValue, isFunction, isObject, isPlainObject, ref, + hasProp = {}.hasOwnProperty; + + ref = require('./Utility'), isObject = ref.isObject, isFunction = ref.isFunction, isPlainObject = ref.isPlainObject, getValue = ref.getValue; + + XMLElement = require('./XMLElement'); + + XMLCData = require('./XMLCData'); + + XMLComment = require('./XMLComment'); + + XMLRaw = require('./XMLRaw'); + + XMLText = require('./XMLText'); + + XMLProcessingInstruction = require('./XMLProcessingInstruction'); + + XMLDeclaration = require('./XMLDeclaration'); + + XMLDocType = require('./XMLDocType'); + + XMLDTDAttList = require('./XMLDTDAttList'); + + XMLDTDEntity = require('./XMLDTDEntity'); + + XMLDTDElement = require('./XMLDTDElement'); + + XMLDTDNotation = require('./XMLDTDNotation'); + + XMLAttribute = require('./XMLAttribute'); + + XMLStringifier = require('./XMLStringifier'); + + XMLStringWriter = require('./XMLStringWriter'); + + module.exports = XMLDocumentCB = (function() { + function XMLDocumentCB(options, onData, onEnd) { + var writerOptions; + this.name = "?xml"; + options || (options = {}); + if (!options.writer) { + options.writer = new XMLStringWriter(options); + } else if (isPlainObject(options.writer)) { + writerOptions = options.writer; + options.writer = new XMLStringWriter(writerOptions); + } + this.options = options; + this.writer = options.writer; + this.stringify = new XMLStringifier(options); + this.onDataCallback = onData || function() {}; + this.onEndCallback = onEnd || function() {}; + this.currentNode = null; + this.currentLevel = -1; + this.openTags = {}; + this.documentStarted = false; + this.documentCompleted = false; + this.root = null; + } + + XMLDocumentCB.prototype.node = function(name, attributes, text) { + var ref1, ref2; + if (name == null) { + throw new Error("Missing node name."); + } + if (this.root && this.currentLevel === -1) { + throw new Error("Document can only have one root node. " + this.debugInfo(name)); + } + this.openCurrent(); + name = getValue(name); + if (attributes === null && (text == null)) { + ref1 = [{}, null], attributes = ref1[0], text = ref1[1]; + } + if (attributes == null) { + attributes = {}; + } + attributes = getValue(attributes); + if (!isObject(attributes)) { + ref2 = [attributes, text], text = ref2[0], attributes = ref2[1]; + } + this.currentNode = new XMLElement(this, name, attributes); + this.currentNode.children = false; + this.currentLevel++; + this.openTags[this.currentLevel] = this.currentNode; + if (text != null) { + this.text(text); + } + return this; + }; + + XMLDocumentCB.prototype.element = function(name, attributes, text) { + if (this.currentNode && this.currentNode instanceof XMLDocType) { + return this.dtdElement.apply(this, arguments); + } else { + return this.node(name, attributes, text); + } + }; + + XMLDocumentCB.prototype.attribute = function(name, value) { + var attName, attValue; + if (!this.currentNode || this.currentNode.children) { + throw new Error("att() can only be used immediately after an ele() call in callback mode. " + this.debugInfo(name)); + } + if (name != null) { + name = getValue(name); + } + if (isObject(name)) { + for (attName in name) { + if (!hasProp.call(name, attName)) continue; + attValue = name[attName]; + this.attribute(attName, attValue); + } + } else { + if (isFunction(value)) { + value = value.apply(); + } + if (!this.options.skipNullAttributes || (value != null)) { + this.currentNode.attributes[name] = new XMLAttribute(this, name, value); + } + } + return this; + }; + + XMLDocumentCB.prototype.text = function(value) { + var node; + this.openCurrent(); + node = new XMLText(this, value); + this.onData(this.writer.text(node, this.currentLevel + 1), this.currentLevel + 1); + return this; + }; + + XMLDocumentCB.prototype.cdata = function(value) { + var node; + this.openCurrent(); + node = new XMLCData(this, value); + this.onData(this.writer.cdata(node, this.currentLevel + 1), this.currentLevel + 1); + return this; + }; + + XMLDocumentCB.prototype.comment = function(value) { + var node; + this.openCurrent(); + node = new XMLComment(this, value); + this.onData(this.writer.comment(node, this.currentLevel + 1), this.currentLevel + 1); + return this; + }; + + XMLDocumentCB.prototype.raw = function(value) { + var node; + this.openCurrent(); + node = new XMLRaw(this, value); + this.onData(this.writer.raw(node, this.currentLevel + 1), this.currentLevel + 1); + return this; + }; + + XMLDocumentCB.prototype.instruction = function(target, value) { + var i, insTarget, insValue, len, node; + this.openCurrent(); + if (target != null) { + target = getValue(target); + } + if (value != null) { + value = getValue(value); + } + if (Array.isArray(target)) { + for (i = 0, len = target.length; i < len; i++) { + insTarget = target[i]; + this.instruction(insTarget); + } + } else if (isObject(target)) { + for (insTarget in target) { + if (!hasProp.call(target, insTarget)) continue; + insValue = target[insTarget]; + this.instruction(insTarget, insValue); + } + } else { + if (isFunction(value)) { + value = value.apply(); + } + node = new XMLProcessingInstruction(this, target, value); + this.onData(this.writer.processingInstruction(node, this.currentLevel + 1), this.currentLevel + 1); + } + return this; + }; + + XMLDocumentCB.prototype.declaration = function(version, encoding, standalone) { + var node; + this.openCurrent(); + if (this.documentStarted) { + throw new Error("declaration() must be the first node."); + } + node = new XMLDeclaration(this, version, encoding, standalone); + this.onData(this.writer.declaration(node, this.currentLevel + 1), this.currentLevel + 1); + return this; + }; + + XMLDocumentCB.prototype.doctype = function(root, pubID, sysID) { + this.openCurrent(); + if (root == null) { + throw new Error("Missing root node name."); + } + if (this.root) { + throw new Error("dtd() must come before the root node."); + } + this.currentNode = new XMLDocType(this, pubID, sysID); + this.currentNode.rootNodeName = root; + this.currentNode.children = false; + this.currentLevel++; + this.openTags[this.currentLevel] = this.currentNode; + return this; + }; + + XMLDocumentCB.prototype.dtdElement = function(name, value) { + var node; + this.openCurrent(); + node = new XMLDTDElement(this, name, value); + this.onData(this.writer.dtdElement(node, this.currentLevel + 1), this.currentLevel + 1); + return this; + }; + + XMLDocumentCB.prototype.attList = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) { + var node; + this.openCurrent(); + node = new XMLDTDAttList(this, elementName, attributeName, attributeType, defaultValueType, defaultValue); + this.onData(this.writer.dtdAttList(node, this.currentLevel + 1), this.currentLevel + 1); + return this; + }; + + XMLDocumentCB.prototype.entity = function(name, value) { + var node; + this.openCurrent(); + node = new XMLDTDEntity(this, false, name, value); + this.onData(this.writer.dtdEntity(node, this.currentLevel + 1), this.currentLevel + 1); + return this; + }; + + XMLDocumentCB.prototype.pEntity = function(name, value) { + var node; + this.openCurrent(); + node = new XMLDTDEntity(this, true, name, value); + this.onData(this.writer.dtdEntity(node, this.currentLevel + 1), this.currentLevel + 1); + return this; + }; + + XMLDocumentCB.prototype.notation = function(name, value) { + var node; + this.openCurrent(); + node = new XMLDTDNotation(this, name, value); + this.onData(this.writer.dtdNotation(node, this.currentLevel + 1), this.currentLevel + 1); + return this; + }; + + XMLDocumentCB.prototype.up = function() { + if (this.currentLevel < 0) { + throw new Error("The document node has no parent."); + } + if (this.currentNode) { + if (this.currentNode.children) { + this.closeNode(this.currentNode); + } else { + this.openNode(this.currentNode); + } + this.currentNode = null; + } else { + this.closeNode(this.openTags[this.currentLevel]); + } + delete this.openTags[this.currentLevel]; + this.currentLevel--; + return this; + }; + + XMLDocumentCB.prototype.end = function() { + while (this.currentLevel >= 0) { + this.up(); + } + return this.onEnd(); + }; + + XMLDocumentCB.prototype.openCurrent = function() { + if (this.currentNode) { + this.currentNode.children = true; + return this.openNode(this.currentNode); + } + }; + + XMLDocumentCB.prototype.openNode = function(node) { + if (!node.isOpen) { + if (!this.root && this.currentLevel === 0 && node instanceof XMLElement) { + this.root = node; + } + this.onData(this.writer.openNode(node, this.currentLevel), this.currentLevel); + return node.isOpen = true; + } + }; + + XMLDocumentCB.prototype.closeNode = function(node) { + if (!node.isClosed) { + this.onData(this.writer.closeNode(node, this.currentLevel), this.currentLevel); + return node.isClosed = true; + } + }; + + XMLDocumentCB.prototype.onData = function(chunk, level) { + this.documentStarted = true; + return this.onDataCallback(chunk, level + 1); + }; + + XMLDocumentCB.prototype.onEnd = function() { + this.documentCompleted = true; + return this.onEndCallback(); + }; + + XMLDocumentCB.prototype.debugInfo = function(name) { + if (name == null) { + return ""; + } else { + return "node: <" + name + ">"; + } + }; + + XMLDocumentCB.prototype.ele = function() { + return this.element.apply(this, arguments); + }; + + XMLDocumentCB.prototype.nod = function(name, attributes, text) { + return this.node(name, attributes, text); + }; + + XMLDocumentCB.prototype.txt = function(value) { + return this.text(value); + }; + + XMLDocumentCB.prototype.dat = function(value) { + return this.cdata(value); + }; + + XMLDocumentCB.prototype.com = function(value) { + return this.comment(value); + }; + + XMLDocumentCB.prototype.ins = function(target, value) { + return this.instruction(target, value); + }; + + XMLDocumentCB.prototype.dec = function(version, encoding, standalone) { + return this.declaration(version, encoding, standalone); + }; + + XMLDocumentCB.prototype.dtd = function(root, pubID, sysID) { + return this.doctype(root, pubID, sysID); + }; + + XMLDocumentCB.prototype.e = function(name, attributes, text) { + return this.element(name, attributes, text); + }; + + XMLDocumentCB.prototype.n = function(name, attributes, text) { + return this.node(name, attributes, text); + }; + + XMLDocumentCB.prototype.t = function(value) { + return this.text(value); + }; + + XMLDocumentCB.prototype.d = function(value) { + return this.cdata(value); + }; + + XMLDocumentCB.prototype.c = function(value) { + return this.comment(value); + }; + + XMLDocumentCB.prototype.r = function(value) { + return this.raw(value); + }; + + XMLDocumentCB.prototype.i = function(target, value) { + return this.instruction(target, value); + }; + + XMLDocumentCB.prototype.att = function() { + if (this.currentNode && this.currentNode instanceof XMLDocType) { + return this.attList.apply(this, arguments); + } else { + return this.attribute.apply(this, arguments); + } + }; + + XMLDocumentCB.prototype.a = function() { + if (this.currentNode && this.currentNode instanceof XMLDocType) { + return this.attList.apply(this, arguments); + } else { + return this.attribute.apply(this, arguments); + } + }; + + XMLDocumentCB.prototype.ent = function(name, value) { + return this.entity(name, value); + }; + + XMLDocumentCB.prototype.pent = function(name, value) { + return this.pEntity(name, value); + }; + + XMLDocumentCB.prototype.not = function(name, value) { + return this.notation(name, value); + }; + + return XMLDocumentCB; + + })(); + +}).call(this); diff --git a/node_modules/xmlbuilder/lib/XMLDummy.js b/node_modules/xmlbuilder/lib/XMLDummy.js new file mode 100644 index 00000000..4b77e9b3 --- /dev/null +++ b/node_modules/xmlbuilder/lib/XMLDummy.js @@ -0,0 +1,29 @@ +// Generated by CoffeeScript 1.12.7 +(function() { + var XMLDummy, XMLNode, + extend = 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; }, + hasProp = {}.hasOwnProperty; + + XMLNode = require('./XMLNode'); + + module.exports = XMLDummy = (function(superClass) { + extend(XMLDummy, superClass); + + function XMLDummy(parent) { + XMLDummy.__super__.constructor.call(this, parent); + this.isDummy = true; + } + + XMLDummy.prototype.clone = function() { + return Object.create(this); + }; + + XMLDummy.prototype.toString = function(options) { + return ''; + }; + + return XMLDummy; + + })(XMLNode); + +}).call(this); diff --git a/node_modules/xmlbuilder/lib/XMLElement.js b/node_modules/xmlbuilder/lib/XMLElement.js new file mode 100644 index 00000000..baab14fc --- /dev/null +++ b/node_modules/xmlbuilder/lib/XMLElement.js @@ -0,0 +1,111 @@ +// Generated by CoffeeScript 1.12.7 +(function() { + var XMLAttribute, XMLElement, XMLNode, getValue, isFunction, isObject, ref, + extend = 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; }, + hasProp = {}.hasOwnProperty; + + ref = require('./Utility'), isObject = ref.isObject, isFunction = ref.isFunction, getValue = ref.getValue; + + XMLNode = require('./XMLNode'); + + XMLAttribute = require('./XMLAttribute'); + + module.exports = XMLElement = (function(superClass) { + extend(XMLElement, superClass); + + function XMLElement(parent, name, attributes) { + XMLElement.__super__.constructor.call(this, parent); + if (name == null) { + throw new Error("Missing element name. " + this.debugInfo()); + } + this.name = this.stringify.eleName(name); + this.attributes = {}; + if (attributes != null) { + this.attribute(attributes); + } + if (parent.isDocument) { + this.isRoot = true; + this.documentObject = parent; + parent.rootObject = this; + } + } + + XMLElement.prototype.clone = function() { + var att, attName, clonedSelf, ref1; + clonedSelf = Object.create(this); + if (clonedSelf.isRoot) { + clonedSelf.documentObject = null; + } + clonedSelf.attributes = {}; + ref1 = this.attributes; + for (attName in ref1) { + if (!hasProp.call(ref1, attName)) continue; + att = ref1[attName]; + clonedSelf.attributes[attName] = att.clone(); + } + clonedSelf.children = []; + this.children.forEach(function(child) { + var clonedChild; + clonedChild = child.clone(); + clonedChild.parent = clonedSelf; + return clonedSelf.children.push(clonedChild); + }); + return clonedSelf; + }; + + XMLElement.prototype.attribute = function(name, value) { + var attName, attValue; + if (name != null) { + name = getValue(name); + } + if (isObject(name)) { + for (attName in name) { + if (!hasProp.call(name, attName)) continue; + attValue = name[attName]; + this.attribute(attName, attValue); + } + } else { + if (isFunction(value)) { + value = value.apply(); + } + if (!this.options.skipNullAttributes || (value != null)) { + this.attributes[name] = new XMLAttribute(this, name, value); + } + } + return this; + }; + + XMLElement.prototype.removeAttribute = function(name) { + var attName, i, len; + if (name == null) { + throw new Error("Missing attribute name. " + this.debugInfo()); + } + name = getValue(name); + if (Array.isArray(name)) { + for (i = 0, len = name.length; i < len; i++) { + attName = name[i]; + delete this.attributes[attName]; + } + } else { + delete this.attributes[name]; + } + return this; + }; + + XMLElement.prototype.toString = function(options) { + return this.options.writer.set(options).element(this); + }; + + XMLElement.prototype.att = function(name, value) { + return this.attribute(name, value); + }; + + XMLElement.prototype.a = function(name, value) { + return this.attribute(name, value); + }; + + return XMLElement; + + })(XMLNode); + +}).call(this); diff --git a/node_modules/xmlbuilder/lib/XMLNode.js b/node_modules/xmlbuilder/lib/XMLNode.js new file mode 100644 index 00000000..2251da04 --- /dev/null +++ b/node_modules/xmlbuilder/lib/XMLNode.js @@ -0,0 +1,467 @@ +// Generated by CoffeeScript 1.12.7 +(function() { + var XMLCData, XMLComment, XMLDeclaration, XMLDocType, XMLDummy, XMLElement, XMLNode, XMLProcessingInstruction, XMLRaw, XMLText, getValue, isEmpty, isFunction, isObject, ref, + hasProp = {}.hasOwnProperty; + + ref = require('./Utility'), isObject = ref.isObject, isFunction = ref.isFunction, isEmpty = ref.isEmpty, getValue = ref.getValue; + + XMLElement = null; + + XMLCData = null; + + XMLComment = null; + + XMLDeclaration = null; + + XMLDocType = null; + + XMLRaw = null; + + XMLText = null; + + XMLProcessingInstruction = null; + + XMLDummy = null; + + module.exports = XMLNode = (function() { + function XMLNode(parent) { + this.parent = parent; + if (this.parent) { + this.options = this.parent.options; + this.stringify = this.parent.stringify; + } + this.children = []; + if (!XMLElement) { + XMLElement = require('./XMLElement'); + XMLCData = require('./XMLCData'); + XMLComment = require('./XMLComment'); + XMLDeclaration = require('./XMLDeclaration'); + XMLDocType = require('./XMLDocType'); + XMLRaw = require('./XMLRaw'); + XMLText = require('./XMLText'); + XMLProcessingInstruction = require('./XMLProcessingInstruction'); + XMLDummy = require('./XMLDummy'); + } + } + + XMLNode.prototype.element = function(name, attributes, text) { + var childNode, item, j, k, key, lastChild, len, len1, ref1, ref2, val; + lastChild = null; + if (attributes === null && (text == null)) { + ref1 = [{}, null], attributes = ref1[0], text = ref1[1]; + } + if (attributes == null) { + attributes = {}; + } + attributes = getValue(attributes); + if (!isObject(attributes)) { + ref2 = [attributes, text], text = ref2[0], attributes = ref2[1]; + } + if (name != null) { + name = getValue(name); + } + if (Array.isArray(name)) { + for (j = 0, len = name.length; j < len; j++) { + item = name[j]; + lastChild = this.element(item); + } + } else if (isFunction(name)) { + lastChild = this.element(name.apply()); + } else if (isObject(name)) { + for (key in name) { + if (!hasProp.call(name, key)) continue; + val = name[key]; + if (isFunction(val)) { + val = val.apply(); + } + if ((isObject(val)) && (isEmpty(val))) { + val = null; + } + if (!this.options.ignoreDecorators && this.stringify.convertAttKey && key.indexOf(this.stringify.convertAttKey) === 0) { + lastChild = this.attribute(key.substr(this.stringify.convertAttKey.length), val); + } else if (!this.options.separateArrayItems && Array.isArray(val)) { + for (k = 0, len1 = val.length; k < len1; k++) { + item = val[k]; + childNode = {}; + childNode[key] = item; + lastChild = this.element(childNode); + } + } else if (isObject(val)) { + lastChild = this.element(key); + lastChild.element(val); + } else { + lastChild = this.element(key, val); + } + } + } else if (this.options.skipNullNodes && text === null) { + lastChild = this.dummy(); + } else { + if (!this.options.ignoreDecorators && this.stringify.convertTextKey && name.indexOf(this.stringify.convertTextKey) === 0) { + lastChild = this.text(text); + } else if (!this.options.ignoreDecorators && this.stringify.convertCDataKey && name.indexOf(this.stringify.convertCDataKey) === 0) { + lastChild = this.cdata(text); + } else if (!this.options.ignoreDecorators && this.stringify.convertCommentKey && name.indexOf(this.stringify.convertCommentKey) === 0) { + lastChild = this.comment(text); + } else if (!this.options.ignoreDecorators && this.stringify.convertRawKey && name.indexOf(this.stringify.convertRawKey) === 0) { + lastChild = this.raw(text); + } else if (!this.options.ignoreDecorators && this.stringify.convertPIKey && name.indexOf(this.stringify.convertPIKey) === 0) { + lastChild = this.instruction(name.substr(this.stringify.convertPIKey.length), text); + } else { + lastChild = this.node(name, attributes, text); + } + } + if (lastChild == null) { + throw new Error("Could not create any elements with: " + name + ". " + this.debugInfo()); + } + return lastChild; + }; + + XMLNode.prototype.insertBefore = function(name, attributes, text) { + var child, i, removed; + if (this.isRoot) { + throw new Error("Cannot insert elements at root level. " + this.debugInfo(name)); + } + i = this.parent.children.indexOf(this); + removed = this.parent.children.splice(i); + child = this.parent.element(name, attributes, text); + Array.prototype.push.apply(this.parent.children, removed); + return child; + }; + + XMLNode.prototype.insertAfter = function(name, attributes, text) { + var child, i, removed; + if (this.isRoot) { + throw new Error("Cannot insert elements at root level. " + this.debugInfo(name)); + } + i = this.parent.children.indexOf(this); + removed = this.parent.children.splice(i + 1); + child = this.parent.element(name, attributes, text); + Array.prototype.push.apply(this.parent.children, removed); + return child; + }; + + XMLNode.prototype.remove = function() { + var i, ref1; + if (this.isRoot) { + throw new Error("Cannot remove the root element. " + this.debugInfo()); + } + i = this.parent.children.indexOf(this); + [].splice.apply(this.parent.children, [i, i - i + 1].concat(ref1 = [])), ref1; + return this.parent; + }; + + XMLNode.prototype.node = function(name, attributes, text) { + var child, ref1; + if (name != null) { + name = getValue(name); + } + attributes || (attributes = {}); + attributes = getValue(attributes); + if (!isObject(attributes)) { + ref1 = [attributes, text], text = ref1[0], attributes = ref1[1]; + } + child = new XMLElement(this, name, attributes); + if (text != null) { + child.text(text); + } + this.children.push(child); + return child; + }; + + XMLNode.prototype.text = function(value) { + var child; + child = new XMLText(this, value); + this.children.push(child); + return this; + }; + + XMLNode.prototype.cdata = function(value) { + var child; + child = new XMLCData(this, value); + this.children.push(child); + return this; + }; + + XMLNode.prototype.comment = function(value) { + var child; + child = new XMLComment(this, value); + this.children.push(child); + return this; + }; + + XMLNode.prototype.commentBefore = function(value) { + var child, i, removed; + i = this.parent.children.indexOf(this); + removed = this.parent.children.splice(i); + child = this.parent.comment(value); + Array.prototype.push.apply(this.parent.children, removed); + return this; + }; + + XMLNode.prototype.commentAfter = function(value) { + var child, i, removed; + i = this.parent.children.indexOf(this); + removed = this.parent.children.splice(i + 1); + child = this.parent.comment(value); + Array.prototype.push.apply(this.parent.children, removed); + return this; + }; + + XMLNode.prototype.raw = function(value) { + var child; + child = new XMLRaw(this, value); + this.children.push(child); + return this; + }; + + XMLNode.prototype.dummy = function() { + var child; + child = new XMLDummy(this); + this.children.push(child); + return child; + }; + + XMLNode.prototype.instruction = function(target, value) { + var insTarget, insValue, instruction, j, len; + if (target != null) { + target = getValue(target); + } + if (value != null) { + value = getValue(value); + } + if (Array.isArray(target)) { + for (j = 0, len = target.length; j < len; j++) { + insTarget = target[j]; + this.instruction(insTarget); + } + } else if (isObject(target)) { + for (insTarget in target) { + if (!hasProp.call(target, insTarget)) continue; + insValue = target[insTarget]; + this.instruction(insTarget, insValue); + } + } else { + if (isFunction(value)) { + value = value.apply(); + } + instruction = new XMLProcessingInstruction(this, target, value); + this.children.push(instruction); + } + return this; + }; + + XMLNode.prototype.instructionBefore = function(target, value) { + var child, i, removed; + i = this.parent.children.indexOf(this); + removed = this.parent.children.splice(i); + child = this.parent.instruction(target, value); + Array.prototype.push.apply(this.parent.children, removed); + return this; + }; + + XMLNode.prototype.instructionAfter = function(target, value) { + var child, i, removed; + i = this.parent.children.indexOf(this); + removed = this.parent.children.splice(i + 1); + child = this.parent.instruction(target, value); + Array.prototype.push.apply(this.parent.children, removed); + return this; + }; + + XMLNode.prototype.declaration = function(version, encoding, standalone) { + var doc, xmldec; + doc = this.document(); + xmldec = new XMLDeclaration(doc, version, encoding, standalone); + if (doc.children[0] instanceof XMLDeclaration) { + doc.children[0] = xmldec; + } else { + doc.children.unshift(xmldec); + } + return doc.root() || doc; + }; + + XMLNode.prototype.doctype = function(pubID, sysID) { + var child, doc, doctype, i, j, k, len, len1, ref1, ref2; + doc = this.document(); + doctype = new XMLDocType(doc, pubID, sysID); + ref1 = doc.children; + for (i = j = 0, len = ref1.length; j < len; i = ++j) { + child = ref1[i]; + if (child instanceof XMLDocType) { + doc.children[i] = doctype; + return doctype; + } + } + ref2 = doc.children; + for (i = k = 0, len1 = ref2.length; k < len1; i = ++k) { + child = ref2[i]; + if (child.isRoot) { + doc.children.splice(i, 0, doctype); + return doctype; + } + } + doc.children.push(doctype); + return doctype; + }; + + XMLNode.prototype.up = function() { + if (this.isRoot) { + throw new Error("The root node has no parent. Use doc() if you need to get the document object."); + } + return this.parent; + }; + + XMLNode.prototype.root = function() { + var node; + node = this; + while (node) { + if (node.isDocument) { + return node.rootObject; + } else if (node.isRoot) { + return node; + } else { + node = node.parent; + } + } + }; + + XMLNode.prototype.document = function() { + var node; + node = this; + while (node) { + if (node.isDocument) { + return node; + } else { + node = node.parent; + } + } + }; + + XMLNode.prototype.end = function(options) { + return this.document().end(options); + }; + + XMLNode.prototype.prev = function() { + var i; + i = this.parent.children.indexOf(this); + while (i > 0 && this.parent.children[i - 1].isDummy) { + i = i - 1; + } + if (i < 1) { + throw new Error("Already at the first node. " + this.debugInfo()); + } + return this.parent.children[i - 1]; + }; + + XMLNode.prototype.next = function() { + var i; + i = this.parent.children.indexOf(this); + while (i < this.parent.children.length - 1 && this.parent.children[i + 1].isDummy) { + i = i + 1; + } + if (i === -1 || i === this.parent.children.length - 1) { + throw new Error("Already at the last node. " + this.debugInfo()); + } + return this.parent.children[i + 1]; + }; + + XMLNode.prototype.importDocument = function(doc) { + var clonedRoot; + clonedRoot = doc.root().clone(); + clonedRoot.parent = this; + clonedRoot.isRoot = false; + this.children.push(clonedRoot); + return this; + }; + + XMLNode.prototype.debugInfo = function(name) { + var ref1, ref2; + name = name || this.name; + if ((name == null) && !((ref1 = this.parent) != null ? ref1.name : void 0)) { + return ""; + } else if (name == null) { + return "parent: <" + this.parent.name + ">"; + } else if (!((ref2 = this.parent) != null ? ref2.name : void 0)) { + return "node: <" + name + ">"; + } else { + return "node: <" + name + ">, parent: <" + this.parent.name + ">"; + } + }; + + XMLNode.prototype.ele = function(name, attributes, text) { + return this.element(name, attributes, text); + }; + + XMLNode.prototype.nod = function(name, attributes, text) { + return this.node(name, attributes, text); + }; + + XMLNode.prototype.txt = function(value) { + return this.text(value); + }; + + XMLNode.prototype.dat = function(value) { + return this.cdata(value); + }; + + XMLNode.prototype.com = function(value) { + return this.comment(value); + }; + + XMLNode.prototype.ins = function(target, value) { + return this.instruction(target, value); + }; + + XMLNode.prototype.doc = function() { + return this.document(); + }; + + XMLNode.prototype.dec = function(version, encoding, standalone) { + return this.declaration(version, encoding, standalone); + }; + + XMLNode.prototype.dtd = function(pubID, sysID) { + return this.doctype(pubID, sysID); + }; + + XMLNode.prototype.e = function(name, attributes, text) { + return this.element(name, attributes, text); + }; + + XMLNode.prototype.n = function(name, attributes, text) { + return this.node(name, attributes, text); + }; + + XMLNode.prototype.t = function(value) { + return this.text(value); + }; + + XMLNode.prototype.d = function(value) { + return this.cdata(value); + }; + + XMLNode.prototype.c = function(value) { + return this.comment(value); + }; + + XMLNode.prototype.r = function(value) { + return this.raw(value); + }; + + XMLNode.prototype.i = function(target, value) { + return this.instruction(target, value); + }; + + XMLNode.prototype.u = function() { + return this.up(); + }; + + XMLNode.prototype.importXMLBuilder = function(doc) { + return this.importDocument(doc); + }; + + return XMLNode; + + })(); + +}).call(this); diff --git a/node_modules/xmlbuilder/lib/XMLProcessingInstruction.js b/node_modules/xmlbuilder/lib/XMLProcessingInstruction.js new file mode 100644 index 00000000..25e00ff9 --- /dev/null +++ b/node_modules/xmlbuilder/lib/XMLProcessingInstruction.js @@ -0,0 +1,35 @@ +// Generated by CoffeeScript 1.12.7 +(function() { + var XMLNode, XMLProcessingInstruction, + extend = 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; }, + hasProp = {}.hasOwnProperty; + + XMLNode = require('./XMLNode'); + + module.exports = XMLProcessingInstruction = (function(superClass) { + extend(XMLProcessingInstruction, superClass); + + function XMLProcessingInstruction(parent, target, value) { + XMLProcessingInstruction.__super__.constructor.call(this, parent); + if (target == null) { + throw new Error("Missing instruction target. " + this.debugInfo()); + } + this.target = this.stringify.insTarget(target); + if (value) { + this.value = this.stringify.insValue(value); + } + } + + XMLProcessingInstruction.prototype.clone = function() { + return Object.create(this); + }; + + XMLProcessingInstruction.prototype.toString = function(options) { + return this.options.writer.set(options).processingInstruction(this); + }; + + return XMLProcessingInstruction; + + })(XMLNode); + +}).call(this); diff --git a/node_modules/xmlbuilder/lib/XMLRaw.js b/node_modules/xmlbuilder/lib/XMLRaw.js new file mode 100644 index 00000000..ace26987 --- /dev/null +++ b/node_modules/xmlbuilder/lib/XMLRaw.js @@ -0,0 +1,32 @@ +// Generated by CoffeeScript 1.12.7 +(function() { + var XMLNode, XMLRaw, + extend = 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; }, + hasProp = {}.hasOwnProperty; + + XMLNode = require('./XMLNode'); + + module.exports = XMLRaw = (function(superClass) { + extend(XMLRaw, superClass); + + function XMLRaw(parent, text) { + XMLRaw.__super__.constructor.call(this, parent); + if (text == null) { + throw new Error("Missing raw text. " + this.debugInfo()); + } + this.value = this.stringify.raw(text); + } + + XMLRaw.prototype.clone = function() { + return Object.create(this); + }; + + XMLRaw.prototype.toString = function(options) { + return this.options.writer.set(options).raw(this); + }; + + return XMLRaw; + + })(XMLNode); + +}).call(this); diff --git a/node_modules/xmlbuilder/lib/XMLStreamWriter.js b/node_modules/xmlbuilder/lib/XMLStreamWriter.js new file mode 100644 index 00000000..31087bf0 --- /dev/null +++ b/node_modules/xmlbuilder/lib/XMLStreamWriter.js @@ -0,0 +1,287 @@ +// Generated by CoffeeScript 1.12.7 +(function() { + var XMLCData, XMLComment, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDeclaration, XMLDocType, XMLDummy, XMLElement, XMLProcessingInstruction, XMLRaw, XMLStreamWriter, XMLText, XMLWriterBase, + extend = 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; }, + hasProp = {}.hasOwnProperty; + + XMLDeclaration = require('./XMLDeclaration'); + + XMLDocType = require('./XMLDocType'); + + XMLCData = require('./XMLCData'); + + XMLComment = require('./XMLComment'); + + XMLElement = require('./XMLElement'); + + XMLRaw = require('./XMLRaw'); + + XMLText = require('./XMLText'); + + XMLProcessingInstruction = require('./XMLProcessingInstruction'); + + XMLDummy = require('./XMLDummy'); + + XMLDTDAttList = require('./XMLDTDAttList'); + + XMLDTDElement = require('./XMLDTDElement'); + + XMLDTDEntity = require('./XMLDTDEntity'); + + XMLDTDNotation = require('./XMLDTDNotation'); + + XMLWriterBase = require('./XMLWriterBase'); + + module.exports = XMLStreamWriter = (function(superClass) { + extend(XMLStreamWriter, superClass); + + function XMLStreamWriter(stream, options) { + XMLStreamWriter.__super__.constructor.call(this, options); + this.stream = stream; + } + + XMLStreamWriter.prototype.document = function(doc) { + var child, i, j, len, len1, ref, ref1, results; + ref = doc.children; + for (i = 0, len = ref.length; i < len; i++) { + child = ref[i]; + child.isLastRootNode = false; + } + doc.children[doc.children.length - 1].isLastRootNode = true; + ref1 = doc.children; + results = []; + for (j = 0, len1 = ref1.length; j < len1; j++) { + child = ref1[j]; + if (child instanceof XMLDummy) { + continue; + } + switch (false) { + case !(child instanceof XMLDeclaration): + results.push(this.declaration(child)); + break; + case !(child instanceof XMLDocType): + results.push(this.docType(child)); + break; + case !(child instanceof XMLComment): + results.push(this.comment(child)); + break; + case !(child instanceof XMLProcessingInstruction): + results.push(this.processingInstruction(child)); + break; + default: + results.push(this.element(child)); + } + } + return results; + }; + + XMLStreamWriter.prototype.attribute = function(att) { + return this.stream.write(' ' + att.name + '="' + att.value + '"'); + }; + + XMLStreamWriter.prototype.cdata = function(node, level) { + return this.stream.write(this.space(level) + '' + this.endline(node)); + }; + + XMLStreamWriter.prototype.comment = function(node, level) { + return this.stream.write(this.space(level) + '' + this.endline(node)); + }; + + XMLStreamWriter.prototype.declaration = function(node, level) { + this.stream.write(this.space(level)); + this.stream.write(''); + return this.stream.write(this.endline(node)); + }; + + XMLStreamWriter.prototype.docType = function(node, level) { + var child, i, len, ref; + level || (level = 0); + this.stream.write(this.space(level)); + this.stream.write(' 0) { + this.stream.write(' ['); + this.stream.write(this.endline(node)); + ref = node.children; + for (i = 0, len = ref.length; i < len; i++) { + child = ref[i]; + switch (false) { + case !(child instanceof XMLDTDAttList): + this.dtdAttList(child, level + 1); + break; + case !(child instanceof XMLDTDElement): + this.dtdElement(child, level + 1); + break; + case !(child instanceof XMLDTDEntity): + this.dtdEntity(child, level + 1); + break; + case !(child instanceof XMLDTDNotation): + this.dtdNotation(child, level + 1); + break; + case !(child instanceof XMLCData): + this.cdata(child, level + 1); + break; + case !(child instanceof XMLComment): + this.comment(child, level + 1); + break; + case !(child instanceof XMLProcessingInstruction): + this.processingInstruction(child, level + 1); + break; + default: + throw new Error("Unknown DTD node type: " + child.constructor.name); + } + } + this.stream.write(']'); + } + this.stream.write(this.spacebeforeslash + '>'); + return this.stream.write(this.endline(node)); + }; + + XMLStreamWriter.prototype.element = function(node, level) { + var att, child, i, len, name, ref, ref1, space; + level || (level = 0); + space = this.space(level); + this.stream.write(space + '<' + node.name); + ref = node.attributes; + for (name in ref) { + if (!hasProp.call(ref, name)) continue; + att = ref[name]; + this.attribute(att); + } + if (node.children.length === 0 || node.children.every(function(e) { + return e.value === ''; + })) { + if (this.allowEmpty) { + this.stream.write('>'); + } else { + this.stream.write(this.spacebeforeslash + '/>'); + } + } else if (this.pretty && node.children.length === 1 && (node.children[0].value != null)) { + this.stream.write('>'); + this.stream.write(node.children[0].value); + this.stream.write(''); + } else { + this.stream.write('>' + this.newline); + ref1 = node.children; + for (i = 0, len = ref1.length; i < len; i++) { + child = ref1[i]; + switch (false) { + case !(child instanceof XMLCData): + this.cdata(child, level + 1); + break; + case !(child instanceof XMLComment): + this.comment(child, level + 1); + break; + case !(child instanceof XMLElement): + this.element(child, level + 1); + break; + case !(child instanceof XMLRaw): + this.raw(child, level + 1); + break; + case !(child instanceof XMLText): + this.text(child, level + 1); + break; + case !(child instanceof XMLProcessingInstruction): + this.processingInstruction(child, level + 1); + break; + case !(child instanceof XMLDummy): + ''; + break; + default: + throw new Error("Unknown XML node type: " + child.constructor.name); + } + } + this.stream.write(space + ''); + } + return this.stream.write(this.endline(node)); + }; + + XMLStreamWriter.prototype.processingInstruction = function(node, level) { + this.stream.write(this.space(level) + '' + this.endline(node)); + }; + + XMLStreamWriter.prototype.raw = function(node, level) { + return this.stream.write(this.space(level) + node.value + this.endline(node)); + }; + + XMLStreamWriter.prototype.text = function(node, level) { + return this.stream.write(this.space(level) + node.value + this.endline(node)); + }; + + XMLStreamWriter.prototype.dtdAttList = function(node, level) { + this.stream.write(this.space(level) + '' + this.endline(node)); + }; + + XMLStreamWriter.prototype.dtdElement = function(node, level) { + this.stream.write(this.space(level) + '' + this.endline(node)); + }; + + XMLStreamWriter.prototype.dtdEntity = function(node, level) { + this.stream.write(this.space(level) + '' + this.endline(node)); + }; + + XMLStreamWriter.prototype.dtdNotation = function(node, level) { + this.stream.write(this.space(level) + '' + this.endline(node)); + }; + + XMLStreamWriter.prototype.endline = function(node) { + if (!node.isLastRootNode) { + return this.newline; + } else { + return ''; + } + }; + + return XMLStreamWriter; + + })(XMLWriterBase); + +}).call(this); diff --git a/node_modules/xmlbuilder/lib/XMLStringWriter.js b/node_modules/xmlbuilder/lib/XMLStringWriter.js new file mode 100644 index 00000000..d6bea1ec --- /dev/null +++ b/node_modules/xmlbuilder/lib/XMLStringWriter.js @@ -0,0 +1,341 @@ +// Generated by CoffeeScript 1.12.7 +(function() { + var XMLCData, XMLComment, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDeclaration, XMLDocType, XMLDummy, XMLElement, XMLProcessingInstruction, XMLRaw, XMLStringWriter, XMLText, XMLWriterBase, + extend = 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; }, + hasProp = {}.hasOwnProperty; + + XMLDeclaration = require('./XMLDeclaration'); + + XMLDocType = require('./XMLDocType'); + + XMLCData = require('./XMLCData'); + + XMLComment = require('./XMLComment'); + + XMLElement = require('./XMLElement'); + + XMLRaw = require('./XMLRaw'); + + XMLText = require('./XMLText'); + + XMLProcessingInstruction = require('./XMLProcessingInstruction'); + + XMLDummy = require('./XMLDummy'); + + XMLDTDAttList = require('./XMLDTDAttList'); + + XMLDTDElement = require('./XMLDTDElement'); + + XMLDTDEntity = require('./XMLDTDEntity'); + + XMLDTDNotation = require('./XMLDTDNotation'); + + XMLWriterBase = require('./XMLWriterBase'); + + module.exports = XMLStringWriter = (function(superClass) { + extend(XMLStringWriter, superClass); + + function XMLStringWriter(options) { + XMLStringWriter.__super__.constructor.call(this, options); + } + + XMLStringWriter.prototype.document = function(doc) { + var child, i, len, r, ref; + this.textispresent = false; + r = ''; + ref = doc.children; + for (i = 0, len = ref.length; i < len; i++) { + child = ref[i]; + if (child instanceof XMLDummy) { + continue; + } + r += (function() { + switch (false) { + case !(child instanceof XMLDeclaration): + return this.declaration(child); + case !(child instanceof XMLDocType): + return this.docType(child); + case !(child instanceof XMLComment): + return this.comment(child); + case !(child instanceof XMLProcessingInstruction): + return this.processingInstruction(child); + default: + return this.element(child, 0); + } + }).call(this); + } + if (this.pretty && r.slice(-this.newline.length) === this.newline) { + r = r.slice(0, -this.newline.length); + } + return r; + }; + + XMLStringWriter.prototype.attribute = function(att) { + return ' ' + att.name + '="' + att.value + '"'; + }; + + XMLStringWriter.prototype.cdata = function(node, level) { + return this.space(level) + '' + this.newline; + }; + + XMLStringWriter.prototype.comment = function(node, level) { + return this.space(level) + '' + this.newline; + }; + + XMLStringWriter.prototype.declaration = function(node, level) { + var r; + r = this.space(level); + r += ''; + r += this.newline; + return r; + }; + + XMLStringWriter.prototype.docType = function(node, level) { + var child, i, len, r, ref; + level || (level = 0); + r = this.space(level); + r += ' 0) { + r += ' ['; + r += this.newline; + ref = node.children; + for (i = 0, len = ref.length; i < len; i++) { + child = ref[i]; + r += (function() { + switch (false) { + case !(child instanceof XMLDTDAttList): + return this.dtdAttList(child, level + 1); + case !(child instanceof XMLDTDElement): + return this.dtdElement(child, level + 1); + case !(child instanceof XMLDTDEntity): + return this.dtdEntity(child, level + 1); + case !(child instanceof XMLDTDNotation): + return this.dtdNotation(child, level + 1); + case !(child instanceof XMLCData): + return this.cdata(child, level + 1); + case !(child instanceof XMLComment): + return this.comment(child, level + 1); + case !(child instanceof XMLProcessingInstruction): + return this.processingInstruction(child, level + 1); + default: + throw new Error("Unknown DTD node type: " + child.constructor.name); + } + }).call(this); + } + r += ']'; + } + r += this.spacebeforeslash + '>'; + r += this.newline; + return r; + }; + + XMLStringWriter.prototype.element = function(node, level) { + var att, child, i, j, len, len1, name, r, ref, ref1, ref2, space, textispresentwasset; + level || (level = 0); + textispresentwasset = false; + if (this.textispresent) { + this.newline = ''; + this.pretty = false; + } else { + this.newline = this.newlinedefault; + this.pretty = this.prettydefault; + } + space = this.space(level); + r = ''; + r += space + '<' + node.name; + ref = node.attributes; + for (name in ref) { + if (!hasProp.call(ref, name)) continue; + att = ref[name]; + r += this.attribute(att); + } + if (node.children.length === 0 || node.children.every(function(e) { + return e.value === ''; + })) { + if (this.allowEmpty) { + r += '>' + this.newline; + } else { + r += this.spacebeforeslash + '/>' + this.newline; + } + } else if (this.pretty && node.children.length === 1 && (node.children[0].value != null)) { + r += '>'; + r += node.children[0].value; + r += '' + this.newline; + } else { + if (this.dontprettytextnodes) { + ref1 = node.children; + for (i = 0, len = ref1.length; i < len; i++) { + child = ref1[i]; + if (child.value != null) { + this.textispresent++; + textispresentwasset = true; + break; + } + } + } + if (this.textispresent) { + this.newline = ''; + this.pretty = false; + space = this.space(level); + } + r += '>' + this.newline; + ref2 = node.children; + for (j = 0, len1 = ref2.length; j < len1; j++) { + child = ref2[j]; + r += (function() { + switch (false) { + case !(child instanceof XMLCData): + return this.cdata(child, level + 1); + case !(child instanceof XMLComment): + return this.comment(child, level + 1); + case !(child instanceof XMLElement): + return this.element(child, level + 1); + case !(child instanceof XMLRaw): + return this.raw(child, level + 1); + case !(child instanceof XMLText): + return this.text(child, level + 1); + case !(child instanceof XMLProcessingInstruction): + return this.processingInstruction(child, level + 1); + case !(child instanceof XMLDummy): + return ''; + default: + throw new Error("Unknown XML node type: " + child.constructor.name); + } + }).call(this); + } + if (textispresentwasset) { + this.textispresent--; + } + if (!this.textispresent) { + this.newline = this.newlinedefault; + this.pretty = this.prettydefault; + } + r += space + '' + this.newline; + } + return r; + }; + + XMLStringWriter.prototype.processingInstruction = function(node, level) { + var r; + r = this.space(level) + '' + this.newline; + return r; + }; + + XMLStringWriter.prototype.raw = function(node, level) { + return this.space(level) + node.value + this.newline; + }; + + XMLStringWriter.prototype.text = function(node, level) { + return this.space(level) + node.value + this.newline; + }; + + XMLStringWriter.prototype.dtdAttList = function(node, level) { + var r; + r = this.space(level) + '' + this.newline; + return r; + }; + + XMLStringWriter.prototype.dtdElement = function(node, level) { + return this.space(level) + '' + this.newline; + }; + + XMLStringWriter.prototype.dtdEntity = function(node, level) { + var r; + r = this.space(level) + '' + this.newline; + return r; + }; + + XMLStringWriter.prototype.dtdNotation = function(node, level) { + var r; + r = this.space(level) + '' + this.newline; + return r; + }; + + XMLStringWriter.prototype.openNode = function(node, level) { + var att, name, r, ref; + level || (level = 0); + if (node instanceof XMLElement) { + r = this.space(level) + '<' + node.name; + ref = node.attributes; + for (name in ref) { + if (!hasProp.call(ref, name)) continue; + att = ref[name]; + r += this.attribute(att); + } + r += (node.children ? '>' : '/>') + this.newline; + return r; + } else { + r = this.space(level) + '') + this.newline; + return r; + } + }; + + XMLStringWriter.prototype.closeNode = function(node, level) { + level || (level = 0); + switch (false) { + case !(node instanceof XMLElement): + return this.space(level) + '' + this.newline; + case !(node instanceof XMLDocType): + return this.space(level) + ']>' + this.newline; + } + }; + + return XMLStringWriter; + + })(XMLWriterBase); + +}).call(this); diff --git a/node_modules/xmlbuilder/lib/XMLStringifier.js b/node_modules/xmlbuilder/lib/XMLStringifier.js new file mode 100644 index 00000000..c1844fb2 --- /dev/null +++ b/node_modules/xmlbuilder/lib/XMLStringifier.js @@ -0,0 +1,163 @@ +// Generated by CoffeeScript 1.12.7 +(function() { + var XMLStringifier, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + hasProp = {}.hasOwnProperty; + + module.exports = XMLStringifier = (function() { + function XMLStringifier(options) { + this.assertLegalChar = bind(this.assertLegalChar, this); + var key, ref, value; + options || (options = {}); + this.noDoubleEncoding = options.noDoubleEncoding; + ref = options.stringify || {}; + for (key in ref) { + if (!hasProp.call(ref, key)) continue; + value = ref[key]; + this[key] = value; + } + } + + XMLStringifier.prototype.eleName = function(val) { + val = '' + val || ''; + return this.assertLegalChar(val); + }; + + XMLStringifier.prototype.eleText = function(val) { + val = '' + val || ''; + return this.assertLegalChar(this.elEscape(val)); + }; + + XMLStringifier.prototype.cdata = function(val) { + val = '' + val || ''; + val = val.replace(']]>', ']]]]>'); + return this.assertLegalChar(val); + }; + + XMLStringifier.prototype.comment = function(val) { + val = '' + val || ''; + if (val.match(/--/)) { + throw new Error("Comment text cannot contain double-hypen: " + val); + } + return this.assertLegalChar(val); + }; + + XMLStringifier.prototype.raw = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.attName = function(val) { + return val = '' + val || ''; + }; + + XMLStringifier.prototype.attValue = function(val) { + val = '' + val || ''; + return this.attEscape(val); + }; + + XMLStringifier.prototype.insTarget = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.insValue = function(val) { + val = '' + val || ''; + if (val.match(/\?>/)) { + throw new Error("Invalid processing instruction value: " + val); + } + return val; + }; + + XMLStringifier.prototype.xmlVersion = function(val) { + val = '' + val || ''; + if (!val.match(/1\.[0-9]+/)) { + throw new Error("Invalid version number: " + val); + } + return val; + }; + + XMLStringifier.prototype.xmlEncoding = function(val) { + val = '' + val || ''; + if (!val.match(/^[A-Za-z](?:[A-Za-z0-9._-])*$/)) { + throw new Error("Invalid encoding: " + val); + } + return val; + }; + + XMLStringifier.prototype.xmlStandalone = function(val) { + if (val) { + return "yes"; + } else { + return "no"; + } + }; + + XMLStringifier.prototype.dtdPubID = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.dtdSysID = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.dtdElementValue = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.dtdAttType = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.dtdAttDefault = function(val) { + if (val != null) { + return '' + val || ''; + } else { + return val; + } + }; + + XMLStringifier.prototype.dtdEntityValue = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.dtdNData = function(val) { + return '' + val || ''; + }; + + XMLStringifier.prototype.convertAttKey = '@'; + + XMLStringifier.prototype.convertPIKey = '?'; + + XMLStringifier.prototype.convertTextKey = '#text'; + + XMLStringifier.prototype.convertCDataKey = '#cdata'; + + XMLStringifier.prototype.convertCommentKey = '#comment'; + + XMLStringifier.prototype.convertRawKey = '#raw'; + + XMLStringifier.prototype.assertLegalChar = function(str) { + var res; + res = str.match(/[\0\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/); + if (res) { + throw new Error("Invalid character in string: " + str + " at index " + res.index); + } + return str; + }; + + XMLStringifier.prototype.elEscape = function(str) { + var ampregex; + ampregex = this.noDoubleEncoding ? /(?!&\S+;)&/g : /&/g; + return str.replace(ampregex, '&').replace(//g, '>').replace(/\r/g, ' '); + }; + + XMLStringifier.prototype.attEscape = function(str) { + var ampregex; + ampregex = this.noDoubleEncoding ? /(?!&\S+;)&/g : /&/g; + return str.replace(ampregex, '&').replace(/ 0) { + return new Array(indent).join(this.indent); + } else { + return ''; + } + } else { + return ''; + } + }; + + return XMLWriterBase; + + })(); + +}).call(this); diff --git a/node_modules/xmlbuilder/lib/index.js b/node_modules/xmlbuilder/lib/index.js new file mode 100644 index 00000000..2856bcb2 --- /dev/null +++ b/node_modules/xmlbuilder/lib/index.js @@ -0,0 +1,53 @@ +// Generated by CoffeeScript 1.12.7 +(function() { + var XMLDocument, XMLDocumentCB, XMLStreamWriter, XMLStringWriter, assign, isFunction, ref; + + ref = require('./Utility'), assign = ref.assign, isFunction = ref.isFunction; + + XMLDocument = require('./XMLDocument'); + + XMLDocumentCB = require('./XMLDocumentCB'); + + XMLStringWriter = require('./XMLStringWriter'); + + XMLStreamWriter = require('./XMLStreamWriter'); + + module.exports.create = function(name, xmldec, doctype, options) { + var doc, root; + if (name == null) { + throw new Error("Root element needs a name."); + } + options = assign({}, xmldec, doctype, options); + doc = new XMLDocument(options); + root = doc.element(name); + if (!options.headless) { + doc.declaration(options); + if ((options.pubID != null) || (options.sysID != null)) { + doc.doctype(options); + } + } + return root; + }; + + module.exports.begin = function(options, onData, onEnd) { + var ref1; + if (isFunction(options)) { + ref1 = [options, onData], onData = ref1[0], onEnd = ref1[1]; + options = {}; + } + if (onData) { + return new XMLDocumentCB(options, onData, onEnd); + } else { + return new XMLDocument(options); + } + }; + + module.exports.stringWriter = function(options) { + return new XMLStringWriter(options); + }; + + module.exports.streamWriter = function(stream, options) { + return new XMLStreamWriter(stream, options); + }; + +}).call(this); diff --git a/node_modules/xmlbuilder/package.json b/node_modules/xmlbuilder/package.json new file mode 100644 index 00000000..3754921e --- /dev/null +++ b/node_modules/xmlbuilder/package.json @@ -0,0 +1,65 @@ +{ + "_from": "xmlbuilder@^10.1.1", + "_id": "xmlbuilder@10.1.1", + "_inBundle": false, + "_integrity": "sha512-OyzrcFLL/nb6fMGHbiRDuPup9ljBycsdCypwuyg5AAHvyWzGfChJpCXMG88AGTIMFhGZ9RccFN1e6lhg3hkwKg==", + "_location": "/xmlbuilder", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "xmlbuilder@^10.1.1", + "name": "xmlbuilder", + "escapedName": "xmlbuilder", + "rawSpec": "^10.1.1", + "saveSpec": null, + "fetchSpec": "^10.1.1" + }, + "_requiredBy": [ + "/strong-soap" + ], + "_resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-10.1.1.tgz", + "_shasum": "8cae6688cc9b38d850b7c8d3c0a4161dcaf475b0", + "_spec": "xmlbuilder@^10.1.1", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/strong-soap", + "author": { + "name": "Ozgur Ozcitak", + "email": "oozcitak@gmail.com" + }, + "bugs": { + "url": "http://github.com/oozcitak/xmlbuilder-js/issues" + }, + "bundleDependencies": false, + "contributors": [], + "dependencies": {}, + "deprecated": false, + "description": "An XML builder for node.js", + "devDependencies": { + "coffee-coverage": "2.*", + "coffeescript": "1.*", + "coveralls": "*", + "istanbul": "*", + "mocha": "*" + }, + "engines": { + "node": ">=4.0" + }, + "homepage": "http://github.com/oozcitak/xmlbuilder-js", + "keywords": [ + "xml", + "xmlbuilder" + ], + "license": "MIT", + "main": "./lib/index", + "name": "xmlbuilder", + "repository": { + "type": "git", + "url": "git://github.com/oozcitak/xmlbuilder-js.git" + }, + "scripts": { + "postpublish": "rm -rf lib", + "prepublishOnly": "coffee -co lib src", + "test": "mocha \"test/**/*.coffee\" && istanbul report text lcov" + }, + "version": "10.1.1" +} diff --git a/node_modules/xmldom/.npmignore b/node_modules/xmldom/.npmignore new file mode 100644 index 00000000..b094a442 --- /dev/null +++ b/node_modules/xmldom/.npmignore @@ -0,0 +1,5 @@ +test +t +travis.yml +.project +changelog diff --git a/node_modules/xmldom/.travis.yml b/node_modules/xmldom/.travis.yml new file mode 100644 index 00000000..b95408e8 --- /dev/null +++ b/node_modules/xmldom/.travis.yml @@ -0,0 +1,22 @@ +language: node_js + +node_js: + - '0.10' + +branches: + only: + - master + - proof + - travis-ci + +# Not using `npm install --dev` because it is recursive. It will pull in the all +# development dependencies for CoffeeScript. Way too much spew in the Travis CI +# build output. + +before_install: + - npm install + - npm install istanbul coveralls + +env: + global: + - secure: "BxUHTsa1WVANLQoimilbZwa1MCWSdM9hOmPWBE/rsYb7uT/iiqkRXXwnWhKtN5CLvTvIQbiAzq4iyPID0S8UHrnxClYQrOuA6QkrtwgIEuDAmijao/bgxobPOremvkwXcpMGIwzYKyYQQtSEaEIQbqf6gSSKW9dBh/GZ/vfTsqo=" diff --git a/node_modules/xmldom/LICENSE b/node_modules/xmldom/LICENSE new file mode 100644 index 00000000..68a9b5e1 --- /dev/null +++ b/node_modules/xmldom/LICENSE @@ -0,0 +1,8 @@ +You can choose any one of those: + +The MIT License (MIT): + +link:http://opensource.org/licenses/MIT + +LGPL: +http://www.gnu.org/licenses/lgpl.html diff --git a/node_modules/xmldom/__package__.js b/node_modules/xmldom/__package__.js new file mode 100644 index 00000000..93af3495 --- /dev/null +++ b/node_modules/xmldom/__package__.js @@ -0,0 +1,4 @@ +this.addScript('dom.js',['DOMImplementation','XMLSerializer']); +this.addScript('dom-parser.js',['DOMHandler','DOMParser'], + ['DOMImplementation','XMLReader']); +this.addScript('sax.js','XMLReader'); \ No newline at end of file diff --git a/node_modules/xmldom/changelog b/node_modules/xmldom/changelog new file mode 100644 index 00000000..ab815bb8 --- /dev/null +++ b/node_modules/xmldom/changelog @@ -0,0 +1,14 @@ +### Version 0.1.16 + +Sat May 4 14:58:03 UTC 2013 + + * Correctly handle multibyte Unicode greater than two byts. #57. #56. + * Initial unit testing and test coverage. #53. #46. #19. + * Create Bower `component.json` #52. + +### Version 0.1.8 + + * Add: some test case from node-o3-xml(excludes xpath support) + * Fix: remove existed attribute before setting (bug introduced in v0.1.5) + * Fix: index direct access for childNodes and any NodeList collection(not w3c standard) + * Fix: remove last child bug diff --git a/node_modules/xmldom/component.json b/node_modules/xmldom/component.json new file mode 100644 index 00000000..93b4d570 --- /dev/null +++ b/node_modules/xmldom/component.json @@ -0,0 +1,10 @@ +{ + "name": "xmldom", + "version": "0.1.15", + "main": "dom-parser.js", + "ignore": [ + "**/.*", + "node_modules", + "components" + ] +} diff --git a/node_modules/xmldom/dom-parser.js b/node_modules/xmldom/dom-parser.js new file mode 100644 index 00000000..08e94958 --- /dev/null +++ b/node_modules/xmldom/dom-parser.js @@ -0,0 +1,251 @@ +function DOMParser(options){ + this.options = options ||{locator:{}}; + +} +DOMParser.prototype.parseFromString = function(source,mimeType){ + var options = this.options; + var sax = new XMLReader(); + var domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler + var errorHandler = options.errorHandler; + var locator = options.locator; + var defaultNSMap = options.xmlns||{}; + var entityMap = {'lt':'<','gt':'>','amp':'&','quot':'"','apos':"'"} + if(locator){ + domBuilder.setDocumentLocator(locator) + } + + sax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator); + sax.domBuilder = options.domBuilder || domBuilder; + if(/\/x?html?$/.test(mimeType)){ + entityMap.nbsp = '\xa0'; + entityMap.copy = '\xa9'; + defaultNSMap['']= 'http://www.w3.org/1999/xhtml'; + } + defaultNSMap.xml = defaultNSMap.xml || 'http://www.w3.org/XML/1998/namespace'; + if(source){ + sax.parse(source,defaultNSMap,entityMap); + }else{ + sax.errorHandler.error("invalid doc source"); + } + return domBuilder.doc; +} +function buildErrorHandler(errorImpl,domBuilder,locator){ + if(!errorImpl){ + if(domBuilder instanceof DOMHandler){ + return domBuilder; + } + errorImpl = domBuilder ; + } + var errorHandler = {} + var isCallback = errorImpl instanceof Function; + locator = locator||{} + function build(key){ + var fn = errorImpl[key]; + if(!fn && isCallback){ + fn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl; + } + errorHandler[key] = fn && function(msg){ + fn('[xmldom '+key+']\t'+msg+_locator(locator)); + }||function(){}; + } + build('warning'); + build('error'); + build('fatalError'); + return errorHandler; +} + +//console.log('#\n\n\n\n\n\n\n####') +/** + * +ContentHandler+ErrorHandler + * +LexicalHandler+EntityResolver2 + * -DeclHandler-DTDHandler + * + * DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler + * DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2 + * @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html + */ +function DOMHandler() { + this.cdata = false; +} +function position(locator,node){ + node.lineNumber = locator.lineNumber; + node.columnNumber = locator.columnNumber; +} +/** + * @see org.xml.sax.ContentHandler#startDocument + * @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html + */ +DOMHandler.prototype = { + startDocument : function() { + this.doc = new DOMImplementation().createDocument(null, null, null); + if (this.locator) { + this.doc.documentURI = this.locator.systemId; + } + }, + startElement:function(namespaceURI, localName, qName, attrs) { + var doc = this.doc; + var el = doc.createElementNS(namespaceURI, qName||localName); + var len = attrs.length; + appendElement(this, el); + this.currentElement = el; + + this.locator && position(this.locator,el) + for (var i = 0 ; i < len; i++) { + var namespaceURI = attrs.getURI(i); + var value = attrs.getValue(i); + var qName = attrs.getQName(i); + var attr = doc.createAttributeNS(namespaceURI, qName); + this.locator &&position(attrs.getLocator(i),attr); + attr.value = attr.nodeValue = value; + el.setAttributeNode(attr) + } + }, + endElement:function(namespaceURI, localName, qName) { + var current = this.currentElement + var tagName = current.tagName; + this.currentElement = current.parentNode; + }, + startPrefixMapping:function(prefix, uri) { + }, + endPrefixMapping:function(prefix) { + }, + processingInstruction:function(target, data) { + var ins = this.doc.createProcessingInstruction(target, data); + this.locator && position(this.locator,ins) + appendElement(this, ins); + }, + ignorableWhitespace:function(ch, start, length) { + }, + characters:function(chars, start, length) { + chars = _toString.apply(this,arguments) + //console.log(chars) + if(chars){ + if (this.cdata) { + var charNode = this.doc.createCDATASection(chars); + } else { + var charNode = this.doc.createTextNode(chars); + } + if(this.currentElement){ + this.currentElement.appendChild(charNode); + }else if(/^\s*$/.test(chars)){ + this.doc.appendChild(charNode); + //process xml + } + this.locator && position(this.locator,charNode) + } + }, + skippedEntity:function(name) { + }, + endDocument:function() { + this.doc.normalize(); + }, + setDocumentLocator:function (locator) { + if(this.locator = locator){// && !('lineNumber' in locator)){ + locator.lineNumber = 0; + } + }, + //LexicalHandler + comment:function(chars, start, length) { + chars = _toString.apply(this,arguments) + var comm = this.doc.createComment(chars); + this.locator && position(this.locator,comm) + appendElement(this, comm); + }, + + startCDATA:function() { + //used in characters() methods + this.cdata = true; + }, + endCDATA:function() { + this.cdata = false; + }, + + startDTD:function(name, publicId, systemId) { + var impl = this.doc.implementation; + if (impl && impl.createDocumentType) { + var dt = impl.createDocumentType(name, publicId, systemId); + this.locator && position(this.locator,dt) + appendElement(this, dt); + } + }, + /** + * @see org.xml.sax.ErrorHandler + * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html + */ + warning:function(error) { + console.warn('[xmldom warning]\t'+error,_locator(this.locator)); + }, + error:function(error) { + console.error('[xmldom error]\t'+error,_locator(this.locator)); + }, + fatalError:function(error) { + console.error('[xmldom fatalError]\t'+error,_locator(this.locator)); + throw error; + } +} +function _locator(l){ + if(l){ + return '\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']' + } +} +function _toString(chars,start,length){ + if(typeof chars == 'string'){ + return chars.substr(start,length) + }else{//java sax connect width xmldom on rhino(what about: "? && !(chars instanceof String)") + if(chars.length >= start+length || start){ + return new java.lang.String(chars,start,length)+''; + } + return chars; + } +} + +/* + * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html + * used method of org.xml.sax.ext.LexicalHandler: + * #comment(chars, start, length) + * #startCDATA() + * #endCDATA() + * #startDTD(name, publicId, systemId) + * + * + * IGNORED method of org.xml.sax.ext.LexicalHandler: + * #endDTD() + * #startEntity(name) + * #endEntity(name) + * + * + * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html + * IGNORED method of org.xml.sax.ext.DeclHandler + * #attributeDecl(eName, aName, type, mode, value) + * #elementDecl(name, model) + * #externalEntityDecl(name, publicId, systemId) + * #internalEntityDecl(name, value) + * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html + * IGNORED method of org.xml.sax.EntityResolver2 + * #resolveEntity(String name,String publicId,String baseURI,String systemId) + * #resolveEntity(publicId, systemId) + * #getExternalSubset(name, baseURI) + * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html + * IGNORED method of org.xml.sax.DTDHandler + * #notationDecl(name, publicId, systemId) {}; + * #unparsedEntityDecl(name, publicId, systemId, notationName) {}; + */ +"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace(/\w+/g,function(key){ + DOMHandler.prototype[key] = function(){return null} +}) + +/* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */ +function appendElement (hander,node) { + if (!hander.currentElement) { + hander.doc.appendChild(node); + } else { + hander.currentElement.appendChild(node); + } +}//appendChild and setAttributeNS are preformance key + +//if(typeof require == 'function'){ + var XMLReader = require('./sax').XMLReader; + var DOMImplementation = exports.DOMImplementation = require('./dom').DOMImplementation; + exports.XMLSerializer = require('./dom').XMLSerializer ; + exports.DOMParser = DOMParser; +//} diff --git a/node_modules/xmldom/dom.js b/node_modules/xmldom/dom.js new file mode 100644 index 00000000..b290df08 --- /dev/null +++ b/node_modules/xmldom/dom.js @@ -0,0 +1,1244 @@ +/* + * DOM Level 2 + * Object DOMException + * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html + * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html + */ + +function copy(src,dest){ + for(var p in src){ + dest[p] = src[p]; + } +} +/** +^\w+\.prototype\.([_\w]+)\s*=\s*((?:.*\{\s*?[\r\n][\s\S]*?^})|\S.*?(?=[;\r\n]));? +^\w+\.prototype\.([_\w]+)\s*=\s*(\S.*?(?=[;\r\n]));? + */ +function _extends(Class,Super){ + var pt = Class.prototype; + if(Object.create){ + var ppt = Object.create(Super.prototype) + pt.__proto__ = ppt; + } + if(!(pt instanceof Super)){ + function t(){}; + t.prototype = Super.prototype; + t = new t(); + copy(pt,t); + Class.prototype = pt = t; + } + if(pt.constructor != Class){ + if(typeof Class != 'function'){ + console.error("unknow Class:"+Class) + } + pt.constructor = Class + } +} +var htmlns = 'http://www.w3.org/1999/xhtml' ; +// Node Types +var NodeType = {} +var ELEMENT_NODE = NodeType.ELEMENT_NODE = 1; +var ATTRIBUTE_NODE = NodeType.ATTRIBUTE_NODE = 2; +var TEXT_NODE = NodeType.TEXT_NODE = 3; +var CDATA_SECTION_NODE = NodeType.CDATA_SECTION_NODE = 4; +var ENTITY_REFERENCE_NODE = NodeType.ENTITY_REFERENCE_NODE = 5; +var ENTITY_NODE = NodeType.ENTITY_NODE = 6; +var PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7; +var COMMENT_NODE = NodeType.COMMENT_NODE = 8; +var DOCUMENT_NODE = NodeType.DOCUMENT_NODE = 9; +var DOCUMENT_TYPE_NODE = NodeType.DOCUMENT_TYPE_NODE = 10; +var DOCUMENT_FRAGMENT_NODE = NodeType.DOCUMENT_FRAGMENT_NODE = 11; +var NOTATION_NODE = NodeType.NOTATION_NODE = 12; + +// ExceptionCode +var ExceptionCode = {} +var ExceptionMessage = {}; +var INDEX_SIZE_ERR = ExceptionCode.INDEX_SIZE_ERR = ((ExceptionMessage[1]="Index size error"),1); +var DOMSTRING_SIZE_ERR = ExceptionCode.DOMSTRING_SIZE_ERR = ((ExceptionMessage[2]="DOMString size error"),2); +var HIERARCHY_REQUEST_ERR = ExceptionCode.HIERARCHY_REQUEST_ERR = ((ExceptionMessage[3]="Hierarchy request error"),3); +var WRONG_DOCUMENT_ERR = ExceptionCode.WRONG_DOCUMENT_ERR = ((ExceptionMessage[4]="Wrong document"),4); +var INVALID_CHARACTER_ERR = ExceptionCode.INVALID_CHARACTER_ERR = ((ExceptionMessage[5]="Invalid character"),5); +var NO_DATA_ALLOWED_ERR = ExceptionCode.NO_DATA_ALLOWED_ERR = ((ExceptionMessage[6]="No data allowed"),6); +var NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]="No modification allowed"),7); +var NOT_FOUND_ERR = ExceptionCode.NOT_FOUND_ERR = ((ExceptionMessage[8]="Not found"),8); +var NOT_SUPPORTED_ERR = ExceptionCode.NOT_SUPPORTED_ERR = ((ExceptionMessage[9]="Not supported"),9); +var INUSE_ATTRIBUTE_ERR = ExceptionCode.INUSE_ATTRIBUTE_ERR = ((ExceptionMessage[10]="Attribute in use"),10); +//level2 +var INVALID_STATE_ERR = ExceptionCode.INVALID_STATE_ERR = ((ExceptionMessage[11]="Invalid state"),11); +var SYNTAX_ERR = ExceptionCode.SYNTAX_ERR = ((ExceptionMessage[12]="Syntax error"),12); +var INVALID_MODIFICATION_ERR = ExceptionCode.INVALID_MODIFICATION_ERR = ((ExceptionMessage[13]="Invalid modification"),13); +var NAMESPACE_ERR = ExceptionCode.NAMESPACE_ERR = ((ExceptionMessage[14]="Invalid namespace"),14); +var INVALID_ACCESS_ERR = ExceptionCode.INVALID_ACCESS_ERR = ((ExceptionMessage[15]="Invalid access"),15); + + +function DOMException(code, message) { + if(message instanceof Error){ + var error = message; + }else{ + error = this; + Error.call(this, ExceptionMessage[code]); + this.message = ExceptionMessage[code]; + if(Error.captureStackTrace) Error.captureStackTrace(this, DOMException); + } + error.code = code; + if(message) this.message = this.message + ": " + message; + return error; +}; +DOMException.prototype = Error.prototype; +copy(ExceptionCode,DOMException) +/** + * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177 + * The NodeList interface provides the abstraction of an ordered collection of nodes, without defining or constraining how this collection is implemented. NodeList objects in the DOM are live. + * The items in the NodeList are accessible via an integral index, starting from 0. + */ +function NodeList() { +}; +NodeList.prototype = { + /** + * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive. + * @standard level1 + */ + length:0, + /** + * Returns the indexth item in the collection. If index is greater than or equal to the number of nodes in the list, this returns null. + * @standard level1 + * @param index unsigned long + * Index into the collection. + * @return Node + * The node at the indexth position in the NodeList, or null if that is not a valid index. + */ + item: function(index) { + return this[index] || null; + }, + toString:function(isHTML,nodeFilter){ + for(var buf = [], i = 0;i=0){ + var lastIndex = list.length-1 + while(i0 || key == 'xmlns'){ +// return null; +// } + //console.log() + var i = this.length; + while(i--){ + var attr = this[i]; + //console.log(attr.nodeName,key) + if(attr.nodeName == key){ + return attr; + } + } + }, + setNamedItem: function(attr) { + var el = attr.ownerElement; + if(el && el!=this._ownerElement){ + throw new DOMException(INUSE_ATTRIBUTE_ERR); + } + var oldAttr = this.getNamedItem(attr.nodeName); + _addNamedNode(this._ownerElement,this,attr,oldAttr); + return oldAttr; + }, + /* returns Node */ + setNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR + var el = attr.ownerElement, oldAttr; + if(el && el!=this._ownerElement){ + throw new DOMException(INUSE_ATTRIBUTE_ERR); + } + oldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName); + _addNamedNode(this._ownerElement,this,attr,oldAttr); + return oldAttr; + }, + + /* returns Node */ + removeNamedItem: function(key) { + var attr = this.getNamedItem(key); + _removeNamedNode(this._ownerElement,this,attr); + return attr; + + + },// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR + + //for level2 + removeNamedItemNS:function(namespaceURI,localName){ + var attr = this.getNamedItemNS(namespaceURI,localName); + _removeNamedNode(this._ownerElement,this,attr); + return attr; + }, + getNamedItemNS: function(namespaceURI, localName) { + var i = this.length; + while(i--){ + var node = this[i]; + if(node.localName == localName && node.namespaceURI == namespaceURI){ + return node; + } + } + return null; + } +}; +/** + * @see http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490 + */ +function DOMImplementation(/* Object */ features) { + this._features = {}; + if (features) { + for (var feature in features) { + this._features = features[feature]; + } + } +}; + +DOMImplementation.prototype = { + hasFeature: function(/* string */ feature, /* string */ version) { + var versions = this._features[feature.toLowerCase()]; + if (versions && (!version || version in versions)) { + return true; + } else { + return false; + } + }, + // Introduced in DOM Level 2: + createDocument:function(namespaceURI, qualifiedName, doctype){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR,WRONG_DOCUMENT_ERR + var doc = new Document(); + doc.implementation = this; + doc.childNodes = new NodeList(); + doc.doctype = doctype; + if(doctype){ + doc.appendChild(doctype); + } + if(qualifiedName){ + var root = doc.createElementNS(namespaceURI,qualifiedName); + doc.appendChild(root); + } + return doc; + }, + // Introduced in DOM Level 2: + createDocumentType:function(qualifiedName, publicId, systemId){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR + var node = new DocumentType(); + node.name = qualifiedName; + node.nodeName = qualifiedName; + node.publicId = publicId; + node.systemId = systemId; + // Introduced in DOM Level 2: + //readonly attribute DOMString internalSubset; + + //TODO:.. + // readonly attribute NamedNodeMap entities; + // readonly attribute NamedNodeMap notations; + return node; + } +}; + + +/** + * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247 + */ + +function Node() { +}; + +Node.prototype = { + firstChild : null, + lastChild : null, + previousSibling : null, + nextSibling : null, + attributes : null, + parentNode : null, + childNodes : null, + ownerDocument : null, + nodeValue : null, + namespaceURI : null, + prefix : null, + localName : null, + // Modified in DOM Level 2: + insertBefore:function(newChild, refChild){//raises + return _insertBefore(this,newChild,refChild); + }, + replaceChild:function(newChild, oldChild){//raises + this.insertBefore(newChild,oldChild); + if(oldChild){ + this.removeChild(oldChild); + } + }, + removeChild:function(oldChild){ + return _removeChild(this,oldChild); + }, + appendChild:function(newChild){ + return this.insertBefore(newChild,null); + }, + hasChildNodes:function(){ + return this.firstChild != null; + }, + cloneNode:function(deep){ + return cloneNode(this.ownerDocument||this,this,deep); + }, + // Modified in DOM Level 2: + normalize:function(){ + var child = this.firstChild; + while(child){ + var next = child.nextSibling; + if(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){ + this.removeChild(next); + child.appendData(next.data); + }else{ + child.normalize(); + child = next; + } + } + }, + // Introduced in DOM Level 2: + isSupported:function(feature, version){ + return this.ownerDocument.implementation.hasFeature(feature,version); + }, + // Introduced in DOM Level 2: + hasAttributes:function(){ + return this.attributes.length>0; + }, + lookupPrefix:function(namespaceURI){ + var el = this; + while(el){ + var map = el._nsMap; + //console.dir(map) + if(map){ + for(var n in map){ + if(map[n] == namespaceURI){ + return n; + } + } + } + el = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode; + } + return null; + }, + // Introduced in DOM Level 3: + lookupNamespaceURI:function(prefix){ + var el = this; + while(el){ + var map = el._nsMap; + //console.dir(map) + if(map){ + if(prefix in map){ + return map[prefix] ; + } + } + el = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode; + } + return null; + }, + // Introduced in DOM Level 3: + isDefaultNamespace:function(namespaceURI){ + var prefix = this.lookupPrefix(namespaceURI); + return prefix == null; + } +}; + + +function _xmlEncoder(c){ + return c == '<' && '<' || + c == '>' && '>' || + c == '&' && '&' || + c == '"' && '"' || + '&#'+c.charCodeAt()+';' +} + + +copy(NodeType,Node); +copy(NodeType,Node.prototype); + +/** + * @param callback return true for continue,false for break + * @return boolean true: break visit; + */ +function _visitNode(node,callback){ + if(callback(node)){ + return true; + } + if(node = node.firstChild){ + do{ + if(_visitNode(node,callback)){return true} + }while(node=node.nextSibling) + } +} + + + +function Document(){ +} +function _onAddAttribute(doc,el,newAttr){ + doc && doc._inc++; + var ns = newAttr.namespaceURI ; + if(ns == 'http://www.w3.org/2000/xmlns/'){ + //update namespace + el._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value + } +} +function _onRemoveAttribute(doc,el,newAttr,remove){ + doc && doc._inc++; + var ns = newAttr.namespaceURI ; + if(ns == 'http://www.w3.org/2000/xmlns/'){ + //update namespace + delete el._nsMap[newAttr.prefix?newAttr.localName:''] + } +} +function _onUpdateChild(doc,el,newChild){ + if(doc && doc._inc){ + doc._inc++; + //update childNodes + var cs = el.childNodes; + if(newChild){ + cs[cs.length++] = newChild; + }else{ + //console.log(1) + var child = el.firstChild; + var i = 0; + while(child){ + cs[i++] = child; + child =child.nextSibling; + } + cs.length = i; + } + } +} + +/** + * attributes; + * children; + * + * writeable properties: + * nodeValue,Attr:value,CharacterData:data + * prefix + */ +function _removeChild(parentNode,child){ + var previous = child.previousSibling; + var next = child.nextSibling; + if(previous){ + previous.nextSibling = next; + }else{ + parentNode.firstChild = next + } + if(next){ + next.previousSibling = previous; + }else{ + parentNode.lastChild = previous; + } + _onUpdateChild(parentNode.ownerDocument,parentNode); + return child; +} +/** + * preformance key(refChild == null) + */ +function _insertBefore(parentNode,newChild,nextChild){ + var cp = newChild.parentNode; + if(cp){ + cp.removeChild(newChild);//remove and update + } + if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){ + var newFirst = newChild.firstChild; + if (newFirst == null) { + return newChild; + } + var newLast = newChild.lastChild; + }else{ + newFirst = newLast = newChild; + } + var pre = nextChild ? nextChild.previousSibling : parentNode.lastChild; + + newFirst.previousSibling = pre; + newLast.nextSibling = nextChild; + + + if(pre){ + pre.nextSibling = newFirst; + }else{ + parentNode.firstChild = newFirst; + } + if(nextChild == null){ + parentNode.lastChild = newLast; + }else{ + nextChild.previousSibling = newLast; + } + do{ + newFirst.parentNode = parentNode; + }while(newFirst !== newLast && (newFirst= newFirst.nextSibling)) + _onUpdateChild(parentNode.ownerDocument||parentNode,parentNode); + //console.log(parentNode.lastChild.nextSibling == null) + if (newChild.nodeType == DOCUMENT_FRAGMENT_NODE) { + newChild.firstChild = newChild.lastChild = null; + } + return newChild; +} +function _appendSingleChild(parentNode,newChild){ + var cp = newChild.parentNode; + if(cp){ + var pre = parentNode.lastChild; + cp.removeChild(newChild);//remove and update + var pre = parentNode.lastChild; + } + var pre = parentNode.lastChild; + newChild.parentNode = parentNode; + newChild.previousSibling = pre; + newChild.nextSibling = null; + if(pre){ + pre.nextSibling = newChild; + }else{ + parentNode.firstChild = newChild; + } + parentNode.lastChild = newChild; + _onUpdateChild(parentNode.ownerDocument,parentNode,newChild); + return newChild; + //console.log("__aa",parentNode.lastChild.nextSibling == null) +} +Document.prototype = { + //implementation : null, + nodeName : '#document', + nodeType : DOCUMENT_NODE, + doctype : null, + documentElement : null, + _inc : 1, + + insertBefore : function(newChild, refChild){//raises + if(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){ + var child = newChild.firstChild; + while(child){ + var next = child.nextSibling; + this.insertBefore(child,refChild); + child = next; + } + return newChild; + } + if(this.documentElement == null && newChild.nodeType == ELEMENT_NODE){ + this.documentElement = newChild; + } + + return _insertBefore(this,newChild,refChild),(newChild.ownerDocument = this),newChild; + }, + removeChild : function(oldChild){ + if(this.documentElement == oldChild){ + this.documentElement = null; + } + return _removeChild(this,oldChild); + }, + // Introduced in DOM Level 2: + importNode : function(importedNode,deep){ + return importNode(this,importedNode,deep); + }, + // Introduced in DOM Level 2: + getElementById : function(id){ + var rtv = null; + _visitNode(this.documentElement,function(node){ + if(node.nodeType == ELEMENT_NODE){ + if(node.getAttribute('id') == id){ + rtv = node; + return true; + } + } + }) + return rtv; + }, + + //document factory method: + createElement : function(tagName){ + var node = new Element(); + node.ownerDocument = this; + node.nodeName = tagName; + node.tagName = tagName; + node.childNodes = new NodeList(); + var attrs = node.attributes = new NamedNodeMap(); + attrs._ownerElement = node; + return node; + }, + createDocumentFragment : function(){ + var node = new DocumentFragment(); + node.ownerDocument = this; + node.childNodes = new NodeList(); + return node; + }, + createTextNode : function(data){ + var node = new Text(); + node.ownerDocument = this; + node.appendData(data) + return node; + }, + createComment : function(data){ + var node = new Comment(); + node.ownerDocument = this; + node.appendData(data) + return node; + }, + createCDATASection : function(data){ + var node = new CDATASection(); + node.ownerDocument = this; + node.appendData(data) + return node; + }, + createProcessingInstruction : function(target,data){ + var node = new ProcessingInstruction(); + node.ownerDocument = this; + node.tagName = node.target = target; + node.nodeValue= node.data = data; + return node; + }, + createAttribute : function(name){ + var node = new Attr(); + node.ownerDocument = this; + node.name = name; + node.nodeName = name; + node.localName = name; + node.specified = true; + return node; + }, + createEntityReference : function(name){ + var node = new EntityReference(); + node.ownerDocument = this; + node.nodeName = name; + return node; + }, + // Introduced in DOM Level 2: + createElementNS : function(namespaceURI,qualifiedName){ + var node = new Element(); + var pl = qualifiedName.split(':'); + var attrs = node.attributes = new NamedNodeMap(); + node.childNodes = new NodeList(); + node.ownerDocument = this; + node.nodeName = qualifiedName; + node.tagName = qualifiedName; + node.namespaceURI = namespaceURI; + if(pl.length == 2){ + node.prefix = pl[0]; + node.localName = pl[1]; + }else{ + //el.prefix = null; + node.localName = qualifiedName; + } + attrs._ownerElement = node; + return node; + }, + // Introduced in DOM Level 2: + createAttributeNS : function(namespaceURI,qualifiedName){ + var node = new Attr(); + var pl = qualifiedName.split(':'); + node.ownerDocument = this; + node.nodeName = qualifiedName; + node.name = qualifiedName; + node.namespaceURI = namespaceURI; + node.specified = true; + if(pl.length == 2){ + node.prefix = pl[0]; + node.localName = pl[1]; + }else{ + //el.prefix = null; + node.localName = qualifiedName; + } + return node; + } +}; +_extends(Document,Node); + + +function Element() { + this._nsMap = {}; +}; +Element.prototype = { + nodeType : ELEMENT_NODE, + hasAttribute : function(name){ + return this.getAttributeNode(name)!=null; + }, + getAttribute : function(name){ + var attr = this.getAttributeNode(name); + return attr && attr.value || ''; + }, + getAttributeNode : function(name){ + return this.attributes.getNamedItem(name); + }, + setAttribute : function(name, value){ + var attr = this.ownerDocument.createAttribute(name); + attr.value = attr.nodeValue = "" + value; + this.setAttributeNode(attr) + }, + removeAttribute : function(name){ + var attr = this.getAttributeNode(name) + attr && this.removeAttributeNode(attr); + }, + + //four real opeartion method + appendChild:function(newChild){ + if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){ + return this.insertBefore(newChild,null); + }else{ + return _appendSingleChild(this,newChild); + } + }, + setAttributeNode : function(newAttr){ + return this.attributes.setNamedItem(newAttr); + }, + setAttributeNodeNS : function(newAttr){ + return this.attributes.setNamedItemNS(newAttr); + }, + removeAttributeNode : function(oldAttr){ + //console.log(this == oldAttr.ownerElement) + return this.attributes.removeNamedItem(oldAttr.nodeName); + }, + //get real attribute name,and remove it by removeAttributeNode + removeAttributeNS : function(namespaceURI, localName){ + var old = this.getAttributeNodeNS(namespaceURI, localName); + old && this.removeAttributeNode(old); + }, + + hasAttributeNS : function(namespaceURI, localName){ + return this.getAttributeNodeNS(namespaceURI, localName)!=null; + }, + getAttributeNS : function(namespaceURI, localName){ + var attr = this.getAttributeNodeNS(namespaceURI, localName); + return attr && attr.value || ''; + }, + setAttributeNS : function(namespaceURI, qualifiedName, value){ + var attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName); + attr.value = attr.nodeValue = "" + value; + this.setAttributeNode(attr) + }, + getAttributeNodeNS : function(namespaceURI, localName){ + return this.attributes.getNamedItemNS(namespaceURI, localName); + }, + + getElementsByTagName : function(tagName){ + return new LiveNodeList(this,function(base){ + var ls = []; + _visitNode(base,function(node){ + if(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){ + ls.push(node); + } + }); + return ls; + }); + }, + getElementsByTagNameNS : function(namespaceURI, localName){ + return new LiveNodeList(this,function(base){ + var ls = []; + _visitNode(base,function(node){ + if(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){ + ls.push(node); + } + }); + return ls; + + }); + } +}; +Document.prototype.getElementsByTagName = Element.prototype.getElementsByTagName; +Document.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS; + + +_extends(Element,Node); +function Attr() { +}; +Attr.prototype.nodeType = ATTRIBUTE_NODE; +_extends(Attr,Node); + + +function CharacterData() { +}; +CharacterData.prototype = { + data : '', + substringData : function(offset, count) { + return this.data.substring(offset, offset+count); + }, + appendData: function(text) { + text = this.data+text; + this.nodeValue = this.data = text; + this.length = text.length; + }, + insertData: function(offset,text) { + this.replaceData(offset,0,text); + + }, + appendChild:function(newChild){ + throw new Error(ExceptionMessage[HIERARCHY_REQUEST_ERR]) + }, + deleteData: function(offset, count) { + this.replaceData(offset,count,""); + }, + replaceData: function(offset, count, text) { + var start = this.data.substring(0,offset); + var end = this.data.substring(offset+count); + text = start + text + end; + this.nodeValue = this.data = text; + this.length = text.length; + } +} +_extends(CharacterData,Node); +function Text() { +}; +Text.prototype = { + nodeName : "#text", + nodeType : TEXT_NODE, + splitText : function(offset) { + var text = this.data; + var newText = text.substring(offset); + text = text.substring(0, offset); + this.data = this.nodeValue = text; + this.length = text.length; + var newNode = this.ownerDocument.createTextNode(newText); + if(this.parentNode){ + this.parentNode.insertBefore(newNode, this.nextSibling); + } + return newNode; + } +} +_extends(Text,CharacterData); +function Comment() { +}; +Comment.prototype = { + nodeName : "#comment", + nodeType : COMMENT_NODE +} +_extends(Comment,CharacterData); + +function CDATASection() { +}; +CDATASection.prototype = { + nodeName : "#cdata-section", + nodeType : CDATA_SECTION_NODE +} +_extends(CDATASection,CharacterData); + + +function DocumentType() { +}; +DocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE; +_extends(DocumentType,Node); + +function Notation() { +}; +Notation.prototype.nodeType = NOTATION_NODE; +_extends(Notation,Node); + +function Entity() { +}; +Entity.prototype.nodeType = ENTITY_NODE; +_extends(Entity,Node); + +function EntityReference() { +}; +EntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE; +_extends(EntityReference,Node); + +function DocumentFragment() { +}; +DocumentFragment.prototype.nodeName = "#document-fragment"; +DocumentFragment.prototype.nodeType = DOCUMENT_FRAGMENT_NODE; +_extends(DocumentFragment,Node); + + +function ProcessingInstruction() { +} +ProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE; +_extends(ProcessingInstruction,Node); +function XMLSerializer(){} +XMLSerializer.prototype.serializeToString = function(node,isHtml,nodeFilter){ + return nodeSerializeToString.call(node,isHtml,nodeFilter); +} +Node.prototype.toString = nodeSerializeToString; +function nodeSerializeToString(isHtml,nodeFilter){ + var buf = []; + var refNode = this.nodeType == 9?this.documentElement:this; + var prefix = refNode.prefix; + var uri = refNode.namespaceURI; + + if(uri && prefix == null){ + //console.log(prefix) + var prefix = refNode.lookupPrefix(uri); + if(prefix == null){ + //isHTML = true; + var visibleNamespaces=[ + {namespace:uri,prefix:null} + //{namespace:uri,prefix:''} + ] + } + } + serializeToString(this,buf,isHtml,nodeFilter,visibleNamespaces); + //console.log('###',this.nodeType,uri,prefix,buf.join('')) + return buf.join(''); +} +function needNamespaceDefine(node,isHTML, visibleNamespaces) { + var prefix = node.prefix||''; + var uri = node.namespaceURI; + if (!prefix && !uri){ + return false; + } + if (prefix === "xml" && uri === "http://www.w3.org/XML/1998/namespace" + || uri == 'http://www.w3.org/2000/xmlns/'){ + return false; + } + + var i = visibleNamespaces.length + //console.log('@@@@',node.tagName,prefix,uri,visibleNamespaces) + while (i--) { + var ns = visibleNamespaces[i]; + // get namespace prefix + //console.log(node.nodeType,node.tagName,ns.prefix,prefix) + if (ns.prefix == prefix){ + return ns.namespace != uri; + } + } + //console.log(isHTML,uri,prefix=='') + //if(isHTML && prefix ==null && uri == 'http://www.w3.org/1999/xhtml'){ + // return false; + //} + //node.flag = '11111' + //console.error(3,true,node.flag,node.prefix,node.namespaceURI) + return true; +} +function serializeToString(node,buf,isHTML,nodeFilter,visibleNamespaces){ + if(nodeFilter){ + node = nodeFilter(node); + if(node){ + if(typeof node == 'string'){ + buf.push(node); + return; + } + }else{ + return; + } + //buf.sort.apply(attrs, attributeSorter); + } + switch(node.nodeType){ + case ELEMENT_NODE: + if (!visibleNamespaces) visibleNamespaces = []; + var startVisibleNamespaces = visibleNamespaces.length; + var attrs = node.attributes; + var len = attrs.length; + var child = node.firstChild; + var nodeName = node.tagName; + + isHTML = (htmlns === node.namespaceURI) ||isHTML + buf.push('<',nodeName); + + + + for(var i=0;i'); + //if is cdata child node + if(isHTML && /^script$/i.test(nodeName)){ + while(child){ + if(child.data){ + buf.push(child.data); + }else{ + serializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces); + } + child = child.nextSibling; + } + }else + { + while(child){ + serializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces); + child = child.nextSibling; + } + } + buf.push(''); + }else{ + buf.push('/>'); + } + // remove added visible namespaces + //visibleNamespaces.length = startVisibleNamespaces; + return; + case DOCUMENT_NODE: + case DOCUMENT_FRAGMENT_NODE: + var child = node.firstChild; + while(child){ + serializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces); + child = child.nextSibling; + } + return; + case ATTRIBUTE_NODE: + return buf.push(' ',node.name,'="',node.value.replace(/[<&"]/g,_xmlEncoder),'"'); + case TEXT_NODE: + return buf.push(node.data.replace(/[<&]/g,_xmlEncoder)); + case CDATA_SECTION_NODE: + return buf.push( ''); + case COMMENT_NODE: + return buf.push( ""); + case DOCUMENT_TYPE_NODE: + var pubid = node.publicId; + var sysid = node.systemId; + buf.push(''); + }else if(sysid && sysid!='.'){ + buf.push(' SYSTEM "',sysid,'">'); + }else{ + var sub = node.internalSubset; + if(sub){ + buf.push(" [",sub,"]"); + } + buf.push(">"); + } + return; + case PROCESSING_INSTRUCTION_NODE: + return buf.push( ""); + case ENTITY_REFERENCE_NODE: + return buf.push( '&',node.nodeName,';'); + //case ENTITY_NODE: + //case NOTATION_NODE: + default: + buf.push('??',node.nodeName); + } +} +function importNode(doc,node,deep){ + var node2; + switch (node.nodeType) { + case ELEMENT_NODE: + node2 = node.cloneNode(false); + node2.ownerDocument = doc; + //var attrs = node2.attributes; + //var len = attrs.length; + //for(var i=0;i=0.1" + }, + "homepage": "https://github.com/jindw/xmldom", + "keywords": [ + "w3c", + "dom", + "xml", + "parser", + "javascript", + "DOMParser", + "XMLSerializer" + ], + "licenses": [ + { + "type": "LGPL", + "url": "http://www.gnu.org/licenses/lgpl.html", + "MIT": "http://opensource.org/licenses/MIT" + } + ], + "main": "./dom-parser.js", + "maintainers": [ + { + "name": "jindw", + "email": "jindw@xidea.org", + "url": "http://www.xidea.org" + } + ], + "name": "xmldom", + "repository": { + "type": "git", + "url": "git://github.com/jindw/xmldom.git" + }, + "scripts": { + "test": "proof platform win32 && proof test */*/*.t.js || t/test" + }, + "version": "0.1.27" +} diff --git a/node_modules/xmldom/readme.md b/node_modules/xmldom/readme.md new file mode 100644 index 00000000..f832c448 --- /dev/null +++ b/node_modules/xmldom/readme.md @@ -0,0 +1,219 @@ +# XMLDOM [![Build Status](https://secure.travis-ci.org/bigeasy/xmldom.png?branch=master)](http://travis-ci.org/bigeasy/xmldom) [![Coverage Status](https://coveralls.io/repos/bigeasy/xmldom/badge.png?branch=master)](https://coveralls.io/r/bigeasy/xmldom) [![NPM version](https://badge.fury.io/js/xmldom.png)](http://badge.fury.io/js/xmldom) + +A JavaScript implementation of W3C DOM for Node.js, Rhino and the browser. Fully +compatible with `W3C DOM level2`; and some compatible with `level3`. Supports +`DOMParser` and `XMLSerializer` interface such as in browser. + +Install: +------- +>npm install xmldom + +Example: +==== +```javascript +var DOMParser = require('xmldom').DOMParser; +var doc = new DOMParser().parseFromString( + '\n'+ + '\ttest\n'+ + '\t\n'+ + '\t\n'+ + '' + ,'text/xml'); +doc.documentElement.setAttribute('x','y'); +doc.documentElement.setAttributeNS('./lite','c:x','y2'); +var nsAttr = doc.documentElement.getAttributeNS('./lite','x') +console.info(nsAttr) +console.info(doc) +``` +API Reference +===== + + * [DOMParser](https://developer.mozilla.org/en/DOMParser): + + ```javascript + parseFromString(xmlsource,mimeType) + ``` + * **options extension** _by xmldom_(not BOM standard!!) + + ```javascript + //added the options argument + new DOMParser(options) + + //errorHandler is supported + new DOMParser({ + /** + * locator is always need for error position info + */ + locator:{}, + /** + * you can override the errorHandler for xml parser + * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html + */ + errorHandler:{warning:function(w){console.warn(w)},error:callback,fatalError:callback} + //only callback model + //errorHandler:function(level,msg){console.log(level,msg)} + }) + + ``` + + * [XMLSerializer](https://developer.mozilla.org/en/XMLSerializer) + + ```javascript + serializeToString(node) + ``` +DOM level2 method and attribute: +------ + + * [Node](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247) + + attribute: + nodeValue|prefix + readonly attribute: + nodeName|nodeType|parentNode|childNodes|firstChild|lastChild|previousSibling|nextSibling|attributes|ownerDocument|namespaceURI|localName + method: + insertBefore(newChild, refChild) + replaceChild(newChild, oldChild) + removeChild(oldChild) + appendChild(newChild) + hasChildNodes() + cloneNode(deep) + normalize() + isSupported(feature, version) + hasAttributes() + + * [DOMImplementation](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-102161490) + + method: + hasFeature(feature, version) + createDocumentType(qualifiedName, publicId, systemId) + createDocument(namespaceURI, qualifiedName, doctype) + + * [Document](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#i-Document) : Node + + readonly attribute: + doctype|implementation|documentElement + method: + createElement(tagName) + createDocumentFragment() + createTextNode(data) + createComment(data) + createCDATASection(data) + createProcessingInstruction(target, data) + createAttribute(name) + createEntityReference(name) + getElementsByTagName(tagname) + importNode(importedNode, deep) + createElementNS(namespaceURI, qualifiedName) + createAttributeNS(namespaceURI, qualifiedName) + getElementsByTagNameNS(namespaceURI, localName) + getElementById(elementId) + + * [DocumentFragment](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-B63ED1A3) : Node + * [Element](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-745549614) : Node + + readonly attribute: + tagName + method: + getAttribute(name) + setAttribute(name, value) + removeAttribute(name) + getAttributeNode(name) + setAttributeNode(newAttr) + removeAttributeNode(oldAttr) + getElementsByTagName(name) + getAttributeNS(namespaceURI, localName) + setAttributeNS(namespaceURI, qualifiedName, value) + removeAttributeNS(namespaceURI, localName) + getAttributeNodeNS(namespaceURI, localName) + setAttributeNodeNS(newAttr) + getElementsByTagNameNS(namespaceURI, localName) + hasAttribute(name) + hasAttributeNS(namespaceURI, localName) + + * [Attr](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-637646024) : Node + + attribute: + value + readonly attribute: + name|specified|ownerElement + + * [NodeList](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177) + + readonly attribute: + length + method: + item(index) + + * [NamedNodeMap](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1780488922) + + readonly attribute: + length + method: + getNamedItem(name) + setNamedItem(arg) + removeNamedItem(name) + item(index) + getNamedItemNS(namespaceURI, localName) + setNamedItemNS(arg) + removeNamedItemNS(namespaceURI, localName) + + * [CharacterData](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-FF21A306) : Node + + method: + substringData(offset, count) + appendData(arg) + insertData(offset, arg) + deleteData(offset, count) + replaceData(offset, count, arg) + + * [Text](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1312295772) : CharacterData + + method: + splitText(offset) + + * [CDATASection](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-667469212) + * [Comment](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1728279322) : CharacterData + + * [DocumentType](http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-412266927) + + readonly attribute: + name|entities|notations|publicId|systemId|internalSubset + + * Notation : Node + + readonly attribute: + publicId|systemId + + * Entity : Node + + readonly attribute: + publicId|systemId|notationName + + * EntityReference : Node + * ProcessingInstruction : Node + + attribute: + data + readonly attribute: + target + +DOM level 3 support: +----- + + * [Node](http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-textContent) + + attribute: + textContent + method: + isDefaultNamespace(namespaceURI){ + lookupNamespaceURI(prefix) + +DOM extension by xmldom +--- + * [Node] Source position extension; + + attribute: + //Numbered starting from '1' + lineNumber + //Numbered starting from '1' + columnNumber diff --git a/node_modules/xmldom/sax.js b/node_modules/xmldom/sax.js new file mode 100644 index 00000000..dc17cc25 --- /dev/null +++ b/node_modules/xmldom/sax.js @@ -0,0 +1,633 @@ +//[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] +//[4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040] +//[5] Name ::= NameStartChar (NameChar)* +var nameStartChar = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]///\u10000-\uEFFFF +var nameChar = new RegExp("[\\-\\.0-9"+nameStartChar.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]"); +var tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\:'+nameStartChar.source+nameChar.source+'*)?$'); +//var tagNamePattern = /^[a-zA-Z_][\w\-\.]*(?:\:[a-zA-Z_][\w\-\.]*)?$/ +//var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',') + +//S_TAG, S_ATTR, S_EQ, S_ATTR_NOQUOT_VALUE +//S_ATTR_SPACE, S_ATTR_END, S_TAG_SPACE, S_TAG_CLOSE +var S_TAG = 0;//tag name offerring +var S_ATTR = 1;//attr name offerring +var S_ATTR_SPACE=2;//attr name end and space offer +var S_EQ = 3;//=space? +var S_ATTR_NOQUOT_VALUE = 4;//attr value(no quot value only) +var S_ATTR_END = 5;//attr value end and no space(quot end) +var S_TAG_SPACE = 6;//(attr value end || tag end ) && (space offer) +var S_TAG_CLOSE = 7;//closed el + +function XMLReader(){ + +} + +XMLReader.prototype = { + parse:function(source,defaultNSMap,entityMap){ + var domBuilder = this.domBuilder; + domBuilder.startDocument(); + _copy(defaultNSMap ,defaultNSMap = {}) + parse(source,defaultNSMap,entityMap, + domBuilder,this.errorHandler); + domBuilder.endDocument(); + } +} +function parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){ + function fixedFromCharCode(code) { + // String.prototype.fromCharCode does not supports + // > 2 bytes unicode chars directly + if (code > 0xffff) { + code -= 0x10000; + var surrogate1 = 0xd800 + (code >> 10) + , surrogate2 = 0xdc00 + (code & 0x3ff); + + return String.fromCharCode(surrogate1, surrogate2); + } else { + return String.fromCharCode(code); + } + } + function entityReplacer(a){ + var k = a.slice(1,-1); + if(k in entityMap){ + return entityMap[k]; + }else if(k.charAt(0) === '#'){ + return fixedFromCharCode(parseInt(k.substr(1).replace('x','0x'))) + }else{ + errorHandler.error('entity not found:'+a); + return a; + } + } + function appendText(end){//has some bugs + if(end>start){ + var xt = source.substring(start,end).replace(/&#?\w+;/g,entityReplacer); + locator&&position(start); + domBuilder.characters(xt,0,end-start); + start = end + } + } + function position(p,m){ + while(p>=lineEnd && (m = linePattern.exec(source))){ + lineStart = m.index; + lineEnd = lineStart + m[0].length; + locator.lineNumber++; + //console.log('line++:',locator,startPos,endPos) + } + locator.columnNumber = p-lineStart+1; + } + var lineStart = 0; + var lineEnd = 0; + var linePattern = /.*(?:\r\n?|\n)|.*$/g + var locator = domBuilder.locator; + + var parseStack = [{currentNSMap:defaultNSMapCopy}] + var closeMap = {}; + var start = 0; + while(true){ + try{ + var tagStart = source.indexOf('<',start); + if(tagStart<0){ + if(!source.substr(start).match(/^\s*$/)){ + var doc = domBuilder.doc; + var text = doc.createTextNode(source.substr(start)); + doc.appendChild(text); + domBuilder.currentElement = text; + } + return; + } + if(tagStart>start){ + appendText(tagStart); + } + switch(source.charAt(tagStart+1)){ + case '/': + var end = source.indexOf('>',tagStart+3); + var tagName = source.substring(tagStart+2,end); + var config = parseStack.pop(); + if(end<0){ + + tagName = source.substring(tagStart+2).replace(/[\s<].*/,''); + //console.error('#@@@@@@'+tagName) + errorHandler.error("end tag name: "+tagName+' is not complete:'+config.tagName); + end = tagStart+1+tagName.length; + }else if(tagName.match(/\s + locator&&position(tagStart); + end = parseInstruction(source,tagStart,domBuilder); + break; + case '!':// start){ + start = end; + }else{ + //TODO: 这里有可能sax回退,有位置错误风险 + appendText(Math.max(tagStart,start)+1); + } + } +} +function copyLocator(f,t){ + t.lineNumber = f.lineNumber; + t.columnNumber = f.columnNumber; + return t; +} + +/** + * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack); + * @return end of the elementStartPart(end of elementEndPart for selfClosed el) + */ +function parseElementStartPart(source,start,el,currentNSMap,entityReplacer,errorHandler){ + var attrName; + var value; + var p = ++start; + var s = S_TAG;//status + while(true){ + var c = source.charAt(p); + switch(c){ + case '=': + if(s === S_ATTR){//attrName + attrName = source.slice(start,p); + s = S_EQ; + }else if(s === S_ATTR_SPACE){ + s = S_EQ; + }else{ + //fatalError: equal must after attrName or space after attrName + throw new Error('attribute equal must after attrName'); + } + break; + case '\'': + case '"': + if(s === S_EQ || s === S_ATTR //|| s == S_ATTR_SPACE + ){//equal + if(s === S_ATTR){ + errorHandler.warning('attribute value must after "="') + attrName = source.slice(start,p) + } + start = p+1; + p = source.indexOf(c,start) + if(p>0){ + value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer); + el.add(attrName,value,start-1); + s = S_ATTR_END; + }else{ + //fatalError: no end quot match + throw new Error('attribute value no end \''+c+'\' match'); + } + }else if(s == S_ATTR_NOQUOT_VALUE){ + value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer); + //console.log(attrName,value,start,p) + el.add(attrName,value,start); + //console.dir(el) + errorHandler.warning('attribute "'+attrName+'" missed start quot('+c+')!!'); + start = p+1; + s = S_ATTR_END + }else{ + //fatalError: no equal before + throw new Error('attribute value must after "="'); + } + break; + case '/': + switch(s){ + case S_TAG: + el.setTagName(source.slice(start,p)); + case S_ATTR_END: + case S_TAG_SPACE: + case S_TAG_CLOSE: + s =S_TAG_CLOSE; + el.closed = true; + case S_ATTR_NOQUOT_VALUE: + case S_ATTR: + case S_ATTR_SPACE: + break; + //case S_EQ: + default: + throw new Error("attribute invalid close char('/')") + } + break; + case ''://end document + //throw new Error('unexpected end of input') + errorHandler.error('unexpected end of input'); + if(s == S_TAG){ + el.setTagName(source.slice(start,p)); + } + return p; + case '>': + switch(s){ + case S_TAG: + el.setTagName(source.slice(start,p)); + case S_ATTR_END: + case S_TAG_SPACE: + case S_TAG_CLOSE: + break;//normal + case S_ATTR_NOQUOT_VALUE://Compatible state + case S_ATTR: + value = source.slice(start,p); + if(value.slice(-1) === '/'){ + el.closed = true; + value = value.slice(0,-1) + } + case S_ATTR_SPACE: + if(s === S_ATTR_SPACE){ + value = attrName; + } + if(s == S_ATTR_NOQUOT_VALUE){ + errorHandler.warning('attribute "'+value+'" missed quot(")!!'); + el.add(attrName,value.replace(/&#?\w+;/g,entityReplacer),start) + }else{ + if(currentNSMap[''] !== 'http://www.w3.org/1999/xhtml' || !value.match(/^(?:disabled|checked|selected)$/i)){ + errorHandler.warning('attribute "'+value+'" missed value!! "'+value+'" instead!!') + } + el.add(value,value,start) + } + break; + case S_EQ: + throw new Error('attribute value missed!!'); + } +// console.log(tagName,tagNamePattern,tagNamePattern.test(tagName)) + return p; + /*xml space '\x20' | #x9 | #xD | #xA; */ + case '\u0080': + c = ' '; + default: + if(c<= ' '){//space + switch(s){ + case S_TAG: + el.setTagName(source.slice(start,p));//tagName + s = S_TAG_SPACE; + break; + case S_ATTR: + attrName = source.slice(start,p) + s = S_ATTR_SPACE; + break; + case S_ATTR_NOQUOT_VALUE: + var value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer); + errorHandler.warning('attribute "'+value+'" missed quot(")!!'); + el.add(attrName,value,start) + case S_ATTR_END: + s = S_TAG_SPACE; + break; + //case S_TAG_SPACE: + //case S_EQ: + //case S_ATTR_SPACE: + // void();break; + //case S_TAG_CLOSE: + //ignore warning + } + }else{//not space +//S_TAG, S_ATTR, S_EQ, S_ATTR_NOQUOT_VALUE +//S_ATTR_SPACE, S_ATTR_END, S_TAG_SPACE, S_TAG_CLOSE + switch(s){ + //case S_TAG:void();break; + //case S_ATTR:void();break; + //case S_ATTR_NOQUOT_VALUE:void();break; + case S_ATTR_SPACE: + var tagName = el.tagName; + if(currentNSMap[''] !== 'http://www.w3.org/1999/xhtml' || !attrName.match(/^(?:disabled|checked|selected)$/i)){ + errorHandler.warning('attribute "'+attrName+'" missed value!! "'+attrName+'" instead2!!') + } + el.add(attrName,attrName,start); + start = p; + s = S_ATTR; + break; + case S_ATTR_END: + errorHandler.warning('attribute space is required"'+attrName+'"!!') + case S_TAG_SPACE: + s = S_ATTR; + start = p; + break; + case S_EQ: + s = S_ATTR_NOQUOT_VALUE; + start = p; + break; + case S_TAG_CLOSE: + throw new Error("elements closed character '/' and '>' must be connected to"); + } + } + }//end outer switch + //console.log('p++',p) + p++; + } +} +/** + * @return true if has new namespace define + */ +function appendElement(el,domBuilder,currentNSMap){ + var tagName = el.tagName; + var localNSMap = null; + //var currentNSMap = parseStack[parseStack.length-1].currentNSMap; + var i = el.length; + while(i--){ + var a = el[i]; + var qName = a.qName; + var value = a.value; + var nsp = qName.indexOf(':'); + if(nsp>0){ + var prefix = a.prefix = qName.slice(0,nsp); + var localName = qName.slice(nsp+1); + var nsPrefix = prefix === 'xmlns' && localName + }else{ + localName = qName; + prefix = null + nsPrefix = qName === 'xmlns' && '' + } + //can not set prefix,because prefix !== '' + a.localName = localName ; + //prefix == null for no ns prefix attribute + if(nsPrefix !== false){//hack!! + if(localNSMap == null){ + localNSMap = {} + //console.log(currentNSMap,0) + _copy(currentNSMap,currentNSMap={}) + //console.log(currentNSMap,1) + } + currentNSMap[nsPrefix] = localNSMap[nsPrefix] = value; + a.uri = 'http://www.w3.org/2000/xmlns/' + domBuilder.startPrefixMapping(nsPrefix, value) + } + } + var i = el.length; + while(i--){ + a = el[i]; + var prefix = a.prefix; + if(prefix){//no prefix attribute has no namespace + if(prefix === 'xml'){ + a.uri = 'http://www.w3.org/XML/1998/namespace'; + }if(prefix !== 'xmlns'){ + a.uri = currentNSMap[prefix || ''] + + //{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)} + } + } + } + var nsp = tagName.indexOf(':'); + if(nsp>0){ + prefix = el.prefix = tagName.slice(0,nsp); + localName = el.localName = tagName.slice(nsp+1); + }else{ + prefix = null;//important!! + localName = el.localName = tagName; + } + //no prefix element has default namespace + var ns = el.uri = currentNSMap[prefix || '']; + domBuilder.startElement(ns,localName,tagName,el); + //endPrefixMapping and startPrefixMapping have not any help for dom builder + //localNSMap = null + if(el.closed){ + domBuilder.endElement(ns,localName,tagName); + if(localNSMap){ + for(prefix in localNSMap){ + domBuilder.endPrefixMapping(prefix) + } + } + }else{ + el.currentNSMap = currentNSMap; + el.localNSMap = localNSMap; + //parseStack.push(el); + return true; + } +} +function parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){ + if(/^(?:script|textarea)$/i.test(tagName)){ + var elEndStart = source.indexOf('',elStartEnd); + var text = source.substring(elStartEnd+1,elEndStart); + if(/[&<]/.test(text)){ + if(/^script$/i.test(tagName)){ + //if(!/\]\]>/.test(text)){ + //lexHandler.startCDATA(); + domBuilder.characters(text,0,text.length); + //lexHandler.endCDATA(); + return elEndStart; + //} + }//}else{//text area + text = text.replace(/&#?\w+;/g,entityReplacer); + domBuilder.characters(text,0,text.length); + return elEndStart; + //} + + } + } + return elStartEnd+1; +} +function fixSelfClosed(source,elStartEnd,tagName,closeMap){ + //if(tagName in closeMap){ + var pos = closeMap[tagName]; + if(pos == null){ + //console.log(tagName) + pos = source.lastIndexOf('') + if(pos',start+4); + //append comment source.substring(4,end)//Harry Potter'; + var doc = new dom().parseFromString(xml); + var nodes = xpath.select('//title', doc); + assert.equal('title', nodes[0].localName); + assert.equal('Harry Potter', nodes[0].firstChild.data); + assert.equal('Harry Potter', nodes[0].toString()); + + var nodes2 = xpath.select('//node()', doc); + assert.equal(7, nodes2.length); + + var pis = xpath.select("/processing-instruction('series')", doc); + assert.equal(2, pis.length); + assert.equal('books="7"', pis[1].data); + + test.done(); + }, + + 'select single node': function(test) { + var xml = 'Harry Potter'; + var doc = new dom().parseFromString(xml); + + assert.equal('title', xpath.select('//title[1]', doc)[0].localName); + + test.done(); + }, + + 'select text node': function (test) { + var xml = 'HarryPotter'; + var doc = new dom().parseFromString(xml); + + assert.deepEqual('book', xpath.select('local-name(/book)', doc)); + assert.deepEqual('Harry,Potter', xpath.select('//title/text()', doc).toString()); + + test.done(); + }, + + 'select number value': function(test) { + var xml = 'HarryPotter'; + var doc = new dom().parseFromString(xml); + + assert.deepEqual(2, xpath.select('count(//title)', doc)); + + test.done(); + }, + + 'select xpath with namespaces': function (test) { + var xml = 'Harry Potter'; + var doc = new dom().parseFromString(xml); + + var nodes = xpath.select('//*[local-name(.)="title" and namespace-uri(.)="myns"]', doc); + assert.equal('title', nodes[0].localName); + assert.equal('myns', nodes[0].namespaceURI) ; + + var nodes2 = xpath.select('/*/title', doc); + + assert.equal(0, nodes2.length); + + test.done(); + }, + + 'select xpath with namespaces, using a resolver': function (test) { + var xml = 'NarniaHarry PotterJKR'; + var doc = new dom().parseFromString(xml); + + var resolver = { + mappings: { + 'testns': 'http://example.com/test' + }, + lookupNamespaceURI: function(prefix) { + return this.mappings[prefix]; + } + } + + var nodes = xpath.selectWithResolver('//testns:title/text()', doc, resolver); + assert.equal('Harry Potter', xpath.selectWithResolver('//testns:title/text()', doc, resolver)[0].nodeValue); + assert.equal('JKR', xpath.selectWithResolver('//testns:field[@testns:type="author"]/text()', doc, resolver)[0].nodeValue); + + var nodes2 = xpath.selectWithResolver('/*/testns:*', doc, resolver); + + assert.equal(2, nodes2.length); + + test.done(); + }, + + 'select xpath with default namespace, using a resolver': function (test) { + var xml = 'Harry PotterJKR'; + var doc = new dom().parseFromString(xml); + + var resolver = { + mappings: { + 'testns': 'http://example.com/test' + }, + lookupNamespaceURI: function(prefix) { + return this.mappings[prefix]; + } + } + + var nodes = xpath.selectWithResolver('//testns:title/text()', doc, resolver); + assert.equal('Harry Potter', xpath.selectWithResolver('//testns:title/text()', doc, resolver)[0].nodeValue); + assert.equal('JKR', xpath.selectWithResolver('//testns:field[@type="author"]/text()', doc, resolver)[0].nodeValue); + + test.done(); + }, + + 'select xpath with namespaces, prefixes different in xml and xpath, using a resolver': function (test) { + var xml = 'Harry PotterJKR'; + var doc = new dom().parseFromString(xml); + + var resolver = { + mappings: { + 'ns': 'http://example.com/test' + }, + lookupNamespaceURI: function(prefix) { + return this.mappings[prefix]; + } + } + + var nodes = xpath.selectWithResolver('//ns:title/text()', doc, resolver); + assert.equal('Harry Potter', xpath.selectWithResolver('//ns:title/text()', doc, resolver)[0].nodeValue); + assert.equal('JKR', xpath.selectWithResolver('//ns:field[@ns:type="author"]/text()', doc, resolver)[0].nodeValue); + + test.done(); + }, + + 'select xpath with namespaces, using namespace mappings': function (test) { + var xml = 'Harry PotterJKR'; + var doc = new dom().parseFromString(xml); + var select = xpath.useNamespaces({'testns': 'http://example.com/test'}); + + assert.equal('Harry Potter', select('//testns:title/text()', doc)[0].nodeValue); + assert.equal('JKR', select('//testns:field[@testns:type="author"]/text()', doc)[0].nodeValue); + + test.done(); + }, + + + 'select attribute': function (test) { + var xml = ''; + var doc = new dom().parseFromString(xml); + + var author = xpath.select1('/author/@name', doc).value; + assert.equal('J. K. Rowling', author); + + test.done(); + } + + ,'select with multiple predicates': function (test) { + var xml = ''; + var doc = new dom().parseFromString(xml); + + var characters = xpath.select('/*/character[@sex = "M"][@age > 40]/@name', doc); + + assert.equal(1, characters.length); + assert.equal('Snape', characters[0].textContent); + + test.done(); + } + + // https://github.com/goto100/xpath/issues/37 + ,'select multiple attributes': function (test) { + var xml = ''; + var doc = new dom().parseFromString(xml); + + var authors = xpath.select('/authors/author/@name', doc); + assert.equal(2, authors.length); + assert.equal('J. K. Rowling', authors[0].value); + + // https://github.com/goto100/xpath/issues/41 + doc = new dom().parseFromString(''); + var nodes = xpath.select("/chapters/chapter/@v", doc); + var values = nodes.map(function(n) { return n.value; }); + + assert.equal(3, values.length); + assert.equal("1", values[0]); + assert.equal("2", values[1]); + assert.equal("3", values[2]); + + test.done(); + } + + ,'XPathException acts like Error': function (test) { + try { + xpath.evaluate('1', null, null, null); + assert.fail(null, null, 'evaluate() should throw exception'); + } catch (e) { + assert.ok('code' in e, 'must have a code'); + assert.ok('stack' in e, 'must have a stack'); + } + + test.done(); + }, + + 'string() with no arguments': function (test) { + var doc = new dom().parseFromString('Harry Potter'); + + var rootElement = xpath.select1('/book', doc); + assert.ok(rootElement, 'rootElement is null'); + + assert.equal('Harry Potter', xpath.select1('string()', doc)); + + test.done(); + }, + + 'string value of document fragment': function (test) { + var doc = new dom().parseFromString(''); + var docFragment = doc.createDocumentFragment(); + + var el = doc.createElement("book"); + docFragment.appendChild(el); + + var testValue = "Harry Potter"; + + el.appendChild(doc.createTextNode(testValue)); + + assert.equal(testValue, xpath.select1("string()", docFragment)); + + test.done(); + }, + + 'compare string of a number with a number': function (test) { + assert.ok(xpath.select1('"000" = 0'), '000'); + assert.ok(xpath.select1('"45.0" = 45'), '45'); + + test.done(); + }, + + 'string(boolean) is a string': function (test) { + assert.equal('string', typeof xpath.select1('string(true())')); + assert.equal('string', typeof xpath.select1('string(false())')); + assert.equal('string', typeof xpath.select1('string(1 = 2)')); + assert.ok(xpath.select1('"true" = string(true())'), '"true" = string(true())'); + + test.done(); + }, + + 'string should downcast to boolean': function (test) { + assert.equal(false, xpath.select1('"false" = false()'), '"false" = false()'); + assert.equal(true, xpath.select1('"a" = true()'), '"a" = true()'); + assert.equal(true, xpath.select1('"" = false()'), '"" = false()'); + + test.done(); + }, + + 'string(number) is a string': function (test) { + assert.equal('string', typeof xpath.select1('string(45)')); + assert.ok(xpath.select1('"45" = string(45)'), '"45" = string(45)'); + + test.done(); + }, + + 'correct string to number conversion': function (test) { + assert.equal(45.2, xpath.select1('number("45.200")')); + assert.equal(55.0, xpath.select1('number("000055")')); + assert.equal(65.0, xpath.select1('number(" 65 ")')); + + assert.equal(true, xpath.select1('"" != 0'), '"" != 0'); + assert.equal(false, xpath.select1('"" = 0'), '"" = 0'); + assert.equal(false, xpath.select1('0 = ""'), '0 = ""'); + assert.equal(false, xpath.select1('0 = " "'), '0 = " "'); + + assert.ok(Number.isNaN(xpath.select('number("")')), 'number("")'); + assert.ok(Number.isNaN(xpath.select('number("45.8g")')), 'number("45.8g")'); + assert.ok(Number.isNaN(xpath.select('number("2e9")')), 'number("2e9")'); + assert.ok(Number.isNaN(xpath.select('number("+33")')), 'number("+33")'); + + test.done(); + } + + ,'correct number to string conversion': function (test) { + assert.equal('0.0000000000000000000000005250000000000001', xpath.parse('0.525 div 1000000 div 1000000 div 1000000 div 1000000').evaluateString()); + assert.equal('525000000000000000000000', xpath.parse('0.525 * 1000000 * 1000000 * 1000000 * 1000000').evaluateString()); + + test.done(); + } + + ,'local-name() and name() of processing instruction': function (test) { + var xml = 'Harry Potter'; + var doc = new dom().parseFromString(xml); + var expectedName = 'book-record'; + var localName = xpath.select('local-name(/processing-instruction())', doc); + var name = xpath.select('name(/processing-instruction())', doc); + + assert.deepEqual(expectedName, localName, 'local-name() - "' + expectedName + '" !== "' + localName + '"'); + assert.deepEqual(expectedName, name, 'name() - "' + expectedName + '" !== "' + name + '"'); + + test.done(); + }, + + 'evaluate substring-after': function (test) { + var xml = 'Hermione'; + var doc = new dom().parseFromString(xml); + + var part = xpath.select('substring-after(/classmate, "Her")', doc); + assert.deepEqual('mione', part); + + test.done(); + } + + ,'parsed expression with no options': function (test) { + var parsed = xpath.parse('5 + 7'); + + assert.equal(typeof parsed, "object", "parse() should return an object"); + assert.equal(typeof parsed.evaluate, "function", "parsed.evaluate should be a function"); + assert.equal(typeof parsed.evaluateNumber, "function", "parsed.evaluateNumber should be a function"); + + assert.equal(parsed.evaluateNumber(), 12); + + // evaluating twice should yield the same result + assert.equal(parsed.evaluateNumber(), 12); + + test.done(); + } + + ,'select1() on parsed expression': function (test) { + var xml = 'Harry Potter'; + var doc = new dom().parseFromString(xml); + var parsed = xpath.parse('/*/title'); + + assert.equal(typeof parsed, 'object', 'parse() should return an object'); + + assert.equal(typeof parsed.select1, 'function', 'parsed.select1 should be a function'); + + var single = parsed.select1({ node: doc }); + + assert.equal('title', single.localName); + assert.equal('Harry Potter', single.firstChild.data); + assert.equal('Harry Potter', single.toString()); + + test.done(); + } + + ,'select() on parsed expression': function (test) { + var xml = 'Harry Potter'; + var doc = new dom().parseFromString(xml); + var parsed = xpath.parse('/*/title'); + + assert.equal(typeof parsed, 'object', 'parse() should return an object'); + + assert.equal(typeof parsed.select, 'function', 'parsed.select should be a function'); + + var nodes = parsed.select({ node: doc }); + + assert.ok(nodes, 'parsed.select() should return a value'); + assert.equal(1, nodes.length); + assert.equal('title', nodes[0].localName); + assert.equal('Harry Potter', nodes[0].firstChild.data); + assert.equal('Harry Potter', nodes[0].toString()); + + test.done(); + } + + ,'evaluateString(), and evaluateNumber() on parsed expression with node': function (test) { + var xml = 'Harry Potter7'; + var doc = new dom().parseFromString(xml); + var parsed = xpath.parse('/*/numVolumes'); + + assert.equal(typeof parsed, 'object', 'parse() should return an object'); + + assert.equal(typeof parsed.evaluateString, 'function', 'parsed.evaluateString should be a function'); + assert.equal('7', parsed.evaluateString({ node: doc })); + + assert.equal(typeof parsed.evaluateBoolean, 'function', 'parsed.evaluateBoolean should be a function'); + assert.equal(true, parsed.evaluateBoolean({ node: doc })); + + assert.equal(typeof parsed.evaluateNumber, 'function', 'parsed.evaluateNumber should be a function'); + assert.equal(7, parsed.evaluateNumber({ node: doc })); + + test.done(); + } + + ,'evaluateBoolean() on parsed empty node set and boolean expressions': function (test) { + var xml = 'Harry Potter'; + var doc = new dom().parseFromString(xml); + var context = { node: doc }; + + function evaluate(path) { + return xpath.parse(path).evaluateBoolean({ node: doc }); + } + + assert.equal(false, evaluate('/*/myrtle'), 'boolean value of empty node set should be false'); + + assert.equal(true, evaluate('not(/*/myrtle)'), 'not() of empty nodeset should be true'); + + assert.equal(true, evaluate('/*/title'), 'boolean value of non-empty nodeset should be true'); + + assert.equal(true, evaluate('/*/title = "Harry Potter"'), 'title equals Harry Potter'); + + assert.equal(false, evaluate('/*/title != "Harry Potter"'), 'title != Harry Potter should be false'); + + assert.equal(false, evaluate('/*/title = "Percy Jackson"'), 'title should not equal Percy Jackson'); + + test.done(); + } + + ,'namespaces with parsed expression': function (test) { + var xml = '' + + 'QuirrellFluffy' + + 'MyrtleTom Riddle' + + ''; + var doc = new dom().parseFromString(xml); + + var expr = xpath.parse('/characters/c:character'); + var countExpr = xpath.parse('count(/characters/c:character)'); + var csns = 'http://chamber-secrets.com'; + + function resolve(prefix) { + if (prefix === 'c') { + return csns; + } + } + + function testContext(context, description) { + try { + var value = expr.evaluateString(context); + var count = countExpr.evaluateNumber(context); + + assert.equal('Myrtle', value, description + ' - string value - ' + value); + assert.equal(2, count, description + ' map - count - ' + count); + } catch(e) { + e.message = description + ': ' + (e.message || ''); + throw e; + } + } + + testContext({ + node: doc, + namespaces: { + c: csns + } + }, 'Namespace map'); + + testContext({ + node: doc, + namespaces: resolve + }, 'Namespace function'); + + testContext({ + node: doc, + namespaces: { + getNamespace: resolve + } + }, 'Namespace object'); + + test.done(); + } + + ,'custom functions': function (test) { + var xml = 'Harry Potter'; + var doc = new dom().parseFromString(xml); + + var parsed = xpath.parse('concat(double(/*/title), " is cool")'); + + function doubleString(context, value) { + assert.equal(2, arguments.length); + var str = value.stringValue(); + return str + str; + } + + function functions(name, namespace) { + if(name === 'double') { + return doubleString; + } + return null; + } + + function testContext(context, description) { + try{ + var actual = parsed.evaluateString(context); + var expected = 'Harry PotterHarry Potter is cool'; + assert.equal(expected, actual, description + ' - ' + expected + ' != ' + actual); + } catch (e) { + e.message = description + ": " + (e.message || ''); + throw e; + } + } + + testContext({ + node: doc, + functions: functions + }, 'Functions function'); + + testContext({ + node: doc, + functions: { + getFunction: functions + } + }, 'Functions object'); + + testContext({ + node: doc, + functions: { + double: doubleString + } + }, 'Functions map'); + + test.done(); + } + + ,'custom function namespaces': function (test) { + var xml = 'Harry PotterRonHermioneNeville'; + var doc = new dom().parseFromString(xml); + + var parsed = xpath.parse('concat(hp:double(/*/title), " is 2 cool ", hp:square(2), " school")'); + var hpns = 'http://harry-potter.com'; + + var namespaces = { + hp: hpns + }; + + var context = { + node: doc, + namespaces: { + hp: hpns + }, + functions: function (name, namespace) { + if (namespace === hpns) { + switch (name) { + case "double": + return function (context, value) { + assert.equal(2, arguments.length); + var str = value.stringValue(); + return str + str; + }; + case "square": + return function (context, value) { + var num = value.numberValue(); + return num * num; + }; + + case "xor": + return function (context, l, r) { + assert.equal(3, arguments.length); + var lbool = l.booleanValue(); + var rbool = r.booleanValue(); + return (lbool || rbool) && !(lbool && rbool); + }; + + case "second": + return function (context, nodes) { + var nodesArr = nodes.toArray(); + var second = nodesArr[1]; + return second ? [second] : []; + }; + } + } + return null; + } + }; + + assert.equal('Harry PotterHarry Potter is 2 cool 4 school', parsed.evaluateString(context)); + + assert.equal(false, xpath.parse('hp:xor(false(), false())').evaluateBoolean(context)); + assert.equal(true, xpath.parse('hp:xor(false(), true())').evaluateBoolean(context)); + assert.equal(true, xpath.parse('hp:xor(true(), false())').evaluateBoolean(context)); + assert.equal(false, xpath.parse('hp:xor(true(), true())').evaluateBoolean(context)); + + assert.equal('Hermione', xpath.parse('hp:second(/*/friend)').evaluateString(context)); + assert.equal(1, xpath.parse('count(hp:second(/*/friend))').evaluateNumber(context)); + assert.equal(0, xpath.parse('count(hp:second(/*/friendz))').evaluateNumber(context)); + + test.done(); + } + + ,'xpath variables': function (test) { + var xml = 'Harry Potter7'; + var doc = new dom().parseFromString(xml); + + var variables = { + title: 'Harry Potter', + notTitle: 'Percy Jackson', + houses: 4 + }; + + function variableFunction(name) { + return variables[name]; + } + + function testContext(context, description) { + try{ + assert.equal(true, xpath.parse('$title = /*/title').evaluateBoolean(context)); + assert.equal(false, xpath.parse('$notTitle = /*/title').evaluateBoolean(context)); + assert.equal(11, xpath.parse('$houses + /*/volumes').evaluateNumber(context)); + } catch (e) { + e.message = description + ": " + (e.message || ''); + throw e; + } + } + + testContext({ + node: doc, + variables: variableFunction + }, 'Variables function'); + + testContext({ + node: doc, + variables: { + getVariable: variableFunction + } + }, 'Variables object'); + + testContext({ + node: doc, + variables: variables + }, 'Variables map'); + + test.done(); + } + + ,'xpath variable namespaces': function (test) { + var xml = 'Harry Potter7'; + var doc = new dom().parseFromString(xml); + var hpns = 'http://harry-potter.com'; + + var context = { + node: doc, + namespaces: { + hp: hpns + }, + variables: function(name, namespace) { + if (namespace === hpns) { + switch (name) { + case 'title': return 'Harry Potter'; + case 'houses': return 4; + case 'false': return false; + case 'falseStr': return 'false'; + } + } else if (namespace === '') { + switch (name) { + case 'title': return 'World'; + } + } + + return null; + } + }; + + assert.equal(true, xpath.parse('$hp:title = /*/title').evaluateBoolean(context)); + assert.equal(false, xpath.parse('$title = /*/title').evaluateBoolean(context)); + assert.equal('World', xpath.parse('$title').evaluateString(context)); + assert.equal(false, xpath.parse('$hp:false').evaluateBoolean(context)); + assert.notEqual(false, xpath.parse('$hp:falseStr').evaluateBoolean(context)); + assert.throws(function () { + xpath.parse('$hp:hello').evaluateString(context); + }, function (err) { + return err.message === 'Undeclared variable: $hp:hello'; + }); + + test.done(); + } + + ,"detect unterminated string literals": function (test) { + function testUnterminated(path) { + assert.throws(function () { + xpath.evaluate('"hello'); + }, function (err) { + return err.message.indexOf('Unterminated') !== -1; + }); + } + + testUnterminated('"Hello'); + testUnterminated("'Hello"); + testUnterminated('self::text() = "\""'); + testUnterminated('"\""'); + + test.done(); + } + + ,"string value for CDATA sections": function (test) { + var xml = "Ron ", + doc = new dom().parseFromString(xml), + person1 = xpath.parse("/people/person").evaluateString({ node: doc }), + person2 = xpath.parse("/people/person/text()").evaluateString({ node: doc }), + person3 = xpath.select("string(/people/person/text())", doc); + person4 = xpath.parse("/people/person[2]").evaluateString({ node: doc }); + + assert.equal(person1, 'Harry Potter'); + assert.equal(person2, 'Harry Potter'); + assert.equal(person3, 'Harry Potter'); + assert.equal(person4, 'Ron Weasley'); + + test.done(); + } + + ,"string value of various node types": function (test) { + var xml = "<![CDATA[Harry Potter & the Philosopher's Stone]]>Harry Potter", + doc = new dom().parseFromString(xml), + allText = xpath.parse('.').evaluateString({ node: doc }), + ns = xpath.parse('*/namespace::*[name() = "hp"]').evaluateString({ node: doc }), + title = xpath.parse('*/title').evaluateString({ node: doc }), + child = xpath.parse('*/*').evaluateString({ node: doc }), + titleLang = xpath.parse('*/*/@lang').evaluateString({ node: doc }), + pi = xpath.parse('*/processing-instruction()').evaluateString({ node: doc }), + comment = xpath.parse('*/comment()').evaluateString({ node: doc }); + + assert.equal(allText, "Harry Potter & the Philosopher's StoneHarry Potter"); + assert.equal(ns, 'http://harry'); + assert.equal(title, "Harry Potter & the Philosopher's Stone"); + assert.equal(child, "Harry Potter & the Philosopher's Stone"); + assert.equal(titleLang, 'en'); + assert.equal(pi.trim(), "name='J.K. Rowling'"); + assert.equal(comment, ' This describes the Harry Potter Book '); + + test.done(); + } + + ,"exposes custom types": function (test) { + assert.ok(xpath.XPath, "xpath.XPath"); + assert.ok(xpath.XPathParser, "xpath.XPathParser"); + assert.ok(xpath.XPathResult, "xpath.XPathResult"); + + assert.ok(xpath.Step, "xpath.Step"); + assert.ok(xpath.NodeTest, "xpath.NodeTest"); + assert.ok(xpath.BarOperation, "xpath.BarOperation"); + + assert.ok(xpath.NamespaceResolver, "xpath.NamespaceResolver"); + assert.ok(xpath.FunctionResolver, "xpath.FunctionResolver"); + assert.ok(xpath.VariableResolver, "xpath.VariableResolver"); + + assert.ok(xpath.Utilities, "xpath.Utilities"); + + assert.ok(xpath.XPathContext, "xpath.XPathContext"); + assert.ok(xpath.XNodeSet, "xpath.XNodeSet"); + assert.ok(xpath.XBoolean, "xpath.XBoolean"); + assert.ok(xpath.XString, "xpath.XString"); + assert.ok(xpath.XNumber, "xpath.XNumber"); + + test.done(); + } + + ,"work with nodes created using DOM1 createElement()": function (test) { + var doc = new dom().parseFromString(''); + + doc.documentElement.appendChild(doc.createElement('characters')); + + assert.ok(xpath.select1('/book/characters', doc)); + + assert.equal(xpath.select1('local-name(/book/characters)', doc), 'characters'); + + test.done(); + } + + ,"preceding:: axis works on document fragments": function (test) { + var doc = new dom().parseFromString(''), + df = doc.createDocumentFragment(), + root = doc.createElement('book'); + + df.appendChild(root); + + for (var i = 0; i < 10; i += 1) { + root.appendChild(doc.createElement('chapter')); + } + + var chapter = xpath.select1("book/chapter[5]", df); + + assert.ok(chapter, 'chapter'); + + assert.equal(xpath.select("count(preceding::chapter)", chapter), 4); + + test.done(); + } + + ,"node set sorted and unsorted arrays": function (test) { + var doc = new dom().parseFromString('HarryRonHermione'), + path = xpath.parse("/*/*[3] | /*/*[2] | /*/*[1]") + nset = path.evaluateNodeSet({ node: doc }), + sorted = nset.toArray(), + unsorted = nset.toUnsortedArray(); + + assert.equal(sorted.length, 3); + assert.equal(unsorted.length, 3); + + assert.equal(sorted[0].textContent, 'Harry'); + assert.equal(sorted[1].textContent, 'Ron'); + assert.equal(sorted[2].textContent, 'Hermione'); + + assert.notEqual(sorted[0], unsorted[0], "first nodeset element equal"); + + test.done(); + } + + ,'meaningful error for invalid function': function(test) { + var path = xpath.parse('invalidFunc()'); + + assert.throws(function () { + path.evaluateString(); + }, function (err) { + return err.message.indexOf('invalidFunc') !== -1; + }); + + var path2 = xpath.parse('funcs:invalidFunc()'); + + assert.throws(function () { + path2.evaluateString({ + namespaces: { + funcs: 'myfunctions' + } + }); + }, function (err) { + return err.message.indexOf('invalidFunc') !== -1; + }); + + test.done(); + } + + // https://github.com/goto100/xpath/issues/32 + ,'supports contains() function on attributes': function (test) { + var doc = new dom().parseFromString(""), + andTheBooks = xpath.select("/books/book[contains(@title, ' ')]", doc), + secretBooks = xpath.select("/books/book[contains(@title, 'Secrets')]", doc); + + assert.equal(andTheBooks.length, 2); + assert.equal(secretBooks.length, 1); + + test.done(); + } + + ,'compare multiple nodes to multiple nodes (equals)': function (test) { + var xml = '' + + 'HarryHermione' + + 'DracoCrabbe' + + 'LunaCho' + + '' + + 'HermioneLuna'; + + var doc = new dom().parseFromString(xml); + var houses = xpath.parse('/school/houses/house[student = /school/honorStudents/student]').select({ node: doc }); + + assert.equal(houses.length, 2); + + var houseNames = houses.map(function (node) { return node.getAttribute('name'); }).sort(); + + assert.equal(houseNames[0], 'Gryffindor'); + assert.equal(houseNames[1], 'Ravenclaw'); + + test.done(); + } + + ,'compare multiple nodes to multiple nodes (gte)': function (test) { + var xml = '' + + 'HarryHermione' + + 'GoyleCrabbe' + + 'LunaCho' + + '' + + 'DADACharms' + + ''; + + var doc = new dom().parseFromString(xml); + var houses = xpath.parse('/school/houses/house[student/@level >= /school/courses/course/@minLevel]').select({ node: doc }); + + assert.equal(houses.length, 2); + + var houseNames = houses.map(function (node) { return node.getAttribute('name'); }).sort(); + + assert.equal(houseNames[0], 'Gryffindor'); + assert.equal(houseNames[1], 'Ravenclaw'); + + test.done(); + } + + ,'inequality comparisons with nodesets': function (test) { + var xml = ""; + var doc = new dom().parseFromString(xml); + + var options = { node: doc, variables: { theNumber: 3, theString: '3', theBoolean: true }}; + + var numberPaths = [ + '/books/book[$theNumber <= @num]', + '/books/book[$theNumber < @num]', + '/books/book[$theNumber >= @num]', + '/books/book[$theNumber > @num]' + ]; + + var stringPaths = [ + '/books/book[$theString <= @num]', + '/books/book[$theString < @num]', + '/books/book[$theString >= @num]', + '/books/book[$theString > @num]' + ]; + + var booleanPaths = [ + '/books/book[$theBoolean <= @num]', + '/books/book[$theBoolean < @num]', + '/books/book[$theBoolean >= @num]', + '/books/book[$theBoolean > @num]' + ]; + + var lhsPaths = [ + '/books/book[@num <= $theNumber]', + '/books/book[@num < $theNumber]' + ]; + + function countNodes(paths){ + return paths + .map(xpath.parse) + .map(function (path) { return path.select(options) }) + .map(function (arr) { return arr.length; }); + } + + assert.deepEqual(countNodes(numberPaths), [5, 4, 3, 2], 'numbers'); + assert.deepEqual(countNodes(stringPaths), [5, 4, 3, 2], 'strings'); + assert.deepEqual(countNodes(booleanPaths), [7, 6, 1, 0], 'numbers'); + assert.deepEqual(countNodes(lhsPaths), [3, 2], 'lhs'); + + test.done(); + } + + ,'error when evaluating boolean as number': function (test) { + var num = xpath.parse('"a" = "b"').evaluateNumber(); + + assert.equal(num, 0); + + var str = xpath.select('substring("expelliarmus", 1, "a" = "a")'); + + assert.equal(str, 'e'); + + test.done(); + } + + ,'string values of parsed expressions': function (test) { + var parser = new xpath.XPathParser(); + + var simpleStep = parser.parse('my:book'); + + assert.equal(simpleStep.toString(), 'child::my:book'); + + var precedingSib = parser.parse('preceding-sibling::my:chapter'); + + assert.equal(precedingSib.toString(), 'preceding-sibling::my:chapter'); + + var withPredicates = parser.parse('book[number > 3][contains(title, "and the")]'); + + assert.equal(withPredicates.toString(), "child::book[(child::number > 3)][contains(child::title, 'and the')]"); + + var parenthesisWithPredicate = parser.parse('(/books/book/chapter)[7]'); + + assert.equal(parenthesisWithPredicate.toString(), '(/child::books/child::book/child::chapter)[7]'); + + var charactersOver20 = parser.parse('heroes[age > 20] | villains[age > 20]'); + + assert.equal(charactersOver20.toString(), 'child::heroes[(child::age > 20)] | child::villains[(child::age > 20)]'); + + test.done(); + } + + ,'context position should work correctly': function (test) { + var doc = new dom().parseFromString("The boy who livedThe vanishing glassThe worst birthdayDobby's warningThe burrow"); + + var chapters = xpath.parse('/books/book/chapter[2]').select({ node: doc }); + + assert.equal(2, chapters.length); + assert.equal('The vanishing glass', chapters[0].textContent); + assert.equal("Dobby's warning", chapters[1].textContent); + + var lastChapters = xpath.parse('/books/book/chapter[last()]').select({ node: doc }); + + assert.equal(2, lastChapters.length); + assert.equal('The vanishing glass', lastChapters[0].textContent); + assert.equal("The burrow", lastChapters[1].textContent); + + var secondChapter = xpath.parse('(/books/book/chapter)[2]').select({ node: doc }); + + assert.equal(1, secondChapter.length); + assert.equal('The vanishing glass', chapters[0].textContent); + + var lastChapter = xpath.parse('(/books/book/chapter)[last()]').select({ node: doc }); + + assert.equal(1, lastChapter.length); + assert.equal("The burrow", lastChapter[0].textContent); + + + test.done(); + } + + ,'should allow null namespaces for null prefixes': function (test) { + var markup = '

Hi Ron!

Hi Draco!

Hi Hermione!

'; + var docHtml = new dom().parseFromString(markup, 'text/html'); + + var noPrefixPath = xpath.parse('/html/body/p[2]'); + + var greetings1 = noPrefixPath.select({ node: docHtml, allowAnyNamespaceForNoPrefix: false }); + + assert.equal(0, greetings1.length); + + var allowAnyNamespaceOptions = { node: docHtml, allowAnyNamespaceForNoPrefix: true }; + + // if allowAnyNamespaceForNoPrefix specified, allow using prefix-less node tests to match nodes with no prefix + var greetings2 = noPrefixPath.select(allowAnyNamespaceOptions); + + assert.equal(1, greetings2.length); + assert.equal('Hi Hermione!', greetings2[0].textContent); + + var allGreetings = xpath.parse('/html/body/p').select(allowAnyNamespaceOptions); + + assert.equal(2, allGreetings.length); + + var nsm = { html: xhtmlNs, other: 'http://www.example.com/other' }; + + var prefixPath = xpath.parse('/html:html/body/html:p'); + var optionsWithNamespaces = { node: docHtml, allowAnyNamespaceForNoPrefix: true, namespaces: nsm }; + + // if the path uses prefixes, they have to match + var greetings3 = prefixPath.select(optionsWithNamespaces); + + assert.equal(2, greetings3.length); + + var badPrefixPath = xpath.parse('/html:html/other:body/html:p'); + + var greetings4 = badPrefixPath.select(optionsWithNamespaces); + + test.done(); + } + + ,'support isHtml option' : function (test){ + var markup = '

Hi Ron!

Hi Draco!

Hi Hermione!

'; + var docHtml = new dom().parseFromString(markup, 'text/html'); + + var ns = { h: xhtmlNs }; + + // allow matching on unprefixed nodes + var greetings1 = xpath.parse('/html/body/p').select({ node: docHtml, isHtml: true }); + + assert.equal(2, greetings1.length); + + // allow case insensitive match + var greetings2 = xpath.parse('/h:html/h:bOdY/h:p').select({ node: docHtml, namespaces: ns, isHtml: true }); + + assert.equal(2, greetings2.length); + + // non-html mode: allow select if case and namespaces match + var greetings3 = xpath.parse('/h:html/h:body/h:p').select({ node: docHtml, namespaces: ns }); + + assert.equal(2, greetings3.length); + + // non-html mode: require namespaces + var greetings4 = xpath.parse('/html/body/p').select({ node: docHtml, namespaces: ns }); + + assert.equal(0, greetings4.length); + + // non-html mode: require case to match + var greetings5 = xpath.parse('/h:html/h:bOdY/h:p').select({ node: docHtml, namespaces: ns }); + + assert.equal(0, greetings5.length); + + test.done(); + } + + ,"builtin functions": function (test) { + var translated = xpath.parse('translate("hello", "lhho", "yHb")').evaluateString(); + + assert.equal('Heyy', translated); + + var characters = new dom().parseFromString('HarryRonHermione'); + + var firstTwo = xpath.parse('/characters/character[position() <= 2]').select({ node: characters }); + + assert.equal(2, firstTwo.length); + assert.equal('Harry', firstTwo[0].textContent); + assert.equal('Ron', firstTwo[1].textContent); + + var last = xpath.parse('/characters/character[last()]').select({ node: characters }); + + assert.equal(1, last.length); + assert.equal('Hermione', last[0].textContent); + + test.done(); + } +} diff --git a/node_modules/xpath/xpath.d.ts b/node_modules/xpath/xpath.d.ts new file mode 100644 index 00000000..11007618 --- /dev/null +++ b/node_modules/xpath/xpath.d.ts @@ -0,0 +1,9 @@ +type SelectedValue = Node | Attr | string | number | boolean; +interface XPathSelect { + (expression: string, node?: Node): Array; + (expression: string, node: Node, single: true): SelectedValue; +} +export var select: XPathSelect; +export function select1(expression: string, node?: Node): SelectedValue; +export function evaluate(expression: string, contextNode: Node, resolver: XPathNSResolver, type: number, result: XPathResult): XPathResult; +export function useNamespaces(namespaceMap: { [name: string]: string }): XPathSelect; diff --git a/node_modules/xpath/xpath.js b/node_modules/xpath/xpath.js new file mode 100644 index 00000000..6646a018 --- /dev/null +++ b/node_modules/xpath/xpath.js @@ -0,0 +1,4764 @@ +/* + * xpath.js + * + * An XPath 1.0 library for JavaScript. + * + * Cameron McCormack + * + * This work is licensed under the MIT License. + * + * Revision 20: April 26, 2011 + * Fixed a typo resulting in FIRST_ORDERED_NODE_TYPE results being wrong, + * thanks to . + * + * Revision 19: November 29, 2005 + * Nodesets now store their nodes in a height balanced tree, increasing + * performance for the common case of selecting nodes in document order, + * thanks to S閎astien Cramatte . + * AVL tree code adapted from Raimund Neumann . + * + * Revision 18: October 27, 2005 + * DOM 3 XPath support. Caveats: + * - namespace prefixes aren't resolved in XPathEvaluator.createExpression, + * but in XPathExpression.evaluate. + * - XPathResult.invalidIteratorState is not implemented. + * + * Revision 17: October 25, 2005 + * Some core XPath function fixes and a patch to avoid crashing certain + * versions of MSXML in PathExpr.prototype.getOwnerElement, thanks to + * S閎astien Cramatte . + * + * Revision 16: September 22, 2005 + * Workarounds for some IE 5.5 deficiencies. + * Fixed problem with prefix node tests on attribute nodes. + * + * Revision 15: May 21, 2005 + * Fixed problem with QName node tests on elements with an xmlns="...". + * + * Revision 14: May 19, 2005 + * Fixed QName node tests on attribute node regression. + * + * Revision 13: May 3, 2005 + * Node tests are case insensitive now if working in an HTML DOM. + * + * Revision 12: April 26, 2005 + * Updated licence. Slight code changes to enable use of Dean + * Edwards' script compression, http://dean.edwards.name/packer/ . + * + * Revision 11: April 23, 2005 + * Fixed bug with 'and' and 'or' operators, fix thanks to + * Sandy McArthur . + * + * Revision 10: April 15, 2005 + * Added support for a virtual root node, supposedly helpful for + * implementing XForms. Fixed problem with QName node tests and + * the parent axis. + * + * Revision 9: March 17, 2005 + * Namespace resolver tweaked so using the document node as the context + * for namespace lookups is equivalent to using the document element. + * + * Revision 8: February 13, 2005 + * Handle implicit declaration of 'xmlns' namespace prefix. + * Fixed bug when comparing nodesets. + * Instance data can now be associated with a FunctionResolver, and + * workaround for MSXML not supporting 'localName' and 'getElementById', + * thanks to Grant Gongaware. + * Fix a few problems when the context node is the root node. + * + * Revision 7: February 11, 2005 + * Default namespace resolver fix from Grant Gongaware + * . + * + * Revision 6: February 10, 2005 + * Fixed bug in 'number' function. + * + * Revision 5: February 9, 2005 + * Fixed bug where text nodes not getting converted to string values. + * + * Revision 4: January 21, 2005 + * Bug in 'name' function, fix thanks to Bill Edney. + * Fixed incorrect processing of namespace nodes. + * Fixed NamespaceResolver to resolve 'xml' namespace. + * Implemented union '|' operator. + * + * Revision 3: January 14, 2005 + * Fixed bug with nodeset comparisons, bug lexing < and >. + * + * Revision 2: October 26, 2004 + * QName node test namespace handling fixed. Few other bug fixes. + * + * Revision 1: August 13, 2004 + * Bug fixes from William J. Edney . + * Added minimal licence. + * + * Initial version: June 14, 2004 + */ + +// non-node wrapper +var xpath = (typeof exports === 'undefined') ? {} : exports; + +(function(exports) { +"use strict"; + +// functional helpers +function curry( func ) { + var slice = Array.prototype.slice, + totalargs = func.length, + partial = function( args, fn ) { + return function( ) { + return fn.apply( this, args.concat( slice.call( arguments ) ) ); + } + }, + fn = function( ) { + var args = slice.call( arguments ); + return ( args.length < totalargs ) ? + partial( args, fn ) : + func.apply( this, slice.apply( arguments, [ 0, totalargs ] ) ); + }; + return fn; +} + +var forEach = curry(function (f, xs) { + for (var i = 0; i < xs.length; i += 1) { + f(xs[i], i, xs); + } +}); + +var reduce = curry(function (f, seed, xs) { + var acc = seed; + + forEach(function (x, i) { acc = f(acc, x, i); }, xs); + + return acc; +}); + +var map = curry(function (f, xs) { + var mapped = new Array(xs.length); + + forEach(function (x, i) { mapped[i] = f(x); }, xs); + + return mapped; +}); + +var filter = curry(function (f, xs) { + var filtered = []; + + forEach(function (x, i) { if(f(x, i)) { filtered.push(x); } }, xs); + + return filtered; +}); + +function compose() { + if (arguments.length === 0) { throw new Error('compose requires at least one argument'); } + + var funcs = Array.prototype.slice.call(arguments).reverse(); + + var f0 = funcs[0]; + var fRem = funcs.slice(1); + + return function () { + return reduce(function (acc, next) { + return next(acc); + }, f0.apply(null, arguments), fRem); + }; +} + +var includes = curry(function (values, value) { + for (var i = 0; i < values.length; i += 1) { + if (values[i] === value){ + return true; + } + } + + return false; +}); + +function always(value) { return function () { return value ;} } + +var prop = curry(function (name, obj) { return obj[name]; }); + +function toString (x) { return x.toString(); } +var join = curry(function (s, xs) { return xs.join(s); }); +var wrap = curry(function (pref, suf, str) { return pref + str + suf; }); + +function assign(target) { // .length of function is 2 + var to = Object(target); + + for (var index = 1; index < arguments.length; index++) { + var nextSource = arguments[index]; + + if (nextSource != null) { // Skip over if undefined or null + for (var nextKey in nextSource) { + // Avoid bugs when hasOwnProperty is shadowed + if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { + to[nextKey] = nextSource[nextKey]; + } + } + } + } + + return to; +} + +// XPathParser /////////////////////////////////////////////////////////////// + +XPathParser.prototype = new Object(); +XPathParser.prototype.constructor = XPathParser; +XPathParser.superclass = Object.prototype; + +function XPathParser() { + this.init(); +} + +XPathParser.prototype.init = function() { + this.reduceActions = []; + + this.reduceActions[3] = function(rhs) { + return new OrOperation(rhs[0], rhs[2]); + }; + this.reduceActions[5] = function(rhs) { + return new AndOperation(rhs[0], rhs[2]); + }; + this.reduceActions[7] = function(rhs) { + return new EqualsOperation(rhs[0], rhs[2]); + }; + this.reduceActions[8] = function(rhs) { + return new NotEqualOperation(rhs[0], rhs[2]); + }; + this.reduceActions[10] = function(rhs) { + return new LessThanOperation(rhs[0], rhs[2]); + }; + this.reduceActions[11] = function(rhs) { + return new GreaterThanOperation(rhs[0], rhs[2]); + }; + this.reduceActions[12] = function(rhs) { + return new LessThanOrEqualOperation(rhs[0], rhs[2]); + }; + this.reduceActions[13] = function(rhs) { + return new GreaterThanOrEqualOperation(rhs[0], rhs[2]); + }; + this.reduceActions[15] = function(rhs) { + return new PlusOperation(rhs[0], rhs[2]); + }; + this.reduceActions[16] = function(rhs) { + return new MinusOperation(rhs[0], rhs[2]); + }; + this.reduceActions[18] = function(rhs) { + return new MultiplyOperation(rhs[0], rhs[2]); + }; + this.reduceActions[19] = function(rhs) { + return new DivOperation(rhs[0], rhs[2]); + }; + this.reduceActions[20] = function(rhs) { + return new ModOperation(rhs[0], rhs[2]); + }; + this.reduceActions[22] = function(rhs) { + return new UnaryMinusOperation(rhs[1]); + }; + this.reduceActions[24] = function(rhs) { + return new BarOperation(rhs[0], rhs[2]); + }; + this.reduceActions[25] = function(rhs) { + return new PathExpr(undefined, undefined, rhs[0]); + }; + this.reduceActions[27] = function(rhs) { + rhs[0].locationPath = rhs[2]; + return rhs[0]; + }; + this.reduceActions[28] = function(rhs) { + rhs[0].locationPath = rhs[2]; + rhs[0].locationPath.steps.unshift(new Step(Step.DESCENDANTORSELF, NodeTest.nodeTest, [])); + return rhs[0]; + }; + this.reduceActions[29] = function(rhs) { + return new PathExpr(rhs[0], [], undefined); + }; + this.reduceActions[30] = function(rhs) { + if (Utilities.instance_of(rhs[0], PathExpr)) { + if (rhs[0].filterPredicates == undefined) { + rhs[0].filterPredicates = []; + } + rhs[0].filterPredicates.push(rhs[1]); + return rhs[0]; + } else { + return new PathExpr(rhs[0], [rhs[1]], undefined); + } + }; + this.reduceActions[32] = function(rhs) { + return rhs[1]; + }; + this.reduceActions[33] = function(rhs) { + return new XString(rhs[0]); + }; + this.reduceActions[34] = function(rhs) { + return new XNumber(rhs[0]); + }; + this.reduceActions[36] = function(rhs) { + return new FunctionCall(rhs[0], []); + }; + this.reduceActions[37] = function(rhs) { + return new FunctionCall(rhs[0], rhs[2]); + }; + this.reduceActions[38] = function(rhs) { + return [ rhs[0] ]; + }; + this.reduceActions[39] = function(rhs) { + rhs[2].unshift(rhs[0]); + return rhs[2]; + }; + this.reduceActions[43] = function(rhs) { + return new LocationPath(true, []); + }; + this.reduceActions[44] = function(rhs) { + rhs[1].absolute = true; + return rhs[1]; + }; + this.reduceActions[46] = function(rhs) { + return new LocationPath(false, [ rhs[0] ]); + }; + this.reduceActions[47] = function(rhs) { + rhs[0].steps.push(rhs[2]); + return rhs[0]; + }; + this.reduceActions[49] = function(rhs) { + return new Step(rhs[0], rhs[1], []); + }; + this.reduceActions[50] = function(rhs) { + return new Step(Step.CHILD, rhs[0], []); + }; + this.reduceActions[51] = function(rhs) { + return new Step(rhs[0], rhs[1], rhs[2]); + }; + this.reduceActions[52] = function(rhs) { + return new Step(Step.CHILD, rhs[0], rhs[1]); + }; + this.reduceActions[54] = function(rhs) { + return [ rhs[0] ]; + }; + this.reduceActions[55] = function(rhs) { + rhs[1].unshift(rhs[0]); + return rhs[1]; + }; + this.reduceActions[56] = function(rhs) { + if (rhs[0] == "ancestor") { + return Step.ANCESTOR; + } else if (rhs[0] == "ancestor-or-self") { + return Step.ANCESTORORSELF; + } else if (rhs[0] == "attribute") { + return Step.ATTRIBUTE; + } else if (rhs[0] == "child") { + return Step.CHILD; + } else if (rhs[0] == "descendant") { + return Step.DESCENDANT; + } else if (rhs[0] == "descendant-or-self") { + return Step.DESCENDANTORSELF; + } else if (rhs[0] == "following") { + return Step.FOLLOWING; + } else if (rhs[0] == "following-sibling") { + return Step.FOLLOWINGSIBLING; + } else if (rhs[0] == "namespace") { + return Step.NAMESPACE; + } else if (rhs[0] == "parent") { + return Step.PARENT; + } else if (rhs[0] == "preceding") { + return Step.PRECEDING; + } else if (rhs[0] == "preceding-sibling") { + return Step.PRECEDINGSIBLING; + } else if (rhs[0] == "self") { + return Step.SELF; + } + return -1; + }; + this.reduceActions[57] = function(rhs) { + return Step.ATTRIBUTE; + }; + this.reduceActions[59] = function(rhs) { + if (rhs[0] == "comment") { + return NodeTest.commentTest; + } else if (rhs[0] == "text") { + return NodeTest.textTest; + } else if (rhs[0] == "processing-instruction") { + return NodeTest.anyPiTest; + } else if (rhs[0] == "node") { + return NodeTest.nodeTest; + } + return new NodeTest(-1, undefined); + }; + this.reduceActions[60] = function(rhs) { + return new NodeTest.PITest(rhs[2]); + }; + this.reduceActions[61] = function(rhs) { + return rhs[1]; + }; + this.reduceActions[63] = function(rhs) { + rhs[1].absolute = true; + rhs[1].steps.unshift(new Step(Step.DESCENDANTORSELF, NodeTest.nodeTest, [])); + return rhs[1]; + }; + this.reduceActions[64] = function(rhs) { + rhs[0].steps.push(new Step(Step.DESCENDANTORSELF, NodeTest.nodeTest, [])); + rhs[0].steps.push(rhs[2]); + return rhs[0]; + }; + this.reduceActions[65] = function(rhs) { + return new Step(Step.SELF, NodeTest.nodeTest, []); + }; + this.reduceActions[66] = function(rhs) { + return new Step(Step.PARENT, NodeTest.nodeTest, []); + }; + this.reduceActions[67] = function(rhs) { + return new VariableReference(rhs[1]); + }; + this.reduceActions[68] = function(rhs) { + return NodeTest.nameTestAny; + }; + this.reduceActions[69] = function(rhs) { + return new NodeTest.NameTestPrefixAny(rhs[0].split(':')[0]); + }; + this.reduceActions[70] = function(rhs) { + return new NodeTest.NameTestQName(rhs[0]); + }; +}; + +XPathParser.actionTable = [ + " s s sssssssss s ss s ss", + " s ", + "r rrrrrrrrr rrrrrrr rr r ", + " rrrrr ", + " s s sssssssss s ss s ss", + "rs rrrrrrrr s sssssrrrrrr rrs rs ", + " s s sssssssss s ss s ss", + " s ", + " s ", + "r rrrrrrrrr rrrrrrr rr rr ", + "r rrrrrrrrr rrrrrrr rr rr ", + "r rrrrrrrrr rrrrrrr rr rr ", + "r rrrrrrrrr rrrrrrr rr rr ", + "r rrrrrrrrr rrrrrrr rr rr ", + " s ", + " s ", + " s s sssss s s ", + "r rrrrrrrrr rrrrrrr rr r ", + "a ", + "r s rr r ", + "r sr rr r ", + "r s rr s rr r ", + "r rssrr rss rr r ", + "r rrrrr rrrss rr r ", + "r rrrrrsss rrrrr rr r ", + "r rrrrrrrr rrrrr rr r ", + "r rrrrrrrr rrrrrs rr r ", + "r rrrrrrrr rrrrrr rr r ", + "r rrrrrrrr rrrrrr rr r ", + "r srrrrrrrr rrrrrrs rr sr ", + "r srrrrrrrr rrrrrrs rr r ", + "r rrrrrrrrr rrrrrrr rr rr ", + "r rrrrrrrrr rrrrrrr rr rr ", + "r rrrrrrrrr rrrrrrr rr rr ", + "r rrrrrrrr rrrrrr rr r ", + "r rrrrrrrr rrrrrr rr r ", + "r rrrrrrrrr rrrrrrr rr r ", + "r rrrrrrrrr rrrrrrr rr r ", + " sssss ", + "r rrrrrrrrr rrrrrrr rr sr ", + "r rrrrrrrrr rrrrrrr rr r ", + "r rrrrrrrrr rrrrrrr rr rr ", + "r rrrrrrrrr rrrrrrr rr rr ", + " s ", + "r srrrrrrrr rrrrrrs rr r ", + "r rrrrrrrr rrrrr rr r ", + " s ", + " s ", + " rrrrr ", + " s s sssssssss s sss s ss", + "r srrrrrrrr rrrrrrs rr r ", + " s s sssssssss s ss s ss", + " s s sssssssss s ss s ss", + " s s sssssssss s ss s ss", + " s s sssssssss s ss s ss", + " s s sssssssss s ss s ss", + " s s sssssssss s ss s ss", + " s s sssssssss s ss s ss", + " s s sssssssss s ss s ss", + " s s sssssssss s ss s ss", + " s s sssssssss s ss s ss", + " s s sssssssss s ss s ss", + " s s sssssssss s ss s ss", + " s s sssssssss s ss s ss", + " s s sssssssss ss s ss", + " s s sssssssss s ss s ss", + " s s sssss s s ", + " s s sssss s s ", + "r rrrrrrrrr rrrrrrr rr rr ", + " s s sssss s s ", + " s s sssss s s ", + "r rrrrrrrrr rrrrrrr rr sr ", + "r rrrrrrrrr rrrrrrr rr sr ", + "r rrrrrrrrr rrrrrrr rr r ", + "r rrrrrrrrr rrrrrrr rr rr ", + " s ", + "r rrrrrrrrr rrrrrrr rr rr ", + "r rrrrrrrrr rrrrrrr rr rr ", + " rr ", + " s ", + " rs ", + "r sr rr r ", + "r s rr s rr r ", + "r rssrr rss rr r ", + "r rssrr rss rr r ", + "r rrrrr rrrss rr r ", + "r rrrrr rrrss rr r ", + "r rrrrr rrrss rr r ", + "r rrrrr rrrss rr r ", + "r rrrrrsss rrrrr rr r ", + "r rrrrrsss rrrrr rr r ", + "r rrrrrrrr rrrrr rr r ", + "r rrrrrrrr rrrrr rr r ", + "r rrrrrrrr rrrrr rr r ", + "r rrrrrrrr rrrrrr rr r ", + " r ", + " s ", + "r srrrrrrrr rrrrrrs rr r ", + "r srrrrrrrr rrrrrrs rr r ", + "r rrrrrrrrr rrrrrrr rr r ", + "r rrrrrrrrr rrrrrrr rr r ", + "r rrrrrrrrr rrrrrrr rr r ", + "r rrrrrrrrr rrrrrrr rr r ", + "r rrrrrrrrr rrrrrrr rr rr ", + "r rrrrrrrrr rrrrrrr rr rr ", + " s s sssssssss s ss s ss", + "r rrrrrrrrr rrrrrrr rr rr ", + " r " +]; + +XPathParser.actionTableNumber = [ + " 1 0 /.-,+*)(' & %$ # \"!", + " J ", + "a aaaaaaaaa aaaaaaa aa a ", + " YYYYY ", + " 1 0 /.-,+*)(' & %$ # \"!", + "K1 KKKKKKKK . +*)('KKKKKK KK# K\" ", + " 1 0 /.-,+*)(' & %$ # \"!", + " N ", + " O ", + "e eeeeeeeee eeeeeee ee ee ", + "f fffffffff fffffff ff ff ", + "d ddddddddd ddddddd dd dd ", + "B BBBBBBBBB BBBBBBB BB BB ", + "A AAAAAAAAA AAAAAAA AA AA ", + " P ", + " Q ", + " 1 . +*)(' # \" ", + "b bbbbbbbbb bbbbbbb bb b ", + " ", + "! S !! ! ", + "\" T\" \"\" \" ", + "$ V $$ U $$ $ ", + "& &ZY&& &XW && & ", + ") ))))) )))\\[ )) ) ", + ". ....._^] ..... .. . ", + "1 11111111 11111 11 1 ", + "5 55555555 55555` 55 5 ", + "7 77777777 777777 77 7 ", + "9 99999999 999999 99 9 ", + ": c:::::::: ::::::b :: a: ", + "I fIIIIIIII IIIIIIe II I ", + "= ========= ======= == == ", + "? ????????? ??????? ?? ?? ", + "C CCCCCCCCC CCCCCCC CC CC ", + "J JJJJJJJJ JJJJJJ JJ J ", + "M MMMMMMMM MMMMMM MM M ", + "N NNNNNNNNN NNNNNNN NN N ", + "P PPPPPPPPP PPPPPPP PP P ", + " +*)(' ", + "R RRRRRRRRR RRRRRRR RR aR ", + "U UUUUUUUUU UUUUUUU UU U ", + "Z ZZZZZZZZZ ZZZZZZZ ZZ ZZ ", + "c ccccccccc ccccccc cc cc ", + " j ", + "L fLLLLLLLL LLLLLLe LL L ", + "6 66666666 66666 66 6 ", + " k ", + " l ", + " XXXXX ", + " 1 0 /.-,+*)(' & %$m # \"!", + "_ f________ ______e __ _ ", + " 1 0 /.-,+*)(' & %$ # \"!", + " 1 0 /.-,+*)(' & %$ # \"!", + " 1 0 /.-,+*)(' & %$ # \"!", + " 1 0 /.-,+*)(' & %$ # \"!", + " 1 0 /.-,+*)(' & %$ # \"!", + " 1 0 /.-,+*)(' & %$ # \"!", + " 1 0 /.-,+*)(' & %$ # \"!", + " 1 0 /.-,+*)(' & %$ # \"!", + " 1 0 /.-,+*)(' & %$ # \"!", + " 1 0 /.-,+*)(' & %$ # \"!", + " 1 0 /.-,+*)(' & %$ # \"!", + " 1 0 /.-,+*)(' & %$ # \"!", + " 1 0 /.-,+*)(' & %$ # \"!", + " 1 0 /.-,+*)(' %$ # \"!", + " 1 0 /.-,+*)(' & %$ # \"!", + " 1 . +*)(' # \" ", + " 1 . +*)(' # \" ", + "> >>>>>>>>> >>>>>>> >> >> ", + " 1 . +*)(' # \" ", + " 1 . +*)(' # \" ", + "Q QQQQQQQQQ QQQQQQQ QQ aQ ", + "V VVVVVVVVV VVVVVVV VV aV ", + "T TTTTTTTTT TTTTTTT TT T ", + "@ @@@@@@@@@ @@@@@@@ @@ @@ ", + " \x87 ", + "[ [[[[[[[[[ [[[[[[[ [[ [[ ", + "D DDDDDDDDD DDDDDDD DD DD ", + " HH ", + " \x88 ", + " F\x89 ", + "# T# ## # ", + "% V %% U %% % ", + "' 'ZY'' 'XW '' ' ", + "( (ZY(( (XW (( ( ", + "+ +++++ +++\\[ ++ + ", + "* ***** ***\\[ ** * ", + "- ----- ---\\[ -- - ", + ", ,,,,, ,,,\\[ ,, , ", + "0 00000_^] 00000 00 0 ", + "/ /////_^] ///// // / ", + "2 22222222 22222 22 2 ", + "3 33333333 33333 33 3 ", + "4 44444444 44444 44 4 ", + "8 88888888 888888 88 8 ", + " ^ ", + " \x8a ", + "; f;;;;;;;; ;;;;;;e ;; ; ", + "< f<<<<<<<< <<<<<?@ AB CDEFGH IJ ", + " ", + " ", + " ", + "L456789:;<=>?@ AB CDEFGH IJ ", + " M EFGH IJ ", + " N;<=>?@ AB CDEFGH IJ ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " S EFGH IJ ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " e ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " h J ", + " i j ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "o456789:;<=>?@ ABpqCDEFGH IJ ", + " ", + " r6789:;<=>?@ AB CDEFGH IJ ", + " s789:;<=>?@ AB CDEFGH IJ ", + " t89:;<=>?@ AB CDEFGH IJ ", + " u89:;<=>?@ AB CDEFGH IJ ", + " v9:;<=>?@ AB CDEFGH IJ ", + " w9:;<=>?@ AB CDEFGH IJ ", + " x9:;<=>?@ AB CDEFGH IJ ", + " y9:;<=>?@ AB CDEFGH IJ ", + " z:;<=>?@ AB CDEFGH IJ ", + " {:;<=>?@ AB CDEFGH IJ ", + " |;<=>?@ AB CDEFGH IJ ", + " };<=>?@ AB CDEFGH IJ ", + " ~;<=>?@ AB CDEFGH IJ ", + " \x7f=>?@ AB CDEFGH IJ ", + "\x80456789:;<=>?@ AB CDEFGH IJ\x81", + " \x82 EFGH IJ ", + " \x83 EFGH IJ ", + " ", + " \x84 GH IJ ", + " \x85 GH IJ ", + " i \x86 ", + " i \x87 ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "o456789:;<=>?@ AB\x8cqCDEFGH IJ ", + " ", + " " +]; + +XPathParser.productions = [ + [1, 1, 2], + [2, 1, 3], + [3, 1, 4], + [3, 3, 3, -9, 4], + [4, 1, 5], + [4, 3, 4, -8, 5], + [5, 1, 6], + [5, 3, 5, -22, 6], + [5, 3, 5, -5, 6], + [6, 1, 7], + [6, 3, 6, -23, 7], + [6, 3, 6, -24, 7], + [6, 3, 6, -6, 7], + [6, 3, 6, -7, 7], + [7, 1, 8], + [7, 3, 7, -25, 8], + [7, 3, 7, -26, 8], + [8, 1, 9], + [8, 3, 8, -12, 9], + [8, 3, 8, -11, 9], + [8, 3, 8, -10, 9], + [9, 1, 10], + [9, 2, -26, 9], + [10, 1, 11], + [10, 3, 10, -27, 11], + [11, 1, 12], + [11, 1, 13], + [11, 3, 13, -28, 14], + [11, 3, 13, -4, 14], + [13, 1, 15], + [13, 2, 13, 16], + [15, 1, 17], + [15, 3, -29, 2, -30], + [15, 1, -15], + [15, 1, -16], + [15, 1, 18], + [18, 3, -13, -29, -30], + [18, 4, -13, -29, 19, -30], + [19, 1, 20], + [19, 3, 20, -31, 19], + [20, 1, 2], + [12, 1, 14], + [12, 1, 21], + [21, 1, -28], + [21, 2, -28, 14], + [21, 1, 22], + [14, 1, 23], + [14, 3, 14, -28, 23], + [14, 1, 24], + [23, 2, 25, 26], + [23, 1, 26], + [23, 3, 25, 26, 27], + [23, 2, 26, 27], + [23, 1, 28], + [27, 1, 16], + [27, 2, 16, 27], + [25, 2, -14, -3], + [25, 1, -32], + [26, 1, 29], + [26, 3, -20, -29, -30], + [26, 4, -21, -29, -15, -30], + [16, 3, -33, 30, -34], + [30, 1, 2], + [22, 2, -4, 14], + [24, 3, 14, -4, 23], + [28, 1, -35], + [28, 1, -2], + [17, 2, -36, -18], + [29, 1, -17], + [29, 1, -19], + [29, 1, -18] +]; + +XPathParser.DOUBLEDOT = 2; +XPathParser.DOUBLECOLON = 3; +XPathParser.DOUBLESLASH = 4; +XPathParser.NOTEQUAL = 5; +XPathParser.LESSTHANOREQUAL = 6; +XPathParser.GREATERTHANOREQUAL = 7; +XPathParser.AND = 8; +XPathParser.OR = 9; +XPathParser.MOD = 10; +XPathParser.DIV = 11; +XPathParser.MULTIPLYOPERATOR = 12; +XPathParser.FUNCTIONNAME = 13; +XPathParser.AXISNAME = 14; +XPathParser.LITERAL = 15; +XPathParser.NUMBER = 16; +XPathParser.ASTERISKNAMETEST = 17; +XPathParser.QNAME = 18; +XPathParser.NCNAMECOLONASTERISK = 19; +XPathParser.NODETYPE = 20; +XPathParser.PROCESSINGINSTRUCTIONWITHLITERAL = 21; +XPathParser.EQUALS = 22; +XPathParser.LESSTHAN = 23; +XPathParser.GREATERTHAN = 24; +XPathParser.PLUS = 25; +XPathParser.MINUS = 26; +XPathParser.BAR = 27; +XPathParser.SLASH = 28; +XPathParser.LEFTPARENTHESIS = 29; +XPathParser.RIGHTPARENTHESIS = 30; +XPathParser.COMMA = 31; +XPathParser.AT = 32; +XPathParser.LEFTBRACKET = 33; +XPathParser.RIGHTBRACKET = 34; +XPathParser.DOT = 35; +XPathParser.DOLLAR = 36; + +XPathParser.prototype.tokenize = function(s1) { + var types = []; + var values = []; + var s = s1 + '\0'; + + var pos = 0; + var c = s.charAt(pos++); + while (1) { + while (c == ' ' || c == '\t' || c == '\r' || c == '\n') { + c = s.charAt(pos++); + } + if (c == '\0' || pos >= s.length) { + break; + } + + if (c == '(') { + types.push(XPathParser.LEFTPARENTHESIS); + values.push(c); + c = s.charAt(pos++); + continue; + } + if (c == ')') { + types.push(XPathParser.RIGHTPARENTHESIS); + values.push(c); + c = s.charAt(pos++); + continue; + } + if (c == '[') { + types.push(XPathParser.LEFTBRACKET); + values.push(c); + c = s.charAt(pos++); + continue; + } + if (c == ']') { + types.push(XPathParser.RIGHTBRACKET); + values.push(c); + c = s.charAt(pos++); + continue; + } + if (c == '@') { + types.push(XPathParser.AT); + values.push(c); + c = s.charAt(pos++); + continue; + } + if (c == ',') { + types.push(XPathParser.COMMA); + values.push(c); + c = s.charAt(pos++); + continue; + } + if (c == '|') { + types.push(XPathParser.BAR); + values.push(c); + c = s.charAt(pos++); + continue; + } + if (c == '+') { + types.push(XPathParser.PLUS); + values.push(c); + c = s.charAt(pos++); + continue; + } + if (c == '-') { + types.push(XPathParser.MINUS); + values.push(c); + c = s.charAt(pos++); + continue; + } + if (c == '=') { + types.push(XPathParser.EQUALS); + values.push(c); + c = s.charAt(pos++); + continue; + } + if (c == '$') { + types.push(XPathParser.DOLLAR); + values.push(c); + c = s.charAt(pos++); + continue; + } + + if (c == '.') { + c = s.charAt(pos++); + if (c == '.') { + types.push(XPathParser.DOUBLEDOT); + values.push(".."); + c = s.charAt(pos++); + continue; + } + if (c >= '0' && c <= '9') { + var number = "." + c; + c = s.charAt(pos++); + while (c >= '0' && c <= '9') { + number += c; + c = s.charAt(pos++); + } + types.push(XPathParser.NUMBER); + values.push(number); + continue; + } + types.push(XPathParser.DOT); + values.push('.'); + continue; + } + + if (c == '\'' || c == '"') { + var delimiter = c; + var literal = ""; + while (pos < s.length && (c = s.charAt(pos)) !== delimiter) { + literal += c; + pos += 1; + } + if (c !== delimiter) { + throw XPathException.fromMessage("Unterminated string literal: " + delimiter + literal); + } + pos += 1; + types.push(XPathParser.LITERAL); + values.push(literal); + c = s.charAt(pos++); + continue; + } + + if (c >= '0' && c <= '9') { + var number = c; + c = s.charAt(pos++); + while (c >= '0' && c <= '9') { + number += c; + c = s.charAt(pos++); + } + if (c == '.') { + if (s.charAt(pos) >= '0' && s.charAt(pos) <= '9') { + number += c; + number += s.charAt(pos++); + c = s.charAt(pos++); + while (c >= '0' && c <= '9') { + number += c; + c = s.charAt(pos++); + } + } + } + types.push(XPathParser.NUMBER); + values.push(number); + continue; + } + + if (c == '*') { + if (types.length > 0) { + var last = types[types.length - 1]; + if (last != XPathParser.AT + && last != XPathParser.DOUBLECOLON + && last != XPathParser.LEFTPARENTHESIS + && last != XPathParser.LEFTBRACKET + && last != XPathParser.AND + && last != XPathParser.OR + && last != XPathParser.MOD + && last != XPathParser.DIV + && last != XPathParser.MULTIPLYOPERATOR + && last != XPathParser.SLASH + && last != XPathParser.DOUBLESLASH + && last != XPathParser.BAR + && last != XPathParser.PLUS + && last != XPathParser.MINUS + && last != XPathParser.EQUALS + && last != XPathParser.NOTEQUAL + && last != XPathParser.LESSTHAN + && last != XPathParser.LESSTHANOREQUAL + && last != XPathParser.GREATERTHAN + && last != XPathParser.GREATERTHANOREQUAL) { + types.push(XPathParser.MULTIPLYOPERATOR); + values.push(c); + c = s.charAt(pos++); + continue; + } + } + types.push(XPathParser.ASTERISKNAMETEST); + values.push(c); + c = s.charAt(pos++); + continue; + } + + if (c == ':') { + if (s.charAt(pos) == ':') { + types.push(XPathParser.DOUBLECOLON); + values.push("::"); + pos++; + c = s.charAt(pos++); + continue; + } + } + + if (c == '/') { + c = s.charAt(pos++); + if (c == '/') { + types.push(XPathParser.DOUBLESLASH); + values.push("//"); + c = s.charAt(pos++); + continue; + } + types.push(XPathParser.SLASH); + values.push('/'); + continue; + } + + if (c == '!') { + if (s.charAt(pos) == '=') { + types.push(XPathParser.NOTEQUAL); + values.push("!="); + pos++; + c = s.charAt(pos++); + continue; + } + } + + if (c == '<') { + if (s.charAt(pos) == '=') { + types.push(XPathParser.LESSTHANOREQUAL); + values.push("<="); + pos++; + c = s.charAt(pos++); + continue; + } + types.push(XPathParser.LESSTHAN); + values.push('<'); + c = s.charAt(pos++); + continue; + } + + if (c == '>') { + if (s.charAt(pos) == '=') { + types.push(XPathParser.GREATERTHANOREQUAL); + values.push(">="); + pos++; + c = s.charAt(pos++); + continue; + } + types.push(XPathParser.GREATERTHAN); + values.push('>'); + c = s.charAt(pos++); + continue; + } + + if (c == '_' || Utilities.isLetter(c.charCodeAt(0))) { + var name = c; + c = s.charAt(pos++); + while (Utilities.isNCNameChar(c.charCodeAt(0))) { + name += c; + c = s.charAt(pos++); + } + if (types.length > 0) { + var last = types[types.length - 1]; + if (last != XPathParser.AT + && last != XPathParser.DOUBLECOLON + && last != XPathParser.LEFTPARENTHESIS + && last != XPathParser.LEFTBRACKET + && last != XPathParser.AND + && last != XPathParser.OR + && last != XPathParser.MOD + && last != XPathParser.DIV + && last != XPathParser.MULTIPLYOPERATOR + && last != XPathParser.SLASH + && last != XPathParser.DOUBLESLASH + && last != XPathParser.BAR + && last != XPathParser.PLUS + && last != XPathParser.MINUS + && last != XPathParser.EQUALS + && last != XPathParser.NOTEQUAL + && last != XPathParser.LESSTHAN + && last != XPathParser.LESSTHANOREQUAL + && last != XPathParser.GREATERTHAN + && last != XPathParser.GREATERTHANOREQUAL) { + if (name == "and") { + types.push(XPathParser.AND); + values.push(name); + continue; + } + if (name == "or") { + types.push(XPathParser.OR); + values.push(name); + continue; + } + if (name == "mod") { + types.push(XPathParser.MOD); + values.push(name); + continue; + } + if (name == "div") { + types.push(XPathParser.DIV); + values.push(name); + continue; + } + } + } + if (c == ':') { + if (s.charAt(pos) == '*') { + types.push(XPathParser.NCNAMECOLONASTERISK); + values.push(name + ":*"); + pos++; + c = s.charAt(pos++); + continue; + } + if (s.charAt(pos) == '_' || Utilities.isLetter(s.charCodeAt(pos))) { + name += ':'; + c = s.charAt(pos++); + while (Utilities.isNCNameChar(c.charCodeAt(0))) { + name += c; + c = s.charAt(pos++); + } + if (c == '(') { + types.push(XPathParser.FUNCTIONNAME); + values.push(name); + continue; + } + types.push(XPathParser.QNAME); + values.push(name); + continue; + } + if (s.charAt(pos) == ':') { + types.push(XPathParser.AXISNAME); + values.push(name); + continue; + } + } + if (c == '(') { + if (name == "comment" || name == "text" || name == "node") { + types.push(XPathParser.NODETYPE); + values.push(name); + continue; + } + if (name == "processing-instruction") { + if (s.charAt(pos) == ')') { + types.push(XPathParser.NODETYPE); + } else { + types.push(XPathParser.PROCESSINGINSTRUCTIONWITHLITERAL); + } + values.push(name); + continue; + } + types.push(XPathParser.FUNCTIONNAME); + values.push(name); + continue; + } + types.push(XPathParser.QNAME); + values.push(name); + continue; + } + + throw new Error("Unexpected character " + c); + } + types.push(1); + values.push("[EOF]"); + return [types, values]; +}; + +XPathParser.SHIFT = 's'; +XPathParser.REDUCE = 'r'; +XPathParser.ACCEPT = 'a'; + +XPathParser.prototype.parse = function(s) { + var types; + var values; + var res = this.tokenize(s); + if (res == undefined) { + return undefined; + } + types = res[0]; + values = res[1]; + var tokenPos = 0; + var state = []; + var tokenType = []; + var tokenValue = []; + var s; + var a; + var t; + + state.push(0); + tokenType.push(1); + tokenValue.push("_S"); + + a = types[tokenPos]; + t = values[tokenPos++]; + while (1) { + s = state[state.length - 1]; + switch (XPathParser.actionTable[s].charAt(a - 1)) { + case XPathParser.SHIFT: + tokenType.push(-a); + tokenValue.push(t); + state.push(XPathParser.actionTableNumber[s].charCodeAt(a - 1) - 32); + a = types[tokenPos]; + t = values[tokenPos++]; + break; + case XPathParser.REDUCE: + var num = XPathParser.productions[XPathParser.actionTableNumber[s].charCodeAt(a - 1) - 32][1]; + var rhs = []; + for (var i = 0; i < num; i++) { + tokenType.pop(); + rhs.unshift(tokenValue.pop()); + state.pop(); + } + var s_ = state[state.length - 1]; + tokenType.push(XPathParser.productions[XPathParser.actionTableNumber[s].charCodeAt(a - 1) - 32][0]); + if (this.reduceActions[XPathParser.actionTableNumber[s].charCodeAt(a - 1) - 32] == undefined) { + tokenValue.push(rhs[0]); + } else { + tokenValue.push(this.reduceActions[XPathParser.actionTableNumber[s].charCodeAt(a - 1) - 32](rhs)); + } + state.push(XPathParser.gotoTable[s_].charCodeAt(XPathParser.productions[XPathParser.actionTableNumber[s].charCodeAt(a - 1) - 32][0] - 2) - 33); + break; + case XPathParser.ACCEPT: + return new XPath(tokenValue.pop()); + default: + throw new Error("XPath parse error"); + } + } +}; + +// XPath ///////////////////////////////////////////////////////////////////// + +XPath.prototype = new Object(); +XPath.prototype.constructor = XPath; +XPath.superclass = Object.prototype; + +function XPath(e) { + this.expression = e; +} + +XPath.prototype.toString = function() { + return this.expression.toString(); +}; + +function setIfUnset(obj, prop, value) { + if (!(prop in obj)) { + obj[prop] = value; + } +} + +XPath.prototype.evaluate = function(c) { + c.contextNode = c.expressionContextNode; + c.contextSize = 1; + c.contextPosition = 1; + + // [2017-11-25] Removed usage of .implementation.hasFeature() since it does + // not reliably detect HTML DOMs (always returns false in xmldom and true in browsers) + if (c.isHtml) { + setIfUnset(c, 'caseInsensitive', true); + setIfUnset(c, 'allowAnyNamespaceForNoPrefix', true); + } + + setIfUnset(c, 'caseInsensitive', false); + + return this.expression.evaluate(c); +}; + +XPath.XML_NAMESPACE_URI = "http://www.w3.org/XML/1998/namespace"; +XPath.XMLNS_NAMESPACE_URI = "http://www.w3.org/2000/xmlns/"; + +// Expression //////////////////////////////////////////////////////////////// + +Expression.prototype = new Object(); +Expression.prototype.constructor = Expression; +Expression.superclass = Object.prototype; + +function Expression() { +} + +Expression.prototype.init = function() { +}; + +Expression.prototype.toString = function() { + return ""; +}; + +Expression.prototype.evaluate = function(c) { + throw new Error("Could not evaluate expression."); +}; + +// UnaryOperation //////////////////////////////////////////////////////////// + +UnaryOperation.prototype = new Expression(); +UnaryOperation.prototype.constructor = UnaryOperation; +UnaryOperation.superclass = Expression.prototype; + +function UnaryOperation(rhs) { + if (arguments.length > 0) { + this.init(rhs); + } +} + +UnaryOperation.prototype.init = function(rhs) { + this.rhs = rhs; +}; + +// UnaryMinusOperation /////////////////////////////////////////////////////// + +UnaryMinusOperation.prototype = new UnaryOperation(); +UnaryMinusOperation.prototype.constructor = UnaryMinusOperation; +UnaryMinusOperation.superclass = UnaryOperation.prototype; + +function UnaryMinusOperation(rhs) { + if (arguments.length > 0) { + this.init(rhs); + } +} + +UnaryMinusOperation.prototype.init = function(rhs) { + UnaryMinusOperation.superclass.init.call(this, rhs); +}; + +UnaryMinusOperation.prototype.evaluate = function(c) { + return this.rhs.evaluate(c).number().negate(); +}; + +UnaryMinusOperation.prototype.toString = function() { + return "-" + this.rhs.toString(); +}; + +// BinaryOperation /////////////////////////////////////////////////////////// + +BinaryOperation.prototype = new Expression(); +BinaryOperation.prototype.constructor = BinaryOperation; +BinaryOperation.superclass = Expression.prototype; + +function BinaryOperation(lhs, rhs) { + if (arguments.length > 0) { + this.init(lhs, rhs); + } +} + +BinaryOperation.prototype.init = function(lhs, rhs) { + this.lhs = lhs; + this.rhs = rhs; +}; + +// OrOperation /////////////////////////////////////////////////////////////// + +OrOperation.prototype = new BinaryOperation(); +OrOperation.prototype.constructor = OrOperation; +OrOperation.superclass = BinaryOperation.prototype; + +function OrOperation(lhs, rhs) { + if (arguments.length > 0) { + this.init(lhs, rhs); + } +} + +OrOperation.prototype.init = function(lhs, rhs) { + OrOperation.superclass.init.call(this, lhs, rhs); +}; + +OrOperation.prototype.toString = function() { + return "(" + this.lhs.toString() + " or " + this.rhs.toString() + ")"; +}; + +OrOperation.prototype.evaluate = function(c) { + var b = this.lhs.evaluate(c).bool(); + if (b.booleanValue()) { + return b; + } + return this.rhs.evaluate(c).bool(); +}; + +// AndOperation ////////////////////////////////////////////////////////////// + +AndOperation.prototype = new BinaryOperation(); +AndOperation.prototype.constructor = AndOperation; +AndOperation.superclass = BinaryOperation.prototype; + +function AndOperation(lhs, rhs) { + if (arguments.length > 0) { + this.init(lhs, rhs); + } +} + +AndOperation.prototype.init = function(lhs, rhs) { + AndOperation.superclass.init.call(this, lhs, rhs); +}; + +AndOperation.prototype.toString = function() { + return "(" + this.lhs.toString() + " and " + this.rhs.toString() + ")"; +}; + +AndOperation.prototype.evaluate = function(c) { + var b = this.lhs.evaluate(c).bool(); + if (!b.booleanValue()) { + return b; + } + return this.rhs.evaluate(c).bool(); +}; + +// EqualsOperation /////////////////////////////////////////////////////////// + +EqualsOperation.prototype = new BinaryOperation(); +EqualsOperation.prototype.constructor = EqualsOperation; +EqualsOperation.superclass = BinaryOperation.prototype; + +function EqualsOperation(lhs, rhs) { + if (arguments.length > 0) { + this.init(lhs, rhs); + } +} + +EqualsOperation.prototype.init = function(lhs, rhs) { + EqualsOperation.superclass.init.call(this, lhs, rhs); +}; + +EqualsOperation.prototype.toString = function() { + return "(" + this.lhs.toString() + " = " + this.rhs.toString() + ")"; +}; + +EqualsOperation.prototype.evaluate = function(c) { + return this.lhs.evaluate(c).equals(this.rhs.evaluate(c)); +}; + +// NotEqualOperation ///////////////////////////////////////////////////////// + +NotEqualOperation.prototype = new BinaryOperation(); +NotEqualOperation.prototype.constructor = NotEqualOperation; +NotEqualOperation.superclass = BinaryOperation.prototype; + +function NotEqualOperation(lhs, rhs) { + if (arguments.length > 0) { + this.init(lhs, rhs); + } +} + +NotEqualOperation.prototype.init = function(lhs, rhs) { + NotEqualOperation.superclass.init.call(this, lhs, rhs); +}; + +NotEqualOperation.prototype.toString = function() { + return "(" + this.lhs.toString() + " != " + this.rhs.toString() + ")"; +}; + +NotEqualOperation.prototype.evaluate = function(c) { + return this.lhs.evaluate(c).notequal(this.rhs.evaluate(c)); +}; + +// LessThanOperation ///////////////////////////////////////////////////////// + +LessThanOperation.prototype = new BinaryOperation(); +LessThanOperation.prototype.constructor = LessThanOperation; +LessThanOperation.superclass = BinaryOperation.prototype; + +function LessThanOperation(lhs, rhs) { + if (arguments.length > 0) { + this.init(lhs, rhs); + } +} + +LessThanOperation.prototype.init = function(lhs, rhs) { + LessThanOperation.superclass.init.call(this, lhs, rhs); +}; + +LessThanOperation.prototype.evaluate = function(c) { + return this.lhs.evaluate(c).lessthan(this.rhs.evaluate(c)); +}; + +LessThanOperation.prototype.toString = function() { + return "(" + this.lhs.toString() + " < " + this.rhs.toString() + ")"; +}; + +// GreaterThanOperation ////////////////////////////////////////////////////// + +GreaterThanOperation.prototype = new BinaryOperation(); +GreaterThanOperation.prototype.constructor = GreaterThanOperation; +GreaterThanOperation.superclass = BinaryOperation.prototype; + +function GreaterThanOperation(lhs, rhs) { + if (arguments.length > 0) { + this.init(lhs, rhs); + } +} + +GreaterThanOperation.prototype.init = function(lhs, rhs) { + GreaterThanOperation.superclass.init.call(this, lhs, rhs); +}; + +GreaterThanOperation.prototype.evaluate = function(c) { + return this.lhs.evaluate(c).greaterthan(this.rhs.evaluate(c)); +}; + +GreaterThanOperation.prototype.toString = function() { + return "(" + this.lhs.toString() + " > " + this.rhs.toString() + ")"; +}; + +// LessThanOrEqualOperation ////////////////////////////////////////////////// + +LessThanOrEqualOperation.prototype = new BinaryOperation(); +LessThanOrEqualOperation.prototype.constructor = LessThanOrEqualOperation; +LessThanOrEqualOperation.superclass = BinaryOperation.prototype; + +function LessThanOrEqualOperation(lhs, rhs) { + if (arguments.length > 0) { + this.init(lhs, rhs); + } +} + +LessThanOrEqualOperation.prototype.init = function(lhs, rhs) { + LessThanOrEqualOperation.superclass.init.call(this, lhs, rhs); +}; + +LessThanOrEqualOperation.prototype.evaluate = function(c) { + return this.lhs.evaluate(c).lessthanorequal(this.rhs.evaluate(c)); +}; + +LessThanOrEqualOperation.prototype.toString = function() { + return "(" + this.lhs.toString() + " <= " + this.rhs.toString() + ")"; +}; + +// GreaterThanOrEqualOperation /////////////////////////////////////////////// + +GreaterThanOrEqualOperation.prototype = new BinaryOperation(); +GreaterThanOrEqualOperation.prototype.constructor = GreaterThanOrEqualOperation; +GreaterThanOrEqualOperation.superclass = BinaryOperation.prototype; + +function GreaterThanOrEqualOperation(lhs, rhs) { + if (arguments.length > 0) { + this.init(lhs, rhs); + } +} + +GreaterThanOrEqualOperation.prototype.init = function(lhs, rhs) { + GreaterThanOrEqualOperation.superclass.init.call(this, lhs, rhs); +}; + +GreaterThanOrEqualOperation.prototype.evaluate = function(c) { + return this.lhs.evaluate(c).greaterthanorequal(this.rhs.evaluate(c)); +}; + +GreaterThanOrEqualOperation.prototype.toString = function() { + return "(" + this.lhs.toString() + " >= " + this.rhs.toString() + ")"; +}; + +// PlusOperation ///////////////////////////////////////////////////////////// + +PlusOperation.prototype = new BinaryOperation(); +PlusOperation.prototype.constructor = PlusOperation; +PlusOperation.superclass = BinaryOperation.prototype; + +function PlusOperation(lhs, rhs) { + if (arguments.length > 0) { + this.init(lhs, rhs); + } +} + +PlusOperation.prototype.init = function(lhs, rhs) { + PlusOperation.superclass.init.call(this, lhs, rhs); +}; + +PlusOperation.prototype.evaluate = function(c) { + return this.lhs.evaluate(c).number().plus(this.rhs.evaluate(c).number()); +}; + +PlusOperation.prototype.toString = function() { + return "(" + this.lhs.toString() + " + " + this.rhs.toString() + ")"; +}; + +// MinusOperation //////////////////////////////////////////////////////////// + +MinusOperation.prototype = new BinaryOperation(); +MinusOperation.prototype.constructor = MinusOperation; +MinusOperation.superclass = BinaryOperation.prototype; + +function MinusOperation(lhs, rhs) { + if (arguments.length > 0) { + this.init(lhs, rhs); + } +} + +MinusOperation.prototype.init = function(lhs, rhs) { + MinusOperation.superclass.init.call(this, lhs, rhs); +}; + +MinusOperation.prototype.evaluate = function(c) { + return this.lhs.evaluate(c).number().minus(this.rhs.evaluate(c).number()); +}; + +MinusOperation.prototype.toString = function() { + return "(" + this.lhs.toString() + " - " + this.rhs.toString() + ")"; +}; + +// MultiplyOperation ///////////////////////////////////////////////////////// + +MultiplyOperation.prototype = new BinaryOperation(); +MultiplyOperation.prototype.constructor = MultiplyOperation; +MultiplyOperation.superclass = BinaryOperation.prototype; + +function MultiplyOperation(lhs, rhs) { + if (arguments.length > 0) { + this.init(lhs, rhs); + } +} + +MultiplyOperation.prototype.init = function(lhs, rhs) { + MultiplyOperation.superclass.init.call(this, lhs, rhs); +}; + +MultiplyOperation.prototype.evaluate = function(c) { + return this.lhs.evaluate(c).number().multiply(this.rhs.evaluate(c).number()); +}; + +MultiplyOperation.prototype.toString = function() { + return "(" + this.lhs.toString() + " * " + this.rhs.toString() + ")"; +}; + +// DivOperation ////////////////////////////////////////////////////////////// + +DivOperation.prototype = new BinaryOperation(); +DivOperation.prototype.constructor = DivOperation; +DivOperation.superclass = BinaryOperation.prototype; + +function DivOperation(lhs, rhs) { + if (arguments.length > 0) { + this.init(lhs, rhs); + } +} + +DivOperation.prototype.init = function(lhs, rhs) { + DivOperation.superclass.init.call(this, lhs, rhs); +}; + +DivOperation.prototype.evaluate = function(c) { + return this.lhs.evaluate(c).number().div(this.rhs.evaluate(c).number()); +}; + +DivOperation.prototype.toString = function() { + return "(" + this.lhs.toString() + " div " + this.rhs.toString() + ")"; +}; + +// ModOperation ////////////////////////////////////////////////////////////// + +ModOperation.prototype = new BinaryOperation(); +ModOperation.prototype.constructor = ModOperation; +ModOperation.superclass = BinaryOperation.prototype; + +function ModOperation(lhs, rhs) { + if (arguments.length > 0) { + this.init(lhs, rhs); + } +} + +ModOperation.prototype.init = function(lhs, rhs) { + ModOperation.superclass.init.call(this, lhs, rhs); +}; + +ModOperation.prototype.evaluate = function(c) { + return this.lhs.evaluate(c).number().mod(this.rhs.evaluate(c).number()); +}; + +ModOperation.prototype.toString = function() { + return "(" + this.lhs.toString() + " mod " + this.rhs.toString() + ")"; +}; + +// BarOperation ////////////////////////////////////////////////////////////// + +BarOperation.prototype = new BinaryOperation(); +BarOperation.prototype.constructor = BarOperation; +BarOperation.superclass = BinaryOperation.prototype; + +function BarOperation(lhs, rhs) { + if (arguments.length > 0) { + this.init(lhs, rhs); + } +} + +BarOperation.prototype.init = function(lhs, rhs) { + BarOperation.superclass.init.call(this, lhs, rhs); +}; + +BarOperation.prototype.evaluate = function(c) { + return this.lhs.evaluate(c).nodeset().union(this.rhs.evaluate(c).nodeset()); +}; + +BarOperation.prototype.toString = function() { + return map(toString, [this.lhs, this.rhs]).join(' | '); +}; + +// PathExpr ////////////////////////////////////////////////////////////////// + +PathExpr.prototype = new Expression(); +PathExpr.prototype.constructor = PathExpr; +PathExpr.superclass = Expression.prototype; + +function PathExpr(filter, filterPreds, locpath) { + if (arguments.length > 0) { + this.init(filter, filterPreds, locpath); + } +} + +PathExpr.prototype.init = function(filter, filterPreds, locpath) { + PathExpr.superclass.init.call(this); + this.filter = filter; + this.filterPredicates = filterPreds; + this.locationPath = locpath; +}; + +/** + * Returns the topmost node of the tree containing node + */ +function findRoot(node) { + while (node && node.parentNode) { + node = node.parentNode; + } + + return node; +} + +PathExpr.applyPredicates = function (predicates, c, nodes) { + return reduce(function (inNodes, pred) { + var ctx = c.extend({ contextSize: inNodes.length }); + + return filter(function (node, i) { + return PathExpr.predicateMatches(pred, ctx.extend({ contextNode: node, contextPosition: i + 1 })); + }, inNodes); + }, nodes, predicates); +}; + +PathExpr.getRoot = function (xpc, nodes) { + var firstNode = nodes[0]; + + if (firstNode.nodeType === 9 /*Node.DOCUMENT_NODE*/) { + return firstNode; + } + + if (xpc.virtualRoot) { + return xpc.virtualRoot; + } + + var ownerDoc = firstNode.ownerDocument; + + if (ownerDoc) { + return ownerDoc; + } + + // IE 5.5 doesn't have ownerDocument? + var n = firstNode; + while (n.parentNode != null) { + n = n.parentNode; + } + return n; +} + +PathExpr.applyStep = function (step, xpc, node) { + var self = this; + var newNodes = []; + xpc.contextNode = node; + + switch (step.axis) { + case Step.ANCESTOR: + // look at all the ancestor nodes + if (xpc.contextNode === xpc.virtualRoot) { + break; + } + var m; + if (xpc.contextNode.nodeType == 2 /*Node.ATTRIBUTE_NODE*/) { + m = PathExpr.getOwnerElement(xpc.contextNode); + } else { + m = xpc.contextNode.parentNode; + } + while (m != null) { + if (step.nodeTest.matches(m, xpc)) { + newNodes.push(m); + } + if (m === xpc.virtualRoot) { + break; + } + m = m.parentNode; + } + break; + + case Step.ANCESTORORSELF: + // look at all the ancestor nodes and the current node + for (var m = xpc.contextNode; m != null; m = m.nodeType == 2 /*Node.ATTRIBUTE_NODE*/ ? PathExpr.getOwnerElement(m) : m.parentNode) { + if (step.nodeTest.matches(m, xpc)) { + newNodes.push(m); + } + if (m === xpc.virtualRoot) { + break; + } + } + break; + + case Step.ATTRIBUTE: + // look at the attributes + var nnm = xpc.contextNode.attributes; + if (nnm != null) { + for (var k = 0; k < nnm.length; k++) { + var m = nnm.item(k); + if (step.nodeTest.matches(m, xpc)) { + newNodes.push(m); + } + } + } + break; + + case Step.CHILD: + // look at all child elements + for (var m = xpc.contextNode.firstChild; m != null; m = m.nextSibling) { + if (step.nodeTest.matches(m, xpc)) { + newNodes.push(m); + } + } + break; + + case Step.DESCENDANT: + // look at all descendant nodes + var st = [ xpc.contextNode.firstChild ]; + while (st.length > 0) { + for (var m = st.pop(); m != null; ) { + if (step.nodeTest.matches(m, xpc)) { + newNodes.push(m); + } + if (m.firstChild != null) { + st.push(m.nextSibling); + m = m.firstChild; + } else { + m = m.nextSibling; + } + } + } + break; + + case Step.DESCENDANTORSELF: + // look at self + if (step.nodeTest.matches(xpc.contextNode, xpc)) { + newNodes.push(xpc.contextNode); + } + // look at all descendant nodes + var st = [ xpc.contextNode.firstChild ]; + while (st.length > 0) { + for (var m = st.pop(); m != null; ) { + if (step.nodeTest.matches(m, xpc)) { + newNodes.push(m); + } + if (m.firstChild != null) { + st.push(m.nextSibling); + m = m.firstChild; + } else { + m = m.nextSibling; + } + } + } + break; + + case Step.FOLLOWING: + if (xpc.contextNode === xpc.virtualRoot) { + break; + } + var st = []; + if (xpc.contextNode.firstChild != null) { + st.unshift(xpc.contextNode.firstChild); + } else { + st.unshift(xpc.contextNode.nextSibling); + } + for (var m = xpc.contextNode.parentNode; m != null && m.nodeType != 9 /*Node.DOCUMENT_NODE*/ && m !== xpc.virtualRoot; m = m.parentNode) { + st.unshift(m.nextSibling); + } + do { + for (var m = st.pop(); m != null; ) { + if (step.nodeTest.matches(m, xpc)) { + newNodes.push(m); + } + if (m.firstChild != null) { + st.push(m.nextSibling); + m = m.firstChild; + } else { + m = m.nextSibling; + } + } + } while (st.length > 0); + break; + + case Step.FOLLOWINGSIBLING: + if (xpc.contextNode === xpc.virtualRoot) { + break; + } + for (var m = xpc.contextNode.nextSibling; m != null; m = m.nextSibling) { + if (step.nodeTest.matches(m, xpc)) { + newNodes.push(m); + } + } + break; + + case Step.NAMESPACE: + var n = {}; + if (xpc.contextNode.nodeType == 1 /*Node.ELEMENT_NODE*/) { + n["xml"] = XPath.XML_NAMESPACE_URI; + n["xmlns"] = XPath.XMLNS_NAMESPACE_URI; + for (var m = xpc.contextNode; m != null && m.nodeType == 1 /*Node.ELEMENT_NODE*/; m = m.parentNode) { + for (var k = 0; k < m.attributes.length; k++) { + var attr = m.attributes.item(k); + var nm = String(attr.name); + if (nm == "xmlns") { + if (n[""] == undefined) { + n[""] = attr.value; + } + } else if (nm.length > 6 && nm.substring(0, 6) == "xmlns:") { + var pre = nm.substring(6, nm.length); + if (n[pre] == undefined) { + n[pre] = attr.value; + } + } + } + } + for (var pre in n) { + var nsn = new XPathNamespace(pre, n[pre], xpc.contextNode); + if (step.nodeTest.matches(nsn, xpc)) { + newNodes.push(nsn); + } + } + } + break; + + case Step.PARENT: + m = null; + if (xpc.contextNode !== xpc.virtualRoot) { + if (xpc.contextNode.nodeType == 2 /*Node.ATTRIBUTE_NODE*/) { + m = PathExpr.getOwnerElement(xpc.contextNode); + } else { + m = xpc.contextNode.parentNode; + } + } + if (m != null && step.nodeTest.matches(m, xpc)) { + newNodes.push(m); + } + break; + + case Step.PRECEDING: + var st; + if (xpc.virtualRoot != null) { + st = [ xpc.virtualRoot ]; + } else { + // cannot rely on .ownerDocument because the node may be in a document fragment + st = [findRoot(xpc.contextNode)]; + } + outer: while (st.length > 0) { + for (var m = st.pop(); m != null; ) { + if (m == xpc.contextNode) { + break outer; + } + if (step.nodeTest.matches(m, xpc)) { + newNodes.unshift(m); + } + if (m.firstChild != null) { + st.push(m.nextSibling); + m = m.firstChild; + } else { + m = m.nextSibling; + } + } + } + break; + + case Step.PRECEDINGSIBLING: + if (xpc.contextNode === xpc.virtualRoot) { + break; + } + for (var m = xpc.contextNode.previousSibling; m != null; m = m.previousSibling) { + if (step.nodeTest.matches(m, xpc)) { + newNodes.push(m); + } + } + break; + + case Step.SELF: + if (step.nodeTest.matches(xpc.contextNode, xpc)) { + newNodes.push(xpc.contextNode); + } + break; + + default: + } + + return newNodes; +}; + +PathExpr.applySteps = function (steps, xpc, nodes) { + return reduce(function (inNodes, step) { + return [].concat.apply([], map(function (node) { + return PathExpr.applyPredicates(step.predicates, xpc, PathExpr.applyStep(step, xpc, node)); + }, inNodes)); + }, nodes, steps); +} + +PathExpr.prototype.applyFilter = function(c, xpc) { + if (!this.filter) { + return { nodes: [ c.contextNode ] }; + } + + var ns = this.filter.evaluate(c); + + if (!Utilities.instance_of(ns, XNodeSet)) { + if (this.filterPredicates != null && this.filterPredicates.length > 0 || this.locationPath != null) { + throw new Error("Path expression filter must evaluate to a nodeset if predicates or location path are used"); + } + + return { nonNodes: ns }; + } + + return { + nodes: PathExpr.applyPredicates(this.filterPredicates || [], xpc, ns.toUnsortedArray()) + }; +}; + +PathExpr.applyLocationPath = function (locationPath, xpc, nodes) { + if (!locationPath) { + return nodes; + } + + var startNodes = locationPath.absolute ? [ PathExpr.getRoot(xpc, nodes) ] : nodes; + + return PathExpr.applySteps(locationPath.steps, xpc, startNodes); +}; + +PathExpr.prototype.evaluate = function(c) { + var xpc = assign(new XPathContext(), c); + + var filterResult = this.applyFilter(c, xpc); + + if ('nonNodes' in filterResult) { + return filterResult.nonNodes; + } + + var ns = new XNodeSet(); + ns.addArray(PathExpr.applyLocationPath(this.locationPath, xpc, filterResult.nodes)); + return ns; +}; + +PathExpr.predicateMatches = function(pred, c) { + var res = pred.evaluate(c); + + return Utilities.instance_of(res, XNumber) + ? c.contextPosition == res.numberValue() + : res.booleanValue(); +}; + +PathExpr.predicateString = compose(wrap('[', ']'), toString); +PathExpr.predicatesString = compose(join(''), map(PathExpr.predicateString)); + +PathExpr.prototype.toString = function() { + if (this.filter != undefined) { + var filterStr = toString(this.filter); + + if (Utilities.instance_of(this.filter, XString)) { + return wrap("'", "'", filterStr); + } + if (this.filterPredicates != undefined && this.filterPredicates.length) { + return wrap('(', ')', filterStr) + + PathExpr.predicatesString(this.filterPredicates); + } + if (this.locationPath != undefined) { + return filterStr + + (this.locationPath.absolute ? '' : '/') + + toString(this.locationPath); + } + + return filterStr; + } + + return toString(this.locationPath); +}; + +PathExpr.getOwnerElement = function(n) { + // DOM 2 has ownerElement + if (n.ownerElement) { + return n.ownerElement; + } + // DOM 1 Internet Explorer can use selectSingleNode (ironically) + try { + if (n.selectSingleNode) { + return n.selectSingleNode(".."); + } + } catch (e) { + } + // Other DOM 1 implementations must use this egregious search + var doc = n.nodeType == 9 /*Node.DOCUMENT_NODE*/ + ? n + : n.ownerDocument; + var elts = doc.getElementsByTagName("*"); + for (var i = 0; i < elts.length; i++) { + var elt = elts.item(i); + var nnm = elt.attributes; + for (var j = 0; j < nnm.length; j++) { + var an = nnm.item(j); + if (an === n) { + return elt; + } + } + } + return null; +}; + +// LocationPath ////////////////////////////////////////////////////////////// + +LocationPath.prototype = new Object(); +LocationPath.prototype.constructor = LocationPath; +LocationPath.superclass = Object.prototype; + +function LocationPath(abs, steps) { + if (arguments.length > 0) { + this.init(abs, steps); + } +} + +LocationPath.prototype.init = function(abs, steps) { + this.absolute = abs; + this.steps = steps; +}; + +LocationPath.prototype.toString = function() { + return ( + (this.absolute ? '/' : '') + + map(toString, this.steps).join('/') + ); +}; + +// Step ////////////////////////////////////////////////////////////////////// + +Step.prototype = new Object(); +Step.prototype.constructor = Step; +Step.superclass = Object.prototype; + +function Step(axis, nodetest, preds) { + if (arguments.length > 0) { + this.init(axis, nodetest, preds); + } +} + +Step.prototype.init = function(axis, nodetest, preds) { + this.axis = axis; + this.nodeTest = nodetest; + this.predicates = preds; +}; + +Step.prototype.toString = function() { + return Step.STEPNAMES[this.axis] + + "::" + + this.nodeTest.toString() + + PathExpr.predicatesString(this.predicates); +}; + + +Step.ANCESTOR = 0; +Step.ANCESTORORSELF = 1; +Step.ATTRIBUTE = 2; +Step.CHILD = 3; +Step.DESCENDANT = 4; +Step.DESCENDANTORSELF = 5; +Step.FOLLOWING = 6; +Step.FOLLOWINGSIBLING = 7; +Step.NAMESPACE = 8; +Step.PARENT = 9; +Step.PRECEDING = 10; +Step.PRECEDINGSIBLING = 11; +Step.SELF = 12; + +Step.STEPNAMES = reduce(function (acc, x) { return acc[x[0]] = x[1], acc; }, {}, [ + [Step.ANCESTOR, 'ancestor'], + [Step.ANCESTORORSELF, 'ancestor-or-self'], + [Step.ATTRIBUTE, 'attribute'], + [Step.CHILD, 'child'], + [Step.DESCENDANT, 'descendant'], + [Step.DESCENDANTORSELF, 'descendant-or-self'], + [Step.FOLLOWING, 'following'], + [Step.FOLLOWINGSIBLING, 'following-sibling'], + [Step.NAMESPACE, 'namespace'], + [Step.PARENT, 'parent'], + [Step.PRECEDING, 'preceding'], + [Step.PRECEDINGSIBLING, 'preceding-sibling'], + [Step.SELF, 'self'] + ]); + +// NodeTest ////////////////////////////////////////////////////////////////// + +NodeTest.prototype = new Object(); +NodeTest.prototype.constructor = NodeTest; +NodeTest.superclass = Object.prototype; + +function NodeTest(type, value) { + if (arguments.length > 0) { + this.init(type, value); + } +} + +NodeTest.prototype.init = function(type, value) { + this.type = type; + this.value = value; +}; + +NodeTest.prototype.toString = function() { + return ""; +}; + +NodeTest.prototype.matches = function (n, xpc) { + console.warn('unknown node test type'); +}; + +NodeTest.NAMETESTANY = 0; +NodeTest.NAMETESTPREFIXANY = 1; +NodeTest.NAMETESTQNAME = 2; +NodeTest.COMMENT = 3; +NodeTest.TEXT = 4; +NodeTest.PI = 5; +NodeTest.NODE = 6; + +NodeTest.isNodeType = function (types){ + return compose(includes(types), prop('nodeType')); +}; + +NodeTest.makeNodeTestType = function (type, members, ctor) { + var newType = ctor || function () {}; + + newType.prototype = new NodeTest(members.type); + newType.prototype.constructor = type; + + for (var key in members) { + newType.prototype[key] = members[key]; + } + + return newType; +}; +// create invariant node test for certain node types +NodeTest.makeNodeTypeTest = function (type, nodeTypes, stringVal) { + return new (NodeTest.makeNodeTestType(type, { + matches: NodeTest.isNodeType(nodeTypes), + toString: always(stringVal) + }))(); +}; + +NodeTest.hasPrefix = function (node) { + return node.prefix || (node.nodeName || node.tagName).indexOf(':') !== -1; +}; + +NodeTest.isElementOrAttribute = NodeTest.isNodeType([1, 2]); +NodeTest.nameSpaceMatches = function (prefix, xpc, n) { + var nNamespace = (n.namespaceURI || ''); + + if (!prefix) { + return !nNamespace || (xpc.allowAnyNamespaceForNoPrefix && !NodeTest.hasPrefix(n)); + } + + var ns = xpc.namespaceResolver.getNamespace(prefix, xpc.expressionContextNode); + + if (ns == null) { + throw new Error("Cannot resolve QName " + prefix); + } + + return ns === nNamespace; +}; +NodeTest.localNameMatches = function (localName, xpc, n) { + var nLocalName = (n.localName || n.nodeName); + + return xpc.caseInsensitive + ? localName.toLowerCase() === nLocalName.toLowerCase() + : localName === nLocalName; +}; + +NodeTest.NameTestPrefixAny = NodeTest.makeNodeTestType(NodeTest.NAMETESTPREFIXANY, { + matches: function (n, xpc){ + return NodeTest.isElementOrAttribute(n) && + NodeTest.nameSpaceMatches(this.prefix, xpc, n); + }, + toString: function () { + return this.prefix + ":*"; + } +}, function (prefix) { this.prefix = prefix; }); + +NodeTest.NameTestQName = NodeTest.makeNodeTestType(NodeTest.NAMETESTQNAME, { + matches: function (n, xpc) { + return NodeTest.isNodeType([1, 2, XPathNamespace.XPATH_NAMESPACE_NODE])(n) && + NodeTest.nameSpaceMatches(this.prefix, xpc, n) && + NodeTest.localNameMatches(this.localName, xpc, n); + }, + toString: function () { + return this.name; + } +}, function (name) { + var nameParts = name.split(':'); + + this.name = name; + this.prefix = nameParts.length > 1 ? nameParts[0] : null; + this.localName = nameParts[nameParts.length > 1 ? 1 : 0]; +}); + +NodeTest.PITest = NodeTest.makeNodeTestType(NodeTest.PI, { + matches: function (n, xpc) { + return NodeTest.isNodeType([7])(n) && (n.target || n.nodeName) === this.name; + }, + toString: function () { + return wrap('processing-instruction("', '")', this.name); + } +}, function (name) { this.name = name; }) + +// singletons + +// elements, attributes, namespaces +NodeTest.nameTestAny = NodeTest.makeNodeTypeTest(NodeTest.NAMETESTANY, [1, 2, XPathNamespace.XPATH_NAMESPACE_NODE], '*'); +// text, cdata +NodeTest.textTest = NodeTest.makeNodeTypeTest(NodeTest.TEXT, [3, 4], 'text()'); +NodeTest.commentTest = NodeTest.makeNodeTypeTest(NodeTest.COMMENT, [8], 'comment()'); +// elements, attributes, text, cdata, PIs, comments, document nodes +NodeTest.nodeTest = NodeTest.makeNodeTypeTest(NodeTest.NODE, [1, 2, 3, 4, 7, 8, 9], 'node()'); +NodeTest.anyPiTest = NodeTest.makeNodeTypeTest(NodeTest.PI, [7], 'processing-instruction()'); + +// VariableReference ///////////////////////////////////////////////////////// + +VariableReference.prototype = new Expression(); +VariableReference.prototype.constructor = VariableReference; +VariableReference.superclass = Expression.prototype; + +function VariableReference(v) { + if (arguments.length > 0) { + this.init(v); + } +} + +VariableReference.prototype.init = function(v) { + this.variable = v; +}; + +VariableReference.prototype.toString = function() { + return "$" + this.variable; +}; + +VariableReference.prototype.evaluate = function(c) { + var parts = Utilities.resolveQName(this.variable, c.namespaceResolver, c.contextNode, false); + + if (parts[0] == null) { + throw new Error("Cannot resolve QName " + fn); + } + var result = c.variableResolver.getVariable(parts[1], parts[0]); + if (!result) { + throw XPathException.fromMessage("Undeclared variable: " + this.toString()); + } + return result; +}; + +// FunctionCall ////////////////////////////////////////////////////////////// + +FunctionCall.prototype = new Expression(); +FunctionCall.prototype.constructor = FunctionCall; +FunctionCall.superclass = Expression.prototype; + +function FunctionCall(fn, args) { + if (arguments.length > 0) { + this.init(fn, args); + } +} + +FunctionCall.prototype.init = function(fn, args) { + this.functionName = fn; + this.arguments = args; +}; + +FunctionCall.prototype.toString = function() { + var s = this.functionName + "("; + for (var i = 0; i < this.arguments.length; i++) { + if (i > 0) { + s += ", "; + } + s += this.arguments[i].toString(); + } + return s + ")"; +}; + +FunctionCall.prototype.evaluate = function(c) { + var f = FunctionResolver.getFunctionFromContext(this.functionName, c); + + if (!f) { + throw new Error("Unknown function " + this.functionName); + } + + var a = [c].concat(this.arguments); + return f.apply(c.functionResolver.thisArg, a); +}; + +// Operators ///////////////////////////////////////////////////////////////// + +var Operators = new Object(); + +Operators.equals = function(l, r) { + return l.equals(r); +}; + +Operators.notequal = function(l, r) { + return l.notequal(r); +}; + +Operators.lessthan = function(l, r) { + return l.lessthan(r); +}; + +Operators.greaterthan = function(l, r) { + return l.greaterthan(r); +}; + +Operators.lessthanorequal = function(l, r) { + return l.lessthanorequal(r); +}; + +Operators.greaterthanorequal = function(l, r) { + return l.greaterthanorequal(r); +}; + +// XString /////////////////////////////////////////////////////////////////// + +XString.prototype = new Expression(); +XString.prototype.constructor = XString; +XString.superclass = Expression.prototype; + +function XString(s) { + if (arguments.length > 0) { + this.init(s); + } +} + +XString.prototype.init = function(s) { + this.str = String(s); +}; + +XString.prototype.toString = function() { + return this.str; +}; + +XString.prototype.evaluate = function(c) { + return this; +}; + +XString.prototype.string = function() { + return this; +}; + +XString.prototype.number = function() { + return new XNumber(this.str); +}; + +XString.prototype.bool = function() { + return new XBoolean(this.str); +}; + +XString.prototype.nodeset = function() { + throw new Error("Cannot convert string to nodeset"); +}; + +XString.prototype.stringValue = function() { + return this.str; +}; + +XString.prototype.numberValue = function() { + return this.number().numberValue(); +}; + +XString.prototype.booleanValue = function() { + return this.bool().booleanValue(); +}; + +XString.prototype.equals = function(r) { + if (Utilities.instance_of(r, XBoolean)) { + return this.bool().equals(r); + } + if (Utilities.instance_of(r, XNumber)) { + return this.number().equals(r); + } + if (Utilities.instance_of(r, XNodeSet)) { + return r.compareWithString(this, Operators.equals); + } + return new XBoolean(this.str == r.str); +}; + +XString.prototype.notequal = function(r) { + if (Utilities.instance_of(r, XBoolean)) { + return this.bool().notequal(r); + } + if (Utilities.instance_of(r, XNumber)) { + return this.number().notequal(r); + } + if (Utilities.instance_of(r, XNodeSet)) { + return r.compareWithString(this, Operators.notequal); + } + return new XBoolean(this.str != r.str); +}; + +XString.prototype.lessthan = function(r) { + return this.number().lessthan(r); +}; + +XString.prototype.greaterthan = function(r) { + return this.number().greaterthan(r); +}; + +XString.prototype.lessthanorequal = function(r) { + return this.number().lessthanorequal(r); +}; + +XString.prototype.greaterthanorequal = function(r) { + return this.number().greaterthanorequal(r); +}; + +// XNumber /////////////////////////////////////////////////////////////////// + +XNumber.prototype = new Expression(); +XNumber.prototype.constructor = XNumber; +XNumber.superclass = Expression.prototype; + +function XNumber(n) { + if (arguments.length > 0) { + this.init(n); + } +} + +XNumber.prototype.init = function(n) { + this.num = typeof n === "string" ? this.parse(n) : Number(n); +}; + +XNumber.prototype.numberFormat = /^\s*-?[0-9]*\.?[0-9]+\s*$/; + +XNumber.prototype.parse = function(s) { + // XPath representation of numbers is more restrictive than what Number() or parseFloat() allow + return this.numberFormat.test(s) ? parseFloat(s) : Number.NaN; +}; + +function padSmallNumber(numberStr) { + var parts = numberStr.split('e-'); + var base = parts[0].replace('.', ''); + var exponent = Number(parts[1]); + + for (var i = 0; i < exponent - 1; i += 1) { + base = '0' + base; + } + + return '0.' + base; +} + +function padLargeNumber(numberStr) { + var parts = numberStr.split('e'); + var base = parts[0].replace('.', ''); + var exponent = Number(parts[1]); + var zerosToAppend = exponent + 1 - base.length; + + for (var i = 0; i < zerosToAppend; i += 1){ + base += '0'; + } + + return base; +} + +XNumber.prototype.toString = function() { + var strValue = this.num.toString(); + + if (strValue.indexOf('e-') !== -1) { + return padSmallNumber(strValue); + } + + if (strValue.indexOf('e') !== -1) { + return padLargeNumber(strValue); + } + + return strValue; +}; + +XNumber.prototype.evaluate = function(c) { + return this; +}; + +XNumber.prototype.string = function() { + + + return new XString(this.toString()); +}; + +XNumber.prototype.number = function() { + return this; +}; + +XNumber.prototype.bool = function() { + return new XBoolean(this.num); +}; + +XNumber.prototype.nodeset = function() { + throw new Error("Cannot convert number to nodeset"); +}; + +XNumber.prototype.stringValue = function() { + return this.string().stringValue(); +}; + +XNumber.prototype.numberValue = function() { + return this.num; +}; + +XNumber.prototype.booleanValue = function() { + return this.bool().booleanValue(); +}; + +XNumber.prototype.negate = function() { + return new XNumber(-this.num); +}; + +XNumber.prototype.equals = function(r) { + if (Utilities.instance_of(r, XBoolean)) { + return this.bool().equals(r); + } + if (Utilities.instance_of(r, XString)) { + return this.equals(r.number()); + } + if (Utilities.instance_of(r, XNodeSet)) { + return r.compareWithNumber(this, Operators.equals); + } + return new XBoolean(this.num == r.num); +}; + +XNumber.prototype.notequal = function(r) { + if (Utilities.instance_of(r, XBoolean)) { + return this.bool().notequal(r); + } + if (Utilities.instance_of(r, XString)) { + return this.notequal(r.number()); + } + if (Utilities.instance_of(r, XNodeSet)) { + return r.compareWithNumber(this, Operators.notequal); + } + return new XBoolean(this.num != r.num); +}; + +XNumber.prototype.lessthan = function(r) { + if (Utilities.instance_of(r, XNodeSet)) { + return r.compareWithNumber(this, Operators.greaterthan); + } + if (Utilities.instance_of(r, XBoolean) || Utilities.instance_of(r, XString)) { + return this.lessthan(r.number()); + } + return new XBoolean(this.num < r.num); +}; + +XNumber.prototype.greaterthan = function(r) { + if (Utilities.instance_of(r, XNodeSet)) { + return r.compareWithNumber(this, Operators.lessthan); + } + if (Utilities.instance_of(r, XBoolean) || Utilities.instance_of(r, XString)) { + return this.greaterthan(r.number()); + } + return new XBoolean(this.num > r.num); +}; + +XNumber.prototype.lessthanorequal = function(r) { + if (Utilities.instance_of(r, XNodeSet)) { + return r.compareWithNumber(this, Operators.greaterthanorequal); + } + if (Utilities.instance_of(r, XBoolean) || Utilities.instance_of(r, XString)) { + return this.lessthanorequal(r.number()); + } + return new XBoolean(this.num <= r.num); +}; + +XNumber.prototype.greaterthanorequal = function(r) { + if (Utilities.instance_of(r, XNodeSet)) { + return r.compareWithNumber(this, Operators.lessthanorequal); + } + if (Utilities.instance_of(r, XBoolean) || Utilities.instance_of(r, XString)) { + return this.greaterthanorequal(r.number()); + } + return new XBoolean(this.num >= r.num); +}; + +XNumber.prototype.plus = function(r) { + return new XNumber(this.num + r.num); +}; + +XNumber.prototype.minus = function(r) { + return new XNumber(this.num - r.num); +}; + +XNumber.prototype.multiply = function(r) { + return new XNumber(this.num * r.num); +}; + +XNumber.prototype.div = function(r) { + return new XNumber(this.num / r.num); +}; + +XNumber.prototype.mod = function(r) { + return new XNumber(this.num % r.num); +}; + +// XBoolean ////////////////////////////////////////////////////////////////// + +XBoolean.prototype = new Expression(); +XBoolean.prototype.constructor = XBoolean; +XBoolean.superclass = Expression.prototype; + +function XBoolean(b) { + if (arguments.length > 0) { + this.init(b); + } +} + +XBoolean.prototype.init = function(b) { + this.b = Boolean(b); +}; + +XBoolean.prototype.toString = function() { + return this.b.toString(); +}; + +XBoolean.prototype.evaluate = function(c) { + return this; +}; + +XBoolean.prototype.string = function() { + return new XString(this.b); +}; + +XBoolean.prototype.number = function() { + return new XNumber(this.b); +}; + +XBoolean.prototype.bool = function() { + return this; +}; + +XBoolean.prototype.nodeset = function() { + throw new Error("Cannot convert boolean to nodeset"); +}; + +XBoolean.prototype.stringValue = function() { + return this.string().stringValue(); +}; + +XBoolean.prototype.numberValue = function() { + return this.number().numberValue(); +}; + +XBoolean.prototype.booleanValue = function() { + return this.b; +}; + +XBoolean.prototype.not = function() { + return new XBoolean(!this.b); +}; + +XBoolean.prototype.equals = function(r) { + if (Utilities.instance_of(r, XString) || Utilities.instance_of(r, XNumber)) { + return this.equals(r.bool()); + } + if (Utilities.instance_of(r, XNodeSet)) { + return r.compareWithBoolean(this, Operators.equals); + } + return new XBoolean(this.b == r.b); +}; + +XBoolean.prototype.notequal = function(r) { + if (Utilities.instance_of(r, XString) || Utilities.instance_of(r, XNumber)) { + return this.notequal(r.bool()); + } + if (Utilities.instance_of(r, XNodeSet)) { + return r.compareWithBoolean(this, Operators.notequal); + } + return new XBoolean(this.b != r.b); +}; + +XBoolean.prototype.lessthan = function(r) { + return this.number().lessthan(r); +}; + +XBoolean.prototype.greaterthan = function(r) { + return this.number().greaterthan(r); +}; + +XBoolean.prototype.lessthanorequal = function(r) { + return this.number().lessthanorequal(r); +}; + +XBoolean.prototype.greaterthanorequal = function(r) { + return this.number().greaterthanorequal(r); +}; + +XBoolean.true_ = new XBoolean(true); +XBoolean.false_ = new XBoolean(false); + +// AVLTree /////////////////////////////////////////////////////////////////// + +AVLTree.prototype = new Object(); +AVLTree.prototype.constructor = AVLTree; +AVLTree.superclass = Object.prototype; + +function AVLTree(n) { + this.init(n); +} + +AVLTree.prototype.init = function(n) { + this.left = null; + this.right = null; + this.node = n; + this.depth = 1; +}; + +AVLTree.prototype.balance = function() { + var ldepth = this.left == null ? 0 : this.left.depth; + var rdepth = this.right == null ? 0 : this.right.depth; + + if (ldepth > rdepth + 1) { + // LR or LL rotation + var lldepth = this.left.left == null ? 0 : this.left.left.depth; + var lrdepth = this.left.right == null ? 0 : this.left.right.depth; + + if (lldepth < lrdepth) { + // LR rotation consists of a RR rotation of the left child + this.left.rotateRR(); + // plus a LL rotation of this node, which happens anyway + } + this.rotateLL(); + } else if (ldepth + 1 < rdepth) { + // RR or RL rorarion + var rrdepth = this.right.right == null ? 0 : this.right.right.depth; + var rldepth = this.right.left == null ? 0 : this.right.left.depth; + + if (rldepth > rrdepth) { + // RR rotation consists of a LL rotation of the right child + this.right.rotateLL(); + // plus a RR rotation of this node, which happens anyway + } + this.rotateRR(); + } +}; + +AVLTree.prototype.rotateLL = function() { + // the left side is too long => rotate from the left (_not_ leftwards) + var nodeBefore = this.node; + var rightBefore = this.right; + this.node = this.left.node; + this.right = this.left; + this.left = this.left.left; + this.right.left = this.right.right; + this.right.right = rightBefore; + this.right.node = nodeBefore; + this.right.updateInNewLocation(); + this.updateInNewLocation(); +}; + +AVLTree.prototype.rotateRR = function() { + // the right side is too long => rotate from the right (_not_ rightwards) + var nodeBefore = this.node; + var leftBefore = this.left; + this.node = this.right.node; + this.left = this.right; + this.right = this.right.right; + this.left.right = this.left.left; + this.left.left = leftBefore; + this.left.node = nodeBefore; + this.left.updateInNewLocation(); + this.updateInNewLocation(); +}; + +AVLTree.prototype.updateInNewLocation = function() { + this.getDepthFromChildren(); +}; + +AVLTree.prototype.getDepthFromChildren = function() { + this.depth = this.node == null ? 0 : 1; + if (this.left != null) { + this.depth = this.left.depth + 1; + } + if (this.right != null && this.depth <= this.right.depth) { + this.depth = this.right.depth + 1; + } +}; + +function nodeOrder(n1, n2) { + if (n1 === n2) { + return 0; + } + + if (n1.compareDocumentPosition) { + var cpos = n1.compareDocumentPosition(n2); + + if (cpos & 0x01) { + // not in the same document; return an arbitrary result (is there a better way to do this) + return 1; + } + if (cpos & 0x0A) { + // n2 precedes or contains n1 + return 1; + } + if (cpos & 0x14) { + // n2 follows or is contained by n1 + return -1; + } + + return 0; + } + + var d1 = 0, + d2 = 0; + for (var m1 = n1; m1 != null; m1 = m1.parentNode || m1.ownerElement) { + d1++; + } + for (var m2 = n2; m2 != null; m2 = m2.parentNode || m2.ownerElement) { + d2++; + } + + // step up to same depth + if (d1 > d2) { + while (d1 > d2) { + n1 = n1.parentNode || n1.ownerElement; + d1--; + } + if (n1 === n2) { + return 1; + } + } else if (d2 > d1) { + while (d2 > d1) { + n2 = n2.parentNode || n2.ownerElement; + d2--; + } + if (n1 === n2) { + return -1; + } + } + + var n1Par = n1.parentNode || n1.ownerElement, + n2Par = n2.parentNode || n2.ownerElement; + + // find common parent + while (n1Par !== n2Par) { + n1 = n1Par; + n2 = n2Par; + n1Par = n1.parentNode || n1.ownerElement; + n2Par = n2.parentNode || n2.ownerElement; + } + + var n1isAttr = Utilities.isAttribute(n1); + var n2isAttr = Utilities.isAttribute(n2); + + if (n1isAttr && !n2isAttr) { + return -1; + } + if (!n1isAttr && n2isAttr) { + return 1; + } + + if(n1Par) { + var cn = n1isAttr ? n1Par.attributes : n1Par.childNodes, + len = cn.length; + for (var i = 0; i < len; i += 1) { + var n = cn[i]; + if (n === n1) { + return -1; + } + if (n === n2) { + return 1; + } + } + } + + throw new Error('Unexpected: could not determine node order'); +} + +AVLTree.prototype.add = function(n) { + if (n === this.node) { + return false; + } + + var o = nodeOrder(n, this.node); + + var ret = false; + if (o == -1) { + if (this.left == null) { + this.left = new AVLTree(n); + ret = true; + } else { + ret = this.left.add(n); + if (ret) { + this.balance(); + } + } + } else if (o == 1) { + if (this.right == null) { + this.right = new AVLTree(n); + ret = true; + } else { + ret = this.right.add(n); + if (ret) { + this.balance(); + } + } + } + + if (ret) { + this.getDepthFromChildren(); + } + return ret; +}; + +// XNodeSet ////////////////////////////////////////////////////////////////// + +XNodeSet.prototype = new Expression(); +XNodeSet.prototype.constructor = XNodeSet; +XNodeSet.superclass = Expression.prototype; + +function XNodeSet() { + this.init(); +} + +XNodeSet.prototype.init = function() { + this.tree = null; + this.nodes = []; + this.size = 0; +}; + +XNodeSet.prototype.toString = function() { + var p = this.first(); + if (p == null) { + return ""; + } + return this.stringForNode(p); +}; + +XNodeSet.prototype.evaluate = function(c) { + return this; +}; + +XNodeSet.prototype.string = function() { + return new XString(this.toString()); +}; + +XNodeSet.prototype.stringValue = function() { + return this.toString(); +}; + +XNodeSet.prototype.number = function() { + return new XNumber(this.string()); +}; + +XNodeSet.prototype.numberValue = function() { + return Number(this.string()); +}; + +XNodeSet.prototype.bool = function() { + return new XBoolean(this.booleanValue()); +}; + +XNodeSet.prototype.booleanValue = function() { + return !!this.size; +}; + +XNodeSet.prototype.nodeset = function() { + return this; +}; + +XNodeSet.prototype.stringForNode = function(n) { + if (n.nodeType == 9 /*Node.DOCUMENT_NODE*/ || + n.nodeType == 1 /*Node.ELEMENT_NODE */ || + n.nodeType === 11 /*Node.DOCUMENT_FRAGMENT*/) { + return this.stringForContainerNode(n); + } + if (n.nodeType === 2 /* Node.ATTRIBUTE_NODE */) { + return n.value || n.nodeValue; + } + if (n.isNamespaceNode) { + return n.namespace; + } + return n.nodeValue; +}; + +XNodeSet.prototype.stringForContainerNode = function(n) { + var s = ""; + for (var n2 = n.firstChild; n2 != null; n2 = n2.nextSibling) { + var nt = n2.nodeType; + // Element, Text, CDATA, Document, Document Fragment + if (nt === 1 || nt === 3 || nt === 4 || nt === 9 || nt === 11) { + s += this.stringForNode(n2); + } + } + return s; +}; + +XNodeSet.prototype.buildTree = function () { + if (!this.tree && this.nodes.length) { + this.tree = new AVLTree(this.nodes[0]); + for (var i = 1; i < this.nodes.length; i += 1) { + this.tree.add(this.nodes[i]); + } + } + + return this.tree; +}; + +XNodeSet.prototype.first = function() { + var p = this.buildTree(); + if (p == null) { + return null; + } + while (p.left != null) { + p = p.left; + } + return p.node; +}; + +XNodeSet.prototype.add = function(n) { + for (var i = 0; i < this.nodes.length; i += 1) { + if (n === this.nodes[i]) { + return; + } + } + + this.tree = null; + this.nodes.push(n); + this.size += 1; +}; + +XNodeSet.prototype.addArray = function(ns) { + var self = this; + + forEach(function (x) { self.add(x); }, ns); +}; + +/** + * Returns an array of the node set's contents in document order + */ +XNodeSet.prototype.toArray = function() { + var a = []; + this.toArrayRec(this.buildTree(), a); + return a; +}; + +XNodeSet.prototype.toArrayRec = function(t, a) { + if (t != null) { + this.toArrayRec(t.left, a); + a.push(t.node); + this.toArrayRec(t.right, a); + } +}; + +/** + * Returns an array of the node set's contents in arbitrary order + */ +XNodeSet.prototype.toUnsortedArray = function () { + return this.nodes.slice(); +}; + +XNodeSet.prototype.compareWithString = function(r, o) { + var a = this.toUnsortedArray(); + for (var i = 0; i < a.length; i++) { + var n = a[i]; + var l = new XString(this.stringForNode(n)); + var res = o(l, r); + if (res.booleanValue()) { + return res; + } + } + return new XBoolean(false); +}; + +XNodeSet.prototype.compareWithNumber = function(r, o) { + var a = this.toUnsortedArray(); + for (var i = 0; i < a.length; i++) { + var n = a[i]; + var l = new XNumber(this.stringForNode(n)); + var res = o(l, r); + if (res.booleanValue()) { + return res; + } + } + return new XBoolean(false); +}; + +XNodeSet.prototype.compareWithBoolean = function(r, o) { + return o(this.bool(), r); +}; + +XNodeSet.prototype.compareWithNodeSet = function(r, o) { + var arr = this.toUnsortedArray(); + var oInvert = function (lop, rop) { return o(rop, lop); }; + + for (var i = 0; i < arr.length; i++) { + var l = new XString(this.stringForNode(arr[i])); + + var res = r.compareWithString(l, oInvert); + if (res.booleanValue()) { + return res; + } + } + + return new XBoolean(false); +}; + +XNodeSet.compareWith = curry(function (o, r) { + if (Utilities.instance_of(r, XString)) { + return this.compareWithString(r, o); + } + if (Utilities.instance_of(r, XNumber)) { + return this.compareWithNumber(r, o); + } + if (Utilities.instance_of(r, XBoolean)) { + return this.compareWithBoolean(r, o); + } + return this.compareWithNodeSet(r, o); +}); + +XNodeSet.prototype.equals = XNodeSet.compareWith(Operators.equals); +XNodeSet.prototype.notequal = XNodeSet.compareWith(Operators.notequal); +XNodeSet.prototype.lessthan = XNodeSet.compareWith(Operators.lessthan); +XNodeSet.prototype.greaterthan = XNodeSet.compareWith(Operators.greaterthan); +XNodeSet.prototype.lessthanorequal = XNodeSet.compareWith(Operators.lessthanorequal); +XNodeSet.prototype.greaterthanorequal = XNodeSet.compareWith(Operators.greaterthanorequal); + +XNodeSet.prototype.union = function(r) { + var ns = new XNodeSet(); + ns.addArray(this.toUnsortedArray()); + ns.addArray(r.toUnsortedArray()); + return ns; +}; + +// XPathNamespace //////////////////////////////////////////////////////////// + +XPathNamespace.prototype = new Object(); +XPathNamespace.prototype.constructor = XPathNamespace; +XPathNamespace.superclass = Object.prototype; + +function XPathNamespace(pre, ns, p) { + this.isXPathNamespace = true; + this.ownerDocument = p.ownerDocument; + this.nodeName = "#namespace"; + this.prefix = pre; + this.localName = pre; + this.namespaceURI = ns; + this.nodeValue = ns; + this.ownerElement = p; + this.nodeType = XPathNamespace.XPATH_NAMESPACE_NODE; +} + +XPathNamespace.prototype.toString = function() { + return "{ \"" + this.prefix + "\", \"" + this.namespaceURI + "\" }"; +}; + +// XPathContext ////////////////////////////////////////////////////////////// + +XPathContext.prototype = new Object(); +XPathContext.prototype.constructor = XPathContext; +XPathContext.superclass = Object.prototype; + +function XPathContext(vr, nr, fr) { + this.variableResolver = vr != null ? vr : new VariableResolver(); + this.namespaceResolver = nr != null ? nr : new NamespaceResolver(); + this.functionResolver = fr != null ? fr : new FunctionResolver(); +} + +XPathContext.prototype.extend = function (newProps) { + return assign(new XPathContext(), this, newProps); +}; + +// VariableResolver ////////////////////////////////////////////////////////// + +VariableResolver.prototype = new Object(); +VariableResolver.prototype.constructor = VariableResolver; +VariableResolver.superclass = Object.prototype; + +function VariableResolver() { +} + +VariableResolver.prototype.getVariable = function(ln, ns) { + return null; +}; + +// FunctionResolver ////////////////////////////////////////////////////////// + +FunctionResolver.prototype = new Object(); +FunctionResolver.prototype.constructor = FunctionResolver; +FunctionResolver.superclass = Object.prototype; + +function FunctionResolver(thisArg) { + this.thisArg = thisArg != null ? thisArg : Functions; + this.functions = new Object(); + this.addStandardFunctions(); +} + +FunctionResolver.prototype.addStandardFunctions = function() { + this.functions["{}last"] = Functions.last; + this.functions["{}position"] = Functions.position; + this.functions["{}count"] = Functions.count; + this.functions["{}id"] = Functions.id; + this.functions["{}local-name"] = Functions.localName; + this.functions["{}namespace-uri"] = Functions.namespaceURI; + this.functions["{}name"] = Functions.name; + this.functions["{}string"] = Functions.string; + this.functions["{}concat"] = Functions.concat; + this.functions["{}starts-with"] = Functions.startsWith; + this.functions["{}contains"] = Functions.contains; + this.functions["{}substring-before"] = Functions.substringBefore; + this.functions["{}substring-after"] = Functions.substringAfter; + this.functions["{}substring"] = Functions.substring; + this.functions["{}string-length"] = Functions.stringLength; + this.functions["{}normalize-space"] = Functions.normalizeSpace; + this.functions["{}translate"] = Functions.translate; + this.functions["{}boolean"] = Functions.boolean_; + this.functions["{}not"] = Functions.not; + this.functions["{}true"] = Functions.true_; + this.functions["{}false"] = Functions.false_; + this.functions["{}lang"] = Functions.lang; + this.functions["{}number"] = Functions.number; + this.functions["{}sum"] = Functions.sum; + this.functions["{}floor"] = Functions.floor; + this.functions["{}ceiling"] = Functions.ceiling; + this.functions["{}round"] = Functions.round; +}; + +FunctionResolver.prototype.addFunction = function(ns, ln, f) { + this.functions["{" + ns + "}" + ln] = f; +}; + +FunctionResolver.getFunctionFromContext = function(qName, context) { + var parts = Utilities.resolveQName(qName, context.namespaceResolver, context.contextNode, false); + + if (parts[0] === null) { + throw new Error("Cannot resolve QName " + name); + } + + return context.functionResolver.getFunction(parts[1], parts[0]); +}; + +FunctionResolver.prototype.getFunction = function(localName, namespace) { + return this.functions["{" + namespace + "}" + localName]; +}; + +// NamespaceResolver ///////////////////////////////////////////////////////// + +NamespaceResolver.prototype = new Object(); +NamespaceResolver.prototype.constructor = NamespaceResolver; +NamespaceResolver.superclass = Object.prototype; + +function NamespaceResolver() { +} + +NamespaceResolver.prototype.getNamespace = function(prefix, n) { + if (prefix == "xml") { + return XPath.XML_NAMESPACE_URI; + } else if (prefix == "xmlns") { + return XPath.XMLNS_NAMESPACE_URI; + } + if (n.nodeType == 9 /*Node.DOCUMENT_NODE*/) { + n = n.documentElement; + } else if (n.nodeType == 2 /*Node.ATTRIBUTE_NODE*/) { + n = PathExpr.getOwnerElement(n); + } else if (n.nodeType != 1 /*Node.ELEMENT_NODE*/) { + n = n.parentNode; + } + while (n != null && n.nodeType == 1 /*Node.ELEMENT_NODE*/) { + var nnm = n.attributes; + for (var i = 0; i < nnm.length; i++) { + var a = nnm.item(i); + var aname = a.name || a.nodeName; + if ((aname === "xmlns" && prefix === "") + || aname === "xmlns:" + prefix) { + return String(a.value || a.nodeValue); + } + } + n = n.parentNode; + } + return null; +}; + +// Functions ///////////////////////////////////////////////////////////////// + +var Functions = new Object(); + +Functions.last = function(c) { + if (arguments.length != 1) { + throw new Error("Function last expects ()"); + } + + return new XNumber(c.contextSize); +}; + +Functions.position = function(c) { + if (arguments.length != 1) { + throw new Error("Function position expects ()"); + } + + return new XNumber(c.contextPosition); +}; + +Functions.count = function() { + var c = arguments[0]; + var ns; + if (arguments.length != 2 || !Utilities.instance_of(ns = arguments[1].evaluate(c), XNodeSet)) { + throw new Error("Function count expects (node-set)"); + } + return new XNumber(ns.size); +}; + +Functions.id = function() { + var c = arguments[0]; + var id; + if (arguments.length != 2) { + throw new Error("Function id expects (object)"); + } + id = arguments[1].evaluate(c); + if (Utilities.instance_of(id, XNodeSet)) { + id = id.toArray().join(" "); + } else { + id = id.stringValue(); + } + var ids = id.split(/[\x0d\x0a\x09\x20]+/); + var count = 0; + var ns = new XNodeSet(); + var doc = c.contextNode.nodeType == 9 /*Node.DOCUMENT_NODE*/ + ? c.contextNode + : c.contextNode.ownerDocument; + for (var i = 0; i < ids.length; i++) { + var n; + if (doc.getElementById) { + n = doc.getElementById(ids[i]); + } else { + n = Utilities.getElementById(doc, ids[i]); + } + if (n != null) { + ns.add(n); + count++; + } + } + return ns; +}; + +Functions.localName = function(c, eNode) { + var n; + + if (arguments.length == 1) { + n = c.contextNode; + } else if (arguments.length == 2) { + n = eNode.evaluate(c).first(); + } else { + throw new Error("Function local-name expects (node-set?)"); + } + + if (n == null) { + return new XString(""); + } + + return new XString(n.localName || // standard elements and attributes + n.baseName || // IE + n.target || // processing instructions + n.nodeName || // DOM1 elements + ""); // fallback +}; + +Functions.namespaceURI = function() { + var c = arguments[0]; + var n; + if (arguments.length == 1) { + n = c.contextNode; + } else if (arguments.length == 2) { + n = arguments[1].evaluate(c).first(); + } else { + throw new Error("Function namespace-uri expects (node-set?)"); + } + if (n == null) { + return new XString(""); + } + return new XString(n.namespaceURI); +}; + +Functions.name = function() { + var c = arguments[0]; + var n; + if (arguments.length == 1) { + n = c.contextNode; + } else if (arguments.length == 2) { + n = arguments[1].evaluate(c).first(); + } else { + throw new Error("Function name expects (node-set?)"); + } + if (n == null) { + return new XString(""); + } + if (n.nodeType == 1 /*Node.ELEMENT_NODE*/) { + return new XString(n.nodeName); + } else if (n.nodeType == 2 /*Node.ATTRIBUTE_NODE*/) { + return new XString(n.name || n.nodeName); + } else if (n.nodeType === 7 /*Node.PROCESSING_INSTRUCTION_NODE*/) { + return new XString(n.target || n.nodeName); + } else if (n.localName == null) { + return new XString(""); + } else { + return new XString(n.localName); + } +}; + +Functions.string = function() { + var c = arguments[0]; + if (arguments.length == 1) { + return new XString(XNodeSet.prototype.stringForNode(c.contextNode)); + } else if (arguments.length == 2) { + return arguments[1].evaluate(c).string(); + } + throw new Error("Function string expects (object?)"); +}; + +Functions.concat = function(c) { + if (arguments.length < 3) { + throw new Error("Function concat expects (string, string[, string]*)"); + } + var s = ""; + for (var i = 1; i < arguments.length; i++) { + s += arguments[i].evaluate(c).stringValue(); + } + return new XString(s); +}; + +Functions.startsWith = function() { + var c = arguments[0]; + if (arguments.length != 3) { + throw new Error("Function startsWith expects (string, string)"); + } + var s1 = arguments[1].evaluate(c).stringValue(); + var s2 = arguments[2].evaluate(c).stringValue(); + return new XBoolean(s1.substring(0, s2.length) == s2); +}; + +Functions.contains = function() { + var c = arguments[0]; + if (arguments.length != 3) { + throw new Error("Function contains expects (string, string)"); + } + var s1 = arguments[1].evaluate(c).stringValue(); + var s2 = arguments[2].evaluate(c).stringValue(); + return new XBoolean(s1.indexOf(s2) !== -1); +}; + +Functions.substringBefore = function() { + var c = arguments[0]; + if (arguments.length != 3) { + throw new Error("Function substring-before expects (string, string)"); + } + var s1 = arguments[1].evaluate(c).stringValue(); + var s2 = arguments[2].evaluate(c).stringValue(); + return new XString(s1.substring(0, s1.indexOf(s2))); +}; + +Functions.substringAfter = function() { + var c = arguments[0]; + if (arguments.length != 3) { + throw new Error("Function substring-after expects (string, string)"); + } + var s1 = arguments[1].evaluate(c).stringValue(); + var s2 = arguments[2].evaluate(c).stringValue(); + if (s2.length == 0) { + return new XString(s1); + } + var i = s1.indexOf(s2); + if (i == -1) { + return new XString(""); + } + return new XString(s1.substring(i + s2.length)); +}; + +Functions.substring = function() { + var c = arguments[0]; + if (!(arguments.length == 3 || arguments.length == 4)) { + throw new Error("Function substring expects (string, number, number?)"); + } + var s = arguments[1].evaluate(c).stringValue(); + var n1 = Math.round(arguments[2].evaluate(c).numberValue()) - 1; + var n2 = arguments.length == 4 ? n1 + Math.round(arguments[3].evaluate(c).numberValue()) : undefined; + return new XString(s.substring(n1, n2)); +}; + +Functions.stringLength = function() { + var c = arguments[0]; + var s; + if (arguments.length == 1) { + s = XNodeSet.prototype.stringForNode(c.contextNode); + } else if (arguments.length == 2) { + s = arguments[1].evaluate(c).stringValue(); + } else { + throw new Error("Function string-length expects (string?)"); + } + return new XNumber(s.length); +}; + +Functions.normalizeSpace = function() { + var c = arguments[0]; + var s; + if (arguments.length == 1) { + s = XNodeSet.prototype.stringForNode(c.contextNode); + } else if (arguments.length == 2) { + s = arguments[1].evaluate(c).stringValue(); + } else { + throw new Error("Function normalize-space expects (string?)"); + } + var i = 0; + var j = s.length - 1; + while (Utilities.isSpace(s.charCodeAt(j))) { + j--; + } + var t = ""; + while (i <= j && Utilities.isSpace(s.charCodeAt(i))) { + i++; + } + while (i <= j) { + if (Utilities.isSpace(s.charCodeAt(i))) { + t += " "; + while (i <= j && Utilities.isSpace(s.charCodeAt(i))) { + i++; + } + } else { + t += s.charAt(i); + i++; + } + } + return new XString(t); +}; + +Functions.translate = function(c, eValue, eFrom, eTo) { + if (arguments.length != 4) { + throw new Error("Function translate expects (string, string, string)"); + } + + var value = eValue.evaluate(c).stringValue(); + var from = eFrom.evaluate(c).stringValue(); + var to = eTo.evaluate(c).stringValue(); + + var cMap = reduce(function (acc, ch, i) { + if (!(ch in acc)) { + acc[ch] = i > to.length ? '' : to[i]; + } + return acc; + }, {}, from); + + var t = join('', map(function (ch) { + return ch in cMap ? cMap[ch] : ch; + }, value)); + + return new XString(t); +}; + +Functions.boolean_ = function() { + var c = arguments[0]; + if (arguments.length != 2) { + throw new Error("Function boolean expects (object)"); + } + return arguments[1].evaluate(c).bool(); +}; + +Functions.not = function(c, eValue) { + if (arguments.length != 2) { + throw new Error("Function not expects (object)"); + } + return eValue.evaluate(c).bool().not(); +}; + +Functions.true_ = function() { + if (arguments.length != 1) { + throw new Error("Function true expects ()"); + } + return XBoolean.true_; +}; + +Functions.false_ = function() { + if (arguments.length != 1) { + throw new Error("Function false expects ()"); + } + return XBoolean.false_; +}; + +Functions.lang = function() { + var c = arguments[0]; + if (arguments.length != 2) { + throw new Error("Function lang expects (string)"); + } + var lang; + for (var n = c.contextNode; n != null && n.nodeType != 9 /*Node.DOCUMENT_NODE*/; n = n.parentNode) { + var a = n.getAttributeNS(XPath.XML_NAMESPACE_URI, "lang"); + if (a != null) { + lang = String(a); + break; + } + } + if (lang == null) { + return XBoolean.false_; + } + var s = arguments[1].evaluate(c).stringValue(); + return new XBoolean(lang.substring(0, s.length) == s + && (lang.length == s.length || lang.charAt(s.length) == '-')); +}; + +Functions.number = function() { + var c = arguments[0]; + if (!(arguments.length == 1 || arguments.length == 2)) { + throw new Error("Function number expects (object?)"); + } + if (arguments.length == 1) { + return new XNumber(XNodeSet.prototype.stringForNode(c.contextNode)); + } + return arguments[1].evaluate(c).number(); +}; + +Functions.sum = function() { + var c = arguments[0]; + var ns; + if (arguments.length != 2 || !Utilities.instance_of((ns = arguments[1].evaluate(c)), XNodeSet)) { + throw new Error("Function sum expects (node-set)"); + } + ns = ns.toUnsortedArray(); + var n = 0; + for (var i = 0; i < ns.length; i++) { + n += new XNumber(XNodeSet.prototype.stringForNode(ns[i])).numberValue(); + } + return new XNumber(n); +}; + +Functions.floor = function() { + var c = arguments[0]; + if (arguments.length != 2) { + throw new Error("Function floor expects (number)"); + } + return new XNumber(Math.floor(arguments[1].evaluate(c).numberValue())); +}; + +Functions.ceiling = function() { + var c = arguments[0]; + if (arguments.length != 2) { + throw new Error("Function ceiling expects (number)"); + } + return new XNumber(Math.ceil(arguments[1].evaluate(c).numberValue())); +}; + +Functions.round = function() { + var c = arguments[0]; + if (arguments.length != 2) { + throw new Error("Function round expects (number)"); + } + return new XNumber(Math.round(arguments[1].evaluate(c).numberValue())); +}; + +// Utilities ///////////////////////////////////////////////////////////////// + +var Utilities = new Object(); + +Utilities.isAttribute = function (val) { + return val && (val.nodeType === 2 || val.ownerElement); +} + +Utilities.splitQName = function(qn) { + var i = qn.indexOf(":"); + if (i == -1) { + return [ null, qn ]; + } + return [ qn.substring(0, i), qn.substring(i + 1) ]; +}; + +Utilities.resolveQName = function(qn, nr, n, useDefault) { + var parts = Utilities.splitQName(qn); + if (parts[0] != null) { + parts[0] = nr.getNamespace(parts[0], n); + } else { + if (useDefault) { + parts[0] = nr.getNamespace("", n); + if (parts[0] == null) { + parts[0] = ""; + } + } else { + parts[0] = ""; + } + } + return parts; +}; + +Utilities.isSpace = function(c) { + return c == 0x9 || c == 0xd || c == 0xa || c == 0x20; +}; + +Utilities.isLetter = function(c) { + return c >= 0x0041 && c <= 0x005A || + c >= 0x0061 && c <= 0x007A || + c >= 0x00C0 && c <= 0x00D6 || + c >= 0x00D8 && c <= 0x00F6 || + c >= 0x00F8 && c <= 0x00FF || + c >= 0x0100 && c <= 0x0131 || + c >= 0x0134 && c <= 0x013E || + c >= 0x0141 && c <= 0x0148 || + c >= 0x014A && c <= 0x017E || + c >= 0x0180 && c <= 0x01C3 || + c >= 0x01CD && c <= 0x01F0 || + c >= 0x01F4 && c <= 0x01F5 || + c >= 0x01FA && c <= 0x0217 || + c >= 0x0250 && c <= 0x02A8 || + c >= 0x02BB && c <= 0x02C1 || + c == 0x0386 || + c >= 0x0388 && c <= 0x038A || + c == 0x038C || + c >= 0x038E && c <= 0x03A1 || + c >= 0x03A3 && c <= 0x03CE || + c >= 0x03D0 && c <= 0x03D6 || + c == 0x03DA || + c == 0x03DC || + c == 0x03DE || + c == 0x03E0 || + c >= 0x03E2 && c <= 0x03F3 || + c >= 0x0401 && c <= 0x040C || + c >= 0x040E && c <= 0x044F || + c >= 0x0451 && c <= 0x045C || + c >= 0x045E && c <= 0x0481 || + c >= 0x0490 && c <= 0x04C4 || + c >= 0x04C7 && c <= 0x04C8 || + c >= 0x04CB && c <= 0x04CC || + c >= 0x04D0 && c <= 0x04EB || + c >= 0x04EE && c <= 0x04F5 || + c >= 0x04F8 && c <= 0x04F9 || + c >= 0x0531 && c <= 0x0556 || + c == 0x0559 || + c >= 0x0561 && c <= 0x0586 || + c >= 0x05D0 && c <= 0x05EA || + c >= 0x05F0 && c <= 0x05F2 || + c >= 0x0621 && c <= 0x063A || + c >= 0x0641 && c <= 0x064A || + c >= 0x0671 && c <= 0x06B7 || + c >= 0x06BA && c <= 0x06BE || + c >= 0x06C0 && c <= 0x06CE || + c >= 0x06D0 && c <= 0x06D3 || + c == 0x06D5 || + c >= 0x06E5 && c <= 0x06E6 || + c >= 0x0905 && c <= 0x0939 || + c == 0x093D || + c >= 0x0958 && c <= 0x0961 || + c >= 0x0985 && c <= 0x098C || + c >= 0x098F && c <= 0x0990 || + c >= 0x0993 && c <= 0x09A8 || + c >= 0x09AA && c <= 0x09B0 || + c == 0x09B2 || + c >= 0x09B6 && c <= 0x09B9 || + c >= 0x09DC && c <= 0x09DD || + c >= 0x09DF && c <= 0x09E1 || + c >= 0x09F0 && c <= 0x09F1 || + c >= 0x0A05 && c <= 0x0A0A || + c >= 0x0A0F && c <= 0x0A10 || + c >= 0x0A13 && c <= 0x0A28 || + c >= 0x0A2A && c <= 0x0A30 || + c >= 0x0A32 && c <= 0x0A33 || + c >= 0x0A35 && c <= 0x0A36 || + c >= 0x0A38 && c <= 0x0A39 || + c >= 0x0A59 && c <= 0x0A5C || + c == 0x0A5E || + c >= 0x0A72 && c <= 0x0A74 || + c >= 0x0A85 && c <= 0x0A8B || + c == 0x0A8D || + c >= 0x0A8F && c <= 0x0A91 || + c >= 0x0A93 && c <= 0x0AA8 || + c >= 0x0AAA && c <= 0x0AB0 || + c >= 0x0AB2 && c <= 0x0AB3 || + c >= 0x0AB5 && c <= 0x0AB9 || + c == 0x0ABD || + c == 0x0AE0 || + c >= 0x0B05 && c <= 0x0B0C || + c >= 0x0B0F && c <= 0x0B10 || + c >= 0x0B13 && c <= 0x0B28 || + c >= 0x0B2A && c <= 0x0B30 || + c >= 0x0B32 && c <= 0x0B33 || + c >= 0x0B36 && c <= 0x0B39 || + c == 0x0B3D || + c >= 0x0B5C && c <= 0x0B5D || + c >= 0x0B5F && c <= 0x0B61 || + c >= 0x0B85 && c <= 0x0B8A || + c >= 0x0B8E && c <= 0x0B90 || + c >= 0x0B92 && c <= 0x0B95 || + c >= 0x0B99 && c <= 0x0B9A || + c == 0x0B9C || + c >= 0x0B9E && c <= 0x0B9F || + c >= 0x0BA3 && c <= 0x0BA4 || + c >= 0x0BA8 && c <= 0x0BAA || + c >= 0x0BAE && c <= 0x0BB5 || + c >= 0x0BB7 && c <= 0x0BB9 || + c >= 0x0C05 && c <= 0x0C0C || + c >= 0x0C0E && c <= 0x0C10 || + c >= 0x0C12 && c <= 0x0C28 || + c >= 0x0C2A && c <= 0x0C33 || + c >= 0x0C35 && c <= 0x0C39 || + c >= 0x0C60 && c <= 0x0C61 || + c >= 0x0C85 && c <= 0x0C8C || + c >= 0x0C8E && c <= 0x0C90 || + c >= 0x0C92 && c <= 0x0CA8 || + c >= 0x0CAA && c <= 0x0CB3 || + c >= 0x0CB5 && c <= 0x0CB9 || + c == 0x0CDE || + c >= 0x0CE0 && c <= 0x0CE1 || + c >= 0x0D05 && c <= 0x0D0C || + c >= 0x0D0E && c <= 0x0D10 || + c >= 0x0D12 && c <= 0x0D28 || + c >= 0x0D2A && c <= 0x0D39 || + c >= 0x0D60 && c <= 0x0D61 || + c >= 0x0E01 && c <= 0x0E2E || + c == 0x0E30 || + c >= 0x0E32 && c <= 0x0E33 || + c >= 0x0E40 && c <= 0x0E45 || + c >= 0x0E81 && c <= 0x0E82 || + c == 0x0E84 || + c >= 0x0E87 && c <= 0x0E88 || + c == 0x0E8A || + c == 0x0E8D || + c >= 0x0E94 && c <= 0x0E97 || + c >= 0x0E99 && c <= 0x0E9F || + c >= 0x0EA1 && c <= 0x0EA3 || + c == 0x0EA5 || + c == 0x0EA7 || + c >= 0x0EAA && c <= 0x0EAB || + c >= 0x0EAD && c <= 0x0EAE || + c == 0x0EB0 || + c >= 0x0EB2 && c <= 0x0EB3 || + c == 0x0EBD || + c >= 0x0EC0 && c <= 0x0EC4 || + c >= 0x0F40 && c <= 0x0F47 || + c >= 0x0F49 && c <= 0x0F69 || + c >= 0x10A0 && c <= 0x10C5 || + c >= 0x10D0 && c <= 0x10F6 || + c == 0x1100 || + c >= 0x1102 && c <= 0x1103 || + c >= 0x1105 && c <= 0x1107 || + c == 0x1109 || + c >= 0x110B && c <= 0x110C || + c >= 0x110E && c <= 0x1112 || + c == 0x113C || + c == 0x113E || + c == 0x1140 || + c == 0x114C || + c == 0x114E || + c == 0x1150 || + c >= 0x1154 && c <= 0x1155 || + c == 0x1159 || + c >= 0x115F && c <= 0x1161 || + c == 0x1163 || + c == 0x1165 || + c == 0x1167 || + c == 0x1169 || + c >= 0x116D && c <= 0x116E || + c >= 0x1172 && c <= 0x1173 || + c == 0x1175 || + c == 0x119E || + c == 0x11A8 || + c == 0x11AB || + c >= 0x11AE && c <= 0x11AF || + c >= 0x11B7 && c <= 0x11B8 || + c == 0x11BA || + c >= 0x11BC && c <= 0x11C2 || + c == 0x11EB || + c == 0x11F0 || + c == 0x11F9 || + c >= 0x1E00 && c <= 0x1E9B || + c >= 0x1EA0 && c <= 0x1EF9 || + c >= 0x1F00 && c <= 0x1F15 || + c >= 0x1F18 && c <= 0x1F1D || + c >= 0x1F20 && c <= 0x1F45 || + c >= 0x1F48 && c <= 0x1F4D || + c >= 0x1F50 && c <= 0x1F57 || + c == 0x1F59 || + c == 0x1F5B || + c == 0x1F5D || + c >= 0x1F5F && c <= 0x1F7D || + c >= 0x1F80 && c <= 0x1FB4 || + c >= 0x1FB6 && c <= 0x1FBC || + c == 0x1FBE || + c >= 0x1FC2 && c <= 0x1FC4 || + c >= 0x1FC6 && c <= 0x1FCC || + c >= 0x1FD0 && c <= 0x1FD3 || + c >= 0x1FD6 && c <= 0x1FDB || + c >= 0x1FE0 && c <= 0x1FEC || + c >= 0x1FF2 && c <= 0x1FF4 || + c >= 0x1FF6 && c <= 0x1FFC || + c == 0x2126 || + c >= 0x212A && c <= 0x212B || + c == 0x212E || + c >= 0x2180 && c <= 0x2182 || + c >= 0x3041 && c <= 0x3094 || + c >= 0x30A1 && c <= 0x30FA || + c >= 0x3105 && c <= 0x312C || + c >= 0xAC00 && c <= 0xD7A3 || + c >= 0x4E00 && c <= 0x9FA5 || + c == 0x3007 || + c >= 0x3021 && c <= 0x3029; +}; + +Utilities.isNCNameChar = function(c) { + return c >= 0x0030 && c <= 0x0039 + || c >= 0x0660 && c <= 0x0669 + || c >= 0x06F0 && c <= 0x06F9 + || c >= 0x0966 && c <= 0x096F + || c >= 0x09E6 && c <= 0x09EF + || c >= 0x0A66 && c <= 0x0A6F + || c >= 0x0AE6 && c <= 0x0AEF + || c >= 0x0B66 && c <= 0x0B6F + || c >= 0x0BE7 && c <= 0x0BEF + || c >= 0x0C66 && c <= 0x0C6F + || c >= 0x0CE6 && c <= 0x0CEF + || c >= 0x0D66 && c <= 0x0D6F + || c >= 0x0E50 && c <= 0x0E59 + || c >= 0x0ED0 && c <= 0x0ED9 + || c >= 0x0F20 && c <= 0x0F29 + || c == 0x002E + || c == 0x002D + || c == 0x005F + || Utilities.isLetter(c) + || c >= 0x0300 && c <= 0x0345 + || c >= 0x0360 && c <= 0x0361 + || c >= 0x0483 && c <= 0x0486 + || c >= 0x0591 && c <= 0x05A1 + || c >= 0x05A3 && c <= 0x05B9 + || c >= 0x05BB && c <= 0x05BD + || c == 0x05BF + || c >= 0x05C1 && c <= 0x05C2 + || c == 0x05C4 + || c >= 0x064B && c <= 0x0652 + || c == 0x0670 + || c >= 0x06D6 && c <= 0x06DC + || c >= 0x06DD && c <= 0x06DF + || c >= 0x06E0 && c <= 0x06E4 + || c >= 0x06E7 && c <= 0x06E8 + || c >= 0x06EA && c <= 0x06ED + || c >= 0x0901 && c <= 0x0903 + || c == 0x093C + || c >= 0x093E && c <= 0x094C + || c == 0x094D + || c >= 0x0951 && c <= 0x0954 + || c >= 0x0962 && c <= 0x0963 + || c >= 0x0981 && c <= 0x0983 + || c == 0x09BC + || c == 0x09BE + || c == 0x09BF + || c >= 0x09C0 && c <= 0x09C4 + || c >= 0x09C7 && c <= 0x09C8 + || c >= 0x09CB && c <= 0x09CD + || c == 0x09D7 + || c >= 0x09E2 && c <= 0x09E3 + || c == 0x0A02 + || c == 0x0A3C + || c == 0x0A3E + || c == 0x0A3F + || c >= 0x0A40 && c <= 0x0A42 + || c >= 0x0A47 && c <= 0x0A48 + || c >= 0x0A4B && c <= 0x0A4D + || c >= 0x0A70 && c <= 0x0A71 + || c >= 0x0A81 && c <= 0x0A83 + || c == 0x0ABC + || c >= 0x0ABE && c <= 0x0AC5 + || c >= 0x0AC7 && c <= 0x0AC9 + || c >= 0x0ACB && c <= 0x0ACD + || c >= 0x0B01 && c <= 0x0B03 + || c == 0x0B3C + || c >= 0x0B3E && c <= 0x0B43 + || c >= 0x0B47 && c <= 0x0B48 + || c >= 0x0B4B && c <= 0x0B4D + || c >= 0x0B56 && c <= 0x0B57 + || c >= 0x0B82 && c <= 0x0B83 + || c >= 0x0BBE && c <= 0x0BC2 + || c >= 0x0BC6 && c <= 0x0BC8 + || c >= 0x0BCA && c <= 0x0BCD + || c == 0x0BD7 + || c >= 0x0C01 && c <= 0x0C03 + || c >= 0x0C3E && c <= 0x0C44 + || c >= 0x0C46 && c <= 0x0C48 + || c >= 0x0C4A && c <= 0x0C4D + || c >= 0x0C55 && c <= 0x0C56 + || c >= 0x0C82 && c <= 0x0C83 + || c >= 0x0CBE && c <= 0x0CC4 + || c >= 0x0CC6 && c <= 0x0CC8 + || c >= 0x0CCA && c <= 0x0CCD + || c >= 0x0CD5 && c <= 0x0CD6 + || c >= 0x0D02 && c <= 0x0D03 + || c >= 0x0D3E && c <= 0x0D43 + || c >= 0x0D46 && c <= 0x0D48 + || c >= 0x0D4A && c <= 0x0D4D + || c == 0x0D57 + || c == 0x0E31 + || c >= 0x0E34 && c <= 0x0E3A + || c >= 0x0E47 && c <= 0x0E4E + || c == 0x0EB1 + || c >= 0x0EB4 && c <= 0x0EB9 + || c >= 0x0EBB && c <= 0x0EBC + || c >= 0x0EC8 && c <= 0x0ECD + || c >= 0x0F18 && c <= 0x0F19 + || c == 0x0F35 + || c == 0x0F37 + || c == 0x0F39 + || c == 0x0F3E + || c == 0x0F3F + || c >= 0x0F71 && c <= 0x0F84 + || c >= 0x0F86 && c <= 0x0F8B + || c >= 0x0F90 && c <= 0x0F95 + || c == 0x0F97 + || c >= 0x0F99 && c <= 0x0FAD + || c >= 0x0FB1 && c <= 0x0FB7 + || c == 0x0FB9 + || c >= 0x20D0 && c <= 0x20DC + || c == 0x20E1 + || c >= 0x302A && c <= 0x302F + || c == 0x3099 + || c == 0x309A + || c == 0x00B7 + || c == 0x02D0 + || c == 0x02D1 + || c == 0x0387 + || c == 0x0640 + || c == 0x0E46 + || c == 0x0EC6 + || c == 0x3005 + || c >= 0x3031 && c <= 0x3035 + || c >= 0x309D && c <= 0x309E + || c >= 0x30FC && c <= 0x30FE; +}; + +Utilities.coalesceText = function(n) { + for (var m = n.firstChild; m != null; m = m.nextSibling) { + if (m.nodeType == 3 /*Node.TEXT_NODE*/ || m.nodeType == 4 /*Node.CDATA_SECTION_NODE*/) { + var s = m.nodeValue; + var first = m; + m = m.nextSibling; + while (m != null && (m.nodeType == 3 /*Node.TEXT_NODE*/ || m.nodeType == 4 /*Node.CDATA_SECTION_NODE*/)) { + s += m.nodeValue; + var del = m; + m = m.nextSibling; + del.parentNode.removeChild(del); + } + if (first.nodeType == 4 /*Node.CDATA_SECTION_NODE*/) { + var p = first.parentNode; + if (first.nextSibling == null) { + p.removeChild(first); + p.appendChild(p.ownerDocument.createTextNode(s)); + } else { + var next = first.nextSibling; + p.removeChild(first); + p.insertBefore(p.ownerDocument.createTextNode(s), next); + } + } else { + first.nodeValue = s; + } + if (m == null) { + break; + } + } else if (m.nodeType == 1 /*Node.ELEMENT_NODE*/) { + Utilities.coalesceText(m); + } + } +}; + +Utilities.instance_of = function(o, c) { + while (o != null) { + if (o.constructor === c) { + return true; + } + if (o === Object) { + return false; + } + o = o.constructor.superclass; + } + return false; +}; + +Utilities.getElementById = function(n, id) { + // Note that this does not check the DTD to check for actual + // attributes of type ID, so this may be a bit wrong. + if (n.nodeType == 1 /*Node.ELEMENT_NODE*/) { + if (n.getAttribute("id") == id + || n.getAttributeNS(null, "id") == id) { + return n; + } + } + for (var m = n.firstChild; m != null; m = m.nextSibling) { + var res = Utilities.getElementById(m, id); + if (res != null) { + return res; + } + } + return null; +}; + +// XPathException //////////////////////////////////////////////////////////// + +var XPathException = (function () { + function getMessage(code, exception) { + var msg = exception ? ": " + exception.toString() : ""; + switch (code) { + case XPathException.INVALID_EXPRESSION_ERR: + return "Invalid expression" + msg; + case XPathException.TYPE_ERR: + return "Type error" + msg; + } + return null; + } + + function XPathException(code, error, message) { + var err = Error.call(this, getMessage(code, error) || message); + + err.code = code; + err.exception = error; + + return err; + } + + XPathException.prototype = Object.create(Error.prototype); + XPathException.prototype.constructor = XPathException; + XPathException.superclass = Error; + + XPathException.prototype.toString = function() { + return this.message; + }; + + XPathException.fromMessage = function(message, error) { + return new XPathException(null, error, message); + }; + + XPathException.INVALID_EXPRESSION_ERR = 51; + XPathException.TYPE_ERR = 52; + + return XPathException; +})(); + +// XPathExpression /////////////////////////////////////////////////////////// + +XPathExpression.prototype = {}; +XPathExpression.prototype.constructor = XPathExpression; +XPathExpression.superclass = Object.prototype; + +function XPathExpression(e, r, p) { + this.xpath = p.parse(e); + this.context = new XPathContext(); + this.context.namespaceResolver = new XPathNSResolverWrapper(r); +} + +XPathExpression.getOwnerDocument = function (n) { + return n.nodeType === 9 /*Node.DOCUMENT_NODE*/ ? n : n.ownerDocument; +} + +XPathExpression.detectHtmlDom = function (n) { + if (!n) { return false; } + + var doc = XPathExpression.getOwnerDocument(n); + + try { + return doc.implementation.hasFeature("HTML", "2.0"); + } catch (e) { + return true; + } +} + +XPathExpression.prototype.evaluate = function(n, t, res) { + this.context.expressionContextNode = n; + // backward compatibility - no reliable way to detect whether the DOM is HTML, but + // this library has been using this method up until now, so we will continue to use it + // ONLY when using an XPathExpression + this.context.caseInsensitive = XPathExpression.detectHtmlDom(n); + + var result = this.xpath.evaluate(this.context); + return new XPathResult(result, t); +} + +// XPathNSResolverWrapper //////////////////////////////////////////////////// + +XPathNSResolverWrapper.prototype = {}; +XPathNSResolverWrapper.prototype.constructor = XPathNSResolverWrapper; +XPathNSResolverWrapper.superclass = Object.prototype; + +function XPathNSResolverWrapper(r) { + this.xpathNSResolver = r; +} + +XPathNSResolverWrapper.prototype.getNamespace = function(prefix, n) { + if (this.xpathNSResolver == null) { + return null; + } + return this.xpathNSResolver.lookupNamespaceURI(prefix); +}; + +// NodeXPathNSResolver /////////////////////////////////////////////////////// + +NodeXPathNSResolver.prototype = {}; +NodeXPathNSResolver.prototype.constructor = NodeXPathNSResolver; +NodeXPathNSResolver.superclass = Object.prototype; + +function NodeXPathNSResolver(n) { + this.node = n; + this.namespaceResolver = new NamespaceResolver(); +} + +NodeXPathNSResolver.prototype.lookupNamespaceURI = function(prefix) { + return this.namespaceResolver.getNamespace(prefix, this.node); +}; + +// XPathResult /////////////////////////////////////////////////////////////// + +XPathResult.prototype = {}; +XPathResult.prototype.constructor = XPathResult; +XPathResult.superclass = Object.prototype; + +function XPathResult(v, t) { + if (t == XPathResult.ANY_TYPE) { + if (v.constructor === XString) { + t = XPathResult.STRING_TYPE; + } else if (v.constructor === XNumber) { + t = XPathResult.NUMBER_TYPE; + } else if (v.constructor === XBoolean) { + t = XPathResult.BOOLEAN_TYPE; + } else if (v.constructor === XNodeSet) { + t = XPathResult.UNORDERED_NODE_ITERATOR_TYPE; + } + } + this.resultType = t; + switch (t) { + case XPathResult.NUMBER_TYPE: + this.numberValue = v.numberValue(); + return; + case XPathResult.STRING_TYPE: + this.stringValue = v.stringValue(); + return; + case XPathResult.BOOLEAN_TYPE: + this.booleanValue = v.booleanValue(); + return; + case XPathResult.ANY_UNORDERED_NODE_TYPE: + case XPathResult.FIRST_ORDERED_NODE_TYPE: + if (v.constructor === XNodeSet) { + this.singleNodeValue = v.first(); + return; + } + break; + case XPathResult.UNORDERED_NODE_ITERATOR_TYPE: + case XPathResult.ORDERED_NODE_ITERATOR_TYPE: + if (v.constructor === XNodeSet) { + this.invalidIteratorState = false; + this.nodes = v.toArray(); + this.iteratorIndex = 0; + return; + } + break; + case XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE: + case XPathResult.ORDERED_NODE_SNAPSHOT_TYPE: + if (v.constructor === XNodeSet) { + this.nodes = v.toArray(); + this.snapshotLength = this.nodes.length; + return; + } + break; + } + throw new XPathException(XPathException.TYPE_ERR); +}; + +XPathResult.prototype.iterateNext = function() { + if (this.resultType != XPathResult.UNORDERED_NODE_ITERATOR_TYPE + && this.resultType != XPathResult.ORDERED_NODE_ITERATOR_TYPE) { + throw new XPathException(XPathException.TYPE_ERR); + } + return this.nodes[this.iteratorIndex++]; +}; + +XPathResult.prototype.snapshotItem = function(i) { + if (this.resultType != XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE + && this.resultType != XPathResult.ORDERED_NODE_SNAPSHOT_TYPE) { + throw new XPathException(XPathException.TYPE_ERR); + } + return this.nodes[i]; +}; + +XPathResult.ANY_TYPE = 0; +XPathResult.NUMBER_TYPE = 1; +XPathResult.STRING_TYPE = 2; +XPathResult.BOOLEAN_TYPE = 3; +XPathResult.UNORDERED_NODE_ITERATOR_TYPE = 4; +XPathResult.ORDERED_NODE_ITERATOR_TYPE = 5; +XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE = 6; +XPathResult.ORDERED_NODE_SNAPSHOT_TYPE = 7; +XPathResult.ANY_UNORDERED_NODE_TYPE = 8; +XPathResult.FIRST_ORDERED_NODE_TYPE = 9; + +// DOM 3 XPath support /////////////////////////////////////////////////////// + +function installDOM3XPathSupport(doc, p) { + doc.createExpression = function(e, r) { + try { + return new XPathExpression(e, r, p); + } catch (e) { + throw new XPathException(XPathException.INVALID_EXPRESSION_ERR, e); + } + }; + doc.createNSResolver = function(n) { + return new NodeXPathNSResolver(n); + }; + doc.evaluate = function(e, cn, r, t, res) { + if (t < 0 || t > 9) { + throw { code: 0, toString: function() { return "Request type not supported"; } }; + } + return doc.createExpression(e, r, p).evaluate(cn, t, res); + }; +}; + +// --------------------------------------------------------------------------- + +// Install DOM 3 XPath support for the current document. +try { + var shouldInstall = true; + try { + if (document.implementation + && document.implementation.hasFeature + && document.implementation.hasFeature("XPath", null)) { + shouldInstall = false; + } + } catch (e) { + } + if (shouldInstall) { + installDOM3XPathSupport(document, new XPathParser()); + } +} catch (e) { +} + +// --------------------------------------------------------------------------- +// exports for node.js + +installDOM3XPathSupport(exports, new XPathParser()); + +(function() { + var parser = new XPathParser(); + + var defaultNSResolver = new NamespaceResolver(); + var defaultFunctionResolver = new FunctionResolver(); + var defaultVariableResolver = new VariableResolver(); + + function makeNSResolverFromFunction(func) { + return { + getNamespace: function (prefix, node) { + var ns = func(prefix, node); + + return ns || defaultNSResolver.getNamespace(prefix, node); + } + }; + } + + function makeNSResolverFromObject(obj) { + return makeNSResolverFromFunction(obj.getNamespace.bind(obj)); + } + + function makeNSResolverFromMap(map) { + return makeNSResolverFromFunction(function (prefix) { + return map[prefix]; + }); + } + + function makeNSResolver(resolver) { + if (resolver && typeof resolver.getNamespace === "function") { + return makeNSResolverFromObject(resolver); + } + + if (typeof resolver === "function") { + return makeNSResolverFromFunction(resolver); + } + + // assume prefix -> uri mapping + if (typeof resolver === "object") { + return makeNSResolverFromMap(resolver); + } + + return defaultNSResolver; + } + + /** Converts native JavaScript types to their XPath library equivalent */ + function convertValue(value) { + if (value === null || + typeof value === "undefined" || + value instanceof XString || + value instanceof XBoolean || + value instanceof XNumber || + value instanceof XNodeSet) { + return value; + } + + switch (typeof value) { + case "string": return new XString(value); + case "boolean": return new XBoolean(value); + case "number": return new XNumber(value); + } + + // assume node(s) + var ns = new XNodeSet(); + ns.addArray([].concat(value)); + return ns; + } + + function makeEvaluator(func) { + return function (context) { + var args = Array.prototype.slice.call(arguments, 1).map(function (arg) { + return arg.evaluate(context); + }); + var result = func.apply(this, [].concat(context, args)); + return convertValue(result); + }; + } + + function makeFunctionResolverFromFunction(func) { + return { + getFunction: function (name, namespace) { + var found = func(name, namespace); + if (found) { + return makeEvaluator(found); + } + return defaultFunctionResolver.getFunction(name, namespace); + } + }; + } + + function makeFunctionResolverFromObject(obj) { + return makeFunctionResolverFromFunction(obj.getFunction.bind(obj)); + } + + function makeFunctionResolverFromMap(map) { + return makeFunctionResolverFromFunction(function (name) { + return map[name]; + }); + } + + function makeFunctionResolver(resolver) { + if (resolver && typeof resolver.getFunction === "function") { + return makeFunctionResolverFromObject(resolver); + } + + if (typeof resolver === "function") { + return makeFunctionResolverFromFunction(resolver); + } + + // assume map + if (typeof resolver === "object") { + return makeFunctionResolverFromMap(resolver); + } + + return defaultFunctionResolver; + } + + function makeVariableResolverFromFunction(func) { + return { + getVariable: function (name, namespace) { + var value = func(name, namespace); + return convertValue(value); + } + }; + } + + function makeVariableResolver(resolver) { + if (resolver) { + if (typeof resolver.getVariable === "function") { + return makeVariableResolverFromFunction(resolver.getVariable.bind(resolver)); + } + + if (typeof resolver === "function") { + return makeVariableResolverFromFunction(resolver); + } + + // assume map + if (typeof resolver === "object") { + return makeVariableResolverFromFunction(function (name) { + return resolver[name]; + }); + } + } + + return defaultVariableResolver; + } + + function copyIfPresent(prop, dest, source) { + if (prop in source) { dest[prop] = source[prop]; } + } + + function makeContext(options) { + var context = new XPathContext(); + + if (options) { + context.namespaceResolver = makeNSResolver(options.namespaces); + context.functionResolver = makeFunctionResolver(options.functions); + context.variableResolver = makeVariableResolver(options.variables); + context.expressionContextNode = options.node; + copyIfPresent('allowAnyNamespaceForNoPrefix', context, options); + copyIfPresent('isHtml', context, options); + } else { + context.namespaceResolver = defaultNSResolver; + } + + return context; + } + + function evaluate(parsedExpression, options) { + var context = makeContext(options); + + return parsedExpression.evaluate(context); + } + + var evaluatorPrototype = { + evaluate: function (options) { + return evaluate(this.expression, options); + } + + ,evaluateNumber: function (options) { + return this.evaluate(options).numberValue(); + } + + ,evaluateString: function (options) { + return this.evaluate(options).stringValue(); + } + + ,evaluateBoolean: function (options) { + return this.evaluate(options).booleanValue(); + } + + ,evaluateNodeSet: function (options) { + return this.evaluate(options).nodeset(); + } + + ,select: function (options) { + return this.evaluateNodeSet(options).toArray() + } + + ,select1: function (options) { + return this.select(options)[0]; + } + }; + + function parse(xpath) { + var parsed = parser.parse(xpath); + + return Object.create(evaluatorPrototype, { + expression: { + value: parsed + } + }); + } + + exports.parse = parse; +})(); + +exports.XPath = XPath; +exports.XPathParser = XPathParser; +exports.XPathResult = XPathResult; + +exports.Step = Step; +exports.NodeTest = NodeTest; +exports.BarOperation = BarOperation; + +exports.NamespaceResolver = NamespaceResolver; +exports.FunctionResolver = FunctionResolver; +exports.VariableResolver = VariableResolver; + +exports.Utilities = Utilities; + +exports.XPathContext = XPathContext; +exports.XNodeSet = XNodeSet; +exports.XBoolean = XBoolean; +exports.XString = XString; +exports.XNumber = XNumber; + +// helper +exports.select = function(e, doc, single) { + return exports.selectWithResolver(e, doc, null, single); +}; + +exports.useNamespaces = function(mappings) { + var resolver = { + mappings: mappings || {}, + lookupNamespaceURI: function(prefix) { + return this.mappings[prefix]; + } + }; + + return function(e, doc, single) { + return exports.selectWithResolver(e, doc, resolver, single); + }; +}; + +exports.selectWithResolver = function(e, doc, resolver, single) { + var expression = new XPathExpression(e, resolver, new XPathParser()); + var type = XPathResult.ANY_TYPE; + + var result = expression.evaluate(doc, type, null); + + if (result.resultType == XPathResult.STRING_TYPE) { + result = result.stringValue; + } + else if (result.resultType == XPathResult.NUMBER_TYPE) { + result = result.numberValue; + } + else if (result.resultType == XPathResult.BOOLEAN_TYPE) { + result = result.booleanValue; + } + else { + result = result.nodes; + if (single) { + result = result[0]; + } + } + + return result; +}; + +exports.select1 = function(e, doc) { + return exports.select(e, doc, true); +}; + +// end non-node wrapper +})(xpath); diff --git a/node_modules/yamljs/.npmignore b/node_modules/yamljs/.npmignore new file mode 100644 index 00000000..8da5ccbc --- /dev/null +++ b/node_modules/yamljs/.npmignore @@ -0,0 +1,5 @@ +.DS_Store +node_modules +/doc/ + +/lib/debug/ diff --git a/node_modules/yamljs/.travis.yml b/node_modules/yamljs/.travis.yml new file mode 100644 index 00000000..3d496c3a --- /dev/null +++ b/node_modules/yamljs/.travis.yml @@ -0,0 +1,7 @@ +language: node_js +node_js: + - "5.0" +before_script: + - npm install -g coffee-script + - npm install -g browserify + - npm install -g uglify-js diff --git a/node_modules/yamljs/Cakefile b/node_modules/yamljs/Cakefile new file mode 100644 index 00000000..edc08789 --- /dev/null +++ b/node_modules/yamljs/Cakefile @@ -0,0 +1,117 @@ + +{exec, spawn} = require 'child_process' +fs = require 'fs' +path = require 'path' +esc = (arg) -> (''+arg).replace(/(?=[^a-zA-Z0-9_.\/\-\x7F-\xFF\n])/gm, '\\').replace(/\n/g, "'\n'").replace(/^$/, "''") + +srcDir = path.normalize __dirname+'/src' +libDir = path.normalize __dirname+'/lib' +libDebugDir = path.normalize __dirname+'/lib/debug' +distDir = path.normalize __dirname+'/dist' +cliDir = path.normalize __dirname+'/cli' +binDir = path.normalize __dirname+'/bin' +specDir = path.normalize __dirname+'/test/spec' +modulesDir = path.normalize __dirname+'/node_modules' + +task 'build', 'build project', -> + + # Compile + do compile = -> + unless fs.existsSync libDir + fs.mkdirSync libDir + unless fs.existsSync libDir+'/Exception' + fs.mkdirSync libDir+'/Exception' + toCompile = 'Yaml Utils Unescaper Pattern Parser Inline Escaper Dumper Exception/ParseException Exception/ParseMore Exception/DumpException'.split ' ' + do compileOne = -> + name = toCompile.shift() + outputDir = (if '/' in name then libDir+'/Exception' else libDir) + exec 'coffee -b -o '+esc(outputDir)+' -c '+esc(srcDir+'/'+name+'.coffee'), (err, res) -> + if err then throw err + + console.log "Compiled #{name}.js" + if toCompile.length + compileOne() + else + debugCompile() + + # Debug compile + debugCompile = -> + unless fs.existsSync libDebugDir + fs.mkdirSync libDebugDir + unless fs.existsSync libDebugDir+'/Exception' + fs.mkdirSync libDebugDir+'/Exception' + toCompile = 'Yaml Utils Unescaper Pattern Parser Inline Escaper Dumper Exception/ParseException Exception/ParseMore Exception/DumpException'.split ' ' + do compileOne = -> + name = toCompile.shift() + outputDir = (if '/' in name then libDebugDir+'/Exception' else libDebugDir) + exec 'coffee -m -b -o '+esc(outputDir)+' -c '+esc(srcDir+'/'+name+'.coffee'), (err, res) -> + if err then throw err + + console.log "Compiled #{name}.js (debug)" + if toCompile.length + compileOne() + else + browserify() + + # Browserify + unless fs.existsSync distDir + fs.mkdirSync distDir + browserify = -> + exec 'browserify -t coffeeify --extension=".coffee" '+esc(srcDir+'/Yaml.coffee')+' > '+esc(distDir+'/yaml.js'), (err, res) -> + if err then throw err + + console.log "Browserified yaml.js" + exec 'browserify --debug -t coffeeify --extension=".coffee" '+esc(srcDir+'/Yaml.coffee')+' > '+esc(distDir+'/yaml.debug.js'), (err, res) -> + if err then throw err + + console.log "Browserified yaml.js (debug)" + minify() + + # Minify + minify = -> + exec 'uglifyjs --mangle sort '+esc(distDir+'/yaml.js')+' > '+esc(distDir+'/yaml.min.js'), (err, res) -> + if err then throw err + + console.log "Minified yaml.min.js" + compileSpec() + + # Compile spec + compileSpec = -> + exec 'coffee -b -c '+esc(specDir+'/YamlSpec.coffee'), (err, res) -> + if err then throw err + + console.log "Compiled YamlSpec.js" + compileCLI() + + # Compile CLI + compileCLI = -> + unless fs.existsSync binDir + fs.mkdirSync binDir + + # yaml2json + str = fs.readFileSync cliDir+'/yaml2json.js' + str = "#!/usr/bin/env node\n" + str + fs.writeFileSync binDir+'/yaml2json', str + fs.chmodSync binDir+'/yaml2json', '755' + console.log "Bundled yaml2json" + + # json2yaml + str = fs.readFileSync cliDir+'/json2yaml.js' + str = "#!/usr/bin/env node\n" + str + fs.writeFileSync binDir+'/json2yaml', str + fs.chmodSync binDir+'/json2yaml', '755' + console.log "Bundled json2yaml" + + +task 'test', 'test project', -> + + # Test + spawn 'node', [modulesDir+'/jasmine-node/lib/jasmine-node/cli.js', '--verbose', '--coffee', specDir+'/YamlSpec.coffee'], stdio: "inherit" + + +task 'doc', 'generate documentation', -> + + # Generate + spawn 'codo', [srcDir], stdio: "inherit" + + diff --git a/node_modules/yamljs/LICENSE b/node_modules/yamljs/LICENSE new file mode 100644 index 00000000..8adaf06b --- /dev/null +++ b/node_modules/yamljs/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2010 Jeremy Faivre + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/yamljs/README.md b/node_modules/yamljs/README.md new file mode 100644 index 00000000..8159b6b9 --- /dev/null +++ b/node_modules/yamljs/README.md @@ -0,0 +1,154 @@ +yaml.js +======= + +![Build status](https://travis-ci.org/jeremyfa/yaml.js.svg?branch=develop) + +Standalone JavaScript YAML 1.2 Parser & Encoder. Works under node.js and all major browsers. Also brings command line YAML/JSON conversion tools. + +Mainly inspired from [Symfony Yaml Component](https://github.com/symfony/Yaml). + +How to use +---------- + +Import yaml.js in your html page: + +``` html + +``` + +Parse yaml string: + +``` js +nativeObject = YAML.parse(yamlString); +``` + +Dump native object into yaml string: + +``` js +yamlString = YAML.stringify(nativeObject[, inline /* @integer depth to start using inline notation at */[, spaces /* @integer number of spaces to use for indentation */] ]); +``` + +Load yaml file: + +``` js +nativeObject = YAML.load('file.yml'); +``` + +Load yaml file: + +``` js +YAML.load('file.yml', function(result) +{ + nativeObject = result; +}); +``` + +Use with node.js +---------------- + +Install module: + +``` bash +npm install yamljs +``` + +Use it: + +``` js +YAML = require('yamljs'); + +// parse YAML string +nativeObject = YAML.parse(yamlString); + +// Generate YAML +yamlString = YAML.stringify(nativeObject, 4); + +// Load yaml file using YAML.load +nativeObject = YAML.load('myfile.yml'); +``` + +Command line tools +------------------ + +You can enable the command line tools by installing yamljs as a global module: + +``` bash +npm install -g yamljs +``` + +Then, two cli commands should become available: **yaml2json** and **json2yaml**. They let you convert YAML to JSON and JSON to YAML very easily. + +**yaml2json** + +``` +usage: yaml2json [-h] [-v] [-p] [-i INDENTATION] [-s] [-r] [-w] input + +Positional arguments: + input YAML file or directory containing YAML files. + +Optional arguments: + -h, --help Show this help message and exit. + -v, --version Show program's version number and exit. + -p, --pretty Output pretty (indented) JSON. + -i INDENTATION, --indentation INDENTATION + Number of space characters used to indent code (use + with --pretty, default: 2). + -s, --save Save output inside JSON file(s) with the same name. + -r, --recursive If the input is a directory, also find YAML files in + sub-directories recursively. + -w, --watch Watch for changes. +``` + +**json2yaml** + +``` +usage: json2yaml [-h] [-v] [-d DEPTH] [-i INDENTATION] [-s] [-r] [-w] input + +Positional arguments: + input JSON file or directory containing JSON files. + +Optional arguments: + -h, --help Show this help message and exit. + -v, --version Show program's version number and exit. + -d DEPTH, --depth DEPTH + Set minimum level of depth before generating inline + YAML (default: 2). + -i INDENTATION, --indentation INDENTATION + Number of space characters used to indent code + (default: 2). + -s, --save Save output inside YML file(s) with the same name. + -r, --recursive If the input is a directory, also find JSON files in + sub-directories recursively. + -w, --watch Watch for changes. +``` + +**examples** + +``` bash +# Convert YAML to JSON and output resulting JSON on the console +yaml2json myfile.yml + +# Store output inside a JSON file +yaml2json myfile.yml > output.json + +# Output "pretty" (indented) JSON +yaml2json myfile.yml --pretty + +# Save the output inside a file called myfile.json +yaml2json myfile.yml --pretty --save + +# Watch a full directory and convert any YAML file into its JSON equivalent +yaml2json mydirectory --pretty --save --recursive + +# Convert JSON to YAML and store output inside a JSON file +json2yaml myfile.json > output.yml + +# Output YAML that will be inlined only after 8 levels of indentation +json2yaml myfile.json --depth 8 + +# Save the output inside a file called myfile.json with 4 spaces for each indentation +json2yaml myfile.json --indentation 4 + +# Watch a full directory and convert any JSON file into its YAML equivalent +json2yaml mydirectory --pretty --save --recursive + diff --git a/node_modules/yamljs/bin/json2yaml b/node_modules/yamljs/bin/json2yaml new file mode 100755 index 00000000..f0a8791d --- /dev/null +++ b/node_modules/yamljs/bin/json2yaml @@ -0,0 +1,186 @@ +#!/usr/bin/env node + +/** + * yaml2json cli program + */ + +var YAML = require('../lib/Yaml.js'); + +var ArgumentParser = require('argparse').ArgumentParser; +var cli = new ArgumentParser({ + prog: "json2yaml", + version: require('../package.json').version, + addHelp: true +}); + +cli.addArgument( + ['-d', '--depth'], + { + action: 'store', + type: 'int', + help: 'Set minimum level of depth before generating inline YAML (default: 2).' + } +); + +cli.addArgument( + ['-i', '--indentation'], + { + action: 'store', + type: 'int', + help: 'Number of space characters used to indent code (default: 2).', + } +); + +cli.addArgument( + ['-s', '--save'], + { + help: 'Save output inside YML file(s) with the same name.', + action: 'storeTrue' + } +); + +cli.addArgument( + ['-r', '--recursive'], + { + help: 'If the input is a directory, also find JSON files in sub-directories recursively.', + action: 'storeTrue' + } +); + +cli.addArgument( + ['-w', '--watch'], + { + help: 'Watch for changes.', + action: 'storeTrue' + } +); + +cli.addArgument(['input'], { + help: 'JSON file or directory containing JSON files or - to read JSON from stdin.' +}); + +try { + var options = cli.parseArgs(); + var path = require('path'); + var fs = require('fs'); + var glob = require('glob'); + + var rootPath = process.cwd(); + var parsePath = function(input) { + if (input == '-') return '-'; + var output; + if (!(input != null)) { + return rootPath; + } + output = path.normalize(input); + if (output.length === 0) { + return rootPath; + } + if (output.charAt(0) !== '/') { + output = path.normalize(rootPath + '/./' + output); + } + if (output.length > 1 && output.charAt(output.length - 1) === '/') { + return output.substr(0, output.length - 1); + } + return output; + }; + + // Find files + var findFiles = function(input) { + if (input != '-' && input != null) { + var isDirectory = fs.statSync(input).isDirectory(); + var files = []; + + if (!isDirectory) { + files.push(input); + } + else { + if (options.recursive) { + files = files.concat(glob.sync(input+'/**/*.json')); + } + else { + files = files.concat(glob.sync(input+'/*.json')); + } + } + + return files; + } + return null; + }; + + // Convert to JSON + var convertToYAML = function(input, inline, save, spaces, str) { + var yaml; + if (inline == null) inline = 2; + if (spaces == null) spaces = 2; + + if (str == null) { + str = ''+fs.readFileSync(input); + } + yaml = YAML.dump(JSON.parse(str), inline, spaces); + + if (!save || input == null) { + // Ouput result + process.stdout.write(yaml); + } + else { + var output; + if (input.substring(input.length-5) == '.json') { + output = input.substr(0, input.length-5) + '.yaml'; + } + else { + output = input + '.yaml'; + } + + // Write file + var file = fs.openSync(output, 'w+'); + fs.writeSync(file, yaml); + fs.closeSync(file); + process.stdout.write("saved "+output+"\n"); + } + }; + + var input = parsePath(options.input); + var mtimes = []; + + var runCommand = function() { + try { + var files = findFiles(input); + if (files != null) { + var len = files.length; + for (var i = 0; i < len; i++) { + var file = files[i]; + var stat = fs.statSync(file); + var time = stat.mtime.getTime(); + if (!stat.isDirectory()) { + if (!mtimes[file] || mtimes[file] < time) { + mtimes[file] = time; + convertToYAML(file, options.depth, options.save, options.indentation); + } + } + } + } else { + // Read from STDIN + var stdin = process.openStdin(); + var data = ""; + stdin.on('data', function(chunk) { + data += chunk; + }); + stdin.on('end', function() { + convertToYAML(null, options.depth, options.save, options.indentation, data); + }); + } + } catch (e) { + process.stderr.write((e.message ? e.message : e)+"\n"); + } + }; + + if (!options.watch) { + runCommand(); + } else { + runCommand(); + setInterval(runCommand, 1000); + } +} catch (e) { + process.stderr.write((e.message ? e.message : e)+"\n"); +} diff --git a/node_modules/yamljs/bin/yaml2json b/node_modules/yamljs/bin/yaml2json new file mode 100755 index 00000000..550230c7 --- /dev/null +++ b/node_modules/yamljs/bin/yaml2json @@ -0,0 +1,200 @@ +#!/usr/bin/env node + +/** + * yaml2json cli program + */ + +var YAML = require('../lib/Yaml.js'); + +var ArgumentParser = require('argparse').ArgumentParser; +var cli = new ArgumentParser({ + prog: "yaml2json", + version: require('../package.json').version, + addHelp: true +}); + +cli.addArgument( + ['-p', '--pretty'], + { + help: 'Output pretty (indented) JSON.', + action: 'storeTrue' + } +); + +cli.addArgument( + ['-i', '--indentation'], + { + action: 'store', + type: 'int', + help: 'Number of space characters used to indent code (use with --pretty, default: 2).', + } +); + +cli.addArgument( + ['-s', '--save'], + { + help: 'Save output inside JSON file(s) with the same name.', + action: 'storeTrue' + } +); + +cli.addArgument( + ['-r', '--recursive'], + { + help: 'If the input is a directory, also find YAML files in sub-directories recursively.', + action: 'storeTrue' + } +); + +cli.addArgument( + ['-w', '--watch'], + { + help: 'Watch for changes.', + action: 'storeTrue' + } +); + +cli.addArgument(['input'], { + help: 'YAML file or directory containing YAML files or - to read YAML from stdin.' +}); + +try { + var options = cli.parseArgs(); + var path = require('path'); + var fs = require('fs'); + var glob = require('glob'); + + var rootPath = process.cwd(); + var parsePath = function(input) { + if (input == '-') return '-'; + var output; + if (!(input != null)) { + return rootPath; + } + output = path.normalize(input); + if (output.length === 0) { + return rootPath; + } + if (output.charAt(0) !== '/') { + output = path.normalize(rootPath + '/./' + output); + } + if (output.length > 1 && output.charAt(output.length - 1) === '/') { + return output.substr(0, output.length - 1); + } + return output; + }; + + // Find files + var findFiles = function(input) { + if (input != '-' && input != null) { + var isDirectory = fs.statSync(input).isDirectory(); + var files = []; + + if (!isDirectory) { + files.push(input); + } + else { + if (options.recursive) { + files = files.concat(glob.sync(input+'/**/*.yml')); + files = files.concat(glob.sync(input+'/**/*.yaml')); + } + else { + files = files.concat(glob.sync(input+'/*.yml')); + files = files.concat(glob.sync(input+'/*.yaml')); + } + } + + return files; + } + return null; + }; + + // Convert to JSON + var convertToJSON = function(input, pretty, save, spaces, str) { + var json; + if (spaces == null) spaces = 2; + if (str != null) { + if (pretty) { + json = JSON.stringify(YAML.parse(str), null, spaces); + } + else { + json = JSON.stringify(YAML.parse(str)); + } + } else { + if (pretty) { + json = JSON.stringify(YAML.parseFile(input), null, spaces); + } + else { + json = JSON.stringify(YAML.parseFile(input)); + } + } + + if (!save || input == null) { + // Ouput result + process.stdout.write(json+"\n"); + } + else { + var output; + if (input.substring(input.length-4) == '.yml') { + output = input.substr(0, input.length-4) + '.json'; + } + else if (input.substring(input.length-5) == '.yaml') { + output = input.substr(0, input.length-5) + '.json'; + } + else { + output = input + '.json'; + } + + // Write file + var file = fs.openSync(output, 'w+'); + fs.writeSync(file, json); + fs.closeSync(file); + process.stdout.write("saved "+output+"\n"); + } + }; + + var input = parsePath(options.input); + var mtimes = []; + + var runCommand = function() { + try { + var files = findFiles(input); + if (files != null) { + var len = files.length; + + for (var i = 0; i < len; i++) { + var file = files[i]; + var stat = fs.statSync(file); + var time = stat.mtime.getTime(); + if (!stat.isDirectory()) { + if (!mtimes[file] || mtimes[file] < time) { + mtimes[file] = time; + convertToJSON(file, options.pretty, options.save, options.indentation); + } + } + } + } else { + // Read from STDIN + var stdin = process.openStdin(); + var data = ""; + stdin.on('data', function(chunk) { + data += chunk; + }); + stdin.on('end', function() { + convertToJSON(null, options.pretty, options.save, options.indentation, data); + }); + } + } catch (e) { + process.stderr.write((e.message ? e.message : e)+"\n"); + } + }; + + if (!options.watch) { + runCommand(); + } else { + runCommand(); + setInterval(runCommand, 1000); + } +} catch (e) { + process.stderr.write((e.message ? e.message : e)+"\n"); +} diff --git a/node_modules/yamljs/bower.json b/node_modules/yamljs/bower.json new file mode 100644 index 00000000..2895ae89 --- /dev/null +++ b/node_modules/yamljs/bower.json @@ -0,0 +1,19 @@ +{ + "name": "yaml.js", + "main": "dist/yaml.js", + "version": "0.3.0", + "homepage": "https://github.com/jeremyfa/yaml.js", + "authors": [ + "Jeremy Faivre " + ], + "description": "Standalone JavaScript YAML 1.2 Parser & Encoder. Works under node.js and all major browsers. Also brings command line YAML/JSON conversion tools.", + "keywords": [ + "yaml" + ], + "license": "MIT", + "ignore": [ + "**/.*", + "node_modules", + "bower_components" + ] +} diff --git a/node_modules/yamljs/cli/json2yaml.js b/node_modules/yamljs/cli/json2yaml.js new file mode 100644 index 00000000..4c849b25 --- /dev/null +++ b/node_modules/yamljs/cli/json2yaml.js @@ -0,0 +1,185 @@ + +/** + * yaml2json cli program + */ + +var YAML = require('../lib/Yaml.js'); + +var ArgumentParser = require('argparse').ArgumentParser; +var cli = new ArgumentParser({ + prog: "json2yaml", + version: require('../package.json').version, + addHelp: true +}); + +cli.addArgument( + ['-d', '--depth'], + { + action: 'store', + type: 'int', + help: 'Set minimum level of depth before generating inline YAML (default: 2).' + } +); + +cli.addArgument( + ['-i', '--indentation'], + { + action: 'store', + type: 'int', + help: 'Number of space characters used to indent code (default: 2).', + } +); + +cli.addArgument( + ['-s', '--save'], + { + help: 'Save output inside YML file(s) with the same name.', + action: 'storeTrue' + } +); + +cli.addArgument( + ['-r', '--recursive'], + { + help: 'If the input is a directory, also find JSON files in sub-directories recursively.', + action: 'storeTrue' + } +); + +cli.addArgument( + ['-w', '--watch'], + { + help: 'Watch for changes.', + action: 'storeTrue' + } +); + +cli.addArgument(['input'], { + help: 'JSON file or directory containing JSON files or - to read JSON from stdin.' +}); + +try { + var options = cli.parseArgs(); + var path = require('path'); + var fs = require('fs'); + var glob = require('glob'); + + var rootPath = process.cwd(); + var parsePath = function(input) { + if (input == '-') return '-'; + var output; + if (!(input != null)) { + return rootPath; + } + output = path.normalize(input); + if (output.length === 0) { + return rootPath; + } + if (output.charAt(0) !== '/') { + output = path.normalize(rootPath + '/./' + output); + } + if (output.length > 1 && output.charAt(output.length - 1) === '/') { + return output.substr(0, output.length - 1); + } + return output; + }; + + // Find files + var findFiles = function(input) { + if (input != '-' && input != null) { + var isDirectory = fs.statSync(input).isDirectory(); + var files = []; + + if (!isDirectory) { + files.push(input); + } + else { + if (options.recursive) { + files = files.concat(glob.sync(input+'/**/*.json')); + } + else { + files = files.concat(glob.sync(input+'/*.json')); + } + } + + return files; + } + return null; + }; + + // Convert to JSON + var convertToYAML = function(input, inline, save, spaces, str) { + var yaml; + if (inline == null) inline = 2; + if (spaces == null) spaces = 2; + + if (str == null) { + str = ''+fs.readFileSync(input); + } + yaml = YAML.dump(JSON.parse(str), inline, spaces); + + if (!save || input == null) { + // Ouput result + process.stdout.write(yaml); + } + else { + var output; + if (input.substring(input.length-5) == '.json') { + output = input.substr(0, input.length-5) + '.yaml'; + } + else { + output = input + '.yaml'; + } + + // Write file + var file = fs.openSync(output, 'w+'); + fs.writeSync(file, yaml); + fs.closeSync(file); + process.stdout.write("saved "+output+"\n"); + } + }; + + var input = parsePath(options.input); + var mtimes = []; + + var runCommand = function() { + try { + var files = findFiles(input); + if (files != null) { + var len = files.length; + for (var i = 0; i < len; i++) { + var file = files[i]; + var stat = fs.statSync(file); + var time = stat.mtime.getTime(); + if (!stat.isDirectory()) { + if (!mtimes[file] || mtimes[file] < time) { + mtimes[file] = time; + convertToYAML(file, options.depth, options.save, options.indentation); + } + } + } + } else { + // Read from STDIN + var stdin = process.openStdin(); + var data = ""; + stdin.on('data', function(chunk) { + data += chunk; + }); + stdin.on('end', function() { + convertToYAML(null, options.depth, options.save, options.indentation, data); + }); + } + } catch (e) { + process.stderr.write((e.message ? e.message : e)+"\n"); + } + }; + + if (!options.watch) { + runCommand(); + } else { + runCommand(); + setInterval(runCommand, 1000); + } +} catch (e) { + process.stderr.write((e.message ? e.message : e)+"\n"); +} diff --git a/node_modules/yamljs/cli/yaml2json.js b/node_modules/yamljs/cli/yaml2json.js new file mode 100644 index 00000000..662201c8 --- /dev/null +++ b/node_modules/yamljs/cli/yaml2json.js @@ -0,0 +1,199 @@ + +/** + * yaml2json cli program + */ + +var YAML = require('../lib/Yaml.js'); + +var ArgumentParser = require('argparse').ArgumentParser; +var cli = new ArgumentParser({ + prog: "yaml2json", + version: require('../package.json').version, + addHelp: true +}); + +cli.addArgument( + ['-p', '--pretty'], + { + help: 'Output pretty (indented) JSON.', + action: 'storeTrue' + } +); + +cli.addArgument( + ['-i', '--indentation'], + { + action: 'store', + type: 'int', + help: 'Number of space characters used to indent code (use with --pretty, default: 2).', + } +); + +cli.addArgument( + ['-s', '--save'], + { + help: 'Save output inside JSON file(s) with the same name.', + action: 'storeTrue' + } +); + +cli.addArgument( + ['-r', '--recursive'], + { + help: 'If the input is a directory, also find YAML files in sub-directories recursively.', + action: 'storeTrue' + } +); + +cli.addArgument( + ['-w', '--watch'], + { + help: 'Watch for changes.', + action: 'storeTrue' + } +); + +cli.addArgument(['input'], { + help: 'YAML file or directory containing YAML files or - to read YAML from stdin.' +}); + +try { + var options = cli.parseArgs(); + var path = require('path'); + var fs = require('fs'); + var glob = require('glob'); + + var rootPath = process.cwd(); + var parsePath = function(input) { + if (input == '-') return '-'; + var output; + if (!(input != null)) { + return rootPath; + } + output = path.normalize(input); + if (output.length === 0) { + return rootPath; + } + if (output.charAt(0) !== '/') { + output = path.normalize(rootPath + '/./' + output); + } + if (output.length > 1 && output.charAt(output.length - 1) === '/') { + return output.substr(0, output.length - 1); + } + return output; + }; + + // Find files + var findFiles = function(input) { + if (input != '-' && input != null) { + var isDirectory = fs.statSync(input).isDirectory(); + var files = []; + + if (!isDirectory) { + files.push(input); + } + else { + if (options.recursive) { + files = files.concat(glob.sync(input+'/**/*.yml')); + files = files.concat(glob.sync(input+'/**/*.yaml')); + } + else { + files = files.concat(glob.sync(input+'/*.yml')); + files = files.concat(glob.sync(input+'/*.yaml')); + } + } + + return files; + } + return null; + }; + + // Convert to JSON + var convertToJSON = function(input, pretty, save, spaces, str) { + var json; + if (spaces == null) spaces = 2; + if (str != null) { + if (pretty) { + json = JSON.stringify(YAML.parse(str), null, spaces); + } + else { + json = JSON.stringify(YAML.parse(str)); + } + } else { + if (pretty) { + json = JSON.stringify(YAML.parseFile(input), null, spaces); + } + else { + json = JSON.stringify(YAML.parseFile(input)); + } + } + + if (!save || input == null) { + // Ouput result + process.stdout.write(json+"\n"); + } + else { + var output; + if (input.substring(input.length-4) == '.yml') { + output = input.substr(0, input.length-4) + '.json'; + } + else if (input.substring(input.length-5) == '.yaml') { + output = input.substr(0, input.length-5) + '.json'; + } + else { + output = input + '.json'; + } + + // Write file + var file = fs.openSync(output, 'w+'); + fs.writeSync(file, json); + fs.closeSync(file); + process.stdout.write("saved "+output+"\n"); + } + }; + + var input = parsePath(options.input); + var mtimes = []; + + var runCommand = function() { + try { + var files = findFiles(input); + if (files != null) { + var len = files.length; + + for (var i = 0; i < len; i++) { + var file = files[i]; + var stat = fs.statSync(file); + var time = stat.mtime.getTime(); + if (!stat.isDirectory()) { + if (!mtimes[file] || mtimes[file] < time) { + mtimes[file] = time; + convertToJSON(file, options.pretty, options.save, options.indentation); + } + } + } + } else { + // Read from STDIN + var stdin = process.openStdin(); + var data = ""; + stdin.on('data', function(chunk) { + data += chunk; + }); + stdin.on('end', function() { + convertToJSON(null, options.pretty, options.save, options.indentation, data); + }); + } + } catch (e) { + process.stderr.write((e.message ? e.message : e)+"\n"); + } + }; + + if (!options.watch) { + runCommand(); + } else { + runCommand(); + setInterval(runCommand, 1000); + } +} catch (e) { + process.stderr.write((e.message ? e.message : e)+"\n"); +} diff --git a/node_modules/yamljs/demo/demo.html b/node_modules/yamljs/demo/demo.html new file mode 100644 index 00000000..101ed53b --- /dev/null +++ b/node_modules/yamljs/demo/demo.html @@ -0,0 +1,114 @@ + + + + + + + + + + yaml.js demo + + + +
+ + +
+ +
+ + \ No newline at end of file diff --git a/node_modules/yamljs/dist/yaml.debug.js b/node_modules/yamljs/dist/yaml.debug.js new file mode 100644 index 00000000..b661a278 --- /dev/null +++ b/node_modules/yamljs/dist/yaml.debug.js @@ -0,0 +1,1894 @@ +(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o ref; i = 0 <= ref ? ++j : --j) { + mapping[Escaper.LIST_ESCAPEES[i]] = Escaper.LIST_ESCAPED[i]; + } + return mapping; + })(); + + Escaper.PATTERN_CHARACTERS_TO_ESCAPE = new Pattern('[\\x00-\\x1f]|\xc2\x85|\xc2\xa0|\xe2\x80\xa8|\xe2\x80\xa9'); + + Escaper.PATTERN_MAPPING_ESCAPEES = new Pattern(Escaper.LIST_ESCAPEES.join('|').split('\\').join('\\\\')); + + Escaper.PATTERN_SINGLE_QUOTING = new Pattern('[\\s\'":{}[\\],&*#?]|^[-?|<>=!%@`]'); + + Escaper.requiresDoubleQuoting = function(value) { + return this.PATTERN_CHARACTERS_TO_ESCAPE.test(value); + }; + + Escaper.escapeWithDoubleQuotes = function(value) { + var result; + result = this.PATTERN_MAPPING_ESCAPEES.replace(value, (function(_this) { + return function(str) { + return _this.MAPPING_ESCAPEES_TO_ESCAPED[str]; + }; + })(this)); + return '"' + result + '"'; + }; + + Escaper.requiresSingleQuoting = function(value) { + return this.PATTERN_SINGLE_QUOTING.test(value); + }; + + Escaper.escapeWithSingleQuotes = function(value) { + return "'" + value.replace(/'/g, "''") + "'"; + }; + + return Escaper; + +})(); + +module.exports = Escaper; + + +},{"./Pattern":8}],3:[function(require,module,exports){ +var DumpException, + extend = 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; }, + hasProp = {}.hasOwnProperty; + +DumpException = (function(superClass) { + extend(DumpException, superClass); + + function DumpException(message, parsedLine, snippet) { + this.message = message; + this.parsedLine = parsedLine; + this.snippet = snippet; + } + + DumpException.prototype.toString = function() { + if ((this.parsedLine != null) && (this.snippet != null)) { + return ' ' + this.message + ' (line ' + this.parsedLine + ': \'' + this.snippet + '\')'; + } else { + return ' ' + this.message; + } + }; + + return DumpException; + +})(Error); + +module.exports = DumpException; + + +},{}],4:[function(require,module,exports){ +var ParseException, + extend = 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; }, + hasProp = {}.hasOwnProperty; + +ParseException = (function(superClass) { + extend(ParseException, superClass); + + function ParseException(message, parsedLine, snippet) { + this.message = message; + this.parsedLine = parsedLine; + this.snippet = snippet; + } + + ParseException.prototype.toString = function() { + if ((this.parsedLine != null) && (this.snippet != null)) { + return ' ' + this.message + ' (line ' + this.parsedLine + ': \'' + this.snippet + '\')'; + } else { + return ' ' + this.message; + } + }; + + return ParseException; + +})(Error); + +module.exports = ParseException; + + +},{}],5:[function(require,module,exports){ +var ParseMore, + extend = 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; }, + hasProp = {}.hasOwnProperty; + +ParseMore = (function(superClass) { + extend(ParseMore, superClass); + + function ParseMore(message, parsedLine, snippet) { + this.message = message; + this.parsedLine = parsedLine; + this.snippet = snippet; + } + + ParseMore.prototype.toString = function() { + if ((this.parsedLine != null) && (this.snippet != null)) { + return ' ' + this.message + ' (line ' + this.parsedLine + ': \'' + this.snippet + '\')'; + } else { + return ' ' + this.message; + } + }; + + return ParseMore; + +})(Error); + +module.exports = ParseMore; + + +},{}],6:[function(require,module,exports){ +var DumpException, Escaper, Inline, ParseException, ParseMore, Pattern, Unescaper, Utils, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + +Pattern = require('./Pattern'); + +Unescaper = require('./Unescaper'); + +Escaper = require('./Escaper'); + +Utils = require('./Utils'); + +ParseException = require('./Exception/ParseException'); + +ParseMore = require('./Exception/ParseMore'); + +DumpException = require('./Exception/DumpException'); + +Inline = (function() { + function Inline() {} + + Inline.REGEX_QUOTED_STRING = '(?:"(?:[^"\\\\]*(?:\\\\.[^"\\\\]*)*)"|\'(?:[^\']*(?:\'\'[^\']*)*)\')'; + + Inline.PATTERN_TRAILING_COMMENTS = new Pattern('^\\s*#.*$'); + + Inline.PATTERN_QUOTED_SCALAR = new Pattern('^' + Inline.REGEX_QUOTED_STRING); + + Inline.PATTERN_THOUSAND_NUMERIC_SCALAR = new Pattern('^(-|\\+)?[0-9,]+(\\.[0-9]+)?$'); + + Inline.PATTERN_SCALAR_BY_DELIMITERS = {}; + + Inline.settings = {}; + + Inline.configure = function(exceptionOnInvalidType, objectDecoder) { + if (exceptionOnInvalidType == null) { + exceptionOnInvalidType = null; + } + if (objectDecoder == null) { + objectDecoder = null; + } + this.settings.exceptionOnInvalidType = exceptionOnInvalidType; + this.settings.objectDecoder = objectDecoder; + }; + + Inline.parse = function(value, exceptionOnInvalidType, objectDecoder) { + var context, result; + if (exceptionOnInvalidType == null) { + exceptionOnInvalidType = false; + } + if (objectDecoder == null) { + objectDecoder = null; + } + this.settings.exceptionOnInvalidType = exceptionOnInvalidType; + this.settings.objectDecoder = objectDecoder; + if (value == null) { + return ''; + } + value = Utils.trim(value); + if (0 === value.length) { + return ''; + } + context = { + exceptionOnInvalidType: exceptionOnInvalidType, + objectDecoder: objectDecoder, + i: 0 + }; + switch (value.charAt(0)) { + case '[': + result = this.parseSequence(value, context); + ++context.i; + break; + case '{': + result = this.parseMapping(value, context); + ++context.i; + break; + default: + result = this.parseScalar(value, null, ['"', "'"], context); + } + if (this.PATTERN_TRAILING_COMMENTS.replace(value.slice(context.i), '') !== '') { + throw new ParseException('Unexpected characters near "' + value.slice(context.i) + '".'); + } + return result; + }; + + Inline.dump = function(value, exceptionOnInvalidType, objectEncoder) { + var ref, result, type; + if (exceptionOnInvalidType == null) { + exceptionOnInvalidType = false; + } + if (objectEncoder == null) { + objectEncoder = null; + } + if (value == null) { + return 'null'; + } + type = typeof value; + if (type === 'object') { + if (value instanceof Date) { + return value.toISOString(); + } else if (objectEncoder != null) { + result = objectEncoder(value); + if (typeof result === 'string' || (result != null)) { + return result; + } + } + return this.dumpObject(value); + } + if (type === 'boolean') { + return (value ? 'true' : 'false'); + } + if (Utils.isDigits(value)) { + return (type === 'string' ? "'" + value + "'" : String(parseInt(value))); + } + if (Utils.isNumeric(value)) { + return (type === 'string' ? "'" + value + "'" : String(parseFloat(value))); + } + if (type === 'number') { + return (value === Infinity ? '.Inf' : (value === -Infinity ? '-.Inf' : (isNaN(value) ? '.NaN' : value))); + } + if (Escaper.requiresDoubleQuoting(value)) { + return Escaper.escapeWithDoubleQuotes(value); + } + if (Escaper.requiresSingleQuoting(value)) { + return Escaper.escapeWithSingleQuotes(value); + } + if ('' === value) { + return '""'; + } + if (Utils.PATTERN_DATE.test(value)) { + return "'" + value + "'"; + } + if ((ref = value.toLowerCase()) === 'null' || ref === '~' || ref === 'true' || ref === 'false') { + return "'" + value + "'"; + } + return value; + }; + + Inline.dumpObject = function(value, exceptionOnInvalidType, objectSupport) { + var j, key, len1, output, val; + if (objectSupport == null) { + objectSupport = null; + } + if (value instanceof Array) { + output = []; + for (j = 0, len1 = value.length; j < len1; j++) { + val = value[j]; + output.push(this.dump(val)); + } + return '[' + output.join(', ') + ']'; + } else { + output = []; + for (key in value) { + val = value[key]; + output.push(this.dump(key) + ': ' + this.dump(val)); + } + return '{' + output.join(', ') + '}'; + } + }; + + Inline.parseScalar = function(scalar, delimiters, stringDelimiters, context, evaluate) { + var i, joinedDelimiters, match, output, pattern, ref, ref1, strpos, tmp; + if (delimiters == null) { + delimiters = null; + } + if (stringDelimiters == null) { + stringDelimiters = ['"', "'"]; + } + if (context == null) { + context = null; + } + if (evaluate == null) { + evaluate = true; + } + if (context == null) { + context = { + exceptionOnInvalidType: this.settings.exceptionOnInvalidType, + objectDecoder: this.settings.objectDecoder, + i: 0 + }; + } + i = context.i; + if (ref = scalar.charAt(i), indexOf.call(stringDelimiters, ref) >= 0) { + output = this.parseQuotedScalar(scalar, context); + i = context.i; + if (delimiters != null) { + tmp = Utils.ltrim(scalar.slice(i), ' '); + if (!(ref1 = tmp.charAt(0), indexOf.call(delimiters, ref1) >= 0)) { + throw new ParseException('Unexpected characters (' + scalar.slice(i) + ').'); + } + } + } else { + if (!delimiters) { + output = scalar.slice(i); + i += output.length; + strpos = output.indexOf(' #'); + if (strpos !== -1) { + output = Utils.rtrim(output.slice(0, strpos)); + } + } else { + joinedDelimiters = delimiters.join('|'); + pattern = this.PATTERN_SCALAR_BY_DELIMITERS[joinedDelimiters]; + if (pattern == null) { + pattern = new Pattern('^(.+?)(' + joinedDelimiters + ')'); + this.PATTERN_SCALAR_BY_DELIMITERS[joinedDelimiters] = pattern; + } + if (match = pattern.exec(scalar.slice(i))) { + output = match[1]; + i += output.length; + } else { + throw new ParseException('Malformed inline YAML string (' + scalar + ').'); + } + } + if (evaluate) { + output = this.evaluateScalar(output, context); + } + } + context.i = i; + return output; + }; + + Inline.parseQuotedScalar = function(scalar, context) { + var i, match, output; + i = context.i; + if (!(match = this.PATTERN_QUOTED_SCALAR.exec(scalar.slice(i)))) { + throw new ParseMore('Malformed inline YAML string (' + scalar.slice(i) + ').'); + } + output = match[0].substr(1, match[0].length - 2); + if ('"' === scalar.charAt(i)) { + output = Unescaper.unescapeDoubleQuotedString(output); + } else { + output = Unescaper.unescapeSingleQuotedString(output); + } + i += match[0].length; + context.i = i; + return output; + }; + + Inline.parseSequence = function(sequence, context) { + var e, error, i, isQuoted, len, output, ref, value; + output = []; + len = sequence.length; + i = context.i; + i += 1; + while (i < len) { + context.i = i; + switch (sequence.charAt(i)) { + case '[': + output.push(this.parseSequence(sequence, context)); + i = context.i; + break; + case '{': + output.push(this.parseMapping(sequence, context)); + i = context.i; + break; + case ']': + return output; + case ',': + case ' ': + case "\n": + break; + default: + isQuoted = ((ref = sequence.charAt(i)) === '"' || ref === "'"); + value = this.parseScalar(sequence, [',', ']'], ['"', "'"], context); + i = context.i; + if (!isQuoted && typeof value === 'string' && (value.indexOf(': ') !== -1 || value.indexOf(":\n") !== -1)) { + try { + value = this.parseMapping('{' + value + '}'); + } catch (error) { + e = error; + } + } + output.push(value); + --i; + } + ++i; + } + throw new ParseMore('Malformed inline YAML string ' + sequence); + }; + + Inline.parseMapping = function(mapping, context) { + var done, i, key, len, output, shouldContinueWhileLoop, value; + output = {}; + len = mapping.length; + i = context.i; + i += 1; + shouldContinueWhileLoop = false; + while (i < len) { + context.i = i; + switch (mapping.charAt(i)) { + case ' ': + case ',': + case "\n": + ++i; + context.i = i; + shouldContinueWhileLoop = true; + break; + case '}': + return output; + } + if (shouldContinueWhileLoop) { + shouldContinueWhileLoop = false; + continue; + } + key = this.parseScalar(mapping, [':', ' ', "\n"], ['"', "'"], context, false); + i = context.i; + done = false; + while (i < len) { + context.i = i; + switch (mapping.charAt(i)) { + case '[': + value = this.parseSequence(mapping, context); + i = context.i; + if (output[key] === void 0) { + output[key] = value; + } + done = true; + break; + case '{': + value = this.parseMapping(mapping, context); + i = context.i; + if (output[key] === void 0) { + output[key] = value; + } + done = true; + break; + case ':': + case ' ': + case "\n": + break; + default: + value = this.parseScalar(mapping, [',', '}'], ['"', "'"], context); + i = context.i; + if (output[key] === void 0) { + output[key] = value; + } + done = true; + --i; + } + ++i; + if (done) { + break; + } + } + } + throw new ParseMore('Malformed inline YAML string ' + mapping); + }; + + Inline.evaluateScalar = function(scalar, context) { + var cast, date, exceptionOnInvalidType, firstChar, firstSpace, firstWord, objectDecoder, raw, scalarLower, subValue, trimmedScalar; + scalar = Utils.trim(scalar); + scalarLower = scalar.toLowerCase(); + switch (scalarLower) { + case 'null': + case '': + case '~': + return null; + case 'true': + return true; + case 'false': + return false; + case '.inf': + return Infinity; + case '.nan': + return NaN; + case '-.inf': + return Infinity; + default: + firstChar = scalarLower.charAt(0); + switch (firstChar) { + case '!': + firstSpace = scalar.indexOf(' '); + if (firstSpace === -1) { + firstWord = scalarLower; + } else { + firstWord = scalarLower.slice(0, firstSpace); + } + switch (firstWord) { + case '!': + if (firstSpace !== -1) { + return parseInt(this.parseScalar(scalar.slice(2))); + } + return null; + case '!str': + return Utils.ltrim(scalar.slice(4)); + case '!!str': + return Utils.ltrim(scalar.slice(5)); + case '!!int': + return parseInt(this.parseScalar(scalar.slice(5))); + case '!!bool': + return Utils.parseBoolean(this.parseScalar(scalar.slice(6)), false); + case '!!float': + return parseFloat(this.parseScalar(scalar.slice(7))); + case '!!timestamp': + return Utils.stringToDate(Utils.ltrim(scalar.slice(11))); + default: + if (context == null) { + context = { + exceptionOnInvalidType: this.settings.exceptionOnInvalidType, + objectDecoder: this.settings.objectDecoder, + i: 0 + }; + } + objectDecoder = context.objectDecoder, exceptionOnInvalidType = context.exceptionOnInvalidType; + if (objectDecoder) { + trimmedScalar = Utils.rtrim(scalar); + firstSpace = trimmedScalar.indexOf(' '); + if (firstSpace === -1) { + return objectDecoder(trimmedScalar, null); + } else { + subValue = Utils.ltrim(trimmedScalar.slice(firstSpace + 1)); + if (!(subValue.length > 0)) { + subValue = null; + } + return objectDecoder(trimmedScalar.slice(0, firstSpace), subValue); + } + } + if (exceptionOnInvalidType) { + throw new ParseException('Custom object support when parsing a YAML file has been disabled.'); + } + return null; + } + break; + case '0': + if ('0x' === scalar.slice(0, 2)) { + return Utils.hexDec(scalar); + } else if (Utils.isDigits(scalar)) { + return Utils.octDec(scalar); + } else if (Utils.isNumeric(scalar)) { + return parseFloat(scalar); + } else { + return scalar; + } + break; + case '+': + if (Utils.isDigits(scalar)) { + raw = scalar; + cast = parseInt(raw); + if (raw === String(cast)) { + return cast; + } else { + return raw; + } + } else if (Utils.isNumeric(scalar)) { + return parseFloat(scalar); + } else if (this.PATTERN_THOUSAND_NUMERIC_SCALAR.test(scalar)) { + return parseFloat(scalar.replace(',', '')); + } + return scalar; + case '-': + if (Utils.isDigits(scalar.slice(1))) { + if ('0' === scalar.charAt(1)) { + return -Utils.octDec(scalar.slice(1)); + } else { + raw = scalar.slice(1); + cast = parseInt(raw); + if (raw === String(cast)) { + return -cast; + } else { + return -raw; + } + } + } else if (Utils.isNumeric(scalar)) { + return parseFloat(scalar); + } else if (this.PATTERN_THOUSAND_NUMERIC_SCALAR.test(scalar)) { + return parseFloat(scalar.replace(',', '')); + } + return scalar; + default: + if (date = Utils.stringToDate(scalar)) { + return date; + } else if (Utils.isNumeric(scalar)) { + return parseFloat(scalar); + } else if (this.PATTERN_THOUSAND_NUMERIC_SCALAR.test(scalar)) { + return parseFloat(scalar.replace(',', '')); + } + return scalar; + } + } + }; + + return Inline; + +})(); + +module.exports = Inline; + + +},{"./Escaper":2,"./Exception/DumpException":3,"./Exception/ParseException":4,"./Exception/ParseMore":5,"./Pattern":8,"./Unescaper":9,"./Utils":10}],7:[function(require,module,exports){ +var Inline, ParseException, ParseMore, Parser, Pattern, Utils; + +Inline = require('./Inline'); + +Pattern = require('./Pattern'); + +Utils = require('./Utils'); + +ParseException = require('./Exception/ParseException'); + +ParseMore = require('./Exception/ParseMore'); + +Parser = (function() { + Parser.prototype.PATTERN_FOLDED_SCALAR_ALL = new Pattern('^(?:(?![^\\|>]*)\\s+)?(?\\||>)(?\\+|\\-|\\d+|\\+\\d+|\\-\\d+|\\d+\\+|\\d+\\-)?(? +#.*)?$'); + + Parser.prototype.PATTERN_FOLDED_SCALAR_END = new Pattern('(?\\||>)(?\\+|\\-|\\d+|\\+\\d+|\\-\\d+|\\d+\\+|\\d+\\-)?(? +#.*)?$'); + + Parser.prototype.PATTERN_SEQUENCE_ITEM = new Pattern('^\\-((?\\s+)(?.+?))?\\s*$'); + + Parser.prototype.PATTERN_ANCHOR_VALUE = new Pattern('^&(?[^ ]+) *(?.*)'); + + Parser.prototype.PATTERN_COMPACT_NOTATION = new Pattern('^(?' + Inline.REGEX_QUOTED_STRING + '|[^ \'"\\{\\[].*?) *\\:(\\s+(?.+?))?\\s*$'); + + Parser.prototype.PATTERN_MAPPING_ITEM = new Pattern('^(?' + Inline.REGEX_QUOTED_STRING + '|[^ \'"\\[\\{].*?) *\\:(\\s+(?.+?))?\\s*$'); + + Parser.prototype.PATTERN_DECIMAL = new Pattern('\\d+'); + + Parser.prototype.PATTERN_INDENT_SPACES = new Pattern('^ +'); + + Parser.prototype.PATTERN_TRAILING_LINES = new Pattern('(\n*)$'); + + Parser.prototype.PATTERN_YAML_HEADER = new Pattern('^\\%YAML[: ][\\d\\.]+.*\n', 'm'); + + Parser.prototype.PATTERN_LEADING_COMMENTS = new Pattern('^(\\#.*?\n)+', 'm'); + + Parser.prototype.PATTERN_DOCUMENT_MARKER_START = new Pattern('^\\-\\-\\-.*?\n', 'm'); + + Parser.prototype.PATTERN_DOCUMENT_MARKER_END = new Pattern('^\\.\\.\\.\\s*$', 'm'); + + Parser.prototype.PATTERN_FOLDED_SCALAR_BY_INDENTATION = {}; + + Parser.prototype.CONTEXT_NONE = 0; + + Parser.prototype.CONTEXT_SEQUENCE = 1; + + Parser.prototype.CONTEXT_MAPPING = 2; + + function Parser(offset) { + this.offset = offset != null ? offset : 0; + this.lines = []; + this.currentLineNb = -1; + this.currentLine = ''; + this.refs = {}; + } + + Parser.prototype.parse = function(value, exceptionOnInvalidType, objectDecoder) { + var alias, allowOverwrite, block, c, context, data, e, error, error1, error2, first, i, indent, isRef, j, k, key, l, lastKey, len, len1, len2, len3, lineCount, m, matches, mergeNode, n, name, parsed, parsedItem, parser, ref, ref1, ref2, refName, refValue, val, values; + if (exceptionOnInvalidType == null) { + exceptionOnInvalidType = false; + } + if (objectDecoder == null) { + objectDecoder = null; + } + this.currentLineNb = -1; + this.currentLine = ''; + this.lines = this.cleanup(value).split("\n"); + data = null; + context = this.CONTEXT_NONE; + allowOverwrite = false; + while (this.moveToNextLine()) { + if (this.isCurrentLineEmpty()) { + continue; + } + if ("\t" === this.currentLine[0]) { + throw new ParseException('A YAML file cannot contain tabs as indentation.', this.getRealCurrentLineNb() + 1, this.currentLine); + } + isRef = mergeNode = false; + if (values = this.PATTERN_SEQUENCE_ITEM.exec(this.currentLine)) { + if (this.CONTEXT_MAPPING === context) { + throw new ParseException('You cannot define a sequence item when in a mapping'); + } + context = this.CONTEXT_SEQUENCE; + if (data == null) { + data = []; + } + if ((values.value != null) && (matches = this.PATTERN_ANCHOR_VALUE.exec(values.value))) { + isRef = matches.ref; + values.value = matches.value; + } + if (!(values.value != null) || '' === Utils.trim(values.value, ' ') || Utils.ltrim(values.value, ' ').indexOf('#') === 0) { + if (this.currentLineNb < this.lines.length - 1 && !this.isNextLineUnIndentedCollection()) { + c = this.getRealCurrentLineNb() + 1; + parser = new Parser(c); + parser.refs = this.refs; + data.push(parser.parse(this.getNextEmbedBlock(null, true), exceptionOnInvalidType, objectDecoder)); + } else { + data.push(null); + } + } else { + if (((ref = values.leadspaces) != null ? ref.length : void 0) && (matches = this.PATTERN_COMPACT_NOTATION.exec(values.value))) { + c = this.getRealCurrentLineNb(); + parser = new Parser(c); + parser.refs = this.refs; + block = values.value; + indent = this.getCurrentLineIndentation(); + if (this.isNextLineIndented(false)) { + block += "\n" + this.getNextEmbedBlock(indent + values.leadspaces.length + 1, true); + } + data.push(parser.parse(block, exceptionOnInvalidType, objectDecoder)); + } else { + data.push(this.parseValue(values.value, exceptionOnInvalidType, objectDecoder)); + } + } + } else if ((values = this.PATTERN_MAPPING_ITEM.exec(this.currentLine)) && values.key.indexOf(' #') === -1) { + if (this.CONTEXT_SEQUENCE === context) { + throw new ParseException('You cannot define a mapping item when in a sequence'); + } + context = this.CONTEXT_MAPPING; + if (data == null) { + data = {}; + } + Inline.configure(exceptionOnInvalidType, objectDecoder); + try { + key = Inline.parseScalar(values.key); + } catch (error) { + e = error; + e.parsedLine = this.getRealCurrentLineNb() + 1; + e.snippet = this.currentLine; + throw e; + } + if ('<<' === key) { + mergeNode = true; + allowOverwrite = true; + if (((ref1 = values.value) != null ? ref1.indexOf('*') : void 0) === 0) { + refName = values.value.slice(1); + if (this.refs[refName] == null) { + throw new ParseException('Reference "' + refName + '" does not exist.', this.getRealCurrentLineNb() + 1, this.currentLine); + } + refValue = this.refs[refName]; + if (typeof refValue !== 'object') { + throw new ParseException('YAML merge keys used with a scalar value instead of an object.', this.getRealCurrentLineNb() + 1, this.currentLine); + } + if (refValue instanceof Array) { + for (i = j = 0, len = refValue.length; j < len; i = ++j) { + value = refValue[i]; + if (data[name = String(i)] == null) { + data[name] = value; + } + } + } else { + for (key in refValue) { + value = refValue[key]; + if (data[key] == null) { + data[key] = value; + } + } + } + } else { + if ((values.value != null) && values.value !== '') { + value = values.value; + } else { + value = this.getNextEmbedBlock(); + } + c = this.getRealCurrentLineNb() + 1; + parser = new Parser(c); + parser.refs = this.refs; + parsed = parser.parse(value, exceptionOnInvalidType); + if (typeof parsed !== 'object') { + throw new ParseException('YAML merge keys used with a scalar value instead of an object.', this.getRealCurrentLineNb() + 1, this.currentLine); + } + if (parsed instanceof Array) { + for (l = 0, len1 = parsed.length; l < len1; l++) { + parsedItem = parsed[l]; + if (typeof parsedItem !== 'object') { + throw new ParseException('Merge items must be objects.', this.getRealCurrentLineNb() + 1, parsedItem); + } + if (parsedItem instanceof Array) { + for (i = m = 0, len2 = parsedItem.length; m < len2; i = ++m) { + value = parsedItem[i]; + k = String(i); + if (!data.hasOwnProperty(k)) { + data[k] = value; + } + } + } else { + for (key in parsedItem) { + value = parsedItem[key]; + if (!data.hasOwnProperty(key)) { + data[key] = value; + } + } + } + } + } else { + for (key in parsed) { + value = parsed[key]; + if (!data.hasOwnProperty(key)) { + data[key] = value; + } + } + } + } + } else if ((values.value != null) && (matches = this.PATTERN_ANCHOR_VALUE.exec(values.value))) { + isRef = matches.ref; + values.value = matches.value; + } + if (mergeNode) { + + } else if (!(values.value != null) || '' === Utils.trim(values.value, ' ') || Utils.ltrim(values.value, ' ').indexOf('#') === 0) { + if (!(this.isNextLineIndented()) && !(this.isNextLineUnIndentedCollection())) { + if (allowOverwrite || data[key] === void 0) { + data[key] = null; + } + } else { + c = this.getRealCurrentLineNb() + 1; + parser = new Parser(c); + parser.refs = this.refs; + val = parser.parse(this.getNextEmbedBlock(), exceptionOnInvalidType, objectDecoder); + if (allowOverwrite || data[key] === void 0) { + data[key] = val; + } + } + } else { + val = this.parseValue(values.value, exceptionOnInvalidType, objectDecoder); + if (allowOverwrite || data[key] === void 0) { + data[key] = val; + } + } + } else { + lineCount = this.lines.length; + if (1 === lineCount || (2 === lineCount && Utils.isEmpty(this.lines[1]))) { + try { + value = Inline.parse(this.lines[0], exceptionOnInvalidType, objectDecoder); + } catch (error1) { + e = error1; + e.parsedLine = this.getRealCurrentLineNb() + 1; + e.snippet = this.currentLine; + throw e; + } + if (typeof value === 'object') { + if (value instanceof Array) { + first = value[0]; + } else { + for (key in value) { + first = value[key]; + break; + } + } + if (typeof first === 'string' && first.indexOf('*') === 0) { + data = []; + for (n = 0, len3 = value.length; n < len3; n++) { + alias = value[n]; + data.push(this.refs[alias.slice(1)]); + } + value = data; + } + } + return value; + } else if ((ref2 = Utils.ltrim(value).charAt(0)) === '[' || ref2 === '{') { + try { + return Inline.parse(value, exceptionOnInvalidType, objectDecoder); + } catch (error2) { + e = error2; + e.parsedLine = this.getRealCurrentLineNb() + 1; + e.snippet = this.currentLine; + throw e; + } + } + throw new ParseException('Unable to parse.', this.getRealCurrentLineNb() + 1, this.currentLine); + } + if (isRef) { + if (data instanceof Array) { + this.refs[isRef] = data[data.length - 1]; + } else { + lastKey = null; + for (key in data) { + lastKey = key; + } + this.refs[isRef] = data[lastKey]; + } + } + } + if (Utils.isEmpty(data)) { + return null; + } else { + return data; + } + }; + + Parser.prototype.getRealCurrentLineNb = function() { + return this.currentLineNb + this.offset; + }; + + Parser.prototype.getCurrentLineIndentation = function() { + return this.currentLine.length - Utils.ltrim(this.currentLine, ' ').length; + }; + + Parser.prototype.getNextEmbedBlock = function(indentation, includeUnindentedCollection) { + var data, indent, isItUnindentedCollection, newIndent, removeComments, removeCommentsPattern, unindentedEmbedBlock; + if (indentation == null) { + indentation = null; + } + if (includeUnindentedCollection == null) { + includeUnindentedCollection = false; + } + this.moveToNextLine(); + if (indentation == null) { + newIndent = this.getCurrentLineIndentation(); + unindentedEmbedBlock = this.isStringUnIndentedCollectionItem(this.currentLine); + if (!(this.isCurrentLineEmpty()) && 0 === newIndent && !unindentedEmbedBlock) { + throw new ParseException('Indentation problem.', this.getRealCurrentLineNb() + 1, this.currentLine); + } + } else { + newIndent = indentation; + } + data = [this.currentLine.slice(newIndent)]; + if (!includeUnindentedCollection) { + isItUnindentedCollection = this.isStringUnIndentedCollectionItem(this.currentLine); + } + removeCommentsPattern = this.PATTERN_FOLDED_SCALAR_END; + removeComments = !removeCommentsPattern.test(this.currentLine); + while (this.moveToNextLine()) { + indent = this.getCurrentLineIndentation(); + if (indent === newIndent) { + removeComments = !removeCommentsPattern.test(this.currentLine); + } + if (removeComments && this.isCurrentLineComment()) { + continue; + } + if (this.isCurrentLineBlank()) { + data.push(this.currentLine.slice(newIndent)); + continue; + } + if (isItUnindentedCollection && !this.isStringUnIndentedCollectionItem(this.currentLine) && indent === newIndent) { + this.moveToPreviousLine(); + break; + } + if (indent >= newIndent) { + data.push(this.currentLine.slice(newIndent)); + } else if (Utils.ltrim(this.currentLine).charAt(0) === '#') { + + } else if (0 === indent) { + this.moveToPreviousLine(); + break; + } else { + throw new ParseException('Indentation problem.', this.getRealCurrentLineNb() + 1, this.currentLine); + } + } + return data.join("\n"); + }; + + Parser.prototype.moveToNextLine = function() { + if (this.currentLineNb >= this.lines.length - 1) { + return false; + } + this.currentLine = this.lines[++this.currentLineNb]; + return true; + }; + + Parser.prototype.moveToPreviousLine = function() { + this.currentLine = this.lines[--this.currentLineNb]; + }; + + Parser.prototype.parseValue = function(value, exceptionOnInvalidType, objectDecoder) { + var e, error, foldedIndent, matches, modifiers, pos, ref, ref1, val; + if (0 === value.indexOf('*')) { + pos = value.indexOf('#'); + if (pos !== -1) { + value = value.substr(1, pos - 2); + } else { + value = value.slice(1); + } + if (this.refs[value] === void 0) { + throw new ParseException('Reference "' + value + '" does not exist.', this.currentLine); + } + return this.refs[value]; + } + if (matches = this.PATTERN_FOLDED_SCALAR_ALL.exec(value)) { + modifiers = (ref = matches.modifiers) != null ? ref : ''; + foldedIndent = Math.abs(parseInt(modifiers)); + if (isNaN(foldedIndent)) { + foldedIndent = 0; + } + val = this.parseFoldedScalar(matches.separator, this.PATTERN_DECIMAL.replace(modifiers, ''), foldedIndent); + if (matches.type != null) { + Inline.configure(exceptionOnInvalidType, objectDecoder); + return Inline.parseScalar(matches.type + ' ' + val); + } else { + return val; + } + } + if ((ref1 = value.charAt(0)) === '[' || ref1 === '{' || ref1 === '"' || ref1 === "'") { + while (true) { + try { + return Inline.parse(value, exceptionOnInvalidType, objectDecoder); + } catch (error) { + e = error; + if (e instanceof ParseMore && this.moveToNextLine()) { + value += "\n" + Utils.trim(this.currentLine, ' '); + } else { + e.parsedLine = this.getRealCurrentLineNb() + 1; + e.snippet = this.currentLine; + throw e; + } + } + } + } else { + if (this.isNextLineIndented()) { + value += "\n" + this.getNextEmbedBlock(); + } + return Inline.parse(value, exceptionOnInvalidType, objectDecoder); + } + }; + + Parser.prototype.parseFoldedScalar = function(separator, indicator, indentation) { + var isCurrentLineBlank, j, len, line, matches, newText, notEOF, pattern, ref, text; + if (indicator == null) { + indicator = ''; + } + if (indentation == null) { + indentation = 0; + } + notEOF = this.moveToNextLine(); + if (!notEOF) { + return ''; + } + isCurrentLineBlank = this.isCurrentLineBlank(); + text = ''; + while (notEOF && isCurrentLineBlank) { + if (notEOF = this.moveToNextLine()) { + text += "\n"; + isCurrentLineBlank = this.isCurrentLineBlank(); + } + } + if (0 === indentation) { + if (matches = this.PATTERN_INDENT_SPACES.exec(this.currentLine)) { + indentation = matches[0].length; + } + } + if (indentation > 0) { + pattern = this.PATTERN_FOLDED_SCALAR_BY_INDENTATION[indentation]; + if (pattern == null) { + pattern = new Pattern('^ {' + indentation + '}(.*)$'); + Parser.prototype.PATTERN_FOLDED_SCALAR_BY_INDENTATION[indentation] = pattern; + } + while (notEOF && (isCurrentLineBlank || (matches = pattern.exec(this.currentLine)))) { + if (isCurrentLineBlank) { + text += this.currentLine.slice(indentation); + } else { + text += matches[1]; + } + if (notEOF = this.moveToNextLine()) { + text += "\n"; + isCurrentLineBlank = this.isCurrentLineBlank(); + } + } + } else if (notEOF) { + text += "\n"; + } + if (notEOF) { + this.moveToPreviousLine(); + } + if ('>' === separator) { + newText = ''; + ref = text.split("\n"); + for (j = 0, len = ref.length; j < len; j++) { + line = ref[j]; + if (line.length === 0 || line.charAt(0) === ' ') { + newText = Utils.rtrim(newText, ' ') + line + "\n"; + } else { + newText += line + ' '; + } + } + text = newText; + } + if ('+' !== indicator) { + text = Utils.rtrim(text); + } + if ('' === indicator) { + text = this.PATTERN_TRAILING_LINES.replace(text, "\n"); + } else if ('-' === indicator) { + text = this.PATTERN_TRAILING_LINES.replace(text, ''); + } + return text; + }; + + Parser.prototype.isNextLineIndented = function(ignoreComments) { + var EOF, currentIndentation, ret; + if (ignoreComments == null) { + ignoreComments = true; + } + currentIndentation = this.getCurrentLineIndentation(); + EOF = !this.moveToNextLine(); + if (ignoreComments) { + while (!EOF && this.isCurrentLineEmpty()) { + EOF = !this.moveToNextLine(); + } + } else { + while (!EOF && this.isCurrentLineBlank()) { + EOF = !this.moveToNextLine(); + } + } + if (EOF) { + return false; + } + ret = false; + if (this.getCurrentLineIndentation() > currentIndentation) { + ret = true; + } + this.moveToPreviousLine(); + return ret; + }; + + Parser.prototype.isCurrentLineEmpty = function() { + var trimmedLine; + trimmedLine = Utils.trim(this.currentLine, ' '); + return trimmedLine.length === 0 || trimmedLine.charAt(0) === '#'; + }; + + Parser.prototype.isCurrentLineBlank = function() { + return '' === Utils.trim(this.currentLine, ' '); + }; + + Parser.prototype.isCurrentLineComment = function() { + var ltrimmedLine; + ltrimmedLine = Utils.ltrim(this.currentLine, ' '); + return ltrimmedLine.charAt(0) === '#'; + }; + + Parser.prototype.cleanup = function(value) { + var count, i, indent, j, l, len, len1, line, lines, ref, ref1, ref2, smallestIndent, trimmedValue; + if (value.indexOf("\r") !== -1) { + value = value.split("\r\n").join("\n").split("\r").join("\n"); + } + count = 0; + ref = this.PATTERN_YAML_HEADER.replaceAll(value, ''), value = ref[0], count = ref[1]; + this.offset += count; + ref1 = this.PATTERN_LEADING_COMMENTS.replaceAll(value, '', 1), trimmedValue = ref1[0], count = ref1[1]; + if (count === 1) { + this.offset += Utils.subStrCount(value, "\n") - Utils.subStrCount(trimmedValue, "\n"); + value = trimmedValue; + } + ref2 = this.PATTERN_DOCUMENT_MARKER_START.replaceAll(value, '', 1), trimmedValue = ref2[0], count = ref2[1]; + if (count === 1) { + this.offset += Utils.subStrCount(value, "\n") - Utils.subStrCount(trimmedValue, "\n"); + value = trimmedValue; + value = this.PATTERN_DOCUMENT_MARKER_END.replace(value, ''); + } + lines = value.split("\n"); + smallestIndent = -1; + for (j = 0, len = lines.length; j < len; j++) { + line = lines[j]; + if (Utils.trim(line, ' ').length === 0) { + continue; + } + indent = line.length - Utils.ltrim(line).length; + if (smallestIndent === -1 || indent < smallestIndent) { + smallestIndent = indent; + } + } + if (smallestIndent > 0) { + for (i = l = 0, len1 = lines.length; l < len1; i = ++l) { + line = lines[i]; + lines[i] = line.slice(smallestIndent); + } + value = lines.join("\n"); + } + return value; + }; + + Parser.prototype.isNextLineUnIndentedCollection = function(currentIndentation) { + var notEOF, ret; + if (currentIndentation == null) { + currentIndentation = null; + } + if (currentIndentation == null) { + currentIndentation = this.getCurrentLineIndentation(); + } + notEOF = this.moveToNextLine(); + while (notEOF && this.isCurrentLineEmpty()) { + notEOF = this.moveToNextLine(); + } + if (false === notEOF) { + return false; + } + ret = false; + if (this.getCurrentLineIndentation() === currentIndentation && this.isStringUnIndentedCollectionItem(this.currentLine)) { + ret = true; + } + this.moveToPreviousLine(); + return ret; + }; + + Parser.prototype.isStringUnIndentedCollectionItem = function() { + return this.currentLine === '-' || this.currentLine.slice(0, 2) === '- '; + }; + + return Parser; + +})(); + +module.exports = Parser; + + +},{"./Exception/ParseException":4,"./Exception/ParseMore":5,"./Inline":6,"./Pattern":8,"./Utils":10}],8:[function(require,module,exports){ +var Pattern; + +Pattern = (function() { + Pattern.prototype.regex = null; + + Pattern.prototype.rawRegex = null; + + Pattern.prototype.cleanedRegex = null; + + Pattern.prototype.mapping = null; + + function Pattern(rawRegex, modifiers) { + var _char, capturingBracketNumber, cleanedRegex, i, len, mapping, name, part, subChar; + if (modifiers == null) { + modifiers = ''; + } + cleanedRegex = ''; + len = rawRegex.length; + mapping = null; + capturingBracketNumber = 0; + i = 0; + while (i < len) { + _char = rawRegex.charAt(i); + if (_char === '\\') { + cleanedRegex += rawRegex.slice(i, +(i + 1) + 1 || 9e9); + i++; + } else if (_char === '(') { + if (i < len - 2) { + part = rawRegex.slice(i, +(i + 2) + 1 || 9e9); + if (part === '(?:') { + i += 2; + cleanedRegex += part; + } else if (part === '(?<') { + capturingBracketNumber++; + i += 2; + name = ''; + while (i + 1 < len) { + subChar = rawRegex.charAt(i + 1); + if (subChar === '>') { + cleanedRegex += '('; + i++; + if (name.length > 0) { + if (mapping == null) { + mapping = {}; + } + mapping[name] = capturingBracketNumber; + } + break; + } else { + name += subChar; + } + i++; + } + } else { + cleanedRegex += _char; + capturingBracketNumber++; + } + } else { + cleanedRegex += _char; + } + } else { + cleanedRegex += _char; + } + i++; + } + this.rawRegex = rawRegex; + this.cleanedRegex = cleanedRegex; + this.regex = new RegExp(this.cleanedRegex, 'g' + modifiers.replace('g', '')); + this.mapping = mapping; + } + + Pattern.prototype.exec = function(str) { + var index, matches, name, ref; + this.regex.lastIndex = 0; + matches = this.regex.exec(str); + if (matches == null) { + return null; + } + if (this.mapping != null) { + ref = this.mapping; + for (name in ref) { + index = ref[name]; + matches[name] = matches[index]; + } + } + return matches; + }; + + Pattern.prototype.test = function(str) { + this.regex.lastIndex = 0; + return this.regex.test(str); + }; + + Pattern.prototype.replace = function(str, replacement) { + this.regex.lastIndex = 0; + return str.replace(this.regex, replacement); + }; + + Pattern.prototype.replaceAll = function(str, replacement, limit) { + var count; + if (limit == null) { + limit = 0; + } + this.regex.lastIndex = 0; + count = 0; + while (this.regex.test(str) && (limit === 0 || count < limit)) { + this.regex.lastIndex = 0; + str = str.replace(this.regex, replacement); + count++; + } + return [str, count]; + }; + + return Pattern; + +})(); + +module.exports = Pattern; + + +},{}],9:[function(require,module,exports){ +var Pattern, Unescaper, Utils; + +Utils = require('./Utils'); + +Pattern = require('./Pattern'); + +Unescaper = (function() { + function Unescaper() {} + + Unescaper.PATTERN_ESCAPED_CHARACTER = new Pattern('\\\\([0abt\tnvfre "\\/\\\\N_LP]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})'); + + Unescaper.unescapeSingleQuotedString = function(value) { + return value.replace(/\'\'/g, '\''); + }; + + Unescaper.unescapeDoubleQuotedString = function(value) { + if (this._unescapeCallback == null) { + this._unescapeCallback = (function(_this) { + return function(str) { + return _this.unescapeCharacter(str); + }; + })(this); + } + return this.PATTERN_ESCAPED_CHARACTER.replace(value, this._unescapeCallback); + }; + + Unescaper.unescapeCharacter = function(value) { + var ch; + ch = String.fromCharCode; + switch (value.charAt(1)) { + case '0': + return ch(0); + case 'a': + return ch(7); + case 'b': + return ch(8); + case 't': + return "\t"; + case "\t": + return "\t"; + case 'n': + return "\n"; + case 'v': + return ch(11); + case 'f': + return ch(12); + case 'r': + return ch(13); + case 'e': + return ch(27); + case ' ': + return ' '; + case '"': + return '"'; + case '/': + return '/'; + case '\\': + return '\\'; + case 'N': + return ch(0x0085); + case '_': + return ch(0x00A0); + case 'L': + return ch(0x2028); + case 'P': + return ch(0x2029); + case 'x': + return Utils.utf8chr(Utils.hexDec(value.substr(2, 2))); + case 'u': + return Utils.utf8chr(Utils.hexDec(value.substr(2, 4))); + case 'U': + return Utils.utf8chr(Utils.hexDec(value.substr(2, 8))); + default: + return ''; + } + }; + + return Unescaper; + +})(); + +module.exports = Unescaper; + + +},{"./Pattern":8,"./Utils":10}],10:[function(require,module,exports){ +var Pattern, Utils, + hasProp = {}.hasOwnProperty; + +Pattern = require('./Pattern'); + +Utils = (function() { + function Utils() {} + + Utils.REGEX_LEFT_TRIM_BY_CHAR = {}; + + Utils.REGEX_RIGHT_TRIM_BY_CHAR = {}; + + Utils.REGEX_SPACES = /\s+/g; + + Utils.REGEX_DIGITS = /^\d+$/; + + Utils.REGEX_OCTAL = /[^0-7]/gi; + + Utils.REGEX_HEXADECIMAL = /[^a-f0-9]/gi; + + Utils.PATTERN_DATE = new Pattern('^' + '(?[0-9][0-9][0-9][0-9])' + '-(?[0-9][0-9]?)' + '-(?[0-9][0-9]?)' + '(?:(?:[Tt]|[ \t]+)' + '(?[0-9][0-9]?)' + ':(?[0-9][0-9])' + ':(?[0-9][0-9])' + '(?:\.(?[0-9]*))?' + '(?:[ \t]*(?Z|(?[-+])(?[0-9][0-9]?)' + '(?::(?[0-9][0-9]))?))?)?' + '$', 'i'); + + Utils.LOCAL_TIMEZONE_OFFSET = new Date().getTimezoneOffset() * 60 * 1000; + + Utils.trim = function(str, _char) { + var regexLeft, regexRight; + if (_char == null) { + _char = '\\s'; + } + regexLeft = this.REGEX_LEFT_TRIM_BY_CHAR[_char]; + if (regexLeft == null) { + this.REGEX_LEFT_TRIM_BY_CHAR[_char] = regexLeft = new RegExp('^' + _char + '' + _char + '*'); + } + regexLeft.lastIndex = 0; + regexRight = this.REGEX_RIGHT_TRIM_BY_CHAR[_char]; + if (regexRight == null) { + this.REGEX_RIGHT_TRIM_BY_CHAR[_char] = regexRight = new RegExp(_char + '' + _char + '*$'); + } + regexRight.lastIndex = 0; + return str.replace(regexLeft, '').replace(regexRight, ''); + }; + + Utils.ltrim = function(str, _char) { + var regexLeft; + if (_char == null) { + _char = '\\s'; + } + regexLeft = this.REGEX_LEFT_TRIM_BY_CHAR[_char]; + if (regexLeft == null) { + this.REGEX_LEFT_TRIM_BY_CHAR[_char] = regexLeft = new RegExp('^' + _char + '' + _char + '*'); + } + regexLeft.lastIndex = 0; + return str.replace(regexLeft, ''); + }; + + Utils.rtrim = function(str, _char) { + var regexRight; + if (_char == null) { + _char = '\\s'; + } + regexRight = this.REGEX_RIGHT_TRIM_BY_CHAR[_char]; + if (regexRight == null) { + this.REGEX_RIGHT_TRIM_BY_CHAR[_char] = regexRight = new RegExp(_char + '' + _char + '*$'); + } + regexRight.lastIndex = 0; + return str.replace(regexRight, ''); + }; + + Utils.isEmpty = function(value) { + return !value || value === '' || value === '0' || (value instanceof Array && value.length === 0) || this.isEmptyObject(value); + }; + + Utils.isEmptyObject = function(value) { + var k; + return value instanceof Object && ((function() { + var results; + results = []; + for (k in value) { + if (!hasProp.call(value, k)) continue; + results.push(k); + } + return results; + })()).length === 0; + }; + + Utils.subStrCount = function(string, subString, start, length) { + var c, i, j, len, ref, sublen; + c = 0; + string = '' + string; + subString = '' + subString; + if (start != null) { + string = string.slice(start); + } + if (length != null) { + string = string.slice(0, length); + } + len = string.length; + sublen = subString.length; + for (i = j = 0, ref = len; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) { + if (subString === string.slice(i, sublen)) { + c++; + i += sublen - 1; + } + } + return c; + }; + + Utils.isDigits = function(input) { + this.REGEX_DIGITS.lastIndex = 0; + return this.REGEX_DIGITS.test(input); + }; + + Utils.octDec = function(input) { + this.REGEX_OCTAL.lastIndex = 0; + return parseInt((input + '').replace(this.REGEX_OCTAL, ''), 8); + }; + + Utils.hexDec = function(input) { + this.REGEX_HEXADECIMAL.lastIndex = 0; + input = this.trim(input); + if ((input + '').slice(0, 2) === '0x') { + input = (input + '').slice(2); + } + return parseInt((input + '').replace(this.REGEX_HEXADECIMAL, ''), 16); + }; + + Utils.utf8chr = function(c) { + var ch; + ch = String.fromCharCode; + if (0x80 > (c %= 0x200000)) { + return ch(c); + } + if (0x800 > c) { + return ch(0xC0 | c >> 6) + ch(0x80 | c & 0x3F); + } + if (0x10000 > c) { + return ch(0xE0 | c >> 12) + ch(0x80 | c >> 6 & 0x3F) + ch(0x80 | c & 0x3F); + } + return ch(0xF0 | c >> 18) + ch(0x80 | c >> 12 & 0x3F) + ch(0x80 | c >> 6 & 0x3F) + ch(0x80 | c & 0x3F); + }; + + Utils.parseBoolean = function(input, strict) { + var lowerInput; + if (strict == null) { + strict = true; + } + if (typeof input === 'string') { + lowerInput = input.toLowerCase(); + if (!strict) { + if (lowerInput === 'no') { + return false; + } + } + if (lowerInput === '0') { + return false; + } + if (lowerInput === 'false') { + return false; + } + if (lowerInput === '') { + return false; + } + return true; + } + return !!input; + }; + + Utils.isNumeric = function(input) { + this.REGEX_SPACES.lastIndex = 0; + return typeof input === 'number' || typeof input === 'string' && !isNaN(input) && input.replace(this.REGEX_SPACES, '') !== ''; + }; + + Utils.stringToDate = function(str) { + var date, day, fraction, hour, info, minute, month, second, tz_hour, tz_minute, tz_offset, year; + if (!(str != null ? str.length : void 0)) { + return null; + } + info = this.PATTERN_DATE.exec(str); + if (!info) { + return null; + } + year = parseInt(info.year, 10); + month = parseInt(info.month, 10) - 1; + day = parseInt(info.day, 10); + if (info.hour == null) { + date = new Date(Date.UTC(year, month, day)); + return date; + } + hour = parseInt(info.hour, 10); + minute = parseInt(info.minute, 10); + second = parseInt(info.second, 10); + if (info.fraction != null) { + fraction = info.fraction.slice(0, 3); + while (fraction.length < 3) { + fraction += '0'; + } + fraction = parseInt(fraction, 10); + } else { + fraction = 0; + } + if (info.tz != null) { + tz_hour = parseInt(info.tz_hour, 10); + if (info.tz_minute != null) { + tz_minute = parseInt(info.tz_minute, 10); + } else { + tz_minute = 0; + } + tz_offset = (tz_hour * 60 + tz_minute) * 60000; + if ('-' === info.tz_sign) { + tz_offset *= -1; + } + } + date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction)); + if (tz_offset) { + date.setTime(date.getTime() - tz_offset); + } + return date; + }; + + Utils.strRepeat = function(str, number) { + var i, res; + res = ''; + i = 0; + while (i < number) { + res += str; + i++; + } + return res; + }; + + Utils.getStringFromFile = function(path, callback) { + var data, fs, j, len1, name, ref, req, xhr; + if (callback == null) { + callback = null; + } + xhr = null; + if (typeof window !== "undefined" && window !== null) { + if (window.XMLHttpRequest) { + xhr = new XMLHttpRequest(); + } else if (window.ActiveXObject) { + ref = ["Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.3.0", "Msxml2.XMLHTTP", "Microsoft.XMLHTTP"]; + for (j = 0, len1 = ref.length; j < len1; j++) { + name = ref[j]; + try { + xhr = new ActiveXObject(name); + } catch (undefined) {} + } + } + } + if (xhr != null) { + if (callback != null) { + xhr.onreadystatechange = function() { + if (xhr.readyState === 4) { + if (xhr.status === 200 || xhr.status === 0) { + return callback(xhr.responseText); + } else { + return callback(null); + } + } + }; + xhr.open('GET', path, true); + return xhr.send(null); + } else { + xhr.open('GET', path, false); + xhr.send(null); + if (xhr.status === 200 || xhr.status === 0) { + return xhr.responseText; + } + return null; + } + } else { + req = require; + fs = req('fs'); + if (callback != null) { + return fs.readFile(path, function(err, data) { + if (err) { + return callback(null); + } else { + return callback(String(data)); + } + }); + } else { + data = fs.readFileSync(path); + if (data != null) { + return String(data); + } + return null; + } + } + }; + + return Utils; + +})(); + +module.exports = Utils; + + +},{"./Pattern":8}],11:[function(require,module,exports){ +var Dumper, Parser, Utils, Yaml; + +Parser = require('./Parser'); + +Dumper = require('./Dumper'); + +Utils = require('./Utils'); + +Yaml = (function() { + function Yaml() {} + + Yaml.parse = function(input, exceptionOnInvalidType, objectDecoder) { + if (exceptionOnInvalidType == null) { + exceptionOnInvalidType = false; + } + if (objectDecoder == null) { + objectDecoder = null; + } + return new Parser().parse(input, exceptionOnInvalidType, objectDecoder); + }; + + Yaml.parseFile = function(path, callback, exceptionOnInvalidType, objectDecoder) { + var input; + if (callback == null) { + callback = null; + } + if (exceptionOnInvalidType == null) { + exceptionOnInvalidType = false; + } + if (objectDecoder == null) { + objectDecoder = null; + } + if (callback != null) { + return Utils.getStringFromFile(path, (function(_this) { + return function(input) { + var result; + result = null; + if (input != null) { + result = _this.parse(input, exceptionOnInvalidType, objectDecoder); + } + callback(result); + }; + })(this)); + } else { + input = Utils.getStringFromFile(path); + if (input != null) { + return this.parse(input, exceptionOnInvalidType, objectDecoder); + } + return null; + } + }; + + Yaml.dump = function(input, inline, indent, exceptionOnInvalidType, objectEncoder) { + var yaml; + if (inline == null) { + inline = 2; + } + if (indent == null) { + indent = 4; + } + if (exceptionOnInvalidType == null) { + exceptionOnInvalidType = false; + } + if (objectEncoder == null) { + objectEncoder = null; + } + yaml = new Dumper(); + yaml.indentation = indent; + return yaml.dump(input, inline, 0, exceptionOnInvalidType, objectEncoder); + }; + + Yaml.stringify = function(input, inline, indent, exceptionOnInvalidType, objectEncoder) { + return this.dump(input, inline, indent, exceptionOnInvalidType, objectEncoder); + }; + + Yaml.load = function(path, callback, exceptionOnInvalidType, objectDecoder) { + return this.parseFile(path, callback, exceptionOnInvalidType, objectDecoder); + }; + + return Yaml; + +})(); + +if (typeof window !== "undefined" && window !== null) { + window.YAML = Yaml; +} + +if (typeof window === "undefined" || window === null) { + this.YAML = Yaml; +} + +module.exports = Yaml; + + +},{"./Dumper":1,"./Parser":7,"./Utils":10}]},{},[11]) +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Vzci9sb2NhbC9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2Jyb3dzZXItcGFjay9fcHJlbHVkZS5qcyIsInNyYy9EdW1wZXIuY29mZmVlIiwic3JjL0VzY2FwZXIuY29mZmVlIiwic3JjL0V4Y2VwdGlvbi9EdW1wRXhjZXB0aW9uLmNvZmZlZSIsInNyYy9FeGNlcHRpb24vUGFyc2VFeGNlcHRpb24uY29mZmVlIiwic3JjL0V4Y2VwdGlvbi9QYXJzZU1vcmUuY29mZmVlIiwic3JjL0lubGluZS5jb2ZmZWUiLCJzcmMvUGFyc2VyLmNvZmZlZSIsInNyYy9QYXR0ZXJuLmNvZmZlZSIsInNyYy9VbmVzY2FwZXIuY29mZmVlIiwic3JjL1V0aWxzLmNvZmZlZSIsInNyYy9ZYW1sLmNvZmZlZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0NBLElBQUE7O0FBQUEsS0FBQSxHQUFVLE9BQUEsQ0FBUSxTQUFSOztBQUNWLE1BQUEsR0FBVSxPQUFBLENBQVEsVUFBUjs7QUFJSjs7O0VBR0YsTUFBQyxDQUFBLFdBQUQsR0FBZ0I7O21CQWFoQixJQUFBLEdBQU0sU0FBQyxLQUFELEVBQVEsTUFBUixFQUFvQixNQUFwQixFQUFnQyxzQkFBaEMsRUFBZ0UsYUFBaEU7QUFDRixRQUFBOztNQURVLFNBQVM7OztNQUFHLFNBQVM7OztNQUFHLHlCQUF5Qjs7O01BQU8sZ0JBQWdCOztJQUNsRixNQUFBLEdBQVM7SUFDVCxNQUFBLEdBQVMsQ0FBSSxNQUFILEdBQWUsS0FBSyxDQUFDLFNBQU4sQ0FBZ0IsR0FBaEIsRUFBcUIsTUFBckIsQ0FBZixHQUFpRCxFQUFsRDtJQUVULElBQUcsTUFBQSxJQUFVLENBQVYsSUFBZSxPQUFPLEtBQVAsS0FBbUIsUUFBbEMsSUFBOEMsS0FBQSxZQUFpQixJQUEvRCxJQUF1RSxLQUFLLENBQUMsT0FBTixDQUFjLEtBQWQsQ0FBMUU7TUFDSSxNQUFBLElBQVUsTUFBQSxHQUFTLE1BQU0sQ0FBQyxJQUFQLENBQVksS0FBWixFQUFtQixzQkFBbkIsRUFBMkMsYUFBM0MsRUFEdkI7S0FBQSxNQUFBO01BSUksSUFBRyxLQUFBLFlBQWlCLEtBQXBCO0FBQ0ksYUFBQSx1Q0FBQTs7VUFDSSxhQUFBLEdBQWlCLE1BQUEsR0FBUyxDQUFULElBQWMsQ0FBZCxJQUFtQixPQUFPLEtBQVAsS0FBbUIsUUFBdEMsSUFBa0QsS0FBSyxDQUFDLE9BQU4sQ0FBYyxLQUFkO1VBRW5FLE1BQUEsSUFDSSxNQUFBLEdBQ0EsR0FEQSxHQUVBLENBQUksYUFBSCxHQUFzQixHQUF0QixHQUErQixJQUFoQyxDQUZBLEdBR0EsSUFBQyxDQUFBLElBQUQsQ0FBTSxLQUFOLEVBQWEsTUFBQSxHQUFTLENBQXRCLEVBQXlCLENBQUksYUFBSCxHQUFzQixDQUF0QixHQUE2QixNQUFBLEdBQVMsSUFBQyxDQUFBLFdBQXhDLENBQXpCLEVBQStFLHNCQUEvRSxFQUF1RyxhQUF2RyxDQUhBLEdBSUEsQ0FBSSxhQUFILEdBQXNCLElBQXRCLEdBQWdDLEVBQWpDO0FBUlIsU0FESjtPQUFBLE1BQUE7QUFZSSxhQUFBLFlBQUE7O1VBQ0ksYUFBQSxHQUFpQixNQUFBLEdBQVMsQ0FBVCxJQUFjLENBQWQsSUFBbUIsT0FBTyxLQUFQLEtBQW1CLFFBQXRDLElBQWtELEtBQUssQ0FBQyxPQUFOLENBQWMsS0FBZDtVQUVuRSxNQUFBLElBQ0ksTUFBQSxHQUNBLE1BQU0sQ0FBQyxJQUFQLENBQVksR0FBWixFQUFpQixzQkFBakIsRUFBeUMsYUFBekMsQ0FEQSxHQUMwRCxHQUQxRCxHQUVBLENBQUksYUFBSCxHQUFzQixHQUF0QixHQUErQixJQUFoQyxDQUZBLEdBR0EsSUFBQyxDQUFBLElBQUQsQ0FBTSxLQUFOLEVBQWEsTUFBQSxHQUFTLENBQXRCLEVBQXlCLENBQUksYUFBSCxHQUFzQixDQUF0QixHQUE2QixNQUFBLEdBQVMsSUFBQyxDQUFBLFdBQXhDLENBQXpCLEVBQStFLHNCQUEvRSxFQUF1RyxhQUF2RyxDQUhBLEdBSUEsQ0FBSSxhQUFILEdBQXNCLElBQXRCLEdBQWdDLEVBQWpDO0FBUlIsU0FaSjtPQUpKOztBQTBCQSxXQUFPO0VBOUJMOzs7Ozs7QUFpQ1YsTUFBTSxDQUFDLE9BQVAsR0FBaUI7Ozs7QUN0RGpCLElBQUE7O0FBQUEsT0FBQSxHQUFVLE9BQUEsQ0FBUSxXQUFSOztBQUlKO0FBSUYsTUFBQTs7OztFQUFBLE9BQUMsQ0FBQSxhQUFELEdBQWdDLENBQUMsSUFBRCxFQUFPLE1BQVAsRUFBZSxLQUFmLEVBQXNCLEdBQXRCLEVBQ0MsTUFERCxFQUNVLE1BRFYsRUFDbUIsTUFEbkIsRUFDNEIsTUFENUIsRUFDcUMsTUFEckMsRUFDOEMsTUFEOUMsRUFDdUQsTUFEdkQsRUFDZ0UsTUFEaEUsRUFFQyxNQUZELEVBRVUsTUFGVixFQUVtQixNQUZuQixFQUU0QixNQUY1QixFQUVxQyxNQUZyQyxFQUU4QyxNQUY5QyxFQUV1RCxNQUZ2RCxFQUVnRSxNQUZoRSxFQUdDLE1BSEQsRUFHVSxNQUhWLEVBR21CLE1BSG5CLEVBRzRCLE1BSDVCLEVBR3FDLE1BSHJDLEVBRzhDLE1BSDlDLEVBR3VELE1BSHZELEVBR2dFLE1BSGhFLEVBSUMsTUFKRCxFQUlVLE1BSlYsRUFJbUIsTUFKbkIsRUFJNEIsTUFKNUIsRUFJcUMsTUFKckMsRUFJOEMsTUFKOUMsRUFJdUQsTUFKdkQsRUFJZ0UsTUFKaEUsRUFLQyxDQUFDLEVBQUEsR0FBSyxNQUFNLENBQUMsWUFBYixDQUFBLENBQTJCLE1BQTNCLENBTEQsRUFLcUMsRUFBQSxDQUFHLE1BQUgsQ0FMckMsRUFLaUQsRUFBQSxDQUFHLE1BQUgsQ0FMakQsRUFLNkQsRUFBQSxDQUFHLE1BQUgsQ0FMN0Q7O0VBTWhDLE9BQUMsQ0FBQSxZQUFELEdBQWdDLENBQUMsTUFBRCxFQUFTLEtBQVQsRUFBZ0IsS0FBaEIsRUFBdUIsS0FBdkIsRUFDQyxLQURELEVBQ1UsT0FEVixFQUNtQixPQURuQixFQUM0QixPQUQ1QixFQUNxQyxPQURyQyxFQUM4QyxPQUQ5QyxFQUN1RCxPQUR2RCxFQUNnRSxLQURoRSxFQUVDLEtBRkQsRUFFVSxLQUZWLEVBRW1CLEtBRm5CLEVBRTRCLEtBRjVCLEVBRXFDLEtBRnJDLEVBRThDLEtBRjlDLEVBRXVELE9BRnZELEVBRWdFLE9BRmhFLEVBR0MsT0FIRCxFQUdVLE9BSFYsRUFHbUIsT0FIbkIsRUFHNEIsT0FINUIsRUFHcUMsT0FIckMsRUFHOEMsT0FIOUMsRUFHdUQsT0FIdkQsRUFHZ0UsT0FIaEUsRUFJQyxPQUpELEVBSVUsT0FKVixFQUltQixPQUpuQixFQUk0QixLQUo1QixFQUlxQyxPQUpyQyxFQUk4QyxPQUo5QyxFQUl1RCxPQUp2RCxFQUlnRSxPQUpoRSxFQUtDLEtBTEQsRUFLUSxLQUxSLEVBS2UsS0FMZixFQUtzQixLQUx0Qjs7RUFPaEMsT0FBQyxDQUFBLDJCQUFELEdBQW1DLENBQUEsU0FBQTtBQUMvQixRQUFBO0lBQUEsT0FBQSxHQUFVO0FBQ1YsU0FBUyxxR0FBVDtNQUNJLE9BQVEsQ0FBQSxPQUFDLENBQUEsYUFBYyxDQUFBLENBQUEsQ0FBZixDQUFSLEdBQTZCLE9BQUMsQ0FBQSxZQUFhLENBQUEsQ0FBQTtBQUQvQztBQUVBLFdBQU87RUFKd0IsQ0FBQSxDQUFILENBQUE7O0VBT2hDLE9BQUMsQ0FBQSw0QkFBRCxHQUFvQyxJQUFBLE9BQUEsQ0FBUSwyREFBUjs7RUFHcEMsT0FBQyxDQUFBLHdCQUFELEdBQW9DLElBQUEsT0FBQSxDQUFRLE9BQUMsQ0FBQSxhQUFhLENBQUMsSUFBZixDQUFvQixHQUFwQixDQUF3QixDQUFDLEtBQXpCLENBQStCLElBQS9CLENBQW9DLENBQUMsSUFBckMsQ0FBMEMsTUFBMUMsQ0FBUjs7RUFDcEMsT0FBQyxDQUFBLHNCQUFELEdBQW9DLElBQUEsT0FBQSxDQUFRLG9DQUFSOztFQVVwQyxPQUFDLENBQUEscUJBQUQsR0FBd0IsU0FBQyxLQUFEO0FBQ3BCLFdBQU8sSUFBQyxDQUFBLDRCQUE0QixDQUFDLElBQTlCLENBQW1DLEtBQW5DO0VBRGE7O0VBVXhCLE9BQUMsQ0FBQSxzQkFBRCxHQUF5QixTQUFDLEtBQUQ7QUFDckIsUUFBQTtJQUFBLE1BQUEsR0FBUyxJQUFDLENBQUEsd0JBQXdCLENBQUMsT0FBMUIsQ0FBa0MsS0FBbEMsRUFBeUMsQ0FBQSxTQUFBLEtBQUE7YUFBQSxTQUFDLEdBQUQ7QUFDOUMsZUFBTyxLQUFDLENBQUEsMkJBQTRCLENBQUEsR0FBQTtNQURVO0lBQUEsQ0FBQSxDQUFBLENBQUEsSUFBQSxDQUF6QztBQUVULFdBQU8sR0FBQSxHQUFJLE1BQUosR0FBVztFQUhHOztFQVl6QixPQUFDLENBQUEscUJBQUQsR0FBd0IsU0FBQyxLQUFEO0FBQ3BCLFdBQU8sSUFBQyxDQUFBLHNCQUFzQixDQUFDLElBQXhCLENBQTZCLEtBQTdCO0VBRGE7O0VBVXhCLE9BQUMsQ0FBQSxzQkFBRCxHQUF5QixTQUFDLEtBQUQ7QUFDckIsV0FBTyxHQUFBLEdBQUksS0FBSyxDQUFDLE9BQU4sQ0FBYyxJQUFkLEVBQW9CLElBQXBCLENBQUosR0FBOEI7RUFEaEI7Ozs7OztBQUk3QixNQUFNLENBQUMsT0FBUCxHQUFpQjs7OztBQzlFakIsSUFBQSxhQUFBO0VBQUE7OztBQUFNOzs7RUFFVyx1QkFBQyxPQUFELEVBQVcsVUFBWCxFQUF3QixPQUF4QjtJQUFDLElBQUMsQ0FBQSxVQUFEO0lBQVUsSUFBQyxDQUFBLGFBQUQ7SUFBYSxJQUFDLENBQUEsVUFBRDtFQUF4Qjs7MEJBRWIsUUFBQSxHQUFVLFNBQUE7SUFDTixJQUFHLHlCQUFBLElBQWlCLHNCQUFwQjtBQUNJLGFBQU8sa0JBQUEsR0FBcUIsSUFBQyxDQUFBLE9BQXRCLEdBQWdDLFNBQWhDLEdBQTRDLElBQUMsQ0FBQSxVQUE3QyxHQUEwRCxNQUExRCxHQUFtRSxJQUFDLENBQUEsT0FBcEUsR0FBOEUsTUFEekY7S0FBQSxNQUFBO0FBR0ksYUFBTyxrQkFBQSxHQUFxQixJQUFDLENBQUEsUUFIakM7O0VBRE07Ozs7R0FKYzs7QUFVNUIsTUFBTSxDQUFDLE9BQVAsR0FBaUI7Ozs7QUNWakIsSUFBQSxjQUFBO0VBQUE7OztBQUFNOzs7RUFFVyx3QkFBQyxPQUFELEVBQVcsVUFBWCxFQUF3QixPQUF4QjtJQUFDLElBQUMsQ0FBQSxVQUFEO0lBQVUsSUFBQyxDQUFBLGFBQUQ7SUFBYSxJQUFDLENBQUEsVUFBRDtFQUF4Qjs7MkJBRWIsUUFBQSxHQUFVLFNBQUE7SUFDTixJQUFHLHlCQUFBLElBQWlCLHNCQUFwQjtBQUNJLGFBQU8sbUJBQUEsR0FBc0IsSUFBQyxDQUFBLE9BQXZCLEdBQWlDLFNBQWpDLEdBQTZDLElBQUMsQ0FBQSxVQUE5QyxHQUEyRCxNQUEzRCxHQUFvRSxJQUFDLENBQUEsT0FBckUsR0FBK0UsTUFEMUY7S0FBQSxNQUFBO0FBR0ksYUFBTyxtQkFBQSxHQUFzQixJQUFDLENBQUEsUUFIbEM7O0VBRE07Ozs7R0FKZTs7QUFVN0IsTUFBTSxDQUFDLE9BQVAsR0FBaUI7Ozs7QUNWakIsSUFBQSxTQUFBO0VBQUE7OztBQUFNOzs7RUFFVyxtQkFBQyxPQUFELEVBQVcsVUFBWCxFQUF3QixPQUF4QjtJQUFDLElBQUMsQ0FBQSxVQUFEO0lBQVUsSUFBQyxDQUFBLGFBQUQ7SUFBYSxJQUFDLENBQUEsVUFBRDtFQUF4Qjs7c0JBRWIsUUFBQSxHQUFVLFNBQUE7SUFDTixJQUFHLHlCQUFBLElBQWlCLHNCQUFwQjtBQUNJLGFBQU8sY0FBQSxHQUFpQixJQUFDLENBQUEsT0FBbEIsR0FBNEIsU0FBNUIsR0FBd0MsSUFBQyxDQUFBLFVBQXpDLEdBQXNELE1BQXRELEdBQStELElBQUMsQ0FBQSxPQUFoRSxHQUEwRSxNQURyRjtLQUFBLE1BQUE7QUFHSSxhQUFPLGNBQUEsR0FBaUIsSUFBQyxDQUFBLFFBSDdCOztFQURNOzs7O0dBSlU7O0FBVXhCLE1BQU0sQ0FBQyxPQUFQLEdBQWlCOzs7O0FDVmpCLElBQUEsb0ZBQUE7RUFBQTs7QUFBQSxPQUFBLEdBQWtCLE9BQUEsQ0FBUSxXQUFSOztBQUNsQixTQUFBLEdBQWtCLE9BQUEsQ0FBUSxhQUFSOztBQUNsQixPQUFBLEdBQWtCLE9BQUEsQ0FBUSxXQUFSOztBQUNsQixLQUFBLEdBQWtCLE9BQUEsQ0FBUSxTQUFSOztBQUNsQixjQUFBLEdBQWtCLE9BQUEsQ0FBUSw0QkFBUjs7QUFDbEIsU0FBQSxHQUFrQixPQUFBLENBQVEsdUJBQVI7O0FBQ2xCLGFBQUEsR0FBa0IsT0FBQSxDQUFRLDJCQUFSOztBQUdaOzs7RUFHRixNQUFDLENBQUEsbUJBQUQsR0FBb0M7O0VBSXBDLE1BQUMsQ0FBQSx5QkFBRCxHQUF3QyxJQUFBLE9BQUEsQ0FBUSxXQUFSOztFQUN4QyxNQUFDLENBQUEscUJBQUQsR0FBd0MsSUFBQSxPQUFBLENBQVEsR0FBQSxHQUFJLE1BQUMsQ0FBQSxtQkFBYjs7RUFDeEMsTUFBQyxDQUFBLCtCQUFELEdBQXdDLElBQUEsT0FBQSxDQUFRLCtCQUFSOztFQUN4QyxNQUFDLENBQUEsNEJBQUQsR0FBb0M7O0VBR3BDLE1BQUMsQ0FBQSxRQUFELEdBQVc7O0VBUVgsTUFBQyxDQUFBLFNBQUQsR0FBWSxTQUFDLHNCQUFELEVBQWdDLGFBQWhDOztNQUFDLHlCQUF5Qjs7O01BQU0sZ0JBQWdCOztJQUV4RCxJQUFDLENBQUEsUUFBUSxDQUFDLHNCQUFWLEdBQW1DO0lBQ25DLElBQUMsQ0FBQSxRQUFRLENBQUMsYUFBVixHQUEwQjtFQUhsQjs7RUFpQlosTUFBQyxDQUFBLEtBQUQsR0FBUSxTQUFDLEtBQUQsRUFBUSxzQkFBUixFQUF3QyxhQUF4QztBQUVKLFFBQUE7O01BRlkseUJBQXlCOzs7TUFBTyxnQkFBZ0I7O0lBRTVELElBQUMsQ0FBQSxRQUFRLENBQUMsc0JBQVYsR0FBbUM7SUFDbkMsSUFBQyxDQUFBLFFBQVEsQ0FBQyxhQUFWLEdBQTBCO0lBRTFCLElBQU8sYUFBUDtBQUNJLGFBQU8sR0FEWDs7SUFHQSxLQUFBLEdBQVEsS0FBSyxDQUFDLElBQU4sQ0FBVyxLQUFYO0lBRVIsSUFBRyxDQUFBLEtBQUssS0FBSyxDQUFDLE1BQWQ7QUFDSSxhQUFPLEdBRFg7O0lBSUEsT0FBQSxHQUFVO01BQUMsd0JBQUEsc0JBQUQ7TUFBeUIsZUFBQSxhQUF6QjtNQUF3QyxDQUFBLEVBQUcsQ0FBM0M7O0FBRVYsWUFBTyxLQUFLLENBQUMsTUFBTixDQUFhLENBQWIsQ0FBUDtBQUFBLFdBQ1MsR0FEVDtRQUVRLE1BQUEsR0FBUyxJQUFDLENBQUEsYUFBRCxDQUFlLEtBQWYsRUFBc0IsT0FBdEI7UUFDVCxFQUFFLE9BQU8sQ0FBQztBQUZUO0FBRFQsV0FJUyxHQUpUO1FBS1EsTUFBQSxHQUFTLElBQUMsQ0FBQSxZQUFELENBQWMsS0FBZCxFQUFxQixPQUFyQjtRQUNULEVBQUUsT0FBTyxDQUFDO0FBRlQ7QUFKVDtRQVFRLE1BQUEsR0FBUyxJQUFDLENBQUEsV0FBRCxDQUFhLEtBQWIsRUFBb0IsSUFBcEIsRUFBMEIsQ0FBQyxHQUFELEVBQU0sR0FBTixDQUExQixFQUFzQyxPQUF0QztBQVJqQjtJQVdBLElBQUcsSUFBQyxDQUFBLHlCQUF5QixDQUFDLE9BQTNCLENBQW1DLEtBQU0saUJBQXpDLEVBQXVELEVBQXZELENBQUEsS0FBZ0UsRUFBbkU7QUFDSSxZQUFVLElBQUEsY0FBQSxDQUFlLDhCQUFBLEdBQStCLEtBQU0saUJBQXJDLEdBQWtELElBQWpFLEVBRGQ7O0FBR0EsV0FBTztFQTlCSDs7RUEyQ1IsTUFBQyxDQUFBLElBQUQsR0FBTyxTQUFDLEtBQUQsRUFBUSxzQkFBUixFQUF3QyxhQUF4QztBQUNILFFBQUE7O01BRFcseUJBQXlCOzs7TUFBTyxnQkFBZ0I7O0lBQzNELElBQU8sYUFBUDtBQUNJLGFBQU8sT0FEWDs7SUFFQSxJQUFBLEdBQU8sT0FBTztJQUNkLElBQUcsSUFBQSxLQUFRLFFBQVg7TUFDSSxJQUFHLEtBQUEsWUFBaUIsSUFBcEI7QUFDSSxlQUFPLEtBQUssQ0FBQyxXQUFOLENBQUEsRUFEWDtPQUFBLE1BRUssSUFBRyxxQkFBSDtRQUNELE1BQUEsR0FBUyxhQUFBLENBQWMsS0FBZDtRQUNULElBQUcsT0FBTyxNQUFQLEtBQWlCLFFBQWpCLElBQTZCLGdCQUFoQztBQUNJLGlCQUFPLE9BRFg7U0FGQzs7QUFJTCxhQUFPLElBQUMsQ0FBQSxVQUFELENBQVksS0FBWixFQVBYOztJQVFBLElBQUcsSUFBQSxLQUFRLFNBQVg7QUFDSSxhQUFPLENBQUksS0FBSCxHQUFjLE1BQWQsR0FBMEIsT0FBM0IsRUFEWDs7SUFFQSxJQUFHLEtBQUssQ0FBQyxRQUFOLENBQWUsS0FBZixDQUFIO0FBQ0ksYUFBTyxDQUFJLElBQUEsS0FBUSxRQUFYLEdBQXlCLEdBQUEsR0FBSSxLQUFKLEdBQVUsR0FBbkMsR0FBNEMsTUFBQSxDQUFPLFFBQUEsQ0FBUyxLQUFULENBQVAsQ0FBN0MsRUFEWDs7SUFFQSxJQUFHLEtBQUssQ0FBQyxTQUFOLENBQWdCLEtBQWhCLENBQUg7QUFDSSxhQUFPLENBQUksSUFBQSxLQUFRLFFBQVgsR0FBeUIsR0FBQSxHQUFJLEtBQUosR0FBVSxHQUFuQyxHQUE0QyxNQUFBLENBQU8sVUFBQSxDQUFXLEtBQVgsQ0FBUCxDQUE3QyxFQURYOztJQUVBLElBQUcsSUFBQSxLQUFRLFFBQVg7QUFDSSxhQUFPLENBQUksS0FBQSxLQUFTLFFBQVosR0FBMEIsTUFBMUIsR0FBc0MsQ0FBSSxLQUFBLEtBQVMsQ0FBQyxRQUFiLEdBQTJCLE9BQTNCLEdBQXdDLENBQUksS0FBQSxDQUFNLEtBQU4sQ0FBSCxHQUFxQixNQUFyQixHQUFpQyxLQUFsQyxDQUF6QyxDQUF2QyxFQURYOztJQUVBLElBQUcsT0FBTyxDQUFDLHFCQUFSLENBQThCLEtBQTlCLENBQUg7QUFDSSxhQUFPLE9BQU8sQ0FBQyxzQkFBUixDQUErQixLQUEvQixFQURYOztJQUVBLElBQUcsT0FBTyxDQUFDLHFCQUFSLENBQThCLEtBQTlCLENBQUg7QUFDSSxhQUFPLE9BQU8sQ0FBQyxzQkFBUixDQUErQixLQUEvQixFQURYOztJQUVBLElBQUcsRUFBQSxLQUFNLEtBQVQ7QUFDSSxhQUFPLEtBRFg7O0lBRUEsSUFBRyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQW5CLENBQXdCLEtBQXhCLENBQUg7QUFDSSxhQUFPLEdBQUEsR0FBSSxLQUFKLEdBQVUsSUFEckI7O0lBRUEsV0FBRyxLQUFLLENBQUMsV0FBTixDQUFBLEVBQUEsS0FBd0IsTUFBeEIsSUFBQSxHQUFBLEtBQStCLEdBQS9CLElBQUEsR0FBQSxLQUFtQyxNQUFuQyxJQUFBLEdBQUEsS0FBMEMsT0FBN0M7QUFDSSxhQUFPLEdBQUEsR0FBSSxLQUFKLEdBQVUsSUFEckI7O0FBR0EsV0FBTztFQS9CSjs7RUEwQ1AsTUFBQyxDQUFBLFVBQUQsR0FBYSxTQUFDLEtBQUQsRUFBUSxzQkFBUixFQUFnQyxhQUFoQztBQUVULFFBQUE7O01BRnlDLGdCQUFnQjs7SUFFekQsSUFBRyxLQUFBLFlBQWlCLEtBQXBCO01BQ0ksTUFBQSxHQUFTO0FBQ1QsV0FBQSx5Q0FBQTs7UUFDSSxNQUFNLENBQUMsSUFBUCxDQUFZLElBQUMsQ0FBQSxJQUFELENBQU0sR0FBTixDQUFaO0FBREo7QUFFQSxhQUFPLEdBQUEsR0FBSSxNQUFNLENBQUMsSUFBUCxDQUFZLElBQVosQ0FBSixHQUFzQixJQUpqQztLQUFBLE1BQUE7TUFRSSxNQUFBLEdBQVM7QUFDVCxXQUFBLFlBQUE7O1FBQ0ksTUFBTSxDQUFDLElBQVAsQ0FBWSxJQUFDLENBQUEsSUFBRCxDQUFNLEdBQU4sQ0FBQSxHQUFXLElBQVgsR0FBZ0IsSUFBQyxDQUFBLElBQUQsQ0FBTSxHQUFOLENBQTVCO0FBREo7QUFFQSxhQUFPLEdBQUEsR0FBSSxNQUFNLENBQUMsSUFBUCxDQUFZLElBQVosQ0FBSixHQUFzQixJQVhqQzs7RUFGUzs7RUE0QmIsTUFBQyxDQUFBLFdBQUQsR0FBYyxTQUFDLE1BQUQsRUFBUyxVQUFULEVBQTRCLGdCQUE1QixFQUEyRCxPQUEzRCxFQUEyRSxRQUEzRTtBQUNWLFFBQUE7O01BRG1CLGFBQWE7OztNQUFNLG1CQUFtQixDQUFDLEdBQUQsRUFBTSxHQUFOOzs7TUFBWSxVQUFVOzs7TUFBTSxXQUFXOztJQUNoRyxJQUFPLGVBQVA7TUFDSSxPQUFBLEdBQVU7UUFBQSxzQkFBQSxFQUF3QixJQUFDLENBQUEsUUFBUSxDQUFDLHNCQUFsQztRQUEwRCxhQUFBLEVBQWUsSUFBQyxDQUFBLFFBQVEsQ0FBQyxhQUFuRjtRQUFrRyxDQUFBLEVBQUcsQ0FBckc7UUFEZDs7SUFFQyxJQUFLLFFBQUw7SUFFRCxVQUFHLE1BQU0sQ0FBQyxNQUFQLENBQWMsQ0FBZCxDQUFBLEVBQUEsYUFBb0IsZ0JBQXBCLEVBQUEsR0FBQSxNQUFIO01BRUksTUFBQSxHQUFTLElBQUMsQ0FBQSxpQkFBRCxDQUFtQixNQUFuQixFQUEyQixPQUEzQjtNQUNSLElBQUssUUFBTDtNQUVELElBQUcsa0JBQUg7UUFDSSxHQUFBLEdBQU0sS0FBSyxDQUFDLEtBQU4sQ0FBWSxNQUFPLFNBQW5CLEVBQXlCLEdBQXpCO1FBQ04sSUFBRyxDQUFHLFFBQUMsR0FBRyxDQUFDLE1BQUosQ0FBVyxDQUFYLENBQUEsRUFBQSxhQUFpQixVQUFqQixFQUFBLElBQUEsTUFBRCxDQUFOO0FBQ0ksZ0JBQVUsSUFBQSxjQUFBLENBQWUseUJBQUEsR0FBMEIsTUFBTyxTQUFqQyxHQUFzQyxJQUFyRCxFQURkO1NBRko7T0FMSjtLQUFBLE1BQUE7TUFZSSxJQUFHLENBQUksVUFBUDtRQUNJLE1BQUEsR0FBUyxNQUFPO1FBQ2hCLENBQUEsSUFBSyxNQUFNLENBQUM7UUFHWixNQUFBLEdBQVMsTUFBTSxDQUFDLE9BQVAsQ0FBZSxJQUFmO1FBQ1QsSUFBRyxNQUFBLEtBQVksQ0FBQyxDQUFoQjtVQUNJLE1BQUEsR0FBUyxLQUFLLENBQUMsS0FBTixDQUFZLE1BQU8saUJBQW5CLEVBRGI7U0FOSjtPQUFBLE1BQUE7UUFVSSxnQkFBQSxHQUFtQixVQUFVLENBQUMsSUFBWCxDQUFnQixHQUFoQjtRQUNuQixPQUFBLEdBQVUsSUFBQyxDQUFBLDRCQUE2QixDQUFBLGdCQUFBO1FBQ3hDLElBQU8sZUFBUDtVQUNJLE9BQUEsR0FBYyxJQUFBLE9BQUEsQ0FBUSxTQUFBLEdBQVUsZ0JBQVYsR0FBMkIsR0FBbkM7VUFDZCxJQUFDLENBQUEsNEJBQTZCLENBQUEsZ0JBQUEsQ0FBOUIsR0FBa0QsUUFGdEQ7O1FBR0EsSUFBRyxLQUFBLEdBQVEsT0FBTyxDQUFDLElBQVIsQ0FBYSxNQUFPLFNBQXBCLENBQVg7VUFDSSxNQUFBLEdBQVMsS0FBTSxDQUFBLENBQUE7VUFDZixDQUFBLElBQUssTUFBTSxDQUFDLE9BRmhCO1NBQUEsTUFBQTtBQUlJLGdCQUFVLElBQUEsY0FBQSxDQUFlLGdDQUFBLEdBQWlDLE1BQWpDLEdBQXdDLElBQXZELEVBSmQ7U0FmSjs7TUFzQkEsSUFBRyxRQUFIO1FBQ0ksTUFBQSxHQUFTLElBQUMsQ0FBQSxjQUFELENBQWdCLE1BQWhCLEVBQXdCLE9BQXhCLEVBRGI7T0FsQ0o7O0lBcUNBLE9BQU8sQ0FBQyxDQUFSLEdBQVk7QUFDWixXQUFPO0VBM0NHOztFQXVEZCxNQUFDLENBQUEsaUJBQUQsR0FBb0IsU0FBQyxNQUFELEVBQVMsT0FBVDtBQUNoQixRQUFBO0lBQUMsSUFBSyxRQUFMO0lBRUQsSUFBQSxDQUFPLENBQUEsS0FBQSxHQUFRLElBQUMsQ0FBQSxxQkFBcUIsQ0FBQyxJQUF2QixDQUE0QixNQUFPLFNBQW5DLENBQVIsQ0FBUDtBQUNJLFlBQVUsSUFBQSxTQUFBLENBQVUsZ0NBQUEsR0FBaUMsTUFBTyxTQUF4QyxHQUE2QyxJQUF2RCxFQURkOztJQUdBLE1BQUEsR0FBUyxLQUFNLENBQUEsQ0FBQSxDQUFFLENBQUMsTUFBVCxDQUFnQixDQUFoQixFQUFtQixLQUFNLENBQUEsQ0FBQSxDQUFFLENBQUMsTUFBVCxHQUFrQixDQUFyQztJQUVULElBQUcsR0FBQSxLQUFPLE1BQU0sQ0FBQyxNQUFQLENBQWMsQ0FBZCxDQUFWO01BQ0ksTUFBQSxHQUFTLFNBQVMsQ0FBQywwQkFBVixDQUFxQyxNQUFyQyxFQURiO0tBQUEsTUFBQTtNQUdJLE1BQUEsR0FBUyxTQUFTLENBQUMsMEJBQVYsQ0FBcUMsTUFBckMsRUFIYjs7SUFLQSxDQUFBLElBQUssS0FBTSxDQUFBLENBQUEsQ0FBRSxDQUFDO0lBRWQsT0FBTyxDQUFDLENBQVIsR0FBWTtBQUNaLFdBQU87RUFoQlM7O0VBNEJwQixNQUFDLENBQUEsYUFBRCxHQUFnQixTQUFDLFFBQUQsRUFBVyxPQUFYO0FBQ1osUUFBQTtJQUFBLE1BQUEsR0FBUztJQUNULEdBQUEsR0FBTSxRQUFRLENBQUM7SUFDZCxJQUFLLFFBQUw7SUFDRCxDQUFBLElBQUs7QUFHTCxXQUFNLENBQUEsR0FBSSxHQUFWO01BQ0ksT0FBTyxDQUFDLENBQVIsR0FBWTtBQUNaLGNBQU8sUUFBUSxDQUFDLE1BQVQsQ0FBZ0IsQ0FBaEIsQ0FBUDtBQUFBLGFBQ1MsR0FEVDtVQUdRLE1BQU0sQ0FBQyxJQUFQLENBQVksSUFBQyxDQUFBLGFBQUQsQ0FBZSxRQUFmLEVBQXlCLE9BQXpCLENBQVo7VUFDQyxJQUFLLFFBQUw7QUFIQTtBQURULGFBS1MsR0FMVDtVQU9RLE1BQU0sQ0FBQyxJQUFQLENBQVksSUFBQyxDQUFBLFlBQUQsQ0FBYyxRQUFkLEVBQXdCLE9BQXhCLENBQVo7VUFDQyxJQUFLLFFBQUw7QUFIQTtBQUxULGFBU1MsR0FUVDtBQVVRLGlCQUFPO0FBVmYsYUFXUyxHQVhUO0FBQUEsYUFXYyxHQVhkO0FBQUEsYUFXbUIsSUFYbkI7QUFXbUI7QUFYbkI7VUFjUSxRQUFBLEdBQVcsUUFBQyxRQUFRLENBQUMsTUFBVCxDQUFnQixDQUFoQixFQUFBLEtBQXVCLEdBQXZCLElBQUEsR0FBQSxLQUE0QixHQUE3QjtVQUNYLEtBQUEsR0FBUSxJQUFDLENBQUEsV0FBRCxDQUFhLFFBQWIsRUFBdUIsQ0FBQyxHQUFELEVBQU0sR0FBTixDQUF2QixFQUFtQyxDQUFDLEdBQUQsRUFBTSxHQUFOLENBQW5DLEVBQStDLE9BQS9DO1VBQ1AsSUFBSyxRQUFMO1VBRUQsSUFBRyxDQUFJLFFBQUosSUFBa0IsT0FBTyxLQUFQLEtBQWlCLFFBQW5DLElBQWdELENBQUMsS0FBSyxDQUFDLE9BQU4sQ0FBYyxJQUFkLENBQUEsS0FBeUIsQ0FBQyxDQUExQixJQUErQixLQUFLLENBQUMsT0FBTixDQUFjLEtBQWQsQ0FBQSxLQUEwQixDQUFDLENBQTNELENBQW5EO0FBRUk7Y0FDSSxLQUFBLEdBQVEsSUFBQyxDQUFBLFlBQUQsQ0FBYyxHQUFBLEdBQUksS0FBSixHQUFVLEdBQXhCLEVBRFo7YUFBQSxhQUFBO2NBRU0sVUFGTjthQUZKOztVQVFBLE1BQU0sQ0FBQyxJQUFQLENBQVksS0FBWjtVQUVBLEVBQUU7QUE1QlY7TUE4QkEsRUFBRTtJQWhDTjtBQWtDQSxVQUFVLElBQUEsU0FBQSxDQUFVLCtCQUFBLEdBQWdDLFFBQTFDO0VBekNFOztFQXFEaEIsTUFBQyxDQUFBLFlBQUQsR0FBZSxTQUFDLE9BQUQsRUFBVSxPQUFWO0FBQ1gsUUFBQTtJQUFBLE1BQUEsR0FBUztJQUNULEdBQUEsR0FBTSxPQUFPLENBQUM7SUFDYixJQUFLLFFBQUw7SUFDRCxDQUFBLElBQUs7SUFHTCx1QkFBQSxHQUEwQjtBQUMxQixXQUFNLENBQUEsR0FBSSxHQUFWO01BQ0ksT0FBTyxDQUFDLENBQVIsR0FBWTtBQUNaLGNBQU8sT0FBTyxDQUFDLE1BQVIsQ0FBZSxDQUFmLENBQVA7QUFBQSxhQUNTLEdBRFQ7QUFBQSxhQUNjLEdBRGQ7QUFBQSxhQUNtQixJQURuQjtVQUVRLEVBQUU7VUFDRixPQUFPLENBQUMsQ0FBUixHQUFZO1VBQ1osdUJBQUEsR0FBMEI7QUFIZjtBQURuQixhQUtTLEdBTFQ7QUFNUSxpQkFBTztBQU5mO01BUUEsSUFBRyx1QkFBSDtRQUNJLHVCQUFBLEdBQTBCO0FBQzFCLGlCQUZKOztNQUtBLEdBQUEsR0FBTSxJQUFDLENBQUEsV0FBRCxDQUFhLE9BQWIsRUFBc0IsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLElBQVgsQ0FBdEIsRUFBd0MsQ0FBQyxHQUFELEVBQU0sR0FBTixDQUF4QyxFQUFvRCxPQUFwRCxFQUE2RCxLQUE3RDtNQUNMLElBQUssUUFBTDtNQUdELElBQUEsR0FBTztBQUVQLGFBQU0sQ0FBQSxHQUFJLEdBQVY7UUFDSSxPQUFPLENBQUMsQ0FBUixHQUFZO0FBQ1osZ0JBQU8sT0FBTyxDQUFDLE1BQVIsQ0FBZSxDQUFmLENBQVA7QUFBQSxlQUNTLEdBRFQ7WUFHUSxLQUFBLEdBQVEsSUFBQyxDQUFBLGFBQUQsQ0FBZSxPQUFmLEVBQXdCLE9BQXhCO1lBQ1AsSUFBSyxRQUFMO1lBSUQsSUFBRyxNQUFPLENBQUEsR0FBQSxDQUFQLEtBQWUsTUFBbEI7Y0FDSSxNQUFPLENBQUEsR0FBQSxDQUFQLEdBQWMsTUFEbEI7O1lBRUEsSUFBQSxHQUFPO0FBVE47QUFEVCxlQVdTLEdBWFQ7WUFhUSxLQUFBLEdBQVEsSUFBQyxDQUFBLFlBQUQsQ0FBYyxPQUFkLEVBQXVCLE9BQXZCO1lBQ1AsSUFBSyxRQUFMO1lBSUQsSUFBRyxNQUFPLENBQUEsR0FBQSxDQUFQLEtBQWUsTUFBbEI7Y0FDSSxNQUFPLENBQUEsR0FBQSxDQUFQLEdBQWMsTUFEbEI7O1lBRUEsSUFBQSxHQUFPO0FBVE47QUFYVCxlQXFCUyxHQXJCVDtBQUFBLGVBcUJjLEdBckJkO0FBQUEsZUFxQm1CLElBckJuQjtBQXFCbUI7QUFyQm5CO1lBd0JRLEtBQUEsR0FBUSxJQUFDLENBQUEsV0FBRCxDQUFhLE9BQWIsRUFBc0IsQ0FBQyxHQUFELEVBQU0sR0FBTixDQUF0QixFQUFrQyxDQUFDLEdBQUQsRUFBTSxHQUFOLENBQWxDLEVBQThDLE9BQTlDO1lBQ1AsSUFBSyxRQUFMO1lBSUQsSUFBRyxNQUFPLENBQUEsR0FBQSxDQUFQLEtBQWUsTUFBbEI7Y0FDSSxNQUFPLENBQUEsR0FBQSxDQUFQLEdBQWMsTUFEbEI7O1lBRUEsSUFBQSxHQUFPO1lBQ1AsRUFBRTtBQWhDVjtRQWtDQSxFQUFFO1FBRUYsSUFBRyxJQUFIO0FBQ0ksZ0JBREo7O01BdENKO0lBckJKO0FBOERBLFVBQVUsSUFBQSxTQUFBLENBQVUsK0JBQUEsR0FBZ0MsT0FBMUM7RUF0RUM7O0VBK0VmLE1BQUMsQ0FBQSxjQUFELEdBQWlCLFNBQUMsTUFBRCxFQUFTLE9BQVQ7QUFDYixRQUFBO0lBQUEsTUFBQSxHQUFTLEtBQUssQ0FBQyxJQUFOLENBQVcsTUFBWDtJQUNULFdBQUEsR0FBYyxNQUFNLENBQUMsV0FBUCxDQUFBO0FBRWQsWUFBTyxXQUFQO0FBQUEsV0FDUyxNQURUO0FBQUEsV0FDaUIsRUFEakI7QUFBQSxXQUNxQixHQURyQjtBQUVRLGVBQU87QUFGZixXQUdTLE1BSFQ7QUFJUSxlQUFPO0FBSmYsV0FLUyxPQUxUO0FBTVEsZUFBTztBQU5mLFdBT1MsTUFQVDtBQVFRLGVBQU87QUFSZixXQVNTLE1BVFQ7QUFVUSxlQUFPO0FBVmYsV0FXUyxPQVhUO0FBWVEsZUFBTztBQVpmO1FBY1EsU0FBQSxHQUFZLFdBQVcsQ0FBQyxNQUFaLENBQW1CLENBQW5CO0FBQ1osZ0JBQU8sU0FBUDtBQUFBLGVBQ1MsR0FEVDtZQUVRLFVBQUEsR0FBYSxNQUFNLENBQUMsT0FBUCxDQUFlLEdBQWY7WUFDYixJQUFHLFVBQUEsS0FBYyxDQUFDLENBQWxCO2NBQ0ksU0FBQSxHQUFZLFlBRGhCO2FBQUEsTUFBQTtjQUdJLFNBQUEsR0FBWSxXQUFZLHNCQUg1Qjs7QUFJQSxvQkFBTyxTQUFQO0FBQUEsbUJBQ1MsR0FEVDtnQkFFUSxJQUFHLFVBQUEsS0FBZ0IsQ0FBQyxDQUFwQjtBQUNJLHlCQUFPLFFBQUEsQ0FBUyxJQUFDLENBQUEsV0FBRCxDQUFhLE1BQU8sU0FBcEIsQ0FBVCxFQURYOztBQUVBLHVCQUFPO0FBSmYsbUJBS1MsTUFMVDtBQU1RLHVCQUFPLEtBQUssQ0FBQyxLQUFOLENBQVksTUFBTyxTQUFuQjtBQU5mLG1CQU9TLE9BUFQ7QUFRUSx1QkFBTyxLQUFLLENBQUMsS0FBTixDQUFZLE1BQU8sU0FBbkI7QUFSZixtQkFTUyxPQVRUO0FBVVEsdUJBQU8sUUFBQSxDQUFTLElBQUMsQ0FBQSxXQUFELENBQWEsTUFBTyxTQUFwQixDQUFUO0FBVmYsbUJBV1MsUUFYVDtBQVlRLHVCQUFPLEtBQUssQ0FBQyxZQUFOLENBQW1CLElBQUMsQ0FBQSxXQUFELENBQWEsTUFBTyxTQUFwQixDQUFuQixFQUE4QyxLQUE5QztBQVpmLG1CQWFTLFNBYlQ7QUFjUSx1QkFBTyxVQUFBLENBQVcsSUFBQyxDQUFBLFdBQUQsQ0FBYSxNQUFPLFNBQXBCLENBQVg7QUFkZixtQkFlUyxhQWZUO0FBZ0JRLHVCQUFPLEtBQUssQ0FBQyxZQUFOLENBQW1CLEtBQUssQ0FBQyxLQUFOLENBQVksTUFBTyxVQUFuQixDQUFuQjtBQWhCZjtnQkFrQlEsSUFBTyxlQUFQO2tCQUNJLE9BQUEsR0FBVTtvQkFBQSxzQkFBQSxFQUF3QixJQUFDLENBQUEsUUFBUSxDQUFDLHNCQUFsQztvQkFBMEQsYUFBQSxFQUFlLElBQUMsQ0FBQSxRQUFRLENBQUMsYUFBbkY7b0JBQWtHLENBQUEsRUFBRyxDQUFyRztvQkFEZDs7Z0JBRUMsd0JBQUEsYUFBRCxFQUFnQixpQ0FBQTtnQkFFaEIsSUFBRyxhQUFIO2tCQUVJLGFBQUEsR0FBZ0IsS0FBSyxDQUFDLEtBQU4sQ0FBWSxNQUFaO2tCQUNoQixVQUFBLEdBQWEsYUFBYSxDQUFDLE9BQWQsQ0FBc0IsR0FBdEI7a0JBQ2IsSUFBRyxVQUFBLEtBQWMsQ0FBQyxDQUFsQjtBQUNJLDJCQUFPLGFBQUEsQ0FBYyxhQUFkLEVBQTZCLElBQTdCLEVBRFg7bUJBQUEsTUFBQTtvQkFHSSxRQUFBLEdBQVcsS0FBSyxDQUFDLEtBQU4sQ0FBWSxhQUFjLHNCQUExQjtvQkFDWCxJQUFBLENBQUEsQ0FBTyxRQUFRLENBQUMsTUFBVCxHQUFrQixDQUF6QixDQUFBO3NCQUNJLFFBQUEsR0FBVyxLQURmOztBQUVBLDJCQUFPLGFBQUEsQ0FBYyxhQUFjLHFCQUE1QixFQUE2QyxRQUE3QyxFQU5YO21CQUpKOztnQkFZQSxJQUFHLHNCQUFIO0FBQ0ksd0JBQVUsSUFBQSxjQUFBLENBQWUsbUVBQWYsRUFEZDs7QUFHQSx1QkFBTztBQXJDZjtBQU5DO0FBRFQsZUE2Q1MsR0E3Q1Q7WUE4Q1EsSUFBRyxJQUFBLEtBQVEsTUFBTyxZQUFsQjtBQUNJLHFCQUFPLEtBQUssQ0FBQyxNQUFOLENBQWEsTUFBYixFQURYO2FBQUEsTUFFSyxJQUFHLEtBQUssQ0FBQyxRQUFOLENBQWUsTUFBZixDQUFIO0FBQ0QscUJBQU8sS0FBSyxDQUFDLE1BQU4sQ0FBYSxNQUFiLEVBRE47YUFBQSxNQUVBLElBQUcsS0FBSyxDQUFDLFNBQU4sQ0FBZ0IsTUFBaEIsQ0FBSDtBQUNELHFCQUFPLFVBQUEsQ0FBVyxNQUFYLEVBRE47YUFBQSxNQUFBO0FBR0QscUJBQU8sT0FITjs7QUFMSjtBQTdDVCxlQXNEUyxHQXREVDtZQXVEUSxJQUFHLEtBQUssQ0FBQyxRQUFOLENBQWUsTUFBZixDQUFIO2NBQ0ksR0FBQSxHQUFNO2NBQ04sSUFBQSxHQUFPLFFBQUEsQ0FBUyxHQUFUO2NBQ1AsSUFBRyxHQUFBLEtBQU8sTUFBQSxDQUFPLElBQVAsQ0FBVjtBQUNJLHVCQUFPLEtBRFg7ZUFBQSxNQUFBO0FBR0ksdUJBQU8sSUFIWDtlQUhKO2FBQUEsTUFPSyxJQUFHLEtBQUssQ0FBQyxTQUFOLENBQWdCLE1BQWhCLENBQUg7QUFDRCxxQkFBTyxVQUFBLENBQVcsTUFBWCxFQUROO2FBQUEsTUFFQSxJQUFHLElBQUMsQ0FBQSwrQkFBK0IsQ0FBQyxJQUFqQyxDQUFzQyxNQUF0QyxDQUFIO0FBQ0QscUJBQU8sVUFBQSxDQUFXLE1BQU0sQ0FBQyxPQUFQLENBQWUsR0FBZixFQUFvQixFQUFwQixDQUFYLEVBRE47O0FBRUwsbUJBQU87QUFsRWYsZUFtRVMsR0FuRVQ7WUFvRVEsSUFBRyxLQUFLLENBQUMsUUFBTixDQUFlLE1BQU8sU0FBdEIsQ0FBSDtjQUNJLElBQUcsR0FBQSxLQUFPLE1BQU0sQ0FBQyxNQUFQLENBQWMsQ0FBZCxDQUFWO0FBQ0ksdUJBQU8sQ0FBQyxLQUFLLENBQUMsTUFBTixDQUFhLE1BQU8sU0FBcEIsRUFEWjtlQUFBLE1BQUE7Z0JBR0ksR0FBQSxHQUFNLE1BQU87Z0JBQ2IsSUFBQSxHQUFPLFFBQUEsQ0FBUyxHQUFUO2dCQUNQLElBQUcsR0FBQSxLQUFPLE1BQUEsQ0FBTyxJQUFQLENBQVY7QUFDSSx5QkFBTyxDQUFDLEtBRFo7aUJBQUEsTUFBQTtBQUdJLHlCQUFPLENBQUMsSUFIWjtpQkFMSjtlQURKO2FBQUEsTUFVSyxJQUFHLEtBQUssQ0FBQyxTQUFOLENBQWdCLE1BQWhCLENBQUg7QUFDRCxxQkFBTyxVQUFBLENBQVcsTUFBWCxFQUROO2FBQUEsTUFFQSxJQUFHLElBQUMsQ0FBQSwrQkFBK0IsQ0FBQyxJQUFqQyxDQUFzQyxNQUF0QyxDQUFIO0FBQ0QscUJBQU8sVUFBQSxDQUFXLE1BQU0sQ0FBQyxPQUFQLENBQWUsR0FBZixFQUFvQixFQUFwQixDQUFYLEVBRE47O0FBRUwsbUJBQU87QUFsRmY7WUFvRlEsSUFBRyxJQUFBLEdBQU8sS0FBSyxDQUFDLFlBQU4sQ0FBbUIsTUFBbkIsQ0FBVjtBQUNJLHFCQUFPLEtBRFg7YUFBQSxNQUVLLElBQUcsS0FBSyxDQUFDLFNBQU4sQ0FBZ0IsTUFBaEIsQ0FBSDtBQUNELHFCQUFPLFVBQUEsQ0FBVyxNQUFYLEVBRE47YUFBQSxNQUVBLElBQUcsSUFBQyxDQUFBLCtCQUErQixDQUFDLElBQWpDLENBQXNDLE1BQXRDLENBQUg7QUFDRCxxQkFBTyxVQUFBLENBQVcsTUFBTSxDQUFDLE9BQVAsQ0FBZSxHQUFmLEVBQW9CLEVBQXBCLENBQVgsRUFETjs7QUFFTCxtQkFBTztBQTFGZjtBQWZSO0VBSmE7Ozs7OztBQStHckIsTUFBTSxDQUFDLE9BQVAsR0FBaUI7Ozs7QUN0ZWpCLElBQUE7O0FBQUEsTUFBQSxHQUFrQixPQUFBLENBQVEsVUFBUjs7QUFDbEIsT0FBQSxHQUFrQixPQUFBLENBQVEsV0FBUjs7QUFDbEIsS0FBQSxHQUFrQixPQUFBLENBQVEsU0FBUjs7QUFDbEIsY0FBQSxHQUFrQixPQUFBLENBQVEsNEJBQVI7O0FBQ2xCLFNBQUEsR0FBa0IsT0FBQSxDQUFRLHVCQUFSOztBQUlaO21CQUlGLHlCQUFBLEdBQTRDLElBQUEsT0FBQSxDQUFRLGdJQUFSOzttQkFDNUMseUJBQUEsR0FBNEMsSUFBQSxPQUFBLENBQVEsb0dBQVI7O21CQUM1QyxxQkFBQSxHQUE0QyxJQUFBLE9BQUEsQ0FBUSw4Q0FBUjs7bUJBQzVDLG9CQUFBLEdBQTRDLElBQUEsT0FBQSxDQUFRLCtCQUFSOzttQkFDNUMsd0JBQUEsR0FBNEMsSUFBQSxPQUFBLENBQVEsVUFBQSxHQUFXLE1BQU0sQ0FBQyxtQkFBbEIsR0FBc0Msa0RBQTlDOzttQkFDNUMsb0JBQUEsR0FBNEMsSUFBQSxPQUFBLENBQVEsVUFBQSxHQUFXLE1BQU0sQ0FBQyxtQkFBbEIsR0FBc0Msa0RBQTlDOzttQkFDNUMsZUFBQSxHQUE0QyxJQUFBLE9BQUEsQ0FBUSxNQUFSOzttQkFDNUMscUJBQUEsR0FBNEMsSUFBQSxPQUFBLENBQVEsS0FBUjs7bUJBQzVDLHNCQUFBLEdBQTRDLElBQUEsT0FBQSxDQUFRLFFBQVI7O21CQUM1QyxtQkFBQSxHQUE0QyxJQUFBLE9BQUEsQ0FBUSwyQkFBUixFQUFxQyxHQUFyQzs7bUJBQzVDLHdCQUFBLEdBQTRDLElBQUEsT0FBQSxDQUFRLGNBQVIsRUFBd0IsR0FBeEI7O21CQUM1Qyw2QkFBQSxHQUE0QyxJQUFBLE9BQUEsQ0FBUSxpQkFBUixFQUEyQixHQUEzQjs7bUJBQzVDLDJCQUFBLEdBQTRDLElBQUEsT0FBQSxDQUFRLGlCQUFSLEVBQTJCLEdBQTNCOzttQkFDNUMsb0NBQUEsR0FBd0M7O21CQUl4QyxZQUFBLEdBQW9COzttQkFDcEIsZ0JBQUEsR0FBb0I7O21CQUNwQixlQUFBLEdBQW9COztFQU9QLGdCQUFDLE1BQUQ7SUFBQyxJQUFDLENBQUEsMEJBQUQsU0FBVTtJQUNwQixJQUFDLENBQUEsS0FBRCxHQUFrQjtJQUNsQixJQUFDLENBQUEsYUFBRCxHQUFrQixDQUFDO0lBQ25CLElBQUMsQ0FBQSxXQUFELEdBQWtCO0lBQ2xCLElBQUMsQ0FBQSxJQUFELEdBQWtCO0VBSlQ7O21CQWlCYixLQUFBLEdBQU8sU0FBQyxLQUFELEVBQVEsc0JBQVIsRUFBd0MsYUFBeEM7QUFDSCxRQUFBOztNQURXLHlCQUF5Qjs7O01BQU8sZ0JBQWdCOztJQUMzRCxJQUFDLENBQUEsYUFBRCxHQUFpQixDQUFDO0lBQ2xCLElBQUMsQ0FBQSxXQUFELEdBQWU7SUFDZixJQUFDLENBQUEsS0FBRCxHQUFTLElBQUMsQ0FBQSxPQUFELENBQVMsS0FBVCxDQUFlLENBQUMsS0FBaEIsQ0FBc0IsSUFBdEI7SUFFVCxJQUFBLEdBQU87SUFDUCxPQUFBLEdBQVUsSUFBQyxDQUFBO0lBQ1gsY0FBQSxHQUFpQjtBQUNqQixXQUFNLElBQUMsQ0FBQSxjQUFELENBQUEsQ0FBTjtNQUNJLElBQUcsSUFBQyxDQUFBLGtCQUFELENBQUEsQ0FBSDtBQUNJLGlCQURKOztNQUlBLElBQUcsSUFBQSxLQUFRLElBQUMsQ0FBQSxXQUFZLENBQUEsQ0FBQSxDQUF4QjtBQUNJLGNBQVUsSUFBQSxjQUFBLENBQWUsaURBQWYsRUFBa0UsSUFBQyxDQUFBLG9CQUFELENBQUEsQ0FBQSxHQUEwQixDQUE1RixFQUErRixJQUFDLENBQUEsV0FBaEcsRUFEZDs7TUFHQSxLQUFBLEdBQVEsU0FBQSxHQUFZO01BQ3BCLElBQUcsTUFBQSxHQUFTLElBQUMsQ0FBQSxxQkFBcUIsQ0FBQyxJQUF2QixDQUE0QixJQUFDLENBQUEsV0FBN0IsQ0FBWjtRQUNJLElBQUcsSUFBQyxDQUFBLGVBQUQsS0FBb0IsT0FBdkI7QUFDSSxnQkFBVSxJQUFBLGNBQUEsQ0FBZSxxREFBZixFQURkOztRQUVBLE9BQUEsR0FBVSxJQUFDLENBQUE7O1VBQ1gsT0FBUTs7UUFFUixJQUFHLHNCQUFBLElBQWtCLENBQUEsT0FBQSxHQUFVLElBQUMsQ0FBQSxvQkFBb0IsQ0FBQyxJQUF0QixDQUEyQixNQUFNLENBQUMsS0FBbEMsQ0FBVixDQUFyQjtVQUNJLEtBQUEsR0FBUSxPQUFPLENBQUM7VUFDaEIsTUFBTSxDQUFDLEtBQVAsR0FBZSxPQUFPLENBQUMsTUFGM0I7O1FBS0EsSUFBRyxDQUFHLENBQUMsb0JBQUQsQ0FBSCxJQUFzQixFQUFBLEtBQU0sS0FBSyxDQUFDLElBQU4sQ0FBVyxNQUFNLENBQUMsS0FBbEIsRUFBeUIsR0FBekIsQ0FBNUIsSUFBNkQsS0FBSyxDQUFDLEtBQU4sQ0FBWSxNQUFNLENBQUMsS0FBbkIsRUFBMEIsR0FBMUIsQ0FBOEIsQ0FBQyxPQUEvQixDQUF1QyxHQUF2QyxDQUFBLEtBQStDLENBQS9HO1VBQ0ksSUFBRyxJQUFDLENBQUEsYUFBRCxHQUFpQixJQUFDLENBQUEsS0FBSyxDQUFDLE1BQVAsR0FBZ0IsQ0FBakMsSUFBdUMsQ0FBSSxJQUFDLENBQUEsOEJBQUQsQ0FBQSxDQUE5QztZQUNJLENBQUEsR0FBSSxJQUFDLENBQUEsb0JBQUQsQ0FBQSxDQUFBLEdBQTBCO1lBQzlCLE1BQUEsR0FBYSxJQUFBLE1BQUEsQ0FBTyxDQUFQO1lBQ2IsTUFBTSxDQUFDLElBQVAsR0FBYyxJQUFDLENBQUE7WUFDZixJQUFJLENBQUMsSUFBTCxDQUFVLE1BQU0sQ0FBQyxLQUFQLENBQWEsSUFBQyxDQUFBLGlCQUFELENBQW1CLElBQW5CLEVBQXlCLElBQXpCLENBQWIsRUFBNkMsc0JBQTdDLEVBQXFFLGFBQXJFLENBQVYsRUFKSjtXQUFBLE1BQUE7WUFNSSxJQUFJLENBQUMsSUFBTCxDQUFVLElBQVYsRUFOSjtXQURKO1NBQUEsTUFBQTtVQVVJLDRDQUFvQixDQUFFLGdCQUFuQixJQUE4QixDQUFBLE9BQUEsR0FBVSxJQUFDLENBQUEsd0JBQXdCLENBQUMsSUFBMUIsQ0FBK0IsTUFBTSxDQUFDLEtBQXRDLENBQVYsQ0FBakM7WUFHSSxDQUFBLEdBQUksSUFBQyxDQUFBLG9CQUFELENBQUE7WUFDSixNQUFBLEdBQWEsSUFBQSxNQUFBLENBQU8sQ0FBUDtZQUNiLE1BQU0sQ0FBQyxJQUFQLEdBQWMsSUFBQyxDQUFBO1lBRWYsS0FBQSxHQUFRLE1BQU0sQ0FBQztZQUNmLE1BQUEsR0FBUyxJQUFDLENBQUEseUJBQUQsQ0FBQTtZQUNULElBQUcsSUFBQyxDQUFBLGtCQUFELENBQW9CLEtBQXBCLENBQUg7Y0FDSSxLQUFBLElBQVMsSUFBQSxHQUFLLElBQUMsQ0FBQSxpQkFBRCxDQUFtQixNQUFBLEdBQVMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUEzQixHQUFvQyxDQUF2RCxFQUEwRCxJQUExRCxFQURsQjs7WUFHQSxJQUFJLENBQUMsSUFBTCxDQUFVLE1BQU0sQ0FBQyxLQUFQLENBQWEsS0FBYixFQUFvQixzQkFBcEIsRUFBNEMsYUFBNUMsQ0FBVixFQVpKO1dBQUEsTUFBQTtZQWVJLElBQUksQ0FBQyxJQUFMLENBQVUsSUFBQyxDQUFBLFVBQUQsQ0FBWSxNQUFNLENBQUMsS0FBbkIsRUFBMEIsc0JBQTFCLEVBQWtELGFBQWxELENBQVYsRUFmSjtXQVZKO1NBWEo7T0FBQSxNQXNDSyxJQUFHLENBQUMsTUFBQSxHQUFTLElBQUMsQ0FBQSxvQkFBb0IsQ0FBQyxJQUF0QixDQUEyQixJQUFDLENBQUEsV0FBNUIsQ0FBVixDQUFBLElBQXVELE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBWCxDQUFtQixJQUFuQixDQUFBLEtBQTRCLENBQUMsQ0FBdkY7UUFDRCxJQUFHLElBQUMsQ0FBQSxnQkFBRCxLQUFxQixPQUF4QjtBQUNJLGdCQUFVLElBQUEsY0FBQSxDQUFlLHFEQUFmLEVBRGQ7O1FBRUEsT0FBQSxHQUFVLElBQUMsQ0FBQTs7VUFDWCxPQUFROztRQUdSLE1BQU0sQ0FBQyxTQUFQLENBQWlCLHNCQUFqQixFQUF5QyxhQUF6QztBQUNBO1VBQ0ksR0FBQSxHQUFNLE1BQU0sQ0FBQyxXQUFQLENBQW1CLE1BQU0sQ0FBQyxHQUExQixFQURWO1NBQUEsYUFBQTtVQUVNO1VBQ0YsQ0FBQyxDQUFDLFVBQUYsR0FBZSxJQUFDLENBQUEsb0JBQUQsQ0FBQSxDQUFBLEdBQTBCO1VBQ3pDLENBQUMsQ0FBQyxPQUFGLEdBQVksSUFBQyxDQUFBO0FBRWIsZ0JBQU0sRUFOVjs7UUFRQSxJQUFHLElBQUEsS0FBUSxHQUFYO1VBQ0ksU0FBQSxHQUFZO1VBQ1osY0FBQSxHQUFpQjtVQUNqQix5Q0FBZSxDQUFFLE9BQWQsQ0FBc0IsR0FBdEIsV0FBQSxLQUE4QixDQUFqQztZQUNJLE9BQUEsR0FBVSxNQUFNLENBQUMsS0FBTTtZQUN2QixJQUFPLDBCQUFQO0FBQ0ksb0JBQVUsSUFBQSxjQUFBLENBQWUsYUFBQSxHQUFjLE9BQWQsR0FBc0IsbUJBQXJDLEVBQTBELElBQUMsQ0FBQSxvQkFBRCxDQUFBLENBQUEsR0FBMEIsQ0FBcEYsRUFBdUYsSUFBQyxDQUFBLFdBQXhGLEVBRGQ7O1lBR0EsUUFBQSxHQUFXLElBQUMsQ0FBQSxJQUFLLENBQUEsT0FBQTtZQUVqQixJQUFHLE9BQU8sUUFBUCxLQUFxQixRQUF4QjtBQUNJLG9CQUFVLElBQUEsY0FBQSxDQUFlLGdFQUFmLEVBQWlGLElBQUMsQ0FBQSxvQkFBRCxDQUFBLENBQUEsR0FBMEIsQ0FBM0csRUFBOEcsSUFBQyxDQUFBLFdBQS9HLEVBRGQ7O1lBR0EsSUFBRyxRQUFBLFlBQW9CLEtBQXZCO0FBRUksbUJBQUEsa0RBQUE7OztrQkFDSSxhQUFtQjs7QUFEdkIsZUFGSjthQUFBLE1BQUE7QUFNSSxtQkFBQSxlQUFBOzs7a0JBQ0ksSUFBSyxDQUFBLEdBQUEsSUFBUTs7QUFEakIsZUFOSjthQVZKO1dBQUEsTUFBQTtZQW9CSSxJQUFHLHNCQUFBLElBQWtCLE1BQU0sQ0FBQyxLQUFQLEtBQWtCLEVBQXZDO2NBQ0ksS0FBQSxHQUFRLE1BQU0sQ0FBQyxNQURuQjthQUFBLE1BQUE7Y0FHSSxLQUFBLEdBQVEsSUFBQyxDQUFBLGlCQUFELENBQUEsRUFIWjs7WUFLQSxDQUFBLEdBQUksSUFBQyxDQUFBLG9CQUFELENBQUEsQ0FBQSxHQUEwQjtZQUM5QixNQUFBLEdBQWEsSUFBQSxNQUFBLENBQU8sQ0FBUDtZQUNiLE1BQU0sQ0FBQyxJQUFQLEdBQWMsSUFBQyxDQUFBO1lBQ2YsTUFBQSxHQUFTLE1BQU0sQ0FBQyxLQUFQLENBQWEsS0FBYixFQUFvQixzQkFBcEI7WUFFVCxJQUFPLE9BQU8sTUFBUCxLQUFpQixRQUF4QjtBQUNJLG9CQUFVLElBQUEsY0FBQSxDQUFlLGdFQUFmLEVBQWlGLElBQUMsQ0FBQSxvQkFBRCxDQUFBLENBQUEsR0FBMEIsQ0FBM0csRUFBOEcsSUFBQyxDQUFBLFdBQS9HLEVBRGQ7O1lBR0EsSUFBRyxNQUFBLFlBQWtCLEtBQXJCO0FBSUksbUJBQUEsMENBQUE7O2dCQUNJLElBQU8sT0FBTyxVQUFQLEtBQXFCLFFBQTVCO0FBQ0ksd0JBQVUsSUFBQSxjQUFBLENBQWUsOEJBQWYsRUFBK0MsSUFBQyxDQUFBLG9CQUFELENBQUEsQ0FBQSxHQUEwQixDQUF6RSxFQUE0RSxVQUE1RSxFQURkOztnQkFHQSxJQUFHLFVBQUEsWUFBc0IsS0FBekI7QUFFSSx1QkFBQSxzREFBQTs7b0JBQ0ksQ0FBQSxHQUFJLE1BQUEsQ0FBTyxDQUFQO29CQUNKLElBQUEsQ0FBTyxJQUFJLENBQUMsY0FBTCxDQUFvQixDQUFwQixDQUFQO3NCQUNJLElBQUssQ0FBQSxDQUFBLENBQUwsR0FBVSxNQURkOztBQUZKLG1CQUZKO2lCQUFBLE1BQUE7QUFRSSx1QkFBQSxpQkFBQTs7b0JBQ0ksSUFBQSxDQUFPLElBQUksQ0FBQyxjQUFMLENBQW9CLEdBQXBCLENBQVA7c0JBQ0ksSUFBSyxDQUFBLEdBQUEsQ0FBTCxHQUFZLE1BRGhCOztBQURKLG1CQVJKOztBQUpKLGVBSko7YUFBQSxNQUFBO0FBdUJJLG1CQUFBLGFBQUE7O2dCQUNJLElBQUEsQ0FBTyxJQUFJLENBQUMsY0FBTCxDQUFvQixHQUFwQixDQUFQO2tCQUNJLElBQUssQ0FBQSxHQUFBLENBQUwsR0FBWSxNQURoQjs7QUFESixlQXZCSjthQWpDSjtXQUhKO1NBQUEsTUErREssSUFBRyxzQkFBQSxJQUFrQixDQUFBLE9BQUEsR0FBVSxJQUFDLENBQUEsb0JBQW9CLENBQUMsSUFBdEIsQ0FBMkIsTUFBTSxDQUFDLEtBQWxDLENBQVYsQ0FBckI7VUFDRCxLQUFBLEdBQVEsT0FBTyxDQUFDO1VBQ2hCLE1BQU0sQ0FBQyxLQUFQLEdBQWUsT0FBTyxDQUFDLE1BRnRCOztRQUtMLElBQUcsU0FBSDtBQUFBO1NBQUEsTUFFSyxJQUFHLENBQUcsQ0FBQyxvQkFBRCxDQUFILElBQXNCLEVBQUEsS0FBTSxLQUFLLENBQUMsSUFBTixDQUFXLE1BQU0sQ0FBQyxLQUFsQixFQUF5QixHQUF6QixDQUE1QixJQUE2RCxLQUFLLENBQUMsS0FBTixDQUFZLE1BQU0sQ0FBQyxLQUFuQixFQUEwQixHQUExQixDQUE4QixDQUFDLE9BQS9CLENBQXVDLEdBQXZDLENBQUEsS0FBK0MsQ0FBL0c7VUFHRCxJQUFHLENBQUcsQ0FBQyxJQUFDLENBQUEsa0JBQUQsQ0FBQSxDQUFELENBQUgsSUFBK0IsQ0FBRyxDQUFDLElBQUMsQ0FBQSw4QkFBRCxDQUFBLENBQUQsQ0FBckM7WUFHSSxJQUFHLGNBQUEsSUFBa0IsSUFBSyxDQUFBLEdBQUEsQ0FBTCxLQUFhLE1BQWxDO2NBQ0ksSUFBSyxDQUFBLEdBQUEsQ0FBTCxHQUFZLEtBRGhCO2FBSEo7V0FBQSxNQUFBO1lBT0ksQ0FBQSxHQUFJLElBQUMsQ0FBQSxvQkFBRCxDQUFBLENBQUEsR0FBMEI7WUFDOUIsTUFBQSxHQUFhLElBQUEsTUFBQSxDQUFPLENBQVA7WUFDYixNQUFNLENBQUMsSUFBUCxHQUFjLElBQUMsQ0FBQTtZQUNmLEdBQUEsR0FBTSxNQUFNLENBQUMsS0FBUCxDQUFhLElBQUMsQ0FBQSxpQkFBRCxDQUFBLENBQWIsRUFBbUMsc0JBQW5DLEVBQTJELGFBQTNEO1lBSU4sSUFBRyxjQUFBLElBQWtCLElBQUssQ0FBQSxHQUFBLENBQUwsS0FBYSxNQUFsQztjQUNJLElBQUssQ0FBQSxHQUFBLENBQUwsR0FBWSxJQURoQjthQWRKO1dBSEM7U0FBQSxNQUFBO1VBcUJELEdBQUEsR0FBTSxJQUFDLENBQUEsVUFBRCxDQUFZLE1BQU0sQ0FBQyxLQUFuQixFQUEwQixzQkFBMUIsRUFBa0QsYUFBbEQ7VUFJTixJQUFHLGNBQUEsSUFBa0IsSUFBSyxDQUFBLEdBQUEsQ0FBTCxLQUFhLE1BQWxDO1lBQ0ksSUFBSyxDQUFBLEdBQUEsQ0FBTCxHQUFZLElBRGhCO1dBekJDO1NBdEZKO09BQUEsTUFBQTtRQW9IRCxTQUFBLEdBQVksSUFBQyxDQUFBLEtBQUssQ0FBQztRQUNuQixJQUFHLENBQUEsS0FBSyxTQUFMLElBQWtCLENBQUMsQ0FBQSxLQUFLLFNBQUwsSUFBbUIsS0FBSyxDQUFDLE9BQU4sQ0FBYyxJQUFDLENBQUEsS0FBTSxDQUFBLENBQUEsQ0FBckIsQ0FBcEIsQ0FBckI7QUFDSTtZQUNJLEtBQUEsR0FBUSxNQUFNLENBQUMsS0FBUCxDQUFhLElBQUMsQ0FBQSxLQUFNLENBQUEsQ0FBQSxDQUFwQixFQUF3QixzQkFBeEIsRUFBZ0QsYUFBaEQsRUFEWjtXQUFBLGNBQUE7WUFFTTtZQUNGLENBQUMsQ0FBQyxVQUFGLEdBQWUsSUFBQyxDQUFBLG9CQUFELENBQUEsQ0FBQSxHQUEwQjtZQUN6QyxDQUFDLENBQUMsT0FBRixHQUFZLElBQUMsQ0FBQTtBQUViLGtCQUFNLEVBTlY7O1VBUUEsSUFBRyxPQUFPLEtBQVAsS0FBZ0IsUUFBbkI7WUFDSSxJQUFHLEtBQUEsWUFBaUIsS0FBcEI7Y0FDSSxLQUFBLEdBQVEsS0FBTSxDQUFBLENBQUEsRUFEbEI7YUFBQSxNQUFBO0FBR0ksbUJBQUEsWUFBQTtnQkFDSSxLQUFBLEdBQVEsS0FBTSxDQUFBLEdBQUE7QUFDZDtBQUZKLGVBSEo7O1lBT0EsSUFBRyxPQUFPLEtBQVAsS0FBZ0IsUUFBaEIsSUFBNkIsS0FBSyxDQUFDLE9BQU4sQ0FBYyxHQUFkLENBQUEsS0FBc0IsQ0FBdEQ7Y0FDSSxJQUFBLEdBQU87QUFDUCxtQkFBQSx5Q0FBQTs7Z0JBQ0ksSUFBSSxDQUFDLElBQUwsQ0FBVSxJQUFDLENBQUEsSUFBSyxDQUFBLEtBQU0sU0FBTixDQUFoQjtBQURKO2NBRUEsS0FBQSxHQUFRLEtBSlo7YUFSSjs7QUFjQSxpQkFBTyxNQXZCWDtTQUFBLE1BeUJLLFlBQUcsS0FBSyxDQUFDLEtBQU4sQ0FBWSxLQUFaLENBQWtCLENBQUMsTUFBbkIsQ0FBMEIsQ0FBMUIsRUFBQSxLQUFpQyxHQUFqQyxJQUFBLElBQUEsS0FBc0MsR0FBekM7QUFDRDtBQUNJLG1CQUFPLE1BQU0sQ0FBQyxLQUFQLENBQWEsS0FBYixFQUFvQixzQkFBcEIsRUFBNEMsYUFBNUMsRUFEWDtXQUFBLGNBQUE7WUFFTTtZQUNGLENBQUMsQ0FBQyxVQUFGLEdBQWUsSUFBQyxDQUFBLG9CQUFELENBQUEsQ0FBQSxHQUEwQjtZQUN6QyxDQUFDLENBQUMsT0FBRixHQUFZLElBQUMsQ0FBQTtBQUViLGtCQUFNLEVBTlY7V0FEQzs7QUFTTCxjQUFVLElBQUEsY0FBQSxDQUFlLGtCQUFmLEVBQW1DLElBQUMsQ0FBQSxvQkFBRCxDQUFBLENBQUEsR0FBMEIsQ0FBN0QsRUFBZ0UsSUFBQyxDQUFBLFdBQWpFLEVBdkpUOztNQXlKTCxJQUFHLEtBQUg7UUFDSSxJQUFHLElBQUEsWUFBZ0IsS0FBbkI7VUFDSSxJQUFDLENBQUEsSUFBSyxDQUFBLEtBQUEsQ0FBTixHQUFlLElBQUssQ0FBQSxJQUFJLENBQUMsTUFBTCxHQUFZLENBQVosRUFEeEI7U0FBQSxNQUFBO1VBR0ksT0FBQSxHQUFVO0FBQ1YsZUFBQSxXQUFBO1lBQ0ksT0FBQSxHQUFVO0FBRGQ7VUFFQSxJQUFDLENBQUEsSUFBSyxDQUFBLEtBQUEsQ0FBTixHQUFlLElBQUssQ0FBQSxPQUFBLEVBTnhCO1NBREo7O0lBeE1KO0lBa05BLElBQUcsS0FBSyxDQUFDLE9BQU4sQ0FBYyxJQUFkLENBQUg7QUFDSSxhQUFPLEtBRFg7S0FBQSxNQUFBO0FBR0ksYUFBTyxLQUhYOztFQTFORzs7bUJBcU9QLG9CQUFBLEdBQXNCLFNBQUE7QUFDbEIsV0FBTyxJQUFDLENBQUEsYUFBRCxHQUFpQixJQUFDLENBQUE7RUFEUDs7bUJBUXRCLHlCQUFBLEdBQTJCLFNBQUE7QUFDdkIsV0FBTyxJQUFDLENBQUEsV0FBVyxDQUFDLE1BQWIsR0FBc0IsS0FBSyxDQUFDLEtBQU4sQ0FBWSxJQUFDLENBQUEsV0FBYixFQUEwQixHQUExQixDQUE4QixDQUFDO0VBRHJDOzttQkFZM0IsaUJBQUEsR0FBbUIsU0FBQyxXQUFELEVBQXFCLDJCQUFyQjtBQUNmLFFBQUE7O01BRGdCLGNBQWM7OztNQUFNLDhCQUE4Qjs7SUFDbEUsSUFBQyxDQUFBLGNBQUQsQ0FBQTtJQUVBLElBQU8sbUJBQVA7TUFDSSxTQUFBLEdBQVksSUFBQyxDQUFBLHlCQUFELENBQUE7TUFFWixvQkFBQSxHQUF1QixJQUFDLENBQUEsZ0NBQUQsQ0FBa0MsSUFBQyxDQUFBLFdBQW5DO01BRXZCLElBQUcsQ0FBRyxDQUFDLElBQUMsQ0FBQSxrQkFBRCxDQUFBLENBQUQsQ0FBSCxJQUErQixDQUFBLEtBQUssU0FBcEMsSUFBa0QsQ0FBSSxvQkFBekQ7QUFDSSxjQUFVLElBQUEsY0FBQSxDQUFlLHNCQUFmLEVBQXVDLElBQUMsQ0FBQSxvQkFBRCxDQUFBLENBQUEsR0FBMEIsQ0FBakUsRUFBb0UsSUFBQyxDQUFBLFdBQXJFLEVBRGQ7T0FMSjtLQUFBLE1BQUE7TUFTSSxTQUFBLEdBQVksWUFUaEI7O0lBWUEsSUFBQSxHQUFPLENBQUMsSUFBQyxDQUFBLFdBQVksaUJBQWQ7SUFFUCxJQUFBLENBQU8sMkJBQVA7TUFDSSx3QkFBQSxHQUEyQixJQUFDLENBQUEsZ0NBQUQsQ0FBa0MsSUFBQyxDQUFBLFdBQW5DLEVBRC9COztJQUtBLHFCQUFBLEdBQXdCLElBQUMsQ0FBQTtJQUN6QixjQUFBLEdBQWlCLENBQUkscUJBQXFCLENBQUMsSUFBdEIsQ0FBMkIsSUFBQyxDQUFBLFdBQTVCO0FBRXJCLFdBQU0sSUFBQyxDQUFBLGNBQUQsQ0FBQSxDQUFOO01BQ0ksTUFBQSxHQUFTLElBQUMsQ0FBQSx5QkFBRCxDQUFBO01BRVQsSUFBRyxNQUFBLEtBQVUsU0FBYjtRQUNJLGNBQUEsR0FBaUIsQ0FBSSxxQkFBcUIsQ0FBQyxJQUF0QixDQUEyQixJQUFDLENBQUEsV0FBNUIsRUFEekI7O01BR0EsSUFBRyxjQUFBLElBQW1CLElBQUMsQ0FBQSxvQkFBRCxDQUFBLENBQXRCO0FBQ0ksaUJBREo7O01BR0EsSUFBRyxJQUFDLENBQUEsa0JBQUQsQ0FBQSxDQUFIO1FBQ0ksSUFBSSxDQUFDLElBQUwsQ0FBVSxJQUFDLENBQUEsV0FBWSxpQkFBdkI7QUFDQSxpQkFGSjs7TUFJQSxJQUFHLHdCQUFBLElBQTZCLENBQUksSUFBQyxDQUFBLGdDQUFELENBQWtDLElBQUMsQ0FBQSxXQUFuQyxDQUFqQyxJQUFxRixNQUFBLEtBQVUsU0FBbEc7UUFDSSxJQUFDLENBQUEsa0JBQUQsQ0FBQTtBQUNBLGNBRko7O01BSUEsSUFBRyxNQUFBLElBQVUsU0FBYjtRQUNJLElBQUksQ0FBQyxJQUFMLENBQVUsSUFBQyxDQUFBLFdBQVksaUJBQXZCLEVBREo7T0FBQSxNQUVLLElBQUcsS0FBSyxDQUFDLEtBQU4sQ0FBWSxJQUFDLENBQUEsV0FBYixDQUF5QixDQUFDLE1BQTFCLENBQWlDLENBQWpDLENBQUEsS0FBdUMsR0FBMUM7QUFBQTtPQUFBLE1BRUEsSUFBRyxDQUFBLEtBQUssTUFBUjtRQUNELElBQUMsQ0FBQSxrQkFBRCxDQUFBO0FBQ0EsY0FGQztPQUFBLE1BQUE7QUFJRCxjQUFVLElBQUEsY0FBQSxDQUFlLHNCQUFmLEVBQXVDLElBQUMsQ0FBQSxvQkFBRCxDQUFBLENBQUEsR0FBMEIsQ0FBakUsRUFBb0UsSUFBQyxDQUFBLFdBQXJFLEVBSlQ7O0lBckJUO0FBNEJBLFdBQU8sSUFBSSxDQUFDLElBQUwsQ0FBVSxJQUFWO0VBckRROzttQkE0RG5CLGNBQUEsR0FBZ0IsU0FBQTtJQUNaLElBQUcsSUFBQyxDQUFBLGFBQUQsSUFBa0IsSUFBQyxDQUFBLEtBQUssQ0FBQyxNQUFQLEdBQWdCLENBQXJDO0FBQ0ksYUFBTyxNQURYOztJQUdBLElBQUMsQ0FBQSxXQUFELEdBQWUsSUFBQyxDQUFBLEtBQU0sQ0FBQSxFQUFFLElBQUMsQ0FBQSxhQUFIO0FBRXRCLFdBQU87RUFOSzs7bUJBV2hCLGtCQUFBLEdBQW9CLFNBQUE7SUFDaEIsSUFBQyxDQUFBLFdBQUQsR0FBZSxJQUFDLENBQUEsS0FBTSxDQUFBLEVBQUUsSUFBQyxDQUFBLGFBQUg7RUFETjs7bUJBZXBCLFVBQUEsR0FBWSxTQUFDLEtBQUQsRUFBUSxzQkFBUixFQUFnQyxhQUFoQztBQUNSLFFBQUE7SUFBQSxJQUFHLENBQUEsS0FBSyxLQUFLLENBQUMsT0FBTixDQUFjLEdBQWQsQ0FBUjtNQUNJLEdBQUEsR0FBTSxLQUFLLENBQUMsT0FBTixDQUFjLEdBQWQ7TUFDTixJQUFHLEdBQUEsS0FBUyxDQUFDLENBQWI7UUFDSSxLQUFBLEdBQVEsS0FBSyxDQUFDLE1BQU4sQ0FBYSxDQUFiLEVBQWdCLEdBQUEsR0FBSSxDQUFwQixFQURaO09BQUEsTUFBQTtRQUdJLEtBQUEsR0FBUSxLQUFNLFVBSGxCOztNQUtBLElBQUcsSUFBQyxDQUFBLElBQUssQ0FBQSxLQUFBLENBQU4sS0FBZ0IsTUFBbkI7QUFDSSxjQUFVLElBQUEsY0FBQSxDQUFlLGFBQUEsR0FBYyxLQUFkLEdBQW9CLG1CQUFuQyxFQUF3RCxJQUFDLENBQUEsV0FBekQsRUFEZDs7QUFHQSxhQUFPLElBQUMsQ0FBQSxJQUFLLENBQUEsS0FBQSxFQVZqQjs7SUFhQSxJQUFHLE9BQUEsR0FBVSxJQUFDLENBQUEseUJBQXlCLENBQUMsSUFBM0IsQ0FBZ0MsS0FBaEMsQ0FBYjtNQUNJLFNBQUEsNkNBQWdDO01BRWhDLFlBQUEsR0FBZSxJQUFJLENBQUMsR0FBTCxDQUFTLFFBQUEsQ0FBUyxTQUFULENBQVQ7TUFDZixJQUFHLEtBQUEsQ0FBTSxZQUFOLENBQUg7UUFBNEIsWUFBQSxHQUFlLEVBQTNDOztNQUNBLEdBQUEsR0FBTSxJQUFDLENBQUEsaUJBQUQsQ0FBbUIsT0FBTyxDQUFDLFNBQTNCLEVBQXNDLElBQUMsQ0FBQSxlQUFlLENBQUMsT0FBakIsQ0FBeUIsU0FBekIsRUFBb0MsRUFBcEMsQ0FBdEMsRUFBK0UsWUFBL0U7TUFDTixJQUFHLG9CQUFIO1FBRUksTUFBTSxDQUFDLFNBQVAsQ0FBaUIsc0JBQWpCLEVBQXlDLGFBQXpDO0FBQ0EsZUFBTyxNQUFNLENBQUMsV0FBUCxDQUFtQixPQUFPLENBQUMsSUFBUixHQUFhLEdBQWIsR0FBaUIsR0FBcEMsRUFIWDtPQUFBLE1BQUE7QUFLSSxlQUFPLElBTFg7T0FOSjs7SUFjQSxZQUFHLEtBQUssQ0FBQyxNQUFOLENBQWEsQ0FBYixFQUFBLEtBQW9CLEdBQXBCLElBQUEsSUFBQSxLQUF5QixHQUF6QixJQUFBLElBQUEsS0FBOEIsR0FBOUIsSUFBQSxJQUFBLEtBQW1DLEdBQXRDO0FBQ0ksYUFBTSxJQUFOO0FBQ0k7QUFDSSxpQkFBTyxNQUFNLENBQUMsS0FBUCxDQUFhLEtBQWIsRUFBb0Isc0JBQXBCLEVBQTRDLGFBQTVDLEVBRFg7U0FBQSxhQUFBO1VBRU07VUFDRixJQUFHLENBQUEsWUFBYSxTQUFiLElBQTJCLElBQUMsQ0FBQSxjQUFELENBQUEsQ0FBOUI7WUFDSSxLQUFBLElBQVMsSUFBQSxHQUFPLEtBQUssQ0FBQyxJQUFOLENBQVcsSUFBQyxDQUFBLFdBQVosRUFBeUIsR0FBekIsRUFEcEI7V0FBQSxNQUFBO1lBR0ksQ0FBQyxDQUFDLFVBQUYsR0FBZSxJQUFDLENBQUEsb0JBQUQsQ0FBQSxDQUFBLEdBQTBCO1lBQ3pDLENBQUMsQ0FBQyxPQUFGLEdBQVksSUFBQyxDQUFBO0FBQ2Isa0JBQU0sRUFMVjtXQUhKOztNQURKLENBREo7S0FBQSxNQUFBO01BWUksSUFBRyxJQUFDLENBQUEsa0JBQUQsQ0FBQSxDQUFIO1FBQ0ksS0FBQSxJQUFTLElBQUEsR0FBTyxJQUFDLENBQUEsaUJBQUQsQ0FBQSxFQURwQjs7QUFFQSxhQUFPLE1BQU0sQ0FBQyxLQUFQLENBQWEsS0FBYixFQUFvQixzQkFBcEIsRUFBNEMsYUFBNUMsRUFkWDs7RUE1QlE7O21CQXVEWixpQkFBQSxHQUFtQixTQUFDLFNBQUQsRUFBWSxTQUFaLEVBQTRCLFdBQTVCO0FBQ2YsUUFBQTs7TUFEMkIsWUFBWTs7O01BQUksY0FBYzs7SUFDekQsTUFBQSxHQUFTLElBQUMsQ0FBQSxjQUFELENBQUE7SUFDVCxJQUFHLENBQUksTUFBUDtBQUNJLGFBQU8sR0FEWDs7SUFHQSxrQkFBQSxHQUFxQixJQUFDLENBQUEsa0JBQUQsQ0FBQTtJQUNyQixJQUFBLEdBQU87QUFHUCxXQUFNLE1BQUEsSUFBVyxrQkFBakI7TUFFSSxJQUFHLE1BQUEsR0FBUyxJQUFDLENBQUEsY0FBRCxDQUFBLENBQVo7UUFDSSxJQUFBLElBQVE7UUFDUixrQkFBQSxHQUFxQixJQUFDLENBQUEsa0JBQUQsQ0FBQSxFQUZ6Qjs7SUFGSjtJQVFBLElBQUcsQ0FBQSxLQUFLLFdBQVI7TUFDSSxJQUFHLE9BQUEsR0FBVSxJQUFDLENBQUEscUJBQXFCLENBQUMsSUFBdkIsQ0FBNEIsSUFBQyxDQUFBLFdBQTdCLENBQWI7UUFDSSxXQUFBLEdBQWMsT0FBUSxDQUFBLENBQUEsQ0FBRSxDQUFDLE9BRDdCO09BREo7O0lBS0EsSUFBRyxXQUFBLEdBQWMsQ0FBakI7TUFDSSxPQUFBLEdBQVUsSUFBQyxDQUFBLG9DQUFxQyxDQUFBLFdBQUE7TUFDaEQsSUFBTyxlQUFQO1FBQ0ksT0FBQSxHQUFjLElBQUEsT0FBQSxDQUFRLEtBQUEsR0FBTSxXQUFOLEdBQWtCLFFBQTFCO1FBQ2QsTUFBTSxDQUFBLFNBQUUsQ0FBQSxvQ0FBcUMsQ0FBQSxXQUFBLENBQTdDLEdBQTRELFFBRmhFOztBQUlBLGFBQU0sTUFBQSxJQUFXLENBQUMsa0JBQUEsSUFBc0IsQ0FBQSxPQUFBLEdBQVUsT0FBTyxDQUFDLElBQVIsQ0FBYSxJQUFDLENBQUEsV0FBZCxDQUFWLENBQXZCLENBQWpCO1FBQ0ksSUFBRyxrQkFBSDtVQUNJLElBQUEsSUFBUSxJQUFDLENBQUEsV0FBWSxvQkFEekI7U0FBQSxNQUFBO1VBR0ksSUFBQSxJQUFRLE9BQVEsQ0FBQSxDQUFBLEVBSHBCOztRQU1BLElBQUcsTUFBQSxHQUFTLElBQUMsQ0FBQSxjQUFELENBQUEsQ0FBWjtVQUNJLElBQUEsSUFBUTtVQUNSLGtCQUFBLEdBQXFCLElBQUMsQ0FBQSxrQkFBRCxDQUFBLEVBRnpCOztNQVBKLENBTko7S0FBQSxNQWlCSyxJQUFHLE1BQUg7TUFDRCxJQUFBLElBQVEsS0FEUDs7SUFJTCxJQUFHLE1BQUg7TUFDSSxJQUFDLENBQUEsa0JBQUQsQ0FBQSxFQURKOztJQUtBLElBQUcsR0FBQSxLQUFPLFNBQVY7TUFDSSxPQUFBLEdBQVU7QUFDVjtBQUFBLFdBQUEscUNBQUE7O1FBQ0ksSUFBRyxJQUFJLENBQUMsTUFBTCxLQUFlLENBQWYsSUFBb0IsSUFBSSxDQUFDLE1BQUwsQ0FBWSxDQUFaLENBQUEsS0FBa0IsR0FBekM7VUFDSSxPQUFBLEdBQVUsS0FBSyxDQUFDLEtBQU4sQ0FBWSxPQUFaLEVBQXFCLEdBQXJCLENBQUEsR0FBNEIsSUFBNUIsR0FBbUMsS0FEakQ7U0FBQSxNQUFBO1VBR0ksT0FBQSxJQUFXLElBQUEsR0FBTyxJQUh0Qjs7QUFESjtNQUtBLElBQUEsR0FBTyxRQVBYOztJQVNBLElBQUcsR0FBQSxLQUFTLFNBQVo7TUFFSSxJQUFBLEdBQU8sS0FBSyxDQUFDLEtBQU4sQ0FBWSxJQUFaLEVBRlg7O0lBS0EsSUFBRyxFQUFBLEtBQU0sU0FBVDtNQUNJLElBQUEsR0FBTyxJQUFDLENBQUEsc0JBQXNCLENBQUMsT0FBeEIsQ0FBZ0MsSUFBaEMsRUFBc0MsSUFBdEMsRUFEWDtLQUFBLE1BRUssSUFBRyxHQUFBLEtBQU8sU0FBVjtNQUNELElBQUEsR0FBTyxJQUFDLENBQUEsc0JBQXNCLENBQUMsT0FBeEIsQ0FBZ0MsSUFBaEMsRUFBc0MsRUFBdEMsRUFETjs7QUFHTCxXQUFPO0VBbkVROzttQkEwRW5CLGtCQUFBLEdBQW9CLFNBQUMsY0FBRDtBQUNoQixRQUFBOztNQURpQixpQkFBaUI7O0lBQ2xDLGtCQUFBLEdBQXFCLElBQUMsQ0FBQSx5QkFBRCxDQUFBO0lBQ3JCLEdBQUEsR0FBTSxDQUFJLElBQUMsQ0FBQSxjQUFELENBQUE7SUFFVixJQUFHLGNBQUg7QUFDSSxhQUFNLENBQUksR0FBSixJQUFhLElBQUMsQ0FBQSxrQkFBRCxDQUFBLENBQW5CO1FBQ0ksR0FBQSxHQUFNLENBQUksSUFBQyxDQUFBLGNBQUQsQ0FBQTtNQURkLENBREo7S0FBQSxNQUFBO0FBSUksYUFBTSxDQUFJLEdBQUosSUFBYSxJQUFDLENBQUEsa0JBQUQsQ0FBQSxDQUFuQjtRQUNJLEdBQUEsR0FBTSxDQUFJLElBQUMsQ0FBQSxjQUFELENBQUE7TUFEZCxDQUpKOztJQU9BLElBQUcsR0FBSDtBQUNJLGFBQU8sTUFEWDs7SUFHQSxHQUFBLEdBQU07SUFDTixJQUFHLElBQUMsQ0FBQSx5QkFBRCxDQUFBLENBQUEsR0FBK0Isa0JBQWxDO01BQ0ksR0FBQSxHQUFNLEtBRFY7O0lBR0EsSUFBQyxDQUFBLGtCQUFELENBQUE7QUFFQSxXQUFPO0VBcEJTOzttQkEyQnBCLGtCQUFBLEdBQW9CLFNBQUE7QUFDaEIsUUFBQTtJQUFBLFdBQUEsR0FBYyxLQUFLLENBQUMsSUFBTixDQUFXLElBQUMsQ0FBQSxXQUFaLEVBQXlCLEdBQXpCO0FBQ2QsV0FBTyxXQUFXLENBQUMsTUFBWixLQUFzQixDQUF0QixJQUEyQixXQUFXLENBQUMsTUFBWixDQUFtQixDQUFuQixDQUFBLEtBQXlCO0VBRjNDOzttQkFTcEIsa0JBQUEsR0FBb0IsU0FBQTtBQUNoQixXQUFPLEVBQUEsS0FBTSxLQUFLLENBQUMsSUFBTixDQUFXLElBQUMsQ0FBQSxXQUFaLEVBQXlCLEdBQXpCO0VBREc7O21CQVFwQixvQkFBQSxHQUFzQixTQUFBO0FBRWxCLFFBQUE7SUFBQSxZQUFBLEdBQWUsS0FBSyxDQUFDLEtBQU4sQ0FBWSxJQUFDLENBQUEsV0FBYixFQUEwQixHQUExQjtBQUVmLFdBQU8sWUFBWSxDQUFDLE1BQWIsQ0FBb0IsQ0FBcEIsQ0FBQSxLQUEwQjtFQUpmOzttQkFhdEIsT0FBQSxHQUFTLFNBQUMsS0FBRDtBQUNMLFFBQUE7SUFBQSxJQUFHLEtBQUssQ0FBQyxPQUFOLENBQWMsSUFBZCxDQUFBLEtBQXlCLENBQUMsQ0FBN0I7TUFDSSxLQUFBLEdBQVEsS0FBSyxDQUFDLEtBQU4sQ0FBWSxNQUFaLENBQW1CLENBQUMsSUFBcEIsQ0FBeUIsSUFBekIsQ0FBOEIsQ0FBQyxLQUEvQixDQUFxQyxJQUFyQyxDQUEwQyxDQUFDLElBQTNDLENBQWdELElBQWhELEVBRFo7O0lBSUEsS0FBQSxHQUFRO0lBQ1IsTUFBaUIsSUFBQyxDQUFBLG1CQUFtQixDQUFDLFVBQXJCLENBQWdDLEtBQWhDLEVBQXVDLEVBQXZDLENBQWpCLEVBQUMsY0FBRCxFQUFRO0lBQ1IsSUFBQyxDQUFBLE1BQUQsSUFBVztJQUdYLE9BQXdCLElBQUMsQ0FBQSx3QkFBd0IsQ0FBQyxVQUExQixDQUFxQyxLQUFyQyxFQUE0QyxFQUE1QyxFQUFnRCxDQUFoRCxDQUF4QixFQUFDLHNCQUFELEVBQWU7SUFDZixJQUFHLEtBQUEsS0FBUyxDQUFaO01BRUksSUFBQyxDQUFBLE1BQUQsSUFBVyxLQUFLLENBQUMsV0FBTixDQUFrQixLQUFsQixFQUF5QixJQUF6QixDQUFBLEdBQWlDLEtBQUssQ0FBQyxXQUFOLENBQWtCLFlBQWxCLEVBQWdDLElBQWhDO01BQzVDLEtBQUEsR0FBUSxhQUhaOztJQU1BLE9BQXdCLElBQUMsQ0FBQSw2QkFBNkIsQ0FBQyxVQUEvQixDQUEwQyxLQUExQyxFQUFpRCxFQUFqRCxFQUFxRCxDQUFyRCxDQUF4QixFQUFDLHNCQUFELEVBQWU7SUFDZixJQUFHLEtBQUEsS0FBUyxDQUFaO01BRUksSUFBQyxDQUFBLE1BQUQsSUFBVyxLQUFLLENBQUMsV0FBTixDQUFrQixLQUFsQixFQUF5QixJQUF6QixDQUFBLEdBQWlDLEtBQUssQ0FBQyxXQUFOLENBQWtCLFlBQWxCLEVBQWdDLElBQWhDO01BQzVDLEtBQUEsR0FBUTtNQUdSLEtBQUEsR0FBUSxJQUFDLENBQUEsMkJBQTJCLENBQUMsT0FBN0IsQ0FBcUMsS0FBckMsRUFBNEMsRUFBNUMsRUFOWjs7SUFTQSxLQUFBLEdBQVEsS0FBSyxDQUFDLEtBQU4sQ0FBWSxJQUFaO0lBQ1IsY0FBQSxHQUFpQixDQUFDO0FBQ2xCLFNBQUEsdUNBQUE7O01BQ0ksSUFBWSxLQUFLLENBQUMsSUFBTixDQUFXLElBQVgsRUFBaUIsR0FBakIsQ0FBcUIsQ0FBQyxNQUF0QixLQUFnQyxDQUE1QztBQUFBLGlCQUFBOztNQUNBLE1BQUEsR0FBUyxJQUFJLENBQUMsTUFBTCxHQUFjLEtBQUssQ0FBQyxLQUFOLENBQVksSUFBWixDQUFpQixDQUFDO01BQ3pDLElBQUcsY0FBQSxLQUFrQixDQUFDLENBQW5CLElBQXdCLE1BQUEsR0FBUyxjQUFwQztRQUNJLGNBQUEsR0FBaUIsT0FEckI7O0FBSEo7SUFLQSxJQUFHLGNBQUEsR0FBaUIsQ0FBcEI7QUFDSSxXQUFBLGlEQUFBOztRQUNJLEtBQU0sQ0FBQSxDQUFBLENBQU4sR0FBVyxJQUFLO0FBRHBCO01BRUEsS0FBQSxHQUFRLEtBQUssQ0FBQyxJQUFOLENBQVcsSUFBWCxFQUhaOztBQUtBLFdBQU87RUF2Q0Y7O21CQThDVCw4QkFBQSxHQUFnQyxTQUFDLGtCQUFEO0FBQzVCLFFBQUE7O01BRDZCLHFCQUFxQjs7O01BQ2xELHFCQUFzQixJQUFDLENBQUEseUJBQUQsQ0FBQTs7SUFDdEIsTUFBQSxHQUFTLElBQUMsQ0FBQSxjQUFELENBQUE7QUFFVCxXQUFNLE1BQUEsSUFBVyxJQUFDLENBQUEsa0JBQUQsQ0FBQSxDQUFqQjtNQUNJLE1BQUEsR0FBUyxJQUFDLENBQUEsY0FBRCxDQUFBO0lBRGI7SUFHQSxJQUFHLEtBQUEsS0FBUyxNQUFaO0FBQ0ksYUFBTyxNQURYOztJQUdBLEdBQUEsR0FBTTtJQUNOLElBQUcsSUFBQyxDQUFBLHlCQUFELENBQUEsQ0FBQSxLQUFnQyxrQkFBaEMsSUFBdUQsSUFBQyxDQUFBLGdDQUFELENBQWtDLElBQUMsQ0FBQSxXQUFuQyxDQUExRDtNQUNJLEdBQUEsR0FBTSxLQURWOztJQUdBLElBQUMsQ0FBQSxrQkFBRCxDQUFBO0FBRUEsV0FBTztFQWhCcUI7O21CQXVCaEMsZ0NBQUEsR0FBa0MsU0FBQTtBQUM5QixXQUFPLElBQUMsQ0FBQSxXQUFELEtBQWdCLEdBQWhCLElBQXVCLElBQUMsQ0FBQSxXQUFZLFlBQWIsS0FBdUI7RUFEdkI7Ozs7OztBQUl0QyxNQUFNLENBQUMsT0FBUCxHQUFpQjs7OztBQ3RvQmpCLElBQUE7O0FBQU07b0JBR0YsS0FBQSxHQUFnQjs7b0JBR2hCLFFBQUEsR0FBZ0I7O29CQUdoQixZQUFBLEdBQWdCOztvQkFHaEIsT0FBQSxHQUFnQjs7RUFNSCxpQkFBQyxRQUFELEVBQVcsU0FBWDtBQUNULFFBQUE7O01BRG9CLFlBQVk7O0lBQ2hDLFlBQUEsR0FBZTtJQUNmLEdBQUEsR0FBTSxRQUFRLENBQUM7SUFDZixPQUFBLEdBQVU7SUFHVixzQkFBQSxHQUF5QjtJQUN6QixDQUFBLEdBQUk7QUFDSixXQUFNLENBQUEsR0FBSSxHQUFWO01BQ0ksS0FBQSxHQUFRLFFBQVEsQ0FBQyxNQUFULENBQWdCLENBQWhCO01BQ1IsSUFBRyxLQUFBLEtBQVMsSUFBWjtRQUVJLFlBQUEsSUFBZ0IsUUFBUztRQUN6QixDQUFBLEdBSEo7T0FBQSxNQUlLLElBQUcsS0FBQSxLQUFTLEdBQVo7UUFFRCxJQUFHLENBQUEsR0FBSSxHQUFBLEdBQU0sQ0FBYjtVQUNJLElBQUEsR0FBTyxRQUFTO1VBQ2hCLElBQUcsSUFBQSxLQUFRLEtBQVg7WUFFSSxDQUFBLElBQUs7WUFDTCxZQUFBLElBQWdCLEtBSHBCO1dBQUEsTUFJSyxJQUFHLElBQUEsS0FBUSxLQUFYO1lBRUQsc0JBQUE7WUFDQSxDQUFBLElBQUs7WUFDTCxJQUFBLEdBQU87QUFDUCxtQkFBTSxDQUFBLEdBQUksQ0FBSixHQUFRLEdBQWQ7Y0FDSSxPQUFBLEdBQVUsUUFBUSxDQUFDLE1BQVQsQ0FBZ0IsQ0FBQSxHQUFJLENBQXBCO2NBQ1YsSUFBRyxPQUFBLEtBQVcsR0FBZDtnQkFDSSxZQUFBLElBQWdCO2dCQUNoQixDQUFBO2dCQUNBLElBQUcsSUFBSSxDQUFDLE1BQUwsR0FBYyxDQUFqQjs7b0JBRUksVUFBVzs7a0JBQ1gsT0FBUSxDQUFBLElBQUEsQ0FBUixHQUFnQix1QkFIcEI7O0FBSUEsc0JBUEo7ZUFBQSxNQUFBO2dCQVNJLElBQUEsSUFBUSxRQVRaOztjQVdBLENBQUE7WUFiSixDQUxDO1dBQUEsTUFBQTtZQW9CRCxZQUFBLElBQWdCO1lBQ2hCLHNCQUFBLEdBckJDO1dBTlQ7U0FBQSxNQUFBO1VBNkJJLFlBQUEsSUFBZ0IsTUE3QnBCO1NBRkM7T0FBQSxNQUFBO1FBaUNELFlBQUEsSUFBZ0IsTUFqQ2Y7O01BbUNMLENBQUE7SUF6Q0o7SUEyQ0EsSUFBQyxDQUFBLFFBQUQsR0FBWTtJQUNaLElBQUMsQ0FBQSxZQUFELEdBQWdCO0lBQ2hCLElBQUMsQ0FBQSxLQUFELEdBQWEsSUFBQSxNQUFBLENBQU8sSUFBQyxDQUFBLFlBQVIsRUFBc0IsR0FBQSxHQUFJLFNBQVMsQ0FBQyxPQUFWLENBQWtCLEdBQWxCLEVBQXVCLEVBQXZCLENBQTFCO0lBQ2IsSUFBQyxDQUFBLE9BQUQsR0FBVztFQXRERjs7b0JBK0RiLElBQUEsR0FBTSxTQUFDLEdBQUQ7QUFDRixRQUFBO0lBQUEsSUFBQyxDQUFBLEtBQUssQ0FBQyxTQUFQLEdBQW1CO0lBQ25CLE9BQUEsR0FBVSxJQUFDLENBQUEsS0FBSyxDQUFDLElBQVAsQ0FBWSxHQUFaO0lBRVYsSUFBTyxlQUFQO0FBQ0ksYUFBTyxLQURYOztJQUdBLElBQUcsb0JBQUg7QUFDSTtBQUFBLFdBQUEsV0FBQTs7UUFDSSxPQUFRLENBQUEsSUFBQSxDQUFSLEdBQWdCLE9BQVEsQ0FBQSxLQUFBO0FBRDVCLE9BREo7O0FBSUEsV0FBTztFQVhMOztvQkFvQk4sSUFBQSxHQUFNLFNBQUMsR0FBRDtJQUNGLElBQUMsQ0FBQSxLQUFLLENBQUMsU0FBUCxHQUFtQjtBQUNuQixXQUFPLElBQUMsQ0FBQSxLQUFLLENBQUMsSUFBUCxDQUFZLEdBQVo7RUFGTDs7b0JBWU4sT0FBQSxHQUFTLFNBQUMsR0FBRCxFQUFNLFdBQU47SUFDTCxJQUFDLENBQUEsS0FBSyxDQUFDLFNBQVAsR0FBbUI7QUFDbkIsV0FBTyxHQUFHLENBQUMsT0FBSixDQUFZLElBQUMsQ0FBQSxLQUFiLEVBQW9CLFdBQXBCO0VBRkY7O29CQWNULFVBQUEsR0FBWSxTQUFDLEdBQUQsRUFBTSxXQUFOLEVBQW1CLEtBQW5CO0FBQ1IsUUFBQTs7TUFEMkIsUUFBUTs7SUFDbkMsSUFBQyxDQUFBLEtBQUssQ0FBQyxTQUFQLEdBQW1CO0lBQ25CLEtBQUEsR0FBUTtBQUNSLFdBQU0sSUFBQyxDQUFBLEtBQUssQ0FBQyxJQUFQLENBQVksR0FBWixDQUFBLElBQXFCLENBQUMsS0FBQSxLQUFTLENBQVQsSUFBYyxLQUFBLEdBQVEsS0FBdkIsQ0FBM0I7TUFDSSxJQUFDLENBQUEsS0FBSyxDQUFDLFNBQVAsR0FBbUI7TUFDbkIsR0FBQSxHQUFNLEdBQUcsQ0FBQyxPQUFKLENBQVksSUFBQyxDQUFBLEtBQWIsRUFBb0IsV0FBcEI7TUFDTixLQUFBO0lBSEo7QUFLQSxXQUFPLENBQUMsR0FBRCxFQUFNLEtBQU47RUFSQzs7Ozs7O0FBV2hCLE1BQU0sQ0FBQyxPQUFQLEdBQWlCOzs7O0FDN0lqQixJQUFBOztBQUFBLEtBQUEsR0FBVSxPQUFBLENBQVEsU0FBUjs7QUFDVixPQUFBLEdBQVUsT0FBQSxDQUFRLFdBQVI7O0FBSUo7OztFQUlGLFNBQUMsQ0FBQSx5QkFBRCxHQUFvQyxJQUFBLE9BQUEsQ0FBUSxrRkFBUjs7RUFTcEMsU0FBQyxDQUFBLDBCQUFELEdBQTZCLFNBQUMsS0FBRDtBQUN6QixXQUFPLEtBQUssQ0FBQyxPQUFOLENBQWMsT0FBZCxFQUF1QixJQUF2QjtFQURrQjs7RUFVN0IsU0FBQyxDQUFBLDBCQUFELEdBQTZCLFNBQUMsS0FBRDs7TUFDekIsSUFBQyxDQUFBLG9CQUFxQixDQUFBLFNBQUEsS0FBQTtlQUFBLFNBQUMsR0FBRDtBQUNsQixpQkFBTyxLQUFDLENBQUEsaUJBQUQsQ0FBbUIsR0FBbkI7UUFEVztNQUFBLENBQUEsQ0FBQSxDQUFBLElBQUE7O0FBSXRCLFdBQU8sSUFBQyxDQUFBLHlCQUF5QixDQUFDLE9BQTNCLENBQW1DLEtBQW5DLEVBQTBDLElBQUMsQ0FBQSxpQkFBM0M7RUFMa0I7O0VBYzdCLFNBQUMsQ0FBQSxpQkFBRCxHQUFvQixTQUFDLEtBQUQ7QUFDaEIsUUFBQTtJQUFBLEVBQUEsR0FBSyxNQUFNLENBQUM7QUFDWixZQUFPLEtBQUssQ0FBQyxNQUFOLENBQWEsQ0FBYixDQUFQO0FBQUEsV0FDUyxHQURUO0FBRVEsZUFBTyxFQUFBLENBQUcsQ0FBSDtBQUZmLFdBR1MsR0FIVDtBQUlRLGVBQU8sRUFBQSxDQUFHLENBQUg7QUFKZixXQUtTLEdBTFQ7QUFNUSxlQUFPLEVBQUEsQ0FBRyxDQUFIO0FBTmYsV0FPUyxHQVBUO0FBUVEsZUFBTztBQVJmLFdBU1MsSUFUVDtBQVVRLGVBQU87QUFWZixXQVdTLEdBWFQ7QUFZUSxlQUFPO0FBWmYsV0FhUyxHQWJUO0FBY1EsZUFBTyxFQUFBLENBQUcsRUFBSDtBQWRmLFdBZVMsR0FmVDtBQWdCUSxlQUFPLEVBQUEsQ0FBRyxFQUFIO0FBaEJmLFdBaUJTLEdBakJUO0FBa0JRLGVBQU8sRUFBQSxDQUFHLEVBQUg7QUFsQmYsV0FtQlMsR0FuQlQ7QUFvQlEsZUFBTyxFQUFBLENBQUcsRUFBSDtBQXBCZixXQXFCUyxHQXJCVDtBQXNCUSxlQUFPO0FBdEJmLFdBdUJTLEdBdkJUO0FBd0JRLGVBQU87QUF4QmYsV0F5QlMsR0F6QlQ7QUEwQlEsZUFBTztBQTFCZixXQTJCUyxJQTNCVDtBQTRCUSxlQUFPO0FBNUJmLFdBNkJTLEdBN0JUO0FBK0JRLGVBQU8sRUFBQSxDQUFHLE1BQUg7QUEvQmYsV0FnQ1MsR0FoQ1Q7QUFrQ1EsZUFBTyxFQUFBLENBQUcsTUFBSDtBQWxDZixXQW1DUyxHQW5DVDtBQXFDUSxlQUFPLEVBQUEsQ0FBRyxNQUFIO0FBckNmLFdBc0NTLEdBdENUO0FBd0NRLGVBQU8sRUFBQSxDQUFHLE1BQUg7QUF4Q2YsV0F5Q1MsR0F6Q1Q7QUEwQ1EsZUFBTyxLQUFLLENBQUMsT0FBTixDQUFjLEtBQUssQ0FBQyxNQUFOLENBQWEsS0FBSyxDQUFDLE1BQU4sQ0FBYSxDQUFiLEVBQWdCLENBQWhCLENBQWIsQ0FBZDtBQTFDZixXQTJDUyxHQTNDVDtBQTRDUSxlQUFPLEtBQUssQ0FBQyxPQUFOLENBQWMsS0FBSyxDQUFDLE1BQU4sQ0FBYSxLQUFLLENBQUMsTUFBTixDQUFhLENBQWIsRUFBZ0IsQ0FBaEIsQ0FBYixDQUFkO0FBNUNmLFdBNkNTLEdBN0NUO0FBOENRLGVBQU8sS0FBSyxDQUFDLE9BQU4sQ0FBYyxLQUFLLENBQUMsTUFBTixDQUFhLEtBQUssQ0FBQyxNQUFOLENBQWEsQ0FBYixFQUFnQixDQUFoQixDQUFiLENBQWQ7QUE5Q2Y7QUFnRFEsZUFBTztBQWhEZjtFQUZnQjs7Ozs7O0FBb0R4QixNQUFNLENBQUMsT0FBUCxHQUFpQjs7OztBQzlGakIsSUFBQSxjQUFBO0VBQUE7O0FBQUEsT0FBQSxHQUFVLE9BQUEsQ0FBUSxXQUFSOztBQUlKOzs7RUFFRixLQUFDLENBQUEsdUJBQUQsR0FBNEI7O0VBQzVCLEtBQUMsQ0FBQSx3QkFBRCxHQUE0Qjs7RUFDNUIsS0FBQyxDQUFBLFlBQUQsR0FBNEI7O0VBQzVCLEtBQUMsQ0FBQSxZQUFELEdBQTRCOztFQUM1QixLQUFDLENBQUEsV0FBRCxHQUE0Qjs7RUFDNUIsS0FBQyxDQUFBLGlCQUFELEdBQTRCOztFQUc1QixLQUFDLENBQUEsWUFBRCxHQUFnQyxJQUFBLE9BQUEsQ0FBUSxHQUFBLEdBQ2hDLCtCQURnQyxHQUVoQyx3QkFGZ0MsR0FHaEMsc0JBSGdDLEdBSWhDLG9CQUpnQyxHQUtoQyxzQkFMZ0MsR0FNaEMsd0JBTmdDLEdBT2hDLHdCQVBnQyxHQVFoQyw0QkFSZ0MsR0FTaEMsMERBVGdDLEdBVWhDLHFDQVZnQyxHQVdoQyxHQVh3QixFQVduQixHQVhtQjs7RUFjaEMsS0FBQyxDQUFBLHFCQUFELEdBQWdDLElBQUEsSUFBQSxDQUFBLENBQU0sQ0FBQyxpQkFBUCxDQUFBLENBQUosR0FBaUMsRUFBakMsR0FBc0M7O0VBU2xFLEtBQUMsQ0FBQSxJQUFELEdBQU8sU0FBQyxHQUFELEVBQU0sS0FBTjtBQUNILFFBQUE7O01BRFMsUUFBUTs7SUFDakIsU0FBQSxHQUFZLElBQUMsQ0FBQSx1QkFBd0IsQ0FBQSxLQUFBO0lBQ3JDLElBQU8saUJBQVA7TUFDSSxJQUFDLENBQUEsdUJBQXdCLENBQUEsS0FBQSxDQUF6QixHQUFrQyxTQUFBLEdBQWdCLElBQUEsTUFBQSxDQUFPLEdBQUEsR0FBSSxLQUFKLEdBQVUsRUFBVixHQUFhLEtBQWIsR0FBbUIsR0FBMUIsRUFEdEQ7O0lBRUEsU0FBUyxDQUFDLFNBQVYsR0FBc0I7SUFDdEIsVUFBQSxHQUFhLElBQUMsQ0FBQSx3QkFBeUIsQ0FBQSxLQUFBO0lBQ3ZDLElBQU8sa0JBQVA7TUFDSSxJQUFDLENBQUEsd0JBQXlCLENBQUEsS0FBQSxDQUExQixHQUFtQyxVQUFBLEdBQWlCLElBQUEsTUFBQSxDQUFPLEtBQUEsR0FBTSxFQUFOLEdBQVMsS0FBVCxHQUFlLElBQXRCLEVBRHhEOztJQUVBLFVBQVUsQ0FBQyxTQUFYLEdBQXVCO0FBQ3ZCLFdBQU8sR0FBRyxDQUFDLE9BQUosQ0FBWSxTQUFaLEVBQXVCLEVBQXZCLENBQTBCLENBQUMsT0FBM0IsQ0FBbUMsVUFBbkMsRUFBK0MsRUFBL0M7RUFUSjs7RUFtQlAsS0FBQyxDQUFBLEtBQUQsR0FBUSxTQUFDLEdBQUQsRUFBTSxLQUFOO0FBQ0osUUFBQTs7TUFEVSxRQUFROztJQUNsQixTQUFBLEdBQVksSUFBQyxDQUFBLHVCQUF3QixDQUFBLEtBQUE7SUFDckMsSUFBTyxpQkFBUDtNQUNJLElBQUMsQ0FBQSx1QkFBd0IsQ0FBQSxLQUFBLENBQXpCLEdBQWtDLFNBQUEsR0FBZ0IsSUFBQSxNQUFBLENBQU8sR0FBQSxHQUFJLEtBQUosR0FBVSxFQUFWLEdBQWEsS0FBYixHQUFtQixHQUExQixFQUR0RDs7SUFFQSxTQUFTLENBQUMsU0FBVixHQUFzQjtBQUN0QixXQUFPLEdBQUcsQ0FBQyxPQUFKLENBQVksU0FBWixFQUF1QixFQUF2QjtFQUxIOztFQWVSLEtBQUMsQ0FBQSxLQUFELEdBQVEsU0FBQyxHQUFELEVBQU0sS0FBTjtBQUNKLFFBQUE7O01BRFUsUUFBUTs7SUFDbEIsVUFBQSxHQUFhLElBQUMsQ0FBQSx3QkFBeUIsQ0FBQSxLQUFBO0lBQ3ZDLElBQU8sa0JBQVA7TUFDSSxJQUFDLENBQUEsd0JBQXlCLENBQUEsS0FBQSxDQUExQixHQUFtQyxVQUFBLEdBQWlCLElBQUEsTUFBQSxDQUFPLEtBQUEsR0FBTSxFQUFOLEdBQVMsS0FBVCxHQUFlLElBQXRCLEVBRHhEOztJQUVBLFVBQVUsQ0FBQyxTQUFYLEdBQXVCO0FBQ3ZCLFdBQU8sR0FBRyxDQUFDLE9BQUosQ0FBWSxVQUFaLEVBQXdCLEVBQXhCO0VBTEg7O0VBY1IsS0FBQyxDQUFBLE9BQUQsR0FBVSxTQUFDLEtBQUQ7QUFDTixXQUFPLENBQUksS0FBSixJQUFjLEtBQUEsS0FBUyxFQUF2QixJQUE2QixLQUFBLEtBQVMsR0FBdEMsSUFBNkMsQ0FBQyxLQUFBLFlBQWlCLEtBQWpCLElBQTJCLEtBQUssQ0FBQyxNQUFOLEtBQWdCLENBQTVDLENBQTdDLElBQStGLElBQUMsQ0FBQSxhQUFELENBQWUsS0FBZjtFQURoRzs7RUFTVixLQUFDLENBQUEsYUFBRCxHQUFnQixTQUFDLEtBQUQ7QUFDWixRQUFBO0FBQUEsV0FBTyxLQUFBLFlBQWlCLE1BQWpCLElBQTRCOztBQUFDO1dBQUEsVUFBQTs7cUJBQUE7QUFBQTs7UUFBRCxDQUFzQixDQUFDLE1BQXZCLEtBQWlDO0VBRHhEOztFQVloQixLQUFDLENBQUEsV0FBRCxHQUFjLFNBQUMsTUFBRCxFQUFTLFNBQVQsRUFBb0IsS0FBcEIsRUFBMkIsTUFBM0I7QUFDVixRQUFBO0lBQUEsQ0FBQSxHQUFJO0lBRUosTUFBQSxHQUFTLEVBQUEsR0FBSztJQUNkLFNBQUEsR0FBWSxFQUFBLEdBQUs7SUFFakIsSUFBRyxhQUFIO01BQ0ksTUFBQSxHQUFTLE1BQU8sY0FEcEI7O0lBRUEsSUFBRyxjQUFIO01BQ0ksTUFBQSxHQUFTLE1BQU8sa0JBRHBCOztJQUdBLEdBQUEsR0FBTSxNQUFNLENBQUM7SUFDYixNQUFBLEdBQVMsU0FBUyxDQUFDO0FBQ25CLFNBQVMsNEVBQVQ7TUFDSSxJQUFHLFNBQUEsS0FBYSxNQUFPLGlCQUF2QjtRQUNJLENBQUE7UUFDQSxDQUFBLElBQUssTUFBQSxHQUFTLEVBRmxCOztBQURKO0FBS0EsV0FBTztFQWxCRzs7RUEyQmQsS0FBQyxDQUFBLFFBQUQsR0FBVyxTQUFDLEtBQUQ7SUFDUCxJQUFDLENBQUEsWUFBWSxDQUFDLFNBQWQsR0FBMEI7QUFDMUIsV0FBTyxJQUFDLENBQUEsWUFBWSxDQUFDLElBQWQsQ0FBbUIsS0FBbkI7RUFGQTs7RUFXWCxLQUFDLENBQUEsTUFBRCxHQUFTLFNBQUMsS0FBRDtJQUNMLElBQUMsQ0FBQSxXQUFXLENBQUMsU0FBYixHQUF5QjtBQUN6QixXQUFPLFFBQUEsQ0FBUyxDQUFDLEtBQUEsR0FBTSxFQUFQLENBQVUsQ0FBQyxPQUFYLENBQW1CLElBQUMsQ0FBQSxXQUFwQixFQUFpQyxFQUFqQyxDQUFULEVBQStDLENBQS9DO0VBRkY7O0VBV1QsS0FBQyxDQUFBLE1BQUQsR0FBUyxTQUFDLEtBQUQ7SUFDTCxJQUFDLENBQUEsaUJBQWlCLENBQUMsU0FBbkIsR0FBK0I7SUFDL0IsS0FBQSxHQUFRLElBQUMsQ0FBQSxJQUFELENBQU0sS0FBTjtJQUNSLElBQUcsQ0FBQyxLQUFBLEdBQU0sRUFBUCxDQUFXLFlBQVgsS0FBcUIsSUFBeEI7TUFBa0MsS0FBQSxHQUFRLENBQUMsS0FBQSxHQUFNLEVBQVAsQ0FBVyxVQUFyRDs7QUFDQSxXQUFPLFFBQUEsQ0FBUyxDQUFDLEtBQUEsR0FBTSxFQUFQLENBQVUsQ0FBQyxPQUFYLENBQW1CLElBQUMsQ0FBQSxpQkFBcEIsRUFBdUMsRUFBdkMsQ0FBVCxFQUFxRCxFQUFyRDtFQUpGOztFQWFULEtBQUMsQ0FBQSxPQUFELEdBQVUsU0FBQyxDQUFEO0FBQ04sUUFBQTtJQUFBLEVBQUEsR0FBSyxNQUFNLENBQUM7SUFDWixJQUFHLElBQUEsR0FBTyxDQUFDLENBQUEsSUFBSyxRQUFOLENBQVY7QUFDSSxhQUFPLEVBQUEsQ0FBRyxDQUFILEVBRFg7O0lBRUEsSUFBRyxLQUFBLEdBQVEsQ0FBWDtBQUNJLGFBQU8sRUFBQSxDQUFHLElBQUEsR0FBTyxDQUFBLElBQUcsQ0FBYixDQUFBLEdBQWtCLEVBQUEsQ0FBRyxJQUFBLEdBQU8sQ0FBUCxHQUFXLElBQWQsRUFEN0I7O0lBRUEsSUFBRyxPQUFBLEdBQVUsQ0FBYjtBQUNJLGFBQU8sRUFBQSxDQUFHLElBQUEsR0FBTyxDQUFBLElBQUcsRUFBYixDQUFBLEdBQW1CLEVBQUEsQ0FBRyxJQUFBLEdBQU8sQ0FBQSxJQUFHLENBQVYsR0FBYyxJQUFqQixDQUFuQixHQUE0QyxFQUFBLENBQUcsSUFBQSxHQUFPLENBQVAsR0FBVyxJQUFkLEVBRHZEOztBQUdBLFdBQU8sRUFBQSxDQUFHLElBQUEsR0FBTyxDQUFBLElBQUcsRUFBYixDQUFBLEdBQW1CLEVBQUEsQ0FBRyxJQUFBLEdBQU8sQ0FBQSxJQUFHLEVBQVYsR0FBZSxJQUFsQixDQUFuQixHQUE2QyxFQUFBLENBQUcsSUFBQSxHQUFPLENBQUEsSUFBRyxDQUFWLEdBQWMsSUFBakIsQ0FBN0MsR0FBc0UsRUFBQSxDQUFHLElBQUEsR0FBTyxDQUFQLEdBQVcsSUFBZDtFQVR2RTs7RUFtQlYsS0FBQyxDQUFBLFlBQUQsR0FBZSxTQUFDLEtBQUQsRUFBUSxNQUFSO0FBQ1gsUUFBQTs7TUFEbUIsU0FBUzs7SUFDNUIsSUFBRyxPQUFPLEtBQVAsS0FBaUIsUUFBcEI7TUFDSSxVQUFBLEdBQWEsS0FBSyxDQUFDLFdBQU4sQ0FBQTtNQUNiLElBQUcsQ0FBSSxNQUFQO1FBQ0ksSUFBRyxVQUFBLEtBQWMsSUFBakI7QUFBMkIsaUJBQU8sTUFBbEM7U0FESjs7TUFFQSxJQUFHLFVBQUEsS0FBYyxHQUFqQjtBQUEwQixlQUFPLE1BQWpDOztNQUNBLElBQUcsVUFBQSxLQUFjLE9BQWpCO0FBQThCLGVBQU8sTUFBckM7O01BQ0EsSUFBRyxVQUFBLEtBQWMsRUFBakI7QUFBeUIsZUFBTyxNQUFoQzs7QUFDQSxhQUFPLEtBUFg7O0FBUUEsV0FBTyxDQUFDLENBQUM7RUFURTs7RUFtQmYsS0FBQyxDQUFBLFNBQUQsR0FBWSxTQUFDLEtBQUQ7SUFDUixJQUFDLENBQUEsWUFBWSxDQUFDLFNBQWQsR0FBMEI7QUFDMUIsV0FBTyxPQUFPLEtBQVAsS0FBaUIsUUFBakIsSUFBNkIsT0FBTyxLQUFQLEtBQWlCLFFBQTlDLElBQTJELENBQUMsS0FBQSxDQUFNLEtBQU4sQ0FBNUQsSUFBNkUsS0FBSyxDQUFDLE9BQU4sQ0FBYyxJQUFDLENBQUEsWUFBZixFQUE2QixFQUE3QixDQUFBLEtBQXNDO0VBRmxIOztFQVdaLEtBQUMsQ0FBQSxZQUFELEdBQWUsU0FBQyxHQUFEO0FBQ1gsUUFBQTtJQUFBLElBQUEsZ0JBQU8sR0FBRyxDQUFFLGdCQUFaO0FBQ0ksYUFBTyxLQURYOztJQUlBLElBQUEsR0FBTyxJQUFDLENBQUEsWUFBWSxDQUFDLElBQWQsQ0FBbUIsR0FBbkI7SUFDUCxJQUFBLENBQU8sSUFBUDtBQUNJLGFBQU8sS0FEWDs7SUFJQSxJQUFBLEdBQU8sUUFBQSxDQUFTLElBQUksQ0FBQyxJQUFkLEVBQW9CLEVBQXBCO0lBQ1AsS0FBQSxHQUFRLFFBQUEsQ0FBUyxJQUFJLENBQUMsS0FBZCxFQUFxQixFQUFyQixDQUFBLEdBQTJCO0lBQ25DLEdBQUEsR0FBTSxRQUFBLENBQVMsSUFBSSxDQUFDLEdBQWQsRUFBbUIsRUFBbkI7SUFHTixJQUFPLGlCQUFQO01BQ0ksSUFBQSxHQUFXLElBQUEsSUFBQSxDQUFLLElBQUksQ0FBQyxHQUFMLENBQVMsSUFBVCxFQUFlLEtBQWYsRUFBc0IsR0FBdEIsQ0FBTDtBQUNYLGFBQU8sS0FGWDs7SUFLQSxJQUFBLEdBQU8sUUFBQSxDQUFTLElBQUksQ0FBQyxJQUFkLEVBQW9CLEVBQXBCO0lBQ1AsTUFBQSxHQUFTLFFBQUEsQ0FBUyxJQUFJLENBQUMsTUFBZCxFQUFzQixFQUF0QjtJQUNULE1BQUEsR0FBUyxRQUFBLENBQVMsSUFBSSxDQUFDLE1BQWQsRUFBc0IsRUFBdEI7SUFHVCxJQUFHLHFCQUFIO01BQ0ksUUFBQSxHQUFXLElBQUksQ0FBQyxRQUFTO0FBQ3pCLGFBQU0sUUFBUSxDQUFDLE1BQVQsR0FBa0IsQ0FBeEI7UUFDSSxRQUFBLElBQVk7TUFEaEI7TUFFQSxRQUFBLEdBQVcsUUFBQSxDQUFTLFFBQVQsRUFBbUIsRUFBbkIsRUFKZjtLQUFBLE1BQUE7TUFNSSxRQUFBLEdBQVcsRUFOZjs7SUFTQSxJQUFHLGVBQUg7TUFDSSxPQUFBLEdBQVUsUUFBQSxDQUFTLElBQUksQ0FBQyxPQUFkLEVBQXVCLEVBQXZCO01BQ1YsSUFBRyxzQkFBSDtRQUNJLFNBQUEsR0FBWSxRQUFBLENBQVMsSUFBSSxDQUFDLFNBQWQsRUFBeUIsRUFBekIsRUFEaEI7T0FBQSxNQUFBO1FBR0ksU0FBQSxHQUFZLEVBSGhCOztNQU1BLFNBQUEsR0FBWSxDQUFDLE9BQUEsR0FBVSxFQUFWLEdBQWUsU0FBaEIsQ0FBQSxHQUE2QjtNQUN6QyxJQUFHLEdBQUEsS0FBTyxJQUFJLENBQUMsT0FBZjtRQUNJLFNBQUEsSUFBYSxDQUFDLEVBRGxCO09BVEo7O0lBYUEsSUFBQSxHQUFXLElBQUEsSUFBQSxDQUFLLElBQUksQ0FBQyxHQUFMLENBQVMsSUFBVCxFQUFlLEtBQWYsRUFBc0IsR0FBdEIsRUFBMkIsSUFBM0IsRUFBaUMsTUFBakMsRUFBeUMsTUFBekMsRUFBaUQsUUFBakQsQ0FBTDtJQUNYLElBQUcsU0FBSDtNQUNJLElBQUksQ0FBQyxPQUFMLENBQWEsSUFBSSxDQUFDLE9BQUwsQ0FBQSxDQUFBLEdBQWlCLFNBQTlCLEVBREo7O0FBR0EsV0FBTztFQW5ESTs7RUE2RGYsS0FBQyxDQUFBLFNBQUQsR0FBWSxTQUFDLEdBQUQsRUFBTSxNQUFOO0FBQ1IsUUFBQTtJQUFBLEdBQUEsR0FBTTtJQUNOLENBQUEsR0FBSTtBQUNKLFdBQU0sQ0FBQSxHQUFJLE1BQVY7TUFDSSxHQUFBLElBQU87TUFDUCxDQUFBO0lBRko7QUFHQSxXQUFPO0VBTkM7O0VBZ0JaLEtBQUMsQ0FBQSxpQkFBRCxHQUFvQixTQUFDLElBQUQsRUFBTyxRQUFQO0FBQ2hCLFFBQUE7O01BRHVCLFdBQVc7O0lBQ2xDLEdBQUEsR0FBTTtJQUNOLElBQUcsZ0RBQUg7TUFDSSxJQUFHLE1BQU0sQ0FBQyxjQUFWO1FBQ0ksR0FBQSxHQUFVLElBQUEsY0FBQSxDQUFBLEVBRGQ7T0FBQSxNQUVLLElBQUcsTUFBTSxDQUFDLGFBQVY7QUFDRDtBQUFBLGFBQUEsdUNBQUE7O0FBQ0k7WUFDSSxHQUFBLEdBQVUsSUFBQSxhQUFBLENBQWMsSUFBZCxFQURkO1dBQUE7QUFESixTQURDO09BSFQ7O0lBUUEsSUFBRyxXQUFIO01BRUksSUFBRyxnQkFBSDtRQUVJLEdBQUcsQ0FBQyxrQkFBSixHQUF5QixTQUFBO1VBQ3JCLElBQUcsR0FBRyxDQUFDLFVBQUosS0FBa0IsQ0FBckI7WUFDSSxJQUFHLEdBQUcsQ0FBQyxNQUFKLEtBQWMsR0FBZCxJQUFxQixHQUFHLENBQUMsTUFBSixLQUFjLENBQXRDO3FCQUNJLFFBQUEsQ0FBUyxHQUFHLENBQUMsWUFBYixFQURKO2FBQUEsTUFBQTtxQkFHSSxRQUFBLENBQVMsSUFBVCxFQUhKO2FBREo7O1FBRHFCO1FBTXpCLEdBQUcsQ0FBQyxJQUFKLENBQVMsS0FBVCxFQUFnQixJQUFoQixFQUFzQixJQUF0QjtlQUNBLEdBQUcsQ0FBQyxJQUFKLENBQVMsSUFBVCxFQVRKO09BQUEsTUFBQTtRQWFJLEdBQUcsQ0FBQyxJQUFKLENBQVMsS0FBVCxFQUFnQixJQUFoQixFQUFzQixLQUF0QjtRQUNBLEdBQUcsQ0FBQyxJQUFKLENBQVMsSUFBVDtRQUVBLElBQUcsR0FBRyxDQUFDLE1BQUosS0FBYyxHQUFkLElBQXFCLEdBQUcsQ0FBQyxNQUFKLEtBQWMsQ0FBdEM7QUFDSSxpQkFBTyxHQUFHLENBQUMsYUFEZjs7QUFHQSxlQUFPLEtBbkJYO09BRko7S0FBQSxNQUFBO01Bd0JJLEdBQUEsR0FBTTtNQUNOLEVBQUEsR0FBSyxHQUFBLENBQUksSUFBSjtNQUNMLElBQUcsZ0JBQUg7ZUFFSSxFQUFFLENBQUMsUUFBSCxDQUFZLElBQVosRUFBa0IsU0FBQyxHQUFELEVBQU0sSUFBTjtVQUNkLElBQUcsR0FBSDttQkFDSSxRQUFBLENBQVMsSUFBVCxFQURKO1dBQUEsTUFBQTttQkFHSSxRQUFBLENBQVMsTUFBQSxDQUFPLElBQVAsQ0FBVCxFQUhKOztRQURjLENBQWxCLEVBRko7T0FBQSxNQUFBO1FBVUksSUFBQSxHQUFPLEVBQUUsQ0FBQyxZQUFILENBQWdCLElBQWhCO1FBQ1AsSUFBRyxZQUFIO0FBQ0ksaUJBQU8sTUFBQSxDQUFPLElBQVAsRUFEWDs7QUFFQSxlQUFPLEtBYlg7T0ExQko7O0VBVmdCOzs7Ozs7QUFxRHhCLE1BQU0sQ0FBQyxPQUFQLEdBQWlCOzs7O0FDM1ZqQixJQUFBOztBQUFBLE1BQUEsR0FBUyxPQUFBLENBQVEsVUFBUjs7QUFDVCxNQUFBLEdBQVMsT0FBQSxDQUFRLFVBQVI7O0FBQ1QsS0FBQSxHQUFTLE9BQUEsQ0FBUSxTQUFSOztBQUlIOzs7RUFtQkYsSUFBQyxDQUFBLEtBQUQsR0FBUSxTQUFDLEtBQUQsRUFBUSxzQkFBUixFQUF3QyxhQUF4Qzs7TUFBUSx5QkFBeUI7OztNQUFPLGdCQUFnQjs7QUFDNUQsV0FBVyxJQUFBLE1BQUEsQ0FBQSxDQUFRLENBQUMsS0FBVCxDQUFlLEtBQWYsRUFBc0Isc0JBQXRCLEVBQThDLGFBQTlDO0VBRFA7O0VBcUJSLElBQUMsQ0FBQSxTQUFELEdBQVksU0FBQyxJQUFELEVBQU8sUUFBUCxFQUF3QixzQkFBeEIsRUFBd0QsYUFBeEQ7QUFDUixRQUFBOztNQURlLFdBQVc7OztNQUFNLHlCQUF5Qjs7O01BQU8sZ0JBQWdCOztJQUNoRixJQUFHLGdCQUFIO2FBRUksS0FBSyxDQUFDLGlCQUFOLENBQXdCLElBQXhCLEVBQThCLENBQUEsU0FBQSxLQUFBO2VBQUEsU0FBQyxLQUFEO0FBQzFCLGNBQUE7VUFBQSxNQUFBLEdBQVM7VUFDVCxJQUFHLGFBQUg7WUFDSSxNQUFBLEdBQVMsS0FBQyxDQUFBLEtBQUQsQ0FBTyxLQUFQLEVBQWMsc0JBQWQsRUFBc0MsYUFBdEMsRUFEYjs7VUFFQSxRQUFBLENBQVMsTUFBVDtRQUowQjtNQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBOUIsRUFGSjtLQUFBLE1BQUE7TUFVSSxLQUFBLEdBQVEsS0FBSyxDQUFDLGlCQUFOLENBQXdCLElBQXhCO01BQ1IsSUFBRyxhQUFIO0FBQ0ksZUFBTyxJQUFDLENBQUEsS0FBRCxDQUFPLEtBQVAsRUFBYyxzQkFBZCxFQUFzQyxhQUF0QyxFQURYOztBQUVBLGFBQU8sS0FiWDs7RUFEUTs7RUE4QlosSUFBQyxDQUFBLElBQUQsR0FBTyxTQUFDLEtBQUQsRUFBUSxNQUFSLEVBQW9CLE1BQXBCLEVBQWdDLHNCQUFoQyxFQUFnRSxhQUFoRTtBQUNILFFBQUE7O01BRFcsU0FBUzs7O01BQUcsU0FBUzs7O01BQUcseUJBQXlCOzs7TUFBTyxnQkFBZ0I7O0lBQ25GLElBQUEsR0FBVyxJQUFBLE1BQUEsQ0FBQTtJQUNYLElBQUksQ0FBQyxXQUFMLEdBQW1CO0FBRW5CLFdBQU8sSUFBSSxDQUFDLElBQUwsQ0FBVSxLQUFWLEVBQWlCLE1BQWpCLEVBQXlCLENBQXpCLEVBQTRCLHNCQUE1QixFQUFvRCxhQUFwRDtFQUpKOztFQVNQLElBQUMsQ0FBQSxTQUFELEdBQVksU0FBQyxLQUFELEVBQVEsTUFBUixFQUFnQixNQUFoQixFQUF3QixzQkFBeEIsRUFBZ0QsYUFBaEQ7QUFDUixXQUFPLElBQUMsQ0FBQSxJQUFELENBQU0sS0FBTixFQUFhLE1BQWIsRUFBcUIsTUFBckIsRUFBNkIsc0JBQTdCLEVBQXFELGFBQXJEO0VBREM7O0VBTVosSUFBQyxDQUFBLElBQUQsR0FBTyxTQUFDLElBQUQsRUFBTyxRQUFQLEVBQWlCLHNCQUFqQixFQUF5QyxhQUF6QztBQUNILFdBQU8sSUFBQyxDQUFBLFNBQUQsQ0FBVyxJQUFYLEVBQWlCLFFBQWpCLEVBQTJCLHNCQUEzQixFQUFtRCxhQUFuRDtFQURKOzs7Ozs7O0VBS1gsTUFBTSxDQUFFLElBQVIsR0FBZTs7O0FBR2YsSUFBTyxnREFBUDtFQUNJLElBQUMsQ0FBQSxJQUFELEdBQVEsS0FEWjs7O0FBR0EsTUFBTSxDQUFDLE9BQVAsR0FBaUIiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiXG5VdGlscyAgID0gcmVxdWlyZSAnLi9VdGlscydcbklubGluZSAgPSByZXF1aXJlICcuL0lubGluZSdcblxuIyBEdW1wZXIgZHVtcHMgSmF2YVNjcmlwdCB2YXJpYWJsZXMgdG8gWUFNTCBzdHJpbmdzLlxuI1xuY2xhc3MgRHVtcGVyXG5cbiAgICAjIFRoZSBhbW91bnQgb2Ygc3BhY2VzIHRvIHVzZSBmb3IgaW5kZW50YXRpb24gb2YgbmVzdGVkIG5vZGVzLlxuICAgIEBpbmRlbnRhdGlvbjogICA0XG5cblxuICAgICMgRHVtcHMgYSBKYXZhU2NyaXB0IHZhbHVlIHRvIFlBTUwuXG4gICAgI1xuICAgICMgQHBhcmFtIFtPYmplY3RdICAgaW5wdXQgICAgICAgICAgICAgICAgICAgVGhlIEphdmFTY3JpcHQgdmFsdWVcbiAgICAjIEBwYXJhbSBbSW50ZWdlcl0gIGlubGluZSAgICAgICAgICAgICAgICAgIFRoZSBsZXZlbCB3aGVyZSB5b3Ugc3dpdGNoIHRvIGlubGluZSBZQU1MXG4gICAgIyBAcGFyYW0gW0ludGVnZXJdICBpbmRlbnQgICAgICAgICAgICAgICAgICBUaGUgbGV2ZWwgb2YgaW5kZW50YXRpb24gKHVzZWQgaW50ZXJuYWxseSlcbiAgICAjIEBwYXJhbSBbQm9vbGVhbl0gIGV4Y2VwdGlvbk9uSW52YWxpZFR5cGUgIHRydWUgaWYgYW4gZXhjZXB0aW9uIG11c3QgYmUgdGhyb3duIG9uIGludmFsaWQgdHlwZXMgKGEgSmF2YVNjcmlwdCByZXNvdXJjZSBvciBvYmplY3QpLCBmYWxzZSBvdGhlcndpc2VcbiAgICAjIEBwYXJhbSBbRnVuY3Rpb25dIG9iamVjdEVuY29kZXIgICAgICAgICAgIEEgZnVuY3Rpb24gdG8gc2VyaWFsaXplIGN1c3RvbSBvYmplY3RzLCBudWxsIG90aGVyd2lzZVxuICAgICNcbiAgICAjIEByZXR1cm4gW1N0cmluZ10gIFRoZSBZQU1MIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBKYXZhU2NyaXB0IHZhbHVlXG4gICAgI1xuICAgIGR1bXA6IChpbnB1dCwgaW5saW5lID0gMCwgaW5kZW50ID0gMCwgZXhjZXB0aW9uT25JbnZhbGlkVHlwZSA9IGZhbHNlLCBvYmplY3RFbmNvZGVyID0gbnVsbCkgLT5cbiAgICAgICAgb3V0cHV0ID0gJydcbiAgICAgICAgcHJlZml4ID0gKGlmIGluZGVudCB0aGVuIFV0aWxzLnN0clJlcGVhdCgnICcsIGluZGVudCkgZWxzZSAnJylcblxuICAgICAgICBpZiBpbmxpbmUgPD0gMCBvciB0eXBlb2YoaW5wdXQpIGlzbnQgJ29iamVjdCcgb3IgaW5wdXQgaW5zdGFuY2VvZiBEYXRlIG9yIFV0aWxzLmlzRW1wdHkoaW5wdXQpXG4gICAgICAgICAgICBvdXRwdXQgKz0gcHJlZml4ICsgSW5saW5lLmR1bXAoaW5wdXQsIGV4Y2VwdGlvbk9uSW52YWxpZFR5cGUsIG9iamVjdEVuY29kZXIpXG4gICAgICAgIFxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBpZiBpbnB1dCBpbnN0YW5jZW9mIEFycmF5XG4gICAgICAgICAgICAgICAgZm9yIHZhbHVlIGluIGlucHV0XG4gICAgICAgICAgICAgICAgICAgIHdpbGxCZUlubGluZWQgPSAoaW5saW5lIC0gMSA8PSAwIG9yIHR5cGVvZih2YWx1ZSkgaXNudCAnb2JqZWN0JyBvciBVdGlscy5pc0VtcHR5KHZhbHVlKSlcblxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKz1cbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCArXG4gICAgICAgICAgICAgICAgICAgICAgICAnLScgK1xuICAgICAgICAgICAgICAgICAgICAgICAgKGlmIHdpbGxCZUlubGluZWQgdGhlbiAnICcgZWxzZSBcIlxcblwiKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBAZHVtcCh2YWx1ZSwgaW5saW5lIC0gMSwgKGlmIHdpbGxCZUlubGluZWQgdGhlbiAwIGVsc2UgaW5kZW50ICsgQGluZGVudGF0aW9uKSwgZXhjZXB0aW9uT25JbnZhbGlkVHlwZSwgb2JqZWN0RW5jb2RlcikgK1xuICAgICAgICAgICAgICAgICAgICAgICAgKGlmIHdpbGxCZUlubGluZWQgdGhlbiBcIlxcblwiIGVsc2UgJycpXG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBvZiBpbnB1dFxuICAgICAgICAgICAgICAgICAgICB3aWxsQmVJbmxpbmVkID0gKGlubGluZSAtIDEgPD0gMCBvciB0eXBlb2YodmFsdWUpIGlzbnQgJ29iamVjdCcgb3IgVXRpbHMuaXNFbXB0eSh2YWx1ZSkpXG5cbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXggK1xuICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lLmR1bXAoa2V5LCBleGNlcHRpb25PbkludmFsaWRUeXBlLCBvYmplY3RFbmNvZGVyKSArICc6JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAoaWYgd2lsbEJlSW5saW5lZCB0aGVuICcgJyBlbHNlIFwiXFxuXCIpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBkdW1wKHZhbHVlLCBpbmxpbmUgLSAxLCAoaWYgd2lsbEJlSW5saW5lZCB0aGVuIDAgZWxzZSBpbmRlbnQgKyBAaW5kZW50YXRpb24pLCBleGNlcHRpb25PbkludmFsaWRUeXBlLCBvYmplY3RFbmNvZGVyKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAoaWYgd2lsbEJlSW5saW5lZCB0aGVuIFwiXFxuXCIgZWxzZSAnJylcblxuICAgICAgICByZXR1cm4gb3V0cHV0XG5cblxubW9kdWxlLmV4cG9ydHMgPSBEdW1wZXJcbiIsIlxuUGF0dGVybiA9IHJlcXVpcmUgJy4vUGF0dGVybidcblxuIyBFc2NhcGVyIGVuY2Fwc3VsYXRlcyBlc2NhcGluZyBydWxlcyBmb3Igc2luZ2xlXG4jIGFuZCBkb3VibGUtcXVvdGVkIFlBTUwgc3RyaW5ncy5cbmNsYXNzIEVzY2FwZXJcblxuICAgICMgTWFwcGluZyBhcnJheXMgZm9yIGVzY2FwaW5nIGEgZG91YmxlIHF1b3RlZCBzdHJpbmcuIFRoZSBiYWNrc2xhc2ggaXNcbiAgICAjIGZpcnN0IHRvIGVuc3VyZSBwcm9wZXIgZXNjYXBpbmcuXG4gICAgQExJU1RfRVNDQVBFRVM6ICAgICAgICAgICAgICAgICBbJ1xcXFwnLCAnXFxcXFxcXFwnLCAnXFxcXFwiJywgJ1wiJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxceDAwXCIsICBcIlxceDAxXCIsICBcIlxceDAyXCIsICBcIlxceDAzXCIsICBcIlxceDA0XCIsICBcIlxceDA1XCIsICBcIlxceDA2XCIsICBcIlxceDA3XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXHgwOFwiLCAgXCJcXHgwOVwiLCAgXCJcXHgwYVwiLCAgXCJcXHgwYlwiLCAgXCJcXHgwY1wiLCAgXCJcXHgwZFwiLCAgXCJcXHgwZVwiLCAgXCJcXHgwZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFx4MTBcIiwgIFwiXFx4MTFcIiwgIFwiXFx4MTJcIiwgIFwiXFx4MTNcIiwgIFwiXFx4MTRcIiwgIFwiXFx4MTVcIiwgIFwiXFx4MTZcIiwgIFwiXFx4MTdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxceDE4XCIsICBcIlxceDE5XCIsICBcIlxceDFhXCIsICBcIlxceDFiXCIsICBcIlxceDFjXCIsICBcIlxceDFkXCIsICBcIlxceDFlXCIsICBcIlxceDFmXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoID0gU3RyaW5nLmZyb21DaGFyQ29kZSkoMHgwMDg1KSwgY2goMHgwMEEwKSwgY2goMHgyMDI4KSwgY2goMHgyMDI5KV1cbiAgICBATElTVF9FU0NBUEVEOiAgICAgICAgICAgICAgICAgIFsnXFxcXFxcXFwnLCAnXFxcXFwiJywgJ1xcXFxcIicsICdcXFxcXCInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxcXDBcIiwgICBcIlxcXFx4MDFcIiwgXCJcXFxceDAyXCIsIFwiXFxcXHgwM1wiLCBcIlxcXFx4MDRcIiwgXCJcXFxceDA1XCIsIFwiXFxcXHgwNlwiLCBcIlxcXFxhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXFxcYlwiLCAgIFwiXFxcXHRcIiwgICBcIlxcXFxuXCIsICAgXCJcXFxcdlwiLCAgIFwiXFxcXGZcIiwgICBcIlxcXFxyXCIsICAgXCJcXFxceDBlXCIsIFwiXFxcXHgwZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxcXHgxMFwiLCBcIlxcXFx4MTFcIiwgXCJcXFxceDEyXCIsIFwiXFxcXHgxM1wiLCBcIlxcXFx4MTRcIiwgXCJcXFxceDE1XCIsIFwiXFxcXHgxNlwiLCBcIlxcXFx4MTdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcXFx4MThcIiwgXCJcXFxceDE5XCIsIFwiXFxcXHgxYVwiLCBcIlxcXFxlXCIsICAgXCJcXFxceDFjXCIsIFwiXFxcXHgxZFwiLCBcIlxcXFx4MWVcIiwgXCJcXFxceDFmXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXFxcTlwiLCBcIlxcXFxfXCIsIFwiXFxcXExcIiwgXCJcXFxcUFwiXVxuXG4gICAgQE1BUFBJTkdfRVNDQVBFRVNfVE9fRVNDQVBFRDogICBkbyA9PlxuICAgICAgICBtYXBwaW5nID0ge31cbiAgICAgICAgZm9yIGkgaW4gWzAuLi5ATElTVF9FU0NBUEVFUy5sZW5ndGhdXG4gICAgICAgICAgICBtYXBwaW5nW0BMSVNUX0VTQ0FQRUVTW2ldXSA9IEBMSVNUX0VTQ0FQRURbaV1cbiAgICAgICAgcmV0dXJuIG1hcHBpbmdcblxuICAgICMgQ2hhcmFjdGVycyB0aGF0IHdvdWxkIGNhdXNlIGEgZHVtcGVkIHN0cmluZyB0byByZXF1aXJlIGRvdWJsZSBxdW90aW5nLlxuICAgIEBQQVRURVJOX0NIQVJBQ1RFUlNfVE9fRVNDQVBFOiAgbmV3IFBhdHRlcm4gJ1tcXFxceDAwLVxcXFx4MWZdfFxceGMyXFx4ODV8XFx4YzJcXHhhMHxcXHhlMlxceDgwXFx4YTh8XFx4ZTJcXHg4MFxceGE5J1xuXG4gICAgIyBPdGhlciBwcmVjb21waWxlZCBwYXR0ZXJuc1xuICAgIEBQQVRURVJOX01BUFBJTkdfRVNDQVBFRVM6ICAgICAgbmV3IFBhdHRlcm4gQExJU1RfRVNDQVBFRVMuam9pbignfCcpLnNwbGl0KCdcXFxcJykuam9pbignXFxcXFxcXFwnKVxuICAgIEBQQVRURVJOX1NJTkdMRV9RVU9USU5HOiAgICAgICAgbmV3IFBhdHRlcm4gJ1tcXFxcc1xcJ1wiOnt9W1xcXFxdLCYqIz9dfF5bLT98PD49ISVAYF0nXG5cblxuXG4gICAgIyBEZXRlcm1pbmVzIGlmIGEgSmF2YVNjcmlwdCB2YWx1ZSB3b3VsZCByZXF1aXJlIGRvdWJsZSBxdW90aW5nIGluIFlBTUwuXG4gICAgI1xuICAgICMgQHBhcmFtIFtTdHJpbmddICAgdmFsdWUgICBBIEphdmFTY3JpcHQgdmFsdWUgdmFsdWVcbiAgICAjXG4gICAgIyBAcmV0dXJuIFtCb29sZWFuXSB0cnVlICAgIGlmIHRoZSB2YWx1ZSB3b3VsZCByZXF1aXJlIGRvdWJsZSBxdW90ZXMuXG4gICAgI1xuICAgIEByZXF1aXJlc0RvdWJsZVF1b3Rpbmc6ICh2YWx1ZSkgLT5cbiAgICAgICAgcmV0dXJuIEBQQVRURVJOX0NIQVJBQ1RFUlNfVE9fRVNDQVBFLnRlc3QgdmFsdWVcblxuXG4gICAgIyBFc2NhcGVzIGFuZCBzdXJyb3VuZHMgYSBKYXZhU2NyaXB0IHZhbHVlIHdpdGggZG91YmxlIHF1b3Rlcy5cbiAgICAjXG4gICAgIyBAcGFyYW0gW1N0cmluZ10gICB2YWx1ZSAgIEEgSmF2YVNjcmlwdCB2YWx1ZVxuICAgICNcbiAgICAjIEByZXR1cm4gW1N0cmluZ10gIFRoZSBxdW90ZWQsIGVzY2FwZWQgc3RyaW5nXG4gICAgI1xuICAgIEBlc2NhcGVXaXRoRG91YmxlUXVvdGVzOiAodmFsdWUpIC0+XG4gICAgICAgIHJlc3VsdCA9IEBQQVRURVJOX01BUFBJTkdfRVNDQVBFRVMucmVwbGFjZSB2YWx1ZSwgKHN0cikgPT5cbiAgICAgICAgICAgIHJldHVybiBATUFQUElOR19FU0NBUEVFU19UT19FU0NBUEVEW3N0cl1cbiAgICAgICAgcmV0dXJuICdcIicrcmVzdWx0KydcIidcblxuXG4gICAgIyBEZXRlcm1pbmVzIGlmIGEgSmF2YVNjcmlwdCB2YWx1ZSB3b3VsZCByZXF1aXJlIHNpbmdsZSBxdW90aW5nIGluIFlBTUwuXG4gICAgI1xuICAgICMgQHBhcmFtIFtTdHJpbmddICAgdmFsdWUgICBBIEphdmFTY3JpcHQgdmFsdWVcbiAgICAjXG4gICAgIyBAcmV0dXJuIFtCb29sZWFuXSB0cnVlIGlmIHRoZSB2YWx1ZSB3b3VsZCByZXF1aXJlIHNpbmdsZSBxdW90ZXMuXG4gICAgI1xuICAgIEByZXF1aXJlc1NpbmdsZVF1b3Rpbmc6ICh2YWx1ZSkgLT5cbiAgICAgICAgcmV0dXJuIEBQQVRURVJOX1NJTkdMRV9RVU9USU5HLnRlc3QgdmFsdWVcblxuXG4gICAgIyBFc2NhcGVzIGFuZCBzdXJyb3VuZHMgYSBKYXZhU2NyaXB0IHZhbHVlIHdpdGggc2luZ2xlIHF1b3Rlcy5cbiAgICAjXG4gICAgIyBAcGFyYW0gW1N0cmluZ10gICB2YWx1ZSAgIEEgSmF2YVNjcmlwdCB2YWx1ZVxuICAgICNcbiAgICAjIEByZXR1cm4gW1N0cmluZ10gIFRoZSBxdW90ZWQsIGVzY2FwZWQgc3RyaW5nXG4gICAgI1xuICAgIEBlc2NhcGVXaXRoU2luZ2xlUXVvdGVzOiAodmFsdWUpIC0+XG4gICAgICAgIHJldHVybiBcIidcIit2YWx1ZS5yZXBsYWNlKC8nL2csIFwiJydcIikrXCInXCJcblxuXG5tb2R1bGUuZXhwb3J0cyA9IEVzY2FwZXJcbiIsIlxuY2xhc3MgRHVtcEV4Y2VwdGlvbiBleHRlbmRzIEVycm9yXG5cbiAgICBjb25zdHJ1Y3RvcjogKEBtZXNzYWdlLCBAcGFyc2VkTGluZSwgQHNuaXBwZXQpIC0+XG5cbiAgICB0b1N0cmluZzogLT5cbiAgICAgICAgaWYgQHBhcnNlZExpbmU/IGFuZCBAc25pcHBldD9cbiAgICAgICAgICAgIHJldHVybiAnPER1bXBFeGNlcHRpb24+ICcgKyBAbWVzc2FnZSArICcgKGxpbmUgJyArIEBwYXJzZWRMaW5lICsgJzogXFwnJyArIEBzbmlwcGV0ICsgJ1xcJyknXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiAnPER1bXBFeGNlcHRpb24+ICcgKyBAbWVzc2FnZVxuXG5tb2R1bGUuZXhwb3J0cyA9IER1bXBFeGNlcHRpb25cbiIsIlxuY2xhc3MgUGFyc2VFeGNlcHRpb24gZXh0ZW5kcyBFcnJvclxuXG4gICAgY29uc3RydWN0b3I6IChAbWVzc2FnZSwgQHBhcnNlZExpbmUsIEBzbmlwcGV0KSAtPlxuXG4gICAgdG9TdHJpbmc6IC0+XG4gICAgICAgIGlmIEBwYXJzZWRMaW5lPyBhbmQgQHNuaXBwZXQ/XG4gICAgICAgICAgICByZXR1cm4gJzxQYXJzZUV4Y2VwdGlvbj4gJyArIEBtZXNzYWdlICsgJyAobGluZSAnICsgQHBhcnNlZExpbmUgKyAnOiBcXCcnICsgQHNuaXBwZXQgKyAnXFwnKSdcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuICc8UGFyc2VFeGNlcHRpb24+ICcgKyBAbWVzc2FnZVxuXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnNlRXhjZXB0aW9uXG4iLCJcbmNsYXNzIFBhcnNlTW9yZSBleHRlbmRzIEVycm9yXG5cbiAgICBjb25zdHJ1Y3RvcjogKEBtZXNzYWdlLCBAcGFyc2VkTGluZSwgQHNuaXBwZXQpIC0+XG5cbiAgICB0b1N0cmluZzogLT5cbiAgICAgICAgaWYgQHBhcnNlZExpbmU/IGFuZCBAc25pcHBldD9cbiAgICAgICAgICAgIHJldHVybiAnPFBhcnNlTW9yZT4gJyArIEBtZXNzYWdlICsgJyAobGluZSAnICsgQHBhcnNlZExpbmUgKyAnOiBcXCcnICsgQHNuaXBwZXQgKyAnXFwnKSdcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuICc8UGFyc2VNb3JlPiAnICsgQG1lc3NhZ2VcblxubW9kdWxlLmV4cG9ydHMgPSBQYXJzZU1vcmVcbiIsIlxuUGF0dGVybiAgICAgICAgID0gcmVxdWlyZSAnLi9QYXR0ZXJuJ1xuVW5lc2NhcGVyICAgICAgID0gcmVxdWlyZSAnLi9VbmVzY2FwZXInXG5Fc2NhcGVyICAgICAgICAgPSByZXF1aXJlICcuL0VzY2FwZXInXG5VdGlscyAgICAgICAgICAgPSByZXF1aXJlICcuL1V0aWxzJ1xuUGFyc2VFeGNlcHRpb24gID0gcmVxdWlyZSAnLi9FeGNlcHRpb24vUGFyc2VFeGNlcHRpb24nXG5QYXJzZU1vcmUgICAgICAgPSByZXF1aXJlICcuL0V4Y2VwdGlvbi9QYXJzZU1vcmUnXG5EdW1wRXhjZXB0aW9uICAgPSByZXF1aXJlICcuL0V4Y2VwdGlvbi9EdW1wRXhjZXB0aW9uJ1xuXG4jIElubGluZSBZQU1MIHBhcnNpbmcgYW5kIGR1bXBpbmdcbmNsYXNzIElubGluZVxuXG4gICAgIyBRdW90ZWQgc3RyaW5nIHJlZ3VsYXIgZXhwcmVzc2lvblxuICAgIEBSRUdFWF9RVU9URURfU1RSSU5HOiAgICAgICAgICAgICAgICcoPzpcIig/OlteXCJcXFxcXFxcXF0qKD86XFxcXFxcXFwuW15cIlxcXFxcXFxcXSopKilcInxcXCcoPzpbXlxcJ10qKD86XFwnXFwnW15cXCddKikqKVxcJyknXG5cbiAgICAjIFByZS1jb21waWxlZCBwYXR0ZXJuc1xuICAgICNcbiAgICBAUEFUVEVSTl9UUkFJTElOR19DT01NRU5UUzogICAgICAgICBuZXcgUGF0dGVybiAnXlxcXFxzKiMuKiQnXG4gICAgQFBBVFRFUk5fUVVPVEVEX1NDQUxBUjogICAgICAgICAgICAgbmV3IFBhdHRlcm4gJ14nK0BSRUdFWF9RVU9URURfU1RSSU5HXG4gICAgQFBBVFRFUk5fVEhPVVNBTkRfTlVNRVJJQ19TQ0FMQVI6ICAgbmV3IFBhdHRlcm4gJ14oLXxcXFxcKyk/WzAtOSxdKyhcXFxcLlswLTldKyk/JCdcbiAgICBAUEFUVEVSTl9TQ0FMQVJfQllfREVMSU1JVEVSUzogICAgICB7fVxuXG4gICAgIyBTZXR0aW5nc1xuICAgIEBzZXR0aW5nczoge31cblxuXG4gICAgIyBDb25maWd1cmUgWUFNTCBpbmxpbmUuXG4gICAgI1xuICAgICMgQHBhcmFtIFtCb29sZWFuXSAgZXhjZXB0aW9uT25JbnZhbGlkVHlwZSAgdHJ1ZSBpZiBhbiBleGNlcHRpb24gbXVzdCBiZSB0aHJvd24gb24gaW52YWxpZCB0eXBlcyAoYSBKYXZhU2NyaXB0IHJlc291cmNlIG9yIG9iamVjdCksIGZhbHNlIG90aGVyd2lzZVxuICAgICMgQHBhcmFtIFtGdW5jdGlvbl0gb2JqZWN0RGVjb2RlciAgICAgICAgICAgQSBmdW5jdGlvbiB0byBkZXNlcmlhbGl6ZSBjdXN0b20gb2JqZWN0cywgbnVsbCBvdGhlcndpc2VcbiAgICAjXG4gICAgQGNvbmZpZ3VyZTogKGV4Y2VwdGlvbk9uSW52YWxpZFR5cGUgPSBudWxsLCBvYmplY3REZWNvZGVyID0gbnVsbCkgLT5cbiAgICAgICAgIyBVcGRhdGUgc2V0dGluZ3NcbiAgICAgICAgQHNldHRpbmdzLmV4Y2VwdGlvbk9uSW52YWxpZFR5cGUgPSBleGNlcHRpb25PbkludmFsaWRUeXBlXG4gICAgICAgIEBzZXR0aW5ncy5vYmplY3REZWNvZGVyID0gb2JqZWN0RGVjb2RlclxuICAgICAgICByZXR1cm5cblxuXG4gICAgIyBDb252ZXJ0cyBhIFlBTUwgc3RyaW5nIHRvIGEgSmF2YVNjcmlwdCBvYmplY3QuXG4gICAgI1xuICAgICMgQHBhcmFtIFtTdHJpbmddICAgdmFsdWUgICAgICAgICAgICAgICAgICAgQSBZQU1MIHN0cmluZ1xuICAgICMgQHBhcmFtIFtCb29sZWFuXSAgZXhjZXB0aW9uT25JbnZhbGlkVHlwZSAgdHJ1ZSBpZiBhbiBleGNlcHRpb24gbXVzdCBiZSB0aHJvd24gb24gaW52YWxpZCB0eXBlcyAoYSBKYXZhU2NyaXB0IHJlc291cmNlIG9yIG9iamVjdCksIGZhbHNlIG90aGVyd2lzZVxuICAgICMgQHBhcmFtIFtGdW5jdGlvbl0gb2JqZWN0RGVjb2RlciAgICAgICAgICAgQSBmdW5jdGlvbiB0byBkZXNlcmlhbGl6ZSBjdXN0b20gb2JqZWN0cywgbnVsbCBvdGhlcndpc2VcbiAgICAjXG4gICAgIyBAcmV0dXJuIFtPYmplY3RdICBBIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgWUFNTCBzdHJpbmdcbiAgICAjXG4gICAgIyBAdGhyb3cgW1BhcnNlRXhjZXB0aW9uXVxuICAgICNcbiAgICBAcGFyc2U6ICh2YWx1ZSwgZXhjZXB0aW9uT25JbnZhbGlkVHlwZSA9IGZhbHNlLCBvYmplY3REZWNvZGVyID0gbnVsbCkgLT5cbiAgICAgICAgIyBVcGRhdGUgc2V0dGluZ3MgZnJvbSBsYXN0IGNhbGwgb2YgSW5saW5lLnBhcnNlKClcbiAgICAgICAgQHNldHRpbmdzLmV4Y2VwdGlvbk9uSW52YWxpZFR5cGUgPSBleGNlcHRpb25PbkludmFsaWRUeXBlXG4gICAgICAgIEBzZXR0aW5ncy5vYmplY3REZWNvZGVyID0gb2JqZWN0RGVjb2RlclxuXG4gICAgICAgIGlmIG5vdCB2YWx1ZT9cbiAgICAgICAgICAgIHJldHVybiAnJ1xuXG4gICAgICAgIHZhbHVlID0gVXRpbHMudHJpbSB2YWx1ZVxuXG4gICAgICAgIGlmIDAgaXMgdmFsdWUubGVuZ3RoXG4gICAgICAgICAgICByZXR1cm4gJydcblxuICAgICAgICAjIEtlZXAgYSBjb250ZXh0IG9iamVjdCB0byBwYXNzIHRocm91Z2ggc3RhdGljIG1ldGhvZHNcbiAgICAgICAgY29udGV4dCA9IHtleGNlcHRpb25PbkludmFsaWRUeXBlLCBvYmplY3REZWNvZGVyLCBpOiAwfVxuXG4gICAgICAgIHN3aXRjaCB2YWx1ZS5jaGFyQXQoMClcbiAgICAgICAgICAgIHdoZW4gJ1snXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gQHBhcnNlU2VxdWVuY2UgdmFsdWUsIGNvbnRleHRcbiAgICAgICAgICAgICAgICArK2NvbnRleHQuaVxuICAgICAgICAgICAgd2hlbiAneydcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBAcGFyc2VNYXBwaW5nIHZhbHVlLCBjb250ZXh0XG4gICAgICAgICAgICAgICAgKytjb250ZXh0LmlcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBAcGFyc2VTY2FsYXIgdmFsdWUsIG51bGwsIFsnXCInLCBcIidcIl0sIGNvbnRleHRcblxuICAgICAgICAjIFNvbWUgY29tbWVudHMgYXJlIGFsbG93ZWQgYXQgdGhlIGVuZFxuICAgICAgICBpZiBAUEFUVEVSTl9UUkFJTElOR19DT01NRU5UUy5yZXBsYWNlKHZhbHVlW2NvbnRleHQuaS4uXSwgJycpIGlzbnQgJydcbiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZUV4Y2VwdGlvbiAnVW5leHBlY3RlZCBjaGFyYWN0ZXJzIG5lYXIgXCInK3ZhbHVlW2NvbnRleHQuaS4uXSsnXCIuJ1xuXG4gICAgICAgIHJldHVybiByZXN1bHRcblxuXG4gICAgIyBEdW1wcyBhIGdpdmVuIEphdmFTY3JpcHQgdmFyaWFibGUgdG8gYSBZQU1MIHN0cmluZy5cbiAgICAjXG4gICAgIyBAcGFyYW0gW09iamVjdF0gICB2YWx1ZSAgICAgICAgICAgICAgICAgICBUaGUgSmF2YVNjcmlwdCB2YXJpYWJsZSB0byBjb252ZXJ0XG4gICAgIyBAcGFyYW0gW0Jvb2xlYW5dICBleGNlcHRpb25PbkludmFsaWRUeXBlICB0cnVlIGlmIGFuIGV4Y2VwdGlvbiBtdXN0IGJlIHRocm93biBvbiBpbnZhbGlkIHR5cGVzIChhIEphdmFTY3JpcHQgcmVzb3VyY2Ugb3Igb2JqZWN0KSwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAgIyBAcGFyYW0gW0Z1bmN0aW9uXSBvYmplY3RFbmNvZGVyICAgICAgICAgICBBIGZ1bmN0aW9uIHRvIHNlcmlhbGl6ZSBjdXN0b20gb2JqZWN0cywgbnVsbCBvdGhlcndpc2VcbiAgICAjXG4gICAgIyBAcmV0dXJuIFtTdHJpbmddICBUaGUgWUFNTCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBKYXZhU2NyaXB0IG9iamVjdFxuICAgICNcbiAgICAjIEB0aHJvdyBbRHVtcEV4Y2VwdGlvbl1cbiAgICAjXG4gICAgQGR1bXA6ICh2YWx1ZSwgZXhjZXB0aW9uT25JbnZhbGlkVHlwZSA9IGZhbHNlLCBvYmplY3RFbmNvZGVyID0gbnVsbCkgLT5cbiAgICAgICAgaWYgbm90IHZhbHVlP1xuICAgICAgICAgICAgcmV0dXJuICdudWxsJ1xuICAgICAgICB0eXBlID0gdHlwZW9mIHZhbHVlXG4gICAgICAgIGlmIHR5cGUgaXMgJ29iamVjdCdcbiAgICAgICAgICAgIGlmIHZhbHVlIGluc3RhbmNlb2YgRGF0ZVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b0lTT1N0cmluZygpXG4gICAgICAgICAgICBlbHNlIGlmIG9iamVjdEVuY29kZXI/XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gb2JqZWN0RW5jb2RlciB2YWx1ZVxuICAgICAgICAgICAgICAgIGlmIHR5cGVvZiByZXN1bHQgaXMgJ3N0cmluZycgb3IgcmVzdWx0P1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICByZXR1cm4gQGR1bXBPYmplY3QgdmFsdWVcbiAgICAgICAgaWYgdHlwZSBpcyAnYm9vbGVhbidcbiAgICAgICAgICAgIHJldHVybiAoaWYgdmFsdWUgdGhlbiAndHJ1ZScgZWxzZSAnZmFsc2UnKVxuICAgICAgICBpZiBVdGlscy5pc0RpZ2l0cyh2YWx1ZSlcbiAgICAgICAgICAgIHJldHVybiAoaWYgdHlwZSBpcyAnc3RyaW5nJyB0aGVuIFwiJ1wiK3ZhbHVlK1wiJ1wiIGVsc2UgU3RyaW5nKHBhcnNlSW50KHZhbHVlKSkpXG4gICAgICAgIGlmIFV0aWxzLmlzTnVtZXJpYyh2YWx1ZSlcbiAgICAgICAgICAgIHJldHVybiAoaWYgdHlwZSBpcyAnc3RyaW5nJyB0aGVuIFwiJ1wiK3ZhbHVlK1wiJ1wiIGVsc2UgU3RyaW5nKHBhcnNlRmxvYXQodmFsdWUpKSlcbiAgICAgICAgaWYgdHlwZSBpcyAnbnVtYmVyJ1xuICAgICAgICAgICAgcmV0dXJuIChpZiB2YWx1ZSBpcyBJbmZpbml0eSB0aGVuICcuSW5mJyBlbHNlIChpZiB2YWx1ZSBpcyAtSW5maW5pdHkgdGhlbiAnLS5JbmYnIGVsc2UgKGlmIGlzTmFOKHZhbHVlKSB0aGVuICcuTmFOJyBlbHNlIHZhbHVlKSkpXG4gICAgICAgIGlmIEVzY2FwZXIucmVxdWlyZXNEb3VibGVRdW90aW5nIHZhbHVlXG4gICAgICAgICAgICByZXR1cm4gRXNjYXBlci5lc2NhcGVXaXRoRG91YmxlUXVvdGVzIHZhbHVlXG4gICAgICAgIGlmIEVzY2FwZXIucmVxdWlyZXNTaW5nbGVRdW90aW5nIHZhbHVlXG4gICAgICAgICAgICByZXR1cm4gRXNjYXBlci5lc2NhcGVXaXRoU2luZ2xlUXVvdGVzIHZhbHVlXG4gICAgICAgIGlmICcnIGlzIHZhbHVlXG4gICAgICAgICAgICByZXR1cm4gJ1wiXCInXG4gICAgICAgIGlmIFV0aWxzLlBBVFRFUk5fREFURS50ZXN0IHZhbHVlXG4gICAgICAgICAgICByZXR1cm4gXCInXCIrdmFsdWUrXCInXCI7XG4gICAgICAgIGlmIHZhbHVlLnRvTG93ZXJDYXNlKCkgaW4gWydudWxsJywnficsJ3RydWUnLCdmYWxzZSddXG4gICAgICAgICAgICByZXR1cm4gXCInXCIrdmFsdWUrXCInXCJcbiAgICAgICAgIyBEZWZhdWx0XG4gICAgICAgIHJldHVybiB2YWx1ZTtcblxuXG4gICAgIyBEdW1wcyBhIEphdmFTY3JpcHQgb2JqZWN0IHRvIGEgWUFNTCBzdHJpbmcuXG4gICAgI1xuICAgICMgQHBhcmFtIFtPYmplY3RdICAgdmFsdWUgICAgICAgICAgICAgICAgICAgVGhlIEphdmFTY3JpcHQgb2JqZWN0IHRvIGR1bXBcbiAgICAjIEBwYXJhbSBbQm9vbGVhbl0gIGV4Y2VwdGlvbk9uSW52YWxpZFR5cGUgIHRydWUgaWYgYW4gZXhjZXB0aW9uIG11c3QgYmUgdGhyb3duIG9uIGludmFsaWQgdHlwZXMgKGEgSmF2YVNjcmlwdCByZXNvdXJjZSBvciBvYmplY3QpLCBmYWxzZSBvdGhlcndpc2VcbiAgICAjIEBwYXJhbSBbRnVuY3Rpb25dIG9iamVjdEVuY29kZXIgICAgICAgICAgIEEgZnVuY3Rpb24gZG8gc2VyaWFsaXplIGN1c3RvbSBvYmplY3RzLCBudWxsIG90aGVyd2lzZVxuICAgICNcbiAgICAjIEByZXR1cm4gc3RyaW5nIFRoZSBZQU1MIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIEphdmFTY3JpcHQgb2JqZWN0XG4gICAgI1xuICAgIEBkdW1wT2JqZWN0OiAodmFsdWUsIGV4Y2VwdGlvbk9uSW52YWxpZFR5cGUsIG9iamVjdFN1cHBvcnQgPSBudWxsKSAtPlxuICAgICAgICAjIEFycmF5XG4gICAgICAgIGlmIHZhbHVlIGluc3RhbmNlb2YgQXJyYXlcbiAgICAgICAgICAgIG91dHB1dCA9IFtdXG4gICAgICAgICAgICBmb3IgdmFsIGluIHZhbHVlXG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2ggQGR1bXAgdmFsXG4gICAgICAgICAgICByZXR1cm4gJ1snK291dHB1dC5qb2luKCcsICcpKyddJ1xuXG4gICAgICAgICMgTWFwcGluZ1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBvdXRwdXQgPSBbXVxuICAgICAgICAgICAgZm9yIGtleSwgdmFsIG9mIHZhbHVlXG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2ggQGR1bXAoa2V5KSsnOiAnK0BkdW1wKHZhbClcbiAgICAgICAgICAgIHJldHVybiAneycrb3V0cHV0LmpvaW4oJywgJykrJ30nXG5cblxuICAgICMgUGFyc2VzIGEgc2NhbGFyIHRvIGEgWUFNTCBzdHJpbmcuXG4gICAgI1xuICAgICMgQHBhcmFtIFtPYmplY3RdICAgc2NhbGFyXG4gICAgIyBAcGFyYW0gW0FycmF5XSAgICBkZWxpbWl0ZXJzXG4gICAgIyBAcGFyYW0gW0FycmF5XSAgICBzdHJpbmdEZWxpbWl0ZXJzXG4gICAgIyBAcGFyYW0gW09iamVjdF0gICBjb250ZXh0XG4gICAgIyBAcGFyYW0gW0Jvb2xlYW5dICBldmFsdWF0ZVxuICAgICNcbiAgICAjIEByZXR1cm4gW1N0cmluZ10gIEEgWUFNTCBzdHJpbmdcbiAgICAjXG4gICAgIyBAdGhyb3cgW1BhcnNlRXhjZXB0aW9uXSBXaGVuIG1hbGZvcm1lZCBpbmxpbmUgWUFNTCBzdHJpbmcgaXMgcGFyc2VkXG4gICAgI1xuICAgIEBwYXJzZVNjYWxhcjogKHNjYWxhciwgZGVsaW1pdGVycyA9IG51bGwsIHN0cmluZ0RlbGltaXRlcnMgPSBbJ1wiJywgXCInXCJdLCBjb250ZXh0ID0gbnVsbCwgZXZhbHVhdGUgPSB0cnVlKSAtPlxuICAgICAgICB1bmxlc3MgY29udGV4dD9cbiAgICAgICAgICAgIGNvbnRleHQgPSBleGNlcHRpb25PbkludmFsaWRUeXBlOiBAc2V0dGluZ3MuZXhjZXB0aW9uT25JbnZhbGlkVHlwZSwgb2JqZWN0RGVjb2RlcjogQHNldHRpbmdzLm9iamVjdERlY29kZXIsIGk6IDBcbiAgICAgICAge2l9ID0gY29udGV4dFxuXG4gICAgICAgIGlmIHNjYWxhci5jaGFyQXQoaSkgaW4gc3RyaW5nRGVsaW1pdGVyc1xuICAgICAgICAgICAgIyBRdW90ZWQgc2NhbGFyXG4gICAgICAgICAgICBvdXRwdXQgPSBAcGFyc2VRdW90ZWRTY2FsYXIgc2NhbGFyLCBjb250ZXh0XG4gICAgICAgICAgICB7aX0gPSBjb250ZXh0XG5cbiAgICAgICAgICAgIGlmIGRlbGltaXRlcnM/XG4gICAgICAgICAgICAgICAgdG1wID0gVXRpbHMubHRyaW0gc2NhbGFyW2kuLl0sICcgJ1xuICAgICAgICAgICAgICAgIGlmIG5vdCh0bXAuY2hhckF0KDApIGluIGRlbGltaXRlcnMpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZUV4Y2VwdGlvbiAnVW5leHBlY3RlZCBjaGFyYWN0ZXJzICgnK3NjYWxhcltpLi5dKycpLidcblxuICAgICAgICBlbHNlXG4gICAgICAgICAgICAjIFwibm9ybWFsXCIgc3RyaW5nXG4gICAgICAgICAgICBpZiBub3QgZGVsaW1pdGVyc1xuICAgICAgICAgICAgICAgIG91dHB1dCA9IHNjYWxhcltpLi5dXG4gICAgICAgICAgICAgICAgaSArPSBvdXRwdXQubGVuZ3RoXG5cbiAgICAgICAgICAgICAgICAjIFJlbW92ZSBjb21tZW50c1xuICAgICAgICAgICAgICAgIHN0cnBvcyA9IG91dHB1dC5pbmRleE9mICcgIydcbiAgICAgICAgICAgICAgICBpZiBzdHJwb3MgaXNudCAtMVxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBVdGlscy5ydHJpbSBvdXRwdXRbMC4uLnN0cnBvc11cblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGpvaW5lZERlbGltaXRlcnMgPSBkZWxpbWl0ZXJzLmpvaW4oJ3wnKVxuICAgICAgICAgICAgICAgIHBhdHRlcm4gPSBAUEFUVEVSTl9TQ0FMQVJfQllfREVMSU1JVEVSU1tqb2luZWREZWxpbWl0ZXJzXVxuICAgICAgICAgICAgICAgIHVubGVzcyBwYXR0ZXJuP1xuICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuID0gbmV3IFBhdHRlcm4gJ14oLis/KSgnK2pvaW5lZERlbGltaXRlcnMrJyknXG4gICAgICAgICAgICAgICAgICAgIEBQQVRURVJOX1NDQUxBUl9CWV9ERUxJTUlURVJTW2pvaW5lZERlbGltaXRlcnNdID0gcGF0dGVyblxuICAgICAgICAgICAgICAgIGlmIG1hdGNoID0gcGF0dGVybi5leGVjIHNjYWxhcltpLi5dXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgICAgIGkgKz0gb3V0cHV0Lmxlbmd0aFxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXhjZXB0aW9uICdNYWxmb3JtZWQgaW5saW5lIFlBTUwgc3RyaW5nICgnK3NjYWxhcisnKS4nXG5cblxuICAgICAgICAgICAgaWYgZXZhbHVhdGVcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBAZXZhbHVhdGVTY2FsYXIgb3V0cHV0LCBjb250ZXh0XG5cbiAgICAgICAgY29udGV4dC5pID0gaVxuICAgICAgICByZXR1cm4gb3V0cHV0XG5cblxuICAgICMgUGFyc2VzIGEgcXVvdGVkIHNjYWxhciB0byBZQU1MLlxuICAgICNcbiAgICAjIEBwYXJhbSBbU3RyaW5nXSAgIHNjYWxhclxuICAgICMgQHBhcmFtIFtPYmplY3RdICAgY29udGV4dFxuICAgICNcbiAgICAjIEByZXR1cm4gW1N0cmluZ10gIEEgWUFNTCBzdHJpbmdcbiAgICAjXG4gICAgIyBAdGhyb3cgW1BhcnNlTW9yZV0gV2hlbiBtYWxmb3JtZWQgaW5saW5lIFlBTUwgc3RyaW5nIGlzIHBhcnNlZFxuICAgICNcbiAgICBAcGFyc2VRdW90ZWRTY2FsYXI6IChzY2FsYXIsIGNvbnRleHQpIC0+XG4gICAgICAgIHtpfSA9IGNvbnRleHRcblxuICAgICAgICB1bmxlc3MgbWF0Y2ggPSBAUEFUVEVSTl9RVU9URURfU0NBTEFSLmV4ZWMgc2NhbGFyW2kuLl1cbiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZU1vcmUgJ01hbGZvcm1lZCBpbmxpbmUgWUFNTCBzdHJpbmcgKCcrc2NhbGFyW2kuLl0rJykuJ1xuXG4gICAgICAgIG91dHB1dCA9IG1hdGNoWzBdLnN1YnN0cigxLCBtYXRjaFswXS5sZW5ndGggLSAyKVxuXG4gICAgICAgIGlmICdcIicgaXMgc2NhbGFyLmNoYXJBdChpKVxuICAgICAgICAgICAgb3V0cHV0ID0gVW5lc2NhcGVyLnVuZXNjYXBlRG91YmxlUXVvdGVkU3RyaW5nIG91dHB1dFxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBvdXRwdXQgPSBVbmVzY2FwZXIudW5lc2NhcGVTaW5nbGVRdW90ZWRTdHJpbmcgb3V0cHV0XG5cbiAgICAgICAgaSArPSBtYXRjaFswXS5sZW5ndGhcblxuICAgICAgICBjb250ZXh0LmkgPSBpXG4gICAgICAgIHJldHVybiBvdXRwdXRcblxuXG4gICAgIyBQYXJzZXMgYSBzZXF1ZW5jZSB0byBhIFlBTUwgc3RyaW5nLlxuICAgICNcbiAgICAjIEBwYXJhbSBbU3RyaW5nXSAgIHNlcXVlbmNlXG4gICAgIyBAcGFyYW0gW09iamVjdF0gICBjb250ZXh0XG4gICAgI1xuICAgICMgQHJldHVybiBbU3RyaW5nXSAgQSBZQU1MIHN0cmluZ1xuICAgICNcbiAgICAjIEB0aHJvdyBbUGFyc2VNb3JlXSBXaGVuIG1hbGZvcm1lZCBpbmxpbmUgWUFNTCBzdHJpbmcgaXMgcGFyc2VkXG4gICAgI1xuICAgIEBwYXJzZVNlcXVlbmNlOiAoc2VxdWVuY2UsIGNvbnRleHQpIC0+XG4gICAgICAgIG91dHB1dCA9IFtdXG4gICAgICAgIGxlbiA9IHNlcXVlbmNlLmxlbmd0aFxuICAgICAgICB7aX0gPSBjb250ZXh0XG4gICAgICAgIGkgKz0gMVxuXG4gICAgICAgICMgW2ZvbywgYmFyLCAuLi5dXG4gICAgICAgIHdoaWxlIGkgPCBsZW5cbiAgICAgICAgICAgIGNvbnRleHQuaSA9IGlcbiAgICAgICAgICAgIHN3aXRjaCBzZXF1ZW5jZS5jaGFyQXQoaSlcbiAgICAgICAgICAgICAgICB3aGVuICdbJ1xuICAgICAgICAgICAgICAgICAgICAjIE5lc3RlZCBzZXF1ZW5jZVxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQucHVzaCBAcGFyc2VTZXF1ZW5jZSBzZXF1ZW5jZSwgY29udGV4dFxuICAgICAgICAgICAgICAgICAgICB7aX0gPSBjb250ZXh0XG4gICAgICAgICAgICAgICAgd2hlbiAneydcbiAgICAgICAgICAgICAgICAgICAgIyBOZXN0ZWQgbWFwcGluZ1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQucHVzaCBAcGFyc2VNYXBwaW5nIHNlcXVlbmNlLCBjb250ZXh0XG4gICAgICAgICAgICAgICAgICAgIHtpfSA9IGNvbnRleHRcbiAgICAgICAgICAgICAgICB3aGVuICddJ1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0cHV0XG4gICAgICAgICAgICAgICAgd2hlbiAnLCcsICcgJywgXCJcXG5cIlxuICAgICAgICAgICAgICAgICAgICAjIERvIG5vdGhpbmdcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGlzUXVvdGVkID0gKHNlcXVlbmNlLmNoYXJBdChpKSBpbiBbJ1wiJywgXCInXCJdKVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IEBwYXJzZVNjYWxhciBzZXF1ZW5jZSwgWycsJywgJ10nXSwgWydcIicsIFwiJ1wiXSwgY29udGV4dFxuICAgICAgICAgICAgICAgICAgICB7aX0gPSBjb250ZXh0XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgbm90KGlzUXVvdGVkKSBhbmQgdHlwZW9mKHZhbHVlKSBpcyAnc3RyaW5nJyBhbmQgKHZhbHVlLmluZGV4T2YoJzogJykgaXNudCAtMSBvciB2YWx1ZS5pbmRleE9mKFwiOlxcblwiKSBpc250IC0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgIyBFbWJlZGRlZCBtYXBwaW5nP1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBAcGFyc2VNYXBwaW5nICd7Jyt2YWx1ZSsnfSdcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE5vLCBpdCdzIG5vdFxuXG5cbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0LnB1c2ggdmFsdWVcblxuICAgICAgICAgICAgICAgICAgICAtLWlcblxuICAgICAgICAgICAgKytpXG5cbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlTW9yZSAnTWFsZm9ybWVkIGlubGluZSBZQU1MIHN0cmluZyAnK3NlcXVlbmNlXG5cblxuICAgICMgUGFyc2VzIGEgbWFwcGluZyB0byBhIFlBTUwgc3RyaW5nLlxuICAgICNcbiAgICAjIEBwYXJhbSBbU3RyaW5nXSAgIG1hcHBpbmdcbiAgICAjIEBwYXJhbSBbT2JqZWN0XSAgIGNvbnRleHRcbiAgICAjXG4gICAgIyBAcmV0dXJuIFtTdHJpbmddICBBIFlBTUwgc3RyaW5nXG4gICAgI1xuICAgICMgQHRocm93IFtQYXJzZU1vcmVdIFdoZW4gbWFsZm9ybWVkIGlubGluZSBZQU1MIHN0cmluZyBpcyBwYXJzZWRcbiAgICAjXG4gICAgQHBhcnNlTWFwcGluZzogKG1hcHBpbmcsIGNvbnRleHQpIC0+XG4gICAgICAgIG91dHB1dCA9IHt9XG4gICAgICAgIGxlbiA9IG1hcHBpbmcubGVuZ3RoXG4gICAgICAgIHtpfSA9IGNvbnRleHRcbiAgICAgICAgaSArPSAxXG5cbiAgICAgICAgIyB7Zm9vOiBiYXIsIGJhcjpmb28sIC4uLn1cbiAgICAgICAgc2hvdWxkQ29udGludWVXaGlsZUxvb3AgPSBmYWxzZVxuICAgICAgICB3aGlsZSBpIDwgbGVuXG4gICAgICAgICAgICBjb250ZXh0LmkgPSBpXG4gICAgICAgICAgICBzd2l0Y2ggbWFwcGluZy5jaGFyQXQoaSlcbiAgICAgICAgICAgICAgICB3aGVuICcgJywgJywnLCBcIlxcblwiXG4gICAgICAgICAgICAgICAgICAgICsraVxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmkgPSBpXG4gICAgICAgICAgICAgICAgICAgIHNob3VsZENvbnRpbnVlV2hpbGVMb29wID0gdHJ1ZVxuICAgICAgICAgICAgICAgIHdoZW4gJ30nXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXRwdXRcblxuICAgICAgICAgICAgaWYgc2hvdWxkQ29udGludWVXaGlsZUxvb3BcbiAgICAgICAgICAgICAgICBzaG91bGRDb250aW51ZVdoaWxlTG9vcCA9IGZhbHNlXG4gICAgICAgICAgICAgICAgY29udGludWVcblxuICAgICAgICAgICAgIyBLZXlcbiAgICAgICAgICAgIGtleSA9IEBwYXJzZVNjYWxhciBtYXBwaW5nLCBbJzonLCAnICcsIFwiXFxuXCJdLCBbJ1wiJywgXCInXCJdLCBjb250ZXh0LCBmYWxzZVxuICAgICAgICAgICAge2l9ID0gY29udGV4dFxuXG4gICAgICAgICAgICAjIFZhbHVlXG4gICAgICAgICAgICBkb25lID0gZmFsc2VcblxuICAgICAgICAgICAgd2hpbGUgaSA8IGxlblxuICAgICAgICAgICAgICAgIGNvbnRleHQuaSA9IGlcbiAgICAgICAgICAgICAgICBzd2l0Y2ggbWFwcGluZy5jaGFyQXQoaSlcbiAgICAgICAgICAgICAgICAgICAgd2hlbiAnWydcbiAgICAgICAgICAgICAgICAgICAgICAgICMgTmVzdGVkIHNlcXVlbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IEBwYXJzZVNlcXVlbmNlIG1hcHBpbmcsIGNvbnRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgIHtpfSA9IGNvbnRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICMgU3BlYzogS2V5cyBNVVNUIGJlIHVuaXF1ZTsgZmlyc3Qgb25lIHdpbnMuXG4gICAgICAgICAgICAgICAgICAgICAgICAjIFBhcnNlciBjYW5ub3QgYWJvcnQgdGhpcyBtYXBwaW5nIGVhcmxpZXIsIHNpbmNlIGxpbmVzXG4gICAgICAgICAgICAgICAgICAgICAgICAjIGFyZSBwcm9jZXNzZWQgc2VxdWVudGlhbGx5LlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3V0cHV0W2tleV0gPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W2tleV0gPSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgd2hlbiAneydcbiAgICAgICAgICAgICAgICAgICAgICAgICMgTmVzdGVkIG1hcHBpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gQHBhcnNlTWFwcGluZyBtYXBwaW5nLCBjb250ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICB7aX0gPSBjb250ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAjIFNwZWM6IEtleXMgTVVTVCBiZSB1bmlxdWU7IGZpcnN0IG9uZSB3aW5zLlxuICAgICAgICAgICAgICAgICAgICAgICAgIyBQYXJzZXIgY2Fubm90IGFib3J0IHRoaXMgbWFwcGluZyBlYXJsaWVyLCBzaW5jZSBsaW5lc1xuICAgICAgICAgICAgICAgICAgICAgICAgIyBhcmUgcHJvY2Vzc2VkIHNlcXVlbnRpYWxseS5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIG91dHB1dFtrZXldID09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtrZXldID0gdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgIHdoZW4gJzonLCAnICcsIFwiXFxuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICMgRG8gbm90aGluZ1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IEBwYXJzZVNjYWxhciBtYXBwaW5nLCBbJywnLCAnfSddLCBbJ1wiJywgXCInXCJdLCBjb250ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICB7aX0gPSBjb250ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAjIFNwZWM6IEtleXMgTVVTVCBiZSB1bmlxdWU7IGZpcnN0IG9uZSB3aW5zLlxuICAgICAgICAgICAgICAgICAgICAgICAgIyBQYXJzZXIgY2Fubm90IGFib3J0IHRoaXMgbWFwcGluZyBlYXJsaWVyLCBzaW5jZSBsaW5lc1xuICAgICAgICAgICAgICAgICAgICAgICAgIyBhcmUgcHJvY2Vzc2VkIHNlcXVlbnRpYWxseS5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIG91dHB1dFtrZXldID09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtrZXldID0gdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAtLWlcblxuICAgICAgICAgICAgICAgICsraVxuXG4gICAgICAgICAgICAgICAgaWYgZG9uZVxuICAgICAgICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgIHRocm93IG5ldyBQYXJzZU1vcmUgJ01hbGZvcm1lZCBpbmxpbmUgWUFNTCBzdHJpbmcgJyttYXBwaW5nXG5cblxuICAgICMgRXZhbHVhdGVzIHNjYWxhcnMgYW5kIHJlcGxhY2VzIG1hZ2ljIHZhbHVlcy5cbiAgICAjXG4gICAgIyBAcGFyYW0gW1N0cmluZ10gICBzY2FsYXJcbiAgICAjXG4gICAgIyBAcmV0dXJuIFtTdHJpbmddICBBIFlBTUwgc3RyaW5nXG4gICAgI1xuICAgIEBldmFsdWF0ZVNjYWxhcjogKHNjYWxhciwgY29udGV4dCkgLT5cbiAgICAgICAgc2NhbGFyID0gVXRpbHMudHJpbShzY2FsYXIpXG4gICAgICAgIHNjYWxhckxvd2VyID0gc2NhbGFyLnRvTG93ZXJDYXNlKClcblxuICAgICAgICBzd2l0Y2ggc2NhbGFyTG93ZXJcbiAgICAgICAgICAgIHdoZW4gJ251bGwnLCAnJywgJ34nXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgIHdoZW4gJ3RydWUnXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIHdoZW4gJ2ZhbHNlJ1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgd2hlbiAnLmluZidcbiAgICAgICAgICAgICAgICByZXR1cm4gSW5maW5pdHlcbiAgICAgICAgICAgIHdoZW4gJy5uYW4nXG4gICAgICAgICAgICAgICAgcmV0dXJuIE5hTlxuICAgICAgICAgICAgd2hlbiAnLS5pbmYnXG4gICAgICAgICAgICAgICAgcmV0dXJuIEluZmluaXR5XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZmlyc3RDaGFyID0gc2NhbGFyTG93ZXIuY2hhckF0KDApXG4gICAgICAgICAgICAgICAgc3dpdGNoIGZpcnN0Q2hhclxuICAgICAgICAgICAgICAgICAgICB3aGVuICchJ1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RTcGFjZSA9IHNjYWxhci5pbmRleE9mKCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZpcnN0U3BhY2UgaXMgLTFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFdvcmQgPSBzY2FsYXJMb3dlclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0V29yZCA9IHNjYWxhckxvd2VyWzAuLi5maXJzdFNwYWNlXVxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIGZpcnN0V29yZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gJyEnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZpcnN0U3BhY2UgaXNudCAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50IEBwYXJzZVNjYWxhcihzY2FsYXJbMi4uXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuICchc3RyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVXRpbHMubHRyaW0gc2NhbGFyWzQuLl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuICchIXN0cidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFV0aWxzLmx0cmltIHNjYWxhcls1Li5dXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiAnISFpbnQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUludChAcGFyc2VTY2FsYXIoc2NhbGFyWzUuLl0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gJyEhYm9vbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFV0aWxzLnBhcnNlQm9vbGVhbihAcGFyc2VTY2FsYXIoc2NhbGFyWzYuLl0pLCBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuICchIWZsb2F0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChAcGFyc2VTY2FsYXIoc2NhbGFyWzcuLl0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gJyEhdGltZXN0YW1wJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVXRpbHMuc3RyaW5nVG9EYXRlKFV0aWxzLmx0cmltKHNjYWxhclsxMS4uXSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmxlc3MgY29udGV4dD9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSBleGNlcHRpb25PbkludmFsaWRUeXBlOiBAc2V0dGluZ3MuZXhjZXB0aW9uT25JbnZhbGlkVHlwZSwgb2JqZWN0RGVjb2RlcjogQHNldHRpbmdzLm9iamVjdERlY29kZXIsIGk6IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge29iamVjdERlY29kZXIsIGV4Y2VwdGlvbk9uSW52YWxpZFR5cGV9ID0gY29udGV4dFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9iamVjdERlY29kZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgb2JqZWN0RGVjb2RlciBmdW5jdGlvbiBpcyBnaXZlbiwgd2UgY2FuIGRvIGN1c3RvbSBkZWNvZGluZyBvZiBjdXN0b20gdHlwZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaW1tZWRTY2FsYXIgPSBVdGlscy5ydHJpbSBzY2FsYXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0U3BhY2UgPSB0cmltbWVkU2NhbGFyLmluZGV4T2YoJyAnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZmlyc3RTcGFjZSBpcyAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3REZWNvZGVyIHRyaW1tZWRTY2FsYXIsIG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJWYWx1ZSA9IFV0aWxzLmx0cmltIHRyaW1tZWRTY2FsYXJbZmlyc3RTcGFjZSsxLi5dXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5sZXNzIHN1YlZhbHVlLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViVmFsdWUgPSBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdERlY29kZXIgdHJpbW1lZFNjYWxhclswLi4uZmlyc3RTcGFjZV0sIHN1YlZhbHVlXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXhjZXB0aW9uT25JbnZhbGlkVHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXhjZXB0aW9uICdDdXN0b20gb2JqZWN0IHN1cHBvcnQgd2hlbiBwYXJzaW5nIGEgWUFNTCBmaWxlIGhhcyBiZWVuIGRpc2FibGVkLidcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgICAgICB3aGVuICcwJ1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgJzB4JyBpcyBzY2FsYXJbMC4uLjJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFV0aWxzLmhleERlYyBzY2FsYXJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgVXRpbHMuaXNEaWdpdHMgc2NhbGFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFV0aWxzLm9jdERlYyBzY2FsYXJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgVXRpbHMuaXNOdW1lcmljIHNjYWxhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0IHNjYWxhclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzY2FsYXJcbiAgICAgICAgICAgICAgICAgICAgd2hlbiAnKydcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIFV0aWxzLmlzRGlnaXRzIHNjYWxhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdyA9IHNjYWxhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc3QgPSBwYXJzZUludChyYXcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmF3IGlzIFN0cmluZyhjYXN0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhd1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiBVdGlscy5pc051bWVyaWMgc2NhbGFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQgc2NhbGFyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIEBQQVRURVJOX1RIT1VTQU5EX05VTUVSSUNfU0NBTEFSLnRlc3Qgc2NhbGFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoc2NhbGFyLnJlcGxhY2UoJywnLCAnJykpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhbGFyXG4gICAgICAgICAgICAgICAgICAgIHdoZW4gJy0nXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiBVdGlscy5pc0RpZ2l0cyhzY2FsYXJbMS4uXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAnMCcgaXMgc2NhbGFyLmNoYXJBdCgxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLVV0aWxzLm9jdERlYyhzY2FsYXJbMS4uXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdyA9IHNjYWxhclsxLi5dXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc3QgPSBwYXJzZUludChyYXcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJhdyBpcyBTdHJpbmcoY2FzdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtY2FzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLXJhd1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiBVdGlscy5pc051bWVyaWMgc2NhbGFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQgc2NhbGFyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIEBQQVRURVJOX1RIT1VTQU5EX05VTUVSSUNfU0NBTEFSLnRlc3Qgc2NhbGFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoc2NhbGFyLnJlcGxhY2UoJywnLCAnJykpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhbGFyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRhdGUgPSBVdGlscy5zdHJpbmdUb0RhdGUoc2NhbGFyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIFV0aWxzLmlzTnVtZXJpYyhzY2FsYXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQgc2NhbGFyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIEBQQVRURVJOX1RIT1VTQU5EX05VTUVSSUNfU0NBTEFSLnRlc3Qgc2NhbGFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoc2NhbGFyLnJlcGxhY2UoJywnLCAnJykpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhbGFyXG5cbm1vZHVsZS5leHBvcnRzID0gSW5saW5lXG4iLCJcbklubGluZSAgICAgICAgICA9IHJlcXVpcmUgJy4vSW5saW5lJ1xuUGF0dGVybiAgICAgICAgID0gcmVxdWlyZSAnLi9QYXR0ZXJuJ1xuVXRpbHMgICAgICAgICAgID0gcmVxdWlyZSAnLi9VdGlscydcblBhcnNlRXhjZXB0aW9uICA9IHJlcXVpcmUgJy4vRXhjZXB0aW9uL1BhcnNlRXhjZXB0aW9uJ1xuUGFyc2VNb3JlICAgICAgID0gcmVxdWlyZSAnLi9FeGNlcHRpb24vUGFyc2VNb3JlJ1xuXG4jIFBhcnNlciBwYXJzZXMgWUFNTCBzdHJpbmdzIHRvIGNvbnZlcnQgdGhlbSB0byBKYXZhU2NyaXB0IG9iamVjdHMuXG4jXG5jbGFzcyBQYXJzZXJcblxuICAgICMgUHJlLWNvbXBpbGVkIHBhdHRlcm5zXG4gICAgI1xuICAgIFBBVFRFUk5fRk9MREVEX1NDQUxBUl9BTEw6ICAgICAgICAgICAgICBuZXcgUGF0dGVybiAnXig/Oig/PHR5cGU+IVteXFxcXHw+XSopXFxcXHMrKT8oPzxzZXBhcmF0b3I+XFxcXHx8PikoPzxtb2RpZmllcnM+XFxcXCt8XFxcXC18XFxcXGQrfFxcXFwrXFxcXGQrfFxcXFwtXFxcXGQrfFxcXFxkK1xcXFwrfFxcXFxkK1xcXFwtKT8oPzxjb21tZW50cz4gKyMuKik/JCdcbiAgICBQQVRURVJOX0ZPTERFRF9TQ0FMQVJfRU5EOiAgICAgICAgICAgICAgbmV3IFBhdHRlcm4gJyg/PHNlcGFyYXRvcj5cXFxcfHw+KSg/PG1vZGlmaWVycz5cXFxcK3xcXFxcLXxcXFxcZCt8XFxcXCtcXFxcZCt8XFxcXC1cXFxcZCt8XFxcXGQrXFxcXCt8XFxcXGQrXFxcXC0pPyg/PGNvbW1lbnRzPiArIy4qKT8kJ1xuICAgIFBBVFRFUk5fU0VRVUVOQ0VfSVRFTTogICAgICAgICAgICAgICAgICBuZXcgUGF0dGVybiAnXlxcXFwtKCg/PGxlYWRzcGFjZXM+XFxcXHMrKSg/PHZhbHVlPi4rPykpP1xcXFxzKiQnXG4gICAgUEFUVEVSTl9BTkNIT1JfVkFMVUU6ICAgICAgICAgICAgICAgICAgIG5ldyBQYXR0ZXJuICdeJig/PHJlZj5bXiBdKykgKig/PHZhbHVlPi4qKSdcbiAgICBQQVRURVJOX0NPTVBBQ1RfTk9UQVRJT046ICAgICAgICAgICAgICAgbmV3IFBhdHRlcm4gJ14oPzxrZXk+JytJbmxpbmUuUkVHRVhfUVVPVEVEX1NUUklORysnfFteIFxcJ1wiXFxcXHtcXFxcW10uKj8pICpcXFxcOihcXFxccysoPzx2YWx1ZT4uKz8pKT9cXFxccyokJ1xuICAgIFBBVFRFUk5fTUFQUElOR19JVEVNOiAgICAgICAgICAgICAgICAgICBuZXcgUGF0dGVybiAnXig/PGtleT4nK0lubGluZS5SRUdFWF9RVU9URURfU1RSSU5HKyd8W14gXFwnXCJcXFxcW1xcXFx7XS4qPykgKlxcXFw6KFxcXFxzKyg/PHZhbHVlPi4rPykpP1xcXFxzKiQnXG4gICAgUEFUVEVSTl9ERUNJTUFMOiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQYXR0ZXJuICdcXFxcZCsnXG4gICAgUEFUVEVSTl9JTkRFTlRfU1BBQ0VTOiAgICAgICAgICAgICAgICAgIG5ldyBQYXR0ZXJuICdeICsnXG4gICAgUEFUVEVSTl9UUkFJTElOR19MSU5FUzogICAgICAgICAgICAgICAgIG5ldyBQYXR0ZXJuICcoXFxuKikkJ1xuICAgIFBBVFRFUk5fWUFNTF9IRUFERVI6ICAgICAgICAgICAgICAgICAgICBuZXcgUGF0dGVybiAnXlxcXFwlWUFNTFs6IF1bXFxcXGRcXFxcLl0rLipcXG4nLCAnbSdcbiAgICBQQVRURVJOX0xFQURJTkdfQ09NTUVOVFM6ICAgICAgICAgICAgICAgbmV3IFBhdHRlcm4gJ14oXFxcXCMuKj9cXG4pKycsICdtJ1xuICAgIFBBVFRFUk5fRE9DVU1FTlRfTUFSS0VSX1NUQVJUOiAgICAgICAgICBuZXcgUGF0dGVybiAnXlxcXFwtXFxcXC1cXFxcLS4qP1xcbicsICdtJ1xuICAgIFBBVFRFUk5fRE9DVU1FTlRfTUFSS0VSX0VORDogICAgICAgICAgICBuZXcgUGF0dGVybiAnXlxcXFwuXFxcXC5cXFxcLlxcXFxzKiQnLCAnbSdcbiAgICBQQVRURVJOX0ZPTERFRF9TQ0FMQVJfQllfSU5ERU5UQVRJT046ICAge31cblxuICAgICMgQ29udGV4dCB0eXBlc1xuICAgICNcbiAgICBDT05URVhUX05PTkU6ICAgICAgIDBcbiAgICBDT05URVhUX1NFUVVFTkNFOiAgIDFcbiAgICBDT05URVhUX01BUFBJTkc6ICAgIDJcblxuXG4gICAgIyBDb25zdHJ1Y3RvclxuICAgICNcbiAgICAjIEBwYXJhbSBbSW50ZWdlcl0gIG9mZnNldCAgVGhlIG9mZnNldCBvZiBZQU1MIGRvY3VtZW50ICh1c2VkIGZvciBsaW5lIG51bWJlcnMgaW4gZXJyb3IgbWVzc2FnZXMpXG4gICAgI1xuICAgIGNvbnN0cnVjdG9yOiAoQG9mZnNldCA9IDApIC0+XG4gICAgICAgIEBsaW5lcyAgICAgICAgICA9IFtdXG4gICAgICAgIEBjdXJyZW50TGluZU5iICA9IC0xXG4gICAgICAgIEBjdXJyZW50TGluZSAgICA9ICcnXG4gICAgICAgIEByZWZzICAgICAgICAgICA9IHt9XG5cblxuICAgICMgUGFyc2VzIGEgWUFNTCBzdHJpbmcgdG8gYSBKYXZhU2NyaXB0IHZhbHVlLlxuICAgICNcbiAgICAjIEBwYXJhbSBbU3RyaW5nXSAgIHZhbHVlICAgICAgICAgICAgICAgICAgIEEgWUFNTCBzdHJpbmdcbiAgICAjIEBwYXJhbSBbQm9vbGVhbl0gIGV4Y2VwdGlvbk9uSW52YWxpZFR5cGUgIHRydWUgaWYgYW4gZXhjZXB0aW9uIG11c3QgYmUgdGhyb3duIG9uIGludmFsaWQgdHlwZXMgKGEgSmF2YVNjcmlwdCByZXNvdXJjZSBvciBvYmplY3QpLCBmYWxzZSBvdGhlcndpc2VcbiAgICAjIEBwYXJhbSBbRnVuY3Rpb25dIG9iamVjdERlY29kZXIgICAgICAgICAgIEEgZnVuY3Rpb24gdG8gZGVzZXJpYWxpemUgY3VzdG9tIG9iamVjdHMsIG51bGwgb3RoZXJ3aXNlXG4gICAgI1xuICAgICMgQHJldHVybiBbT2JqZWN0XSAgQSBKYXZhU2NyaXB0IHZhbHVlXG4gICAgI1xuICAgICMgQHRocm93IFtQYXJzZUV4Y2VwdGlvbl0gSWYgdGhlIFlBTUwgaXMgbm90IHZhbGlkXG4gICAgI1xuICAgIHBhcnNlOiAodmFsdWUsIGV4Y2VwdGlvbk9uSW52YWxpZFR5cGUgPSBmYWxzZSwgb2JqZWN0RGVjb2RlciA9IG51bGwpIC0+XG4gICAgICAgIEBjdXJyZW50TGluZU5iID0gLTFcbiAgICAgICAgQGN1cnJlbnRMaW5lID0gJydcbiAgICAgICAgQGxpbmVzID0gQGNsZWFudXAodmFsdWUpLnNwbGl0IFwiXFxuXCJcblxuICAgICAgICBkYXRhID0gbnVsbFxuICAgICAgICBjb250ZXh0ID0gQENPTlRFWFRfTk9ORVxuICAgICAgICBhbGxvd092ZXJ3cml0ZSA9IGZhbHNlXG4gICAgICAgIHdoaWxlIEBtb3ZlVG9OZXh0TGluZSgpXG4gICAgICAgICAgICBpZiBAaXNDdXJyZW50TGluZUVtcHR5KClcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgICAgICAjIFRhYj9cbiAgICAgICAgICAgIGlmIFwiXFx0XCIgaXMgQGN1cnJlbnRMaW5lWzBdXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXhjZXB0aW9uICdBIFlBTUwgZmlsZSBjYW5ub3QgY29udGFpbiB0YWJzIGFzIGluZGVudGF0aW9uLicsIEBnZXRSZWFsQ3VycmVudExpbmVOYigpICsgMSwgQGN1cnJlbnRMaW5lXG5cbiAgICAgICAgICAgIGlzUmVmID0gbWVyZ2VOb2RlID0gZmFsc2VcbiAgICAgICAgICAgIGlmIHZhbHVlcyA9IEBQQVRURVJOX1NFUVVFTkNFX0lURU0uZXhlYyBAY3VycmVudExpbmVcbiAgICAgICAgICAgICAgICBpZiBAQ09OVEVYVF9NQVBQSU5HIGlzIGNvbnRleHRcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXhjZXB0aW9uICdZb3UgY2Fubm90IGRlZmluZSBhIHNlcXVlbmNlIGl0ZW0gd2hlbiBpbiBhIG1hcHBpbmcnXG4gICAgICAgICAgICAgICAgY29udGV4dCA9IEBDT05URVhUX1NFUVVFTkNFXG4gICAgICAgICAgICAgICAgZGF0YSA/PSBbXVxuXG4gICAgICAgICAgICAgICAgaWYgdmFsdWVzLnZhbHVlPyBhbmQgbWF0Y2hlcyA9IEBQQVRURVJOX0FOQ0hPUl9WQUxVRS5leGVjIHZhbHVlcy52YWx1ZVxuICAgICAgICAgICAgICAgICAgICBpc1JlZiA9IG1hdGNoZXMucmVmXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlcy52YWx1ZSA9IG1hdGNoZXMudmFsdWVcblxuICAgICAgICAgICAgICAgICMgQXJyYXlcbiAgICAgICAgICAgICAgICBpZiBub3QodmFsdWVzLnZhbHVlPykgb3IgJycgaXMgVXRpbHMudHJpbSh2YWx1ZXMudmFsdWUsICcgJykgb3IgVXRpbHMubHRyaW0odmFsdWVzLnZhbHVlLCAnICcpLmluZGV4T2YoJyMnKSBpcyAwXG4gICAgICAgICAgICAgICAgICAgIGlmIEBjdXJyZW50TGluZU5iIDwgQGxpbmVzLmxlbmd0aCAtIDEgYW5kIG5vdCBAaXNOZXh0TGluZVVuSW5kZW50ZWRDb2xsZWN0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBAZ2V0UmVhbEN1cnJlbnRMaW5lTmIoKSArIDFcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlciA9IG5ldyBQYXJzZXIgY1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnJlZnMgPSBAcmVmc1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5wdXNoIHBhcnNlci5wYXJzZShAZ2V0TmV4dEVtYmVkQmxvY2sobnVsbCwgdHJ1ZSksIGV4Y2VwdGlvbk9uSW52YWxpZFR5cGUsIG9iamVjdERlY29kZXIpXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucHVzaCBudWxsXG5cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGlmIHZhbHVlcy5sZWFkc3BhY2VzPy5sZW5ndGggYW5kIG1hdGNoZXMgPSBAUEFUVEVSTl9DT01QQUNUX05PVEFUSU9OLmV4ZWMgdmFsdWVzLnZhbHVlXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICMgVGhpcyBpcyBhIGNvbXBhY3Qgbm90YXRpb24gZWxlbWVudCwgYWRkIHRvIG5leHQgYmxvY2sgYW5kIHBhcnNlXG4gICAgICAgICAgICAgICAgICAgICAgICBjID0gQGdldFJlYWxDdXJyZW50TGluZU5iKClcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlciA9IG5ldyBQYXJzZXIgY1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnJlZnMgPSBAcmVmc1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBibG9jayA9IHZhbHVlcy52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZW50ID0gQGdldEN1cnJlbnRMaW5lSW5kZW50YXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgQGlzTmV4dExpbmVJbmRlbnRlZChmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jayArPSBcIlxcblwiK0BnZXROZXh0RW1iZWRCbG9jayhpbmRlbnQgKyB2YWx1ZXMubGVhZHNwYWNlcy5sZW5ndGggKyAxLCB0cnVlKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnB1c2ggcGFyc2VyLnBhcnNlIGJsb2NrLCBleGNlcHRpb25PbkludmFsaWRUeXBlLCBvYmplY3REZWNvZGVyXG5cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5wdXNoIEBwYXJzZVZhbHVlIHZhbHVlcy52YWx1ZSwgZXhjZXB0aW9uT25JbnZhbGlkVHlwZSwgb2JqZWN0RGVjb2RlclxuXG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZXMgPSBAUEFUVEVSTl9NQVBQSU5HX0lURU0uZXhlYyBAY3VycmVudExpbmUpIGFuZCB2YWx1ZXMua2V5LmluZGV4T2YoJyAjJykgaXMgLTFcbiAgICAgICAgICAgICAgICBpZiBAQ09OVEVYVF9TRVFVRU5DRSBpcyBjb250ZXh0XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZUV4Y2VwdGlvbiAnWW91IGNhbm5vdCBkZWZpbmUgYSBtYXBwaW5nIGl0ZW0gd2hlbiBpbiBhIHNlcXVlbmNlJ1xuICAgICAgICAgICAgICAgIGNvbnRleHQgPSBAQ09OVEVYVF9NQVBQSU5HXG4gICAgICAgICAgICAgICAgZGF0YSA/PSB7fVxuXG4gICAgICAgICAgICAgICAgIyBGb3JjZSBjb3JyZWN0IHNldHRpbmdzXG4gICAgICAgICAgICAgICAgSW5saW5lLmNvbmZpZ3VyZSBleGNlcHRpb25PbkludmFsaWRUeXBlLCBvYmplY3REZWNvZGVyXG4gICAgICAgICAgICAgICAgdHJ5XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IElubGluZS5wYXJzZVNjYWxhciB2YWx1ZXMua2V5XG4gICAgICAgICAgICAgICAgY2F0Y2ggZVxuICAgICAgICAgICAgICAgICAgICBlLnBhcnNlZExpbmUgPSBAZ2V0UmVhbEN1cnJlbnRMaW5lTmIoKSArIDFcbiAgICAgICAgICAgICAgICAgICAgZS5zbmlwcGV0ID0gQGN1cnJlbnRMaW5lXG5cbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZVxuXG4gICAgICAgICAgICAgICAgaWYgJzw8JyBpcyBrZXlcbiAgICAgICAgICAgICAgICAgICAgbWVyZ2VOb2RlID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICBhbGxvd092ZXJ3cml0ZSA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgaWYgdmFsdWVzLnZhbHVlPy5pbmRleE9mKCcqJykgaXMgMFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmTmFtZSA9IHZhbHVlcy52YWx1ZVsxLi5dXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmxlc3MgQHJlZnNbcmVmTmFtZV0/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXhjZXB0aW9uICdSZWZlcmVuY2UgXCInK3JlZk5hbWUrJ1wiIGRvZXMgbm90IGV4aXN0LicsIEBnZXRSZWFsQ3VycmVudExpbmVOYigpICsgMSwgQGN1cnJlbnRMaW5lXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZlZhbHVlID0gQHJlZnNbcmVmTmFtZV1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgdHlwZW9mIHJlZlZhbHVlIGlzbnQgJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFeGNlcHRpb24gJ1lBTUwgbWVyZ2Uga2V5cyB1c2VkIHdpdGggYSBzY2FsYXIgdmFsdWUgaW5zdGVhZCBvZiBhbiBvYmplY3QuJywgQGdldFJlYWxDdXJyZW50TGluZU5iKCkgKyAxLCBAY3VycmVudExpbmVcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVmVmFsdWUgaW5zdGFuY2VvZiBBcnJheVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTWVyZ2UgYXJyYXkgd2l0aCBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdmFsdWUsIGkgaW4gcmVmVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtTdHJpbmcoaSldID89IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBNZXJnZSBvYmplY3RzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgb2YgcmVmVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtrZXldID89IHZhbHVlXG5cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgdmFsdWVzLnZhbHVlPyBhbmQgdmFsdWVzLnZhbHVlIGlzbnQgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlcy52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gQGdldE5leHRFbWJlZEJsb2NrKClcblxuICAgICAgICAgICAgICAgICAgICAgICAgYyA9IEBnZXRSZWFsQ3VycmVudExpbmVOYigpICsgMVxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyID0gbmV3IFBhcnNlciBjXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIucmVmcyA9IEByZWZzXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSBwYXJzZXIucGFyc2UgdmFsdWUsIGV4Y2VwdGlvbk9uSW52YWxpZFR5cGVcblxuICAgICAgICAgICAgICAgICAgICAgICAgdW5sZXNzIHR5cGVvZiBwYXJzZWQgaXMgJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFeGNlcHRpb24gJ1lBTUwgbWVyZ2Uga2V5cyB1c2VkIHdpdGggYSBzY2FsYXIgdmFsdWUgaW5zdGVhZCBvZiBhbiBvYmplY3QuJywgQGdldFJlYWxDdXJyZW50TGluZU5iKCkgKyAxLCBAY3VycmVudExpbmVcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGFyc2VkIGluc3RhbmNlb2YgQXJyYXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIElmIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIG1lcmdlIGtleSBpcyBhIHNlcXVlbmNlLCB0aGVuIHRoaXMgc2VxdWVuY2UgaXMgZXhwZWN0ZWQgdG8gY29udGFpbiBtYXBwaW5nIG5vZGVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhbmQgZWFjaCBvZiB0aGVzZSBub2RlcyBpcyBtZXJnZWQgaW4gdHVybiBhY2NvcmRpbmcgdG8gaXRzIG9yZGVyIGluIHRoZSBzZXF1ZW5jZS4gS2V5cyBpbiBtYXBwaW5nIG5vZGVzIGVhcmxpZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGluIHRoZSBzZXF1ZW5jZSBvdmVycmlkZSBrZXlzIHNwZWNpZmllZCBpbiBsYXRlciBtYXBwaW5nIG5vZGVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwYXJzZWRJdGVtIGluIHBhcnNlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmxlc3MgdHlwZW9mIHBhcnNlZEl0ZW0gaXMgJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZUV4Y2VwdGlvbiAnTWVyZ2UgaXRlbXMgbXVzdCBiZSBvYmplY3RzLicsIEBnZXRSZWFsQ3VycmVudExpbmVOYigpICsgMSwgcGFyc2VkSXRlbVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBhcnNlZEl0ZW0gaW5zdGFuY2VvZiBBcnJheVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBNZXJnZSBhcnJheSB3aXRoIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHZhbHVlLCBpIGluIHBhcnNlZEl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gU3RyaW5nKGkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5sZXNzIGRhdGEuaGFzT3duUHJvcGVydHkoaylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtrXSA9IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTWVyZ2Ugb2JqZWN0c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgb2YgcGFyc2VkSXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVubGVzcyBkYXRhLmhhc093blByb3BlcnR5KGtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtrZXldID0gdmFsdWVcblxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUga2V5IGlzIGEgc2luZ2xlIG1hcHBpbmcgbm9kZSwgZWFjaCBvZiBpdHMga2V5L3ZhbHVlIHBhaXJzIGlzIGluc2VydGVkIGludG8gdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjdXJyZW50IG1hcHBpbmcsIHVubGVzcyB0aGUga2V5IGFscmVhZHkgZXhpc3RzIGluIGl0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIG9mIHBhcnNlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmxlc3MgZGF0YS5oYXNPd25Qcm9wZXJ0eShrZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2tleV0gPSB2YWx1ZVxuXG4gICAgICAgICAgICAgICAgZWxzZSBpZiB2YWx1ZXMudmFsdWU/IGFuZCBtYXRjaGVzID0gQFBBVFRFUk5fQU5DSE9SX1ZBTFVFLmV4ZWMgdmFsdWVzLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIGlzUmVmID0gbWF0Y2hlcy5yZWZcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnZhbHVlID0gbWF0Y2hlcy52YWx1ZVxuXG5cbiAgICAgICAgICAgICAgICBpZiBtZXJnZU5vZGVcbiAgICAgICAgICAgICAgICAgICAgIyBNZXJnZSBrZXlzXG4gICAgICAgICAgICAgICAgZWxzZSBpZiBub3QodmFsdWVzLnZhbHVlPykgb3IgJycgaXMgVXRpbHMudHJpbSh2YWx1ZXMudmFsdWUsICcgJykgb3IgVXRpbHMubHRyaW0odmFsdWVzLnZhbHVlLCAnICcpLmluZGV4T2YoJyMnKSBpcyAwXG4gICAgICAgICAgICAgICAgICAgICMgSGFzaFxuICAgICAgICAgICAgICAgICAgICAjIGlmIG5leHQgbGluZSBpcyBsZXNzIGluZGVudGVkIG9yIGVxdWFsLCB0aGVuIGl0IG1lYW5zIHRoYXQgdGhlIGN1cnJlbnQgdmFsdWUgaXMgbnVsbFxuICAgICAgICAgICAgICAgICAgICBpZiBub3QoQGlzTmV4dExpbmVJbmRlbnRlZCgpKSBhbmQgbm90KEBpc05leHRMaW5lVW5JbmRlbnRlZENvbGxlY3Rpb24oKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICMgU3BlYzogS2V5cyBNVVNUIGJlIHVuaXF1ZTsgZmlyc3Qgb25lIHdpbnMuXG4gICAgICAgICAgICAgICAgICAgICAgICAjIEJ1dCBvdmVyd3JpdGluZyBpcyBhbGxvd2VkIHdoZW4gYSBtZXJnZSBub2RlIGlzIHVzZWQgaW4gY3VycmVudCBibG9jay5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIGFsbG93T3ZlcndyaXRlIG9yIGRhdGFba2V5XSBpcyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2tleV0gPSBudWxsXG5cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgYyA9IEBnZXRSZWFsQ3VycmVudExpbmVOYigpICsgMVxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyID0gbmV3IFBhcnNlciBjXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIucmVmcyA9IEByZWZzXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBwYXJzZXIucGFyc2UgQGdldE5leHRFbWJlZEJsb2NrKCksIGV4Y2VwdGlvbk9uSW52YWxpZFR5cGUsIG9iamVjdERlY29kZXJcblxuICAgICAgICAgICAgICAgICAgICAgICAgIyBTcGVjOiBLZXlzIE1VU1QgYmUgdW5pcXVlOyBmaXJzdCBvbmUgd2lucy5cbiAgICAgICAgICAgICAgICAgICAgICAgICMgQnV0IG92ZXJ3cml0aW5nIGlzIGFsbG93ZWQgd2hlbiBhIG1lcmdlIG5vZGUgaXMgdXNlZCBpbiBjdXJyZW50IGJsb2NrLlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgYWxsb3dPdmVyd3JpdGUgb3IgZGF0YVtrZXldIGlzIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFba2V5XSA9IHZhbFxuXG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB2YWwgPSBAcGFyc2VWYWx1ZSB2YWx1ZXMudmFsdWUsIGV4Y2VwdGlvbk9uSW52YWxpZFR5cGUsIG9iamVjdERlY29kZXJcblxuICAgICAgICAgICAgICAgICAgICAjIFNwZWM6IEtleXMgTVVTVCBiZSB1bmlxdWU7IGZpcnN0IG9uZSB3aW5zLlxuICAgICAgICAgICAgICAgICAgICAjIEJ1dCBvdmVyd3JpdGluZyBpcyBhbGxvd2VkIHdoZW4gYSBtZXJnZSBub2RlIGlzIHVzZWQgaW4gY3VycmVudCBibG9jay5cbiAgICAgICAgICAgICAgICAgICAgaWYgYWxsb3dPdmVyd3JpdGUgb3IgZGF0YVtrZXldIGlzIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtrZXldID0gdmFsXG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAjIDEtbGluZXIgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBuZXdsaW5lXG4gICAgICAgICAgICAgICAgbGluZUNvdW50ID0gQGxpbmVzLmxlbmd0aFxuICAgICAgICAgICAgICAgIGlmIDEgaXMgbGluZUNvdW50IG9yICgyIGlzIGxpbmVDb3VudCBhbmQgVXRpbHMuaXNFbXB0eShAbGluZXNbMV0pKVxuICAgICAgICAgICAgICAgICAgICB0cnlcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gSW5saW5lLnBhcnNlIEBsaW5lc1swXSwgZXhjZXB0aW9uT25JbnZhbGlkVHlwZSwgb2JqZWN0RGVjb2RlclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCBlXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnBhcnNlZExpbmUgPSBAZ2V0UmVhbEN1cnJlbnRMaW5lTmIoKSArIDFcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc25pcHBldCA9IEBjdXJyZW50TGluZVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlXG5cbiAgICAgICAgICAgICAgICAgICAgaWYgdHlwZW9mIHZhbHVlIGlzICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpbnN0YW5jZW9mIEFycmF5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSB2YWx1ZVswXVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBrZXkgb2YgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSB2YWx1ZVtrZXldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIHR5cGVvZiBmaXJzdCBpcyAnc3RyaW5nJyBhbmQgZmlyc3QuaW5kZXhPZignKicpIGlzIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gW11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYWxpYXMgaW4gdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5wdXNoIEByZWZzW2FsaWFzWzEuLl1dXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBkYXRhXG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlXG5cbiAgICAgICAgICAgICAgICBlbHNlIGlmIFV0aWxzLmx0cmltKHZhbHVlKS5jaGFyQXQoMCkgaW4gWydbJywgJ3snXVxuICAgICAgICAgICAgICAgICAgICB0cnlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbmxpbmUucGFyc2UgdmFsdWUsIGV4Y2VwdGlvbk9uSW52YWxpZFR5cGUsIG9iamVjdERlY29kZXJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggZVxuICAgICAgICAgICAgICAgICAgICAgICAgZS5wYXJzZWRMaW5lID0gQGdldFJlYWxDdXJyZW50TGluZU5iKCkgKyAxXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnNuaXBwZXQgPSBAY3VycmVudExpbmVcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZVxuXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXhjZXB0aW9uICdVbmFibGUgdG8gcGFyc2UuJywgQGdldFJlYWxDdXJyZW50TGluZU5iKCkgKyAxLCBAY3VycmVudExpbmVcblxuICAgICAgICAgICAgaWYgaXNSZWZcbiAgICAgICAgICAgICAgICBpZiBkYXRhIGluc3RhbmNlb2YgQXJyYXlcbiAgICAgICAgICAgICAgICAgICAgQHJlZnNbaXNSZWZdID0gZGF0YVtkYXRhLmxlbmd0aC0xXVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgbGFzdEtleSA9IG51bGxcbiAgICAgICAgICAgICAgICAgICAgZm9yIGtleSBvZiBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0S2V5ID0ga2V5XG4gICAgICAgICAgICAgICAgICAgIEByZWZzW2lzUmVmXSA9IGRhdGFbbGFzdEtleV1cblxuXG4gICAgICAgIGlmIFV0aWxzLmlzRW1wdHkoZGF0YSlcbiAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBkYXRhXG5cblxuXG4gICAgIyBSZXR1cm5zIHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyICh0YWtlcyB0aGUgb2Zmc2V0IGludG8gYWNjb3VudCkuXG4gICAgI1xuICAgICMgQHJldHVybiBbSW50ZWdlcl0gICAgIFRoZSBjdXJyZW50IGxpbmUgbnVtYmVyXG4gICAgI1xuICAgIGdldFJlYWxDdXJyZW50TGluZU5iOiAtPlxuICAgICAgICByZXR1cm4gQGN1cnJlbnRMaW5lTmIgKyBAb2Zmc2V0XG5cblxuICAgICMgUmV0dXJucyB0aGUgY3VycmVudCBsaW5lIGluZGVudGF0aW9uLlxuICAgICNcbiAgICAjIEByZXR1cm4gW0ludGVnZXJdICAgICBUaGUgY3VycmVudCBsaW5lIGluZGVudGF0aW9uXG4gICAgI1xuICAgIGdldEN1cnJlbnRMaW5lSW5kZW50YXRpb246IC0+XG4gICAgICAgIHJldHVybiBAY3VycmVudExpbmUubGVuZ3RoIC0gVXRpbHMubHRyaW0oQGN1cnJlbnRMaW5lLCAnICcpLmxlbmd0aFxuXG5cbiAgICAjIFJldHVybnMgdGhlIG5leHQgZW1iZWQgYmxvY2sgb2YgWUFNTC5cbiAgICAjXG4gICAgIyBAcGFyYW0gW0ludGVnZXJdICAgICAgICAgIGluZGVudGF0aW9uIFRoZSBpbmRlbnQgbGV2ZWwgYXQgd2hpY2ggdGhlIGJsb2NrIGlzIHRvIGJlIHJlYWQsIG9yIG51bGwgZm9yIGRlZmF1bHRcbiAgICAjXG4gICAgIyBAcmV0dXJuIFtTdHJpbmddICAgICAgICAgIEEgWUFNTCBzdHJpbmdcbiAgICAjXG4gICAgIyBAdGhyb3cgW1BhcnNlRXhjZXB0aW9uXSAgIFdoZW4gaW5kZW50YXRpb24gcHJvYmxlbSBhcmUgZGV0ZWN0ZWRcbiAgICAjXG4gICAgZ2V0TmV4dEVtYmVkQmxvY2s6IChpbmRlbnRhdGlvbiA9IG51bGwsIGluY2x1ZGVVbmluZGVudGVkQ29sbGVjdGlvbiA9IGZhbHNlKSAtPlxuICAgICAgICBAbW92ZVRvTmV4dExpbmUoKVxuXG4gICAgICAgIGlmIG5vdCBpbmRlbnRhdGlvbj9cbiAgICAgICAgICAgIG5ld0luZGVudCA9IEBnZXRDdXJyZW50TGluZUluZGVudGF0aW9uKClcblxuICAgICAgICAgICAgdW5pbmRlbnRlZEVtYmVkQmxvY2sgPSBAaXNTdHJpbmdVbkluZGVudGVkQ29sbGVjdGlvbkl0ZW0gQGN1cnJlbnRMaW5lXG5cbiAgICAgICAgICAgIGlmIG5vdChAaXNDdXJyZW50TGluZUVtcHR5KCkpIGFuZCAwIGlzIG5ld0luZGVudCBhbmQgbm90KHVuaW5kZW50ZWRFbWJlZEJsb2NrKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZUV4Y2VwdGlvbiAnSW5kZW50YXRpb24gcHJvYmxlbS4nLCBAZ2V0UmVhbEN1cnJlbnRMaW5lTmIoKSArIDEsIEBjdXJyZW50TGluZVxuXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIG5ld0luZGVudCA9IGluZGVudGF0aW9uXG5cblxuICAgICAgICBkYXRhID0gW0BjdXJyZW50TGluZVtuZXdJbmRlbnQuLl1dXG5cbiAgICAgICAgdW5sZXNzIGluY2x1ZGVVbmluZGVudGVkQ29sbGVjdGlvblxuICAgICAgICAgICAgaXNJdFVuaW5kZW50ZWRDb2xsZWN0aW9uID0gQGlzU3RyaW5nVW5JbmRlbnRlZENvbGxlY3Rpb25JdGVtIEBjdXJyZW50TGluZVxuXG4gICAgICAgICMgQ29tbWVudHMgbXVzdCBub3QgYmUgcmVtb3ZlZCBpbnNpZGUgYSBzdHJpbmcgYmxvY2sgKGllLiBhZnRlciBhIGxpbmUgZW5kaW5nIHdpdGggXCJ8XCIpXG4gICAgICAgICMgVGhleSBtdXN0IG5vdCBiZSByZW1vdmVkIGluc2lkZSBhIHN1Yi1lbWJlZGRlZCBibG9jayBhcyB3ZWxsXG4gICAgICAgIHJlbW92ZUNvbW1lbnRzUGF0dGVybiA9IEBQQVRURVJOX0ZPTERFRF9TQ0FMQVJfRU5EXG4gICAgICAgIHJlbW92ZUNvbW1lbnRzID0gbm90IHJlbW92ZUNvbW1lbnRzUGF0dGVybi50ZXN0IEBjdXJyZW50TGluZVxuXG4gICAgICAgIHdoaWxlIEBtb3ZlVG9OZXh0TGluZSgpXG4gICAgICAgICAgICBpbmRlbnQgPSBAZ2V0Q3VycmVudExpbmVJbmRlbnRhdGlvbigpXG5cbiAgICAgICAgICAgIGlmIGluZGVudCBpcyBuZXdJbmRlbnRcbiAgICAgICAgICAgICAgICByZW1vdmVDb21tZW50cyA9IG5vdCByZW1vdmVDb21tZW50c1BhdHRlcm4udGVzdCBAY3VycmVudExpbmVcblxuICAgICAgICAgICAgaWYgcmVtb3ZlQ29tbWVudHMgYW5kIEBpc0N1cnJlbnRMaW5lQ29tbWVudCgpXG4gICAgICAgICAgICAgICAgY29udGludWVcblxuICAgICAgICAgICAgaWYgQGlzQ3VycmVudExpbmVCbGFuaygpXG4gICAgICAgICAgICAgICAgZGF0YS5wdXNoIEBjdXJyZW50TGluZVtuZXdJbmRlbnQuLl1cbiAgICAgICAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgICAgICBpZiBpc0l0VW5pbmRlbnRlZENvbGxlY3Rpb24gYW5kIG5vdCBAaXNTdHJpbmdVbkluZGVudGVkQ29sbGVjdGlvbkl0ZW0oQGN1cnJlbnRMaW5lKSBhbmQgaW5kZW50IGlzIG5ld0luZGVudFxuICAgICAgICAgICAgICAgIEBtb3ZlVG9QcmV2aW91c0xpbmUoKVxuICAgICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgIGlmIGluZGVudCA+PSBuZXdJbmRlbnRcbiAgICAgICAgICAgICAgICBkYXRhLnB1c2ggQGN1cnJlbnRMaW5lW25ld0luZGVudC4uXVxuICAgICAgICAgICAgZWxzZSBpZiBVdGlscy5sdHJpbShAY3VycmVudExpbmUpLmNoYXJBdCgwKSBpcyAnIydcbiAgICAgICAgICAgICAgICAjIERvbid0IGFkZCBsaW5lIHdpdGggY29tbWVudHNcbiAgICAgICAgICAgIGVsc2UgaWYgMCBpcyBpbmRlbnRcbiAgICAgICAgICAgICAgICBAbW92ZVRvUHJldmlvdXNMaW5lKClcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZUV4Y2VwdGlvbiAnSW5kZW50YXRpb24gcHJvYmxlbS4nLCBAZ2V0UmVhbEN1cnJlbnRMaW5lTmIoKSArIDEsIEBjdXJyZW50TGluZVxuXG5cbiAgICAgICAgcmV0dXJuIGRhdGEuam9pbiBcIlxcblwiXG5cblxuICAgICMgTW92ZXMgdGhlIHBhcnNlciB0byB0aGUgbmV4dCBsaW5lLlxuICAgICNcbiAgICAjIEByZXR1cm4gW0Jvb2xlYW5dXG4gICAgI1xuICAgIG1vdmVUb05leHRMaW5lOiAtPlxuICAgICAgICBpZiBAY3VycmVudExpbmVOYiA+PSBAbGluZXMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG5cbiAgICAgICAgQGN1cnJlbnRMaW5lID0gQGxpbmVzWysrQGN1cnJlbnRMaW5lTmJdO1xuXG4gICAgICAgIHJldHVybiB0cnVlXG5cblxuICAgICMgTW92ZXMgdGhlIHBhcnNlciB0byB0aGUgcHJldmlvdXMgbGluZS5cbiAgICAjXG4gICAgbW92ZVRvUHJldmlvdXNMaW5lOiAtPlxuICAgICAgICBAY3VycmVudExpbmUgPSBAbGluZXNbLS1AY3VycmVudExpbmVOYl1cbiAgICAgICAgcmV0dXJuXG5cblxuICAgICMgUGFyc2VzIGEgWUFNTCB2YWx1ZS5cbiAgICAjXG4gICAgIyBAcGFyYW0gW1N0cmluZ10gICB2YWx1ZSAgICAgICAgICAgICAgICAgICBBIFlBTUwgdmFsdWVcbiAgICAjIEBwYXJhbSBbQm9vbGVhbl0gIGV4Y2VwdGlvbk9uSW52YWxpZFR5cGUgIHRydWUgaWYgYW4gZXhjZXB0aW9uIG11c3QgYmUgdGhyb3duIG9uIGludmFsaWQgdHlwZXMgZmFsc2Ugb3RoZXJ3aXNlXG4gICAgIyBAcGFyYW0gW0Z1bmN0aW9uXSBvYmplY3REZWNvZGVyICAgICAgICAgICBBIGZ1bmN0aW9uIHRvIGRlc2VyaWFsaXplIGN1c3RvbSBvYmplY3RzLCBudWxsIG90aGVyd2lzZVxuICAgICNcbiAgICAjIEByZXR1cm4gW09iamVjdF0gQSBKYXZhU2NyaXB0IHZhbHVlXG4gICAgI1xuICAgICMgQHRocm93IFtQYXJzZUV4Y2VwdGlvbl0gV2hlbiByZWZlcmVuY2UgZG9lcyBub3QgZXhpc3RcbiAgICAjXG4gICAgcGFyc2VWYWx1ZTogKHZhbHVlLCBleGNlcHRpb25PbkludmFsaWRUeXBlLCBvYmplY3REZWNvZGVyKSAtPlxuICAgICAgICBpZiAwIGlzIHZhbHVlLmluZGV4T2YoJyonKVxuICAgICAgICAgICAgcG9zID0gdmFsdWUuaW5kZXhPZiAnIydcbiAgICAgICAgICAgIGlmIHBvcyBpc250IC0xXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHIoMSwgcG9zLTIpXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVsxLi5dXG5cbiAgICAgICAgICAgIGlmIEByZWZzW3ZhbHVlXSBpcyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFeGNlcHRpb24gJ1JlZmVyZW5jZSBcIicrdmFsdWUrJ1wiIGRvZXMgbm90IGV4aXN0LicsIEBjdXJyZW50TGluZVxuXG4gICAgICAgICAgICByZXR1cm4gQHJlZnNbdmFsdWVdXG5cblxuICAgICAgICBpZiBtYXRjaGVzID0gQFBBVFRFUk5fRk9MREVEX1NDQUxBUl9BTEwuZXhlYyB2YWx1ZVxuICAgICAgICAgICAgbW9kaWZpZXJzID0gbWF0Y2hlcy5tb2RpZmllcnMgPyAnJ1xuXG4gICAgICAgICAgICBmb2xkZWRJbmRlbnQgPSBNYXRoLmFicyhwYXJzZUludChtb2RpZmllcnMpKVxuICAgICAgICAgICAgaWYgaXNOYU4oZm9sZGVkSW5kZW50KSB0aGVuIGZvbGRlZEluZGVudCA9IDBcbiAgICAgICAgICAgIHZhbCA9IEBwYXJzZUZvbGRlZFNjYWxhciBtYXRjaGVzLnNlcGFyYXRvciwgQFBBVFRFUk5fREVDSU1BTC5yZXBsYWNlKG1vZGlmaWVycywgJycpLCBmb2xkZWRJbmRlbnRcbiAgICAgICAgICAgIGlmIG1hdGNoZXMudHlwZT9cbiAgICAgICAgICAgICAgICAjIEZvcmNlIGNvcnJlY3Qgc2V0dGluZ3NcbiAgICAgICAgICAgICAgICBJbmxpbmUuY29uZmlndXJlIGV4Y2VwdGlvbk9uSW52YWxpZFR5cGUsIG9iamVjdERlY29kZXJcbiAgICAgICAgICAgICAgICByZXR1cm4gSW5saW5lLnBhcnNlU2NhbGFyIG1hdGNoZXMudHlwZSsnICcrdmFsXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbFxuXG4gICAgICAgICMgVmFsdWUgY2FuIGJlIG11bHRpbGluZSBjb21wYWN0IHNlcXVlbmNlIG9yIG1hcHBpbmcgb3Igc3RyaW5nXG4gICAgICAgIGlmIHZhbHVlLmNoYXJBdCgwKSBpbiBbJ1snLCAneycsICdcIicsIFwiJ1wiXVxuICAgICAgICAgICAgd2hpbGUgdHJ1ZVxuICAgICAgICAgICAgICAgIHRyeVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5saW5lLnBhcnNlIHZhbHVlLCBleGNlcHRpb25PbkludmFsaWRUeXBlLCBvYmplY3REZWNvZGVyXG4gICAgICAgICAgICAgICAgY2F0Y2ggZVxuICAgICAgICAgICAgICAgICAgICBpZiBlIGluc3RhbmNlb2YgUGFyc2VNb3JlIGFuZCBAbW92ZVRvTmV4dExpbmUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gXCJcXG5cIiArIFV0aWxzLnRyaW0oQGN1cnJlbnRMaW5lLCAnICcpXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucGFyc2VkTGluZSA9IEBnZXRSZWFsQ3VycmVudExpbmVOYigpICsgMVxuICAgICAgICAgICAgICAgICAgICAgICAgZS5zbmlwcGV0ID0gQGN1cnJlbnRMaW5lXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGlmIEBpc05leHRMaW5lSW5kZW50ZWQoKVxuICAgICAgICAgICAgICAgIHZhbHVlICs9IFwiXFxuXCIgKyBAZ2V0TmV4dEVtYmVkQmxvY2soKVxuICAgICAgICAgICAgcmV0dXJuIElubGluZS5wYXJzZSB2YWx1ZSwgZXhjZXB0aW9uT25JbnZhbGlkVHlwZSwgb2JqZWN0RGVjb2RlclxuXG4gICAgICAgIHJldHVyblxuXG5cbiAgICAjIFBhcnNlcyBhIGZvbGRlZCBzY2FsYXIuXG4gICAgI1xuICAgICMgQHBhcmFtIFtTdHJpbmddICAgICAgIHNlcGFyYXRvciAgIFRoZSBzZXBhcmF0b3IgdGhhdCB3YXMgdXNlZCB0byBiZWdpbiB0aGlzIGZvbGRlZCBzY2FsYXIgKHwgb3IgPilcbiAgICAjIEBwYXJhbSBbU3RyaW5nXSAgICAgICBpbmRpY2F0b3IgICBUaGUgaW5kaWNhdG9yIHRoYXQgd2FzIHVzZWQgdG8gYmVnaW4gdGhpcyBmb2xkZWQgc2NhbGFyICgrIG9yIC0pXG4gICAgIyBAcGFyYW0gW0ludGVnZXJdICAgICAgaW5kZW50YXRpb24gVGhlIGluZGVudGF0aW9uIHRoYXQgd2FzIHVzZWQgdG8gYmVnaW4gdGhpcyBmb2xkZWQgc2NhbGFyXG4gICAgI1xuICAgICMgQHJldHVybiBbU3RyaW5nXSAgICAgIFRoZSB0ZXh0IHZhbHVlXG4gICAgI1xuICAgIHBhcnNlRm9sZGVkU2NhbGFyOiAoc2VwYXJhdG9yLCBpbmRpY2F0b3IgPSAnJywgaW5kZW50YXRpb24gPSAwKSAtPlxuICAgICAgICBub3RFT0YgPSBAbW92ZVRvTmV4dExpbmUoKVxuICAgICAgICBpZiBub3Qgbm90RU9GXG4gICAgICAgICAgICByZXR1cm4gJydcblxuICAgICAgICBpc0N1cnJlbnRMaW5lQmxhbmsgPSBAaXNDdXJyZW50TGluZUJsYW5rKClcbiAgICAgICAgdGV4dCA9ICcnXG5cbiAgICAgICAgIyBMZWFkaW5nIGJsYW5rIGxpbmVzIGFyZSBjb25zdW1lZCBiZWZvcmUgZGV0ZXJtaW5pbmcgaW5kZW50YXRpb25cbiAgICAgICAgd2hpbGUgbm90RU9GIGFuZCBpc0N1cnJlbnRMaW5lQmxhbmtcbiAgICAgICAgICAgICMgbmV3bGluZSBvbmx5IGlmIG5vdCBFT0ZcbiAgICAgICAgICAgIGlmIG5vdEVPRiA9IEBtb3ZlVG9OZXh0TGluZSgpXG4gICAgICAgICAgICAgICAgdGV4dCArPSBcIlxcblwiXG4gICAgICAgICAgICAgICAgaXNDdXJyZW50TGluZUJsYW5rID0gQGlzQ3VycmVudExpbmVCbGFuaygpXG5cblxuICAgICAgICAjIERldGVybWluZSBpbmRlbnRhdGlvbiBpZiBub3Qgc3BlY2lmaWVkXG4gICAgICAgIGlmIDAgaXMgaW5kZW50YXRpb25cbiAgICAgICAgICAgIGlmIG1hdGNoZXMgPSBAUEFUVEVSTl9JTkRFTlRfU1BBQ0VTLmV4ZWMgQGN1cnJlbnRMaW5lXG4gICAgICAgICAgICAgICAgaW5kZW50YXRpb24gPSBtYXRjaGVzWzBdLmxlbmd0aFxuXG5cbiAgICAgICAgaWYgaW5kZW50YXRpb24gPiAwXG4gICAgICAgICAgICBwYXR0ZXJuID0gQFBBVFRFUk5fRk9MREVEX1NDQUxBUl9CWV9JTkRFTlRBVElPTltpbmRlbnRhdGlvbl1cbiAgICAgICAgICAgIHVubGVzcyBwYXR0ZXJuP1xuICAgICAgICAgICAgICAgIHBhdHRlcm4gPSBuZXcgUGF0dGVybiAnXiB7JytpbmRlbnRhdGlvbisnfSguKikkJ1xuICAgICAgICAgICAgICAgIFBhcnNlcjo6UEFUVEVSTl9GT0xERURfU0NBTEFSX0JZX0lOREVOVEFUSU9OW2luZGVudGF0aW9uXSA9IHBhdHRlcm5cblxuICAgICAgICAgICAgd2hpbGUgbm90RU9GIGFuZCAoaXNDdXJyZW50TGluZUJsYW5rIG9yIG1hdGNoZXMgPSBwYXR0ZXJuLmV4ZWMgQGN1cnJlbnRMaW5lKVxuICAgICAgICAgICAgICAgIGlmIGlzQ3VycmVudExpbmVCbGFua1xuICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9IEBjdXJyZW50TGluZVtpbmRlbnRhdGlvbi4uXVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgdGV4dCArPSBtYXRjaGVzWzFdXG5cbiAgICAgICAgICAgICAgICAjIG5ld2xpbmUgb25seSBpZiBub3QgRU9GXG4gICAgICAgICAgICAgICAgaWYgbm90RU9GID0gQG1vdmVUb05leHRMaW5lKClcbiAgICAgICAgICAgICAgICAgICAgdGV4dCArPSBcIlxcblwiXG4gICAgICAgICAgICAgICAgICAgIGlzQ3VycmVudExpbmVCbGFuayA9IEBpc0N1cnJlbnRMaW5lQmxhbmsoKVxuXG4gICAgICAgIGVsc2UgaWYgbm90RU9GXG4gICAgICAgICAgICB0ZXh0ICs9IFwiXFxuXCJcblxuXG4gICAgICAgIGlmIG5vdEVPRlxuICAgICAgICAgICAgQG1vdmVUb1ByZXZpb3VzTGluZSgpXG5cblxuICAgICAgICAjIFJlbW92ZSBsaW5lIGJyZWFrcyBvZiBlYWNoIGxpbmVzIGV4Y2VwdCB0aGUgZW1wdHkgYW5kIG1vcmUgaW5kZW50ZWQgb25lc1xuICAgICAgICBpZiAnPicgaXMgc2VwYXJhdG9yXG4gICAgICAgICAgICBuZXdUZXh0ID0gJydcbiAgICAgICAgICAgIGZvciBsaW5lIGluIHRleHQuc3BsaXQgXCJcXG5cIlxuICAgICAgICAgICAgICAgIGlmIGxpbmUubGVuZ3RoIGlzIDAgb3IgbGluZS5jaGFyQXQoMCkgaXMgJyAnXG4gICAgICAgICAgICAgICAgICAgIG5ld1RleHQgPSBVdGlscy5ydHJpbShuZXdUZXh0LCAnICcpICsgbGluZSArIFwiXFxuXCJcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIG5ld1RleHQgKz0gbGluZSArICcgJ1xuICAgICAgICAgICAgdGV4dCA9IG5ld1RleHRcblxuICAgICAgICBpZiAnKycgaXNudCBpbmRpY2F0b3JcbiAgICAgICAgICAgICMgUmVtb3ZlIGFueSBleHRyYSBzcGFjZSBvciBuZXcgbGluZSBhcyB3ZSBhcmUgYWRkaW5nIHRoZW0gYWZ0ZXJcbiAgICAgICAgICAgIHRleHQgPSBVdGlscy5ydHJpbSh0ZXh0KVxuXG4gICAgICAgICMgRGVhbCB3aXRoIHRyYWlsaW5nIG5ld2xpbmVzIGFzIGluZGljYXRlZFxuICAgICAgICBpZiAnJyBpcyBpbmRpY2F0b3JcbiAgICAgICAgICAgIHRleHQgPSBAUEFUVEVSTl9UUkFJTElOR19MSU5FUy5yZXBsYWNlIHRleHQsIFwiXFxuXCJcbiAgICAgICAgZWxzZSBpZiAnLScgaXMgaW5kaWNhdG9yXG4gICAgICAgICAgICB0ZXh0ID0gQFBBVFRFUk5fVFJBSUxJTkdfTElORVMucmVwbGFjZSB0ZXh0LCAnJ1xuXG4gICAgICAgIHJldHVybiB0ZXh0XG5cblxuICAgICMgUmV0dXJucyB0cnVlIGlmIHRoZSBuZXh0IGxpbmUgaXMgaW5kZW50ZWQuXG4gICAgI1xuICAgICMgQHJldHVybiBbQm9vbGVhbl0gICAgIFJldHVybnMgdHJ1ZSBpZiB0aGUgbmV4dCBsaW5lIGlzIGluZGVudGVkLCBmYWxzZSBvdGhlcndpc2VcbiAgICAjXG4gICAgaXNOZXh0TGluZUluZGVudGVkOiAoaWdub3JlQ29tbWVudHMgPSB0cnVlKSAtPlxuICAgICAgICBjdXJyZW50SW5kZW50YXRpb24gPSBAZ2V0Q3VycmVudExpbmVJbmRlbnRhdGlvbigpXG4gICAgICAgIEVPRiA9IG5vdCBAbW92ZVRvTmV4dExpbmUoKVxuXG4gICAgICAgIGlmIGlnbm9yZUNvbW1lbnRzXG4gICAgICAgICAgICB3aGlsZSBub3QoRU9GKSBhbmQgQGlzQ3VycmVudExpbmVFbXB0eSgpXG4gICAgICAgICAgICAgICAgRU9GID0gbm90IEBtb3ZlVG9OZXh0TGluZSgpXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHdoaWxlIG5vdChFT0YpIGFuZCBAaXNDdXJyZW50TGluZUJsYW5rKClcbiAgICAgICAgICAgICAgICBFT0YgPSBub3QgQG1vdmVUb05leHRMaW5lKClcblxuICAgICAgICBpZiBFT0ZcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuXG4gICAgICAgIHJldCA9IGZhbHNlXG4gICAgICAgIGlmIEBnZXRDdXJyZW50TGluZUluZGVudGF0aW9uKCkgPiBjdXJyZW50SW5kZW50YXRpb25cbiAgICAgICAgICAgIHJldCA9IHRydWVcblxuICAgICAgICBAbW92ZVRvUHJldmlvdXNMaW5lKClcblxuICAgICAgICByZXR1cm4gcmV0XG5cblxuICAgICMgUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IGxpbmUgaXMgYmxhbmsgb3IgaWYgaXQgaXMgYSBjb21tZW50IGxpbmUuXG4gICAgI1xuICAgICMgQHJldHVybiBbQm9vbGVhbl0gICAgIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBsaW5lIGlzIGVtcHR5IG9yIGlmIGl0IGlzIGEgY29tbWVudCBsaW5lLCBmYWxzZSBvdGhlcndpc2VcbiAgICAjXG4gICAgaXNDdXJyZW50TGluZUVtcHR5OiAtPlxuICAgICAgICB0cmltbWVkTGluZSA9IFV0aWxzLnRyaW0oQGN1cnJlbnRMaW5lLCAnICcpXG4gICAgICAgIHJldHVybiB0cmltbWVkTGluZS5sZW5ndGggaXMgMCBvciB0cmltbWVkTGluZS5jaGFyQXQoMCkgaXMgJyMnXG5cblxuICAgICMgUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IGxpbmUgaXMgYmxhbmsuXG4gICAgI1xuICAgICMgQHJldHVybiBbQm9vbGVhbl0gICAgIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBsaW5lIGlzIGJsYW5rLCBmYWxzZSBvdGhlcndpc2VcbiAgICAjXG4gICAgaXNDdXJyZW50TGluZUJsYW5rOiAtPlxuICAgICAgICByZXR1cm4gJycgaXMgVXRpbHMudHJpbShAY3VycmVudExpbmUsICcgJylcblxuXG4gICAgIyBSZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQgbGluZSBpcyBhIGNvbW1lbnQgbGluZS5cbiAgICAjXG4gICAgIyBAcmV0dXJuIFtCb29sZWFuXSAgICAgUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IGxpbmUgaXMgYSBjb21tZW50IGxpbmUsIGZhbHNlIG90aGVyd2lzZVxuICAgICNcbiAgICBpc0N1cnJlbnRMaW5lQ29tbWVudDogLT5cbiAgICAgICAgIyBDaGVja2luZyBleHBsaWNpdGx5IHRoZSBmaXJzdCBjaGFyIG9mIHRoZSB0cmltIGlzIGZhc3RlciB0aGFuIGxvb3BzIG9yIHN0cnBvc1xuICAgICAgICBsdHJpbW1lZExpbmUgPSBVdGlscy5sdHJpbShAY3VycmVudExpbmUsICcgJylcblxuICAgICAgICByZXR1cm4gbHRyaW1tZWRMaW5lLmNoYXJBdCgwKSBpcyAnIydcblxuXG4gICAgIyBDbGVhbnVwcyBhIFlBTUwgc3RyaW5nIHRvIGJlIHBhcnNlZC5cbiAgICAjXG4gICAgIyBAcGFyYW0gW1N0cmluZ10gICB2YWx1ZSBUaGUgaW5wdXQgWUFNTCBzdHJpbmdcbiAgICAjXG4gICAgIyBAcmV0dXJuIFtTdHJpbmddICBBIGNsZWFuZWQgdXAgWUFNTCBzdHJpbmdcbiAgICAjXG4gICAgY2xlYW51cDogKHZhbHVlKSAtPlxuICAgICAgICBpZiB2YWx1ZS5pbmRleE9mKFwiXFxyXCIpIGlzbnQgLTFcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoXCJcXHJcXG5cIikuam9pbihcIlxcblwiKS5zcGxpdChcIlxcclwiKS5qb2luKFwiXFxuXCIpXG5cbiAgICAgICAgIyBTdHJpcCBZQU1MIGhlYWRlclxuICAgICAgICBjb3VudCA9IDBcbiAgICAgICAgW3ZhbHVlLCBjb3VudF0gPSBAUEFUVEVSTl9ZQU1MX0hFQURFUi5yZXBsYWNlQWxsIHZhbHVlLCAnJ1xuICAgICAgICBAb2Zmc2V0ICs9IGNvdW50XG5cbiAgICAgICAgIyBSZW1vdmUgbGVhZGluZyBjb21tZW50c1xuICAgICAgICBbdHJpbW1lZFZhbHVlLCBjb3VudF0gPSBAUEFUVEVSTl9MRUFESU5HX0NPTU1FTlRTLnJlcGxhY2VBbGwgdmFsdWUsICcnLCAxXG4gICAgICAgIGlmIGNvdW50IGlzIDFcbiAgICAgICAgICAgICMgSXRlbXMgaGF2ZSBiZWVuIHJlbW92ZWQsIHVwZGF0ZSB0aGUgb2Zmc2V0XG4gICAgICAgICAgICBAb2Zmc2V0ICs9IFV0aWxzLnN1YlN0ckNvdW50KHZhbHVlLCBcIlxcblwiKSAtIFV0aWxzLnN1YlN0ckNvdW50KHRyaW1tZWRWYWx1ZSwgXCJcXG5cIilcbiAgICAgICAgICAgIHZhbHVlID0gdHJpbW1lZFZhbHVlXG5cbiAgICAgICAgIyBSZW1vdmUgc3RhcnQgb2YgdGhlIGRvY3VtZW50IG1hcmtlciAoLS0tKVxuICAgICAgICBbdHJpbW1lZFZhbHVlLCBjb3VudF0gPSBAUEFUVEVSTl9ET0NVTUVOVF9NQVJLRVJfU1RBUlQucmVwbGFjZUFsbCB2YWx1ZSwgJycsIDFcbiAgICAgICAgaWYgY291bnQgaXMgMVxuICAgICAgICAgICAgIyBJdGVtcyBoYXZlIGJlZW4gcmVtb3ZlZCwgdXBkYXRlIHRoZSBvZmZzZXRcbiAgICAgICAgICAgIEBvZmZzZXQgKz0gVXRpbHMuc3ViU3RyQ291bnQodmFsdWUsIFwiXFxuXCIpIC0gVXRpbHMuc3ViU3RyQ291bnQodHJpbW1lZFZhbHVlLCBcIlxcblwiKVxuICAgICAgICAgICAgdmFsdWUgPSB0cmltbWVkVmFsdWVcblxuICAgICAgICAgICAgIyBSZW1vdmUgZW5kIG9mIHRoZSBkb2N1bWVudCBtYXJrZXIgKC4uLilcbiAgICAgICAgICAgIHZhbHVlID0gQFBBVFRFUk5fRE9DVU1FTlRfTUFSS0VSX0VORC5yZXBsYWNlIHZhbHVlLCAnJ1xuXG4gICAgICAgICMgRW5zdXJlIHRoZSBibG9jayBpcyBub3QgaW5kZW50ZWRcbiAgICAgICAgbGluZXMgPSB2YWx1ZS5zcGxpdChcIlxcblwiKVxuICAgICAgICBzbWFsbGVzdEluZGVudCA9IC0xXG4gICAgICAgIGZvciBsaW5lIGluIGxpbmVzXG4gICAgICAgICAgICBjb250aW51ZSBpZiBVdGlscy50cmltKGxpbmUsICcgJykubGVuZ3RoID09IDBcbiAgICAgICAgICAgIGluZGVudCA9IGxpbmUubGVuZ3RoIC0gVXRpbHMubHRyaW0obGluZSkubGVuZ3RoXG4gICAgICAgICAgICBpZiBzbWFsbGVzdEluZGVudCBpcyAtMSBvciBpbmRlbnQgPCBzbWFsbGVzdEluZGVudFxuICAgICAgICAgICAgICAgIHNtYWxsZXN0SW5kZW50ID0gaW5kZW50XG4gICAgICAgIGlmIHNtYWxsZXN0SW5kZW50ID4gMFxuICAgICAgICAgICAgZm9yIGxpbmUsIGkgaW4gbGluZXNcbiAgICAgICAgICAgICAgICBsaW5lc1tpXSA9IGxpbmVbc21hbGxlc3RJbmRlbnQuLl1cbiAgICAgICAgICAgIHZhbHVlID0gbGluZXMuam9pbihcIlxcblwiKVxuXG4gICAgICAgIHJldHVybiB2YWx1ZVxuXG5cbiAgICAjIFJldHVybnMgdHJ1ZSBpZiB0aGUgbmV4dCBsaW5lIHN0YXJ0cyB1bmluZGVudGVkIGNvbGxlY3Rpb25cbiAgICAjXG4gICAgIyBAcmV0dXJuIFtCb29sZWFuXSAgICAgUmV0dXJucyB0cnVlIGlmIHRoZSBuZXh0IGxpbmUgc3RhcnRzIHVuaW5kZW50ZWQgY29sbGVjdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAgI1xuICAgIGlzTmV4dExpbmVVbkluZGVudGVkQ29sbGVjdGlvbjogKGN1cnJlbnRJbmRlbnRhdGlvbiA9IG51bGwpIC0+XG4gICAgICAgIGN1cnJlbnRJbmRlbnRhdGlvbiA/PSBAZ2V0Q3VycmVudExpbmVJbmRlbnRhdGlvbigpXG4gICAgICAgIG5vdEVPRiA9IEBtb3ZlVG9OZXh0TGluZSgpXG5cbiAgICAgICAgd2hpbGUgbm90RU9GIGFuZCBAaXNDdXJyZW50TGluZUVtcHR5KClcbiAgICAgICAgICAgIG5vdEVPRiA9IEBtb3ZlVG9OZXh0TGluZSgpXG5cbiAgICAgICAgaWYgZmFsc2UgaXMgbm90RU9GXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcblxuICAgICAgICByZXQgPSBmYWxzZVxuICAgICAgICBpZiBAZ2V0Q3VycmVudExpbmVJbmRlbnRhdGlvbigpIGlzIGN1cnJlbnRJbmRlbnRhdGlvbiBhbmQgQGlzU3RyaW5nVW5JbmRlbnRlZENvbGxlY3Rpb25JdGVtKEBjdXJyZW50TGluZSlcbiAgICAgICAgICAgIHJldCA9IHRydWVcblxuICAgICAgICBAbW92ZVRvUHJldmlvdXNMaW5lKClcblxuICAgICAgICByZXR1cm4gcmV0XG5cblxuICAgICMgUmV0dXJucyB0cnVlIGlmIHRoZSBzdHJpbmcgaXMgdW4taW5kZW50ZWQgY29sbGVjdGlvbiBpdGVtXG4gICAgI1xuICAgICMgQHJldHVybiBbQm9vbGVhbl0gICAgIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIHVuLWluZGVudGVkIGNvbGxlY3Rpb24gaXRlbSwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAgI1xuICAgIGlzU3RyaW5nVW5JbmRlbnRlZENvbGxlY3Rpb25JdGVtOiAtPlxuICAgICAgICByZXR1cm4gQGN1cnJlbnRMaW5lIGlzICctJyBvciBAY3VycmVudExpbmVbMC4uLjJdIGlzICctICdcblxuXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnNlclxuIiwiXG4jIFBhdHRlcm4gaXMgYSB6ZXJvLWNvbmZsaWN0IHdyYXBwZXIgZXh0ZW5kaW5nIFJlZ0V4cCBmZWF0dXJlc1xuIyBpbiBvcmRlciB0byBtYWtlIFlBTUwgcGFyc2luZyByZWdleCBtb3JlIGV4cHJlc3NpdmUuXG4jXG5jbGFzcyBQYXR0ZXJuXG5cbiAgICAjIEBwcm9wZXJ0eSBbUmVnRXhwXSBUaGUgUmVnRXhwIGluc3RhbmNlXG4gICAgcmVnZXg6ICAgICAgICAgIG51bGxcblxuICAgICMgQHByb3BlcnR5IFtTdHJpbmddIFRoZSByYXcgcmVnZXggc3RyaW5nXG4gICAgcmF3UmVnZXg6ICAgICAgIG51bGxcblxuICAgICMgQHByb3BlcnR5IFtTdHJpbmddIFRoZSBjbGVhbmVkIHJlZ2V4IHN0cmluZyAodXNlZCB0byBjcmVhdGUgdGhlIFJlZ0V4cCBpbnN0YW5jZSlcbiAgICBjbGVhbmVkUmVnZXg6ICAgbnVsbFxuXG4gICAgIyBAcHJvcGVydHkgW09iamVjdF0gVGhlIGRpY3Rpb25hcnkgbWFwcGluZyBuYW1lcyB0byBjYXB0dXJpbmcgYnJhY2tldCBudW1iZXJzXG4gICAgbWFwcGluZzogICAgICAgIG51bGxcblxuICAgICMgQ29uc3RydWN0b3JcbiAgICAjXG4gICAgIyBAcGFyYW0gW1N0cmluZ10gcmF3UmVnZXggVGhlIHJhdyByZWdleCBzdHJpbmcgZGVmaW5pbmcgdGhlIHBhdHRlcm5cbiAgICAjXG4gICAgY29uc3RydWN0b3I6IChyYXdSZWdleCwgbW9kaWZpZXJzID0gJycpIC0+XG4gICAgICAgIGNsZWFuZWRSZWdleCA9ICcnXG4gICAgICAgIGxlbiA9IHJhd1JlZ2V4Lmxlbmd0aFxuICAgICAgICBtYXBwaW5nID0gbnVsbFxuXG4gICAgICAgICMgQ2xlYW51cCByYXcgcmVnZXggYW5kIGNvbXB1dGUgbWFwcGluZ1xuICAgICAgICBjYXB0dXJpbmdCcmFja2V0TnVtYmVyID0gMFxuICAgICAgICBpID0gMFxuICAgICAgICB3aGlsZSBpIDwgbGVuXG4gICAgICAgICAgICBfY2hhciA9IHJhd1JlZ2V4LmNoYXJBdChpKVxuICAgICAgICAgICAgaWYgX2NoYXIgaXMgJ1xcXFwnXG4gICAgICAgICAgICAgICAgIyBJZ25vcmUgbmV4dCBjaGFyYWN0ZXJcbiAgICAgICAgICAgICAgICBjbGVhbmVkUmVnZXggKz0gcmF3UmVnZXhbaS4uaSsxXVxuICAgICAgICAgICAgICAgIGkrK1xuICAgICAgICAgICAgZWxzZSBpZiBfY2hhciBpcyAnKCdcbiAgICAgICAgICAgICAgICAjIEluY3JlYXNlIGJyYWNrZXQgbnVtYmVyLCBvbmx5IGlmIGl0IGlzIGNhcHR1cmluZ1xuICAgICAgICAgICAgICAgIGlmIGkgPCBsZW4gLSAyXG4gICAgICAgICAgICAgICAgICAgIHBhcnQgPSByYXdSZWdleFtpLi5pKzJdXG4gICAgICAgICAgICAgICAgICAgIGlmIHBhcnQgaXMgJyg/OidcbiAgICAgICAgICAgICAgICAgICAgICAgICMgTm9uLWNhcHR1cmluZyBicmFja2V0XG4gICAgICAgICAgICAgICAgICAgICAgICBpICs9IDJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuZWRSZWdleCArPSBwYXJ0XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgcGFydCBpcyAnKD88J1xuICAgICAgICAgICAgICAgICAgICAgICAgIyBDYXB0dXJpbmcgYnJhY2tldCB3aXRoIHBvc3NpYmx5IGEgbmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FwdHVyaW5nQnJhY2tldE51bWJlcisrXG4gICAgICAgICAgICAgICAgICAgICAgICBpICs9IDJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgaSArIDEgPCBsZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJDaGFyID0gcmF3UmVnZXguY2hhckF0KGkgKyAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHN1YkNoYXIgaXMgJz4nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuZWRSZWdleCArPSAnKCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5hbWUubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBc3NvY2lhdGUgYSBuYW1lIHdpdGggYSBjYXB0dXJpbmcgYnJhY2tldCBudW1iZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcgPz0ge31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdbbmFtZV0gPSBjYXB0dXJpbmdCcmFja2V0TnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lICs9IHN1YkNoYXJcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrK1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhbmVkUmVnZXggKz0gX2NoYXJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcHR1cmluZ0JyYWNrZXROdW1iZXIrK1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgY2xlYW5lZFJlZ2V4ICs9IF9jaGFyXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgY2xlYW5lZFJlZ2V4ICs9IF9jaGFyXG5cbiAgICAgICAgICAgIGkrK1xuXG4gICAgICAgIEByYXdSZWdleCA9IHJhd1JlZ2V4XG4gICAgICAgIEBjbGVhbmVkUmVnZXggPSBjbGVhbmVkUmVnZXhcbiAgICAgICAgQHJlZ2V4ID0gbmV3IFJlZ0V4cCBAY2xlYW5lZFJlZ2V4LCAnZycrbW9kaWZpZXJzLnJlcGxhY2UoJ2cnLCAnJylcbiAgICAgICAgQG1hcHBpbmcgPSBtYXBwaW5nXG5cblxuICAgICMgRXhlY3V0ZXMgdGhlIHBhdHRlcm4ncyByZWdleCBhbmQgcmV0dXJucyB0aGUgbWF0Y2hpbmcgdmFsdWVzXG4gICAgI1xuICAgICMgQHBhcmFtIFtTdHJpbmddIHN0ciBUaGUgc3RyaW5nIHRvIHVzZSB0byBleGVjdXRlIHRoZSBwYXR0ZXJuXG4gICAgI1xuICAgICMgQHJldHVybiBbQXJyYXldIFRoZSBtYXRjaGluZyB2YWx1ZXMgZXh0cmFjdGVkIGZyb20gY2FwdHVyaW5nIGJyYWNrZXRzIG9yIG51bGwgaWYgbm90aGluZyBtYXRjaGVkXG4gICAgI1xuICAgIGV4ZWM6IChzdHIpIC0+XG4gICAgICAgIEByZWdleC5sYXN0SW5kZXggPSAwXG4gICAgICAgIG1hdGNoZXMgPSBAcmVnZXguZXhlYyBzdHJcblxuICAgICAgICBpZiBub3QgbWF0Y2hlcz9cbiAgICAgICAgICAgIHJldHVybiBudWxsXG5cbiAgICAgICAgaWYgQG1hcHBpbmc/XG4gICAgICAgICAgICBmb3IgbmFtZSwgaW5kZXggb2YgQG1hcHBpbmdcbiAgICAgICAgICAgICAgICBtYXRjaGVzW25hbWVdID0gbWF0Y2hlc1tpbmRleF1cblxuICAgICAgICByZXR1cm4gbWF0Y2hlc1xuXG5cbiAgICAjIFRlc3RzIHRoZSBwYXR0ZXJuJ3MgcmVnZXhcbiAgICAjXG4gICAgIyBAcGFyYW0gW1N0cmluZ10gc3RyIFRoZSBzdHJpbmcgdG8gdXNlIHRvIHRlc3QgdGhlIHBhdHRlcm5cbiAgICAjXG4gICAgIyBAcmV0dXJuIFtCb29sZWFuXSB0cnVlIGlmIHRoZSBzdHJpbmcgbWF0Y2hlZFxuICAgICNcbiAgICB0ZXN0OiAoc3RyKSAtPlxuICAgICAgICBAcmVnZXgubGFzdEluZGV4ID0gMFxuICAgICAgICByZXR1cm4gQHJlZ2V4LnRlc3Qgc3RyXG5cblxuICAgICMgUmVwbGFjZXMgb2NjdXJlbmNlcyBtYXRjaGluZyB3aXRoIHRoZSBwYXR0ZXJuJ3MgcmVnZXggd2l0aCByZXBsYWNlbWVudFxuICAgICNcbiAgICAjIEBwYXJhbSBbU3RyaW5nXSBzdHIgVGhlIHNvdXJjZSBzdHJpbmcgdG8gcGVyZm9ybSByZXBsYWNlbWVudHNcbiAgICAjIEBwYXJhbSBbU3RyaW5nXSByZXBsYWNlbWVudCBUaGUgc3RyaW5nIHRvIHVzZSBpbiBwbGFjZSBvZiBlYWNoIHJlcGxhY2VkIG9jY3VyZW5jZS5cbiAgICAjXG4gICAgIyBAcmV0dXJuIFtTdHJpbmddIFRoZSByZXBsYWNlZCBzdHJpbmdcbiAgICAjXG4gICAgcmVwbGFjZTogKHN0ciwgcmVwbGFjZW1lbnQpIC0+XG4gICAgICAgIEByZWdleC5sYXN0SW5kZXggPSAwXG4gICAgICAgIHJldHVybiBzdHIucmVwbGFjZSBAcmVnZXgsIHJlcGxhY2VtZW50XG5cblxuICAgICMgUmVwbGFjZXMgb2NjdXJlbmNlcyBtYXRjaGluZyB3aXRoIHRoZSBwYXR0ZXJuJ3MgcmVnZXggd2l0aCByZXBsYWNlbWVudCBhbmRcbiAgICAjIGdldCBib3RoIHRoZSByZXBsYWNlZCBzdHJpbmcgYW5kIHRoZSBudW1iZXIgb2YgcmVwbGFjZWQgb2NjdXJlbmNlcyBpbiB0aGUgc3RyaW5nLlxuICAgICNcbiAgICAjIEBwYXJhbSBbU3RyaW5nXSBzdHIgVGhlIHNvdXJjZSBzdHJpbmcgdG8gcGVyZm9ybSByZXBsYWNlbWVudHNcbiAgICAjIEBwYXJhbSBbU3RyaW5nXSByZXBsYWNlbWVudCBUaGUgc3RyaW5nIHRvIHVzZSBpbiBwbGFjZSBvZiBlYWNoIHJlcGxhY2VkIG9jY3VyZW5jZS5cbiAgICAjIEBwYXJhbSBbSW50ZWdlcl0gbGltaXQgVGhlIG1heGltdW0gbnVtYmVyIG9mIG9jY3VyZW5jZXMgdG8gcmVwbGFjZSAoMCBtZWFucyBpbmZpbml0ZSBudW1iZXIgb2Ygb2NjdXJlbmNlcylcbiAgICAjXG4gICAgIyBAcmV0dXJuIFtBcnJheV0gQSBkZXN0cnVjdHVyYWJsZSBhcnJheSBjb250YWluaW5nIHRoZSByZXBsYWNlZCBzdHJpbmcgYW5kIHRoZSBudW1iZXIgb2YgcmVwbGFjZWQgb2NjdXJlbmNlcy4gRm9yIGluc3RhbmNlOiBbXCJteSByZXBsYWNlZCBzdHJpbmdcIiwgMl1cbiAgICAjXG4gICAgcmVwbGFjZUFsbDogKHN0ciwgcmVwbGFjZW1lbnQsIGxpbWl0ID0gMCkgLT5cbiAgICAgICAgQHJlZ2V4Lmxhc3RJbmRleCA9IDBcbiAgICAgICAgY291bnQgPSAwXG4gICAgICAgIHdoaWxlIEByZWdleC50ZXN0KHN0cikgYW5kIChsaW1pdCBpcyAwIG9yIGNvdW50IDwgbGltaXQpXG4gICAgICAgICAgICBAcmVnZXgubGFzdEluZGV4ID0gMFxuICAgICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UgQHJlZ2V4LCByZXBsYWNlbWVudFxuICAgICAgICAgICAgY291bnQrK1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIFtzdHIsIGNvdW50XVxuXG5cbm1vZHVsZS5leHBvcnRzID0gUGF0dGVyblxuXG4iLCJcblV0aWxzICAgPSByZXF1aXJlICcuL1V0aWxzJ1xuUGF0dGVybiA9IHJlcXVpcmUgJy4vUGF0dGVybidcblxuIyBVbmVzY2FwZXIgZW5jYXBzdWxhdGVzIHVuZXNjYXBpbmcgcnVsZXMgZm9yIHNpbmdsZSBhbmQgZG91YmxlLXF1b3RlZCBZQU1MIHN0cmluZ3MuXG4jXG5jbGFzcyBVbmVzY2FwZXJcblxuICAgICMgUmVnZXggZnJhZ21lbnQgdGhhdCBtYXRjaGVzIGFuIGVzY2FwZWQgY2hhcmFjdGVyIGluXG4gICAgIyBhIGRvdWJsZSBxdW90ZWQgc3RyaW5nLlxuICAgIEBQQVRURVJOX0VTQ0FQRURfQ0hBUkFDVEVSOiAgICAgbmV3IFBhdHRlcm4gJ1xcXFxcXFxcKFswYWJ0XFx0bnZmcmUgXCJcXFxcL1xcXFxcXFxcTl9MUF18eFswLTlhLWZBLUZdezJ9fHVbMC05YS1mQS1GXXs0fXxVWzAtOWEtZkEtRl17OH0pJztcblxuXG4gICAgIyBVbmVzY2FwZXMgYSBzaW5nbGUgcXVvdGVkIHN0cmluZy5cbiAgICAjXG4gICAgIyBAcGFyYW0gW1N0cmluZ10gICAgICAgdmFsdWUgQSBzaW5nbGUgcXVvdGVkIHN0cmluZy5cbiAgICAjXG4gICAgIyBAcmV0dXJuIFtTdHJpbmddICAgICAgVGhlIHVuZXNjYXBlZCBzdHJpbmcuXG4gICAgI1xuICAgIEB1bmVzY2FwZVNpbmdsZVF1b3RlZFN0cmluZzogKHZhbHVlKSAtPlxuICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvXFwnXFwnL2csICdcXCcnKVxuXG5cbiAgICAjIFVuZXNjYXBlcyBhIGRvdWJsZSBxdW90ZWQgc3RyaW5nLlxuICAgICNcbiAgICAjIEBwYXJhbSBbU3RyaW5nXSAgICAgICB2YWx1ZSBBIGRvdWJsZSBxdW90ZWQgc3RyaW5nLlxuICAgICNcbiAgICAjIEByZXR1cm4gW1N0cmluZ10gICAgICBUaGUgdW5lc2NhcGVkIHN0cmluZy5cbiAgICAjXG4gICAgQHVuZXNjYXBlRG91YmxlUXVvdGVkU3RyaW5nOiAodmFsdWUpIC0+XG4gICAgICAgIEBfdW5lc2NhcGVDYWxsYmFjayA/PSAoc3RyKSA9PlxuICAgICAgICAgICAgcmV0dXJuIEB1bmVzY2FwZUNoYXJhY3RlcihzdHIpXG5cbiAgICAgICAgIyBFdmFsdWF0ZSB0aGUgc3RyaW5nXG4gICAgICAgIHJldHVybiBAUEFUVEVSTl9FU0NBUEVEX0NIQVJBQ1RFUi5yZXBsYWNlIHZhbHVlLCBAX3VuZXNjYXBlQ2FsbGJhY2tcblxuXG4gICAgIyBVbmVzY2FwZXMgYSBjaGFyYWN0ZXIgdGhhdCB3YXMgZm91bmQgaW4gYSBkb3VibGUtcXVvdGVkIHN0cmluZ1xuICAgICNcbiAgICAjIEBwYXJhbSBbU3RyaW5nXSAgICAgICB2YWx1ZSBBbiBlc2NhcGVkIGNoYXJhY3RlclxuICAgICNcbiAgICAjIEByZXR1cm4gW1N0cmluZ10gICAgICBUaGUgdW5lc2NhcGVkIGNoYXJhY3RlclxuICAgICNcbiAgICBAdW5lc2NhcGVDaGFyYWN0ZXI6ICh2YWx1ZSkgLT5cbiAgICAgICAgY2ggPSBTdHJpbmcuZnJvbUNoYXJDb2RlXG4gICAgICAgIHN3aXRjaCB2YWx1ZS5jaGFyQXQoMSlcbiAgICAgICAgICAgIHdoZW4gJzAnXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoKDApXG4gICAgICAgICAgICB3aGVuICdhJ1xuICAgICAgICAgICAgICAgIHJldHVybiBjaCg3KVxuICAgICAgICAgICAgd2hlbiAnYidcbiAgICAgICAgICAgICAgICByZXR1cm4gY2goOClcbiAgICAgICAgICAgIHdoZW4gJ3QnXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiXFx0XCJcbiAgICAgICAgICAgIHdoZW4gXCJcXHRcIlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlxcdFwiXG4gICAgICAgICAgICB3aGVuICduJ1xuICAgICAgICAgICAgICAgIHJldHVybiBcIlxcblwiXG4gICAgICAgICAgICB3aGVuICd2J1xuICAgICAgICAgICAgICAgIHJldHVybiBjaCgxMSlcbiAgICAgICAgICAgIHdoZW4gJ2YnXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoKDEyKVxuICAgICAgICAgICAgd2hlbiAncidcbiAgICAgICAgICAgICAgICByZXR1cm4gY2goMTMpXG4gICAgICAgICAgICB3aGVuICdlJ1xuICAgICAgICAgICAgICAgIHJldHVybiBjaCgyNylcbiAgICAgICAgICAgIHdoZW4gJyAnXG4gICAgICAgICAgICAgICAgcmV0dXJuICcgJ1xuICAgICAgICAgICAgd2hlbiAnXCInXG4gICAgICAgICAgICAgICAgcmV0dXJuICdcIidcbiAgICAgICAgICAgIHdoZW4gJy8nXG4gICAgICAgICAgICAgICAgcmV0dXJuICcvJ1xuICAgICAgICAgICAgd2hlbiAnXFxcXCdcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1xcXFwnXG4gICAgICAgICAgICB3aGVuICdOJ1xuICAgICAgICAgICAgICAgICMgVSswMDg1IE5FWFQgTElORVxuICAgICAgICAgICAgICAgIHJldHVybiBjaCgweDAwODUpXG4gICAgICAgICAgICB3aGVuICdfJ1xuICAgICAgICAgICAgICAgICMgVSswMEEwIE5PLUJSRUFLIFNQQUNFXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoKDB4MDBBMClcbiAgICAgICAgICAgIHdoZW4gJ0wnXG4gICAgICAgICAgICAgICAgIyBVKzIwMjggTElORSBTRVBBUkFUT1JcbiAgICAgICAgICAgICAgICByZXR1cm4gY2goMHgyMDI4KVxuICAgICAgICAgICAgd2hlbiAnUCdcbiAgICAgICAgICAgICAgICAjIFUrMjAyOSBQQVJBR1JBUEggU0VQQVJBVE9SXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoKDB4MjAyOSlcbiAgICAgICAgICAgIHdoZW4gJ3gnXG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0aWxzLnV0ZjhjaHIoVXRpbHMuaGV4RGVjKHZhbHVlLnN1YnN0cigyLCAyKSkpXG4gICAgICAgICAgICB3aGVuICd1J1xuICAgICAgICAgICAgICAgIHJldHVybiBVdGlscy51dGY4Y2hyKFV0aWxzLmhleERlYyh2YWx1ZS5zdWJzdHIoMiwgNCkpKVxuICAgICAgICAgICAgd2hlbiAnVSdcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRpbHMudXRmOGNocihVdGlscy5oZXhEZWModmFsdWUuc3Vic3RyKDIsIDgpKSlcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gJydcblxubW9kdWxlLmV4cG9ydHMgPSBVbmVzY2FwZXJcbiIsIlxuUGF0dGVybiA9IHJlcXVpcmUgJy4vUGF0dGVybidcblxuIyBBIGJ1bmNoIG9mIHV0aWxpdHkgbWV0aG9kc1xuI1xuY2xhc3MgVXRpbHNcblxuICAgIEBSRUdFWF9MRUZUX1RSSU1fQllfQ0hBUjogICB7fVxuICAgIEBSRUdFWF9SSUdIVF9UUklNX0JZX0NIQVI6ICB7fVxuICAgIEBSRUdFWF9TUEFDRVM6ICAgICAgICAgICAgICAvXFxzKy9nXG4gICAgQFJFR0VYX0RJR0lUUzogICAgICAgICAgICAgIC9eXFxkKyQvXG4gICAgQFJFR0VYX09DVEFMOiAgICAgICAgICAgICAgIC9bXjAtN10vZ2lcbiAgICBAUkVHRVhfSEVYQURFQ0lNQUw6ICAgICAgICAgL1teYS1mMC05XS9naVxuXG4gICAgIyBQcmVjb21waWxlZCBkYXRlIHBhdHRlcm5cbiAgICBAUEFUVEVSTl9EQVRFOiAgICAgICAgICAgICAgbmV3IFBhdHRlcm4gJ14nK1xuICAgICAgICAgICAgJyg/PHllYXI+WzAtOV1bMC05XVswLTldWzAtOV0pJytcbiAgICAgICAgICAgICctKD88bW9udGg+WzAtOV1bMC05XT8pJytcbiAgICAgICAgICAgICctKD88ZGF5PlswLTldWzAtOV0/KScrXG4gICAgICAgICAgICAnKD86KD86W1R0XXxbIFxcdF0rKScrXG4gICAgICAgICAgICAnKD88aG91cj5bMC05XVswLTldPyknK1xuICAgICAgICAgICAgJzooPzxtaW51dGU+WzAtOV1bMC05XSknK1xuICAgICAgICAgICAgJzooPzxzZWNvbmQ+WzAtOV1bMC05XSknK1xuICAgICAgICAgICAgJyg/OlxcLig/PGZyYWN0aW9uPlswLTldKikpPycrXG4gICAgICAgICAgICAnKD86WyBcXHRdKig/PHR6Plp8KD88dHpfc2lnbj5bLStdKSg/PHR6X2hvdXI+WzAtOV1bMC05XT8pJytcbiAgICAgICAgICAgICcoPzo6KD88dHpfbWludXRlPlswLTldWzAtOV0pKT8pKT8pPycrXG4gICAgICAgICAgICAnJCcsICdpJ1xuXG4gICAgIyBMb2NhbCB0aW1lem9uZSBvZmZzZXQgaW4gbXNcbiAgICBATE9DQUxfVElNRVpPTkVfT0ZGU0VUOiAgICAgbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAgKiAxMDAwXG5cbiAgICAjIFRyaW1zIHRoZSBnaXZlbiBzdHJpbmcgb24gYm90aCBzaWRlc1xuICAgICNcbiAgICAjIEBwYXJhbSBbU3RyaW5nXSBzdHIgVGhlIHN0cmluZyB0byB0cmltXG4gICAgIyBAcGFyYW0gW1N0cmluZ10gX2NoYXIgVGhlIGNoYXJhY3RlciB0byB1c2UgZm9yIHRyaW1taW5nIChkZWZhdWx0OiAnXFxcXHMnKVxuICAgICNcbiAgICAjIEByZXR1cm4gW1N0cmluZ10gQSB0cmltbWVkIHN0cmluZ1xuICAgICNcbiAgICBAdHJpbTogKHN0ciwgX2NoYXIgPSAnXFxcXHMnKSAtPlxuICAgICAgICByZWdleExlZnQgPSBAUkVHRVhfTEVGVF9UUklNX0JZX0NIQVJbX2NoYXJdXG4gICAgICAgIHVubGVzcyByZWdleExlZnQ/XG4gICAgICAgICAgICBAUkVHRVhfTEVGVF9UUklNX0JZX0NIQVJbX2NoYXJdID0gcmVnZXhMZWZ0ID0gbmV3IFJlZ0V4cCAnXicrX2NoYXIrJycrX2NoYXIrJyonXG4gICAgICAgIHJlZ2V4TGVmdC5sYXN0SW5kZXggPSAwXG4gICAgICAgIHJlZ2V4UmlnaHQgPSBAUkVHRVhfUklHSFRfVFJJTV9CWV9DSEFSW19jaGFyXVxuICAgICAgICB1bmxlc3MgcmVnZXhSaWdodD9cbiAgICAgICAgICAgIEBSRUdFWF9SSUdIVF9UUklNX0JZX0NIQVJbX2NoYXJdID0gcmVnZXhSaWdodCA9IG5ldyBSZWdFeHAgX2NoYXIrJycrX2NoYXIrJyokJ1xuICAgICAgICByZWdleFJpZ2h0Lmxhc3RJbmRleCA9IDBcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKHJlZ2V4TGVmdCwgJycpLnJlcGxhY2UocmVnZXhSaWdodCwgJycpXG5cblxuICAgICMgVHJpbXMgdGhlIGdpdmVuIHN0cmluZyBvbiB0aGUgbGVmdCBzaWRlXG4gICAgI1xuICAgICMgQHBhcmFtIFtTdHJpbmddIHN0ciBUaGUgc3RyaW5nIHRvIHRyaW1cbiAgICAjIEBwYXJhbSBbU3RyaW5nXSBfY2hhciBUaGUgY2hhcmFjdGVyIHRvIHVzZSBmb3IgdHJpbW1pbmcgKGRlZmF1bHQ6ICdcXFxccycpXG4gICAgI1xuICAgICMgQHJldHVybiBbU3RyaW5nXSBBIHRyaW1tZWQgc3RyaW5nXG4gICAgI1xuICAgIEBsdHJpbTogKHN0ciwgX2NoYXIgPSAnXFxcXHMnKSAtPlxuICAgICAgICByZWdleExlZnQgPSBAUkVHRVhfTEVGVF9UUklNX0JZX0NIQVJbX2NoYXJdXG4gICAgICAgIHVubGVzcyByZWdleExlZnQ/XG4gICAgICAgICAgICBAUkVHRVhfTEVGVF9UUklNX0JZX0NIQVJbX2NoYXJdID0gcmVnZXhMZWZ0ID0gbmV3IFJlZ0V4cCAnXicrX2NoYXIrJycrX2NoYXIrJyonXG4gICAgICAgIHJlZ2V4TGVmdC5sYXN0SW5kZXggPSAwXG4gICAgICAgIHJldHVybiBzdHIucmVwbGFjZShyZWdleExlZnQsICcnKVxuXG5cbiAgICAjIFRyaW1zIHRoZSBnaXZlbiBzdHJpbmcgb24gdGhlIHJpZ2h0IHNpZGVcbiAgICAjXG4gICAgIyBAcGFyYW0gW1N0cmluZ10gc3RyIFRoZSBzdHJpbmcgdG8gdHJpbVxuICAgICMgQHBhcmFtIFtTdHJpbmddIF9jaGFyIFRoZSBjaGFyYWN0ZXIgdG8gdXNlIGZvciB0cmltbWluZyAoZGVmYXVsdDogJ1xcXFxzJylcbiAgICAjXG4gICAgIyBAcmV0dXJuIFtTdHJpbmddIEEgdHJpbW1lZCBzdHJpbmdcbiAgICAjXG4gICAgQHJ0cmltOiAoc3RyLCBfY2hhciA9ICdcXFxccycpIC0+XG4gICAgICAgIHJlZ2V4UmlnaHQgPSBAUkVHRVhfUklHSFRfVFJJTV9CWV9DSEFSW19jaGFyXVxuICAgICAgICB1bmxlc3MgcmVnZXhSaWdodD9cbiAgICAgICAgICAgIEBSRUdFWF9SSUdIVF9UUklNX0JZX0NIQVJbX2NoYXJdID0gcmVnZXhSaWdodCA9IG5ldyBSZWdFeHAgX2NoYXIrJycrX2NoYXIrJyokJ1xuICAgICAgICByZWdleFJpZ2h0Lmxhc3RJbmRleCA9IDBcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKHJlZ2V4UmlnaHQsICcnKVxuXG5cbiAgICAjIENoZWNrcyBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgZW1wdHkgKG51bGwsIHVuZGVmaW5lZCwgZW1wdHkgc3RyaW5nLCBzdHJpbmcgJzAnLCBlbXB0eSBBcnJheSwgZW1wdHkgT2JqZWN0KVxuICAgICNcbiAgICAjIEBwYXJhbSBbT2JqZWN0XSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2tcbiAgICAjXG4gICAgIyBAcmV0dXJuIFtCb29sZWFuXSB0cnVlIGlmIHRoZSB2YWx1ZSBpcyBlbXB0eVxuICAgICNcbiAgICBAaXNFbXB0eTogKHZhbHVlKSAtPlxuICAgICAgICByZXR1cm4gbm90KHZhbHVlKSBvciB2YWx1ZSBpcyAnJyBvciB2YWx1ZSBpcyAnMCcgb3IgKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkgYW5kIHZhbHVlLmxlbmd0aCBpcyAwKSBvciBAaXNFbXB0eU9iamVjdCh2YWx1ZSlcblxuICAgICMgQ2hlY2tzIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBhbiBlbXB0eSBvYmplY3RcbiAgICAjXG4gICAgIyBAcGFyYW0gW09iamVjdF0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrXG4gICAgI1xuICAgICMgQHJldHVybiBbQm9vbGVhbl0gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgZW1wdHkgYW5kIGlzIGFuIG9iamVjdFxuICAgICNcbiAgICBAaXNFbXB0eU9iamVjdDogKHZhbHVlKSAtPlxuICAgICAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgYW5kIChrIGZvciBvd24gayBvZiB2YWx1ZSkubGVuZ3RoIGlzIDBcblxuICAgICMgQ291bnRzIHRoZSBudW1iZXIgb2Ygb2NjdXJlbmNlcyBvZiBzdWJTdHJpbmcgaW5zaWRlIHN0cmluZ1xuICAgICNcbiAgICAjIEBwYXJhbSBbU3RyaW5nXSBzdHJpbmcgVGhlIHN0cmluZyB3aGVyZSB0byBjb3VudCBvY2N1cmVuY2VzXG4gICAgIyBAcGFyYW0gW1N0cmluZ10gc3ViU3RyaW5nIFRoZSBzdWJTdHJpbmcgdG8gY291bnRcbiAgICAjIEBwYXJhbSBbSW50ZWdlcl0gc3RhcnQgVGhlIHN0YXJ0IGluZGV4XG4gICAgIyBAcGFyYW0gW0ludGVnZXJdIGxlbmd0aCBUaGUgc3RyaW5nIGxlbmd0aCB1bnRpbCB3aGVyZSB0byBjb3VudFxuICAgICNcbiAgICAjIEByZXR1cm4gW0ludGVnZXJdIFRoZSBudW1iZXIgb2Ygb2NjdXJlbmNlc1xuICAgICNcbiAgICBAc3ViU3RyQ291bnQ6IChzdHJpbmcsIHN1YlN0cmluZywgc3RhcnQsIGxlbmd0aCkgLT5cbiAgICAgICAgYyA9IDBcblxuICAgICAgICBzdHJpbmcgPSAnJyArIHN0cmluZ1xuICAgICAgICBzdWJTdHJpbmcgPSAnJyArIHN1YlN0cmluZ1xuXG4gICAgICAgIGlmIHN0YXJ0P1xuICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nW3N0YXJ0Li5dXG4gICAgICAgIGlmIGxlbmd0aD9cbiAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZ1swLi4ubGVuZ3RoXVxuXG4gICAgICAgIGxlbiA9IHN0cmluZy5sZW5ndGhcbiAgICAgICAgc3VibGVuID0gc3ViU3RyaW5nLmxlbmd0aFxuICAgICAgICBmb3IgaSBpbiBbMC4uLmxlbl1cbiAgICAgICAgICAgIGlmIHN1YlN0cmluZyBpcyBzdHJpbmdbaS4uLnN1Ymxlbl1cbiAgICAgICAgICAgICAgICBjKytcbiAgICAgICAgICAgICAgICBpICs9IHN1YmxlbiAtIDFcblxuICAgICAgICByZXR1cm4gY1xuXG5cbiAgICAjIFJldHVybnMgdHJ1ZSBpZiBpbnB1dCBpcyBvbmx5IGNvbXBvc2VkIG9mIGRpZ2l0c1xuICAgICNcbiAgICAjIEBwYXJhbSBbT2JqZWN0XSBpbnB1dCBUaGUgdmFsdWUgdG8gdGVzdFxuICAgICNcbiAgICAjIEByZXR1cm4gW0Jvb2xlYW5dIHRydWUgaWYgaW5wdXQgaXMgb25seSBjb21wb3NlZCBvZiBkaWdpdHNcbiAgICAjXG4gICAgQGlzRGlnaXRzOiAoaW5wdXQpIC0+XG4gICAgICAgIEBSRUdFWF9ESUdJVFMubGFzdEluZGV4ID0gMFxuICAgICAgICByZXR1cm4gQFJFR0VYX0RJR0lUUy50ZXN0IGlucHV0XG5cblxuICAgICMgRGVjb2RlIG9jdGFsIHZhbHVlXG4gICAgI1xuICAgICMgQHBhcmFtIFtTdHJpbmddIGlucHV0IFRoZSB2YWx1ZSB0byBkZWNvZGVcbiAgICAjXG4gICAgIyBAcmV0dXJuIFtJbnRlZ2VyXSBUaGUgZGVjb2RlZCB2YWx1ZVxuICAgICNcbiAgICBAb2N0RGVjOiAoaW5wdXQpIC0+XG4gICAgICAgIEBSRUdFWF9PQ1RBTC5sYXN0SW5kZXggPSAwXG4gICAgICAgIHJldHVybiBwYXJzZUludCgoaW5wdXQrJycpLnJlcGxhY2UoQFJFR0VYX09DVEFMLCAnJyksIDgpXG5cblxuICAgICMgRGVjb2RlIGhleGFkZWNpbWFsIHZhbHVlXG4gICAgI1xuICAgICMgQHBhcmFtIFtTdHJpbmddIGlucHV0IFRoZSB2YWx1ZSB0byBkZWNvZGVcbiAgICAjXG4gICAgIyBAcmV0dXJuIFtJbnRlZ2VyXSBUaGUgZGVjb2RlZCB2YWx1ZVxuICAgICNcbiAgICBAaGV4RGVjOiAoaW5wdXQpIC0+XG4gICAgICAgIEBSRUdFWF9IRVhBREVDSU1BTC5sYXN0SW5kZXggPSAwXG4gICAgICAgIGlucHV0ID0gQHRyaW0oaW5wdXQpXG4gICAgICAgIGlmIChpbnB1dCsnJylbMC4uLjJdIGlzICcweCcgdGhlbiBpbnB1dCA9IChpbnB1dCsnJylbMi4uXVxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoKGlucHV0KycnKS5yZXBsYWNlKEBSRUdFWF9IRVhBREVDSU1BTCwgJycpLCAxNilcblxuXG4gICAgIyBHZXQgdGhlIFVURi04IGNoYXJhY3RlciBmb3IgdGhlIGdpdmVuIGNvZGUgcG9pbnQuXG4gICAgI1xuICAgICMgQHBhcmFtIFtJbnRlZ2VyXSBjIFRoZSB1bmljb2RlIGNvZGUgcG9pbnRcbiAgICAjXG4gICAgIyBAcmV0dXJuIFtTdHJpbmddIFRoZSBjb3JyZXNwb25kaW5nIFVURi04IGNoYXJhY3RlclxuICAgICNcbiAgICBAdXRmOGNocjogKGMpIC0+XG4gICAgICAgIGNoID0gU3RyaW5nLmZyb21DaGFyQ29kZVxuICAgICAgICBpZiAweDgwID4gKGMgJT0gMHgyMDAwMDApXG4gICAgICAgICAgICByZXR1cm4gY2goYylcbiAgICAgICAgaWYgMHg4MDAgPiBjXG4gICAgICAgICAgICByZXR1cm4gY2goMHhDMCB8IGM+PjYpICsgY2goMHg4MCB8IGMgJiAweDNGKVxuICAgICAgICBpZiAweDEwMDAwID4gY1xuICAgICAgICAgICAgcmV0dXJuIGNoKDB4RTAgfCBjPj4xMikgKyBjaCgweDgwIHwgYz4+NiAmIDB4M0YpICsgY2goMHg4MCB8IGMgJiAweDNGKVxuXG4gICAgICAgIHJldHVybiBjaCgweEYwIHwgYz4+MTgpICsgY2goMHg4MCB8IGM+PjEyICYgMHgzRikgKyBjaCgweDgwIHwgYz4+NiAmIDB4M0YpICsgY2goMHg4MCB8IGMgJiAweDNGKVxuXG5cbiAgICAjIFJldHVybnMgdGhlIGJvb2xlYW4gdmFsdWUgZXF1aXZhbGVudCB0byB0aGUgZ2l2ZW4gaW5wdXRcbiAgICAjXG4gICAgIyBAcGFyYW0gW1N0cmluZ3xPYmplY3RdICAgIGlucHV0ICAgICAgIFRoZSBpbnB1dCB2YWx1ZVxuICAgICMgQHBhcmFtIFtCb29sZWFuXSAgICAgICAgICBzdHJpY3QgICAgICBJZiBzZXQgdG8gZmFsc2UsIGFjY2VwdCAneWVzJyBhbmQgJ25vJyBhcyBib29sZWFuIHZhbHVlc1xuICAgICNcbiAgICAjIEByZXR1cm4gW0Jvb2xlYW5dICAgICAgICAgdGhlIGJvb2xlYW4gdmFsdWVcbiAgICAjXG4gICAgQHBhcnNlQm9vbGVhbjogKGlucHV0LCBzdHJpY3QgPSB0cnVlKSAtPlxuICAgICAgICBpZiB0eXBlb2YoaW5wdXQpIGlzICdzdHJpbmcnXG4gICAgICAgICAgICBsb3dlcklucHV0ID0gaW5wdXQudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgaWYgbm90IHN0cmljdFxuICAgICAgICAgICAgICAgIGlmIGxvd2VySW5wdXQgaXMgJ25vJyB0aGVuIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgaWYgbG93ZXJJbnB1dCBpcyAnMCcgdGhlbiByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgIGlmIGxvd2VySW5wdXQgaXMgJ2ZhbHNlJyB0aGVuIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgaWYgbG93ZXJJbnB1dCBpcyAnJyB0aGVuIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgcmV0dXJuICEhaW5wdXRcblxuXG5cbiAgICAjIFJldHVybnMgdHJ1ZSBpZiBpbnB1dCBpcyBudW1lcmljXG4gICAgI1xuICAgICMgQHBhcmFtIFtPYmplY3RdIGlucHV0IFRoZSB2YWx1ZSB0byB0ZXN0XG4gICAgI1xuICAgICMgQHJldHVybiBbQm9vbGVhbl0gdHJ1ZSBpZiBpbnB1dCBpcyBudW1lcmljXG4gICAgI1xuICAgIEBpc051bWVyaWM6IChpbnB1dCkgLT5cbiAgICAgICAgQFJFR0VYX1NQQUNFUy5sYXN0SW5kZXggPSAwXG4gICAgICAgIHJldHVybiB0eXBlb2YoaW5wdXQpIGlzICdudW1iZXInIG9yIHR5cGVvZihpbnB1dCkgaXMgJ3N0cmluZycgYW5kICFpc05hTihpbnB1dCkgYW5kIGlucHV0LnJlcGxhY2UoQFJFR0VYX1NQQUNFUywgJycpIGlzbnQgJydcblxuXG4gICAgIyBSZXR1cm5zIGEgcGFyc2VkIGRhdGUgZnJvbSB0aGUgZ2l2ZW4gc3RyaW5nXG4gICAgI1xuICAgICMgQHBhcmFtIFtTdHJpbmddIHN0ciBUaGUgZGF0ZSBzdHJpbmcgdG8gcGFyc2VcbiAgICAjXG4gICAgIyBAcmV0dXJuIFtEYXRlXSBUaGUgcGFyc2VkIGRhdGUgb3IgbnVsbCBpZiBwYXJzaW5nIGZhaWxlZFxuICAgICNcbiAgICBAc3RyaW5nVG9EYXRlOiAoc3RyKSAtPlxuICAgICAgICB1bmxlc3Mgc3RyPy5sZW5ndGhcbiAgICAgICAgICAgIHJldHVybiBudWxsXG5cbiAgICAgICAgIyBQZXJmb3JtIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuXG4gICAgICAgIGluZm8gPSBAUEFUVEVSTl9EQVRFLmV4ZWMgc3RyXG4gICAgICAgIHVubGVzcyBpbmZvXG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuXG4gICAgICAgICMgRXh0cmFjdCB5ZWFyLCBtb250aCwgZGF5XG4gICAgICAgIHllYXIgPSBwYXJzZUludCBpbmZvLnllYXIsIDEwXG4gICAgICAgIG1vbnRoID0gcGFyc2VJbnQoaW5mby5tb250aCwgMTApIC0gMSAjIEluIGphdmFzY3JpcHQsIGphbnVhcnkgaXMgMCwgZmVicnVhcnkgMSwgZXRjLi4uXG4gICAgICAgIGRheSA9IHBhcnNlSW50IGluZm8uZGF5LCAxMFxuXG4gICAgICAgICMgSWYgbm8gaG91ciBpcyBnaXZlbiwgcmV0dXJuIGEgZGF0ZSB3aXRoIGRheSBwcmVjaXNpb25cbiAgICAgICAgdW5sZXNzIGluZm8uaG91cj9cbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSBEYXRlLlVUQyh5ZWFyLCBtb250aCwgZGF5KVxuICAgICAgICAgICAgcmV0dXJuIGRhdGVcblxuICAgICAgICAjIEV4dHJhY3QgaG91ciwgbWludXRlLCBzZWNvbmRcbiAgICAgICAgaG91ciA9IHBhcnNlSW50IGluZm8uaG91ciwgMTBcbiAgICAgICAgbWludXRlID0gcGFyc2VJbnQgaW5mby5taW51dGUsIDEwXG4gICAgICAgIHNlY29uZCA9IHBhcnNlSW50IGluZm8uc2Vjb25kLCAxMFxuXG4gICAgICAgICMgRXh0cmFjdCBmcmFjdGlvbiwgaWYgZ2l2ZW5cbiAgICAgICAgaWYgaW5mby5mcmFjdGlvbj9cbiAgICAgICAgICAgIGZyYWN0aW9uID0gaW5mby5mcmFjdGlvblswLi4uM11cbiAgICAgICAgICAgIHdoaWxlIGZyYWN0aW9uLmxlbmd0aCA8IDNcbiAgICAgICAgICAgICAgICBmcmFjdGlvbiArPSAnMCdcbiAgICAgICAgICAgIGZyYWN0aW9uID0gcGFyc2VJbnQgZnJhY3Rpb24sIDEwXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZyYWN0aW9uID0gMFxuXG4gICAgICAgICMgQ29tcHV0ZSB0aW1lem9uZSBvZmZzZXQgaWYgZ2l2ZW5cbiAgICAgICAgaWYgaW5mby50ej9cbiAgICAgICAgICAgIHR6X2hvdXIgPSBwYXJzZUludCBpbmZvLnR6X2hvdXIsIDEwXG4gICAgICAgICAgICBpZiBpbmZvLnR6X21pbnV0ZT9cbiAgICAgICAgICAgICAgICB0el9taW51dGUgPSBwYXJzZUludCBpbmZvLnR6X21pbnV0ZSwgMTBcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0el9taW51dGUgPSAwXG5cbiAgICAgICAgICAgICMgQ29tcHV0ZSB0aW1lem9uZSBkZWx0YSBpbiBtc1xuICAgICAgICAgICAgdHpfb2Zmc2V0ID0gKHR6X2hvdXIgKiA2MCArIHR6X21pbnV0ZSkgKiA2MDAwMFxuICAgICAgICAgICAgaWYgJy0nIGlzIGluZm8udHpfc2lnblxuICAgICAgICAgICAgICAgIHR6X29mZnNldCAqPSAtMVxuXG4gICAgICAgICMgQ29tcHV0ZSBkYXRlXG4gICAgICAgIGRhdGUgPSBuZXcgRGF0ZSBEYXRlLlVUQyh5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgZnJhY3Rpb24pXG4gICAgICAgIGlmIHR6X29mZnNldFxuICAgICAgICAgICAgZGF0ZS5zZXRUaW1lIGRhdGUuZ2V0VGltZSgpIC0gdHpfb2Zmc2V0XG5cbiAgICAgICAgcmV0dXJuIGRhdGVcblxuXG4gICAgIyBSZXBlYXRzIHRoZSBnaXZlbiBzdHJpbmcgYSBudW1iZXIgb2YgdGltZXNcbiAgICAjXG4gICAgIyBAcGFyYW0gW1N0cmluZ10gICBzdHIgICAgIFRoZSBzdHJpbmcgdG8gcmVwZWF0XG4gICAgIyBAcGFyYW0gW0ludGVnZXJdICBudW1iZXIgIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBzdHJpbmdcbiAgICAjXG4gICAgIyBAcmV0dXJuIFtTdHJpbmddICBUaGUgcmVwZWF0ZWQgc3RyaW5nXG4gICAgI1xuICAgIEBzdHJSZXBlYXQ6IChzdHIsIG51bWJlcikgLT5cbiAgICAgICAgcmVzID0gJydcbiAgICAgICAgaSA9IDBcbiAgICAgICAgd2hpbGUgaSA8IG51bWJlclxuICAgICAgICAgICAgcmVzICs9IHN0clxuICAgICAgICAgICAgaSsrXG4gICAgICAgIHJldHVybiByZXNcblxuXG4gICAgIyBSZWFkcyB0aGUgZGF0YSBmcm9tIHRoZSBnaXZlbiBmaWxlIHBhdGggYW5kIHJldHVybnMgdGhlIHJlc3VsdCBhcyBzdHJpbmdcbiAgICAjXG4gICAgIyBAcGFyYW0gW1N0cmluZ10gICBwYXRoICAgICAgICBUaGUgcGF0aCB0byB0aGUgZmlsZVxuICAgICMgQHBhcmFtIFtGdW5jdGlvbl0gY2FsbGJhY2sgICAgQSBjYWxsYmFjayB0byByZWFkIGZpbGUgYXN5bmNocm9ub3VzbHkgKG9wdGlvbmFsKVxuICAgICNcbiAgICAjIEByZXR1cm4gW1N0cmluZ10gIFRoZSByZXN1bHRpbmcgZGF0YSBhcyBzdHJpbmdcbiAgICAjXG4gICAgQGdldFN0cmluZ0Zyb21GaWxlOiAocGF0aCwgY2FsbGJhY2sgPSBudWxsKSAtPlxuICAgICAgICB4aHIgPSBudWxsXG4gICAgICAgIGlmIHdpbmRvdz9cbiAgICAgICAgICAgIGlmIHdpbmRvdy5YTUxIdHRwUmVxdWVzdFxuICAgICAgICAgICAgICAgIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpXG4gICAgICAgICAgICBlbHNlIGlmIHdpbmRvdy5BY3RpdmVYT2JqZWN0XG4gICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gW1wiTXN4bWwyLlhNTEhUVFAuNi4wXCIsIFwiTXN4bWwyLlhNTEhUVFAuMy4wXCIsIFwiTXN4bWwyLlhNTEhUVFBcIiwgXCJNaWNyb3NvZnQuWE1MSFRUUFwiXVxuICAgICAgICAgICAgICAgICAgICB0cnlcbiAgICAgICAgICAgICAgICAgICAgICAgIHhociA9IG5ldyBBY3RpdmVYT2JqZWN0KG5hbWUpXG5cbiAgICAgICAgaWYgeGhyP1xuICAgICAgICAgICAgIyBCcm93c2VyXG4gICAgICAgICAgICBpZiBjYWxsYmFjaz9cbiAgICAgICAgICAgICAgICAjIEFzeW5jXG4gICAgICAgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IC0+XG4gICAgICAgICAgICAgICAgICAgIGlmIHhoci5yZWFkeVN0YXRlIGlzIDRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIHhoci5zdGF0dXMgaXMgMjAwIG9yIHhoci5zdGF0dXMgaXMgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHhoci5yZXNwb25zZVRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbClcbiAgICAgICAgICAgICAgICB4aHIub3BlbiAnR0VUJywgcGF0aCwgdHJ1ZVxuICAgICAgICAgICAgICAgIHhoci5zZW5kIG51bGxcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICMgU3luY1xuICAgICAgICAgICAgICAgIHhoci5vcGVuICdHRVQnLCBwYXRoLCBmYWxzZVxuICAgICAgICAgICAgICAgIHhoci5zZW5kIG51bGxcblxuICAgICAgICAgICAgICAgIGlmIHhoci5zdGF0dXMgaXMgMjAwIG9yIHhoci5zdGF0dXMgPT0gMFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geGhyLnJlc3BvbnNlVGV4dFxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgIyBOb2RlLmpzLWxpa2VcbiAgICAgICAgICAgIHJlcSA9IHJlcXVpcmVcbiAgICAgICAgICAgIGZzID0gcmVxKCdmcycpICMgUHJldmVudCBicm93c2VyaWZ5IGZyb20gdHJ5aW5nIHRvIGxvYWQgJ2ZzJyBtb2R1bGVcbiAgICAgICAgICAgIGlmIGNhbGxiYWNrP1xuICAgICAgICAgICAgICAgICMgQXN5bmNcbiAgICAgICAgICAgICAgICBmcy5yZWFkRmlsZSBwYXRoLCAoZXJyLCBkYXRhKSAtPlxuICAgICAgICAgICAgICAgICAgICBpZiBlcnJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrIG51bGxcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgU3RyaW5nKGRhdGEpXG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAjIFN5bmNcbiAgICAgICAgICAgICAgICBkYXRhID0gZnMucmVhZEZpbGVTeW5jIHBhdGhcbiAgICAgICAgICAgICAgICBpZiBkYXRhP1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGRhdGEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcblxuXG5cbm1vZHVsZS5leHBvcnRzID0gVXRpbHNcbiIsIlxuUGFyc2VyID0gcmVxdWlyZSAnLi9QYXJzZXInXG5EdW1wZXIgPSByZXF1aXJlICcuL0R1bXBlcidcblV0aWxzICA9IHJlcXVpcmUgJy4vVXRpbHMnXG5cbiMgWWFtbCBvZmZlcnMgY29udmVuaWVuY2UgbWV0aG9kcyB0byBsb2FkIGFuZCBkdW1wIFlBTUwuXG4jXG5jbGFzcyBZYW1sXG5cbiAgICAjIFBhcnNlcyBZQU1MIGludG8gYSBKYXZhU2NyaXB0IG9iamVjdC5cbiAgICAjXG4gICAgIyBUaGUgcGFyc2UgbWV0aG9kLCB3aGVuIHN1cHBsaWVkIHdpdGggYSBZQU1MIHN0cmluZyxcbiAgICAjIHdpbGwgZG8gaXRzIGJlc3QgdG8gY29udmVydCBZQU1MIGluIGEgZmlsZSBpbnRvIGEgSmF2YVNjcmlwdCBvYmplY3QuXG4gICAgI1xuICAgICMgIFVzYWdlOlxuICAgICMgICAgIG15T2JqZWN0ID0gWWFtbC5wYXJzZSgnc29tZTogeWFtbCcpO1xuICAgICMgICAgIGNvbnNvbGUubG9nKG15T2JqZWN0KTtcbiAgICAjXG4gICAgIyBAcGFyYW0gW1N0cmluZ10gICBpbnB1dCAgICAgICAgICAgICAgICAgICBBIHN0cmluZyBjb250YWluaW5nIFlBTUxcbiAgICAjIEBwYXJhbSBbQm9vbGVhbl0gIGV4Y2VwdGlvbk9uSW52YWxpZFR5cGUgIHRydWUgaWYgYW4gZXhjZXB0aW9uIG11c3QgYmUgdGhyb3duIG9uIGludmFsaWQgdHlwZXMsIGZhbHNlIG90aGVyd2lzZVxuICAgICMgQHBhcmFtIFtGdW5jdGlvbl0gb2JqZWN0RGVjb2RlciAgICAgICAgICAgQSBmdW5jdGlvbiB0byBkZXNlcmlhbGl6ZSBjdXN0b20gb2JqZWN0cywgbnVsbCBvdGhlcndpc2VcbiAgICAjXG4gICAgIyBAcmV0dXJuIFtPYmplY3RdICBUaGUgWUFNTCBjb252ZXJ0ZWQgdG8gYSBKYXZhU2NyaXB0IG9iamVjdFxuICAgICNcbiAgICAjIEB0aHJvdyBbUGFyc2VFeGNlcHRpb25dIElmIHRoZSBZQU1MIGlzIG5vdCB2YWxpZFxuICAgICNcbiAgICBAcGFyc2U6IChpbnB1dCwgZXhjZXB0aW9uT25JbnZhbGlkVHlwZSA9IGZhbHNlLCBvYmplY3REZWNvZGVyID0gbnVsbCkgLT5cbiAgICAgICAgcmV0dXJuIG5ldyBQYXJzZXIoKS5wYXJzZShpbnB1dCwgZXhjZXB0aW9uT25JbnZhbGlkVHlwZSwgb2JqZWN0RGVjb2RlcilcblxuXG4gICAgIyBQYXJzZXMgWUFNTCBmcm9tIGZpbGUgcGF0aCBpbnRvIGEgSmF2YVNjcmlwdCBvYmplY3QuXG4gICAgI1xuICAgICMgVGhlIHBhcnNlRmlsZSBtZXRob2QsIHdoZW4gc3VwcGxpZWQgd2l0aCBhIFlBTUwgZmlsZSxcbiAgICAjIHdpbGwgZG8gaXRzIGJlc3QgdG8gY29udmVydCBZQU1MIGluIGEgZmlsZSBpbnRvIGEgSmF2YVNjcmlwdCBvYmplY3QuXG4gICAgI1xuICAgICMgIFVzYWdlOlxuICAgICMgICAgIG15T2JqZWN0ID0gWWFtbC5wYXJzZUZpbGUoJ2NvbmZpZy55bWwnKTtcbiAgICAjICAgICBjb25zb2xlLmxvZyhteU9iamVjdCk7XG4gICAgI1xuICAgICMgQHBhcmFtIFtTdHJpbmddICAgcGF0aCAgICAgICAgICAgICAgICAgICAgQSBmaWxlIHBhdGggcG9pbnRpbmcgdG8gYSB2YWxpZCBZQU1MIGZpbGVcbiAgICAjIEBwYXJhbSBbQm9vbGVhbl0gIGV4Y2VwdGlvbk9uSW52YWxpZFR5cGUgIHRydWUgaWYgYW4gZXhjZXB0aW9uIG11c3QgYmUgdGhyb3duIG9uIGludmFsaWQgdHlwZXMsIGZhbHNlIG90aGVyd2lzZVxuICAgICMgQHBhcmFtIFtGdW5jdGlvbl0gb2JqZWN0RGVjb2RlciAgICAgICAgICAgQSBmdW5jdGlvbiB0byBkZXNlcmlhbGl6ZSBjdXN0b20gb2JqZWN0cywgbnVsbCBvdGhlcndpc2VcbiAgICAjXG4gICAgIyBAcmV0dXJuIFtPYmplY3RdICBUaGUgWUFNTCBjb252ZXJ0ZWQgdG8gYSBKYXZhU2NyaXB0IG9iamVjdCBvciBudWxsIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QuXG4gICAgI1xuICAgICMgQHRocm93IFtQYXJzZUV4Y2VwdGlvbl0gSWYgdGhlIFlBTUwgaXMgbm90IHZhbGlkXG4gICAgI1xuICAgIEBwYXJzZUZpbGU6IChwYXRoLCBjYWxsYmFjayA9IG51bGwsIGV4Y2VwdGlvbk9uSW52YWxpZFR5cGUgPSBmYWxzZSwgb2JqZWN0RGVjb2RlciA9IG51bGwpIC0+XG4gICAgICAgIGlmIGNhbGxiYWNrP1xuICAgICAgICAgICAgIyBBc3luY1xuICAgICAgICAgICAgVXRpbHMuZ2V0U3RyaW5nRnJvbUZpbGUgcGF0aCwgKGlucHV0KSA9PlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IG51bGxcbiAgICAgICAgICAgICAgICBpZiBpbnB1dD9cbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gQHBhcnNlIGlucHV0LCBleGNlcHRpb25PbkludmFsaWRUeXBlLCBvYmplY3REZWNvZGVyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgcmVzdWx0XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgICMgU3luY1xuICAgICAgICAgICAgaW5wdXQgPSBVdGlscy5nZXRTdHJpbmdGcm9tRmlsZSBwYXRoXG4gICAgICAgICAgICBpZiBpbnB1dD9cbiAgICAgICAgICAgICAgICByZXR1cm4gQHBhcnNlIGlucHV0LCBleGNlcHRpb25PbkludmFsaWRUeXBlLCBvYmplY3REZWNvZGVyXG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuXG5cbiAgICAjIER1bXBzIGEgSmF2YVNjcmlwdCBvYmplY3QgdG8gYSBZQU1MIHN0cmluZy5cbiAgICAjXG4gICAgIyBUaGUgZHVtcCBtZXRob2QsIHdoZW4gc3VwcGxpZWQgd2l0aCBhbiBvYmplY3QsIHdpbGwgZG8gaXRzIGJlc3RcbiAgICAjIHRvIGNvbnZlcnQgdGhlIG9iamVjdCBpbnRvIGZyaWVuZGx5IFlBTUwuXG4gICAgI1xuICAgICMgQHBhcmFtIFtPYmplY3RdICAgaW5wdXQgICAgICAgICAgICAgICAgICAgSmF2YVNjcmlwdCBvYmplY3RcbiAgICAjIEBwYXJhbSBbSW50ZWdlcl0gIGlubGluZSAgICAgICAgICAgICAgICAgIFRoZSBsZXZlbCB3aGVyZSB5b3Ugc3dpdGNoIHRvIGlubGluZSBZQU1MXG4gICAgIyBAcGFyYW0gW0ludGVnZXJdICBpbmRlbnQgICAgICAgICAgICAgICAgICBUaGUgYW1vdW50IG9mIHNwYWNlcyB0byB1c2UgZm9yIGluZGVudGF0aW9uIG9mIG5lc3RlZCBub2Rlcy5cbiAgICAjIEBwYXJhbSBbQm9vbGVhbl0gIGV4Y2VwdGlvbk9uSW52YWxpZFR5cGUgIHRydWUgaWYgYW4gZXhjZXB0aW9uIG11c3QgYmUgdGhyb3duIG9uIGludmFsaWQgdHlwZXMgKGEgSmF2YVNjcmlwdCByZXNvdXJjZSBvciBvYmplY3QpLCBmYWxzZSBvdGhlcndpc2VcbiAgICAjIEBwYXJhbSBbRnVuY3Rpb25dIG9iamVjdEVuY29kZXIgICAgICAgICAgIEEgZnVuY3Rpb24gdG8gc2VyaWFsaXplIGN1c3RvbSBvYmplY3RzLCBudWxsIG90aGVyd2lzZVxuICAgICNcbiAgICAjIEByZXR1cm4gW1N0cmluZ10gIEEgWUFNTCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBvcmlnaW5hbCBKYXZhU2NyaXB0IG9iamVjdFxuICAgICNcbiAgICBAZHVtcDogKGlucHV0LCBpbmxpbmUgPSAyLCBpbmRlbnQgPSA0LCBleGNlcHRpb25PbkludmFsaWRUeXBlID0gZmFsc2UsIG9iamVjdEVuY29kZXIgPSBudWxsKSAtPlxuICAgICAgICB5YW1sID0gbmV3IER1bXBlcigpXG4gICAgICAgIHlhbWwuaW5kZW50YXRpb24gPSBpbmRlbnRcblxuICAgICAgICByZXR1cm4geWFtbC5kdW1wKGlucHV0LCBpbmxpbmUsIDAsIGV4Y2VwdGlvbk9uSW52YWxpZFR5cGUsIG9iamVjdEVuY29kZXIpXG5cblxuICAgICMgQWxpYXMgb2YgZHVtcCgpIG1ldGhvZCBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLlxuICAgICNcbiAgICBAc3RyaW5naWZ5OiAoaW5wdXQsIGlubGluZSwgaW5kZW50LCBleGNlcHRpb25PbkludmFsaWRUeXBlLCBvYmplY3RFbmNvZGVyKSAtPlxuICAgICAgICByZXR1cm4gQGR1bXAgaW5wdXQsIGlubGluZSwgaW5kZW50LCBleGNlcHRpb25PbkludmFsaWRUeXBlLCBvYmplY3RFbmNvZGVyXG5cblxuICAgICMgQWxpYXMgb2YgcGFyc2VGaWxlKCkgbWV0aG9kIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMuXG4gICAgI1xuICAgIEBsb2FkOiAocGF0aCwgY2FsbGJhY2ssIGV4Y2VwdGlvbk9uSW52YWxpZFR5cGUsIG9iamVjdERlY29kZXIpIC0+XG4gICAgICAgIHJldHVybiBAcGFyc2VGaWxlIHBhdGgsIGNhbGxiYWNrLCBleGNlcHRpb25PbkludmFsaWRUeXBlLCBvYmplY3REZWNvZGVyXG5cblxuIyBFeHBvc2UgWUFNTCBuYW1lc3BhY2UgdG8gYnJvd3Nlclxud2luZG93Py5ZQU1MID0gWWFtbFxuXG4jIE5vdCBpbiB0aGUgYnJvd3Nlcj9cbnVubGVzcyB3aW5kb3c/XG4gICAgQFlBTUwgPSBZYW1sXG5cbm1vZHVsZS5leHBvcnRzID0gWWFtbFxuIl19 diff --git a/node_modules/yamljs/dist/yaml.js b/node_modules/yamljs/dist/yaml.js new file mode 100644 index 00000000..23d19942 --- /dev/null +++ b/node_modules/yamljs/dist/yaml.js @@ -0,0 +1,1893 @@ +(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o ref; i = 0 <= ref ? ++j : --j) { + mapping[Escaper.LIST_ESCAPEES[i]] = Escaper.LIST_ESCAPED[i]; + } + return mapping; + })(); + + Escaper.PATTERN_CHARACTERS_TO_ESCAPE = new Pattern('[\\x00-\\x1f]|\xc2\x85|\xc2\xa0|\xe2\x80\xa8|\xe2\x80\xa9'); + + Escaper.PATTERN_MAPPING_ESCAPEES = new Pattern(Escaper.LIST_ESCAPEES.join('|').split('\\').join('\\\\')); + + Escaper.PATTERN_SINGLE_QUOTING = new Pattern('[\\s\'":{}[\\],&*#?]|^[-?|<>=!%@`]'); + + Escaper.requiresDoubleQuoting = function(value) { + return this.PATTERN_CHARACTERS_TO_ESCAPE.test(value); + }; + + Escaper.escapeWithDoubleQuotes = function(value) { + var result; + result = this.PATTERN_MAPPING_ESCAPEES.replace(value, (function(_this) { + return function(str) { + return _this.MAPPING_ESCAPEES_TO_ESCAPED[str]; + }; + })(this)); + return '"' + result + '"'; + }; + + Escaper.requiresSingleQuoting = function(value) { + return this.PATTERN_SINGLE_QUOTING.test(value); + }; + + Escaper.escapeWithSingleQuotes = function(value) { + return "'" + value.replace(/'/g, "''") + "'"; + }; + + return Escaper; + +})(); + +module.exports = Escaper; + + +},{"./Pattern":8}],3:[function(require,module,exports){ +var DumpException, + extend = 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; }, + hasProp = {}.hasOwnProperty; + +DumpException = (function(superClass) { + extend(DumpException, superClass); + + function DumpException(message, parsedLine, snippet) { + this.message = message; + this.parsedLine = parsedLine; + this.snippet = snippet; + } + + DumpException.prototype.toString = function() { + if ((this.parsedLine != null) && (this.snippet != null)) { + return ' ' + this.message + ' (line ' + this.parsedLine + ': \'' + this.snippet + '\')'; + } else { + return ' ' + this.message; + } + }; + + return DumpException; + +})(Error); + +module.exports = DumpException; + + +},{}],4:[function(require,module,exports){ +var ParseException, + extend = 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; }, + hasProp = {}.hasOwnProperty; + +ParseException = (function(superClass) { + extend(ParseException, superClass); + + function ParseException(message, parsedLine, snippet) { + this.message = message; + this.parsedLine = parsedLine; + this.snippet = snippet; + } + + ParseException.prototype.toString = function() { + if ((this.parsedLine != null) && (this.snippet != null)) { + return ' ' + this.message + ' (line ' + this.parsedLine + ': \'' + this.snippet + '\')'; + } else { + return ' ' + this.message; + } + }; + + return ParseException; + +})(Error); + +module.exports = ParseException; + + +},{}],5:[function(require,module,exports){ +var ParseMore, + extend = 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; }, + hasProp = {}.hasOwnProperty; + +ParseMore = (function(superClass) { + extend(ParseMore, superClass); + + function ParseMore(message, parsedLine, snippet) { + this.message = message; + this.parsedLine = parsedLine; + this.snippet = snippet; + } + + ParseMore.prototype.toString = function() { + if ((this.parsedLine != null) && (this.snippet != null)) { + return ' ' + this.message + ' (line ' + this.parsedLine + ': \'' + this.snippet + '\')'; + } else { + return ' ' + this.message; + } + }; + + return ParseMore; + +})(Error); + +module.exports = ParseMore; + + +},{}],6:[function(require,module,exports){ +var DumpException, Escaper, Inline, ParseException, ParseMore, Pattern, Unescaper, Utils, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + +Pattern = require('./Pattern'); + +Unescaper = require('./Unescaper'); + +Escaper = require('./Escaper'); + +Utils = require('./Utils'); + +ParseException = require('./Exception/ParseException'); + +ParseMore = require('./Exception/ParseMore'); + +DumpException = require('./Exception/DumpException'); + +Inline = (function() { + function Inline() {} + + Inline.REGEX_QUOTED_STRING = '(?:"(?:[^"\\\\]*(?:\\\\.[^"\\\\]*)*)"|\'(?:[^\']*(?:\'\'[^\']*)*)\')'; + + Inline.PATTERN_TRAILING_COMMENTS = new Pattern('^\\s*#.*$'); + + Inline.PATTERN_QUOTED_SCALAR = new Pattern('^' + Inline.REGEX_QUOTED_STRING); + + Inline.PATTERN_THOUSAND_NUMERIC_SCALAR = new Pattern('^(-|\\+)?[0-9,]+(\\.[0-9]+)?$'); + + Inline.PATTERN_SCALAR_BY_DELIMITERS = {}; + + Inline.settings = {}; + + Inline.configure = function(exceptionOnInvalidType, objectDecoder) { + if (exceptionOnInvalidType == null) { + exceptionOnInvalidType = null; + } + if (objectDecoder == null) { + objectDecoder = null; + } + this.settings.exceptionOnInvalidType = exceptionOnInvalidType; + this.settings.objectDecoder = objectDecoder; + }; + + Inline.parse = function(value, exceptionOnInvalidType, objectDecoder) { + var context, result; + if (exceptionOnInvalidType == null) { + exceptionOnInvalidType = false; + } + if (objectDecoder == null) { + objectDecoder = null; + } + this.settings.exceptionOnInvalidType = exceptionOnInvalidType; + this.settings.objectDecoder = objectDecoder; + if (value == null) { + return ''; + } + value = Utils.trim(value); + if (0 === value.length) { + return ''; + } + context = { + exceptionOnInvalidType: exceptionOnInvalidType, + objectDecoder: objectDecoder, + i: 0 + }; + switch (value.charAt(0)) { + case '[': + result = this.parseSequence(value, context); + ++context.i; + break; + case '{': + result = this.parseMapping(value, context); + ++context.i; + break; + default: + result = this.parseScalar(value, null, ['"', "'"], context); + } + if (this.PATTERN_TRAILING_COMMENTS.replace(value.slice(context.i), '') !== '') { + throw new ParseException('Unexpected characters near "' + value.slice(context.i) + '".'); + } + return result; + }; + + Inline.dump = function(value, exceptionOnInvalidType, objectEncoder) { + var ref, result, type; + if (exceptionOnInvalidType == null) { + exceptionOnInvalidType = false; + } + if (objectEncoder == null) { + objectEncoder = null; + } + if (value == null) { + return 'null'; + } + type = typeof value; + if (type === 'object') { + if (value instanceof Date) { + return value.toISOString(); + } else if (objectEncoder != null) { + result = objectEncoder(value); + if (typeof result === 'string' || (result != null)) { + return result; + } + } + return this.dumpObject(value); + } + if (type === 'boolean') { + return (value ? 'true' : 'false'); + } + if (Utils.isDigits(value)) { + return (type === 'string' ? "'" + value + "'" : String(parseInt(value))); + } + if (Utils.isNumeric(value)) { + return (type === 'string' ? "'" + value + "'" : String(parseFloat(value))); + } + if (type === 'number') { + return (value === Infinity ? '.Inf' : (value === -Infinity ? '-.Inf' : (isNaN(value) ? '.NaN' : value))); + } + if (Escaper.requiresDoubleQuoting(value)) { + return Escaper.escapeWithDoubleQuotes(value); + } + if (Escaper.requiresSingleQuoting(value)) { + return Escaper.escapeWithSingleQuotes(value); + } + if ('' === value) { + return '""'; + } + if (Utils.PATTERN_DATE.test(value)) { + return "'" + value + "'"; + } + if ((ref = value.toLowerCase()) === 'null' || ref === '~' || ref === 'true' || ref === 'false') { + return "'" + value + "'"; + } + return value; + }; + + Inline.dumpObject = function(value, exceptionOnInvalidType, objectSupport) { + var j, key, len1, output, val; + if (objectSupport == null) { + objectSupport = null; + } + if (value instanceof Array) { + output = []; + for (j = 0, len1 = value.length; j < len1; j++) { + val = value[j]; + output.push(this.dump(val)); + } + return '[' + output.join(', ') + ']'; + } else { + output = []; + for (key in value) { + val = value[key]; + output.push(this.dump(key) + ': ' + this.dump(val)); + } + return '{' + output.join(', ') + '}'; + } + }; + + Inline.parseScalar = function(scalar, delimiters, stringDelimiters, context, evaluate) { + var i, joinedDelimiters, match, output, pattern, ref, ref1, strpos, tmp; + if (delimiters == null) { + delimiters = null; + } + if (stringDelimiters == null) { + stringDelimiters = ['"', "'"]; + } + if (context == null) { + context = null; + } + if (evaluate == null) { + evaluate = true; + } + if (context == null) { + context = { + exceptionOnInvalidType: this.settings.exceptionOnInvalidType, + objectDecoder: this.settings.objectDecoder, + i: 0 + }; + } + i = context.i; + if (ref = scalar.charAt(i), indexOf.call(stringDelimiters, ref) >= 0) { + output = this.parseQuotedScalar(scalar, context); + i = context.i; + if (delimiters != null) { + tmp = Utils.ltrim(scalar.slice(i), ' '); + if (!(ref1 = tmp.charAt(0), indexOf.call(delimiters, ref1) >= 0)) { + throw new ParseException('Unexpected characters (' + scalar.slice(i) + ').'); + } + } + } else { + if (!delimiters) { + output = scalar.slice(i); + i += output.length; + strpos = output.indexOf(' #'); + if (strpos !== -1) { + output = Utils.rtrim(output.slice(0, strpos)); + } + } else { + joinedDelimiters = delimiters.join('|'); + pattern = this.PATTERN_SCALAR_BY_DELIMITERS[joinedDelimiters]; + if (pattern == null) { + pattern = new Pattern('^(.+?)(' + joinedDelimiters + ')'); + this.PATTERN_SCALAR_BY_DELIMITERS[joinedDelimiters] = pattern; + } + if (match = pattern.exec(scalar.slice(i))) { + output = match[1]; + i += output.length; + } else { + throw new ParseException('Malformed inline YAML string (' + scalar + ').'); + } + } + if (evaluate) { + output = this.evaluateScalar(output, context); + } + } + context.i = i; + return output; + }; + + Inline.parseQuotedScalar = function(scalar, context) { + var i, match, output; + i = context.i; + if (!(match = this.PATTERN_QUOTED_SCALAR.exec(scalar.slice(i)))) { + throw new ParseMore('Malformed inline YAML string (' + scalar.slice(i) + ').'); + } + output = match[0].substr(1, match[0].length - 2); + if ('"' === scalar.charAt(i)) { + output = Unescaper.unescapeDoubleQuotedString(output); + } else { + output = Unescaper.unescapeSingleQuotedString(output); + } + i += match[0].length; + context.i = i; + return output; + }; + + Inline.parseSequence = function(sequence, context) { + var e, error, i, isQuoted, len, output, ref, value; + output = []; + len = sequence.length; + i = context.i; + i += 1; + while (i < len) { + context.i = i; + switch (sequence.charAt(i)) { + case '[': + output.push(this.parseSequence(sequence, context)); + i = context.i; + break; + case '{': + output.push(this.parseMapping(sequence, context)); + i = context.i; + break; + case ']': + return output; + case ',': + case ' ': + case "\n": + break; + default: + isQuoted = ((ref = sequence.charAt(i)) === '"' || ref === "'"); + value = this.parseScalar(sequence, [',', ']'], ['"', "'"], context); + i = context.i; + if (!isQuoted && typeof value === 'string' && (value.indexOf(': ') !== -1 || value.indexOf(":\n") !== -1)) { + try { + value = this.parseMapping('{' + value + '}'); + } catch (error) { + e = error; + } + } + output.push(value); + --i; + } + ++i; + } + throw new ParseMore('Malformed inline YAML string ' + sequence); + }; + + Inline.parseMapping = function(mapping, context) { + var done, i, key, len, output, shouldContinueWhileLoop, value; + output = {}; + len = mapping.length; + i = context.i; + i += 1; + shouldContinueWhileLoop = false; + while (i < len) { + context.i = i; + switch (mapping.charAt(i)) { + case ' ': + case ',': + case "\n": + ++i; + context.i = i; + shouldContinueWhileLoop = true; + break; + case '}': + return output; + } + if (shouldContinueWhileLoop) { + shouldContinueWhileLoop = false; + continue; + } + key = this.parseScalar(mapping, [':', ' ', "\n"], ['"', "'"], context, false); + i = context.i; + done = false; + while (i < len) { + context.i = i; + switch (mapping.charAt(i)) { + case '[': + value = this.parseSequence(mapping, context); + i = context.i; + if (output[key] === void 0) { + output[key] = value; + } + done = true; + break; + case '{': + value = this.parseMapping(mapping, context); + i = context.i; + if (output[key] === void 0) { + output[key] = value; + } + done = true; + break; + case ':': + case ' ': + case "\n": + break; + default: + value = this.parseScalar(mapping, [',', '}'], ['"', "'"], context); + i = context.i; + if (output[key] === void 0) { + output[key] = value; + } + done = true; + --i; + } + ++i; + if (done) { + break; + } + } + } + throw new ParseMore('Malformed inline YAML string ' + mapping); + }; + + Inline.evaluateScalar = function(scalar, context) { + var cast, date, exceptionOnInvalidType, firstChar, firstSpace, firstWord, objectDecoder, raw, scalarLower, subValue, trimmedScalar; + scalar = Utils.trim(scalar); + scalarLower = scalar.toLowerCase(); + switch (scalarLower) { + case 'null': + case '': + case '~': + return null; + case 'true': + return true; + case 'false': + return false; + case '.inf': + return Infinity; + case '.nan': + return NaN; + case '-.inf': + return Infinity; + default: + firstChar = scalarLower.charAt(0); + switch (firstChar) { + case '!': + firstSpace = scalar.indexOf(' '); + if (firstSpace === -1) { + firstWord = scalarLower; + } else { + firstWord = scalarLower.slice(0, firstSpace); + } + switch (firstWord) { + case '!': + if (firstSpace !== -1) { + return parseInt(this.parseScalar(scalar.slice(2))); + } + return null; + case '!str': + return Utils.ltrim(scalar.slice(4)); + case '!!str': + return Utils.ltrim(scalar.slice(5)); + case '!!int': + return parseInt(this.parseScalar(scalar.slice(5))); + case '!!bool': + return Utils.parseBoolean(this.parseScalar(scalar.slice(6)), false); + case '!!float': + return parseFloat(this.parseScalar(scalar.slice(7))); + case '!!timestamp': + return Utils.stringToDate(Utils.ltrim(scalar.slice(11))); + default: + if (context == null) { + context = { + exceptionOnInvalidType: this.settings.exceptionOnInvalidType, + objectDecoder: this.settings.objectDecoder, + i: 0 + }; + } + objectDecoder = context.objectDecoder, exceptionOnInvalidType = context.exceptionOnInvalidType; + if (objectDecoder) { + trimmedScalar = Utils.rtrim(scalar); + firstSpace = trimmedScalar.indexOf(' '); + if (firstSpace === -1) { + return objectDecoder(trimmedScalar, null); + } else { + subValue = Utils.ltrim(trimmedScalar.slice(firstSpace + 1)); + if (!(subValue.length > 0)) { + subValue = null; + } + return objectDecoder(trimmedScalar.slice(0, firstSpace), subValue); + } + } + if (exceptionOnInvalidType) { + throw new ParseException('Custom object support when parsing a YAML file has been disabled.'); + } + return null; + } + break; + case '0': + if ('0x' === scalar.slice(0, 2)) { + return Utils.hexDec(scalar); + } else if (Utils.isDigits(scalar)) { + return Utils.octDec(scalar); + } else if (Utils.isNumeric(scalar)) { + return parseFloat(scalar); + } else { + return scalar; + } + break; + case '+': + if (Utils.isDigits(scalar)) { + raw = scalar; + cast = parseInt(raw); + if (raw === String(cast)) { + return cast; + } else { + return raw; + } + } else if (Utils.isNumeric(scalar)) { + return parseFloat(scalar); + } else if (this.PATTERN_THOUSAND_NUMERIC_SCALAR.test(scalar)) { + return parseFloat(scalar.replace(',', '')); + } + return scalar; + case '-': + if (Utils.isDigits(scalar.slice(1))) { + if ('0' === scalar.charAt(1)) { + return -Utils.octDec(scalar.slice(1)); + } else { + raw = scalar.slice(1); + cast = parseInt(raw); + if (raw === String(cast)) { + return -cast; + } else { + return -raw; + } + } + } else if (Utils.isNumeric(scalar)) { + return parseFloat(scalar); + } else if (this.PATTERN_THOUSAND_NUMERIC_SCALAR.test(scalar)) { + return parseFloat(scalar.replace(',', '')); + } + return scalar; + default: + if (date = Utils.stringToDate(scalar)) { + return date; + } else if (Utils.isNumeric(scalar)) { + return parseFloat(scalar); + } else if (this.PATTERN_THOUSAND_NUMERIC_SCALAR.test(scalar)) { + return parseFloat(scalar.replace(',', '')); + } + return scalar; + } + } + }; + + return Inline; + +})(); + +module.exports = Inline; + + +},{"./Escaper":2,"./Exception/DumpException":3,"./Exception/ParseException":4,"./Exception/ParseMore":5,"./Pattern":8,"./Unescaper":9,"./Utils":10}],7:[function(require,module,exports){ +var Inline, ParseException, ParseMore, Parser, Pattern, Utils; + +Inline = require('./Inline'); + +Pattern = require('./Pattern'); + +Utils = require('./Utils'); + +ParseException = require('./Exception/ParseException'); + +ParseMore = require('./Exception/ParseMore'); + +Parser = (function() { + Parser.prototype.PATTERN_FOLDED_SCALAR_ALL = new Pattern('^(?:(?![^\\|>]*)\\s+)?(?\\||>)(?\\+|\\-|\\d+|\\+\\d+|\\-\\d+|\\d+\\+|\\d+\\-)?(? +#.*)?$'); + + Parser.prototype.PATTERN_FOLDED_SCALAR_END = new Pattern('(?\\||>)(?\\+|\\-|\\d+|\\+\\d+|\\-\\d+|\\d+\\+|\\d+\\-)?(? +#.*)?$'); + + Parser.prototype.PATTERN_SEQUENCE_ITEM = new Pattern('^\\-((?\\s+)(?.+?))?\\s*$'); + + Parser.prototype.PATTERN_ANCHOR_VALUE = new Pattern('^&(?[^ ]+) *(?.*)'); + + Parser.prototype.PATTERN_COMPACT_NOTATION = new Pattern('^(?' + Inline.REGEX_QUOTED_STRING + '|[^ \'"\\{\\[].*?) *\\:(\\s+(?.+?))?\\s*$'); + + Parser.prototype.PATTERN_MAPPING_ITEM = new Pattern('^(?' + Inline.REGEX_QUOTED_STRING + '|[^ \'"\\[\\{].*?) *\\:(\\s+(?.+?))?\\s*$'); + + Parser.prototype.PATTERN_DECIMAL = new Pattern('\\d+'); + + Parser.prototype.PATTERN_INDENT_SPACES = new Pattern('^ +'); + + Parser.prototype.PATTERN_TRAILING_LINES = new Pattern('(\n*)$'); + + Parser.prototype.PATTERN_YAML_HEADER = new Pattern('^\\%YAML[: ][\\d\\.]+.*\n', 'm'); + + Parser.prototype.PATTERN_LEADING_COMMENTS = new Pattern('^(\\#.*?\n)+', 'm'); + + Parser.prototype.PATTERN_DOCUMENT_MARKER_START = new Pattern('^\\-\\-\\-.*?\n', 'm'); + + Parser.prototype.PATTERN_DOCUMENT_MARKER_END = new Pattern('^\\.\\.\\.\\s*$', 'm'); + + Parser.prototype.PATTERN_FOLDED_SCALAR_BY_INDENTATION = {}; + + Parser.prototype.CONTEXT_NONE = 0; + + Parser.prototype.CONTEXT_SEQUENCE = 1; + + Parser.prototype.CONTEXT_MAPPING = 2; + + function Parser(offset) { + this.offset = offset != null ? offset : 0; + this.lines = []; + this.currentLineNb = -1; + this.currentLine = ''; + this.refs = {}; + } + + Parser.prototype.parse = function(value, exceptionOnInvalidType, objectDecoder) { + var alias, allowOverwrite, block, c, context, data, e, error, error1, error2, first, i, indent, isRef, j, k, key, l, lastKey, len, len1, len2, len3, lineCount, m, matches, mergeNode, n, name, parsed, parsedItem, parser, ref, ref1, ref2, refName, refValue, val, values; + if (exceptionOnInvalidType == null) { + exceptionOnInvalidType = false; + } + if (objectDecoder == null) { + objectDecoder = null; + } + this.currentLineNb = -1; + this.currentLine = ''; + this.lines = this.cleanup(value).split("\n"); + data = null; + context = this.CONTEXT_NONE; + allowOverwrite = false; + while (this.moveToNextLine()) { + if (this.isCurrentLineEmpty()) { + continue; + } + if ("\t" === this.currentLine[0]) { + throw new ParseException('A YAML file cannot contain tabs as indentation.', this.getRealCurrentLineNb() + 1, this.currentLine); + } + isRef = mergeNode = false; + if (values = this.PATTERN_SEQUENCE_ITEM.exec(this.currentLine)) { + if (this.CONTEXT_MAPPING === context) { + throw new ParseException('You cannot define a sequence item when in a mapping'); + } + context = this.CONTEXT_SEQUENCE; + if (data == null) { + data = []; + } + if ((values.value != null) && (matches = this.PATTERN_ANCHOR_VALUE.exec(values.value))) { + isRef = matches.ref; + values.value = matches.value; + } + if (!(values.value != null) || '' === Utils.trim(values.value, ' ') || Utils.ltrim(values.value, ' ').indexOf('#') === 0) { + if (this.currentLineNb < this.lines.length - 1 && !this.isNextLineUnIndentedCollection()) { + c = this.getRealCurrentLineNb() + 1; + parser = new Parser(c); + parser.refs = this.refs; + data.push(parser.parse(this.getNextEmbedBlock(null, true), exceptionOnInvalidType, objectDecoder)); + } else { + data.push(null); + } + } else { + if (((ref = values.leadspaces) != null ? ref.length : void 0) && (matches = this.PATTERN_COMPACT_NOTATION.exec(values.value))) { + c = this.getRealCurrentLineNb(); + parser = new Parser(c); + parser.refs = this.refs; + block = values.value; + indent = this.getCurrentLineIndentation(); + if (this.isNextLineIndented(false)) { + block += "\n" + this.getNextEmbedBlock(indent + values.leadspaces.length + 1, true); + } + data.push(parser.parse(block, exceptionOnInvalidType, objectDecoder)); + } else { + data.push(this.parseValue(values.value, exceptionOnInvalidType, objectDecoder)); + } + } + } else if ((values = this.PATTERN_MAPPING_ITEM.exec(this.currentLine)) && values.key.indexOf(' #') === -1) { + if (this.CONTEXT_SEQUENCE === context) { + throw new ParseException('You cannot define a mapping item when in a sequence'); + } + context = this.CONTEXT_MAPPING; + if (data == null) { + data = {}; + } + Inline.configure(exceptionOnInvalidType, objectDecoder); + try { + key = Inline.parseScalar(values.key); + } catch (error) { + e = error; + e.parsedLine = this.getRealCurrentLineNb() + 1; + e.snippet = this.currentLine; + throw e; + } + if ('<<' === key) { + mergeNode = true; + allowOverwrite = true; + if (((ref1 = values.value) != null ? ref1.indexOf('*') : void 0) === 0) { + refName = values.value.slice(1); + if (this.refs[refName] == null) { + throw new ParseException('Reference "' + refName + '" does not exist.', this.getRealCurrentLineNb() + 1, this.currentLine); + } + refValue = this.refs[refName]; + if (typeof refValue !== 'object') { + throw new ParseException('YAML merge keys used with a scalar value instead of an object.', this.getRealCurrentLineNb() + 1, this.currentLine); + } + if (refValue instanceof Array) { + for (i = j = 0, len = refValue.length; j < len; i = ++j) { + value = refValue[i]; + if (data[name = String(i)] == null) { + data[name] = value; + } + } + } else { + for (key in refValue) { + value = refValue[key]; + if (data[key] == null) { + data[key] = value; + } + } + } + } else { + if ((values.value != null) && values.value !== '') { + value = values.value; + } else { + value = this.getNextEmbedBlock(); + } + c = this.getRealCurrentLineNb() + 1; + parser = new Parser(c); + parser.refs = this.refs; + parsed = parser.parse(value, exceptionOnInvalidType); + if (typeof parsed !== 'object') { + throw new ParseException('YAML merge keys used with a scalar value instead of an object.', this.getRealCurrentLineNb() + 1, this.currentLine); + } + if (parsed instanceof Array) { + for (l = 0, len1 = parsed.length; l < len1; l++) { + parsedItem = parsed[l]; + if (typeof parsedItem !== 'object') { + throw new ParseException('Merge items must be objects.', this.getRealCurrentLineNb() + 1, parsedItem); + } + if (parsedItem instanceof Array) { + for (i = m = 0, len2 = parsedItem.length; m < len2; i = ++m) { + value = parsedItem[i]; + k = String(i); + if (!data.hasOwnProperty(k)) { + data[k] = value; + } + } + } else { + for (key in parsedItem) { + value = parsedItem[key]; + if (!data.hasOwnProperty(key)) { + data[key] = value; + } + } + } + } + } else { + for (key in parsed) { + value = parsed[key]; + if (!data.hasOwnProperty(key)) { + data[key] = value; + } + } + } + } + } else if ((values.value != null) && (matches = this.PATTERN_ANCHOR_VALUE.exec(values.value))) { + isRef = matches.ref; + values.value = matches.value; + } + if (mergeNode) { + + } else if (!(values.value != null) || '' === Utils.trim(values.value, ' ') || Utils.ltrim(values.value, ' ').indexOf('#') === 0) { + if (!(this.isNextLineIndented()) && !(this.isNextLineUnIndentedCollection())) { + if (allowOverwrite || data[key] === void 0) { + data[key] = null; + } + } else { + c = this.getRealCurrentLineNb() + 1; + parser = new Parser(c); + parser.refs = this.refs; + val = parser.parse(this.getNextEmbedBlock(), exceptionOnInvalidType, objectDecoder); + if (allowOverwrite || data[key] === void 0) { + data[key] = val; + } + } + } else { + val = this.parseValue(values.value, exceptionOnInvalidType, objectDecoder); + if (allowOverwrite || data[key] === void 0) { + data[key] = val; + } + } + } else { + lineCount = this.lines.length; + if (1 === lineCount || (2 === lineCount && Utils.isEmpty(this.lines[1]))) { + try { + value = Inline.parse(this.lines[0], exceptionOnInvalidType, objectDecoder); + } catch (error1) { + e = error1; + e.parsedLine = this.getRealCurrentLineNb() + 1; + e.snippet = this.currentLine; + throw e; + } + if (typeof value === 'object') { + if (value instanceof Array) { + first = value[0]; + } else { + for (key in value) { + first = value[key]; + break; + } + } + if (typeof first === 'string' && first.indexOf('*') === 0) { + data = []; + for (n = 0, len3 = value.length; n < len3; n++) { + alias = value[n]; + data.push(this.refs[alias.slice(1)]); + } + value = data; + } + } + return value; + } else if ((ref2 = Utils.ltrim(value).charAt(0)) === '[' || ref2 === '{') { + try { + return Inline.parse(value, exceptionOnInvalidType, objectDecoder); + } catch (error2) { + e = error2; + e.parsedLine = this.getRealCurrentLineNb() + 1; + e.snippet = this.currentLine; + throw e; + } + } + throw new ParseException('Unable to parse.', this.getRealCurrentLineNb() + 1, this.currentLine); + } + if (isRef) { + if (data instanceof Array) { + this.refs[isRef] = data[data.length - 1]; + } else { + lastKey = null; + for (key in data) { + lastKey = key; + } + this.refs[isRef] = data[lastKey]; + } + } + } + if (Utils.isEmpty(data)) { + return null; + } else { + return data; + } + }; + + Parser.prototype.getRealCurrentLineNb = function() { + return this.currentLineNb + this.offset; + }; + + Parser.prototype.getCurrentLineIndentation = function() { + return this.currentLine.length - Utils.ltrim(this.currentLine, ' ').length; + }; + + Parser.prototype.getNextEmbedBlock = function(indentation, includeUnindentedCollection) { + var data, indent, isItUnindentedCollection, newIndent, removeComments, removeCommentsPattern, unindentedEmbedBlock; + if (indentation == null) { + indentation = null; + } + if (includeUnindentedCollection == null) { + includeUnindentedCollection = false; + } + this.moveToNextLine(); + if (indentation == null) { + newIndent = this.getCurrentLineIndentation(); + unindentedEmbedBlock = this.isStringUnIndentedCollectionItem(this.currentLine); + if (!(this.isCurrentLineEmpty()) && 0 === newIndent && !unindentedEmbedBlock) { + throw new ParseException('Indentation problem.', this.getRealCurrentLineNb() + 1, this.currentLine); + } + } else { + newIndent = indentation; + } + data = [this.currentLine.slice(newIndent)]; + if (!includeUnindentedCollection) { + isItUnindentedCollection = this.isStringUnIndentedCollectionItem(this.currentLine); + } + removeCommentsPattern = this.PATTERN_FOLDED_SCALAR_END; + removeComments = !removeCommentsPattern.test(this.currentLine); + while (this.moveToNextLine()) { + indent = this.getCurrentLineIndentation(); + if (indent === newIndent) { + removeComments = !removeCommentsPattern.test(this.currentLine); + } + if (removeComments && this.isCurrentLineComment()) { + continue; + } + if (this.isCurrentLineBlank()) { + data.push(this.currentLine.slice(newIndent)); + continue; + } + if (isItUnindentedCollection && !this.isStringUnIndentedCollectionItem(this.currentLine) && indent === newIndent) { + this.moveToPreviousLine(); + break; + } + if (indent >= newIndent) { + data.push(this.currentLine.slice(newIndent)); + } else if (Utils.ltrim(this.currentLine).charAt(0) === '#') { + + } else if (0 === indent) { + this.moveToPreviousLine(); + break; + } else { + throw new ParseException('Indentation problem.', this.getRealCurrentLineNb() + 1, this.currentLine); + } + } + return data.join("\n"); + }; + + Parser.prototype.moveToNextLine = function() { + if (this.currentLineNb >= this.lines.length - 1) { + return false; + } + this.currentLine = this.lines[++this.currentLineNb]; + return true; + }; + + Parser.prototype.moveToPreviousLine = function() { + this.currentLine = this.lines[--this.currentLineNb]; + }; + + Parser.prototype.parseValue = function(value, exceptionOnInvalidType, objectDecoder) { + var e, error, foldedIndent, matches, modifiers, pos, ref, ref1, val; + if (0 === value.indexOf('*')) { + pos = value.indexOf('#'); + if (pos !== -1) { + value = value.substr(1, pos - 2); + } else { + value = value.slice(1); + } + if (this.refs[value] === void 0) { + throw new ParseException('Reference "' + value + '" does not exist.', this.currentLine); + } + return this.refs[value]; + } + if (matches = this.PATTERN_FOLDED_SCALAR_ALL.exec(value)) { + modifiers = (ref = matches.modifiers) != null ? ref : ''; + foldedIndent = Math.abs(parseInt(modifiers)); + if (isNaN(foldedIndent)) { + foldedIndent = 0; + } + val = this.parseFoldedScalar(matches.separator, this.PATTERN_DECIMAL.replace(modifiers, ''), foldedIndent); + if (matches.type != null) { + Inline.configure(exceptionOnInvalidType, objectDecoder); + return Inline.parseScalar(matches.type + ' ' + val); + } else { + return val; + } + } + if ((ref1 = value.charAt(0)) === '[' || ref1 === '{' || ref1 === '"' || ref1 === "'") { + while (true) { + try { + return Inline.parse(value, exceptionOnInvalidType, objectDecoder); + } catch (error) { + e = error; + if (e instanceof ParseMore && this.moveToNextLine()) { + value += "\n" + Utils.trim(this.currentLine, ' '); + } else { + e.parsedLine = this.getRealCurrentLineNb() + 1; + e.snippet = this.currentLine; + throw e; + } + } + } + } else { + if (this.isNextLineIndented()) { + value += "\n" + this.getNextEmbedBlock(); + } + return Inline.parse(value, exceptionOnInvalidType, objectDecoder); + } + }; + + Parser.prototype.parseFoldedScalar = function(separator, indicator, indentation) { + var isCurrentLineBlank, j, len, line, matches, newText, notEOF, pattern, ref, text; + if (indicator == null) { + indicator = ''; + } + if (indentation == null) { + indentation = 0; + } + notEOF = this.moveToNextLine(); + if (!notEOF) { + return ''; + } + isCurrentLineBlank = this.isCurrentLineBlank(); + text = ''; + while (notEOF && isCurrentLineBlank) { + if (notEOF = this.moveToNextLine()) { + text += "\n"; + isCurrentLineBlank = this.isCurrentLineBlank(); + } + } + if (0 === indentation) { + if (matches = this.PATTERN_INDENT_SPACES.exec(this.currentLine)) { + indentation = matches[0].length; + } + } + if (indentation > 0) { + pattern = this.PATTERN_FOLDED_SCALAR_BY_INDENTATION[indentation]; + if (pattern == null) { + pattern = new Pattern('^ {' + indentation + '}(.*)$'); + Parser.prototype.PATTERN_FOLDED_SCALAR_BY_INDENTATION[indentation] = pattern; + } + while (notEOF && (isCurrentLineBlank || (matches = pattern.exec(this.currentLine)))) { + if (isCurrentLineBlank) { + text += this.currentLine.slice(indentation); + } else { + text += matches[1]; + } + if (notEOF = this.moveToNextLine()) { + text += "\n"; + isCurrentLineBlank = this.isCurrentLineBlank(); + } + } + } else if (notEOF) { + text += "\n"; + } + if (notEOF) { + this.moveToPreviousLine(); + } + if ('>' === separator) { + newText = ''; + ref = text.split("\n"); + for (j = 0, len = ref.length; j < len; j++) { + line = ref[j]; + if (line.length === 0 || line.charAt(0) === ' ') { + newText = Utils.rtrim(newText, ' ') + line + "\n"; + } else { + newText += line + ' '; + } + } + text = newText; + } + if ('+' !== indicator) { + text = Utils.rtrim(text); + } + if ('' === indicator) { + text = this.PATTERN_TRAILING_LINES.replace(text, "\n"); + } else if ('-' === indicator) { + text = this.PATTERN_TRAILING_LINES.replace(text, ''); + } + return text; + }; + + Parser.prototype.isNextLineIndented = function(ignoreComments) { + var EOF, currentIndentation, ret; + if (ignoreComments == null) { + ignoreComments = true; + } + currentIndentation = this.getCurrentLineIndentation(); + EOF = !this.moveToNextLine(); + if (ignoreComments) { + while (!EOF && this.isCurrentLineEmpty()) { + EOF = !this.moveToNextLine(); + } + } else { + while (!EOF && this.isCurrentLineBlank()) { + EOF = !this.moveToNextLine(); + } + } + if (EOF) { + return false; + } + ret = false; + if (this.getCurrentLineIndentation() > currentIndentation) { + ret = true; + } + this.moveToPreviousLine(); + return ret; + }; + + Parser.prototype.isCurrentLineEmpty = function() { + var trimmedLine; + trimmedLine = Utils.trim(this.currentLine, ' '); + return trimmedLine.length === 0 || trimmedLine.charAt(0) === '#'; + }; + + Parser.prototype.isCurrentLineBlank = function() { + return '' === Utils.trim(this.currentLine, ' '); + }; + + Parser.prototype.isCurrentLineComment = function() { + var ltrimmedLine; + ltrimmedLine = Utils.ltrim(this.currentLine, ' '); + return ltrimmedLine.charAt(0) === '#'; + }; + + Parser.prototype.cleanup = function(value) { + var count, i, indent, j, l, len, len1, line, lines, ref, ref1, ref2, smallestIndent, trimmedValue; + if (value.indexOf("\r") !== -1) { + value = value.split("\r\n").join("\n").split("\r").join("\n"); + } + count = 0; + ref = this.PATTERN_YAML_HEADER.replaceAll(value, ''), value = ref[0], count = ref[1]; + this.offset += count; + ref1 = this.PATTERN_LEADING_COMMENTS.replaceAll(value, '', 1), trimmedValue = ref1[0], count = ref1[1]; + if (count === 1) { + this.offset += Utils.subStrCount(value, "\n") - Utils.subStrCount(trimmedValue, "\n"); + value = trimmedValue; + } + ref2 = this.PATTERN_DOCUMENT_MARKER_START.replaceAll(value, '', 1), trimmedValue = ref2[0], count = ref2[1]; + if (count === 1) { + this.offset += Utils.subStrCount(value, "\n") - Utils.subStrCount(trimmedValue, "\n"); + value = trimmedValue; + value = this.PATTERN_DOCUMENT_MARKER_END.replace(value, ''); + } + lines = value.split("\n"); + smallestIndent = -1; + for (j = 0, len = lines.length; j < len; j++) { + line = lines[j]; + if (Utils.trim(line, ' ').length === 0) { + continue; + } + indent = line.length - Utils.ltrim(line).length; + if (smallestIndent === -1 || indent < smallestIndent) { + smallestIndent = indent; + } + } + if (smallestIndent > 0) { + for (i = l = 0, len1 = lines.length; l < len1; i = ++l) { + line = lines[i]; + lines[i] = line.slice(smallestIndent); + } + value = lines.join("\n"); + } + return value; + }; + + Parser.prototype.isNextLineUnIndentedCollection = function(currentIndentation) { + var notEOF, ret; + if (currentIndentation == null) { + currentIndentation = null; + } + if (currentIndentation == null) { + currentIndentation = this.getCurrentLineIndentation(); + } + notEOF = this.moveToNextLine(); + while (notEOF && this.isCurrentLineEmpty()) { + notEOF = this.moveToNextLine(); + } + if (false === notEOF) { + return false; + } + ret = false; + if (this.getCurrentLineIndentation() === currentIndentation && this.isStringUnIndentedCollectionItem(this.currentLine)) { + ret = true; + } + this.moveToPreviousLine(); + return ret; + }; + + Parser.prototype.isStringUnIndentedCollectionItem = function() { + return this.currentLine === '-' || this.currentLine.slice(0, 2) === '- '; + }; + + return Parser; + +})(); + +module.exports = Parser; + + +},{"./Exception/ParseException":4,"./Exception/ParseMore":5,"./Inline":6,"./Pattern":8,"./Utils":10}],8:[function(require,module,exports){ +var Pattern; + +Pattern = (function() { + Pattern.prototype.regex = null; + + Pattern.prototype.rawRegex = null; + + Pattern.prototype.cleanedRegex = null; + + Pattern.prototype.mapping = null; + + function Pattern(rawRegex, modifiers) { + var _char, capturingBracketNumber, cleanedRegex, i, len, mapping, name, part, subChar; + if (modifiers == null) { + modifiers = ''; + } + cleanedRegex = ''; + len = rawRegex.length; + mapping = null; + capturingBracketNumber = 0; + i = 0; + while (i < len) { + _char = rawRegex.charAt(i); + if (_char === '\\') { + cleanedRegex += rawRegex.slice(i, +(i + 1) + 1 || 9e9); + i++; + } else if (_char === '(') { + if (i < len - 2) { + part = rawRegex.slice(i, +(i + 2) + 1 || 9e9); + if (part === '(?:') { + i += 2; + cleanedRegex += part; + } else if (part === '(?<') { + capturingBracketNumber++; + i += 2; + name = ''; + while (i + 1 < len) { + subChar = rawRegex.charAt(i + 1); + if (subChar === '>') { + cleanedRegex += '('; + i++; + if (name.length > 0) { + if (mapping == null) { + mapping = {}; + } + mapping[name] = capturingBracketNumber; + } + break; + } else { + name += subChar; + } + i++; + } + } else { + cleanedRegex += _char; + capturingBracketNumber++; + } + } else { + cleanedRegex += _char; + } + } else { + cleanedRegex += _char; + } + i++; + } + this.rawRegex = rawRegex; + this.cleanedRegex = cleanedRegex; + this.regex = new RegExp(this.cleanedRegex, 'g' + modifiers.replace('g', '')); + this.mapping = mapping; + } + + Pattern.prototype.exec = function(str) { + var index, matches, name, ref; + this.regex.lastIndex = 0; + matches = this.regex.exec(str); + if (matches == null) { + return null; + } + if (this.mapping != null) { + ref = this.mapping; + for (name in ref) { + index = ref[name]; + matches[name] = matches[index]; + } + } + return matches; + }; + + Pattern.prototype.test = function(str) { + this.regex.lastIndex = 0; + return this.regex.test(str); + }; + + Pattern.prototype.replace = function(str, replacement) { + this.regex.lastIndex = 0; + return str.replace(this.regex, replacement); + }; + + Pattern.prototype.replaceAll = function(str, replacement, limit) { + var count; + if (limit == null) { + limit = 0; + } + this.regex.lastIndex = 0; + count = 0; + while (this.regex.test(str) && (limit === 0 || count < limit)) { + this.regex.lastIndex = 0; + str = str.replace(this.regex, replacement); + count++; + } + return [str, count]; + }; + + return Pattern; + +})(); + +module.exports = Pattern; + + +},{}],9:[function(require,module,exports){ +var Pattern, Unescaper, Utils; + +Utils = require('./Utils'); + +Pattern = require('./Pattern'); + +Unescaper = (function() { + function Unescaper() {} + + Unescaper.PATTERN_ESCAPED_CHARACTER = new Pattern('\\\\([0abt\tnvfre "\\/\\\\N_LP]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})'); + + Unescaper.unescapeSingleQuotedString = function(value) { + return value.replace(/\'\'/g, '\''); + }; + + Unescaper.unescapeDoubleQuotedString = function(value) { + if (this._unescapeCallback == null) { + this._unescapeCallback = (function(_this) { + return function(str) { + return _this.unescapeCharacter(str); + }; + })(this); + } + return this.PATTERN_ESCAPED_CHARACTER.replace(value, this._unescapeCallback); + }; + + Unescaper.unescapeCharacter = function(value) { + var ch; + ch = String.fromCharCode; + switch (value.charAt(1)) { + case '0': + return ch(0); + case 'a': + return ch(7); + case 'b': + return ch(8); + case 't': + return "\t"; + case "\t": + return "\t"; + case 'n': + return "\n"; + case 'v': + return ch(11); + case 'f': + return ch(12); + case 'r': + return ch(13); + case 'e': + return ch(27); + case ' ': + return ' '; + case '"': + return '"'; + case '/': + return '/'; + case '\\': + return '\\'; + case 'N': + return ch(0x0085); + case '_': + return ch(0x00A0); + case 'L': + return ch(0x2028); + case 'P': + return ch(0x2029); + case 'x': + return Utils.utf8chr(Utils.hexDec(value.substr(2, 2))); + case 'u': + return Utils.utf8chr(Utils.hexDec(value.substr(2, 4))); + case 'U': + return Utils.utf8chr(Utils.hexDec(value.substr(2, 8))); + default: + return ''; + } + }; + + return Unescaper; + +})(); + +module.exports = Unescaper; + + +},{"./Pattern":8,"./Utils":10}],10:[function(require,module,exports){ +var Pattern, Utils, + hasProp = {}.hasOwnProperty; + +Pattern = require('./Pattern'); + +Utils = (function() { + function Utils() {} + + Utils.REGEX_LEFT_TRIM_BY_CHAR = {}; + + Utils.REGEX_RIGHT_TRIM_BY_CHAR = {}; + + Utils.REGEX_SPACES = /\s+/g; + + Utils.REGEX_DIGITS = /^\d+$/; + + Utils.REGEX_OCTAL = /[^0-7]/gi; + + Utils.REGEX_HEXADECIMAL = /[^a-f0-9]/gi; + + Utils.PATTERN_DATE = new Pattern('^' + '(?[0-9][0-9][0-9][0-9])' + '-(?[0-9][0-9]?)' + '-(?[0-9][0-9]?)' + '(?:(?:[Tt]|[ \t]+)' + '(?[0-9][0-9]?)' + ':(?[0-9][0-9])' + ':(?[0-9][0-9])' + '(?:\.(?[0-9]*))?' + '(?:[ \t]*(?Z|(?[-+])(?[0-9][0-9]?)' + '(?::(?[0-9][0-9]))?))?)?' + '$', 'i'); + + Utils.LOCAL_TIMEZONE_OFFSET = new Date().getTimezoneOffset() * 60 * 1000; + + Utils.trim = function(str, _char) { + var regexLeft, regexRight; + if (_char == null) { + _char = '\\s'; + } + regexLeft = this.REGEX_LEFT_TRIM_BY_CHAR[_char]; + if (regexLeft == null) { + this.REGEX_LEFT_TRIM_BY_CHAR[_char] = regexLeft = new RegExp('^' + _char + '' + _char + '*'); + } + regexLeft.lastIndex = 0; + regexRight = this.REGEX_RIGHT_TRIM_BY_CHAR[_char]; + if (regexRight == null) { + this.REGEX_RIGHT_TRIM_BY_CHAR[_char] = regexRight = new RegExp(_char + '' + _char + '*$'); + } + regexRight.lastIndex = 0; + return str.replace(regexLeft, '').replace(regexRight, ''); + }; + + Utils.ltrim = function(str, _char) { + var regexLeft; + if (_char == null) { + _char = '\\s'; + } + regexLeft = this.REGEX_LEFT_TRIM_BY_CHAR[_char]; + if (regexLeft == null) { + this.REGEX_LEFT_TRIM_BY_CHAR[_char] = regexLeft = new RegExp('^' + _char + '' + _char + '*'); + } + regexLeft.lastIndex = 0; + return str.replace(regexLeft, ''); + }; + + Utils.rtrim = function(str, _char) { + var regexRight; + if (_char == null) { + _char = '\\s'; + } + regexRight = this.REGEX_RIGHT_TRIM_BY_CHAR[_char]; + if (regexRight == null) { + this.REGEX_RIGHT_TRIM_BY_CHAR[_char] = regexRight = new RegExp(_char + '' + _char + '*$'); + } + regexRight.lastIndex = 0; + return str.replace(regexRight, ''); + }; + + Utils.isEmpty = function(value) { + return !value || value === '' || value === '0' || (value instanceof Array && value.length === 0) || this.isEmptyObject(value); + }; + + Utils.isEmptyObject = function(value) { + var k; + return value instanceof Object && ((function() { + var results; + results = []; + for (k in value) { + if (!hasProp.call(value, k)) continue; + results.push(k); + } + return results; + })()).length === 0; + }; + + Utils.subStrCount = function(string, subString, start, length) { + var c, i, j, len, ref, sublen; + c = 0; + string = '' + string; + subString = '' + subString; + if (start != null) { + string = string.slice(start); + } + if (length != null) { + string = string.slice(0, length); + } + len = string.length; + sublen = subString.length; + for (i = j = 0, ref = len; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) { + if (subString === string.slice(i, sublen)) { + c++; + i += sublen - 1; + } + } + return c; + }; + + Utils.isDigits = function(input) { + this.REGEX_DIGITS.lastIndex = 0; + return this.REGEX_DIGITS.test(input); + }; + + Utils.octDec = function(input) { + this.REGEX_OCTAL.lastIndex = 0; + return parseInt((input + '').replace(this.REGEX_OCTAL, ''), 8); + }; + + Utils.hexDec = function(input) { + this.REGEX_HEXADECIMAL.lastIndex = 0; + input = this.trim(input); + if ((input + '').slice(0, 2) === '0x') { + input = (input + '').slice(2); + } + return parseInt((input + '').replace(this.REGEX_HEXADECIMAL, ''), 16); + }; + + Utils.utf8chr = function(c) { + var ch; + ch = String.fromCharCode; + if (0x80 > (c %= 0x200000)) { + return ch(c); + } + if (0x800 > c) { + return ch(0xC0 | c >> 6) + ch(0x80 | c & 0x3F); + } + if (0x10000 > c) { + return ch(0xE0 | c >> 12) + ch(0x80 | c >> 6 & 0x3F) + ch(0x80 | c & 0x3F); + } + return ch(0xF0 | c >> 18) + ch(0x80 | c >> 12 & 0x3F) + ch(0x80 | c >> 6 & 0x3F) + ch(0x80 | c & 0x3F); + }; + + Utils.parseBoolean = function(input, strict) { + var lowerInput; + if (strict == null) { + strict = true; + } + if (typeof input === 'string') { + lowerInput = input.toLowerCase(); + if (!strict) { + if (lowerInput === 'no') { + return false; + } + } + if (lowerInput === '0') { + return false; + } + if (lowerInput === 'false') { + return false; + } + if (lowerInput === '') { + return false; + } + return true; + } + return !!input; + }; + + Utils.isNumeric = function(input) { + this.REGEX_SPACES.lastIndex = 0; + return typeof input === 'number' || typeof input === 'string' && !isNaN(input) && input.replace(this.REGEX_SPACES, '') !== ''; + }; + + Utils.stringToDate = function(str) { + var date, day, fraction, hour, info, minute, month, second, tz_hour, tz_minute, tz_offset, year; + if (!(str != null ? str.length : void 0)) { + return null; + } + info = this.PATTERN_DATE.exec(str); + if (!info) { + return null; + } + year = parseInt(info.year, 10); + month = parseInt(info.month, 10) - 1; + day = parseInt(info.day, 10); + if (info.hour == null) { + date = new Date(Date.UTC(year, month, day)); + return date; + } + hour = parseInt(info.hour, 10); + minute = parseInt(info.minute, 10); + second = parseInt(info.second, 10); + if (info.fraction != null) { + fraction = info.fraction.slice(0, 3); + while (fraction.length < 3) { + fraction += '0'; + } + fraction = parseInt(fraction, 10); + } else { + fraction = 0; + } + if (info.tz != null) { + tz_hour = parseInt(info.tz_hour, 10); + if (info.tz_minute != null) { + tz_minute = parseInt(info.tz_minute, 10); + } else { + tz_minute = 0; + } + tz_offset = (tz_hour * 60 + tz_minute) * 60000; + if ('-' === info.tz_sign) { + tz_offset *= -1; + } + } + date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction)); + if (tz_offset) { + date.setTime(date.getTime() - tz_offset); + } + return date; + }; + + Utils.strRepeat = function(str, number) { + var i, res; + res = ''; + i = 0; + while (i < number) { + res += str; + i++; + } + return res; + }; + + Utils.getStringFromFile = function(path, callback) { + var data, fs, j, len1, name, ref, req, xhr; + if (callback == null) { + callback = null; + } + xhr = null; + if (typeof window !== "undefined" && window !== null) { + if (window.XMLHttpRequest) { + xhr = new XMLHttpRequest(); + } else if (window.ActiveXObject) { + ref = ["Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.3.0", "Msxml2.XMLHTTP", "Microsoft.XMLHTTP"]; + for (j = 0, len1 = ref.length; j < len1; j++) { + name = ref[j]; + try { + xhr = new ActiveXObject(name); + } catch (undefined) {} + } + } + } + if (xhr != null) { + if (callback != null) { + xhr.onreadystatechange = function() { + if (xhr.readyState === 4) { + if (xhr.status === 200 || xhr.status === 0) { + return callback(xhr.responseText); + } else { + return callback(null); + } + } + }; + xhr.open('GET', path, true); + return xhr.send(null); + } else { + xhr.open('GET', path, false); + xhr.send(null); + if (xhr.status === 200 || xhr.status === 0) { + return xhr.responseText; + } + return null; + } + } else { + req = require; + fs = req('fs'); + if (callback != null) { + return fs.readFile(path, function(err, data) { + if (err) { + return callback(null); + } else { + return callback(String(data)); + } + }); + } else { + data = fs.readFileSync(path); + if (data != null) { + return String(data); + } + return null; + } + } + }; + + return Utils; + +})(); + +module.exports = Utils; + + +},{"./Pattern":8}],11:[function(require,module,exports){ +var Dumper, Parser, Utils, Yaml; + +Parser = require('./Parser'); + +Dumper = require('./Dumper'); + +Utils = require('./Utils'); + +Yaml = (function() { + function Yaml() {} + + Yaml.parse = function(input, exceptionOnInvalidType, objectDecoder) { + if (exceptionOnInvalidType == null) { + exceptionOnInvalidType = false; + } + if (objectDecoder == null) { + objectDecoder = null; + } + return new Parser().parse(input, exceptionOnInvalidType, objectDecoder); + }; + + Yaml.parseFile = function(path, callback, exceptionOnInvalidType, objectDecoder) { + var input; + if (callback == null) { + callback = null; + } + if (exceptionOnInvalidType == null) { + exceptionOnInvalidType = false; + } + if (objectDecoder == null) { + objectDecoder = null; + } + if (callback != null) { + return Utils.getStringFromFile(path, (function(_this) { + return function(input) { + var result; + result = null; + if (input != null) { + result = _this.parse(input, exceptionOnInvalidType, objectDecoder); + } + callback(result); + }; + })(this)); + } else { + input = Utils.getStringFromFile(path); + if (input != null) { + return this.parse(input, exceptionOnInvalidType, objectDecoder); + } + return null; + } + }; + + Yaml.dump = function(input, inline, indent, exceptionOnInvalidType, objectEncoder) { + var yaml; + if (inline == null) { + inline = 2; + } + if (indent == null) { + indent = 4; + } + if (exceptionOnInvalidType == null) { + exceptionOnInvalidType = false; + } + if (objectEncoder == null) { + objectEncoder = null; + } + yaml = new Dumper(); + yaml.indentation = indent; + return yaml.dump(input, inline, 0, exceptionOnInvalidType, objectEncoder); + }; + + Yaml.stringify = function(input, inline, indent, exceptionOnInvalidType, objectEncoder) { + return this.dump(input, inline, indent, exceptionOnInvalidType, objectEncoder); + }; + + Yaml.load = function(path, callback, exceptionOnInvalidType, objectDecoder) { + return this.parseFile(path, callback, exceptionOnInvalidType, objectDecoder); + }; + + return Yaml; + +})(); + +if (typeof window !== "undefined" && window !== null) { + window.YAML = Yaml; +} + +if (typeof window === "undefined" || window === null) { + this.YAML = Yaml; +} + +module.exports = Yaml; + + +},{"./Dumper":1,"./Parser":7,"./Utils":10}]},{},[11]); diff --git a/node_modules/yamljs/dist/yaml.legacy.js b/node_modules/yamljs/dist/yaml.legacy.js new file mode 100644 index 00000000..88c1a289 --- /dev/null +++ b/node_modules/yamljs/dist/yaml.legacy.js @@ -0,0 +1,2087 @@ +/* +Copyright (c) 2010 Jeremy Faivre + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ +(function(){ +/** + * Exception class thrown when an error occurs during parsing. + * + * @author Fabien Potencier + * + * @api + */ + +/** + * Constructor. + * + * @param string message The error message + * @param integer parsedLine The line where the error occurred + * @param integer snippet The snippet of code near the problem + * @param string parsedFile The file name where the error occurred + */ + +var YamlParseException = function(message, parsedLine, snippet, parsedFile){ + + this.rawMessage = message; + this.parsedLine = (parsedLine !== undefined) ? parsedLine : -1; + this.snippet = (snippet !== undefined) ? snippet : null; + this.parsedFile = (parsedFile !== undefined) ? parsedFile : null; + + this.updateRepr(); + + this.message = message; + +}; +YamlParseException.prototype = +{ + + name: 'YamlParseException', + message: null, + + parsedFile: null, + parsedLine: -1, + snippet: null, + rawMessage: null, + + isDefined: function(input) + { + return input != undefined && input != null; + }, + + /** + * Gets the snippet of code near the error. + * + * @return string The snippet of code + */ + getSnippet: function() + { + return this.snippet; + }, + + /** + * Sets the snippet of code near the error. + * + * @param string snippet The code snippet + */ + setSnippet: function(snippet) + { + this.snippet = snippet; + + this.updateRepr(); + }, + + /** + * Gets the filename where the error occurred. + * + * This method returns null if a string is parsed. + * + * @return string The filename + */ + getParsedFile: function() + { + return this.parsedFile; + }, + + /** + * Sets the filename where the error occurred. + * + * @param string parsedFile The filename + */ + setParsedFile: function(parsedFile) + { + this.parsedFile = parsedFile; + + this.updateRepr(); + }, + + /** + * Gets the line where the error occurred. + * + * @return integer The file line + */ + getParsedLine: function() + { + return this.parsedLine; + }, + + /** + * Sets the line where the error occurred. + * + * @param integer parsedLine The file line + */ + setParsedLine: function(parsedLine) + { + this.parsedLine = parsedLine; + + this.updateRepr(); + }, + + updateRepr: function() + { + this.message = this.rawMessage; + + var dot = false; + if ('.' === this.message.charAt(this.message.length - 1)) { + this.message = this.message.substring(0, this.message.length - 1); + dot = true; + } + + if (null !== this.parsedFile) { + this.message += ' in ' + JSON.stringify(this.parsedFile); + } + + if (this.parsedLine >= 0) { + this.message += ' at line ' + this.parsedLine; + } + + if (this.snippet) { + this.message += ' (near "' + this.snippet + '")'; + } + + if (dot) { + this.message += '.'; + } + } +} +/** + * Yaml offers convenience methods to parse and dump YAML. + * + * @author Fabien Potencier + * + * @api + */ + +var YamlRunningUnderNode = false; +var Yaml = function(){}; +Yaml.prototype = +{ + + /** + * Parses YAML into a JS representation. + * + * The parse method, when supplied with a YAML stream (file), + * will do its best to convert YAML in a file into a JS representation. + * + * Usage: + * + * obj = yaml.parseFile('config.yml'); + * + * + * @param string input Path of YAML file + * + * @return array The YAML converted to a JS representation + * + * @throws YamlParseException If the YAML is not valid + */ + parseFile: function(file /* String */, callback /* Function */) + { + if ( callback == null ) + { + var input = this.getFileContents(file); + var ret = null; + try + { + ret = this.parse(input); + } + catch ( e ) + { + if ( e instanceof YamlParseException ) { + e.setParsedFile(file); + } + throw e; + } + return ret; + } + + this.getFileContents(file, function(data) + { + callback(new Yaml().parse(data)); + }); + }, + + /** + * Parses YAML into a JS representation. + * + * The parse method, when supplied with a YAML stream (string), + * will do its best to convert YAML into a JS representation. + * + * Usage: + * + * obj = yaml.parse(...); + * + * + * @param string input string containing YAML + * + * @return array The YAML converted to a JS representation + * + * @throws YamlParseException If the YAML is not valid + */ + parse: function(input /* String */) + { + var yaml = new YamlParser(); + + return yaml.parse(input); + }, + + /** + * Dumps a JS representation to a YAML string. + * + * The dump method, when supplied with an array, will do its best + * to convert the array into friendly YAML. + * + * @param array array JS representation + * @param integer inline The level where you switch to inline YAML + * + * @return string A YAML string representing the original JS representation + * + * @api + */ + dump: function(array, inline, spaces) + { + if ( inline == null ) inline = 2; + + var yaml = new YamlDumper(); + if (spaces) { + yaml.numSpacesForIndentation = spaces; + } + + return yaml.dump(array, inline); + }, + + getXHR: function() + { + if ( window.XMLHttpRequest ) + return new XMLHttpRequest(); + + if ( window.ActiveXObject ) + { + var names = [ + "Msxml2.XMLHTTP.6.0", + "Msxml2.XMLHTTP.3.0", + "Msxml2.XMLHTTP", + "Microsoft.XMLHTTP" + ]; + + for ( var i = 0; i < 4; i++ ) + { + try{ return new ActiveXObject(names[i]); } + catch(e){} + } + } + return null; + }, + + getFileContents: function(file, callback) + { + if ( YamlRunningUnderNode ) + { + var fs = require('fs'); + if ( callback == null ) + { + var data = fs.readFileSync(file); + if (data == null) return null; + return ''+data; + } + else + { + fs.readFile(file, function(err, data) + { + if (err) + callback(null); + else + callback(data); + }); + } + } + else + { + var request = this.getXHR(); + + // Sync + if ( callback == null ) + { + request.open('GET', file, false); + request.send(null); + + if ( request.status == 200 || request.status == 0 ) + return request.responseText; + + return null; + } + + // Async + request.onreadystatechange = function() + { + if ( request.readyState == 4 ) + if ( request.status == 200 || request.status == 0 ) + callback(request.responseText); + else + callback(null); + }; + request.open('GET', file, true); + request.send(null); + } + } +}; + +var YAML = +{ + /* + * @param integer inline The level where you switch to inline YAML + */ + + stringify: function(input, inline, spaces) + { + return new Yaml().dump(input, inline, spaces); + }, + + parse: function(input) + { + return new Yaml().parse(input); + }, + + load: function(file, callback) + { + return new Yaml().parseFile(file, callback); + } +}; + +// Handle node.js case +if (typeof exports !== 'undefined') { + if (typeof module !== 'undefined' && module.exports) { + exports = module.exports = YAML; + YamlRunningUnderNode = true; + + // Add require handler + (function () { + var require_handler = function (module, filename) { + // fill in result + module.exports = YAML.load(filename); + }; + + // register require extensions only if we're on node.js + // hack for browserify + if ( undefined !== require.extensions ) { + require.extensions['.yml'] = require_handler; + require.extensions['.yaml'] = require_handler; + } + }()); + } +} + +// Handle browser case +if ( typeof(window) != "undefined" ) +{ + window.YAML = YAML; +} + +/** + * YamlInline implements a YAML parser/dumper for the YAML inline syntax. + */ +var YamlInline = function(){}; +YamlInline.prototype = +{ + i: null, + + /** + * Convert a YAML string to a JS object. + * + * @param string value A YAML string + * + * @return object A JS object representing the YAML string + */ + parse: function(value) + { + var result = null; + value = this.trim(value); + + if ( 0 == value.length ) + { + return ''; + } + + switch ( value.charAt(0) ) + { + case '[': + result = this.parseSequence(value); + break; + case '{': + result = this.parseMapping(value); + break; + default: + result = this.parseScalar(value); + } + + // some comment can end the scalar + if ( value.substr(this.i+1).replace(/^\s*#.*$/, '') != '' ) { + console.log("oups "+value.substr(this.i+1)); + throw new YamlParseException('Unexpected characters near "'+value.substr(this.i)+'".'); + } + + return result; + }, + + /** + * Dumps a given JS variable to a YAML string. + * + * @param mixed value The JS variable to convert + * + * @return string The YAML string representing the JS object + */ + dump: function(value) + { + if ( undefined == value || null == value ) + return 'null'; + if ( value instanceof Date) + return value.toISOString(); + if ( typeof(value) == 'object') + return this.dumpObject(value); + if ( typeof(value) == 'boolean' ) + return value ? 'true' : 'false'; + if ( /^\d+$/.test(value) ) + return typeof(value) == 'string' ? "'"+value+"'" : parseInt(value); + if ( this.isNumeric(value) ) + return typeof(value) == 'string' ? "'"+value+"'" : parseFloat(value); + if ( typeof(value) == 'number' ) + return value == Infinity ? '.Inf' : ( value == -Infinity ? '-.Inf' : ( isNaN(value) ? '.NAN' : value ) ); + var yaml = new YamlEscaper(); + if ( yaml.requiresDoubleQuoting(value) ) + return yaml.escapeWithDoubleQuotes(value); + if ( yaml.requiresSingleQuoting(value) ) + return yaml.escapeWithSingleQuotes(value); + if ( '' == value ) + return '""'; + if ( this.getTimestampRegex().test(value) ) + return "'"+value+"'"; + if ( this.inArray(value.toLowerCase(), ['null','~','true','false']) ) + return "'"+value+"'"; + // default + return value; + }, + + /** + * Dumps a JS object to a YAML string. + * + * @param object value The JS array to dump + * + * @return string The YAML string representing the JS object + */ + dumpObject: function(value) + { + var keys = this.getKeys(value); + var output = null; + var i; + var len = keys.length; + + // array + if ( value instanceof Array ) + /*( 1 == len && '0' == keys[0] ) + || + ( len > 1 && this.reduceArray(keys, function(v,w){return Math.floor(v+w);}, 0) == len * (len - 1) / 2) )*/ + { + output = []; + for ( i = 0; i < len; i++ ) + { + output.push(this.dump(value[keys[i]])); + } + + return '['+output.join(', ')+']'; + } + + // mapping + output = []; + for ( i = 0; i < len; i++ ) + { + output.push(this.dump(keys[i])+': '+this.dump(value[keys[i]])); + } + + return '{ '+output.join(', ')+' }'; + }, + + /** + * Parses a scalar to a YAML string. + * + * @param scalar scalar + * @param string delimiters + * @param object stringDelimiters + * @param integer i + * @param boolean evaluate + * + * @return string A YAML string + * + * @throws YamlParseException When malformed inline YAML string is parsed + */ + parseScalar: function(scalar, delimiters, stringDelimiters, i, evaluate) + { + if ( delimiters == undefined ) delimiters = null; + if ( stringDelimiters == undefined ) stringDelimiters = ['"', "'"]; + if ( i == undefined ) i = 0; + if ( evaluate == undefined ) evaluate = true; + + var output = null; + var pos = null; + var matches = null; + + if ( this.inArray(scalar[i], stringDelimiters) ) + { + // quoted scalar + output = this.parseQuotedScalar(scalar, i); + i = this.i; + if (null !== delimiters) { + var tmp = scalar.substr(i).replace(/^\s+/, ''); + if (!this.inArray(tmp.charAt(0), delimiters)) { + throw new YamlParseException('Unexpected characters ('+scalar.substr(i)+').'); + } + } + } + else + { + // "normal" string + if ( !delimiters ) + { + output = (scalar+'').substring(i); + + i += output.length; + + // remove comments + pos = output.indexOf(' #'); + if ( pos != -1 ) + { + output = output.substr(0, pos).replace(/\s+$/g,''); + } + } + else if ( matches = new RegExp('^(.+?)('+delimiters.join('|')+')').exec((scalar+'').substring(i)) ) + { + output = matches[1]; + i += output.length; + } + else + { + throw new YamlParseException('Malformed inline YAML string ('+scalar+').'); + } + output = evaluate ? this.evaluateScalar(output) : output; + } + + this.i = i; + + return output; + }, + + /** + * Parses a quoted scalar to YAML. + * + * @param string scalar + * @param integer i + * + * @return string A YAML string + * + * @throws YamlParseException When malformed inline YAML string is parsed + */ + parseQuotedScalar: function(scalar, i) + { + var matches = null; + //var item = /^(.*?)['"]\s*(?:[,:]|[}\]]\s*,)/.exec((scalar+'').substring(i))[1]; + + if ( !(matches = new RegExp('^'+YamlInline.REGEX_QUOTED_STRING).exec((scalar+'').substring(i))) ) + { + throw new YamlParseException('Malformed inline YAML string ('+(scalar+'').substring(i)+').'); + } + + var output = matches[0].substr(1, matches[0].length - 2); + + var unescaper = new YamlUnescaper(); + + if ( '"' == (scalar+'').charAt(i) ) + { + output = unescaper.unescapeDoubleQuotedString(output); + } + else + { + output = unescaper.unescapeSingleQuotedString(output); + } + + i += matches[0].length; + + this.i = i; + return output; + }, + + /** + * Parses a sequence to a YAML string. + * + * @param string sequence + * @param integer i + * + * @return string A YAML string + * + * @throws YamlParseException When malformed inline YAML string is parsed + */ + parseSequence: function(sequence, i) + { + if ( i == undefined ) i = 0; + + var output = []; + var len = sequence.length; + i += 1; + + // [foo, bar, ...] + while ( i < len ) + { + switch ( sequence.charAt(i) ) + { + case '[': + // nested sequence + output.push(this.parseSequence(sequence, i)); + i = this.i; + break; + case '{': + // nested mapping + output.push(this.parseMapping(sequence, i)); + i = this.i; + break; + case ']': + this.i = i; + return output; + case ',': + case ' ': + break; + default: + var isQuoted = this.inArray(sequence.charAt(i), ['"', "'"]); + var value = this.parseScalar(sequence, [',', ']'], ['"', "'"], i); + i = this.i; + + if ( !isQuoted && (value+'').indexOf(': ') != -1 ) + { + // embedded mapping? + try + { + value = this.parseMapping('{'+value+'}'); + } + catch ( e ) + { + if ( !(e instanceof YamlParseException ) ) throw e; + // no, it's not + } + } + + output.push(value); + + i--; + } + + i++; + } + + throw new YamlParseException('Malformed inline YAML string "'+sequence+'"'); + }, + + /** + * Parses a mapping to a YAML string. + * + * @param string mapping + * @param integer i + * + * @return string A YAML string + * + * @throws YamlParseException When malformed inline YAML string is parsed + */ + parseMapping: function(mapping, i) + { + if ( i == undefined ) i = 0; + var output = {}; + var len = mapping.length; + i += 1; + var done = false; + var doContinue = false; + + // {foo: bar, bar:foo, ...} + while ( i < len ) + { + doContinue = false; + + switch ( mapping.charAt(i) ) + { + case ' ': + case ',': + i++; + doContinue = true; + break; + case '}': + this.i = i; + return output; + } + + if ( doContinue ) continue; + + // key + var key = this.parseScalar(mapping, [':', ' '], ['"', "'"], i, false); + i = this.i; + + // value + done = false; + while ( i < len ) + { + switch ( mapping.charAt(i) ) + { + case '[': + // nested sequence + output[key] = this.parseSequence(mapping, i); + i = this.i; + done = true; + break; + case '{': + // nested mapping + output[key] = this.parseMapping(mapping, i); + i = this.i; + done = true; + break; + case ':': + case ' ': + break; + default: + output[key] = this.parseScalar(mapping, [',', '}'], ['"', "'"], i); + i = this.i; + done = true; + i--; + } + + ++i; + + if ( done ) + { + doContinue = true; + break; + } + } + + if ( doContinue ) continue; + } + + throw new YamlParseException('Malformed inline YAML string "'+mapping+'"'); + }, + + /** + * Evaluates scalars and replaces magic values. + * + * @param string scalar + * + * @return string A YAML string + */ + evaluateScalar: function(scalar) + { + scalar = this.trim(scalar); + + var raw = null; + var cast = null; + + if ( ( 'null' == scalar.toLowerCase() ) || + ( '' == scalar ) || + ( '~' == scalar ) ) + return null; + if ( (scalar+'').indexOf('!str ') == 0 ) + return (''+scalar).substring(5); + if ( (scalar+'').indexOf('! ') == 0 ) + return parseInt(this.parseScalar((scalar+'').substr(2))); + if ( /^\d+$/.test(scalar) ) + { + raw = scalar; + cast = parseInt(scalar); + return '0' == scalar.charAt(0) ? this.octdec(scalar) : (( ''+raw == ''+cast ) ? cast : raw); + } + if ( 'true' == (scalar+'').toLowerCase() ) + return true; + if ( 'false' == (scalar+'').toLowerCase() ) + return false; + if ( this.isNumeric(scalar) ) + return '0x' == (scalar+'').substr(0, 2) ? this.hexdec(scalar) : parseFloat(scalar); + if ( scalar.toLowerCase() == '.inf' ) + return Infinity; + if ( scalar.toLowerCase() == '.nan' ) + return NaN; + if ( scalar.toLowerCase() == '-.inf' ) + return -Infinity; + if ( /^(-|\+)?[0-9,]+(\.[0-9]+)?$/.test(scalar) ) + return parseFloat(scalar.split(',').join('')); + if ( this.getTimestampRegex().test(scalar) ) + return new Date(this.strtotime(scalar)); + //else + return ''+scalar; + }, + + /** + * Gets a regex that matches an unix timestamp + * + * @return string The regular expression + */ + getTimestampRegex: function() + { + return new RegExp('^'+ + '([0-9][0-9][0-9][0-9])'+ + '-([0-9][0-9]?)'+ + '-([0-9][0-9]?)'+ + '(?:(?:[Tt]|[ \t]+)'+ + '([0-9][0-9]?)'+ + ':([0-9][0-9])'+ + ':([0-9][0-9])'+ + '(?:\.([0-9]*))?'+ + '(?:[ \t]*(Z|([-+])([0-9][0-9]?)'+ + '(?::([0-9][0-9]))?))?)?'+ + '$','gi'); + }, + + trim: function(str /* String */) + { + return (str+'').replace(/^\s+/,'').replace(/\s+$/,''); + }, + + isNumeric: function(input) + { + return (input - 0) == input && input.length > 0 && input.replace(/\s+/g,'') != ''; + }, + + inArray: function(key, tab) + { + var i; + var len = tab.length; + for ( i = 0; i < len; i++ ) + { + if ( key == tab[i] ) return true; + } + return false; + }, + + getKeys: function(tab) + { + var ret = []; + + for ( var name in tab ) + { + if ( tab.hasOwnProperty(name) ) + { + ret.push(name); + } + } + + return ret; + }, + + /*reduceArray: function(tab, fun) + { + var len = tab.length; + if (typeof fun != "function") + throw new YamlParseException("fun is not a function"); + + // no value to return if no initial value and an empty array + if (len == 0 && arguments.length == 1) + throw new YamlParseException("empty array"); + + var i = 0; + if (arguments.length >= 2) + { + var rv = arguments[1]; + } + else + { + do + { + if (i in tab) + { + rv = tab[i++]; + break; + } + + // if array contains no values, no initial value to return + if (++i >= len) + throw new YamlParseException("no initial value to return"); + } + while (true); + } + + for (; i < len; i++) + { + if (i in tab) + rv = fun.call(null, rv, tab[i], i, tab); + } + + return rv; + },*/ + + octdec: function(input) + { + return parseInt((input+'').replace(/[^0-7]/gi, ''), 8); + }, + + hexdec: function(input) + { + input = this.trim(input); + if ( (input+'').substr(0, 2) == '0x' ) input = (input+'').substring(2); + return parseInt((input+'').replace(/[^a-f0-9]/gi, ''), 16); + }, + + /** + * @see http://phpjs.org/functions/strtotime + * @note we need timestamp with msecs so /1000 removed + * @note original contained binary | 0 (wtf?!) everywhere, which messes everything up + */ + strtotime: function (h,b){var f,c,g,k,d="";h=(h+"").replace(/\s{2,}|^\s|\s$/g," ").replace(/[\t\r\n]/g,"");if(h==="now"){return b===null||isNaN(b)?new Date().getTime()||0:b||0}else{if(!isNaN(d=Date.parse(h))){return d||0}else{if(b){b=new Date(b)}else{b=new Date()}}}h=h.toLowerCase();var e={day:{sun:0,mon:1,tue:2,wed:3,thu:4,fri:5,sat:6},mon:["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"]};var a=function(i){var o=(i[2]&&i[2]==="ago");var n=(n=i[0]==="last"?-1:1)*(o?-1:1);switch(i[0]){case"last":case"next":switch(i[1].substring(0,3)){case"yea":b.setFullYear(b.getFullYear()+n);break;case"wee":b.setDate(b.getDate()+(n*7));break;case"day":b.setDate(b.getDate()+n);break;case"hou":b.setHours(b.getHours()+n);break;case"min":b.setMinutes(b.getMinutes()+n);break;case"sec":b.setSeconds(b.getSeconds()+n);break;case"mon":if(i[1]==="month"){b.setMonth(b.getMonth()+n);break}default:var l=e.day[i[1].substring(0,3)];if(typeof l!=="undefined"){var p=l-b.getDay();if(p===0){p=7*n}else{if(p>0){if(i[0]==="last"){p-=7}}else{if(i[0]==="next"){p+=7}}}b.setDate(b.getDate()+p);b.setHours(0,0,0,0)}}break;default:if(/\d+/.test(i[0])){n*=parseInt(i[0],10);switch(i[1].substring(0,3)){case"yea":b.setFullYear(b.getFullYear()+n);break;case"mon":b.setMonth(b.getMonth()+n);break;case"wee":b.setDate(b.getDate()+(n*7));break;case"day":b.setDate(b.getDate()+n);break;case"hou":b.setHours(b.getHours()+n);break;case"min":b.setMinutes(b.getMinutes()+n);break;case"sec":b.setSeconds(b.getSeconds()+n);break}}else{return false}break}return true};g=h.match(/^(\d{2,4}-\d{2}-\d{2})(?:\s(\d{1,2}:\d{2}(:\d{2})?)?(?:\.(\d+))?)?$/);if(g!==null){if(!g[2]){g[2]="00:00:00"}else{if(!g[3]){g[2]+=":00"}}k=g[1].split(/-/g);k[1]=e.mon[k[1]-1]||k[1];k[0]=+k[0];k[0]=(k[0]>=0&&k[0]<=69)?"20"+(k[0]<10?"0"+k[0]:k[0]+""):(k[0]>=70&&k[0]<=99)?"19"+k[0]:k[0]+"";return parseInt(this.strtotime(k[2]+" "+k[1]+" "+k[0]+" "+g[2])+(g[4]?g[4]:""),10)}var j="([+-]?\\d+\\s(years?|months?|weeks?|days?|hours?|min|minutes?|sec|seconds?|sun\\.?|sunday|mon\\.?|monday|tue\\.?|tuesday|wed\\.?|wednesday|thu\\.?|thursday|fri\\.?|friday|sat\\.?|saturday)|(last|next)\\s(years?|months?|weeks?|days?|hours?|min|minutes?|sec|seconds?|sun\\.?|sunday|mon\\.?|monday|tue\\.?|tuesday|wed\\.?|wednesday|thu\\.?|thursday|fri\\.?|friday|sat\\.?|saturday))(\\sago)?";g=h.match(new RegExp(j,"gi"));if(g===null){return false}for(f=0,c=g.length;f= newIndent ) + { + data.push(this.currentLine.substr(newIndent)); + } + else if ( 0 == indent ) + { + this.moveToPreviousLine(); + + break; + } + else + { + throw new YamlParseException('Indentation problem B', this.getRealCurrentLineNb() + 1, this.currentLine); + } + } + + return data.join("\n"); + }, + + /** + * Moves the parser to the next line. + * + * @return Boolean + */ + moveToNextLine: function() + { + if ( this.currentLineNb >= this.lines.length - 1 ) + { + return false; + } + + this.currentLineNb++; + this.currentLine = this.lines[this.currentLineNb]; + + return true; + }, + + /** + * Moves the parser to the previous line. + */ + moveToPreviousLine: function() + { + this.currentLineNb--; + this.currentLine = this.lines[this.currentLineNb]; + }, + + /** + * Parses a YAML value. + * + * @param string value A YAML value + * + * @return mixed A JS value + * + * @throws YamlParseException When reference does not exist + */ + parseValue: function(value) + { + if ( '*' == (value+'').charAt(0) ) + { + if ( this.trim(value).charAt(0) == '#' ) + { + value = (value+'').substr(1, value.indexOf('#') - 2); + } + else + { + value = (value+'').substr(1); + } + + if ( this.refs[value] == undefined ) + { + throw new YamlParseException('Reference "'+value+'" does not exist', this.getRealCurrentLineNb() + 1, this.currentLine); + } + return this.refs[value]; + } + + var matches = null; + if ( matches = /^(\||>)(\+|\-|\d+|\+\d+|\-\d+|\d+\+|\d+\-)?( +#.*)?$/.exec(value) ) + { + matches = {separator: matches[1], modifiers: matches[2], comments: matches[3]}; + var modifiers = this.isDefined(matches.modifiers) ? matches.modifiers : ''; + + return this.parseFoldedScalar(matches.separator, modifiers.replace(/\d+/g, ''), Math.abs(parseInt(modifiers))); + } + try { + return new YamlInline().parse(value); + } catch (e) { + if ( e instanceof YamlParseException ) { + e.setParsedLine(this.getRealCurrentLineNb() + 1); + e.setSnippet(this.currentLine); + } + throw e; + } + }, + + /** + * Parses a folded scalar. + * + * @param string separator The separator that was used to begin this folded scalar (| or >) + * @param string indicator The indicator that was used to begin this folded scalar (+ or -) + * @param integer indentation The indentation that was used to begin this folded scalar + * + * @return string The text value + */ + parseFoldedScalar: function(separator, indicator, indentation) + { + if ( indicator == undefined ) indicator = ''; + if ( indentation == undefined ) indentation = 0; + + separator = '|' == separator ? "\n" : ' '; + var text = ''; + var diff = null; + + var notEOF = this.moveToNextLine(); + + while ( notEOF && this.isCurrentLineBlank() ) + { + text += "\n"; + + notEOF = this.moveToNextLine(); + } + + if ( !notEOF ) + { + return ''; + } + + var matches = null; + if ( !(matches = new RegExp('^('+(indentation ? this.strRepeat(' ', indentation) : ' +')+')(.*)$').exec(this.currentLine)) ) + { + this.moveToPreviousLine(); + + return ''; + } + + matches = {indent: matches[1], text: matches[2]}; + + var textIndent = matches.indent; + var previousIndent = 0; + + text += matches.text + separator; + while ( this.currentLineNb + 1 < this.lines.length ) + { + this.moveToNextLine(); + + if ( matches = new RegExp('^( {'+textIndent.length+',})(.+)$').exec(this.currentLine) ) + { + matches = {indent: matches[1], text: matches[2]}; + + if ( ' ' == separator && previousIndent != matches.indent ) + { + text = text.substr(0, text.length - 1)+"\n"; + } + + previousIndent = matches.indent; + + diff = matches.indent.length - textIndent.length; + text += this.strRepeat(' ', diff) + matches.text + (diff != 0 ? "\n" : separator); + } + else if ( matches = /^( *)$/.exec(this.currentLine) ) + { + text += matches[1].replace(new RegExp('^ {1,'+textIndent.length+'}','g'), '')+"\n"; + } + else + { + this.moveToPreviousLine(); + + break; + } + } + + if ( ' ' == separator ) + { + // replace last separator by a newline + text = text.replace(/ (\n*)$/g, "\n$1"); + } + + switch ( indicator ) + { + case '': + text = text.replace(/\n+$/g, "\n"); + break; + case '+': + break; + case '-': + text = text.replace(/\n+$/g, ''); + break; + } + + return text; + }, + + /** + * Returns true if the next line is indented. + * + * @return Boolean Returns true if the next line is indented, false otherwise + */ + isNextLineIndented: function() + { + var currentIndentation = this.getCurrentLineIndentation(); + var notEOF = this.moveToNextLine(); + + while ( notEOF && this.isCurrentLineEmpty() ) + { + notEOF = this.moveToNextLine(); + } + + if ( false == notEOF ) + { + return false; + } + + var ret = false; + if ( this.getCurrentLineIndentation() <= currentIndentation ) + { + ret = true; + } + + this.moveToPreviousLine(); + + return ret; + }, + + /** + * Returns true if the current line is blank or if it is a comment line. + * + * @return Boolean Returns true if the current line is empty or if it is a comment line, false otherwise + */ + isCurrentLineEmpty: function() + { + return this.isCurrentLineBlank() || this.isCurrentLineComment(); + }, + + /** + * Returns true if the current line is blank. + * + * @return Boolean Returns true if the current line is blank, false otherwise + */ + isCurrentLineBlank: function() + { + return '' == this.trim(this.currentLine); + }, + + /** + * Returns true if the current line is a comment line. + * + * @return Boolean Returns true if the current line is a comment line, false otherwise + */ + isCurrentLineComment: function() + { + //checking explicitly the first char of the trim is faster than loops or strpos + var ltrimmedLine = this.currentLine.replace(/^ +/g, ''); + return ltrimmedLine.charAt(0) == '#'; + }, + + /** + * Cleanups a YAML string to be parsed. + * + * @param string value The input YAML string + * + * @return string A cleaned up YAML string + */ + cleanup: function(value) + { + value = value.split("\r\n").join("\n").split("\r").join("\n"); + + if ( !/\n$/.test(value) ) + { + value += "\n"; + } + + // strip YAML header + var count = 0; + var regex = /^\%YAML[: ][\d\.]+.*\n/; + while ( regex.test(value) ) + { + value = value.replace(regex, ''); + count++; + } + this.offset += count; + + // remove leading comments + regex = /^(#.*?\n)+/; + if ( regex.test(value) ) + { + var trimmedValue = value.replace(regex, ''); + + // items have been removed, update the offset + this.offset += this.subStrCount(value, "\n") - this.subStrCount(trimmedValue, "\n"); + value = trimmedValue; + } + + // remove start of the document marker (---) + regex = /^\-\-\-.*?\n/; + if ( regex.test(value) ) + { + trimmedValue = value.replace(regex, ''); + + // items have been removed, update the offset + this.offset += this.subStrCount(value, "\n") - this.subStrCount(trimmedValue, "\n"); + value = trimmedValue; + + // remove end of the document marker (...) + value = value.replace(/\.\.\.\s*$/g, ''); + } + + return value; + }, + + /** + * Returns true if the next line starts unindented collection + * + * @return Boolean Returns true if the next line starts unindented collection, false otherwise + */ + isNextLineUnIndentedCollection: function() + { + var currentIndentation = this.getCurrentLineIndentation(); + var notEOF = this.moveToNextLine(); + + while (notEOF && this.isCurrentLineEmpty()) { + notEOF = this.moveToNextLine(); + } + + if (false === notEOF) { + return false; + } + + var ret = false; + if ( + this.getCurrentLineIndentation() == currentIndentation + && + this.isStringUnIndentedCollectionItem(this.currentLine) + ) { + ret = true; + } + + this.moveToPreviousLine(); + + return ret; + }, + + /** + * Returns true if the string is unindented collection item + * + * @return Boolean Returns true if the string is unindented collection item, false otherwise + */ + isStringUnIndentedCollectionItem: function(string) + { + return (0 === this.currentLine.indexOf('- ')); + }, + + isObject: function(input) + { + return typeof(input) == 'object' && this.isDefined(input); + }, + + isEmpty: function(input) + { + return input == undefined || input == null || input == '' || input == 0 || input == "0" || input == false; + }, + + isDefined: function(input) + { + return input != undefined && input != null; + }, + + reverseArray: function(input /* Array */) + { + var result = []; + var len = input.length; + for ( var i = len-1; i >= 0; i-- ) + { + result.push(input[i]); + } + + return result; + }, + + merge: function(a /* Object */, b /* Object */) + { + var c = {}; + var i; + + for ( i in a ) + { + if ( a.hasOwnProperty(i) ) + if ( /^\d+$/.test(i) ) c.push(a); + else c[i] = a[i]; + } + for ( i in b ) + { + if ( b.hasOwnProperty(i) ) + if ( /^\d+$/.test(i) ) c.push(b); + else c[i] = b[i]; + } + + return c; + }, + + strRepeat: function(str /* String */, count /* Integer */) + { + var i; + var result = ''; + for ( i = 0; i < count; i++ ) result += str; + return result; + }, + + subStrCount: function(string, subString, start, length) + { + var c = 0; + + string = '' + string; + subString = '' + subString; + + if ( start != undefined ) string = string.substr(start); + if ( length != undefined ) string = string.substr(0, length); + + var len = string.length; + var sublen = subString.length; + for ( var i = 0; i < len; i++ ) + { + if ( subString == string.substr(i, sublen) ) + c++; + i += sublen - 1; + } + + return c; + }, + + trim: function(str /* String */) + { + return (str+'').replace(/^ +/,'').replace(/ +$/,''); + } +}; +/** + * YamlEscaper encapsulates escaping rules for single and double-quoted + * YAML strings. + * + * @author Matthew Lewinski + */ +YamlEscaper = function(){}; +YamlEscaper.prototype = +{ + /** + * Determines if a JS value would require double quoting in YAML. + * + * @param string value A JS value + * + * @return Boolean True if the value would require double quotes. + */ + requiresDoubleQuoting: function(value) + { + return new RegExp(YamlEscaper.REGEX_CHARACTER_TO_ESCAPE).test(value); + }, + + /** + * Escapes and surrounds a JS value with double quotes. + * + * @param string value A JS value + * + * @return string The quoted, escaped string + */ + escapeWithDoubleQuotes: function(value) + { + value = value + ''; + var len = YamlEscaper.escapees.length; + var maxlen = YamlEscaper.escaped.length; + var esc = YamlEscaper.escaped; + for (var i = 0; i < len; ++i) + if ( i >= maxlen ) esc.push(''); + + var ret = ''; + ret = value.replace(new RegExp(YamlEscaper.escapees.join('|'),'g'), function(str){ + for(var i = 0; i < len; ++i){ + if( str == YamlEscaper.escapees[i] ) + return esc[i]; + } + }); + return '"' + ret + '"'; + }, + + /** + * Determines if a JS value would require single quoting in YAML. + * + * @param string value A JS value + * + * @return Boolean True if the value would require single quotes. + */ + requiresSingleQuoting: function(value) + { + return /[\s'":{}[\],&*#?]|^[-?|<>=!%@`]/.test(value); + }, + + /** + * Escapes and surrounds a JS value with single quotes. + * + * @param string value A JS value + * + * @return string The quoted, escaped string + */ + escapeWithSingleQuotes : function(value) + { + return "'" + value.replace(/'/g, "''") + "'"; + } +}; + +// Characters that would cause a dumped string to require double quoting. +YamlEscaper.REGEX_CHARACTER_TO_ESCAPE = "[\\x00-\\x1f]|\xc2\x85|\xc2\xa0|\xe2\x80\xa8|\xe2\x80\xa9"; + +// Mapping arrays for escaping a double quoted string. The backslash is +// first to ensure proper escaping. +YamlEscaper.escapees = ['\\\\', '\\"', '"', + "\x00", "\x01", "\x02", "\x03", "\x04", "\x05", "\x06", "\x07", + "\x08", "\x09", "\x0a", "\x0b", "\x0c", "\x0d", "\x0e", "\x0f", + "\x10", "\x11", "\x12", "\x13", "\x14", "\x15", "\x16", "\x17", + "\x18", "\x19", "\x1a", "\x1b", "\x1c", "\x1d", "\x1e", "\x1f", + "\xc2\x85", "\xc2\xa0", "\xe2\x80\xa8", "\xe2\x80\xa9"]; +YamlEscaper.escaped = ['\\"', '\\\\', '\\"', + "\\0", "\\x01", "\\x02", "\\x03", "\\x04", "\\x05", "\\x06", "\\a", + "\\b", "\\t", "\\n", "\\v", "\\f", "\\r", "\\x0e", "\\x0f", + "\\x10", "\\x11", "\\x12", "\\x13", "\\x14", "\\x15", "\\x16", "\\x17", + "\\x18", "\\x19", "\\x1a", "\\e", "\\x1c", "\\x1d", "\\x1e", "\\x1f", + "\\N", "\\_", "\\L", "\\P"]; +/** + * YamlUnescaper encapsulates unescaping rules for single and double-quoted + * YAML strings. + * + * @author Matthew Lewinski + */ +var YamlUnescaper = function(){}; +YamlUnescaper.prototype = +{ + /** + * Unescapes a single quoted string. + * + * @param string value A single quoted string. + * + * @return string The unescaped string. + */ + unescapeSingleQuotedString: function(value) + { + return value.replace(/''/g, "'"); + }, + + /** + * Unescapes a double quoted string. + * + * @param string value A double quoted string. + * + * @return string The unescaped string. + */ + unescapeDoubleQuotedString: function(value) + { + var callback = function(m) { + return new YamlUnescaper().unescapeCharacter(m); + }; + + // evaluate the string + return value.replace(new RegExp(YamlUnescaper.REGEX_ESCAPED_CHARACTER, 'g'), callback); + }, + + /** + * Unescapes a character that was found in a double-quoted string + * + * @param string value An escaped character + * + * @return string The unescaped character + */ + unescapeCharacter: function(value) + { + switch (value.charAt(1)) { + case '0': + return String.fromCharCode(0); + case 'a': + return String.fromCharCode(7); + case 'b': + return String.fromCharCode(8); + case 't': + return "\t"; + case "\t": + return "\t"; + case 'n': + return "\n"; + case 'v': + return String.fromCharCode(11); + case 'f': + return String.fromCharCode(12); + case 'r': + return String.fromCharCode(13); + case 'e': + return "\x1b"; + case ' ': + return ' '; + case '"': + return '"'; + case '/': + return '/'; + case '\\': + return '\\'; + case 'N': + // U+0085 NEXT LINE + return "\x00\x85"; + case '_': + // U+00A0 NO-BREAK SPACE + return "\x00\xA0"; + case 'L': + // U+2028 LINE SEPARATOR + return "\x20\x28"; + case 'P': + // U+2029 PARAGRAPH SEPARATOR + return "\x20\x29"; + case 'x': + return this.pack('n', new YamlInline().hexdec(value.substr(2, 2))); + case 'u': + return this.pack('n', new YamlInline().hexdec(value.substr(2, 4))); + case 'U': + return this.pack('N', new YamlInline().hexdec(value.substr(2, 8))); + } + }, + + /** + * @see http://phpjs.org/functions/pack + * @warning only modes used above copied + */ + pack: function(B){var g=0,o=1,m="",l="",z=0,p=[],E,s,C,I,h,c;var d,b,x,H,u,e,A,q,D,t,w,a,G,F,y,v,f;while(g(arguments.length-o)){throw new Error("Warning: pack() Type "+E+": too few arguments")}for(z=0;z>8&255);m+=String.fromCharCode(arguments[o]&255);o++}break;case"N":if(s==="*"){s=arguments.length-o}if(s>(arguments.length-o)){throw new Error("Warning: pack() Type "+E+": too few arguments")}for(z=0;z>24&255);m+=String.fromCharCode(arguments[o]>>16&255);m+=String.fromCharCode(arguments[o]>>8&255);m+=String.fromCharCode(arguments[o]&255);o++}break;default:throw new Error("Warning: pack() Type "+E+": unknown format code")}}if(o + */ +var YamlDumper = function(){}; +YamlDumper.prototype = +{ + /** + * Dumps a JS value to YAML. + * + * @param mixed input The JS value + * @param integer inline The level where you switch to inline YAML + * @param integer indent The level o indentation indentation (used internally) + * + * @return string The YAML representation of the JS value + */ + dump: function(input, inline, indent) + { + if ( inline == null ) inline = 0; + if ( indent == null ) indent = 0; + var output = ''; + var prefix = indent ? this.strRepeat(' ', indent) : ''; + var yaml; + if (!this.numSpacesForIndentation) this.numSpacesForIndentation = 2; + + if ( inline <= 0 || !this.isObject(input) || this.isEmpty(input) ) + { + yaml = new YamlInline(); + output += prefix + yaml.dump(input); + } + else + { + var isAHash = !this.arrayEquals(this.getKeys(input), this.range(0,input.length - 1)); + var willBeInlined; + + for ( var key in input ) + { + if ( input.hasOwnProperty(key) ) + { + willBeInlined = inline - 1 <= 0 || !this.isObject(input[key]) || this.isEmpty(input[key]); + + if ( isAHash ) yaml = new YamlInline(); + + output += + prefix + '' + + (isAHash ? yaml.dump(key)+':' : '-') + '' + + (willBeInlined ? ' ' : "\n") + '' + + this.dump(input[key], inline - 1, (willBeInlined ? 0 : indent + this.numSpacesForIndentation)) + '' + + (willBeInlined ? "\n" : ''); + } + } + } + + return output; + }, + + strRepeat: function(str /* String */, count /* Integer */) + { + var i; + var result = ''; + for ( i = 0; i < count; i++ ) result += str; + return result; + }, + + isObject: function(input) + { + return this.isDefined(input) && typeof(input) == 'object'; + }, + + isEmpty: function(input) + { + var ret = input == undefined || input == null || input == '' || input == 0 || input == "0" || input == false; + if ( !ret && typeof(input) == "object" && !(input instanceof Array)){ + var propCount = 0; + for ( var key in input ) + if ( input.hasOwnProperty(key) ) propCount++; + ret = !propCount; + } + return ret; + }, + + isDefined: function(input) + { + return input != undefined && input != null; + }, + + getKeys: function(tab) + { + var ret = []; + + for ( var name in tab ) + { + if ( tab.hasOwnProperty(name) ) + { + ret.push(name); + } + } + + return ret; + }, + + range: function(start, end) + { + if ( start > end ) return []; + + var ret = []; + + for ( var i = start; i <= end; i++ ) + { + ret.push(i); + } + + return ret; + }, + + arrayEquals: function(a,b) + { + if ( a.length != b.length ) return false; + + var len = a.length; + + for ( var i = 0; i < len; i++ ) + { + if ( a[i] != b[i] ) return false; + } + + return true; + } +}; +})(); diff --git a/node_modules/yamljs/dist/yaml.min.js b/node_modules/yamljs/dist/yaml.min.js new file mode 100644 index 00000000..9a2f634e --- /dev/null +++ b/node_modules/yamljs/dist/yaml.min.js @@ -0,0 +1 @@ +(function e(t,n,i){function r(l,u){if(!n[l]){if(!t[l]){var a=typeof require=="function"&&require;if(!u&&a)return a(l,!0);if(s)return s(l,!0);var o=new Error("Cannot find module '"+l+"'");throw o.code="MODULE_NOT_FOUND",o}var f=n[l]={exports:{}};t[l][0].call(f.exports,function(e){var n=t[l][1][e];return r(n?n:e)},f,f.exports,e,t,n,i)}return n[l].exports}var s=typeof require=="function"&&require;for(var l=0;lr;e=0<=r?++n:--n){i[t.LIST_ESCAPEES[e]]=t.LIST_ESCAPED[e]}return i}();t.PATTERN_CHARACTERS_TO_ESCAPE=new r("[\\x00-\\x1f]|…| |
|
");t.PATTERN_MAPPING_ESCAPEES=new r(t.LIST_ESCAPEES.join("|").split("\\").join("\\\\"));t.PATTERN_SINGLE_QUOTING=new r("[\\s'\":{}[\\],&*#?]|^[-?|<>=!%@`]");t.requiresDoubleQuoting=function(e){return this.PATTERN_CHARACTERS_TO_ESCAPE.test(e)};t.escapeWithDoubleQuotes=function(e){var t;t=this.PATTERN_MAPPING_ESCAPEES.replace(e,function(e){return function(t){return e.MAPPING_ESCAPEES_TO_ESCAPED[t]}}(this));return'"'+t+'"'};t.requiresSingleQuoting=function(e){return this.PATTERN_SINGLE_QUOTING.test(e)};t.escapeWithSingleQuotes=function(e){return"'"+e.replace(/'/g,"''")+"'"};return t}();t.exports=i},{"./Pattern":8}],3:[function(e,t,n){var i,r=function(e,t){for(var n in t){if(s.call(t,n))e[n]=t[n]}function i(){this.constructor=e}i.prototype=t.prototype;e.prototype=new i;e.__super__=t.prototype;return e},s={}.hasOwnProperty;i=function(e){r(t,e);function t(e,t,n){this.message=e;this.parsedLine=t;this.snippet=n}t.prototype.toString=function(){if(this.parsedLine!=null&&this.snippet!=null){return" "+this.message+" (line "+this.parsedLine+": '"+this.snippet+"')"}else{return" "+this.message}};return t}(Error);t.exports=i},{}],4:[function(e,t,n){var i,r=function(e,t){for(var n in t){if(s.call(t,n))e[n]=t[n]}function i(){this.constructor=e}i.prototype=t.prototype;e.prototype=new i;e.__super__=t.prototype;return e},s={}.hasOwnProperty;i=function(e){r(t,e);function t(e,t,n){this.message=e;this.parsedLine=t;this.snippet=n}t.prototype.toString=function(){if(this.parsedLine!=null&&this.snippet!=null){return" "+this.message+" (line "+this.parsedLine+": '"+this.snippet+"')"}else{return" "+this.message}};return t}(Error);t.exports=i},{}],5:[function(e,t,n){var i,r=function(e,t){for(var n in t){if(s.call(t,n))e[n]=t[n]}function i(){this.constructor=e}i.prototype=t.prototype;e.prototype=new i;e.__super__=t.prototype;return e},s={}.hasOwnProperty;i=function(e){r(t,e);function t(e,t,n){this.message=e;this.parsedLine=t;this.snippet=n}t.prototype.toString=function(){if(this.parsedLine!=null&&this.snippet!=null){return" "+this.message+" (line "+this.parsedLine+": '"+this.snippet+"')"}else{return" "+this.message}};return t}(Error);t.exports=i},{}],6:[function(e,t,n){var i,r,s,l,u,a,o,f,c=[].indexOf||function(e){for(var t=0,n=this.length;t=0){h=this.parseQuotedScalar(e,i);s=i.i;if(t!=null){A=f.ltrim(e.slice(s)," ");if(!(T=A.charAt(0),c.call(t,T)>=0)){throw new l("Unexpected characters ("+e.slice(s)+").")}}}else{if(!t){h=e.slice(s);s+=h.length;_=h.indexOf(" #");if(_!==-1){h=f.rtrim(h.slice(0,_))}}else{u=t.join("|");p=this.PATTERN_SCALAR_BY_DELIMITERS[u];if(p==null){p=new a("^(.+?)("+u+")");this.PATTERN_SCALAR_BY_DELIMITERS[u]=p}if(o=p.exec(e.slice(s))){h=o[1];s+=h.length}else{throw new l("Malformed inline YAML string ("+e+").")}}if(r){h=this.evaluateScalar(h,i)}}i.i=s;return h};e.parseQuotedScalar=function(e,t){var n,i,r;n=t.i;if(!(i=this.PATTERN_QUOTED_SCALAR.exec(e.slice(n)))){throw new u("Malformed inline YAML string ("+e.slice(n)+").")}r=i[0].substr(1,i[0].length-2);if('"'===e.charAt(n)){r=o.unescapeDoubleQuotedString(r)}else{r=o.unescapeSingleQuotedString(r)}n+=i[0].length;t.i=n;return r};e.parseSequence=function(e,t){var n,i,r,s,l,a,o,f;a=[];l=e.length;r=t.i;r+=1;while(r0)){p=null}return o(E.slice(0,u),p)}}if(r){throw new l("Custom object support when parsing a YAML file has been disabled.")}return null}break;case"0":if("0x"===e.slice(0,2)){return f.hexDec(e)}else if(f.isDigits(e)){return f.octDec(e)}else if(f.isNumeric(e)){return parseFloat(e)}else{return e}break;case"+":if(f.isDigits(e)){c=e;n=parseInt(c);if(c===String(n)){return n}else{return c}}else if(f.isNumeric(e)){return parseFloat(e)}else if(this.PATTERN_THOUSAND_NUMERIC_SCALAR.test(e)){return parseFloat(e.replace(",",""))}return e;case"-":if(f.isDigits(e.slice(1))){if("0"===e.charAt(1)){return-f.octDec(e.slice(1))}else{c=e.slice(1);n=parseInt(c);if(c===String(n)){return-n}else{return-c}}}else if(f.isNumeric(e)){return parseFloat(e)}else if(this.PATTERN_THOUSAND_NUMERIC_SCALAR.test(e)){return parseFloat(e.replace(",",""))}return e;default:if(i=f.stringToDate(e)){return i}else if(f.isNumeric(e)){return parseFloat(e)}else if(this.PATTERN_THOUSAND_NUMERIC_SCALAR.test(e)){return parseFloat(e.replace(",",""))}return e}}};return e}();t.exports=s},{"./Escaper":2,"./Exception/DumpException":3,"./Exception/ParseException":4,"./Exception/ParseMore":5,"./Pattern":8,"./Unescaper":9,"./Utils":10}],7:[function(e,t,n){var i,r,s,l,u,a;i=e("./Inline");u=e("./Pattern");a=e("./Utils");r=e("./Exception/ParseException");s=e("./Exception/ParseMore");l=function(){e.prototype.PATTERN_FOLDED_SCALAR_ALL=new u("^(?:(?![^\\|>]*)\\s+)?(?\\||>)(?\\+|\\-|\\d+|\\+\\d+|\\-\\d+|\\d+\\+|\\d+\\-)?(? +#.*)?$");e.prototype.PATTERN_FOLDED_SCALAR_END=new u("(?\\||>)(?\\+|\\-|\\d+|\\+\\d+|\\-\\d+|\\d+\\+|\\d+\\-)?(? +#.*)?$");e.prototype.PATTERN_SEQUENCE_ITEM=new u("^\\-((?\\s+)(?.+?))?\\s*$");e.prototype.PATTERN_ANCHOR_VALUE=new u("^&(?[^ ]+) *(?.*)");e.prototype.PATTERN_COMPACT_NOTATION=new u("^(?"+i.REGEX_QUOTED_STRING+"|[^ '\"\\{\\[].*?) *\\:(\\s+(?.+?))?\\s*$");e.prototype.PATTERN_MAPPING_ITEM=new u("^(?"+i.REGEX_QUOTED_STRING+"|[^ '\"\\[\\{].*?) *\\:(\\s+(?.+?))?\\s*$");e.prototype.PATTERN_DECIMAL=new u("\\d+");e.prototype.PATTERN_INDENT_SPACES=new u("^ +");e.prototype.PATTERN_TRAILING_LINES=new u("(\n*)$");e.prototype.PATTERN_YAML_HEADER=new u("^\\%YAML[: ][\\d\\.]+.*\n","m");e.prototype.PATTERN_LEADING_COMMENTS=new u("^(\\#.*?\n)+","m");e.prototype.PATTERN_DOCUMENT_MARKER_START=new u("^\\-\\-\\-.*?\n","m");e.prototype.PATTERN_DOCUMENT_MARKER_END=new u("^\\.\\.\\.\\s*$","m");e.prototype.PATTERN_FOLDED_SCALAR_BY_INDENTATION={};e.prototype.CONTEXT_NONE=0;e.prototype.CONTEXT_SEQUENCE=1;e.prototype.CONTEXT_MAPPING=2;function e(e){this.offset=e!=null?e:0;this.lines=[];this.currentLineNb=-1;this.currentLine="";this.refs={}}e.prototype.parse=function(t,n,s){var l,u,o,f,c,h,p,E,T,_,A,L,d,N,g,R,x,C,I,m,S,w,v,y,P,b,D,O,M,G,U,X,F,k,H,j,Y,B,Q;if(n==null){n=false}if(s==null){s=null}this.currentLineNb=-1;this.currentLine="";this.lines=this.cleanup(t).split("\n");h=null;c=this.CONTEXT_NONE;u=false;while(this.moveToNextLine()){if(this.isCurrentLineEmpty()){continue}if("\t"===this.currentLine[0]){throw new r("A YAML file cannot contain tabs as indentation.",this.getRealCurrentLineNb()+1,this.currentLine)}N=D=false;if(Q=this.PATTERN_SEQUENCE_ITEM.exec(this.currentLine)){if(this.CONTEXT_MAPPING===c){throw new r("You cannot define a sequence item when in a mapping")}c=this.CONTEXT_SEQUENCE;if(h==null){h=[]}if(Q.value!=null&&(b=this.PATTERN_ANCHOR_VALUE.exec(Q.value))){N=b.ref;Q.value=b.value}if(!(Q.value!=null)||""===a.trim(Q.value," ")||a.ltrim(Q.value," ").indexOf("#")===0){if(this.currentLineNb=l){n.push(this.currentLine.slice(l))}else if(a.ltrim(this.currentLine).charAt(0)==="#"){}else if(0===i){this.moveToPreviousLine();break}else{throw new r("Indentation problem.",this.getRealCurrentLineNb()+1,this.currentLine)}}return n.join("\n")};e.prototype.moveToNextLine=function(){if(this.currentLineNb>=this.lines.length-1){return false}this.currentLine=this.lines[++this.currentLineNb];return true};e.prototype.moveToPreviousLine=function(){this.currentLine=this.lines[--this.currentLineNb]};e.prototype.parseValue=function(e,t,n){var l,u,o,f,c,h,p,E,T;if(0===e.indexOf("*")){h=e.indexOf("#");if(h!==-1){e=e.substr(1,h-2)}else{e=e.slice(1)}if(this.refs[e]===void 0){throw new r('Reference "'+e+'" does not exist.',this.currentLine)}return this.refs[e]}if(f=this.PATTERN_FOLDED_SCALAR_ALL.exec(e)){c=(p=f.modifiers)!=null?p:"";o=Math.abs(parseInt(c));if(isNaN(o)){o=0}T=this.parseFoldedScalar(f.separator,this.PATTERN_DECIMAL.replace(c,""),o);if(f.type!=null){i.configure(t,n);return i.parseScalar(f.type+" "+T)}else{return T}}if((E=e.charAt(0))==="["||E==="{"||E==='"'||E==="'"){while(true){try{return i.parse(e,t,n)}catch(u){l=u;if(l instanceof s&&this.moveToNextLine()){e+="\n"+a.trim(this.currentLine," ")}else{l.parsedLine=this.getRealCurrentLineNb()+1;l.snippet=this.currentLine;throw l}}}}else{if(this.isNextLineIndented()){e+="\n"+this.getNextEmbedBlock()}return i.parse(e,t,n)}};e.prototype.parseFoldedScalar=function(t,n,i){var r,s,l,o,f,c,h,p,E,T;if(n==null){n=""}if(i==null){i=0}h=this.moveToNextLine();if(!h){return""}r=this.isCurrentLineBlank();T="";while(h&&r){if(h=this.moveToNextLine()){T+="\n";r=this.isCurrentLineBlank()}}if(0===i){if(f=this.PATTERN_INDENT_SPACES.exec(this.currentLine)){i=f[0].length}}if(i>0){p=this.PATTERN_FOLDED_SCALAR_BY_INDENTATION[i];if(p==null){p=new u("^ {"+i+"}(.*)$");e.prototype.PATTERN_FOLDED_SCALAR_BY_INDENTATION[i]=p}while(h&&(r||(f=p.exec(this.currentLine)))){if(r){T+=this.currentLine.slice(i)}else{T+=f[1]}if(h=this.moveToNextLine()){T+="\n";r=this.isCurrentLineBlank()}}}else if(h){T+="\n"}if(h){this.moveToPreviousLine()}if(">"===t){c="";E=T.split("\n");for(s=0,l=E.length;sn){i=true}this.moveToPreviousLine();return i};e.prototype.isCurrentLineEmpty=function(){var e;e=a.trim(this.currentLine," ");return e.length===0||e.charAt(0)==="#"};e.prototype.isCurrentLineBlank=function(){return""===a.trim(this.currentLine," ")};e.prototype.isCurrentLineComment=function(){var e;e=a.ltrim(this.currentLine," ");return e.charAt(0)==="#"};e.prototype.cleanup=function(e){var t,n,i,r,s,l,u,o,f,c,h,p,E,T;if(e.indexOf("\r")!==-1){e=e.split("\r\n").join("\n").split("\r").join("\n")}t=0;c=this.PATTERN_YAML_HEADER.replaceAll(e,""),e=c[0],t=c[1];this.offset+=t;h=this.PATTERN_LEADING_COMMENTS.replaceAll(e,"",1),T=h[0],t=h[1];if(t===1){this.offset+=a.subStrCount(e,"\n")-a.subStrCount(T,"\n");e=T}p=this.PATTERN_DOCUMENT_MARKER_START.replaceAll(e,"",1),T=p[0],t=p[1];if(t===1){this.offset+=a.subStrCount(e,"\n")-a.subStrCount(T,"\n");e=T;e=this.PATTERN_DOCUMENT_MARKER_END.replace(e,"")}f=e.split("\n");E=-1;for(r=0,l=f.length;r0){for(n=s=0,u=f.length;s"){r+="(";s++;if(a.length>0){if(u==null){u={}}u[a]=i}break}else{a+=f}s++}}else{r+=n;i++}}else{r+=n}}else{r+=n}s++}this.rawRegex=e;this.cleanedRegex=r;this.regex=new RegExp(this.cleanedRegex,"g"+t.replace("g",""));this.mapping=u}e.prototype.exec=function(e){var t,n,i,r;this.regex.lastIndex=0;n=this.regex.exec(e);if(n==null){return null}if(this.mapping!=null){r=this.mapping;for(i in r){t=r[i];n[i]=n[t]}}return n};e.prototype.test=function(e){this.regex.lastIndex=0;return this.regex.test(e)};e.prototype.replace=function(e,t){this.regex.lastIndex=0;return e.replace(this.regex,t)};e.prototype.replaceAll=function(e,t,n){var i;if(n==null){n=0}this.regex.lastIndex=0;i=0;while(this.regex.test(e)&&(n===0||i[0-9][0-9][0-9][0-9])"+"-(?[0-9][0-9]?)"+"-(?[0-9][0-9]?)"+"(?:(?:[Tt]|[ \t]+)"+"(?[0-9][0-9]?)"+":(?[0-9][0-9])"+":(?[0-9][0-9])"+"(?:.(?[0-9]*))?"+"(?:[ \t]*(?Z|(?[-+])(?[0-9][0-9]?)"+"(?::(?[0-9][0-9]))?))?)?"+"$","i");t.LOCAL_TIMEZONE_OFFSET=(new Date).getTimezoneOffset()*60*1e3;t.trim=function(e,t){var n,i;if(t==null){t="\\s"}n=this.REGEX_LEFT_TRIM_BY_CHAR[t];if(n==null){this.REGEX_LEFT_TRIM_BY_CHAR[t]=n=new RegExp("^"+t+""+t+"*")}n.lastIndex=0;i=this.REGEX_RIGHT_TRIM_BY_CHAR[t];if(i==null){this.REGEX_RIGHT_TRIM_BY_CHAR[t]=i=new RegExp(t+""+t+"*$")}i.lastIndex=0;return e.replace(n,"").replace(i,"")};t.ltrim=function(e,t){var n;if(t==null){t="\\s"}n=this.REGEX_LEFT_TRIM_BY_CHAR[t];if(n==null){this.REGEX_LEFT_TRIM_BY_CHAR[t]=n=new RegExp("^"+t+""+t+"*")}n.lastIndex=0;return e.replace(n,"")};t.rtrim=function(e,t){var n;if(t==null){t="\\s"}n=this.REGEX_RIGHT_TRIM_BY_CHAR[t];if(n==null){this.REGEX_RIGHT_TRIM_BY_CHAR[t]=n=new RegExp(t+""+t+"*$")}n.lastIndex=0;return e.replace(n,"")};t.isEmpty=function(e){return!e||e===""||e==="0"||e instanceof Array&&e.length===0||this.isEmptyObject(e)};t.isEmptyObject=function(e){var t;return e instanceof Object&&function(){var n;n=[];for(t in e){if(!s.call(e,t))continue;n.push(t)}return n}().length===0};t.subStrCount=function(e,t,n,i){var r,s,l,u,a,o;r=0;e=""+e;t=""+t;if(n!=null){e=e.slice(n)}if(i!=null){e=e.slice(0,i)}u=e.length;o=t.length;for(s=l=0,a=u;0<=a?la;s=0<=a?++l:--l){if(t===e.slice(s,o)){r++;s+=o-1}}return r};t.isDigits=function(e){this.REGEX_DIGITS.lastIndex=0;return this.REGEX_DIGITS.test(e)};t.octDec=function(e){this.REGEX_OCTAL.lastIndex=0;return parseInt((e+"").replace(this.REGEX_OCTAL,""),8)};t.hexDec=function(e){this.REGEX_HEXADECIMAL.lastIndex=0;e=this.trim(e);if((e+"").slice(0,2)==="0x"){e=(e+"").slice(2)}return parseInt((e+"").replace(this.REGEX_HEXADECIMAL,""),16)};t.utf8chr=function(e){var t;t=String.fromCharCode;if(128>(e%=2097152)){return t(e)}if(2048>e){return t(192|e>>6)+t(128|e&63)}if(65536>e){return t(224|e>>12)+t(128|e>>6&63)+t(128|e&63)}return t(240|e>>18)+t(128|e>>12&63)+t(128|e>>6&63)+t(128|e&63)};t.parseBoolean=function(e,t){var n;if(t==null){t=true}if(typeof e==="string"){n=e.toLowerCase();if(!t){if(n==="no"){return false}}if(n==="0"){return false}if(n==="false"){return false}if(n===""){return false}return true}return!!e};t.isNumeric=function(e){this.REGEX_SPACES.lastIndex=0;return typeof e==="number"||typeof e==="string"&&!isNaN(e)&&e.replace(this.REGEX_SPACES,"")!==""};t.stringToDate=function(e){var t,n,i,r,s,l,u,a,o,f,c,h;if(!(e!=null?e.length:void 0)){return null}s=this.PATTERN_DATE.exec(e);if(!s){return null}h=parseInt(s.year,10);u=parseInt(s.month,10)-1;n=parseInt(s.day,10);if(s.hour==null){t=new Date(Date.UTC(h,u,n));return t}r=parseInt(s.hour,10);l=parseInt(s.minute,10);a=parseInt(s.second,10);if(s.fraction!=null){i=s.fraction.slice(0,3);while(i.length<3){i+="0"}i=parseInt(i,10)}else{i=0}if(s.tz!=null){o=parseInt(s.tz_hour,10);if(s.tz_minute!=null){f=parseInt(s.tz_minute,10)}else{f=0}c=(o*60+f)*6e4;if("-"===s.tz_sign){c*=-1}}t=new Date(Date.UTC(h,u,n,r,l,a,i));if(c){t.setTime(t.getTime()-c)}return t};t.strRepeat=function(e,t){var n,i;i="";n=0;while(n ref; i = 0 <= ref ? ++j : --j) { + mapping[Escaper.LIST_ESCAPEES[i]] = Escaper.LIST_ESCAPED[i]; + } + return mapping; + })(); + + Escaper.PATTERN_CHARACTERS_TO_ESCAPE = new Pattern('[\\x00-\\x1f]|\xc2\x85|\xc2\xa0|\xe2\x80\xa8|\xe2\x80\xa9'); + + Escaper.PATTERN_MAPPING_ESCAPEES = new Pattern(Escaper.LIST_ESCAPEES.join('|').split('\\').join('\\\\')); + + Escaper.PATTERN_SINGLE_QUOTING = new Pattern('[\\s\'":{}[\\],&*#?]|^[-?|<>=!%@`]'); + + Escaper.requiresDoubleQuoting = function(value) { + return this.PATTERN_CHARACTERS_TO_ESCAPE.test(value); + }; + + Escaper.escapeWithDoubleQuotes = function(value) { + var result; + result = this.PATTERN_MAPPING_ESCAPEES.replace(value, (function(_this) { + return function(str) { + return _this.MAPPING_ESCAPEES_TO_ESCAPED[str]; + }; + })(this)); + return '"' + result + '"'; + }; + + Escaper.requiresSingleQuoting = function(value) { + return this.PATTERN_SINGLE_QUOTING.test(value); + }; + + Escaper.escapeWithSingleQuotes = function(value) { + return "'" + value.replace(/'/g, "''") + "'"; + }; + + return Escaper; + +})(); + +module.exports = Escaper; diff --git a/node_modules/yamljs/lib/Exception/DumpException.js b/node_modules/yamljs/lib/Exception/DumpException.js new file mode 100644 index 00000000..80f61ac1 --- /dev/null +++ b/node_modules/yamljs/lib/Exception/DumpException.js @@ -0,0 +1,27 @@ +// Generated by CoffeeScript 1.12.4 +var DumpException, + extend = 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; }, + hasProp = {}.hasOwnProperty; + +DumpException = (function(superClass) { + extend(DumpException, superClass); + + function DumpException(message, parsedLine, snippet) { + this.message = message; + this.parsedLine = parsedLine; + this.snippet = snippet; + } + + DumpException.prototype.toString = function() { + if ((this.parsedLine != null) && (this.snippet != null)) { + return ' ' + this.message + ' (line ' + this.parsedLine + ': \'' + this.snippet + '\')'; + } else { + return ' ' + this.message; + } + }; + + return DumpException; + +})(Error); + +module.exports = DumpException; diff --git a/node_modules/yamljs/lib/Exception/ParseException.js b/node_modules/yamljs/lib/Exception/ParseException.js new file mode 100644 index 00000000..a50ffc52 --- /dev/null +++ b/node_modules/yamljs/lib/Exception/ParseException.js @@ -0,0 +1,27 @@ +// Generated by CoffeeScript 1.12.4 +var ParseException, + extend = 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; }, + hasProp = {}.hasOwnProperty; + +ParseException = (function(superClass) { + extend(ParseException, superClass); + + function ParseException(message, parsedLine, snippet) { + this.message = message; + this.parsedLine = parsedLine; + this.snippet = snippet; + } + + ParseException.prototype.toString = function() { + if ((this.parsedLine != null) && (this.snippet != null)) { + return ' ' + this.message + ' (line ' + this.parsedLine + ': \'' + this.snippet + '\')'; + } else { + return ' ' + this.message; + } + }; + + return ParseException; + +})(Error); + +module.exports = ParseException; diff --git a/node_modules/yamljs/lib/Exception/ParseMore.js b/node_modules/yamljs/lib/Exception/ParseMore.js new file mode 100644 index 00000000..88c8776d --- /dev/null +++ b/node_modules/yamljs/lib/Exception/ParseMore.js @@ -0,0 +1,27 @@ +// Generated by CoffeeScript 1.12.4 +var ParseMore, + extend = 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; }, + hasProp = {}.hasOwnProperty; + +ParseMore = (function(superClass) { + extend(ParseMore, superClass); + + function ParseMore(message, parsedLine, snippet) { + this.message = message; + this.parsedLine = parsedLine; + this.snippet = snippet; + } + + ParseMore.prototype.toString = function() { + if ((this.parsedLine != null) && (this.snippet != null)) { + return ' ' + this.message + ' (line ' + this.parsedLine + ': \'' + this.snippet + '\')'; + } else { + return ' ' + this.message; + } + }; + + return ParseMore; + +})(Error); + +module.exports = ParseMore; diff --git a/node_modules/yamljs/lib/Inline.js b/node_modules/yamljs/lib/Inline.js new file mode 100644 index 00000000..aaf980b4 --- /dev/null +++ b/node_modules/yamljs/lib/Inline.js @@ -0,0 +1,485 @@ +// Generated by CoffeeScript 1.12.4 +var DumpException, Escaper, Inline, ParseException, ParseMore, Pattern, Unescaper, Utils, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + +Pattern = require('./Pattern'); + +Unescaper = require('./Unescaper'); + +Escaper = require('./Escaper'); + +Utils = require('./Utils'); + +ParseException = require('./Exception/ParseException'); + +ParseMore = require('./Exception/ParseMore'); + +DumpException = require('./Exception/DumpException'); + +Inline = (function() { + function Inline() {} + + Inline.REGEX_QUOTED_STRING = '(?:"(?:[^"\\\\]*(?:\\\\.[^"\\\\]*)*)"|\'(?:[^\']*(?:\'\'[^\']*)*)\')'; + + Inline.PATTERN_TRAILING_COMMENTS = new Pattern('^\\s*#.*$'); + + Inline.PATTERN_QUOTED_SCALAR = new Pattern('^' + Inline.REGEX_QUOTED_STRING); + + Inline.PATTERN_THOUSAND_NUMERIC_SCALAR = new Pattern('^(-|\\+)?[0-9,]+(\\.[0-9]+)?$'); + + Inline.PATTERN_SCALAR_BY_DELIMITERS = {}; + + Inline.settings = {}; + + Inline.configure = function(exceptionOnInvalidType, objectDecoder) { + if (exceptionOnInvalidType == null) { + exceptionOnInvalidType = null; + } + if (objectDecoder == null) { + objectDecoder = null; + } + this.settings.exceptionOnInvalidType = exceptionOnInvalidType; + this.settings.objectDecoder = objectDecoder; + }; + + Inline.parse = function(value, exceptionOnInvalidType, objectDecoder) { + var context, result; + if (exceptionOnInvalidType == null) { + exceptionOnInvalidType = false; + } + if (objectDecoder == null) { + objectDecoder = null; + } + this.settings.exceptionOnInvalidType = exceptionOnInvalidType; + this.settings.objectDecoder = objectDecoder; + if (value == null) { + return ''; + } + value = Utils.trim(value); + if (0 === value.length) { + return ''; + } + context = { + exceptionOnInvalidType: exceptionOnInvalidType, + objectDecoder: objectDecoder, + i: 0 + }; + switch (value.charAt(0)) { + case '[': + result = this.parseSequence(value, context); + ++context.i; + break; + case '{': + result = this.parseMapping(value, context); + ++context.i; + break; + default: + result = this.parseScalar(value, null, ['"', "'"], context); + } + if (this.PATTERN_TRAILING_COMMENTS.replace(value.slice(context.i), '') !== '') { + throw new ParseException('Unexpected characters near "' + value.slice(context.i) + '".'); + } + return result; + }; + + Inline.dump = function(value, exceptionOnInvalidType, objectEncoder) { + var ref, result, type; + if (exceptionOnInvalidType == null) { + exceptionOnInvalidType = false; + } + if (objectEncoder == null) { + objectEncoder = null; + } + if (value == null) { + return 'null'; + } + type = typeof value; + if (type === 'object') { + if (value instanceof Date) { + return value.toISOString(); + } else if (objectEncoder != null) { + result = objectEncoder(value); + if (typeof result === 'string' || (result != null)) { + return result; + } + } + return this.dumpObject(value); + } + if (type === 'boolean') { + return (value ? 'true' : 'false'); + } + if (Utils.isDigits(value)) { + return (type === 'string' ? "'" + value + "'" : String(parseInt(value))); + } + if (Utils.isNumeric(value)) { + return (type === 'string' ? "'" + value + "'" : String(parseFloat(value))); + } + if (type === 'number') { + return (value === 2e308 ? '.Inf' : (value === -2e308 ? '-.Inf' : (isNaN(value) ? '.NaN' : value))); + } + if (Escaper.requiresDoubleQuoting(value)) { + return Escaper.escapeWithDoubleQuotes(value); + } + if (Escaper.requiresSingleQuoting(value)) { + return Escaper.escapeWithSingleQuotes(value); + } + if ('' === value) { + return '""'; + } + if (Utils.PATTERN_DATE.test(value)) { + return "'" + value + "'"; + } + if ((ref = value.toLowerCase()) === 'null' || ref === '~' || ref === 'true' || ref === 'false') { + return "'" + value + "'"; + } + return value; + }; + + Inline.dumpObject = function(value, exceptionOnInvalidType, objectSupport) { + var j, key, len1, output, val; + if (objectSupport == null) { + objectSupport = null; + } + if (value instanceof Array) { + output = []; + for (j = 0, len1 = value.length; j < len1; j++) { + val = value[j]; + output.push(this.dump(val)); + } + return '[' + output.join(', ') + ']'; + } else { + output = []; + for (key in value) { + val = value[key]; + output.push(this.dump(key) + ': ' + this.dump(val)); + } + return '{' + output.join(', ') + '}'; + } + }; + + Inline.parseScalar = function(scalar, delimiters, stringDelimiters, context, evaluate) { + var i, joinedDelimiters, match, output, pattern, ref, ref1, strpos, tmp; + if (delimiters == null) { + delimiters = null; + } + if (stringDelimiters == null) { + stringDelimiters = ['"', "'"]; + } + if (context == null) { + context = null; + } + if (evaluate == null) { + evaluate = true; + } + if (context == null) { + context = { + exceptionOnInvalidType: this.settings.exceptionOnInvalidType, + objectDecoder: this.settings.objectDecoder, + i: 0 + }; + } + i = context.i; + if (ref = scalar.charAt(i), indexOf.call(stringDelimiters, ref) >= 0) { + output = this.parseQuotedScalar(scalar, context); + i = context.i; + if (delimiters != null) { + tmp = Utils.ltrim(scalar.slice(i), ' '); + if (!(ref1 = tmp.charAt(0), indexOf.call(delimiters, ref1) >= 0)) { + throw new ParseException('Unexpected characters (' + scalar.slice(i) + ').'); + } + } + } else { + if (!delimiters) { + output = scalar.slice(i); + i += output.length; + strpos = output.indexOf(' #'); + if (strpos !== -1) { + output = Utils.rtrim(output.slice(0, strpos)); + } + } else { + joinedDelimiters = delimiters.join('|'); + pattern = this.PATTERN_SCALAR_BY_DELIMITERS[joinedDelimiters]; + if (pattern == null) { + pattern = new Pattern('^(.+?)(' + joinedDelimiters + ')'); + this.PATTERN_SCALAR_BY_DELIMITERS[joinedDelimiters] = pattern; + } + if (match = pattern.exec(scalar.slice(i))) { + output = match[1]; + i += output.length; + } else { + throw new ParseException('Malformed inline YAML string (' + scalar + ').'); + } + } + if (evaluate) { + output = this.evaluateScalar(output, context); + } + } + context.i = i; + return output; + }; + + Inline.parseQuotedScalar = function(scalar, context) { + var i, match, output; + i = context.i; + if (!(match = this.PATTERN_QUOTED_SCALAR.exec(scalar.slice(i)))) { + throw new ParseMore('Malformed inline YAML string (' + scalar.slice(i) + ').'); + } + output = match[0].substr(1, match[0].length - 2); + if ('"' === scalar.charAt(i)) { + output = Unescaper.unescapeDoubleQuotedString(output); + } else { + output = Unescaper.unescapeSingleQuotedString(output); + } + i += match[0].length; + context.i = i; + return output; + }; + + Inline.parseSequence = function(sequence, context) { + var e, i, isQuoted, len, output, ref, value; + output = []; + len = sequence.length; + i = context.i; + i += 1; + while (i < len) { + context.i = i; + switch (sequence.charAt(i)) { + case '[': + output.push(this.parseSequence(sequence, context)); + i = context.i; + break; + case '{': + output.push(this.parseMapping(sequence, context)); + i = context.i; + break; + case ']': + return output; + case ',': + case ' ': + case "\n": + break; + default: + isQuoted = ((ref = sequence.charAt(i)) === '"' || ref === "'"); + value = this.parseScalar(sequence, [',', ']'], ['"', "'"], context); + i = context.i; + if (!isQuoted && typeof value === 'string' && (value.indexOf(': ') !== -1 || value.indexOf(":\n") !== -1)) { + try { + value = this.parseMapping('{' + value + '}'); + } catch (error) { + e = error; + } + } + output.push(value); + --i; + } + ++i; + } + throw new ParseMore('Malformed inline YAML string ' + sequence); + }; + + Inline.parseMapping = function(mapping, context) { + var done, i, key, len, output, shouldContinueWhileLoop, value; + output = {}; + len = mapping.length; + i = context.i; + i += 1; + shouldContinueWhileLoop = false; + while (i < len) { + context.i = i; + switch (mapping.charAt(i)) { + case ' ': + case ',': + case "\n": + ++i; + context.i = i; + shouldContinueWhileLoop = true; + break; + case '}': + return output; + } + if (shouldContinueWhileLoop) { + shouldContinueWhileLoop = false; + continue; + } + key = this.parseScalar(mapping, [':', ' ', "\n"], ['"', "'"], context, false); + i = context.i; + done = false; + while (i < len) { + context.i = i; + switch (mapping.charAt(i)) { + case '[': + value = this.parseSequence(mapping, context); + i = context.i; + if (output[key] === void 0) { + output[key] = value; + } + done = true; + break; + case '{': + value = this.parseMapping(mapping, context); + i = context.i; + if (output[key] === void 0) { + output[key] = value; + } + done = true; + break; + case ':': + case ' ': + case "\n": + break; + default: + value = this.parseScalar(mapping, [',', '}'], ['"', "'"], context); + i = context.i; + if (output[key] === void 0) { + output[key] = value; + } + done = true; + --i; + } + ++i; + if (done) { + break; + } + } + } + throw new ParseMore('Malformed inline YAML string ' + mapping); + }; + + Inline.evaluateScalar = function(scalar, context) { + var cast, date, exceptionOnInvalidType, firstChar, firstSpace, firstWord, objectDecoder, raw, scalarLower, subValue, trimmedScalar; + scalar = Utils.trim(scalar); + scalarLower = scalar.toLowerCase(); + switch (scalarLower) { + case 'null': + case '': + case '~': + return null; + case 'true': + return true; + case 'false': + return false; + case '.inf': + return 2e308; + case '.nan': + return 0/0; + case '-.inf': + return 2e308; + default: + firstChar = scalarLower.charAt(0); + switch (firstChar) { + case '!': + firstSpace = scalar.indexOf(' '); + if (firstSpace === -1) { + firstWord = scalarLower; + } else { + firstWord = scalarLower.slice(0, firstSpace); + } + switch (firstWord) { + case '!': + if (firstSpace !== -1) { + return parseInt(this.parseScalar(scalar.slice(2))); + } + return null; + case '!str': + return Utils.ltrim(scalar.slice(4)); + case '!!str': + return Utils.ltrim(scalar.slice(5)); + case '!!int': + return parseInt(this.parseScalar(scalar.slice(5))); + case '!!bool': + return Utils.parseBoolean(this.parseScalar(scalar.slice(6)), false); + case '!!float': + return parseFloat(this.parseScalar(scalar.slice(7))); + case '!!timestamp': + return Utils.stringToDate(Utils.ltrim(scalar.slice(11))); + default: + if (context == null) { + context = { + exceptionOnInvalidType: this.settings.exceptionOnInvalidType, + objectDecoder: this.settings.objectDecoder, + i: 0 + }; + } + objectDecoder = context.objectDecoder, exceptionOnInvalidType = context.exceptionOnInvalidType; + if (objectDecoder) { + trimmedScalar = Utils.rtrim(scalar); + firstSpace = trimmedScalar.indexOf(' '); + if (firstSpace === -1) { + return objectDecoder(trimmedScalar, null); + } else { + subValue = Utils.ltrim(trimmedScalar.slice(firstSpace + 1)); + if (!(subValue.length > 0)) { + subValue = null; + } + return objectDecoder(trimmedScalar.slice(0, firstSpace), subValue); + } + } + if (exceptionOnInvalidType) { + throw new ParseException('Custom object support when parsing a YAML file has been disabled.'); + } + return null; + } + break; + case '0': + if ('0x' === scalar.slice(0, 2)) { + return Utils.hexDec(scalar); + } else if (Utils.isDigits(scalar)) { + return Utils.octDec(scalar); + } else if (Utils.isNumeric(scalar)) { + return parseFloat(scalar); + } else { + return scalar; + } + break; + case '+': + if (Utils.isDigits(scalar)) { + raw = scalar; + cast = parseInt(raw); + if (raw === String(cast)) { + return cast; + } else { + return raw; + } + } else if (Utils.isNumeric(scalar)) { + return parseFloat(scalar); + } else if (this.PATTERN_THOUSAND_NUMERIC_SCALAR.test(scalar)) { + return parseFloat(scalar.replace(',', '')); + } + return scalar; + case '-': + if (Utils.isDigits(scalar.slice(1))) { + if ('0' === scalar.charAt(1)) { + return -Utils.octDec(scalar.slice(1)); + } else { + raw = scalar.slice(1); + cast = parseInt(raw); + if (raw === String(cast)) { + return -cast; + } else { + return -raw; + } + } + } else if (Utils.isNumeric(scalar)) { + return parseFloat(scalar); + } else if (this.PATTERN_THOUSAND_NUMERIC_SCALAR.test(scalar)) { + return parseFloat(scalar.replace(',', '')); + } + return scalar; + default: + if (date = Utils.stringToDate(scalar)) { + return date; + } else if (Utils.isNumeric(scalar)) { + return parseFloat(scalar); + } else if (this.PATTERN_THOUSAND_NUMERIC_SCALAR.test(scalar)) { + return parseFloat(scalar.replace(',', '')); + } + return scalar; + } + } + }; + + return Inline; + +})(); + +module.exports = Inline; diff --git a/node_modules/yamljs/lib/Parser.js b/node_modules/yamljs/lib/Parser.js new file mode 100644 index 00000000..93237bf1 --- /dev/null +++ b/node_modules/yamljs/lib/Parser.js @@ -0,0 +1,603 @@ +// Generated by CoffeeScript 1.12.4 +var Inline, ParseException, ParseMore, Parser, Pattern, Utils; + +Inline = require('./Inline'); + +Pattern = require('./Pattern'); + +Utils = require('./Utils'); + +ParseException = require('./Exception/ParseException'); + +ParseMore = require('./Exception/ParseMore'); + +Parser = (function() { + Parser.prototype.PATTERN_FOLDED_SCALAR_ALL = new Pattern('^(?:(?![^\\|>]*)\\s+)?(?\\||>)(?\\+|\\-|\\d+|\\+\\d+|\\-\\d+|\\d+\\+|\\d+\\-)?(? +#.*)?$'); + + Parser.prototype.PATTERN_FOLDED_SCALAR_END = new Pattern('(?\\||>)(?\\+|\\-|\\d+|\\+\\d+|\\-\\d+|\\d+\\+|\\d+\\-)?(? +#.*)?$'); + + Parser.prototype.PATTERN_SEQUENCE_ITEM = new Pattern('^\\-((?\\s+)(?.+?))?\\s*$'); + + Parser.prototype.PATTERN_ANCHOR_VALUE = new Pattern('^&(?[^ ]+) *(?.*)'); + + Parser.prototype.PATTERN_COMPACT_NOTATION = new Pattern('^(?' + Inline.REGEX_QUOTED_STRING + '|[^ \'"\\{\\[].*?) *\\:(\\s+(?.+?))?\\s*$'); + + Parser.prototype.PATTERN_MAPPING_ITEM = new Pattern('^(?' + Inline.REGEX_QUOTED_STRING + '|[^ \'"\\[\\{].*?) *\\:(\\s+(?.+?))?\\s*$'); + + Parser.prototype.PATTERN_DECIMAL = new Pattern('\\d+'); + + Parser.prototype.PATTERN_INDENT_SPACES = new Pattern('^ +'); + + Parser.prototype.PATTERN_TRAILING_LINES = new Pattern('(\n*)$'); + + Parser.prototype.PATTERN_YAML_HEADER = new Pattern('^\\%YAML[: ][\\d\\.]+.*\n', 'm'); + + Parser.prototype.PATTERN_LEADING_COMMENTS = new Pattern('^(\\#.*?\n)+', 'm'); + + Parser.prototype.PATTERN_DOCUMENT_MARKER_START = new Pattern('^\\-\\-\\-.*?\n', 'm'); + + Parser.prototype.PATTERN_DOCUMENT_MARKER_END = new Pattern('^\\.\\.\\.\\s*$', 'm'); + + Parser.prototype.PATTERN_FOLDED_SCALAR_BY_INDENTATION = {}; + + Parser.prototype.CONTEXT_NONE = 0; + + Parser.prototype.CONTEXT_SEQUENCE = 1; + + Parser.prototype.CONTEXT_MAPPING = 2; + + function Parser(offset) { + this.offset = offset != null ? offset : 0; + this.lines = []; + this.currentLineNb = -1; + this.currentLine = ''; + this.refs = {}; + } + + Parser.prototype.parse = function(value, exceptionOnInvalidType, objectDecoder) { + var alias, allowOverwrite, block, c, context, data, e, first, i, indent, isRef, j, k, key, l, lastKey, len, len1, len2, len3, lineCount, m, matches, mergeNode, n, name, parsed, parsedItem, parser, ref, ref1, ref2, refName, refValue, val, values; + if (exceptionOnInvalidType == null) { + exceptionOnInvalidType = false; + } + if (objectDecoder == null) { + objectDecoder = null; + } + this.currentLineNb = -1; + this.currentLine = ''; + this.lines = this.cleanup(value).split("\n"); + data = null; + context = this.CONTEXT_NONE; + allowOverwrite = false; + while (this.moveToNextLine()) { + if (this.isCurrentLineEmpty()) { + continue; + } + if ("\t" === this.currentLine[0]) { + throw new ParseException('A YAML file cannot contain tabs as indentation.', this.getRealCurrentLineNb() + 1, this.currentLine); + } + isRef = mergeNode = false; + if (values = this.PATTERN_SEQUENCE_ITEM.exec(this.currentLine)) { + if (this.CONTEXT_MAPPING === context) { + throw new ParseException('You cannot define a sequence item when in a mapping'); + } + context = this.CONTEXT_SEQUENCE; + if (data == null) { + data = []; + } + if ((values.value != null) && (matches = this.PATTERN_ANCHOR_VALUE.exec(values.value))) { + isRef = matches.ref; + values.value = matches.value; + } + if (!(values.value != null) || '' === Utils.trim(values.value, ' ') || Utils.ltrim(values.value, ' ').indexOf('#') === 0) { + if (this.currentLineNb < this.lines.length - 1 && !this.isNextLineUnIndentedCollection()) { + c = this.getRealCurrentLineNb() + 1; + parser = new Parser(c); + parser.refs = this.refs; + data.push(parser.parse(this.getNextEmbedBlock(null, true), exceptionOnInvalidType, objectDecoder)); + } else { + data.push(null); + } + } else { + if (((ref = values.leadspaces) != null ? ref.length : void 0) && (matches = this.PATTERN_COMPACT_NOTATION.exec(values.value))) { + c = this.getRealCurrentLineNb(); + parser = new Parser(c); + parser.refs = this.refs; + block = values.value; + indent = this.getCurrentLineIndentation(); + if (this.isNextLineIndented(false)) { + block += "\n" + this.getNextEmbedBlock(indent + values.leadspaces.length + 1, true); + } + data.push(parser.parse(block, exceptionOnInvalidType, objectDecoder)); + } else { + data.push(this.parseValue(values.value, exceptionOnInvalidType, objectDecoder)); + } + } + } else if ((values = this.PATTERN_MAPPING_ITEM.exec(this.currentLine)) && values.key.indexOf(' #') === -1) { + if (this.CONTEXT_SEQUENCE === context) { + throw new ParseException('You cannot define a mapping item when in a sequence'); + } + context = this.CONTEXT_MAPPING; + if (data == null) { + data = {}; + } + Inline.configure(exceptionOnInvalidType, objectDecoder); + try { + key = Inline.parseScalar(values.key); + } catch (error) { + e = error; + e.parsedLine = this.getRealCurrentLineNb() + 1; + e.snippet = this.currentLine; + throw e; + } + if ('<<' === key) { + mergeNode = true; + allowOverwrite = true; + if (((ref1 = values.value) != null ? ref1.indexOf('*') : void 0) === 0) { + refName = values.value.slice(1); + if (this.refs[refName] == null) { + throw new ParseException('Reference "' + refName + '" does not exist.', this.getRealCurrentLineNb() + 1, this.currentLine); + } + refValue = this.refs[refName]; + if (typeof refValue !== 'object') { + throw new ParseException('YAML merge keys used with a scalar value instead of an object.', this.getRealCurrentLineNb() + 1, this.currentLine); + } + if (refValue instanceof Array) { + for (i = j = 0, len = refValue.length; j < len; i = ++j) { + value = refValue[i]; + if (data[name = String(i)] == null) { + data[name] = value; + } + } + } else { + for (key in refValue) { + value = refValue[key]; + if (data[key] == null) { + data[key] = value; + } + } + } + } else { + if ((values.value != null) && values.value !== '') { + value = values.value; + } else { + value = this.getNextEmbedBlock(); + } + c = this.getRealCurrentLineNb() + 1; + parser = new Parser(c); + parser.refs = this.refs; + parsed = parser.parse(value, exceptionOnInvalidType); + if (typeof parsed !== 'object') { + throw new ParseException('YAML merge keys used with a scalar value instead of an object.', this.getRealCurrentLineNb() + 1, this.currentLine); + } + if (parsed instanceof Array) { + for (l = 0, len1 = parsed.length; l < len1; l++) { + parsedItem = parsed[l]; + if (typeof parsedItem !== 'object') { + throw new ParseException('Merge items must be objects.', this.getRealCurrentLineNb() + 1, parsedItem); + } + if (parsedItem instanceof Array) { + for (i = m = 0, len2 = parsedItem.length; m < len2; i = ++m) { + value = parsedItem[i]; + k = String(i); + if (!data.hasOwnProperty(k)) { + data[k] = value; + } + } + } else { + for (key in parsedItem) { + value = parsedItem[key]; + if (!data.hasOwnProperty(key)) { + data[key] = value; + } + } + } + } + } else { + for (key in parsed) { + value = parsed[key]; + if (!data.hasOwnProperty(key)) { + data[key] = value; + } + } + } + } + } else if ((values.value != null) && (matches = this.PATTERN_ANCHOR_VALUE.exec(values.value))) { + isRef = matches.ref; + values.value = matches.value; + } + if (mergeNode) { + + } else if (!(values.value != null) || '' === Utils.trim(values.value, ' ') || Utils.ltrim(values.value, ' ').indexOf('#') === 0) { + if (!(this.isNextLineIndented()) && !(this.isNextLineUnIndentedCollection())) { + if (allowOverwrite || data[key] === void 0) { + data[key] = null; + } + } else { + c = this.getRealCurrentLineNb() + 1; + parser = new Parser(c); + parser.refs = this.refs; + val = parser.parse(this.getNextEmbedBlock(), exceptionOnInvalidType, objectDecoder); + if (allowOverwrite || data[key] === void 0) { + data[key] = val; + } + } + } else { + val = this.parseValue(values.value, exceptionOnInvalidType, objectDecoder); + if (allowOverwrite || data[key] === void 0) { + data[key] = val; + } + } + } else { + lineCount = this.lines.length; + if (1 === lineCount || (2 === lineCount && Utils.isEmpty(this.lines[1]))) { + try { + value = Inline.parse(this.lines[0], exceptionOnInvalidType, objectDecoder); + } catch (error) { + e = error; + e.parsedLine = this.getRealCurrentLineNb() + 1; + e.snippet = this.currentLine; + throw e; + } + if (typeof value === 'object') { + if (value instanceof Array) { + first = value[0]; + } else { + for (key in value) { + first = value[key]; + break; + } + } + if (typeof first === 'string' && first.indexOf('*') === 0) { + data = []; + for (n = 0, len3 = value.length; n < len3; n++) { + alias = value[n]; + data.push(this.refs[alias.slice(1)]); + } + value = data; + } + } + return value; + } else if ((ref2 = Utils.ltrim(value).charAt(0)) === '[' || ref2 === '{') { + try { + return Inline.parse(value, exceptionOnInvalidType, objectDecoder); + } catch (error) { + e = error; + e.parsedLine = this.getRealCurrentLineNb() + 1; + e.snippet = this.currentLine; + throw e; + } + } + throw new ParseException('Unable to parse.', this.getRealCurrentLineNb() + 1, this.currentLine); + } + if (isRef) { + if (data instanceof Array) { + this.refs[isRef] = data[data.length - 1]; + } else { + lastKey = null; + for (key in data) { + lastKey = key; + } + this.refs[isRef] = data[lastKey]; + } + } + } + if (Utils.isEmpty(data)) { + return null; + } else { + return data; + } + }; + + Parser.prototype.getRealCurrentLineNb = function() { + return this.currentLineNb + this.offset; + }; + + Parser.prototype.getCurrentLineIndentation = function() { + return this.currentLine.length - Utils.ltrim(this.currentLine, ' ').length; + }; + + Parser.prototype.getNextEmbedBlock = function(indentation, includeUnindentedCollection) { + var data, indent, isItUnindentedCollection, newIndent, removeComments, removeCommentsPattern, unindentedEmbedBlock; + if (indentation == null) { + indentation = null; + } + if (includeUnindentedCollection == null) { + includeUnindentedCollection = false; + } + this.moveToNextLine(); + if (indentation == null) { + newIndent = this.getCurrentLineIndentation(); + unindentedEmbedBlock = this.isStringUnIndentedCollectionItem(this.currentLine); + if (!(this.isCurrentLineEmpty()) && 0 === newIndent && !unindentedEmbedBlock) { + throw new ParseException('Indentation problem.', this.getRealCurrentLineNb() + 1, this.currentLine); + } + } else { + newIndent = indentation; + } + data = [this.currentLine.slice(newIndent)]; + if (!includeUnindentedCollection) { + isItUnindentedCollection = this.isStringUnIndentedCollectionItem(this.currentLine); + } + removeCommentsPattern = this.PATTERN_FOLDED_SCALAR_END; + removeComments = !removeCommentsPattern.test(this.currentLine); + while (this.moveToNextLine()) { + indent = this.getCurrentLineIndentation(); + if (indent === newIndent) { + removeComments = !removeCommentsPattern.test(this.currentLine); + } + if (removeComments && this.isCurrentLineComment()) { + continue; + } + if (this.isCurrentLineBlank()) { + data.push(this.currentLine.slice(newIndent)); + continue; + } + if (isItUnindentedCollection && !this.isStringUnIndentedCollectionItem(this.currentLine) && indent === newIndent) { + this.moveToPreviousLine(); + break; + } + if (indent >= newIndent) { + data.push(this.currentLine.slice(newIndent)); + } else if (Utils.ltrim(this.currentLine).charAt(0) === '#') { + + } else if (0 === indent) { + this.moveToPreviousLine(); + break; + } else { + throw new ParseException('Indentation problem.', this.getRealCurrentLineNb() + 1, this.currentLine); + } + } + return data.join("\n"); + }; + + Parser.prototype.moveToNextLine = function() { + if (this.currentLineNb >= this.lines.length - 1) { + return false; + } + this.currentLine = this.lines[++this.currentLineNb]; + return true; + }; + + Parser.prototype.moveToPreviousLine = function() { + this.currentLine = this.lines[--this.currentLineNb]; + }; + + Parser.prototype.parseValue = function(value, exceptionOnInvalidType, objectDecoder) { + var e, foldedIndent, matches, modifiers, pos, ref, ref1, val; + if (0 === value.indexOf('*')) { + pos = value.indexOf('#'); + if (pos !== -1) { + value = value.substr(1, pos - 2); + } else { + value = value.slice(1); + } + if (this.refs[value] === void 0) { + throw new ParseException('Reference "' + value + '" does not exist.', this.currentLine); + } + return this.refs[value]; + } + if (matches = this.PATTERN_FOLDED_SCALAR_ALL.exec(value)) { + modifiers = (ref = matches.modifiers) != null ? ref : ''; + foldedIndent = Math.abs(parseInt(modifiers)); + if (isNaN(foldedIndent)) { + foldedIndent = 0; + } + val = this.parseFoldedScalar(matches.separator, this.PATTERN_DECIMAL.replace(modifiers, ''), foldedIndent); + if (matches.type != null) { + Inline.configure(exceptionOnInvalidType, objectDecoder); + return Inline.parseScalar(matches.type + ' ' + val); + } else { + return val; + } + } + if ((ref1 = value.charAt(0)) === '[' || ref1 === '{' || ref1 === '"' || ref1 === "'") { + while (true) { + try { + return Inline.parse(value, exceptionOnInvalidType, objectDecoder); + } catch (error) { + e = error; + if (e instanceof ParseMore && this.moveToNextLine()) { + value += "\n" + Utils.trim(this.currentLine, ' '); + } else { + e.parsedLine = this.getRealCurrentLineNb() + 1; + e.snippet = this.currentLine; + throw e; + } + } + } + } else { + if (this.isNextLineIndented()) { + value += "\n" + this.getNextEmbedBlock(); + } + return Inline.parse(value, exceptionOnInvalidType, objectDecoder); + } + }; + + Parser.prototype.parseFoldedScalar = function(separator, indicator, indentation) { + var isCurrentLineBlank, j, len, line, matches, newText, notEOF, pattern, ref, text; + if (indicator == null) { + indicator = ''; + } + if (indentation == null) { + indentation = 0; + } + notEOF = this.moveToNextLine(); + if (!notEOF) { + return ''; + } + isCurrentLineBlank = this.isCurrentLineBlank(); + text = ''; + while (notEOF && isCurrentLineBlank) { + if (notEOF = this.moveToNextLine()) { + text += "\n"; + isCurrentLineBlank = this.isCurrentLineBlank(); + } + } + if (0 === indentation) { + if (matches = this.PATTERN_INDENT_SPACES.exec(this.currentLine)) { + indentation = matches[0].length; + } + } + if (indentation > 0) { + pattern = this.PATTERN_FOLDED_SCALAR_BY_INDENTATION[indentation]; + if (pattern == null) { + pattern = new Pattern('^ {' + indentation + '}(.*)$'); + Parser.prototype.PATTERN_FOLDED_SCALAR_BY_INDENTATION[indentation] = pattern; + } + while (notEOF && (isCurrentLineBlank || (matches = pattern.exec(this.currentLine)))) { + if (isCurrentLineBlank) { + text += this.currentLine.slice(indentation); + } else { + text += matches[1]; + } + if (notEOF = this.moveToNextLine()) { + text += "\n"; + isCurrentLineBlank = this.isCurrentLineBlank(); + } + } + } else if (notEOF) { + text += "\n"; + } + if (notEOF) { + this.moveToPreviousLine(); + } + if ('>' === separator) { + newText = ''; + ref = text.split("\n"); + for (j = 0, len = ref.length; j < len; j++) { + line = ref[j]; + if (line.length === 0 || line.charAt(0) === ' ') { + newText = Utils.rtrim(newText, ' ') + line + "\n"; + } else { + newText += line + ' '; + } + } + text = newText; + } + if ('+' !== indicator) { + text = Utils.rtrim(text); + } + if ('' === indicator) { + text = this.PATTERN_TRAILING_LINES.replace(text, "\n"); + } else if ('-' === indicator) { + text = this.PATTERN_TRAILING_LINES.replace(text, ''); + } + return text; + }; + + Parser.prototype.isNextLineIndented = function(ignoreComments) { + var EOF, currentIndentation, ret; + if (ignoreComments == null) { + ignoreComments = true; + } + currentIndentation = this.getCurrentLineIndentation(); + EOF = !this.moveToNextLine(); + if (ignoreComments) { + while (!EOF && this.isCurrentLineEmpty()) { + EOF = !this.moveToNextLine(); + } + } else { + while (!EOF && this.isCurrentLineBlank()) { + EOF = !this.moveToNextLine(); + } + } + if (EOF) { + return false; + } + ret = false; + if (this.getCurrentLineIndentation() > currentIndentation) { + ret = true; + } + this.moveToPreviousLine(); + return ret; + }; + + Parser.prototype.isCurrentLineEmpty = function() { + var trimmedLine; + trimmedLine = Utils.trim(this.currentLine, ' '); + return trimmedLine.length === 0 || trimmedLine.charAt(0) === '#'; + }; + + Parser.prototype.isCurrentLineBlank = function() { + return '' === Utils.trim(this.currentLine, ' '); + }; + + Parser.prototype.isCurrentLineComment = function() { + var ltrimmedLine; + ltrimmedLine = Utils.ltrim(this.currentLine, ' '); + return ltrimmedLine.charAt(0) === '#'; + }; + + Parser.prototype.cleanup = function(value) { + var count, i, indent, j, l, len, len1, line, lines, ref, ref1, ref2, smallestIndent, trimmedValue; + if (value.indexOf("\r") !== -1) { + value = value.split("\r\n").join("\n").split("\r").join("\n"); + } + count = 0; + ref = this.PATTERN_YAML_HEADER.replaceAll(value, ''), value = ref[0], count = ref[1]; + this.offset += count; + ref1 = this.PATTERN_LEADING_COMMENTS.replaceAll(value, '', 1), trimmedValue = ref1[0], count = ref1[1]; + if (count === 1) { + this.offset += Utils.subStrCount(value, "\n") - Utils.subStrCount(trimmedValue, "\n"); + value = trimmedValue; + } + ref2 = this.PATTERN_DOCUMENT_MARKER_START.replaceAll(value, '', 1), trimmedValue = ref2[0], count = ref2[1]; + if (count === 1) { + this.offset += Utils.subStrCount(value, "\n") - Utils.subStrCount(trimmedValue, "\n"); + value = trimmedValue; + value = this.PATTERN_DOCUMENT_MARKER_END.replace(value, ''); + } + lines = value.split("\n"); + smallestIndent = -1; + for (j = 0, len = lines.length; j < len; j++) { + line = lines[j]; + if (Utils.trim(line, ' ').length === 0) { + continue; + } + indent = line.length - Utils.ltrim(line).length; + if (smallestIndent === -1 || indent < smallestIndent) { + smallestIndent = indent; + } + } + if (smallestIndent > 0) { + for (i = l = 0, len1 = lines.length; l < len1; i = ++l) { + line = lines[i]; + lines[i] = line.slice(smallestIndent); + } + value = lines.join("\n"); + } + return value; + }; + + Parser.prototype.isNextLineUnIndentedCollection = function(currentIndentation) { + var notEOF, ret; + if (currentIndentation == null) { + currentIndentation = null; + } + if (currentIndentation == null) { + currentIndentation = this.getCurrentLineIndentation(); + } + notEOF = this.moveToNextLine(); + while (notEOF && this.isCurrentLineEmpty()) { + notEOF = this.moveToNextLine(); + } + if (false === notEOF) { + return false; + } + ret = false; + if (this.getCurrentLineIndentation() === currentIndentation && this.isStringUnIndentedCollectionItem(this.currentLine)) { + ret = true; + } + this.moveToPreviousLine(); + return ret; + }; + + Parser.prototype.isStringUnIndentedCollectionItem = function() { + return this.currentLine === '-' || this.currentLine.slice(0, 2) === '- '; + }; + + return Parser; + +})(); + +module.exports = Parser; diff --git a/node_modules/yamljs/lib/Pattern.js b/node_modules/yamljs/lib/Pattern.js new file mode 100644 index 00000000..3cca4d3f --- /dev/null +++ b/node_modules/yamljs/lib/Pattern.js @@ -0,0 +1,119 @@ +// Generated by CoffeeScript 1.12.4 +var Pattern; + +Pattern = (function() { + Pattern.prototype.regex = null; + + Pattern.prototype.rawRegex = null; + + Pattern.prototype.cleanedRegex = null; + + Pattern.prototype.mapping = null; + + function Pattern(rawRegex, modifiers) { + var _char, capturingBracketNumber, cleanedRegex, i, len, mapping, name, part, subChar; + if (modifiers == null) { + modifiers = ''; + } + cleanedRegex = ''; + len = rawRegex.length; + mapping = null; + capturingBracketNumber = 0; + i = 0; + while (i < len) { + _char = rawRegex.charAt(i); + if (_char === '\\') { + cleanedRegex += rawRegex.slice(i, +(i + 1) + 1 || 9e9); + i++; + } else if (_char === '(') { + if (i < len - 2) { + part = rawRegex.slice(i, +(i + 2) + 1 || 9e9); + if (part === '(?:') { + i += 2; + cleanedRegex += part; + } else if (part === '(?<') { + capturingBracketNumber++; + i += 2; + name = ''; + while (i + 1 < len) { + subChar = rawRegex.charAt(i + 1); + if (subChar === '>') { + cleanedRegex += '('; + i++; + if (name.length > 0) { + if (mapping == null) { + mapping = {}; + } + mapping[name] = capturingBracketNumber; + } + break; + } else { + name += subChar; + } + i++; + } + } else { + cleanedRegex += _char; + capturingBracketNumber++; + } + } else { + cleanedRegex += _char; + } + } else { + cleanedRegex += _char; + } + i++; + } + this.rawRegex = rawRegex; + this.cleanedRegex = cleanedRegex; + this.regex = new RegExp(this.cleanedRegex, 'g' + modifiers.replace('g', '')); + this.mapping = mapping; + } + + Pattern.prototype.exec = function(str) { + var index, matches, name, ref; + this.regex.lastIndex = 0; + matches = this.regex.exec(str); + if (matches == null) { + return null; + } + if (this.mapping != null) { + ref = this.mapping; + for (name in ref) { + index = ref[name]; + matches[name] = matches[index]; + } + } + return matches; + }; + + Pattern.prototype.test = function(str) { + this.regex.lastIndex = 0; + return this.regex.test(str); + }; + + Pattern.prototype.replace = function(str, replacement) { + this.regex.lastIndex = 0; + return str.replace(this.regex, replacement); + }; + + Pattern.prototype.replaceAll = function(str, replacement, limit) { + var count; + if (limit == null) { + limit = 0; + } + this.regex.lastIndex = 0; + count = 0; + while (this.regex.test(str) && (limit === 0 || count < limit)) { + this.regex.lastIndex = 0; + str = str.replace(this.regex, replacement); + count++; + } + return [str, count]; + }; + + return Pattern; + +})(); + +module.exports = Pattern; diff --git a/node_modules/yamljs/lib/Unescaper.js b/node_modules/yamljs/lib/Unescaper.js new file mode 100644 index 00000000..c4a707a4 --- /dev/null +++ b/node_modules/yamljs/lib/Unescaper.js @@ -0,0 +1,83 @@ +// Generated by CoffeeScript 1.12.4 +var Pattern, Unescaper, Utils; + +Utils = require('./Utils'); + +Pattern = require('./Pattern'); + +Unescaper = (function() { + function Unescaper() {} + + Unescaper.PATTERN_ESCAPED_CHARACTER = new Pattern('\\\\([0abt\tnvfre "\\/\\\\N_LP]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})'); + + Unescaper.unescapeSingleQuotedString = function(value) { + return value.replace(/\'\'/g, '\''); + }; + + Unescaper.unescapeDoubleQuotedString = function(value) { + if (this._unescapeCallback == null) { + this._unescapeCallback = (function(_this) { + return function(str) { + return _this.unescapeCharacter(str); + }; + })(this); + } + return this.PATTERN_ESCAPED_CHARACTER.replace(value, this._unescapeCallback); + }; + + Unescaper.unescapeCharacter = function(value) { + var ch; + ch = String.fromCharCode; + switch (value.charAt(1)) { + case '0': + return ch(0); + case 'a': + return ch(7); + case 'b': + return ch(8); + case 't': + return "\t"; + case "\t": + return "\t"; + case 'n': + return "\n"; + case 'v': + return ch(11); + case 'f': + return ch(12); + case 'r': + return ch(13); + case 'e': + return ch(27); + case ' ': + return ' '; + case '"': + return '"'; + case '/': + return '/'; + case '\\': + return '\\'; + case 'N': + return ch(0x0085); + case '_': + return ch(0x00A0); + case 'L': + return ch(0x2028); + case 'P': + return ch(0x2029); + case 'x': + return Utils.utf8chr(Utils.hexDec(value.substr(2, 2))); + case 'u': + return Utils.utf8chr(Utils.hexDec(value.substr(2, 4))); + case 'U': + return Utils.utf8chr(Utils.hexDec(value.substr(2, 8))); + default: + return ''; + } + }; + + return Unescaper; + +})(); + +module.exports = Unescaper; diff --git a/node_modules/yamljs/lib/Utils.js b/node_modules/yamljs/lib/Utils.js new file mode 100644 index 00000000..5d54d2d0 --- /dev/null +++ b/node_modules/yamljs/lib/Utils.js @@ -0,0 +1,297 @@ +// Generated by CoffeeScript 1.12.4 +var Pattern, Utils, + hasProp = {}.hasOwnProperty; + +Pattern = require('./Pattern'); + +Utils = (function() { + function Utils() {} + + Utils.REGEX_LEFT_TRIM_BY_CHAR = {}; + + Utils.REGEX_RIGHT_TRIM_BY_CHAR = {}; + + Utils.REGEX_SPACES = /\s+/g; + + Utils.REGEX_DIGITS = /^\d+$/; + + Utils.REGEX_OCTAL = /[^0-7]/gi; + + Utils.REGEX_HEXADECIMAL = /[^a-f0-9]/gi; + + Utils.PATTERN_DATE = new Pattern('^' + '(?[0-9][0-9][0-9][0-9])' + '-(?[0-9][0-9]?)' + '-(?[0-9][0-9]?)' + '(?:(?:[Tt]|[ \t]+)' + '(?[0-9][0-9]?)' + ':(?[0-9][0-9])' + ':(?[0-9][0-9])' + '(?:\.(?[0-9]*))?' + '(?:[ \t]*(?Z|(?[-+])(?[0-9][0-9]?)' + '(?::(?[0-9][0-9]))?))?)?' + '$', 'i'); + + Utils.LOCAL_TIMEZONE_OFFSET = new Date().getTimezoneOffset() * 60 * 1000; + + Utils.trim = function(str, _char) { + var regexLeft, regexRight; + if (_char == null) { + _char = '\\s'; + } + regexLeft = this.REGEX_LEFT_TRIM_BY_CHAR[_char]; + if (regexLeft == null) { + this.REGEX_LEFT_TRIM_BY_CHAR[_char] = regexLeft = new RegExp('^' + _char + '' + _char + '*'); + } + regexLeft.lastIndex = 0; + regexRight = this.REGEX_RIGHT_TRIM_BY_CHAR[_char]; + if (regexRight == null) { + this.REGEX_RIGHT_TRIM_BY_CHAR[_char] = regexRight = new RegExp(_char + '' + _char + '*$'); + } + regexRight.lastIndex = 0; + return str.replace(regexLeft, '').replace(regexRight, ''); + }; + + Utils.ltrim = function(str, _char) { + var regexLeft; + if (_char == null) { + _char = '\\s'; + } + regexLeft = this.REGEX_LEFT_TRIM_BY_CHAR[_char]; + if (regexLeft == null) { + this.REGEX_LEFT_TRIM_BY_CHAR[_char] = regexLeft = new RegExp('^' + _char + '' + _char + '*'); + } + regexLeft.lastIndex = 0; + return str.replace(regexLeft, ''); + }; + + Utils.rtrim = function(str, _char) { + var regexRight; + if (_char == null) { + _char = '\\s'; + } + regexRight = this.REGEX_RIGHT_TRIM_BY_CHAR[_char]; + if (regexRight == null) { + this.REGEX_RIGHT_TRIM_BY_CHAR[_char] = regexRight = new RegExp(_char + '' + _char + '*$'); + } + regexRight.lastIndex = 0; + return str.replace(regexRight, ''); + }; + + Utils.isEmpty = function(value) { + return !value || value === '' || value === '0' || (value instanceof Array && value.length === 0) || this.isEmptyObject(value); + }; + + Utils.isEmptyObject = function(value) { + var k; + return value instanceof Object && ((function() { + var results; + results = []; + for (k in value) { + if (!hasProp.call(value, k)) continue; + results.push(k); + } + return results; + })()).length === 0; + }; + + Utils.subStrCount = function(string, subString, start, length) { + var c, i, j, len, ref, sublen; + c = 0; + string = '' + string; + subString = '' + subString; + if (start != null) { + string = string.slice(start); + } + if (length != null) { + string = string.slice(0, length); + } + len = string.length; + sublen = subString.length; + for (i = j = 0, ref = len; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) { + if (subString === string.slice(i, sublen)) { + c++; + i += sublen - 1; + } + } + return c; + }; + + Utils.isDigits = function(input) { + this.REGEX_DIGITS.lastIndex = 0; + return this.REGEX_DIGITS.test(input); + }; + + Utils.octDec = function(input) { + this.REGEX_OCTAL.lastIndex = 0; + return parseInt((input + '').replace(this.REGEX_OCTAL, ''), 8); + }; + + Utils.hexDec = function(input) { + this.REGEX_HEXADECIMAL.lastIndex = 0; + input = this.trim(input); + if ((input + '').slice(0, 2) === '0x') { + input = (input + '').slice(2); + } + return parseInt((input + '').replace(this.REGEX_HEXADECIMAL, ''), 16); + }; + + Utils.utf8chr = function(c) { + var ch; + ch = String.fromCharCode; + if (0x80 > (c %= 0x200000)) { + return ch(c); + } + if (0x800 > c) { + return ch(0xC0 | c >> 6) + ch(0x80 | c & 0x3F); + } + if (0x10000 > c) { + return ch(0xE0 | c >> 12) + ch(0x80 | c >> 6 & 0x3F) + ch(0x80 | c & 0x3F); + } + return ch(0xF0 | c >> 18) + ch(0x80 | c >> 12 & 0x3F) + ch(0x80 | c >> 6 & 0x3F) + ch(0x80 | c & 0x3F); + }; + + Utils.parseBoolean = function(input, strict) { + var lowerInput; + if (strict == null) { + strict = true; + } + if (typeof input === 'string') { + lowerInput = input.toLowerCase(); + if (!strict) { + if (lowerInput === 'no') { + return false; + } + } + if (lowerInput === '0') { + return false; + } + if (lowerInput === 'false') { + return false; + } + if (lowerInput === '') { + return false; + } + return true; + } + return !!input; + }; + + Utils.isNumeric = function(input) { + this.REGEX_SPACES.lastIndex = 0; + return typeof input === 'number' || typeof input === 'string' && !isNaN(input) && input.replace(this.REGEX_SPACES, '') !== ''; + }; + + Utils.stringToDate = function(str) { + var date, day, fraction, hour, info, minute, month, second, tz_hour, tz_minute, tz_offset, year; + if (!(str != null ? str.length : void 0)) { + return null; + } + info = this.PATTERN_DATE.exec(str); + if (!info) { + return null; + } + year = parseInt(info.year, 10); + month = parseInt(info.month, 10) - 1; + day = parseInt(info.day, 10); + if (info.hour == null) { + date = new Date(Date.UTC(year, month, day)); + return date; + } + hour = parseInt(info.hour, 10); + minute = parseInt(info.minute, 10); + second = parseInt(info.second, 10); + if (info.fraction != null) { + fraction = info.fraction.slice(0, 3); + while (fraction.length < 3) { + fraction += '0'; + } + fraction = parseInt(fraction, 10); + } else { + fraction = 0; + } + if (info.tz != null) { + tz_hour = parseInt(info.tz_hour, 10); + if (info.tz_minute != null) { + tz_minute = parseInt(info.tz_minute, 10); + } else { + tz_minute = 0; + } + tz_offset = (tz_hour * 60 + tz_minute) * 60000; + if ('-' === info.tz_sign) { + tz_offset *= -1; + } + } + date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction)); + if (tz_offset) { + date.setTime(date.getTime() - tz_offset); + } + return date; + }; + + Utils.strRepeat = function(str, number) { + var i, res; + res = ''; + i = 0; + while (i < number) { + res += str; + i++; + } + return res; + }; + + Utils.getStringFromFile = function(path, callback) { + var data, fs, j, len1, name, ref, req, xhr; + if (callback == null) { + callback = null; + } + xhr = null; + if (typeof window !== "undefined" && window !== null) { + if (window.XMLHttpRequest) { + xhr = new XMLHttpRequest(); + } else if (window.ActiveXObject) { + ref = ["Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.3.0", "Msxml2.XMLHTTP", "Microsoft.XMLHTTP"]; + for (j = 0, len1 = ref.length; j < len1; j++) { + name = ref[j]; + try { + xhr = new ActiveXObject(name); + } catch (error) {} + } + } + } + if (xhr != null) { + if (callback != null) { + xhr.onreadystatechange = function() { + if (xhr.readyState === 4) { + if (xhr.status === 200 || xhr.status === 0) { + return callback(xhr.responseText); + } else { + return callback(null); + } + } + }; + xhr.open('GET', path, true); + return xhr.send(null); + } else { + xhr.open('GET', path, false); + xhr.send(null); + if (xhr.status === 200 || xhr.status === 0) { + return xhr.responseText; + } + return null; + } + } else { + req = require; + fs = req('fs'); + if (callback != null) { + return fs.readFile(path, function(err, data) { + if (err) { + return callback(null); + } else { + return callback(String(data)); + } + }); + } else { + data = fs.readFileSync(path); + if (data != null) { + return String(data); + } + return null; + } + } + }; + + return Utils; + +})(); + +module.exports = Utils; diff --git a/node_modules/yamljs/lib/Yaml.js b/node_modules/yamljs/lib/Yaml.js new file mode 100644 index 00000000..95055654 --- /dev/null +++ b/node_modules/yamljs/lib/Yaml.js @@ -0,0 +1,93 @@ +// Generated by CoffeeScript 1.12.4 +var Dumper, Parser, Utils, Yaml; + +Parser = require('./Parser'); + +Dumper = require('./Dumper'); + +Utils = require('./Utils'); + +Yaml = (function() { + function Yaml() {} + + Yaml.parse = function(input, exceptionOnInvalidType, objectDecoder) { + if (exceptionOnInvalidType == null) { + exceptionOnInvalidType = false; + } + if (objectDecoder == null) { + objectDecoder = null; + } + return new Parser().parse(input, exceptionOnInvalidType, objectDecoder); + }; + + Yaml.parseFile = function(path, callback, exceptionOnInvalidType, objectDecoder) { + var input; + if (callback == null) { + callback = null; + } + if (exceptionOnInvalidType == null) { + exceptionOnInvalidType = false; + } + if (objectDecoder == null) { + objectDecoder = null; + } + if (callback != null) { + return Utils.getStringFromFile(path, (function(_this) { + return function(input) { + var result; + result = null; + if (input != null) { + result = _this.parse(input, exceptionOnInvalidType, objectDecoder); + } + callback(result); + }; + })(this)); + } else { + input = Utils.getStringFromFile(path); + if (input != null) { + return this.parse(input, exceptionOnInvalidType, objectDecoder); + } + return null; + } + }; + + Yaml.dump = function(input, inline, indent, exceptionOnInvalidType, objectEncoder) { + var yaml; + if (inline == null) { + inline = 2; + } + if (indent == null) { + indent = 4; + } + if (exceptionOnInvalidType == null) { + exceptionOnInvalidType = false; + } + if (objectEncoder == null) { + objectEncoder = null; + } + yaml = new Dumper(); + yaml.indentation = indent; + return yaml.dump(input, inline, 0, exceptionOnInvalidType, objectEncoder); + }; + + Yaml.stringify = function(input, inline, indent, exceptionOnInvalidType, objectEncoder) { + return this.dump(input, inline, indent, exceptionOnInvalidType, objectEncoder); + }; + + Yaml.load = function(path, callback, exceptionOnInvalidType, objectDecoder) { + return this.parseFile(path, callback, exceptionOnInvalidType, objectDecoder); + }; + + return Yaml; + +})(); + +if (typeof window !== "undefined" && window !== null) { + window.YAML = Yaml; +} + +if (typeof window === "undefined" || window === null) { + this.YAML = Yaml; +} + +module.exports = Yaml; diff --git a/node_modules/yamljs/package.json b/node_modules/yamljs/package.json new file mode 100644 index 00000000..0aed3ce3 --- /dev/null +++ b/node_modules/yamljs/package.json @@ -0,0 +1,66 @@ +{ + "_from": "yamljs@^0.3.0", + "_id": "yamljs@0.3.0", + "_inBundle": false, + "_integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==", + "_location": "/yamljs", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "yamljs@^0.3.0", + "name": "yamljs", + "escapedName": "yamljs", + "rawSpec": "^0.3.0", + "saveSpec": null, + "fetchSpec": "^0.3.0" + }, + "_requiredBy": [ + "/strong-globalize" + ], + "_resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz", + "_shasum": "dc060bf267447b39f7304e9b2bfbe8b5a7ddb03b", + "_spec": "yamljs@^0.3.0", + "_where": "/home/yatheendrasai/Documents/WORK/RPA-work/BluePrism-work/BotKit/node_modules/strong-globalize", + "author": { + "name": "Jeremy Faivre", + "email": "contact@jeremyfa.com" + }, + "bin": { + "yaml2json": "./bin/yaml2json", + "json2yaml": "./bin/json2yaml" + }, + "bugs": { + "url": "https://github.com/jeremyfa/yaml.js/issues" + }, + "bundleDependencies": false, + "dependencies": { + "argparse": "^1.0.7", + "glob": "^7.0.5" + }, + "deprecated": false, + "description": "Standalone JavaScript YAML 1.2 Parser & Encoder. Works under node.js and all major browsers. Also brings command line YAML/JSON conversion tools.", + "devDependencies": { + "benchmark": "^2.1.0", + "coffeeify": "^2.0.1", + "jasmine-node": "^1.14.5" + }, + "homepage": "https://github.com/jeremyfa/yaml.js#readme", + "keywords": [ + "yaml", + "json", + "yaml2json", + "json2yaml" + ], + "license": "MIT", + "main": "./lib/Yaml.js", + "name": "yamljs", + "repository": { + "type": "git", + "url": "git://github.com/jeremyfa/yaml.js.git" + }, + "scripts": { + "test": "cake build; cake test" + }, + "version": "0.3.0" +} diff --git a/node_modules/yamljs/src/Dumper.coffee b/node_modules/yamljs/src/Dumper.coffee new file mode 100644 index 00000000..03382121 --- /dev/null +++ b/node_modules/yamljs/src/Dumper.coffee @@ -0,0 +1,56 @@ + +Utils = require './Utils' +Inline = require './Inline' + +# Dumper dumps JavaScript variables to YAML strings. +# +class Dumper + + # The amount of spaces to use for indentation of nested nodes. + @indentation: 4 + + + # Dumps a JavaScript value to YAML. + # + # @param [Object] input The JavaScript value + # @param [Integer] inline The level where you switch to inline YAML + # @param [Integer] indent The level of indentation (used internally) + # @param [Boolean] exceptionOnInvalidType true if an exception must be thrown on invalid types (a JavaScript resource or object), false otherwise + # @param [Function] objectEncoder A function to serialize custom objects, null otherwise + # + # @return [String] The YAML representation of the JavaScript value + # + dump: (input, inline = 0, indent = 0, exceptionOnInvalidType = false, objectEncoder = null) -> + output = '' + prefix = (if indent then Utils.strRepeat(' ', indent) else '') + + if inline <= 0 or typeof(input) isnt 'object' or input instanceof Date or Utils.isEmpty(input) + output += prefix + Inline.dump(input, exceptionOnInvalidType, objectEncoder) + + else + if input instanceof Array + for value in input + willBeInlined = (inline - 1 <= 0 or typeof(value) isnt 'object' or Utils.isEmpty(value)) + + output += + prefix + + '-' + + (if willBeInlined then ' ' else "\n") + + @dump(value, inline - 1, (if willBeInlined then 0 else indent + @indentation), exceptionOnInvalidType, objectEncoder) + + (if willBeInlined then "\n" else '') + + else + for key, value of input + willBeInlined = (inline - 1 <= 0 or typeof(value) isnt 'object' or Utils.isEmpty(value)) + + output += + prefix + + Inline.dump(key, exceptionOnInvalidType, objectEncoder) + ':' + + (if willBeInlined then ' ' else "\n") + + @dump(value, inline - 1, (if willBeInlined then 0 else indent + @indentation), exceptionOnInvalidType, objectEncoder) + + (if willBeInlined then "\n" else '') + + return output + + +module.exports = Dumper diff --git a/node_modules/yamljs/src/Escaper.coffee b/node_modules/yamljs/src/Escaper.coffee new file mode 100644 index 00000000..0eefec77 --- /dev/null +++ b/node_modules/yamljs/src/Escaper.coffee @@ -0,0 +1,80 @@ + +Pattern = require './Pattern' + +# Escaper encapsulates escaping rules for single +# and double-quoted YAML strings. +class Escaper + + # Mapping arrays for escaping a double quoted string. The backslash is + # first to ensure proper escaping. + @LIST_ESCAPEES: ['\\', '\\\\', '\\"', '"', + "\x00", "\x01", "\x02", "\x03", "\x04", "\x05", "\x06", "\x07", + "\x08", "\x09", "\x0a", "\x0b", "\x0c", "\x0d", "\x0e", "\x0f", + "\x10", "\x11", "\x12", "\x13", "\x14", "\x15", "\x16", "\x17", + "\x18", "\x19", "\x1a", "\x1b", "\x1c", "\x1d", "\x1e", "\x1f", + (ch = String.fromCharCode)(0x0085), ch(0x00A0), ch(0x2028), ch(0x2029)] + @LIST_ESCAPED: ['\\\\', '\\"', '\\"', '\\"', + "\\0", "\\x01", "\\x02", "\\x03", "\\x04", "\\x05", "\\x06", "\\a", + "\\b", "\\t", "\\n", "\\v", "\\f", "\\r", "\\x0e", "\\x0f", + "\\x10", "\\x11", "\\x12", "\\x13", "\\x14", "\\x15", "\\x16", "\\x17", + "\\x18", "\\x19", "\\x1a", "\\e", "\\x1c", "\\x1d", "\\x1e", "\\x1f", + "\\N", "\\_", "\\L", "\\P"] + + @MAPPING_ESCAPEES_TO_ESCAPED: do => + mapping = {} + for i in [0...@LIST_ESCAPEES.length] + mapping[@LIST_ESCAPEES[i]] = @LIST_ESCAPED[i] + return mapping + + # Characters that would cause a dumped string to require double quoting. + @PATTERN_CHARACTERS_TO_ESCAPE: new Pattern '[\\x00-\\x1f]|\xc2\x85|\xc2\xa0|\xe2\x80\xa8|\xe2\x80\xa9' + + # Other precompiled patterns + @PATTERN_MAPPING_ESCAPEES: new Pattern @LIST_ESCAPEES.join('|').split('\\').join('\\\\') + @PATTERN_SINGLE_QUOTING: new Pattern '[\\s\'":{}[\\],&*#?]|^[-?|<>=!%@`]' + + + + # Determines if a JavaScript value would require double quoting in YAML. + # + # @param [String] value A JavaScript value value + # + # @return [Boolean] true if the value would require double quotes. + # + @requiresDoubleQuoting: (value) -> + return @PATTERN_CHARACTERS_TO_ESCAPE.test value + + + # Escapes and surrounds a JavaScript value with double quotes. + # + # @param [String] value A JavaScript value + # + # @return [String] The quoted, escaped string + # + @escapeWithDoubleQuotes: (value) -> + result = @PATTERN_MAPPING_ESCAPEES.replace value, (str) => + return @MAPPING_ESCAPEES_TO_ESCAPED[str] + return '"'+result+'"' + + + # Determines if a JavaScript value would require single quoting in YAML. + # + # @param [String] value A JavaScript value + # + # @return [Boolean] true if the value would require single quotes. + # + @requiresSingleQuoting: (value) -> + return @PATTERN_SINGLE_QUOTING.test value + + + # Escapes and surrounds a JavaScript value with single quotes. + # + # @param [String] value A JavaScript value + # + # @return [String] The quoted, escaped string + # + @escapeWithSingleQuotes: (value) -> + return "'"+value.replace(/'/g, "''")+"'" + + +module.exports = Escaper diff --git a/node_modules/yamljs/src/Exception/DumpException.coffee b/node_modules/yamljs/src/Exception/DumpException.coffee new file mode 100644 index 00000000..9cc6c27b --- /dev/null +++ b/node_modules/yamljs/src/Exception/DumpException.coffee @@ -0,0 +1,12 @@ + +class DumpException extends Error + + constructor: (@message, @parsedLine, @snippet) -> + + toString: -> + if @parsedLine? and @snippet? + return ' ' + @message + ' (line ' + @parsedLine + ': \'' + @snippet + '\')' + else + return ' ' + @message + +module.exports = DumpException diff --git a/node_modules/yamljs/src/Exception/ParseException.coffee b/node_modules/yamljs/src/Exception/ParseException.coffee new file mode 100644 index 00000000..a6a0785f --- /dev/null +++ b/node_modules/yamljs/src/Exception/ParseException.coffee @@ -0,0 +1,12 @@ + +class ParseException extends Error + + constructor: (@message, @parsedLine, @snippet) -> + + toString: -> + if @parsedLine? and @snippet? + return ' ' + @message + ' (line ' + @parsedLine + ': \'' + @snippet + '\')' + else + return ' ' + @message + +module.exports = ParseException diff --git a/node_modules/yamljs/src/Exception/ParseMore.coffee b/node_modules/yamljs/src/Exception/ParseMore.coffee new file mode 100644 index 00000000..faeb9462 --- /dev/null +++ b/node_modules/yamljs/src/Exception/ParseMore.coffee @@ -0,0 +1,12 @@ + +class ParseMore extends Error + + constructor: (@message, @parsedLine, @snippet) -> + + toString: -> + if @parsedLine? and @snippet? + return ' ' + @message + ' (line ' + @parsedLine + ': \'' + @snippet + '\')' + else + return ' ' + @message + +module.exports = ParseMore diff --git a/node_modules/yamljs/src/Inline.coffee b/node_modules/yamljs/src/Inline.coffee new file mode 100644 index 00000000..4620e3fa --- /dev/null +++ b/node_modules/yamljs/src/Inline.coffee @@ -0,0 +1,488 @@ + +Pattern = require './Pattern' +Unescaper = require './Unescaper' +Escaper = require './Escaper' +Utils = require './Utils' +ParseException = require './Exception/ParseException' +ParseMore = require './Exception/ParseMore' +DumpException = require './Exception/DumpException' + +# Inline YAML parsing and dumping +class Inline + + # Quoted string regular expression + @REGEX_QUOTED_STRING: '(?:"(?:[^"\\\\]*(?:\\\\.[^"\\\\]*)*)"|\'(?:[^\']*(?:\'\'[^\']*)*)\')' + + # Pre-compiled patterns + # + @PATTERN_TRAILING_COMMENTS: new Pattern '^\\s*#.*$' + @PATTERN_QUOTED_SCALAR: new Pattern '^'+@REGEX_QUOTED_STRING + @PATTERN_THOUSAND_NUMERIC_SCALAR: new Pattern '^(-|\\+)?[0-9,]+(\\.[0-9]+)?$' + @PATTERN_SCALAR_BY_DELIMITERS: {} + + # Settings + @settings: {} + + + # Configure YAML inline. + # + # @param [Boolean] exceptionOnInvalidType true if an exception must be thrown on invalid types (a JavaScript resource or object), false otherwise + # @param [Function] objectDecoder A function to deserialize custom objects, null otherwise + # + @configure: (exceptionOnInvalidType = null, objectDecoder = null) -> + # Update settings + @settings.exceptionOnInvalidType = exceptionOnInvalidType + @settings.objectDecoder = objectDecoder + return + + + # Converts a YAML string to a JavaScript object. + # + # @param [String] value A YAML string + # @param [Boolean] exceptionOnInvalidType true if an exception must be thrown on invalid types (a JavaScript resource or object), false otherwise + # @param [Function] objectDecoder A function to deserialize custom objects, null otherwise + # + # @return [Object] A JavaScript object representing the YAML string + # + # @throw [ParseException] + # + @parse: (value, exceptionOnInvalidType = false, objectDecoder = null) -> + # Update settings from last call of Inline.parse() + @settings.exceptionOnInvalidType = exceptionOnInvalidType + @settings.objectDecoder = objectDecoder + + if not value? + return '' + + value = Utils.trim value + + if 0 is value.length + return '' + + # Keep a context object to pass through static methods + context = {exceptionOnInvalidType, objectDecoder, i: 0} + + switch value.charAt(0) + when '[' + result = @parseSequence value, context + ++context.i + when '{' + result = @parseMapping value, context + ++context.i + else + result = @parseScalar value, null, ['"', "'"], context + + # Some comments are allowed at the end + if @PATTERN_TRAILING_COMMENTS.replace(value[context.i..], '') isnt '' + throw new ParseException 'Unexpected characters near "'+value[context.i..]+'".' + + return result + + + # Dumps a given JavaScript variable to a YAML string. + # + # @param [Object] value The JavaScript variable to convert + # @param [Boolean] exceptionOnInvalidType true if an exception must be thrown on invalid types (a JavaScript resource or object), false otherwise + # @param [Function] objectEncoder A function to serialize custom objects, null otherwise + # + # @return [String] The YAML string representing the JavaScript object + # + # @throw [DumpException] + # + @dump: (value, exceptionOnInvalidType = false, objectEncoder = null) -> + if not value? + return 'null' + type = typeof value + if type is 'object' + if value instanceof Date + return value.toISOString() + else if objectEncoder? + result = objectEncoder value + if typeof result is 'string' or result? + return result + return @dumpObject value + if type is 'boolean' + return (if value then 'true' else 'false') + if Utils.isDigits(value) + return (if type is 'string' then "'"+value+"'" else String(parseInt(value))) + if Utils.isNumeric(value) + return (if type is 'string' then "'"+value+"'" else String(parseFloat(value))) + if type is 'number' + return (if value is Infinity then '.Inf' else (if value is -Infinity then '-.Inf' else (if isNaN(value) then '.NaN' else value))) + if Escaper.requiresDoubleQuoting value + return Escaper.escapeWithDoubleQuotes value + if Escaper.requiresSingleQuoting value + return Escaper.escapeWithSingleQuotes value + if '' is value + return '""' + if Utils.PATTERN_DATE.test value + return "'"+value+"'"; + if value.toLowerCase() in ['null','~','true','false'] + return "'"+value+"'" + # Default + return value; + + + # Dumps a JavaScript object to a YAML string. + # + # @param [Object] value The JavaScript object to dump + # @param [Boolean] exceptionOnInvalidType true if an exception must be thrown on invalid types (a JavaScript resource or object), false otherwise + # @param [Function] objectEncoder A function do serialize custom objects, null otherwise + # + # @return string The YAML string representing the JavaScript object + # + @dumpObject: (value, exceptionOnInvalidType, objectSupport = null) -> + # Array + if value instanceof Array + output = [] + for val in value + output.push @dump val + return '['+output.join(', ')+']' + + # Mapping + else + output = [] + for key, val of value + output.push @dump(key)+': '+@dump(val) + return '{'+output.join(', ')+'}' + + + # Parses a scalar to a YAML string. + # + # @param [Object] scalar + # @param [Array] delimiters + # @param [Array] stringDelimiters + # @param [Object] context + # @param [Boolean] evaluate + # + # @return [String] A YAML string + # + # @throw [ParseException] When malformed inline YAML string is parsed + # + @parseScalar: (scalar, delimiters = null, stringDelimiters = ['"', "'"], context = null, evaluate = true) -> + unless context? + context = exceptionOnInvalidType: @settings.exceptionOnInvalidType, objectDecoder: @settings.objectDecoder, i: 0 + {i} = context + + if scalar.charAt(i) in stringDelimiters + # Quoted scalar + output = @parseQuotedScalar scalar, context + {i} = context + + if delimiters? + tmp = Utils.ltrim scalar[i..], ' ' + if not(tmp.charAt(0) in delimiters) + throw new ParseException 'Unexpected characters ('+scalar[i..]+').' + + else + # "normal" string + if not delimiters + output = scalar[i..] + i += output.length + + # Remove comments + strpos = output.indexOf ' #' + if strpos isnt -1 + output = Utils.rtrim output[0...strpos] + + else + joinedDelimiters = delimiters.join('|') + pattern = @PATTERN_SCALAR_BY_DELIMITERS[joinedDelimiters] + unless pattern? + pattern = new Pattern '^(.+?)('+joinedDelimiters+')' + @PATTERN_SCALAR_BY_DELIMITERS[joinedDelimiters] = pattern + if match = pattern.exec scalar[i..] + output = match[1] + i += output.length + else + throw new ParseException 'Malformed inline YAML string ('+scalar+').' + + + if evaluate + output = @evaluateScalar output, context + + context.i = i + return output + + + # Parses a quoted scalar to YAML. + # + # @param [String] scalar + # @param [Object] context + # + # @return [String] A YAML string + # + # @throw [ParseMore] When malformed inline YAML string is parsed + # + @parseQuotedScalar: (scalar, context) -> + {i} = context + + unless match = @PATTERN_QUOTED_SCALAR.exec scalar[i..] + throw new ParseMore 'Malformed inline YAML string ('+scalar[i..]+').' + + output = match[0].substr(1, match[0].length - 2) + + if '"' is scalar.charAt(i) + output = Unescaper.unescapeDoubleQuotedString output + else + output = Unescaper.unescapeSingleQuotedString output + + i += match[0].length + + context.i = i + return output + + + # Parses a sequence to a YAML string. + # + # @param [String] sequence + # @param [Object] context + # + # @return [String] A YAML string + # + # @throw [ParseMore] When malformed inline YAML string is parsed + # + @parseSequence: (sequence, context) -> + output = [] + len = sequence.length + {i} = context + i += 1 + + # [foo, bar, ...] + while i < len + context.i = i + switch sequence.charAt(i) + when '[' + # Nested sequence + output.push @parseSequence sequence, context + {i} = context + when '{' + # Nested mapping + output.push @parseMapping sequence, context + {i} = context + when ']' + return output + when ',', ' ', "\n" + # Do nothing + else + isQuoted = (sequence.charAt(i) in ['"', "'"]) + value = @parseScalar sequence, [',', ']'], ['"', "'"], context + {i} = context + + if not(isQuoted) and typeof(value) is 'string' and (value.indexOf(': ') isnt -1 or value.indexOf(":\n") isnt -1) + # Embedded mapping? + try + value = @parseMapping '{'+value+'}' + catch e + # No, it's not + + + output.push value + + --i + + ++i + + throw new ParseMore 'Malformed inline YAML string '+sequence + + + # Parses a mapping to a YAML string. + # + # @param [String] mapping + # @param [Object] context + # + # @return [String] A YAML string + # + # @throw [ParseMore] When malformed inline YAML string is parsed + # + @parseMapping: (mapping, context) -> + output = {} + len = mapping.length + {i} = context + i += 1 + + # {foo: bar, bar:foo, ...} + shouldContinueWhileLoop = false + while i < len + context.i = i + switch mapping.charAt(i) + when ' ', ',', "\n" + ++i + context.i = i + shouldContinueWhileLoop = true + when '}' + return output + + if shouldContinueWhileLoop + shouldContinueWhileLoop = false + continue + + # Key + key = @parseScalar mapping, [':', ' ', "\n"], ['"', "'"], context, false + {i} = context + + # Value + done = false + + while i < len + context.i = i + switch mapping.charAt(i) + when '[' + # Nested sequence + value = @parseSequence mapping, context + {i} = context + # Spec: Keys MUST be unique; first one wins. + # Parser cannot abort this mapping earlier, since lines + # are processed sequentially. + if output[key] == undefined + output[key] = value + done = true + when '{' + # Nested mapping + value = @parseMapping mapping, context + {i} = context + # Spec: Keys MUST be unique; first one wins. + # Parser cannot abort this mapping earlier, since lines + # are processed sequentially. + if output[key] == undefined + output[key] = value + done = true + when ':', ' ', "\n" + # Do nothing + else + value = @parseScalar mapping, [',', '}'], ['"', "'"], context + {i} = context + # Spec: Keys MUST be unique; first one wins. + # Parser cannot abort this mapping earlier, since lines + # are processed sequentially. + if output[key] == undefined + output[key] = value + done = true + --i + + ++i + + if done + break + + throw new ParseMore 'Malformed inline YAML string '+mapping + + + # Evaluates scalars and replaces magic values. + # + # @param [String] scalar + # + # @return [String] A YAML string + # + @evaluateScalar: (scalar, context) -> + scalar = Utils.trim(scalar) + scalarLower = scalar.toLowerCase() + + switch scalarLower + when 'null', '', '~' + return null + when 'true' + return true + when 'false' + return false + when '.inf' + return Infinity + when '.nan' + return NaN + when '-.inf' + return Infinity + else + firstChar = scalarLower.charAt(0) + switch firstChar + when '!' + firstSpace = scalar.indexOf(' ') + if firstSpace is -1 + firstWord = scalarLower + else + firstWord = scalarLower[0...firstSpace] + switch firstWord + when '!' + if firstSpace isnt -1 + return parseInt @parseScalar(scalar[2..]) + return null + when '!str' + return Utils.ltrim scalar[4..] + when '!!str' + return Utils.ltrim scalar[5..] + when '!!int' + return parseInt(@parseScalar(scalar[5..])) + when '!!bool' + return Utils.parseBoolean(@parseScalar(scalar[6..]), false) + when '!!float' + return parseFloat(@parseScalar(scalar[7..])) + when '!!timestamp' + return Utils.stringToDate(Utils.ltrim(scalar[11..])) + else + unless context? + context = exceptionOnInvalidType: @settings.exceptionOnInvalidType, objectDecoder: @settings.objectDecoder, i: 0 + {objectDecoder, exceptionOnInvalidType} = context + + if objectDecoder + # If objectDecoder function is given, we can do custom decoding of custom types + trimmedScalar = Utils.rtrim scalar + firstSpace = trimmedScalar.indexOf(' ') + if firstSpace is -1 + return objectDecoder trimmedScalar, null + else + subValue = Utils.ltrim trimmedScalar[firstSpace+1..] + unless subValue.length > 0 + subValue = null + return objectDecoder trimmedScalar[0...firstSpace], subValue + + if exceptionOnInvalidType + throw new ParseException 'Custom object support when parsing a YAML file has been disabled.' + + return null + when '0' + if '0x' is scalar[0...2] + return Utils.hexDec scalar + else if Utils.isDigits scalar + return Utils.octDec scalar + else if Utils.isNumeric scalar + return parseFloat scalar + else + return scalar + when '+' + if Utils.isDigits scalar + raw = scalar + cast = parseInt(raw) + if raw is String(cast) + return cast + else + return raw + else if Utils.isNumeric scalar + return parseFloat scalar + else if @PATTERN_THOUSAND_NUMERIC_SCALAR.test scalar + return parseFloat(scalar.replace(',', '')) + return scalar + when '-' + if Utils.isDigits(scalar[1..]) + if '0' is scalar.charAt(1) + return -Utils.octDec(scalar[1..]) + else + raw = scalar[1..] + cast = parseInt(raw) + if raw is String(cast) + return -cast + else + return -raw + else if Utils.isNumeric scalar + return parseFloat scalar + else if @PATTERN_THOUSAND_NUMERIC_SCALAR.test scalar + return parseFloat(scalar.replace(',', '')) + return scalar + else + if date = Utils.stringToDate(scalar) + return date + else if Utils.isNumeric(scalar) + return parseFloat scalar + else if @PATTERN_THOUSAND_NUMERIC_SCALAR.test scalar + return parseFloat(scalar.replace(',', '')) + return scalar + +module.exports = Inline diff --git a/node_modules/yamljs/src/Parser.coffee b/node_modules/yamljs/src/Parser.coffee new file mode 100644 index 00000000..812d23f1 --- /dev/null +++ b/node_modules/yamljs/src/Parser.coffee @@ -0,0 +1,651 @@ + +Inline = require './Inline' +Pattern = require './Pattern' +Utils = require './Utils' +ParseException = require './Exception/ParseException' +ParseMore = require './Exception/ParseMore' + +# Parser parses YAML strings to convert them to JavaScript objects. +# +class Parser + + # Pre-compiled patterns + # + PATTERN_FOLDED_SCALAR_ALL: new Pattern '^(?:(?![^\\|>]*)\\s+)?(?\\||>)(?\\+|\\-|\\d+|\\+\\d+|\\-\\d+|\\d+\\+|\\d+\\-)?(? +#.*)?$' + PATTERN_FOLDED_SCALAR_END: new Pattern '(?\\||>)(?\\+|\\-|\\d+|\\+\\d+|\\-\\d+|\\d+\\+|\\d+\\-)?(? +#.*)?$' + PATTERN_SEQUENCE_ITEM: new Pattern '^\\-((?\\s+)(?.+?))?\\s*$' + PATTERN_ANCHOR_VALUE: new Pattern '^&(?[^ ]+) *(?.*)' + PATTERN_COMPACT_NOTATION: new Pattern '^(?'+Inline.REGEX_QUOTED_STRING+'|[^ \'"\\{\\[].*?) *\\:(\\s+(?.+?))?\\s*$' + PATTERN_MAPPING_ITEM: new Pattern '^(?'+Inline.REGEX_QUOTED_STRING+'|[^ \'"\\[\\{].*?) *\\:(\\s+(?.+?))?\\s*$' + PATTERN_DECIMAL: new Pattern '\\d+' + PATTERN_INDENT_SPACES: new Pattern '^ +' + PATTERN_TRAILING_LINES: new Pattern '(\n*)$' + PATTERN_YAML_HEADER: new Pattern '^\\%YAML[: ][\\d\\.]+.*\n', 'm' + PATTERN_LEADING_COMMENTS: new Pattern '^(\\#.*?\n)+', 'm' + PATTERN_DOCUMENT_MARKER_START: new Pattern '^\\-\\-\\-.*?\n', 'm' + PATTERN_DOCUMENT_MARKER_END: new Pattern '^\\.\\.\\.\\s*$', 'm' + PATTERN_FOLDED_SCALAR_BY_INDENTATION: {} + + # Context types + # + CONTEXT_NONE: 0 + CONTEXT_SEQUENCE: 1 + CONTEXT_MAPPING: 2 + + + # Constructor + # + # @param [Integer] offset The offset of YAML document (used for line numbers in error messages) + # + constructor: (@offset = 0) -> + @lines = [] + @currentLineNb = -1 + @currentLine = '' + @refs = {} + + + # Parses a YAML string to a JavaScript value. + # + # @param [String] value A YAML string + # @param [Boolean] exceptionOnInvalidType true if an exception must be thrown on invalid types (a JavaScript resource or object), false otherwise + # @param [Function] objectDecoder A function to deserialize custom objects, null otherwise + # + # @return [Object] A JavaScript value + # + # @throw [ParseException] If the YAML is not valid + # + parse: (value, exceptionOnInvalidType = false, objectDecoder = null) -> + @currentLineNb = -1 + @currentLine = '' + @lines = @cleanup(value).split "\n" + + data = null + context = @CONTEXT_NONE + allowOverwrite = false + while @moveToNextLine() + if @isCurrentLineEmpty() + continue + + # Tab? + if "\t" is @currentLine[0] + throw new ParseException 'A YAML file cannot contain tabs as indentation.', @getRealCurrentLineNb() + 1, @currentLine + + isRef = mergeNode = false + if values = @PATTERN_SEQUENCE_ITEM.exec @currentLine + if @CONTEXT_MAPPING is context + throw new ParseException 'You cannot define a sequence item when in a mapping' + context = @CONTEXT_SEQUENCE + data ?= [] + + if values.value? and matches = @PATTERN_ANCHOR_VALUE.exec values.value + isRef = matches.ref + values.value = matches.value + + # Array + if not(values.value?) or '' is Utils.trim(values.value, ' ') or Utils.ltrim(values.value, ' ').indexOf('#') is 0 + if @currentLineNb < @lines.length - 1 and not @isNextLineUnIndentedCollection() + c = @getRealCurrentLineNb() + 1 + parser = new Parser c + parser.refs = @refs + data.push parser.parse(@getNextEmbedBlock(null, true), exceptionOnInvalidType, objectDecoder) + else + data.push null + + else + if values.leadspaces?.length and matches = @PATTERN_COMPACT_NOTATION.exec values.value + + # This is a compact notation element, add to next block and parse + c = @getRealCurrentLineNb() + parser = new Parser c + parser.refs = @refs + + block = values.value + indent = @getCurrentLineIndentation() + if @isNextLineIndented(false) + block += "\n"+@getNextEmbedBlock(indent + values.leadspaces.length + 1, true) + + data.push parser.parse block, exceptionOnInvalidType, objectDecoder + + else + data.push @parseValue values.value, exceptionOnInvalidType, objectDecoder + + else if (values = @PATTERN_MAPPING_ITEM.exec @currentLine) and values.key.indexOf(' #') is -1 + if @CONTEXT_SEQUENCE is context + throw new ParseException 'You cannot define a mapping item when in a sequence' + context = @CONTEXT_MAPPING + data ?= {} + + # Force correct settings + Inline.configure exceptionOnInvalidType, objectDecoder + try + key = Inline.parseScalar values.key + catch e + e.parsedLine = @getRealCurrentLineNb() + 1 + e.snippet = @currentLine + + throw e + + if '<<' is key + mergeNode = true + allowOverwrite = true + if values.value?.indexOf('*') is 0 + refName = values.value[1..] + unless @refs[refName]? + throw new ParseException 'Reference "'+refName+'" does not exist.', @getRealCurrentLineNb() + 1, @currentLine + + refValue = @refs[refName] + + if typeof refValue isnt 'object' + throw new ParseException 'YAML merge keys used with a scalar value instead of an object.', @getRealCurrentLineNb() + 1, @currentLine + + if refValue instanceof Array + # Merge array with object + for value, i in refValue + data[String(i)] ?= value + else + # Merge objects + for key, value of refValue + data[key] ?= value + + else + if values.value? and values.value isnt '' + value = values.value + else + value = @getNextEmbedBlock() + + c = @getRealCurrentLineNb() + 1 + parser = new Parser c + parser.refs = @refs + parsed = parser.parse value, exceptionOnInvalidType + + unless typeof parsed is 'object' + throw new ParseException 'YAML merge keys used with a scalar value instead of an object.', @getRealCurrentLineNb() + 1, @currentLine + + if parsed instanceof Array + # If the value associated with the merge key is a sequence, then this sequence is expected to contain mapping nodes + # and each of these nodes is merged in turn according to its order in the sequence. Keys in mapping nodes earlier + # in the sequence override keys specified in later mapping nodes. + for parsedItem in parsed + unless typeof parsedItem is 'object' + throw new ParseException 'Merge items must be objects.', @getRealCurrentLineNb() + 1, parsedItem + + if parsedItem instanceof Array + # Merge array with object + for value, i in parsedItem + k = String(i) + unless data.hasOwnProperty(k) + data[k] = value + else + # Merge objects + for key, value of parsedItem + unless data.hasOwnProperty(key) + data[key] = value + + else + # If the value associated with the key is a single mapping node, each of its key/value pairs is inserted into the + # current mapping, unless the key already exists in it. + for key, value of parsed + unless data.hasOwnProperty(key) + data[key] = value + + else if values.value? and matches = @PATTERN_ANCHOR_VALUE.exec values.value + isRef = matches.ref + values.value = matches.value + + + if mergeNode + # Merge keys + else if not(values.value?) or '' is Utils.trim(values.value, ' ') or Utils.ltrim(values.value, ' ').indexOf('#') is 0 + # Hash + # if next line is less indented or equal, then it means that the current value is null + if not(@isNextLineIndented()) and not(@isNextLineUnIndentedCollection()) + # Spec: Keys MUST be unique; first one wins. + # But overwriting is allowed when a merge node is used in current block. + if allowOverwrite or data[key] is undefined + data[key] = null + + else + c = @getRealCurrentLineNb() + 1 + parser = new Parser c + parser.refs = @refs + val = parser.parse @getNextEmbedBlock(), exceptionOnInvalidType, objectDecoder + + # Spec: Keys MUST be unique; first one wins. + # But overwriting is allowed when a merge node is used in current block. + if allowOverwrite or data[key] is undefined + data[key] = val + + else + val = @parseValue values.value, exceptionOnInvalidType, objectDecoder + + # Spec: Keys MUST be unique; first one wins. + # But overwriting is allowed when a merge node is used in current block. + if allowOverwrite or data[key] is undefined + data[key] = val + + else + # 1-liner optionally followed by newline + lineCount = @lines.length + if 1 is lineCount or (2 is lineCount and Utils.isEmpty(@lines[1])) + try + value = Inline.parse @lines[0], exceptionOnInvalidType, objectDecoder + catch e + e.parsedLine = @getRealCurrentLineNb() + 1 + e.snippet = @currentLine + + throw e + + if typeof value is 'object' + if value instanceof Array + first = value[0] + else + for key of value + first = value[key] + break + + if typeof first is 'string' and first.indexOf('*') is 0 + data = [] + for alias in value + data.push @refs[alias[1..]] + value = data + + return value + + else if Utils.ltrim(value).charAt(0) in ['[', '{'] + try + return Inline.parse value, exceptionOnInvalidType, objectDecoder + catch e + e.parsedLine = @getRealCurrentLineNb() + 1 + e.snippet = @currentLine + + throw e + + throw new ParseException 'Unable to parse.', @getRealCurrentLineNb() + 1, @currentLine + + if isRef + if data instanceof Array + @refs[isRef] = data[data.length-1] + else + lastKey = null + for key of data + lastKey = key + @refs[isRef] = data[lastKey] + + + if Utils.isEmpty(data) + return null + else + return data + + + + # Returns the current line number (takes the offset into account). + # + # @return [Integer] The current line number + # + getRealCurrentLineNb: -> + return @currentLineNb + @offset + + + # Returns the current line indentation. + # + # @return [Integer] The current line indentation + # + getCurrentLineIndentation: -> + return @currentLine.length - Utils.ltrim(@currentLine, ' ').length + + + # Returns the next embed block of YAML. + # + # @param [Integer] indentation The indent level at which the block is to be read, or null for default + # + # @return [String] A YAML string + # + # @throw [ParseException] When indentation problem are detected + # + getNextEmbedBlock: (indentation = null, includeUnindentedCollection = false) -> + @moveToNextLine() + + if not indentation? + newIndent = @getCurrentLineIndentation() + + unindentedEmbedBlock = @isStringUnIndentedCollectionItem @currentLine + + if not(@isCurrentLineEmpty()) and 0 is newIndent and not(unindentedEmbedBlock) + throw new ParseException 'Indentation problem.', @getRealCurrentLineNb() + 1, @currentLine + + else + newIndent = indentation + + + data = [@currentLine[newIndent..]] + + unless includeUnindentedCollection + isItUnindentedCollection = @isStringUnIndentedCollectionItem @currentLine + + # Comments must not be removed inside a string block (ie. after a line ending with "|") + # They must not be removed inside a sub-embedded block as well + removeCommentsPattern = @PATTERN_FOLDED_SCALAR_END + removeComments = not removeCommentsPattern.test @currentLine + + while @moveToNextLine() + indent = @getCurrentLineIndentation() + + if indent is newIndent + removeComments = not removeCommentsPattern.test @currentLine + + if removeComments and @isCurrentLineComment() + continue + + if @isCurrentLineBlank() + data.push @currentLine[newIndent..] + continue + + if isItUnindentedCollection and not @isStringUnIndentedCollectionItem(@currentLine) and indent is newIndent + @moveToPreviousLine() + break + + if indent >= newIndent + data.push @currentLine[newIndent..] + else if Utils.ltrim(@currentLine).charAt(0) is '#' + # Don't add line with comments + else if 0 is indent + @moveToPreviousLine() + break + else + throw new ParseException 'Indentation problem.', @getRealCurrentLineNb() + 1, @currentLine + + + return data.join "\n" + + + # Moves the parser to the next line. + # + # @return [Boolean] + # + moveToNextLine: -> + if @currentLineNb >= @lines.length - 1 + return false + + @currentLine = @lines[++@currentLineNb]; + + return true + + + # Moves the parser to the previous line. + # + moveToPreviousLine: -> + @currentLine = @lines[--@currentLineNb] + return + + + # Parses a YAML value. + # + # @param [String] value A YAML value + # @param [Boolean] exceptionOnInvalidType true if an exception must be thrown on invalid types false otherwise + # @param [Function] objectDecoder A function to deserialize custom objects, null otherwise + # + # @return [Object] A JavaScript value + # + # @throw [ParseException] When reference does not exist + # + parseValue: (value, exceptionOnInvalidType, objectDecoder) -> + if 0 is value.indexOf('*') + pos = value.indexOf '#' + if pos isnt -1 + value = value.substr(1, pos-2) + else + value = value[1..] + + if @refs[value] is undefined + throw new ParseException 'Reference "'+value+'" does not exist.', @currentLine + + return @refs[value] + + + if matches = @PATTERN_FOLDED_SCALAR_ALL.exec value + modifiers = matches.modifiers ? '' + + foldedIndent = Math.abs(parseInt(modifiers)) + if isNaN(foldedIndent) then foldedIndent = 0 + val = @parseFoldedScalar matches.separator, @PATTERN_DECIMAL.replace(modifiers, ''), foldedIndent + if matches.type? + # Force correct settings + Inline.configure exceptionOnInvalidType, objectDecoder + return Inline.parseScalar matches.type+' '+val + else + return val + + # Value can be multiline compact sequence or mapping or string + if value.charAt(0) in ['[', '{', '"', "'"] + while true + try + return Inline.parse value, exceptionOnInvalidType, objectDecoder + catch e + if e instanceof ParseMore and @moveToNextLine() + value += "\n" + Utils.trim(@currentLine, ' ') + else + e.parsedLine = @getRealCurrentLineNb() + 1 + e.snippet = @currentLine + throw e + else + if @isNextLineIndented() + value += "\n" + @getNextEmbedBlock() + return Inline.parse value, exceptionOnInvalidType, objectDecoder + + return + + + # Parses a folded scalar. + # + # @param [String] separator The separator that was used to begin this folded scalar (| or >) + # @param [String] indicator The indicator that was used to begin this folded scalar (+ or -) + # @param [Integer] indentation The indentation that was used to begin this folded scalar + # + # @return [String] The text value + # + parseFoldedScalar: (separator, indicator = '', indentation = 0) -> + notEOF = @moveToNextLine() + if not notEOF + return '' + + isCurrentLineBlank = @isCurrentLineBlank() + text = '' + + # Leading blank lines are consumed before determining indentation + while notEOF and isCurrentLineBlank + # newline only if not EOF + if notEOF = @moveToNextLine() + text += "\n" + isCurrentLineBlank = @isCurrentLineBlank() + + + # Determine indentation if not specified + if 0 is indentation + if matches = @PATTERN_INDENT_SPACES.exec @currentLine + indentation = matches[0].length + + + if indentation > 0 + pattern = @PATTERN_FOLDED_SCALAR_BY_INDENTATION[indentation] + unless pattern? + pattern = new Pattern '^ {'+indentation+'}(.*)$' + Parser::PATTERN_FOLDED_SCALAR_BY_INDENTATION[indentation] = pattern + + while notEOF and (isCurrentLineBlank or matches = pattern.exec @currentLine) + if isCurrentLineBlank + text += @currentLine[indentation..] + else + text += matches[1] + + # newline only if not EOF + if notEOF = @moveToNextLine() + text += "\n" + isCurrentLineBlank = @isCurrentLineBlank() + + else if notEOF + text += "\n" + + + if notEOF + @moveToPreviousLine() + + + # Remove line breaks of each lines except the empty and more indented ones + if '>' is separator + newText = '' + for line in text.split "\n" + if line.length is 0 or line.charAt(0) is ' ' + newText = Utils.rtrim(newText, ' ') + line + "\n" + else + newText += line + ' ' + text = newText + + if '+' isnt indicator + # Remove any extra space or new line as we are adding them after + text = Utils.rtrim(text) + + # Deal with trailing newlines as indicated + if '' is indicator + text = @PATTERN_TRAILING_LINES.replace text, "\n" + else if '-' is indicator + text = @PATTERN_TRAILING_LINES.replace text, '' + + return text + + + # Returns true if the next line is indented. + # + # @return [Boolean] Returns true if the next line is indented, false otherwise + # + isNextLineIndented: (ignoreComments = true) -> + currentIndentation = @getCurrentLineIndentation() + EOF = not @moveToNextLine() + + if ignoreComments + while not(EOF) and @isCurrentLineEmpty() + EOF = not @moveToNextLine() + else + while not(EOF) and @isCurrentLineBlank() + EOF = not @moveToNextLine() + + if EOF + return false + + ret = false + if @getCurrentLineIndentation() > currentIndentation + ret = true + + @moveToPreviousLine() + + return ret + + + # Returns true if the current line is blank or if it is a comment line. + # + # @return [Boolean] Returns true if the current line is empty or if it is a comment line, false otherwise + # + isCurrentLineEmpty: -> + trimmedLine = Utils.trim(@currentLine, ' ') + return trimmedLine.length is 0 or trimmedLine.charAt(0) is '#' + + + # Returns true if the current line is blank. + # + # @return [Boolean] Returns true if the current line is blank, false otherwise + # + isCurrentLineBlank: -> + return '' is Utils.trim(@currentLine, ' ') + + + # Returns true if the current line is a comment line. + # + # @return [Boolean] Returns true if the current line is a comment line, false otherwise + # + isCurrentLineComment: -> + # Checking explicitly the first char of the trim is faster than loops or strpos + ltrimmedLine = Utils.ltrim(@currentLine, ' ') + + return ltrimmedLine.charAt(0) is '#' + + + # Cleanups a YAML string to be parsed. + # + # @param [String] value The input YAML string + # + # @return [String] A cleaned up YAML string + # + cleanup: (value) -> + if value.indexOf("\r") isnt -1 + value = value.split("\r\n").join("\n").split("\r").join("\n") + + # Strip YAML header + count = 0 + [value, count] = @PATTERN_YAML_HEADER.replaceAll value, '' + @offset += count + + # Remove leading comments + [trimmedValue, count] = @PATTERN_LEADING_COMMENTS.replaceAll value, '', 1 + if count is 1 + # Items have been removed, update the offset + @offset += Utils.subStrCount(value, "\n") - Utils.subStrCount(trimmedValue, "\n") + value = trimmedValue + + # Remove start of the document marker (---) + [trimmedValue, count] = @PATTERN_DOCUMENT_MARKER_START.replaceAll value, '', 1 + if count is 1 + # Items have been removed, update the offset + @offset += Utils.subStrCount(value, "\n") - Utils.subStrCount(trimmedValue, "\n") + value = trimmedValue + + # Remove end of the document marker (...) + value = @PATTERN_DOCUMENT_MARKER_END.replace value, '' + + # Ensure the block is not indented + lines = value.split("\n") + smallestIndent = -1 + for line in lines + continue if Utils.trim(line, ' ').length == 0 + indent = line.length - Utils.ltrim(line).length + if smallestIndent is -1 or indent < smallestIndent + smallestIndent = indent + if smallestIndent > 0 + for line, i in lines + lines[i] = line[smallestIndent..] + value = lines.join("\n") + + return value + + + # Returns true if the next line starts unindented collection + # + # @return [Boolean] Returns true if the next line starts unindented collection, false otherwise + # + isNextLineUnIndentedCollection: (currentIndentation = null) -> + currentIndentation ?= @getCurrentLineIndentation() + notEOF = @moveToNextLine() + + while notEOF and @isCurrentLineEmpty() + notEOF = @moveToNextLine() + + if false is notEOF + return false + + ret = false + if @getCurrentLineIndentation() is currentIndentation and @isStringUnIndentedCollectionItem(@currentLine) + ret = true + + @moveToPreviousLine() + + return ret + + + # Returns true if the string is un-indented collection item + # + # @return [Boolean] Returns true if the string is un-indented collection item, false otherwise + # + isStringUnIndentedCollectionItem: -> + return @currentLine is '-' or @currentLine[0...2] is '- ' + + +module.exports = Parser diff --git a/node_modules/yamljs/src/Pattern.coffee b/node_modules/yamljs/src/Pattern.coffee new file mode 100644 index 00000000..82f96e70 --- /dev/null +++ b/node_modules/yamljs/src/Pattern.coffee @@ -0,0 +1,144 @@ + +# Pattern is a zero-conflict wrapper extending RegExp features +# in order to make YAML parsing regex more expressive. +# +class Pattern + + # @property [RegExp] The RegExp instance + regex: null + + # @property [String] The raw regex string + rawRegex: null + + # @property [String] The cleaned regex string (used to create the RegExp instance) + cleanedRegex: null + + # @property [Object] The dictionary mapping names to capturing bracket numbers + mapping: null + + # Constructor + # + # @param [String] rawRegex The raw regex string defining the pattern + # + constructor: (rawRegex, modifiers = '') -> + cleanedRegex = '' + len = rawRegex.length + mapping = null + + # Cleanup raw regex and compute mapping + capturingBracketNumber = 0 + i = 0 + while i < len + _char = rawRegex.charAt(i) + if _char is '\\' + # Ignore next character + cleanedRegex += rawRegex[i..i+1] + i++ + else if _char is '(' + # Increase bracket number, only if it is capturing + if i < len - 2 + part = rawRegex[i..i+2] + if part is '(?:' + # Non-capturing bracket + i += 2 + cleanedRegex += part + else if part is '(?<' + # Capturing bracket with possibly a name + capturingBracketNumber++ + i += 2 + name = '' + while i + 1 < len + subChar = rawRegex.charAt(i + 1) + if subChar is '>' + cleanedRegex += '(' + i++ + if name.length > 0 + # Associate a name with a capturing bracket number + mapping ?= {} + mapping[name] = capturingBracketNumber + break + else + name += subChar + + i++ + else + cleanedRegex += _char + capturingBracketNumber++ + else + cleanedRegex += _char + else + cleanedRegex += _char + + i++ + + @rawRegex = rawRegex + @cleanedRegex = cleanedRegex + @regex = new RegExp @cleanedRegex, 'g'+modifiers.replace('g', '') + @mapping = mapping + + + # Executes the pattern's regex and returns the matching values + # + # @param [String] str The string to use to execute the pattern + # + # @return [Array] The matching values extracted from capturing brackets or null if nothing matched + # + exec: (str) -> + @regex.lastIndex = 0 + matches = @regex.exec str + + if not matches? + return null + + if @mapping? + for name, index of @mapping + matches[name] = matches[index] + + return matches + + + # Tests the pattern's regex + # + # @param [String] str The string to use to test the pattern + # + # @return [Boolean] true if the string matched + # + test: (str) -> + @regex.lastIndex = 0 + return @regex.test str + + + # Replaces occurences matching with the pattern's regex with replacement + # + # @param [String] str The source string to perform replacements + # @param [String] replacement The string to use in place of each replaced occurence. + # + # @return [String] The replaced string + # + replace: (str, replacement) -> + @regex.lastIndex = 0 + return str.replace @regex, replacement + + + # Replaces occurences matching with the pattern's regex with replacement and + # get both the replaced string and the number of replaced occurences in the string. + # + # @param [String] str The source string to perform replacements + # @param [String] replacement The string to use in place of each replaced occurence. + # @param [Integer] limit The maximum number of occurences to replace (0 means infinite number of occurences) + # + # @return [Array] A destructurable array containing the replaced string and the number of replaced occurences. For instance: ["my replaced string", 2] + # + replaceAll: (str, replacement, limit = 0) -> + @regex.lastIndex = 0 + count = 0 + while @regex.test(str) and (limit is 0 or count < limit) + @regex.lastIndex = 0 + str = str.replace @regex, replacement + count++ + + return [str, count] + + +module.exports = Pattern + diff --git a/node_modules/yamljs/src/Unescaper.coffee b/node_modules/yamljs/src/Unescaper.coffee new file mode 100644 index 00000000..8e1527a7 --- /dev/null +++ b/node_modules/yamljs/src/Unescaper.coffee @@ -0,0 +1,96 @@ + +Utils = require './Utils' +Pattern = require './Pattern' + +# Unescaper encapsulates unescaping rules for single and double-quoted YAML strings. +# +class Unescaper + + # Regex fragment that matches an escaped character in + # a double quoted string. + @PATTERN_ESCAPED_CHARACTER: new Pattern '\\\\([0abt\tnvfre "\\/\\\\N_LP]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})'; + + + # Unescapes a single quoted string. + # + # @param [String] value A single quoted string. + # + # @return [String] The unescaped string. + # + @unescapeSingleQuotedString: (value) -> + return value.replace(/\'\'/g, '\'') + + + # Unescapes a double quoted string. + # + # @param [String] value A double quoted string. + # + # @return [String] The unescaped string. + # + @unescapeDoubleQuotedString: (value) -> + @_unescapeCallback ?= (str) => + return @unescapeCharacter(str) + + # Evaluate the string + return @PATTERN_ESCAPED_CHARACTER.replace value, @_unescapeCallback + + + # Unescapes a character that was found in a double-quoted string + # + # @param [String] value An escaped character + # + # @return [String] The unescaped character + # + @unescapeCharacter: (value) -> + ch = String.fromCharCode + switch value.charAt(1) + when '0' + return ch(0) + when 'a' + return ch(7) + when 'b' + return ch(8) + when 't' + return "\t" + when "\t" + return "\t" + when 'n' + return "\n" + when 'v' + return ch(11) + when 'f' + return ch(12) + when 'r' + return ch(13) + when 'e' + return ch(27) + when ' ' + return ' ' + when '"' + return '"' + when '/' + return '/' + when '\\' + return '\\' + when 'N' + # U+0085 NEXT LINE + return ch(0x0085) + when '_' + # U+00A0 NO-BREAK SPACE + return ch(0x00A0) + when 'L' + # U+2028 LINE SEPARATOR + return ch(0x2028) + when 'P' + # U+2029 PARAGRAPH SEPARATOR + return ch(0x2029) + when 'x' + return Utils.utf8chr(Utils.hexDec(value.substr(2, 2))) + when 'u' + return Utils.utf8chr(Utils.hexDec(value.substr(2, 4))) + when 'U' + return Utils.utf8chr(Utils.hexDec(value.substr(2, 8))) + else + return '' + +module.exports = Unescaper diff --git a/node_modules/yamljs/src/Utils.coffee b/node_modules/yamljs/src/Utils.coffee new file mode 100644 index 00000000..aade0de4 --- /dev/null +++ b/node_modules/yamljs/src/Utils.coffee @@ -0,0 +1,349 @@ + +Pattern = require './Pattern' + +# A bunch of utility methods +# +class Utils + + @REGEX_LEFT_TRIM_BY_CHAR: {} + @REGEX_RIGHT_TRIM_BY_CHAR: {} + @REGEX_SPACES: /\s+/g + @REGEX_DIGITS: /^\d+$/ + @REGEX_OCTAL: /[^0-7]/gi + @REGEX_HEXADECIMAL: /[^a-f0-9]/gi + + # Precompiled date pattern + @PATTERN_DATE: new Pattern '^'+ + '(?[0-9][0-9][0-9][0-9])'+ + '-(?[0-9][0-9]?)'+ + '-(?[0-9][0-9]?)'+ + '(?:(?:[Tt]|[ \t]+)'+ + '(?[0-9][0-9]?)'+ + ':(?[0-9][0-9])'+ + ':(?[0-9][0-9])'+ + '(?:\.(?[0-9]*))?'+ + '(?:[ \t]*(?Z|(?[-+])(?[0-9][0-9]?)'+ + '(?::(?[0-9][0-9]))?))?)?'+ + '$', 'i' + + # Local timezone offset in ms + @LOCAL_TIMEZONE_OFFSET: new Date().getTimezoneOffset() * 60 * 1000 + + # Trims the given string on both sides + # + # @param [String] str The string to trim + # @param [String] _char The character to use for trimming (default: '\\s') + # + # @return [String] A trimmed string + # + @trim: (str, _char = '\\s') -> + regexLeft = @REGEX_LEFT_TRIM_BY_CHAR[_char] + unless regexLeft? + @REGEX_LEFT_TRIM_BY_CHAR[_char] = regexLeft = new RegExp '^'+_char+''+_char+'*' + regexLeft.lastIndex = 0 + regexRight = @REGEX_RIGHT_TRIM_BY_CHAR[_char] + unless regexRight? + @REGEX_RIGHT_TRIM_BY_CHAR[_char] = regexRight = new RegExp _char+''+_char+'*$' + regexRight.lastIndex = 0 + return str.replace(regexLeft, '').replace(regexRight, '') + + + # Trims the given string on the left side + # + # @param [String] str The string to trim + # @param [String] _char The character to use for trimming (default: '\\s') + # + # @return [String] A trimmed string + # + @ltrim: (str, _char = '\\s') -> + regexLeft = @REGEX_LEFT_TRIM_BY_CHAR[_char] + unless regexLeft? + @REGEX_LEFT_TRIM_BY_CHAR[_char] = regexLeft = new RegExp '^'+_char+''+_char+'*' + regexLeft.lastIndex = 0 + return str.replace(regexLeft, '') + + + # Trims the given string on the right side + # + # @param [String] str The string to trim + # @param [String] _char The character to use for trimming (default: '\\s') + # + # @return [String] A trimmed string + # + @rtrim: (str, _char = '\\s') -> + regexRight = @REGEX_RIGHT_TRIM_BY_CHAR[_char] + unless regexRight? + @REGEX_RIGHT_TRIM_BY_CHAR[_char] = regexRight = new RegExp _char+''+_char+'*$' + regexRight.lastIndex = 0 + return str.replace(regexRight, '') + + + # Checks if the given value is empty (null, undefined, empty string, string '0', empty Array, empty Object) + # + # @param [Object] value The value to check + # + # @return [Boolean] true if the value is empty + # + @isEmpty: (value) -> + return not(value) or value is '' or value is '0' or (value instanceof Array and value.length is 0) or @isEmptyObject(value) + + # Checks if the given value is an empty object + # + # @param [Object] value The value to check + # + # @return [Boolean] true if the value is empty and is an object + # + @isEmptyObject: (value) -> + return value instanceof Object and (k for own k of value).length is 0 + + # Counts the number of occurences of subString inside string + # + # @param [String] string The string where to count occurences + # @param [String] subString The subString to count + # @param [Integer] start The start index + # @param [Integer] length The string length until where to count + # + # @return [Integer] The number of occurences + # + @subStrCount: (string, subString, start, length) -> + c = 0 + + string = '' + string + subString = '' + subString + + if start? + string = string[start..] + if length? + string = string[0...length] + + len = string.length + sublen = subString.length + for i in [0...len] + if subString is string[i...sublen] + c++ + i += sublen - 1 + + return c + + + # Returns true if input is only composed of digits + # + # @param [Object] input The value to test + # + # @return [Boolean] true if input is only composed of digits + # + @isDigits: (input) -> + @REGEX_DIGITS.lastIndex = 0 + return @REGEX_DIGITS.test input + + + # Decode octal value + # + # @param [String] input The value to decode + # + # @return [Integer] The decoded value + # + @octDec: (input) -> + @REGEX_OCTAL.lastIndex = 0 + return parseInt((input+'').replace(@REGEX_OCTAL, ''), 8) + + + # Decode hexadecimal value + # + # @param [String] input The value to decode + # + # @return [Integer] The decoded value + # + @hexDec: (input) -> + @REGEX_HEXADECIMAL.lastIndex = 0 + input = @trim(input) + if (input+'')[0...2] is '0x' then input = (input+'')[2..] + return parseInt((input+'').replace(@REGEX_HEXADECIMAL, ''), 16) + + + # Get the UTF-8 character for the given code point. + # + # @param [Integer] c The unicode code point + # + # @return [String] The corresponding UTF-8 character + # + @utf8chr: (c) -> + ch = String.fromCharCode + if 0x80 > (c %= 0x200000) + return ch(c) + if 0x800 > c + return ch(0xC0 | c>>6) + ch(0x80 | c & 0x3F) + if 0x10000 > c + return ch(0xE0 | c>>12) + ch(0x80 | c>>6 & 0x3F) + ch(0x80 | c & 0x3F) + + return ch(0xF0 | c>>18) + ch(0x80 | c>>12 & 0x3F) + ch(0x80 | c>>6 & 0x3F) + ch(0x80 | c & 0x3F) + + + # Returns the boolean value equivalent to the given input + # + # @param [String|Object] input The input value + # @param [Boolean] strict If set to false, accept 'yes' and 'no' as boolean values + # + # @return [Boolean] the boolean value + # + @parseBoolean: (input, strict = true) -> + if typeof(input) is 'string' + lowerInput = input.toLowerCase() + if not strict + if lowerInput is 'no' then return false + if lowerInput is '0' then return false + if lowerInput is 'false' then return false + if lowerInput is '' then return false + return true + return !!input + + + + # Returns true if input is numeric + # + # @param [Object] input The value to test + # + # @return [Boolean] true if input is numeric + # + @isNumeric: (input) -> + @REGEX_SPACES.lastIndex = 0 + return typeof(input) is 'number' or typeof(input) is 'string' and !isNaN(input) and input.replace(@REGEX_SPACES, '') isnt '' + + + # Returns a parsed date from the given string + # + # @param [String] str The date string to parse + # + # @return [Date] The parsed date or null if parsing failed + # + @stringToDate: (str) -> + unless str?.length + return null + + # Perform regular expression pattern + info = @PATTERN_DATE.exec str + unless info + return null + + # Extract year, month, day + year = parseInt info.year, 10 + month = parseInt(info.month, 10) - 1 # In javascript, january is 0, february 1, etc... + day = parseInt info.day, 10 + + # If no hour is given, return a date with day precision + unless info.hour? + date = new Date Date.UTC(year, month, day) + return date + + # Extract hour, minute, second + hour = parseInt info.hour, 10 + minute = parseInt info.minute, 10 + second = parseInt info.second, 10 + + # Extract fraction, if given + if info.fraction? + fraction = info.fraction[0...3] + while fraction.length < 3 + fraction += '0' + fraction = parseInt fraction, 10 + else + fraction = 0 + + # Compute timezone offset if given + if info.tz? + tz_hour = parseInt info.tz_hour, 10 + if info.tz_minute? + tz_minute = parseInt info.tz_minute, 10 + else + tz_minute = 0 + + # Compute timezone delta in ms + tz_offset = (tz_hour * 60 + tz_minute) * 60000 + if '-' is info.tz_sign + tz_offset *= -1 + + # Compute date + date = new Date Date.UTC(year, month, day, hour, minute, second, fraction) + if tz_offset + date.setTime date.getTime() - tz_offset + + return date + + + # Repeats the given string a number of times + # + # @param [String] str The string to repeat + # @param [Integer] number The number of times to repeat the string + # + # @return [String] The repeated string + # + @strRepeat: (str, number) -> + res = '' + i = 0 + while i < number + res += str + i++ + return res + + + # Reads the data from the given file path and returns the result as string + # + # @param [String] path The path to the file + # @param [Function] callback A callback to read file asynchronously (optional) + # + # @return [String] The resulting data as string + # + @getStringFromFile: (path, callback = null) -> + xhr = null + if window? + if window.XMLHttpRequest + xhr = new XMLHttpRequest() + else if window.ActiveXObject + for name in ["Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.3.0", "Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] + try + xhr = new ActiveXObject(name) + + if xhr? + # Browser + if callback? + # Async + xhr.onreadystatechange = -> + if xhr.readyState is 4 + if xhr.status is 200 or xhr.status is 0 + callback(xhr.responseText) + else + callback(null) + xhr.open 'GET', path, true + xhr.send null + + else + # Sync + xhr.open 'GET', path, false + xhr.send null + + if xhr.status is 200 or xhr.status == 0 + return xhr.responseText + + return null + else + # Node.js-like + req = require + fs = req('fs') # Prevent browserify from trying to load 'fs' module + if callback? + # Async + fs.readFile path, (err, data) -> + if err + callback null + else + callback String(data) + + else + # Sync + data = fs.readFileSync path + if data? + return String(data) + return null + + + +module.exports = Utils diff --git a/node_modules/yamljs/src/Yaml.coffee b/node_modules/yamljs/src/Yaml.coffee new file mode 100644 index 00000000..83951b52 --- /dev/null +++ b/node_modules/yamljs/src/Yaml.coffee @@ -0,0 +1,104 @@ + +Parser = require './Parser' +Dumper = require './Dumper' +Utils = require './Utils' + +# Yaml offers convenience methods to load and dump YAML. +# +class Yaml + + # Parses YAML into a JavaScript object. + # + # The parse method, when supplied with a YAML string, + # will do its best to convert YAML in a file into a JavaScript object. + # + # Usage: + # myObject = Yaml.parse('some: yaml'); + # console.log(myObject); + # + # @param [String] input A string containing YAML + # @param [Boolean] exceptionOnInvalidType true if an exception must be thrown on invalid types, false otherwise + # @param [Function] objectDecoder A function to deserialize custom objects, null otherwise + # + # @return [Object] The YAML converted to a JavaScript object + # + # @throw [ParseException] If the YAML is not valid + # + @parse: (input, exceptionOnInvalidType = false, objectDecoder = null) -> + return new Parser().parse(input, exceptionOnInvalidType, objectDecoder) + + + # Parses YAML from file path into a JavaScript object. + # + # The parseFile method, when supplied with a YAML file, + # will do its best to convert YAML in a file into a JavaScript object. + # + # Usage: + # myObject = Yaml.parseFile('config.yml'); + # console.log(myObject); + # + # @param [String] path A file path pointing to a valid YAML file + # @param [Boolean] exceptionOnInvalidType true if an exception must be thrown on invalid types, false otherwise + # @param [Function] objectDecoder A function to deserialize custom objects, null otherwise + # + # @return [Object] The YAML converted to a JavaScript object or null if the file doesn't exist. + # + # @throw [ParseException] If the YAML is not valid + # + @parseFile: (path, callback = null, exceptionOnInvalidType = false, objectDecoder = null) -> + if callback? + # Async + Utils.getStringFromFile path, (input) => + result = null + if input? + result = @parse input, exceptionOnInvalidType, objectDecoder + callback result + return + else + # Sync + input = Utils.getStringFromFile path + if input? + return @parse input, exceptionOnInvalidType, objectDecoder + return null + + + # Dumps a JavaScript object to a YAML string. + # + # The dump method, when supplied with an object, will do its best + # to convert the object into friendly YAML. + # + # @param [Object] input JavaScript object + # @param [Integer] inline The level where you switch to inline YAML + # @param [Integer] indent The amount of spaces to use for indentation of nested nodes. + # @param [Boolean] exceptionOnInvalidType true if an exception must be thrown on invalid types (a JavaScript resource or object), false otherwise + # @param [Function] objectEncoder A function to serialize custom objects, null otherwise + # + # @return [String] A YAML string representing the original JavaScript object + # + @dump: (input, inline = 2, indent = 4, exceptionOnInvalidType = false, objectEncoder = null) -> + yaml = new Dumper() + yaml.indentation = indent + + return yaml.dump(input, inline, 0, exceptionOnInvalidType, objectEncoder) + + + # Alias of dump() method for compatibility reasons. + # + @stringify: (input, inline, indent, exceptionOnInvalidType, objectEncoder) -> + return @dump input, inline, indent, exceptionOnInvalidType, objectEncoder + + + # Alias of parseFile() method for compatibility reasons. + # + @load: (path, callback, exceptionOnInvalidType, objectDecoder) -> + return @parseFile path, callback, exceptionOnInvalidType, objectDecoder + + +# Expose YAML namespace to browser +window?.YAML = Yaml + +# Not in the browser? +unless window? + @YAML = Yaml + +module.exports = Yaml diff --git a/node_modules/yamljs/test/SpecRunner.html b/node_modules/yamljs/test/SpecRunner.html new file mode 100755 index 00000000..840545d4 --- /dev/null +++ b/node_modules/yamljs/test/SpecRunner.html @@ -0,0 +1,24 @@ + + + + + Jasmine Spec Runner v2.0.0 + + + + + + + + + + + + + + + + + + + diff --git a/node_modules/yamljs/test/lib/jasmine-2.0.0/MIT.LICENSE b/node_modules/yamljs/test/lib/jasmine-2.0.0/MIT.LICENSE new file mode 100755 index 00000000..7c435baa --- /dev/null +++ b/node_modules/yamljs/test/lib/jasmine-2.0.0/MIT.LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2008-2011 Pivotal Labs + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/yamljs/test/lib/jasmine-2.0.0/boot.js b/node_modules/yamljs/test/lib/jasmine-2.0.0/boot.js new file mode 100755 index 00000000..ec8baa0a --- /dev/null +++ b/node_modules/yamljs/test/lib/jasmine-2.0.0/boot.js @@ -0,0 +1,181 @@ +/** + Starting with version 2.0, this file "boots" Jasmine, performing all of the necessary initialization before executing the loaded environment and all of a project's specs. This file should be loaded after `jasmine.js`, but before any project source files or spec files are loaded. Thus this file can also be used to customize Jasmine for a project. + + If a project is using Jasmine via the standalone distribution, this file can be customized directly. If a project is using Jasmine via the [Ruby gem][jasmine-gem], this file can be copied into the support directory via `jasmine copy_boot_js`. Other environments (e.g., Python) will have different mechanisms. + + The location of `boot.js` can be specified and/or overridden in `jasmine.yml`. + + [jasmine-gem]: http://github.com/pivotal/jasmine-gem + */ + +(function() { + + /** + * ## Require & Instantiate + * + * Require Jasmine's core files. Specifically, this requires and attaches all of Jasmine's code to the `jasmine` reference. + */ + window.jasmine = jasmineRequire.core(jasmineRequire); + + /** + * Since this is being run in a browser and the results should populate to an HTML page, require the HTML-specific Jasmine code, injecting the same reference. + */ + jasmineRequire.html(jasmine); + + /** + * Create the Jasmine environment. This is used to run all specs in a project. + */ + var env = jasmine.getEnv(); + + /** + * ## The Global Interface + * + * Build up the functions that will be exposed as the Jasmine public interface. A project can customize, rename or alias any of these functions as desired, provided the implementation remains unchanged. + */ + var jasmineInterface = { + describe: function(description, specDefinitions) { + return env.describe(description, specDefinitions); + }, + + xdescribe: function(description, specDefinitions) { + return env.xdescribe(description, specDefinitions); + }, + + it: function(desc, func) { + return env.it(desc, func); + }, + + xit: function(desc, func) { + return env.xit(desc, func); + }, + + beforeEach: function(beforeEachFunction) { + return env.beforeEach(beforeEachFunction); + }, + + afterEach: function(afterEachFunction) { + return env.afterEach(afterEachFunction); + }, + + expect: function(actual) { + return env.expect(actual); + }, + + pending: function() { + return env.pending(); + }, + + spyOn: function(obj, methodName) { + return env.spyOn(obj, methodName); + }, + + jsApiReporter: new jasmine.JsApiReporter({ + timer: new jasmine.Timer() + }) + }; + + /** + * Add all of the Jasmine global/public interface to the proper global, so a project can use the public interface directly. For example, calling `describe` in specs instead of `jasmine.getEnv().describe`. + */ + if (typeof window == "undefined" && typeof exports == "object") { + extend(exports, jasmineInterface); + } else { + extend(window, jasmineInterface); + } + + /** + * Expose the interface for adding custom equality testers. + */ + jasmine.addCustomEqualityTester = function(tester) { + env.addCustomEqualityTester(tester); + }; + + /** + * Expose the interface for adding custom expectation matchers + */ + jasmine.addMatchers = function(matchers) { + return env.addMatchers(matchers); + }; + + /** + * Expose the mock interface for the JavaScript timeout functions + */ + jasmine.clock = function() { + return env.clock; + }; + + /** + * ## Runner Parameters + * + * More browser specific code - wrap the query string in an object and to allow for getting/setting parameters from the runner user interface. + */ + + var queryString = new jasmine.QueryString({ + getWindowLocation: function() { return window.location; } + }); + + var catchingExceptions = queryString.getParam("catch"); + env.catchExceptions(typeof catchingExceptions === "undefined" ? true : catchingExceptions); + + /** + * ## Reporters + * The `HtmlReporter` builds all of the HTML UI for the runner page. This reporter paints the dots, stars, and x's for specs, as well as all spec names and all failures (if any). + */ + var htmlReporter = new jasmine.HtmlReporter({ + env: env, + onRaiseExceptionsClick: function() { queryString.setParam("catch", !env.catchingExceptions()); }, + getContainer: function() { return document.body; }, + createElement: function() { return document.createElement.apply(document, arguments); }, + createTextNode: function() { return document.createTextNode.apply(document, arguments); }, + timer: new jasmine.Timer() + }); + + /** + * The `jsApiReporter` also receives spec results, and is used by any environment that needs to extract the results from JavaScript. + */ + env.addReporter(jasmineInterface.jsApiReporter); + env.addReporter(htmlReporter); + + /** + * Filter which specs will be run by matching the start of the full name against the `spec` query param. + */ + var specFilter = new jasmine.HtmlSpecFilter({ + filterString: function() { return queryString.getParam("spec"); } + }); + + env.specFilter = function(spec) { + return specFilter.matches(spec.getFullName()); + }; + + /** + * Setting up timing functions to be able to be overridden. Certain browsers (Safari, IE 8, phantomjs) require this hack. + */ + window.setTimeout = window.setTimeout; + window.setInterval = window.setInterval; + window.clearTimeout = window.clearTimeout; + window.clearInterval = window.clearInterval; + + /** + * ## Execution + * + * Replace the browser window's `onload`, ensure it's called, and then run all of the loaded specs. This includes initializing the `HtmlReporter` instance and then executing the loaded Jasmine environment. All of this will happen after all of the specs are loaded. + */ + var currentWindowOnload = window.onload; + + window.onload = function() { + if (currentWindowOnload) { + currentWindowOnload(); + } + htmlReporter.initialize(); + env.execute(); + }; + + /** + * Helper function for readability above. + */ + function extend(destination, source) { + for (var property in source) destination[property] = source[property]; + return destination; + } + +}()); diff --git a/node_modules/yamljs/test/lib/jasmine-2.0.0/console.js b/node_modules/yamljs/test/lib/jasmine-2.0.0/console.js new file mode 100755 index 00000000..33c1698c --- /dev/null +++ b/node_modules/yamljs/test/lib/jasmine-2.0.0/console.js @@ -0,0 +1,160 @@ +/* +Copyright (c) 2008-2013 Pivotal Labs + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +function getJasmineRequireObj() { + if (typeof module !== "undefined" && module.exports) { + return exports; + } else { + window.jasmineRequire = window.jasmineRequire || {}; + return window.jasmineRequire; + } +} + +getJasmineRequireObj().console = function(jRequire, j$) { + j$.ConsoleReporter = jRequire.ConsoleReporter(); +}; + +getJasmineRequireObj().ConsoleReporter = function() { + + var noopTimer = { + start: function(){}, + elapsed: function(){ return 0; } + }; + + function ConsoleReporter(options) { + var print = options.print, + showColors = options.showColors || false, + onComplete = options.onComplete || function() {}, + timer = options.timer || noopTimer, + specCount, + failureCount, + failedSpecs = [], + pendingCount, + ansi = { + green: '\x1B[32m', + red: '\x1B[31m', + yellow: '\x1B[33m', + none: '\x1B[0m' + }; + + this.jasmineStarted = function() { + specCount = 0; + failureCount = 0; + pendingCount = 0; + print("Started"); + printNewline(); + timer.start(); + }; + + this.jasmineDone = function() { + printNewline(); + for (var i = 0; i < failedSpecs.length; i++) { + specFailureDetails(failedSpecs[i]); + } + + printNewline(); + var specCounts = specCount + " " + plural("spec", specCount) + ", " + + failureCount + " " + plural("failure", failureCount); + + if (pendingCount) { + specCounts += ", " + pendingCount + " pending " + plural("spec", pendingCount); + } + + print(specCounts); + + printNewline(); + var seconds = timer.elapsed() / 1000; + print("Finished in " + seconds + " " + plural("second", seconds)); + + printNewline(); + + onComplete(failureCount === 0); + }; + + this.specDone = function(result) { + specCount++; + + if (result.status == "pending") { + pendingCount++; + print(colored("yellow", "*")); + return; + } + + if (result.status == "passed") { + print(colored("green", '.')); + return; + } + + if (result.status == "failed") { + failureCount++; + failedSpecs.push(result); + print(colored("red", 'F')); + } + }; + + return this; + + function printNewline() { + print("\n"); + } + + function colored(color, str) { + return showColors ? (ansi[color] + str + ansi.none) : str; + } + + function plural(str, count) { + return count == 1 ? str : str + "s"; + } + + function repeat(thing, times) { + var arr = []; + for (var i = 0; i < times; i++) { + arr.push(thing); + } + return arr; + } + + function indent(str, spaces) { + var lines = (str || '').split("\n"); + var newArr = []; + for (var i = 0; i < lines.length; i++) { + newArr.push(repeat(" ", spaces).join("") + lines[i]); + } + return newArr.join("\n"); + } + + function specFailureDetails(result) { + printNewline(); + print(result.fullName); + + for (var i = 0; i < result.failedExpectations.length; i++) { + var failedExpectation = result.failedExpectations[i]; + printNewline(); + print(indent(failedExpectation.stack, 2)); + } + + printNewline(); + } + } + + return ConsoleReporter; +}; diff --git a/node_modules/yamljs/test/lib/jasmine-2.0.0/jasmine-html.js b/node_modules/yamljs/test/lib/jasmine-2.0.0/jasmine-html.js new file mode 100755 index 00000000..985d0d1a --- /dev/null +++ b/node_modules/yamljs/test/lib/jasmine-2.0.0/jasmine-html.js @@ -0,0 +1,359 @@ +/* +Copyright (c) 2008-2013 Pivotal Labs + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +jasmineRequire.html = function(j$) { + j$.ResultsNode = jasmineRequire.ResultsNode(); + j$.HtmlReporter = jasmineRequire.HtmlReporter(j$); + j$.QueryString = jasmineRequire.QueryString(); + j$.HtmlSpecFilter = jasmineRequire.HtmlSpecFilter(); +}; + +jasmineRequire.HtmlReporter = function(j$) { + + var noopTimer = { + start: function() {}, + elapsed: function() { return 0; } + }; + + function HtmlReporter(options) { + var env = options.env || {}, + getContainer = options.getContainer, + createElement = options.createElement, + createTextNode = options.createTextNode, + onRaiseExceptionsClick = options.onRaiseExceptionsClick || function() {}, + timer = options.timer || noopTimer, + results = [], + specsExecuted = 0, + failureCount = 0, + pendingSpecCount = 0, + htmlReporterMain, + symbols; + + this.initialize = function() { + htmlReporterMain = createDom("div", {className: "html-reporter"}, + createDom("div", {className: "banner"}, + createDom("span", {className: "title"}, "Jasmine"), + createDom("span", {className: "version"}, j$.version) + ), + createDom("ul", {className: "symbol-summary"}), + createDom("div", {className: "alert"}), + createDom("div", {className: "results"}, + createDom("div", {className: "failures"}) + ) + ); + getContainer().appendChild(htmlReporterMain); + + symbols = find(".symbol-summary"); + }; + + var totalSpecsDefined; + this.jasmineStarted = function(options) { + totalSpecsDefined = options.totalSpecsDefined || 0; + timer.start(); + }; + + var summary = createDom("div", {className: "summary"}); + + var topResults = new j$.ResultsNode({}, "", null), + currentParent = topResults; + + this.suiteStarted = function(result) { + currentParent.addChild(result, "suite"); + currentParent = currentParent.last(); + }; + + this.suiteDone = function(result) { + if (currentParent == topResults) { + return; + } + + currentParent = currentParent.parent; + }; + + this.specStarted = function(result) { + currentParent.addChild(result, "spec"); + }; + + var failures = []; + this.specDone = function(result) { + if (result.status != "disabled") { + specsExecuted++; + } + + symbols.appendChild(createDom("li", { + className: result.status, + id: "spec_" + result.id, + title: result.fullName + } + )); + + if (result.status == "failed") { + failureCount++; + + var failure = + createDom("div", {className: "spec-detail failed"}, + createDom("div", {className: "description"}, + createDom("a", {title: result.fullName, href: specHref(result)}, result.fullName) + ), + createDom("div", {className: "messages"}) + ); + var messages = failure.childNodes[1]; + + for (var i = 0; i < result.failedExpectations.length; i++) { + var expectation = result.failedExpectations[i]; + messages.appendChild(createDom("div", {className: "result-message"}, expectation.message)); + messages.appendChild(createDom("div", {className: "stack-trace"}, expectation.stack)); + } + + failures.push(failure); + } + + if (result.status == "pending") { + pendingSpecCount++; + } + }; + + this.jasmineDone = function() { + var banner = find(".banner"); + banner.appendChild(createDom("span", {className: "duration"}, "finished in " + timer.elapsed() / 1000 + "s")); + + var alert = find(".alert"); + + alert.appendChild(createDom("span", { className: "exceptions" }, + createDom("label", { className: "label", 'for': "raise-exceptions" }, "raise exceptions"), + createDom("input", { + className: "raise", + id: "raise-exceptions", + type: "checkbox" + }) + )); + var checkbox = find("input"); + + checkbox.checked = !env.catchingExceptions(); + checkbox.onclick = onRaiseExceptionsClick; + + if (specsExecuted < totalSpecsDefined) { + var skippedMessage = "Ran " + specsExecuted + " of " + totalSpecsDefined + " specs - run all"; + alert.appendChild( + createDom("span", {className: "bar skipped"}, + createDom("a", {href: "?", title: "Run all specs"}, skippedMessage) + ) + ); + } + var statusBarMessage = "" + pluralize("spec", specsExecuted) + ", " + pluralize("failure", failureCount); + if (pendingSpecCount) { statusBarMessage += ", " + pluralize("pending spec", pendingSpecCount); } + + var statusBarClassName = "bar " + ((failureCount > 0) ? "failed" : "passed"); + alert.appendChild(createDom("span", {className: statusBarClassName}, statusBarMessage)); + + var results = find(".results"); + results.appendChild(summary); + + summaryList(topResults, summary); + + function summaryList(resultsTree, domParent) { + var specListNode; + for (var i = 0; i < resultsTree.children.length; i++) { + var resultNode = resultsTree.children[i]; + if (resultNode.type == "suite") { + var suiteListNode = createDom("ul", {className: "suite", id: "suite-" + resultNode.result.id}, + createDom("li", {className: "suite-detail"}, + createDom("a", {href: specHref(resultNode.result)}, resultNode.result.description) + ) + ); + + summaryList(resultNode, suiteListNode); + domParent.appendChild(suiteListNode); + } + if (resultNode.type == "spec") { + if (domParent.getAttribute("class") != "specs") { + specListNode = createDom("ul", {className: "specs"}); + domParent.appendChild(specListNode); + } + specListNode.appendChild( + createDom("li", { + className: resultNode.result.status, + id: "spec-" + resultNode.result.id + }, + createDom("a", {href: specHref(resultNode.result)}, resultNode.result.description) + ) + ); + } + } + } + + if (failures.length) { + alert.appendChild( + createDom('span', {className: "menu bar spec-list"}, + createDom("span", {}, "Spec List | "), + createDom('a', {className: "failures-menu", href: "#"}, "Failures"))); + alert.appendChild( + createDom('span', {className: "menu bar failure-list"}, + createDom('a', {className: "spec-list-menu", href: "#"}, "Spec List"), + createDom("span", {}, " | Failures "))); + + find(".failures-menu").onclick = function() { + setMenuModeTo('failure-list'); + }; + find(".spec-list-menu").onclick = function() { + setMenuModeTo('spec-list'); + }; + + setMenuModeTo('failure-list'); + + var failureNode = find(".failures"); + for (var i = 0; i < failures.length; i++) { + failureNode.appendChild(failures[i]); + } + } + }; + + return this; + + function find(selector) { + return getContainer().querySelector(selector); + } + + function createDom(type, attrs, childrenVarArgs) { + var el = createElement(type); + + for (var i = 2; i < arguments.length; i++) { + var child = arguments[i]; + + if (typeof child === 'string') { + el.appendChild(createTextNode(child)); + } else { + if (child) { + el.appendChild(child); + } + } + } + + for (var attr in attrs) { + if (attr == "className") { + el[attr] = attrs[attr]; + } else { + el.setAttribute(attr, attrs[attr]); + } + } + + return el; + } + + function pluralize(singular, count) { + var word = (count == 1 ? singular : singular + "s"); + + return "" + count + " " + word; + } + + function specHref(result) { + return "?spec=" + encodeURIComponent(result.fullName); + } + + function setMenuModeTo(mode) { + htmlReporterMain.setAttribute("class", "html-reporter " + mode); + } + } + + return HtmlReporter; +}; + +jasmineRequire.HtmlSpecFilter = function() { + function HtmlSpecFilter(options) { + var filterString = options && options.filterString() && options.filterString().replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); + var filterPattern = new RegExp(filterString); + + this.matches = function(specName) { + return filterPattern.test(specName); + }; + } + + return HtmlSpecFilter; +}; + +jasmineRequire.ResultsNode = function() { + function ResultsNode(result, type, parent) { + this.result = result; + this.type = type; + this.parent = parent; + + this.children = []; + + this.addChild = function(result, type) { + this.children.push(new ResultsNode(result, type, this)); + }; + + this.last = function() { + return this.children[this.children.length - 1]; + }; + } + + return ResultsNode; +}; + +jasmineRequire.QueryString = function() { + function QueryString(options) { + + this.setParam = function(key, value) { + var paramMap = queryStringToParamMap(); + paramMap[key] = value; + options.getWindowLocation().search = toQueryString(paramMap); + }; + + this.getParam = function(key) { + return queryStringToParamMap()[key]; + }; + + return this; + + function toQueryString(paramMap) { + var qStrPairs = []; + for (var prop in paramMap) { + qStrPairs.push(encodeURIComponent(prop) + "=" + encodeURIComponent(paramMap[prop])); + } + return "?" + qStrPairs.join('&'); + } + + function queryStringToParamMap() { + var paramStr = options.getWindowLocation().search.substring(1), + params = [], + paramMap = {}; + + if (paramStr.length > 0) { + params = paramStr.split('&'); + for (var i = 0; i < params.length; i++) { + var p = params[i].split('='); + var value = decodeURIComponent(p[1]); + if (value === "true" || value === "false") { + value = JSON.parse(value); + } + paramMap[decodeURIComponent(p[0])] = value; + } + } + + return paramMap; + } + + } + + return QueryString; +}; diff --git a/node_modules/yamljs/test/lib/jasmine-2.0.0/jasmine.css b/node_modules/yamljs/test/lib/jasmine-2.0.0/jasmine.css new file mode 100755 index 00000000..f4d35b6e --- /dev/null +++ b/node_modules/yamljs/test/lib/jasmine-2.0.0/jasmine.css @@ -0,0 +1,55 @@ +body { background-color: #eeeeee; padding: 0; margin: 5px; overflow-y: scroll; } + +.html-reporter { font-size: 11px; font-family: Monaco, "Lucida Console", monospace; line-height: 14px; color: #333333; } +.html-reporter a { text-decoration: none; } +.html-reporter a:hover { text-decoration: underline; } +.html-reporter p, .html-reporter h1, .html-reporter h2, .html-reporter h3, .html-reporter h4, .html-reporter h5, .html-reporter h6 { margin: 0; line-height: 14px; } +.html-reporter .banner, .html-reporter .symbol-summary, .html-reporter .summary, .html-reporter .result-message, .html-reporter .spec .description, .html-reporter .spec-detail .description, .html-reporter .alert .bar, .html-reporter .stack-trace { padding-left: 9px; padding-right: 9px; } +.html-reporter .banner .version { margin-left: 14px; } +.html-reporter #jasmine_content { position: fixed; right: 100%; } +.html-reporter .version { color: #aaaaaa; } +.html-reporter .banner { margin-top: 14px; } +.html-reporter .duration { color: #aaaaaa; float: right; } +.html-reporter .symbol-summary { overflow: hidden; *zoom: 1; margin: 14px 0; } +.html-reporter .symbol-summary li { display: inline-block; height: 8px; width: 14px; font-size: 16px; } +.html-reporter .symbol-summary li.passed { font-size: 14px; } +.html-reporter .symbol-summary li.passed:before { color: #5e7d00; content: "\02022"; } +.html-reporter .symbol-summary li.failed { line-height: 9px; } +.html-reporter .symbol-summary li.failed:before { color: #b03911; content: "x"; font-weight: bold; margin-left: -1px; } +.html-reporter .symbol-summary li.disabled { font-size: 14px; } +.html-reporter .symbol-summary li.disabled:before { color: #bababa; content: "\02022"; } +.html-reporter .symbol-summary li.pending { line-height: 17px; } +.html-reporter .symbol-summary li.pending:before { color: #ba9d37; content: "*"; } +.html-reporter .exceptions { color: #fff; float: right; margin-top: 5px; margin-right: 5px; } +.html-reporter .bar { line-height: 28px; font-size: 14px; display: block; color: #eee; } +.html-reporter .bar.failed { background-color: #b03911; } +.html-reporter .bar.passed { background-color: #a6b779; } +.html-reporter .bar.skipped { background-color: #bababa; } +.html-reporter .bar.menu { background-color: #fff; color: #aaaaaa; } +.html-reporter .bar.menu a { color: #333333; } +.html-reporter .bar a { color: white; } +.html-reporter.spec-list .bar.menu.failure-list, .html-reporter.spec-list .results .failures { display: none; } +.html-reporter.failure-list .bar.menu.spec-list, .html-reporter.failure-list .summary { display: none; } +.html-reporter .running-alert { background-color: #666666; } +.html-reporter .results { margin-top: 14px; } +.html-reporter.showDetails .summaryMenuItem { font-weight: normal; text-decoration: inherit; } +.html-reporter.showDetails .summaryMenuItem:hover { text-decoration: underline; } +.html-reporter.showDetails .detailsMenuItem { font-weight: bold; text-decoration: underline; } +.html-reporter.showDetails .summary { display: none; } +.html-reporter.showDetails #details { display: block; } +.html-reporter .summaryMenuItem { font-weight: bold; text-decoration: underline; } +.html-reporter .summary { margin-top: 14px; } +.html-reporter .summary ul { list-style-type: none; margin-left: 14px; padding-top: 0; padding-left: 0; } +.html-reporter .summary ul.suite { margin-top: 7px; margin-bottom: 7px; } +.html-reporter .summary li.passed a { color: #5e7d00; } +.html-reporter .summary li.failed a { color: #b03911; } +.html-reporter .summary li.pending a { color: #ba9d37; } +.html-reporter .description + .suite { margin-top: 0; } +.html-reporter .suite { margin-top: 14px; } +.html-reporter .suite a { color: #333333; } +.html-reporter .failures .spec-detail { margin-bottom: 28px; } +.html-reporter .failures .spec-detail .description { background-color: #b03911; } +.html-reporter .failures .spec-detail .description a { color: white; } +.html-reporter .result-message { padding-top: 14px; color: #333333; white-space: pre; } +.html-reporter .result-message span.result { display: block; } +.html-reporter .stack-trace { margin: 5px 0 0 0; max-height: 224px; overflow: auto; line-height: 18px; color: #666666; border: 1px solid #ddd; background: white; white-space: pre; } diff --git a/node_modules/yamljs/test/lib/jasmine-2.0.0/jasmine.js b/node_modules/yamljs/test/lib/jasmine-2.0.0/jasmine.js new file mode 100755 index 00000000..24463ecb --- /dev/null +++ b/node_modules/yamljs/test/lib/jasmine-2.0.0/jasmine.js @@ -0,0 +1,2402 @@ +/* +Copyright (c) 2008-2013 Pivotal Labs + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +function getJasmineRequireObj() { + if (typeof module !== "undefined" && module.exports) { + return exports; + } else { + window.jasmineRequire = window.jasmineRequire || {}; + return window.jasmineRequire; + } +} + +getJasmineRequireObj().core = function(jRequire) { + var j$ = {}; + + jRequire.base(j$); + j$.util = jRequire.util(); + j$.Any = jRequire.Any(); + j$.CallTracker = jRequire.CallTracker(); + j$.Clock = jRequire.Clock(); + j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler(); + j$.Env = jRequire.Env(j$); + j$.ExceptionFormatter = jRequire.ExceptionFormatter(); + j$.Expectation = jRequire.Expectation(); + j$.buildExpectationResult = jRequire.buildExpectationResult(); + j$.JsApiReporter = jRequire.JsApiReporter(); + j$.matchersUtil = jRequire.matchersUtil(j$); + j$.ObjectContaining = jRequire.ObjectContaining(j$); + j$.pp = jRequire.pp(j$); + j$.QueueRunner = jRequire.QueueRunner(); + j$.ReportDispatcher = jRequire.ReportDispatcher(); + j$.Spec = jRequire.Spec(j$); + j$.SpyStrategy = jRequire.SpyStrategy(); + j$.Suite = jRequire.Suite(); + j$.Timer = jRequire.Timer(); + j$.version = jRequire.version(); + + j$.matchers = jRequire.requireMatchers(jRequire, j$); + + return j$; +}; + +getJasmineRequireObj().requireMatchers = function(jRequire, j$) { + var availableMatchers = [ + "toBe", + "toBeCloseTo", + "toBeDefined", + "toBeFalsy", + "toBeGreaterThan", + "toBeLessThan", + "toBeNaN", + "toBeNull", + "toBeTruthy", + "toBeUndefined", + "toContain", + "toEqual", + "toHaveBeenCalled", + "toHaveBeenCalledWith", + "toMatch", + "toThrow", + "toThrowError" + ], + matchers = {}; + + for (var i = 0; i < availableMatchers.length; i++) { + var name = availableMatchers[i]; + matchers[name] = jRequire[name](j$); + } + + return matchers; +}; + +getJasmineRequireObj().base = function(j$) { + j$.unimplementedMethod_ = function() { + throw new Error("unimplemented method"); + }; + + j$.MAX_PRETTY_PRINT_DEPTH = 40; + j$.DEFAULT_TIMEOUT_INTERVAL = 5000; + + j$.getGlobal = (function() { + var jasmineGlobal = eval.call(null, "this"); + return function() { + return jasmineGlobal; + }; + })(); + + j$.getEnv = function(options) { + var env = j$.currentEnv_ = j$.currentEnv_ || new j$.Env(options); + //jasmine. singletons in here (setTimeout blah blah). + return env; + }; + + j$.isArray_ = function(value) { + return j$.isA_("Array", value); + }; + + j$.isString_ = function(value) { + return j$.isA_("String", value); + }; + + j$.isNumber_ = function(value) { + return j$.isA_("Number", value); + }; + + j$.isA_ = function(typeName, value) { + return Object.prototype.toString.apply(value) === '[object ' + typeName + ']'; + }; + + j$.isDomNode = function(obj) { + return obj.nodeType > 0; + }; + + j$.any = function(clazz) { + return new j$.Any(clazz); + }; + + j$.objectContaining = function(sample) { + return new j$.ObjectContaining(sample); + }; + + j$.createSpy = function(name, originalFn) { + + var spyStrategy = new j$.SpyStrategy({ + name: name, + fn: originalFn, + getSpy: function() { return spy; } + }), + callTracker = new j$.CallTracker(), + spy = function() { + callTracker.track({ + object: this, + args: Array.prototype.slice.apply(arguments) + }); + return spyStrategy.exec.apply(this, arguments); + }; + + for (var prop in originalFn) { + if (prop === 'and' || prop === 'calls') { + throw new Error("Jasmine spies would overwrite the 'and' and 'calls' properties on the object being spied upon"); + } + + spy[prop] = originalFn[prop]; + } + + spy.and = spyStrategy; + spy.calls = callTracker; + + return spy; + }; + + j$.isSpy = function(putativeSpy) { + if (!putativeSpy) { + return false; + } + return putativeSpy.and instanceof j$.SpyStrategy && + putativeSpy.calls instanceof j$.CallTracker; + }; + + j$.createSpyObj = function(baseName, methodNames) { + if (!j$.isArray_(methodNames) || methodNames.length === 0) { + throw "createSpyObj requires a non-empty array of method names to create spies for"; + } + var obj = {}; + for (var i = 0; i < methodNames.length; i++) { + obj[methodNames[i]] = j$.createSpy(baseName + '.' + methodNames[i]); + } + return obj; + }; +}; + +getJasmineRequireObj().util = function() { + + var util = {}; + + util.inherit = function(childClass, parentClass) { + var Subclass = function() { + }; + Subclass.prototype = parentClass.prototype; + childClass.prototype = new Subclass(); + }; + + util.htmlEscape = function(str) { + if (!str) { + return str; + } + return str.replace(/&/g, '&') + .replace(//g, '>'); + }; + + util.argsToArray = function(args) { + var arrayOfArgs = []; + for (var i = 0; i < args.length; i++) { + arrayOfArgs.push(args[i]); + } + return arrayOfArgs; + }; + + util.isUndefined = function(obj) { + return obj === void 0; + }; + + return util; +}; + +getJasmineRequireObj().Spec = function(j$) { + function Spec(attrs) { + this.expectationFactory = attrs.expectationFactory; + this.resultCallback = attrs.resultCallback || function() {}; + this.id = attrs.id; + this.description = attrs.description || ''; + this.fn = attrs.fn; + this.beforeFns = attrs.beforeFns || function() { return []; }; + this.afterFns = attrs.afterFns || function() { return []; }; + this.onStart = attrs.onStart || function() {}; + this.exceptionFormatter = attrs.exceptionFormatter || function() {}; + this.getSpecName = attrs.getSpecName || function() { return ''; }; + this.expectationResultFactory = attrs.expectationResultFactory || function() { }; + this.queueRunnerFactory = attrs.queueRunnerFactory || function() {}; + this.catchingExceptions = attrs.catchingExceptions || function() { return true; }; + + this.timer = attrs.timer || {setTimeout: setTimeout, clearTimeout: clearTimeout}; + + if (!this.fn) { + this.pend(); + } + + this.result = { + id: this.id, + description: this.description, + fullName: this.getFullName(), + failedExpectations: [] + }; + } + + Spec.prototype.addExpectationResult = function(passed, data) { + if (passed) { + return; + } + this.result.failedExpectations.push(this.expectationResultFactory(data)); + }; + + Spec.prototype.expect = function(actual) { + return this.expectationFactory(actual, this); + }; + + Spec.prototype.execute = function(onComplete) { + var self = this, + timeout; + + this.onStart(this); + + if (this.markedPending || this.disabled) { + complete(); + return; + } + + function timeoutable(fn) { + return function(done) { + timeout = Function.prototype.apply.apply(self.timer.setTimeout, [j$.getGlobal(), [function() { + onException(new Error('Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.')); + done(); + }, j$.DEFAULT_TIMEOUT_INTERVAL]]); + + var callDone = function() { + clearTimeoutable(); + done(); + }; + + fn.call(this, callDone); //TODO: do we care about more than 1 arg? + }; + } + + function clearTimeoutable() { + Function.prototype.apply.apply(self.timer.clearTimeout, [j$.getGlobal(), [timeout]]); + timeout = void 0; + } + + var allFns = this.beforeFns().concat(this.fn).concat(this.afterFns()), + allTimeoutableFns = []; + for (var i = 0; i < allFns.length; i++) { + var fn = allFns[i]; + allTimeoutableFns.push(fn.length > 0 ? timeoutable(fn) : fn); + } + + this.queueRunnerFactory({ + fns: allTimeoutableFns, + onException: onException, + onComplete: complete + }); + + function onException(e) { + clearTimeoutable(); + if (Spec.isPendingSpecException(e)) { + self.pend(); + return; + } + + self.addExpectationResult(false, { + matcherName: "", + passed: false, + expected: "", + actual: "", + error: e + }); + } + + function complete() { + self.result.status = self.status(); + self.resultCallback(self.result); + + if (onComplete) { + onComplete(); + } + } + }; + + Spec.prototype.disable = function() { + this.disabled = true; + }; + + Spec.prototype.pend = function() { + this.markedPending = true; + }; + + Spec.prototype.status = function() { + if (this.disabled) { + return 'disabled'; + } + + if (this.markedPending) { + return 'pending'; + } + + if (this.result.failedExpectations.length > 0) { + return 'failed'; + } else { + return 'passed'; + } + }; + + Spec.prototype.getFullName = function() { + return this.getSpecName(this); + }; + + Spec.pendingSpecExceptionMessage = "=> marked Pending"; + + Spec.isPendingSpecException = function(e) { + return e.toString().indexOf(Spec.pendingSpecExceptionMessage) !== -1; + }; + + return Spec; +}; + +if (typeof window == void 0 && typeof exports == "object") { + exports.Spec = jasmineRequire.Spec; +} + +getJasmineRequireObj().Env = function(j$) { + function Env(options) { + options = options || {}; + + var self = this; + var global = options.global || j$.getGlobal(); + + var totalSpecsDefined = 0; + + var catchExceptions = true; + + var realSetTimeout = j$.getGlobal().setTimeout; + var realClearTimeout = j$.getGlobal().clearTimeout; + this.clock = new j$.Clock(global, new j$.DelayedFunctionScheduler()); + + var runnableLookupTable = {}; + + var spies = []; + + var currentSpec = null; + var currentSuite = null; + + var reporter = new j$.ReportDispatcher([ + "jasmineStarted", + "jasmineDone", + "suiteStarted", + "suiteDone", + "specStarted", + "specDone" + ]); + + this.specFilter = function() { + return true; + }; + + var equalityTesters = []; + + var customEqualityTesters = []; + this.addCustomEqualityTester = function(tester) { + customEqualityTesters.push(tester); + }; + + j$.Expectation.addCoreMatchers(j$.matchers); + + var nextSpecId = 0; + var getNextSpecId = function() { + return 'spec' + nextSpecId++; + }; + + var nextSuiteId = 0; + var getNextSuiteId = function() { + return 'suite' + nextSuiteId++; + }; + + var expectationFactory = function(actual, spec) { + return j$.Expectation.Factory({ + util: j$.matchersUtil, + customEqualityTesters: customEqualityTesters, + actual: actual, + addExpectationResult: addExpectationResult + }); + + function addExpectationResult(passed, result) { + return spec.addExpectationResult(passed, result); + } + }; + + var specStarted = function(spec) { + currentSpec = spec; + reporter.specStarted(spec.result); + }; + + var beforeFns = function(suite) { + return function() { + var befores = []; + while(suite) { + befores = befores.concat(suite.beforeFns); + suite = suite.parentSuite; + } + return befores.reverse(); + }; + }; + + var afterFns = function(suite) { + return function() { + var afters = []; + while(suite) { + afters = afters.concat(suite.afterFns); + suite = suite.parentSuite; + } + return afters; + }; + }; + + var getSpecName = function(spec, suite) { + return suite.getFullName() + ' ' + spec.description; + }; + + // TODO: we may just be able to pass in the fn instead of wrapping here + var buildExpectationResult = j$.buildExpectationResult, + exceptionFormatter = new j$.ExceptionFormatter(), + expectationResultFactory = function(attrs) { + attrs.messageFormatter = exceptionFormatter.message; + attrs.stackFormatter = exceptionFormatter.stack; + + return buildExpectationResult(attrs); + }; + + // TODO: fix this naming, and here's where the value comes in + this.catchExceptions = function(value) { + catchExceptions = !!value; + return catchExceptions; + }; + + this.catchingExceptions = function() { + return catchExceptions; + }; + + var maximumSpecCallbackDepth = 20; + var currentSpecCallbackDepth = 0; + + function clearStack(fn) { + currentSpecCallbackDepth++; + if (currentSpecCallbackDepth >= maximumSpecCallbackDepth) { + currentSpecCallbackDepth = 0; + realSetTimeout(fn, 0); + } else { + fn(); + } + } + + var catchException = function(e) { + return j$.Spec.isPendingSpecException(e) || catchExceptions; + }; + + var queueRunnerFactory = function(options) { + options.catchException = catchException; + options.clearStack = options.clearStack || clearStack; + + new j$.QueueRunner(options).execute(); + }; + + var topSuite = new j$.Suite({ + env: this, + id: getNextSuiteId(), + description: 'Jasmine__TopLevel__Suite', + queueRunner: queueRunnerFactory, + resultCallback: function() {} // TODO - hook this up + }); + runnableLookupTable[topSuite.id] = topSuite; + currentSuite = topSuite; + + this.topSuite = function() { + return topSuite; + }; + + this.execute = function(runnablesToRun) { + runnablesToRun = runnablesToRun || [topSuite.id]; + + var allFns = []; + for(var i = 0; i < runnablesToRun.length; i++) { + var runnable = runnableLookupTable[runnablesToRun[i]]; + allFns.push((function(runnable) { return function(done) { runnable.execute(done); }; })(runnable)); + } + + reporter.jasmineStarted({ + totalSpecsDefined: totalSpecsDefined + }); + + queueRunnerFactory({fns: allFns, onComplete: reporter.jasmineDone}); + }; + + this.addReporter = function(reporterToAdd) { + reporter.addReporter(reporterToAdd); + }; + + this.addMatchers = function(matchersToAdd) { + j$.Expectation.addMatchers(matchersToAdd); + }; + + this.spyOn = function(obj, methodName) { + if (j$.util.isUndefined(obj)) { + throw new Error("spyOn could not find an object to spy upon for " + methodName + "()"); + } + + if (j$.util.isUndefined(obj[methodName])) { + throw new Error(methodName + '() method does not exist'); + } + + if (obj[methodName] && j$.isSpy(obj[methodName])) { + //TODO?: should this return the current spy? Downside: may cause user confusion about spy state + throw new Error(methodName + ' has already been spied upon'); + } + + var spy = j$.createSpy(methodName, obj[methodName]); + + spies.push({ + spy: spy, + baseObj: obj, + methodName: methodName, + originalValue: obj[methodName] + }); + + obj[methodName] = spy; + + return spy; + }; + + var suiteFactory = function(description) { + var suite = new j$.Suite({ + env: self, + id: getNextSuiteId(), + description: description, + parentSuite: currentSuite, + queueRunner: queueRunnerFactory, + onStart: suiteStarted, + resultCallback: function(attrs) { + reporter.suiteDone(attrs); + } + }); + + runnableLookupTable[suite.id] = suite; + return suite; + }; + + this.describe = function(description, specDefinitions) { + var suite = suiteFactory(description); + + var parentSuite = currentSuite; + parentSuite.addChild(suite); + currentSuite = suite; + + var declarationError = null; + try { + specDefinitions.call(suite); + } catch (e) { + declarationError = e; + } + + if (declarationError) { + this.it("encountered a declaration exception", function() { + throw declarationError; + }); + } + + currentSuite = parentSuite; + + return suite; + }; + + this.xdescribe = function(description, specDefinitions) { + var suite = this.describe(description, specDefinitions); + suite.disable(); + return suite; + }; + + var specFactory = function(description, fn, suite) { + totalSpecsDefined++; + + var spec = new j$.Spec({ + id: getNextSpecId(), + beforeFns: beforeFns(suite), + afterFns: afterFns(suite), + expectationFactory: expectationFactory, + exceptionFormatter: exceptionFormatter, + resultCallback: specResultCallback, + getSpecName: function(spec) { + return getSpecName(spec, suite); + }, + onStart: specStarted, + description: description, + expectationResultFactory: expectationResultFactory, + queueRunnerFactory: queueRunnerFactory, + fn: fn, + timer: {setTimeout: realSetTimeout, clearTimeout: realClearTimeout} + }); + + runnableLookupTable[spec.id] = spec; + + if (!self.specFilter(spec)) { + spec.disable(); + } + + return spec; + + function removeAllSpies() { + for (var i = 0; i < spies.length; i++) { + var spyEntry = spies[i]; + spyEntry.baseObj[spyEntry.methodName] = spyEntry.originalValue; + } + spies = []; + } + + function specResultCallback(result) { + removeAllSpies(); + j$.Expectation.resetMatchers(); + customEqualityTesters = []; + currentSpec = null; + reporter.specDone(result); + } + }; + + var suiteStarted = function(suite) { + reporter.suiteStarted(suite.result); + }; + + this.it = function(description, fn) { + var spec = specFactory(description, fn, currentSuite); + currentSuite.addChild(spec); + return spec; + }; + + this.xit = function(description, fn) { + var spec = this.it(description, fn); + spec.pend(); + return spec; + }; + + this.expect = function(actual) { + return currentSpec.expect(actual); + }; + + this.beforeEach = function(beforeEachFunction) { + currentSuite.beforeEach(beforeEachFunction); + }; + + this.afterEach = function(afterEachFunction) { + currentSuite.afterEach(afterEachFunction); + }; + + this.pending = function() { + throw j$.Spec.pendingSpecExceptionMessage; + }; + } + + return Env; +}; + +getJasmineRequireObj().JsApiReporter = function() { + + var noopTimer = { + start: function(){}, + elapsed: function(){ return 0; } + }; + + function JsApiReporter(options) { + var timer = options.timer || noopTimer, + status = "loaded"; + + this.started = false; + this.finished = false; + + this.jasmineStarted = function() { + this.started = true; + status = 'started'; + timer.start(); + }; + + var executionTime; + + this.jasmineDone = function() { + this.finished = true; + executionTime = timer.elapsed(); + status = 'done'; + }; + + this.status = function() { + return status; + }; + + var suites = {}; + + this.suiteStarted = function(result) { + storeSuite(result); + }; + + this.suiteDone = function(result) { + storeSuite(result); + }; + + function storeSuite(result) { + suites[result.id] = result; + } + + this.suites = function() { + return suites; + }; + + var specs = []; + this.specStarted = function(result) { }; + + this.specDone = function(result) { + specs.push(result); + }; + + this.specResults = function(index, length) { + return specs.slice(index, index + length); + }; + + this.specs = function() { + return specs; + }; + + this.executionTime = function() { + return executionTime; + }; + + } + + return JsApiReporter; +}; + +getJasmineRequireObj().Any = function() { + + function Any(expectedObject) { + this.expectedObject = expectedObject; + } + + Any.prototype.jasmineMatches = function(other) { + if (this.expectedObject == String) { + return typeof other == 'string' || other instanceof String; + } + + if (this.expectedObject == Number) { + return typeof other == 'number' || other instanceof Number; + } + + if (this.expectedObject == Function) { + return typeof other == 'function' || other instanceof Function; + } + + if (this.expectedObject == Object) { + return typeof other == 'object'; + } + + if (this.expectedObject == Boolean) { + return typeof other == 'boolean'; + } + + return other instanceof this.expectedObject; + }; + + Any.prototype.jasmineToString = function() { + return ''; + }; + + return Any; +}; + +getJasmineRequireObj().CallTracker = function() { + + function CallTracker() { + var calls = []; + + this.track = function(context) { + calls.push(context); + }; + + this.any = function() { + return !!calls.length; + }; + + this.count = function() { + return calls.length; + }; + + this.argsFor = function(index) { + var call = calls[index]; + return call ? call.args : []; + }; + + this.all = function() { + return calls; + }; + + this.allArgs = function() { + var callArgs = []; + for(var i = 0; i < calls.length; i++){ + callArgs.push(calls[i].args); + } + + return callArgs; + }; + + this.first = function() { + return calls[0]; + }; + + this.mostRecent = function() { + return calls[calls.length - 1]; + }; + + this.reset = function() { + calls = []; + }; + } + + return CallTracker; +}; + +getJasmineRequireObj().Clock = function() { + function Clock(global, delayedFunctionScheduler) { + var self = this, + realTimingFunctions = { + setTimeout: global.setTimeout, + clearTimeout: global.clearTimeout, + setInterval: global.setInterval, + clearInterval: global.clearInterval + }, + fakeTimingFunctions = { + setTimeout: setTimeout, + clearTimeout: clearTimeout, + setInterval: setInterval, + clearInterval: clearInterval + }, + installed = false, + timer; + + self.install = function() { + replace(global, fakeTimingFunctions); + timer = fakeTimingFunctions; + installed = true; + }; + + self.uninstall = function() { + delayedFunctionScheduler.reset(); + replace(global, realTimingFunctions); + timer = realTimingFunctions; + installed = false; + }; + + self.setTimeout = function(fn, delay, params) { + if (legacyIE()) { + if (arguments.length > 2) { + throw new Error("IE < 9 cannot support extra params to setTimeout without a polyfill"); + } + return timer.setTimeout(fn, delay); + } + return Function.prototype.apply.apply(timer.setTimeout, [global, arguments]); + }; + + self.setInterval = function(fn, delay, params) { + if (legacyIE()) { + if (arguments.length > 2) { + throw new Error("IE < 9 cannot support extra params to setInterval without a polyfill"); + } + return timer.setInterval(fn, delay); + } + return Function.prototype.apply.apply(timer.setInterval, [global, arguments]); + }; + + self.clearTimeout = function(id) { + return Function.prototype.call.apply(timer.clearTimeout, [global, id]); + }; + + self.clearInterval = function(id) { + return Function.prototype.call.apply(timer.clearInterval, [global, id]); + }; + + self.tick = function(millis) { + if (installed) { + delayedFunctionScheduler.tick(millis); + } else { + throw new Error("Mock clock is not installed, use jasmine.clock().install()"); + } + }; + + return self; + + function legacyIE() { + //if these methods are polyfilled, apply will be present + return !(realTimingFunctions.setTimeout || realTimingFunctions.setInterval).apply; + } + + function replace(dest, source) { + for (var prop in source) { + dest[prop] = source[prop]; + } + } + + function setTimeout(fn, delay) { + return delayedFunctionScheduler.scheduleFunction(fn, delay, argSlice(arguments, 2)); + } + + function clearTimeout(id) { + return delayedFunctionScheduler.removeFunctionWithId(id); + } + + function setInterval(fn, interval) { + return delayedFunctionScheduler.scheduleFunction(fn, interval, argSlice(arguments, 2), true); + } + + function clearInterval(id) { + return delayedFunctionScheduler.removeFunctionWithId(id); + } + + function argSlice(argsObj, n) { + return Array.prototype.slice.call(argsObj, 2); + } + } + + return Clock; +}; + +getJasmineRequireObj().DelayedFunctionScheduler = function() { + function DelayedFunctionScheduler() { + var self = this; + var scheduledLookup = []; + var scheduledFunctions = {}; + var currentTime = 0; + var delayedFnCount = 0; + + self.tick = function(millis) { + millis = millis || 0; + var endTime = currentTime + millis; + + runScheduledFunctions(endTime); + currentTime = endTime; + }; + + self.scheduleFunction = function(funcToCall, millis, params, recurring, timeoutKey, runAtMillis) { + var f; + if (typeof(funcToCall) === 'string') { + /* jshint evil: true */ + f = function() { return eval(funcToCall); }; + /* jshint evil: false */ + } else { + f = funcToCall; + } + + millis = millis || 0; + timeoutKey = timeoutKey || ++delayedFnCount; + runAtMillis = runAtMillis || (currentTime + millis); + + var funcToSchedule = { + runAtMillis: runAtMillis, + funcToCall: f, + recurring: recurring, + params: params, + timeoutKey: timeoutKey, + millis: millis + }; + + if (runAtMillis in scheduledFunctions) { + scheduledFunctions[runAtMillis].push(funcToSchedule); + } else { + scheduledFunctions[runAtMillis] = [funcToSchedule]; + scheduledLookup.push(runAtMillis); + scheduledLookup.sort(function (a, b) { + return a - b; + }); + } + + return timeoutKey; + }; + + self.removeFunctionWithId = function(timeoutKey) { + for (var runAtMillis in scheduledFunctions) { + var funcs = scheduledFunctions[runAtMillis]; + var i = indexOfFirstToPass(funcs, function (func) { + return func.timeoutKey === timeoutKey; + }); + + if (i > -1) { + if (funcs.length === 1) { + delete scheduledFunctions[runAtMillis]; + deleteFromLookup(runAtMillis); + } else { + funcs.splice(i, 1); + } + + // intervals get rescheduled when executed, so there's never more + // than a single scheduled function with a given timeoutKey + break; + } + } + }; + + self.reset = function() { + currentTime = 0; + scheduledLookup = []; + scheduledFunctions = {}; + delayedFnCount = 0; + }; + + return self; + + function indexOfFirstToPass(array, testFn) { + var index = -1; + + for (var i = 0; i < array.length; ++i) { + if (testFn(array[i])) { + index = i; + break; + } + } + + return index; + } + + function deleteFromLookup(key) { + var value = Number(key); + var i = indexOfFirstToPass(scheduledLookup, function (millis) { + return millis === value; + }); + + if (i > -1) { + scheduledLookup.splice(i, 1); + } + } + + function reschedule(scheduledFn) { + self.scheduleFunction(scheduledFn.funcToCall, + scheduledFn.millis, + scheduledFn.params, + true, + scheduledFn.timeoutKey, + scheduledFn.runAtMillis + scheduledFn.millis); + } + + function runScheduledFunctions(endTime) { + if (scheduledLookup.length === 0 || scheduledLookup[0] > endTime) { + return; + } + + do { + currentTime = scheduledLookup.shift(); + + var funcsToRun = scheduledFunctions[currentTime]; + delete scheduledFunctions[currentTime]; + + for (var i = 0; i < funcsToRun.length; ++i) { + var funcToRun = funcsToRun[i]; + funcToRun.funcToCall.apply(null, funcToRun.params || []); + + if (funcToRun.recurring) { + reschedule(funcToRun); + } + } + } while (scheduledLookup.length > 0 && + // checking first if we're out of time prevents setTimeout(0) + // scheduled in a funcToRun from forcing an extra iteration + currentTime !== endTime && + scheduledLookup[0] <= endTime); + } + } + + return DelayedFunctionScheduler; +}; + +getJasmineRequireObj().ExceptionFormatter = function() { + function ExceptionFormatter() { + this.message = function(error) { + var message = error.name + + ': ' + + error.message; + + if (error.fileName || error.sourceURL) { + message += " in " + (error.fileName || error.sourceURL); + } + + if (error.line || error.lineNumber) { + message += " (line " + (error.line || error.lineNumber) + ")"; + } + + return message; + }; + + this.stack = function(error) { + return error ? error.stack : null; + }; + } + + return ExceptionFormatter; +}; + +getJasmineRequireObj().Expectation = function() { + + var matchers = {}; + + function Expectation(options) { + this.util = options.util || { buildFailureMessage: function() {} }; + this.customEqualityTesters = options.customEqualityTesters || []; + this.actual = options.actual; + this.addExpectationResult = options.addExpectationResult || function(){}; + this.isNot = options.isNot; + + for (var matcherName in matchers) { + this[matcherName] = matchers[matcherName]; + } + } + + Expectation.prototype.wrapCompare = function(name, matcherFactory) { + return function() { + var args = Array.prototype.slice.call(arguments, 0), + expected = args.slice(0), + message = ""; + + args.unshift(this.actual); + + var matcher = matcherFactory(this.util, this.customEqualityTesters), + matcherCompare = matcher.compare; + + function defaultNegativeCompare() { + var result = matcher.compare.apply(null, args); + result.pass = !result.pass; + return result; + } + + if (this.isNot) { + matcherCompare = matcher.negativeCompare || defaultNegativeCompare; + } + + var result = matcherCompare.apply(null, args); + + if (!result.pass) { + if (!result.message) { + args.unshift(this.isNot); + args.unshift(name); + message = this.util.buildFailureMessage.apply(null, args); + } else { + message = result.message; + } + } + + if (expected.length == 1) { + expected = expected[0]; + } + + // TODO: how many of these params are needed? + this.addExpectationResult( + result.pass, + { + matcherName: name, + passed: result.pass, + message: message, + actual: this.actual, + expected: expected // TODO: this may need to be arrayified/sliced + } + ); + }; + }; + + Expectation.addCoreMatchers = function(matchers) { + var prototype = Expectation.prototype; + for (var matcherName in matchers) { + var matcher = matchers[matcherName]; + prototype[matcherName] = prototype.wrapCompare(matcherName, matcher); + } + }; + + Expectation.addMatchers = function(matchersToAdd) { + for (var name in matchersToAdd) { + var matcher = matchersToAdd[name]; + matchers[name] = Expectation.prototype.wrapCompare(name, matcher); + } + }; + + Expectation.resetMatchers = function() { + for (var name in matchers) { + delete matchers[name]; + } + }; + + Expectation.Factory = function(options) { + options = options || {}; + + var expect = new Expectation(options); + + // TODO: this would be nice as its own Object - NegativeExpectation + // TODO: copy instead of mutate options + options.isNot = true; + expect.not = new Expectation(options); + + return expect; + }; + + return Expectation; +}; + +//TODO: expectation result may make more sense as a presentation of an expectation. +getJasmineRequireObj().buildExpectationResult = function() { + function buildExpectationResult(options) { + var messageFormatter = options.messageFormatter || function() {}, + stackFormatter = options.stackFormatter || function() {}; + + return { + matcherName: options.matcherName, + expected: options.expected, + actual: options.actual, + message: message(), + stack: stack(), + passed: options.passed + }; + + function message() { + if (options.passed) { + return "Passed."; + } else if (options.message) { + return options.message; + } else if (options.error) { + return messageFormatter(options.error); + } + return ""; + } + + function stack() { + if (options.passed) { + return ""; + } + + var error = options.error; + if (!error) { + try { + throw new Error(message()); + } catch (e) { + error = e; + } + } + return stackFormatter(error); + } + } + + return buildExpectationResult; +}; + +getJasmineRequireObj().ObjectContaining = function(j$) { + + function ObjectContaining(sample) { + this.sample = sample; + } + + ObjectContaining.prototype.jasmineMatches = function(other, mismatchKeys, mismatchValues) { + if (typeof(this.sample) !== "object") { throw new Error("You must provide an object to objectContaining, not '"+this.sample+"'."); } + + mismatchKeys = mismatchKeys || []; + mismatchValues = mismatchValues || []; + + var hasKey = function(obj, keyName) { + return obj !== null && !j$.util.isUndefined(obj[keyName]); + }; + + for (var property in this.sample) { + if (!hasKey(other, property) && hasKey(this.sample, property)) { + mismatchKeys.push("expected has key '" + property + "', but missing from actual."); + } + else if (!j$.matchersUtil.equals(this.sample[property], other[property])) { + mismatchValues.push("'" + property + "' was '" + (other[property] ? j$.util.htmlEscape(other[property].toString()) : other[property]) + "' in actual, but was '" + (this.sample[property] ? j$.util.htmlEscape(this.sample[property].toString()) : this.sample[property]) + "' in expected."); + } + } + + return (mismatchKeys.length === 0 && mismatchValues.length === 0); + }; + + ObjectContaining.prototype.jasmineToString = function() { + return ""; + }; + + return ObjectContaining; +}; + +getJasmineRequireObj().pp = function(j$) { + + function PrettyPrinter() { + this.ppNestLevel_ = 0; + } + + PrettyPrinter.prototype.format = function(value) { + this.ppNestLevel_++; + try { + if (j$.util.isUndefined(value)) { + this.emitScalar('undefined'); + } else if (value === null) { + this.emitScalar('null'); + } else if (value === j$.getGlobal()) { + this.emitScalar(''); + } else if (value.jasmineToString) { + this.emitScalar(value.jasmineToString()); + } else if (typeof value === 'string') { + this.emitString(value); + } else if (j$.isSpy(value)) { + this.emitScalar("spy on " + value.and.identity()); + } else if (value instanceof RegExp) { + this.emitScalar(value.toString()); + } else if (typeof value === 'function') { + this.emitScalar('Function'); + } else if (typeof value.nodeType === 'number') { + this.emitScalar('HTMLNode'); + } else if (value instanceof Date) { + this.emitScalar('Date(' + value + ')'); + } else if (value.__Jasmine_been_here_before__) { + this.emitScalar(''); + } else if (j$.isArray_(value) || j$.isA_('Object', value)) { + value.__Jasmine_been_here_before__ = true; + if (j$.isArray_(value)) { + this.emitArray(value); + } else { + this.emitObject(value); + } + delete value.__Jasmine_been_here_before__; + } else { + this.emitScalar(value.toString()); + } + } finally { + this.ppNestLevel_--; + } + }; + + PrettyPrinter.prototype.iterateObject = function(obj, fn) { + for (var property in obj) { + if (!obj.hasOwnProperty(property)) { continue; } + if (property == '__Jasmine_been_here_before__') { continue; } + fn(property, obj.__lookupGetter__ ? (!j$.util.isUndefined(obj.__lookupGetter__(property)) && + obj.__lookupGetter__(property) !== null) : false); + } + }; + + PrettyPrinter.prototype.emitArray = j$.unimplementedMethod_; + PrettyPrinter.prototype.emitObject = j$.unimplementedMethod_; + PrettyPrinter.prototype.emitScalar = j$.unimplementedMethod_; + PrettyPrinter.prototype.emitString = j$.unimplementedMethod_; + + function StringPrettyPrinter() { + PrettyPrinter.call(this); + + this.string = ''; + } + + j$.util.inherit(StringPrettyPrinter, PrettyPrinter); + + StringPrettyPrinter.prototype.emitScalar = function(value) { + this.append(value); + }; + + StringPrettyPrinter.prototype.emitString = function(value) { + this.append("'" + value + "'"); + }; + + StringPrettyPrinter.prototype.emitArray = function(array) { + if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) { + this.append("Array"); + return; + } + + this.append('[ '); + for (var i = 0; i < array.length; i++) { + if (i > 0) { + this.append(', '); + } + this.format(array[i]); + } + this.append(' ]'); + }; + + StringPrettyPrinter.prototype.emitObject = function(obj) { + if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) { + this.append("Object"); + return; + } + + var self = this; + this.append('{ '); + var first = true; + + this.iterateObject(obj, function(property, isGetter) { + if (first) { + first = false; + } else { + self.append(', '); + } + + self.append(property); + self.append(' : '); + if (isGetter) { + self.append(''); + } else { + self.format(obj[property]); + } + }); + + this.append(' }'); + }; + + StringPrettyPrinter.prototype.append = function(value) { + this.string += value; + }; + + return function(value) { + var stringPrettyPrinter = new StringPrettyPrinter(); + stringPrettyPrinter.format(value); + return stringPrettyPrinter.string; + }; +}; + +getJasmineRequireObj().QueueRunner = function() { + + function QueueRunner(attrs) { + this.fns = attrs.fns || []; + this.onComplete = attrs.onComplete || function() {}; + this.clearStack = attrs.clearStack || function(fn) {fn();}; + this.onException = attrs.onException || function() {}; + this.catchException = attrs.catchException || function() { return true; }; + this.userContext = {}; + } + + QueueRunner.prototype.execute = function() { + this.run(this.fns, 0); + }; + + QueueRunner.prototype.run = function(fns, recursiveIndex) { + var length = fns.length, + self = this, + iterativeIndex; + + for(iterativeIndex = recursiveIndex; iterativeIndex < length; iterativeIndex++) { + var fn = fns[iterativeIndex]; + if (fn.length > 0) { + return attemptAsync(fn); + } else { + attemptSync(fn); + } + } + + var runnerDone = iterativeIndex >= length; + + if (runnerDone) { + this.clearStack(this.onComplete); + } + + function attemptSync(fn) { + try { + fn.call(self.userContext); + } catch (e) { + handleException(e); + } + } + + function attemptAsync(fn) { + var next = function () { self.run(fns, iterativeIndex + 1); }; + + try { + fn.call(self.userContext, next); + } catch (e) { + handleException(e); + next(); + } + } + + function handleException(e) { + self.onException(e); + if (!self.catchException(e)) { + //TODO: set a var when we catch an exception and + //use a finally block to close the loop in a nice way.. + throw e; + } + } + }; + + return QueueRunner; +}; + +getJasmineRequireObj().ReportDispatcher = function() { + function ReportDispatcher(methods) { + + var dispatchedMethods = methods || []; + + for (var i = 0; i < dispatchedMethods.length; i++) { + var method = dispatchedMethods[i]; + this[method] = (function(m) { + return function() { + dispatch(m, arguments); + }; + }(method)); + } + + var reporters = []; + + this.addReporter = function(reporter) { + reporters.push(reporter); + }; + + return this; + + function dispatch(method, args) { + for (var i = 0; i < reporters.length; i++) { + var reporter = reporters[i]; + if (reporter[method]) { + reporter[method].apply(reporter, args); + } + } + } + } + + return ReportDispatcher; +}; + + +getJasmineRequireObj().SpyStrategy = function() { + + function SpyStrategy(options) { + options = options || {}; + + var identity = options.name || "unknown", + originalFn = options.fn || function() {}, + getSpy = options.getSpy || function() {}, + plan = function() {}; + + this.identity = function() { + return identity; + }; + + this.exec = function() { + return plan.apply(this, arguments); + }; + + this.callThrough = function() { + plan = originalFn; + return getSpy(); + }; + + this.returnValue = function(value) { + plan = function() { + return value; + }; + return getSpy(); + }; + + this.throwError = function(something) { + var error = (something instanceof Error) ? something : new Error(something); + plan = function() { + throw error; + }; + return getSpy(); + }; + + this.callFake = function(fn) { + plan = fn; + return getSpy(); + }; + + this.stub = function(fn) { + plan = function() {}; + return getSpy(); + }; + } + + return SpyStrategy; +}; + +getJasmineRequireObj().Suite = function() { + function Suite(attrs) { + this.env = attrs.env; + this.id = attrs.id; + this.parentSuite = attrs.parentSuite; + this.description = attrs.description; + this.onStart = attrs.onStart || function() {}; + this.resultCallback = attrs.resultCallback || function() {}; + this.clearStack = attrs.clearStack || function(fn) {fn();}; + + this.beforeFns = []; + this.afterFns = []; + this.queueRunner = attrs.queueRunner || function() {}; + this.disabled = false; + + this.children = []; + + this.result = { + id: this.id, + status: this.disabled ? 'disabled' : '', + description: this.description, + fullName: this.getFullName() + }; + } + + Suite.prototype.getFullName = function() { + var fullName = this.description; + for (var parentSuite = this.parentSuite; parentSuite; parentSuite = parentSuite.parentSuite) { + if (parentSuite.parentSuite) { + fullName = parentSuite.description + ' ' + fullName; + } + } + return fullName; + }; + + Suite.prototype.disable = function() { + this.disabled = true; + }; + + Suite.prototype.beforeEach = function(fn) { + this.beforeFns.unshift(fn); + }; + + Suite.prototype.afterEach = function(fn) { + this.afterFns.unshift(fn); + }; + + Suite.prototype.addChild = function(child) { + this.children.push(child); + }; + + Suite.prototype.execute = function(onComplete) { + var self = this; + if (this.disabled) { + complete(); + return; + } + + var allFns = []; + + for (var i = 0; i < this.children.length; i++) { + allFns.push(wrapChildAsAsync(this.children[i])); + } + + this.onStart(this); + + this.queueRunner({ + fns: allFns, + onComplete: complete + }); + + function complete() { + self.resultCallback(self.result); + + if (onComplete) { + onComplete(); + } + } + + function wrapChildAsAsync(child) { + return function(done) { child.execute(done); }; + } + }; + + return Suite; +}; + +if (typeof window == void 0 && typeof exports == "object") { + exports.Suite = jasmineRequire.Suite; +} + +getJasmineRequireObj().Timer = function() { + function Timer(options) { + options = options || {}; + + var now = options.now || function() { return new Date().getTime(); }, + startTime; + + this.start = function() { + startTime = now(); + }; + + this.elapsed = function() { + return now() - startTime; + }; + } + + return Timer; +}; + +getJasmineRequireObj().matchersUtil = function(j$) { + // TODO: what to do about jasmine.pp not being inject? move to JSON.stringify? gut PrettyPrinter? + + return { + equals: function(a, b, customTesters) { + customTesters = customTesters || []; + + return eq(a, b, [], [], customTesters); + }, + + contains: function(haystack, needle, customTesters) { + customTesters = customTesters || []; + + if (Object.prototype.toString.apply(haystack) === "[object Array]") { + for (var i = 0; i < haystack.length; i++) { + if (eq(haystack[i], needle, [], [], customTesters)) { + return true; + } + } + return false; + } + return haystack.indexOf(needle) >= 0; + }, + + buildFailureMessage: function() { + var args = Array.prototype.slice.call(arguments, 0), + matcherName = args[0], + isNot = args[1], + actual = args[2], + expected = args.slice(3), + englishyPredicate = matcherName.replace(/[A-Z]/g, function(s) { return ' ' + s.toLowerCase(); }); + + var message = "Expected " + + j$.pp(actual) + + (isNot ? " not " : " ") + + englishyPredicate; + + if (expected.length > 0) { + for (var i = 0; i < expected.length; i++) { + if (i > 0) { + message += ","; + } + message += " " + j$.pp(expected[i]); + } + } + + return message + "."; + } + }; + + // Equality function lovingly adapted from isEqual in + // [Underscore](http://underscorejs.org) + function eq(a, b, aStack, bStack, customTesters) { + var result = true; + + for (var i = 0; i < customTesters.length; i++) { + var customTesterResult = customTesters[i](a, b); + if (!j$.util.isUndefined(customTesterResult)) { + return customTesterResult; + } + } + + if (a instanceof j$.Any) { + result = a.jasmineMatches(b); + if (result) { + return true; + } + } + + if (b instanceof j$.Any) { + result = b.jasmineMatches(a); + if (result) { + return true; + } + } + + if (b instanceof j$.ObjectContaining) { + result = b.jasmineMatches(a); + if (result) { + return true; + } + } + + if (a instanceof Error && b instanceof Error) { + return a.message == b.message; + } + + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) { return a !== 0 || 1 / a == 1 / b; } + // A strict comparison is necessary because `null == undefined`. + if (a === null || b === null) { return a === b; } + var className = Object.prototype.toString.call(a); + if (className != Object.prototype.toString.call(b)) { return false; } + switch (className) { + // Strings, numbers, dates, and booleans are compared by value. + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return a == String(b); + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for + // other numeric values. + return a != +a ? b != +b : (a === 0 ? 1 / a == 1 / b : a == +b); + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a == +b; + // RegExps are compared by their source patterns and flags. + case '[object RegExp]': + return a.source == b.source && + a.global == b.global && + a.multiline == b.multiline && + a.ignoreCase == b.ignoreCase; + } + if (typeof a != 'object' || typeof b != 'object') { return false; } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] == a) { return bStack[length] == b; } + } + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); + var size = 0; + // Recursively compare objects and arrays. + if (className == '[object Array]') { + // Compare array lengths to determine if a deep comparison is necessary. + size = a.length; + result = size == b.length; + if (result) { + // Deep compare the contents, ignoring non-numeric properties. + while (size--) { + if (!(result = eq(a[size], b[size], aStack, bStack, customTesters))) { break; } + } + } + } else { + // Objects with different constructors are not equivalent, but `Object`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(isFunction(aCtor) && (aCtor instanceof aCtor) && + isFunction(bCtor) && (bCtor instanceof bCtor))) { + return false; + } + // Deep compare objects. + for (var key in a) { + if (has(a, key)) { + // Count the expected number of properties. + size++; + // Deep compare each member. + if (!(result = has(b, key) && eq(a[key], b[key], aStack, bStack, customTesters))) { break; } + } + } + // Ensure that both objects contain the same number of properties. + if (result) { + for (key in b) { + if (has(b, key) && !(size--)) { break; } + } + result = !size; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + + return result; + + function has(obj, key) { + return obj.hasOwnProperty(key); + } + + function isFunction(obj) { + return typeof obj === 'function'; + } + } +}; + +getJasmineRequireObj().toBe = function() { + function toBe() { + return { + compare: function(actual, expected) { + return { + pass: actual === expected + }; + } + }; + } + + return toBe; +}; + +getJasmineRequireObj().toBeCloseTo = function() { + + function toBeCloseTo() { + return { + compare: function(actual, expected, precision) { + if (precision !== 0) { + precision = precision || 2; + } + + return { + pass: Math.abs(expected - actual) < (Math.pow(10, -precision) / 2) + }; + } + }; + } + + return toBeCloseTo; +}; + +getJasmineRequireObj().toBeDefined = function() { + function toBeDefined() { + return { + compare: function(actual) { + return { + pass: (void 0 !== actual) + }; + } + }; + } + + return toBeDefined; +}; + +getJasmineRequireObj().toBeFalsy = function() { + function toBeFalsy() { + return { + compare: function(actual) { + return { + pass: !!!actual + }; + } + }; + } + + return toBeFalsy; +}; + +getJasmineRequireObj().toBeGreaterThan = function() { + + function toBeGreaterThan() { + return { + compare: function(actual, expected) { + return { + pass: actual > expected + }; + } + }; + } + + return toBeGreaterThan; +}; + + +getJasmineRequireObj().toBeLessThan = function() { + function toBeLessThan() { + return { + + compare: function(actual, expected) { + return { + pass: actual < expected + }; + } + }; + } + + return toBeLessThan; +}; +getJasmineRequireObj().toBeNaN = function(j$) { + + function toBeNaN() { + return { + compare: function(actual) { + var result = { + pass: (actual !== actual) + }; + + if (result.pass) { + result.message = "Expected actual not to be NaN."; + } else { + result.message = "Expected " + j$.pp(actual) + " to be NaN."; + } + + return result; + } + }; + } + + return toBeNaN; +}; + +getJasmineRequireObj().toBeNull = function() { + + function toBeNull() { + return { + compare: function(actual) { + return { + pass: actual === null + }; + } + }; + } + + return toBeNull; +}; + +getJasmineRequireObj().toBeTruthy = function() { + + function toBeTruthy() { + return { + compare: function(actual) { + return { + pass: !!actual + }; + } + }; + } + + return toBeTruthy; +}; + +getJasmineRequireObj().toBeUndefined = function() { + + function toBeUndefined() { + return { + compare: function(actual) { + return { + pass: void 0 === actual + }; + } + }; + } + + return toBeUndefined; +}; + +getJasmineRequireObj().toContain = function() { + function toContain(util, customEqualityTesters) { + customEqualityTesters = customEqualityTesters || []; + + return { + compare: function(actual, expected) { + + return { + pass: util.contains(actual, expected, customEqualityTesters) + }; + } + }; + } + + return toContain; +}; + +getJasmineRequireObj().toEqual = function() { + + function toEqual(util, customEqualityTesters) { + customEqualityTesters = customEqualityTesters || []; + + return { + compare: function(actual, expected) { + var result = { + pass: false + }; + + result.pass = util.equals(actual, expected, customEqualityTesters); + + return result; + } + }; + } + + return toEqual; +}; + +getJasmineRequireObj().toHaveBeenCalled = function(j$) { + + function toHaveBeenCalled() { + return { + compare: function(actual) { + var result = {}; + + if (!j$.isSpy(actual)) { + throw new Error('Expected a spy, but got ' + j$.pp(actual) + '.'); + } + + if (arguments.length > 1) { + throw new Error('toHaveBeenCalled does not take arguments, use toHaveBeenCalledWith'); + } + + result.pass = actual.calls.any(); + + result.message = result.pass ? + "Expected spy " + actual.and.identity() + " not to have been called." : + "Expected spy " + actual.and.identity() + " to have been called."; + + return result; + } + }; + } + + return toHaveBeenCalled; +}; + +getJasmineRequireObj().toHaveBeenCalledWith = function(j$) { + + function toHaveBeenCalledWith(util) { + return { + compare: function() { + var args = Array.prototype.slice.call(arguments, 0), + actual = args[0], + expectedArgs = args.slice(1), + result = { pass: false }; + + if (!j$.isSpy(actual)) { + throw new Error('Expected a spy, but got ' + j$.pp(actual) + '.'); + } + + if (!actual.calls.any()) { + result.message = "Expected spy " + actual.and.identity() + " to have been called with " + j$.pp(expectedArgs) + " but it was never called."; + return result; + } + + if (util.contains(actual.calls.allArgs(), expectedArgs)) { + result.pass = true; + result.message = "Expected spy " + actual.and.identity() + " not to have been called with " + j$.pp(expectedArgs) + " but it was."; + } else { + result.message = "Expected spy " + actual.and.identity() + " to have been called with " + j$.pp(expectedArgs) + " but actual calls were " + j$.pp(actual.calls.allArgs()).replace(/^\[ | \]$/g, '') + "."; + } + + return result; + } + }; + } + + return toHaveBeenCalledWith; +}; + +getJasmineRequireObj().toMatch = function() { + + function toMatch() { + return { + compare: function(actual, expected) { + var regexp = new RegExp(expected); + + return { + pass: regexp.test(actual) + }; + } + }; + } + + return toMatch; +}; + +getJasmineRequireObj().toThrow = function(j$) { + + function toThrow(util) { + return { + compare: function(actual, expected) { + var result = { pass: false }, + threw = false, + thrown; + + if (typeof actual != "function") { + throw new Error("Actual is not a Function"); + } + + try { + actual(); + } catch (e) { + threw = true; + thrown = e; + } + + if (!threw) { + result.message = "Expected function to throw an exception."; + return result; + } + + if (arguments.length == 1) { + result.pass = true; + result.message = "Expected function not to throw, but it threw " + j$.pp(thrown) + "."; + + return result; + } + + if (util.equals(thrown, expected)) { + result.pass = true; + result.message = "Expected function not to throw " + j$.pp(expected) + "."; + } else { + result.message = "Expected function to throw " + j$.pp(expected) + ", but it threw " + j$.pp(thrown) + "."; + } + + return result; + } + }; + } + + return toThrow; +}; + +getJasmineRequireObj().toThrowError = function(j$) { + function toThrowError (util) { + return { + compare: function(actual) { + var threw = false, + thrown, + errorType, + message, + regexp, + name, + constructorName; + + if (typeof actual != "function") { + throw new Error("Actual is not a Function"); + } + + extractExpectedParams.apply(null, arguments); + + try { + actual(); + } catch (e) { + threw = true; + thrown = e; + } + + if (!threw) { + return fail("Expected function to throw an Error."); + } + + if (!(thrown instanceof Error)) { + return fail("Expected function to throw an Error, but it threw " + thrown + "."); + } + + if (arguments.length == 1) { + return pass("Expected function not to throw an Error, but it threw " + fnNameFor(thrown) + "."); + } + + if (errorType) { + name = fnNameFor(errorType); + constructorName = fnNameFor(thrown.constructor); + } + + if (errorType && message) { + if (thrown.constructor == errorType && util.equals(thrown.message, message)) { + return pass("Expected function not to throw " + name + " with message \"" + message + "\"."); + } else { + return fail("Expected function to throw " + name + " with message \"" + message + + "\", but it threw " + constructorName + " with message \"" + thrown.message + "\"."); + } + } + + if (errorType && regexp) { + if (thrown.constructor == errorType && regexp.test(thrown.message)) { + return pass("Expected function not to throw " + name + " with message matching " + regexp + "."); + } else { + return fail("Expected function to throw " + name + " with message matching " + regexp + + ", but it threw " + constructorName + " with message \"" + thrown.message + "\"."); + } + } + + if (errorType) { + if (thrown.constructor == errorType) { + return pass("Expected function not to throw " + name + "."); + } else { + return fail("Expected function to throw " + name + ", but it threw " + constructorName + "."); + } + } + + if (message) { + if (thrown.message == message) { + return pass("Expected function not to throw an exception with message " + j$.pp(message) + "."); + } else { + return fail("Expected function to throw an exception with message " + j$.pp(message) + + ", but it threw an exception with message " + j$.pp(thrown.message) + "."); + } + } + + if (regexp) { + if (regexp.test(thrown.message)) { + return pass("Expected function not to throw an exception with a message matching " + j$.pp(regexp) + "."); + } else { + return fail("Expected function to throw an exception with a message matching " + j$.pp(regexp) + + ", but it threw an exception with message " + j$.pp(thrown.message) + "."); + } + } + + function fnNameFor(func) { + return func.name || func.toString().match(/^\s*function\s*(\w*)\s*\(/)[1]; + } + + function pass(notMessage) { + return { + pass: true, + message: notMessage + }; + } + + function fail(message) { + return { + pass: false, + message: message + }; + } + + function extractExpectedParams() { + if (arguments.length == 1) { + return; + } + + if (arguments.length == 2) { + var expected = arguments[1]; + + if (expected instanceof RegExp) { + regexp = expected; + } else if (typeof expected == "string") { + message = expected; + } else if (checkForAnErrorType(expected)) { + errorType = expected; + } + + if (!(errorType || message || regexp)) { + throw new Error("Expected is not an Error, string, or RegExp."); + } + } else { + if (checkForAnErrorType(arguments[1])) { + errorType = arguments[1]; + } else { + throw new Error("Expected error type is not an Error."); + } + + if (arguments[2] instanceof RegExp) { + regexp = arguments[2]; + } else if (typeof arguments[2] == "string") { + message = arguments[2]; + } else { + throw new Error("Expected error message is not a string or RegExp."); + } + } + } + + function checkForAnErrorType(type) { + if (typeof type !== "function") { + return false; + } + + var Surrogate = function() {}; + Surrogate.prototype = type.prototype; + return (new Surrogate()) instanceof Error; + } + } + }; + } + + return toThrowError; +}; + +getJasmineRequireObj().version = function() { + return "2.0.0"; +}; diff --git a/node_modules/yamljs/test/lib/jasmine-2.0.0/jasmine_favicon.png b/node_modules/yamljs/test/lib/jasmine-2.0.0/jasmine_favicon.png new file mode 100755 index 00000000..3562e278 Binary files /dev/null and b/node_modules/yamljs/test/lib/jasmine-2.0.0/jasmine_favicon.png differ diff --git a/node_modules/yamljs/test/spec/YamlSpec.coffee b/node_modules/yamljs/test/spec/YamlSpec.coffee new file mode 100644 index 00000000..a565f9d6 --- /dev/null +++ b/node_modules/yamljs/test/spec/YamlSpec.coffee @@ -0,0 +1,1474 @@ + +unless YAML? + YAML = require '../../src/Yaml' + + +# Parsing +# + +describe 'Parsed YAML Collections', -> + + it 'can be simple sequence', -> + + expect YAML.parse """ + - apple + - banana + - carrot + """ + .toEqual ['apple', 'banana', 'carrot'] + + + it 'can be nested sequences', -> + + expect YAML.parse """ + - + - foo + - bar + - baz + """ + .toEqual [['foo', 'bar', 'baz']] + + + it 'can be mixed sequences', -> + + expect YAML.parse """ + - apple + - + - foo + - bar + - x123 + - banana + - carrot + """ + .toEqual ['apple', ['foo', 'bar', 'x123'], 'banana', 'carrot'] + + + it 'can be deeply nested sequences', -> + + expect YAML.parse """ + - + - + - uno + - dos + """ + .toEqual [[['uno', 'dos']]] + + + it 'can be simple mapping', -> + + expect YAML.parse """ + foo: whatever + bar: stuff + """ + .toEqual foo: 'whatever', bar: 'stuff' + + + it 'can be sequence in a mapping', -> + + expect YAML.parse """ + foo: whatever + bar: + - uno + - dos + """ + .toEqual foo: 'whatever', bar: ['uno', 'dos'] + + + it 'can be nested mappings', -> + + expect YAML.parse """ + foo: whatever + bar: + fruit: apple + name: steve + sport: baseball + """ + .toEqual foo: 'whatever', bar: (fruit: 'apple', name: 'steve', sport: 'baseball') + + + it 'can be mixed mapping', -> + + expect YAML.parse """ + foo: whatever + bar: + - + fruit: apple + name: steve + sport: baseball + - more + - + python: rocks + perl: papers + ruby: scissorses + """ + .toEqual foo: 'whatever', bar: [ + (fruit: 'apple', name: 'steve', sport: 'baseball'), + 'more', + (python: 'rocks', perl: 'papers', ruby: 'scissorses') + ] + + + it 'can have mapping-in-sequence shortcut', -> + + expect YAML.parse """ + - work on YAML.py: + - work on Store + """ + .toEqual [('work on YAML.py': ['work on Store'])] + + + it 'can have unindented sequence-in-mapping shortcut', -> + + expect YAML.parse """ + allow: + - 'localhost' + - '%.sourceforge.net' + - '%.freepan.org' + """ + .toEqual (allow: ['localhost', '%.sourceforge.net', '%.freepan.org']) + + + it 'can merge key', -> + + expect YAML.parse """ + mapping: + name: Joe + job: Accountant + <<: + age: 38 + """ + .toEqual mapping: + name: 'Joe' + job: 'Accountant' + age: 38 + + it 'can ignore trailing empty lines for smallest indent', -> + + expect YAML.parse """ trailing: empty lines\n""" + .toEqual trailing: 'empty lines' + +describe 'Parsed YAML Inline Collections', -> + + it 'can be simple inline array', -> + + expect YAML.parse """ + --- + seq: [ a, b, c ] + """ + .toEqual seq: ['a', 'b', 'c'] + + + it 'can be simple inline hash', -> + + expect YAML.parse """ + --- + hash: { name: Steve, foo: bar } + """ + .toEqual hash: (name: 'Steve', foo: 'bar') + + + it 'can be nested inline hash', -> + + expect YAML.parse """ + --- + hash: { val1: "string", val2: { v2k1: "v2k1v" } } + """ + .toEqual hash: (val1: 'string', val2: (v2k1: 'v2k1v')) + + + it 'can be multi-line inline collections', -> + + expect YAML.parse """ + languages: [ Ruby, + Perl, + Python ] + websites: { YAML: yaml.org, + Ruby: ruby-lang.org, + Python: python.org, + Perl: use.perl.org } + """ + .toEqual ( + languages: ['Ruby', 'Perl', 'Python'] + websites: + YAML: 'yaml.org' + Ruby: 'ruby-lang.org' + Python: 'python.org' + Perl: 'use.perl.org' + ) + + + +describe 'Parsed YAML Basic Types', -> + + it 'can be strings', -> + + expect YAML.parse """ + --- + String + """ + .toEqual 'String' + + + it 'can be double-quoted strings with backslashes', -> + + expect YAML.parse """ + str: + "string with \\\\ inside" + """ + .toEqual str: 'string with \\ inside' + + + it 'can be single-quoted strings with backslashes', -> + + expect YAML.parse """ + str: + 'string with \\\\ inside' + """ + .toEqual str: 'string with \\\\ inside' + + + it 'can be double-quoted strings with line breaks', -> + + expect YAML.parse """ + str: + "string with \\n inside" + """ + .toEqual str: 'string with \n inside' + + + it 'can be single-quoted strings with escaped line breaks', -> + + expect YAML.parse """ + str: + 'string with \\n inside' + """ + .toEqual str: 'string with \\n inside' + + + it 'can be double-quoted strings with line breaks and backslashes', -> + + expect YAML.parse """ + str: + "string with \\n inside and \\\\ also" + """ + .toEqual str: 'string with \n inside and \\ also' + + + it 'can be single-quoted strings with line breaks and backslashes', -> + + expect YAML.parse """ + str: + 'string with \\n inside and \\\\ also' + """ + .toEqual str: 'string with \\n inside and \\\\ also' + + + it 'can have string characters in sequences', -> + + expect YAML.parse """ + - What's Yaml? + - It's for writing data structures in plain text. + - And? + - And what? That's not good enough for you? + - No, I mean, "And what about Yaml?" + - Oh, oh yeah. Uh.. Yaml for JavaScript. + """ + .toEqual [ + "What's Yaml?", + "It's for writing data structures in plain text.", + "And?", + "And what? That's not good enough for you?", + "No, I mean, \"And what about Yaml?\"", + "Oh, oh yeah. Uh.. Yaml for JavaScript." + ] + + + it 'can have indicators in strings', -> + + expect YAML.parse """ + the colon followed by space is an indicator: but is a string:right here + same for the pound sign: here we have it#in a string + the comma can, honestly, be used in most cases: [ but not in, inline collections ] + """ + .toEqual ( + 'the colon followed by space is an indicator': 'but is a string:right here', + 'same for the pound sign': 'here we have it#in a string', + 'the comma can, honestly, be used in most cases': ['but not in', 'inline collections'] + ) + + + it 'can force strings', -> + + expect YAML.parse """ + date string: !str 2001-08-01 + number string: !str 192 + date string 2: !!str 2001-08-01 + number string 2: !!str 192 + """ + .toEqual ( + 'date string': '2001-08-01', + 'number string': '192' , + 'date string 2': '2001-08-01', + 'number string 2': '192' + ) + + + it 'can be single-quoted strings', -> + + expect YAML.parse """ + all my favorite symbols: '#:!/%.)' + a few i hate: '&(*' + why do i hate them?: 'it''s very hard to explain' + """ + .toEqual ( + 'all my favorite symbols': '#:!/%.)', + 'a few i hate': '&(*', + 'why do i hate them?': 'it\'s very hard to explain' + ) + + + it 'can be double-quoted strings', -> + + expect YAML.parse """ + i know where i want my line breaks: "one here\\nand another here\\n" + """ + .toEqual ( + 'i know where i want my line breaks': "one here\nand another here\n" + ) + + + it 'can be null', -> + + expect YAML.parse """ + name: Mr. Show + hosted by: Bob and David + date of next season: ~ + """ + .toEqual ( + 'name': 'Mr. Show' + 'hosted by': 'Bob and David' + 'date of next season': null + ) + + + it 'can be boolean', -> + + expect YAML.parse """ + Is Gus a Liar?: true + Do I rely on Gus for Sustenance?: false + """ + .toEqual ( + 'Is Gus a Liar?': true + 'Do I rely on Gus for Sustenance?': false + ) + + + it 'can be integers', -> + + expect YAML.parse """ + zero: 0 + simple: 12 + one-thousand: 1,000 + negative one-thousand: -1,000 + """ + .toEqual ( + 'zero': 0 + 'simple': 12 + 'one-thousand': 1000 + 'negative one-thousand': -1000 + ) + + + it 'can be integers as map keys', -> + + expect YAML.parse """ + 1: one + 2: two + 3: three + """ + .toEqual ( + 1: 'one' + 2: 'two' + 3: 'three' + ) + + + it 'can be floats', -> + + expect YAML.parse """ + a simple float: 2.00 + larger float: 1,000.09 + scientific notation: 1.00009e+3 + """ + .toEqual ( + 'a simple float': 2.0 + 'larger float': 1000.09 + 'scientific notation': 1000.09 + ) + + + it 'can be time', -> + + iso8601Date = new Date Date.UTC(2001, 12-1, 14, 21, 59, 43, 10) + iso8601Date.setTime iso8601Date.getTime() - 5 * 3600 * 1000 + + spaceSeparatedDate = new Date Date.UTC(2001, 12-1, 14, 21, 59, 43, 10) + spaceSeparatedDate.setTime spaceSeparatedDate.getTime() + 5 * 3600 * 1000 + + withDatesToTime = (input) -> + res = {} + for key, val of input + res[key] = val.getTime() + return res + + expect withDatesToTime(YAML.parse """ + iso8601: 2001-12-14t21:59:43.010+05:00 + space separated: 2001-12-14 21:59:43.010 -05:00 + """) + .toEqual withDatesToTime ( + 'iso8601': iso8601Date + 'space separated': spaceSeparatedDate + ) + + + it 'can be date', -> + + aDate = new Date Date.UTC(1976, 7-1, 31, 0, 0, 0, 0) + + withDatesToTime = (input) -> + return input + res = {} + for key, val of input + res[key] = val.getTime() + return res + + expect withDatesToTime(YAML.parse """ + date: 1976-07-31 + """) + .toEqual withDatesToTime ( + 'date': aDate + ) + + + +describe 'Parsed YAML Blocks', -> + + it 'can be single ending newline', -> + + expect YAML.parse """ + --- + this: | + Foo + Bar + """ + .toEqual 'this': "Foo\nBar\n" + + + it 'can be single ending newline with \'+\' indicator', -> + + expect YAML.parse """ + normal: | + extra new lines not kept + + preserving: |+ + extra new lines are kept + + + dummy: value + """ + .toEqual ( + 'normal': "extra new lines not kept\n" + 'preserving': "extra new lines are kept\n\n\n" + 'dummy': 'value' + ) + + + it 'can be multi-line block handling trailing newlines in function of \'+\', \'-\' indicators', -> + + expect YAML.parse """ + clipped: | + This has one newline. + + + + same as "clipped" above: "This has one newline.\\n" + + stripped: |- + This has no newline. + + + + same as "stripped" above: "This has no newline." + + kept: |+ + This has four newlines. + + + + same as "kept" above: "This has four newlines.\\n\\n\\n\\n" + """ + .toEqual ( + 'clipped': "This has one newline.\n" + 'same as "clipped" above': "This has one newline.\n" + 'stripped':'This has no newline.' + 'same as "stripped" above': 'This has no newline.' + 'kept': "This has four newlines.\n\n\n\n" + 'same as "kept" above': "This has four newlines.\n\n\n\n" + ) + + + it 'can be folded block in a sequence', -> + + expect YAML.parse """ + --- + - apple + - banana + - > + can't you see + the beauty of yaml? + hmm + - dog + """ + .toEqual [ + 'apple', + 'banana', + "can't you see the beauty of yaml? hmm\n", + 'dog' + ] + + + it 'can be folded block as a mapping value', -> + + expect YAML.parse """ + --- + quote: > + Mark McGwire's + year was crippled + by a knee injury. + source: espn + """ + .toEqual ( + 'quote': "Mark McGwire's year was crippled by a knee injury.\n" + 'source': 'espn' + ) + + + it 'can be folded block handling trailing newlines in function of \'+\', \'-\' indicators', -> + + expect YAML.parse """ + clipped: > + This has one newline. + + + + same as "clipped" above: "This has one newline.\\n" + + stripped: >- + This has no newline. + + + + same as "stripped" above: "This has no newline." + + kept: >+ + This has four newlines. + + + + same as "kept" above: "This has four newlines.\\n\\n\\n\\n" + """ + .toEqual ( + 'clipped': "This has one newline.\n" + 'same as "clipped" above': "This has one newline.\n" + 'stripped': 'This has no newline.' + 'same as "stripped" above': 'This has no newline.' + 'kept': "This has four newlines.\n\n\n\n" + 'same as "kept" above': "This has four newlines.\n\n\n\n" + ) + + + it 'can be the whole document as intented block', -> + + expect YAML.parse """ + --- + foo: "bar" + baz: + - "qux" + - "quxx" + corge: null + """ + .toEqual ( + 'foo': "bar" + 'baz': ['qux', 'quxx'] + 'corge': null + ) + + + + +describe 'Parsed YAML Comments', -> + + it 'can begin the document', -> + + expect YAML.parse """ + # This is a comment + hello: world + """ + .toEqual ( + hello: 'world' + ) + + + it 'can be less indented in mapping', -> + + expect YAML.parse """ + parts: + a: 'b' + # normally indented comment + c: 'd' + # less indented comment + e: 'f' + """ + .toEqual ( + parts: {a: 'b', c: 'd', e: 'f'} + ) + + + it 'can be less indented in sequence', -> + + expect YAML.parse """ + list-header: + - item1 + # - item2 + - item3 + # - item4 + """ + .toEqual ( + 'list-header': ['item1', 'item3'] + ) + + + it 'can finish a line', -> + + expect YAML.parse """ + hello: world # This is a comment + """ + .toEqual ( + hello: 'world' + ) + + + it 'can end the document', -> + + expect YAML.parse """ + hello: world + # This is a comment + """ + .toEqual ( + hello: 'world' + ) + + + +describe 'Parsed YAML Aliases and Anchors', -> + + it 'can be simple alias', -> + + expect YAML.parse """ + - &showell Steve + - Clark + - Brian + - Oren + - *showell + """ + .toEqual ['Steve', 'Clark', 'Brian', 'Oren', 'Steve'] + + + it 'can be alias of a mapping', -> + + expect YAML.parse """ + - &hello + Meat: pork + Starch: potato + - banana + - *hello + """ + .toEqual [ + Meat: 'pork', Starch: 'potato' + , + 'banana' + , + Meat: 'pork', Starch: 'potato' + ] + + + +describe 'Parsed YAML Documents', -> + + it 'can have YAML header', -> + + expect YAML.parse """ + --- %YAML:1.0 + foo: 1 + bar: 2 + """ + .toEqual ( + foo: 1 + bar: 2 + ) + + + it 'can have leading document separator', -> + + expect YAML.parse """ + --- + - foo: 1 + bar: 2 + """ + .toEqual [( + foo: 1 + bar: 2 + )] + + + it 'can have multiple document separators in block', -> + + expect YAML.parse """ + foo: | + --- + foo: bar + --- + yo: baz + bar: | + fooness + """ + .toEqual ( + foo: "---\nfoo: bar\n---\nyo: baz\n" + bar: "fooness\n" + ) + + +# Dumping +# + +describe 'Dumped YAML Collections', -> + + it 'can be simple sequence', -> + + expect YAML.parse """ + - apple + - banana + - carrot + """ + .toEqual YAML.parse YAML.dump ['apple', 'banana', 'carrot'] + + + it 'can be nested sequences', -> + + expect YAML.parse """ + - + - foo + - bar + - baz + """ + .toEqual YAML.parse YAML.dump [['foo', 'bar', 'baz']] + + + it 'can be mixed sequences', -> + + expect YAML.parse """ + - apple + - + - foo + - bar + - x123 + - banana + - carrot + """ + .toEqual YAML.parse YAML.dump ['apple', ['foo', 'bar', 'x123'], 'banana', 'carrot'] + + + it 'can be deeply nested sequences', -> + + expect YAML.parse """ + - + - + - uno + - dos + """ + .toEqual YAML.parse YAML.dump [[['uno', 'dos']]] + + + it 'can be simple mapping', -> + + expect YAML.parse """ + foo: whatever + bar: stuff + """ + .toEqual YAML.parse YAML.dump foo: 'whatever', bar: 'stuff' + + + it 'can be sequence in a mapping', -> + + expect YAML.parse """ + foo: whatever + bar: + - uno + - dos + """ + .toEqual YAML.parse YAML.dump foo: 'whatever', bar: ['uno', 'dos'] + + + it 'can be nested mappings', -> + + expect YAML.parse """ + foo: whatever + bar: + fruit: apple + name: steve + sport: baseball + """ + .toEqual YAML.parse YAML.dump foo: 'whatever', bar: (fruit: 'apple', name: 'steve', sport: 'baseball') + + + it 'can be mixed mapping', -> + + expect YAML.parse """ + foo: whatever + bar: + - + fruit: apple + name: steve + sport: baseball + - more + - + python: rocks + perl: papers + ruby: scissorses + """ + .toEqual YAML.parse YAML.dump foo: 'whatever', bar: [ + (fruit: 'apple', name: 'steve', sport: 'baseball'), + 'more', + (python: 'rocks', perl: 'papers', ruby: 'scissorses') + ] + + + it 'can have mapping-in-sequence shortcut', -> + + expect YAML.parse """ + - work on YAML.py: + - work on Store + """ + .toEqual YAML.parse YAML.dump [('work on YAML.py': ['work on Store'])] + + + it 'can have unindented sequence-in-mapping shortcut', -> + + expect YAML.parse """ + allow: + - 'localhost' + - '%.sourceforge.net' + - '%.freepan.org' + """ + .toEqual YAML.parse YAML.dump (allow: ['localhost', '%.sourceforge.net', '%.freepan.org']) + + + it 'can merge key', -> + + expect YAML.parse """ + mapping: + name: Joe + job: Accountant + <<: + age: 38 + """ + .toEqual YAML.parse YAML.dump mapping: + name: 'Joe' + job: 'Accountant' + age: 38 + + + +describe 'Dumped YAML Inline Collections', -> + + it 'can be simple inline array', -> + + expect YAML.parse """ + --- + seq: [ a, b, c ] + """ + .toEqual YAML.parse YAML.dump seq: ['a', 'b', 'c'] + + + it 'can be simple inline hash', -> + + expect YAML.parse """ + --- + hash: { name: Steve, foo: bar } + """ + .toEqual YAML.parse YAML.dump hash: (name: 'Steve', foo: 'bar') + + + it 'can be multi-line inline collections', -> + + expect YAML.parse """ + languages: [ Ruby, + Perl, + Python ] + websites: { YAML: yaml.org, + Ruby: ruby-lang.org, + Python: python.org, + Perl: use.perl.org } + """ + .toEqual YAML.parse YAML.dump ( + languages: ['Ruby', 'Perl', 'Python'] + websites: + YAML: 'yaml.org' + Ruby: 'ruby-lang.org' + Python: 'python.org' + Perl: 'use.perl.org' + ) + + it 'can be dumped empty sequences in mappings', -> + + expect YAML.parse(YAML.dump({key:[]})) + .toEqual({key:[]}) + + it 'can be dumpted empty inline collections', -> + + expect YAML.parse(YAML.dump({key:{}})) + .toEqual({key:{}}) + +describe 'Dumped YAML Basic Types', -> + + it 'can be strings', -> + + expect YAML.parse """ + --- + String + """ + .toEqual YAML.parse YAML.dump 'String' + + + it 'can be double-quoted strings with backslashes', -> + + expect YAML.parse """ + str: + "string with \\\\ inside" + """ + .toEqual YAML.parse YAML.dump str: 'string with \\ inside' + + + it 'can be single-quoted strings with backslashes', -> + + expect YAML.parse """ + str: + 'string with \\\\ inside' + """ + .toEqual YAML.parse YAML.dump str: 'string with \\\\ inside' + + + it 'can be double-quoted strings with line breaks', -> + + expect YAML.parse """ + str: + "string with \\n inside" + """ + .toEqual YAML.parse YAML.dump str: 'string with \n inside' + + + it 'can be double-quoted strings with line breaks and backslashes', -> + + expect YAML.parse """ + str: + "string with \\n inside and \\\\ also" + """ + .toEqual YAML.parse YAML.dump str: 'string with \n inside and \\ also' + + + it 'can be single-quoted strings with line breaks and backslashes', -> + + expect YAML.parse """ + str: + 'string with \\n inside and \\\\ also' + """ + .toEqual YAML.parse YAML.dump str: 'string with \\n inside and \\\\ also' + + + it 'can be single-quoted strings with escaped line breaks', -> + + expect YAML.parse """ + str: + 'string with \\n inside' + """ + .toEqual YAML.parse YAML.dump str: 'string with \\n inside' + + + it 'can have string characters in sequences', -> + + expect YAML.parse """ + - What's Yaml? + - It's for writing data structures in plain text. + - And? + - And what? That's not good enough for you? + - No, I mean, "And what about Yaml?" + - Oh, oh yeah. Uh.. Yaml for JavaScript. + """ + .toEqual YAML.parse YAML.dump [ + "What's Yaml?", + "It's for writing data structures in plain text.", + "And?", + "And what? That's not good enough for you?", + "No, I mean, \"And what about Yaml?\"", + "Oh, oh yeah. Uh.. Yaml for JavaScript." + ] + + + it 'can have indicators in strings', -> + + expect YAML.parse """ + the colon followed by space is an indicator: but is a string:right here + same for the pound sign: here we have it#in a string + the comma can, honestly, be used in most cases: [ but not in, inline collections ] + """ + .toEqual YAML.parse YAML.dump ( + 'the colon followed by space is an indicator': 'but is a string:right here', + 'same for the pound sign': 'here we have it#in a string', + 'the comma can, honestly, be used in most cases': ['but not in', 'inline collections'] + ) + + + it 'can force strings', -> + + expect YAML.parse """ + date string: !str 2001-08-01 + number string: !str 192 + date string 2: !!str 2001-08-01 + number string 2: !!str 192 + """ + .toEqual YAML.parse YAML.dump ( + 'date string': '2001-08-01', + 'number string': '192' , + 'date string 2': '2001-08-01', + 'number string 2': '192' + ) + + + it 'can be single-quoted strings', -> + + expect YAML.parse """ + all my favorite symbols: '#:!/%.)' + a few i hate: '&(*' + why do i hate them?: 'it''s very hard to explain' + """ + .toEqual YAML.parse YAML.dump ( + 'all my favorite symbols': '#:!/%.)', + 'a few i hate': '&(*', + 'why do i hate them?': 'it\'s very hard to explain' + ) + + + it 'can be double-quoted strings', -> + + expect YAML.parse """ + i know where i want my line breaks: "one here\\nand another here\\n" + """ + .toEqual YAML.parse YAML.dump ( + 'i know where i want my line breaks': "one here\nand another here\n" + ) + + + it 'can be null', -> + + expect YAML.parse """ + name: Mr. Show + hosted by: Bob and David + date of next season: ~ + """ + .toEqual YAML.parse YAML.dump ( + 'name': 'Mr. Show' + 'hosted by': 'Bob and David' + 'date of next season': null + ) + + + it 'can be boolean', -> + + expect YAML.parse """ + Is Gus a Liar?: true + Do I rely on Gus for Sustenance?: false + """ + .toEqual YAML.parse YAML.dump ( + 'Is Gus a Liar?': true + 'Do I rely on Gus for Sustenance?': false + ) + + + it 'can be integers', -> + + expect YAML.parse """ + zero: 0 + simple: 12 + one-thousand: 1,000 + negative one-thousand: -1,000 + """ + .toEqual YAML.parse YAML.dump ( + 'zero': 0 + 'simple': 12 + 'one-thousand': 1000 + 'negative one-thousand': -1000 + ) + + + it 'can be integers as map keys', -> + + expect YAML.parse """ + 1: one + 2: two + 3: three + """ + .toEqual YAML.parse YAML.dump ( + 1: 'one' + 2: 'two' + 3: 'three' + ) + + + it 'can be floats', -> + + expect YAML.parse """ + a simple float: 2.00 + larger float: 1,000.09 + scientific notation: 1.00009e+3 + """ + .toEqual YAML.parse YAML.dump ( + 'a simple float': 2.0 + 'larger float': 1000.09 + 'scientific notation': 1000.09 + ) + + + it 'can be time', -> + + iso8601Date = new Date Date.UTC(2001, 12-1, 14, 21, 59, 43, 10) + iso8601Date.setTime iso8601Date.getTime() + 5 * 3600 * 1000 + + spaceSeparatedDate = new Date Date.UTC(2001, 12-1, 14, 21, 59, 43, 10) + spaceSeparatedDate.setTime spaceSeparatedDate.getTime() - 5 * 3600 * 1000 + + withDatesToTime = (input) -> + res = {} + for key, val of input + res[key] = val.getTime() + return res + + expect withDatesToTime(YAML.parse """ + iso8601: 2001-12-14t21:59:43.010-05:00 + space separated: 2001-12-14 21:59:43.010 +05:00 + """) + .toEqual YAML.parse YAML.dump withDatesToTime ( + 'iso8601': iso8601Date + 'space separated': spaceSeparatedDate + ) + + + it 'can be date', -> + + aDate = new Date Date.UTC(1976, 7-1, 31, 0, 0, 0, 0) + + withDatesToTime = (input) -> + return input + res = {} + for key, val of input + res[key] = val.getTime() + return res + + expect withDatesToTime(YAML.parse """ + date: 1976-07-31 + """) + .toEqual YAML.parse YAML.dump withDatesToTime ( + 'date': aDate + ) + + + +describe 'Dumped YAML Blocks', -> + + it 'can be single ending newline', -> + + expect YAML.parse """ + --- + this: | + Foo + Bar + """ + .toEqual YAML.parse YAML.dump 'this': "Foo\nBar\n" + + + it 'can be single ending newline with \'+\' indicator', -> + + expect YAML.parse """ + normal: | + extra new lines not kept + + preserving: |+ + extra new lines are kept + + + dummy: value + """ + .toEqual YAML.parse YAML.dump ( + 'normal': "extra new lines not kept\n" + 'preserving': "extra new lines are kept\n\n\n" + 'dummy': 'value' + ) + + + it 'can be multi-line block handling trailing newlines in function of \'+\', \'-\' indicators', -> + + expect YAML.parse """ + clipped: | + This has one newline. + + + + same as "clipped" above: "This has one newline.\\n" + + stripped: |- + This has no newline. + + + + same as "stripped" above: "This has no newline." + + kept: |+ + This has four newlines. + + + + same as "kept" above: "This has four newlines.\\n\\n\\n\\n" + """ + .toEqual YAML.parse YAML.dump ( + 'clipped': "This has one newline.\n" + 'same as "clipped" above': "This has one newline.\n" + 'stripped':'This has no newline.' + 'same as "stripped" above': 'This has no newline.' + 'kept': "This has four newlines.\n\n\n\n" + 'same as "kept" above': "This has four newlines.\n\n\n\n" + ) + + + it 'can be folded block in a sequence', -> + + expect YAML.parse """ + --- + - apple + - banana + - > + can't you see + the beauty of yaml? + hmm + - dog + """ + .toEqual YAML.parse YAML.dump [ + 'apple', + 'banana', + "can't you see the beauty of yaml? hmm\n", + 'dog' + ] + + + it 'can be folded block as a mapping value', -> + + expect YAML.parse """ + --- + quote: > + Mark McGwire's + year was crippled + by a knee injury. + source: espn + """ + .toEqual YAML.parse YAML.dump ( + 'quote': "Mark McGwire's year was crippled by a knee injury.\n" + 'source': 'espn' + ) + + + it 'can be folded block handling trailing newlines in function of \'+\', \'-\' indicators', -> + + expect YAML.parse """ + clipped: > + This has one newline. + + + + same as "clipped" above: "This has one newline.\\n" + + stripped: >- + This has no newline. + + + + same as "stripped" above: "This has no newline." + + kept: >+ + This has four newlines. + + + + same as "kept" above: "This has four newlines.\\n\\n\\n\\n" + """ + .toEqual YAML.parse YAML.dump ( + 'clipped': "This has one newline.\n" + 'same as "clipped" above': "This has one newline.\n" + 'stripped': 'This has no newline.' + 'same as "stripped" above': 'This has no newline.' + 'kept': "This has four newlines.\n\n\n\n" + 'same as "kept" above': "This has four newlines.\n\n\n\n" + ) + + + +describe 'Dumped YAML Comments', -> + + it 'can begin the document', -> + + expect YAML.parse """ + # This is a comment + hello: world + """ + .toEqual YAML.parse YAML.dump ( + hello: 'world' + ) + + + it 'can finish a line', -> + + expect YAML.parse """ + hello: world # This is a comment + """ + .toEqual YAML.parse YAML.dump ( + hello: 'world' + ) + + + it 'can end the document', -> + + expect YAML.parse """ + hello: world + # This is a comment + """ + .toEqual YAML.parse YAML.dump ( + hello: 'world' + ) + + + +describe 'Dumped YAML Aliases and Anchors', -> + + it 'can be simple alias', -> + + expect YAML.parse """ + - &showell Steve + - Clark + - Brian + - Oren + - *showell + """ + .toEqual YAML.parse YAML.dump ['Steve', 'Clark', 'Brian', 'Oren', 'Steve'] + + + it 'can be alias of a mapping', -> + + expect YAML.parse """ + - &hello + Meat: pork + Starch: potato + - banana + - *hello + """ + .toEqual YAML.parse YAML.dump [ + Meat: 'pork', Starch: 'potato' + , + 'banana' + , + Meat: 'pork', Starch: 'potato' + ] + + + +describe 'Dumped YAML Documents', -> + + it 'can have YAML header', -> + + expect YAML.parse """ + --- %YAML:1.0 + foo: 1 + bar: 2 + """ + .toEqual YAML.parse YAML.dump ( + foo: 1 + bar: 2 + ) + + + it 'can have leading document separator', -> + + expect YAML.parse """ + --- + - foo: 1 + bar: 2 + """ + .toEqual YAML.parse YAML.dump [( + foo: 1 + bar: 2 + )] + + + it 'can have multiple document separators in block', -> + + expect YAML.parse """ + foo: | + --- + foo: bar + --- + yo: baz + bar: | + fooness + """ + .toEqual YAML.parse YAML.dump ( + foo: "---\nfoo: bar\n---\nyo: baz\n" + bar: "fooness\n" + ) + + +# Loading +# (disable test when running locally from file) +# +url = document?.location?.href +if not(url?) or url.indexOf('file://') is -1 + + examplePath = 'spec/example.yml' + if __dirname? + examplePath = __dirname+'/example.yml' + + describe 'YAML loading', -> + + it 'can be done synchronously', -> + + expect(YAML.load(examplePath)).toEqual ( + this: 'is' + a: ['YAML', 'example'] + ) + + + it 'can be done asynchronously', (done) -> + + YAML.load examplePath, (result) -> + + expect(result).toEqual ( + this: 'is' + a: ['YAML', 'example'] + ) + + done() diff --git a/node_modules/yamljs/test/spec/YamlSpec.js b/node_modules/yamljs/test/spec/YamlSpec.js new file mode 100644 index 00000000..efdad1ee --- /dev/null +++ b/node_modules/yamljs/test/spec/YamlSpec.js @@ -0,0 +1,764 @@ +// Generated by CoffeeScript 1.12.4 +var YAML, examplePath, ref, url; + +if (typeof YAML === "undefined" || YAML === null) { + YAML = require('../../src/Yaml'); +} + +describe('Parsed YAML Collections', function() { + it('can be simple sequence', function() { + return expect(YAML.parse("- apple\n- banana\n- carrot")).toEqual(['apple', 'banana', 'carrot']); + }); + it('can be nested sequences', function() { + return expect(YAML.parse("-\n - foo\n - bar\n - baz")).toEqual([['foo', 'bar', 'baz']]); + }); + it('can be mixed sequences', function() { + return expect(YAML.parse("- apple\n-\n - foo\n - bar\n - x123\n- banana\n- carrot")).toEqual(['apple', ['foo', 'bar', 'x123'], 'banana', 'carrot']); + }); + it('can be deeply nested sequences', function() { + return expect(YAML.parse("-\n -\n - uno\n - dos")).toEqual([[['uno', 'dos']]]); + }); + it('can be simple mapping', function() { + return expect(YAML.parse("foo: whatever\nbar: stuff")).toEqual({ + foo: 'whatever', + bar: 'stuff' + }); + }); + it('can be sequence in a mapping', function() { + return expect(YAML.parse("foo: whatever\nbar:\n - uno\n - dos")).toEqual({ + foo: 'whatever', + bar: ['uno', 'dos'] + }); + }); + it('can be nested mappings', function() { + return expect(YAML.parse("foo: whatever\nbar:\n fruit: apple\n name: steve\n sport: baseball")).toEqual({ + foo: 'whatever', + bar: { + fruit: 'apple', + name: 'steve', + sport: 'baseball' + } + }); + }); + it('can be mixed mapping', function() { + return expect(YAML.parse("foo: whatever\nbar:\n -\n fruit: apple\n name: steve\n sport: baseball\n - more\n -\n python: rocks\n perl: papers\n ruby: scissorses")).toEqual({ + foo: 'whatever', + bar: [ + { + fruit: 'apple', + name: 'steve', + sport: 'baseball' + }, 'more', { + python: 'rocks', + perl: 'papers', + ruby: 'scissorses' + } + ] + }); + }); + it('can have mapping-in-sequence shortcut', function() { + return expect(YAML.parse("- work on YAML.py:\n - work on Store")).toEqual([ + { + 'work on YAML.py': ['work on Store'] + } + ]); + }); + it('can have unindented sequence-in-mapping shortcut', function() { + return expect(YAML.parse("allow:\n- 'localhost'\n- '%.sourceforge.net'\n- '%.freepan.org'")).toEqual({ + allow: ['localhost', '%.sourceforge.net', '%.freepan.org'] + }); + }); + it('can merge key', function() { + return expect(YAML.parse("mapping:\n name: Joe\n job: Accountant\n <<:\n age: 38")).toEqual({ + mapping: { + name: 'Joe', + job: 'Accountant', + age: 38 + } + }); + }); + return it('can ignore trailing empty lines for smallest indent', function() { + return expect(YAML.parse(" trailing: empty lines\n")).toEqual({ + trailing: 'empty lines' + }); + }); +}); + +describe('Parsed YAML Inline Collections', function() { + it('can be simple inline array', function() { + return expect(YAML.parse("---\nseq: [ a, b, c ]")).toEqual({ + seq: ['a', 'b', 'c'] + }); + }); + it('can be simple inline hash', function() { + return expect(YAML.parse("---\nhash: { name: Steve, foo: bar }")).toEqual({ + hash: { + name: 'Steve', + foo: 'bar' + } + }); + }); + it('can be nested inline hash', function() { + return expect(YAML.parse("---\nhash: { val1: \"string\", val2: { v2k1: \"v2k1v\" } }")).toEqual({ + hash: { + val1: 'string', + val2: { + v2k1: 'v2k1v' + } + } + }); + }); + return it('can be multi-line inline collections', function() { + return expect(YAML.parse("languages: [ Ruby,\n Perl,\n Python ]\nwebsites: { YAML: yaml.org,\n Ruby: ruby-lang.org,\n Python: python.org,\n Perl: use.perl.org }")).toEqual({ + languages: ['Ruby', 'Perl', 'Python'], + websites: { + YAML: 'yaml.org', + Ruby: 'ruby-lang.org', + Python: 'python.org', + Perl: 'use.perl.org' + } + }); + }); +}); + +describe('Parsed YAML Basic Types', function() { + it('can be strings', function() { + return expect(YAML.parse("---\nString")).toEqual('String'); + }); + it('can be double-quoted strings with backslashes', function() { + return expect(YAML.parse("str:\n \"string with \\\\ inside\"")).toEqual({ + str: 'string with \\ inside' + }); + }); + it('can be single-quoted strings with backslashes', function() { + return expect(YAML.parse("str:\n 'string with \\\\ inside'")).toEqual({ + str: 'string with \\\\ inside' + }); + }); + it('can be double-quoted strings with line breaks', function() { + return expect(YAML.parse("str:\n \"string with \\n inside\"")).toEqual({ + str: 'string with \n inside' + }); + }); + it('can be single-quoted strings with escaped line breaks', function() { + return expect(YAML.parse("str:\n 'string with \\n inside'")).toEqual({ + str: 'string with \\n inside' + }); + }); + it('can be double-quoted strings with line breaks and backslashes', function() { + return expect(YAML.parse("str:\n \"string with \\n inside and \\\\ also\"")).toEqual({ + str: 'string with \n inside and \\ also' + }); + }); + it('can be single-quoted strings with line breaks and backslashes', function() { + return expect(YAML.parse("str:\n 'string with \\n inside and \\\\ also'")).toEqual({ + str: 'string with \\n inside and \\\\ also' + }); + }); + it('can have string characters in sequences', function() { + return expect(YAML.parse("- What's Yaml?\n- It's for writing data structures in plain text.\n- And?\n- And what? That's not good enough for you?\n- No, I mean, \"And what about Yaml?\"\n- Oh, oh yeah. Uh.. Yaml for JavaScript.")).toEqual(["What's Yaml?", "It's for writing data structures in plain text.", "And?", "And what? That's not good enough for you?", "No, I mean, \"And what about Yaml?\"", "Oh, oh yeah. Uh.. Yaml for JavaScript."]); + }); + it('can have indicators in strings', function() { + return expect(YAML.parse("the colon followed by space is an indicator: but is a string:right here\nsame for the pound sign: here we have it#in a string\nthe comma can, honestly, be used in most cases: [ but not in, inline collections ]")).toEqual({ + 'the colon followed by space is an indicator': 'but is a string:right here', + 'same for the pound sign': 'here we have it#in a string', + 'the comma can, honestly, be used in most cases': ['but not in', 'inline collections'] + }); + }); + it('can force strings', function() { + return expect(YAML.parse("date string: !str 2001-08-01\nnumber string: !str 192\ndate string 2: !!str 2001-08-01\nnumber string 2: !!str 192")).toEqual({ + 'date string': '2001-08-01', + 'number string': '192', + 'date string 2': '2001-08-01', + 'number string 2': '192' + }); + }); + it('can be single-quoted strings', function() { + return expect(YAML.parse("all my favorite symbols: '#:!/%.)'\na few i hate: '&(*'\nwhy do i hate them?: 'it''s very hard to explain'")).toEqual({ + 'all my favorite symbols': '#:!/%.)', + 'a few i hate': '&(*', + 'why do i hate them?': 'it\'s very hard to explain' + }); + }); + it('can be double-quoted strings', function() { + return expect(YAML.parse("i know where i want my line breaks: \"one here\\nand another here\\n\"")).toEqual({ + 'i know where i want my line breaks': "one here\nand another here\n" + }); + }); + it('can be null', function() { + return expect(YAML.parse("name: Mr. Show\nhosted by: Bob and David\ndate of next season: ~")).toEqual({ + 'name': 'Mr. Show', + 'hosted by': 'Bob and David', + 'date of next season': null + }); + }); + it('can be boolean', function() { + return expect(YAML.parse("Is Gus a Liar?: true\nDo I rely on Gus for Sustenance?: false")).toEqual({ + 'Is Gus a Liar?': true, + 'Do I rely on Gus for Sustenance?': false + }); + }); + it('can be integers', function() { + return expect(YAML.parse("zero: 0\nsimple: 12\none-thousand: 1,000\nnegative one-thousand: -1,000")).toEqual({ + 'zero': 0, + 'simple': 12, + 'one-thousand': 1000, + 'negative one-thousand': -1000 + }); + }); + it('can be integers as map keys', function() { + return expect(YAML.parse("1: one\n2: two\n3: three")).toEqual({ + 1: 'one', + 2: 'two', + 3: 'three' + }); + }); + it('can be floats', function() { + return expect(YAML.parse("a simple float: 2.00\nlarger float: 1,000.09\nscientific notation: 1.00009e+3")).toEqual({ + 'a simple float': 2.0, + 'larger float': 1000.09, + 'scientific notation': 1000.09 + }); + }); + it('can be time', function() { + var iso8601Date, spaceSeparatedDate, withDatesToTime; + iso8601Date = new Date(Date.UTC(2001, 12 - 1, 14, 21, 59, 43, 10)); + iso8601Date.setTime(iso8601Date.getTime() - 5 * 3600 * 1000); + spaceSeparatedDate = new Date(Date.UTC(2001, 12 - 1, 14, 21, 59, 43, 10)); + spaceSeparatedDate.setTime(spaceSeparatedDate.getTime() + 5 * 3600 * 1000); + withDatesToTime = function(input) { + var key, res, val; + res = {}; + for (key in input) { + val = input[key]; + res[key] = val.getTime(); + } + return res; + }; + return expect(withDatesToTime(YAML.parse("iso8601: 2001-12-14t21:59:43.010+05:00\nspace separated: 2001-12-14 21:59:43.010 -05:00"))).toEqual(withDatesToTime({ + 'iso8601': iso8601Date, + 'space separated': spaceSeparatedDate + })); + }); + return it('can be date', function() { + var aDate, withDatesToTime; + aDate = new Date(Date.UTC(1976, 7 - 1, 31, 0, 0, 0, 0)); + withDatesToTime = function(input) { + var key, res, val; + return input; + res = {}; + for (key in input) { + val = input[key]; + res[key] = val.getTime(); + } + return res; + }; + return expect(withDatesToTime(YAML.parse("date: 1976-07-31"))).toEqual(withDatesToTime({ + 'date': aDate + })); + }); +}); + +describe('Parsed YAML Blocks', function() { + it('can be single ending newline', function() { + return expect(YAML.parse("---\nthis: |\n Foo\n Bar")).toEqual({ + 'this': "Foo\nBar\n" + }); + }); + it('can be single ending newline with \'+\' indicator', function() { + return expect(YAML.parse("normal: |\n extra new lines not kept\n\npreserving: |+\n extra new lines are kept\n\n\ndummy: value")).toEqual({ + 'normal': "extra new lines not kept\n", + 'preserving': "extra new lines are kept\n\n\n", + 'dummy': 'value' + }); + }); + it('can be multi-line block handling trailing newlines in function of \'+\', \'-\' indicators', function() { + return expect(YAML.parse("clipped: |\n This has one newline.\n\n\n\nsame as \"clipped\" above: \"This has one newline.\\n\"\n\nstripped: |-\n This has no newline.\n\n\n\nsame as \"stripped\" above: \"This has no newline.\"\n\nkept: |+\n This has four newlines.\n\n\n\nsame as \"kept\" above: \"This has four newlines.\\n\\n\\n\\n\"")).toEqual({ + 'clipped': "This has one newline.\n", + 'same as "clipped" above': "This has one newline.\n", + 'stripped': 'This has no newline.', + 'same as "stripped" above': 'This has no newline.', + 'kept': "This has four newlines.\n\n\n\n", + 'same as "kept" above': "This has four newlines.\n\n\n\n" + }); + }); + it('can be folded block in a sequence', function() { + return expect(YAML.parse("---\n- apple\n- banana\n- >\n can't you see\n the beauty of yaml?\n hmm\n- dog")).toEqual(['apple', 'banana', "can't you see the beauty of yaml? hmm\n", 'dog']); + }); + it('can be folded block as a mapping value', function() { + return expect(YAML.parse("---\nquote: >\n Mark McGwire's\n year was crippled\n by a knee injury.\nsource: espn")).toEqual({ + 'quote': "Mark McGwire's year was crippled by a knee injury.\n", + 'source': 'espn' + }); + }); + it('can be folded block handling trailing newlines in function of \'+\', \'-\' indicators', function() { + return expect(YAML.parse("clipped: >\n This has one newline.\n\n\n\nsame as \"clipped\" above: \"This has one newline.\\n\"\n\nstripped: >-\n This has no newline.\n\n\n\nsame as \"stripped\" above: \"This has no newline.\"\n\nkept: >+\n This has four newlines.\n\n\n\nsame as \"kept\" above: \"This has four newlines.\\n\\n\\n\\n\"")).toEqual({ + 'clipped': "This has one newline.\n", + 'same as "clipped" above': "This has one newline.\n", + 'stripped': 'This has no newline.', + 'same as "stripped" above': 'This has no newline.', + 'kept': "This has four newlines.\n\n\n\n", + 'same as "kept" above': "This has four newlines.\n\n\n\n" + }); + }); + return it('can be the whole document as intented block', function() { + return expect(YAML.parse("---\n foo: \"bar\"\n baz:\n - \"qux\"\n - \"quxx\"\n corge: null")).toEqual({ + 'foo': "bar", + 'baz': ['qux', 'quxx'], + 'corge': null + }); + }); +}); + +describe('Parsed YAML Comments', function() { + it('can begin the document', function() { + return expect(YAML.parse("# This is a comment\nhello: world")).toEqual({ + hello: 'world' + }); + }); + it('can be less indented in mapping', function() { + return expect(YAML.parse("parts:\n a: 'b'\n # normally indented comment\n c: 'd'\n# less indented comment\n e: 'f'")).toEqual({ + parts: { + a: 'b', + c: 'd', + e: 'f' + } + }); + }); + it('can be less indented in sequence', function() { + return expect(YAML.parse("list-header:\n - item1\n# - item2\n - item3\n # - item4")).toEqual({ + 'list-header': ['item1', 'item3'] + }); + }); + it('can finish a line', function() { + return expect(YAML.parse("hello: world # This is a comment")).toEqual({ + hello: 'world' + }); + }); + return it('can end the document', function() { + return expect(YAML.parse("hello: world\n# This is a comment")).toEqual({ + hello: 'world' + }); + }); +}); + +describe('Parsed YAML Aliases and Anchors', function() { + it('can be simple alias', function() { + return expect(YAML.parse("- &showell Steve\n- Clark\n- Brian\n- Oren\n- *showell")).toEqual(['Steve', 'Clark', 'Brian', 'Oren', 'Steve']); + }); + return it('can be alias of a mapping', function() { + return expect(YAML.parse("- &hello\n Meat: pork\n Starch: potato\n- banana\n- *hello")).toEqual([ + { + Meat: 'pork', + Starch: 'potato' + }, 'banana', { + Meat: 'pork', + Starch: 'potato' + } + ]); + }); +}); + +describe('Parsed YAML Documents', function() { + it('can have YAML header', function() { + return expect(YAML.parse("--- %YAML:1.0\nfoo: 1\nbar: 2")).toEqual({ + foo: 1, + bar: 2 + }); + }); + it('can have leading document separator', function() { + return expect(YAML.parse("---\n- foo: 1\n bar: 2")).toEqual([ + { + foo: 1, + bar: 2 + } + ]); + }); + return it('can have multiple document separators in block', function() { + return expect(YAML.parse("foo: |\n ---\n foo: bar\n ---\n yo: baz\nbar: |\n fooness")).toEqual({ + foo: "---\nfoo: bar\n---\nyo: baz\n", + bar: "fooness\n" + }); + }); +}); + +describe('Dumped YAML Collections', function() { + it('can be simple sequence', function() { + return expect(YAML.parse("- apple\n- banana\n- carrot")).toEqual(YAML.parse(YAML.dump(['apple', 'banana', 'carrot']))); + }); + it('can be nested sequences', function() { + return expect(YAML.parse("-\n - foo\n - bar\n - baz")).toEqual(YAML.parse(YAML.dump([['foo', 'bar', 'baz']]))); + }); + it('can be mixed sequences', function() { + return expect(YAML.parse("- apple\n-\n - foo\n - bar\n - x123\n- banana\n- carrot")).toEqual(YAML.parse(YAML.dump(['apple', ['foo', 'bar', 'x123'], 'banana', 'carrot']))); + }); + it('can be deeply nested sequences', function() { + return expect(YAML.parse("-\n -\n - uno\n - dos")).toEqual(YAML.parse(YAML.dump([[['uno', 'dos']]]))); + }); + it('can be simple mapping', function() { + return expect(YAML.parse("foo: whatever\nbar: stuff")).toEqual(YAML.parse(YAML.dump({ + foo: 'whatever', + bar: 'stuff' + }))); + }); + it('can be sequence in a mapping', function() { + return expect(YAML.parse("foo: whatever\nbar:\n - uno\n - dos")).toEqual(YAML.parse(YAML.dump({ + foo: 'whatever', + bar: ['uno', 'dos'] + }))); + }); + it('can be nested mappings', function() { + return expect(YAML.parse("foo: whatever\nbar:\n fruit: apple\n name: steve\n sport: baseball")).toEqual(YAML.parse(YAML.dump({ + foo: 'whatever', + bar: { + fruit: 'apple', + name: 'steve', + sport: 'baseball' + } + }))); + }); + it('can be mixed mapping', function() { + return expect(YAML.parse("foo: whatever\nbar:\n -\n fruit: apple\n name: steve\n sport: baseball\n - more\n -\n python: rocks\n perl: papers\n ruby: scissorses")).toEqual(YAML.parse(YAML.dump({ + foo: 'whatever', + bar: [ + { + fruit: 'apple', + name: 'steve', + sport: 'baseball' + }, 'more', { + python: 'rocks', + perl: 'papers', + ruby: 'scissorses' + } + ] + }))); + }); + it('can have mapping-in-sequence shortcut', function() { + return expect(YAML.parse("- work on YAML.py:\n - work on Store")).toEqual(YAML.parse(YAML.dump([ + { + 'work on YAML.py': ['work on Store'] + } + ]))); + }); + it('can have unindented sequence-in-mapping shortcut', function() { + return expect(YAML.parse("allow:\n- 'localhost'\n- '%.sourceforge.net'\n- '%.freepan.org'")).toEqual(YAML.parse(YAML.dump({ + allow: ['localhost', '%.sourceforge.net', '%.freepan.org'] + }))); + }); + return it('can merge key', function() { + return expect(YAML.parse("mapping:\n name: Joe\n job: Accountant\n <<:\n age: 38")).toEqual(YAML.parse(YAML.dump({ + mapping: { + name: 'Joe', + job: 'Accountant', + age: 38 + } + }))); + }); +}); + +describe('Dumped YAML Inline Collections', function() { + it('can be simple inline array', function() { + return expect(YAML.parse("---\nseq: [ a, b, c ]")).toEqual(YAML.parse(YAML.dump({ + seq: ['a', 'b', 'c'] + }))); + }); + it('can be simple inline hash', function() { + return expect(YAML.parse("---\nhash: { name: Steve, foo: bar }")).toEqual(YAML.parse(YAML.dump({ + hash: { + name: 'Steve', + foo: 'bar' + } + }))); + }); + it('can be multi-line inline collections', function() { + return expect(YAML.parse("languages: [ Ruby,\n Perl,\n Python ]\nwebsites: { YAML: yaml.org,\n Ruby: ruby-lang.org,\n Python: python.org,\n Perl: use.perl.org }")).toEqual(YAML.parse(YAML.dump({ + languages: ['Ruby', 'Perl', 'Python'], + websites: { + YAML: 'yaml.org', + Ruby: 'ruby-lang.org', + Python: 'python.org', + Perl: 'use.perl.org' + } + }))); + }); + it('can be dumped empty sequences in mappings', function() { + return expect(YAML.parse(YAML.dump({ + key: [] + }))).toEqual({ + key: [] + }); + }); + return it('can be dumpted empty inline collections', function() { + return expect(YAML.parse(YAML.dump({ + key: {} + }))).toEqual({ + key: {} + }); + }); +}); + +describe('Dumped YAML Basic Types', function() { + it('can be strings', function() { + return expect(YAML.parse("---\nString")).toEqual(YAML.parse(YAML.dump('String'))); + }); + it('can be double-quoted strings with backslashes', function() { + return expect(YAML.parse("str:\n \"string with \\\\ inside\"")).toEqual(YAML.parse(YAML.dump({ + str: 'string with \\ inside' + }))); + }); + it('can be single-quoted strings with backslashes', function() { + return expect(YAML.parse("str:\n 'string with \\\\ inside'")).toEqual(YAML.parse(YAML.dump({ + str: 'string with \\\\ inside' + }))); + }); + it('can be double-quoted strings with line breaks', function() { + return expect(YAML.parse("str:\n \"string with \\n inside\"")).toEqual(YAML.parse(YAML.dump({ + str: 'string with \n inside' + }))); + }); + it('can be double-quoted strings with line breaks and backslashes', function() { + return expect(YAML.parse("str:\n \"string with \\n inside and \\\\ also\"")).toEqual(YAML.parse(YAML.dump({ + str: 'string with \n inside and \\ also' + }))); + }); + it('can be single-quoted strings with line breaks and backslashes', function() { + return expect(YAML.parse("str:\n 'string with \\n inside and \\\\ also'")).toEqual(YAML.parse(YAML.dump({ + str: 'string with \\n inside and \\\\ also' + }))); + }); + it('can be single-quoted strings with escaped line breaks', function() { + return expect(YAML.parse("str:\n 'string with \\n inside'")).toEqual(YAML.parse(YAML.dump({ + str: 'string with \\n inside' + }))); + }); + it('can have string characters in sequences', function() { + return expect(YAML.parse("- What's Yaml?\n- It's for writing data structures in plain text.\n- And?\n- And what? That's not good enough for you?\n- No, I mean, \"And what about Yaml?\"\n- Oh, oh yeah. Uh.. Yaml for JavaScript.")).toEqual(YAML.parse(YAML.dump(["What's Yaml?", "It's for writing data structures in plain text.", "And?", "And what? That's not good enough for you?", "No, I mean, \"And what about Yaml?\"", "Oh, oh yeah. Uh.. Yaml for JavaScript."]))); + }); + it('can have indicators in strings', function() { + return expect(YAML.parse("the colon followed by space is an indicator: but is a string:right here\nsame for the pound sign: here we have it#in a string\nthe comma can, honestly, be used in most cases: [ but not in, inline collections ]")).toEqual(YAML.parse(YAML.dump({ + 'the colon followed by space is an indicator': 'but is a string:right here', + 'same for the pound sign': 'here we have it#in a string', + 'the comma can, honestly, be used in most cases': ['but not in', 'inline collections'] + }))); + }); + it('can force strings', function() { + return expect(YAML.parse("date string: !str 2001-08-01\nnumber string: !str 192\ndate string 2: !!str 2001-08-01\nnumber string 2: !!str 192")).toEqual(YAML.parse(YAML.dump({ + 'date string': '2001-08-01', + 'number string': '192', + 'date string 2': '2001-08-01', + 'number string 2': '192' + }))); + }); + it('can be single-quoted strings', function() { + return expect(YAML.parse("all my favorite symbols: '#:!/%.)'\na few i hate: '&(*'\nwhy do i hate them?: 'it''s very hard to explain'")).toEqual(YAML.parse(YAML.dump({ + 'all my favorite symbols': '#:!/%.)', + 'a few i hate': '&(*', + 'why do i hate them?': 'it\'s very hard to explain' + }))); + }); + it('can be double-quoted strings', function() { + return expect(YAML.parse("i know where i want my line breaks: \"one here\\nand another here\\n\"")).toEqual(YAML.parse(YAML.dump({ + 'i know where i want my line breaks': "one here\nand another here\n" + }))); + }); + it('can be null', function() { + return expect(YAML.parse("name: Mr. Show\nhosted by: Bob and David\ndate of next season: ~")).toEqual(YAML.parse(YAML.dump({ + 'name': 'Mr. Show', + 'hosted by': 'Bob and David', + 'date of next season': null + }))); + }); + it('can be boolean', function() { + return expect(YAML.parse("Is Gus a Liar?: true\nDo I rely on Gus for Sustenance?: false")).toEqual(YAML.parse(YAML.dump({ + 'Is Gus a Liar?': true, + 'Do I rely on Gus for Sustenance?': false + }))); + }); + it('can be integers', function() { + return expect(YAML.parse("zero: 0\nsimple: 12\none-thousand: 1,000\nnegative one-thousand: -1,000")).toEqual(YAML.parse(YAML.dump({ + 'zero': 0, + 'simple': 12, + 'one-thousand': 1000, + 'negative one-thousand': -1000 + }))); + }); + it('can be integers as map keys', function() { + return expect(YAML.parse("1: one\n2: two\n3: three")).toEqual(YAML.parse(YAML.dump({ + 1: 'one', + 2: 'two', + 3: 'three' + }))); + }); + it('can be floats', function() { + return expect(YAML.parse("a simple float: 2.00\nlarger float: 1,000.09\nscientific notation: 1.00009e+3")).toEqual(YAML.parse(YAML.dump({ + 'a simple float': 2.0, + 'larger float': 1000.09, + 'scientific notation': 1000.09 + }))); + }); + it('can be time', function() { + var iso8601Date, spaceSeparatedDate, withDatesToTime; + iso8601Date = new Date(Date.UTC(2001, 12 - 1, 14, 21, 59, 43, 10)); + iso8601Date.setTime(iso8601Date.getTime() + 5 * 3600 * 1000); + spaceSeparatedDate = new Date(Date.UTC(2001, 12 - 1, 14, 21, 59, 43, 10)); + spaceSeparatedDate.setTime(spaceSeparatedDate.getTime() - 5 * 3600 * 1000); + withDatesToTime = function(input) { + var key, res, val; + res = {}; + for (key in input) { + val = input[key]; + res[key] = val.getTime(); + } + return res; + }; + return expect(withDatesToTime(YAML.parse("iso8601: 2001-12-14t21:59:43.010-05:00\nspace separated: 2001-12-14 21:59:43.010 +05:00"))).toEqual(YAML.parse(YAML.dump(withDatesToTime({ + 'iso8601': iso8601Date, + 'space separated': spaceSeparatedDate + })))); + }); + return it('can be date', function() { + var aDate, withDatesToTime; + aDate = new Date(Date.UTC(1976, 7 - 1, 31, 0, 0, 0, 0)); + withDatesToTime = function(input) { + var key, res, val; + return input; + res = {}; + for (key in input) { + val = input[key]; + res[key] = val.getTime(); + } + return res; + }; + return expect(withDatesToTime(YAML.parse("date: 1976-07-31"))).toEqual(YAML.parse(YAML.dump(withDatesToTime({ + 'date': aDate + })))); + }); +}); + +describe('Dumped YAML Blocks', function() { + it('can be single ending newline', function() { + return expect(YAML.parse("---\nthis: |\n Foo\n Bar")).toEqual(YAML.parse(YAML.dump({ + 'this': "Foo\nBar\n" + }))); + }); + it('can be single ending newline with \'+\' indicator', function() { + return expect(YAML.parse("normal: |\n extra new lines not kept\n\npreserving: |+\n extra new lines are kept\n\n\ndummy: value")).toEqual(YAML.parse(YAML.dump({ + 'normal': "extra new lines not kept\n", + 'preserving': "extra new lines are kept\n\n\n", + 'dummy': 'value' + }))); + }); + it('can be multi-line block handling trailing newlines in function of \'+\', \'-\' indicators', function() { + return expect(YAML.parse("clipped: |\n This has one newline.\n\n\n\nsame as \"clipped\" above: \"This has one newline.\\n\"\n\nstripped: |-\n This has no newline.\n\n\n\nsame as \"stripped\" above: \"This has no newline.\"\n\nkept: |+\n This has four newlines.\n\n\n\nsame as \"kept\" above: \"This has four newlines.\\n\\n\\n\\n\"")).toEqual(YAML.parse(YAML.dump({ + 'clipped': "This has one newline.\n", + 'same as "clipped" above': "This has one newline.\n", + 'stripped': 'This has no newline.', + 'same as "stripped" above': 'This has no newline.', + 'kept': "This has four newlines.\n\n\n\n", + 'same as "kept" above': "This has four newlines.\n\n\n\n" + }))); + }); + it('can be folded block in a sequence', function() { + return expect(YAML.parse("---\n- apple\n- banana\n- >\n can't you see\n the beauty of yaml?\n hmm\n- dog")).toEqual(YAML.parse(YAML.dump(['apple', 'banana', "can't you see the beauty of yaml? hmm\n", 'dog']))); + }); + it('can be folded block as a mapping value', function() { + return expect(YAML.parse("---\nquote: >\n Mark McGwire's\n year was crippled\n by a knee injury.\nsource: espn")).toEqual(YAML.parse(YAML.dump({ + 'quote': "Mark McGwire's year was crippled by a knee injury.\n", + 'source': 'espn' + }))); + }); + return it('can be folded block handling trailing newlines in function of \'+\', \'-\' indicators', function() { + return expect(YAML.parse("clipped: >\n This has one newline.\n\n\n\nsame as \"clipped\" above: \"This has one newline.\\n\"\n\nstripped: >-\n This has no newline.\n\n\n\nsame as \"stripped\" above: \"This has no newline.\"\n\nkept: >+\n This has four newlines.\n\n\n\nsame as \"kept\" above: \"This has four newlines.\\n\\n\\n\\n\"")).toEqual(YAML.parse(YAML.dump({ + 'clipped': "This has one newline.\n", + 'same as "clipped" above': "This has one newline.\n", + 'stripped': 'This has no newline.', + 'same as "stripped" above': 'This has no newline.', + 'kept': "This has four newlines.\n\n\n\n", + 'same as "kept" above': "This has four newlines.\n\n\n\n" + }))); + }); +}); + +describe('Dumped YAML Comments', function() { + it('can begin the document', function() { + return expect(YAML.parse("# This is a comment\nhello: world")).toEqual(YAML.parse(YAML.dump({ + hello: 'world' + }))); + }); + it('can finish a line', function() { + return expect(YAML.parse("hello: world # This is a comment")).toEqual(YAML.parse(YAML.dump({ + hello: 'world' + }))); + }); + return it('can end the document', function() { + return expect(YAML.parse("hello: world\n# This is a comment")).toEqual(YAML.parse(YAML.dump({ + hello: 'world' + }))); + }); +}); + +describe('Dumped YAML Aliases and Anchors', function() { + it('can be simple alias', function() { + return expect(YAML.parse("- &showell Steve\n- Clark\n- Brian\n- Oren\n- *showell")).toEqual(YAML.parse(YAML.dump(['Steve', 'Clark', 'Brian', 'Oren', 'Steve']))); + }); + return it('can be alias of a mapping', function() { + return expect(YAML.parse("- &hello\n Meat: pork\n Starch: potato\n- banana\n- *hello")).toEqual(YAML.parse(YAML.dump([ + { + Meat: 'pork', + Starch: 'potato' + }, 'banana', { + Meat: 'pork', + Starch: 'potato' + } + ]))); + }); +}); + +describe('Dumped YAML Documents', function() { + it('can have YAML header', function() { + return expect(YAML.parse("--- %YAML:1.0\nfoo: 1\nbar: 2")).toEqual(YAML.parse(YAML.dump({ + foo: 1, + bar: 2 + }))); + }); + it('can have leading document separator', function() { + return expect(YAML.parse("---\n- foo: 1\n bar: 2")).toEqual(YAML.parse(YAML.dump([ + { + foo: 1, + bar: 2 + } + ]))); + }); + return it('can have multiple document separators in block', function() { + return expect(YAML.parse("foo: |\n ---\n foo: bar\n ---\n yo: baz\nbar: |\n fooness")).toEqual(YAML.parse(YAML.dump({ + foo: "---\nfoo: bar\n---\nyo: baz\n", + bar: "fooness\n" + }))); + }); +}); + +url = typeof document !== "undefined" && document !== null ? (ref = document.location) != null ? ref.href : void 0 : void 0; + +if (!(url != null) || url.indexOf('file://') === -1) { + examplePath = 'spec/example.yml'; + if (typeof __dirname !== "undefined" && __dirname !== null) { + examplePath = __dirname + '/example.yml'; + } + describe('YAML loading', function() { + it('can be done synchronously', function() { + return expect(YAML.load(examplePath)).toEqual({ + "this": 'is', + a: ['YAML', 'example'] + }); + }); + return it('can be done asynchronously', function(done) { + return YAML.load(examplePath, function(result) { + expect(result).toEqual({ + "this": 'is', + a: ['YAML', 'example'] + }); + return done(); + }); + }); + }); +} diff --git a/node_modules/yamljs/test/spec/example.yml b/node_modules/yamljs/test/spec/example.yml new file mode 100644 index 00000000..17d83eee --- /dev/null +++ b/node_modules/yamljs/test/spec/example.yml @@ -0,0 +1,4 @@ +this: is +a: + - YAML + - example \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..6265c4d5 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1494 @@ +{ + "name": "BotKit", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "JSV": { + "version": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz", + "integrity": "sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c=" + }, + "accept-language": { + "version": "3.0.18", + "resolved": "https://registry.npmjs.org/accept-language/-/accept-language-3.0.18.tgz", + "integrity": "sha1-9QJfF79lpGaoRYOMz5jNuHfYM4Q=", + "requires": { + "bcp47": "1.1.2", + "stable": "0.1.8" + } + }, + "accepts": { + "version": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", + "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + "requires": { + "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.12.tgz", + "negotiator": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", + "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=" + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "1.0.3" + } + }, + "array-flatten": { + "version": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "2.1.2" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "basic-auth": { + "version": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.0.4.tgz", + "integrity": "sha1-Awk1sB3nyblKgksp8/zLdQ06UpA=" + }, + "bcp47": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/bcp47/-/bcp47-1.1.2.tgz", + "integrity": "sha1-NUvjMH/9CEM6ePXh4glYRfifx/4=" + }, + "bluebird": { + "version": "3.4.6", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.6.tgz", + "integrity": "sha1-AdqNgh2HgT0ViWfnQ9X+bGLPjA8=" + }, + "body-parser": { + "version": "https://registry.npmjs.org/body-parser/-/body-parser-1.15.2.tgz", + "integrity": "sha1-11eM9PHRHV9uqATO813Hp/9trmc=", + "requires": { + "bytes": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", + "content-type": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "depd": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", + "http-errors": "https://registry.npmjs.org/http-errors/-/http-errors-1.5.0.tgz", + "iconv-lite": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", + "on-finished": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "qs": "https://registry.npmjs.org/qs/-/qs-6.2.0.tgz", + "raw-body": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz", + "type-is": "https://registry.npmjs.org/type-is/-/type-is-1.6.13.tgz" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "brackets2dots": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brackets2dots/-/brackets2dots-1.1.0.tgz", + "integrity": "sha1-Pz1AN1/GYM4P0AT6J9Z7NPlGmsM=" + }, + "bytes": { + "version": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", + "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=" + }, + "chalk": { + "version": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", + "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", + "requires": { + "ansi-styles": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", + "has-color": "0.1.7", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz" + }, + "dependencies": { + "has-color": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", + "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=" + } + } + }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" + }, + "cjson": { + "version": "https://registry.npmjs.org/cjson/-/cjson-0.3.0.tgz", + "integrity": "sha1-5kObkHA9MS/24iJAl76pLOPQKhQ=", + "requires": { + "jsonlint": "https://registry.npmjs.org/jsonlint/-/jsonlint-1.6.0.tgz" + } + }, + "cldrjs": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/cldrjs/-/cldrjs-0.5.1.tgz", + "integrity": "sha512-xyiP8uAm8K1IhmpDndZLraloW1yqu0L+HYdQ7O1aGPxx9Cr+BMnPANlNhSt++UKfxytL2hd2NPXgTjiy7k43Ew==" + }, + "compress": { + "version": "0.99.0", + "resolved": "https://registry.npmjs.org/compress/-/compress-0.99.0.tgz", + "integrity": "sha1-l+MBwlxNAfCX2FED9l7Msud5ZQI=" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "content-disposition": { + "version": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.1.tgz", + "integrity": "sha1-h0dsamfI2qh+Muh2Ft+IO6f7Bxs=" + }, + "content-type": { + "version": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz", + "integrity": "sha1-t9ETrueo3Se9IRM8TcJSnfFyHu0=" + }, + "convict": { + "version": "https://registry.npmjs.org/convict/-/convict-0.8.0.tgz", + "integrity": "sha1-lp/ydjkkuq7my+JVNdVHBzIbk9s=", + "requires": { + "cjson": "https://registry.npmjs.org/cjson/-/cjson-0.3.0.tgz", + "depd": "https://registry.npmjs.org/depd/-/depd-1.0.0.tgz", + "moment": "https://registry.npmjs.org/moment/-/moment-2.9.0.tgz", + "optimist": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "validator": "https://registry.npmjs.org/validator/-/validator-3.33.0.tgz", + "varify": "https://registry.npmjs.org/varify/-/varify-0.1.1.tgz" + }, + "dependencies": { + "depd": { + "version": "https://registry.npmjs.org/depd/-/depd-1.0.0.tgz", + "integrity": "sha1-L9oNAOmKrihF1Jkasb8fKhmQc9U=" + } + } + }, + "cookie": { + "version": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "cookie-signature": { + "version": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "1.0.5", + "path-key": "2.0.1", + "semver": "5.7.0", + "shebang-command": "1.2.0", + "which": "1.3.1" + } + }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" + }, + "curry2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/curry2/-/curry2-1.0.3.tgz", + "integrity": "sha1-OBkdVfEGC/6kfKCACThbuHj2YS8=", + "requires": { + "fast-bind": "1.0.0" + } + }, + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz" + } + }, + "depd": { + "version": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", + "integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM=" + }, + "destroy": { + "version": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "dotsplit.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/dotsplit.js/-/dotsplit.js-1.1.0.tgz", + "integrity": "sha1-JaI56r6SKpH/pdKhctbJ+4JFHgI=" + }, + "double-ended-queue": { + "version": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz", + "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=" + }, + "ee-first": { + "version": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", + "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=" + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "requires": { + "once": "1.4.0" + } + }, + "escape-html": { + "version": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "esprima": { + "version": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", + "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=" + }, + "etag": { + "version": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz", + "integrity": "sha1-A9MLX2fdbmMtKUXTDWZScxo01dg=" + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "requires": { + "cross-spawn": "6.0.5", + "get-stream": "4.1.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + }, + "express": { + "version": "https://registry.npmjs.org/express/-/express-4.14.0.tgz", + "integrity": "sha1-we4/Qs3Ikfs9xlCoki1R7IR9DWY=", + "requires": { + "accepts": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", + "array-flatten": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "content-disposition": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.1.tgz", + "content-type": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz", + "cookie": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "cookie-signature": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "depd": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", + "encodeurl": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", + "escape-html": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "etag": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz", + "finalhandler": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.5.0.tgz", + "fresh": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz", + "merge-descriptors": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "methods": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "on-finished": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "parseurl": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", + "path-to-regexp": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "proxy-addr": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.2.tgz", + "qs": "https://registry.npmjs.org/qs/-/qs-6.2.0.tgz", + "range-parser": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "send": "https://registry.npmjs.org/send/-/send-0.14.1.tgz", + "serve-static": "https://registry.npmjs.org/serve-static/-/serve-static-1.11.1.tgz", + "type-is": "https://registry.npmjs.org/type-is/-/type-is-1.6.13.tgz", + "utils-merge": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", + "vary": "https://registry.npmjs.org/vary/-/vary-1.1.0.tgz" + } + }, + "fast-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-bind/-/fast-bind-1.0.0.tgz", + "integrity": "sha1-f6llLLMyX1zR4lLWy08WDeGnbnU=" + }, + "finalhandler": { + "version": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.5.0.tgz", + "integrity": "sha1-6VCKvs6bbbqHGmlCodeRG5GRGsc=", + "requires": { + "debug": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "escape-html": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "on-finished": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "statuses": "https://registry.npmjs.org/statuses/-/statuses-1.3.0.tgz", + "unpipe": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "forwarded": { + "version": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.0.tgz", + "integrity": "sha1-Ge+YdMSuHCl7zweP3mOgm2aoQ2M=" + }, + "fresh": { + "version": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz", + "integrity": "sha1-ZR+DjiJCTnVm3hYdg1jKoZn4PU8=" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "3.0.0" + } + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "globalize": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/globalize/-/globalize-1.4.2.tgz", + "integrity": "sha512-IfKeYI5mAITBmT5EnH8kSQB5uGson4Fkj2XtTpyEbIS7IHNfLHoeTyLJ6tfjiKC6cJXng3IhVurDk5C7ORqFhQ==", + "requires": { + "cldrjs": "0.5.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "http-errors": { + "version": "https://registry.npmjs.org/http-errors/-/http-errors-1.5.0.tgz", + "integrity": "sha1-scs9gmD9jiOGytMYkEWUM3LUghE=", + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "setprototypeof": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.1.tgz", + "statuses": "https://registry.npmjs.org/statuses/-/statuses-1.3.0.tgz" + } + }, + "httpntlm": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/httpntlm/-/httpntlm-1.7.6.tgz", + "integrity": "sha1-aZHoNSg2AH1nEBuD247Q+RX5BtA=", + "requires": { + "httpreq": "0.4.24", + "underscore": "1.7.0" + }, + "dependencies": { + "underscore": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", + "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=" + } + } + }, + "httpreq": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/httpreq/-/httpreq-0.4.24.tgz", + "integrity": "sha1-QzX/2CzZaWaKOUZckprGHWOTYn8=" + }, + "iconv-lite": { + "version": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", + "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" + }, + "ipaddr.js": { + "version": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.1.1.tgz", + "integrity": "sha1-x5HZX1KynBJH1d+AraObinNkcjA=" + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "jsonlint": { + "version": "https://registry.npmjs.org/jsonlint/-/jsonlint-1.6.0.tgz", + "integrity": "sha1-iKpGvCiaesk7tGyuLVihh6m7SUo=", + "requires": { + "JSV": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz", + "nomnom": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz" + } + }, + "jwt-simple": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jwt-simple/-/jwt-simple-0.5.0.tgz", + "integrity": "sha1-BrHV9cLjSspWdGFm9+QekyoQ5XM=" + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "requires": { + "invert-kv": "2.0.0" + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "requires": { + "p-defer": "1.0.0" + } + }, + "md5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", + "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=", + "requires": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "1.1.6" + } + }, + "media-typer": { + "version": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "requires": { + "map-age-cleaner": "0.1.3", + "mimic-fn": "2.1.0", + "p-is-promise": "2.1.0" + } + }, + "merge-descriptors": { + "version": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", + "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=" + }, + "mime-db": { + "version": "https://registry.npmjs.org/mime-db/-/mime-db-1.24.0.tgz", + "integrity": "sha1-4tE/k58AFsbk6a0lqGUvEmxGfww=" + }, + "mime-types": { + "version": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.12.tgz", + "integrity": "sha1-FSuiVndwIN1GY/VMLnvCY4HnFyk=", + "requires": { + "mime-db": "https://registry.npmjs.org/mime-db/-/mime-db-1.24.0.tgz" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + } + } + }, + "moment": { + "version": "https://registry.npmjs.org/moment/-/moment-2.9.0.tgz", + "integrity": "sha1-d+wRdfopT0JifxDI5t5jAsA29tU=" + }, + "morgan": { + "version": "https://registry.npmjs.org/morgan/-/morgan-1.7.0.tgz", + "integrity": "sha1-6xDKjlDRq+D409rVwCAdBS2YHGI=", + "requires": { + "basic-auth": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.0.4.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "depd": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", + "on-finished": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "on-headers": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz" + } + }, + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" + }, + "negotiator": { + "version": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "node-rsa": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/node-rsa/-/node-rsa-1.0.5.tgz", + "integrity": "sha512-9o51yfV167CtQANnuAf+5owNs7aIMsAKVLhNaKuRxihsUUnfoBMN5OTVOK/2mHSOWaWq9zZBiRM3bHORbTZqrg==", + "requires": { + "asn1": "0.2.4" + } + }, + "nomnom": { + "version": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", + "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", + "underscore": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "requires": { + "path-key": "2.0.1" + } + }, + "on-finished": { + "version": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + } + }, + "on-headers": { + "version": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1.0.2" + } + }, + "optimist": { + "version": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "requires": { + "minimist": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "wordwrap": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz" + } + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "requires": { + "execa": "1.0.0", + "lcid": "2.0.0", + "mem": "4.3.0" + } + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" + }, + "parseurl": { + "version": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", + "integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "path-to-regexp": { + "version": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "proxy-addr": { + "version": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.2.tgz", + "integrity": "sha1-tMxfImENlTWCTBI675089zxAujc=", + "requires": { + "forwarded": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.0.tgz", + "ipaddr.js": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.1.1.tgz" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + }, + "punycode": { + "version": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "qs": { + "version": "https://registry.npmjs.org/qs/-/qs-6.2.0.tgz", + "integrity": "sha1-O3hIwDwt7OaalSKw+ujEEm10Xzs=" + }, + "range-parser": { + "version": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + }, + "raw-body": { + "version": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz", + "integrity": "sha1-rf6s4uT7MJgFgBTQjActzFl1h3Q=", + "requires": { + "bytes": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", + "iconv-lite": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", + "unpipe": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + } + }, + "redeyed": { + "version": "https://registry.npmjs.org/redeyed/-/redeyed-0.4.4.tgz", + "integrity": "sha1-N+mQpvKyGyoRwuakj9QTVpjLqX8=", + "requires": { + "esprima": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz" + } + }, + "redis": { + "version": "https://registry.npmjs.org/redis/-/redis-2.6.2.tgz", + "integrity": "sha1-fMqwVjATrGGefdhMZRK4HT2FJXk=", + "requires": { + "double-ended-queue": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz", + "redis-commands": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.3.0.tgz", + "redis-parser": "https://registry.npmjs.org/redis-parser/-/redis-parser-2.0.4.tgz" + } + }, + "redis-commands": { + "version": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.3.0.tgz", + "integrity": "sha1-QwfYCUruExWCmrZymze5n2I2XWM=" + }, + "redis-parser": { + "version": "https://registry.npmjs.org/redis-parser/-/redis-parser-2.0.4.tgz", + "integrity": "sha1-cMu7PO+L9BoxU4iv4UkEplp6ECg=" + }, + "request": { + "version": "2.78.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.78.0.tgz", + "integrity": "sha1-4cjew0bhyBkjskrNszfxHeyr6cw=", + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.5.0", + "caseless": "0.11.0", + "combined-stream": "1.0.5", + "extend": "3.0.0", + "forever-agent": "0.6.1", + "form-data": "2.1.2", + "har-validator": "2.0.6", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.12.tgz", + "node-uuid": "1.4.7", + "oauth-sign": "0.8.2", + "qs": "6.3.0", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.4.3" + }, + "dependencies": { + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" + }, + "aws4": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.5.0.tgz", + "integrity": "sha1-Cin/t5wxyecS7rCH6OemS0pW11U=" + }, + "caseless": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=" + }, + "combined-stream": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "requires": { + "delayed-stream": "1.0.0" + }, + "dependencies": { + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + } + } + }, + "extend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", + "integrity": "sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ=" + }, + "form-data": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.2.tgz", + "integrity": "sha1-icNTQAi5fq2ky7FX1Y9vXfAl6uQ=", + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.12.tgz" + }, + "dependencies": { + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + } + } + }, + "har-validator": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", + "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", + "requires": { + "chalk": "1.1.3", + "commander": "2.9.0", + "is-my-json-valid": "2.15.0", + "pinkie-promise": "2.0.1" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + } + } + }, + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "requires": { + "graceful-readlink": "1.0.1" + }, + "dependencies": { + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" + } + } + }, + "is-my-json-valid": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz", + "integrity": "sha1-k27do8o8IR/ZjzstPgjaQ/eykVs=", + "requires": { + "generate-function": "2.0.0", + "generate-object-property": "1.2.0", + "jsonpointer": "4.0.0", + "xtend": "4.0.1" + }, + "dependencies": { + "generate-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=" + }, + "generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "requires": { + "is-property": "1.0.2" + }, + "dependencies": { + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" + } + } + }, + "jsonpointer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.0.tgz", + "integrity": "sha1-ZmHhYdL8RF8Z+YQwIxNDci4fy9U=" + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + } + } + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "2.0.4" + }, + "dependencies": { + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + } + } + } + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + }, + "dependencies": { + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "requires": { + "hoek": "2.16.3" + } + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "requires": { + "boom": "2.10.1" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "requires": { + "hoek": "2.16.3" + } + } + } + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.3.1", + "sshpk": "1.10.1" + }, + "dependencies": { + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" + }, + "jsprim": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.3.1.tgz", + "integrity": "sha1-KnJW9wQSop7jZwqspiWZTE3P8lI=", + "requires": { + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "extsprintf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", + "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "verror": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", + "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", + "requires": { + "extsprintf": "1.0.2" + } + } + } + }, + "sshpk": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.10.1.tgz", + "integrity": "sha1-MOGl0ykkSXShr2FREznVla9mOLA=", + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.0", + "dashdash": "1.14.0", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.6", + "jodid25519": "1.0.2", + "jsbn": "0.1.0", + "tweetnacl": "0.14.3" + }, + "dependencies": { + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "bcrypt-pbkdf": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz", + "integrity": "sha1-PKdrhSQccXC/fZcD57mqdGMAQNQ=", + "optional": true, + "requires": { + "tweetnacl": "0.14.3" + } + }, + "dashdash": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.0.tgz", + "integrity": "sha1-KeSGxUGL8PNWA0qZPVFoajPoQUE=", + "requires": { + "assert-plus": "1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "optional": true, + "requires": { + "jsbn": "0.1.0" + } + }, + "getpass": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz", + "integrity": "sha1-KD/9n8ElaECHUxHBtg6MQBhxEOY=", + "requires": { + "assert-plus": "1.0.0" + } + }, + "jodid25519": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", + "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=", + "optional": true, + "requires": { + "jsbn": "0.1.0" + } + }, + "jsbn": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz", + "integrity": "sha1-ZQmH2g3XT06/WhE3eiqi0nPpff0=", + "optional": true + }, + "tweetnacl": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.3.tgz", + "integrity": "sha1-PaOC9nDyXe1417PReSEZvKC3Ey0=", + "optional": true + } + } + } + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "node-uuid": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz", + "integrity": "sha1-baWhdmjEs91ZYjvaEc9/pMH2Cm8=" + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + }, + "qs": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.0.tgz", + "integrity": "sha1-9AOyZPI7wBIox0ExtAfxjV6l1EI=" + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" + }, + "tough-cookie": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", + "requires": { + "punycode": "1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + } + } + }, + "tunnel-agent": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=" + } + } + }, + "request-promise": { + "version": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.1.tgz", + "integrity": "sha1-fuxWyJMXqCLL/qmbA5zlQ8LhX2c=", + "requires": { + "bluebird": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", + "request-promise-core": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", + "stealthy-require": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "tough-cookie": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz" + }, + "dependencies": { + "bluebird": { + "version": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", + "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=" + } + } + }, + "request-promise-core": { + "version": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", + "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", + "requires": { + "lodash": "4.17.4" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "selectn": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/selectn/-/selectn-1.1.2.tgz", + "integrity": "sha1-/IrNkd8/RaywGJHGdzrlKYUdaxc=", + "requires": { + "brackets2dots": "1.1.0", + "curry2": "1.0.3", + "debug": "2.6.9", + "dotsplit.js": "1.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + }, + "send": { + "version": "https://registry.npmjs.org/send/-/send-0.14.1.tgz", + "integrity": "sha1-qVSYQyU5L1FTKndgdg5FlZjIn3o=", + "requires": { + "debug": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "depd": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", + "destroy": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "encodeurl": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", + "escape-html": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "etag": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz", + "fresh": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz", + "http-errors": "https://registry.npmjs.org/http-errors/-/http-errors-1.5.0.tgz", + "mime": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "on-finished": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "range-parser": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "statuses": "https://registry.npmjs.org/statuses/-/statuses-1.3.0.tgz" + } + }, + "serve-static": { + "version": "https://registry.npmjs.org/serve-static/-/serve-static-1.11.1.tgz", + "integrity": "sha1-1sznaTUF9zPHWd5Xvvwa92wPCAU=", + "requires": { + "encodeurl": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", + "escape-html": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "parseurl": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", + "send": "https://registry.npmjs.org/send/-/send-0.14.1.tgz" + } + }, + "setprototypeof": { + "version": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.1.tgz", + "integrity": "sha1-UgCbJ4iMTcSPWRlJwKgnWDTByn4=" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + }, + "statuses": { + "version": "https://registry.npmjs.org/statuses/-/statuses-1.3.0.tgz", + "integrity": "sha1-jlV1jLIOdoLB9Pzo3KswvwHR4Ho=" + }, + "stealthy-require": { + "version": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" + }, + "strip-ansi": { + "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", + "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=" + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, + "strong-globalize": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/strong-globalize/-/strong-globalize-4.1.3.tgz", + "integrity": "sha512-SJegV7w5D4AodEspZJtJ7rls3fmi+Zc0PdyJCqBsg4RN9B8TC80/uAI2fikC+s1Jp9FLvr2vDX8f0Fqc62M4OA==", + "requires": { + "accept-language": "3.0.18", + "debug": "4.1.1", + "globalize": "1.4.2", + "lodash": "4.17.4", + "md5": "2.2.1", + "mkdirp": "0.5.1", + "os-locale": "3.1.0", + "yamljs": "0.3.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "strong-soap": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/strong-soap/-/strong-soap-1.20.0.tgz", + "integrity": "sha512-yJQf/0R+O0m/8UKDbNHry/XOJ+83qpBpbfyLS1NggyEnVdXvXIK51s7KSbzZJC3Nrxb7ksfg5A7vlZ5hOWjKcw==", + "requires": { + "compress": "0.99.0", + "debug": "4.1.1", + "httpntlm": "1.7.6", + "lodash": "4.17.11", + "node-rsa": "1.0.5", + "request": "2.78.0", + "sax": "1.2.4", + "selectn": "1.1.2", + "strong-globalize": "4.1.3", + "uuid": "3.3.2", + "xml-crypto": "1.4.0", + "xmlbuilder": "10.1.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "2.1.2" + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "through": { + "version": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "tough-cookie": { + "version": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", + "requires": { + "punycode": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" + } + }, + "type-is": { + "version": "https://registry.npmjs.org/type-is/-/type-is-1.6.13.tgz", + "integrity": "sha1-boO6e8MM0zp7sLf7AHN6IIW/nQg=", + "requires": { + "media-typer": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.12.tgz" + } + }, + "underscore": { + "version": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=" + }, + "unpipe": { + "version": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "utils-merge": { + "version": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", + "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=" + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "validator": { + "version": "https://registry.npmjs.org/validator/-/validator-3.33.0.tgz", + "integrity": "sha1-zUBu4hehyjfDqk5ipz8HRET/jew=" + }, + "varify": { + "version": "https://registry.npmjs.org/varify/-/varify-0.1.1.tgz", + "integrity": "sha1-mIVL9GVDilIHiM/KE24U9REVWx4=", + "requires": { + "redeyed": "https://registry.npmjs.org/redeyed/-/redeyed-0.4.4.tgz", + "through": "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + } + }, + "vary": { + "version": "https://registry.npmjs.org/vary/-/vary-1.1.0.tgz", + "integrity": "sha1-4eWv+70WrnaN0mdDlLmtMCJlMUA=" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "2.0.0" + } + }, + "wordwrap": { + "version": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "xml-crypto": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/xml-crypto/-/xml-crypto-1.4.0.tgz", + "integrity": "sha512-K8FRdRxICVulK4WhiTUcJrRyAIJFPVOqxfurA3x/JlmXBTxy+SkEENF6GeRt7p/rB6WSOUS9g0gXNQw5n+407g==", + "requires": { + "xmldom": "0.1.27", + "xpath": "0.0.27" + } + }, + "xmlbuilder": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-10.1.1.tgz", + "integrity": "sha512-OyzrcFLL/nb6fMGHbiRDuPup9ljBycsdCypwuyg5AAHvyWzGfChJpCXMG88AGTIMFhGZ9RccFN1e6lhg3hkwKg==" + }, + "xmldom": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", + "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=" + }, + "xpath": { + "version": "0.0.27", + "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.27.tgz", + "integrity": "sha512-fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ==" + }, + "yamljs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz", + "integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==", + "requires": { + "argparse": "1.0.10", + "glob": "7.1.4" + } + } + } +} diff --git a/package.json b/package.json index a4abd1f1..f62aa1cc 100644 --- a/package.json +++ b/package.json @@ -71,6 +71,7 @@ "setprototypeof": "^1.0.1", "statuses": "^1.3.0", "strip-ansi": "^0.1.1", + "strong-soap": "^1.20.0", "through": "^2.3.8", "type-is": "^1.6.13", "underscore": "^1.6.0",
<soap:Body>soap:Body>