# Copyright (C) 2011 The Libphonenumber Authors

# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at

# http://www.apache.org/licenses/LICENSE-2.0

# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Generated from:
# http://en.wikipedia.org/wiki/+94 [437344950]

9411|Colombo
9421|Jaffna
9423|Mannar
9424|Vavuniya
9425|Anuradhapura
9426|Trincomalee
9427|Polonnaruwa
9431|Negombo, Gampaha
9432|Chilaw, Puttalam
9433|Gampaha
9434|Kalutara
9435|Kegalle
9436|Avissawella, Colombo
9437|Kurunegala
9438|Panadura, Kalutara
9441|Matara
9445|Ratnapura
9447|Hambantota
9451|Hatton, Nuwara Eliya
9452|Nuwara Eliya
9454|Nawalapitiya, Kandy
9455|Badulla
9457|Bandarawela, Badulla
9463|Ampara
9465|Batticaloa
9466|Matale
9467|Kalmunai, Ampara
9481|Kandy
9491|Galle
