wallo 2 yıl önce
ebeveyn
işleme
664c816790
36 değiştirilmiş dosya ile 158041 ekleme ve 257 silme
  1. 41
    0
      app/Enums/ContactType.php
  2. 4
    6
      app/Filament/Company/Pages/Setting/CompanyProfile.php
  3. 98
    0
      app/Filament/Company/Resources/Core/DepartmentResource.php
  4. 16
    0
      app/Filament/Company/Resources/Core/DepartmentResource/Pages/CreateDepartment.php
  5. 24
    0
      app/Filament/Company/Resources/Core/DepartmentResource/Pages/EditDepartment.php
  6. 19
    0
      app/Filament/Company/Resources/Core/DepartmentResource/Pages/ListDepartments.php
  7. 66
    5
      app/Filament/Company/Resources/Setting/CurrencyResource.php
  8. 119
    0
      app/Helpers/City.php
  9. 294
    0
      app/Helpers/Country.php
  10. 123
    0
      app/Helpers/LocationDataLoader.php
  11. 131
    0
      app/Helpers/State.php
  12. 46
    0
      app/Helpers/helpers.php
  13. 2
    2
      app/Listeners/ConfigureCompanyDefault.php
  14. 5
    2
      app/Listeners/CreateCompanyDefaults.php
  15. 34
    0
      app/Listeners/CreateEmployeeContact.php
  16. 85
    0
      app/Models/Common/Contact.php
  17. 12
    0
      app/Models/Company.php
  18. 72
    0
      app/Models/Core/Department.php
  19. 62
    0
      app/Models/Employeeship.php
  20. 60
    41
      app/Models/Setting/CompanyProfile.php
  21. 7
    0
      app/Models/User.php
  22. 0
    1
      app/Providers/FilamentCompaniesServiceProvider.php
  23. 18
    0
      app/Traits/ChecksForeignKeyConstraints.php
  24. 7
    2
      composer.json
  25. 588
    192
      composer.lock
  26. 25
    0
      database/factories/Common/ContactFactory.php
  27. 23
    0
      database/factories/Core/DepartmentFactory.php
  28. 0
    1
      database/factories/Setting/CompanyProfileFactory.php
  29. 1
    1
      database/migrations/2023_09_14_034800_create_company_profiles_table.php
  30. 36
    0
      database/migrations/2023_09_19_000500_create_departments_table.php
  31. 50
    0
      database/migrations/2023_09_19_050544_create_contacts_table.php
  32. 73
    0
      database/migrations/2023_09_19_065547_modify_company_user_table.php
  33. 10
    4
      database/seeders/DatabaseSeeder.php
  34. 150554
    0
      resources/data/cities.csv
  35. 251
    0
      resources/data/countries.csv
  36. 5085
    0
      resources/data/states.csv

+ 41
- 0
app/Enums/ContactType.php Dosyayı Görüntüle

@@ -0,0 +1,41 @@
1
+<?php
2
+
3
+namespace App\Enums;
4
+
5
+use Filament\Support\Colors\Color;
6
+use Filament\Support\Contracts\HasColor;
7
+use Filament\Support\Contracts\HasIcon;
8
+use Filament\Support\Contracts\HasLabel;
9
+
10
+enum ContactType: string implements HasLabel, HasColor, HasIcon
11
+{
12
+    case Employee = 'employee';
13
+    case Customer = 'customer';
14
+    case Vendor = 'vendor';
15
+    case Supplier = 'supplier';
16
+
17
+    public function getLabel(): ?string
18
+    {
19
+        return $this->name;
20
+    }
21
+
22
+    public function getColor(): string|array|null
23
+    {
24
+        return match ($this) {
25
+            self::Employee => Color::Green,
26
+            self::Customer => Color::Blue,
27
+            self::Vendor => Color::Orange,
28
+            self::Supplier => Color::Purple,
29
+        };
30
+    }
31
+
32
+    public function getIcon(): ?string
33
+    {
34
+        return match ($this) {
35
+            self::Employee => 'heroicon-o-user-group',
36
+            self::Customer => 'heroicon-o-user',
37
+            self::Vendor => 'heroicon-o-shopping-bag',
38
+            self::Supplier => 'heroicon-o-truck',
39
+        };
40
+    }
41
+}

+ 4
- 6
app/Filament/Company/Pages/Setting/CompanyProfile.php Dosyayı Görüntüle

@@ -3,8 +3,6 @@
3 3
 namespace App\Filament\Company\Pages\Setting;
4 4
 
5 5
 use App\Enums\EntityType;
6
-use App\Events\CompanyDefaultUpdated;
7
-use App\Models\Setting\CompanyDefault as CompanyDefaultModel;
8 6
 use Filament\Actions\Action;
9 7
 use Filament\Actions\ActionGroup;
10 8
 use Filament\Forms\Components\Component;
@@ -191,21 +189,21 @@ class CompanyProfile extends Page
191 189
                 Select::make('state')
192 190
                     ->label('State / Province')
193 191
                     ->searchable()
194
-                    ->native(false)
195 192
                     ->options(static fn (Get $get) => CompanyProfileModel::getStateOptions($get('country')))
196 193
                     ->nullable(),
197 194
                 Select::make('timezone')
198 195
                     ->label('Timezone')
199
-                    ->native(false)
196
+                    ->searchable()
200 197
                     ->options(static fn (Get $get) => CompanyProfileModel::getTimezoneOptions($get('country')))
201 198
                     ->nullable(),
202 199
                 TextInput::make('address')
203 200
                     ->label('Street Address')
204 201
                     ->maxLength(255)
205 202
                     ->nullable(),
206
-                TextInput::make('city')
203
+                Select::make('city_id')
207 204
                     ->label('City / Town')
208
-                    ->maxLength(255)
205
+                    ->searchable()
206
+                    ->options(static fn (Get $get) => CompanyProfileModel::getCityOptions($get('country'), $get('state')))
209 207
                     ->nullable(),
210 208
                 TextInput::make('zip_code')
211 209
                     ->label('Zip Code')

+ 98
- 0
app/Filament/Company/Resources/Core/DepartmentResource.php Dosyayı Görüntüle

@@ -0,0 +1,98 @@
1
+<?php
2
+
3
+namespace App\Filament\Company\Resources\Core;
4
+
5
+use App\Filament\Company\Resources\Core\DepartmentResource\Pages;
6
+use App\Models\Core\Department;
7
+use Filament\Forms;
8
+use Filament\Forms\Form;
9
+use Filament\Resources\Resource;
10
+use Filament\Tables;
11
+use Filament\Tables\Table;
12
+
13
+class DepartmentResource extends Resource
14
+{
15
+    protected static ?string $model = Department::class;
16
+
17
+    protected static ?string $navigationIcon = 'heroicon-o-square-3-stack-3d';
18
+
19
+    protected static ?string $navigationGroup = 'HR';
20
+
21
+    protected static ?string $slug = 'hr/departments';
22
+
23
+    public static function form(Form $form): Form
24
+    {
25
+        return $form
26
+            ->schema([
27
+                Forms\Components\Section::make('General')
28
+                    ->schema([
29
+                        Forms\Components\TextInput::make('name')
30
+                            ->autofocus()
31
+                            ->required()
32
+                            ->maxLength(100),
33
+                        Forms\Components\Select::make('manager_id')
34
+                            ->label('Manager')
35
+                            ->relationship('manager', 'name')
36
+                            ->searchable()
37
+                            ->preload()
38
+                            ->placeholder('Select a manager')
39
+                            ->nullable(),
40
+                        Forms\Components\Group::make()
41
+                            ->schema([
42
+                                Forms\Components\Select::make('parent_id')
43
+                                    ->label('Parent Department')
44
+                                    ->relationship('parent', 'name')
45
+                                    ->preload()
46
+                                    ->searchable()
47
+                                    ->nullable(),
48
+                                Forms\Components\Textarea::make('description')
49
+                                    ->label('Description')
50
+                                    ->autosize()
51
+                                    ->nullable(),
52
+                        ])->columns(1),
53
+                    ])->columns(),
54
+            ]);
55
+    }
56
+
57
+    public static function table(Table $table): Table
58
+    {
59
+        return $table
60
+            ->columns([
61
+                Tables\Columns\TextColumn::make('name')
62
+                    ->weight('semibold')
63
+                    ->searchable()
64
+                    ->sortable(),
65
+                Tables\Columns\TextColumn::make('manager.name')
66
+                    ->label('Manager')
67
+                    ->searchable()
68
+                    ->sortable(),
69
+            ])
70
+            ->filters([
71
+                //
72
+            ])
73
+            ->actions([
74
+                Tables\Actions\EditAction::make(),
75
+            ])
76
+            ->bulkActions([
77
+                Tables\Actions\BulkActionGroup::make([
78
+                    Tables\Actions\DeleteBulkAction::make(),
79
+                ]),
80
+            ]);
81
+    }
82
+
83
+    public static function getRelations(): array
84
+    {
85
+        return [
86
+            //
87
+        ];
88
+    }
89
+
90
+    public static function getPages(): array
91
+    {
92
+        return [
93
+            'index' => Pages\ListDepartments::route('/'),
94
+            'create' => Pages\CreateDepartment::route('/create'),
95
+            'edit' => Pages\EditDepartment::route('/{record}/edit'),
96
+        ];
97
+    }
98
+}

+ 16
- 0
app/Filament/Company/Resources/Core/DepartmentResource/Pages/CreateDepartment.php Dosyayı Görüntüle

@@ -0,0 +1,16 @@
1
+<?php
2
+
3
+namespace App\Filament\Company\Resources\Core\DepartmentResource\Pages;
4
+
5
+use App\Filament\Company\Resources\Core\DepartmentResource;
6
+use Filament\Resources\Pages\CreateRecord;
7
+
8
+class CreateDepartment extends CreateRecord
9
+{
10
+    protected static string $resource = DepartmentResource::class;
11
+
12
+    protected function getRedirectUrl(): string
13
+    {
14
+        return $this->previousUrl;
15
+    }
16
+}

+ 24
- 0
app/Filament/Company/Resources/Core/DepartmentResource/Pages/EditDepartment.php Dosyayı Görüntüle

@@ -0,0 +1,24 @@
1
+<?php
2
+
3
+namespace App\Filament\Company\Resources\Core\DepartmentResource\Pages;
4
+
5
+use App\Filament\Company\Resources\Core\DepartmentResource;
6
+use Filament\Actions;
7
+use Filament\Resources\Pages\EditRecord;
8
+
9
+class EditDepartment extends EditRecord
10
+{
11
+    protected static string $resource = DepartmentResource::class;
12
+
13
+    protected function getHeaderActions(): array
14
+    {
15
+        return [
16
+            Actions\DeleteAction::make(),
17
+        ];
18
+    }
19
+
20
+    protected function getRedirectUrl(): ?string
21
+    {
22
+        return $this->previousUrl;
23
+    }
24
+}

+ 19
- 0
app/Filament/Company/Resources/Core/DepartmentResource/Pages/ListDepartments.php Dosyayı Görüntüle

@@ -0,0 +1,19 @@
1
+<?php
2
+
3
+namespace App\Filament\Company\Resources\Core\DepartmentResource\Pages;
4
+
5
+use App\Filament\Company\Resources\Core\DepartmentResource;
6
+use Filament\Actions;
7
+use Filament\Resources\Pages\ListRecords;
8
+
9
+class ListDepartments extends ListRecords
10
+{
11
+    protected static string $resource = DepartmentResource::class;
12
+
13
+    protected function getHeaderActions(): array
14
+    {
15
+        return [
16
+            Actions\CreateAction::make(),
17
+        ];
18
+    }
19
+}

+ 66
- 5
app/Filament/Company/Resources/Setting/CurrencyResource.php Dosyayı Görüntüle

@@ -3,22 +3,24 @@
3 3
 namespace App\Filament\Company\Resources\Setting;
4 4
 
5 5
 use App\Filament\Company\Resources\Setting\CurrencyResource\Pages;
6
-use App\Filament\Company\Resources\Setting\CurrencyResource\RelationManagers;
6
+use App\Models\Banking\Account;
7 7
 use App\Models\Setting\Currency;
8 8
 use App\Services\CurrencyService;
9
+use App\Traits\ChecksForeignKeyConstraints;
9 10
 use Filament\Forms;
10 11
 use Filament\Forms\Form;
12
+use Filament\Notifications\Notification;
11 13
 use Filament\Resources\Resource;
12 14
 use Filament\Support\Colors\Color;
13 15
 use Filament\Tables;
14 16
 use Filament\Tables\Table;
15
-use Illuminate\Database\Eloquent\Builder;
16
-use Illuminate\Database\Eloquent\SoftDeletingScope;
17
-use Wallo\FilamentSelectify\Components\ButtonGroup;
17
+use Illuminate\Database\Eloquent\Collection;
18 18
 use Wallo\FilamentSelectify\Components\ToggleButton;
19 19
 
20 20
 class CurrencyResource extends Resource
21 21
 {
22
+    use ChecksForeignKeyConstraints;
23
+
22 24
     protected static ?string $model = Currency::class;
23 25
 
24 26
     protected static ?string $navigationIcon = 'heroicon-o-currency-dollar';
@@ -160,10 +162,69 @@ class CurrencyResource extends Resource
160 162
             ])
161 163
             ->actions([
162 164
                 Tables\Actions\EditAction::make(),
165
+                Tables\Actions\DeleteAction::make()
166
+                    ->before(static function (Tables\Actions\DeleteAction $action, Currency $record) {
167
+                        $defaultCurrency = $record->enabled;
168
+                        $modelsToCheck = [
169
+                            Account::class,
170
+                        ];
171
+
172
+                        $isUsed = self::isForeignKeyUsed('currency_code', $record->code, $modelsToCheck);
173
+
174
+                        if ($defaultCurrency) {
175
+                            Notification::make()
176
+                                ->danger()
177
+                                ->title('Action Denied')
178
+                                ->body(__('The :name currency is currently set as the default currency and cannot be deleted. Please set a different currency as your default before attempting to delete this one.', ['name' => $record->name]))
179
+                                ->persistent()
180
+                                ->send();
181
+
182
+                            $action->cancel();
183
+                        } elseif ($isUsed) {
184
+                            Notification::make()
185
+                                ->danger()
186
+                                ->title('Action Denied')
187
+                                ->body(__('The :name currency is currently in use by one or more accounts and cannot be deleted. Please remove this currency from all accounts before attempting to delete it.', ['name' => $record->name]))
188
+                                ->persistent()
189
+                                ->send();
190
+
191
+                            $action->cancel();
192
+                        }
193
+                    }),
163 194
             ])
164 195
             ->bulkActions([
165 196
                 Tables\Actions\BulkActionGroup::make([
166
-                    Tables\Actions\DeleteBulkAction::make(),
197
+                    Tables\Actions\DeleteBulkAction::make()
198
+                    ->before(static function (Tables\Actions\DeleteBulkAction $action, Collection $records) {
199
+                        foreach ($records as $record) {
200
+                            $defaultCurrency = $record->enabled;
201
+                            $modelsToCheck = [
202
+                                Account::class,
203
+                            ];
204
+
205
+                            $isUsed = self::isForeignKeyUsed('currency_code', $record->code, $modelsToCheck);
206
+
207
+                            if ($defaultCurrency) {
208
+                                Notification::make()
209
+                                    ->danger()
210
+                                    ->title('Action Denied')
211
+                                    ->body(__('The :name currency is currently set as the default currency and cannot be deleted. Please set a different currency as your default before attempting to delete this one.', ['name' => $record->name]))
212
+                                    ->persistent()
213
+                                    ->send();
214
+
215
+                                $action->cancel();
216
+                            } elseif ($isUsed) {
217
+                                Notification::make()
218
+                                    ->danger()
219
+                                    ->title('Action Denied')
220
+                                    ->body(__('The :name currency is currently in use by one or more accounts and cannot be deleted. Please remove this currency from all accounts before attempting to delete it.', ['name' => $record->name]))
221
+                                    ->persistent()
222
+                                    ->send();
223
+
224
+                                $action->cancel();
225
+                            }
226
+                        }
227
+                    }),
167 228
                 ]),
168 229
             ])
169 230
             ->emptyStateActions([

+ 119
- 0
app/Helpers/City.php Dosyayı Görüntüle

@@ -0,0 +1,119 @@
1
+<?php
2
+
3
+namespace App\Helpers;
4
+
5
+use ArrayAccess;
6
+
7
+class City implements ArrayAccess
8
+{
9
+    protected array $data;
10
+
11
+    public function __construct($data)
12
+    {
13
+        $this->setData($data);
14
+    }
15
+
16
+    /**
17
+     * Set the city data array.
18
+     */
19
+    public function setData($data): static
20
+    {
21
+        $this->data = $data;
22
+
23
+        return $this;
24
+    }
25
+
26
+    /**
27
+     * Get the city data array.
28
+     */
29
+    public function getData(): ?array
30
+    {
31
+        return $this->data;
32
+    }
33
+
34
+    /**
35
+     * Set a single city data array value.
36
+     */
37
+    public function set($key, $value): static
38
+    {
39
+        $this->data[$key] = $value;
40
+
41
+        return $this;
42
+    }
43
+
44
+    /**
45
+     * Get a single city data array value.
46
+     */
47
+    public function get($key): mixed
48
+    {
49
+        return $this->data[$key] ?? null;
50
+    }
51
+
52
+    /**
53
+     * Check if an offset exists in the data array.
54
+     */
55
+    public function offsetExists($offset): bool
56
+    {
57
+        return isset($this->data[$offset]);
58
+    }
59
+
60
+    /**
61
+     * Get an offset from the data array.
62
+     */
63
+    public function offsetGet($offset): mixed
64
+    {
65
+        return $this->data[$offset] ?? null;
66
+    }
67
+
68
+    /**
69
+     * Set an offset in the data array.
70
+     */
71
+    public function offsetSet($offset, $value): void
72
+    {
73
+        if ($offset === null) {
74
+            $this->data[] = $value;
75
+        } else {
76
+            $this->data[$offset] = $value;
77
+        }
78
+    }
79
+
80
+    /**
81
+     * Unset an offset in the data array.
82
+     */
83
+    public function offsetUnset($offset): void
84
+    {
85
+        unset($this->data[$offset]);
86
+    }
87
+
88
+    /**
89
+     * Get the city ID.
90
+     */
91
+    public function getId(): ?int
92
+    {
93
+        return $this->get('id');
94
+    }
95
+
96
+    /**
97
+     * Get the city name.
98
+     */
99
+    public function getName(): ?string
100
+    {
101
+        return $this->get('name');
102
+    }
103
+
104
+    /**
105
+     * Get the city latitude.
106
+     */
107
+    public function getLatitude(): ?string
108
+    {
109
+        return $this->get('latitude');
110
+    }
111
+
112
+    /**
113
+     * Get the city longitude.
114
+     */
115
+    public function getLongitude(): ?string
116
+    {
117
+        return $this->get('longitude');
118
+    }
119
+}

+ 294
- 0
app/Helpers/Country.php Dosyayı Görüntüle

@@ -0,0 +1,294 @@
1
+<?php
2
+
3
+namespace App\Helpers;
4
+
5
+use ArrayAccess;
6
+use Illuminate\Support\Collection;
7
+
8
+class Country implements ArrayAccess
9
+{
10
+    /**
11
+     * The country data array.
12
+     */
13
+    protected array $data;
14
+
15
+    /**
16
+     * Create a new country instance.
17
+     */
18
+    public function __construct($data)
19
+    {
20
+        $this->setData($data);
21
+    }
22
+
23
+    /**
24
+     * Set the country data array.
25
+     */
26
+    public function setData($data): static
27
+    {
28
+        if (is_array($data)) {
29
+            $this->data = $data;
30
+        } elseif ($data instanceof self) {
31
+            $this->data = $data->getData();
32
+        } else {
33
+            $this->data = [];
34
+        }
35
+
36
+        return $this;
37
+    }
38
+
39
+    /**
40
+     * Get the country data array.
41
+     */
42
+    public function getData(): ?array
43
+    {
44
+        return $this->data;
45
+    }
46
+
47
+    /**
48
+     * Set a single country data array value.
49
+     */
50
+    public function set($key, $value): static
51
+    {
52
+        $this->data[$key] = $value;
53
+
54
+        return $this;
55
+    }
56
+
57
+    /**
58
+     * Get a single country data array value.
59
+     */
60
+    public function get($key): mixed
61
+    {
62
+        return $this->data[$key] ?? null;
63
+    }
64
+
65
+    /**
66
+     * Check if an offset exists in the data array.
67
+     */
68
+    public function offsetExists($offset): bool
69
+    {
70
+        return isset($this->data[$offset]);
71
+    }
72
+
73
+    /**
74
+     * Get an offset from the data array.
75
+     */
76
+    public function offsetGet($offset): mixed
77
+    {
78
+        return $this->data[$offset] ?? null;
79
+    }
80
+
81
+    /**
82
+     * Set an offset in the data array.
83
+     */
84
+    public function offsetSet($offset, $value): void
85
+    {
86
+        if ($offset === null) {
87
+            $this->data[] = $value;
88
+        } else {
89
+            $this->data[$offset] = $value;
90
+        }
91
+    }
92
+
93
+    /**
94
+     * Unset an offset in the data array.
95
+     */
96
+    public function offsetUnset($offset): void
97
+    {
98
+        unset($this->data[$offset]);
99
+    }
100
+
101
+    /**
102
+     * Get the country id.
103
+     */
104
+    public function getId(): ?int
105
+    {
106
+        return $this->get('id');
107
+    }
108
+
109
+    /**
110
+     * Get the country name.
111
+     */
112
+    public function getName(): ?string
113
+    {
114
+        return $this->get('name');
115
+    }
116
+
117
+    /**
118
+     * Get the country iso2.
119
+     */
120
+    public function getIso2(): ?string
121
+    {
122
+        return $this->get('iso2');
123
+    }
124
+
125
+    /**
126
+     * Get the country iso3.
127
+     */
128
+    public function getIso3(): ?string
129
+    {
130
+        return $this->get('iso3');
131
+    }
132
+
133
+    /**
134
+     * Get the country numeric code.
135
+     */
136
+    public function getNumericCode(): ?string
137
+    {
138
+        return $this->get('numeric_code');
139
+    }
140
+
141
+    /**
142
+     * Get the country phone code.
143
+     */
144
+    public function getPhoneCode(): ?string
145
+    {
146
+        return $this->get('phone_code');
147
+    }
148
+
149
+    /**
150
+     * Get the country capital.
151
+     */
152
+    public function getCapital(): ?string
153
+    {
154
+        return $this->get('capital');
155
+    }
156
+
157
+    /**
158
+     * Get the country currency code.
159
+     */
160
+    public function getCurrency(): ?string
161
+    {
162
+        return $this->get('currency');
163
+    }
164
+
165
+    /**
166
+     * Get the country currency name.
167
+     */
168
+    public function getCurrencyName(): ?string
169
+    {
170
+        return $this->get('currency_name');
171
+    }
172
+
173
+    /**
174
+     * Get the country currency symbol.
175
+     */
176
+    public function getCurrencySymbol(): ?string
177
+    {
178
+        return $this->get('currency_symbol');
179
+    }
180
+
181
+    /**
182
+     * Get the country tld.
183
+     */
184
+    public function getTld(): ?string
185
+    {
186
+        return $this->get('tld');
187
+    }
188
+
189
+    /**
190
+     * Get the country native name.
191
+     */
192
+    public function getNative(): ?string
193
+    {
194
+        return $this->get('native');
195
+    }
196
+
197
+    /**
198
+     * Get the country region.
199
+     */
200
+    public function getRegion(): ?string
201
+    {
202
+        return $this->get('region');
203
+    }
204
+
205
+    /**
206
+     * Get the country region id.
207
+     */
208
+    public function getRegionId(): ?int
209
+    {
210
+        return $this->get('region_id');
211
+    }
212
+
213
+    /**
214
+     * Get the country subregion.
215
+     */
216
+    public function getSubregion(): ?string
217
+    {
218
+        return $this->get('subregion');
219
+    }
220
+
221
+    /**
222
+     * Get the country subregion id.
223
+     */
224
+    public function getSubregionId(): ?int
225
+    {
226
+        return $this->get('subregion_id');
227
+    }
228
+
229
+    /**
230
+     * Get the country nationality.
231
+     */
232
+    public function getNationality(): ?string
233
+    {
234
+        return $this->get('nationality');
235
+    }
236
+
237
+    /**
238
+     * Get the country timezones.
239
+     */
240
+    public function getTimezones(): Collection
241
+    {
242
+        return collect($this->get('timezones') ?? []);
243
+    }
244
+
245
+    /**
246
+     * Get the country translations.
247
+     */
248
+    public function getTranslations(): Collection
249
+    {
250
+        return collect($this->get('translations') ?? []);
251
+    }
252
+
253
+    /**
254
+     * Get the country latitude.
255
+     */
256
+    public function getLatitude(): ?string
257
+    {
258
+        return $this->get('latitude');
259
+    }
260
+
261
+    /**
262
+     * Get the country longitude.
263
+     */
264
+    public function getLongitude(): ?string
265
+    {
266
+        return $this->get('longitude');
267
+    }
268
+
269
+    /**
270
+     * Get the country flag emoji.
271
+     */
272
+    public function getEmoji(): ?string
273
+    {
274
+        return $this->get('emoji');
275
+    }
276
+
277
+    /**
278
+     * Get the country flag unicode.
279
+     */
280
+    public function getEmojiU(): ?string
281
+    {
282
+        return $this->get('emojiU');
283
+    }
284
+
285
+    /**
286
+     * Get the country states.
287
+     */
288
+    public function getStates(): ?array
289
+    {
290
+        $countryCode = $this->getIso2();
291
+
292
+        return LocationDataLoader::getAllStates($countryCode, false)->all();
293
+    }
294
+}

+ 123
- 0
app/Helpers/LocationDataLoader.php Dosyayı Görüntüle

@@ -0,0 +1,123 @@
1
+<?php
2
+
3
+namespace App\Helpers;
4
+
5
+use Illuminate\Support\Collection;
6
+use Illuminate\Support\Facades\Cache;
7
+use Illuminate\Support\Facades\Log;
8
+
9
+class LocationDataLoader
10
+{
11
+    protected static ?array $countries = null;
12
+    protected static ?array $states = null;
13
+    protected static ?array $cities = null;
14
+
15
+    public static function loadData(string $type): void
16
+    {
17
+        // Try to get data from cache first.
18
+        static::${$type} = Cache::remember("location_data_{$type}", now()->addMinutes(30), static function () use ($type) {
19
+            $csvPath = resource_path("data/{$type}.csv");
20
+            $data = [];
21
+
22
+            try {
23
+                $handle = fopen($csvPath, 'rb');
24
+
25
+                // Get the header of the CSV file
26
+                $header = fgetcsv($handle);
27
+
28
+                // Read each line of the CSV
29
+                while (($row = fgetcsv($handle)) !== false) {
30
+                    $data[] = array_combine($header, $row);
31
+                }
32
+
33
+                fclose($handle);
34
+                return $data;
35
+            } catch (\Exception $e) {
36
+                Log::error("CSV reading failed for {$type}: {$e->getMessage()}");
37
+                return [];
38
+            }
39
+        });
40
+    }
41
+
42
+    public static function getCountry($countryCode, $hydrate = true)
43
+    {
44
+        static::loadData('countries');
45
+        $countryCode = strtoupper($countryCode);
46
+        $country = collect(static::$countries)->firstWhere('iso2', $countryCode);
47
+
48
+        return $hydrate ? new Country($country) : $country;
49
+    }
50
+
51
+    public static function getAllCountries($hydrate = true): Collection
52
+    {
53
+        static::loadData('countries');
54
+        $countries = collect(static::$countries);
55
+
56
+        return $hydrate ? $countries->map(static fn ($country) => new Country($country)) : $countries;
57
+    }
58
+
59
+
60
+    public static function getState($countryCode, $stateCode, $hydrate = true)
61
+    {
62
+        static::loadData('states');
63
+        $countryCode = strtoupper($countryCode);
64
+        $stateCode = strtoupper($stateCode);
65
+
66
+        $state = collect(static::$states)->first(static function ($item) use ($countryCode, $stateCode) {
67
+            return $item['country_code'] === $countryCode && $item['state_code'] === $stateCode;
68
+        });
69
+
70
+        if ($state) {
71
+            return $hydrate ? new State($state) : $state;
72
+        }
73
+
74
+        return null;
75
+    }
76
+
77
+
78
+    public static function getAllStates($countryCode, $hydrate = true): Collection
79
+    {
80
+        static::loadData('states');
81
+        $countryCode = strtoupper($countryCode);
82
+        $states = collect(static::$states)->where('country_code', $countryCode);
83
+
84
+        if ($states->isEmpty()) {
85
+            return collect();
86
+        }
87
+
88
+        if ($hydrate) {
89
+            return $states->map(static fn ($state) => new State($state));
90
+        }
91
+
92
+        return $states;
93
+    }
94
+
95
+    public static function getCity($cityId, $hydrate = true)
96
+    {
97
+        static::loadData('cities');
98
+        $city = collect(static::$cities)->firstWhere('id', $cityId);
99
+
100
+        if ($city) {
101
+            return $hydrate ? new City($city) : $city;
102
+        }
103
+
104
+        return null;
105
+    }
106
+
107
+    public static function getAllCities($countryCode, $stateCode, $hydrate = true): Collection
108
+    {
109
+        static::loadData('cities');
110
+
111
+        // Filter cities based on country and state codes
112
+        $filteredCities = collect(static::$cities)
113
+            ->where('country_code', strtoupper($countryCode))
114
+            ->where('state_code', strtoupper($stateCode));
115
+
116
+        if ($filteredCities->isEmpty()) {
117
+            return collect();
118
+        }
119
+
120
+        return $hydrate ? $filteredCities->map(static fn ($city) => new City($city)) : $filteredCities;
121
+    }
122
+
123
+}

+ 131
- 0
app/Helpers/State.php Dosyayı Görüntüle

@@ -0,0 +1,131 @@
1
+<?php
2
+
3
+namespace App\Helpers;
4
+
5
+use ArrayAccess;
6
+
7
+class State implements ArrayAccess
8
+{
9
+    /**
10
+     * The state data array.
11
+     */
12
+    protected array $data;
13
+
14
+    /**
15
+     * Create a new state instance.
16
+     */
17
+    public function __construct($data)
18
+    {
19
+        $this->setData($data);
20
+    }
21
+
22
+    /**
23
+     * Set the state data array.
24
+     */
25
+    public function setData($data): static
26
+    {
27
+        $this->data = $data;
28
+
29
+        return $this;
30
+    }
31
+
32
+    /**
33
+     * Get the state data array.
34
+     */
35
+    public function getData(): ?array
36
+    {
37
+        return $this->data;
38
+    }
39
+
40
+    /**
41
+     * Set a single state data array value.
42
+     */
43
+    public function set($key, $value): static
44
+    {
45
+        $this->data[$key] = $value;
46
+
47
+        return $this;
48
+    }
49
+
50
+    /**
51
+     * Get a single state data array value.
52
+     */
53
+    public function get($key): mixed
54
+    {
55
+        return $this->data[$key] ?? null;
56
+    }
57
+
58
+    /**
59
+     * Check if an offset exists in the data array.
60
+     */
61
+    public function offsetExists($offset): bool
62
+    {
63
+        return isset($this->data[$offset]);
64
+    }
65
+
66
+    /**
67
+     * Get an offset from the data array.
68
+     */
69
+    public function offsetGet($offset): mixed
70
+    {
71
+        return $this->data[$offset] ?? null;
72
+    }
73
+
74
+    /**
75
+     * Set an offset in the data array.
76
+     */
77
+    public function offsetSet($offset, $value): void
78
+    {
79
+        if ($offset === null) {
80
+            $this->data[] = $value;
81
+        } else {
82
+            $this->data[$offset] = $value;
83
+        }
84
+    }
85
+
86
+    /**
87
+     * Unset an offset in the data array.
88
+     */
89
+    public function offsetUnset($offset): void
90
+    {
91
+        unset($this->data[$offset]);
92
+    }
93
+
94
+    public function getId(): ?int
95
+    {
96
+        return $this->get('id');
97
+    }
98
+
99
+    public function getName(): ?string
100
+    {
101
+        return $this->get('name');
102
+    }
103
+
104
+    public function getStateCode(): ?string
105
+    {
106
+        return $this->get('state_code');
107
+    }
108
+
109
+    public function getLatitude(): ?string
110
+    {
111
+        return $this->get('latitude');
112
+    }
113
+
114
+    public function getLongitude(): ?string
115
+    {
116
+        return $this->get('longitude');
117
+    }
118
+
119
+    public function getType(): ?string
120
+    {
121
+        return $this->get('type');
122
+    }
123
+
124
+    public function getCities(): ?array
125
+    {
126
+        $countryCode = $this->get('country_code');
127
+        $stateCode = $this->get('state_code');
128
+
129
+        return LocationDataLoader::getAllCities($countryCode, $stateCode, false)->all();
130
+    }
131
+}

+ 46
- 0
app/Helpers/helpers.php Dosyayı Görüntüle

@@ -0,0 +1,46 @@
1
+<?php
2
+
3
+use App\Helpers\LocationDataLoader;
4
+use Illuminate\Support\Collection;
5
+
6
+if (!function_exists('country')) {
7
+    function country($countryCode, $hydrate = true)
8
+    {
9
+        return LocationDataLoader::getCountry($countryCode, $hydrate);
10
+    }
11
+}
12
+
13
+if (!function_exists('countries')) {
14
+    function countries($hydrate = true): Collection
15
+    {
16
+        return LocationDataLoader::getAllCountries($hydrate);
17
+    }
18
+}
19
+
20
+if (!function_exists('state')) {
21
+    function state($stateCode, $hydrate = true)
22
+    {
23
+        return LocationDataLoader::getState($stateCode, $hydrate);
24
+    }
25
+}
26
+
27
+if (!function_exists('states')) {
28
+    function states($countryCode, $hydrate = true): Collection
29
+    {
30
+        return LocationDataLoader::getAllStates($countryCode, $hydrate);
31
+    }
32
+}
33
+
34
+if (!function_exists('city')) {
35
+    function city($cityId, $hydrate = true)
36
+    {
37
+        return LocationDataLoader::getCity($cityId, $hydrate);
38
+    }
39
+}
40
+
41
+if (!function_exists('cities')) {
42
+    function cities($countryCode, $stateCode, $hydrate = true): Collection
43
+    {
44
+        return LocationDataLoader::getAllCities($countryCode, $stateCode, $hydrate);
45
+    }
46
+}

+ 2
- 2
app/Listeners/ConfigureCompanyDefault.php Dosyayı Görüntüle

@@ -9,7 +9,6 @@ use App\Enums\PrimaryColor;
9 9
 use App\Enums\RecordsPerPage;
10 10
 use App\Enums\TableSortDirection;
11 11
 use App\Models\Company;
12
-use Filament\Actions\Action;
13 12
 use Filament\Actions\MountableAction;
14 13
 use Filament\Events\TenantSet;
15 14
 use Filament\Facades\Filament;
@@ -53,10 +52,11 @@ class ConfigureCompanyDefault
53 52
 
54 53
         FilamentColor::swap($defaultColor);
55 54
 
56
-        Filament::getDefaultPanel()
55
+        Filament::getPanel('company')
57 56
             ->font($defaultFont)
58 57
             ->brandName($company->name)
59 58
             ->topNavigation($hasTopNavigation)
59
+            ->sidebarCollapsibleOnDesktop(!$hasTopNavigation)
60 60
             ->maxContentWidth($maxContentWidth);
61 61
     }
62 62
 }

+ 5
- 2
app/Listeners/CreateCompanyDefaults.php Dosyayı Görüntüle

@@ -21,9 +21,12 @@ class CreateCompanyDefaults
21 21
     public function handle(CompanyGenerated $event): void
22 22
     {
23 23
         $company = $event->company;
24
-        $country = $event->country;
24
+        $countryCode = $event->country;
25 25
 
26
-        $currencyCode = $country ? country($country)->getCurrency()['iso_4217_code'] : 'USD';
26
+        $currencyId = country($countryCode)?->getCurrency();
27
+
28
+        $currencyData = currency($currencyId);
29
+        $currencyCode = $currencyData->getCurrency();
27 30
 
28 31
         $user = $company->owner;
29 32
 

+ 34
- 0
app/Listeners/CreateEmployeeContact.php Dosyayı Görüntüle

@@ -0,0 +1,34 @@
1
+<?php
2
+
3
+namespace App\Listeners;
4
+
5
+use App\Enums\ContactType;
6
+use Wallo\FilamentCompanies\Events\CompanyEmployeeAdded;
7
+
8
+class CreateEmployeeContact
9
+{
10
+    /**
11
+     * Create the event listener.
12
+     */
13
+    public function __construct()
14
+    {
15
+        //
16
+    }
17
+
18
+    /**
19
+     * Handle the event.
20
+     */
21
+    public function handle(CompanyEmployeeAdded $event): void
22
+    {
23
+        $company = $event->company;
24
+        $employee = $event->user;
25
+
26
+        $company->contacts()->create([
27
+            'type' => ContactType::Employee,
28
+            'name' => $employee->name,
29
+            'email' => $employee->email,
30
+            'created_by' => $company->owner->id,
31
+            'updated_by' => $company->owner->id,
32
+        ]);
33
+    }
34
+}

+ 85
- 0
app/Models/Common/Contact.php Dosyayı Görüntüle

@@ -0,0 +1,85 @@
1
+<?php
2
+
3
+namespace App\Models\Common;
4
+
5
+use App\Enums\ContactType;
6
+use App\Models\Core\Department;
7
+use App\Models\Setting\Currency;
8
+use App\Traits\Blamable;
9
+use App\Traits\CompanyOwned;
10
+use Database\Factories\Common\ContactFactory;
11
+use Illuminate\Database\Eloquent\Factories\Factory;
12
+use Illuminate\Database\Eloquent\Factories\HasFactory;
13
+use Illuminate\Database\Eloquent\Model;
14
+use Illuminate\Database\Eloquent\Relations\BelongsTo;
15
+use Illuminate\Database\Eloquent\Relations\HasMany;
16
+use Illuminate\Database\Eloquent\Relations\HasOne;
17
+use Wallo\FilamentCompanies\FilamentCompanies;
18
+
19
+class Contact extends Model
20
+{
21
+    use Blamable, CompanyOwned, HasFactory;
22
+
23
+    protected $table = 'contacts';
24
+
25
+    protected $fillable = [
26
+        'company_id',
27
+        'type',
28
+        'name',
29
+        'email',
30
+        'address',
31
+        'city_id',
32
+        'zip_code',
33
+        'state',
34
+        'country',
35
+        'timezone',
36
+        'language',
37
+        'contact_method',
38
+        'phone_number',
39
+        'tax_id',
40
+        'currency_code',
41
+        'website',
42
+        'reference',
43
+        'created_by',
44
+        'updated_by',
45
+    ];
46
+
47
+    protected $casts = [
48
+        'type' => ContactType::class,
49
+    ];
50
+
51
+    public function manager(): HasMany
52
+    {
53
+        return $this->hasMany(Department::class, 'manager_id');
54
+    }
55
+
56
+    public function company(): BelongsTo
57
+    {
58
+        return $this->belongsTo(FilamentCompanies::companyModel(), 'company_id');
59
+    }
60
+
61
+    public function currency(): BelongsTo
62
+    {
63
+        return $this->belongsTo(Currency::class, 'currency_code');
64
+    }
65
+
66
+    public function employeeship(): HasOne
67
+    {
68
+        return $this->hasOne(FilamentCompanies::employeeshipModel(), 'contact_id');
69
+    }
70
+
71
+    public function createdBy(): BelongsTo
72
+    {
73
+        return $this->belongsTo(FilamentCompanies::userModel(), 'created_by');
74
+    }
75
+
76
+    public function updatedBy(): BelongsTo
77
+    {
78
+        return $this->belongsTo(FilamentCompanies::userModel(), 'updated_by');
79
+    }
80
+
81
+    protected static function newFactory(): Factory
82
+    {
83
+        return ContactFactory::new();
84
+    }
85
+}

+ 12
- 0
app/Models/Company.php Dosyayı Görüntüle

@@ -4,6 +4,8 @@ namespace App\Models;
4 4
 
5 5
 use App\Enums\DocumentType;
6 6
 use App\Models\Banking\Account;
7
+use App\Models\Common\Contact;
8
+use App\Models\Core\Department;
7 9
 use App\Models\Setting\Appearance;
8 10
 use App\Models\Setting\Category;
9 11
 use App\Models\Setting\CompanyDefault;
@@ -75,6 +77,11 @@ class Company extends FilamentCompaniesCompany implements HasAvatar
75 77
         return $this->hasMany(Category::class, 'company_id');
76 78
     }
77 79
 
80
+    public function contacts(): HasMany
81
+    {
82
+        return $this->hasMany(Contact::class, 'company_id');
83
+    }
84
+
78 85
     public function currencies(): HasMany
79 86
     {
80 87
         return $this->hasMany(Currency::class, 'company_id');
@@ -97,6 +104,11 @@ class Company extends FilamentCompaniesCompany implements HasAvatar
97 104
             ->where('type', DocumentType::Invoice);
98 105
     }
99 106
 
107
+    public function departments(): HasMany
108
+    {
109
+        return $this->hasMany(Department::class, 'company_id');
110
+    }
111
+
100 112
     public function discounts(): HasMany
101 113
     {
102 114
         return $this->hasMany(Discount::class, 'company_id');

+ 72
- 0
app/Models/Core/Department.php Dosyayı Görüntüle

@@ -0,0 +1,72 @@
1
+<?php
2
+
3
+namespace App\Models\Core;
4
+
5
+use App\Models\Common\Contact;
6
+use App\Traits\Blamable;
7
+use App\Traits\CompanyOwned;
8
+use Database\Factories\Core\DepartmentFactory;
9
+use Illuminate\Database\Eloquent\Factories\Factory;
10
+use Illuminate\Database\Eloquent\Factories\HasFactory;
11
+use Illuminate\Database\Eloquent\Model;
12
+use Illuminate\Database\Eloquent\Relations\BelongsTo;
13
+use Illuminate\Database\Eloquent\Relations\HasMany;
14
+use Wallo\FilamentCompanies\FilamentCompanies;
15
+
16
+class Department extends Model
17
+{
18
+    use Blamable, CompanyOwned, HasFactory;
19
+
20
+    protected $table = 'departments';
21
+
22
+    protected $fillable = [
23
+        'company_id',
24
+        'manager_id',
25
+        'parent_id',
26
+        'name',
27
+        'description',
28
+        'created_by',
29
+        'updated_by',
30
+    ];
31
+
32
+    public function company(): BelongsTo
33
+    {
34
+        return $this->belongsTo(FilamentCompanies::companyModel(), 'company_id');
35
+    }
36
+
37
+    public function manager(): BelongsTo
38
+    {
39
+        return $this->belongsTo(Contact::class, 'manager_id');
40
+    }
41
+
42
+
43
+    public function parent(): BelongsTo
44
+    {
45
+        return $this->belongsTo(self::class, 'parent_id');
46
+    }
47
+
48
+    public function children(): HasMany
49
+    {
50
+        return $this->hasMany(self::class, 'parent_id');
51
+    }
52
+
53
+    public function employeeships(): HasMany
54
+    {
55
+        return $this->hasMany(FilamentCompanies::employeeshipModel(), 'department_id');
56
+    }
57
+
58
+    public function createdBy(): BelongsTo
59
+    {
60
+        return $this->belongsTo(FilamentCompanies::userModel(), 'created_by');
61
+    }
62
+
63
+    public function updatedBy(): BelongsTo
64
+    {
65
+        return $this->belongsTo(FilamentCompanies::userModel(), 'updated_by');
66
+    }
67
+
68
+    protected static function newFactory(): Factory
69
+    {
70
+        return DepartmentFactory::new();
71
+    }
72
+}

+ 62
- 0
app/Models/Employeeship.php Dosyayı Görüntüle

@@ -2,7 +2,12 @@
2 2
 
3 3
 namespace App\Models;
4 4
 
5
+use App\Models\Common\Contact;
6
+use App\Models\Core\Department;
7
+use Illuminate\Database\Eloquent\Relations\BelongsTo;
8
+use Illuminate\Database\Eloquent\Relations\HasMany;
5 9
 use Wallo\FilamentCompanies\Employeeship as FilamentCompaniesEmployeeship;
10
+use Wallo\FilamentCompanies\FilamentCompanies;
6 11
 
7 12
 class Employeeship extends FilamentCompaniesEmployeeship
8 13
 {
@@ -12,4 +17,61 @@ class Employeeship extends FilamentCompaniesEmployeeship
12 17
      * @var bool
13 18
      */
14 19
     public $incrementing = true;
20
+
21
+    protected $fillable = [
22
+        'company_id',
23
+        'user_id',
24
+        'contact_id',
25
+        'role',
26
+        'employment_type',
27
+        'hire_date',
28
+        'start_date',
29
+        'department_id',
30
+        'job_title',
31
+        'photo',
32
+        'date_of_birth',
33
+        'gender',
34
+        'marital_status',
35
+        'nationality',
36
+        'compensation_amount',
37
+        'compensation_type',
38
+        'compensation_frequency',
39
+        'bank_account_number',
40
+        'education_level',
41
+        'field_of_study',
42
+        'school_name',
43
+        'emergency_contact_name',
44
+        'emergency_contact_phone_number',
45
+        'emergency_contact_email',
46
+    ];
47
+
48
+    public function company(): BelongsTo
49
+    {
50
+        return $this->belongsTo(FilamentCompanies::companyModel(), 'company_id');
51
+    }
52
+
53
+    public function user(): BelongsTo
54
+    {
55
+        return $this->belongsTo(FilamentCompanies::userModel(), 'user_id');
56
+    }
57
+
58
+    public function contact(): BelongsTo
59
+    {
60
+        return $this->belongsTo(Contact::class, 'contact_id');
61
+    }
62
+
63
+    public function department(): BelongsTo
64
+    {
65
+        return $this->belongsTo(Department::class, 'department_id');
66
+    }
67
+
68
+    public function managedDepartments(): HasMany
69
+    {
70
+        return $this->hasMany(Department::class, 'manager_id');
71
+    }
72
+
73
+    public function getNameAttribute(): string
74
+    {
75
+        return $this->user->name;
76
+    }
15 77
 }

+ 60
- 41
app/Models/Setting/CompanyProfile.php Dosyayı Görüntüle

@@ -6,10 +6,14 @@ use App\Enums\EntityType;
6 6
 use App\Traits\Blamable;
7 7
 use App\Traits\CompanyOwned;
8 8
 use Database\Factories\Setting\CompanyProfileFactory;
9
+use DateTime;
10
+use DateTimeZone;
11
+use Exception;
9 12
 use Illuminate\Database\Eloquent\Factories\Factory;
10 13
 use Illuminate\Database\Eloquent\Factories\HasFactory;
11 14
 use Illuminate\Database\Eloquent\Model;
12 15
 use Illuminate\Database\Eloquent\Relations\BelongsTo;
16
+use Squire\Models\Timezone;
13 17
 use Wallo\FilamentCompanies\FilamentCompanies;
14 18
 
15 19
 class CompanyProfile extends Model
@@ -22,7 +26,7 @@ class CompanyProfile extends Model
22 26
         'company_id',
23 27
         'logo',
24 28
         'address',
25
-        'city',
29
+        'city_id',
26 30
         'zip_code',
27 31
         'state',
28 32
         'country',
@@ -58,83 +62,98 @@ class CompanyProfile extends Model
58 62
         return $this->belongsTo(FilamentCompanies::userModel(), 'updated_by');
59 63
     }
60 64
 
65
+
61 66
     public function getCountryName(): string
62 67
     {
63
-        return country($this->country)->getName();
68
+        return country($this->country)?->getName();
64 69
     }
65 70
 
66 71
     public static function getAvailableCountryCodes(): array
67 72
     {
68
-        $allCountries = countries();
69
-        $codes = [];
70
-
71
-        foreach ($allCountries as $code => $country) {
72
-            $codes[] = $code;
73
-        }
74
-
75
-        return $codes;
73
+        return countries()->pluck('iso2')->toArray();
76 74
     }
77 75
 
78 76
     public static function getAvailableCountryOptions(): array
79 77
     {
80
-        $allCountries = countries();
81
-        $countryData = [];
82
-
83
-        foreach ($allCountries as $code => $countryDetails) {
84
-            $name = $countryDetails['name'];
85
-            $emoji = $countryDetails['emoji'];
86
-            $countryData[$code] = $name . ' ' . $emoji;
87
-        }
78
+        $countries = countries();
88 79
 
89
-        return $countryData;
80
+        return $countries->mapWithKeys(static function ($country): array {
81
+            return [$country['iso2'] => $country['name'] . ' ' . $country['emoji']];
82
+        })->toArray();
90 83
     }
91 84
 
92 85
     public static function getAvailableCountryNames(): array
93 86
     {
94
-        $allCountries = countries();
95
-        $names = [];
96
-
97
-        foreach ($allCountries as $country) {
98
-            $names[] = $country['name'];
99
-        }
100
-
101
-        return $names;
87
+        return countries()->pluck('name')->toArray();
102 88
     }
103 89
 
104 90
     public static function getAvailableCountryEmojis(): array
105 91
     {
106
-        $allCountries = countries();
107
-        $emojis = [];
92
+        return countries()->pluck('emoji')->toArray();
93
+    }
108 94
 
109
-        foreach ($allCountries as $country) {
110
-            $emojis[] = $country['emoji'];
95
+    public static function getStateOptions(?string $countryCode = null): array
96
+    {
97
+        if (empty($countryCode)) {
98
+            return [];
111 99
         }
112 100
 
113
-        return $emojis;
101
+        $states = states($countryCode);
102
+
103
+        return $states->mapWithKeys(static function ($state): array {
104
+            return [$state['state_code'] => $state['name']];
105
+        })->toArray();
114 106
     }
115 107
 
116
-    public static function getStateOptions(string $countryCode): array
108
+    public static function getCityOptions(?string $countryCode = null, ?string $stateCode = null): array
117 109
     {
118
-        $states = country($countryCode)->getDivisions();
110
+        if (empty($countryCode) || empty($stateCode)) {
111
+            return [];
112
+        }
119 113
 
120
-        return collect($states)->mapWithKeys(static function ($state, $code): array {
121
-            return [$code => $state['name']];
114
+        $cities = cities($countryCode, $stateCode);
115
+
116
+        return $cities->mapWithKeys(static function ($city): array {
117
+            return [$city['id'] => $city['name']];
122 118
         })->toArray();
123 119
     }
124 120
 
125
-    public static function getTimezoneOptions(string $countryCode): array
121
+    public static function getTimezoneOptions(?string $countryCode = null): array
126 122
     {
127
-        $timezones = country($countryCode)->getTimezones();
123
+        if (empty($countryCode)) {
124
+            return [];
125
+        }
126
+
127
+        // convert countryCode to lowercase
128
+        $countryCode = strtolower($countryCode);
128 129
 
129
-        if ($timezones) {
130
-            return collect($timezones)->mapWithKeys(static function ($timezone): array {
131
-                return [$timezone => $timezone];
130
+        $timezones = Timezone::where('country_id', $countryCode)->get();
131
+
132
+        if (!$timezones->isEmpty()) {
133
+            return $timezones->mapWithKeys(static function ($timezone): array {
134
+                $localTime = self::getLocalTime($timezone->code);
135
+                $parts = explode('/', $timezone->code);
136
+                $cityName = str_replace('_', ' ', end($parts));
137
+                $offsetInSeconds = $timezone->getOffset(now());
138
+                $hours = floor($offsetInSeconds / 3600);
139
+                $minutes = floor(($offsetInSeconds / 60) % 60);
140
+                $gmtOffsetName = sprintf("UTC%+d:%02d", $hours, $minutes);
141
+
142
+                return [$timezone->code => $cityName . ' (' . $gmtOffsetName . ') ' . $localTime];
132 143
             })->toArray();
133 144
         }
134 145
 
135 146
         return [];
136 147
     }
137 148
 
149
+    /**
150
+     * @throws Exception
151
+     */
152
+    public static function getLocalTime(string $timezone): string
153
+    {
154
+        return (new DateTime('now', new DateTimeZone($timezone)))->format('g:i A');
155
+    }
156
+
138 157
     protected static function newFactory(): Factory
139 158
     {
140 159
         return CompanyProfileFactory::new();

+ 7
- 0
app/Models/User.php Dosyayı Görüntüle

@@ -2,6 +2,7 @@
2 2
 
3 3
 namespace App\Models;
4 4
 
5
+use App\Models\Core\Department;
5 6
 use Filament\Models\Contracts\FilamentUser;
6 7
 use Filament\Models\Contracts\HasAvatar;
7 8
 use Filament\Models\Contracts\HasDefaultTenant;
@@ -9,6 +10,7 @@ use Filament\Models\Contracts\HasTenants;
9 10
 use Filament\Panel;
10 11
 use Illuminate\Database\Eloquent\Factories\HasFactory;
11 12
 use Illuminate\Database\Eloquent\Model;
13
+use Illuminate\Database\Eloquent\Relations\HasMany;
12 14
 use Illuminate\Foundation\Auth\User as Authenticatable;
13 15
 use Illuminate\Notifications\Notifiable;
14 16
 use Illuminate\Support\Collection;
@@ -54,6 +56,11 @@ class User extends Authenticatable implements FilamentUser, HasAvatar, HasTenant
54 56
         return $this->profile_photo_url;
55 57
     }
56 58
 
59
+    public function managers(): HasMany
60
+    {
61
+        return $this->hasMany(Department::class, 'manager_id');
62
+    }
63
+
57 64
     /**
58 65
      * The attributes that are mass assignable.
59 66
      *

+ 0
- 1
app/Providers/FilamentCompaniesServiceProvider.php Dosyayı Görüntüle

@@ -81,7 +81,6 @@ class FilamentCompaniesServiceProvider extends PanelProvider
81 81
             ->colors([
82 82
                 'primary' => Color::Indigo,
83 83
             ])
84
-            ->sidebarCollapsibleOnDesktop()
85 84
             ->viteTheme('resources/css/filament/company/theme.css')
86 85
             ->tenant(Company::class)
87 86
             ->tenantProfile(CompanySettings::class)

+ 18
- 0
app/Traits/ChecksForeignKeyConstraints.php Dosyayı Görüntüle

@@ -0,0 +1,18 @@
1
+<?php
2
+
3
+namespace App\Traits;
4
+
5
+trait ChecksForeignKeyConstraints
6
+{
7
+    public static function isForeignKeyUsed($field, $value, array $models): bool
8
+    {
9
+        foreach ($models as $model) {
10
+            $modelInstance = resolve($model);
11
+            if ($modelInstance->where($field, $value)->exists()) {
12
+                return true;
13
+            }
14
+        }
15
+
16
+        return false;
17
+    }
18
+}

+ 7
- 2
composer.json Dosyayı Görüntüle

@@ -18,7 +18,9 @@
18 18
         "laravel/framework": "^10.10",
19 19
         "laravel/sanctum": "^3.2",
20 20
         "laravel/tinker": "^2.8",
21
-        "rinvex/countries": "^9.0"
21
+        "squirephp/countries-en": "^3.4",
22
+        "squirephp/regions-en": "^3.4",
23
+        "squirephp/timezones-en": "^3.4"
22 24
     },
23 25
     "require-dev": {
24 26
         "fakerphp/faker": "^1.9.1",
@@ -34,7 +36,10 @@
34 36
             "App\\": "app/",
35 37
             "Database\\Factories\\": "database/factories/",
36 38
             "Database\\Seeders\\": "database/seeders/"
37
-        }
39
+        },
40
+        "files": [
41
+            "app/Helpers/helpers.php"
42
+        ]
38 43
     },
39 44
     "autoload-dev": {
40 45
         "psr-4": {

+ 588
- 192
composer.lock
Dosya farkı çok büyük olduğundan ihmal edildi
Dosyayı Görüntüle


+ 25
- 0
database/factories/Common/ContactFactory.php Dosyayı Görüntüle

@@ -0,0 +1,25 @@
1
+<?php
2
+
3
+namespace Database\Factories\Common;
4
+
5
+use App\Models\Common\Contact;
6
+use Illuminate\Database\Eloquent\Factories\Factory;
7
+
8
+/**
9
+ * @extends Factory<Contact>
10
+ */
11
+class ContactFactory extends Factory
12
+{
13
+    /**
14
+     * Define the model's default state.
15
+     *
16
+     * @return array<string, mixed>
17
+     */
18
+    public function definition(): array
19
+    {
20
+        return [
21
+            'name' => $this->faker->name(),
22
+            'email' => $this->faker->unique()->safeEmail(),
23
+        ];
24
+    }
25
+}

+ 23
- 0
database/factories/Core/DepartmentFactory.php Dosyayı Görüntüle

@@ -0,0 +1,23 @@
1
+<?php
2
+
3
+namespace Database\Factories\Core;
4
+
5
+use Illuminate\Database\Eloquent\Factories\Factory;
6
+
7
+/**
8
+ * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Core\Department>
9
+ */
10
+class DepartmentFactory extends Factory
11
+{
12
+    /**
13
+     * Define the model's default state.
14
+     *
15
+     * @return array<string, mixed>
16
+     */
17
+    public function definition(): array
18
+    {
19
+        return [
20
+            //
21
+        ];
22
+    }
23
+}

+ 0
- 1
database/factories/Setting/CompanyProfileFactory.php Dosyayı Görüntüle

@@ -26,7 +26,6 @@ class CompanyProfileFactory extends Factory
26 26
     {
27 27
         return [
28 28
             'address' => $this->faker->streetAddress,
29
-            'city' => $this->faker->city,
30 29
             'zip_code' => $this->faker->postcode,
31 30
             'country' => $this->faker->randomElement(CompanyProfile::getAvailableCountryCodes()),
32 31
             'phone_number' => $this->faker->e164PhoneNumber,

+ 1
- 1
database/migrations/2023_09_14_034800_create_company_profiles_table.php Dosyayı Görüntüle

@@ -16,7 +16,7 @@ return new class extends Migration
16 16
             $table->foreignId('company_id')->constrained()->cascadeOnDelete();
17 17
             $table->string('logo')->nullable();
18 18
             $table->string('address', 255)->nullable();
19
-            $table->string('city', 255)->nullable();
19
+            $table->unsignedMediumInteger('city_id')->nullable()->index();
20 20
             $table->string('zip_code', 20)->nullable();
21 21
             $table->string('state')->nullable();
22 22
             $table->string('country')->nullable();

+ 36
- 0
database/migrations/2023_09_19_000500_create_departments_table.php Dosyayı Görüntüle

@@ -0,0 +1,36 @@
1
+<?php
2
+
3
+use Illuminate\Database\Migrations\Migration;
4
+use Illuminate\Database\Schema\Blueprint;
5
+use Illuminate\Support\Facades\Schema;
6
+
7
+return new class extends Migration
8
+{
9
+    /**
10
+     * Run the migrations.
11
+     */
12
+    public function up(): void
13
+    {
14
+        Schema::create('departments', function (Blueprint $table) {
15
+            $table->id();
16
+            $table->foreignId('company_id')->constrained()->cascadeOnDelete();
17
+            $table->foreignId('manager_id')->nullable()->constrained('company_user')->nullOnDelete();
18
+            $table->foreignId('parent_id')->nullable()->constrained('departments')->nullOnDelete();
19
+            $table->string('name');
20
+            $table->text('description')->nullable();
21
+            $table->foreignId('created_by')->nullable()->constrained('users')->nullOnDelete();
22
+            $table->foreignId('updated_by')->nullable()->constrained('users')->nullOnDelete();
23
+            $table->timestamps();
24
+
25
+            $table->unique(['company_id', 'name']);
26
+        });
27
+    }
28
+
29
+    /**
30
+     * Reverse the migrations.
31
+     */
32
+    public function down(): void
33
+    {
34
+        Schema::dropIfExists('departments');
35
+    }
36
+};

+ 50
- 0
database/migrations/2023_09_19_050544_create_contacts_table.php Dosyayı Görüntüle

@@ -0,0 +1,50 @@
1
+<?php
2
+
3
+use Illuminate\Database\Migrations\Migration;
4
+use Illuminate\Database\Schema\Blueprint;
5
+use Illuminate\Support\Facades\Schema;
6
+
7
+return new class extends Migration
8
+{
9
+    /**
10
+     * Run the migrations.
11
+     */
12
+    public function up(): void
13
+    {
14
+        Schema::create('contacts', function (Blueprint $table) {
15
+            $table->id();
16
+            $table->foreignId('company_id')->constrained()->cascadeOnDelete();
17
+            $table->string('type')->nullable();
18
+            $table->string('name');
19
+            $table->string('email');
20
+            $table->string('address', 255)->nullable();
21
+            $table->unsignedMediumInteger('city_id')->nullable()->index();
22
+            $table->string('zip_code', 20)->nullable();
23
+            $table->string('state')->nullable();
24
+            $table->string('country')->nullable();
25
+            $table->string('timezone')->nullable();
26
+            $table->string('language')->nullable();
27
+            $table->string('contact_method')->nullable();
28
+            $table->string('phone_number', 30)->nullable();
29
+            $table->string('tax_id', 50)->nullable();
30
+            $table->string('currency_code', 10)->nullable();
31
+            $table->string('website', 255)->nullable();
32
+            $table->string('reference', 255)->nullable();
33
+            $table->foreignId('created_by')->nullable()->constrained('users')->nullOnDelete();
34
+            $table->foreignId('updated_by')->nullable()->constrained('users')->nullOnDelete();
35
+            $table->timestamps();
36
+
37
+            $table->index(['company_id', 'type']);
38
+            $table->unique(['company_id', 'type', 'email']);
39
+            $table->foreign('currency_code')->references('code')->on('currencies')->nullOnDelete();
40
+        });
41
+    }
42
+
43
+    /**
44
+     * Reverse the migrations.
45
+     */
46
+    public function down(): void
47
+    {
48
+        Schema::dropIfExists('contacts');
49
+    }
50
+};

+ 73
- 0
database/migrations/2023_09_19_065547_modify_company_user_table.php Dosyayı Görüntüle

@@ -0,0 +1,73 @@
1
+<?php
2
+
3
+use Illuminate\Database\Migrations\Migration;
4
+use Illuminate\Database\Schema\Blueprint;
5
+use Illuminate\Support\Facades\Schema;
6
+
7
+return new class extends Migration
8
+{
9
+    /**
10
+     * Run the migrations.
11
+     */
12
+    public function up(): void
13
+    {
14
+        Schema::table('company_user', function (Blueprint $table) {
15
+            $table->unsignedBigInteger('contact_id')->nullable()->after('user_id');
16
+            $table->string('employment_type')->nullable()->after('role');
17
+            $table->date('hire_date')->nullable()->after('employment_type');
18
+            $table->date('start_date')->nullable()->after('hire_date');
19
+            $table->unsignedBigInteger('department_id')->nullable()->after('start_date');
20
+            $table->string('job_title')->nullable()->after('department_id');
21
+            $table->string('photo')->nullable()->after('job_title');
22
+            $table->date('date_of_birth')->nullable()->after('photo');
23
+            $table->string('gender')->nullable()->after('date_of_birth');
24
+            $table->string('marital_status')->nullable()->after('gender');
25
+            $table->string('nationality')->nullable()->after('marital_status');
26
+            $table->bigInteger('compensation_amount')->nullable()->after('nationality');
27
+            $table->string('compensation_type')->nullable()->after('compensation_amount');
28
+            $table->string('compensation_frequency')->nullable()->after('compensation_type');
29
+            $table->string('bank_account_number')->nullable()->after('compensation_frequency');
30
+            $table->string('education_level')->nullable()->after('bank_account_number');
31
+            $table->string('field_of_study')->nullable()->after('education_level');
32
+            $table->string('school_name')->nullable()->after('field_of_study');
33
+            $table->string('emergency_contact_name')->nullable()->after('school_name');
34
+            $table->string('emergency_contact_phone_number')->nullable()->after('emergency_contact_name');
35
+            $table->string('emergency_contact_email')->nullable()->after('emergency_contact_phone_number');
36
+
37
+            $table->foreign('contact_id')->references('id')->on('contacts')->nullOnDelete();
38
+            $table->foreign('department_id')->references('id')->on('departments')->nullOnDelete();
39
+        });
40
+    }
41
+
42
+    /**
43
+     * Reverse the migrations.
44
+     */
45
+    public function down(): void
46
+    {
47
+        Schema::table('company_user', function (Blueprint $table) {
48
+            $table->dropColumn([
49
+                'contact_id',
50
+                'employment_type',
51
+                'hire_date',
52
+                'start_date',
53
+                'department_id',
54
+                'job_title',
55
+                'photo',
56
+                'date_of_birth',
57
+                'gender',
58
+                'marital_status',
59
+                'nationality',
60
+                'compensation_amount',
61
+                'compensation_type',
62
+                'compensation_frequency',
63
+                'bank_account_number',
64
+                'education_level',
65
+                'field_of_study',
66
+                'school_name',
67
+                'emergency_contact_name',
68
+                'emergency_contact_phone_number',
69
+                'emergency_contact_email',
70
+            ]);
71
+        });
72
+    }
73
+};

+ 10
- 4
database/seeders/DatabaseSeeder.php Dosyayı Görüntüle

@@ -2,12 +2,9 @@
2 2
 
3 3
 namespace Database\Seeders;
4 4
 
5
-// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
6
-use App\Models\Setting\Currency;
5
+use App\Enums\ContactType;
7 6
 use App\Models\User;
8 7
 use Illuminate\Database\Seeder;
9
-use Illuminate\Support\Facades\DB;
10
-use Illuminate\Support\Facades\Schema;
11 8
 
12 9
 class DatabaseSeeder extends Seeder
13 10
 {
@@ -62,6 +59,15 @@ class DatabaseSeeder extends Seeder
62 59
 
63 60
                 // Generate random created_at date for the company_user pivot table (for employees)
64 61
                 $user->companies->first()?->users()->updateExistingPivot($user->id, ['created_at' => $userCreatedAt]);
62
+
63
+                // Create a contact for the user
64
+                $user->companies->first()?->contacts()->create([
65
+                    'type' => ContactType::Employee,
66
+                    'name' => $user->name,
67
+                    'email' => $user->email,
68
+                    'created_by' => $user->id,
69
+                    'updated_by' => $user->id,
70
+                ]);
65 71
             }
66 72
         };
67 73
 

+ 150554
- 0
resources/data/cities.csv
Dosya farkı çok büyük olduğundan ihmal edildi
Dosyayı Görüntüle


+ 251
- 0
resources/data/countries.csv Dosyayı Görüntüle

@@ -0,0 +1,251 @@
1
+id,name,iso3,iso2,numeric_code,phone_code,capital,currency,currency_name,currency_symbol,tld,native,region,region_id,subregion,subregion_id,nationality,timezones,latitude,longitude,emoji,emojiU
2
+1,Afghanistan,AFG,AF,004,93,Kabul,AFN,"Afghan afghani",؋,.af,افغانستان,Asia,3,"Southern Asia",14,Afghan,"[{zoneName:'Asia\/Kabul',gmtOffset:16200,gmtOffsetName:'UTC+04:30',abbreviation:'AFT',tzName:'Afghanistan Time'}]",33.00000000,65.00000000,🇦🇫,"U+1F1E6 U+1F1EB"
3
+2,"Aland Islands",ALA,AX,248,+358-18,Mariehamn,EUR,Euro,€,.ax,Åland,Europe,4,"Northern Europe",18,"Aland Island","[{zoneName:'Europe\/Mariehamn',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'EET',tzName:'Eastern European Time'}]",60.11666700,19.90000000,🇦🇽,"U+1F1E6 U+1F1FD"
4
+3,Albania,ALB,AL,008,355,Tirana,ALL,"Albanian lek",Lek,.al,Shqipëria,Europe,4,"Southern Europe",16,"Albanian ","[{zoneName:'Europe\/Tirane',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'}]",41.00000000,20.00000000,🇦🇱,"U+1F1E6 U+1F1F1"
5
+4,Algeria,DZA,DZ,012,213,Algiers,DZD,"Algerian dinar",دج,.dz,الجزائر,Africa,1,"Northern Africa",1,Algerian,"[{zoneName:'Africa\/Algiers',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'}]",28.00000000,3.00000000,🇩🇿,"U+1F1E9 U+1F1FF"
6
+5,"American Samoa",ASM,AS,016,+1-684,"Pago Pago",USD,"US Dollar",$,.as,"American Samoa",Oceania,5,Polynesia,22,"American Samoan","[{zoneName:'Pacific\/Pago_Pago',gmtOffset:-39600,gmtOffsetName:'UTC-11:00',abbreviation:'SST',tzName:'Samoa Standard Time'}]",-14.33333333,-170.00000000,🇦🇸,"U+1F1E6 U+1F1F8"
7
+6,Andorra,AND,AD,020,376,"Andorra la Vella",EUR,Euro,€,.ad,Andorra,Europe,4,"Southern Europe",16,Andorran,"[{zoneName:'Europe\/Andorra',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'}]",42.50000000,1.50000000,🇦🇩,"U+1F1E6 U+1F1E9"
8
+7,Angola,AGO,AO,024,244,Luanda,AOA,"Angolan kwanza",Kz,.ao,Angola,Africa,1,"Middle Africa",2,Angolan,"[{zoneName:'Africa\/Luanda',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'WAT',tzName:'West Africa Time'}]",-12.50000000,18.50000000,🇦🇴,"U+1F1E6 U+1F1F4"
9
+8,Anguilla,AIA,AI,660,+1-264,"The Valley",XCD,"East Caribbean dollar",$,.ai,Anguilla,Americas,2,Caribbean,7,Anguillan,"[{zoneName:'America\/Anguilla',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'AST',tzName:'Atlantic Standard Time'}]",18.25000000,-63.16666666,🇦🇮,"U+1F1E6 U+1F1EE"
10
+9,Antarctica,ATA,AQ,010,672,,AAD,"Antarctican dollar",$,.aq,Antarctica,Polar,6,,,Antarctic,"[{zoneName:'Antarctica\/Casey',gmtOffset:39600,gmtOffsetName:'UTC+11:00',abbreviation:'AWST',tzName:'Australian Western Standard Time'},{zoneName:'Antarctica\/Davis',gmtOffset:25200,gmtOffsetName:'UTC+07:00',abbreviation:'DAVT',tzName:'Davis Time'},{zoneName:'Antarctica\/DumontDUrville',gmtOffset:36000,gmtOffsetName:'UTC+10:00',abbreviation:'DDUT',tzName:'Dumont d'Urville Time'},{zoneName:'Antarctica\/Mawson',gmtOffset:18000,gmtOffsetName:'UTC+05:00',abbreviation:'MAWT',tzName:'Mawson Station Time'},{zoneName:'Antarctica\/McMurdo',gmtOffset:46800,gmtOffsetName:'UTC+13:00',abbreviation:'NZDT',tzName:'New Zealand Daylight Time'},{zoneName:'Antarctica\/Palmer',gmtOffset:-10800,gmtOffsetName:'UTC-03:00',abbreviation:'CLST',tzName:'Chile Summer Time'},{zoneName:'Antarctica\/Rothera',gmtOffset:-10800,gmtOffsetName:'UTC-03:00',abbreviation:'ROTT',tzName:'Rothera Research Station Time'},{zoneName:'Antarctica\/Syowa',gmtOffset:10800,gmtOffsetName:'UTC+03:00',abbreviation:'SYOT',tzName:'Showa Station Time'},{zoneName:'Antarctica\/Troll',gmtOffset:0,gmtOffsetName:'UTC\u00b100',abbreviation:'GMT',tzName:'Greenwich Mean Time'},{zoneName:'Antarctica\/Vostok',gmtOffset:21600,gmtOffsetName:'UTC+06:00',abbreviation:'VOST',tzName:'Vostok Station Time'}]",-74.65000000,4.48000000,🇦🇶,"U+1F1E6 U+1F1F6"
11
+10,"Antigua And Barbuda",ATG,AG,028,+1-268,"St. John's",XCD,"Eastern Caribbean dollar",$,.ag,"Antigua and Barbuda",Americas,2,Caribbean,7,"Antiguan or Barbudan","[{zoneName:'America\/Antigua',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'AST',tzName:'Atlantic Standard Time'}]",17.05000000,-61.80000000,🇦🇬,"U+1F1E6 U+1F1EC"
12
+11,Argentina,ARG,AR,032,54,"Buenos Aires",ARS,"Argentine peso",$,.ar,Argentina,Americas,2,"South America",8,Argentine,"[{zoneName:'America\/Argentina\/Buenos_Aires',gmtOffset:-10800,gmtOffsetName:'UTC-03:00',abbreviation:'ART',tzName:'Argentina Time'},{zoneName:'America\/Argentina\/Catamarca',gmtOffset:-10800,gmtOffsetName:'UTC-03:00',abbreviation:'ART',tzName:'Argentina Time'},{zoneName:'America\/Argentina\/Cordoba',gmtOffset:-10800,gmtOffsetName:'UTC-03:00',abbreviation:'ART',tzName:'Argentina Time'},{zoneName:'America\/Argentina\/Jujuy',gmtOffset:-10800,gmtOffsetName:'UTC-03:00',abbreviation:'ART',tzName:'Argentina Time'},{zoneName:'America\/Argentina\/La_Rioja',gmtOffset:-10800,gmtOffsetName:'UTC-03:00',abbreviation:'ART',tzName:'Argentina Time'},{zoneName:'America\/Argentina\/Mendoza',gmtOffset:-10800,gmtOffsetName:'UTC-03:00',abbreviation:'ART',tzName:'Argentina Time'},{zoneName:'America\/Argentina\/Rio_Gallegos',gmtOffset:-10800,gmtOffsetName:'UTC-03:00',abbreviation:'ART',tzName:'Argentina Time'},{zoneName:'America\/Argentina\/Salta',gmtOffset:-10800,gmtOffsetName:'UTC-03:00',abbreviation:'ART',tzName:'Argentina Time'},{zoneName:'America\/Argentina\/San_Juan',gmtOffset:-10800,gmtOffsetName:'UTC-03:00',abbreviation:'ART',tzName:'Argentina Time'},{zoneName:'America\/Argentina\/San_Luis',gmtOffset:-10800,gmtOffsetName:'UTC-03:00',abbreviation:'ART',tzName:'Argentina Time'},{zoneName:'America\/Argentina\/Tucuman',gmtOffset:-10800,gmtOffsetName:'UTC-03:00',abbreviation:'ART',tzName:'Argentina Time'},{zoneName:'America\/Argentina\/Ushuaia',gmtOffset:-10800,gmtOffsetName:'UTC-03:00',abbreviation:'ART',tzName:'Argentina Time'}]",-34.00000000,-64.00000000,🇦🇷,"U+1F1E6 U+1F1F7"
13
+12,Armenia,ARM,AM,051,374,Yerevan,AMD,"Armenian dram",֏,.am,Հայաստան,Asia,3,"Western Asia",11,Armenian,"[{zoneName:'Asia\/Yerevan',gmtOffset:14400,gmtOffsetName:'UTC+04:00',abbreviation:'AMT',tzName:'Armenia Time'}]",40.00000000,45.00000000,🇦🇲,"U+1F1E6 U+1F1F2"
14
+13,Aruba,ABW,AW,533,297,Oranjestad,AWG,"Aruban florin",ƒ,.aw,Aruba,Americas,2,Caribbean,7,Aruban,"[{zoneName:'America\/Aruba',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'AST',tzName:'Atlantic Standard Time'}]",12.50000000,-69.96666666,🇦🇼,"U+1F1E6 U+1F1FC"
15
+14,Australia,AUS,AU,036,61,Canberra,AUD,"Australian dollar",$,.au,Australia,Oceania,5,"Australia and New Zealand",19,Australian,"[{zoneName:'Antarctica\/Macquarie',gmtOffset:39600,gmtOffsetName:'UTC+11:00',abbreviation:'MIST',tzName:'Macquarie Island Station Time'},{zoneName:'Australia\/Adelaide',gmtOffset:37800,gmtOffsetName:'UTC+10:30',abbreviation:'ACDT',tzName:'Australian Central Daylight Saving Time'},{zoneName:'Australia\/Brisbane',gmtOffset:36000,gmtOffsetName:'UTC+10:00',abbreviation:'AEST',tzName:'Australian Eastern Standard Time'},{zoneName:'Australia\/Broken_Hill',gmtOffset:37800,gmtOffsetName:'UTC+10:30',abbreviation:'ACDT',tzName:'Australian Central Daylight Saving Time'},{zoneName:'Australia\/Currie',gmtOffset:39600,gmtOffsetName:'UTC+11:00',abbreviation:'AEDT',tzName:'Australian Eastern Daylight Saving Time'},{zoneName:'Australia\/Darwin',gmtOffset:34200,gmtOffsetName:'UTC+09:30',abbreviation:'ACST',tzName:'Australian Central Standard Time'},{zoneName:'Australia\/Eucla',gmtOffset:31500,gmtOffsetName:'UTC+08:45',abbreviation:'ACWST',tzName:'Australian Central Western Standard Time (Unofficial)'},{zoneName:'Australia\/Hobart',gmtOffset:39600,gmtOffsetName:'UTC+11:00',abbreviation:'AEDT',tzName:'Australian Eastern Daylight Saving Time'},{zoneName:'Australia\/Lindeman',gmtOffset:36000,gmtOffsetName:'UTC+10:00',abbreviation:'AEST',tzName:'Australian Eastern Standard Time'},{zoneName:'Australia\/Lord_Howe',gmtOffset:39600,gmtOffsetName:'UTC+11:00',abbreviation:'LHST',tzName:'Lord Howe Summer Time'},{zoneName:'Australia\/Melbourne',gmtOffset:39600,gmtOffsetName:'UTC+11:00',abbreviation:'AEDT',tzName:'Australian Eastern Daylight Saving Time'},{zoneName:'Australia\/Perth',gmtOffset:28800,gmtOffsetName:'UTC+08:00',abbreviation:'AWST',tzName:'Australian Western Standard Time'},{zoneName:'Australia\/Sydney',gmtOffset:39600,gmtOffsetName:'UTC+11:00',abbreviation:'AEDT',tzName:'Australian Eastern Daylight Saving Time'}]",-27.00000000,133.00000000,🇦🇺,"U+1F1E6 U+1F1FA"
16
+15,Austria,AUT,AT,040,43,Vienna,EUR,Euro,€,.at,Österreich,Europe,4,"Western Europe",17,Austrian,"[{zoneName:'Europe\/Vienna',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'}]",47.33333333,13.33333333,🇦🇹,"U+1F1E6 U+1F1F9"
17
+16,Azerbaijan,AZE,AZ,031,994,Baku,AZN,"Azerbaijani manat",m,.az,Azərbaycan,Asia,3,"Western Asia",11,"Azerbaijani, Azeri","[{zoneName:'Asia\/Baku',gmtOffset:14400,gmtOffsetName:'UTC+04:00',abbreviation:'AZT',tzName:'Azerbaijan Time'}]",40.50000000,47.50000000,🇦🇿,"U+1F1E6 U+1F1FF"
18
+18,Bahrain,BHR,BH,048,973,Manama,BHD,"Bahraini dinar",.د.ب,.bh,‏البحرين,Asia,3,"Western Asia",11,Bahraini,"[{zoneName:'Asia\/Bahrain',gmtOffset:10800,gmtOffsetName:'UTC+03:00',abbreviation:'AST',tzName:'Arabia Standard Time'}]",26.00000000,50.55000000,🇧🇭,"U+1F1E7 U+1F1ED"
19
+19,Bangladesh,BGD,BD,050,880,Dhaka,BDT,"Bangladeshi taka",৳,.bd,Bangladesh,Asia,3,"Southern Asia",14,Bangladeshi,"[{zoneName:'Asia\/Dhaka',gmtOffset:21600,gmtOffsetName:'UTC+06:00',abbreviation:'BDT',tzName:'Bangladesh Standard Time'}]",24.00000000,90.00000000,🇧🇩,"U+1F1E7 U+1F1E9"
20
+20,Barbados,BRB,BB,052,+1-246,Bridgetown,BBD,"Barbadian dollar",Bds$,.bb,Barbados,Americas,2,Caribbean,7,Barbadian,"[{zoneName:'America\/Barbados',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'AST',tzName:'Atlantic Standard Time'}]",13.16666666,-59.53333333,🇧🇧,"U+1F1E7 U+1F1E7"
21
+21,Belarus,BLR,BY,112,375,Minsk,BYN,"Belarusian ruble",Br,.by,Белару́сь,Europe,4,"Eastern Europe",15,Belarusian,"[{zoneName:'Europe\/Minsk',gmtOffset:10800,gmtOffsetName:'UTC+03:00',abbreviation:'MSK',tzName:'Moscow Time'}]",53.00000000,28.00000000,🇧🇾,"U+1F1E7 U+1F1FE"
22
+22,Belgium,BEL,BE,056,32,Brussels,EUR,Euro,€,.be,België,Europe,4,"Western Europe",17,Belgian,"[{zoneName:'Europe\/Brussels',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'}]",50.83333333,4.00000000,🇧🇪,"U+1F1E7 U+1F1EA"
23
+23,Belize,BLZ,BZ,084,501,Belmopan,BZD,"Belize dollar",$,.bz,Belize,Americas,2,"Central America",9,Belizean,"[{zoneName:'America\/Belize',gmtOffset:-21600,gmtOffsetName:'UTC-06:00',abbreviation:'CST',tzName:'Central Standard Time (North America)'}]",17.25000000,-88.75000000,🇧🇿,"U+1F1E7 U+1F1FF"
24
+24,Benin,BEN,BJ,204,229,Porto-Novo,XOF,"West African CFA franc",CFA,.bj,Bénin,Africa,1,"Western Africa",3,"Beninese, Beninois","[{zoneName:'Africa\/Porto-Novo',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'WAT',tzName:'West Africa Time'}]",9.50000000,2.25000000,🇧🇯,"U+1F1E7 U+1F1EF"
25
+25,Bermuda,BMU,BM,060,+1-441,Hamilton,BMD,"Bermudian dollar",$,.bm,Bermuda,Americas,2,"Northern America",6,"Bermudian, Bermudan","[{zoneName:'Atlantic\/Bermuda',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'AST',tzName:'Atlantic Standard Time'}]",32.33333333,-64.75000000,🇧🇲,"U+1F1E7 U+1F1F2"
26
+26,Bhutan,BTN,BT,064,975,Thimphu,BTN,"Bhutanese ngultrum",Nu.,.bt,ʼbrug-yul,Asia,3,"Southern Asia",14,Bhutanese,"[{zoneName:'Asia\/Thimphu',gmtOffset:21600,gmtOffsetName:'UTC+06:00',abbreviation:'BTT',tzName:'Bhutan Time'}]",27.50000000,90.50000000,🇧🇹,"U+1F1E7 U+1F1F9"
27
+27,Bolivia,BOL,BO,068,591,Sucre,BOB,"Bolivian boliviano",Bs.,.bo,Bolivia,Americas,2,"South America",8,Bolivian,"[{zoneName:'America\/La_Paz',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'BOT',tzName:'Bolivia Time'}]",-17.00000000,-65.00000000,🇧🇴,"U+1F1E7 U+1F1F4"
28
+155,"Bonaire, Sint Eustatius and Saba",BES,BQ,535,599,Kralendijk,USD,"United States dollar",$,.an,"Caribisch Nederland",Americas,2,Caribbean,7,Bonaire,"[{zoneName:'America\/Anguilla',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'AST',tzName:'Atlantic Standard Time'}]",12.15000000,-68.26666700,🇧🇶,"U+1F1E7 U+1F1F6"
29
+28,"Bosnia and Herzegovina",BIH,BA,070,387,Sarajevo,BAM,"Bosnia and Herzegovina convertible mark",KM,.ba,"Bosna i Hercegovina",Europe,4,"Southern Europe",16,"Bosnian or Herzegovinian","[{zoneName:'Europe\/Sarajevo',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'}]",44.00000000,18.00000000,🇧🇦,"U+1F1E7 U+1F1E6"
30
+29,Botswana,BWA,BW,072,267,Gaborone,BWP,"Botswana pula",P,.bw,Botswana,Africa,1,"Southern Africa",5,"Motswana, Botswanan","[{zoneName:'Africa\/Gaborone',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'CAT',tzName:'Central Africa Time'}]",-22.00000000,24.00000000,🇧🇼,"U+1F1E7 U+1F1FC"
31
+30,"Bouvet Island",BVT,BV,074,0055,,NOK,"Norwegian Krone",kr,.bv,Bouvetøya,,,,,"Bouvet Island","[{zoneName:'Europe\/Oslo',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'}]",-54.43333333,3.40000000,🇧🇻,"U+1F1E7 U+1F1FB"
32
+31,Brazil,BRA,BR,076,55,Brasilia,BRL,"Brazilian real",R$,.br,Brasil,Americas,2,"South America",8,Brazilian,"[{zoneName:'America\/Araguaina',gmtOffset:-10800,gmtOffsetName:'UTC-03:00',abbreviation:'BRT',tzName:'Bras\u00edlia Time'},{zoneName:'America\/Bahia',gmtOffset:-10800,gmtOffsetName:'UTC-03:00',abbreviation:'BRT',tzName:'Bras\u00edlia Time'},{zoneName:'America\/Belem',gmtOffset:-10800,gmtOffsetName:'UTC-03:00',abbreviation:'BRT',tzName:'Bras\u00edlia Time'},{zoneName:'America\/Boa_Vista',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'AMT',tzName:'Amazon Time (Brazil)[3'},{zoneName:'America\/Campo_Grande',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'AMT',tzName:'Amazon Time (Brazil)[3'},{zoneName:'America\/Cuiaba',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'BRT',tzName:'Brasilia Time'},{zoneName:'America\/Eirunepe',gmtOffset:-18000,gmtOffsetName:'UTC-05:00',abbreviation:'ACT',tzName:'Acre Time'},{zoneName:'America\/Fortaleza',gmtOffset:-10800,gmtOffsetName:'UTC-03:00',abbreviation:'BRT',tzName:'Bras\u00edlia Time'},{zoneName:'America\/Maceio',gmtOffset:-10800,gmtOffsetName:'UTC-03:00',abbreviation:'BRT',tzName:'Bras\u00edlia Time'},{zoneName:'America\/Manaus',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'AMT',tzName:'Amazon Time (Brazil)'},{zoneName:'America\/Noronha',gmtOffset:-7200,gmtOffsetName:'UTC-02:00',abbreviation:'FNT',tzName:'Fernando de Noronha Time'},{zoneName:'America\/Porto_Velho',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'AMT',tzName:'Amazon Time (Brazil)[3'},{zoneName:'America\/Recife',gmtOffset:-10800,gmtOffsetName:'UTC-03:00',abbreviation:'BRT',tzName:'Bras\u00edlia Time'},{zoneName:'America\/Rio_Branco',gmtOffset:-18000,gmtOffsetName:'UTC-05:00',abbreviation:'ACT',tzName:'Acre Time'},{zoneName:'America\/Santarem',gmtOffset:-10800,gmtOffsetName:'UTC-03:00',abbreviation:'BRT',tzName:'Bras\u00edlia Time'},{zoneName:'America\/Sao_Paulo',gmtOffset:-10800,gmtOffsetName:'UTC-03:00',abbreviation:'BRT',tzName:'Bras\u00edlia Time'}]",-10.00000000,-55.00000000,🇧🇷,"U+1F1E7 U+1F1F7"
33
+32,"British Indian Ocean Territory",IOT,IO,086,246,"Diego Garcia",USD,"United States dollar",$,.io,"British Indian Ocean Territory",Africa,1,"Eastern Africa",4,BIOT,"[{zoneName:'Indian\/Chagos',gmtOffset:21600,gmtOffsetName:'UTC+06:00',abbreviation:'IOT',tzName:'Indian Ocean Time'}]",-6.00000000,71.50000000,🇮🇴,"U+1F1EE U+1F1F4"
34
+33,Brunei,BRN,BN,096,673,"Bandar Seri Begawan",BND,"Brunei dollar",B$,.bn,"Negara Brunei Darussalam",Asia,3,"South-Eastern Asia",13,Bruneian,"[{zoneName:'Asia\/Brunei',gmtOffset:28800,gmtOffsetName:'UTC+08:00',abbreviation:'BNT',tzName:'Brunei Darussalam Time'}]",4.50000000,114.66666666,🇧🇳,"U+1F1E7 U+1F1F3"
35
+34,Bulgaria,BGR,BG,100,359,Sofia,BGN,"Bulgarian lev",Лв.,.bg,България,Europe,4,"Eastern Europe",15,Bulgarian,"[{zoneName:'Europe\/Sofia',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'EET',tzName:'Eastern European Time'}]",43.00000000,25.00000000,🇧🇬,"U+1F1E7 U+1F1EC"
36
+35,"Burkina Faso",BFA,BF,854,226,Ouagadougou,XOF,"West African CFA franc",CFA,.bf,"Burkina Faso",Africa,1,"Western Africa",3,Burkinabe,"[{zoneName:'Africa\/Ouagadougou',gmtOffset:0,gmtOffsetName:'UTC\u00b100',abbreviation:'GMT',tzName:'Greenwich Mean Time'}]",13.00000000,-2.00000000,🇧🇫,"U+1F1E7 U+1F1EB"
37
+36,Burundi,BDI,BI,108,257,Bujumbura,BIF,"Burundian franc",FBu,.bi,Burundi,Africa,1,"Eastern Africa",4,Burundian,"[{zoneName:'Africa\/Bujumbura',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'CAT',tzName:'Central Africa Time'}]",-3.50000000,30.00000000,🇧🇮,"U+1F1E7 U+1F1EE"
38
+37,Cambodia,KHM,KH,116,855,"Phnom Penh",KHR,"Cambodian riel",KHR,.kh,Kâmpŭchéa,Asia,3,"South-Eastern Asia",13,Cambodian,"[{zoneName:'Asia\/Phnom_Penh',gmtOffset:25200,gmtOffsetName:'UTC+07:00',abbreviation:'ICT',tzName:'Indochina Time'}]",13.00000000,105.00000000,🇰🇭,"U+1F1F0 U+1F1ED"
39
+38,Cameroon,CMR,CM,120,237,Yaounde,XAF,"Central African CFA franc",FCFA,.cm,Cameroon,Africa,1,"Middle Africa",2,Cameroonian,"[{zoneName:'Africa\/Douala',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'WAT',tzName:'West Africa Time'}]",6.00000000,12.00000000,🇨🇲,"U+1F1E8 U+1F1F2"
40
+39,Canada,CAN,CA,124,1,Ottawa,CAD,"Canadian dollar",$,.ca,Canada,Americas,2,"Northern America",6,Canadian,"[{zoneName:'America\/Atikokan',gmtOffset:-18000,gmtOffsetName:'UTC-05:00',abbreviation:'EST',tzName:'Eastern Standard Time (North America)'},{zoneName:'America\/Blanc-Sablon',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'AST',tzName:'Atlantic Standard Time'},{zoneName:'America\/Cambridge_Bay',gmtOffset:-25200,gmtOffsetName:'UTC-07:00',abbreviation:'MST',tzName:'Mountain Standard Time (North America)'},{zoneName:'America\/Creston',gmtOffset:-25200,gmtOffsetName:'UTC-07:00',abbreviation:'MST',tzName:'Mountain Standard Time (North America)'},{zoneName:'America\/Dawson',gmtOffset:-25200,gmtOffsetName:'UTC-07:00',abbreviation:'MST',tzName:'Mountain Standard Time (North America)'},{zoneName:'America\/Dawson_Creek',gmtOffset:-25200,gmtOffsetName:'UTC-07:00',abbreviation:'MST',tzName:'Mountain Standard Time (North America)'},{zoneName:'America\/Edmonton',gmtOffset:-25200,gmtOffsetName:'UTC-07:00',abbreviation:'MST',tzName:'Mountain Standard Time (North America)'},{zoneName:'America\/Fort_Nelson',gmtOffset:-25200,gmtOffsetName:'UTC-07:00',abbreviation:'MST',tzName:'Mountain Standard Time (North America)'},{zoneName:'America\/Glace_Bay',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'AST',tzName:'Atlantic Standard Time'},{zoneName:'America\/Goose_Bay',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'AST',tzName:'Atlantic Standard Time'},{zoneName:'America\/Halifax',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'AST',tzName:'Atlantic Standard Time'},{zoneName:'America\/Inuvik',gmtOffset:-25200,gmtOffsetName:'UTC-07:00',abbreviation:'MST',tzName:'Mountain Standard Time (North America'},{zoneName:'America\/Iqaluit',gmtOffset:-18000,gmtOffsetName:'UTC-05:00',abbreviation:'EST',tzName:'Eastern Standard Time (North America'},{zoneName:'America\/Moncton',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'AST',tzName:'Atlantic Standard Time'},{zoneName:'America\/Nipigon',gmtOffset:-18000,gmtOffsetName:'UTC-05:00',abbreviation:'EST',tzName:'Eastern Standard Time (North America'},{zoneName:'America\/Pangnirtung',gmtOffset:-18000,gmtOffsetName:'UTC-05:00',abbreviation:'EST',tzName:'Eastern Standard Time (North America'},{zoneName:'America\/Rainy_River',gmtOffset:-21600,gmtOffsetName:'UTC-06:00',abbreviation:'CST',tzName:'Central Standard Time (North America'},{zoneName:'America\/Rankin_Inlet',gmtOffset:-21600,gmtOffsetName:'UTC-06:00',abbreviation:'CST',tzName:'Central Standard Time (North America'},{zoneName:'America\/Regina',gmtOffset:-21600,gmtOffsetName:'UTC-06:00',abbreviation:'CST',tzName:'Central Standard Time (North America'},{zoneName:'America\/Resolute',gmtOffset:-21600,gmtOffsetName:'UTC-06:00',abbreviation:'CST',tzName:'Central Standard Time (North America'},{zoneName:'America\/St_Johns',gmtOffset:-12600,gmtOffsetName:'UTC-03:30',abbreviation:'NST',tzName:'Newfoundland Standard Time'},{zoneName:'America\/Swift_Current',gmtOffset:-21600,gmtOffsetName:'UTC-06:00',abbreviation:'CST',tzName:'Central Standard Time (North America'},{zoneName:'America\/Thunder_Bay',gmtOffset:-18000,gmtOffsetName:'UTC-05:00',abbreviation:'EST',tzName:'Eastern Standard Time (North America'},{zoneName:'America\/Toronto',gmtOffset:-18000,gmtOffsetName:'UTC-05:00',abbreviation:'EST',tzName:'Eastern Standard Time (North America'},{zoneName:'America\/Vancouver',gmtOffset:-28800,gmtOffsetName:'UTC-08:00',abbreviation:'PST',tzName:'Pacific Standard Time (North America'},{zoneName:'America\/Whitehorse',gmtOffset:-25200,gmtOffsetName:'UTC-07:00',abbreviation:'MST',tzName:'Mountain Standard Time (North America'},{zoneName:'America\/Winnipeg',gmtOffset:-21600,gmtOffsetName:'UTC-06:00',abbreviation:'CST',tzName:'Central Standard Time (North America'},{zoneName:'America\/Yellowknife',gmtOffset:-25200,gmtOffsetName:'UTC-07:00',abbreviation:'MST',tzName:'Mountain Standard Time (North America'}]",60.00000000,-95.00000000,🇨🇦,"U+1F1E8 U+1F1E6"
41
+40,"Cape Verde",CPV,CV,132,238,Praia,CVE,"Cape Verdean escudo",$,.cv,"Cabo Verde",Africa,1,"Western Africa",3,Verdean,"[{zoneName:'Atlantic\/Cape_Verde',gmtOffset:-3600,gmtOffsetName:'UTC-01:00',abbreviation:'CVT',tzName:'Cape Verde Time'}]",16.00000000,-24.00000000,🇨🇻,"U+1F1E8 U+1F1FB"
42
+41,"Cayman Islands",CYM,KY,136,+1-345,"George Town",KYD,"Cayman Islands dollar",$,.ky,"Cayman Islands",Americas,2,Caribbean,7,Caymanian,"[{zoneName:'America\/Cayman',gmtOffset:-18000,gmtOffsetName:'UTC-05:00',abbreviation:'EST',tzName:'Eastern Standard Time (North America'}]",19.50000000,-80.50000000,🇰🇾,"U+1F1F0 U+1F1FE"
43
+42,"Central African Republic",CAF,CF,140,236,Bangui,XAF,"Central African CFA franc",FCFA,.cf,"Ködörösêse tî Bêafrîka",Africa,1,"Middle Africa",2,"Central African","[{zoneName:'Africa\/Bangui',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'WAT',tzName:'West Africa Time'}]",7.00000000,21.00000000,🇨🇫,"U+1F1E8 U+1F1EB"
44
+43,Chad,TCD,TD,148,235,N'Djamena,XAF,"Central African CFA franc",FCFA,.td,Tchad,Africa,1,"Middle Africa",2,Chadian,"[{zoneName:'Africa\/Ndjamena',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'WAT',tzName:'West Africa Time'}]",15.00000000,19.00000000,🇹🇩,"U+1F1F9 U+1F1E9"
45
+44,Chile,CHL,CL,152,56,Santiago,CLP,"Chilean peso",$,.cl,Chile,Americas,2,"South America",8,Chilean,"[{zoneName:'America\/Punta_Arenas',gmtOffset:-10800,gmtOffsetName:'UTC-03:00',abbreviation:'CLST',tzName:'Chile Summer Time'},{zoneName:'America\/Santiago',gmtOffset:-10800,gmtOffsetName:'UTC-03:00',abbreviation:'CLST',tzName:'Chile Summer Time'},{zoneName:'Pacific\/Easter',gmtOffset:-18000,gmtOffsetName:'UTC-05:00',abbreviation:'EASST',tzName:'Easter Island Summer Time'}]",-30.00000000,-71.00000000,🇨🇱,"U+1F1E8 U+1F1F1"
46
+45,China,CHN,CN,156,86,Beijing,CNY,"Chinese yuan",¥,.cn,中国,Asia,3,"Eastern Asia",12,Chinese,"[{zoneName:'Asia\/Shanghai',gmtOffset:28800,gmtOffsetName:'UTC+08:00',abbreviation:'CST',tzName:'China Standard Time'},{zoneName:'Asia\/Urumqi',gmtOffset:21600,gmtOffsetName:'UTC+06:00',abbreviation:'XJT',tzName:'China Standard Time'}]",35.00000000,105.00000000,🇨🇳,"U+1F1E8 U+1F1F3"
47
+46,"Christmas Island",CXR,CX,162,61,"Flying Fish Cove",AUD,"Australian dollar",$,.cx,"Christmas Island",Oceania,5,"Australia and New Zealand",19,"Christmas Island","[{zoneName:'Indian\/Christmas',gmtOffset:25200,gmtOffsetName:'UTC+07:00',abbreviation:'CXT',tzName:'Christmas Island Time'}]",-10.50000000,105.66666666,🇨🇽,"U+1F1E8 U+1F1FD"
48
+47,"Cocos (Keeling) Islands",CCK,CC,166,61,"West Island",AUD,"Australian dollar",$,.cc,"Cocos (Keeling) Islands",Oceania,5,"Australia and New Zealand",19,"Cocos Island","[{zoneName:'Indian\/Cocos',gmtOffset:23400,gmtOffsetName:'UTC+06:30',abbreviation:'CCT',tzName:'Cocos Islands Time'}]",-12.50000000,96.83333333,🇨🇨,"U+1F1E8 U+1F1E8"
49
+48,Colombia,COL,CO,170,57,Bogotá,COP,"Colombian peso",$,.co,Colombia,Americas,2,"South America",8,Colombian,"[{zoneName:'America\/Bogota',gmtOffset:-18000,gmtOffsetName:'UTC-05:00',abbreviation:'COT',tzName:'Colombia Time'}]",4.00000000,-72.00000000,🇨🇴,"U+1F1E8 U+1F1F4"
50
+49,Comoros,COM,KM,174,269,Moroni,KMF,"Comorian franc",CF,.km,Komori,Africa,1,"Eastern Africa",4,"Comoran, Comorian","[{zoneName:'Indian\/Comoro',gmtOffset:10800,gmtOffsetName:'UTC+03:00',abbreviation:'EAT',tzName:'East Africa Time'}]",-12.16666666,44.25000000,🇰🇲,"U+1F1F0 U+1F1F2"
51
+50,Congo,COG,CG,178,242,Brazzaville,XAF,"Central African CFA franc",FC,.cg,"République du Congo",Africa,1,"Middle Africa",2,Congolese,"[{zoneName:'Africa\/Brazzaville',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'WAT',tzName:'West Africa Time'}]",-1.00000000,15.00000000,🇨🇬,"U+1F1E8 U+1F1EC"
52
+52,"Cook Islands",COK,CK,184,682,Avarua,NZD,"Cook Islands dollar",$,.ck,"Cook Islands",Oceania,5,Polynesia,22,"Cook Island","[{zoneName:'Pacific\/Rarotonga',gmtOffset:-36000,gmtOffsetName:'UTC-10:00',abbreviation:'CKT',tzName:'Cook Island Time'}]",-21.23333333,-159.76666666,🇨🇰,"U+1F1E8 U+1F1F0"
53
+53,"Costa Rica",CRI,CR,188,506,"San Jose",CRC,"Costa Rican colón",₡,.cr,"Costa Rica",Americas,2,"Central America",9,"Costa Rican","[{zoneName:'America\/Costa_Rica',gmtOffset:-21600,gmtOffsetName:'UTC-06:00',abbreviation:'CST',tzName:'Central Standard Time (North America'}]",10.00000000,-84.00000000,🇨🇷,"U+1F1E8 U+1F1F7"
54
+54,"Cote D'Ivoire (Ivory Coast)",CIV,CI,384,225,Yamoussoukro,XOF,"West African CFA franc",CFA,.ci,,Africa,1,"Western Africa",3,Ivorian,"[{zoneName:'Africa\/Abidjan',gmtOffset:0,gmtOffsetName:'UTC\u00b100',abbreviation:'GMT',tzName:'Greenwich Mean Time'}]",8.00000000,-5.00000000,🇨🇮,"U+1F1E8 U+1F1EE"
55
+55,Croatia,HRV,HR,191,385,Zagreb,HRK,"Croatian kuna",kn,.hr,Hrvatska,Europe,4,"Southern Europe",16,Croatian,"[{zoneName:'Europe\/Zagreb',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'}]",45.16666666,15.50000000,🇭🇷,"U+1F1ED U+1F1F7"
56
+56,Cuba,CUB,CU,192,53,Havana,CUP,"Cuban peso",$,.cu,Cuba,Americas,2,Caribbean,7,Cuban,"[{zoneName:'America\/Havana',gmtOffset:-18000,gmtOffsetName:'UTC-05:00',abbreviation:'CST',tzName:'Cuba Standard Time'}]",21.50000000,-80.00000000,🇨🇺,"U+1F1E8 U+1F1FA"
57
+249,Curaçao,CUW,CW,531,599,Willemstad,ANG,"Netherlands Antillean guilder",ƒ,.cw,Curaçao,Americas,2,Caribbean,7,Curacaoan,"[{zoneName:'America\/Curacao',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'AST',tzName:'Atlantic Standard Time'}]",12.11666700,-68.93333300,🇨🇼,"U+1F1E8 U+1F1FC"
58
+57,Cyprus,CYP,CY,196,357,Nicosia,EUR,Euro,€,.cy,Κύπρος,Europe,4,"Southern Europe",16,Cypriot,"[{zoneName:'Asia\/Famagusta',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'EET',tzName:'Eastern European Time'},{zoneName:'Asia\/Nicosia',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'EET',tzName:'Eastern European Time'}]",35.00000000,33.00000000,🇨🇾,"U+1F1E8 U+1F1FE"
59
+58,"Czech Republic",CZE,CZ,203,420,Prague,CZK,"Czech koruna",Kč,.cz,"Česká republika",Europe,4,"Eastern Europe",15,Czech,,49.75000000,15.50000000,🇨🇿,"U+1F1E8 U+1F1FF"
60
+51,"Democratic Republic of the Congo",COD,CD,180,243,Kinshasa,CDF,"Congolese Franc",FC,.cd,"République démocratique du Congo",Africa,1,"Middle Africa",2,Congolese,"[{zoneName:'Africa\/Kinshasa',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'WAT',tzName:'West Africa Time'},{zoneName:'Africa\/Lubumbashi',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'CAT',tzName:'Central Africa Time'}]",0.00000000,25.00000000,🇨🇩,"U+1F1E8 U+1F1E9"
61
+59,Denmark,DNK,DK,208,45,Copenhagen,DKK,"Danish krone",Kr.,.dk,Danmark,Europe,4,"Northern Europe",18,Danish,"[{zoneName:'Europe\/Copenhagen',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'}]",56.00000000,10.00000000,🇩🇰,"U+1F1E9 U+1F1F0"
62
+60,Djibouti,DJI,DJ,262,253,Djibouti,DJF,"Djiboutian franc",Fdj,.dj,Djibouti,Africa,1,"Eastern Africa",4,Djiboutian,"[{zoneName:'Africa\/Djibouti',gmtOffset:10800,gmtOffsetName:'UTC+03:00',abbreviation:'EAT',tzName:'East Africa Time'}]",11.50000000,43.00000000,🇩🇯,"U+1F1E9 U+1F1EF"
63
+61,Dominica,DMA,DM,212,+1-767,Roseau,XCD,"Eastern Caribbean dollar",$,.dm,Dominica,Americas,2,Caribbean,7,Dominican,"[{zoneName:'America\/Dominica',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'AST',tzName:'Atlantic Standard Time'}]",15.41666666,-61.33333333,🇩🇲,"U+1F1E9 U+1F1F2"
64
+62,"Dominican Republic",DOM,DO,214,"+1-809 and 1-829","Santo Domingo",DOP,"Dominican peso",$,.do,"República Dominicana",Americas,2,Caribbean,7,Dominican,"[{zoneName:'America\/Santo_Domingo',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'AST',tzName:'Atlantic Standard Time'}]",19.00000000,-70.66666666,🇩🇴,"U+1F1E9 U+1F1F4"
65
+63,"East Timor",TLS,TL,626,670,Dili,USD,"United States dollar",$,.tl,Timor-Leste,Asia,3,"South-Eastern Asia",13,Timorese,"[{zoneName:'Asia\/Dili',gmtOffset:32400,gmtOffsetName:'UTC+09:00',abbreviation:'TLT',tzName:'Timor Leste Time'}]",-8.83333333,125.91666666,🇹🇱,"U+1F1F9 U+1F1F1"
66
+64,Ecuador,ECU,EC,218,593,Quito,USD,"United States dollar",$,.ec,Ecuador,Americas,2,"South America",8,Ecuadorian,"[{zoneName:'America\/Guayaquil',gmtOffset:-18000,gmtOffsetName:'UTC-05:00',abbreviation:'ECT',tzName:'Ecuador Time'},{zoneName:'Pacific\/Galapagos',gmtOffset:-21600,gmtOffsetName:'UTC-06:00',abbreviation:'GALT',tzName:'Gal\u00e1pagos Time'}]",-2.00000000,-77.50000000,🇪🇨,"U+1F1EA U+1F1E8"
67
+65,Egypt,EGY,EG,818,20,Cairo,EGP,"Egyptian pound",ج.م,.eg,مصر‎,Africa,1,"Northern Africa",1,Egyptian,"[{zoneName:'Africa\/Cairo',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'EET',tzName:'Eastern European Time'}]",27.00000000,30.00000000,🇪🇬,"U+1F1EA U+1F1EC"
68
+66,"El Salvador",SLV,SV,222,503,"San Salvador",USD,"United States dollar",$,.sv,"El Salvador",Americas,2,"Central America",9,Salvadoran,"[{zoneName:'America\/El_Salvador',gmtOffset:-21600,gmtOffsetName:'UTC-06:00',abbreviation:'CST',tzName:'Central Standard Time (North America'}]",13.83333333,-88.91666666,🇸🇻,"U+1F1F8 U+1F1FB"
69
+67,"Equatorial Guinea",GNQ,GQ,226,240,Malabo,XAF,"Central African CFA franc",FCFA,.gq,"Guinea Ecuatorial",Africa,1,"Middle Africa",2,"Equatorial Guinean, Equatoguinean","[{zoneName:'Africa\/Malabo',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'WAT',tzName:'West Africa Time'}]",2.00000000,10.00000000,🇬🇶,"U+1F1EC U+1F1F6"
70
+68,Eritrea,ERI,ER,232,291,Asmara,ERN,"Eritrean nakfa",Nfk,.er,ኤርትራ,Africa,1,"Eastern Africa",4,Eritrean,"[{zoneName:'Africa\/Asmara',gmtOffset:10800,gmtOffsetName:'UTC+03:00',abbreviation:'EAT',tzName:'East Africa Time'}]",15.00000000,39.00000000,🇪🇷,"U+1F1EA U+1F1F7"
71
+69,Estonia,EST,EE,233,372,Tallinn,EUR,Euro,€,.ee,Eesti,Europe,4,"Northern Europe",18,Estonian,"[{zoneName:'Europe\/Tallinn',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'EET',tzName:'Eastern European Time'}]",59.00000000,26.00000000,🇪🇪,"U+1F1EA U+1F1EA"
72
+70,Ethiopia,ETH,ET,231,251,"Addis Ababa",ETB,"Ethiopian birr",Nkf,.et,ኢትዮጵያ,Africa,1,"Eastern Africa",4,Ethiopian,"[{zoneName:'Africa\/Addis_Ababa',gmtOffset:10800,gmtOffsetName:'UTC+03:00',abbreviation:'EAT',tzName:'East Africa Time'}]",8.00000000,38.00000000,🇪🇹,"U+1F1EA U+1F1F9"
73
+71,"Falkland Islands",FLK,FK,238,500,Stanley,FKP,"Falkland Islands pound",£,.fk,"Falkland Islands",Americas,2,"South America",8,"Falkland Island","[{zoneName:'Atlantic\/Stanley',gmtOffset:-10800,gmtOffsetName:'UTC-03:00',abbreviation:'FKST',tzName:'Falkland Islands Summer Time'}]",-51.75000000,-59.00000000,🇫🇰,"U+1F1EB U+1F1F0"
74
+72,"Faroe Islands",FRO,FO,234,298,Torshavn,DKK,"Danish krone",Kr.,.fo,Føroyar,Europe,4,"Northern Europe",18,Faroese,"[{zoneName:'Atlantic\/Faroe',gmtOffset:0,gmtOffsetName:'UTC\u00b100',abbreviation:'WET',tzName:'Western European Time'}]",62.00000000,-7.00000000,🇫🇴,"U+1F1EB U+1F1F4"
75
+73,"Fiji Islands",FJI,FJ,242,679,Suva,FJD,"Fijian dollar",FJ$,.fj,Fiji,Oceania,5,Melanesia,20,Fijian,"[{zoneName:'Pacific\/Fiji',gmtOffset:43200,gmtOffsetName:'UTC+12:00',abbreviation:'FJT',tzName:'Fiji Time'}]",-18.00000000,175.00000000,🇫🇯,"U+1F1EB U+1F1EF"
76
+74,Finland,FIN,FI,246,358,Helsinki,EUR,Euro,€,.fi,Suomi,Europe,4,"Northern Europe",18,Finnish,"[{zoneName:'Europe\/Helsinki',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'EET',tzName:'Eastern European Time'}]",64.00000000,26.00000000,🇫🇮,"U+1F1EB U+1F1EE"
77
+75,France,FRA,FR,250,33,Paris,EUR,Euro,€,.fr,France,Europe,4,"Western Europe",17,French,"[{zoneName:'Europe\/Paris',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'}]",46.00000000,2.00000000,🇫🇷,"U+1F1EB U+1F1F7"
78
+76,"French Guiana",GUF,GF,254,594,Cayenne,EUR,Euro,€,.gf,"Guyane française",Americas,2,"South America",8,"French Guianese","[{zoneName:'America\/Cayenne',gmtOffset:-10800,gmtOffsetName:'UTC-03:00',abbreviation:'GFT',tzName:'French Guiana Time'}]",4.00000000,-53.00000000,🇬🇫,"U+1F1EC U+1F1EB"
79
+77,"French Polynesia",PYF,PF,258,689,Papeete,XPF,"CFP franc",₣,.pf,"Polynésie française",Oceania,5,Polynesia,22,"French Polynesia","[{zoneName:'Pacific\/Gambier',gmtOffset:-32400,gmtOffsetName:'UTC-09:00',abbreviation:'GAMT',tzName:'Gambier Islands Time'},{zoneName:'Pacific\/Marquesas',gmtOffset:-34200,gmtOffsetName:'UTC-09:30',abbreviation:'MART',tzName:'Marquesas Islands Time'},{zoneName:'Pacific\/Tahiti',gmtOffset:-36000,gmtOffsetName:'UTC-10:00',abbreviation:'TAHT',tzName:'Tahiti Time'}]",-15.00000000,-140.00000000,🇵🇫,"U+1F1F5 U+1F1EB"
80
+78,"French Southern Territories",ATF,TF,260,262,Port-aux-Francais,EUR,Euro,€,.tf,"Territoire des Terres australes et antarctiques fr",Africa,1,"Southern Africa",5,"French Southern Territories","[{zoneName:'Indian\/Kerguelen',gmtOffset:18000,gmtOffsetName:'UTC+05:00',abbreviation:'TFT',tzName:'French Southern and Antarctic Time'}]",-49.25000000,69.16700000,🇹🇫,"U+1F1F9 U+1F1EB"
81
+79,Gabon,GAB,GA,266,241,Libreville,XAF,"Central African CFA franc",FCFA,.ga,Gabon,Africa,1,"Middle Africa",2,Gabonese,"[{zoneName:'Africa\/Libreville',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'WAT',tzName:'West Africa Time'}]",-1.00000000,11.75000000,🇬🇦,"U+1F1EC U+1F1E6"
82
+80,"Gambia The",GMB,GM,270,220,Banjul,GMD,"Gambian dalasi",D,.gm,Gambia,Africa,1,"Western Africa",3,Gambian,"[{zoneName:'Africa\/Banjul',gmtOffset:0,gmtOffsetName:'UTC\u00b100',abbreviation:'GMT',tzName:'Greenwich Mean Time'}]",13.46666666,-16.56666666,🇬🇲,"U+1F1EC U+1F1F2"
83
+81,Georgia,GEO,GE,268,995,Tbilisi,GEL,"Georgian lari",ლ,.ge,საქართველო,Asia,3,"Western Asia",11,Georgian,"[{zoneName:'Asia\/Tbilisi',gmtOffset:14400,gmtOffsetName:'UTC+04:00',abbreviation:'GET',tzName:'Georgia Standard Time'}]",42.00000000,43.50000000,🇬🇪,"U+1F1EC U+1F1EA"
84
+82,Germany,DEU,DE,276,49,Berlin,EUR,Euro,€,.de,Deutschland,Europe,4,"Western Europe",17,German,"[{zoneName:'Europe\/Berlin',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'},{zoneName:'Europe\/Busingen',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'}]",51.00000000,9.00000000,🇩🇪,"U+1F1E9 U+1F1EA"
85
+83,Ghana,GHA,GH,288,233,Accra,GHS,"Ghanaian cedi",GH₵,.gh,Ghana,Africa,1,"Western Africa",3,Ghanaian,"[{zoneName:'Africa\/Accra',gmtOffset:0,gmtOffsetName:'UTC\u00b100',abbreviation:'GMT',tzName:'Greenwich Mean Time'}]",8.00000000,-2.00000000,🇬🇭,"U+1F1EC U+1F1ED"
86
+84,Gibraltar,GIB,GI,292,350,Gibraltar,GIP,"Gibraltar pound",£,.gi,Gibraltar,Europe,4,"Southern Europe",16,Gibraltar,"[{zoneName:'Europe\/Gibraltar',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'}]",36.13333333,-5.35000000,🇬🇮,"U+1F1EC U+1F1EE"
87
+85,Greece,GRC,GR,300,30,Athens,EUR,Euro,€,.gr,Ελλάδα,Europe,4,"Southern Europe",16,"Greek, Hellenic","[{zoneName:'Europe\/Athens',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'EET',tzName:'Eastern European Time'}]",39.00000000,22.00000000,🇬🇷,"U+1F1EC U+1F1F7"
88
+86,Greenland,GRL,GL,304,299,Nuuk,DKK,"Danish krone",Kr.,.gl,"Kalaallit Nunaat",Americas,2,"Northern America",6,Greenlandic,"[{zoneName:'America\/Danmarkshavn',gmtOffset:0,gmtOffsetName:'UTC\u00b100',abbreviation:'GMT',tzName:'Greenwich Mean Time'},{zoneName:'America\/Nuuk',gmtOffset:-10800,gmtOffsetName:'UTC-03:00',abbreviation:'WGT',tzName:'West Greenland Time'},{zoneName:'America\/Scoresbysund',gmtOffset:-3600,gmtOffsetName:'UTC-01:00',abbreviation:'EGT',tzName:'Eastern Greenland Time'},{zoneName:'America\/Thule',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'AST',tzName:'Atlantic Standard Time'}]",72.00000000,-40.00000000,🇬🇱,"U+1F1EC U+1F1F1"
89
+87,Grenada,GRD,GD,308,+1-473,"St. George's",XCD,"Eastern Caribbean dollar",$,.gd,Grenada,Americas,2,Caribbean,7,Grenadian,"[{zoneName:'America\/Grenada',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'AST',tzName:'Atlantic Standard Time'}]",12.11666666,-61.66666666,🇬🇩,"U+1F1EC U+1F1E9"
90
+88,Guadeloupe,GLP,GP,312,590,Basse-Terre,EUR,Euro,€,.gp,Guadeloupe,Americas,2,Caribbean,7,Guadeloupe,"[{zoneName:'America\/Guadeloupe',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'AST',tzName:'Atlantic Standard Time'}]",16.25000000,-61.58333300,🇬🇵,"U+1F1EC U+1F1F5"
91
+89,Guam,GUM,GU,316,+1-671,Hagatna,USD,"US Dollar",$,.gu,Guam,Oceania,5,Micronesia,21,"Guamanian, Guambat","[{zoneName:'Pacific\/Guam',gmtOffset:36000,gmtOffsetName:'UTC+10:00',abbreviation:'CHST',tzName:'Chamorro Standard Time'}]",13.46666666,144.78333333,🇬🇺,"U+1F1EC U+1F1FA"
92
+90,Guatemala,GTM,GT,320,502,"Guatemala City",GTQ,"Guatemalan quetzal",Q,.gt,Guatemala,Americas,2,"Central America",9,Guatemalan,"[{zoneName:'America\/Guatemala',gmtOffset:-21600,gmtOffsetName:'UTC-06:00',abbreviation:'CST',tzName:'Central Standard Time (North America'}]",15.50000000,-90.25000000,🇬🇹,"U+1F1EC U+1F1F9"
93
+91,"Guernsey and Alderney",GGY,GG,831,+44-1481,"St Peter Port",GBP,"British pound",£,.gg,Guernsey,Europe,4,"Northern Europe",18,"Channel Island","[{zoneName:'Europe\/Guernsey',gmtOffset:0,gmtOffsetName:'UTC\u00b100',abbreviation:'GMT',tzName:'Greenwich Mean Time'}]",49.46666666,-2.58333333,🇬🇬,"U+1F1EC U+1F1EC"
94
+92,Guinea,GIN,GN,324,224,Conakry,GNF,"Guinean franc",FG,.gn,Guinée,Africa,1,"Western Africa",3,Guinean,"[{zoneName:'Africa\/Conakry',gmtOffset:0,gmtOffsetName:'UTC\u00b100',abbreviation:'GMT',tzName:'Greenwich Mean Time'}]",11.00000000,-10.00000000,🇬🇳,"U+1F1EC U+1F1F3"
95
+93,Guinea-Bissau,GNB,GW,624,245,Bissau,XOF,"West African CFA franc",CFA,.gw,Guiné-Bissau,Africa,1,"Western Africa",3,Bissau-Guinean,"[{zoneName:'Africa\/Bissau',gmtOffset:0,gmtOffsetName:'UTC\u00b100',abbreviation:'GMT',tzName:'Greenwich Mean Time'}]",12.00000000,-15.00000000,🇬🇼,"U+1F1EC U+1F1FC"
96
+94,Guyana,GUY,GY,328,592,Georgetown,GYD,"Guyanese dollar",$,.gy,Guyana,Americas,2,"South America",8,Guyanese,"[{zoneName:'America\/Guyana',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'GYT',tzName:'Guyana Time'}]",5.00000000,-59.00000000,🇬🇾,"U+1F1EC U+1F1FE"
97
+95,Haiti,HTI,HT,332,509,Port-au-Prince,HTG,"Haitian gourde",G,.ht,Haïti,Americas,2,Caribbean,7,Haitian,"[{zoneName:'America\/Port-au-Prince',gmtOffset:-18000,gmtOffsetName:'UTC-05:00',abbreviation:'EST',tzName:'Eastern Standard Time (North America'}]",19.00000000,-72.41666666,🇭🇹,"U+1F1ED U+1F1F9"
98
+96,"Heard Island and McDonald Islands",HMD,HM,334,672,,AUD,"Australian dollar",$,.hm,"Heard Island and McDonald Islands",,,,,"Heard Island or McDonald Islands","[{zoneName:'Indian\/Kerguelen',gmtOffset:18000,gmtOffsetName:'UTC+05:00',abbreviation:'TFT',tzName:'French Southern and Antarctic Time'}]",-53.10000000,72.51666666,🇭🇲,"U+1F1ED U+1F1F2"
99
+97,Honduras,HND,HN,340,504,Tegucigalpa,HNL,"Honduran lempira",L,.hn,Honduras,Americas,2,"Central America",9,Honduran,"[{zoneName:'America\/Tegucigalpa',gmtOffset:-21600,gmtOffsetName:'UTC-06:00',abbreviation:'CST',tzName:'Central Standard Time (North America'}]",15.00000000,-86.50000000,🇭🇳,"U+1F1ED U+1F1F3"
100
+98,"Hong Kong S.A.R.",HKG,HK,344,852,"Hong Kong",HKD,"Hong Kong dollar",$,.hk,香港,Asia,3,"Eastern Asia",12,"Hong Kong, Hong Kongese","[{zoneName:'Asia\/Hong_Kong',gmtOffset:28800,gmtOffsetName:'UTC+08:00',abbreviation:'HKT',tzName:'Hong Kong Time'}]",22.25000000,114.16666666,🇭🇰,"U+1F1ED U+1F1F0"
101
+99,Hungary,HUN,HU,348,36,Budapest,HUF,"Hungarian forint",Ft,.hu,Magyarország,Europe,4,"Eastern Europe",15,"Hungarian, Magyar","[{zoneName:'Europe\/Budapest',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'}]",47.00000000,20.00000000,🇭🇺,"U+1F1ED U+1F1FA"
102
+100,Iceland,ISL,IS,352,354,Reykjavik,ISK,"Icelandic króna",kr,.is,Ísland,Europe,4,"Northern Europe",18,Icelandic,"[{zoneName:'Atlantic\/Reykjavik',gmtOffset:0,gmtOffsetName:'UTC\u00b100',abbreviation:'GMT',tzName:'Greenwich Mean Time'}]",65.00000000,-18.00000000,🇮🇸,"U+1F1EE U+1F1F8"
103
+101,India,IND,IN,356,91,"New Delhi",INR,"Indian rupee",₹,.in,भारत,Asia,3,"Southern Asia",14,Indian,"[{zoneName:'Asia\/Kolkata',gmtOffset:19800,gmtOffsetName:'UTC+05:30',abbreviation:'IST',tzName:'Indian Standard Time'}]",20.00000000,77.00000000,🇮🇳,"U+1F1EE U+1F1F3"
104
+102,Indonesia,IDN,ID,360,62,Jakarta,IDR,"Indonesian rupiah",Rp,.id,Indonesia,Asia,3,"South-Eastern Asia",13,Indonesian,"[{zoneName:'Asia\/Jakarta',gmtOffset:25200,gmtOffsetName:'UTC+07:00',abbreviation:'WIB',tzName:'Western Indonesian Time'},{zoneName:'Asia\/Jayapura',gmtOffset:32400,gmtOffsetName:'UTC+09:00',abbreviation:'WIT',tzName:'Eastern Indonesian Time'},{zoneName:'Asia\/Makassar',gmtOffset:28800,gmtOffsetName:'UTC+08:00',abbreviation:'WITA',tzName:'Central Indonesia Time'},{zoneName:'Asia\/Pontianak',gmtOffset:25200,gmtOffsetName:'UTC+07:00',abbreviation:'WIB',tzName:'Western Indonesian Time'}]",-5.00000000,120.00000000,🇮🇩,"U+1F1EE U+1F1E9"
105
+103,Iran,IRN,IR,364,98,Tehran,IRR,"Iranian rial",﷼,.ir,ایران,Asia,3,"Southern Asia",14,"Iranian, Persian","[{zoneName:'Asia\/Tehran',gmtOffset:12600,gmtOffsetName:'UTC+03:30',abbreviation:'IRDT',tzName:'Iran Daylight Time'}]",32.00000000,53.00000000,🇮🇷,"U+1F1EE U+1F1F7"
106
+104,Iraq,IRQ,IQ,368,964,Baghdad,IQD,"Iraqi dinar",د.ع,.iq,العراق,Asia,3,"Western Asia",11,Iraqi,"[{zoneName:'Asia\/Baghdad',gmtOffset:10800,gmtOffsetName:'UTC+03:00',abbreviation:'AST',tzName:'Arabia Standard Time'}]",33.00000000,44.00000000,🇮🇶,"U+1F1EE U+1F1F6"
107
+105,Ireland,IRL,IE,372,353,Dublin,EUR,Euro,€,.ie,Éire,Europe,4,"Northern Europe",18,Irish,"[{zoneName:'Europe\/Dublin',gmtOffset:0,gmtOffsetName:'UTC\u00b100',abbreviation:'GMT',tzName:'Greenwich Mean Time'}]",53.00000000,-8.00000000,🇮🇪,"U+1F1EE U+1F1EA"
108
+106,Israel,ISR,IL,376,972,Jerusalem,ILS,"Israeli new shekel",₪,.il,יִשְׂרָאֵל,Asia,3,"Western Asia",11,Israeli,"[{zoneName:'Asia\/Jerusalem',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'IST',tzName:'Israel Standard Time'}]",31.50000000,34.75000000,🇮🇱,"U+1F1EE U+1F1F1"
109
+107,Italy,ITA,IT,380,39,Rome,EUR,Euro,€,.it,Italia,Europe,4,"Southern Europe",16,Italian,"[{zoneName:'Europe\/Rome',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'}]",42.83333333,12.83333333,🇮🇹,"U+1F1EE U+1F1F9"
110
+108,Jamaica,JAM,JM,388,+1-876,Kingston,JMD,"Jamaican dollar",J$,.jm,Jamaica,Americas,2,Caribbean,7,Jamaican,"[{zoneName:'America\/Jamaica',gmtOffset:-18000,gmtOffsetName:'UTC-05:00',abbreviation:'EST',tzName:'Eastern Standard Time (North America'}]",18.25000000,-77.50000000,🇯🇲,"U+1F1EF U+1F1F2"
111
+109,Japan,JPN,JP,392,81,Tokyo,JPY,"Japanese yen",¥,.jp,日本,Asia,3,"Eastern Asia",12,Japanese,"[{zoneName:'Asia\/Tokyo',gmtOffset:32400,gmtOffsetName:'UTC+09:00',abbreviation:'JST',tzName:'Japan Standard Time'}]",36.00000000,138.00000000,🇯🇵,"U+1F1EF U+1F1F5"
112
+110,Jersey,JEY,JE,832,+44-1534,"Saint Helier",GBP,"British pound",£,.je,Jersey,Europe,4,"Northern Europe",18,"Channel Island","[{zoneName:'Europe\/Jersey',gmtOffset:0,gmtOffsetName:'UTC\u00b100',abbreviation:'GMT',tzName:'Greenwich Mean Time'}]",49.25000000,-2.16666666,🇯🇪,"U+1F1EF U+1F1EA"
113
+111,Jordan,JOR,JO,400,962,Amman,JOD,"Jordanian dinar",ا.د,.jo,الأردن,Asia,3,"Western Asia",11,Jordanian,"[{zoneName:'Asia\/Amman',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'EET',tzName:'Eastern European Time'}]",31.00000000,36.00000000,🇯🇴,"U+1F1EF U+1F1F4"
114
+112,Kazakhstan,KAZ,KZ,398,7,Astana,KZT,"Kazakhstani tenge",лв,.kz,Қазақстан,Asia,3,"Central Asia",10,"Kazakhstani, Kazakh","[{zoneName:'Asia\/Almaty',gmtOffset:21600,gmtOffsetName:'UTC+06:00',abbreviation:'ALMT',tzName:'Alma-Ata Time[1'},{zoneName:'Asia\/Aqtau',gmtOffset:18000,gmtOffsetName:'UTC+05:00',abbreviation:'AQTT',tzName:'Aqtobe Time'},{zoneName:'Asia\/Aqtobe',gmtOffset:18000,gmtOffsetName:'UTC+05:00',abbreviation:'AQTT',tzName:'Aqtobe Time'},{zoneName:'Asia\/Atyrau',gmtOffset:18000,gmtOffsetName:'UTC+05:00',abbreviation:'MSD+1',tzName:'Moscow Daylight Time+1'},{zoneName:'Asia\/Oral',gmtOffset:18000,gmtOffsetName:'UTC+05:00',abbreviation:'ORAT',tzName:'Oral Time'},{zoneName:'Asia\/Qostanay',gmtOffset:21600,gmtOffsetName:'UTC+06:00',abbreviation:'QYZST',tzName:'Qyzylorda Summer Time'},{zoneName:'Asia\/Qyzylorda',gmtOffset:18000,gmtOffsetName:'UTC+05:00',abbreviation:'QYZT',tzName:'Qyzylorda Summer Time'}]",48.00000000,68.00000000,🇰🇿,"U+1F1F0 U+1F1FF"
115
+113,Kenya,KEN,KE,404,254,Nairobi,KES,"Kenyan shilling",KSh,.ke,Kenya,Africa,1,"Eastern Africa",4,Kenyan,"[{zoneName:'Africa\/Nairobi',gmtOffset:10800,gmtOffsetName:'UTC+03:00',abbreviation:'EAT',tzName:'East Africa Time'}]",1.00000000,38.00000000,🇰🇪,"U+1F1F0 U+1F1EA"
116
+114,Kiribati,KIR,KI,296,686,Tarawa,AUD,"Australian dollar",$,.ki,Kiribati,Oceania,5,Micronesia,21,I-Kiribati,"[{zoneName:'Pacific\/Enderbury',gmtOffset:46800,gmtOffsetName:'UTC+13:00',abbreviation:'PHOT',tzName:'Phoenix Island Time'},{zoneName:'Pacific\/Kiritimati',gmtOffset:50400,gmtOffsetName:'UTC+14:00',abbreviation:'LINT',tzName:'Line Islands Time'},{zoneName:'Pacific\/Tarawa',gmtOffset:43200,gmtOffsetName:'UTC+12:00',abbreviation:'GILT',tzName:'Gilbert Island Time'}]",1.41666666,173.00000000,🇰🇮,"U+1F1F0 U+1F1EE"
117
+248,Kosovo,XKX,XK,926,383,Pristina,EUR,Euro,€,.xk,"Republika e Kosovës",Europe,4,"Eastern Europe",15,"Kosovar, Kosovan","[{zoneName:'Europe\/Belgrade',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'}]",42.56129090,20.34030350,🇽🇰,"U+1F1FD U+1F1F0"
118
+117,Kuwait,KWT,KW,414,965,"Kuwait City",KWD,"Kuwaiti dinar",ك.د,.kw,الكويت,Asia,3,"Western Asia",11,Kuwaiti,"[{zoneName:'Asia\/Kuwait',gmtOffset:10800,gmtOffsetName:'UTC+03:00',abbreviation:'AST',tzName:'Arabia Standard Time'}]",29.50000000,45.75000000,🇰🇼,"U+1F1F0 U+1F1FC"
119
+118,Kyrgyzstan,KGZ,KG,417,996,Bishkek,KGS,"Kyrgyzstani som",лв,.kg,Кыргызстан,Asia,3,"Central Asia",10,"Kyrgyzstani, Kyrgyz, Kirgiz, Kirghiz","[{zoneName:'Asia\/Bishkek',gmtOffset:21600,gmtOffsetName:'UTC+06:00',abbreviation:'KGT',tzName:'Kyrgyzstan Time'}]",41.00000000,75.00000000,🇰🇬,"U+1F1F0 U+1F1EC"
120
+119,Laos,LAO,LA,418,856,Vientiane,LAK,"Lao kip",₭,.la,ສປປລາວ,Asia,3,"South-Eastern Asia",13,"Lao, Laotian","[{zoneName:'Asia\/Vientiane',gmtOffset:25200,gmtOffsetName:'UTC+07:00',abbreviation:'ICT',tzName:'Indochina Time'}]",18.00000000,105.00000000,🇱🇦,"U+1F1F1 U+1F1E6"
121
+120,Latvia,LVA,LV,428,371,Riga,EUR,Euro,€,.lv,Latvija,Europe,4,"Northern Europe",18,Latvian,"[{zoneName:'Europe\/Riga',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'EET',tzName:'Eastern European Time'}]",57.00000000,25.00000000,🇱🇻,"U+1F1F1 U+1F1FB"
122
+121,Lebanon,LBN,LB,422,961,Beirut,LBP,"Lebanese pound",£,.lb,لبنان,Asia,3,"Western Asia",11,Lebanese,"[{zoneName:'Asia\/Beirut',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'EET',tzName:'Eastern European Time'}]",33.83333333,35.83333333,🇱🇧,"U+1F1F1 U+1F1E7"
123
+122,Lesotho,LSO,LS,426,266,Maseru,LSL,"Lesotho loti",L,.ls,Lesotho,Africa,1,"Southern Africa",5,Basotho,"[{zoneName:'Africa\/Maseru',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'SAST',tzName:'South African Standard Time'}]",-29.50000000,28.50000000,🇱🇸,"U+1F1F1 U+1F1F8"
124
+123,Liberia,LBR,LR,430,231,Monrovia,LRD,"Liberian dollar",$,.lr,Liberia,Africa,1,"Western Africa",3,Liberian,"[{zoneName:'Africa\/Monrovia',gmtOffset:0,gmtOffsetName:'UTC\u00b100',abbreviation:'GMT',tzName:'Greenwich Mean Time'}]",6.50000000,-9.50000000,🇱🇷,"U+1F1F1 U+1F1F7"
125
+124,Libya,LBY,LY,434,218,Tripolis,LYD,"Libyan dinar",د.ل,.ly,‏ليبيا,Africa,1,"Northern Africa",1,Libyan,"[{zoneName:'Africa\/Tripoli',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'EET',tzName:'Eastern European Time'}]",25.00000000,17.00000000,🇱🇾,"U+1F1F1 U+1F1FE"
126
+125,Liechtenstein,LIE,LI,438,423,Vaduz,CHF,"Swiss franc",CHf,.li,Liechtenstein,Europe,4,"Western Europe",17,Liechtenstein,"[{zoneName:'Europe\/Vaduz',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'}]",47.26666666,9.53333333,🇱🇮,"U+1F1F1 U+1F1EE"
127
+126,Lithuania,LTU,LT,440,370,Vilnius,EUR,Euro,€,.lt,Lietuva,Europe,4,"Northern Europe",18,Lithuanian,"[{zoneName:'Europe\/Vilnius',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'EET',tzName:'Eastern European Time'}]",56.00000000,24.00000000,🇱🇹,"U+1F1F1 U+1F1F9"
128
+127,Luxembourg,LUX,LU,442,352,Luxembourg,EUR,Euro,€,.lu,Luxembourg,Europe,4,"Western Europe",17,"Luxembourg, Luxembourgish","[{zoneName:'Europe\/Luxembourg',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'}]",49.75000000,6.16666666,🇱🇺,"U+1F1F1 U+1F1FA"
129
+128,"Macau S.A.R.",MAC,MO,446,853,Macao,MOP,"Macanese pataca",$,.mo,澳門,Asia,3,"Eastern Asia",12,"Macanese, Chinese","[{zoneName:'Asia\/Macau',gmtOffset:28800,gmtOffsetName:'UTC+08:00',abbreviation:'CST',tzName:'China Standard Time'}]",22.16666666,113.55000000,🇲🇴,"U+1F1F2 U+1F1F4"
130
+130,Madagascar,MDG,MG,450,261,Antananarivo,MGA,"Malagasy ariary",Ar,.mg,Madagasikara,Africa,1,"Eastern Africa",4,Malagasy,"[{zoneName:'Indian\/Antananarivo',gmtOffset:10800,gmtOffsetName:'UTC+03:00',abbreviation:'EAT',tzName:'East Africa Time'}]",-20.00000000,47.00000000,🇲🇬,"U+1F1F2 U+1F1EC"
131
+131,Malawi,MWI,MW,454,265,Lilongwe,MWK,"Malawian kwacha",MK,.mw,Malawi,Africa,1,"Eastern Africa",4,Malawian,"[{zoneName:'Africa\/Blantyre',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'CAT',tzName:'Central Africa Time'}]",-13.50000000,34.00000000,🇲🇼,"U+1F1F2 U+1F1FC"
132
+132,Malaysia,MYS,MY,458,60,"Kuala Lumpur",MYR,"Malaysian ringgit",RM,.my,Malaysia,Asia,3,"South-Eastern Asia",13,Malaysian,"[{zoneName:'Asia\/Kuala_Lumpur',gmtOffset:28800,gmtOffsetName:'UTC+08:00',abbreviation:'MYT',tzName:'Malaysia Time'},{zoneName:'Asia\/Kuching',gmtOffset:28800,gmtOffsetName:'UTC+08:00',abbreviation:'MYT',tzName:'Malaysia Time'}]",2.50000000,112.50000000,🇲🇾,"U+1F1F2 U+1F1FE"
133
+133,Maldives,MDV,MV,462,960,Male,MVR,"Maldivian rufiyaa",Rf,.mv,Maldives,Asia,3,"Southern Asia",14,Maldivian,"[{zoneName:'Indian\/Maldives',gmtOffset:18000,gmtOffsetName:'UTC+05:00',abbreviation:'MVT',tzName:'Maldives Time'}]",3.25000000,73.00000000,🇲🇻,"U+1F1F2 U+1F1FB"
134
+134,Mali,MLI,ML,466,223,Bamako,XOF,"West African CFA franc",CFA,.ml,Mali,Africa,1,"Western Africa",3,"Malian, Malinese","[{zoneName:'Africa\/Bamako',gmtOffset:0,gmtOffsetName:'UTC\u00b100',abbreviation:'GMT',tzName:'Greenwich Mean Time'}]",17.00000000,-4.00000000,🇲🇱,"U+1F1F2 U+1F1F1"
135
+135,Malta,MLT,MT,470,356,Valletta,EUR,Euro,€,.mt,Malta,Europe,4,"Southern Europe",16,Maltese,"[{zoneName:'Europe\/Malta',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'}]",35.83333333,14.58333333,🇲🇹,"U+1F1F2 U+1F1F9"
136
+136,"Man (Isle of)",IMN,IM,833,+44-1624,"Douglas, Isle of Man",GBP,"British pound",£,.im,"Isle of Man",Europe,4,"Northern Europe",18,Manx,"[{zoneName:'Europe\/Isle_of_Man',gmtOffset:0,gmtOffsetName:'UTC\u00b100',abbreviation:'GMT',tzName:'Greenwich Mean Time'}]",54.25000000,-4.50000000,🇮🇲,"U+1F1EE U+1F1F2"
137
+137,"Marshall Islands",MHL,MH,584,692,Majuro,USD,"United States dollar",$,.mh,M̧ajeļ,Oceania,5,Micronesia,21,Marshallese,"[{zoneName:'Pacific\/Kwajalein',gmtOffset:43200,gmtOffsetName:'UTC+12:00',abbreviation:'MHT',tzName:'Marshall Islands Time'},{zoneName:'Pacific\/Majuro',gmtOffset:43200,gmtOffsetName:'UTC+12:00',abbreviation:'MHT',tzName:'Marshall Islands Time'}]",9.00000000,168.00000000,🇲🇭,"U+1F1F2 U+1F1ED"
138
+138,Martinique,MTQ,MQ,474,596,Fort-de-France,EUR,Euro,€,.mq,Martinique,Americas,2,Caribbean,7,"Martiniquais, Martinican","[{zoneName:'America\/Martinique',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'AST',tzName:'Atlantic Standard Time'}]",14.66666700,-61.00000000,🇲🇶,"U+1F1F2 U+1F1F6"
139
+139,Mauritania,MRT,MR,478,222,Nouakchott,MRO,"Mauritanian ouguiya",MRU,.mr,موريتانيا,Africa,1,"Western Africa",3,Mauritanian,"[{zoneName:'Africa\/Nouakchott',gmtOffset:0,gmtOffsetName:'UTC\u00b100',abbreviation:'GMT',tzName:'Greenwich Mean Time'}]",20.00000000,-12.00000000,🇲🇷,"U+1F1F2 U+1F1F7"
140
+140,Mauritius,MUS,MU,480,230,"Port Louis",MUR,"Mauritian rupee",₨,.mu,Maurice,Africa,1,"Eastern Africa",4,Mauritian,"[{zoneName:'Indian\/Mauritius',gmtOffset:14400,gmtOffsetName:'UTC+04:00',abbreviation:'MUT',tzName:'Mauritius Time'}]",-20.28333333,57.55000000,🇲🇺,"U+1F1F2 U+1F1FA"
141
+141,Mayotte,MYT,YT,175,262,Mamoudzou,EUR,Euro,€,.yt,Mayotte,Africa,1,"Eastern Africa",4,Mahoran,"[{zoneName:'Indian\/Mayotte',gmtOffset:10800,gmtOffsetName:'UTC+03:00',abbreviation:'EAT',tzName:'East Africa Time'}]",-12.83333333,45.16666666,🇾🇹,"U+1F1FE U+1F1F9"
142
+142,Mexico,MEX,MX,484,52,"Ciudad de México",MXN,"Mexican peso",$,.mx,México,Americas,2,"Central America",9,Mexican,"[{zoneName:'America\/Bahia_Banderas',gmtOffset:-21600,gmtOffsetName:'UTC-06:00',abbreviation:'CST',tzName:'Central Standard Time (North America'},{zoneName:'America\/Cancun',gmtOffset:-18000,gmtOffsetName:'UTC-05:00',abbreviation:'EST',tzName:'Eastern Standard Time (North America'},{zoneName:'America\/Chihuahua',gmtOffset:-25200,gmtOffsetName:'UTC-07:00',abbreviation:'MST',tzName:'Mountain Standard Time (North America'},{zoneName:'America\/Hermosillo',gmtOffset:-25200,gmtOffsetName:'UTC-07:00',abbreviation:'MST',tzName:'Mountain Standard Time (North America'},{zoneName:'America\/Matamoros',gmtOffset:-21600,gmtOffsetName:'UTC-06:00',abbreviation:'CST',tzName:'Central Standard Time (North America'},{zoneName:'America\/Mazatlan',gmtOffset:-25200,gmtOffsetName:'UTC-07:00',abbreviation:'MST',tzName:'Mountain Standard Time (North America'},{zoneName:'America\/Merida',gmtOffset:-21600,gmtOffsetName:'UTC-06:00',abbreviation:'CST',tzName:'Central Standard Time (North America'},{zoneName:'America\/Mexico_City',gmtOffset:-21600,gmtOffsetName:'UTC-06:00',abbreviation:'CST',tzName:'Central Standard Time (North America'},{zoneName:'America\/Monterrey',gmtOffset:-21600,gmtOffsetName:'UTC-06:00',abbreviation:'CST',tzName:'Central Standard Time (North America'},{zoneName:'America\/Ojinaga',gmtOffset:-25200,gmtOffsetName:'UTC-07:00',abbreviation:'MST',tzName:'Mountain Standard Time (North America'},{zoneName:'America\/Tijuana',gmtOffset:-28800,gmtOffsetName:'UTC-08:00',abbreviation:'PST',tzName:'Pacific Standard Time (North America'}]",23.00000000,-102.00000000,🇲🇽,"U+1F1F2 U+1F1FD"
143
+143,Micronesia,FSM,FM,583,691,Palikir,USD,"United States dollar",$,.fm,Micronesia,Oceania,5,Micronesia,21,Micronesian,"[{zoneName:'Pacific\/Chuuk',gmtOffset:36000,gmtOffsetName:'UTC+10:00',abbreviation:'CHUT',tzName:'Chuuk Time'},{zoneName:'Pacific\/Kosrae',gmtOffset:39600,gmtOffsetName:'UTC+11:00',abbreviation:'KOST',tzName:'Kosrae Time'},{zoneName:'Pacific\/Pohnpei',gmtOffset:39600,gmtOffsetName:'UTC+11:00',abbreviation:'PONT',tzName:'Pohnpei Standard Time'}]",6.91666666,158.25000000,🇫🇲,"U+1F1EB U+1F1F2"
144
+144,Moldova,MDA,MD,498,373,Chisinau,MDL,"Moldovan leu",L,.md,Moldova,Europe,4,"Eastern Europe",15,Moldovan,"[{zoneName:'Europe\/Chisinau',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'EET',tzName:'Eastern European Time'}]",47.00000000,29.00000000,🇲🇩,"U+1F1F2 U+1F1E9"
145
+145,Monaco,MCO,MC,492,377,Monaco,EUR,Euro,€,.mc,Monaco,Europe,4,"Western Europe",17,"Monegasque, Monacan","[{zoneName:'Europe\/Monaco',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'}]",43.73333333,7.40000000,🇲🇨,"U+1F1F2 U+1F1E8"
146
+146,Mongolia,MNG,MN,496,976,"Ulan Bator",MNT,"Mongolian tögrög",₮,.mn,"Монгол улс",Asia,3,"Eastern Asia",12,Mongolian,"[{zoneName:'Asia\/Choibalsan',gmtOffset:28800,gmtOffsetName:'UTC+08:00',abbreviation:'CHOT',tzName:'Choibalsan Standard Time'},{zoneName:'Asia\/Hovd',gmtOffset:25200,gmtOffsetName:'UTC+07:00',abbreviation:'HOVT',tzName:'Hovd Time'},{zoneName:'Asia\/Ulaanbaatar',gmtOffset:28800,gmtOffsetName:'UTC+08:00',abbreviation:'ULAT',tzName:'Ulaanbaatar Standard Time'}]",46.00000000,105.00000000,🇲🇳,"U+1F1F2 U+1F1F3"
147
+147,Montenegro,MNE,ME,499,382,Podgorica,EUR,Euro,€,.me,"Црна Гора",Europe,4,"Southern Europe",16,Montenegrin,"[{zoneName:'Europe\/Podgorica',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'}]",42.50000000,19.30000000,🇲🇪,"U+1F1F2 U+1F1EA"
148
+148,Montserrat,MSR,MS,500,+1-664,Plymouth,XCD,"Eastern Caribbean dollar",$,.ms,Montserrat,Americas,2,Caribbean,7,Montserratian,"[{zoneName:'America\/Montserrat',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'AST',tzName:'Atlantic Standard Time'}]",16.75000000,-62.20000000,🇲🇸,"U+1F1F2 U+1F1F8"
149
+149,Morocco,MAR,MA,504,212,Rabat,MAD,"Moroccan dirham",DH,.ma,المغرب,Africa,1,"Northern Africa",1,Moroccan,"[{zoneName:'Africa\/Casablanca',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'WEST',tzName:'Western European Summer Time'}]",32.00000000,-5.00000000,🇲🇦,"U+1F1F2 U+1F1E6"
150
+150,Mozambique,MOZ,MZ,508,258,Maputo,MZN,"Mozambican metical",MT,.mz,Moçambique,Africa,1,"Eastern Africa",4,Mozambican,"[{zoneName:'Africa\/Maputo',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'CAT',tzName:'Central Africa Time'}]",-18.25000000,35.00000000,🇲🇿,"U+1F1F2 U+1F1FF"
151
+151,Myanmar,MMR,MM,104,95,"Nay Pyi Taw",MMK,"Burmese kyat",K,.mm,မြန်မာ,Asia,3,"South-Eastern Asia",13,Burmese,"[{zoneName:'Asia\/Yangon',gmtOffset:23400,gmtOffsetName:'UTC+06:30',abbreviation:'MMT',tzName:'Myanmar Standard Time'}]",22.00000000,98.00000000,🇲🇲,"U+1F1F2 U+1F1F2"
152
+152,Namibia,NAM,NA,516,264,Windhoek,NAD,"Namibian dollar",$,.na,Namibia,Africa,1,"Southern Africa",5,Namibian,"[{zoneName:'Africa\/Windhoek',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'WAST',tzName:'West Africa Summer Time'}]",-22.00000000,17.00000000,🇳🇦,"U+1F1F3 U+1F1E6"
153
+153,Nauru,NRU,NR,520,674,Yaren,AUD,"Australian dollar",$,.nr,Nauru,Oceania,5,Micronesia,21,Nauruan,"[{zoneName:'Pacific\/Nauru',gmtOffset:43200,gmtOffsetName:'UTC+12:00',abbreviation:'NRT',tzName:'Nauru Time'}]",-0.53333333,166.91666666,🇳🇷,"U+1F1F3 U+1F1F7"
154
+154,Nepal,NPL,NP,524,977,Kathmandu,NPR,"Nepalese rupee",₨,.np,नपल,Asia,3,"Southern Asia",14,"Nepali, Nepalese","[{zoneName:'Asia\/Kathmandu',gmtOffset:20700,gmtOffsetName:'UTC+05:45',abbreviation:'NPT',tzName:'Nepal Time'}]",28.00000000,84.00000000,🇳🇵,"U+1F1F3 U+1F1F5"
155
+156,Netherlands,NLD,NL,528,31,Amsterdam,EUR,Euro,€,.nl,Nederland,Europe,4,"Western Europe",17,"Dutch, Netherlandic","[{zoneName:'Europe\/Amsterdam',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'}]",52.50000000,5.75000000,🇳🇱,"U+1F1F3 U+1F1F1"
156
+157,"New Caledonia",NCL,NC,540,687,Noumea,XPF,"CFP franc",₣,.nc,Nouvelle-Calédonie,Oceania,5,Melanesia,20,"New Caledonian","[{zoneName:'Pacific\/Noumea',gmtOffset:39600,gmtOffsetName:'UTC+11:00',abbreviation:'NCT',tzName:'New Caledonia Time'}]",-21.50000000,165.50000000,🇳🇨,"U+1F1F3 U+1F1E8"
157
+158,"New Zealand",NZL,NZ,554,64,Wellington,NZD,"New Zealand dollar",$,.nz,"New Zealand",Oceania,5,"Australia and New Zealand",19,"New Zealand, NZ","[{zoneName:'Pacific\/Auckland',gmtOffset:46800,gmtOffsetName:'UTC+13:00',abbreviation:'NZDT',tzName:'New Zealand Daylight Time'},{zoneName:'Pacific\/Chatham',gmtOffset:49500,gmtOffsetName:'UTC+13:45',abbreviation:'CHAST',tzName:'Chatham Standard Time'}]",-41.00000000,174.00000000,🇳🇿,"U+1F1F3 U+1F1FF"
158
+159,Nicaragua,NIC,NI,558,505,Managua,NIO,"Nicaraguan córdoba",C$,.ni,Nicaragua,Americas,2,"Central America",9,Nicaraguan,"[{zoneName:'America\/Managua',gmtOffset:-21600,gmtOffsetName:'UTC-06:00',abbreviation:'CST',tzName:'Central Standard Time (North America'}]",13.00000000,-85.00000000,🇳🇮,"U+1F1F3 U+1F1EE"
159
+160,Niger,NER,NE,562,227,Niamey,XOF,"West African CFA franc",CFA,.ne,Niger,Africa,1,"Western Africa",3,Nigerien,"[{zoneName:'Africa\/Niamey',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'WAT',tzName:'West Africa Time'}]",16.00000000,8.00000000,🇳🇪,"U+1F1F3 U+1F1EA"
160
+161,Nigeria,NGA,NG,566,234,Abuja,NGN,"Nigerian naira",₦,.ng,Nigeria,Africa,1,"Western Africa",3,Nigerian,"[{zoneName:'Africa\/Lagos',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'WAT',tzName:'West Africa Time'}]",10.00000000,8.00000000,🇳🇬,"U+1F1F3 U+1F1EC"
161
+162,Niue,NIU,NU,570,683,Alofi,NZD,"New Zealand dollar",$,.nu,Niuē,Oceania,5,Polynesia,22,Niuean,"[{zoneName:'Pacific\/Niue',gmtOffset:-39600,gmtOffsetName:'UTC-11:00',abbreviation:'NUT',tzName:'Niue Time'}]",-19.03333333,-169.86666666,🇳🇺,"U+1F1F3 U+1F1FA"
162
+163,"Norfolk Island",NFK,NF,574,672,Kingston,AUD,"Australian dollar",$,.nf,"Norfolk Island",Oceania,5,"Australia and New Zealand",19,"Norfolk Island","[{zoneName:'Pacific\/Norfolk',gmtOffset:43200,gmtOffsetName:'UTC+12:00',abbreviation:'NFT',tzName:'Norfolk Time'}]",-29.03333333,167.95000000,🇳🇫,"U+1F1F3 U+1F1EB"
163
+115,"North Korea",PRK,KP,408,850,Pyongyang,KPW,"North Korean Won",₩,.kp,북한,Asia,3,"Eastern Asia",12,"North Korean","[{zoneName:'Asia\/Pyongyang',gmtOffset:32400,gmtOffsetName:'UTC+09:00',abbreviation:'KST',tzName:'Korea Standard Time'}]",40.00000000,127.00000000,🇰🇵,"U+1F1F0 U+1F1F5"
164
+129,"North Macedonia",MKD,MK,807,389,Skopje,MKD,Denar,ден,.mk,"Северна Македонија",Europe,4,"Southern Europe",16,Macedonian,"[{zoneName:'Europe\/Skopje',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'}]",41.83333333,22.00000000,🇲🇰,"U+1F1F2 U+1F1F0"
165
+164,"Northern Mariana Islands",MNP,MP,580,+1-670,Saipan,USD,"United States dollar",$,.mp,"Northern Mariana Islands",Oceania,5,Micronesia,21,"Northern Marianan","[{zoneName:'Pacific\/Saipan',gmtOffset:36000,gmtOffsetName:'UTC+10:00',abbreviation:'ChST',tzName:'Chamorro Standard Time'}]",15.20000000,145.75000000,🇲🇵,"U+1F1F2 U+1F1F5"
166
+165,Norway,NOR,NO,578,47,Oslo,NOK,"Norwegian krone",kr,.no,Norge,Europe,4,"Northern Europe",18,Norwegian,"[{zoneName:'Europe\/Oslo',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'}]",62.00000000,10.00000000,🇳🇴,"U+1F1F3 U+1F1F4"
167
+166,Oman,OMN,OM,512,968,Muscat,OMR,"Omani rial",.ع.ر,.om,عمان,Asia,3,"Western Asia",11,Omani,"[{zoneName:'Asia\/Muscat',gmtOffset:14400,gmtOffsetName:'UTC+04:00',abbreviation:'GST',tzName:'Gulf Standard Time'}]",21.00000000,57.00000000,🇴🇲,"U+1F1F4 U+1F1F2"
168
+167,Pakistan,PAK,PK,586,92,Islamabad,PKR,"Pakistani rupee",₨,.pk,Pakistan,Asia,3,"Southern Asia",14,Pakistani,"[{zoneName:'Asia\/Karachi',gmtOffset:18000,gmtOffsetName:'UTC+05:00',abbreviation:'PKT',tzName:'Pakistan Standard Time'}]",30.00000000,70.00000000,🇵🇰,"U+1F1F5 U+1F1F0"
169
+168,Palau,PLW,PW,585,680,Melekeok,USD,"United States dollar",$,.pw,Palau,Oceania,5,Micronesia,21,Palauan,"[{zoneName:'Pacific\/Palau',gmtOffset:32400,gmtOffsetName:'UTC+09:00',abbreviation:'PWT',tzName:'Palau Time'}]",7.50000000,134.50000000,🇵🇼,"U+1F1F5 U+1F1FC"
170
+169,"Palestinian Territory Occupied",PSE,PS,275,970,"East Jerusalem",ILS,"Israeli new shekel",₪,.ps,فلسطين,Asia,3,"Western Asia",11,Palestinian,"[{zoneName:'Asia\/Gaza',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'EET',tzName:'Eastern European Time'},{zoneName:'Asia\/Hebron',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'EET',tzName:'Eastern European Time'}]",31.90000000,35.20000000,🇵🇸,"U+1F1F5 U+1F1F8"
171
+170,Panama,PAN,PA,591,507,"Panama City",PAB,"Panamanian balboa",B/.,.pa,Panamá,Americas,2,"Central America",9,Panamanian,"[{zoneName:'America\/Panama',gmtOffset:-18000,gmtOffsetName:'UTC-05:00',abbreviation:'EST',tzName:'Eastern Standard Time (North America'}]",9.00000000,-80.00000000,🇵🇦,"U+1F1F5 U+1F1E6"
172
+171,"Papua new Guinea",PNG,PG,598,675,"Port Moresby",PGK,"Papua New Guinean kina",K,.pg,"Papua Niugini",Oceania,5,Melanesia,20,"Papua New Guinean, Papuan","[{zoneName:'Pacific\/Bougainville',gmtOffset:39600,gmtOffsetName:'UTC+11:00',abbreviation:'BST',tzName:'Bougainville Standard Time[6'},{zoneName:'Pacific\/Port_Moresby',gmtOffset:36000,gmtOffsetName:'UTC+10:00',abbreviation:'PGT',tzName:'Papua New Guinea Time'}]",-6.00000000,147.00000000,🇵🇬,"U+1F1F5 U+1F1EC"
173
+172,Paraguay,PRY,PY,600,595,Asuncion,PYG,"Paraguayan guarani",₲,.py,Paraguay,Americas,2,"South America",8,Paraguayan,"[{zoneName:'America\/Asuncion',gmtOffset:-10800,gmtOffsetName:'UTC-03:00',abbreviation:'PYST',tzName:'Paraguay Summer Time'}]",-23.00000000,-58.00000000,🇵🇾,"U+1F1F5 U+1F1FE"
174
+173,Peru,PER,PE,604,51,Lima,PEN,"Peruvian sol",S/.,.pe,Perú,Americas,2,"South America",8,Peruvian,"[{zoneName:'America\/Lima',gmtOffset:-18000,gmtOffsetName:'UTC-05:00',abbreviation:'PET',tzName:'Peru Time'}]",-10.00000000,-76.00000000,🇵🇪,"U+1F1F5 U+1F1EA"
175
+174,Philippines,PHL,PH,608,63,Manila,PHP,"Philippine peso",₱,.ph,Pilipinas,Asia,3,"South-Eastern Asia",13,"Philippine, Filipino","[{zoneName:'Asia\/Manila',gmtOffset:28800,gmtOffsetName:'UTC+08:00',abbreviation:'PHT',tzName:'Philippine Time'}]",13.00000000,122.00000000,🇵🇭,"U+1F1F5 U+1F1ED"
176
+175,"Pitcairn Island",PCN,PN,612,870,Adamstown,NZD,"New Zealand dollar",$,.pn,"Pitcairn Islands",Oceania,5,Polynesia,22,"Pitcairn Island","[{zoneName:'Pacific\/Pitcairn',gmtOffset:-28800,gmtOffsetName:'UTC-08:00',abbreviation:'PST',tzName:'Pacific Standard Time (North America'}]",-25.06666666,-130.10000000,🇵🇳,"U+1F1F5 U+1F1F3"
177
+176,Poland,POL,PL,616,48,Warsaw,PLN,"Polish złoty",zł,.pl,Polska,Europe,4,"Eastern Europe",15,Polish,"[{zoneName:'Europe\/Warsaw',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'}]",52.00000000,20.00000000,🇵🇱,"U+1F1F5 U+1F1F1"
178
+177,Portugal,PRT,PT,620,351,Lisbon,EUR,Euro,€,.pt,Portugal,Europe,4,"Southern Europe",16,Portuguese,"[{zoneName:'Atlantic\/Azores',gmtOffset:-3600,gmtOffsetName:'UTC-01:00',abbreviation:'AZOT',tzName:'Azores Standard Time'},{zoneName:'Atlantic\/Madeira',gmtOffset:0,gmtOffsetName:'UTC\u00b100',abbreviation:'WET',tzName:'Western European Time'},{zoneName:'Europe\/Lisbon',gmtOffset:0,gmtOffsetName:'UTC\u00b100',abbreviation:'WET',tzName:'Western European Time'}]",39.50000000,-8.00000000,🇵🇹,"U+1F1F5 U+1F1F9"
179
+178,"Puerto Rico",PRI,PR,630,"+1-787 and 1-939","San Juan",USD,"United States dollar",$,.pr,"Puerto Rico",Americas,2,Caribbean,7,"Puerto Rican","[{zoneName:'America\/Puerto_Rico',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'AST',tzName:'Atlantic Standard Time'}]",18.25000000,-66.50000000,🇵🇷,"U+1F1F5 U+1F1F7"
180
+179,Qatar,QAT,QA,634,974,Doha,QAR,"Qatari riyal",ق.ر,.qa,قطر,Asia,3,"Western Asia",11,Qatari,"[{zoneName:'Asia\/Qatar',gmtOffset:10800,gmtOffsetName:'UTC+03:00',abbreviation:'AST',tzName:'Arabia Standard Time'}]",25.50000000,51.25000000,🇶🇦,"U+1F1F6 U+1F1E6"
181
+180,Reunion,REU,RE,638,262,Saint-Denis,EUR,Euro,€,.re,"La Réunion",Africa,1,"Eastern Africa",4,"Reunionese, Reunionnais","[{zoneName:'Indian\/Reunion',gmtOffset:14400,gmtOffsetName:'UTC+04:00',abbreviation:'RET',tzName:'R\u00e9union Time'}]",-21.15000000,55.50000000,🇷🇪,"U+1F1F7 U+1F1EA"
182
+181,Romania,ROU,RO,642,40,Bucharest,RON,"Romanian leu",lei,.ro,România,Europe,4,"Eastern Europe",15,Romanian,"[{zoneName:'Europe\/Bucharest',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'EET',tzName:'Eastern European Time'}]",46.00000000,25.00000000,🇷🇴,"U+1F1F7 U+1F1F4"
183
+182,Russia,RUS,RU,643,7,Moscow,RUB,"Russian ruble",₽,.ru,Россия,Europe,4,"Eastern Europe",15,Russian,"[{zoneName:'Asia\/Anadyr',gmtOffset:43200,gmtOffsetName:'UTC+12:00',abbreviation:'ANAT',tzName:'Anadyr Time[4'},{zoneName:'Asia\/Barnaul',gmtOffset:25200,gmtOffsetName:'UTC+07:00',abbreviation:'KRAT',tzName:'Krasnoyarsk Time'},{zoneName:'Asia\/Chita',gmtOffset:32400,gmtOffsetName:'UTC+09:00',abbreviation:'YAKT',tzName:'Yakutsk Time'},{zoneName:'Asia\/Irkutsk',gmtOffset:28800,gmtOffsetName:'UTC+08:00',abbreviation:'IRKT',tzName:'Irkutsk Time'},{zoneName:'Asia\/Kamchatka',gmtOffset:43200,gmtOffsetName:'UTC+12:00',abbreviation:'PETT',tzName:'Kamchatka Time'},{zoneName:'Asia\/Khandyga',gmtOffset:32400,gmtOffsetName:'UTC+09:00',abbreviation:'YAKT',tzName:'Yakutsk Time'},{zoneName:'Asia\/Krasnoyarsk',gmtOffset:25200,gmtOffsetName:'UTC+07:00',abbreviation:'KRAT',tzName:'Krasnoyarsk Time'},{zoneName:'Asia\/Magadan',gmtOffset:39600,gmtOffsetName:'UTC+11:00',abbreviation:'MAGT',tzName:'Magadan Time'},{zoneName:'Asia\/Novokuznetsk',gmtOffset:25200,gmtOffsetName:'UTC+07:00',abbreviation:'KRAT',tzName:'Krasnoyarsk Time'},{zoneName:'Asia\/Novosibirsk',gmtOffset:25200,gmtOffsetName:'UTC+07:00',abbreviation:'NOVT',tzName:'Novosibirsk Time'},{zoneName:'Asia\/Omsk',gmtOffset:21600,gmtOffsetName:'UTC+06:00',abbreviation:'OMST',tzName:'Omsk Time'},{zoneName:'Asia\/Sakhalin',gmtOffset:39600,gmtOffsetName:'UTC+11:00',abbreviation:'SAKT',tzName:'Sakhalin Island Time'},{zoneName:'Asia\/Srednekolymsk',gmtOffset:39600,gmtOffsetName:'UTC+11:00',abbreviation:'SRET',tzName:'Srednekolymsk Time'},{zoneName:'Asia\/Tomsk',gmtOffset:25200,gmtOffsetName:'UTC+07:00',abbreviation:'MSD+3',tzName:'Moscow Daylight Time+3'},{zoneName:'Asia\/Ust-Nera',gmtOffset:36000,gmtOffsetName:'UTC+10:00',abbreviation:'VLAT',tzName:'Vladivostok Time'},{zoneName:'Asia\/Vladivostok',gmtOffset:36000,gmtOffsetName:'UTC+10:00',abbreviation:'VLAT',tzName:'Vladivostok Time'},{zoneName:'Asia\/Yakutsk',gmtOffset:32400,gmtOffsetName:'UTC+09:00',abbreviation:'YAKT',tzName:'Yakutsk Time'},{zoneName:'Asia\/Yekaterinburg',gmtOffset:18000,gmtOffsetName:'UTC+05:00',abbreviation:'YEKT',tzName:'Yekaterinburg Time'},{zoneName:'Europe\/Astrakhan',gmtOffset:14400,gmtOffsetName:'UTC+04:00',abbreviation:'SAMT',tzName:'Samara Time'},{zoneName:'Europe\/Kaliningrad',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'EET',tzName:'Eastern European Time'},{zoneName:'Europe\/Kirov',gmtOffset:10800,gmtOffsetName:'UTC+03:00',abbreviation:'MSK',tzName:'Moscow Time'},{zoneName:'Europe\/Moscow',gmtOffset:10800,gmtOffsetName:'UTC+03:00',abbreviation:'MSK',tzName:'Moscow Time'},{zoneName:'Europe\/Samara',gmtOffset:14400,gmtOffsetName:'UTC+04:00',abbreviation:'SAMT',tzName:'Samara Time'},{zoneName:'Europe\/Saratov',gmtOffset:14400,gmtOffsetName:'UTC+04:00',abbreviation:'MSD',tzName:'Moscow Daylight Time+4'},{zoneName:'Europe\/Ulyanovsk',gmtOffset:14400,gmtOffsetName:'UTC+04:00',abbreviation:'SAMT',tzName:'Samara Time'},{zoneName:'Europe\/Volgograd',gmtOffset:14400,gmtOffsetName:'UTC+04:00',abbreviation:'MSK',tzName:'Moscow Standard Time'}]",60.00000000,100.00000000,🇷🇺,"U+1F1F7 U+1F1FA"
184
+183,Rwanda,RWA,RW,646,250,Kigali,RWF,"Rwandan franc",FRw,.rw,Rwanda,Africa,1,"Eastern Africa",4,Rwandan,"[{zoneName:'Africa\/Kigali',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'CAT',tzName:'Central Africa Time'}]",-2.00000000,30.00000000,🇷🇼,"U+1F1F7 U+1F1FC"
185
+184,"Saint Helena",SHN,SH,654,290,Jamestown,SHP,"Saint Helena pound",£,.sh,"Saint Helena",Africa,1,"Western Africa",3,"Saint Helenian","[{zoneName:'Atlantic\/St_Helena',gmtOffset:0,gmtOffsetName:'UTC\u00b100',abbreviation:'GMT',tzName:'Greenwich Mean Time'}]",-15.95000000,-5.70000000,🇸🇭,"U+1F1F8 U+1F1ED"
186
+185,"Saint Kitts And Nevis",KNA,KN,659,+1-869,Basseterre,XCD,"Eastern Caribbean dollar",$,.kn,"Saint Kitts and Nevis",Americas,2,Caribbean,7,"Kittitian or Nevisian","[{zoneName:'America\/St_Kitts',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'AST',tzName:'Atlantic Standard Time'}]",17.33333333,-62.75000000,🇰🇳,"U+1F1F0 U+1F1F3"
187
+186,"Saint Lucia",LCA,LC,662,+1-758,Castries,XCD,"Eastern Caribbean dollar",$,.lc,"Saint Lucia",Americas,2,Caribbean,7,"Saint Lucian","[{zoneName:'America\/St_Lucia',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'AST',tzName:'Atlantic Standard Time'}]",13.88333333,-60.96666666,🇱🇨,"U+1F1F1 U+1F1E8"
188
+187,"Saint Pierre and Miquelon",SPM,PM,666,508,Saint-Pierre,EUR,Euro,€,.pm,Saint-Pierre-et-Miquelon,Americas,2,"Northern America",6,"Saint-Pierrais or Miquelonnais","[{zoneName:'America\/Miquelon',gmtOffset:-10800,gmtOffsetName:'UTC-03:00',abbreviation:'PMDT',tzName:'Pierre & Miquelon Daylight Time'}]",46.83333333,-56.33333333,🇵🇲,"U+1F1F5 U+1F1F2"
189
+188,"Saint Vincent And The Grenadines",VCT,VC,670,+1-784,Kingstown,XCD,"Eastern Caribbean dollar",$,.vc,"Saint Vincent and the Grenadines",Americas,2,Caribbean,7,"Saint Vincentian, Vincentian","[{zoneName:'America\/St_Vincent',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'AST',tzName:'Atlantic Standard Time'}]",13.25000000,-61.20000000,🇻🇨,"U+1F1FB U+1F1E8"
190
+189,Saint-Barthelemy,BLM,BL,652,590,Gustavia,EUR,Euro,€,.bl,Saint-Barthélemy,Americas,2,Caribbean,7,Barthelemois,"[{zoneName:'America\/St_Barthelemy',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'AST',tzName:'Atlantic Standard Time'}]",18.50000000,-63.41666666,🇧🇱,"U+1F1E7 U+1F1F1"
191
+190,"Saint-Martin (French part)",MAF,MF,663,590,Marigot,EUR,Euro,€,.mf,Saint-Martin,Americas,2,Caribbean,7,Saint-Martinoise,"[{zoneName:'America\/Marigot',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'AST',tzName:'Atlantic Standard Time'}]",18.08333333,-63.95000000,🇲🇫,"U+1F1F2 U+1F1EB"
192
+191,Samoa,WSM,WS,882,685,Apia,WST,"Samoan tālā",SAT,.ws,Samoa,Oceania,5,Polynesia,22,Samoan,"[{zoneName:'Pacific\/Apia',gmtOffset:50400,gmtOffsetName:'UTC+14:00',abbreviation:'WST',tzName:'West Samoa Time'}]",-13.58333333,-172.33333333,🇼🇸,"U+1F1FC U+1F1F8"
193
+192,"San Marino",SMR,SM,674,378,"San Marino",EUR,Euro,€,.sm,"San Marino",Europe,4,"Southern Europe",16,Sammarinese,"[{zoneName:'Europe\/San_Marino',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'}]",43.76666666,12.41666666,🇸🇲,"U+1F1F8 U+1F1F2"
194
+193,"Sao Tome and Principe",STP,ST,678,239,"Sao Tome",STD,Dobra,Db,.st,"São Tomé e Príncipe",Africa,1,"Middle Africa",2,"Sao Tomean","[{zoneName:'Africa\/Sao_Tome',gmtOffset:0,gmtOffsetName:'UTC\u00b100',abbreviation:'GMT',tzName:'Greenwich Mean Time'}]",1.00000000,7.00000000,🇸🇹,"U+1F1F8 U+1F1F9"
195
+194,"Saudi Arabia",SAU,SA,682,966,Riyadh,SAR,"Saudi riyal",﷼,.sa,"المملكة العربية السعودية",Asia,3,"Western Asia",11,"Saudi, Saudi Arabian","[{zoneName:'Asia\/Riyadh',gmtOffset:10800,gmtOffsetName:'UTC+03:00',abbreviation:'AST',tzName:'Arabia Standard Time'}]",25.00000000,45.00000000,🇸🇦,"U+1F1F8 U+1F1E6"
196
+195,Senegal,SEN,SN,686,221,Dakar,XOF,"West African CFA franc",CFA,.sn,Sénégal,Africa,1,"Western Africa",3,Senegalese,"[{zoneName:'Africa\/Dakar',gmtOffset:0,gmtOffsetName:'UTC\u00b100',abbreviation:'GMT',tzName:'Greenwich Mean Time'}]",14.00000000,-14.00000000,🇸🇳,"U+1F1F8 U+1F1F3"
197
+196,Serbia,SRB,RS,688,381,Belgrade,RSD,"Serbian dinar",din,.rs,Србија,Europe,4,"Southern Europe",16,Serbian,"[{zoneName:'Europe\/Belgrade',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'}]",44.00000000,21.00000000,🇷🇸,"U+1F1F7 U+1F1F8"
198
+197,Seychelles,SYC,SC,690,248,Victoria,SCR,"Seychellois rupee",SRe,.sc,Seychelles,Africa,1,"Eastern Africa",4,Seychellois,"[{zoneName:'Indian\/Mahe',gmtOffset:14400,gmtOffsetName:'UTC+04:00',abbreviation:'SCT',tzName:'Seychelles Time'}]",-4.58333333,55.66666666,🇸🇨,"U+1F1F8 U+1F1E8"
199
+198,"Sierra Leone",SLE,SL,694,232,Freetown,SLL,"Sierra Leonean leone",Le,.sl,"Sierra Leone",Africa,1,"Western Africa",3,"Sierra Leonean","[{zoneName:'Africa\/Freetown',gmtOffset:0,gmtOffsetName:'UTC\u00b100',abbreviation:'GMT',tzName:'Greenwich Mean Time'}]",8.50000000,-11.50000000,🇸🇱,"U+1F1F8 U+1F1F1"
200
+199,Singapore,SGP,SG,702,65,Singapur,SGD,"Singapore dollar",$,.sg,Singapore,Asia,3,"South-Eastern Asia",13,Singaporean,"[{zoneName:'Asia\/Singapore',gmtOffset:28800,gmtOffsetName:'UTC+08:00',abbreviation:'SGT',tzName:'Singapore Time'}]",1.36666666,103.80000000,🇸🇬,"U+1F1F8 U+1F1EC"
201
+250,"Sint Maarten (Dutch part)",SXM,SX,534,1721,Philipsburg,ANG,"Netherlands Antillean guilder",ƒ,.sx,"Sint Maarten",Americas,2,Caribbean,7,"Sint Maarten","[{zoneName:'America\/Anguilla',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'AST',tzName:'Atlantic Standard Time'}]",18.03333300,-63.05000000,🇸🇽,"U+1F1F8 U+1F1FD"
202
+200,Slovakia,SVK,SK,703,421,Bratislava,EUR,Euro,€,.sk,Slovensko,Europe,4,"Eastern Europe",15,Slovak,"[{zoneName:'Europe\/Bratislava',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'}]",48.66666666,19.50000000,🇸🇰,"U+1F1F8 U+1F1F0"
203
+201,Slovenia,SVN,SI,705,386,Ljubljana,EUR,Euro,€,.si,Slovenija,Europe,4,"Southern Europe",16,"Slovenian, Slovene","[{zoneName:'Europe\/Ljubljana',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'}]",46.11666666,14.81666666,🇸🇮,"U+1F1F8 U+1F1EE"
204
+202,"Solomon Islands",SLB,SB,090,677,Honiara,SBD,"Solomon Islands dollar",Si$,.sb,"Solomon Islands",Oceania,5,Melanesia,20,"Solomon Island","[{zoneName:'Pacific\/Guadalcanal',gmtOffset:39600,gmtOffsetName:'UTC+11:00',abbreviation:'SBT',tzName:'Solomon Islands Time'}]",-8.00000000,159.00000000,🇸🇧,"U+1F1F8 U+1F1E7"
205
+203,Somalia,SOM,SO,706,252,Mogadishu,SOS,"Somali shilling",Sh.so.,.so,Soomaaliya,Africa,1,"Eastern Africa",4,"Somali, Somalian","[{zoneName:'Africa\/Mogadishu',gmtOffset:10800,gmtOffsetName:'UTC+03:00',abbreviation:'EAT',tzName:'East Africa Time'}]",10.00000000,49.00000000,🇸🇴,"U+1F1F8 U+1F1F4"
206
+204,"South Africa",ZAF,ZA,710,27,Pretoria,ZAR,"South African rand",R,.za,"South Africa",Africa,1,"Southern Africa",5,"South African","[{zoneName:'Africa\/Johannesburg',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'SAST',tzName:'South African Standard Time'}]",-29.00000000,24.00000000,🇿🇦,"U+1F1FF U+1F1E6"
207
+205,"South Georgia",SGS,GS,239,500,Grytviken,GBP,"British pound",£,.gs,"South Georgia",Americas,2,"South America",8,"South Georgia or South Sandwich Islands","[{zoneName:'Atlantic\/South_Georgia',gmtOffset:-7200,gmtOffsetName:'UTC-02:00',abbreviation:'GST',tzName:'South Georgia and the South Sandwich Islands Time'}]",-54.50000000,-37.00000000,🇬🇸,"U+1F1EC U+1F1F8"
208
+116,"South Korea",KOR,KR,410,82,Seoul,KRW,Won,₩,.kr,대한민국,Asia,3,"Eastern Asia",12,"South Korean","[{zoneName:'Asia\/Seoul',gmtOffset:32400,gmtOffsetName:'UTC+09:00',abbreviation:'KST',tzName:'Korea Standard Time'}]",37.00000000,127.50000000,🇰🇷,"U+1F1F0 U+1F1F7"
209
+206,"South Sudan",SSD,SS,728,211,Juba,SSP,"South Sudanese pound",£,.ss,"South Sudan",Africa,1,"Middle Africa",2,"South Sudanese","[{zoneName:'Africa\/Juba',gmtOffset:10800,gmtOffsetName:'UTC+03:00',abbreviation:'EAT',tzName:'East Africa Time'}]",7.00000000,30.00000000,🇸🇸,"U+1F1F8 U+1F1F8"
210
+207,Spain,ESP,ES,724,34,Madrid,EUR,Euro,€,.es,España,Europe,4,"Southern Europe",16,Spanish,"[{zoneName:'Africa\/Ceuta',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'},{zoneName:'Atlantic\/Canary',gmtOffset:0,gmtOffsetName:'UTC\u00b100',abbreviation:'WET',tzName:'Western European Time'},{zoneName:'Europe\/Madrid',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'}]",40.00000000,-4.00000000,🇪🇸,"U+1F1EA U+1F1F8"
211
+208,"Sri Lanka",LKA,LK,144,94,Colombo,LKR,"Sri Lankan rupee",Rs,.lk,"śrī laṃkāva",Asia,3,"Southern Asia",14,"Sri Lankan","[{zoneName:'Asia\/Colombo',gmtOffset:19800,gmtOffsetName:'UTC+05:30',abbreviation:'IST',tzName:'Indian Standard Time'}]",7.00000000,81.00000000,🇱🇰,"U+1F1F1 U+1F1F0"
212
+209,Sudan,SDN,SD,729,249,Khartoum,SDG,"Sudanese pound",.س.ج,.sd,السودان,Africa,1,"Northern Africa",1,Sudanese,"[{zoneName:'Africa\/Khartoum',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'EAT',tzName:'Eastern African Time'}]",15.00000000,30.00000000,🇸🇩,"U+1F1F8 U+1F1E9"
213
+210,Suriname,SUR,SR,740,597,Paramaribo,SRD,"Surinamese dollar",$,.sr,Suriname,Americas,2,"South America",8,Surinamese,"[{zoneName:'America\/Paramaribo',gmtOffset:-10800,gmtOffsetName:'UTC-03:00',abbreviation:'SRT',tzName:'Suriname Time'}]",4.00000000,-56.00000000,🇸🇷,"U+1F1F8 U+1F1F7"
214
+211,"Svalbard And Jan Mayen Islands",SJM,SJ,744,47,Longyearbyen,NOK,"Norwegian Krone",kr,.sj,"Svalbard og Jan Mayen",Europe,4,"Northern Europe",18,Svalbard,"[{zoneName:'Arctic\/Longyearbyen',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'}]",78.00000000,20.00000000,🇸🇯,"U+1F1F8 U+1F1EF"
215
+212,Swaziland,SWZ,SZ,748,268,Mbabane,SZL,Lilangeni,E,.sz,Swaziland,Africa,1,"Southern Africa",5,Swazi,"[{zoneName:'Africa\/Mbabane',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'SAST',tzName:'South African Standard Time'}]",-26.50000000,31.50000000,🇸🇿,"U+1F1F8 U+1F1FF"
216
+213,Sweden,SWE,SE,752,46,Stockholm,SEK,"Swedish krona",kr,.se,Sverige,Europe,4,"Northern Europe",18,Swedish,"[{zoneName:'Europe\/Stockholm',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'}]",62.00000000,15.00000000,🇸🇪,"U+1F1F8 U+1F1EA"
217
+214,Switzerland,CHE,CH,756,41,Bern,CHF,"Swiss franc",CHf,.ch,Schweiz,Europe,4,"Western Europe",17,Swiss,"[{zoneName:'Europe\/Zurich',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'}]",47.00000000,8.00000000,🇨🇭,"U+1F1E8 U+1F1ED"
218
+215,Syria,SYR,SY,760,963,Damascus,SYP,"Syrian pound",LS,.sy,سوريا,Asia,3,"Western Asia",11,Syrian,"[{zoneName:'Asia\/Damascus',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'EET',tzName:'Eastern European Time'}]",35.00000000,38.00000000,🇸🇾,"U+1F1F8 U+1F1FE"
219
+216,Taiwan,TWN,TW,158,886,Taipei,TWD,"New Taiwan dollar",$,.tw,臺灣,Asia,3,"Eastern Asia",12,"Chinese, Taiwanese","[{zoneName:'Asia\/Taipei',gmtOffset:28800,gmtOffsetName:'UTC+08:00',abbreviation:'CST',tzName:'China Standard Time'}]",23.50000000,121.00000000,🇹🇼,"U+1F1F9 U+1F1FC"
220
+217,Tajikistan,TJK,TJ,762,992,Dushanbe,TJS,"Tajikistani somoni",SM,.tj,Тоҷикистон,Asia,3,"Central Asia",10,Tajikistani,"[{zoneName:'Asia\/Dushanbe',gmtOffset:18000,gmtOffsetName:'UTC+05:00',abbreviation:'TJT',tzName:'Tajikistan Time'}]",39.00000000,71.00000000,🇹🇯,"U+1F1F9 U+1F1EF"
221
+218,Tanzania,TZA,TZ,834,255,Dodoma,TZS,"Tanzanian shilling",TSh,.tz,Tanzania,Africa,1,"Eastern Africa",4,Tanzanian,"[{zoneName:'Africa\/Dar_es_Salaam',gmtOffset:10800,gmtOffsetName:'UTC+03:00',abbreviation:'EAT',tzName:'East Africa Time'}]",-6.00000000,35.00000000,🇹🇿,"U+1F1F9 U+1F1FF"
222
+219,Thailand,THA,TH,764,66,Bangkok,THB,"Thai baht",฿,.th,ประเทศไทย,Asia,3,"South-Eastern Asia",13,Thai,"[{zoneName:'Asia\/Bangkok',gmtOffset:25200,gmtOffsetName:'UTC+07:00',abbreviation:'ICT',tzName:'Indochina Time'}]",15.00000000,100.00000000,🇹🇭,"U+1F1F9 U+1F1ED"
223
+17,"The Bahamas",BHS,BS,044,+1-242,Nassau,BSD,"Bahamian dollar",B$,.bs,Bahamas,Americas,2,Caribbean,7,Bahamian,"[{zoneName:'America\/Nassau',gmtOffset:-18000,gmtOffsetName:'UTC-05:00',abbreviation:'EST',tzName:'Eastern Standard Time (North America)'}]",24.25000000,-76.00000000,🇧🇸,"U+1F1E7 U+1F1F8"
224
+220,Togo,TGO,TG,768,228,Lome,XOF,"West African CFA franc",CFA,.tg,Togo,Africa,1,"Western Africa",3,Togolese,"[{zoneName:'Africa\/Lome',gmtOffset:0,gmtOffsetName:'UTC\u00b100',abbreviation:'GMT',tzName:'Greenwich Mean Time'}]",8.00000000,1.16666666,🇹🇬,"U+1F1F9 U+1F1EC"
225
+221,Tokelau,TKL,TK,772,690,,NZD,"New Zealand dollar",$,.tk,Tokelau,Oceania,5,Polynesia,22,Tokelauan,"[{zoneName:'Pacific\/Fakaofo',gmtOffset:46800,gmtOffsetName:'UTC+13:00',abbreviation:'TKT',tzName:'Tokelau Time'}]",-9.00000000,-172.00000000,🇹🇰,"U+1F1F9 U+1F1F0"
226
+222,Tonga,TON,TO,776,676,Nuku'alofa,TOP,"Tongan paʻanga",$,.to,Tonga,Oceania,5,Polynesia,22,Tongan,"[{zoneName:'Pacific\/Tongatapu',gmtOffset:46800,gmtOffsetName:'UTC+13:00',abbreviation:'TOT',tzName:'Tonga Time'}]",-20.00000000,-175.00000000,🇹🇴,"U+1F1F9 U+1F1F4"
227
+223,"Trinidad And Tobago",TTO,TT,780,+1-868,"Port of Spain",TTD,"Trinidad and Tobago dollar",$,.tt,"Trinidad and Tobago",Americas,2,Caribbean,7,"Trinidadian or Tobagonian","[{zoneName:'America\/Port_of_Spain',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'AST',tzName:'Atlantic Standard Time'}]",11.00000000,-61.00000000,🇹🇹,"U+1F1F9 U+1F1F9"
228
+224,Tunisia,TUN,TN,788,216,Tunis,TND,"Tunisian dinar",ت.د,.tn,تونس,Africa,1,"Northern Africa",1,Tunisian,"[{zoneName:'Africa\/Tunis',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'}]",34.00000000,9.00000000,🇹🇳,"U+1F1F9 U+1F1F3"
229
+225,Turkey,TUR,TR,792,90,Ankara,TRY,"Turkish lira",₺,.tr,Türkiye,Asia,3,"Western Asia",11,Turkish,"[{zoneName:'Europe\/Istanbul',gmtOffset:10800,gmtOffsetName:'UTC+03:00',abbreviation:'EET',tzName:'Eastern European Time'}]",39.00000000,35.00000000,🇹🇷,"U+1F1F9 U+1F1F7"
230
+226,Turkmenistan,TKM,TM,795,993,Ashgabat,TMT,"Turkmenistan manat",T,.tm,Türkmenistan,Asia,3,"Central Asia",10,Turkmen,"[{zoneName:'Asia\/Ashgabat',gmtOffset:18000,gmtOffsetName:'UTC+05:00',abbreviation:'TMT',tzName:'Turkmenistan Time'}]",40.00000000,60.00000000,🇹🇲,"U+1F1F9 U+1F1F2"
231
+227,"Turks And Caicos Islands",TCA,TC,796,+1-649,"Cockburn Town",USD,"United States dollar",$,.tc,"Turks and Caicos Islands",Americas,2,Caribbean,7,"Turks and Caicos Island","[{zoneName:'America\/Grand_Turk',gmtOffset:-18000,gmtOffsetName:'UTC-05:00',abbreviation:'EST',tzName:'Eastern Standard Time (North America'}]",21.75000000,-71.58333333,🇹🇨,"U+1F1F9 U+1F1E8"
232
+228,Tuvalu,TUV,TV,798,688,Funafuti,AUD,"Australian dollar",$,.tv,Tuvalu,Oceania,5,Polynesia,22,Tuvaluan,"[{zoneName:'Pacific\/Funafuti',gmtOffset:43200,gmtOffsetName:'UTC+12:00',abbreviation:'TVT',tzName:'Tuvalu Time'}]",-8.00000000,178.00000000,🇹🇻,"U+1F1F9 U+1F1FB"
233
+229,Uganda,UGA,UG,800,256,Kampala,UGX,"Ugandan shilling",USh,.ug,Uganda,Africa,1,"Eastern Africa",4,Ugandan,"[{zoneName:'Africa\/Kampala',gmtOffset:10800,gmtOffsetName:'UTC+03:00',abbreviation:'EAT',tzName:'East Africa Time'}]",1.00000000,32.00000000,🇺🇬,"U+1F1FA U+1F1EC"
234
+230,Ukraine,UKR,UA,804,380,Kyiv,UAH,"Ukrainian hryvnia",₴,.ua,Україна,Europe,4,"Eastern Europe",15,Ukrainian,"[{zoneName:'Europe\/Kiev',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'EET',tzName:'Eastern European Time'},{zoneName:'Europe\/Simferopol',gmtOffset:10800,gmtOffsetName:'UTC+03:00',abbreviation:'MSK',tzName:'Moscow Time'},{zoneName:'Europe\/Uzhgorod',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'EET',tzName:'Eastern European Time'},{zoneName:'Europe\/Zaporozhye',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'EET',tzName:'Eastern European Time'}]",49.00000000,32.00000000,🇺🇦,"U+1F1FA U+1F1E6"
235
+231,"United Arab Emirates",ARE,AE,784,971,"Abu Dhabi",AED,"United Arab Emirates dirham",إ.د,.ae,"دولة الإمارات العربية المتحدة",Asia,3,"Western Asia",11,"Emirati, Emirian, Emiri","[{zoneName:'Asia\/Dubai',gmtOffset:14400,gmtOffsetName:'UTC+04:00',abbreviation:'GST',tzName:'Gulf Standard Time'}]",24.00000000,54.00000000,🇦🇪,"U+1F1E6 U+1F1EA"
236
+232,"United Kingdom",GBR,GB,826,44,London,GBP,"British pound",£,.uk,"United Kingdom",Europe,4,"Northern Europe",18,"British, UK","[{zoneName:'Europe\/London',gmtOffset:0,gmtOffsetName:'UTC\u00b100',abbreviation:'GMT',tzName:'Greenwich Mean Time'}]",54.00000000,-2.00000000,🇬🇧,"U+1F1EC U+1F1E7"
237
+233,"United States",USA,US,840,1,Washington,USD,"United States dollar",$,.us,"United States",Americas,2,"Northern America",6,American,"[{zoneName:'America\/Adak',gmtOffset:-36000,gmtOffsetName:'UTC-10:00',abbreviation:'HST',tzName:'Hawaii\u2013Aleutian Standard Time'},{zoneName:'America\/Anchorage',gmtOffset:-32400,gmtOffsetName:'UTC-09:00',abbreviation:'AKST',tzName:'Alaska Standard Time'},{zoneName:'America\/Boise',gmtOffset:-25200,gmtOffsetName:'UTC-07:00',abbreviation:'MST',tzName:'Mountain Standard Time (North America'},{zoneName:'America\/Chicago',gmtOffset:-21600,gmtOffsetName:'UTC-06:00',abbreviation:'CST',tzName:'Central Standard Time (North America'},{zoneName:'America\/Denver',gmtOffset:-25200,gmtOffsetName:'UTC-07:00',abbreviation:'MST',tzName:'Mountain Standard Time (North America'},{zoneName:'America\/Detroit',gmtOffset:-18000,gmtOffsetName:'UTC-05:00',abbreviation:'EST',tzName:'Eastern Standard Time (North America'},{zoneName:'America\/Indiana\/Indianapolis',gmtOffset:-18000,gmtOffsetName:'UTC-05:00',abbreviation:'EST',tzName:'Eastern Standard Time (North America'},{zoneName:'America\/Indiana\/Knox',gmtOffset:-21600,gmtOffsetName:'UTC-06:00',abbreviation:'CST',tzName:'Central Standard Time (North America'},{zoneName:'America\/Indiana\/Marengo',gmtOffset:-18000,gmtOffsetName:'UTC-05:00',abbreviation:'EST',tzName:'Eastern Standard Time (North America'},{zoneName:'America\/Indiana\/Petersburg',gmtOffset:-18000,gmtOffsetName:'UTC-05:00',abbreviation:'EST',tzName:'Eastern Standard Time (North America'},{zoneName:'America\/Indiana\/Tell_City',gmtOffset:-21600,gmtOffsetName:'UTC-06:00',abbreviation:'CST',tzName:'Central Standard Time (North America'},{zoneName:'America\/Indiana\/Vevay',gmtOffset:-18000,gmtOffsetName:'UTC-05:00',abbreviation:'EST',tzName:'Eastern Standard Time (North America'},{zoneName:'America\/Indiana\/Vincennes',gmtOffset:-18000,gmtOffsetName:'UTC-05:00',abbreviation:'EST',tzName:'Eastern Standard Time (North America'},{zoneName:'America\/Indiana\/Winamac',gmtOffset:-18000,gmtOffsetName:'UTC-05:00',abbreviation:'EST',tzName:'Eastern Standard Time (North America'},{zoneName:'America\/Juneau',gmtOffset:-32400,gmtOffsetName:'UTC-09:00',abbreviation:'AKST',tzName:'Alaska Standard Time'},{zoneName:'America\/Kentucky\/Louisville',gmtOffset:-18000,gmtOffsetName:'UTC-05:00',abbreviation:'EST',tzName:'Eastern Standard Time (North America'},{zoneName:'America\/Kentucky\/Monticello',gmtOffset:-18000,gmtOffsetName:'UTC-05:00',abbreviation:'EST',tzName:'Eastern Standard Time (North America'},{zoneName:'America\/Los_Angeles',gmtOffset:-28800,gmtOffsetName:'UTC-08:00',abbreviation:'PST',tzName:'Pacific Standard Time (North America'},{zoneName:'America\/Menominee',gmtOffset:-21600,gmtOffsetName:'UTC-06:00',abbreviation:'CST',tzName:'Central Standard Time (North America'},{zoneName:'America\/Metlakatla',gmtOffset:-32400,gmtOffsetName:'UTC-09:00',abbreviation:'AKST',tzName:'Alaska Standard Time'},{zoneName:'America\/New_York',gmtOffset:-18000,gmtOffsetName:'UTC-05:00',abbreviation:'EST',tzName:'Eastern Standard Time (North America'},{zoneName:'America\/Nome',gmtOffset:-32400,gmtOffsetName:'UTC-09:00',abbreviation:'AKST',tzName:'Alaska Standard Time'},{zoneName:'America\/North_Dakota\/Beulah',gmtOffset:-21600,gmtOffsetName:'UTC-06:00',abbreviation:'CST',tzName:'Central Standard Time (North America'},{zoneName:'America\/North_Dakota\/Center',gmtOffset:-21600,gmtOffsetName:'UTC-06:00',abbreviation:'CST',tzName:'Central Standard Time (North America'},{zoneName:'America\/North_Dakota\/New_Salem',gmtOffset:-21600,gmtOffsetName:'UTC-06:00',abbreviation:'CST',tzName:'Central Standard Time (North America'},{zoneName:'America\/Phoenix',gmtOffset:-25200,gmtOffsetName:'UTC-07:00',abbreviation:'MST',tzName:'Mountain Standard Time (North America'},{zoneName:'America\/Sitka',gmtOffset:-32400,gmtOffsetName:'UTC-09:00',abbreviation:'AKST',tzName:'Alaska Standard Time'},{zoneName:'America\/Yakutat',gmtOffset:-32400,gmtOffsetName:'UTC-09:00',abbreviation:'AKST',tzName:'Alaska Standard Time'},{zoneName:'Pacific\/Honolulu',gmtOffset:-36000,gmtOffsetName:'UTC-10:00',abbreviation:'HST',tzName:'Hawaii\u2013Aleutian Standard Time'}]",38.00000000,-97.00000000,🇺🇸,"U+1F1FA U+1F1F8"
238
+234,"United States Minor Outlying Islands",UMI,UM,581,1,,USD,"United States dollar",$,.us,"United States Minor Outlying Islands",Americas,2,"Northern America",6,American,"[{zoneName:'Pacific\/Midway',gmtOffset:-39600,gmtOffsetName:'UTC-11:00',abbreviation:'SST',tzName:'Samoa Standard Time'},{zoneName:'Pacific\/Wake',gmtOffset:43200,gmtOffsetName:'UTC+12:00',abbreviation:'WAKT',tzName:'Wake Island Time'}]",0.00000000,0.00000000,🇺🇲,"U+1F1FA U+1F1F2"
239
+235,Uruguay,URY,UY,858,598,Montevideo,UYU,"Uruguayan peso",$,.uy,Uruguay,Americas,2,"South America",8,Uruguayan,"[{zoneName:'America\/Montevideo',gmtOffset:-10800,gmtOffsetName:'UTC-03:00',abbreviation:'UYT',tzName:'Uruguay Standard Time'}]",-33.00000000,-56.00000000,🇺🇾,"U+1F1FA U+1F1FE"
240
+236,Uzbekistan,UZB,UZ,860,998,Tashkent,UZS,"Uzbekistani soʻm",лв,.uz,O‘zbekiston,Asia,3,"Central Asia",10,"Uzbekistani, Uzbek","[{zoneName:'Asia\/Samarkand',gmtOffset:18000,gmtOffsetName:'UTC+05:00',abbreviation:'UZT',tzName:'Uzbekistan Time'},{zoneName:'Asia\/Tashkent',gmtOffset:18000,gmtOffsetName:'UTC+05:00',abbreviation:'UZT',tzName:'Uzbekistan Time'}]",41.00000000,64.00000000,🇺🇿,"U+1F1FA U+1F1FF"
241
+237,Vanuatu,VUT,VU,548,678,"Port Vila",VUV,"Vanuatu vatu",VT,.vu,Vanuatu,Oceania,5,Melanesia,20,"Ni-Vanuatu, Vanuatuan","[{zoneName:'Pacific\/Efate',gmtOffset:39600,gmtOffsetName:'UTC+11:00',abbreviation:'VUT',tzName:'Vanuatu Time'}]",-16.00000000,167.00000000,🇻🇺,"U+1F1FB U+1F1FA"
242
+238,"Vatican City State (Holy See)",VAT,VA,336,379,"Vatican City",EUR,Euro,€,.va,Vaticano,Europe,4,"Southern Europe",16,Vatican,"[{zoneName:'Europe\/Vatican',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'CET',tzName:'Central European Time'}]",41.90000000,12.45000000,🇻🇦,"U+1F1FB U+1F1E6"
243
+239,Venezuela,VEN,VE,862,58,Caracas,VES,Bolívar,Bs,.ve,Venezuela,Americas,2,"South America",8,Venezuelan,"[{zoneName:'America\/Caracas',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'VET',tzName:'Venezuelan Standard Time'}]",8.00000000,-66.00000000,🇻🇪,"U+1F1FB U+1F1EA"
244
+240,Vietnam,VNM,VN,704,84,Hanoi,VND,"Vietnamese đồng",₫,.vn,"Việt Nam",Asia,3,"South-Eastern Asia",13,Vietnamese,"[{zoneName:'Asia\/Ho_Chi_Minh',gmtOffset:25200,gmtOffsetName:'UTC+07:00',abbreviation:'ICT',tzName:'Indochina Time'}]",16.16666666,107.83333333,🇻🇳,"U+1F1FB U+1F1F3"
245
+241,"Virgin Islands (British)",VGB,VG,092,+1-284,"Road Town",USD,"United States dollar",$,.vg,"British Virgin Islands",Americas,2,Caribbean,7,"British Virgin Island","[{zoneName:'America\/Tortola',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'AST',tzName:'Atlantic Standard Time'}]",18.43138300,-64.62305000,🇻🇬,"U+1F1FB U+1F1EC"
246
+242,"Virgin Islands (US)",VIR,VI,850,+1-340,"Charlotte Amalie",USD,"United States dollar",$,.vi,"United States Virgin Islands",Americas,2,Caribbean,7,"U.S. Virgin Island","[{zoneName:'America\/St_Thomas',gmtOffset:-14400,gmtOffsetName:'UTC-04:00',abbreviation:'AST',tzName:'Atlantic Standard Time'}]",18.34000000,-64.93000000,🇻🇮,"U+1F1FB U+1F1EE"
247
+243,"Wallis And Futuna Islands",WLF,WF,876,681,"Mata Utu",XPF,"CFP franc",₣,.wf,"Wallis et Futuna",Oceania,5,Polynesia,22,"Wallis and Futuna, Wallisian or Futunan","[{zoneName:'Pacific\/Wallis',gmtOffset:43200,gmtOffsetName:'UTC+12:00',abbreviation:'WFT',tzName:'Wallis & Futuna Time'}]",-13.30000000,-176.20000000,🇼🇫,"U+1F1FC U+1F1EB"
248
+244,"Western Sahara",ESH,EH,732,212,El-Aaiun,MAD,"Moroccan Dirham",MAD,.eh,"الصحراء الغربية",Africa,1,"Northern Africa",1,"Sahrawi, Sahrawian, Sahraouian","[{zoneName:'Africa\/El_Aaiun',gmtOffset:3600,gmtOffsetName:'UTC+01:00',abbreviation:'WEST',tzName:'Western European Summer Time'}]",24.50000000,-13.00000000,🇪🇭,"U+1F1EA U+1F1ED"
249
+245,Yemen,YEM,YE,887,967,Sanaa,YER,"Yemeni rial",﷼,.ye,اليَمَن,Asia,3,"Western Asia",11,Yemeni,"[{zoneName:'Asia\/Aden',gmtOffset:10800,gmtOffsetName:'UTC+03:00',abbreviation:'AST',tzName:'Arabia Standard Time'}]",15.00000000,48.00000000,🇾🇪,"U+1F1FE U+1F1EA"
250
+246,Zambia,ZMB,ZM,894,260,Lusaka,ZMW,"Zambian kwacha",ZK,.zm,Zambia,Africa,1,"Eastern Africa",4,Zambian,"[{zoneName:'Africa\/Lusaka',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'CAT',tzName:'Central Africa Time'}]",-15.00000000,30.00000000,🇿🇲,"U+1F1FF U+1F1F2"
251
+247,Zimbabwe,ZWE,ZW,716,263,Harare,ZWL,"Zimbabwe Dollar",$,.zw,Zimbabwe,Africa,1,"Eastern Africa",4,Zimbabwean,"[{zoneName:'Africa\/Harare',gmtOffset:7200,gmtOffsetName:'UTC+02:00',abbreviation:'CAT',tzName:'Central Africa Time'}]",-20.00000000,30.00000000,🇿🇼,"U+1F1FF U+1F1FC"

+ 5085
- 0
resources/data/states.csv
Dosya farkı çok büyük olduğundan ihmal edildi
Dosyayı Görüntüle


Loading…
İptal
Kaydet