/**
 * @license
 * Copyright Google LLC 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/extra/sv-AX", ["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;
    exports.default = [
        [
            ['midn.', 'på morg.', 'på förm.', 'på efterm.', 'på kvällen', 'på natten'],
            ['midnatt', 'på morg.', 'på förm.', 'på efterm.', 'på kvällen', 'på natten'],
            ['midnatt', 'på morgonen', 'på förmiddagen', 'på eftermiddagen', 'på kvällen', 'på natten']
        ],
        [
            ['midn.', 'morg.', 'förm.', 'efterm.', 'kväll', 'natt'],
            ['midnatt', 'morgon', 'förm.', 'efterm.', 'kväll', 'natt'],
            ['midnatt', 'morgon', 'förmiddag', 'eftermiddag', 'kväll', 'natt']
        ],
        [
            '00:00', ['05:00', '10:00'], ['10:00', '12:00'], ['12:00', '18:00'], ['18:00', '24:00'],
            ['00:00', '05:00']
        ]
    ];
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3YtQVguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vbG9jYWxlcy9leHRyYS9zdi1BWC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7OztJQUVILHlDQUF5QztJQUN6QywrQ0FBK0M7SUFFL0MsSUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBRXBCLGtCQUFlO1FBQ2I7WUFDRSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsV0FBVyxDQUFDO1lBQzFFLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUM7WUFDNUUsQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxXQUFXLENBQUM7U0FDNUY7UUFDRDtZQUNFLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUM7WUFDdkQsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQztZQUMxRCxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDO1NBQ25FO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDO1lBQ3ZGLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQztTQUNuQjtLQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuLy8gVEhJUyBDT0RFIElTIEdFTkVSQVRFRCAtIERPIE5PVCBNT0RJRllcbi8vIFNlZSBhbmd1bGFyL3Rvb2xzL2d1bHAtdGFza3MvY2xkci9leHRyYWN0LmpzXG5cbmNvbnN0IHUgPSB1bmRlZmluZWQ7XG5cbmV4cG9ydCBkZWZhdWx0IFtcbiAgW1xuICAgIFsnbWlkbi4nLCAncMOlIG1vcmcuJywgJ3DDpSBmw7ZybS4nLCAncMOlIGVmdGVybS4nLCAncMOlIGt2w6RsbGVuJywgJ3DDpSBuYXR0ZW4nXSxcbiAgICBbJ21pZG5hdHQnLCAncMOlIG1vcmcuJywgJ3DDpSBmw7ZybS4nLCAncMOlIGVmdGVybS4nLCAncMOlIGt2w6RsbGVuJywgJ3DDpSBuYXR0ZW4nXSxcbiAgICBbJ21pZG5hdHQnLCAncMOlIG1vcmdvbmVuJywgJ3DDpSBmw7ZybWlkZGFnZW4nLCAncMOlIGVmdGVybWlkZGFnZW4nLCAncMOlIGt2w6RsbGVuJywgJ3DDpSBuYXR0ZW4nXVxuICBdLFxuICBbXG4gICAgWydtaWRuLicsICdtb3JnLicsICdmw7ZybS4nLCAnZWZ0ZXJtLicsICdrdsOkbGwnLCAnbmF0dCddLFxuICAgIFsnbWlkbmF0dCcsICdtb3Jnb24nLCAnZsO2cm0uJywgJ2VmdGVybS4nLCAna3bDpGxsJywgJ25hdHQnXSxcbiAgICBbJ21pZG5hdHQnLCAnbW9yZ29uJywgJ2bDtnJtaWRkYWcnLCAnZWZ0ZXJtaWRkYWcnLCAna3bDpGxsJywgJ25hdHQnXVxuICBdLFxuICBbXG4gICAgJzAwOjAwJywgWycwNTowMCcsICcxMDowMCddLCBbJzEwOjAwJywgJzEyOjAwJ10sIFsnMTI6MDAnLCAnMTg6MDAnXSwgWycxODowMCcsICcyNDowMCddLFxuICAgIFsnMDA6MDAnLCAnMDU6MDAnXVxuICBdXG5dO1xuIl19