/**
 * @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/ru", ["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 = [
        [
            ['полн.', 'полд.', 'утра', 'дня', 'веч.', 'ночи'],
            ['полн.', 'полд.', 'утра', 'дня', 'вечера', 'ночи'],
            ['полночь', 'полдень', 'утра', 'дня', 'вечера', 'ночи']
        ],
        [
            ['полн.', 'полд.', 'утро', 'день', 'веч.', 'ночь'], u,
            ['полночь', 'полдень', 'утро', 'день', 'вечер', 'ночь']
        ],
        ['00:00', '12:00', ['04:00', '12:00'], ['12:00', '18:00'], ['18:00', '24:00'], ['00:00', '04:00']]
    ];
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vbG9jYWxlcy9leHRyYS9ydS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7OztJQUVILHlDQUF5QztJQUN6QywrQ0FBK0M7SUFFL0MsSUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBRXBCLGtCQUFlO1FBQ2I7WUFDRSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDO1lBQ2pELENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUM7WUFDbkQsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQztTQUN4RDtRQUNEO1lBQ0UsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDckQsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQztTQUN4RDtRQUNELENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztLQUNuRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8vIFRISVMgQ09ERSBJUyBHRU5FUkFURUQgLSBETyBOT1QgTU9ESUZZXG4vLyBTZWUgYW5ndWxhci90b29scy9ndWxwLXRhc2tzL2NsZHIvZXh0cmFjdC5qc1xuXG5jb25zdCB1ID0gdW5kZWZpbmVkO1xuXG5leHBvcnQgZGVmYXVsdCBbXG4gIFtcbiAgICBbJ9C/0L7Qu9C9LicsICfQv9C+0LvQtC4nLCAn0YPRgtGA0LAnLCAn0LTQvdGPJywgJ9Cy0LXRhy4nLCAn0L3QvtGH0LgnXSxcbiAgICBbJ9C/0L7Qu9C9LicsICfQv9C+0LvQtC4nLCAn0YPRgtGA0LAnLCAn0LTQvdGPJywgJ9Cy0LXRh9C10YDQsCcsICfQvdC+0YfQuCddLFxuICAgIFsn0L/QvtC70L3QvtGH0YwnLCAn0L/QvtC70LTQtdC90YwnLCAn0YPRgtGA0LAnLCAn0LTQvdGPJywgJ9Cy0LXRh9C10YDQsCcsICfQvdC+0YfQuCddXG4gIF0sXG4gIFtcbiAgICBbJ9C/0L7Qu9C9LicsICfQv9C+0LvQtC4nLCAn0YPRgtGA0L4nLCAn0LTQtdC90YwnLCAn0LLQtdGHLicsICfQvdC+0YfRjCddLCB1LFxuICAgIFsn0L/QvtC70L3QvtGH0YwnLCAn0L/QvtC70LTQtdC90YwnLCAn0YPRgtGA0L4nLCAn0LTQtdC90YwnLCAn0LLQtdGH0LXRgCcsICfQvdC+0YfRjCddXG4gIF0sXG4gIFsnMDA6MDAnLCAnMTI6MDAnLCBbJzA0OjAwJywgJzEyOjAwJ10sIFsnMTI6MDAnLCAnMTg6MDAnXSwgWycxODowMCcsICcyNDowMCddLCBbJzAwOjAwJywgJzA0OjAwJ11dXG5dO1xuIl19