/**
 * @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/th", ["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
        ],
        [
            ['เที่ยงคืน', 'เที่ยง', 'เช้า', 'ช่วงเที่ยง', 'บ่าย', 'เย็น', 'ค่ำ', 'กลางคืน'],
            ['เที่ยงคืน', 'เที่ยง', 'ในตอนเช้า', 'ในตอนบ่าย', 'บ่าย', 'ในตอนเย็น', 'ค่ำ', 'กลางคืน'], u
        ],
        [
            '00:00', '12:00', ['06:00', '12:00'], ['12:00', '13:00'], ['13:00', '16:00'],
            ['16:00', '18:00'], ['18:00', '21:00'], ['21:00', '06:00']
        ]
    ];
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vbG9jYWxlcy9leHRyYS90aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7OztJQUVILHlDQUF5QztJQUN6QywrQ0FBK0M7SUFFL0MsSUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBRXBCLGtCQUFlO1FBQ2I7WUFDRSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUM7WUFDM0UsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQztTQUM1RjtRQUNEO1lBQ0UsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDO1lBQy9FLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUM7U0FDNUY7UUFDRDtZQUNFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDO1lBQzVFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQztTQUMzRDtLQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuLy8gVEhJUyBDT0RFIElTIEdFTkVSQVRFRCAtIERPIE5PVCBNT0RJRllcbi8vIFNlZSBhbmd1bGFyL3Rvb2xzL2d1bHAtdGFza3MvY2xkci9leHRyYWN0LmpzXG5cbmNvbnN0IHUgPSB1bmRlZmluZWQ7XG5cbmV4cG9ydCBkZWZhdWx0IFtcbiAgW1xuICAgIFsn4LmA4LiX4Li14LmI4Lii4LiH4LiE4Li34LiZJywgJ+C5gOC4l+C4teC5iOC4ouC4hycsICfguYDguIrguYnguLInLCAn4LmA4LiX4Li14LmI4Lii4LiHJywgJ+C4muC5iOC4suC4oicsICfguYDguKLguYfguJknLCAn4LiE4LmI4LizJywgJ+C4geC4peC4suC4h+C4hOC4t+C4mSddLFxuICAgIFsn4LmA4LiX4Li14LmI4Lii4LiH4LiE4Li34LiZJywgJ+C5gOC4l+C4teC5iOC4ouC4hycsICfguYPguJnguJXguK3guJnguYDguIrguYnguLInLCAn4LmD4LiZ4LiV4Lit4LiZ4Lia4LmI4Liy4LiiJywgJ+C4muC5iOC4suC4oicsICfguYPguJnguJXguK3guJnguYDguKLguYfguJknLCAn4LiE4LmI4LizJywgJ+C4geC4peC4suC4h+C4hOC4t+C4mSddLCB1XG4gIF0sXG4gIFtcbiAgICBbJ+C5gOC4l+C4teC5iOC4ouC4h+C4hOC4t+C4mScsICfguYDguJfguLXguYjguKLguIcnLCAn4LmA4LiK4LmJ4LiyJywgJ+C4iuC5iOC4p+C4h+C5gOC4l+C4teC5iOC4ouC4hycsICfguJrguYjguLLguKInLCAn4LmA4Lii4LmH4LiZJywgJ+C4hOC5iOC4sycsICfguIHguKXguLLguIfguITguLfguJknXSxcbiAgICBbJ+C5gOC4l+C4teC5iOC4ouC4h+C4hOC4t+C4mScsICfguYDguJfguLXguYjguKLguIcnLCAn4LmD4LiZ4LiV4Lit4LiZ4LmA4LiK4LmJ4LiyJywgJ+C5g+C4meC4leC4reC4meC4muC5iOC4suC4oicsICfguJrguYjguLLguKInLCAn4LmD4LiZ4LiV4Lit4LiZ4LmA4Lii4LmH4LiZJywgJ+C4hOC5iOC4sycsICfguIHguKXguLLguIfguITguLfguJknXSwgdVxuICBdLFxuICBbXG4gICAgJzAwOjAwJywgJzEyOjAwJywgWycwNjowMCcsICcxMjowMCddLCBbJzEyOjAwJywgJzEzOjAwJ10sIFsnMTM6MDAnLCAnMTY6MDAnXSxcbiAgICBbJzE2OjAwJywgJzE4OjAwJ10sIFsnMTg6MDAnLCAnMjE6MDAnXSwgWycyMTowMCcsICcwNjowMCddXG4gIF1cbl07XG4iXX0=