/**
 * @license
 * Copyright Google Inc. All Rights Reserved.
 *
 * Use of this source code is governed by an MIT-style license that can be
 * found in the LICENSE file at https://angular.io/license
 */
(function (factory) {
    if (typeof module === "object" && typeof module.exports === "object") {
        var v = factory(null, exports);
        if (v !== undefined) module.exports = v;
    }
    else if (typeof define === "function" && define.amd) {
        define("@angular/common/locales/brx", ["require", "exports"], factory);
    }
})(function (require, exports) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    // THIS CODE IS GENERATED - DO NOT MODIFY
    // See angular/tools/gulp-tasks/cldr/extract.js
    var u = undefined;
    function plural(n) {
        if (n === 1)
            return 1;
        return 5;
    }
    exports.default = [
        'brx', [['फुं', 'बेलासे'], u, u], u,
        [
            ['र', 'स', 'मं', 'बु', 'बि', 'सु', 'सु'],
            [
                'रबि', 'सम', 'मंगल', 'बुद', 'बिसथि', 'सुखुर',
                'सुनि'
            ],
            [
                'रबिबार', 'समबार', 'मंगलबार', 'बुदबार',
                'बिसथिबार', 'सुखुरबार', 'सुनिबार'
            ],
            [
                'रबि', 'सम', 'मंगल', 'बुद', 'बिसथि', 'सुखुर',
                'सुनि'
            ]
        ],
        u,
        [
            [
                'ज', 'फे', 'मा', 'ए', 'मे', 'जु', 'जु', 'आ', 'से', 'अ', 'न',
                'दि'
            ],
            [
                'जानुवारी', 'फेब्रुवारी', 'मार्स',
                'एफ्रिल', 'मे', 'जुन', 'जुलाइ', 'आगस्थ',
                'सेबथेज्ब़र', 'अखथबर', 'नबेज्ब़र',
                'दिसेज्ब़र'
            ],
            u
        ],
        u, [['ईसा.पूर्व', 'सन'], u, u], 0, [0, 0],
        ['M/d/yy', 'MMM d, y', 'MMMM d, y', 'EEEE, MMMM d, y'],
        ['h:mm a', 'h:mm:ss a', 'h:mm:ss a z', 'h:mm:ss a zzzz'], ['{1} {0}', u, u, u],
        ['.', ',', ';', '%', '+', '-', 'E', '×', '‰', '∞', 'NaN', ':'],
        ['#,##,##0.###', '#,##,##0%', '¤ #,##,##0.00', '#E0'], '₹', 'रां',
        { 'JPY': ['JP¥', '¥'], 'USD': ['US$', '$'] }, plural
    ];
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJ4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL2xvY2FsZXMvYnJ4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7O0lBRUgseUNBQXlDO0lBQ3pDLCtDQUErQztJQUUvQyxJQUFNLENBQUMsR0FBRyxTQUFTLENBQUM7SUFFcEIsU0FBUyxNQUFNLENBQUMsQ0FBUztRQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFDdEIsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsa0JBQWU7UUFDYixLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNuQztZQUNFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDO1lBQ3hDO2dCQUNFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTztnQkFDNUMsTUFBTTthQUNQO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUTtnQkFDdEMsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTO2FBQ2xDO1lBQ0Q7Z0JBQ0UsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPO2dCQUM1QyxNQUFNO2FBQ1A7U0FDRjtRQUNELENBQUM7UUFDRDtZQUNFO2dCQUNFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHO2dCQUMzRCxJQUFJO2FBQ0w7WUFDRDtnQkFDRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE9BQU87Z0JBQ2pDLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPO2dCQUN2QyxZQUFZLEVBQUUsT0FBTyxFQUFFLFVBQVU7Z0JBQ2pDLFdBQVc7YUFDWjtZQUNELENBQUM7U0FDRjtRQUNELENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLENBQUM7UUFDdEQsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUM7UUFDOUQsQ0FBQyxjQUFjLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSztRQUNqRSxFQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUMsRUFBRSxNQUFNO0tBQ25ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8vIFRISVMgQ09ERSBJUyBHRU5FUkFURUQgLSBETyBOT1QgTU9ESUZZXG4vLyBTZWUgYW5ndWxhci90b29scy9ndWxwLXRhc2tzL2NsZHIvZXh0cmFjdC5qc1xuXG5jb25zdCB1ID0gdW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBwbHVyYWwobjogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKG4gPT09IDEpIHJldHVybiAxO1xuICByZXR1cm4gNTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgW1xuICAnYnJ4JywgW1sn4KSr4KWB4KSCJywgJ+CkrOClh+CksuCkvuCkuOClhyddLCB1LCB1XSwgdSxcbiAgW1xuICAgIFsn4KSwJywgJ+CkuCcsICfgpK7gpIInLCAn4KSs4KWBJywgJ+CkrOCkvycsICfgpLjgpYEnLCAn4KS44KWBJ10sXG4gICAgW1xuICAgICAgJ+CksOCkrOCkvycsICfgpLjgpK4nLCAn4KSu4KSC4KSX4KSyJywgJ+CkrOClgeCkpicsICfgpKzgpL/gpLjgpKXgpL8nLCAn4KS44KWB4KSW4KWB4KSwJyxcbiAgICAgICfgpLjgpYHgpKjgpL8nXG4gICAgXSxcbiAgICBbXG4gICAgICAn4KSw4KSs4KS/4KSs4KS+4KSwJywgJ+CkuOCkruCkrOCkvuCksCcsICfgpK7gpILgpJfgpLLgpKzgpL7gpLAnLCAn4KSs4KWB4KSm4KSs4KS+4KSwJyxcbiAgICAgICfgpKzgpL/gpLjgpKXgpL/gpKzgpL7gpLAnLCAn4KS44KWB4KSW4KWB4KSw4KSs4KS+4KSwJywgJ+CkuOClgeCkqOCkv+CkrOCkvuCksCdcbiAgICBdLFxuICAgIFtcbiAgICAgICfgpLDgpKzgpL8nLCAn4KS44KSuJywgJ+CkruCkguCkl+CksicsICfgpKzgpYHgpKYnLCAn4KSs4KS/4KS44KSl4KS/JywgJ+CkuOClgeCkluClgeCksCcsXG4gICAgICAn4KS44KWB4KSo4KS/J1xuICAgIF1cbiAgXSxcbiAgdSxcbiAgW1xuICAgIFtcbiAgICAgICfgpJwnLCAn4KSr4KWHJywgJ+CkruCkvicsICfgpI8nLCAn4KSu4KWHJywgJ+CknOClgScsICfgpJzgpYEnLCAn4KSGJywgJ+CkuOClhycsICfgpIUnLCAn4KSoJyxcbiAgICAgICfgpKbgpL8nXG4gICAgXSxcbiAgICBbXG4gICAgICAn4KSc4KS+4KSo4KWB4KS14KS+4KSw4KWAJywgJ+Ckq+Clh+CkrOCljeCksOClgeCkteCkvuCksOClgCcsICfgpK7gpL7gpLDgpY3gpLgnLFxuICAgICAgJ+Ckj+Ckq+CljeCksOCkv+CksicsICfgpK7gpYcnLCAn4KSc4KWB4KSoJywgJ+CknOClgeCksuCkvuCkhycsICfgpIbgpJfgpLjgpY3gpKUnLFxuICAgICAgJ+CkuOClh+CkrOCkpeClh+CknOCljeCkrOCkvOCksCcsICfgpIXgpJbgpKXgpKzgpLAnLCAn4KSo4KSs4KWH4KSc4KWN4KSs4KS84KSwJyxcbiAgICAgICfgpKbgpL/gpLjgpYfgpJzgpY3gpKzgpLzgpLAnXG4gICAgXSxcbiAgICB1XG4gIF0sXG4gIHUsIFtbJ+CkiOCkuOCkvi7gpKrgpYLgpLDgpY3gpLUnLCAn4KS44KSoJ10sIHUsIHVdLCAwLCBbMCwgMF0sXG4gIFsnTS9kL3l5JywgJ01NTSBkLCB5JywgJ01NTU0gZCwgeScsICdFRUVFLCBNTU1NIGQsIHknXSxcbiAgWydoOm1tIGEnLCAnaDptbTpzcyBhJywgJ2g6bW06c3MgYSB6JywgJ2g6bW06c3MgYSB6enp6J10sIFsnezF9IHswfScsIHUsIHUsIHVdLFxuICBbJy4nLCAnLCcsICc7JywgJyUnLCAnKycsICctJywgJ0UnLCAnw5cnLCAn4oCwJywgJ+KInicsICdOYU4nLCAnOiddLFxuICBbJyMsIyMsIyMwLiMjIycsICcjLCMjLCMjMCUnLCAnwqTCoCMsIyMsIyMwLjAwJywgJyNFMCddLCAn4oK5JywgJ+CksOCkvuCkgicsXG4gIHsnSlBZJzogWydKUMKlJywgJ8KlJ10sICdVU0QnOiBbJ1VTJCcsICckJ119LCBwbHVyYWxcbl07XG4iXX0=