# *   Copyright (C) 1998-2013, International Business Machines
# *   Corporation and others.  All Rights Reserved.
GENRB_CLDR_VERSION = 23
# A list of txt's to build
# Note:
#
#   If you are thinking of modifying this file, READ THIS.
#
# Instead of changing this file [unless you want to check it back in],
# you should consider creating a 'reslocal.mk' file in this same directory.
# Then, you can have your local changes remain even if you upgrade or
# reconfigure ICU.
#
# Example 'reslocal.mk' files:
#
#  * To add an additional locale to the list:
#    _____________________________________________________
#    |  GENRB_SOURCE_LOCAL =   myLocale.txt ...
#
#  * To REPLACE the default list and only build with a few
#    locales:
#    _____________________________________________________
#    |  GENRB_SOURCE = ar.txt ar_AE.txt en.txt de.txt zh.txt
#
#
# Generated by LDML2ICUConverter, from LDML source files.

# Aliases without a corresponding xx.xml file (see icu-config.xml & build.xml)
GENRB_SYNTHETIC_ALIAS = az_AZ.txt bs_BA.txt en_NH.txt en_RH.txt\
 ha_GH.txt ha_NE.txt ha_NG.txt in.txt in_ID.txt\
 iw.txt iw_IL.txt ja_JP_TRADITIONAL.txt kk_KZ.txt ks_IN.txt\
 mn_MN.txt mo.txt ms_BN.txt ms_MY.txt ms_SG.txt\
 no.txt no_NO.txt no_NO_NY.txt pa_IN.txt pa_PK.txt\
 sh.txt sh_BA.txt sh_CS.txt sh_YU.txt shi_MA.txt\
 sr_BA.txt sr_CS.txt sr_Cyrl_CS.txt sr_Cyrl_YU.txt sr_Latn_CS.txt\
 sr_Latn_YU.txt sr_ME.txt sr_RS.txt sr_YU.txt th_TH_TRADITIONAL.txt\
 tl.txt tl_PH.txt tzm_MA.txt uz_AF.txt uz_UZ.txt\
 vai_LR.txt zh_CN.txt zh_HK.txt zh_MO.txt zh_SG.txt\
 zh_TW.txt


# All aliases (to not be included under 'installed'), but not including root.
GENRB_ALIAS_SOURCE = $(GENRB_SYNTHETIC_ALIAS)


# Ordinary resources
GENRB_SOURCE = af.txt af_NA.txt af_ZA.txt agq.txt\
 agq_CM.txt ak.txt ak_GH.txt am.txt am_ET.txt\
 ar.txt ar_001.txt ar_AE.txt ar_BH.txt ar_DJ.txt\
 ar_DZ.txt ar_EG.txt ar_EH.txt ar_ER.txt ar_IL.txt\
 ar_IQ.txt ar_JO.txt ar_KM.txt ar_KW.txt ar_LB.txt\
 ar_LY.txt ar_MA.txt ar_MR.txt ar_OM.txt ar_PS.txt\
 ar_QA.txt ar_SA.txt ar_SD.txt ar_SO.txt ar_SY.txt\
 ar_TD.txt ar_TN.txt ar_YE.txt as.txt as_IN.txt\
 asa.txt asa_TZ.txt az.txt az_Cyrl.txt az_Cyrl_AZ.txt\
 az_Latn.txt az_Latn_AZ.txt bas.txt bas_CM.txt be.txt\
 be_BY.txt bem.txt bem_ZM.txt bez.txt bez_TZ.txt\
 bg.txt bg_BG.txt bm.txt bm_ML.txt bn.txt\
 bn_BD.txt bn_IN.txt bo.txt bo_CN.txt bo_IN.txt\
 br.txt br_FR.txt brx.txt brx_IN.txt bs.txt\
 bs_Cyrl.txt bs_Cyrl_BA.txt bs_Latn.txt bs_Latn_BA.txt ca.txt\
 ca_AD.txt ca_ES.txt cgg.txt cgg_UG.txt chr.txt\
 chr_US.txt cs.txt cs_CZ.txt cy.txt cy_GB.txt\
 da.txt da_DK.txt dav.txt dav_KE.txt de.txt\
 de_AT.txt de_BE.txt de_CH.txt de_DE.txt de_LI.txt\
 de_LU.txt dje.txt dje_NE.txt dua.txt dua_CM.txt\
 dyo.txt dyo_SN.txt dz.txt dz_BT.txt ebu.txt\
 ebu_KE.txt ee.txt ee_GH.txt ee_TG.txt el.txt\
 el_CY.txt el_GR.txt en.txt en_150.txt en_AG.txt\
 en_AS.txt en_AU.txt en_BB.txt en_BE.txt en_BM.txt\
 en_BS.txt en_BW.txt en_BZ.txt en_CA.txt en_CM.txt\
 en_DM.txt en_FJ.txt en_FM.txt en_GB.txt en_GD.txt\
 en_GG.txt en_GH.txt en_GI.txt en_GM.txt en_GU.txt\
 en_GY.txt en_HK.txt en_IE.txt en_IM.txt en_IN.txt\
 en_JE.txt en_JM.txt en_KE.txt en_KI.txt en_KN.txt\
 en_KY.txt en_LC.txt en_LR.txt en_LS.txt en_MG.txt\
 en_MH.txt en_MP.txt en_MT.txt en_MU.txt en_MW.txt\
 en_NA.txt en_NG.txt en_NZ.txt en_PG.txt en_PH.txt\
 en_PK.txt en_PR.txt en_PW.txt en_SB.txt en_SC.txt\
 en_SG.txt en_SL.txt en_SS.txt en_SZ.txt en_TC.txt\
 en_TO.txt en_TT.txt en_TZ.txt en_UG.txt en_UM.txt\
 en_US.txt en_US_POSIX.txt en_VC.txt en_VG.txt en_VI.txt\
 en_VU.txt en_WS.txt en_ZA.txt en_ZM.txt en_ZW.txt\
 eo.txt es.txt es_419.txt es_AR.txt es_BO.txt\
 es_CL.txt es_CO.txt es_CR.txt es_CU.txt es_DO.txt\
 es_EA.txt es_EC.txt es_ES.txt es_GQ.txt es_GT.txt\
 es_HN.txt es_IC.txt es_MX.txt es_NI.txt es_PA.txt\
 es_PE.txt es_PH.txt es_PR.txt es_PY.txt es_SV.txt\
 es_US.txt es_UY.txt es_VE.txt et.txt et_EE.txt\
 eu.txt eu_ES.txt ewo.txt ewo_CM.txt fa.txt\
 fa_AF.txt fa_IR.txt ff.txt ff_SN.txt fi.txt\
 fi_FI.txt fil.txt fil_PH.txt fo.txt fo_FO.txt\
 fr.txt fr_BE.txt fr_BF.txt fr_BI.txt fr_BJ.txt\
 fr_BL.txt fr_CA.txt fr_CD.txt fr_CF.txt fr_CG.txt\
 fr_CH.txt fr_CI.txt fr_CM.txt fr_DJ.txt fr_DZ.txt\
 fr_FR.txt fr_GA.txt fr_GF.txt fr_GN.txt fr_GP.txt\
 fr_GQ.txt fr_HT.txt fr_KM.txt fr_LU.txt fr_MA.txt\
 fr_MC.txt fr_MF.txt fr_MG.txt fr_ML.txt fr_MQ.txt\
 fr_MR.txt fr_MU.txt fr_NC.txt fr_NE.txt fr_PF.txt\
 fr_RE.txt fr_RW.txt fr_SC.txt fr_SN.txt fr_SY.txt\
 fr_TD.txt fr_TG.txt fr_TN.txt fr_VU.txt fr_YT.txt\
 ga.txt ga_IE.txt gl.txt gl_ES.txt gsw.txt\
 gsw_CH.txt gu.txt gu_IN.txt guz.txt guz_KE.txt\
 gv.txt gv_GB.txt ha.txt ha_Latn.txt ha_Latn_GH.txt\
 ha_Latn_NE.txt ha_Latn_NG.txt haw.txt haw_US.txt he.txt\
 he_IL.txt hi.txt hi_IN.txt hr.txt hr_BA.txt\
 hr_HR.txt hu.txt hu_HU.txt hy.txt hy_AM.txt\
 id.txt id_ID.txt ig.txt ig_NG.txt ii.txt\
 ii_CN.txt is.txt is_IS.txt it.txt it_CH.txt\
 it_IT.txt it_SM.txt ja.txt ja_JP.txt jgo.txt\
 jgo_CM.txt jmc.txt jmc_TZ.txt ka.txt ka_GE.txt\
 kab.txt kab_DZ.txt kam.txt kam_KE.txt kde.txt\
 kde_TZ.txt kea.txt kea_CV.txt khq.txt khq_ML.txt\
 ki.txt ki_KE.txt kk.txt kk_Cyrl.txt kk_Cyrl_KZ.txt\
 kl.txt kl_GL.txt kln.txt kln_KE.txt km.txt\
 km_KH.txt kn.txt kn_IN.txt ko.txt ko_KP.txt\
 ko_KR.txt kok.txt kok_IN.txt ks.txt ks_Arab.txt\
 ks_Arab_IN.txt ksb.txt ksb_TZ.txt ksf.txt ksf_CM.txt\
 kw.txt kw_GB.txt lag.txt lag_TZ.txt lg.txt\
 lg_UG.txt ln.txt ln_AO.txt ln_CD.txt ln_CF.txt\
 ln_CG.txt lo.txt lo_LA.txt lt.txt lt_LT.txt\
 lu.txt lu_CD.txt luo.txt luo_KE.txt luy.txt\
 luy_KE.txt lv.txt lv_LV.txt mas.txt mas_KE.txt\
 mas_TZ.txt mer.txt mer_KE.txt mfe.txt mfe_MU.txt\
 mg.txt mg_MG.txt mgh.txt mgh_MZ.txt mgo.txt\
 mgo_CM.txt mk.txt mk_MK.txt ml.txt ml_IN.txt\
 mn.txt mn_Cyrl.txt mn_Cyrl_MN.txt mr.txt mr_IN.txt\
 ms.txt ms_Latn.txt ms_Latn_BN.txt ms_Latn_MY.txt ms_Latn_SG.txt\
 mt.txt mt_MT.txt mua.txt mua_CM.txt my.txt\
 my_MM.txt naq.txt naq_NA.txt nb.txt nb_NO.txt\
 nd.txt nd_ZW.txt ne.txt ne_IN.txt ne_NP.txt\
 nl.txt nl_AW.txt nl_BE.txt nl_CW.txt nl_NL.txt\
 nl_SR.txt nl_SX.txt nmg.txt nmg_CM.txt nn.txt\
 nn_NO.txt nus.txt nus_SD.txt nyn.txt nyn_UG.txt\
 om.txt om_ET.txt om_KE.txt or.txt or_IN.txt\
 pa.txt pa_Arab.txt pa_Arab_PK.txt pa_Guru.txt pa_Guru_IN.txt\
 pl.txt pl_PL.txt ps.txt ps_AF.txt pt.txt\
 pt_AO.txt pt_BR.txt pt_CV.txt pt_GW.txt pt_MO.txt\
 pt_MZ.txt pt_PT.txt pt_ST.txt pt_TL.txt rm.txt\
 rm_CH.txt rn.txt rn_BI.txt ro.txt ro_MD.txt\
 ro_RO.txt rof.txt rof_TZ.txt ru.txt ru_BY.txt\
 ru_KG.txt ru_KZ.txt ru_MD.txt ru_RU.txt ru_UA.txt\
 rw.txt rw_RW.txt rwk.txt rwk_TZ.txt saq.txt\
 saq_KE.txt sbp.txt sbp_TZ.txt seh.txt seh_MZ.txt\
 ses.txt ses_ML.txt sg.txt sg_CF.txt shi.txt\
 shi_Latn.txt shi_Latn_MA.txt shi_Tfng.txt shi_Tfng_MA.txt si.txt\
 si_LK.txt sk.txt sk_SK.txt sl.txt sl_SI.txt\
 sn.txt sn_ZW.txt so.txt so_DJ.txt so_ET.txt\
 so_KE.txt so_SO.txt sq.txt sq_AL.txt sq_MK.txt\
 sr.txt sr_Cyrl.txt sr_Cyrl_BA.txt sr_Cyrl_ME.txt sr_Cyrl_RS.txt\
 sr_Latn.txt sr_Latn_BA.txt sr_Latn_ME.txt sr_Latn_RS.txt sv.txt\
 sv_AX.txt sv_FI.txt sv_SE.txt sw.txt sw_KE.txt\
 sw_TZ.txt sw_UG.txt swc.txt swc_CD.txt ta.txt\
 ta_IN.txt ta_LK.txt ta_MY.txt ta_SG.txt te.txt\
 te_IN.txt teo.txt teo_KE.txt teo_UG.txt th.txt\
 th_TH.txt ti.txt ti_ER.txt ti_ET.txt to.txt\
 to_TO.txt tr.txt tr_CY.txt tr_TR.txt twq.txt\
 twq_NE.txt tzm.txt tzm_Latn.txt tzm_Latn_MA.txt uk.txt\
 uk_UA.txt ur.txt ur_IN.txt ur_PK.txt uz.txt\
 uz_Arab.txt uz_Arab_AF.txt uz_Cyrl.txt uz_Cyrl_UZ.txt uz_Latn.txt\
 uz_Latn_UZ.txt vai.txt vai_Latn.txt vai_Latn_LR.txt vai_Vaii.txt\
 vai_Vaii_LR.txt vi.txt vi_VN.txt vun.txt vun_TZ.txt\
 xog.txt xog_UG.txt yav.txt yav_CM.txt yo.txt\
 yo_NG.txt zh.txt zh_Hans.txt zh_Hans_CN.txt zh_Hans_HK.txt\
 zh_Hans_MO.txt zh_Hans_SG.txt zh_Hant.txt zh_Hant_HK.txt zh_Hant_MO.txt\
 zh_Hant_TW.txt zu.txt zu_ZA.txt

